Merge
authorduke
Wed, 05 Jul 2017 20:33:35 +0200
changeset 30519 acc528b46bb8
parent 30518 8bbe109bca14 (current diff)
parent 30510 e6d4d4327d3c (diff)
child 30524 e97c3a12189f
Merge
jdk/src/java.base/share/classes/sun/security/provider/certpath/CertStoreHelper.java
jdk/src/java.base/share/classes/sun/security/provider/certpath/ssl/SSLServerCertStoreHelper.java
jdk/src/java.desktop/unix/classes/sun/awt/motif/MFontConfiguration.java
jdk/src/java.desktop/unix/classes/sun/awt/motif/X11CNS11643.java
jdk/src/java.desktop/unix/classes/sun/awt/motif/X11CNS11643P1.java
jdk/src/java.desktop/unix/classes/sun/awt/motif/X11CNS11643P2.java
jdk/src/java.desktop/unix/classes/sun/awt/motif/X11CNS11643P3.java
jdk/src/java.desktop/unix/classes/sun/awt/motif/X11Dingbats.java
jdk/src/java.desktop/unix/classes/sun/awt/motif/X11GB18030_0.java
jdk/src/java.desktop/unix/classes/sun/awt/motif/X11GB18030_1.java
jdk/src/java.desktop/unix/classes/sun/awt/motif/X11GB2312.java
jdk/src/java.desktop/unix/classes/sun/awt/motif/X11GBK.java
jdk/src/java.desktop/unix/classes/sun/awt/motif/X11JIS0201.java
jdk/src/java.desktop/unix/classes/sun/awt/motif/X11JIS0208.java
jdk/src/java.desktop/unix/classes/sun/awt/motif/X11JIS0212.java
jdk/src/java.desktop/unix/classes/sun/awt/motif/X11Johab.java
jdk/src/java.desktop/unix/classes/sun/awt/motif/X11KSC5601.java
jdk/src/java.desktop/unix/classes/sun/awt/motif/X11SunUnicode_0.java
jdk/src/java.naming/share/classes/sun/security/provider/certpath/ldap/LDAPCertStoreHelper.java
jdk/src/jdk.charsets/share/classes/sun/nio/cs/ext/DoubleByteEncoder.java
jdk/src/jdk.charsets/unix/classes/sun/nio/cs/ext/COMPOUND_TEXT.java
jdk/src/jdk.charsets/unix/classes/sun/nio/cs/ext/COMPOUND_TEXT_Decoder.java
jdk/src/jdk.charsets/unix/classes/sun/nio/cs/ext/COMPOUND_TEXT_Encoder.java
jdk/src/jdk.charsets/unix/classes/sun/nio/cs/ext/CompoundTextSupport.java
jdk/test/java/awt/Component/isLightweightCrash/StubPeerCrash.java
jdk/test/sun/nio/cs/OLD/X11GB2312_OLD.java
jdk/test/sun/nio/cs/OLD/X11GBK_OLD.java
jdk/test/sun/nio/cs/OLD/X11KSC5601_OLD.java
jdk/test/sun/nio/cs/TestCompoundTest.java
jdk/test/sun/nio/cs/TestX11CNS.java
jdk/test/sun/nio/cs/TestX11JIS0201.java
jdk/test/sun/nio/cs/X11CNS11643.java
jdk/test/sun/nio/cs/X11CNS11643P1.java
jdk/test/sun/nio/cs/X11CNS11643P2.java
jdk/test/sun/nio/cs/X11CNS11643P3.java
--- a/.hgtags-top-repo	Thu May 14 20:14:44 2015 -0700
+++ b/.hgtags-top-repo	Wed Jul 05 20:33:35 2017 +0200
@@ -306,3 +306,4 @@
 ea38728b4f4bdd8fd0d7a89b18069f521cf05013 jdk9-b61
 105d045a69174d870b69bfe471b3f2d05a9f8ecc jdk9-b62
 0b32ed628fa60e4ab99fb0b5866d648e16231f17 jdk9-b63
+82cf9aab9a83e41c8194ba01af9666afdb856cbe jdk9-b64
--- a/common/autoconf/basics.m4	Thu May 14 20:14:44 2015 -0700
+++ b/common/autoconf/basics.m4	Wed Jul 05 20:33:35 2017 +0200
@@ -705,9 +705,9 @@
       # is performed.
       filtered_files=`$ECHO "$files_present" \
           | $SED -e 's/config.log//g' \
-	      -e 's/confdefs.h//g' \
-	      -e 's/fixpath.exe//g' \
-	      -e 's/ //g' \
+              -e 's/configure.log//g' \
+              -e 's/confdefs.h//g' \
+              -e 's/ //g' \
           | $TR -d '\n'`
       if test "x$filtered_files" != x; then
         AC_MSG_NOTICE([Current directory is $CURDIR.])
@@ -1054,3 +1054,29 @@
 
   AC_SUBST(BASH_ARGS)
 ])
+
+# Code to run after AC_OUTPUT
+AC_DEFUN_ONCE([BASIC_POST_CONFIG_OUTPUT],
+[
+  # Try to move config.log (generated by autoconf) to the configure-support directory.
+  if test -e ./config.log; then
+    $MV -f ./config.log "$CONFIGURESUPPORT_OUTPUTDIR/config.log" 2> /dev/null
+  fi
+
+  # Rotate our log file (configure.log)
+  if test -e "$OUTPUT_ROOT/configure.log.old"; then
+    $RM -f "$OUTPUT_ROOT/configure.log.old"
+  fi
+  if test -e "$OUTPUT_ROOT/configure.log"; then
+    $MV -f "$OUTPUT_ROOT/configure.log" "$OUTPUT_ROOT/configure.log.old" 2> /dev/null
+  fi
+
+  # Move configure.log from current directory to the build output root
+  if test -e ./configure.log; then
+    echo found it
+    $MV -f ./configure.log "$OUTPUT_ROOT/configure.log" 2> /dev/null
+  fi
+
+  # Make the compare script executable
+  $CHMOD +x $OUTPUT_ROOT/compare.sh
+])
--- a/common/autoconf/configure	Thu May 14 20:14:44 2015 -0700
+++ b/common/autoconf/configure	Wed Jul 05 20:33:35 2017 +0200
@@ -255,13 +255,10 @@
   set -x
 fi
 
-if test "x$conf_debug_configure" = xtrue; then
-  # Turn on logging, but don't turn on twice when called recursive
-  conf_debug_logfile=./debug-configure.log
-  (exec 3>&1 ; (. $conf_script_to_run "${conf_processed_arguments[@]}" 2>&1 1>&3 ) | tee -a $conf_debug_logfile 1>&2 ; exec 3>&-) | tee -a $conf_debug_logfile
-else
-  ( . $conf_script_to_run "${conf_processed_arguments[@]}" )
-fi
+# Now transfer control to the script generated by autoconf. This is where the
+# main work is done.
+conf_logfile=./configure.log
+(exec 3>&1 ; (. $conf_script_to_run "${conf_processed_arguments[@]}" 2>&1 1>&3 ) | tee -a $conf_logfile 1>&2 ; exec 3>&-) | tee -a $conf_logfile
 
 conf_result_code=$?
 ###
--- a/common/autoconf/configure.ac	Thu May 14 20:14:44 2015 -0700
+++ b/common/autoconf/configure.ac	Wed Jul 05 20:33:35 2017 +0200
@@ -265,15 +265,10 @@
 
 # Create the actual output files. Now the main work of configure is done.
 AC_OUTPUT
+
+# After AC_OUTPUT, we need to do final work
 CUSTOM_CONFIG_OUTPUT_GENERATED_HOOK
-
-# Try to move the config.log file to the output directory.
-if test -e ./config.log; then
-  $MV -f ./config.log "$CONFIGURESUPPORT_OUTPUTDIR/config.log" 2> /dev/null
-fi
-
-# Make the compare script executable
-$CHMOD +x $OUTPUT_ROOT/compare.sh
+BASIC_POST_CONFIG_OUTPUT
 
 # Finally output some useful information to the user
 HELP_PRINT_SUMMARY_AND_WARNINGS
--- a/common/autoconf/flags.m4	Thu May 14 20:14:44 2015 -0700
+++ b/common/autoconf/flags.m4	Wed Jul 05 20:33:35 2017 +0200
@@ -231,7 +231,6 @@
 
   AC_SUBST(C_FLAG_REORDER)
   AC_SUBST(CXX_FLAG_REORDER)
-  AC_SUBST(SHARED_LIBRARY_FLAGS)
   AC_SUBST(SET_EXECUTABLE_ORIGIN)
   AC_SUBST(SET_SHARED_LIBRARY_ORIGIN)
   AC_SUBST(SET_SHARED_LIBRARY_NAME)
@@ -524,6 +523,10 @@
   #    CXXFLAGS_JDK  - C++ Compiler flags
   #    COMMON_CCXXFLAGS_JDK - common to C and C++
   if test "x$TOOLCHAIN_TYPE" = xgcc; then
+    if test "x$OPENJDK_TARGET_CPU" = xx86; then
+      # Force compatibility with i586 on 32 bit intel platforms.
+      COMMON_CCXXFLAGS="${COMMON_CCXXFLAGS} -march=i586"
+    fi
     COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS $COMMON_CCXXFLAGS_JDK -Wall -Wextra -Wno-unused -Wno-unused-parameter -Wformat=2 \
         -pipe -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE"
     case $OPENJDK_TARGET_CPU_ARCH in
@@ -900,6 +903,24 @@
       [COMPILER_SUPPORTS_TARGET_BITS_FLAG=false])
   AC_SUBST(COMPILER_SUPPORTS_TARGET_BITS_FLAG)
 
+  AC_ARG_ENABLE([warnings-as-errors], [AS_HELP_STRING([--disable-warnings-as-errors],
+      [do not consider native warnings to be an error @<:@enabled@:>@])])
+
+  AC_MSG_CHECKING([if native warnings are errors])
+  if test "x$enable_warnings_as_errors" = "xyes"; then
+    AC_MSG_RESULT([yes (explicitely set)])
+    WARNINGS_AS_ERRORS=true
+  elif test "x$enable_warnings_as_errors" = "xno"; then
+    AC_MSG_RESULT([no])
+    WARNINGS_AS_ERRORS=false
+  elif test "x$enable_warnings_as_errors" = "x"; then
+    AC_MSG_RESULT([yes (default)])
+    WARNINGS_AS_ERRORS=true
+  else
+    AC_MSG_ERROR([--enable-warnings-as-errors accepts no argument])
+  fi
+  AC_SUBST(WARNINGS_AS_ERRORS)
+
   case "${TOOLCHAIN_TYPE}" in
     microsoft)
       DISABLE_WARNING_PREFIX="-wd"
--- a/common/autoconf/generated-configure.sh	Thu May 14 20:14:44 2015 -0700
+++ b/common/autoconf/generated-configure.sh	Wed Jul 05 20:33:35 2017 +0200
@@ -684,6 +684,7 @@
 ENABLE_DEBUG_SYMBOLS
 CFLAGS_WARNINGS_ARE_ERRORS
 DISABLE_WARNING_PREFIX
+WARNINGS_AS_ERRORS
 COMPILER_SUPPORTS_TARGET_BITS_FLAG
 ZERO_ARCHFLAG
 LDFLAGS_TESTEXE_SUFFIX
@@ -727,7 +728,6 @@
 SET_SHARED_LIBRARY_NAME
 SET_SHARED_LIBRARY_ORIGIN
 SET_EXECUTABLE_ORIGIN
-SHARED_LIBRARY_FLAGS
 CXX_FLAG_REORDER
 C_FLAG_REORDER
 SYSROOT_LDFLAGS
@@ -1086,6 +1086,7 @@
 with_extra_cflags
 with_extra_cxxflags
 with_extra_ldflags
+enable_warnings_as_errors
 enable_debug_symbols
 enable_zip_debug_info
 enable_native_coverage
@@ -1852,6 +1853,9 @@
   --enable-rmiconnector-iiop
                           enable the JMX RMIConnector iiop transport
                           [disabled]
+  --disable-warnings-as-errors
+                          do not consider native warnings to be an error
+                          [enabled]
   --disable-debug-symbols disable generation of debug symbols [enabled]
   --disable-zip-debug-info
                           disable zipping of debug-info files [enabled]
@@ -3496,6 +3500,9 @@
 # Check for support for specific options in bash
 
 
+# Code to run after AC_OUTPUT
+
+
 #
 # Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
 # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -4359,7 +4366,7 @@
 #CUSTOM_AUTOCONF_INCLUDE
 
 # Do not change or remove the following line, it is needed for consistency checks:
-DATE_WHEN_GENERATED=1430918902
+DATE_WHEN_GENERATED=1431429776
 
 ###############################################################################
 #
@@ -15335,9 +15342,9 @@
       # is performed.
       filtered_files=`$ECHO "$files_present" \
           | $SED -e 's/config.log//g' \
-	      -e 's/confdefs.h//g' \
-	      -e 's/fixpath.exe//g' \
-	      -e 's/ //g' \
+              -e 's/configure.log//g' \
+              -e 's/confdefs.h//g' \
+              -e 's/ //g' \
           | $TR -d '\n'`
       if test "x$filtered_files" != x; then
         { $as_echo "$as_me:${as_lineno-$LINENO}: Current directory is $CURDIR." >&5
@@ -41761,7 +41768,6 @@
 
 
 
-
   if test "x$OPENJDK_TARGET_OS" = xsolaris; then
     CFLAGS_JDK="${CFLAGS_JDK} -D__solaris__"
     CXXFLAGS_JDK="${CXXFLAGS_JDK} -D__solaris__"
@@ -42029,6 +42035,10 @@
   #    CXXFLAGS_JDK  - C++ Compiler flags
   #    COMMON_CCXXFLAGS_JDK - common to C and C++
   if test "x$TOOLCHAIN_TYPE" = xgcc; then
+    if test "x$OPENJDK_TARGET_CPU" = xx86; then
+      # Force compatibility with i586 on 32 bit intel platforms.
+      COMMON_CCXXFLAGS="${COMMON_CCXXFLAGS} -march=i586"
+    fi
     COMMON_CCXXFLAGS_JDK="$COMMON_CCXXFLAGS $COMMON_CCXXFLAGS_JDK -Wall -Wextra -Wno-unused -Wno-unused-parameter -Wformat=2 \
         -pipe -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE"
     case $OPENJDK_TARGET_CPU_ARCH in
@@ -42471,6 +42481,31 @@
 
 
 
+  # Check whether --enable-warnings-as-errors was given.
+if test "${enable_warnings_as_errors+set}" = set; then :
+  enableval=$enable_warnings_as_errors;
+fi
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if native warnings are errors" >&5
+$as_echo_n "checking if native warnings are errors... " >&6; }
+  if test "x$enable_warnings_as_errors" = "xyes"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes (explicitely set)" >&5
+$as_echo "yes (explicitely set)" >&6; }
+    WARNINGS_AS_ERRORS=true
+  elif test "x$enable_warnings_as_errors" = "xno"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+    WARNINGS_AS_ERRORS=false
+  elif test "x$enable_warnings_as_errors" = "x"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes (default)" >&5
+$as_echo "yes (default)" >&6; }
+    WARNINGS_AS_ERRORS=true
+  else
+    as_fn_error $? "--enable-warnings-as-errors accepts no argument" "$LINENO" 5
+  fi
+
+
   case "${TOOLCHAIN_TYPE}" in
     microsoft)
       DISABLE_WARNING_PREFIX="-wd"
@@ -54179,14 +54214,31 @@
 fi
 
 
-
-# Try to move the config.log file to the output directory.
-if test -e ./config.log; then
-  $MV -f ./config.log "$CONFIGURESUPPORT_OUTPUTDIR/config.log" 2> /dev/null
-fi
-
-# Make the compare script executable
-$CHMOD +x $OUTPUT_ROOT/compare.sh
+# After AC_OUTPUT, we need to do final work
+
+
+  # Try to move config.log (generated by autoconf) to the configure-support directory.
+  if test -e ./config.log; then
+    $MV -f ./config.log "$CONFIGURESUPPORT_OUTPUTDIR/config.log" 2> /dev/null
+  fi
+
+  # Rotate our log file (configure.log)
+  if test -e "$OUTPUT_ROOT/configure.log.old"; then
+    $RM -f "$OUTPUT_ROOT/configure.log.old"
+  fi
+  if test -e "$OUTPUT_ROOT/configure.log"; then
+    $MV -f "$OUTPUT_ROOT/configure.log" "$OUTPUT_ROOT/configure.log.old" 2> /dev/null
+  fi
+
+  # Move configure.log from current directory to the build output root
+  if test -e ./configure.log; then
+    echo found it
+    $MV -f ./configure.log "$OUTPUT_ROOT/configure.log" 2> /dev/null
+  fi
+
+  # Make the compare script executable
+  $CHMOD +x $OUTPUT_ROOT/compare.sh
+
 
 # Finally output some useful information to the user
 
@@ -54280,14 +54332,20 @@
 
 
 
-if test -e "$OUTPUT_ROOT/config.log"; then
-  $GREP '^configure:.*: WARNING:' "$OUTPUT_ROOT/config.log" > /dev/null 2>&1
-  if test $? -eq 0; then
-    printf "The following warnings were produced. Repeated here for convenience:\n"
-    # We must quote sed expression (using []) to stop m4 from eating the [].
-    $GREP '^configure:.*: WARNING:' "$OUTPUT_ROOT/config.log" | $SED -e  's/^configure:[0-9]*: //'
-    printf "\n"
-  fi
-fi
-
-
+  # Locate config.log.
+  if test -e "$CONFIGURESUPPORT_OUTPUTDIR/config.log"; then
+    CONFIG_LOG_PATH="$CONFIGURESUPPORT_OUTPUTDIR"
+  elif test -e "./config.log"; then
+    CONFIG_LOG_PATH="."
+  fi
+
+  if test -e "$CONFIG_LOG_PATH/config.log"; then
+    $GREP '^configure:.*: WARNING:' "$CONFIG_LOG_PATH/config.log" > /dev/null 2>&1
+    if test $? -eq 0; then
+      printf "The following warnings were produced. Repeated here for convenience:\n"
+      # We must quote sed expression (using []) to stop m4 from eating the [].
+      $GREP '^configure:.*: WARNING:' "$CONFIG_LOG_PATH/config.log" | $SED -e  's/^configure:[0-9]*: //'
+      printf "\n"
+    fi
+  fi
+
--- a/common/autoconf/help.m4	Thu May 14 20:14:44 2015 -0700
+++ b/common/autoconf/help.m4	Wed Jul 05 20:33:35 2017 +0200
@@ -212,7 +212,7 @@
   if test "x$TOOLCHAIN_VERSION" != "x"; then
     print_version=" $TOOLCHAIN_VERSION"
   fi
-  printf "* Toolchain:      $TOOLCHAIN_TYPE ($TOOLCHAIN_DESCRIPTION$print_version)\n" 
+  printf "* Toolchain:      $TOOLCHAIN_TYPE ($TOOLCHAIN_DESCRIPTION$print_version)\n"
   printf "* C Compiler:     Version $CC_VERSION_NUMBER (at $CC)\n"
   printf "* C++ Compiler:   Version $CXX_VERSION_NUMBER (at $CXX)\n"
 
@@ -263,14 +263,20 @@
 
 AC_DEFUN_ONCE([HELP_REPEAT_WARNINGS],
 [
-if test -e "$OUTPUT_ROOT/config.log"; then
-  $GREP '^configure:.*: WARNING:' "$OUTPUT_ROOT/config.log" > /dev/null 2>&1
-  if test $? -eq 0; then
-    printf "The following warnings were produced. Repeated here for convenience:\n"
-    # We must quote sed expression (using []) to stop m4 from eating the [].
-    $GREP '^configure:.*: WARNING:' "$OUTPUT_ROOT/config.log" | $SED -e [ 's/^configure:[0-9]*: //' ]
-    printf "\n"
+  # Locate config.log.
+  if test -e "$CONFIGURESUPPORT_OUTPUTDIR/config.log"; then
+    CONFIG_LOG_PATH="$CONFIGURESUPPORT_OUTPUTDIR"
+  elif test -e "./config.log"; then
+    CONFIG_LOG_PATH="."
   fi
-fi
 
+  if test -e "$CONFIG_LOG_PATH/config.log"; then
+    $GREP '^configure:.*: WARNING:' "$CONFIG_LOG_PATH/config.log" > /dev/null 2>&1
+    if test $? -eq 0; then
+      printf "The following warnings were produced. Repeated here for convenience:\n"
+      # We must quote sed expression (using []) to stop m4 from eating the [].
+      $GREP '^configure:.*: WARNING:' "$CONFIG_LOG_PATH/config.log" | $SED -e [ 's/^configure:[0-9]*: //' ]
+      printf "\n"
+    fi
+  fi
 ])
--- a/common/autoconf/spec.gmk.in	Thu May 14 20:14:44 2015 -0700
+++ b/common/autoconf/spec.gmk.in	Wed Jul 05 20:33:35 2017 +0200
@@ -321,6 +321,9 @@
 DISABLE_WARNING_PREFIX := @DISABLE_WARNING_PREFIX@
 CFLAGS_WARNINGS_ARE_ERRORS:=@CFLAGS_WARNINGS_ARE_ERRORS@
 
+# A global flag (true or false) determining if native warnings are considered errors.
+WARNINGS_AS_ERRORS := @WARNINGS_AS_ERRORS@
+
 CFLAGS_CCACHE:=@CFLAGS_CCACHE@
 
 # Tools that potentially need to be cross compilation aware.
@@ -394,9 +397,6 @@
 
 LIPO:=@LIPO@
 
-# Command to create a shared library
-SHARED_LIBRARY_FLAGS:=@SHARED_LIBRARY_FLAGS@
-
 # Options to linker to specify a mapfile.
 # (Note absence of := assignment, because we do not want to evaluate the macro body here)
 SET_SHARED_LIBRARY_MAPFILE=@SET_SHARED_LIBRARY_MAPFILE@
--- a/corba/.hgtags	Thu May 14 20:14:44 2015 -0700
+++ b/corba/.hgtags	Wed Jul 05 20:33:35 2017 +0200
@@ -306,3 +306,4 @@
 d690f489ca0bb95a6157d996da2fa72bcbcf02ea jdk9-b61
 d27f7e0a7aca129969de23e9934408a31b4abf4c jdk9-b62
 0acac6937de7a0868f8c6f88b7d036d780abeee6 jdk9-b63
+0a5e5a7c3539e8bde73d9fe55750e49a49cb8dac jdk9-b64
--- a/hotspot/.hgtags	Thu May 14 20:14:44 2015 -0700
+++ b/hotspot/.hgtags	Wed Jul 05 20:33:35 2017 +0200
@@ -466,3 +466,4 @@
 715d2da5801c410746e92f08066d53bde1496286 jdk9-b61
 1eab877142cce6ca06e556e2ad0af688f993f00b jdk9-b62
 2ac9b6b36689b50d1562627067c92d51781b5684 jdk9-b63
+bf92b8db249cdfa5651ef954b6c0743a7e0ea4cd jdk9-b64
--- a/hotspot/src/cpu/aarch64/vm/aarch64.ad	Thu May 14 20:14:44 2015 -0700
+++ b/hotspot/src/cpu/aarch64/vm/aarch64.ad	Wed Jul 05 20:33:35 2017 +0200
@@ -810,9 +810,6 @@
   bool unnecessary_volatile(const Node *barrier);
   bool needs_releasing_store(const Node *store);
 
-  // Use barrier instructions rather than load acquire / store
-  // release.
-  const bool UseBarriersForVolatile = false;
   // Use barrier instructions for unsafe volatile gets rather than
   // trying to identify an exact signature for them
   const bool UseBarriersForUnsafeVolatileGet = false;
--- a/hotspot/src/cpu/aarch64/vm/globals_aarch64.hpp	Thu May 14 20:14:44 2015 -0700
+++ b/hotspot/src/cpu/aarch64/vm/globals_aarch64.hpp	Wed Jul 05 20:33:35 2017 +0200
@@ -98,8 +98,8 @@
   product(bool, NearCpool, true,                                        \
          "constant pool is close to instructions")                      \
                                                                         \
-  notproduct(bool, UseAcqRelForVolatileFields, false,                   \
-             "Use acquire and release insns for volatile fields")       \
+  product(bool, UseBarriersForVolatile, false,                          \
+          "Use memory barriers to implement volatile accesses")         \
                                                                         \
   product(bool, UseCRC32, false,                                        \
           "Use CRC32 instructions for CRC32 computation")               \
@@ -117,8 +117,8 @@
   product(bool, NearCpool, true,                                        \
          "constant pool is close to instructions")                      \
                                                                         \
-  notproduct(bool, UseAcqRelForVolatileFields, false,                   \
-             "Use acquire and release insns for volatile fields")       \
+  product(bool, UseBarriersForVolatile, false,                          \
+          "Use memory barriers to implement volatile accesses")         \
   product(bool, UseNeon, false,                                         \
           "Use Neon for CRC32 computation")                             \
   product(bool, UseCRC32, false,                                        \
--- a/hotspot/src/cpu/aarch64/vm/interp_masm_aarch64.cpp	Thu May 14 20:14:44 2015 -0700
+++ b/hotspot/src/cpu/aarch64/vm/interp_masm_aarch64.cpp	Wed Jul 05 20:33:35 2017 +0200
@@ -1314,7 +1314,7 @@
     // case_array_offset_in_bytes()
     movw(reg2, in_bytes(MultiBranchData::per_case_size()));
     movw(rscratch1, in_bytes(MultiBranchData::case_array_offset()));
-    maddw(index, index, reg2, rscratch1);
+    Assembler::maddw(index, index, reg2, rscratch1);
 
     // Update the case count
     increment_mdp_data_at(mdp,
--- a/hotspot/src/cpu/aarch64/vm/macroAssembler_aarch64.cpp	Thu May 14 20:14:44 2015 -0700
+++ b/hotspot/src/cpu/aarch64/vm/macroAssembler_aarch64.cpp	Wed Jul 05 20:33:35 2017 +0200
@@ -1625,7 +1625,7 @@
     sdivw(result, ra, rb);
   } else {
     sdivw(scratch, ra, rb);
-    msubw(result, scratch, rb, ra);
+    Assembler::msubw(result, scratch, rb, ra);
   }
 
   return idivl_offset;
@@ -1655,7 +1655,7 @@
     sdiv(result, ra, rb);
   } else {
     sdiv(scratch, ra, rb);
-    msub(result, scratch, rb, ra);
+    Assembler::msub(result, scratch, rb, ra);
   }
 
   return idivq_offset;
@@ -3787,14 +3787,6 @@
   }
 }
 
-  bool MacroAssembler::use_acq_rel_for_volatile_fields() {
-#ifdef PRODUCT
-    return false;
-#else
-    return UseAcqRelForVolatileFields;
-#endif
-  }
-
 void MacroAssembler::build_frame(int framesize) {
   if (framesize == 0) {
     // Is this even possible?
--- a/hotspot/src/cpu/aarch64/vm/macroAssembler_aarch64.hpp	Thu May 14 20:14:44 2015 -0700
+++ b/hotspot/src/cpu/aarch64/vm/macroAssembler_aarch64.hpp	Wed Jul 05 20:33:35 2017 +0200
@@ -405,6 +405,18 @@
     umaddl(Rd, Rn, Rm, zr);
   }
 
+#define WRAP(INSN)                                                            \
+  void INSN(Register Rd, Register Rn, Register Rm, Register Ra) {             \
+    if ((VM_Version::cpu_cpuFeatures() & VM_Version::CPU_A53MAC) && Ra != zr) \
+      nop();                                                                  \
+    Assembler::INSN(Rd, Rn, Rm, Ra);                                          \
+  }
+
+  WRAP(madd) WRAP(msub) WRAP(maddw) WRAP(msubw)
+  WRAP(smaddl) WRAP(smsubl) WRAP(umaddl) WRAP(umsubl)
+#undef WRAP
+
+
   // macro assembly operations needed for aarch64
 
   // first two private routines for loading 32 bit or 64 bit constants
@@ -1094,9 +1106,6 @@
   address read_polling_page(Register r, address page, relocInfo::relocType rtype);
   address read_polling_page(Register r, relocInfo::relocType rtype);
 
-  // Used by aarch64.ad to control code generation
-  static bool use_acq_rel_for_volatile_fields();
-
   // CRC32 code for java.util.zip.CRC32::updateBytes() instrinsic.
   void update_byte_crc32(Register crc, Register val, Register table);
   void update_word_crc32(Register crc, Register v, Register tmp,
@@ -1150,10 +1159,6 @@
                             int offset, int size);
 };
 
-// Used by aarch64.ad to control code generation
-#define treat_as_volatile(MEM_NODE)                                     \
-  (MacroAssembler::use_acq_rel_for_volatile_fields() ? (MEM_NODE)->is_volatile() : false)
-
 #ifdef ASSERT
 inline bool AbstractAssembler::pd_check_instruction_mark() { return false; }
 #endif
--- a/hotspot/src/cpu/aarch64/vm/vm_version_aarch64.cpp	Thu May 14 20:14:44 2015 -0700
+++ b/hotspot/src/cpu/aarch64/vm/vm_version_aarch64.cpp	Wed Jul 05 20:33:35 2017 +0200
@@ -59,6 +59,9 @@
 
 int VM_Version::_cpu;
 int VM_Version::_model;
+int VM_Version::_model2;
+int VM_Version::_variant;
+int VM_Version::_revision;
 int VM_Version::_stepping;
 int VM_Version::_cpuFeatures;
 const char*           VM_Version::_features_str = "";
@@ -122,13 +125,47 @@
 
   char buf[512];
 
-  strcpy(buf, "simd");
+  _cpuFeatures = auxv;
+
+  int cpu_lines = 0;
+  if (FILE *f = fopen("/proc/cpuinfo", "r")) {
+    char buf[128], *p;
+    while (fgets(buf, sizeof (buf), f) != NULL) {
+      if (p = strchr(buf, ':')) {
+        long v = strtol(p+1, NULL, 0);
+        if (strncmp(buf, "CPU implementer", sizeof "CPU implementer" - 1) == 0) {
+          _cpu = v;
+          cpu_lines++;
+        } else if (strncmp(buf, "CPU variant", sizeof "CPU variant" - 1) == 0) {
+          _variant = v;
+        } else if (strncmp(buf, "CPU part", sizeof "CPU part" - 1) == 0) {
+          if (_model != v)  _model2 = _model;
+          _model = v;
+        } else if (strncmp(buf, "CPU revision", sizeof "CPU revision" - 1) == 0) {
+          _revision = v;
+        }
+      }
+    }
+    fclose(f);
+  }
+
+  // Enable vendor specific features
+  if (_cpu == CPU_CAVIUM && _variant == 0) _cpuFeatures |= CPU_DMB_ATOMICS;
+  if (_cpu == CPU_ARM && (_model == 0xd03 || _model2 == 0xd03)) _cpuFeatures |= CPU_A53MAC;
+  // If an olde style /proc/cpuinfo (cpu_lines == 1) then if _model is an A57 (0xd07)
+  // we assume the worst and assume we could be on a big little system and have
+  // undisclosed A53 cores which we could be swapped to at any stage
+  if (_cpu == CPU_ARM && cpu_lines == 1 && _model == 0xd07) _cpuFeatures |= CPU_A53MAC;
+
+  sprintf(buf, "0x%02x:0x%x:0x%03x:%d", _cpu, _variant, _model, _revision);
+  if (_model2) sprintf(buf+strlen(buf), "(0x%03x)", _model2);
+  if (auxv & HWCAP_ASIMD) strcat(buf, ", simd");
   if (auxv & HWCAP_CRC32) strcat(buf, ", crc");
   if (auxv & HWCAP_AES)   strcat(buf, ", aes");
   if (auxv & HWCAP_SHA1)  strcat(buf, ", sha1");
   if (auxv & HWCAP_SHA2)  strcat(buf, ", sha256");
 
-  _features_str = strdup(buf);
+  _features_str = os::strdup(buf);
 
   if (FLAG_IS_DEFAULT(UseCRC32)) {
     UseCRC32 = (auxv & HWCAP_CRC32) != 0;
@@ -202,6 +239,10 @@
     UseMultiplyToLenIntrinsic = true;
   }
 
+  if (FLAG_IS_DEFAULT(UseBarriersForVolatile)) {
+    UseBarriersForVolatile = (_cpuFeatures & CPU_DMB_ATOMICS) != 0;
+  }
+
 #ifdef COMPILER2
   if (FLAG_IS_DEFAULT(OptoScheduling)) {
     OptoScheduling = true;
--- a/hotspot/src/cpu/aarch64/vm/vm_version_aarch64.hpp	Thu May 14 20:14:44 2015 -0700
+++ b/hotspot/src/cpu/aarch64/vm/vm_version_aarch64.hpp	Wed Jul 05 20:33:35 2017 +0200
@@ -34,6 +34,9 @@
 protected:
   static int _cpu;
   static int _model;
+  static int _model2;
+  static int _variant;
+  static int _revision;
   static int _stepping;
   static int _cpuFeatures;     // features returned by the "cpuid" instruction
                                // 0 if this instruction is not available
@@ -49,7 +52,40 @@
   static void assert_is_initialized() {
   }
 
+  enum {
+    CPU_ARM       = 'A',
+    CPU_BROADCOM  = 'B',
+    CPU_CAVIUM    = 'C',
+    CPU_DEC       = 'D',
+    CPU_INFINEON  = 'I',
+    CPU_MOTOROLA  = 'M',
+    CPU_NVIDIA    = 'N',
+    CPU_AMCC      = 'P',
+    CPU_QUALCOM   = 'Q',
+    CPU_MARVELL   = 'V',
+    CPU_INTEL     = 'i',
+  } cpuFamily;
+
+  enum {
+    CPU_FP           = (1<<0),
+    CPU_ASIMD        = (1<<1),
+    CPU_EVTSTRM      = (1<<2),
+    CPU_AES          = (1<<3),
+    CPU_PMULL        = (1<<4),
+    CPU_SHA1         = (1<<5),
+    CPU_SHA2         = (1<<6),
+    CPU_CRC32        = (1<<7),
+    CPU_A53MAC       = (1 << 30),
+    CPU_DMB_ATOMICS  = (1 << 31),
+  } cpuFeatureFlags;
+
   static const char* cpu_features()           { return _features_str; }
+  static int cpu_family()                     { return _cpu; }
+  static int cpu_model()                      { return _model; }
+  static int cpu_model2()                     { return _model2; }
+  static int cpu_variant()                    { return _variant; }
+  static int cpu_revision()                   { return _revision; }
+  static int cpu_cpuFeatures()                { return _cpuFeatures; }
 
 };
 
--- a/jdk/.hgtags	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/.hgtags	Wed Jul 05 20:33:35 2017 +0200
@@ -306,3 +306,4 @@
 da84dcac1b0b12c5b836b05ac75ecbfadee0cd32 jdk9-b61
 49118e68fbd4cc0044e718c47db681946d5efd69 jdk9-b62
 fd3281c400347088b36aeb16273aa679d53a81a4 jdk9-b63
+7de8d036ad0980d988d1b9b4b4e6be555d9fbf98 jdk9-b64
--- a/jdk/make/CompileDemos.gmk	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/make/CompileDemos.gmk	Wed Jul 05 20:33:35 2017 +0200
@@ -396,7 +396,7 @@
   $(eval $(call SetupNativeCompilation,BUILD_LIBPOLLER, \
       SRC := $(DEMO_SOLARIS_SRC)/jni/Poller, \
       OPTIMIZATION := LOW, \
-      CFLAGS := $(CFLAGS_JDKLIB) $(SHARED_LIBRARY_FLAGS) \
+      CFLAGS := $(CFLAGS_JDKLIB) \
           -I$(SUPPORT_OUTPUTDIR)/demo/classes/jni/Poller, \
       LDFLAGS := $(LDFLAGS_JDKLIB), \
       LDFLAGS_SUFFIX_solaris := -lc, \
--- a/jdk/make/data/charsetmapping/charsets	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/make/data/charsetmapping/charsets	Wed Jul 05 20:33:35 2017 +0200
@@ -1833,10 +1833,3 @@
 ##
 ########################################################
  
-charset x-COMPOUND_TEXT COMPOUND_TEXT
-    package sun.nio.cs.ext
-    type    source
-    os      unix
-    alias   COMPOUND_TEXT       # JDK historical
-    alias   x11-compound_text
-    alias   x-compound-text
--- a/jdk/make/launcher/Launcher-jdk.accessibility.gmk	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/make/launcher/Launcher-jdk.accessibility.gmk	Wed Jul 05 20:33:35 2017 +0200
@@ -39,7 +39,7 @@
       CFLAGS := $(filter-out -Zc:wchar_t-, $(CFLAGS_JDKEXE)) -Zc:wchar_t \
           -analyze- -Od -Gd -D_WINDOWS \
           -D_UNICODE -DUNICODE -RTC1 -EHsc, \
-      DISABLED_WARNINGS_microsoft := 4267, \
+      DISABLED_WARNINGS_microsoft := 4267 4996, \
       LDFLAGS := $(LDFLAGS_JDKEXE) \
           Advapi32.lib Version.lib User32.lib, \
       OBJECT_DIR := $(SUPPORT_OUTPUTDIR)/native/jdk.accessibility/jabswitch, \
--- a/jdk/make/launcher/Launcher-jdk.pack200.gmk	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/make/launcher/Launcher-jdk.pack200.gmk	Wed Jul 05 20:33:35 2017 +0200
@@ -84,6 +84,7 @@
     CFLAGS_linux := -fPIC, \
     CFLAGS_solaris := -KPIC, \
     CFLAGS_macosx := -fPIC, \
+    DISABLED_WARNINGS_gcc := unused-result, \
     MAPFILE := $(UNPACK_MAPFILE),\
     LDFLAGS := $(UNPACKEXE_ZIPOBJS) \
         $(LDFLAGS_JDKEXE) $(LDFLAGS_CXX_JDK) \
--- a/jdk/make/lib/Awt2dLibraries.gmk	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/make/lib/Awt2dLibraries.gmk	Wed Jul 05 20:33:35 2017 +0200
@@ -246,9 +246,10 @@
     CFLAGS := $(CFLAGS_JDKLIB) $(LIBAWT_CFLAGS), \
     DISABLED_WARNINGS_gcc := sign-compare unused-result maybe-uninitialized \
         format-nonliteral parentheses, \
-    DISABLED_WARNINGS_clang := logical-op-parentheses, \
+    DISABLED_WARNINGS_clang := logical-op-parentheses extern-initializer, \
     DISABLED_WARNINGS_solstudio := E_DECLARATION_IN_CODE, \
-    DISABLED_WARNINGS_microsoft := 4297 4244 4267, \
+    DISABLED_WARNINGS_microsoft := 4297 4244 4267 4996, \
+    WARNINGS_AS_ERRORS_gcc := false, \
     ASFLAGS := $(LIBAWT_ASFLAGS), \
     MAPFILE := $(LIBAWT_MAPFILE), \
     LDFLAGS := $(LDFLAGS_JDKLIB) $(call SET_SHARED_LIBRARY_ORIGIN), \
@@ -357,6 +358,7 @@
             format-security int-to-pointer-cast parentheses, \
         DISABLED_WARNINGS_solstudio := E_DECLARATION_IN_CODE \
             E_ASSIGNMENT_TYPE_MISMATCH E_NON_CONST_INIT, \
+        WARNINGS_AS_ERRORS_gcc := false, \
         MAPFILE := $(JDK_TOPDIR)/make/mapfiles/libawt_xawt/mapfile-vers, \
         LDFLAGS := $(LDFLAGS_JDKLIB) \
             $(X_LIBS) $(LIBAWT_XAWT_LDFLAGS) \
@@ -408,11 +410,11 @@
     INCLUDE_FILES := $(BUILD_LIBLCMS_INCLUDE_FILES), \
     OPTIMIZATION := HIGHEST, \
     CFLAGS := $(filter-out -xc99=%none, $(CFLAGS_JDKLIB)) \
-        $(SHARED_LIBRARY_FLAGS) $(LIBLCMS_CPPFLAGS) \
+        $(LIBLCMS_CPPFLAGS) \
         $(LCMS_CFLAGS), \
     CFLAGS_solaris := -xc99=no_lib, \
     CFLAGS_windows := -DCMS_IS_WINDOWS_, \
-    DISABLED_WARNINGS_gcc := format-nonliteral, \
+    DISABLED_WARNINGS_gcc := format-nonliteral type-limits, \
     DISABLED_WARNINGS_clang := tautological-compare, \
     DISABLED_WARNINGS_solstudio := E_STATEMENT_NOT_REACHED, \
     MAPFILE := $(JDK_TOPDIR)/make/mapfiles/liblcms/mapfile-vers, \
@@ -647,10 +649,13 @@
     OPTIMIZATION := $(LIBFONTMANAGER_OPTIMIZATION), \
     CFLAGS_windows = -DCC_NOEX, \
     DISABLED_WARNINGS_gcc := sign-compare int-to-pointer-cast reorder \
-        delete-non-virtual-dtor, \
-    DISABLED_WARNINGS_clang := unused-value incompatible-pointer-types, \
+        delete-non-virtual-dtor type-limits, \
+    DISABLED_WARNINGS_clang := unused-value incompatible-pointer-types \
+        tautological-constant-out-of-range-compare int-to-pointer-cast, \
     DISABLED_WARNINGS_solstudio := truncwarn, \
-    DISABLED_WARNINGS_microsoft := 4267 4244 4018 4090, \
+    DISABLED_WARNINGS_microsoft := 4267 4244 4018 4090 4996 4146, \
+    WARNINGS_AS_ERRORS_gcc := false, \
+    WARNINGS_AS_ERRORS_solstudio := false, \
     MAPFILE := $(BUILD_LIBFONTMANAGER_MAPFILE), \
     LDFLAGS := $(subst -Xlinker -z -Xlinker defs,,$(LDFLAGS_JDKLIB)) $(LDFLAGS_CXX_JDK) \
         $(call SET_SHARED_LIBRARY_ORIGIN), \
@@ -880,10 +885,10 @@
       OPTIMIZATION := LOW, \
       CFLAGS := $(LIBSPLASHSCREEN_CFLAGS) $(CFLAGS_JDKLIB) \
                 $(GIFLIB_CFLAGS) $(LIBJPEG_CFLAGS) $(PNG_CFLAGS), \
-      DISABLED_WARNINGS_gcc := type-limits unused-result maybe-uninitialized, \
+      DISABLED_WARNINGS_gcc := sign-compare type-limits unused-result maybe-uninitialized, \
       DISABLED_WARNINGS_clang := incompatible-pointer-types, \
-      DISABLED_WARNINGS_solstudio := E_NEWLINE_NOT_LAST, \
-      DISABLED_WARNINGS_microsoft := 4244 4267, \
+      DISABLED_WARNINGS_solstudio := E_NEWLINE_NOT_LAST E_DECLARATION_IN_CODE, \
+      DISABLED_WARNINGS_microsoft := 4018 4244 4267, \
       MAPFILE := $(JDK_TOPDIR)/make/mapfiles/libsplashscreen/mapfile-vers, \
       LDFLAGS := $(LDFLAGS_JDKLIB) \
           $(call SET_SHARED_LIBRARY_ORIGIN), \
@@ -956,6 +961,7 @@
       DISABLED_WARNINGS_clang := incomplete-implementation \
           deprecated-declarations objc-method-access bitwise-op-parentheses \
           incompatible-pointer-types parentheses-equality extra-tokens, \
+      WARNINGS_AS_ERRORS_clang := false, \
       LDFLAGS := $(LDFLAGS_JDKLIB) \
           $(call SET_SHARED_LIBRARY_ORIGIN) \
           -L$(INSTALL_LIBRARIES_HERE), \
--- a/jdk/make/lib/CoreLibraries.gmk	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/make/lib/CoreLibraries.gmk	Wed Jul 05 20:33:35 2017 +0200
@@ -149,7 +149,8 @@
     DISABLED_WARNINGS_gcc := type-limits format-nonliteral, \
     DISABLED_WARNINGS_clang := int-conversion, \
     DISABLED_WARNINGS_solstudio := E_DECLARATION_IN_CODE, \
-    DISABLED_WARNINGS_microsoft := 4022 4267, \
+    DISABLED_WARNINGS_microsoft := 4022 4267 4996, \
+    WARNINGS_AS_ERRORS_solstudio := false, \
     MAPFILE := $(JDK_TOPDIR)/make/mapfiles/libjava/mapfile-vers, \
     LDFLAGS := $(LDFLAGS_JDKLIB) \
         $(call SET_SHARED_LIBRARY_ORIGIN), \
--- a/jdk/make/lib/Lib-jdk.crypto.ucrypto.gmk	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/make/lib/Lib-jdk.crypto.ucrypto.gmk	Wed Jul 05 20:33:35 2017 +0200
@@ -38,6 +38,7 @@
       OPTIMIZATION := LOW, \
       CFLAGS := $(CFLAGS_JDKLIB) \
           $(addprefix -I, $(LIBJ2UCRYPTO_SRC)), \
+      DISABLED_WARNINGS_solstudio := E_MACRO_REDEFINED, \
       MAPFILE := $(JDK_TOPDIR)/make/mapfiles/libj2ucrypto/mapfile-vers, \
       LDFLAGS := $(LDFLAGS_JDKLIB), \
       LDFLAGS_SUFFIX := $(LIBDL), \
--- a/jdk/make/lib/NetworkingLibraries.gmk	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/make/lib/NetworkingLibraries.gmk	Wed Jul 05 20:33:35 2017 +0200
@@ -34,7 +34,7 @@
         $(LIBJAVA_HEADER_FLAGS) $(addprefix -I, $(LIBNET_SRC_DIRS)), \
     DISABLED_WARNINGS_gcc := format-nonliteral, \
     DISABLED_WARNINGS_clang := parentheses-equality constant-logical-operand, \
-    DISABLED_WARNINGS_microsoft := 4244 4047 4133, \
+    DISABLED_WARNINGS_microsoft := 4244 4047 4133 4996, \
     MAPFILE := $(JDK_TOPDIR)/make/mapfiles/libnet/mapfile-vers, \
     LDFLAGS := $(LDFLAGS_JDKLIB) \
         $(call SET_SHARED_LIBRARY_ORIGIN), \
--- a/jdk/make/lib/NioLibraries.gmk	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/make/lib/NioLibraries.gmk	Wed Jul 05 20:33:35 2017 +0200
@@ -70,7 +70,7 @@
         $(BUILD_LIBNIO_CFLAGS), \
     DISABLED_WARNINGS_gcc := type-limits, \
     DISABLED_WARNINGS_clang := tautological-compare, \
-    DISABLED_WARNINGS_microsoft := 4244, \
+    DISABLED_WARNINGS_microsoft := 4244 4996, \
     MAPFILE := $(BUILD_LIBNIO_MAPFILE), \
     LDFLAGS := $(LDFLAGS_JDKLIB) $(BUILD_LIBNIO_LDFLAGS) \
         $(call SET_SHARED_LIBRARY_ORIGIN), \
--- a/jdk/make/lib/SoundLibraries.gmk	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/make/lib/SoundLibraries.gmk	Wed Jul 05 20:33:35 2017 +0200
@@ -111,10 +111,6 @@
   LIBJSOUND_SRC_FILES += $(LIBJSOUND_DAUDIOFILES)
 endif # OPENJDK_TARGET_OS solaris
 
-
-  ifeq ($(OPENJDK_TARGET_CPU), aarch64)
-       LIBJSOUND_CFLAGS += -DX_ARCH=X_AARCH64
-  endif
 LIBJSOUND_CFLAGS += -DEXTRA_SOUND_JNI_LIBS='"$(EXTRA_SOUND_JNI_LIBS)"'
 
 $(eval $(call SetupNativeCompilation,BUILD_LIBJSOUND, \
@@ -129,6 +125,7 @@
     CXXFLAGS := $(CXXFLAGS_JDKLIB) $(LIBJSOUND_CFLAGS), \
     DISABLED_WARNINGS_clang := implicit-function-declaration \
         deprecated-writable-strings, \
+    WARNINGS_AS_ERRORS_clang := false, \
     MAPFILE := $(JDK_TOPDIR)/make/mapfiles/libjsound/mapfile-vers, \
     LDFLAGS := $(LDFLAGS_JDKLIB) \
         $(call SET_SHARED_LIBRARY_ORIGIN), \
--- a/jdk/src/java.base/macosx/native/libjli/java_md_macosx.c	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.base/macosx/native/libjli/java_md_macosx.c	Wed Jul 05 20:33:35 2017 +0200
@@ -948,8 +948,15 @@
     jmethodID getCanonicalNameMID = NULL;
     NULL_CHECK(getCanonicalNameMID = (*env)->GetMethodID(env, classClass, "getCanonicalName", "()Ljava/lang/String;"));
 
-    jstring mainClassString = NULL;
-    NULL_CHECK(mainClassString = (*env)->CallObjectMethod(env, mainClass, getCanonicalNameMID));
+    jstring mainClassString = (*env)->CallObjectMethod(env, mainClass, getCanonicalNameMID);
+    if ((*env)->ExceptionCheck(env)) {
+        /*
+         * Clears all errors caused by getCanonicalName() on the mainclass and
+         * leaves the JAVA_MAIN_CLASS__<pid> empty.
+         */
+        (*env)->ExceptionClear(env);
+        return;
+    }
 
     const char *mainClassName = NULL;
     NULL_CHECK(mainClassName = (*env)->GetStringUTFChars(env, mainClassString, NULL));
@@ -1056,7 +1063,7 @@
  * Note the jvmInstance must be initialized first before entering into
  * ShowSplashScreen, as there is a callback into the JLI_GetJavaVMInstance.
  */
-void PostJVMInit(JNIEnv *env, jstring mainClass, JavaVM *vm) {
+void PostJVMInit(JNIEnv *env, jclass mainClass, JavaVM *vm) {
     jvmInstance = vm;
     SetMainClassForAWT(env, mainClass);
     CHECK_EXCEPTION_RETURN();
--- a/jdk/src/java.base/share/classes/java/io/BufferedReader.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.base/share/classes/java/io/BufferedReader.java	Wed Jul 05 20:33:35 2017 +0200
@@ -272,6 +272,7 @@
      *             stream has been reached
      *
      * @exception  IOException  If an I/O error occurs
+     * @exception  IndexOutOfBoundsException {@inheritDoc}
      */
     public int read(char cbuf[], int off, int len) throws IOException {
         synchronized (lock) {
--- a/jdk/src/java.base/share/classes/java/io/CharArrayReader.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.base/share/classes/java/io/CharArrayReader.java	Wed Jul 05 20:33:35 2017 +0200
@@ -116,6 +116,7 @@
      *          the end of the stream has been reached
      *
      * @exception   IOException  If an I/O error occurs
+     * @exception   IndexOutOfBoundsException {@inheritDoc}
      */
     public int read(char b[], int off, int len) throws IOException {
         synchronized (lock) {
--- a/jdk/src/java.base/share/classes/java/io/FilterReader.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.base/share/classes/java/io/FilterReader.java	Wed Jul 05 20:33:35 2017 +0200
@@ -69,6 +69,7 @@
      * Reads characters into a portion of an array.
      *
      * @exception  IOException  If an I/O error occurs
+     * @exception  IndexOutOfBoundsException {@inheritDoc}
      */
     public int read(char cbuf[], int off, int len) throws IOException {
         return in.read(cbuf, off, len);
--- a/jdk/src/java.base/share/classes/java/io/InputStreamReader.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.base/share/classes/java/io/InputStreamReader.java	Wed Jul 05 20:33:35 2017 +0200
@@ -179,6 +179,7 @@
      *             stream has been reached
      *
      * @exception  IOException  If an I/O error occurs
+     * @exception  IndexOutOfBoundsException {@inheritDoc}
      */
     public int read(char cbuf[], int offset, int length) throws IOException {
         return sd.read(cbuf, offset, length);
--- a/jdk/src/java.base/share/classes/java/io/LineNumberReader.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.base/share/classes/java/io/LineNumberReader.java	Wed Jul 05 20:33:35 2017 +0200
@@ -159,6 +159,8 @@
      *
      * @throws  IOException
      *          If an I/O error occurs
+     *
+     * @throws  IndexOutOfBoundsException {@inheritDoc}
      */
     @SuppressWarnings("fallthrough")
     public int read(char cbuf[], int off, int len) throws IOException {
--- a/jdk/src/java.base/share/classes/java/io/PipedReader.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.base/share/classes/java/io/PipedReader.java	Wed Jul 05 20:33:35 2017 +0200
@@ -286,6 +286,7 @@
      *                  <a href=PipedInputStream.html#BROKEN> <code>broken</code></a>,
      *                  {@link #connect(java.io.PipedWriter) unconnected}, closed,
      *                  or an I/O error occurs.
+     * @exception  IndexOutOfBoundsException {@inheritDoc}
      */
     public synchronized int read(char cbuf[], int off, int len)  throws IOException {
         if (!connected) {
--- a/jdk/src/java.base/share/classes/java/io/PushbackReader.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.base/share/classes/java/io/PushbackReader.java	Wed Jul 05 20:33:35 2017 +0200
@@ -102,6 +102,7 @@
      *             stream has been reached
      *
      * @exception  IOException  If an I/O error occurs
+     * @exception  IndexOutOfBoundsException {@inheritDoc}
      */
     public int read(char cbuf[], int off, int len) throws IOException {
         synchronized (lock) {
--- a/jdk/src/java.base/share/classes/java/io/Reader.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.base/share/classes/java/io/Reader.java	Wed Jul 05 20:33:35 2017 +0200
@@ -153,6 +153,9 @@
      *             stream has been reached
      *
      * @exception  IOException  If an I/O error occurs
+     * @exception  IndexOutOfBoundsException
+     *             If {@code off} is negative, or {@code len} is negative,
+     *             or {@code len} is greater than {@code cbuf.length - off}
      */
     abstract public int read(char cbuf[], int off, int len) throws IOException;
 
--- a/jdk/src/java.base/share/classes/java/io/StringReader.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.base/share/classes/java/io/StringReader.java	Wed Jul 05 20:33:35 2017 +0200
@@ -84,6 +84,7 @@
      *             stream has been reached
      *
      * @exception  IOException  If an I/O error occurs
+     * @exception  IndexOutOfBoundsException {@inheritDoc}
      */
     public int read(char cbuf[], int off, int len) throws IOException {
         synchronized (lock) {
--- a/jdk/src/java.base/share/classes/java/lang/annotation/Documented.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.base/share/classes/java/lang/annotation/Documented.java	Wed Jul 05 20:33:35 2017 +0200
@@ -26,12 +26,24 @@
 package java.lang.annotation;
 
 /**
- * Indicates that annotations with a type are to be documented by javadoc
- * and similar tools by default.  This type should be used to annotate the
- * declarations of types whose annotations affect the use of annotated
- * elements by their clients.  If a type declaration is annotated with
- * Documented, its annotations become part of the public API
- * of the annotated elements.
+ * If the annotation {@code @Documented} is present on the declaration
+ * of an annotation type <i>A</i>, then any {@code @A} annotation on
+ * an element is considered part of the element's public contract.
+ *
+ * In more detail, when an annotation type <i>A</i> is annotated with
+ * {@code Documented}, the presence and value of annotations of type
+ * <i>A</i> are a part of the public contract of the elements <i>A</i>
+ * annotates.
+ *
+ * Conversely, if an annotation type <i>B</i> is <em>not</em>
+ * annotated with {@code Documented}, the presence and value of
+ * <i>B</i> annotations are <em>not</em> part of the public contract
+ * of the elements <i>B</i> annotates.
+ *
+ * Concretely, if an annotation type is annotated with {@code
+ * Documented}, by default a tool like javadoc will display
+ * annotations of that type in its output while annotations of
+ * annotation types without {@code Documented} will not be displayed.
  *
  * @author  Joshua Bloch
  * @since 1.5
--- a/jdk/src/java.base/share/classes/java/security/Policy.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.base/share/classes/java/security/Policy.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -49,7 +49,8 @@
  * implementation (a default subclass implementation of this abstract class).
  * The default Policy implementation can be changed by setting the value
  * of the {@code policy.provider} security property to the fully qualified
- * name of the desired Policy subclass implementation.
+ * name of the desired Policy subclass implementation. The system class loader
+ * is used to load this class.
  *
  * <p> Application code can directly subclass Policy to provide a custom
  * implementation.  In addition, an instance of a Policy object can be
@@ -111,6 +112,10 @@
 
     private static final Debug debug = Debug.getInstance("policy");
 
+    // Default policy provider
+    private static final String DEFAULT_POLICY =
+        "sun.security.provider.PolicyFile";
+
     // Cache mapping ProtectionDomain.Key to PermissionCollection
     private WeakHashMap<ProtectionDomain.Key, PermissionCollection> pdMapping;
 
@@ -169,74 +174,7 @@
             synchronized (Policy.class) {
                 PolicyInfo pinfo = policy.get();
                 if (pinfo.policy == null) {
-                    String policy_class = AccessController.doPrivileged(
-                        new PrivilegedAction<>() {
-                        public String run() {
-                            return Security.getProperty("policy.provider");
-                        }
-                    });
-                    if (policy_class == null) {
-                        policy_class = "sun.security.provider.PolicyFile";
-                    }
-
-                    try {
-                        pinfo = new PolicyInfo(
-                            (Policy) Class.forName(policy_class).newInstance(),
-                            true);
-                    } catch (Exception e) {
-                        /*
-                         * The policy_class seems to be an extension
-                         * so we have to bootstrap loading it via a policy
-                         * provider that is on the bootclasspath.
-                         * If it loads then shift gears to using the configured
-                         * provider.
-                         */
-
-                        // install the bootstrap provider to avoid recursion
-                        Policy polFile = new sun.security.provider.PolicyFile();
-                        pinfo = new PolicyInfo(polFile, false);
-                        policy.set(pinfo);
-
-                        final String pc = policy_class;
-                        Policy pol = AccessController.doPrivileged(
-                            new PrivilegedAction<>() {
-                            public Policy run() {
-                                try {
-                                    ClassLoader cl =
-                                            ClassLoader.getSystemClassLoader();
-                                    // we want the extension loader
-                                    ClassLoader extcl = null;
-                                    while (cl != null) {
-                                        extcl = cl;
-                                        cl = cl.getParent();
-                                    }
-                                    return (extcl != null ? (Policy)Class.forName(
-                                            pc, true, extcl).newInstance() : null);
-                                } catch (Exception e) {
-                                    if (debug != null) {
-                                        debug.println("policy provider " +
-                                                    pc +
-                                                    " not available");
-                                        e.printStackTrace();
-                                    }
-                                    return null;
-                                }
-                            }
-                        });
-                        /*
-                         * if it loaded install it as the policy provider. Otherwise
-                         * continue to use the system default implementation
-                         */
-                        if (pol != null) {
-                            pinfo = new PolicyInfo(pol, true);
-                        } else {
-                            if (debug != null) {
-                                debug.println("using sun.security.provider.PolicyFile");
-                            }
-                            pinfo = new PolicyInfo(polFile, true);
-                        }
-                    }
-                    policy.set(pinfo);
+                    return loadPolicyProvider();
                 }
                 return pinfo.policy;
             }
@@ -245,6 +183,70 @@
     }
 
     /**
+     * Loads and instantiates a Policy implementation specified by the
+     * policy.provider security property. Note that this method should only
+     * be called by getPolicyNoCheck and from within a synchronized block with
+     * an intrinsic lock on the Policy.class.
+     */
+    private static Policy loadPolicyProvider() {
+        String policyProvider =
+            AccessController.doPrivileged(new PrivilegedAction<>() {
+                @Override
+                public String run() {
+                    return Security.getProperty("policy.provider");
+                }
+            });
+
+        /*
+         * If policy.provider is not set or is set to the default provider,
+         * simply instantiate it and return.
+         */
+        if (policyProvider == null || policyProvider.isEmpty() ||
+            policyProvider.equals(DEFAULT_POLICY))
+        {
+            Policy polFile = new sun.security.provider.PolicyFile();
+            policy.set(new PolicyInfo(polFile, true));
+            return polFile;
+        }
+
+        /*
+         * Locate, load, and instantiate the policy.provider impl using
+         * the system class loader. While doing so, install the bootstrap
+         * provider to avoid potential recursion.
+         */
+        Policy polFile = new sun.security.provider.PolicyFile();
+        policy.set(new PolicyInfo(polFile, false));
+
+        Policy pol = AccessController.doPrivileged(new PrivilegedAction<>() {
+            @Override
+            public Policy run() {
+                try {
+                    ClassLoader scl = ClassLoader.getSystemClassLoader();
+                    Class<?> c = Class.forName(policyProvider, true, scl);
+                    return (Policy)c.newInstance();
+                } catch (Exception e) {
+                    if (debug != null) {
+                        debug.println("policy provider " + policyProvider +
+                                      " not available");
+                        e.printStackTrace();
+                    }
+                    return null;
+                }
+            }
+        });
+
+        if (pol == null) {
+            // Fallback and use the system default implementation
+            if (debug != null) {
+                debug.println("using " + DEFAULT_POLICY);
+            }
+            pol = polFile;
+        }
+        policy.set(new PolicyInfo(pol, true));
+        return pol;
+    }
+
+    /**
      * Sets the system-wide Policy object. This method first calls
      * {@code SecurityManager.checkPermission} with a
      * {@code SecurityPermission("setPolicy")}
--- a/jdk/src/java.base/share/classes/java/security/cert/LDAPCertStoreParameters.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.base/share/classes/java/security/cert/LDAPCertStoreParameters.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -30,7 +30,12 @@
  * <p>
  * This class is used to provide necessary configuration parameters (server
  * name and port number) to implementations of the LDAP {@code CertStore}
- * algorithm.
+ * algorithm. However, if you are retrieving certificates or CRLs from
+ * an ldap URI as specified by RFC 5280, use the
+ * {@link java.security.cert.URICertStoreParameters URICertStoreParameters}
+ * instead as the URI may contain additional information such as the
+ * distinguished name that will help the LDAP CertStore find the specific
+ * certificates and CRLs.
  * <p>
  * <b>Concurrent Access</b>
  * <p>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.base/share/classes/java/security/cert/URICertStoreParameters.java	Wed Jul 05 20:33:35 2017 +0200
@@ -0,0 +1,149 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package java.security.cert;
+
+import java.net.URI;
+
+/**
+ * Parameters used as input for {@code CertStore} algorithms which use
+ * information contained in a URI to retrieve certificates and CRLs.
+ * <p>
+ * This class is used to provide necessary configuration parameters
+ * through a URI as defined in RFC 5280 to implementations of
+ * {@code CertStore} algorithms.
+ * <p>
+ * <b>Concurrent Access</b>
+ * <p>
+ * Unless otherwise specified, the methods defined in this class are not
+ * thread-safe. Multiple threads that need to access a single
+ * object concurrently should synchronize amongst themselves and
+ * provide the necessary locking. Multiple threads each manipulating
+ * separate objects need not synchronize.
+ *
+ * @since       1.9
+ * @see         CertStore
+ * @see         java.net.URI
+ */
+public final class URICertStoreParameters implements CertStoreParameters {
+
+    /**
+     * The uri, cannot be null
+     */
+    private final URI uri;
+
+    /*
+     * Hash code for this parameters.
+     */
+    private int myhash = -1;
+
+    /**
+     * Creates an instance of {@code URICertStoreParameters} with the
+     * specified URI.
+     *
+     * @param uri the URI which contains configuration information.
+     * @throws NullPointerException if {@code uri} is null
+     */
+    public URICertStoreParameters(URI uri) {
+        if (uri == null) {
+            throw new NullPointerException();
+        }
+        this.uri = uri;
+    }
+
+    /**
+     * Returns the URI used to construct this
+     * {@code URICertStoreParameters} object.
+     *
+     * @return the URI.
+     */
+    public URI getURI() {
+        return uri;
+    }
+
+    /**
+     * Returns a copy of this object. Changes to the copy will not affect
+     * the original and vice versa.
+     *
+     * @return the copy
+     */
+    @Override
+    public URICertStoreParameters clone() {
+        try {
+            return new URICertStoreParameters(uri);
+        } catch (NullPointerException e) {
+            /* Cannot happen */
+            throw new InternalError(e.toString(), e);
+        }
+    }
+
+    /**
+     * Returns a hash code value for this parameters object.
+     * The hash code is generated using the URI supplied at construction.
+     *
+     * @return a hash code value for this parameters.
+     */
+    @Override
+    public int hashCode() {
+        if (myhash == -1) {
+            myhash = uri.hashCode()*7;
+        }
+        return myhash;
+    }
+
+    /**
+     * Compares the specified object with this parameters object for equality.
+     * Two URICertStoreParameters are considered equal if the URIs used
+     * to construct them are equal.
+     *
+     * @param p the object to test for equality with this parameters.
+     *
+     * @return true if the specified object is equal to this parameters object.
+     */
+    @Override
+    public boolean equals(Object p) {
+        if (p == null || (!(p instanceof URICertStoreParameters))) {
+            return false;
+        }
+
+        if (p == this) {
+            return true;
+        }
+
+        URICertStoreParameters other = (URICertStoreParameters)p;
+        return uri.equals(other.getURI());
+    }
+
+    /**
+     * Returns a formatted string describing the parameters
+     * including the URI used to construct this object.
+     *
+     * @return a formatted string describing the parameters
+     */
+    @Override
+    public String toString() {
+        return "URICertStoreParameters: " + uri.toString();
+    }
+}
--- a/jdk/src/java.base/share/classes/java/util/concurrent/ConcurrentHashMap.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.base/share/classes/java/util/concurrent/ConcurrentHashMap.java	Wed Jul 05 20:33:35 2017 +0200
@@ -64,6 +64,7 @@
 import java.util.function.Function;
 import java.util.function.IntBinaryOperator;
 import java.util.function.LongBinaryOperator;
+import java.util.function.Predicate;
 import java.util.function.ToDoubleBiFunction;
 import java.util.function.ToDoubleFunction;
 import java.util.function.ToIntBiFunction;
@@ -1619,6 +1620,45 @@
     }
 
     /**
+     * Helper method for EntrySet.removeIf
+     */
+    boolean removeEntryIf(Predicate<? super Entry<K, V>> function) {
+        if (function == null) throw new NullPointerException();
+        Node<K,V>[] t;
+        boolean removed = false;
+        if ((t = table) != null) {
+            Traverser<K,V> it = new Traverser<K,V>(t, t.length, 0, t.length);
+            for (Node<K,V> p; (p = it.advance()) != null; ) {
+                K k = p.key;
+                V v = p.val;
+                Map.Entry<K,V> e = new AbstractMap.SimpleImmutableEntry<>(k, v);
+                if (function.test(e) && replaceNode(k, null, v) != null)
+                    removed = true;
+            }
+        }
+        return removed;
+    }
+
+    /**
+     * Helper method for Values.removeIf
+     */
+    boolean removeValueIf(Predicate<? super  V> function) {
+        if (function == null) throw new NullPointerException();
+        Node<K,V>[] t;
+        boolean removed = false;
+        if ((t = table) != null) {
+            Traverser<K,V> it = new Traverser<K,V>(t, t.length, 0, t.length);
+            for (Node<K,V> p; (p = it.advance()) != null; ) {
+                K k = p.key;
+                V v = p.val;
+                if (function.test(v) && replaceNode(k, null, v) != null)
+                    removed = true;
+            }
+        }
+        return removed;
+    }
+
+    /**
      * If the specified key is not already associated with a value,
      * attempts to compute its value using the given mapping function
      * and enters it into this map unless {@code null}.  The entire
@@ -4690,6 +4730,10 @@
             throw new UnsupportedOperationException();
         }
 
+        public boolean removeIf(Predicate<? super V> filter) {
+            return map.removeValueIf(filter);
+        }
+
         public Spliterator<V> spliterator() {
             Node<K,V>[] t;
             ConcurrentHashMap<K,V> m = map;
@@ -4759,6 +4803,10 @@
             return added;
         }
 
+        public boolean removeIf(Predicate<? super Entry<K, V>> filter) {
+            return map.removeEntryIf(filter);
+        }
+
         public final int hashCode() {
             int h = 0;
             Node<K,V>[] t;
--- a/jdk/src/java.base/share/classes/java/util/concurrent/ConcurrentMap.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.base/share/classes/java/util/concurrent/ConcurrentMap.java	Wed Jul 05 20:33:35 2017 +0200
@@ -34,6 +34,7 @@
  */
 
 package java.util.concurrent;
+
 import java.util.Map;
 import java.util.Objects;
 import java.util.function.BiConsumer;
@@ -44,6 +45,14 @@
  * A {@link java.util.Map} providing thread safety and atomicity
  * guarantees.
  *
+ * <p>To maintain the specified guarantees, default implementations of
+ * methods including {@link #putIfAbsent} inherited from {@link Map}
+ * must be overridden by implementations of this interface. Similarly,
+ * implementations of the collections returned by methods {@link
+ * #keySet}, {@link #values}, and {@link #entrySet} must override
+ * methods such as {@code removeIf} when necessary to
+ * preserve atomicity guarantees.
+ *
  * <p>Memory consistency effects: As with other concurrent
  * collections, actions in a thread prior to placing an object into a
  * {@code ConcurrentMap} as a key or value
@@ -60,7 +69,7 @@
  * @param <K> the type of keys maintained by this map
  * @param <V> the type of mapped values
  */
-public interface ConcurrentMap<K, V> extends Map<K, V> {
+public interface ConcurrentMap<K,V> extends Map<K,V> {
 
     /**
      * {@inheritDoc}
@@ -86,9 +95,9 @@
      * @implSpec The default implementation is equivalent to, for this
      * {@code map}:
      * <pre> {@code
-     * for ((Map.Entry<K, V> entry : map.entrySet())
-     *     action.accept(entry.getKey(), entry.getValue());
-     * }</pre>
+     * for (Map.Entry<K,V> entry : map.entrySet()) {
+     *   action.accept(entry.getKey(), entry.getValue());
+     * }}</pre>
      *
      * @implNote The default implementation assumes that
      * {@code IllegalStateException} thrown by {@code getKey()} or
@@ -101,13 +110,13 @@
     @Override
     default void forEach(BiConsumer<? super K, ? super V> action) {
         Objects.requireNonNull(action);
-        for (Map.Entry<K, V> entry : entrySet()) {
+        for (Map.Entry<K,V> entry : entrySet()) {
             K k;
             V v;
             try {
                 k = entry.getKey();
                 v = entry.getValue();
-            } catch(IllegalStateException ise) {
+            } catch (IllegalStateException ise) {
                 // this usually means the entry is no longer in the map.
                 continue;
             }
@@ -117,14 +126,13 @@
 
     /**
      * If the specified key is not already associated
-     * with a value, associate it with the given value.
-     * This is equivalent to
-     *  <pre> {@code
+     * with a value, associates it with the given value.
+     * This is equivalent to, for this {@code map}:
+     * <pre> {@code
      * if (!map.containsKey(key))
      *   return map.put(key, value);
      * else
-     *   return map.get(key);
-     * }</pre>
+     *   return map.get(key);}</pre>
      *
      * except that the action is performed atomically.
      *
@@ -147,18 +155,19 @@
      * @throws IllegalArgumentException if some property of the specified key
      *         or value prevents it from being stored in this map
      */
-     V putIfAbsent(K key, V value);
+    V putIfAbsent(K key, V value);
 
     /**
      * Removes the entry for a key only if currently mapped to a given value.
-     * This is equivalent to
-     *  <pre> {@code
-     * if (map.containsKey(key) && Objects.equals(map.get(key), value)) {
+     * This is equivalent to, for this {@code map}:
+     * <pre> {@code
+     * if (map.containsKey(key)
+     *     && Objects.equals(map.get(key), value)) {
      *   map.remove(key);
      *   return true;
-     * } else
+     * } else {
      *   return false;
-     * }</pre>
+     * }}</pre>
      *
      * except that the action is performed atomically.
      *
@@ -181,14 +190,15 @@
 
     /**
      * Replaces the entry for a key only if currently mapped to a given value.
-     * This is equivalent to
-     *  <pre> {@code
-     * if (map.containsKey(key) && Objects.equals(map.get(key), oldValue)) {
+     * This is equivalent to, for this {@code map}:
+     * <pre> {@code
+     * if (map.containsKey(key)
+     *     && Objects.equals(map.get(key), oldValue)) {
      *   map.put(key, newValue);
      *   return true;
-     * } else
+     * } else {
      *   return false;
-     * }</pre>
+     * }}</pre>
      *
      * except that the action is performed atomically.
      *
@@ -212,13 +222,12 @@
 
     /**
      * Replaces the entry for a key only if currently mapped to some value.
-     * This is equivalent to
-     *  <pre> {@code
-     * if (map.containsKey(key)) {
+     * This is equivalent to, for this {@code map}:
+     * <pre> {@code
+     * if (map.containsKey(key))
      *   return map.put(key, value);
-     * } else
-     *   return null;
-     * }</pre>
+     * else
+     *   return null;}</pre>
      *
      * except that the action is performed atomically.
      *
@@ -249,12 +258,14 @@
      * @implSpec
      * <p>The default implementation is equivalent to, for this {@code map}:
      * <pre> {@code
-     * for ((Map.Entry<K, V> entry : map.entrySet())
-     *     do {
-     *        K k = entry.getKey();
-     *        V v = entry.getValue();
-     *     } while(!replace(k, v, function.apply(k, v)));
-     * }</pre>
+     * for (Map.Entry<K,V> entry : map.entrySet()) {
+     *   K k;
+     *   V v;
+     *   do {
+     *     k = entry.getKey();
+     *     v = entry.getValue();
+     *   } while (!map.replace(k, v, function.apply(k, v)));
+     * }}</pre>
      *
      * The default implementation may retry these steps when multiple
      * threads attempt updates including potentially calling the function
@@ -275,7 +286,7 @@
     default void replaceAll(BiFunction<? super K, ? super V, ? extends V> function) {
         Objects.requireNonNull(function);
         forEach((k,v) -> {
-            while(!replace(k, v, function.apply(k, v))) {
+            while (!replace(k, v, function.apply(k, v))) {
                 // v changed or k is gone
                 if ( (v = get(k)) == null) {
                     // k is no longer in the map.
@@ -295,11 +306,10 @@
      *
      * <pre> {@code
      * if (map.get(key) == null) {
-     *     V newValue = mappingFunction.apply(key);
-     *     if (newValue != null)
-     *         return map.putIfAbsent(key, newValue);
-     * }
-     * }</pre>
+     *   V newValue = mappingFunction.apply(key);
+     *   if (newValue != null)
+     *     return map.putIfAbsent(key, newValue);
+     * }}</pre>
      *
      * The default implementation may retry these steps when multiple
      * threads attempt updates including potentially calling the mapping
@@ -331,18 +341,17 @@
      * @implSpec
      * The default implementation is equivalent to performing the following
      * steps for this {@code map}, then returning the current value or
-     * {@code null} if now absent. :
+     * {@code null} if now absent:
      *
      * <pre> {@code
      * if (map.get(key) != null) {
-     *     V oldValue = map.get(key);
-     *     V newValue = remappingFunction.apply(key, oldValue);
-     *     if (newValue != null)
-     *         map.replace(key, oldValue, newValue);
-     *     else
-     *         map.remove(key, oldValue);
-     * }
-     * }</pre>
+     *   V oldValue = map.get(key);
+     *   V newValue = remappingFunction.apply(key, oldValue);
+     *   if (newValue != null)
+     *     map.replace(key, oldValue, newValue);
+     *   else
+     *     map.remove(key, oldValue);
+     * }}</pre>
      *
      * The default implementation may retry these steps when multiple threads
      * attempt updates including potentially calling the remapping function
@@ -363,13 +372,13 @@
             BiFunction<? super K, ? super V, ? extends V> remappingFunction) {
         Objects.requireNonNull(remappingFunction);
         V oldValue;
-        while((oldValue = get(key)) != null) {
+        while ((oldValue = get(key)) != null) {
             V newValue = remappingFunction.apply(key, oldValue);
             if (newValue != null) {
                 if (replace(key, oldValue, newValue))
                     return newValue;
             } else if (remove(key, oldValue))
-               return null;
+                return null;
         }
         return oldValue;
     }
@@ -386,17 +395,16 @@
      * V oldValue = map.get(key);
      * V newValue = remappingFunction.apply(key, oldValue);
      * if (oldValue != null ) {
-     *    if (newValue != null)
-     *       map.replace(key, oldValue, newValue);
-     *    else
-     *       map.remove(key, oldValue);
+     *   if (newValue != null)
+     *     map.replace(key, oldValue, newValue);
+     *   else
+     *     map.remove(key, oldValue);
      * } else {
-     *    if (newValue != null)
-     *       map.putIfAbsent(key, newValue);
-     *    else
-     *       return null;
-     * }
-     * }</pre>
+     *   if (newValue != null)
+     *     map.putIfAbsent(key, newValue);
+     *   else
+     *     return null;
+     * }}</pre>
      *
      * The default implementation may retry these steps when multiple
      * threads attempt updates including potentially calling the remapping
@@ -417,7 +425,7 @@
             BiFunction<? super K, ? super V, ? extends V> remappingFunction) {
         Objects.requireNonNull(remappingFunction);
         V oldValue = get(key);
-        for(;;) {
+        for (;;) {
             V newValue = remappingFunction.apply(key, oldValue);
             if (newValue == null) {
                 // delete mapping
@@ -458,7 +466,6 @@
         }
     }
 
-
     /**
      * {@inheritDoc}
      *
@@ -470,12 +477,11 @@
      * <pre> {@code
      * V oldValue = map.get(key);
      * V newValue = (oldValue == null) ? value :
-     *              remappingFunction.apply(oldValue, value);
+     *     remappingFunction.apply(oldValue, value);
      * if (newValue == null)
-     *     map.remove(key);
+     *   map.remove(key);
      * else
-     *     map.put(key, newValue);
-     * }</pre>
+     *   map.put(key, newValue);}</pre>
      *
      * <p>The default implementation may retry these steps when multiple
      * threads attempt updates including potentially calling the remapping
--- a/jdk/src/java.base/share/classes/java/util/concurrent/ConcurrentSkipListMap.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.base/share/classes/java/util/concurrent/ConcurrentSkipListMap.java	Wed Jul 05 20:33:35 2017 +0200
@@ -58,6 +58,7 @@
 import java.util.function.Consumer;
 import java.util.function.BiConsumer;
 import java.util.function.Function;
+import java.util.function.Predicate;
 
 /**
  * A scalable concurrent {@link ConcurrentNavigableMap} implementation.
@@ -2492,6 +2493,22 @@
             else
                 return (Spliterator<E>)((SubMap<?,E>)m).valueIterator();
         }
+        public boolean removeIf(Predicate<? super E> filter) {
+            if (filter == null) throw new NullPointerException();
+            if (m instanceof ConcurrentSkipListMap)
+                return ((ConcurrentSkipListMap<?,E>)m).removeValueIf(filter);
+            // else use iterator
+            @SuppressWarnings("unchecked") Iterator<Map.Entry<Object,E>> it =
+                    ((SubMap<Object,E>)m).entryIterator();
+            boolean removed = false;
+            while (it.hasNext()) {
+                Map.Entry<Object,E> e = it.next();
+                E v = e.getValue();
+                if (filter.test(v) && m.remove(e.getKey(), v))
+                    removed = true;
+            }
+            return removed;
+        }
     }
 
     static final class EntrySet<K1,V1> extends AbstractSet<Map.Entry<K1,V1>> {
@@ -2554,6 +2571,20 @@
                 return (Spliterator<Map.Entry<K1,V1>>)
                     ((SubMap<K1,V1>)m).entryIterator();
         }
+        public boolean removeIf(Predicate<? super Entry<K1, V1>> filter) {
+            if (filter == null) throw new NullPointerException();
+            if (m instanceof ConcurrentSkipListMap)
+                return ((ConcurrentSkipListMap<K1,V1>)m).removeEntryIf(filter);
+            // else use iterator
+            Iterator<Map.Entry<K1,V1>> it = ((SubMap<K1,V1>)m).entryIterator();
+            boolean removed = false;
+            while (it.hasNext()) {
+                Map.Entry<K1,V1> e = it.next();
+                if (filter.test(e) && m.remove(e.getKey(), e.getValue()))
+                    removed = true;
+            }
+            return removed;
+        }
     }
 
     /**
@@ -3267,6 +3298,41 @@
     }
 
     /**
+     * Helper method for EntrySet.removeIf
+     */
+    boolean removeEntryIf(Predicate<? super Entry<K, V>> function) {
+        if (function == null) throw new NullPointerException();
+        boolean removed = false;
+        for (Node<K,V> n = findFirst(); n != null; n = n.next) {
+            V v;
+            if ((v = n.getValidValue()) != null) {
+                K k = n.key;
+                Map.Entry<K,V> e = new AbstractMap.SimpleImmutableEntry<>(k, v);
+                if (function.test(e) && remove(k, v))
+                    removed = true;
+            }
+        }
+        return removed;
+    }
+
+    /**
+     * Helper method for Values.removeIf
+     */
+    boolean removeValueIf(Predicate<? super V> function) {
+        if (function == null) throw new NullPointerException();
+        boolean removed = false;
+        for (Node<K,V> n = findFirst(); n != null; n = n.next) {
+            V v;
+            if ((v = n.getValidValue()) != null) {
+                K k = n.key;
+                if (function.test(v) && remove(k, v))
+                    removed = true;
+            }
+        }
+        return removed;
+    }
+
+    /**
      * Base class providing common structure for Spliterators.
      * (Although not all that much common functionality; as usual for
      * view classes, details annoyingly vary in key, value, and entry
--- a/jdk/src/java.base/share/classes/javax/security/auth/Subject.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.base/share/classes/javax/security/auth/Subject.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1522,17 +1522,20 @@
             }
         }
 
+        @Override
         public int size() {
             return set.size();
         }
 
+        @Override
         public Iterator<T> iterator() {
             return set.iterator();
         }
 
+        @Override
         public boolean add(T o) {
 
-            if (!o.getClass().isAssignableFrom(c)) {
+            if (!c.isAssignableFrom(o.getClass())) {
                 MessageFormat form = new MessageFormat(ResourcesMgr.getString
                         ("attempting.to.add.an.object.which.is.not.an.instance.of.class"));
                 Object[] source = {c.toString()};
--- a/jdk/src/java.base/share/classes/sun/security/provider/SunEntries.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.base/share/classes/sun/security/provider/SunEntries.java	Wed Jul 05 20:33:35 2017 +0200
@@ -67,10 +67,6 @@
  *   in RFC 5280. The ValidationAlgorithm attribute notes the
  *   specification that this provider implements.
  *
- * - LDAP is the CertStore type for LDAP repositories. The
- *   LDAPSchema attribute notes the specification defining the
- *   schema that this provider uses to find certificates and CRLs.
- *
  * - JavaPolicy is the default file-based Policy type.
  *
  * - JavaLoginConfig is the default file-based LoginModule Configuration type.
@@ -275,9 +271,6 @@
         /*
          * CertStores
          */
-        map.put("CertStore.LDAP",
-            "sun.security.provider.certpath.ldap.LDAPCertStore");
-        map.put("CertStore.LDAP LDAPSchema", "RFC2587");
         map.put("CertStore.Collection",
             "sun.security.provider.certpath.CollectionCertStore");
         map.put("CertStore.com.sun.security.IndexedCollection",
@@ -310,7 +303,6 @@
         map.put("KeyStore.JKS ImplementedIn", "Software");
         map.put("CertPathValidator.PKIX ImplementedIn", "Software");
         map.put("CertPathBuilder.PKIX ImplementedIn", "Software");
-        map.put("CertStore.LDAP ImplementedIn", "Software");
         map.put("CertStore.Collection ImplementedIn", "Software");
         map.put("CertStore.com.sun.security.IndexedCollection ImplementedIn",
             "Software");
--- a/jdk/src/java.base/share/classes/sun/security/provider/certpath/CertStoreHelper.java	Thu May 14 20:14:44 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,148 +0,0 @@
-/*
- * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.security.provider.certpath;
-
-import java.net.URI;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-import java.security.AccessController;
-import java.security.NoSuchAlgorithmException;
-import java.security.InvalidAlgorithmParameterException;
-import java.security.PrivilegedActionException;
-import java.security.PrivilegedExceptionAction;
-import java.security.cert.CertStore;
-import java.security.cert.CertStoreException;
-import java.security.cert.X509CertSelector;
-import java.security.cert.X509CRLSelector;
-import javax.security.auth.x500.X500Principal;
-import java.io.IOException;
-
-import sun.security.util.Cache;
-
-/**
- * Helper used by URICertStore and others when delegating to another CertStore
- * to fetch certs and CRLs.
- */
-
-public abstract class CertStoreHelper {
-
-    private static final int NUM_TYPES = 2;
-    private final static Map<String,String> classMap = new HashMap<>(NUM_TYPES);
-    static {
-        classMap.put(
-            "LDAP",
-            "sun.security.provider.certpath.ldap.LDAPCertStoreHelper");
-        classMap.put(
-            "SSLServer",
-            "sun.security.provider.certpath.ssl.SSLServerCertStoreHelper");
-    };
-    private static Cache<String, CertStoreHelper> cache
-        = Cache.newSoftMemoryCache(NUM_TYPES);
-
-    public static CertStoreHelper getInstance(final String type)
-        throws NoSuchAlgorithmException
-    {
-        CertStoreHelper helper = cache.get(type);
-        if (helper != null) {
-            return helper;
-        }
-        final String cl = classMap.get(type);
-        if (cl == null) {
-            throw new NoSuchAlgorithmException(type + " not available");
-        }
-        try {
-            helper = AccessController.doPrivileged(
-                new PrivilegedExceptionAction<CertStoreHelper>() {
-                    public CertStoreHelper run() throws ClassNotFoundException {
-                        try {
-                            Class<?> c = Class.forName(cl, true, null);
-                            CertStoreHelper csh
-                                = (CertStoreHelper)c.newInstance();
-                            cache.put(type, csh);
-                            return csh;
-                        } catch (InstantiationException |
-                                 IllegalAccessException e) {
-                            throw new AssertionError(e);
-                        }
-                    }
-            });
-            return helper;
-        } catch (PrivilegedActionException e) {
-            throw new NoSuchAlgorithmException(type + " not available",
-                                               e.getException());
-        }
-    }
-
-    static boolean isCausedByNetworkIssue(String type, CertStoreException cse) {
-        switch (type) {
-            case "LDAP":
-            case "SSLServer":
-                try {
-                    CertStoreHelper csh = CertStoreHelper.getInstance(type);
-                    return csh.isCausedByNetworkIssue(cse);
-                } catch (NoSuchAlgorithmException nsae) {
-                    return false;
-                }
-            case "URI":
-                Throwable t = cse.getCause();
-                return (t != null && t instanceof IOException);
-            default:
-                // we don't know about any other remote CertStore types
-                return false;
-        }
-    }
-
-    /**
-     * Returns a CertStore using the given URI as parameters.
-     */
-    public abstract CertStore getCertStore(URI uri)
-        throws NoSuchAlgorithmException, InvalidAlgorithmParameterException;
-
-    /**
-     * Wraps an existing X509CertSelector when needing to avoid DN matching
-     * issues.
-     */
-    public abstract X509CertSelector wrap(X509CertSelector selector,
-                          X500Principal certSubject,
-                          String dn)
-        throws IOException;
-
-    /**
-     * Wraps an existing X509CRLSelector when needing to avoid DN matching
-     * issues.
-     */
-    public abstract X509CRLSelector wrap(X509CRLSelector selector,
-                         Collection<X500Principal> certIssuers,
-                         String dn)
-        throws IOException;
-
-    /**
-     * Returns true if the cause of the CertStoreException is a network
-     * related issue.
-     */
-    public abstract boolean isCausedByNetworkIssue(CertStoreException e);
-}
--- a/jdk/src/java.base/share/classes/sun/security/provider/certpath/RevocationChecker.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.base/share/classes/sun/security/provider/certpath/RevocationChecker.java	Wed Jul 05 20:33:35 2017 +0200
@@ -466,6 +466,34 @@
                   stackedCerts, params.trustAnchors());
     }
 
+    static boolean isCausedByNetworkIssue(String type, CertStoreException cse) {
+        boolean result;
+        Throwable t = cse.getCause();
+
+        switch (type) {
+            case "LDAP":
+                if (t != null) {
+                    // These two exception classes are inside java.naming module
+                    String cn = t.getClass().getName();
+                    result = (cn.equals("javax.naming.ServiceUnavailableException") ||
+                        cn.equals("javax.naming.CommunicationException"));
+                } else {
+                    result = false;
+                }
+                break;
+            case "SSLServer":
+                result = (t != null && t instanceof IOException);
+                break;
+            case "URI":
+                result = (t != null && t instanceof IOException);
+                break;
+            default:
+                // we don't know about any other remote CertStore types
+                return false;
+        }
+        return result;
+    }
+
     private void checkCRLs(X509Certificate cert, PublicKey prevKey,
                            X509Certificate prevCert, boolean signFlag,
                            boolean allowSeparateKey,
@@ -510,7 +538,7 @@
                                   "CertStoreException: " + e.getMessage());
                 }
                 if (networkFailureException == null &&
-                    CertStoreHelper.isCausedByNetworkIssue(store.getType(),e)) {
+                    isCausedByNetworkIssue(store.getType(),e)) {
                     // save this exception, we may need to throw it later
                     networkFailureException = new CertPathValidatorException(
                         "Unable to determine revocation status due to " +
@@ -557,8 +585,7 @@
             } catch (CertStoreException e) {
                 if (e instanceof CertStoreTypeException) {
                     CertStoreTypeException cste = (CertStoreTypeException)e;
-                    if (CertStoreHelper.isCausedByNetworkIssue(cste.getType(),
-                                                               e)) {
+                    if (isCausedByNetworkIssue(cste.getType(), e)) {
                         throw new CertPathValidatorException(
                             "Unable to determine revocation status due to " +
                             "network error", e, null, -1,
--- a/jdk/src/java.base/share/classes/sun/security/provider/certpath/URICertStore.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.base/share/classes/sun/security/provider/certpath/URICertStore.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2006, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2006, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -42,6 +42,7 @@
 import java.security.cert.CertStoreSpi;
 import java.security.cert.CRLException;
 import java.security.cert.CRLSelector;
+import java.security.cert.URICertStoreParameters;
 import java.security.cert.X509Certificate;
 import java.security.cert.X509CertSelector;
 import java.security.cert.X509CRL;
@@ -118,9 +119,7 @@
 
     // true if URI is ldap
     private boolean ldap = false;
-    private CertStoreHelper ldapHelper;
     private CertStore ldapCertStore;
-    private String ldapPath;
 
     // Default maximum connect timeout in milliseconds (15 seconds)
     // allowed when downloading CRLs
@@ -165,13 +164,8 @@
         // if ldap URI, use an LDAPCertStore to fetch certs and CRLs
         if (uri.getScheme().toLowerCase(Locale.ENGLISH).equals("ldap")) {
             ldap = true;
-            ldapHelper = CertStoreHelper.getInstance("LDAP");
-            ldapCertStore = ldapHelper.getCertStore(uri);
-            ldapPath = uri.getPath();
-            // strip off leading '/'
-            if (ldapPath.charAt(0) == '/') {
-                ldapPath = ldapPath.substring(1);
-            }
+            URICertStoreParameters lparams = new URICertStoreParameters(uri);
+            ldapCertStore = CertStore.getInstance("LDAP", lparams);
         }
         try {
             factory = CertificateFactory.getInstance("X.509");
@@ -246,20 +240,10 @@
     public synchronized Collection<X509Certificate> engineGetCertificates
         (CertSelector selector) throws CertStoreException {
 
-        // if ldap URI we wrap the CertSelector in an LDAPCertSelector to
-        // avoid LDAP DN matching issues (see LDAPCertSelector for more info)
         if (ldap) {
-            X509CertSelector xsel = (X509CertSelector) selector;
-            try {
-                xsel = ldapHelper.wrap(xsel, xsel.getSubject(), ldapPath);
-            } catch (IOException ioe) {
-                throw new CertStoreException(ioe);
-            }
-            // Fetch the certificates via LDAP. LDAPCertStore has its own
             // caching mechanism, see the class description for more info.
-            // Safe cast since xsel is an X509 certificate selector.
             return (Collection<X509Certificate>)
-                ldapCertStore.getCertificates(xsel);
+                ldapCertStore.getCertificates(selector);
         }
 
         // Return the Certificates for this entry. It returns the cached value
@@ -356,20 +340,11 @@
     public synchronized Collection<X509CRL> engineGetCRLs(CRLSelector selector)
         throws CertStoreException {
 
-        // if ldap URI we wrap the CRLSelector in an LDAPCRLSelector to
-        // avoid LDAP DN matching issues (see LDAPCRLSelector for more info)
         if (ldap) {
-            X509CRLSelector xsel = (X509CRLSelector) selector;
-            try {
-                xsel = ldapHelper.wrap(xsel, null, ldapPath);
-            } catch (IOException ioe) {
-                throw new CertStoreException(ioe);
-            }
             // Fetch the CRLs via LDAP. LDAPCertStore has its own
             // caching mechanism, see the class description for more info.
-            // Safe cast since xsel is an X509 certificate selector.
             try {
-                return (Collection<X509CRL>) ldapCertStore.getCRLs(xsel);
+                return (Collection<X509CRL>) ldapCertStore.getCRLs(selector);
             } catch (CertStoreException cse) {
                 throw new PKIX.CertStoreTypeException("LDAP", cse);
             }
--- a/jdk/src/java.base/share/classes/sun/security/provider/certpath/ssl/SSLServerCertStore.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.base/share/classes/sun/security/provider/certpath/ssl/SSLServerCertStore.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -153,7 +153,7 @@
         throw new UnsupportedOperationException();
     }
 
-    static CertStore getInstance(URI uri)
+    public static CertStore getInstance(URI uri)
         throws InvalidAlgorithmParameterException
     {
         return new CS(new SSLServerCertStore(uri), null, "SSLServer", null);
--- a/jdk/src/java.base/share/classes/sun/security/provider/certpath/ssl/SSLServerCertStoreHelper.java	Thu May 14 20:14:44 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,76 +0,0 @@
-/*
- * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.security.provider.certpath.ssl;
-
-import java.io.IOException;
-import java.net.URI;
-import java.security.NoSuchAlgorithmException;
-import java.security.InvalidAlgorithmParameterException;
-import java.security.cert.CertStore;
-import java.security.cert.CertStoreException;
-import java.security.cert.X509CertSelector;
-import java.security.cert.X509CRLSelector;
-import java.util.Collection;
-import javax.security.auth.x500.X500Principal;
-
-import sun.security.provider.certpath.CertStoreHelper;
-
-/**
- * SSL implementation of CertStoreHelper.
- */
-public final class SSLServerCertStoreHelper extends CertStoreHelper {
-
-    @Override
-    public CertStore getCertStore(URI uri)
-        throws NoSuchAlgorithmException, InvalidAlgorithmParameterException
-    {
-        return SSLServerCertStore.getInstance(uri);
-    }
-
-    @Override
-    public X509CertSelector wrap(X509CertSelector selector,
-                                 X500Principal certSubject,
-                                 String ldapDN)
-        throws IOException
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public X509CRLSelector wrap(X509CRLSelector selector,
-                                Collection<X500Principal> certIssuers,
-                                String ldapDN)
-        throws IOException
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public boolean isCausedByNetworkIssue(CertStoreException e) {
-        Throwable t = e.getCause();
-        return (t != null && t instanceof IOException);
-    }
-}
--- a/jdk/src/java.base/share/classes/sun/security/tools/keytool/Main.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.base/share/classes/sun/security/tools/keytool/Main.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -46,6 +46,9 @@
 import java.security.cert.CRL;
 import java.security.cert.X509Certificate;
 import java.security.cert.CertificateException;
+import java.security.cert.URICertStoreParameters;
+
+
 import java.text.Collator;
 import java.text.MessageFormat;
 import java.util.*;
@@ -69,7 +72,7 @@
 import sun.security.pkcs10.PKCS10;
 import sun.security.pkcs10.PKCS10Attribute;
 import sun.security.provider.X509Factory;
-import sun.security.provider.certpath.CertStoreHelper;
+import sun.security.provider.certpath.ssl.SSLServerCertStore;
 import sun.security.util.Password;
 import javax.crypto.KeyGenerator;
 import javax.crypto.SecretKey;
@@ -2208,14 +2211,10 @@
                 }
             }
         } else {    // must be LDAP, and uri is not null
-            // Lazily load LDAPCertStoreHelper if present
-            CertStoreHelper helper = CertStoreHelper.getInstance("LDAP");
-            String path = uri.getPath();
-            if (path.charAt(0) == '/') path = path.substring(1);
-            CertStore s = helper.getCertStore(uri);
-            X509CRLSelector sel =
-                    helper.wrap(new X509CRLSelector(), null, path);
-            return s.getCRLs(sel);
+            URICertStoreParameters params =
+                new URICertStoreParameters(uri);
+            CertStore s = CertStore.getInstance("LDAP", params);
+            return s.getCRLs(new X509CRLSelector());
         }
     }
 
@@ -2463,9 +2462,7 @@
                 out.println(rb.getString("Not.a.signed.jar.file"));
             }
         } else if (sslserver != null) {
-            // Lazily load SSLCertStoreHelper if present
-            CertStoreHelper helper = CertStoreHelper.getInstance("SSLServer");
-            CertStore cs = helper.getCertStore(new URI("https://" + sslserver));
+            CertStore cs = SSLServerCertStore.getInstance(new URI("https://" + sslserver));
             Collection<? extends Certificate> chain;
             try {
                 chain = cs.getCertificates(null);
--- a/jdk/src/java.base/share/conf/security/java.security	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.base/share/conf/security/java.security	Wed Jul 05 20:33:35 2017 +0200
@@ -78,6 +78,7 @@
 security.provider.tbd=com.sun.security.sasl.Provider
 security.provider.tbd=org.jcp.xml.dsig.internal.dom.XMLDSigRI
 security.provider.tbd=sun.security.smartcardio.SunPCSC
+security.provider.tbd=sun.security.provider.certpath.ldap.JdkLDAP
 #ifdef windows
 security.provider.tbd=sun.security.mscapi.SunMSCAPI
 #endif
@@ -156,7 +157,8 @@
 
 #
 # Class to instantiate as the system Policy. This is the name of the class
-# that will be used as the Policy object.
+# that will be used as the Policy object. The system class loader is used to
+# locate this class.
 #
 policy.provider=sun.security.provider.PolicyFile
 
--- a/jdk/src/java.base/share/native/libjli/java.h	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.base/share/native/libjli/java.h	Wed Jul 05 20:33:35 2017 +0200
@@ -194,7 +194,7 @@
  * For MacOSX and Windows/Unix compatibility we require these
  * entry points, some of them may be stubbed out on Windows/Unixes.
  */
-void     PostJVMInit(JNIEnv *env, jstring mainClass, JavaVM *vm);
+void     PostJVMInit(JNIEnv *env, jclass mainClass, JavaVM *vm);
 void     ShowSplashScreen();
 void     RegisterThread();
 /*
--- a/jdk/src/java.base/share/native/libzip/zip_util.c	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.base/share/native/libzip/zip_util.c	Wed Jul 05 20:33:35 2017 +0200
@@ -1206,7 +1206,7 @@
         }
 
         /* Slash is already there? */
-        if (name[ulen-1] == '/') {
+        if (ulen > 0 && name[ulen - 1] == '/') {
             break;
         }
 
--- a/jdk/src/java.base/unix/classes/sun/util/locale/provider/HostLocaleProviderAdapterImpl.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.base/unix/classes/sun/util/locale/provider/HostLocaleProviderAdapterImpl.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2014 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
--- a/jdk/src/java.base/unix/native/libjli/java_md_solinux.c	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.base/unix/native/libjli/java_md_solinux.c	Wed Jul 05 20:33:35 2017 +0200
@@ -938,7 +938,7 @@
 }
 
 void
-PostJVMInit(JNIEnv *env, jstring mainClass, JavaVM *vm)
+PostJVMInit(JNIEnv *env, jclass mainClass, JavaVM *vm)
 {
     // stubbed out for windows and *nixes.
 }
--- a/jdk/src/java.base/windows/native/libjli/java_md.c	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.base/windows/native/libjli/java_md.c	Wed Jul 05 20:33:35 2017 +0200
@@ -970,7 +970,7 @@
 }
 
 void
-PostJVMInit(JNIEnv *env, jstring mainClass, JavaVM *vm)
+PostJVMInit(JNIEnv *env, jclass mainClass, JavaVM *vm)
 {
     // stubbed out for windows and *nixes.
 }
--- a/jdk/src/java.desktop/macosx/classes/com/apple/eawt/Application.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/macosx/classes/com/apple/eawt/Application.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,14 +25,18 @@
 
 package com.apple.eawt;
 
-import java.awt.*;
-import java.awt.peer.*;
+import java.awt.Image;
+import java.awt.Point;
+import java.awt.PopupMenu;
+import java.awt.Toolkit;
+import java.awt.Window;
 import java.beans.Beans;
 
 import javax.swing.JMenuBar;
 
-import sun.lwawt.*;
-import sun.lwawt.macosx.*;
+import sun.awt.AWTAccessor;
+import sun.lwawt.LWWindowPeer;
+import sun.lwawt.macosx.CPlatformWindow;
 
 /**
  * The <code>Application</code> class allows you to integrate your Java application with the native Mac OS X environment.
@@ -385,10 +389,8 @@
      *
      * @since Java for Mac OS X 10.7 Update 1
      */
-    @SuppressWarnings("deprecation")
     public void requestToggleFullScreen(final Window window) {
-        final ComponentPeer peer = window.getPeer();
-
+        final Object peer = AWTAccessor.getComponentAccessor().getPeer(window);
         if (!(peer instanceof LWWindowPeer)) return;
         Object platformWindow = ((LWWindowPeer) peer).getPlatformWindow();
         if (!(platformWindow instanceof CPlatformWindow)) return;
--- a/jdk/src/java.desktop/macosx/classes/com/apple/eawt/_AppDockIconHandler.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/macosx/classes/com/apple/eawt/_AppDockIconHandler.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -28,6 +28,7 @@
 import java.awt.*;
 import java.lang.reflect.*;
 
+import sun.awt.AWTAccessor;
 import sun.lwawt.macosx.*;
 import sun.lwawt.macosx.CImage.Creator;
 
@@ -41,7 +42,6 @@
 
     _AppDockIconHandler() { }
 
-    @SuppressWarnings("deprecation")
     public void setDockMenu(final PopupMenu menu) {
         fDockMenu = menu;
 
@@ -61,8 +61,8 @@
 
         // instantiate the menu peer and set the native fDockMenu ivar
         menu.addNotify();
-        final long nsMenuPtr = ((CMenu)fDockMenu.getPeer()).getNativeMenu();
-        nativeSetDockMenu(nsMenuPtr);
+        CMenu peer = AWTAccessor.getMenuComponentAccessor().getPeer(fDockMenu);
+        nativeSetDockMenu(peer.getNativeMenu());
     }
 
     public PopupMenu getDockMenu() {
--- a/jdk/src/java.desktop/macosx/classes/com/apple/eawt/_AppMenuBarHandler.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/macosx/classes/com/apple/eawt/_AppMenuBarHandler.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -32,6 +32,7 @@
 import javax.swing.plaf.MenuBarUI;
 
 import com.apple.laf.ScreenMenuBar;
+import sun.awt.AWTAccessor;
 import sun.lwawt.macosx.CMenuBar;
 
 import com.apple.laf.AquaMenuBarUI;
@@ -49,7 +50,10 @@
     }
 
     // callback from the native delegate -init function
-    private static void initMenuStates(final boolean aboutMenuItemVisible, final boolean aboutMenuItemEnabled, final boolean prefsMenuItemVisible, final boolean prefsMenuItemEnabled) {
+    private static void initMenuStates(final boolean aboutMenuItemVisible,
+                                       final boolean aboutMenuItemEnabled,
+                                       final boolean prefsMenuItemVisible,
+                                       final boolean prefsMenuItemEnabled) {
         synchronized (instance) {
             instance.aboutMenuItemVisible = aboutMenuItemVisible;
             instance.aboutMenuItemEnabled = aboutMenuItemEnabled;
@@ -92,7 +96,6 @@
         return (frame.getExtendedState() & Frame.ICONIFIED) != 0;
     }
 
-    @SuppressWarnings("deprecation")
     static void installDefaultMenuBar(final JMenuBar menuBar) {
         if (menuBar == null) {
             // intentionally clearing the default menu
@@ -114,7 +117,7 @@
         }
 
         screenMenuBar.addNotify();
-        final MenuComponentPeer peer = screenMenuBar.getPeer();
+        final Object peer = AWTAccessor.getMenuComponentAccessor().getPeer(screenMenuBar);
         if (!(peer instanceof CMenuBar)) {
             // such a thing should not be possible
             throw new IllegalStateException("Unable to determine native menu bar from provided JMenuBar");
--- a/jdk/src/java.desktop/macosx/classes/com/apple/laf/AquaComboBoxUI.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/macosx/classes/com/apple/laf/AquaComboBoxUI.java	Wed Jul 05 20:33:35 2017 +0200
@@ -152,20 +152,6 @@
         }
 
         @Override
-        public void focusGained(final FocusEvent e) {
-            if (arrowButton != null) {
-                arrowButton.repaint();
-            }
-        }
-
-        @Override
-        public void focusLost(final FocusEvent e) {
-            if (arrowButton != null) {
-                arrowButton.repaint();
-            }
-        }
-
-        @Override
         public void changedUpdate(final DocumentEvent e) {
             editorTextChanged();
         }
@@ -252,6 +238,16 @@
      */
     protected FocusListener createFocusListener() {
         return new BasicComboBoxUI.FocusHandler() {
+            @Override
+            public void focusGained(FocusEvent e) {
+                super.focusGained(e);
+
+                if (arrowButton != null) {
+                    arrowButton.repaint();
+                }
+            }
+
+            @Override
             public void focusLost(final FocusEvent e) {
                 hasFocus = false;
                 if (!e.isTemporary()) {
@@ -264,6 +260,10 @@
                 if (ac != null) {
                     ac.firePropertyChange(AccessibleContext.ACCESSIBLE_STATE_PROPERTY, AccessibleState.FOCUSED, null);
                 }
+
+                if (arrowButton != null) {
+                    arrowButton.repaint();
+                }
             }
         };
     }
@@ -438,6 +438,7 @@
             if (editor != null) {
                 final Rectangle editorRect = rectangleForCurrentValue();
                 editorRect.width += 4;
+                editorRect.height += 1;
                 editor.setBounds(editorRect);
             }
         }
--- a/jdk/src/java.desktop/macosx/classes/com/apple/laf/AquaTextFieldBorder.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/macosx/classes/com/apple/laf/AquaTextFieldBorder.java	Wed Jul 05 20:33:35 2017 +0200
@@ -124,7 +124,7 @@
 
     public Insets getBorderInsets(final Component c) {
         if (!(c instanceof JTextComponent) || c.isOpaque()) return new InsetsUIResource(3, 7, 3, 7);
-        return new InsetsUIResource(6, 7, 6, 7);
+        return new InsetsUIResource(5, 5, 5, 5);
     }
 
     protected static State getStateFor(final JTextComponent jc) {
--- a/jdk/src/java.desktop/macosx/classes/com/apple/laf/ScreenMenu.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/macosx/classes/com/apple/laf/ScreenMenu.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -27,11 +27,11 @@
 
 import java.awt.*;
 import java.awt.event.*;
-import java.awt.peer.MenuComponentPeer;
 import java.util.Hashtable;
 
 import javax.swing.*;
 
+import sun.awt.AWTAccessor;
 import sun.awt.SunToolkit;
 import sun.lwawt.LWToolkit;
 import sun.lwawt.macosx.*;
@@ -212,24 +212,36 @@
                 // Send a mouseExited to the previously hilited item, if it wasn't 0.
                 if (target != fLastMouseEventTarget) {
                     if (fLastMouseEventTarget != null) {
-                        LWToolkit.postEvent(new MouseEvent(fLastMouseEventTarget, MouseEvent.MOUSE_EXITED, when, modifiers, x - fLastTargetRect.x, y - fLastTargetRect.y, 0, false));
+                        LWToolkit.postEvent(
+                                new MouseEvent(fLastMouseEventTarget,
+                                               MouseEvent.MOUSE_EXITED, when,
+                                               modifiers, x - fLastTargetRect.x,
+                                               y - fLastTargetRect.y, 0,
+                                               false));
                     }
-                    // Send a mouseEntered to the current hilited item, if it wasn't 0.
+                    // Send a mouseEntered to the current hilited item, if it
+                    // wasn't 0.
                     if (target != null) {
-                        LWToolkit.postEvent(new MouseEvent(target, MouseEvent.MOUSE_ENTERED, when, modifiers, x - targetRect.x, y - targetRect.y, 0, false));
+                        LWToolkit.postEvent(
+                                new MouseEvent(target, MouseEvent.MOUSE_ENTERED,
+                                               when, modifiers,
+                                               x - targetRect.x,
+                                               y - targetRect.y, 0, false));
                     }
                     fLastMouseEventTarget = target;
                     fLastTargetRect = targetRect;
                 }
                 // Post a mouse event to the current item.
                 if (target == null) return;
-                LWToolkit.postEvent(new MouseEvent(target, kind, when, modifiers, x - targetRect.x, y - targetRect.y, 0, false));
+                LWToolkit.postEvent(
+                        new MouseEvent(target, kind, when, modifiers,
+                                       x - targetRect.x, y - targetRect.y, 0,
+                                       false));
             }
         });
     }
 
     @Override
-    @SuppressWarnings("deprecation")
     public void addNotify() {
         synchronized (getTreeLock()) {
             super.addNotify();
@@ -248,7 +260,8 @@
                 if (tooltipText != null) {
                     setToolTipText(tooltipText);
                 }
-                final MenuComponentPeer peer = getPeer();
+                final Object peer = AWTAccessor.getMenuComponentAccessor()
+                                               .getPeer(this);
                 if (peer instanceof CMenu) {
                     final CMenu menu = (CMenu) peer;
                     final long nativeMenu = menu.getNativeMenu();
@@ -355,9 +368,8 @@
     public void setIndeterminate(boolean indeterminate) { }
 
     @Override
-    @SuppressWarnings("deprecation")
     public void setToolTipText(final String text) {
-        final MenuComponentPeer peer = getPeer();
+        Object peer = AWTAccessor.getMenuComponentAccessor().getPeer(this);
         if (!(peer instanceof CMenuItem)) return;
 
         final CMenuItem cmi = (CMenuItem)peer;
@@ -365,9 +377,8 @@
     }
 
     @Override
-    @SuppressWarnings("deprecation")
     public void setIcon(final Icon i) {
-        final MenuComponentPeer peer = getPeer();
+        Object peer = AWTAccessor.getMenuComponentAccessor().getPeer(this);
         if (!(peer instanceof CMenuItem)) return;
 
         final CMenuItem cmi = (CMenuItem)peer;
--- a/jdk/src/java.desktop/macosx/classes/com/apple/laf/ScreenMenuBar.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/macosx/classes/com/apple/laf/ScreenMenuBar.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,19 +25,21 @@
 
 package com.apple.laf;
 
-import sun.awt.AWTAccessor;
 import sun.lwawt.macosx.CMenuBar;
 
 import java.awt.*;
 import java.awt.event.*;
-import java.lang.reflect.*;
-import java.security.*;
 import java.util.*;
 
 import javax.swing.*;
 
+import static sun.awt.AWTAccessor.*;
+
 @SuppressWarnings("serial") // JDK implementation class
-public class ScreenMenuBar extends MenuBar implements ContainerListener, ScreenMenuPropertyHandler, ComponentListener {
+public class ScreenMenuBar extends MenuBar
+        implements ContainerListener, ScreenMenuPropertyHandler,
+                   ComponentListener {
+
     static boolean sJMenuBarHasHelpMenus = false; //$ could check by calling getHelpMenu in a try block
 
     JMenuBar fSwingBar;
@@ -246,22 +248,23 @@
             fSubmenus.remove(menu);
     }
 
-    @SuppressWarnings("deprecation")
     public Menu add(final Menu m, final int index) {
         synchronized (getTreeLock()) {
             if (m.getParent() != null) {
                 m.getParent().remove(m);
             }
 
-            final Vector<Menu> menus = AWTAccessor.getMenuBarAccessor().getMenus(this);
+            final Vector<Menu> menus = getMenuBarAccessor().getMenus(this);
             menus.insertElementAt(m, index);
-            AWTAccessor.getMenuComponentAccessor().setParent(m, this);
+            final MenuComponentAccessor acc = getMenuComponentAccessor();
+            acc.setParent(m, this);
 
-            final CMenuBar peer = (CMenuBar)getPeer();
+            final CMenuBar peer = acc.getPeer(this);
             if (peer == null) return m;
 
             peer.setNextInsertionIndex(index);
-            if (m.getPeer() == null) {
+            final CMenuBar mPeer = acc.getPeer(m);
+            if (mPeer == null) {
                 m.addNotify();
             }
 
--- a/jdk/src/java.desktop/macosx/classes/com/apple/laf/ScreenMenuItem.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/macosx/classes/com/apple/laf/ScreenMenuItem.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -27,15 +27,18 @@
 
 import java.awt.*;
 import java.awt.event.*;
-import java.awt.peer.MenuComponentPeer;
 
 import javax.swing.*;
 import javax.swing.plaf.ComponentUI;
 
+import sun.awt.AWTAccessor;
 import sun.lwawt.macosx.CMenuItem;
 
 @SuppressWarnings("serial") // JDK implementation class
-final class ScreenMenuItem extends MenuItem implements ActionListener, ComponentListener, ScreenMenuPropertyHandler {
+final class ScreenMenuItem extends MenuItem
+        implements ActionListener, ComponentListener,
+                   ScreenMenuPropertyHandler {
+
     ScreenMenuPropertyListener fListener;
     JMenuItem fMenuItem;
 
@@ -97,9 +100,8 @@
         fMenuItem.removeComponentListener(this);
     }
 
-    @SuppressWarnings("deprecation")
     static void syncLabelAndKS(MenuItem menuItem, String label, KeyStroke ks) {
-        final MenuComponentPeer peer = menuItem.getPeer();
+        Object peer = AWTAccessor.getMenuComponentAccessor().getPeer(menuItem);
         if (!(peer instanceof CMenuItem)) {
             //Is it possible?
             return;
@@ -166,18 +168,16 @@
         }
     }
 
-    @SuppressWarnings("deprecation")
     public void setToolTipText(final String text) {
-        final MenuComponentPeer peer = getPeer();
+        Object peer = AWTAccessor.getMenuComponentAccessor().getPeer(this);
         if (!(peer instanceof CMenuItem)) return;
 
         final CMenuItem cmi = (CMenuItem)peer;
         cmi.setToolTipText(text);
     }
 
-    @SuppressWarnings("deprecation")
     public void setIcon(final Icon i) {
-        final MenuComponentPeer peer = getPeer();
+        Object peer = AWTAccessor.getMenuComponentAccessor().getPeer(this);
         if (!(peer instanceof CMenuItem)) return;
 
         final CMenuItem cmi = (CMenuItem)peer;
--- a/jdk/src/java.desktop/macosx/classes/com/apple/laf/ScreenMenuItemCheckbox.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/macosx/classes/com/apple/laf/ScreenMenuItemCheckbox.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -27,17 +27,20 @@
 
 import java.awt.*;
 import java.awt.event.*;
-import java.awt.peer.MenuComponentPeer;
 
 import javax.swing.*;
 import javax.swing.plaf.ButtonUI;
 
 import com.apple.laf.AquaMenuItemUI.IndeterminateListener;
 
+import sun.awt.AWTAccessor;
 import sun.lwawt.macosx.*;
 
 @SuppressWarnings("serial") // JDK implementation class
-final class ScreenMenuItemCheckbox extends CheckboxMenuItem implements ActionListener, ComponentListener, ScreenMenuPropertyHandler, ItemListener {
+final class ScreenMenuItemCheckbox extends CheckboxMenuItem
+        implements ActionListener, ComponentListener, ScreenMenuPropertyHandler,
+                   ItemListener {
+
     JMenuItem fMenuItem;
     MenuContainer fParent;
 
@@ -57,12 +60,12 @@
     }
 
     ScreenMenuPropertyListener fPropertyListener;
-    @SuppressWarnings("deprecation")
+
     public void addNotify() {
         super.addNotify();
 
         // Avoid the Auto toggle behavior of AWT CheckBoxMenuItem
-        CCheckboxMenuItem ccb = (CCheckboxMenuItem) getPeer();
+        CCheckboxMenuItem ccb = AWTAccessor.getMenuComponentAccessor().getPeer(this);
         ccb.setAutoToggle(false);
 
         fMenuItem.addComponentListener(this);
@@ -155,17 +158,15 @@
         setVisible(false);
     }
 
-    @SuppressWarnings("deprecation")
     public void setToolTipText(final String text) {
-        final MenuComponentPeer peer = getPeer();
+        Object peer = AWTAccessor.getMenuComponentAccessor().getPeer(this);
         if (!(peer instanceof CMenuItem)) return;
 
         ((CMenuItem)peer).setToolTipText(text);
     }
 
-    @SuppressWarnings("deprecation")
     public void setIcon(final Icon i) {
-        final MenuComponentPeer peer = getPeer();
+        Object peer = AWTAccessor.getMenuComponentAccessor().getPeer(this);
         if (!(peer instanceof CMenuItem)) return;
 
         final CMenuItem cmi = (CMenuItem)peer;
@@ -208,9 +209,8 @@
             }
         }
 
-    @SuppressWarnings("deprecation")
     public void setIndeterminate(final boolean indeterminate) {
-        final MenuComponentPeer peer = getPeer();
+        Object peer = AWTAccessor.getMenuComponentAccessor().getPeer(this);
         if (peer instanceof CCheckboxMenuItem) {
             ((CCheckboxMenuItem)peer).setIsIndeterminate(indeterminate);
         }
--- a/jdk/src/java.desktop/macosx/classes/sun/awt/CGraphicsConfig.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/macosx/classes/sun/awt/CGraphicsConfig.java	Wed Jul 05 20:33:35 2017 +0200
@@ -72,7 +72,8 @@
 
     @Override
     public AffineTransform getDefaultTransform() {
-        return new AffineTransform();
+        double scaleFactor = device.getScaleFactor();
+        return AffineTransform.getScaleInstance(scaleFactor, scaleFactor);
     }
 
     @Override
--- a/jdk/src/java.desktop/macosx/classes/sun/awt/CGraphicsDevice.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/macosx/classes/sun/awt/CGraphicsDevice.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -206,17 +206,15 @@
         return true;
     }
 
-    @SuppressWarnings("deprecation")
     private static void enterFullScreenExclusive(Window w) {
-        FullScreenCapable peer = (FullScreenCapable)w.getPeer();
+        FullScreenCapable peer = AWTAccessor.getComponentAccessor().getPeer(w);
         if (peer != null) {
             peer.enterFullScreenMode();
         }
     }
 
-    @SuppressWarnings("deprecation")
     private static void exitFullScreenExclusive(Window w) {
-        FullScreenCapable peer = (FullScreenCapable)w.getPeer();
+        FullScreenCapable peer = AWTAccessor.getComponentAccessor().getPeer(w);
         if (peer != null) {
             peer.exitFullScreenMode();
         }
--- a/jdk/src/java.desktop/macosx/classes/sun/java2d/opengl/CGLVolatileSurfaceManager.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/macosx/classes/sun/java2d/opengl/CGLVolatileSurfaceManager.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -33,13 +33,14 @@
 import java.awt.image.ColorModel;
 import java.awt.peer.ComponentPeer;
 
+import sun.awt.AWTAccessor;
+import sun.awt.AWTAccessor.ComponentAccessor;
 import sun.awt.image.SunVolatileImage;
 import sun.awt.image.VolatileSurfaceManager;
 import sun.java2d.BackBufferCapsProvider;
 import sun.java2d.SurfaceData;
 import static sun.java2d.opengl.OGLContext.OGLContextCaps.*;
 import sun.java2d.pipe.hw.ExtendedBufferCapabilities;
-import static sun.java2d.pipe.hw.AccelSurface.*;
 import static sun.java2d.pipe.hw.ExtendedBufferCapabilities.VSyncType.*;
 
 public class CGLVolatileSurfaceManager extends VolatileSurfaceManager {
@@ -74,11 +75,11 @@
      * Create a pbuffer-based SurfaceData object (or init the backbuffer
      * of an existing window if this is a double buffered GraphicsConfig)
      */
-    @SuppressWarnings("deprecation")
     protected SurfaceData initAcceleratedSurface() {
         SurfaceData sData = null;
         Component comp = vImg.getComponent();
-        final ComponentPeer peer = (comp != null) ? comp.getPeer() : null;
+        final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
+        final ComponentPeer peer = (comp != null) ? acc.getPeer(comp) : null;
 
         try {
             boolean createVSynced = false;
--- a/jdk/src/java.desktop/macosx/classes/sun/lwawt/LWComponentPeer.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/macosx/classes/sun/lwawt/LWComponentPeer.java	Wed Jul 05 20:33:35 2017 +0200
@@ -930,8 +930,8 @@
                     return false;
                 }
                 final LWWindowPeer parentPeer =
-                        (LWWindowPeer) AWTAccessor.getComponentAccessor()
-                                                  .getPeer(parentWindow);
+                        AWTAccessor.getComponentAccessor()
+                                   .getPeer(parentWindow);
                 if (parentPeer == null) {
                     focusLog.fine("request rejected, parentPeer is null");
                     LWKeyboardFocusManagerPeer.removeLastFocusRequest(getTarget());
--- a/jdk/src/java.desktop/macosx/classes/sun/lwawt/LWWindowPeer.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/macosx/classes/sun/lwawt/LWWindowPeer.java	Wed Jul 05 20:33:35 2017 +0200
@@ -33,6 +33,7 @@
 import javax.swing.*;
 
 import sun.awt.*;
+import sun.awt.AWTAccessor.ComponentAccessor;
 import sun.java2d.*;
 import sun.java2d.loops.Blit;
 import sun.java2d.loops.CompositeType;
@@ -505,7 +506,7 @@
     @Override
     public void repositionSecurityWarning() {
         if (warningWindow != null) {
-            AWTAccessor.ComponentAccessor compAccessor = AWTAccessor.getComponentAccessor();
+            ComponentAccessor compAccessor = AWTAccessor.getComponentAccessor();
             Window target = getTarget();
             int x = compAccessor.getX(target);
             int y = compAccessor.getY(target);
@@ -563,8 +564,7 @@
     public void blockWindows(List<Window> windows) {
         //TODO: LWX will probably need some collectJavaToplevels to speed this up
         for (Window w : windows) {
-            WindowPeer wp =
-                    (WindowPeer) AWTAccessor.getComponentAccessor().getPeer(w);
+            WindowPeer wp = AWTAccessor.getComponentAccessor().getPeer(w);
             if (wp != null) {
                 wp.setModalBlocked((Dialog)getTarget(), true);
             }
@@ -1247,7 +1247,8 @@
     private boolean isOneOfOwnersOf(LWWindowPeer peer) {
         Window owner = (peer != null ? peer.getTarget().getOwner() : null);
         while (owner != null) {
-            if ((LWWindowPeer)owner.getPeer() == this) {
+            final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
+            if (acc.getPeer(owner) == this) {
                 return true;
             }
             owner = owner.getOwner();
@@ -1321,8 +1322,8 @@
         while (owner != null && !(owner instanceof Frame || owner instanceof Dialog)) {
             owner = owner.getOwner();
         }
-        return owner == null ? null :
-               (LWWindowPeer) AWTAccessor.getComponentAccessor().getPeer(owner);
+        return owner == null ? null : AWTAccessor.getComponentAccessor()
+                                                 .getPeer(owner);
     }
 
     /**
--- a/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CDragSourceContextPeer.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CDragSourceContextPeer.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -39,6 +39,7 @@
 import java.util.Map;
 import java.util.concurrent.Callable;
 
+import sun.awt.AWTAccessor;
 import sun.awt.dnd.*;
 import sun.lwawt.LWComponentPeer;
 import sun.lwawt.LWWindowPeer;
@@ -88,7 +89,6 @@
         super.startDrag(dsc, cursor, dragImage, dragImageOffset);
     }
 
-    @SuppressWarnings("deprecation")
     protected void startDrag(Transferable transferable, long[] formats, Map<Long, DataFlavor> formatMap) {
         DragGestureEvent trigger = getTrigger();
         InputEvent         triggerEvent = trigger.getTriggerEvent();
@@ -135,7 +135,9 @@
 
         try {
             //It sure will be LWComponentPeer instance as rootComponent is a Window
-            PlatformWindow platformWindow = ((LWComponentPeer)rootComponent.getPeer()).getPlatformWindow();
+            LWComponentPeer<?, ?> peer = AWTAccessor.getComponentAccessor()
+                                                    .getPeer(rootComponent);
+            PlatformWindow platformWindow = peer.getPlatformWindow();
             long nativeViewPtr = CPlatformWindow.getNativeViewPtr(platformWindow);
             if (nativeViewPtr == 0L) throw new InvalidDnDOperationException("Unsupported platform window implementation");
 
--- a/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CEmbeddedFrame.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CEmbeddedFrame.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -30,6 +30,7 @@
 import java.awt.Point;
 import java.awt.Toolkit;
 
+import sun.awt.AWTAccessor;
 import sun.awt.EmbeddedFrame;
 import sun.lwawt.LWWindowPeer;
 
@@ -46,9 +47,8 @@
         show();
     }
 
-    @SuppressWarnings("deprecation")
     public void addNotify() {
-        if (getPeer() == null) {
+        if (!isDisplayable()) {
             LWCToolkit toolkit = (LWCToolkit)Toolkit.getDefaultToolkit();
             LWWindowPeer peer = toolkit.createEmbeddedFrame(this);
             setPeer(peer);
@@ -61,10 +61,9 @@
 
     public void unregisterAccelerator(AWTKeyStroke stroke) {}
 
-    @SuppressWarnings("deprecation")
     protected long getLayerPtr() {
-        LWWindowPeer peer = (LWWindowPeer)getPeer();
-        return peer.getLayerPtr();
+        return AWTAccessor.getComponentAccessor().<LWWindowPeer>getPeer(this)
+                          .getLayerPtr();
     }
 
     // -----------------------------------------------------------------------
--- a/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CImage.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CImage.java	Wed Jul 05 20:33:35 2017 +0200
@@ -138,17 +138,6 @@
             return ((DataBufferInt)bimg.getRaster().getDataBuffer()).getData();
         }
 
-        public CImage createFromImageImmediately(final Image image) {
-            int[]  buffer = imageToArray(image, false);
-
-            if (buffer == null) {
-                return null;
-            }
-
-            return new CImage(nativeCreateNSImageFromArray(buffer, image.getWidth(null),
-                                                           image.getHeight(null)));
-        }
-
         public byte[] getPlatformImageBytes(final Image image) {
             int[] buffer = imageToArray(image, false);
 
@@ -168,20 +157,33 @@
 
         // This is used to create a CImage from a Image
         public CImage createFromImage(final Image image) {
+            return createFromImage(image, true);
+        }
+
+        public CImage createFromImageImmediately(final Image image) {
+            return createFromImage(image, false);
+        }
+
+        // This is used to create a CImage from a Image
+        private CImage createFromImage(final Image image, final boolean prepareImage) {
             if (image instanceof MultiResolutionImage) {
                 List<Image> resolutionVariants
                         = ((MultiResolutionImage) image).getResolutionVariants();
-                return createFromImages(resolutionVariants);
+                return createFromImages(resolutionVariants, prepareImage);
             }
 
-            int[] buffer = imageToArray(image, true);
+            int[] buffer = imageToArray(image, prepareImage);
             if (buffer == null) {
                 return null;
             }
             return new CImage(nativeCreateNSImageFromArray(buffer, image.getWidth(null), image.getHeight(null)));
         }
 
-        public CImage createFromImages(List<Image> images) {
+        public CImage createFromImages(final List<Image> images) {
+            return createFromImages(images, true);
+        }
+
+        private CImage createFromImages(final List<Image> images, final boolean prepareImage) {
             if (images == null || images.isEmpty()) {
                 return null;
             }
@@ -194,8 +196,8 @@
 
             num = 0;
 
-            for (Image img : images) {
-                buffers[num] = imageToArray(img, true);
+            for (final Image img : images) {
+                buffers[num] = imageToArray(img, prepareImage);
                 if (buffers[num] == null) {
                     // Unable to process the image
                     continue;
@@ -210,9 +212,9 @@
             }
 
             return new CImage(nativeCreateNSImageFromArrays(
-                        Arrays.copyOf(buffers, num),
-                        Arrays.copyOf(w, num),
-                        Arrays.copyOf(h, num)));
+                    Arrays.copyOf(buffers, num),
+                    Arrays.copyOf(w, num),
+                    Arrays.copyOf(h, num)));
         }
 
         static int getSelectorAsInt(final String fromString) {
--- a/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CInputMethod.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CInputMethod.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -38,9 +38,12 @@
 import java.text.*;
 import javax.swing.text.JTextComponent;
 
+import sun.awt.AWTAccessor;
 import sun.awt.im.InputMethodAdapter;
 import sun.lwawt.*;
 
+import static sun.awt.AWTAccessor.ComponentAccessor;
+
 public class CInputMethod extends InputMethodAdapter {
     private InputMethodContext fIMContext;
     private Component fAwtFocussedComponent;
@@ -385,12 +388,11 @@
 
     // java.awt.Toolkit#getNativeContainer() is not available
     //    from this package
-    @SuppressWarnings("deprecation")
     private LWComponentPeer<?, ?> getNearestNativePeer(Component comp) {
         if (comp==null)
             return null;
-
-        ComponentPeer peer = comp.getPeer();
+        final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
+        ComponentPeer peer = acc.getPeer(comp);
         if (peer==null)
             return null;
 
@@ -398,7 +400,7 @@
             comp = comp.getParent();
             if (comp==null)
                 return null;
-            peer = comp.getPeer();
+            peer = acc.getPeer(comp);
             if (peer==null)
                 return null;
         }
--- a/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CMenuBar.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CMenuBar.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -29,6 +29,8 @@
 import java.awt.MenuBar;
 import java.awt.peer.MenuBarPeer;
 
+import sun.awt.AWTAccessor;
+
 public class CMenuBar extends CMenuComponent implements MenuBarPeer {
 
     private int nextInsertionIndex = -1;
@@ -43,9 +45,8 @@
     }
 
     @Override
-    @SuppressWarnings("deprecation")
     public void addHelpMenu(Menu m) {
-        CMenu cMenu = (CMenu)m.getPeer();
+        CMenu cMenu = AWTAccessor.getMenuComponentAccessor().getPeer(m);
         nativeSetHelpMenu(getModel(), cMenu.getModel());
     }
 
--- a/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -31,12 +31,11 @@
 import java.awt.peer.WindowPeer;
 import java.beans.*;
 import java.lang.reflect.InvocationTargetException;
-import java.util.List;
-import java.util.Objects;
 
 import javax.swing.*;
 
 import sun.awt.*;
+import sun.awt.AWTAccessor.ComponentAccessor;
 import sun.java2d.SurfaceData;
 import sun.java2d.opengl.CGLSurfaceData;
 import sun.lwawt.*;
@@ -193,8 +192,9 @@
         @SuppressWarnings("deprecation")
         public CPlatformWindow convertJComponentToTarget(final JRootPane p) {
             Component root = SwingUtilities.getRoot(p);
-            if (root == null || (LWWindowPeer)root.getPeer() == null) return null;
-            return (CPlatformWindow)((LWWindowPeer)root.getPeer()).getPlatformWindow();
+            final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
+            if (root == null || acc.getPeer(root) == null) return null;
+            return (CPlatformWindow)((LWWindowPeer)acc.getPeer(root)).getPlatformWindow();
         }
     };
 
@@ -523,15 +523,15 @@
     }
 
     @Override // PlatformWindow
-    @SuppressWarnings("deprecation")
     public void setVisible(boolean visible) {
         final long nsWindowPtr = getNSWindowPtr();
 
         // Process parent-child relationship when hiding
+        final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
         if (!visible) {
             // Unparent my children
             for (Window w : target.getOwnedWindows()) {
-                WindowPeer p = (WindowPeer)w.getPeer();
+                WindowPeer p = acc.getPeer(w);
                 if (p instanceof LWWindowPeer) {
                     CPlatformWindow pw = (CPlatformWindow)((LWWindowPeer)p).getPlatformWindow();
                     if (pw != null && pw.isVisible()) {
@@ -627,7 +627,7 @@
 
             // Add my own children to myself
             for (Window w : target.getOwnedWindows()) {
-                WindowPeer p = (WindowPeer)w.getPeer();
+                final Object p = acc.getPeer(w);
                 if (p instanceof LWWindowPeer) {
                     CPlatformWindow pw = (CPlatformWindow)((LWWindowPeer)p).getPlatformWindow();
                     if (pw != null && pw.isVisible()) {
@@ -679,13 +679,13 @@
     }
 
     @Override  // PlatformWindow
-    @SuppressWarnings("deprecation")
     public void toFront() {
         final long nsWindowPtr = getNSWindowPtr();
         LWCToolkit lwcToolkit = (LWCToolkit) Toolkit.getDefaultToolkit();
         Window w = DefaultKeyboardFocusManager.getCurrentKeyboardFocusManager().getActiveWindow();
-        if( w != null && w.getPeer() != null
-                && ((LWWindowPeer)w.getPeer()).getPeerType() == LWWindowPeer.PeerType.EMBEDDED_FRAME
+        final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
+        if( w != null && acc.getPeer(w) != null
+                && ((LWWindowPeer)acc.getPeer(w)).getPeerType() == LWWindowPeer.PeerType.EMBEDDED_FRAME
                 && !lwcToolkit.isApplicationActive()) {
             lwcToolkit.activateApplicationIgnoringOtherApps();
         }
--- a/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPrinterJob.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPrinterJob.java	Wed Jul 05 20:33:35 2017 +0200
@@ -36,6 +36,10 @@
 import javax.print.*;
 import javax.print.attribute.PrintRequestAttributeSet;
 import javax.print.attribute.HashPrintRequestAttributeSet;
+import javax.print.attribute.standard.Media;
+import javax.print.attribute.standard.MediaPrintableArea;
+import javax.print.attribute.standard.MediaSize;
+import javax.print.attribute.standard.MediaSizeName;
 import javax.print.attribute.standard.PageRanges;
 
 import sun.java2d.*;
@@ -745,4 +749,34 @@
     protected void startPage(PageFormat arg0, Printable arg1, int arg2, boolean arg3) throws PrinterException {
         // TODO Auto-generated method stub
     }
-}
+
+    @Override
+    protected MediaSize getMediaSize(Media media, PrintService service,
+            PageFormat page) {
+        if (media == null || !(media instanceof MediaSizeName)) {
+            return getDefaultMediaSize(page);
+        }
+        MediaSize size = MediaSize.getMediaSizeForName((MediaSizeName) media);
+        return size != null ? size : getDefaultMediaSize(page);
+    }
+
+    private MediaSize getDefaultMediaSize(PageFormat page){
+            final int inch = 72;
+            Paper paper = page.getPaper();
+            float width = (float) (paper.getWidth() / inch);
+            float height = (float) (paper.getHeight() / inch);
+            return new MediaSize(width, height, MediaSize.INCH);
+    }
+
+    @Override
+    protected MediaPrintableArea getDefaultPrintableArea(PageFormat page, double w, double h) {
+        final float dpi = 72.0f;
+        Paper paper = page.getPaper();
+        return new MediaPrintableArea(
+                (float) (paper.getImageableX() / dpi),
+                (float) (paper.getImageableY() / dpi),
+                (float) (paper.getImageableWidth() / dpi),
+                (float) (paper.getImageableHeight() / dpi),
+                MediaPrintableArea.INCH);
+    }
+}
\ No newline at end of file
--- a/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CTrayIcon.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CTrayIcon.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -37,6 +37,8 @@
 import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
 
+import static sun.awt.AWTAccessor.*;
+
 public class CTrayIcon extends CFRetainedResource implements TrayIconPeer {
     private TrayIcon target;
     private PopupMenu popup;
@@ -68,15 +70,15 @@
         updateImage();
     }
 
-    @SuppressWarnings("deprecation")
     private CPopupMenu checkAndCreatePopupPeer() {
         CPopupMenu menuPeer = null;
         if (popup != null) {
             try {
-                menuPeer = (CPopupMenu)popup.getPeer();
+                final MenuComponentAccessor acc = getMenuComponentAccessor();
+                menuPeer = acc.getPeer(popup);
                 if (menuPeer == null) {
                     popup.addNotify();
-                    menuPeer = (CPopupMenu)popup.getPeer();
+                    menuPeer = acc.getPeer(popup);
                 }
             } catch (Exception e) {
                 e.printStackTrace();
--- a/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CViewEmbeddedFrame.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/CViewEmbeddedFrame.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -30,6 +30,7 @@
 import java.awt.Toolkit;
 import java.lang.reflect.InvocationTargetException;
 
+import sun.awt.AWTAccessor;
 import sun.awt.EmbeddedFrame;
 import sun.lwawt.LWWindowPeer;
 
@@ -48,10 +49,9 @@
         this.nsViewPtr = nsViewPtr;
     }
 
-    @SuppressWarnings("deprecation")
     @Override
     public void addNotify() {
-        if (getPeer() == null) {
+        if (!isDisplayable()) {
             LWCToolkit toolkit = (LWCToolkit) Toolkit.getDefaultToolkit();
             setPeer(toolkit.createEmbeddedFrame(this));
         }
@@ -78,11 +78,12 @@
      * Synthetic event delivery for focus management
      */
     @Override
-    @SuppressWarnings("deprecation")
     public void synthesizeWindowActivation(boolean activated) {
         if (isActive != activated) {
             isActive = activated;
-            ((LWWindowPeer)getPeer()).notifyActivation(activated, null);
+            final LWWindowPeer peer = AWTAccessor.getComponentAccessor()
+                                                 .getPeer(this);
+            peer.notifyActivation(activated, null);
         }
     }
 
@@ -91,13 +92,14 @@
      * Designed to be called from the main thread
      * This method should be called once from the initialization of the SWT_AWT Bridge
      */
-    @SuppressWarnings("deprecation")
     public void validateWithBounds(final int x, final int y, final int width, final int height) {
         try {
+            final LWWindowPeer peer = AWTAccessor.getComponentAccessor()
+                                                 .getPeer(this);
             LWCToolkit.invokeAndWait(new Runnable() {
                 @Override
                 public void run() {
-                    ((LWWindowPeer) getPeer()).setBoundsPrivate(0, 0, width, height);
+                    peer.setBoundsPrivate(0, 0, width, height);
                     validate();
                     setVisible(true);
                 }
--- a/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/LWCToolkit.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/macosx/classes/sun/lwawt/macosx/LWCToolkit.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -293,7 +293,7 @@
     }
 
     @Override
-    protected DesktopPeer createDesktopPeer(Desktop target) {
+    public DesktopPeer createDesktopPeer(Desktop target) {
         return new CDesktopPeer();
     }
 
@@ -575,7 +575,8 @@
 
         final boolean[] ret = new boolean[1];
 
-        try {  invokeAndWait(new Runnable() { public void run() { synchronized(ret) {
+        try {  invokeAndWait(new Runnable() { @Override
+                                              public void run() { synchronized(ret) {
             ret[0] = a.equals(b);
         }}}, c); } catch (Exception e) { e.printStackTrace(); }
 
--- a/jdk/src/java.desktop/share/classes/java/awt/Button.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/java/awt/Button.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -168,13 +168,12 @@
      * application to change the look of the button without changing
      * its functionality.
      *
-     * @see     java.awt.Toolkit#createButton(java.awt.Button)
      * @see     java.awt.Component#getToolkit()
      */
     public void addNotify() {
         synchronized(getTreeLock()) {
             if (peer == null)
-                peer = getToolkit().createButton(this);
+                peer = getComponentFactory().createButton(this);
             super.addNotify();
         }
     }
--- a/jdk/src/java.desktop/share/classes/java/awt/Canvas.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/java/awt/Canvas.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -58,11 +58,13 @@
     }
 
     /**
-     * Constructs a new Canvas given a GraphicsConfiguration object.
+     * Constructs a new Canvas given a GraphicsConfiguration object. If null is
+     * passed, then the default GraphicsConfiguration will be used.
      *
-     * @param config a reference to a GraphicsConfiguration object.
+     * @param config a reference to a GraphicsConfiguration object or null
      *
      * @see GraphicsConfiguration
+     * @see Component#getGraphicsConfiguration()
      */
     public Canvas(GraphicsConfiguration config) {
         this();
@@ -70,10 +72,9 @@
     }
 
     @Override
-    @SuppressWarnings("deprecation")
     void setGraphicsConfiguration(GraphicsConfiguration gc) {
         synchronized(getTreeLock()) {
-            CanvasPeer peer = (CanvasPeer)getPeer();
+            CanvasPeer peer = (CanvasPeer) this.peer;
             if (peer != null) {
                 gc = peer.getAppropriateGraphicsConfiguration(gc);
             }
@@ -94,13 +95,12 @@
     /**
      * Creates the peer of the canvas.  This peer allows you to change the
      * user interface of the canvas without changing its functionality.
-     * @see     java.awt.Toolkit#createCanvas(java.awt.Canvas)
      * @see     java.awt.Component#getToolkit()
      */
     public void addNotify() {
         synchronized (getTreeLock()) {
             if (peer == null)
-                peer = getToolkit().createCanvas(this);
+                peer = getComponentFactory().createCanvas(this);
             super.addNotify();
         }
     }
--- a/jdk/src/java.desktop/share/classes/java/awt/Checkbox.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/java/awt/Checkbox.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -239,13 +239,12 @@
      * Creates the peer of the Checkbox. The peer allows you to change the
      * look of the Checkbox without changing its functionality.
      *
-     * @see     java.awt.Toolkit#createCheckbox(java.awt.Checkbox)
      * @see     java.awt.Component#getToolkit()
      */
     public void addNotify() {
         synchronized (getTreeLock()) {
             if (peer == null)
-                peer = getToolkit().createCheckbox(this);
+                peer = getComponentFactory().createCheckbox(this);
             super.addNotify();
         }
     }
--- a/jdk/src/java.desktop/share/classes/java/awt/CheckboxMenuItem.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/java/awt/CheckboxMenuItem.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -155,13 +155,12 @@
      * change the look of the checkbox item without changing its
      * functionality.
      * Most applications do not call this method directly.
-     * @see     java.awt.Toolkit#createCheckboxMenuItem(java.awt.CheckboxMenuItem)
      * @see     java.awt.Component#getToolkit()
      */
     public void addNotify() {
         synchronized (getTreeLock()) {
             if (peer == null)
-                peer = Toolkit.getDefaultToolkit().createCheckboxMenuItem(this);
+                peer = getComponentFactory().createCheckboxMenuItem(this);
             super.addNotify();
         }
     }
--- a/jdk/src/java.desktop/share/classes/java/awt/Choice.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/java/awt/Choice.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -143,13 +143,12 @@
      * Creates the <code>Choice</code>'s peer.  This peer allows us
      * to change the look
      * of the <code>Choice</code> without changing its functionality.
-     * @see     java.awt.Toolkit#createChoice(java.awt.Choice)
      * @see     java.awt.Component#getToolkit()
      */
     public void addNotify() {
         synchronized (getTreeLock()) {
             if (peer == null)
-                peer = getToolkit().createChoice(this);
+                peer = getComponentFactory().createChoice(this);
             super.addNotify();
         }
     }
--- a/jdk/src/java.desktop/share/classes/java/awt/Component.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/java/awt/Component.java	Wed Jul 05 20:33:35 2017 +0200
@@ -61,6 +61,7 @@
 import javax.accessibility.*;
 import java.applet.Applet;
 
+import sun.awt.ComponentFactory;
 import sun.security.action.GetPropertyAction;
 import sun.awt.AppContext;
 import sun.awt.AWTAccessor;
@@ -198,7 +199,7 @@
      * @see #addNotify
      * @see #removeNotify
      */
-    transient ComponentPeer peer;
+    transient volatile ComponentPeer peer;
 
     /**
      * The parent of the object. It may be <code>null</code>
@@ -924,8 +925,9 @@
             public Cursor getCursor(Component comp) {
                 return comp.getCursor_NoClientCode();
             }
-            public ComponentPeer getPeer(Component comp) {
-                return comp.peer;
+            @SuppressWarnings("unchecked")
+            public <T extends ComponentPeer> T getPeer(Component comp) {
+                return (T) comp.peer;
             }
             public void setPeer(Component comp, ComponentPeer peer) {
                 comp.peer = peer;
@@ -1069,17 +1071,6 @@
     }
 
     /**
-     * @deprecated As of JDK version 1.1,
-     * programs should not directly manipulate peers;
-     * replaced by <code>boolean isDisplayable()</code>.
-     * @return the peer for this component
-     */
-    @Deprecated
-    public ComponentPeer getPeer() {
-        return peer;
-    }
-
-    /**
      * Associate a <code>DropTarget</code> with this component.
      * The <code>Component</code> will receive drops only if it
      * is enabled.
@@ -1095,7 +1086,7 @@
         DropTarget old;
 
         if ((old = dropTarget) != null) {
-            if (peer != null) dropTarget.removeNotify(peer);
+            dropTarget.removeNotify();
 
             DropTarget t = dropTarget;
 
@@ -1113,12 +1104,12 @@
         if ((dropTarget = dt) != null) {
             try {
                 dropTarget.setComponent(this);
-                if (peer != null) dropTarget.addNotify(peer);
+                dropTarget.addNotify();
             } catch (IllegalArgumentException iae) {
                 if (old != null) {
                     try {
                         old.setComponent(this);
-                        if (peer != null) dropTarget.addNotify(peer);
+                        dropTarget.addNotify();
                     } catch (IllegalArgumentException iae1) {
                         // ignore it!
                     }
@@ -1179,7 +1170,7 @@
 
         graphicsConfig = gc;
 
-        ComponentPeer peer = getPeer();
+        ComponentPeer peer = this.peer;
         if (peer != null) {
             return peer.updateGraphicsData(gc);
         }
@@ -1239,6 +1230,14 @@
         return Toolkit.getDefaultToolkit();
     }
 
+    final ComponentFactory getComponentFactory() {
+        final Toolkit toolkit = getToolkit();
+        if (toolkit instanceof ComponentFactory) {
+            return (ComponentFactory) toolkit;
+        }
+        throw new AWTError("UI components are unsupported by: " + toolkit);
+    }
+
     /**
      * Determines whether this component is valid. A component is valid
      * when it is correctly sized and positioned within its parent
@@ -1281,7 +1280,7 @@
      * @since 1.2
      */
     public boolean isDisplayable() {
-        return getPeer() != null;
+        return peer != null;
     }
 
     /**
@@ -1336,7 +1335,11 @@
             return null;
         }
         Window win = getContainingWindow();
-        if (!Toolkit.getDefaultToolkit().getMouseInfoPeer().isWindowUnderMouse(win)) {
+        Toolkit toolkit = Toolkit.getDefaultToolkit();
+        if (!(toolkit instanceof ComponentFactory)) {
+            return null;
+        }
+        if (!((ComponentFactory) toolkit).getMouseInfoPeer().isWindowUnderMouse(win)) {
             return null;
         }
         final boolean INCLUDE_DISABLED = true;
@@ -2582,7 +2585,7 @@
      * @since 1.2
      */
     public boolean isOpaque() {
-        if (getPeer() == null) {
+        if (peer == null) {
             return false;
         }
         else {
@@ -2608,7 +2611,7 @@
      * @since 1.2
      */
     public boolean isLightweight() {
-        return getPeer() instanceof LightweightPeer;
+        return peer instanceof LightweightPeer;
     }
 
 
@@ -3126,7 +3129,6 @@
      *          obtained
      * @return the font metrics for <code>font</code>
      * @see       #getFont
-     * @see       #getPeer
      * @see       java.awt.peer.ComponentPeer#getFontMetrics(Font)
      * @see       Toolkit#getFontMetrics(Font)
      * @since     1.0
@@ -3186,7 +3188,7 @@
 
             if (nativeContainer == null) return;
 
-            ComponentPeer cPeer = nativeContainer.getPeer();
+            ComponentPeer cPeer = nativeContainer.peer;
 
             if (cPeer != null) {
                 cPeer.updateCursorImmediately();
@@ -5019,7 +5021,7 @@
                 if (source != null) {
                     Container target = source.getNativeContainer();
                     if (target != null) {
-                        tpeer = target.getPeer();
+                        tpeer = target.peer;
                     }
                 }
             }
@@ -6972,7 +6974,7 @@
                 if (peer == null) {
                     // Update both the Component's peer variable and the local
                     // variable we use for thread safety.
-                    this.peer = peer = getToolkit().createComponent(this);
+                    this.peer = peer = getComponentFactory().createComponent(this);
                 }
 
                 // This is a lightweight component which means it won't be
@@ -7022,7 +7024,7 @@
                 popup.addNotify();
             }
 
-            if (dropTarget != null) dropTarget.addNotify(peer);
+            if (dropTarget != null) dropTarget.addNotify();
 
             peerFont = getFont();
 
@@ -7109,7 +7111,7 @@
                     ((FlipBufferStrategy)bufferStrategy).destroyBuffers();
                 }
 
-                if (dropTarget != null) dropTarget.removeNotify(peer);
+                if (dropTarget != null) dropTarget.removeNotify();
 
                 // Hide peer first to stop system events such as cursor moves.
                 if (visible) {
@@ -9851,7 +9853,7 @@
         }
 
         if (!isLightweight()) {
-            ComponentPeer peer = getPeer();
+            ComponentPeer peer = this.peer;
             if (peer != null) {
                 // The Region class has some optimizations. That's why
                 // we should manually check whether it's empty and
@@ -9975,7 +9977,7 @@
             for (int i = indexAbove; i > -1; i--) {
                 Component comp = cont.getComponent(i);
                 if (comp != null && comp.isDisplayable() && !comp.isLightweight()) {
-                    return comp.getPeer();
+                    return comp.peer;
                 }
             }
             // traversing the hierarchy up to the closest HW container;
--- a/jdk/src/java.desktop/share/classes/java/awt/Container.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/java/awt/Container.java	Wed Jul 05 20:33:35 2017 +0200
@@ -820,7 +820,7 @@
                 }
             } else {
                 // Q: Need to update NativeInLightFixer?
-                comp.getPeer().reparent(parentPeer);
+                comp.peer.reparent(parentPeer);
             }
         }
     }
@@ -840,10 +840,10 @@
             // If component is lightweight container we need to reparent all its explicit  heavyweight children
             if (comp instanceof Container) {
                 // Traverse component's tree till depth-first until encountering heavyweight component
-                reparentTraverse((ContainerPeer)getPeer(), (Container)comp);
+                reparentTraverse((ContainerPeer)peer, (Container)comp);
             }
         } else {
-            comp.getPeer().reparent((ContainerPeer)getPeer());
+            comp.peer.reparent((ContainerPeer) peer);
         }
     }
 
@@ -4195,7 +4195,7 @@
                 }
             } else {
                 if (comp.isVisible()) {
-                    ComponentPeer peer = comp.getPeer();
+                    ComponentPeer peer = comp.peer;
                     if (peer != null) {
                         peer.setVisible(true);
                     }
@@ -4217,7 +4217,7 @@
                 }
             } else {
                 if (comp.isVisible()) {
-                    ComponentPeer peer = comp.getPeer();
+                    ComponentPeer peer = comp.peer;
                     if (peer != null) {
                         peer.setVisible(false);
                     }
@@ -4239,7 +4239,7 @@
                     ((Container)comp).recursiveRelocateHeavyweightChildren(newOrigin);
                 }
             } else {
-                ComponentPeer peer = comp.getPeer();
+                ComponentPeer peer = comp.peer;
                 if (peer != null) {
                     peer.setBounds(origin.x + comp.getX(), origin.y + comp.getY(),
                             comp.getWidth(), comp.getHeight(),
--- a/jdk/src/java.desktop/share/classes/java/awt/ContainerOrderFocusTraversalPolicy.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/java/awt/ContainerOrderFocusTraversalPolicy.java	Wed Jul 05 20:33:35 2017 +0200
@@ -504,7 +504,10 @@
                 } else if (comp instanceof Container && comp != aContainer) {
                     Container cont = (Container)comp;
                     if (cont.isFocusTraversalPolicyProvider()) {
-                        return cont.getFocusTraversalPolicy().getLastComponent(cont);
+                        Component retComp = cont.getFocusTraversalPolicy().getLastComponent(cont);
+                        if (retComp != null) {
+                            return retComp;
+                        }
                     }
                 }
             }
--- a/jdk/src/java.desktop/share/classes/java/awt/DefaultFocusTraversalPolicy.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/java/awt/DefaultFocusTraversalPolicy.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -93,7 +93,6 @@
      * @return <code>true</code> if aComponent meets the above requirements;
      *         <code>false</code> otherwise
      */
-    @SuppressWarnings("deprecation")
     protected boolean accept(Component aComponent) {
         if (!(aComponent.isVisible() && aComponent.isDisplayable() &&
               aComponent.isEnabled()))
@@ -123,7 +122,7 @@
             return focusable;
         }
 
-        ComponentPeer peer = aComponent.getPeer();
+        ComponentPeer peer = aComponent.peer;
         return (peer != null && peer.isFocusable());
     }
 }
--- a/jdk/src/java.desktop/share/classes/java/awt/DefaultKeyboardFocusManager.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/java/awt/DefaultKeyboardFocusManager.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -796,7 +796,6 @@
      * @return <code>true</code>
      * @see Component#dispatchEvent
      */
-    @SuppressWarnings("deprecation")
     public boolean dispatchKeyEvent(KeyEvent e) {
         Component focusOwner = (((AWTEvent)e).isPosted) ? getFocusOwner() : e.getComponent();
 
@@ -824,14 +823,14 @@
 
         // Allow the peer to process KeyEvent
         Component source = e.getComponent();
-        ComponentPeer peer = source.getPeer();
+        ComponentPeer peer = source.peer;
 
         if (peer == null || peer instanceof LightweightPeer) {
             // if focus owner is lightweight then its native container
             // processes event
             Container target = source.getNativeContainer();
             if (target != null) {
-                peer = target.getPeer();
+                peer = target.peer;
             }
         }
         if (peer != null) {
@@ -1049,7 +1048,7 @@
             Component source = (Component)ke.getSource();
             Container target = source.getNativeContainer();
             if (target != null) {
-                ComponentPeer peer = target.getPeer();
+                ComponentPeer peer = target.peer;
                 if (peer != null) {
                     peer.handleEvent(ke);
                     /**
--- a/jdk/src/java.desktop/share/classes/java/awt/Desktop.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/java/awt/Desktop.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,19 +25,16 @@
 
 package java.awt;
 
+import java.awt.peer.DesktopPeer;
 import java.io.File;
+import java.io.FilePermission;
 import java.io.IOException;
-import java.net.URISyntaxException;
-import java.net.URI;
-import java.net.URL;
 import java.net.MalformedURLException;
-import java.awt.AWTPermission;
-import java.awt.GraphicsEnvironment;
-import java.awt.HeadlessException;
-import java.awt.peer.DesktopPeer;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+
 import sun.awt.SunToolkit;
-import sun.awt.HeadlessToolkit;
-import java.io.FilePermission;
 import sun.security.util.SecurityConstants;
 
 /**
@@ -122,7 +119,11 @@
      * Suppresses default constructor for noninstantiability.
      */
     private Desktop() {
-        peer = Toolkit.getDefaultToolkit().createDesktopPeer(this);
+        Toolkit defaultToolkit = Toolkit.getDefaultToolkit();
+        // same cast as in isDesktopSupported()
+        if (defaultToolkit instanceof SunToolkit) {
+            peer = ((SunToolkit) defaultToolkit).createDesktopPeer(this);
+        }
     }
 
     /**
--- a/jdk/src/java.desktop/share/classes/java/awt/Dialog.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/java/awt/Dialog.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -36,11 +36,9 @@
 import sun.awt.AppContext;
 import sun.awt.AWTPermissions;
 import sun.awt.SunToolkit;
-import sun.awt.PeerEvent;
 import sun.awt.util.IdentityArrayList;
 import sun.awt.util.IdentityLinkedList;
 import java.security.AccessControlException;
-import java.util.function.BooleanSupplier;
 
 /**
  * A Dialog is a top-level window with a title and a border
@@ -749,15 +747,14 @@
      * @see Component#isDisplayable
      * @see #removeNotify
      */
-    @SuppressWarnings("deprecation")
     public void addNotify() {
         synchronized (getTreeLock()) {
-            if (parent != null && parent.getPeer() == null) {
+            if (parent != null && parent.peer == null) {
                 parent.addNotify();
             }
 
             if (peer == null) {
-                peer = getToolkit().createDialog(this);
+                peer = getComponentFactory().createDialog(this);
             }
             super.addNotify();
         }
--- a/jdk/src/java.desktop/share/classes/java/awt/FileDialog.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/java/awt/FileDialog.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -314,14 +314,13 @@
      * Creates the file dialog's peer.  The peer allows us to change the look
      * of the file dialog without changing its functionality.
      */
-    @SuppressWarnings("deprecation")
     public void addNotify() {
         synchronized(getTreeLock()) {
-            if (parent != null && parent.getPeer() == null) {
+            if (parent != null && parent.peer == null) {
                 parent.addNotify();
             }
             if (peer == null)
-                peer = getToolkit().createFileDialog(this);
+                peer = getComponentFactory().createFileDialog(this);
             super.addNotify();
         }
     }
--- a/jdk/src/java.desktop/share/classes/java/awt/Font.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/java/awt/Font.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -41,10 +41,11 @@
 import java.security.PrivilegedExceptionAction;
 import java.text.AttributedCharacterIterator.Attribute;
 import java.text.CharacterIterator;
-import java.text.StringCharacterIterator;
 import java.util.Hashtable;
 import java.util.Locale;
 import java.util.Map;
+
+import sun.awt.ComponentFactory;
 import sun.font.StandardGlyphVector;
 
 import sun.font.AttributeMap;
@@ -239,6 +240,11 @@
         public boolean isCreatedFont(Font font) {
             return font.createdFont;
         }
+
+        @Override
+        public FontPeer getFontPeer(final Font font) {
+            return font.getFontPeer();
+        }
     }
 
     static {
@@ -434,24 +440,16 @@
     private static final long serialVersionUID = -4206021311591459213L;
 
     /**
-     * Gets the peer of this <code>Font</code>.
-     * @return  the peer of the <code>Font</code>.
-     * @since 1.1
-     * @deprecated Font rendering is now platform independent.
+     * Gets the peer of this {@code Font}.
+     *
+     * @return the peer of the {@code Font}.
      */
-    @Deprecated
-    public FontPeer getPeer(){
-        return getPeer_NoClientCode();
-    }
-    // NOTE: This method is called by privileged threads.
-    //       We implement this functionality in a package-private method
-    //       to insure that it cannot be overridden by client subclasses.
-    //       DO NOT INVOKE CLIENT CODE ON THIS THREAD!
-    @SuppressWarnings("deprecation")
-    final FontPeer getPeer_NoClientCode() {
+    private FontPeer getFontPeer() {
         if(peer == null) {
             Toolkit tk = Toolkit.getDefaultToolkit();
-            this.peer = tk.getFontPeer(name, style);
+            if (tk instanceof ComponentFactory) {
+                peer = ((ComponentFactory) tk).getFontPeer(name, style);
+            }
         }
         return peer;
     }
--- a/jdk/src/java.desktop/share/classes/java/awt/Frame.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/java/awt/Frame.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -24,21 +24,23 @@
  */
 package java.awt;
 
+import java.awt.event.KeyEvent;
+import java.awt.event.WindowEvent;
 import java.awt.peer.FramePeer;
-import java.awt.event.*;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Vector;
-import java.io.Serializable;
+import java.io.IOException;
+import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
-import java.io.ObjectInputStream;
-import java.io.IOException;
-import sun.awt.AppContext;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Vector;
+
+import javax.accessibility.AccessibleContext;
+import javax.accessibility.AccessibleRole;
+import javax.accessibility.AccessibleState;
+import javax.accessibility.AccessibleStateSet;
+
+import sun.awt.AWTAccessor;
 import sun.awt.SunToolkit;
-import sun.awt.AWTAccessor;
-import java.lang.ref.WeakReference;
-import javax.accessibility.*;
 
 /**
  * A <code>Frame</code> is a top-level window with a title and a border.
@@ -474,7 +476,7 @@
     public void addNotify() {
         synchronized (getTreeLock()) {
             if (peer == null) {
-                peer = getToolkit().createFrame(this);
+                peer = getComponentFactory().createFrame(this);
             }
             FramePeer p = (FramePeer)peer;
             MenuBar menuBar = this.menuBar;
--- a/jdk/src/java.desktop/share/classes/java/awt/KeyboardFocusManager.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/java/awt/KeyboardFocusManager.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -3054,11 +3054,10 @@
         return (wto != wfrom);
     }
 
-    @SuppressWarnings("deprecation")
     static Component getHeavyweight(Component comp) {
-        if (comp == null || comp.getPeer() == null) {
+        if (comp == null || comp.peer == null) {
             return null;
-        } else if (comp.getPeer() instanceof LightweightPeer) {
+        } else if (comp.peer instanceof LightweightPeer) {
             return comp.getNativeContainer();
         } else {
             return comp;
--- a/jdk/src/java.desktop/share/classes/java/awt/Label.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/java/awt/Label.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -184,7 +184,7 @@
     public void addNotify() {
         synchronized (getTreeLock()) {
             if (peer == null)
-                peer = getToolkit().createLabel(this);
+                peer = getComponentFactory().createLabel(this);
             super.addNotify();
         }
     }
--- a/jdk/src/java.desktop/share/classes/java/awt/List.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/java/awt/List.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -252,7 +252,7 @@
     public void addNotify() {
         synchronized (getTreeLock()) {
             if (peer == null)
-                peer = getToolkit().createList(this);
+                peer = getComponentFactory().createList(this);
             super.addNotify();
         }
     }
--- a/jdk/src/java.desktop/share/classes/java/awt/Menu.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/java/awt/Menu.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -174,7 +174,7 @@
     public void addNotify() {
         synchronized (getTreeLock()) {
             if (peer == null)
-                peer = Toolkit.getDefaultToolkit().createMenu(this);
+                peer = getComponentFactory().createMenu(this);
             int nitems = getItemCount();
             for (int i = 0 ; i < nitems ; i++) {
                 MenuItem mi = getItem(i);
--- a/jdk/src/java.desktop/share/classes/java/awt/MenuBar.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/java/awt/MenuBar.java	Wed Jul 05 20:33:35 2017 +0200
@@ -143,7 +143,7 @@
     public void addNotify() {
         synchronized (getTreeLock()) {
             if (peer == null)
-                peer = Toolkit.getDefaultToolkit().createMenuBar(this);
+                peer = getComponentFactory().createMenuBar(this);
 
             int nmenus = getMenuCount();
             for (int i = 0 ; i < nmenus ; i++) {
--- a/jdk/src/java.desktop/share/classes/java/awt/MenuComponent.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/java/awt/MenuComponent.java	Wed Jul 05 20:33:35 2017 +0200
@@ -30,6 +30,8 @@
 import java.io.ObjectInputStream;
 import sun.awt.AppContext;
 import sun.awt.AWTAccessor;
+import sun.awt.ComponentFactory;
+
 import javax.accessibility.*;
 
 import java.security.AccessControlContext;
@@ -57,7 +59,7 @@
         }
     }
 
-    transient MenuComponentPeer peer;
+    transient volatile MenuComponentPeer peer;
     transient MenuContainer parent;
 
     /**
@@ -142,6 +144,11 @@
                     menuComp.appContext = appContext;
                 }
                 @Override
+                @SuppressWarnings("unchecked")
+                public <T extends MenuComponentPeer> T getPeer(MenuComponent menuComp) {
+                    return (T) menuComp.peer;
+                }
+                @Override
                 public MenuContainer getParent(MenuComponent menuComp) {
                     return menuComp.parent;
                 }
@@ -179,6 +186,14 @@
                      // getName()
     }
 
+    final ComponentFactory getComponentFactory() {
+        final Toolkit toolkit = Toolkit.getDefaultToolkit();
+        if (toolkit instanceof ComponentFactory) {
+            return (ComponentFactory) toolkit;
+        }
+        throw new AWTError("UI components are unsupported by: " + toolkit);
+    }
+
     /**
      * Gets the name of the menu component.
      * @return        the name of the menu component
@@ -226,16 +241,6 @@
     }
 
     /**
-     * @deprecated As of JDK version 1.1,
-     * programs should not directly manipulate peers.
-     * @return the peer for this component
-     */
-    @Deprecated
-    public MenuComponentPeer getPeer() {
-        return peer;
-    }
-
-    /**
      * Gets the font used for this menu component.
      * @return   the font used in this menu component, if there is one;
      *                  <code>null</code> otherwise
--- a/jdk/src/java.desktop/share/classes/java/awt/MenuItem.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/java/awt/MenuItem.java	Wed Jul 05 20:33:35 2017 +0200
@@ -233,7 +233,7 @@
     public void addNotify() {
         synchronized (getTreeLock()) {
             if (peer == null)
-                peer = Toolkit.getDefaultToolkit().createMenuItem(this);
+                peer = getComponentFactory().createMenuItem(this);
         }
     }
 
--- a/jdk/src/java.desktop/share/classes/java/awt/MouseInfo.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/java/awt/MouseInfo.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -26,6 +26,7 @@
 package java.awt;
 
 import sun.awt.AWTPermissions;
+import sun.awt.ComponentFactory;
 
 /**
  * <code>MouseInfo</code>  provides methods for getting information about the mouse,
@@ -80,8 +81,13 @@
             security.checkPermission(AWTPermissions.WATCH_MOUSE_PERMISSION);
         }
 
+        Toolkit toolkit = Toolkit.getDefaultToolkit();
         Point point = new Point(0, 0);
-        int deviceNum = Toolkit.getDefaultToolkit().getMouseInfoPeer().fillPointWithCoords(point);
+        int deviceNum = 0;
+        if (toolkit instanceof ComponentFactory) {
+            deviceNum = ((ComponentFactory) toolkit).getMouseInfoPeer().fillPointWithCoords(point);
+        }
+
         GraphicsDevice[] gds = GraphicsEnvironment.getLocalGraphicsEnvironment().
                                    getScreenDevices();
         PointerInfo retval = null;
@@ -113,9 +119,13 @@
     /**
      * Returns the number of buttons on the mouse.
      * On systems without a mouse, returns <code>-1</code>.
+     * The number of buttons is obtained from the AWT Toolkit
+     * by requesting the {@code "awt.mouse.numButtons"} desktop property
+     * which is set by the underlying native platform.
      *
      * @exception HeadlessException if GraphicsEnvironment.isHeadless() returns true
      * @return number of buttons on the mouse
+     * @see Toolkit#getDesktopProperty
      * @since 1.5
      */
     public static int getNumberOfButtons() throws HeadlessException {
--- a/jdk/src/java.desktop/share/classes/java/awt/Panel.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/java/awt/Panel.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2007, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -83,7 +83,7 @@
     public void addNotify() {
         synchronized (getTreeLock()) {
             if (peer == null)
-                peer = getToolkit().createPanel(this);
+                peer = getComponentFactory().createPanel(this);
             super.addNotify();
         }
     }
--- a/jdk/src/java.desktop/share/classes/java/awt/PopupMenu.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/java/awt/PopupMenu.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1996, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -121,7 +121,7 @@
             }
             else {
                 if (peer == null)
-                    peer = Toolkit.getDefaultToolkit().createPopupMenu(this);
+                    peer = getComponentFactory().createPopupMenu(this);
                 int nitems = getItemCount();
                 for (int i = 0 ; i < nitems ; i++) {
                     MenuItem mi = getItem(i);
@@ -153,7 +153,6 @@
      *                parent's hierarchy
      * @exception RuntimeException if the parent is not showing on screen
      */
-    @SuppressWarnings("deprecation")
     public void show(Component origin, int x, int y) {
         // Use localParent for thread safety.
         MenuContainer localParent = parent;
@@ -177,7 +176,7 @@
                 throw new IllegalArgumentException("origin not in parent's hierarchy");
             }
         }
-        if (compParent.getPeer() == null || !compParent.isShowing()) {
+        if (compParent.peer == null || !compParent.isShowing()) {
             throw new RuntimeException("parent not showing on screen");
         }
         if (peer == null) {
--- a/jdk/src/java.desktop/share/classes/java/awt/ScrollPane.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/java/awt/ScrollPane.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1996, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -24,7 +24,6 @@
  */
 package java.awt;
 
-import java.awt.peer.LightweightPeer;
 import java.awt.peer.ScrollPanePeer;
 import java.awt.event.*;
 import javax.accessibility.*;
@@ -562,7 +561,7 @@
             }
 
             if (peer == null)
-                peer = getToolkit().createScrollPane(this);
+                peer = getComponentFactory().createScrollPane(this);
             super.addNotify();
 
             // Bug 4124460. Restore the adjustable values.
--- a/jdk/src/java.desktop/share/classes/java/awt/Scrollbar.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/java/awt/Scrollbar.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -433,7 +433,7 @@
     public void addNotify() {
         synchronized (getTreeLock()) {
             if (peer == null)
-                peer = getToolkit().createScrollbar(this);
+                peer = getComponentFactory().createScrollbar(this);
             super.addNotify();
         }
     }
--- a/jdk/src/java.desktop/share/classes/java/awt/TextArea.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/java/awt/TextArea.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -24,15 +24,15 @@
  */
 package java.awt;
 
-import java.awt.event.InputEvent;
-import java.awt.event.KeyEvent;
 import java.awt.peer.TextAreaPeer;
-import java.io.ObjectOutputStream;
+import java.io.IOException;
 import java.io.ObjectInputStream;
-import java.io.IOException;
 import java.util.HashSet;
 import java.util.Set;
-import javax.accessibility.*;
+
+import javax.accessibility.AccessibleContext;
+import javax.accessibility.AccessibleState;
+import javax.accessibility.AccessibleStateSet;
 
 /**
  * A <code>TextArea</code> object is a multi-line region
@@ -290,7 +290,7 @@
     public void addNotify() {
         synchronized (getTreeLock()) {
             if (peer == null)
-                peer = getToolkit().createTextArea(this);
+                peer = getComponentFactory().createTextArea(this);
             super.addNotify();
         }
     }
--- a/jdk/src/java.desktop/share/classes/java/awt/TextField.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/java/awt/TextField.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1995, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1995, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -219,7 +219,7 @@
     public void addNotify() {
         synchronized (getTreeLock()) {
             if (peer == null)
-                peer = getToolkit().createTextField(this);
+                peer = getComponentFactory().createTextField(this);
             super.addNotify();
         }
     }
--- a/jdk/src/java.desktop/share/classes/java/awt/Toolkit.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/java/awt/Toolkit.java	Wed Jul 05 20:33:35 2017 +0200
@@ -25,36 +25,37 @@
 
 package java.awt;
 
-import java.beans.PropertyChangeEvent;
+import java.awt.datatransfer.Clipboard;
+import java.awt.dnd.DragGestureListener;
+import java.awt.dnd.DragGestureRecognizer;
+import java.awt.dnd.DragSource;
 import java.awt.event.*;
-import java.awt.peer.*;
 import java.awt.im.InputMethodHighlight;
+import java.awt.image.ColorModel;
 import java.awt.image.ImageObserver;
 import java.awt.image.ImageProducer;
-import java.awt.image.ColorModel;
-import java.awt.datatransfer.Clipboard;
-import java.awt.dnd.DragSource;
-import java.awt.dnd.DragGestureRecognizer;
-import java.awt.dnd.DragGestureEvent;
-import java.awt.dnd.DragGestureListener;
-import java.awt.dnd.InvalidDnDOperationException;
-import java.awt.dnd.peer.DragSourceContextPeer;
-import java.net.URL;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.beans.PropertyChangeSupport;
 import java.io.File;
 import java.io.FileInputStream;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.EventListener;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.MissingResourceException;
+import java.util.Properties;
+import java.util.ResourceBundle;
+import java.util.StringTokenizer;
+import java.util.WeakHashMap;
 
-import java.util.*;
-import java.beans.PropertyChangeListener;
-import java.beans.PropertyChangeSupport;
+import sun.awt.AWTAccessor;
+import sun.awt.AWTPermissions;
 import sun.awt.AppContext;
-
 import sun.awt.HeadlessToolkit;
-import sun.awt.NullComponentPeer;
 import sun.awt.PeerEvent;
 import sun.awt.SunToolkit;
-import sun.awt.AWTAccessor;
-import sun.awt.AWTPermissions;
-
 import sun.util.CoreResourceBundleControl;
 
 /**
@@ -112,341 +113,6 @@
  */
 public abstract class Toolkit {
 
-    /**
-     * Creates this toolkit's implementation of the <code>Desktop</code>
-     * using the specified peer interface.
-     * @param     target the desktop to be implemented
-     * @return    this toolkit's implementation of the <code>Desktop</code>
-     * @exception HeadlessException if GraphicsEnvironment.isHeadless()
-     * returns true
-     * @see       java.awt.GraphicsEnvironment#isHeadless
-     * @see       java.awt.Desktop
-     * @see       java.awt.peer.DesktopPeer
-     * @since 1.6
-     */
-    protected abstract DesktopPeer createDesktopPeer(Desktop target)
-      throws HeadlessException;
-
-
-    /**
-     * Creates this toolkit's implementation of <code>Button</code> using
-     * the specified peer interface.
-     * @param     target the button to be implemented.
-     * @return    this toolkit's implementation of <code>Button</code>.
-     * @exception HeadlessException if GraphicsEnvironment.isHeadless()
-     * returns true
-     * @see       java.awt.GraphicsEnvironment#isHeadless
-     * @see       java.awt.Button
-     * @see       java.awt.peer.ButtonPeer
-     */
-    protected abstract ButtonPeer createButton(Button target)
-        throws HeadlessException;
-
-    /**
-     * Creates this toolkit's implementation of <code>TextField</code> using
-     * the specified peer interface.
-     * @param     target the text field to be implemented.
-     * @return    this toolkit's implementation of <code>TextField</code>.
-     * @exception HeadlessException if GraphicsEnvironment.isHeadless()
-     * returns true
-     * @see       java.awt.GraphicsEnvironment#isHeadless
-     * @see       java.awt.TextField
-     * @see       java.awt.peer.TextFieldPeer
-     */
-    protected abstract TextFieldPeer createTextField(TextField target)
-        throws HeadlessException;
-
-    /**
-     * Creates this toolkit's implementation of <code>Label</code> using
-     * the specified peer interface.
-     * @param     target the label to be implemented.
-     * @return    this toolkit's implementation of <code>Label</code>.
-     * @exception HeadlessException if GraphicsEnvironment.isHeadless()
-     * returns true
-     * @see       java.awt.GraphicsEnvironment#isHeadless
-     * @see       java.awt.Label
-     * @see       java.awt.peer.LabelPeer
-     */
-    protected abstract LabelPeer createLabel(Label target)
-        throws HeadlessException;
-
-    /**
-     * Creates this toolkit's implementation of <code>List</code> using
-     * the specified peer interface.
-     * @param     target the list to be implemented.
-     * @return    this toolkit's implementation of <code>List</code>.
-     * @exception HeadlessException if GraphicsEnvironment.isHeadless()
-     * returns true
-     * @see       java.awt.GraphicsEnvironment#isHeadless
-     * @see       java.awt.List
-     * @see       java.awt.peer.ListPeer
-     */
-    protected abstract ListPeer createList(java.awt.List target)
-        throws HeadlessException;
-
-    /**
-     * Creates this toolkit's implementation of <code>Checkbox</code> using
-     * the specified peer interface.
-     * @param     target the check box to be implemented.
-     * @return    this toolkit's implementation of <code>Checkbox</code>.
-     * @exception HeadlessException if GraphicsEnvironment.isHeadless()
-     * returns true
-     * @see       java.awt.GraphicsEnvironment#isHeadless
-     * @see       java.awt.Checkbox
-     * @see       java.awt.peer.CheckboxPeer
-     */
-    protected abstract CheckboxPeer createCheckbox(Checkbox target)
-        throws HeadlessException;
-
-    /**
-     * Creates this toolkit's implementation of <code>Scrollbar</code> using
-     * the specified peer interface.
-     * @param     target the scroll bar to be implemented.
-     * @return    this toolkit's implementation of <code>Scrollbar</code>.
-     * @exception HeadlessException if GraphicsEnvironment.isHeadless()
-     * returns true
-     * @see       java.awt.GraphicsEnvironment#isHeadless
-     * @see       java.awt.Scrollbar
-     * @see       java.awt.peer.ScrollbarPeer
-     */
-    protected abstract ScrollbarPeer createScrollbar(Scrollbar target)
-        throws HeadlessException;
-
-    /**
-     * Creates this toolkit's implementation of <code>ScrollPane</code> using
-     * the specified peer interface.
-     * @param     target the scroll pane to be implemented.
-     * @return    this toolkit's implementation of <code>ScrollPane</code>.
-     * @exception HeadlessException if GraphicsEnvironment.isHeadless()
-     * returns true
-     * @see       java.awt.GraphicsEnvironment#isHeadless
-     * @see       java.awt.ScrollPane
-     * @see       java.awt.peer.ScrollPanePeer
-     * @since     1.1
-     */
-    protected abstract ScrollPanePeer createScrollPane(ScrollPane target)
-        throws HeadlessException;
-
-    /**
-     * Creates this toolkit's implementation of <code>TextArea</code> using
-     * the specified peer interface.
-     * @param     target the text area to be implemented.
-     * @return    this toolkit's implementation of <code>TextArea</code>.
-     * @exception HeadlessException if GraphicsEnvironment.isHeadless()
-     * returns true
-     * @see       java.awt.GraphicsEnvironment#isHeadless
-     * @see       java.awt.TextArea
-     * @see       java.awt.peer.TextAreaPeer
-     */
-    protected abstract TextAreaPeer createTextArea(TextArea target)
-        throws HeadlessException;
-
-    /**
-     * Creates this toolkit's implementation of <code>Choice</code> using
-     * the specified peer interface.
-     * @param     target the choice to be implemented.
-     * @return    this toolkit's implementation of <code>Choice</code>.
-     * @exception HeadlessException if GraphicsEnvironment.isHeadless()
-     * returns true
-     * @see       java.awt.GraphicsEnvironment#isHeadless
-     * @see       java.awt.Choice
-     * @see       java.awt.peer.ChoicePeer
-     */
-    protected abstract ChoicePeer createChoice(Choice target)
-        throws HeadlessException;
-
-    /**
-     * Creates this toolkit's implementation of <code>Frame</code> using
-     * the specified peer interface.
-     * @param     target the frame to be implemented.
-     * @return    this toolkit's implementation of <code>Frame</code>.
-     * @exception HeadlessException if GraphicsEnvironment.isHeadless()
-     * returns true
-     * @see       java.awt.GraphicsEnvironment#isHeadless
-     * @see       java.awt.Frame
-     * @see       java.awt.peer.FramePeer
-     */
-    protected abstract FramePeer createFrame(Frame target)
-        throws HeadlessException;
-
-    /**
-     * Creates this toolkit's implementation of <code>Canvas</code> using
-     * the specified peer interface.
-     * @param     target the canvas to be implemented.
-     * @return    this toolkit's implementation of <code>Canvas</code>.
-     * @see       java.awt.Canvas
-     * @see       java.awt.peer.CanvasPeer
-     */
-    protected abstract CanvasPeer       createCanvas(Canvas target);
-
-    /**
-     * Creates this toolkit's implementation of <code>Panel</code> using
-     * the specified peer interface.
-     * @param     target the panel to be implemented.
-     * @return    this toolkit's implementation of <code>Panel</code>.
-     * @see       java.awt.Panel
-     * @see       java.awt.peer.PanelPeer
-     */
-    protected abstract PanelPeer        createPanel(Panel target);
-
-    /**
-     * Creates this toolkit's implementation of <code>Window</code> using
-     * the specified peer interface.
-     * @param     target the window to be implemented.
-     * @return    this toolkit's implementation of <code>Window</code>.
-     * @exception HeadlessException if GraphicsEnvironment.isHeadless()
-     * returns true
-     * @see       java.awt.GraphicsEnvironment#isHeadless
-     * @see       java.awt.Window
-     * @see       java.awt.peer.WindowPeer
-     */
-    protected abstract WindowPeer createWindow(Window target)
-        throws HeadlessException;
-
-    /**
-     * Creates this toolkit's implementation of <code>Dialog</code> using
-     * the specified peer interface.
-     * @param     target the dialog to be implemented.
-     * @return    this toolkit's implementation of <code>Dialog</code>.
-     * @exception HeadlessException if GraphicsEnvironment.isHeadless()
-     * returns true
-     * @see       java.awt.GraphicsEnvironment#isHeadless
-     * @see       java.awt.Dialog
-     * @see       java.awt.peer.DialogPeer
-     */
-    protected abstract DialogPeer createDialog(Dialog target)
-        throws HeadlessException;
-
-    /**
-     * Creates this toolkit's implementation of <code>MenuBar</code> using
-     * the specified peer interface.
-     * @param     target the menu bar to be implemented.
-     * @return    this toolkit's implementation of <code>MenuBar</code>.
-     * @exception HeadlessException if GraphicsEnvironment.isHeadless()
-     * returns true
-     * @see       java.awt.GraphicsEnvironment#isHeadless
-     * @see       java.awt.MenuBar
-     * @see       java.awt.peer.MenuBarPeer
-     */
-    protected abstract MenuBarPeer createMenuBar(MenuBar target)
-        throws HeadlessException;
-
-    /**
-     * Creates this toolkit's implementation of <code>Menu</code> using
-     * the specified peer interface.
-     * @param     target the menu to be implemented.
-     * @return    this toolkit's implementation of <code>Menu</code>.
-     * @exception HeadlessException if GraphicsEnvironment.isHeadless()
-     * returns true
-     * @see       java.awt.GraphicsEnvironment#isHeadless
-     * @see       java.awt.Menu
-     * @see       java.awt.peer.MenuPeer
-     */
-    protected abstract MenuPeer createMenu(Menu target)
-        throws HeadlessException;
-
-    /**
-     * Creates this toolkit's implementation of <code>PopupMenu</code> using
-     * the specified peer interface.
-     * @param     target the popup menu to be implemented.
-     * @return    this toolkit's implementation of <code>PopupMenu</code>.
-     * @exception HeadlessException if GraphicsEnvironment.isHeadless()
-     * returns true
-     * @see       java.awt.GraphicsEnvironment#isHeadless
-     * @see       java.awt.PopupMenu
-     * @see       java.awt.peer.PopupMenuPeer
-     * @since     1.1
-     */
-    protected abstract PopupMenuPeer createPopupMenu(PopupMenu target)
-        throws HeadlessException;
-
-    /**
-     * Creates this toolkit's implementation of <code>MenuItem</code> using
-     * the specified peer interface.
-     * @param     target the menu item to be implemented.
-     * @return    this toolkit's implementation of <code>MenuItem</code>.
-     * @exception HeadlessException if GraphicsEnvironment.isHeadless()
-     * returns true
-     * @see       java.awt.GraphicsEnvironment#isHeadless
-     * @see       java.awt.MenuItem
-     * @see       java.awt.peer.MenuItemPeer
-     */
-    protected abstract MenuItemPeer createMenuItem(MenuItem target)
-        throws HeadlessException;
-
-    /**
-     * Creates this toolkit's implementation of <code>FileDialog</code> using
-     * the specified peer interface.
-     * @param     target the file dialog to be implemented.
-     * @return    this toolkit's implementation of <code>FileDialog</code>.
-     * @exception HeadlessException if GraphicsEnvironment.isHeadless()
-     * returns true
-     * @see       java.awt.GraphicsEnvironment#isHeadless
-     * @see       java.awt.FileDialog
-     * @see       java.awt.peer.FileDialogPeer
-     */
-    protected abstract FileDialogPeer createFileDialog(FileDialog target)
-        throws HeadlessException;
-
-    /**
-     * Creates this toolkit's implementation of <code>CheckboxMenuItem</code> using
-     * the specified peer interface.
-     * @param     target the checkbox menu item to be implemented.
-     * @return    this toolkit's implementation of <code>CheckboxMenuItem</code>.
-     * @exception HeadlessException if GraphicsEnvironment.isHeadless()
-     * returns true
-     * @see       java.awt.GraphicsEnvironment#isHeadless
-     * @see       java.awt.CheckboxMenuItem
-     * @see       java.awt.peer.CheckboxMenuItemPeer
-     */
-    protected abstract CheckboxMenuItemPeer createCheckboxMenuItem(
-        CheckboxMenuItem target) throws HeadlessException;
-
-    /**
-     * Obtains this toolkit's implementation of helper class for
-     * <code>MouseInfo</code> operations.
-     * @return    this toolkit's implementation of  helper for <code>MouseInfo</code>
-     * @throws    UnsupportedOperationException if this operation is not implemented
-     * @see       java.awt.peer.MouseInfoPeer
-     * @see       java.awt.MouseInfo
-     * @since 1.5
-     */
-    protected MouseInfoPeer getMouseInfoPeer() {
-        throw new UnsupportedOperationException("Not implemented");
-    }
-
-    private static LightweightPeer lightweightMarker;
-
-    /**
-     * Creates a peer for a component or container.  This peer is windowless
-     * and allows the Component and Container classes to be extended directly
-     * to create windowless components that are defined entirely in java.
-     *
-     * @param  target The Component to be created.
-     * @return the peer for the specified component
-     */
-    protected LightweightPeer createComponent(Component target) {
-        if (lightweightMarker == null) {
-            lightweightMarker = new NullComponentPeer();
-        }
-        return lightweightMarker;
-    }
-
-    /**
-     * Creates this toolkit's implementation of <code>Font</code> using
-     * the specified peer interface.
-     * @param     name the font to be implemented
-     * @param     style the style of the font, such as <code>PLAIN</code>,
-     *            <code>BOLD</code>, <code>ITALIC</code>, or a combination
-     * @return    this toolkit's implementation of <code>Font</code>
-     * @see       java.awt.Font
-     * @see       java.awt.peer.FontPeer
-     * @see       java.awt.GraphicsEnvironment#getAllFonts
-     * @deprecated  see java.awt.GraphicsEnvironment#getAllFonts
-     */
-    @Deprecated
-    protected abstract FontPeer getFontPeer(String name, int style);
-
     // The following method is called by the private method
     // <code>updateSystemColors</code> in <code>SystemColor</code>.
 
@@ -1749,17 +1415,6 @@
     }
 
     /**
-     * Creates the peer for a DragSourceContext.
-     * Always throws InvalidDndOperationException if
-     * GraphicsEnvironment.isHeadless() returns true.
-     *
-     * @param  dge the {@code DragGestureEvent}
-     * @return the peer created
-     * @see java.awt.GraphicsEnvironment#isHeadless
-     */
-    public abstract DragSourceContextPeer createDragSourceContextPeer(DragGestureEvent dge) throws InvalidDnDOperationException;
-
-    /**
      * Creates a concrete, platform dependent, subclass of the abstract
      * DragGestureRecognizer class requested, and associates it with the
      * DragSource, Component and DragGestureListener specified.
--- a/jdk/src/java.desktop/share/classes/java/awt/Window.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/java/awt/Window.java	Wed Jul 05 20:33:35 2017 +0200
@@ -29,7 +29,6 @@
 import java.awt.geom.Point2D;
 import java.awt.im.InputContext;
 import java.awt.image.BufferStrategy;
-import java.awt.image.BufferedImage;
 import java.awt.peer.ComponentPeer;
 import java.awt.peer.WindowPeer;
 import java.beans.PropertyChangeListener;
@@ -56,7 +55,6 @@
 import sun.awt.CausedFocusEvent;
 import sun.awt.SunToolkit;
 import sun.awt.util.IdentityArrayList;
-import sun.java2d.Disposer;
 import sun.java2d.pipe.Region;
 import sun.security.action.GetPropertyAction;
 import sun.util.logging.PlatformLogger;
@@ -755,15 +753,14 @@
      * @see Container#removeNotify
      * @since 1.0
      */
-    @SuppressWarnings("deprecation")
     public void addNotify() {
         synchronized (getTreeLock()) {
             Container parent = this.parent;
-            if (parent != null && parent.getPeer() == null) {
+            if (parent != null && parent.peer == null) {
                 parent.addNotify();
             }
             if (peer == null) {
-                peer = getToolkit().createWindow(this);
+                peer = getComponentFactory().createWindow(this);
             }
             synchronized (allWindows) {
                 allWindows.add(this);
@@ -802,7 +799,7 @@
     @SuppressWarnings("deprecation")
     public void pack() {
         Container parent = this.parent;
-        if (parent != null && parent.getPeer() == null) {
+        if (parent != null && parent.peer == null) {
             parent.addNotify();
         }
         if (peer == null) {
@@ -1072,10 +1069,9 @@
         }
     }
 
-    @SuppressWarnings("deprecation")
     static void updateChildFocusableWindowState(Window w) {
-        if (w.getPeer() != null && w.isShowing()) {
-            ((WindowPeer)w.getPeer()).updateFocusableWindowState();
+        if (w.peer != null && w.isShowing()) {
+            ((WindowPeer)w.peer).updateFocusableWindowState();
         }
         for (int i = 0; i < w.ownedWindowList.size(); i++) {
             Window child = w.ownedWindowList.elementAt(i).get();
@@ -1160,10 +1156,9 @@
      * as reported in javadoc. So we need to implement this functionality even if a
      * child overrides dispose() in a wrong way without calling super.dispose().
      */
-    @SuppressWarnings("deprecation")
     void disposeImpl() {
         dispose();
-        if (getPeer() != null) {
+        if (peer != null) {
             doDispose();
         }
     }
@@ -3651,7 +3646,7 @@
                 }
             }
             this.opacity = opacity;
-            WindowPeer peer = (WindowPeer)getPeer();
+            WindowPeer peer = (WindowPeer) this.peer;
             if (peer != null) {
                 peer.setOpacity(opacity);
             }
@@ -3728,7 +3723,6 @@
      *
      * @since 1.7
      */
-    @SuppressWarnings("deprecation")
     public void setShape(Shape shape) {
         synchronized (getTreeLock()) {
             if (shape != null) {
@@ -3746,7 +3740,7 @@
                 }
             }
             this.shape = (shape == null) ? null : new Path2D.Float(shape);
-            WindowPeer peer = (WindowPeer)getPeer();
+            WindowPeer peer = (WindowPeer) this.peer;
             if (peer != null) {
                 peer.applyShape(shape == null ? null : Region.getInstance(shape, null));
             }
@@ -3846,7 +3840,6 @@
      * @see GraphicsConfiguration#isTranslucencyCapable()
      */
     @Override
-    @SuppressWarnings("deprecation")
     public void setBackground(Color bgColor) {
         Color oldBg = getBackground();
         super.setBackground(bgColor);
@@ -3874,7 +3867,7 @@
         } else if ((oldAlpha < 255) && (alpha == 255)) {
             setLayersOpaque(this, true);
         }
-        WindowPeer peer = (WindowPeer)getPeer();
+        WindowPeer peer = (WindowPeer) this.peer;
         if (peer != null) {
             peer.setOpaque(alpha == 255);
         }
@@ -3899,10 +3892,9 @@
         return bg != null ? bg.getAlpha() == 255 : true;
     }
 
-    @SuppressWarnings("deprecation")
     private void updateWindow() {
         synchronized (getTreeLock()) {
-            WindowPeer peer = (WindowPeer)getPeer();
+            WindowPeer peer = (WindowPeer) this.peer;
             if (peer != null) {
                 peer.updateWindow();
             }
@@ -4090,7 +4082,6 @@
                 window.securityWarningHeight = height;
             }
 
-            @SuppressWarnings("deprecation")
             public void setSecurityWarningPosition(Window window,
                     Point2D point, float alignmentX, float alignmentY)
             {
@@ -4100,7 +4091,7 @@
                 window.securityWarningAlignmentY = alignmentY;
 
                 synchronized (window.getTreeLock()) {
-                    WindowPeer peer = (WindowPeer)window.getPeer();
+                    WindowPeer peer = (WindowPeer) window.peer;
                     if (peer != null) {
                         peer.repositionSecurityWarning();
                     }
--- a/jdk/src/java.desktop/share/classes/java/awt/dnd/DragSource.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/java/awt/dnd/DragSource.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -35,13 +35,15 @@
 import java.awt.datatransfer.FlavorMap;
 import java.awt.datatransfer.SystemFlavorMap;
 import java.awt.datatransfer.Transferable;
-import java.awt.dnd.peer.DragSourceContextPeer;
 import java.io.IOException;
 import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
 import java.io.Serializable;
 import java.security.AccessController;
 import java.util.EventListener;
+
+import sun.awt.AWTAccessor;
+import sun.awt.AWTAccessor.DragSourceContextAccessor;
 import sun.awt.dnd.SunDragSourceContextPeer;
 import sun.security.action.GetIntegerAction;
 
@@ -303,22 +305,16 @@
         try {
             if (flavorMap != null) this.flavorMap = flavorMap;
 
-            DragSourceContextPeer dscp = Toolkit.getDefaultToolkit().createDragSourceContextPeer(trigger);
-
-            DragSourceContext     dsc = createDragSourceContext(dscp,
-                                                                trigger,
-                                                                dragCursor,
-                                                                dragImage,
-                                                                imageOffset,
-                                                                transferable,
-                                                                dsl
-                                                                );
+            DragSourceContext dsc = createDragSourceContext(trigger, dragCursor,
+                                                            dragImage,
+                                                            imageOffset,
+                                                            transferable, dsl);
 
             if (dsc == null) {
                 throw new InvalidDnDOperationException();
             }
-
-            dscp.startDrag(dsc, dsc.getCursor(), dragImage, imageOffset); // may throw
+            DragSourceContextAccessor acc = AWTAccessor.getDragSourceContextAccessor();
+            acc.getPeer(dsc).startDrag(dsc, dsc.getCursor(), dragImage, imageOffset); // may throw
         } catch (RuntimeException e) {
             SunDragSourceContextPeer.setDragDropInProgress(false);
             throw e;
@@ -442,7 +438,6 @@
      * is registered with the created <code>DragSourceContext</code>,
      * but <code>NullPointerException</code> is not thrown.
      *
-     * @param dscp          The <code>DragSourceContextPeer</code> for this drag
      * @param dgl           The <code>DragGestureEvent</code> that triggered the
      *                      drag
      * @param dragCursor     The initial {@code Cursor} for this drag operation
@@ -473,8 +468,13 @@
      *         event are equal to <code>DnDConstants.ACTION_NONE</code>.
      */
 
-    protected DragSourceContext createDragSourceContext(DragSourceContextPeer dscp, DragGestureEvent dgl, Cursor dragCursor, Image dragImage, Point imageOffset, Transferable t, DragSourceListener dsl) {
-        return new DragSourceContext(dscp, dgl, dragCursor, dragImage, imageOffset, t, dsl);
+    protected DragSourceContext createDragSourceContext(DragGestureEvent dgl,
+                                                        Cursor dragCursor,
+                                                        Image dragImage,
+                                                        Point imageOffset,
+                                                        Transferable t,
+                                                        DragSourceListener dsl) {
+        return new DragSourceContext(dgl, dragCursor, dragImage, imageOffset, t, dsl);
     }
 
     /**
--- a/jdk/src/java.desktop/share/classes/java/awt/dnd/DragSourceContext.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/java/awt/dnd/DragSourceContext.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,24 +25,25 @@
 
 package java.awt.dnd;
 
+import java.awt.AWTError;
 import java.awt.Component;
 import java.awt.Cursor;
 import java.awt.Image;
 import java.awt.Point;
-
+import java.awt.Toolkit;
 import java.awt.datatransfer.DataFlavor;
 import java.awt.datatransfer.Transferable;
 import java.awt.datatransfer.UnsupportedFlavorException;
-
 import java.awt.dnd.peer.DragSourceContextPeer;
-
 import java.io.IOException;
 import java.io.InvalidObjectException;
+import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
-import java.io.ObjectInputStream;
 import java.io.Serializable;
+import java.util.TooManyListenersException;
 
-import java.util.TooManyListenersException;
+import sun.awt.AWTAccessor;
+import sun.awt.ComponentFactory;
 
 /**
  * The <code>DragSourceContext</code> class is responsible for managing the
@@ -123,6 +124,10 @@
 
     protected static final int CHANGED = 3;
 
+    static {
+        AWTAccessor.setDragSourceContextAccessor(dsc -> dsc.peer);
+    }
+
     /**
      * Called from <code>DragSource</code>, this constructor creates a new
      * <code>DragSourceContext</code> given the
@@ -155,7 +160,6 @@
      * If <code>DragSourceListener</code> is <code>null</code> no exception
      * is thrown.
      *
-     * @param dscp       the <code>DragSourceContextPeer</code> for this drag
      * @param trigger    the triggering event
      * @param dragCursor     the initial {@code Cursor} for this drag operation
      *                       or {@code null} for the default cursor handling;
@@ -179,10 +183,16 @@
      * @throws NullPointerException if dscp, trigger, or t are null, or
      *         if dragImage is non-null and offset is null
      */
-    public DragSourceContext(DragSourceContextPeer dscp,
-                             DragGestureEvent trigger, Cursor dragCursor,
+    public DragSourceContext(DragGestureEvent trigger, Cursor dragCursor,
                              Image dragImage, Point offset, Transferable t,
                              DragSourceListener dsl) {
+        Toolkit toolkit = Toolkit.getDefaultToolkit();
+        if (!(toolkit instanceof ComponentFactory)) {
+            throw new AWTError("Unsupported toolkit: " + toolkit);
+        }
+        DragSourceContextPeer dscp = ((ComponentFactory) toolkit).
+                createDragSourceContextPeer(trigger);
+
         if (dscp == null) {
             throw new NullPointerException("DragSourceContextPeer");
         }
@@ -623,8 +633,7 @@
     /*
      * fields
      */
-
-    private transient DragSourceContextPeer peer;
+    private final transient DragSourceContextPeer peer;
 
     /**
      * The event which triggered the start of the drag.
--- a/jdk/src/java.desktop/share/classes/java/awt/dnd/DropTarget.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/java/awt/dnd/DropTarget.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -49,6 +49,9 @@
 import java.awt.peer.LightweightPeer;
 import java.awt.dnd.peer.DropTargetPeer;
 
+import sun.awt.AWTAccessor;
+import sun.awt.AWTAccessor.ComponentAccessor;
+
 
 /**
  * The <code>DropTarget</code> is associated
@@ -204,19 +207,13 @@
         if (component == c || component != null && component.equals(c))
             return;
 
-        Component     old;
-        ComponentPeer oldPeer = null;
+        final Component old = component;
 
-        if ((old = component) != null) {
+        if (old  != null) {
             clearAutoscroll();
 
             component = null;
-
-            if (componentPeer != null) {
-                oldPeer = componentPeer;
-                removeNotify(componentPeer);
-            }
-
+            removeNotify();
             old.setDropTarget(null);
 
         }
@@ -226,7 +223,7 @@
         } catch (Exception e) { // undo the change
             if (old != null) {
                 old.setDropTarget(this);
-                addNotify(oldPeer);
+                addNotify();
             }
         }
     }
@@ -494,24 +491,24 @@
      * association of the ComponentPeer with the Component may result in
      * a malfunction of the DnD system.
      **********************************************************************
-     *
-     * @param peer The Peer of the Component we are associated with!
-     *
      */
-
-    @SuppressWarnings("deprecation")
-    public void addNotify(ComponentPeer peer) {
-        if (peer == componentPeer) return;
+    public void addNotify() {
+        final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
+        ComponentPeer peer = acc.getPeer(component);
+        if (peer == null || peer == componentPeer) {
+            return;
+        }
 
         componentPeer = peer;
 
+
         for (Component c = component;
              c != null && peer instanceof LightweightPeer; c = c.getParent()) {
-            peer = c.getPeer();
+            peer = acc.getPeer(c);
         }
 
         if (peer instanceof DropTargetPeer) {
-            nativePeer = peer;
+            nativePeer = (DropTargetPeer) peer;
             ((DropTargetPeer)peer).addDropTarget(this);
         } else {
             nativePeer = null;
@@ -530,15 +527,14 @@
      * disassociation of the ComponentPeer from the Component may result in
      * a malfunction of the DnD system.
      **********************************************************************
-     *
-     * @param peer The Peer of the Component we are being disassociated from!
      */
 
-    public void removeNotify(ComponentPeer peer) {
-        if (nativePeer != null)
-            ((DropTargetPeer)nativePeer).removeDropTarget(this);
-
-        componentPeer = nativePeer = null;
+    public void removeNotify() {
+        if (nativePeer != null) {
+            nativePeer.removeDropTarget(this);
+        }
+        componentPeer = null;
+        nativePeer = null;
 
         synchronized (this) {
             if (isDraggingInside) {
@@ -834,7 +830,7 @@
     /*
      * That Component's "native" Peer
      */
-    private transient ComponentPeer nativePeer;
+    private transient DropTargetPeer nativePeer;
 
 
     /**
--- a/jdk/src/java.desktop/share/classes/java/awt/dnd/DropTargetContext.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/java/awt/dnd/DropTargetContext.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2004, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -39,6 +39,8 @@
 import java.util.Arrays;
 import java.util.List;
 
+import sun.awt.AWTAccessor;
+import sun.awt.AWTAccessor.DropTargetContextAccessor;
 
 /**
  * A <code>DropTargetContext</code> is created
@@ -58,6 +60,19 @@
 
     private static final long serialVersionUID = -634158968993743371L;
 
+    static {
+        AWTAccessor.setDropTargetContextAccessor(new DropTargetContextAccessor() {
+            @Override
+            public void reset(DropTargetContext dtc) {
+                dtc.reset();
+            }
+            @Override
+            public void setDropTargetContextPeer(DropTargetContext dtc,
+                                                 DropTargetContextPeer dtcp) {
+                dtc.setDropTargetContextPeer(dtcp);
+            }
+        });
+    }
     /**
      * Construct a <code>DropTargetContext</code>
      * given a specified <code>DropTarget</code>.
@@ -90,20 +105,9 @@
     public Component getComponent() { return dropTarget.getComponent(); }
 
     /**
-     * Called when associated with the <code>DropTargetContextPeer</code>.
-     *
-     * @param dtcp the <code>DropTargetContextPeer</code>
-     */
-
-    public void addNotify(DropTargetContextPeer dtcp) {
-        dropTargetContextPeer = dtcp;
-    }
-
-    /**
      * Called when disassociated with the <code>DropTargetContextPeer</code>.
      */
-
-    public void removeNotify() {
+    void reset() {
         dropTargetContextPeer = null;
         transferable          = null;
     }
@@ -282,12 +286,18 @@
      *
      * @return the platform peer
      */
-
     DropTargetContextPeer getDropTargetContextPeer() {
         return dropTargetContextPeer;
     }
 
     /**
+     * Sets the {@code DropTargetContextPeer}
+     */
+    void setDropTargetContextPeer(final DropTargetContextPeer dtcp) {
+        dropTargetContextPeer = dtcp;
+    }
+
+    /**
      * Creates a TransferableProxy to proxy for the specified
      * Transferable.
      *
@@ -412,7 +422,7 @@
      *
      * @serial
      */
-    private DropTarget dropTarget;
+    private final DropTarget dropTarget;
 
     private transient DropTargetContextPeer dropTargetContextPeer;
 
--- a/jdk/src/java.desktop/share/classes/java/awt/geom/Path2D.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/java/awt/geom/Path2D.java	Wed Jul 05 20:33:35 2017 +0200
@@ -101,6 +101,8 @@
 
     static final int INIT_SIZE = 20;
     static final int EXPAND_MAX = 500;
+    static final int EXPAND_MAX_COORDS = EXPAND_MAX * 2;
+    static final int EXPAND_MIN = 10; // ensure > 6 (cubics)
 
     /**
      * Constructs a new empty {@code Path2D} object.
@@ -141,6 +143,42 @@
     abstract int rectCrossings(double rxmin, double rymin,
                                double rxmax, double rymax);
 
+    static byte[] expandPointTypes(byte[] oldPointTypes, int needed) {
+        final int oldSize = oldPointTypes.length;
+        final int newSizeMin = oldSize + needed;
+        if (newSizeMin < oldSize) {
+            // hard overflow failure - we can't even accommodate
+            // new items without overflowing
+            throw new ArrayIndexOutOfBoundsException(
+                          "pointTypes exceeds maximum capacity !");
+        }
+        // growth algorithm computation
+        int grow = oldSize;
+        if (grow > EXPAND_MAX) {
+            grow = Math.max(EXPAND_MAX, oldSize >> 3); // 1/8th min
+        } else if (grow < EXPAND_MIN) {
+            grow = EXPAND_MIN;
+        }
+        assert grow > 0;
+
+        int newSize = oldSize + grow;
+        if (newSize < newSizeMin) {
+            // overflow in growth algorithm computation
+            newSize = Integer.MAX_VALUE;
+        }
+        while (true) {
+            try {
+                // try allocating the larger array
+                return Arrays.copyOf(oldPointTypes, newSize);
+            } catch (OutOfMemoryError oome) {
+                if (newSize == newSizeMin) {
+                    throw oome;
+                }
+            }
+            newSize = newSizeMin + (newSize - newSizeMin) / 2;
+        }
+    }
+
     /**
      * The {@code Float} class defines a geometric path with
      * coordinates stored in single precision floating point.
@@ -279,31 +317,53 @@
                                      floatCoords[coordindex+1]);
         }
 
+        @Override
         void needRoom(boolean needMove, int newCoords) {
-            if (needMove && numTypes == 0) {
+            if ((numTypes == 0) && needMove) {
                 throw new IllegalPathStateException("missing initial moveto "+
                                                     "in path definition");
             }
-            int size = pointTypes.length;
-            if (numTypes >= size) {
-                int grow = size;
-                if (grow > EXPAND_MAX) {
-                    grow = EXPAND_MAX;
-                } else if (grow == 0) {
-                    grow = 1;
-                }
-                pointTypes = Arrays.copyOf(pointTypes, size+grow);
+            if (numTypes >= pointTypes.length) {
+                pointTypes = expandPointTypes(pointTypes, 1);
+            }
+            if (numCoords > (floatCoords.length - newCoords)) {
+                floatCoords = expandCoords(floatCoords, newCoords);
+            }
+        }
+
+        static float[] expandCoords(float[] oldCoords, int needed) {
+            final int oldSize = oldCoords.length;
+            final int newSizeMin = oldSize + needed;
+            if (newSizeMin < oldSize) {
+                // hard overflow failure - we can't even accommodate
+                // new items without overflowing
+                throw new ArrayIndexOutOfBoundsException(
+                              "coords exceeds maximum capacity !");
             }
-            size = floatCoords.length;
-            if (numCoords + newCoords > size) {
-                int grow = size;
-                if (grow > EXPAND_MAX * 2) {
-                    grow = EXPAND_MAX * 2;
+            // growth algorithm computation
+            int grow = oldSize;
+            if (grow > EXPAND_MAX_COORDS) {
+                grow = Math.max(EXPAND_MAX_COORDS, oldSize >> 3); // 1/8th min
+            } else if (grow < EXPAND_MIN) {
+                grow = EXPAND_MIN;
+            }
+            assert grow > needed;
+
+            int newSize = oldSize + grow;
+            if (newSize < newSizeMin) {
+                // overflow in growth algorithm computation
+                newSize = Integer.MAX_VALUE;
+            }
+            while (true) {
+                try {
+                    // try allocating the larger array
+                    return Arrays.copyOf(oldCoords, newSize);
+                } catch (OutOfMemoryError oome) {
+                    if (newSize == newSizeMin) {
+                        throw oome;
+                    }
                 }
-                if (grow < newCoords) {
-                    grow = newCoords;
-                }
-                floatCoords = Arrays.copyOf(floatCoords, size+grow);
+                newSize = newSizeMin + (newSize - newSizeMin) / 2;
             }
         }
 
@@ -1126,31 +1186,53 @@
                                       doubleCoords[coordindex+1]);
         }
 
+        @Override
         void needRoom(boolean needMove, int newCoords) {
-            if (needMove && numTypes == 0) {
+            if ((numTypes == 0) && needMove) {
                 throw new IllegalPathStateException("missing initial moveto "+
                                                     "in path definition");
             }
-            int size = pointTypes.length;
-            if (numTypes >= size) {
-                int grow = size;
-                if (grow > EXPAND_MAX) {
-                    grow = EXPAND_MAX;
-                } else if (grow == 0) {
-                    grow = 1;
-                }
-                pointTypes = Arrays.copyOf(pointTypes, size+grow);
+            if (numTypes >= pointTypes.length) {
+                pointTypes = expandPointTypes(pointTypes, 1);
+            }
+            if (numCoords > (doubleCoords.length - newCoords)) {
+                doubleCoords = expandCoords(doubleCoords, newCoords);
+            }
+        }
+
+        static double[] expandCoords(double[] oldCoords, int needed) {
+            final int oldSize = oldCoords.length;
+            final int newSizeMin = oldSize + needed;
+            if (newSizeMin < oldSize) {
+                // hard overflow failure - we can't even accommodate
+                // new items without overflowing
+                throw new ArrayIndexOutOfBoundsException(
+                              "coords exceeds maximum capacity !");
             }
-            size = doubleCoords.length;
-            if (numCoords + newCoords > size) {
-                int grow = size;
-                if (grow > EXPAND_MAX * 2) {
-                    grow = EXPAND_MAX * 2;
+            // growth algorithm computation
+            int grow = oldSize;
+            if (grow > EXPAND_MAX_COORDS) {
+                grow = Math.max(EXPAND_MAX_COORDS, oldSize >> 3); // 1/8th min
+            } else if (grow < EXPAND_MIN) {
+                grow = EXPAND_MIN;
+            }
+            assert grow > needed;
+
+            int newSize = oldSize + grow;
+            if (newSize < newSizeMin) {
+                // overflow in growth algorithm computation
+                newSize = Integer.MAX_VALUE;
+            }
+            while (true) {
+                try {
+                    // try allocating the larger array
+                    return Arrays.copyOf(oldCoords, newSize);
+                } catch (OutOfMemoryError oome) {
+                    if (newSize == newSizeMin) {
+                        throw oome;
+                    }
                 }
-                if (grow < newCoords) {
-                    grow = newCoords;
-                }
-                doubleCoords = Arrays.copyOf(doubleCoords, size+grow);
+                newSize = newSizeMin + (newSize - newSizeMin) / 2;
             }
         }
 
--- a/jdk/src/java.desktop/share/classes/java/beans/IndexedPropertyDescriptor.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/java/beans/IndexedPropertyDescriptor.java	Wed Jul 05 20:33:35 2017 +0200
@@ -431,7 +431,7 @@
     /**
      * Package-private constructor.
      * Merge two property descriptors.  Where they conflict, give the
-     * second argument (y) priority over the first argumnnt (x).
+     * second argument (y) priority over the first argument (x).
      *
      * @param x  The first (lower priority) PropertyDescriptor
      * @param y  The second (higher priority) PropertyDescriptor
@@ -439,39 +439,37 @@
 
     IndexedPropertyDescriptor(PropertyDescriptor x, PropertyDescriptor y) {
         super(x,y);
-        if (x instanceof IndexedPropertyDescriptor) {
-            IndexedPropertyDescriptor ix = (IndexedPropertyDescriptor)x;
-            try {
-                Method xr = ix.getIndexedReadMethod();
-                if (xr != null) {
-                    setIndexedReadMethod(xr);
-                }
+        Method tr = null;
+        Method tw = null;
 
-                Method xw = ix.getIndexedWriteMethod();
-                if (xw != null) {
-                    setIndexedWriteMethod(xw);
-                }
-            } catch (IntrospectionException ex) {
-                // Should not happen
-                throw new AssertionError(ex);
+        if (x instanceof IndexedPropertyDescriptor) {
+            IndexedPropertyDescriptor ix = (IndexedPropertyDescriptor) x;
+            tr = ix.getIndexedReadMethod();
+            tw = ix.getIndexedWriteMethod();
+        }
+        if (y instanceof IndexedPropertyDescriptor) {
+            IndexedPropertyDescriptor iy = (IndexedPropertyDescriptor) y;
+            Method yr = iy.getIndexedReadMethod();
+            if (isAssignable(tr, yr)) {
+                tr = yr;
+            }
+
+            Method yw = iy.getIndexedWriteMethod();
+            if (isAssignable(tw, yw)) {
+                tw = yw;
             }
         }
-        if (y instanceof IndexedPropertyDescriptor) {
-            IndexedPropertyDescriptor iy = (IndexedPropertyDescriptor)y;
-            try {
-                Method yr = iy.getIndexedReadMethod();
-                if (yr != null && yr.getDeclaringClass() == getClass0()) {
-                    setIndexedReadMethod(yr);
-                }
 
-                Method yw = iy.getIndexedWriteMethod();
-                if (yw != null && yw.getDeclaringClass() == getClass0()) {
-                    setIndexedWriteMethod(yw);
-                }
-            } catch (IntrospectionException ex) {
-                // Should not happen
-                throw new AssertionError(ex);
+        try {
+            if(tr != null) {
+                setIndexedReadMethod(tr);
             }
+            if(tw != null) {
+                setIndexedWriteMethod(tw);
+            }
+        } catch(IntrospectionException ex) {
+            // Should not happen
+            throw new AssertionError(ex);
         }
     }
 
--- a/jdk/src/java.desktop/share/classes/java/beans/PropertyDescriptor.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/java/beans/PropertyDescriptor.java	Wed Jul 05 20:33:35 2017 +0200
@@ -748,7 +748,7 @@
         appendTo(sb, "writeMethod", this.writeMethodRef.get());
     }
 
-    private boolean isAssignable(Method m1, Method m2) {
+    boolean isAssignable(Method m1, Method m2) {
         if (m1 == null) {
             return true; // choose second method
         }
--- a/jdk/src/java.desktop/share/classes/javax/swing/AbstractCellEditor.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/AbstractCellEditor.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -53,7 +53,13 @@
 @SuppressWarnings("serial") // Same-version serialization only
 public abstract class AbstractCellEditor implements CellEditor, Serializable {
 
+    /**
+     * The list of listeners.
+     */
     protected EventListenerList listenerList = new EventListenerList();
+    /**
+     * The change event.
+     */
     transient protected ChangeEvent changeEvent = null;
 
     // Force this to be implemented.
--- a/jdk/src/java.desktop/share/classes/javax/swing/AbstractListModel.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/AbstractListModel.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -50,6 +50,9 @@
 @SuppressWarnings("serial") // Same-version serialization only
 public abstract class AbstractListModel<E> implements ListModel<E>, Serializable
 {
+    /**
+     * The listener list.
+     */
     protected EventListenerList listenerList = new EventListenerList();
 
 
--- a/jdk/src/java.desktop/share/classes/javax/swing/ButtonGroup.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/ButtonGroup.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -69,7 +69,9 @@
 @SuppressWarnings("serial")
 public class ButtonGroup implements Serializable {
 
-    // the list of buttons participating in this group
+    /**
+     * The list of buttons participating in this group.
+     */
     protected Vector<AbstractButton> buttons = new Vector<AbstractButton>();
 
     /**
--- a/jdk/src/java.desktop/share/classes/javax/swing/DefaultFocusManager.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/DefaultFocusManager.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -57,10 +57,19 @@
     private final LayoutComparator comparator =
         new LayoutComparator();
 
+    /**
+     * Constructs a {@code DefaultFocusManager}.
+     */
     public DefaultFocusManager() {
         setDefaultFocusTraversalPolicy(gluePolicy);
     }
 
+    /**
+     * Returns the component after.
+     * @return the component after
+     * @param aContainer a container
+     * @param aComponent a component
+     */
     public Component getComponentAfter(Container aContainer,
                                        Component aComponent)
     {
@@ -83,6 +92,12 @@
         return null;
     }
 
+    /**
+     * Returns the component before.
+     * @return the component before
+     * @param aContainer a container
+     * @param aComponent a component
+     */
     public Component getComponentBefore(Container aContainer,
                                         Component aComponent)
     {
@@ -105,6 +120,11 @@
         return null;
     }
 
+    /**
+     * Returns the first component.
+     * @return the first component
+     * @param aContainer a container
+     */
     public Component getFirstComponent(Container aContainer) {
         Container root = (aContainer.isFocusCycleRoot())
             ? aContainer
@@ -125,6 +145,11 @@
         return null;
     }
 
+    /**
+     * Returns the last component.
+     * @return the last component
+     * @param aContainer a container
+     */
     public Component getLastComponent(Container aContainer) {
         Container root = (aContainer.isFocusCycleRoot())
             ? aContainer
@@ -145,6 +170,12 @@
         return null;
     }
 
+    /**
+     * Compares the components by their focus traversal cycle order.
+     * @param a the first component
+     * @param b the second component
+     * @return a comparison of the components by their focus traversal cycle order
+     */
     public boolean compareTabOrder(Component a, Component b) {
         return (comparator.compare(a, b) < 0);
     }
--- a/jdk/src/java.desktop/share/classes/javax/swing/DefaultListCellRenderer.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/DefaultListCellRenderer.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -84,6 +84,9 @@
     */
     private static final Border SAFE_NO_FOCUS_BORDER = new EmptyBorder(1, 1, 1, 1);
     private static final Border DEFAULT_NO_FOCUS_BORDER = new EmptyBorder(1, 1, 1, 1);
+    /**
+     * No focus border
+     */
     protected static Border noFocusBorder = DEFAULT_NO_FOCUS_BORDER;
 
     /**
--- a/jdk/src/java.desktop/share/classes/javax/swing/DefaultListSelectionModel.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/DefaultListSelectionModel.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -68,8 +68,14 @@
     private int lastChangedIndex = MIN;
 
     private BitSet value = new BitSet(32);
+    /**
+     * The list of listeners.
+     */
     protected EventListenerList listenerList = new EventListenerList();
 
+    /**
+     * Whether or not the lead anchor notification is enabled.
+     */
     protected boolean leadAnchorNotificationEnabled = true;
 
     /** {@inheritDoc} */
@@ -139,6 +145,8 @@
 
     /**
      * Notifies listeners that we have ended a series of adjustments.
+     * @param isAdjusting true if this is the final change in a series of
+     *          adjustments
      */
     protected void fireValueChanged(boolean isAdjusting) {
         if (lastChangedIndex == MIN) {
--- a/jdk/src/java.desktop/share/classes/javax/swing/DefaultSingleSelectionModel.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/DefaultSingleSelectionModel.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -47,7 +47,8 @@
 @SuppressWarnings("serial") // Same-version serialization only
 public class DefaultSingleSelectionModel implements SingleSelectionModel,
 Serializable {
-    /* Only one ModelChangeEvent is needed per model instance since the
+    /**
+     * Only one ModelChangeEvent is needed per model instance since the
      * event's only (read-only) state is the source property.  The source
      * of events generated here is always "this".
      */
@@ -57,12 +58,16 @@
 
     private int index = -1;
 
-    // implements javax.swing.SingleSelectionModel
+    /**
+     * {@inheritDoc}
+     */
     public int getSelectedIndex() {
         return index;
     }
 
-    // implements javax.swing.SingleSelectionModel
+    /**
+     * {@inheritDoc}
+     */
     public void setSelectedIndex(int index) {
         if (this.index != index) {
             this.index = index;
@@ -70,12 +75,16 @@
         }
     }
 
-    // implements javax.swing.SingleSelectionModel
+    /**
+     * {@inheritDoc}
+     */
     public void clearSelection() {
         setSelectedIndex(-1);
     }
 
-    // implements javax.swing.SingleSelectionModel
+    /**
+     * {@inheritDoc}
+     */
     public boolean isSelected() {
         boolean ret = false;
         if (getSelectedIndex() != -1) {
--- a/jdk/src/java.desktop/share/classes/javax/swing/DesktopManager.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/DesktopManager.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -145,6 +145,7 @@
      * necessary state.  Normally <b>f</b> will be a JInternalFrame.
      *
      * @param f  the {@code JComponent} being resized
+     * @param direction the direction
      */
     void beginResizingFrame(JComponent f, int direction);
 
--- a/jdk/src/java.desktop/share/classes/javax/swing/JColorChooser.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/JColorChooser.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -561,6 +561,9 @@
 // Accessibility support
 ////////////////
 
+    /**
+     * The accessible context.
+     */
     protected AccessibleContext accessibleContext = null;
 
     /**
--- a/jdk/src/java.desktop/share/classes/javax/swing/JComboBox.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/JComboBox.java	Wed Jul 05 20:33:35 2017 +0200
@@ -577,6 +577,8 @@
                 if (!found) {
                     return;
                 }
+
+                getEditor().setItem(anObject);
             }
 
             // Must toggle the state of this flag since this method
@@ -1319,16 +1321,12 @@
      * do not call or override.
      */
     public void actionPerformed(ActionEvent e) {
-        ComboBoxEditor editor = getEditor();
-        if ((editor != null) && (e != null) && (editor == e.getSource()
-                || editor.getEditorComponent() == e.getSource())) {
-            setPopupVisible(false);
-            getModel().setSelectedItem(editor.getItem());
-            String oldCommand = getActionCommand();
-            setActionCommand("comboBoxEdited");
-            fireActionEvent();
-            setActionCommand(oldCommand);
-        }
+        setPopupVisible(false);
+        getModel().setSelectedItem(getEditor().getItem());
+        String oldCommand = getActionCommand();
+        setActionCommand("comboBoxEdited");
+        fireActionEvent();
+        setActionCommand(oldCommand);
     }
 
     /**
--- a/jdk/src/java.desktop/share/classes/javax/swing/JComponent.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/JComponent.java	Wed Jul 05 20:33:35 2017 +0200
@@ -57,6 +57,7 @@
 import static javax.swing.ClientPropertyKey.*;
 import javax.accessibility.*;
 
+import sun.awt.AWTAccessor;
 import sun.awt.SunToolkit;
 import sun.swing.SwingUtilities2;
 import sun.swing.UIClientPropertyKey;
@@ -4218,9 +4219,10 @@
      * @param c  the {@code Component} to be checked
      * @return true if this component is lightweight
      */
-    @SuppressWarnings("deprecation")
     public static boolean isLightweightComponent(Component c) {
-        return c.getPeer() instanceof LightweightPeer;
+        // TODO we cannot call c.isLightweight() because it is incorrectly
+        // overriden in DelegateContainer on osx.
+        return AWTAccessor.getComponentAccessor().isLightweight(c);
     }
 
 
@@ -5033,7 +5035,6 @@
         this.paintingChild = paintingChild;
     }
 
-    @SuppressWarnings("deprecation")
     void _paintImmediately(int x, int y, int w, int h) {
         Graphics g;
         Container c;
@@ -5159,7 +5160,7 @@
         }
 
         // If the clip width or height is negative, don't bother painting
-        if(c == null || c.getPeer() == null ||
+        if(c == null || !c.isDisplayable() ||
                         paintImmediatelyClip.width <= 0 ||
                         paintImmediatelyClip.height <= 0) {
             recycleRectangle(paintImmediatelyClip);
--- a/jdk/src/java.desktop/share/classes/javax/swing/JEditorPane.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/JEditorPane.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -726,6 +726,8 @@
      * URL's can be properly resolved.
      *
      * @param page  the URL of the page
+     * @return a stream for the URL which is about to be loaded
+     * @throws IOException if an I/O problem occurs
      */
     protected InputStream getStream(URL page) throws IOException {
         final URLConnection conn = page.openConnection();
@@ -1712,10 +1714,17 @@
 
         private AccessibleContext accessibleContext;
 
+        /**
+         * Returns the accessible text.
+         * @return the accessible text
+         */
         public AccessibleText getAccessibleText() {
             return new JEditorPaneAccessibleHypertextSupport();
         }
 
+        /**
+         * Constructs an {@code AccessibleJEditorPaneHTML}.
+         */
         protected AccessibleJEditorPaneHTML () {
             HTMLEditorKit kit = (HTMLEditorKit)JEditorPane.this.getEditorKit();
             accessibleContext = kit.getAccessibleContext();
@@ -1791,9 +1800,16 @@
     protected class JEditorPaneAccessibleHypertextSupport
     extends AccessibleJEditorPane implements AccessibleHypertext {
 
+        /**
+         * An HTML link.
+         */
         public class HTMLLink extends AccessibleHyperlink {
             Element element;
 
+            /**
+             * Constructs a {@code HTMLLink}.
+             * @param e the element
+             */
             public HTMLLink(Element e) {
                 element = e;
             }
--- a/jdk/src/java.desktop/share/classes/javax/swing/JInternalFrame.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/JInternalFrame.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -38,7 +38,6 @@
 
 import java.io.ObjectOutputStream;
 import java.io.IOException;
-import java.lang.StringBuilder;
 import java.beans.PropertyChangeListener;
 import sun.awt.AppContext;
 import sun.swing.SwingUtilities2;
@@ -1654,7 +1653,7 @@
      * <dt><code>DO_NOTHING_ON_CLOSE</code>
      * <dd> Do nothing.
      *      This requires the program to handle the operation
-     *      in the <code>windowClosing</code> method
+     *      in the <code>internalFrameClosing</code> method
      *      of a registered <code>InternalFrameListener</code> object.
      * <dt><code>HIDE_ON_CLOSE</code>
      * <dd> Automatically make the internal frame invisible.
--- a/jdk/src/java.desktop/share/classes/javax/swing/JList.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/JList.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -2890,6 +2890,9 @@
 
         int leadSelectionIndex;
 
+        /**
+         * Constructs an {@code AccessibleJList}.
+         */
         public AccessibleJList() {
             super();
             JList.this.addPropertyChangeListener(this);
@@ -3193,6 +3196,11 @@
             private ListModel<E> listModel;
             private ListCellRenderer<? super E> cellRenderer = null;
 
+            /**
+             * Constructs an {@code AccessibleJListChild}.
+             * @param parent the parent
+             * @param indexInParent the index in the parent
+             */
             public AccessibleJListChild(JList<E> parent, int indexInParent) {
                 this.parent = parent;
                 this.setAccessibleParent(parent);
--- a/jdk/src/java.desktop/share/classes/javax/swing/JTable.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/JTable.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -6803,12 +6803,25 @@
         protected class AccessibleJTableModelChange
             implements AccessibleTableModelChange {
 
+            /** The type */
             protected int type;
+            /** The first row */
             protected int firstRow;
+            /** The last row */
             protected int lastRow;
+            /** The first column */
             protected int firstColumn;
+            /** The last column */
             protected int lastColumn;
 
+            /**
+             * Constructs an {@code AccessibleJTableModelChange}.
+             * @param type the type
+             * @param firstRow the first row
+             * @param lastRow the last row
+             * @param firstColumn the first column
+             * @param lastColumn the last column
+             */
             protected AccessibleJTableModelChange(int type, int firstRow,
                                                   int lastRow, int firstColumn,
                                                   int lastColumn) {
@@ -6819,22 +6832,42 @@
                 this.lastColumn = lastColumn;
             }
 
+            /**
+             * Returns the type.
+             * @return the type
+             */
             public int getType() {
                 return type;
             }
 
+            /**
+             * Returns the first row.
+             * @return the first row
+             */
             public int getFirstRow() {
                 return firstRow;
             }
 
+            /**
+             * Returns the last row.
+             * @return the last row
+             */
             public int getLastRow() {
                 return lastRow;
             }
 
+            /**
+             * Returns the first column.
+             * @return the first column
+             */
             public int getFirstColumn() {
                 return firstColumn;
             }
 
+            /**
+             * Returns the last column.
+             * @return the last column
+             */
             public int getLastColumn() {
                 return lastColumn;
             }
--- a/jdk/src/java.desktop/share/classes/javax/swing/JViewport.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/JViewport.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -37,6 +37,8 @@
 
 import java.io.Serializable;
 
+import sun.awt.AWTAccessor;
+
 /**
  * The "viewport" or "porthole" through which you see the underlying
  * information. When you scroll, what moves is the viewport. It is like
@@ -380,7 +382,6 @@
      * @param contentRect the <code>Rectangle</code> to display
      * @see JComponent#isValidateRoot
      * @see java.awt.Component#isValid
-     * @see java.awt.Component#getPeer
      */
     public void scrollRectToVisible(Rectangle contentRect) {
         Component view = getView();
@@ -1448,7 +1449,6 @@
      * Returns true if the component needs to be completely repainted after
      * a blit and a paint is received.
      */
-    @SuppressWarnings("deprecation")
     private boolean needsRepaintAfterBlit() {
         // Find the first heavy weight ancestor. isObscured and
         // canDetermineObscurity are only appropriate for heavy weights.
@@ -1459,7 +1459,8 @@
         }
 
         if (heavyParent != null) {
-            ComponentPeer peer = heavyParent.getPeer();
+            ComponentPeer peer = AWTAccessor.getComponentAccessor()
+                                            .getPeer(heavyParent);
 
             if (peer != null && peer.canDetermineObscurity() &&
                                 !peer.isObscured()) {
--- a/jdk/src/java.desktop/share/classes/javax/swing/RepaintManager.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/RepaintManager.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -401,7 +401,6 @@
      *
      * @see JComponent#repaint
      */
-    @SuppressWarnings("deprecation")
     private void addDirtyRegion0(Container c, int x, int y, int w, int h) {
         /* Special cases we don't have to bother with.
          */
@@ -432,7 +431,7 @@
         // it could lead to the possibility of getting locks out
         // of order and deadlocking.
         for (Container p = c; p != null; p = p.getParent()) {
-            if (!p.isVisible() || (p.getPeer() == null)) {
+            if (!p.isVisible() || !p.isDisplayable()) {
                 return;
             }
             if ((p instanceof Window) || (p instanceof Applet)) {
--- a/jdk/src/java.desktop/share/classes/javax/swing/SortingFocusTraversalPolicy.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/SortingFocusTraversalPolicy.java	Wed Jul 05 20:33:35 2017 +0200
@@ -570,7 +570,10 @@
             } else if (comp instanceof Container && comp != aContainer) {
                 Container cont = (Container)comp;
                 if (cont.isFocusTraversalPolicyProvider()) {
-                    return cont.getFocusTraversalPolicy().getLastComponent(cont);
+                    Component retComp = cont.getFocusTraversalPolicy().getLastComponent(cont);
+                    if (retComp != null) {
+                        return retComp;
+                    }
                 }
             }
         }
--- a/jdk/src/java.desktop/share/classes/javax/swing/ToolTipManager.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/ToolTipManager.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -80,8 +80,13 @@
     private KeyStroke postTip;
     private KeyStroke hideTip;
 
-    // PENDING(ges)
+    /**
+     * Lightweight popup enabled.
+     */
     protected boolean lightWeightPopupEnabled = true;
+    /**
+     * Heavyweight popup enabled.
+     */
     protected boolean heavyWeightPopupEnabled = false;
 
     ToolTipManager() {
@@ -657,7 +662,13 @@
         }
     }
 
+    /**
+     * Inside timer action.
+     */
     protected class insideTimerAction implements ActionListener {
+        /**
+         * {@inheritDoc}
+         */
         public void actionPerformed(ActionEvent e) {
             if(insideComponent != null && insideComponent.isShowing()) {
                 // Lazy lookup
@@ -681,13 +692,25 @@
         }
     }
 
+    /**
+     * Outside timer action.
+     */
     protected class outsideTimerAction implements ActionListener {
+        /**
+         * {@inheritDoc}
+         */
         public void actionPerformed(ActionEvent e) {
             showImmediately = false;
         }
     }
 
+    /**
+     * Still inside timer action.
+     */
     protected class stillInsideTimerAction implements ActionListener {
+        /**
+         * {@inheritDoc}
+         */
         public void actionPerformed(ActionEvent e) {
             hideTipWindow();
             enterTimer.stop();
--- a/jdk/src/java.desktop/share/classes/javax/swing/UIDefaults.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/UIDefaults.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -1191,6 +1191,10 @@
         /** Key bindings are registered under. */
         private Object[] bindings;
 
+        /**
+         * Constructs a {@code LazyInputMap}.
+         * @param bindings the bindings
+         */
         public LazyInputMap(Object[] bindings) {
             this.bindings = bindings;
         }
--- a/jdk/src/java.desktop/share/classes/javax/swing/border/BevelBorder.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/border/BevelBorder.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -52,10 +52,25 @@
     /** Lowered bevel type. */
     public static final int LOWERED = 1;
 
+    /**
+     * The bevel type.
+     */
     protected int bevelType;
+    /**
+     * The color to use for the bevel outer highlight.
+     */
     protected Color highlightOuter;
+    /**
+     * The color to use for the bevel inner highlight.
+     */
     protected Color highlightInner;
+    /**
+     * The color to use for the bevel inner shadow.
+     */
     protected Color shadowInner;
+    /**
+     * the color to use for the bevel outer shadow
+     */
     protected Color shadowOuter;
 
     /**
@@ -262,6 +277,17 @@
      */
     public boolean isBorderOpaque() { return true; }
 
+    /**
+     * Paints a raised bevel for the specified component with the specified
+     * position and size.
+     *
+     * @param c the component for which the raised bevel is being painted
+     * @param g the paint graphics
+     * @param x the x position of the raised bevel
+     * @param y the y position of the raised bevel
+     * @param width the width of the raised bevel
+     * @param height the height of the raised bevel
+     */
     protected void paintRaisedBevel(Component c, Graphics g, int x, int y,
                                     int width, int height)  {
         Color oldColor = g.getColor();
@@ -291,6 +317,17 @@
 
     }
 
+    /**
+     * Paints a lowered bevel for the specified component with the specified
+     * position and size.
+     *
+     * @param c the component for which the lowered bevel is being painted
+     * @param g the paint graphics
+     * @param x the x position of the lowered bevel
+     * @param y the y position of the lowered bevel
+     * @param width the width of the lowered bevel
+     * @param height the height of the lowered bevel
+     */
     protected void paintLoweredBevel(Component c, Graphics g, int x, int y,
                                         int width, int height)  {
         Color oldColor = g.getColor();
--- a/jdk/src/java.desktop/share/classes/javax/swing/border/CompoundBorder.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/border/CompoundBorder.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -56,7 +56,13 @@
  */
 @SuppressWarnings("serial")
 public class CompoundBorder extends AbstractBorder {
+    /**
+     * The outside border.
+     */
     protected Border outsideBorder;
+    /**
+     * The inside border.
+     */
     protected Border insideBorder;
 
     /**
--- a/jdk/src/java.desktop/share/classes/javax/swing/border/EmptyBorder.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/border/EmptyBorder.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -49,7 +49,22 @@
 @SuppressWarnings("serial")
 public class EmptyBorder extends AbstractBorder implements Serializable
 {
-    protected int left, right, top, bottom;
+    /**
+     * The left inset of the border.
+     */
+    protected int left;
+    /**
+     * The right inset of the border.
+     */
+    protected int right;
+    /**
+     * The top inset of the border.
+     */
+    protected int top;
+    /**
+     * The bottom inset of the border.
+     */
+    protected int bottom;
 
     /**
      * Creates an empty border with the specified insets.
--- a/jdk/src/java.desktop/share/classes/javax/swing/border/EtchedBorder.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/border/EtchedBorder.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -59,8 +59,17 @@
     /** Lowered etched type. */
     public static final int LOWERED = 1;
 
+    /**
+     * The type of etch to be drawn by the border.
+     */
     protected int etchType;
+    /**
+     * The color to use for the etched highlight.
+     */
     protected Color highlight;
+    /**
+     * The color to use for the etched shadow.
+     */
     protected Color shadow;
 
     /**
--- a/jdk/src/java.desktop/share/classes/javax/swing/border/LineBorder.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/border/LineBorder.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -56,8 +56,17 @@
     private static Border blackLine;
     private static Border grayLine;
 
+    /**
+     * Thickness of the border.
+     */
     protected int thickness;
+    /**
+     * Color of the border.
+     */
     protected Color lineColor;
+    /**
+     * Whether or not the border has rounded corners.
+     */
     protected boolean roundedCorners;
 
     /**
--- a/jdk/src/java.desktop/share/classes/javax/swing/border/MatteBorder.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/border/MatteBorder.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -49,7 +49,13 @@
 @SuppressWarnings("serial")
 public class MatteBorder extends EmptyBorder
 {
+    /**
+     * The color rendered for the border.
+     */
     protected Color color;
+    /**
+     * The icon to be used for tiling the border.
+     */
     protected Icon tileIcon;
 
     /**
--- a/jdk/src/java.desktop/share/classes/javax/swing/border/TitledBorder.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/border/TitledBorder.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -70,11 +70,29 @@
 @SuppressWarnings("serial")
 public class TitledBorder extends AbstractBorder
 {
+    /**
+     * The title the border should display.
+     */
     protected String title;
+    /**
+     * The border.
+     */
     protected Border border;
+    /**
+     * The position for the title.
+     */
     protected int titlePosition;
+    /**
+     * The justification for the title.
+     */
     protected int titleJustification;
+    /**
+     * The font for rendering the title.
+     */
     protected Font titleFont;
+    /**
+     * The color of the title.
+     */
     protected Color titleColor;
 
     private final JLabel label;
@@ -117,13 +135,19 @@
      */
     static public final int     TRAILING = 5;
 
-    // Space between the border and the component's edge
+    /**
+     * Space between the border and the component's edge
+     */
     static protected final int EDGE_SPACING = 2;
 
-    // Space between the border and text
+    /**
+     * Space between the border and text
+     */
     static protected final int TEXT_SPACING = 2;
 
-    // Horizontal inset of text that is left or right justified
+    /**
+     * Horizontal inset of text that is left or right justified
+     */
     static protected final int TEXT_INSET_H = 5;
 
     /**
@@ -676,6 +700,11 @@
         return justification;
     }
 
+    /**
+     * Returns default font of the titled border.
+     * @return default font of the titled border
+     * @param c the component
+     */
     protected Font getFont(Component c) {
         Font font = getTitleFont();
         if (font != null) {
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/ActionMapUIResource.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/ActionMapUIResource.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -37,6 +37,9 @@
  */
 @SuppressWarnings("serial") // Superclass is not serializable across versions
 public class ActionMapUIResource extends ActionMap implements UIResource {
+    /**
+     * Constructs an {@code ActionMapUIResource}.
+     */
     public ActionMapUIResource() {
     }
 }
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/BorderUIResource.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/BorderUIResource.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -38,7 +38,7 @@
 import javax.swing.plaf.UIResource;
 
 
-/*
+/**
  * A Border wrapper class which implements UIResource.  UI
  * classes which set border properties should use this class
  * to wrap any borders specified as defaults.
@@ -67,6 +67,10 @@
     static Border raisedBevel;
     static Border blackLine;
 
+    /**
+     * Returns a etched border UI resource.
+     * @return a etched border UI resource
+     */
     public static Border getEtchedBorderUIResource() {
         if (etched == null) {
             etched = new EtchedBorderUIResource();
@@ -74,6 +78,10 @@
         return etched;
     }
 
+    /**
+     * Returns a lowered bevel border UI resource.
+     * @return a lowered bevel border UI resource
+     */
     public static Border getLoweredBevelBorderUIResource() {
         if (loweredBevel == null) {
             loweredBevel = new BevelBorderUIResource(BevelBorder.LOWERED);
@@ -81,6 +89,10 @@
         return loweredBevel;
     }
 
+    /**
+     * Returns a raised bevel border UI resource.
+     * @return a raised bevel border UI resource
+     */
     public static Border getRaisedBevelBorderUIResource() {
         if (raisedBevel == null) {
             raisedBevel = new BevelBorderUIResource(BevelBorder.RAISED);
@@ -88,6 +100,10 @@
         return raisedBevel;
     }
 
+    /**
+     * Returns a black line border UI resource.
+     * @return a black line border UI resource
+     */
     public static Border getBlackLineBorderUIResource() {
         if (blackLine == null) {
             blackLine = new LineBorderUIResource(Color.black);
@@ -122,7 +138,15 @@
         return delegate.isBorderOpaque();
     }
 
+    /**
+     * A compound border UI resource.
+     */
     public static class CompoundBorderUIResource extends CompoundBorder implements UIResource {
+        /**
+         * Constructs a {@code CompoundBorderUIResource}.
+         * @param outsideBorder the outside border
+         * @param insideBorder the inside border
+         */
         @ConstructorProperties({"outsideBorder", "insideBorder"})
         public CompoundBorderUIResource(Border outsideBorder, Border insideBorder) {
             super(outsideBorder, insideBorder);
@@ -130,23 +154,49 @@
 
     }
 
+    /**
+     * An empty border UI resource.
+     */
     public static class EmptyBorderUIResource extends EmptyBorder implements UIResource {
 
+        /**
+         * Constructs a {@code EmptyBorderUIResource}.
+         * @param top the top inset of the border
+         * @param left the left inset of the border
+         * @param bottom the bottom inset of the border
+         * @param right the right inset of the border
+         */
         public EmptyBorderUIResource(int top, int left, int bottom, int right)   {
             super(top, left, bottom, right);
         }
+        /**
+         * Constructs a {@code EmptyBorderUIResource}.
+         * @param insets the insets of the border
+         */
         @ConstructorProperties({"borderInsets"})
         public EmptyBorderUIResource(Insets insets) {
             super(insets);
         }
     }
 
+    /**
+     * A line border UI resource.
+     */
     public static class LineBorderUIResource extends LineBorder implements UIResource {
 
+        /**
+         * Constructs a {@code LineBorderUIResource}.
+         * @param color the color for the border
+         */
         public LineBorderUIResource(Color color) {
             super(color);
         }
 
+        /**
+         * Constructs a {@code LineBorderUIResource}.
+         * @param color the color for the border
+         * @param thickness the thickness of the border
+         */
         @ConstructorProperties({"lineColor", "thickness"})
         public LineBorderUIResource(Color color, int thickness)  {
             super(color, thickness);
@@ -154,16 +204,37 @@
     }
 
 
+    /**
+     * A bevel border UI resource.
+     */
     public static class BevelBorderUIResource extends BevelBorder implements UIResource {
 
+        /**
+         * Constructs a {@code BevelBorderUIResource}.
+         * @param bevelType the type of bevel for the border
+         */
         public BevelBorderUIResource(int bevelType) {
             super(bevelType);
         }
 
+        /**
+         * Constructs a {@code BevelBorderUIResource}.
+         * @param bevelType the type of bevel for the border
+         * @param highlight the color to use for the bevel highlight
+         * @param shadow the color to use for the bevel shadow
+         */
         public BevelBorderUIResource(int bevelType, Color highlight, Color shadow) {
             super(bevelType, highlight, shadow);
         }
 
+        /**
+         * Constructs a {@code BevelBorderUIResource}.
+         * @param bevelType the type of bevel for the border
+         * @param highlightOuter the color to use for the bevel outer highlight
+         * @param highlightInner the color to use for the bevel inner highlight
+         * @param shadowOuter the color to use for the bevel outer shadow
+         * @param shadowInner the color to use for the bevel inner shadow
+         */
         @ConstructorProperties({"bevelType", "highlightOuterColor", "highlightInnerColor", "shadowOuterColor", "shadowInnerColor"})
         public BevelBorderUIResource(int bevelType,
                                      Color highlightOuter, Color highlightInner,
@@ -172,57 +243,124 @@
         }
     }
 
+    /**
+     * An etched border UI resource.
+     */
     public static class EtchedBorderUIResource extends EtchedBorder implements UIResource {
 
+        /**
+         * Constructs an {@code EtchedBorderUIResource}.
+         */
         public EtchedBorderUIResource()    {
             super();
         }
 
+        /**
+         * Constructs an {@code EtchedBorderUIResource}.
+         * @param etchType the type of etch to be drawn by the border
+         */
         public EtchedBorderUIResource(int etchType)    {
             super(etchType);
         }
 
+        /**
+         * Constructs an {@code EtchedBorderUIResource}.
+         * @param highlight the color to use for the etched highlight
+         * @param shadow the color to use for the etched shadow
+         */
         public EtchedBorderUIResource(Color highlight, Color shadow)    {
             super(highlight, shadow);
         }
 
+        /**
+         * Constructs an {@code EtchedBorderUIResource}.
+         * @param etchType the type of etch to be drawn by the border
+         * @param highlight the color to use for the etched highlight
+         * @param shadow the color to use for the etched shadow
+         */
         @ConstructorProperties({"etchType", "highlightColor", "shadowColor"})
         public EtchedBorderUIResource(int etchType, Color highlight, Color shadow)    {
             super(etchType, highlight, shadow);
         }
     }
 
+    /**
+     * A matte border UI resource.
+     */
     public static class MatteBorderUIResource extends MatteBorder implements UIResource {
 
+        /**
+         * Constructs a {@code MatteBorderUIResource}.
+         * @param top the top inset of the border
+         * @param left the left inset of the border
+         * @param bottom the bottom inset of the border
+         * @param right the right inset of the border
+         * @param color the color rendered for the border
+         */
         public MatteBorderUIResource(int top, int left, int bottom, int right,
                                      Color color)   {
             super(top, left, bottom, right, color);
         }
 
+        /**
+         * Constructs a {@code MatteBorderUIResource}.
+         * @param top the top inset of the border
+         * @param left the left inset of the border
+         * @param bottom the bottom inset of the border
+         * @param right the right inset of the border
+         * @param tileIcon the icon to be used for tiling the border
+         */
         public MatteBorderUIResource(int top, int left, int bottom, int right,
                                      Icon tileIcon)   {
             super(top, left, bottom, right, tileIcon);
         }
 
+        /**
+         * Constructs a {@code MatteBorderUIResource}.
+         * @param tileIcon the icon to be used for tiling the border
+         */
         public MatteBorderUIResource(Icon tileIcon)   {
             super(tileIcon);
         }
     }
 
+    /**
+     * A titled border UI resource.
+     */
     public static class TitledBorderUIResource extends TitledBorder implements UIResource {
 
+        /**
+         * Constructs a {@code TitledBorderUIResource}.
+         * @param title the title the border should display
+         */
         public TitledBorderUIResource(String title)     {
             super(title);
         }
 
+        /**
+         * Constructs a {@code TitledBorderUIResource}.
+         * @param border the border
+         */
         public TitledBorderUIResource(Border border)       {
             super(border);
         }
 
+        /**
+         * Constructs a {@code TitledBorderUIResource}.
+         * @param border the border
+         * @param title the title the border should display
+         */
         public TitledBorderUIResource(Border border, String title) {
             super(border, title);
         }
 
+        /**
+         * Constructs a {@code TitledBorderUIResource}.
+         * @param border the border
+         * @param title the title the border should display
+         * @param titleJustification the justification fro the title
+         * @param titlePosition the position for the title
+         */
         public TitledBorderUIResource(Border border,
                         String title,
                         int titleJustification,
@@ -230,6 +368,14 @@
             super(border, title, titleJustification, titlePosition);
         }
 
+        /**
+         * Constructs a {@code TitledBorderUIResource}.
+         * @param border the border
+         * @param title the title the border should display
+         * @param titleJustification the justification fro the title
+         * @param titlePosition the position for the title
+         * @param titleFont the font for rendering the title
+         */
         public TitledBorderUIResource(Border border,
                         String title,
                         int titleJustification,
@@ -238,6 +384,15 @@
             super(border, title, titleJustification, titlePosition, titleFont);
         }
 
+        /**
+         * Constructs a {@code TitledBorderUIResource}.
+         * @param border the border
+         * @param title the title the border should display
+         * @param titleJustification the justification fro the title
+         * @param titlePosition the position for the title
+         * @param titleFont the font for rendering the title
+         * @param titleColor the color of the title
+         */
         @ConstructorProperties({"border", "title", "titleJustification", "titlePosition", "titleFont", "titleColor"})
         public TitledBorderUIResource(Border border,
                         String title,
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/ColorUIResource.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/ColorUIResource.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -28,7 +28,7 @@
 import java.awt.Color;
 import java.beans.ConstructorProperties;
 
-/*
+/**
  * A subclass of Color that implements UIResource.  UI
  * classes that create colors should use this class.
  * <p>
@@ -48,19 +48,39 @@
 @SuppressWarnings("serial") // Same-version serialization only
 public class ColorUIResource extends Color implements UIResource
 {
+    /**
+     * Constructs a {@code ColorUIResource}.
+     * @param r the red component
+     * @param g the green component
+     * @param b the blue component
+     */
     @ConstructorProperties({"red", "green", "blue"})
     public ColorUIResource(int r, int g, int b) {
         super(r, g, b);
     }
 
+    /**
+     * Constructs a {@code ColorUIResource}.
+     * @param rgb the combined RGB components
+     */
     public ColorUIResource(int rgb) {
         super(rgb);
     }
 
+    /**
+     * Constructs a {@code ColorUIResource}.
+     * @param r the red component
+     * @param g the green component
+     * @param b the blue component
+     */
     public ColorUIResource(float r, float g, float b) {
         super(r, g, b);
     }
 
+    /**
+     * Constructs a {@code ColorUIResource}.
+     * @param c the color
+     */
     public ColorUIResource(Color c) {
         super(c.getRGB(), (c.getRGB() & 0xFF000000) != 0xFF000000);
     }
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/ComponentInputMapUIResource.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/ComponentInputMapUIResource.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -38,6 +38,10 @@
  */
 @SuppressWarnings("serial") // Superclass is not serializable across versions
 public class ComponentInputMapUIResource extends ComponentInputMap implements UIResource {
+    /**
+     * Constructs a {@code ComponentInputMapUIResource}.
+     * @param component a non-null JComponent
+     */
     public ComponentInputMapUIResource(JComponent component) {
         super(component);
     }
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/DimensionUIResource.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/DimensionUIResource.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -29,7 +29,7 @@
 import javax.swing.plaf.UIResource;
 
 
-/*
+/**
  * A subclass of <code>Dimension</code> that implements
  * <code>UIResource</code>.  UI classes that use
  * <code>Dimension</code> values for default properties
@@ -51,6 +51,11 @@
 @SuppressWarnings("serial") // Same-version serialization only
 public class DimensionUIResource extends Dimension implements UIResource
 {
+    /**
+     * Constructs a {@code DimensionUIResource}.
+     * @param width the width
+     * @param height the height
+     */
     public DimensionUIResource(int width, int height) {
         super(width, height);
     }
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/FileChooserUI.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/FileChooserUI.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -38,13 +38,42 @@
 
 public abstract class FileChooserUI extends ComponentUI
 {
+    /**
+     * Returns an accept-all file filter.
+     * @param fc the file chooser
+     * @return an accept-all file filter
+     */
     public abstract FileFilter getAcceptAllFileFilter(JFileChooser fc);
+    /**
+     * Returns a file view.
+     * @param fc the file chooser
+     * @return a file view
+     */
     public abstract FileView getFileView(JFileChooser fc);
 
+    /**
+     * Returns approve button text.
+     * @param fc the file chooser
+     * @return approve button text.
+     */
     public abstract String getApproveButtonText(JFileChooser fc);
+    /**
+     * Returns the dialog title.
+     * @param fc the file chooser
+     * @return the dialog title.
+     */
     public abstract String getDialogTitle(JFileChooser fc);
 
+    /**
+     * Rescan the current directory.
+     * @param fc the file chooser
+     */
     public abstract void rescanCurrentDirectory(JFileChooser fc);
+    /**
+     * Ensure the file in question is visible.
+     * @param fc the file chooser
+     * @param f the file
+     */
     public abstract void ensureFileIsVisible(JFileChooser fc, File f);
 
     /**
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/FontUIResource.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/FontUIResource.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -50,10 +50,20 @@
 @SuppressWarnings("serial") // Same-version serialization only
 public class FontUIResource extends Font implements UIResource
 {
+    /**
+     * Constructs a {@code FontUIResource}.
+     * @param name the font name
+     * @param style the style constant for the font
+     * @param size the point size of the font
+     */
     public FontUIResource(String name, int style, int size) {
         super(name, style, size);
     }
 
+    /**
+     * Constructs a {@code FontUIResource}.
+     * @param font the font
+     */
     public FontUIResource(Font font) {
         super(font);
     }
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/InputMapUIResource.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/InputMapUIResource.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -37,6 +37,9 @@
  */
 @SuppressWarnings("serial") // Same-version serialization only
 public class InputMapUIResource extends InputMap implements UIResource {
+    /**
+     * Constructs an {@code InputMapUIResource}.
+     */
     public InputMapUIResource() {
     }
 }
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/InsetsUIResource.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/InsetsUIResource.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -29,7 +29,7 @@
 import javax.swing.plaf.UIResource;
 
 
-/*
+/**
  * A subclass of Insets that implements UIResource.  UI
  * classes that use Insets values for default properties
  * should use this class.
@@ -50,6 +50,13 @@
 @SuppressWarnings("serial") // Same-version serialization only
 public class InsetsUIResource extends Insets implements UIResource
 {
+    /**
+     * Constructs an {@code InsetsUIResource}.
+     * @param top the inset from the top
+     * @param left the inset from the left
+     * @param bottom the inset from the bottom
+     * @param right the inset from the right
+     */
     public InsetsUIResource(int top, int left, int bottom, int right) {
         super(top, left, bottom, right);
     }
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/LayerUI.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/LayerUI.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -730,6 +730,15 @@
      * This method is to be overridden instead of {@code JLayer.imageUpdate}.
      * <p>
      * <b>Note:</b> This method is usually called <b>not</b> on the Event Dispatching Thread.
+     *
+     * @param img the image being observed
+     * @param infoflags see imageUpdate for information
+     * @param x the x coordinate
+     * @param y the y coordinate
+     * @param w the width
+     * @param h the height
+     * @param l a {@code JLayer} component
+     * @return false if the infoflags indicate that the image is completely loaded; true otherwise
      */
     public boolean imageUpdate(Image img, int infoflags, int x, int y, int w, int h, JLayer<? extends V> l) {
         return l.imageUpdate(img, infoflags, x, y, w, h);
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/TabbedPaneUI.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/TabbedPaneUI.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 1998, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -35,7 +35,25 @@
  * @author Amy Fowler
  */
 public abstract class TabbedPaneUI extends ComponentUI {
+    /**
+     * Returns the tab for the coordinate.
+     * @param pane the pane
+     * @param x the x coordinate
+     * @param y the y coordinate
+     * @return the tab for the coordinate
+     */
     public abstract int tabForCoordinate(JTabbedPane pane, int x, int y);
+    /**
+     * Returns the rectangle for the tab bounds.
+     * @param pane the pane
+     * @param index the index
+     * @return the rectangle for the tab bounds
+     */
     public abstract Rectangle getTabBounds(JTabbedPane pane, int index);
+    /**
+     * Returns the tab run count.
+     * @param pane the pane
+     * @return the tab run count
+     */
     public abstract int getTabRunCount(JTabbedPane pane);
 }
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicComboBoxUI.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicComboBoxUI.java	Wed Jul 05 20:33:35 2017 +0200
@@ -992,7 +992,7 @@
         getDisplaySize();
         if (sameBaseline) {
             Insets insets = c.getInsets();
-            height = height - insets.top - insets.bottom;
+            height = Math.max(height - insets.top - insets.bottom, 0);
             if (!comboBox.isEditable()) {
                 ListCellRenderer<Object> renderer = comboBox.getRenderer();
                 if (renderer == null)  {
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicDirectoryModel.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicDirectoryModel.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -222,12 +222,14 @@
 
     /**
      * Obsolete - not used.
+     * @param e list data event
      */
     public void intervalAdded(ListDataEvent e) {
     }
 
     /**
      * Obsolete - not used.
+     * @param e list data event
      */
     public void intervalRemoved(ListDataEvent e) {
     }
@@ -241,7 +243,12 @@
         ShellFolder.sort(v);
     }
 
-    // Obsolete - not used
+    /**
+     * Obsolete - not used
+     * @return a comparison of the file names
+     * @param a a file
+     * @param b another file
+     */
     protected boolean lt(File a, File b) {
         // First ignore case when comparing
         int diff = a.getName().toLowerCase().compareTo(b.getName().toLowerCase());
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicFileChooserUI.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicFileChooserUI.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -50,23 +50,39 @@
 public class BasicFileChooserUI extends FileChooserUI {
 
     /* FileView icons */
+    /** Directory icon */
     protected Icon directoryIcon = null;
+    /** File icon */
     protected Icon fileIcon = null;
+    /** Computer icon */
     protected Icon computerIcon = null;
+    /** Hard drive icon */
     protected Icon hardDriveIcon = null;
+    /** Floppy drive icon */
     protected Icon floppyDriveIcon = null;
 
+    /** New folder icon */
     protected Icon newFolderIcon = null;
+    /** Up folder icon */
     protected Icon upFolderIcon = null;
+    /** Home folder icon */
     protected Icon homeFolderIcon = null;
+    /** List view icon */
     protected Icon listViewIcon = null;
+    /** Details view icon */
     protected Icon detailsViewIcon = null;
+    /** View menu icon */
     protected Icon viewMenuIcon = null;
 
+    /** Save button mnemonic */
     protected int saveButtonMnemonic = 0;
+    /** Open button mnemonic */
     protected int openButtonMnemonic = 0;
+    /** Cancel button mnemonic */
     protected int cancelButtonMnemonic = 0;
+    /** Update button mnemonic */
     protected int updateButtonMnemonic = 0;
+    /** Help button mnemonic */
     protected int helpButtonMnemonic = 0;
 
     /**
@@ -77,10 +93,15 @@
      */
     protected int directoryOpenButtonMnemonic = 0;
 
+    /** Save button text */
     protected String saveButtonText = null;
+    /** Open button text */
     protected String openButtonText = null;
+    /** Cancel button text */
     protected String cancelButtonText = null;
+    /** Update button text */
     protected String updateButtonText = null;
+    /** Help button text */
     protected String helpButtonText = null;
 
     /**
@@ -91,13 +112,20 @@
      */
     protected String directoryOpenButtonText = null;
 
+    /** Open dialog title text */
     private String openDialogTitleText = null;
+    /** Save dialog title text */
     private String saveDialogTitleText = null;
 
+    /** Save button tool tip text */
     protected String saveButtonToolTipText = null;
+    /** Open button tool tip text */
     protected String openButtonToolTipText = null;
+    /** Cancel button tool tip text */
     protected String cancelButtonToolTipText = null;
+    /** Update button tool tip text */
     protected String updateButtonToolTipText = null;
+    /** Help button tool tip text */
     protected String helpButtonToolTipText = null;
 
     /**
@@ -158,9 +186,17 @@
         return new BasicFileChooserUI((JFileChooser) c);
     }
 
+    /**
+     * Constructs a {@code BasicFileChooserUI}.
+     * @param b file chooser
+     */
     public BasicFileChooserUI(JFileChooser b) {
     }
 
+    /**
+     * Installs the UI.
+     * @param c the component
+     */
     public void installUI(JComponent c) {
         accessoryPanel = new JPanel(new BorderLayout());
         filechooser = (JFileChooser) c;
@@ -175,6 +211,10 @@
         filechooser.applyComponentOrientation(filechooser.getComponentOrientation());
     }
 
+    /**
+     * Uninstalls the UI.
+     * @param c the component
+     */
     public void uninstallUI(JComponent c) {
         uninstallListeners(filechooser);
         uninstallComponents(filechooser);
@@ -190,12 +230,24 @@
         handler = null;
     }
 
+    /**
+     * Installs the components.
+     * @param fc the file chooser
+     */
     public void installComponents(JFileChooser fc) {
     }
 
+    /**
+     * Uninstalls the components.
+     * @param fc the file chooser
+     */
     public void uninstallComponents(JFileChooser fc) {
     }
 
+    /**
+     * Installs the listeners.
+     * @param fc the file chooser
+     */
     protected void installListeners(JFileChooser fc) {
         propertyChangeListener = createPropertyChangeListener(fc);
         if(propertyChangeListener != null) {
@@ -241,6 +293,10 @@
     }
 
 
+    /**
+     * Uninstalls the listeners.
+     * @param fc the file chooser
+     */
     protected void uninstallListeners(JFileChooser fc) {
         if(propertyChangeListener != null) {
             fc.removePropertyChangeListener(propertyChangeListener);
@@ -252,6 +308,10 @@
     }
 
 
+    /**
+     * Installs the defaults.
+     * @param fc the file chooser
+     */
     protected void installDefaults(JFileChooser fc) {
         installIcons(fc);
         installStrings(fc);
@@ -264,6 +324,10 @@
         LookAndFeel.installProperty(fc, "opaque", Boolean.FALSE);
     }
 
+    /**
+     * Installs the icons.
+     * @param fc the file chooser
+     */
     protected void installIcons(JFileChooser fc) {
         directoryIcon    = UIManager.getIcon("FileView.directoryIcon");
         fileIcon         = UIManager.getIcon("FileView.fileIcon");
@@ -279,6 +343,10 @@
         viewMenuIcon     = UIManager.getIcon("FileChooser.viewMenuIcon");
     }
 
+    /**
+     * Installs the strings.
+     * @param fc the file chooser
+     */
     protected void installStrings(JFileChooser fc) {
 
         Locale l = fc.getLocale();
@@ -315,6 +383,10 @@
         directoryOpenButtonToolTipText = UIManager.getString("FileChooser.directoryOpenButtonToolTipText",l);
     }
 
+    /**
+     * Uninstalls the defaults.
+     * @param fc the file chooser
+     */
     protected void uninstallDefaults(JFileChooser fc) {
         uninstallIcons(fc);
         uninstallStrings(fc);
@@ -323,6 +395,10 @@
         }
     }
 
+    /**
+     * Uninstalls the icons.
+     * @param fc the file chooser
+     */
     protected void uninstallIcons(JFileChooser fc) {
         directoryIcon    = null;
         fileIcon         = null;
@@ -338,6 +414,10 @@
         viewMenuIcon     = null;
     }
 
+    /**
+     * Uninstalls the strings.
+     * @param fc the file chooser
+     */
     protected void uninstallStrings(JFileChooser fc) {
         saveButtonText   = null;
         openButtonText   = null;
@@ -354,6 +434,9 @@
         directoryOpenButtonToolTipText = null;
     }
 
+    /**
+     * Creates the model.
+     */
     protected void createModel() {
         if (model != null) {
             model.invalidateFileCache();
@@ -361,50 +444,102 @@
         model = new BasicDirectoryModel(getFileChooser());
     }
 
+    /**
+     * Returns the model.
+     * @return the model
+     */
     public BasicDirectoryModel getModel() {
         return model;
     }
 
+    /**
+     * Creates the property change listener.
+     * @param fc the file chooser
+     * @return the property change listener
+     */
     public PropertyChangeListener createPropertyChangeListener(JFileChooser fc) {
         return null;
     }
 
+    /**
+     * Returns the file name.
+     * @return the file name
+     */
     public String getFileName() {
         return null;
     }
 
+    /**
+     * Returns the directory name.
+     * @return the directory name
+     */
     public String getDirectoryName() {
         return null;
     }
 
+    /**
+     * Sets the file name.
+     * @param filename the file name
+     */
     public void setFileName(String filename) {
     }
 
+    /**
+     * Sets the directory name.
+     * @param dirname the file name
+     */
     public void setDirectoryName(String dirname) {
     }
 
+    /**
+     * {@inheritDoc}
+     */
     public void rescanCurrentDirectory(JFileChooser fc) {
     }
 
+    /**
+     * {@inheritDoc}
+     */
     public void ensureFileIsVisible(JFileChooser fc, File f) {
     }
 
+    /**
+     * Returns the file chooser.
+     * @return the file chooser
+     */
     public JFileChooser getFileChooser() {
         return filechooser;
     }
 
+    /**
+     * Returns the accessory panel.
+     * @return the accessory panel
+     */
     public JPanel getAccessoryPanel() {
         return accessoryPanel;
     }
 
+    /**
+     * Returns the approve button.
+     * @param fc the file chooser
+     * @return the approve button
+     */
     protected JButton getApproveButton(JFileChooser fc) {
         return null;
     }
 
+    /**
+     * {@inheritDoc}
+     */
     public JButton getDefaultButton(JFileChooser fc) {
         return getApproveButton(fc);
     }
 
+    /**
+     * Returns the approve button tool tip.
+     * @param fc the file chooser
+     * @return the approve button tool tip
+     */
     public String getApproveButtonToolTipText(JFileChooser fc) {
         String tooltipText = fc.getApproveButtonToolTipText();
         if(tooltipText != null) {
@@ -419,6 +554,9 @@
         return null;
     }
 
+    /**
+     * Clears the icon cache.
+     */
     public void clearIconCache() {
         fileView.clearIconCache();
     }
@@ -435,11 +573,22 @@
         return handler;
     }
 
+    /**
+     * Creates a double click listener.
+     * @param fc the file chooser
+     * @param list the list
+     * @return a double click listener
+     */
     protected MouseListener createDoubleClickListener(JFileChooser fc,
                                                       JList<?> list) {
         return new Handler(list);
     }
 
+    /**
+     * Creates a list selection listener.
+     * @param fc the file chooser
+     * @return a list selection listener
+     */
     public ListSelectionListener createListSelectionListener(JFileChooser fc) {
         return getHandler();
     }
@@ -566,12 +715,19 @@
         }
     }
 
+    /**
+     * A double click listener.
+     */
     protected class DoubleClickListener extends MouseAdapter {
         // NOTE: This class exists only for backward compatibility. All
         // its functionality has been moved into Handler. If you need to add
         // new functionality add it to the Handler, but make sure this
         // class calls into the Handler.
         Handler handler;
+        /**
+         * Constucts a {@code DoubleClickListener}.
+         * @param list the lsit
+         */
         public  DoubleClickListener(JList<?> list) {
             handler = new Handler(list);
         }
@@ -587,16 +743,21 @@
             handler.mouseEntered(e);
         }
 
+        /** {@inheritDoc} */
         public void mouseClicked(MouseEvent e) {
             handler.mouseClicked(e);
         }
     }
 
+    /**
+     * A selection listener.
+     */
     protected class SelectionListener implements ListSelectionListener {
         // NOTE: This class exists only for backward compatibility. All
         // its functionality has been moved into Handler. If you need to add
         // new functionality add it to the Handler, but make sure this
         // class calls into the Handler.
+        /** {@inheritDoc} */
         public void valueChanged(ListSelectionEvent e) {
             getHandler().valueChanged(e);
         }
@@ -672,6 +833,8 @@
 
     /**
      * Returns the title of this dialog
+     * @param fc the file chooser
+     * @return the title of this dialog
      */
     public String getDialogTitle(JFileChooser fc) {
         String dialogTitle = fc.getDialogTitle();
@@ -686,7 +849,11 @@
         }
     }
 
-
+    /**
+     * Returns the approve button mnemonic.
+     * @param fc the file chooser
+     * @return the approve button mnemonic
+     */
     public int getApproveButtonMnemonic(JFileChooser fc) {
         int mnemonic = fc.getApproveButtonMnemonic();
         if (mnemonic > 0) {
@@ -700,6 +867,7 @@
         }
     }
 
+    /** {@inheritDoc} */
     public String getApproveButtonText(JFileChooser fc) {
         String buttonText = fc.getApproveButtonText();
         if (buttonText != null) {
@@ -718,6 +886,10 @@
     // ***** Directory Actions *****
     // *****************************
 
+    /**
+     * Returns a new folder action.
+     * @return a new folder action
+     */
     public Action getNewFolderAction() {
         if (newFolderAction == null) {
             newFolderAction = new NewFolderAction();
@@ -730,22 +902,42 @@
         return newFolderAction;
     }
 
+    /**
+     * Returns a go home action.
+     * @return a go home action
+     */
     public Action getGoHomeAction() {
         return goHomeAction;
     }
 
+    /**
+     * Returns a change to parent directory action.
+     * @return a change to parent directory action
+     */
     public Action getChangeToParentDirectoryAction() {
         return changeToParentDirectoryAction;
     }
 
+    /**
+     * Returns an approve selection action.
+     * @return an approve selection  action
+     */
     public Action getApproveSelectionAction() {
         return approveSelectionAction;
     }
 
+    /**
+     * Returns a cancel selection action.
+     * @return a cancel selection action
+     */
     public Action getCancelSelectionAction() {
         return cancelSelectionAction;
     }
 
+    /**
+     * Returns an update action.
+     * @return an update action
+     */
     public Action getUpdateAction() {
         return updateAction;
     }
@@ -756,9 +948,11 @@
      */
     @SuppressWarnings("serial") // Superclass is not serializable across versions
     protected class NewFolderAction extends AbstractAction {
+        /** Constructs a {@code NewFolderAction}. */
         protected NewFolderAction() {
             super(FilePane.ACTION_NEW_FOLDER);
         }
+        /** {@inheritDoc} */
         public void actionPerformed(ActionEvent e) {
             if (readOnly) {
                 return;
@@ -799,6 +993,7 @@
      */
     @SuppressWarnings("serial") // Superclass is not serializable across versions
     protected class GoHomeAction extends AbstractAction {
+        /** Constructs a {@code GoHomeAction}. */
         protected GoHomeAction() {
             super("Go Home");
         }
@@ -808,12 +1003,17 @@
         }
     }
 
+    /**
+     * Change to parent directory action.
+     */
     @SuppressWarnings("serial") // Superclass is not serializable across versions
     protected class ChangeToParentDirectoryAction extends AbstractAction {
+        /** Constructs a {@code ChangeToParentDirectoryAction}. */
         protected ChangeToParentDirectoryAction() {
             super("Go Up");
             putValue(Action.ACTION_COMMAND_KEY, FilePane.ACTION_CHANGE_TO_PARENT_DIRECTORY);
         }
+        /** {@inheritDoc} */
         public void actionPerformed(ActionEvent e) {
             getFileChooser().changeToParentDirectory();
         }
@@ -824,9 +1024,11 @@
      */
     @SuppressWarnings("serial") // Superclass is not serializable across versions
     protected class ApproveSelectionAction extends AbstractAction {
+        /** Constructs an {@code ApproveSelectionAction}. */
         protected ApproveSelectionAction() {
             super(FilePane.ACTION_APPROVE_SELECTION);
         }
+        /** {@inheritDoc} */
         public void actionPerformed(ActionEvent e) {
             if (isDirectorySelected()) {
                 File dir = getDirectory();
@@ -1133,6 +1335,7 @@
      */
     @SuppressWarnings("serial") // Superclass is not serializable across versions
     protected class CancelSelectionAction extends AbstractAction {
+        /** {@inheritDoc} */
         public void actionPerformed(ActionEvent e) {
             getFileChooser().cancelSelection();
         }
@@ -1143,6 +1346,7 @@
      */
     @SuppressWarnings("serial") // Superclass is not serializable across versions
     protected class UpdateAction extends AbstractAction {
+        /** {@inheritDoc} */
         public void actionPerformed(ActionEvent e) {
             JFileChooser fc = getFileChooser();
             fc.setCurrentDirectory(fc.getFileSystemView().createFileObject(getDirectoryName()));
@@ -1188,15 +1392,27 @@
     // *****************************************
     // ***** default AcceptAll file filter *****
     // *****************************************
+    /**
+     * Accept all file filter.
+     */
     protected class AcceptAllFileFilter extends FileFilter {
 
+        /** Constructs an {@code AcceptAllFileFilter}. */
         public AcceptAllFileFilter() {
         }
 
+        /**
+         * Returns true.
+         * @param f the file
+         * @return true
+         */
         public boolean accept(File f) {
             return true;
         }
 
+        /**
+         * {@inheritDoc}
+         */
         public String getDescription() {
             return UIManager.getString("FileChooser.acceptAllFileFilterText");
         }
@@ -1206,18 +1422,26 @@
     // ***********************
     // * FileView operations *
     // ***********************
+    /**
+     * A basic file view.
+     */
     protected class BasicFileView extends FileView {
         /* FileView type descriptions */
-        // PENDING(jeff) - pass in the icon cache size
+        /** The icon cache */
         protected Hashtable<File,Icon> iconCache = new Hashtable<File,Icon>();
 
+        /** Constructs a {@code BasicFileView}. */
         public BasicFileView() {
         }
 
+        /**
+         * Clears the icon cache.
+         */
         public void clearIconCache() {
             iconCache = new Hashtable<File,Icon>();
         }
 
+        /** {@inheritDoc} */
         public String getName(File f) {
             // Note: Returns display name rather than file name
             String fileName = null;
@@ -1227,11 +1451,12 @@
             return fileName;
         }
 
-
+        /** {@inheritDoc} */
         public String getDescription(File f) {
             return f.getName();
         }
 
+        /** {@inheritDoc} */
         public String getTypeDescription(File f) {
             String type = getFileChooser().getFileSystemView().getSystemTypeDescription(f);
             if (type == null) {
@@ -1244,10 +1469,20 @@
             return type;
         }
 
+        /**
+         * Returns the cached icon for the file.
+         * @param f the file
+         * @return the cached icon for the file
+         */
         public Icon getCachedIcon(File f) {
             return iconCache.get(f);
         }
 
+        /**
+         * Caches an icon for a file.
+         * @param f the file
+         * @param i the icon
+         */
         public void cacheIcon(File f, Icon i) {
             if(f == null || i == null) {
                 return;
@@ -1255,6 +1490,7 @@
             iconCache.put(f, i);
         }
 
+        /** {@inheritDoc} */
         public Icon getIcon(File f) {
             Icon icon = getCachedIcon(f);
             if(icon != null) {
@@ -1278,6 +1514,11 @@
             return icon;
         }
 
+        /**
+         * Returns whether or not a file is hidden.
+         * @param f the file
+         * @return whether or not a file is hidden
+         */
         public Boolean isHidden(File f) {
             String name = f.getName();
             if(name != null && name.charAt(0) == '.') {
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicInternalFrameUI.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicInternalFrameUI.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -42,22 +42,31 @@
  */
 public class BasicInternalFrameUI extends InternalFrameUI
 {
-
+    /** frame */
     protected JInternalFrame frame;
 
     private Handler handler;
+    /** Border listener */
     protected MouseInputAdapter          borderListener;
+    /** Property change listener */
     protected PropertyChangeListener     propertyChangeListener;
+    /** Internal frame layout */
     protected LayoutManager              internalFrameLayout;
+    /** Component listener */
     protected ComponentListener          componentListener;
+    /** Glass pane dispatcher */
     protected MouseInputListener         glassPaneDispatcher;
     private InternalFrameListener        internalFrameListener;
 
+    /** North pane */
     protected JComponent northPane;
+    /** South pane */
     protected JComponent southPane;
+    /** West pane */
     protected JComponent westPane;
+    /** East pane */
     protected JComponent eastPane;
-
+    /** Title pane */
     protected BasicInternalFrameTitlePane titlePane; // access needs this
 
     private static DesktopManager sharedDesktopManager;
@@ -85,10 +94,19 @@
 /////////////////////////////////////////////////////////////////////////////
 // ComponentUI Interface Implementation methods
 /////////////////////////////////////////////////////////////////////////////
+    /**
+     * Returns a component UI.
+     * @param b a component
+     * @return a component UI
+     */
     public static ComponentUI createUI(JComponent b)    {
         return new BasicInternalFrameUI((JInternalFrame)b);
     }
 
+    /**
+     * Constructs a {@code BasicInternalFrameUI}.
+     * @param b the internal frame
+     */
     public BasicInternalFrameUI(JInternalFrame b)   {
         LookAndFeel laf = UIManager.getLookAndFeel();
         if (laf instanceof BasicLookAndFeel) {
@@ -96,6 +114,10 @@
         }
     }
 
+    /**
+     * Installs the UI.
+     * @param c the component
+     */
     public void installUI(JComponent c)   {
 
         frame = (JInternalFrame)c;
@@ -108,6 +130,10 @@
         LookAndFeel.installProperty(frame, "opaque", Boolean.TRUE);
     }
 
+    /**
+     * Uninstalls the UI.
+     * @param c the component
+     */
     public void uninstallUI(JComponent c) {
         if(c != frame)
             throw new IllegalComponentStateException(
@@ -124,6 +150,9 @@
         frame = null;
     }
 
+    /**
+     * Installs the defaults.
+     */
     protected void installDefaults(){
         Icon frameIcon = frame.getFrameIcon();
         if (frameIcon == null || frameIcon instanceof UIResource) {
@@ -144,6 +173,9 @@
         LookAndFeel.installBorder(frame, "InternalFrame.border");
 
     }
+    /**
+     * Installs the keyboard actions.
+     */
     protected void installKeyboardActions(){
         createInternalFrameListener();
         if (internalFrameListener != null) {
@@ -184,6 +216,9 @@
         BasicLookAndFeel.installAudioActionMap(map);
     }
 
+    /**
+     * Installs the components.
+     */
     protected void installComponents(){
         setNorthPane(createNorthPane(frame));
         setSouthPane(createSouthPane(frame));
@@ -192,6 +227,7 @@
     }
 
     /**
+     * Installs the listeners.
      * @since 1.3
      */
     protected void installListeners() {
@@ -257,6 +293,9 @@
         return null;
     }
 
+    /**
+     * Uninstalls the defaults.
+     */
     protected void uninstallDefaults() {
         Icon frameIcon = frame.getFrameIcon();
         if (frameIcon instanceof UIResource) {
@@ -267,6 +306,9 @@
         LookAndFeel.uninstallBorder(frame);
     }
 
+    /**
+     * Uninstalls the components.
+     */
     protected void uninstallComponents(){
         setNorthPane(null);
         setSouthPane(null);
@@ -279,6 +321,7 @@
     }
 
     /**
+     * Uninstalls the listeners.
      * @since 1.3
      */
     protected void uninstallListeners() {
@@ -298,6 +341,9 @@
       borderListener = null;
     }
 
+    /**
+     * Uninstalls the keyboard actions.
+     */
     protected void uninstallKeyboardActions(){
         if (internalFrameListener != null) {
             frame.removeInternalFrameListener(internalFrameListener);
@@ -321,22 +367,38 @@
         frame.setCursor(s);
     }
 
+    /**
+     * Creates the layout manager.
+     * @return the layout manager
+     */
     protected LayoutManager createLayoutManager(){
         return getHandler();
     }
 
+    /**
+     * Creates the property change listener.
+     * @return the property change listener
+     */
     protected PropertyChangeListener createPropertyChangeListener(){
         return getHandler();
     }
 
-
-
+    /**
+     * Returns the preferred size.
+     * @param x the component
+     * @return the preferred size
+     */
     public Dimension getPreferredSize(JComponent x)    {
         if(frame == x)
             return frame.getLayout().preferredLayoutSize(x);
         return new Dimension(100, 100);
     }
 
+    /**
+     * Returns the minimum size.
+     * @param x the component
+     * @return the minimum size
+     */
     public Dimension getMinimumSize(JComponent x)  {
         if(frame == x) {
             return frame.getLayout().minimumLayoutSize(x);
@@ -344,6 +406,11 @@
         return new Dimension(0, 0);
     }
 
+    /**
+     * Returns the maximum size.
+     * @param x the component
+     * @return the maximum size
+     */
     public Dimension getMaximumSize(JComponent x) {
         return new Dimension(Integer.MAX_VALUE, Integer.MAX_VALUE);
     }
@@ -371,60 +438,114 @@
         }
     }
 
+    /**
+     * Deinstalls the mouse handlers.
+     * @param c the component
+     */
     protected void deinstallMouseHandlers(JComponent c) {
       c.removeMouseListener(borderListener);
       c.removeMouseMotionListener(borderListener);
     }
 
+    /**
+     * Installs the mouse handlers.
+     * @param c the component
+     */
     protected void installMouseHandlers(JComponent c) {
       c.addMouseListener(borderListener);
       c.addMouseMotionListener(borderListener);
     }
 
+    /**
+     * Creates the north pane.
+     * @param w the internal frame
+     * @return the north pane
+     */
     protected JComponent createNorthPane(JInternalFrame w) {
       titlePane = new BasicInternalFrameTitlePane(w);
       return titlePane;
     }
 
 
+    /**
+     * Creates the north pane.
+     * @param w the internal frame
+     * @return the north pane
+     */
     protected JComponent createSouthPane(JInternalFrame w) {
         return null;
     }
 
+    /**
+     * Creates the west pane.
+     * @param w the internal frame
+     * @return the west pane
+     */
     protected JComponent createWestPane(JInternalFrame w) {
         return null;
     }
 
+    /**
+     * Creates the east pane.
+     * @param w the internal frame
+     * @return the east pane
+     */
     protected JComponent createEastPane(JInternalFrame w) {
         return null;
     }
 
-
+    /**
+     * Creates the border listener.
+     * @param w the internal frame
+     * @return the border listener
+     */
     protected MouseInputAdapter createBorderListener(JInternalFrame w) {
         return new BorderListener();
     }
 
+    /**
+     * Creates the internal frame listener.
+     */
     protected void createInternalFrameListener(){
         internalFrameListener = getHandler();
     }
 
+    /**
+     * Returns whether or no the key binding is registered.
+     * @return whether or no the key binding is registered
+     */
     protected final boolean isKeyBindingRegistered(){
       return keyBindingRegistered;
     }
 
+    /**
+     * Sets the key binding registration.
+     * @param b new value for key binding registration
+     */
     protected final void setKeyBindingRegistered(boolean b){
       keyBindingRegistered = b;
     }
 
+    /**
+     * Returns whether or no the key binding is active.
+     * @return whether or no the key binding is active
+     */
     public final boolean isKeyBindingActive(){
       return keyBindingActive;
     }
 
+    /**
+     * Sets the key binding activity.
+     * @param b new value for key binding activity
+     */
     protected final void setKeyBindingActive(boolean b){
       keyBindingActive = b;
     }
 
 
+    /**
+     * Setup the menu open key.
+     */
     protected void setupMenuOpenKey(){
         // PENDING(hania): Why are these WHEN_IN_FOCUSED_WINDOWs? Shouldn't
         // they be WHEN_ANCESTOR_OF_FOCUSED_COMPONENT?
@@ -437,13 +558,24 @@
         //SwingUtilities.replaceUIActionMap(frame, actionMap);
     }
 
+    /**
+     * Setup the menu close key.
+     */
     protected void setupMenuCloseKey(){
     }
 
+    /**
+     * Returns the north pane.
+     * @return the north pane
+     */
     public JComponent getNorthPane() {
         return northPane;
     }
 
+    /**
+     * Sets the north pane.
+     * @param c the new north pane
+     */
     public void setNorthPane(JComponent c) {
         if (northPane != null &&
                 northPane instanceof BasicInternalFrameTitlePane) {
@@ -456,30 +588,57 @@
         }
     }
 
+    /**
+     * Returns the south pane.
+     * @return the south pane
+     */
     public JComponent getSouthPane() {
         return southPane;
     }
 
+    /**
+     * Sets the south pane.
+     * @param c the new south pane
+     */
     public void setSouthPane(JComponent c) {
         southPane = c;
     }
 
+    /**
+     * Returns the west pane.
+     * @return the west pane
+     */
     public JComponent getWestPane() {
         return westPane;
     }
 
+    /**
+     * Sets the west pane.
+     * @param c the new west pane
+     */
     public void setWestPane(JComponent c) {
         westPane = c;
     }
 
+    /**
+     * Returns the east pane.
+     * @return the east pane
+     */
     public JComponent getEastPane() {
         return eastPane;
     }
 
+    /**
+     * Sets the east pane.
+     * @param c the new east pane
+     */
     public void setEastPane(JComponent c) {
         eastPane = c;
     }
 
+    /**
+     * Internal frame property change listener.
+     */
     public class InternalFramePropertyChangeListener implements
         PropertyChangeListener {
         // NOTE: This class exists only for backward compatibility. All
@@ -495,27 +654,45 @@
         }
     }
 
+    /**
+     * Internal frame layout.
+     */
   public class InternalFrameLayout implements LayoutManager {
     // NOTE: This class exists only for backward compatibility. All
     // its functionality has been moved into Handler. If you need to add
     // new functionality add it to the Handler, but make sure this
     // class calls into the Handler.
+      /**
+       * {@inheritDoc}
+       */
     public void addLayoutComponent(String name, Component c) {
         getHandler().addLayoutComponent(name, c);
     }
 
+      /**
+       * {@inheritDoc}
+       */
     public void removeLayoutComponent(Component c) {
         getHandler().removeLayoutComponent(c);
     }
 
+      /**
+       * {@inheritDoc}
+       */
     public Dimension preferredLayoutSize(Container c)  {
         return getHandler().preferredLayoutSize(c);
     }
 
+      /**
+       * {@inheritDoc}
+       */
     public Dimension minimumLayoutSize(Container c) {
         return getHandler().minimumLayoutSize(c);
     }
 
+      /**
+       * {@inheritDoc}
+       */
     public void layoutContainer(Container c) {
         getHandler().layoutContainer(c);
     }
@@ -527,6 +704,7 @@
      * find the JDesktop component and returns the desktopManager from
      * it. If this fails, it will return a default DesktopManager that
      * should work in arbitrary parents.
+     * @return the proper DesktopManager
      */
     protected DesktopManager getDesktopManager() {
         if(frame.getDesktopPane() != null
@@ -537,6 +715,10 @@
         return sharedDesktopManager;
     }
 
+    /**
+     * Creates the desktop manager.
+     * @return the desktop manager
+     */
     protected DesktopManager createDesktopManager(){
       return new DefaultDesktopManager();
     }
@@ -653,7 +835,7 @@
         Rectangle startingBounds;
         int resizeDir;
 
-
+        /** resize none */
         protected final int RESIZE_NONE  = 0;
         private boolean discardRelease = false;
 
@@ -1114,6 +1296,9 @@
 
     }    /// End BorderListener Class
 
+    /**
+     * Component handler.
+     */
     protected class ComponentHandler implements ComponentListener {
       // NOTE: This class exists only for backward compatibility. All
       // its functionality has been moved into Handler. If you need to add
@@ -1124,92 +1309,155 @@
           getHandler().componentResized(e);
       }
 
+        /**
+         * {@inheritDoc}
+         */
       public void componentMoved(ComponentEvent e) {
           getHandler().componentMoved(e);
       }
+        /**
+         * {@inheritDoc}
+         */
       public void componentShown(ComponentEvent e) {
           getHandler().componentShown(e);
       }
+        /**
+         * {@inheritDoc}
+         */
       public void componentHidden(ComponentEvent e) {
           getHandler().componentHidden(e);
       }
     }
 
+    /**
+     * Creates a component listener.
+     * @return a component listener
+     */
     protected ComponentListener createComponentListener() {
       return getHandler();
     }
 
 
+    /**
+     * Glass pane dispatcher.
+     */
     protected class GlassPaneDispatcher implements MouseInputListener {
         // NOTE: This class exists only for backward compatibility. All
         // its functionality has been moved into Handler. If you need to add
         // new functionality add it to the Handler, but make sure this
         // class calls into the Handler.
+        /**
+         * {@inheritDoc}
+         */
         public void mousePressed(MouseEvent e) {
             getHandler().mousePressed(e);
         }
 
+        /**
+         * {@inheritDoc}
+         */
         public void mouseEntered(MouseEvent e) {
             getHandler().mouseEntered(e);
         }
 
+        /**
+         * {@inheritDoc}
+         */
         public void mouseMoved(MouseEvent e) {
             getHandler().mouseMoved(e);
         }
 
+        /**
+         * {@inheritDoc}
+         */
         public void mouseExited(MouseEvent e) {
             getHandler().mouseExited(e);
         }
 
+        /**
+         * {@inheritDoc}
+         */
         public void mouseClicked(MouseEvent e) {
             getHandler().mouseClicked(e);
         }
 
+        /**
+         * {@inheritDoc}
+         */
         public void mouseReleased(MouseEvent e) {
             getHandler().mouseReleased(e);
         }
 
+        /**
+         * {@inheritDoc}
+         */
         public void mouseDragged(MouseEvent e) {
             getHandler().mouseDragged(e);
         }
     }
 
+    /**
+     * Creates a {@code GlassPaneDispatcher}.
+     * @return a {@code GlassPaneDispatcher}
+     */
     protected MouseInputListener createGlassPaneDispatcher() {
         return null;
     }
 
-
+    /**
+     * Basic internal frame listener.
+     */
     protected class BasicInternalFrameListener implements InternalFrameListener
     {
       // NOTE: This class exists only for backward compatibility. All
       // its functionality has been moved into Handler. If you need to add
       // new functionality add it to the Handler, but make sure this
       // class calls into the Handler.
+        /**
+         * {@inheritDoc}
+         */
       public void internalFrameClosing(InternalFrameEvent e) {
           getHandler().internalFrameClosing(e);
       }
 
+        /**
+         * {@inheritDoc}
+         */
       public void internalFrameClosed(InternalFrameEvent e) {
           getHandler().internalFrameClosed(e);
       }
 
+        /**
+         * {@inheritDoc}
+         */
       public void internalFrameOpened(InternalFrameEvent e) {
           getHandler().internalFrameOpened(e);
       }
 
+        /**
+         * {@inheritDoc}
+         */
       public void internalFrameIconified(InternalFrameEvent e) {
           getHandler().internalFrameIconified(e);
       }
 
+        /**
+         * {@inheritDoc}
+         */
       public void internalFrameDeiconified(InternalFrameEvent e) {
           getHandler().internalFrameDeiconified(e);
       }
 
+        /**
+         * {@inheritDoc}
+         */
       public void internalFrameActivated(InternalFrameEvent e) {
           getHandler().internalFrameActivated(e);
       }
 
-
+        /**
+         * {@inheritDoc}
+         */
       public void internalFrameDeactivated(InternalFrameEvent e) {
           getHandler().internalFrameDeactivated(e);
       }
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicMenuItemUI.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicMenuItemUI.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -875,30 +875,38 @@
         if (dumpStack == true)
             Thread.dumpStack();
     }
+    /** Mouse input handler */
     protected class MouseInputHandler implements MouseInputListener {
         // NOTE: This class exists only for backward compatibility. All
         // its functionality has been moved into Handler. If you need to add
         // new functionality add it to the Handler, but make sure this
         // class calls into the Handler.
 
+        /** {@inheritDoc} */
         public void mouseClicked(MouseEvent e) {
             getHandler().mouseClicked(e);
         }
+        /** {@inheritDoc} */
         public void mousePressed(MouseEvent e) {
             getHandler().mousePressed(e);
         }
+        /** {@inheritDoc} */
         public void mouseReleased(MouseEvent e) {
             getHandler().mouseReleased(e);
         }
+        /** {@inheritDoc} */
         public void mouseEntered(MouseEvent e) {
             getHandler().mouseEntered(e);
         }
+        /** {@inheritDoc} */
         public void mouseExited(MouseEvent e) {
             getHandler().mouseExited(e);
         }
+        /** {@inheritDoc} */
         public void mouseDragged(MouseEvent e) {
             getHandler().mouseDragged(e);
         }
+        /** {@inheritDoc} */
         public void mouseMoved(MouseEvent e) {
             getHandler().mouseMoved(e);
         }
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicOptionPaneUI.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicOptionPaneUI.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -136,7 +136,7 @@
 
     /**
      * Creates a new {@code BasicOptionPaneUI} instance.
-     *
+     * @param x the component
      * @return a new {@code BasicOptionPaneUI} instance
      */
     public static ComponentUI createUI(JComponent x) {
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicScrollBarUI.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicScrollBarUI.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -60,35 +60,59 @@
 
     // NOTE: DO NOT use this field directly, SynthScrollBarUI assumes you'll
     // call getMinimumThumbSize to access it.
+    /** Minimum thumb size */
     protected Dimension minimumThumbSize;
+    /** Maximum thumb size */
     protected Dimension maximumThumbSize;
 
+    /** Thumb highlight color */
     protected Color thumbHighlightColor;
+    /** Thumb light shadow color */
     protected Color thumbLightShadowColor;
+    /** Thumb dark shadow color */
     protected Color thumbDarkShadowColor;
+    /** Thumb color */
     protected Color thumbColor;
+    /** Track color */
     protected Color trackColor;
+    /** Track highlight color */
     protected Color trackHighlightColor;
 
+    /** Scrollbar */
     protected JScrollBar scrollbar;
+    /** Increment button */
     protected JButton incrButton;
+    /** Decrement button */
     protected JButton decrButton;
+    /** Dragging */
     protected boolean isDragging;
+    /** Track listener */
     protected TrackListener trackListener;
+    /** Button listener */
     protected ArrowButtonListener buttonListener;
+    /** Model listener */
     protected ModelListener modelListener;
 
+    /** Thumb rectangle */
     protected Rectangle thumbRect;
+    /** Track rectangle */
     protected Rectangle trackRect;
 
+    /** Track highlight */
     protected int trackHighlight;
 
+    /** No highlight */
     protected static final int NO_HIGHLIGHT = 0;
+    /** Decrease highlight */
     protected static final int DECREASE_HIGHLIGHT = 1;
+    /** Increase highlight */
     protected static final int INCREASE_HIGHLIGHT = 2;
 
+    /** Scroll listener */
     protected ScrollListener scrollListener;
+    /** Property change listener */
     protected PropertyChangeListener propertyChangeListener;
+    /** Scroll timer */
     protected Timer scrollTimer;
 
     private final static int scrollSpeedThrottle = 60; // delay in milli seconds
@@ -148,12 +172,18 @@
         map.put(new Actions(Actions.MAX_SCROLL));
     }
 
-
+    /**
+     * Creates the UI.
+     * @param c the component
+     * @return the UI
+     */
     public static ComponentUI createUI(JComponent c)    {
         return new BasicScrollBarUI();
     }
 
-
+    /**
+     * Configures the scroll bar colors.
+     */
     protected void configureScrollBarColors()
     {
         LookAndFeel.installColors(scrollbar, "ScrollBar.background",
@@ -166,7 +196,10 @@
         trackHighlightColor = UIManager.getColor("ScrollBar.trackHighlight");
     }
 
-
+    /**
+     * Installs the UI.
+     * @param c the component
+     */
     public void installUI(JComponent c)   {
         scrollbar = (JScrollBar)c;
         thumbRect = new Rectangle(0, 0, 0, 0);
@@ -177,6 +210,10 @@
         installKeyboardActions();
     }
 
+    /**
+     * Uninstalls the UI.
+     * @param c the component
+     */
     public void uninstallUI(JComponent c) {
         scrollbar = (JScrollBar)c;
         uninstallListeners();
@@ -189,7 +226,9 @@
         decrButton = null;
     }
 
-
+    /**
+     * Installs the defaults.
+     */
     protected void installDefaults()
     {
         scrollBarWidth = UIManager.getInt("ScrollBar.width");
@@ -240,7 +279,9 @@
         }
     }
 
-
+    /**
+     * Installs the components.
+     */
     protected void installComponents(){
         switch (scrollbar.getOrientation()) {
         case JScrollBar.VERTICAL:
@@ -264,12 +305,17 @@
         scrollbar.setEnabled(scrollbar.isEnabled());
     }
 
+    /**
+     * Uninstalls the components.
+     */
     protected void uninstallComponents(){
         scrollbar.remove(incrButton);
         scrollbar.remove(decrButton);
     }
 
-
+    /**
+     * Installs the listeners.
+     */
     protected void installListeners(){
         trackListener = createTrackListener();
         buttonListener = createArrowButtonListener();
@@ -294,7 +340,9 @@
         scrollTimer.setInitialDelay(300);  // default InitialDelay?
     }
 
-
+    /**
+     * Installs the keyboard actions.
+     */
     protected void installKeyboardActions(){
         LazyActionMap.installLazyActionMap(scrollbar, BasicScrollBarUI.class,
                                            "ScrollBar.actionMap");
@@ -307,6 +355,9 @@
                    JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, inputMap);
     }
 
+    /**
+     * Uninstalls the keyboard actions.
+     */
     protected void uninstallKeyboardActions(){
         SwingUtilities.replaceUIInputMap(scrollbar, JComponent.WHEN_FOCUSED,
                                          null);
@@ -343,7 +394,9 @@
         return null;
     }
 
-
+    /**
+     * Uninstall the listeners.
+     */
     protected void uninstallListeners() {
         scrollTimer.stop();
         scrollTimer = null;
@@ -363,7 +416,9 @@
         handler = null;
     }
 
-
+    /**
+     * Uninstalls the defaults.
+     */
     protected void uninstallDefaults(){
         LookAndFeel.uninstallBorder(scrollbar);
         if (scrollbar.getLayout() == this) {
@@ -379,22 +434,42 @@
         return handler;
     }
 
+    /**
+     * Creates a track listener.
+     * @return a track listener
+     */
     protected TrackListener createTrackListener(){
         return new TrackListener();
     }
 
+    /**
+     * Creates an arrow button listener.
+     * @return an arrow button   listener
+     */
     protected ArrowButtonListener createArrowButtonListener(){
         return new ArrowButtonListener();
     }
 
+    /**
+     * Creates a model listener.
+     * @return a model listener
+     */
     protected ModelListener createModelListener(){
         return new ModelListener();
     }
 
+    /**
+     * Creates a scroll listener.
+     * @return a scroll listener
+     */
     protected ScrollListener createScrollListener(){
         return new ScrollListener();
     }
 
+    /**
+     * Creates a property change listener.
+     * @return a property change listener
+     */
     protected PropertyChangeListener createPropertyChangeListener() {
         return getHandler();
     }
@@ -470,6 +545,11 @@
         return new Dimension(Integer.MAX_VALUE, Integer.MAX_VALUE);
     }
 
+    /**
+     * Creates a decrease button.
+     * @param orientation the orientation
+     * @return a decrease button
+     */
     protected JButton createDecreaseButton(int orientation)  {
         return new BasicArrowButton(orientation,
                                     UIManager.getColor("ScrollBar.thumb"),
@@ -478,6 +558,11 @@
                                     UIManager.getColor("ScrollBar.thumbHighlight"));
     }
 
+    /**
+     * Creates an increase button.
+     * @param orientation the orientation
+     * @return an increase button
+     */
     protected JButton createIncreaseButton(int orientation)  {
         return new BasicArrowButton(orientation,
                                     UIManager.getColor("ScrollBar.thumb"),
@@ -487,6 +572,10 @@
     }
 
 
+    /**
+     * Paints the decrease highlight.
+     * @param g the graphics
+     */
     protected void paintDecreaseHighlight(Graphics g)
     {
         Insets insets = scrollbar.getInsets();
@@ -519,6 +608,10 @@
     }
 
 
+    /**
+     * Paints the increase highlight.
+     * @param g the graphics
+     */
     protected void paintIncreaseHighlight(Graphics g)
     {
         Insets insets = scrollbar.getInsets();
@@ -552,6 +645,12 @@
     }
 
 
+    /**
+     * Paints the track.
+     * @param g the graphics
+     * @param c the component
+     * @param trackBounds the track bounds
+     */
     protected void paintTrack(Graphics g, JComponent c, Rectangle trackBounds)
     {
         g.setColor(trackColor);
@@ -565,7 +664,12 @@
         }
     }
 
-
+    /**
+     * Paints the thumb.
+     * @param g the graphics
+     * @param c the component
+     * @param thumbBounds the thumb bounds
+     */
     protected void paintThumb(Graphics g, JComponent c, Rectangle thumbBounds)
     {
         if(thumbBounds.isEmpty() || !scrollbar.isEnabled())     {
@@ -644,6 +748,10 @@
         return (useCachedValue) ? scrollBarValue : sb.getValue();
     }
 
+    /**
+     * Laysouts a  vertical scroll bar.
+     * @param sb the scroll bar
+     */
     protected void layoutVScrollbar(JScrollBar sb)
     {
         Dimension sbSize = sb.getSize();
@@ -742,7 +850,10 @@
         }
     }
 
-
+    /**
+     * Laysouts a  vertical scroll bar.
+     * @param sb the scroll bar
+     */
     protected void layoutHScrollbar(JScrollBar sb)
     {
         Dimension sbSize = sb.getSize();
@@ -966,6 +1077,10 @@
             scrollbar.setValue(newValue);
     }
 
+    /**
+     * Scrolls by block.
+     * @param direction the direction to scroll
+     */
     protected void scrollByBlock(int direction)
     {
         scrollByBlock(scrollbar, direction);
@@ -1033,6 +1148,10 @@
         }
     }
 
+    /**
+     * Scrolls by unit.
+     * @param direction the direction to scroll
+     */
     protected void scrollByUnit(int direction)  {
         scrollByUnits(scrollbar, direction, 1, false);
     }
@@ -1050,7 +1169,6 @@
 
     /**
      * A listener to listen for model changes.
-     *
      */
     protected class ModelListener implements ChangeListener {
         public void stateChanged(ChangeEvent e) {
@@ -1069,10 +1187,15 @@
     protected class TrackListener
         extends MouseAdapter implements MouseMotionListener
     {
+        /** The offset */
         protected transient int offset;
-        protected transient int currentMouseX, currentMouseY;
+        /** Current mouse x position */
+        protected transient int currentMouseX;
+        /** Current mouse y position */
+        protected transient int currentMouseY;
         private transient int direction = +1;
 
+        /** {@inheritDoc} */
         public void mouseReleased(MouseEvent e)
         {
             if (isDragging) {
@@ -1339,6 +1462,7 @@
             }
         }
 
+        /** {@inheritDoc} */
         public void mouseMoved(MouseEvent e) {
             if (!isDragging) {
                 updateThumbState(e.getX(), e.getY());
@@ -1406,19 +1530,34 @@
         int direction = +1;
         boolean useBlockIncrement;
 
+        /** Constructs a {@code ScrollListener}. */
         public ScrollListener() {
             direction = +1;
             useBlockIncrement = false;
         }
 
+        /**
+         * Constructs a {@code ScrollListener}.
+         * @param dir direction
+         * @param block use block increment
+         */
         public ScrollListener(int dir, boolean block)   {
             direction = dir;
             useBlockIncrement = block;
         }
 
+        /**
+         * Sets the direction.
+         * @param direction the new direction
+         */
         public void setDirection(int direction) { this.direction = direction; }
+        /**
+         * Sets the scrolling by block
+         * @param block whether or not to scroll by block
+         */
         public void setScrollByBlock(boolean block) { this.useBlockIncrement = block; }
 
+        /** {@inheritDoc} */
         public void actionPerformed(ActionEvent e) {
             if(useBlockIncrement)       {
                 scrollByBlock(direction);
@@ -1497,13 +1636,14 @@
         }
     }
 
+    /** Property change handler */
     public class PropertyChangeHandler implements PropertyChangeListener
     {
         // NOTE: This class exists only for backward compatibility. All
         // its functionality has been moved into Handler. If you need to add
         // new functionality add it to the Handler, but make sure this
         // class calls into the Handler.
-
+        /** {@inheritDoc} */
         public void propertyChange(PropertyChangeEvent e) {
             getHandler().propertyChange(e);
         }
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicScrollPaneUI.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicScrollPaneUI.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -746,6 +746,9 @@
         }
     }
 
+    /**
+     * Property change handler.
+     */
     public class PropertyChangeHandler implements PropertyChangeListener
     {
 
@@ -754,6 +757,9 @@
         // new functionality add it to the Handler, but make sure this
         // class calls into the Handler.
 
+        /**
+         * {@inheritDoc}
+         */
         public void propertyChange(PropertyChangeEvent e)
         {
             getHandler().propertyChange(e);
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicSliderUI.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicSliderUI.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -47,33 +47,55 @@
     // Old actions forward to an instance of this.
     private static final Actions SHARED_ACTION = new Actions();
 
+    /** Positive scroll */
     public static final int POSITIVE_SCROLL = +1;
+    /** Negative scroll */
     public static final int NEGATIVE_SCROLL = -1;
+    /** Minimum scroll */
     public static final int MIN_SCROLL = -2;
+    /** Maximum scroll */
     public static final int MAX_SCROLL = +2;
 
+    /** Scroll timer */
     protected Timer scrollTimer;
+    /** Slider */
     protected JSlider slider;
 
+    /** Focus insets */
     protected Insets focusInsets = null;
+    /** Inset cache */
     protected Insets insetCache = null;
+    /** Left-to-right cache */
     protected boolean leftToRightCache = true;
+    /** Focus rectangle */
     protected Rectangle focusRect = null;
+    /** Content rectangle */
     protected Rectangle contentRect = null;
+    /** Label rectangle */
     protected Rectangle labelRect = null;
+    /** Tick rectangle */
     protected Rectangle tickRect = null;
+    /** Track rectangle */
     protected Rectangle trackRect = null;
+    /** Thumb rectangle */
     protected Rectangle thumbRect = null;
 
-    protected int trackBuffer = 0;  // The distance that the track is from the side of the control
+    /** The distance that the track is from the side of the control */
+    protected int trackBuffer = 0;
 
     private transient boolean isDragging;
 
+    /** Track listener */
     protected TrackListener trackListener;
+    /** Change listener */
     protected ChangeListener changeListener;
+    /** Component listener */
     protected ComponentListener componentListener;
+    /** Focus listener */
     protected FocusListener focusListener;
+    /** Scroll listener */
     protected ScrollListener scrollListener;
+    /** Property chane listener */
     protected PropertyChangeListener propertyChangeListener;
     private Handler handler;
     private int lastValue;
@@ -93,15 +115,26 @@
      */
     private boolean sameLabelBaselines;
 
-
+    /**
+     * Returns the shadow color.
+     * @return the shadow color
+     */
     protected Color getShadowColor() {
         return shadowColor;
     }
 
+    /**
+     * Returns the highlight color.
+     * @return the highlight color
+     */
     protected Color getHighlightColor() {
         return highlightColor;
     }
 
+    /**
+     * Returns the focus color.
+     * @return the focus color
+     */
     protected Color getFocusColor() {
         return focusColor;
     }
@@ -119,13 +152,26 @@
     /////////////////////////////////////////////////////////////////////////////
     // ComponentUI Interface Implementation methods
     /////////////////////////////////////////////////////////////////////////////
+    /**
+     * Creates a UI.
+     * @param b a component
+     * @return a UI
+     */
     public static ComponentUI createUI(JComponent b)    {
         return new BasicSliderUI((JSlider)b);
     }
 
+    /**
+     * Constructs a {@code BasicSliderUI}.
+     * @param b a slider
+     */
     public BasicSliderUI(JSlider b)   {
     }
 
+    /**
+     * Installs a UI.
+     * @param c a component
+     */
     public void installUI(JComponent c)   {
         slider = (JSlider) c;
 
@@ -162,6 +208,10 @@
         calculateGeometry(); // This figures out where the labels, ticks, track, and thumb are.
     }
 
+    /**
+     * Uninstalls a UI.
+     * @param c a component
+     */
     public void uninstallUI(JComponent c) {
         if ( c != slider )
             throw new IllegalComponentStateException(
@@ -193,6 +243,10 @@
         slider = null;
     }
 
+    /**
+     * Installs the defaults.
+     * @param slider a slider
+     */
     protected void installDefaults( JSlider slider ) {
         LookAndFeel.installBorder(slider, "Slider.border");
         LookAndFeel.installColorsAndFont(slider, "Slider.background",
@@ -208,32 +262,66 @@
         if (focusInsets == null) focusInsets = new InsetsUIResource(2,2,2,2);
     }
 
+    /**
+     * Uninstalls the defaults.
+     * @param slider a slider
+     */
     protected void uninstallDefaults(JSlider slider) {
         LookAndFeel.uninstallBorder(slider);
 
         focusInsets = null;
     }
 
+    /**
+     * Creates a track listener.
+     * @return a track listener
+     * @param slider a slider
+     */
     protected TrackListener createTrackListener(JSlider slider) {
         return new TrackListener();
     }
 
+    /**
+     * Creates a change listener.
+     * @return a change listener
+     * @param slider a slider
+     */
     protected ChangeListener createChangeListener(JSlider slider) {
         return getHandler();
     }
 
+    /**
+     * Creates a composite listener.
+     * @return a composite listener
+     * @param slider a slider
+     */
     protected ComponentListener createComponentListener(JSlider slider) {
         return getHandler();
     }
 
+    /**
+     * Creates a focus listener.
+     * @return a focus listener
+     * @param slider a slider
+     */
     protected FocusListener createFocusListener(JSlider slider) {
         return getHandler();
     }
 
+    /**
+     * Creates a scroll listener.
+     * @return a scroll listener
+     * @param slider a slider
+     */
     protected ScrollListener createScrollListener( JSlider slider ) {
         return new ScrollListener();
     }
 
+    /**
+     * Creates a property change listener.
+     * @return a property change listener
+     * @param slider a slider
+     */
     protected PropertyChangeListener createPropertyChangeListener(
             JSlider slider) {
         return getHandler();
@@ -246,6 +334,10 @@
         return handler;
     }
 
+    /**
+     * Installs listeners.
+     * @param slider a slider
+     */
     protected void installListeners( JSlider slider ) {
         slider.addMouseListener(trackListener);
         slider.addMouseMotionListener(trackListener);
@@ -255,6 +347,10 @@
         slider.getModel().addChangeListener(changeListener);
     }
 
+    /**
+     * Uninstalls listeners.
+     * @param slider a slider
+     */
     protected void uninstallListeners( JSlider slider ) {
         slider.removeMouseListener(trackListener);
         slider.removeMouseMotionListener(trackListener);
@@ -265,6 +361,10 @@
         handler = null;
     }
 
+    /**
+     * Installs keyboard actions.
+     * @param slider a slider
+     */
     protected void installKeyboardActions( JSlider slider ) {
         InputMap km = getInputMap(JComponent.WHEN_FOCUSED, slider);
         SwingUtilities.replaceUIInputMap(slider, JComponent.WHEN_FOCUSED, km);
@@ -302,6 +402,10 @@
         map.put(new Actions(Actions.MAX_SCROLL_INCREMENT));
     }
 
+    /**
+     * Uninstalls keyboard actions.
+     * @param slider a slider
+     */
     protected void uninstallKeyboardActions( JSlider slider ) {
         SwingUtilities.replaceUIActionMap(slider, null);
         SwingUtilities.replaceUIInputMap(slider, JComponent.WHEN_FOCUSED,
@@ -430,6 +534,10 @@
         return sameLabelBaselines;
     }
 
+    /**
+     * Returns the preferred horizontal size.
+     * @return the preferred horizontal size
+     */
     public Dimension getPreferredHorizontalSize() {
         Dimension horizDim = (Dimension)DefaultLookup.get(slider,
                 this, "Slider.horizontalSize");
@@ -439,6 +547,10 @@
         return horizDim;
     }
 
+    /**
+     * Returns the preferred vertical size.
+     * @return the preferred vertical size
+     */
     public Dimension getPreferredVerticalSize() {
         Dimension vertDim = (Dimension)DefaultLookup.get(slider,
                 this, "Slider.verticalSize");
@@ -448,6 +560,10 @@
         return vertDim;
     }
 
+    /**
+     * Returns the minimum horizontal size.
+     * @return the minimum horizontal size
+     */
     public Dimension getMinimumHorizontalSize() {
         Dimension minHorizDim = (Dimension)DefaultLookup.get(slider,
                 this, "Slider.minimumHorizontalSize");
@@ -457,6 +573,10 @@
         return minHorizDim;
     }
 
+    /**
+     * Returns the minimum vertical size.
+     * @return the minimum vertical size
+     */
     public Dimension getMinimumVerticalSize() {
         Dimension minVertDim = (Dimension)DefaultLookup.get(slider,
                 this, "Slider.minimumVerticalSize");
@@ -466,6 +586,11 @@
         return minVertDim;
     }
 
+    /**
+     * Returns the preferred size.
+     * @param c a component
+     * @return the preferred size
+     */
     public Dimension getPreferredSize(JComponent c)    {
         recalculateIfInsetsChanged();
         Dimension d;
@@ -485,6 +610,11 @@
         return d;
     }
 
+    /**
+     * Returns the minimum size.
+     * @param c a component
+     * @return the minimum size
+     */
     public Dimension getMinimumSize(JComponent c)  {
         recalculateIfInsetsChanged();
         Dimension d;
@@ -505,6 +635,11 @@
         return d;
     }
 
+    /**
+     * Returns the maximum size.
+     * @param c a component
+     * @return the maximum size
+     */
     public Dimension getMaximumSize(JComponent c) {
         Dimension d = getPreferredSize(c);
         if ( slider.getOrientation() == JSlider.VERTICAL ) {
@@ -517,6 +652,9 @@
         return d;
     }
 
+    /**
+     * Calculates the geometry.
+     */
     protected void calculateGeometry() {
         calculateFocusRect();
         calculateContentRect();
@@ -528,6 +666,9 @@
         calculateThumbLocation();
     }
 
+    /**
+     * Calculates the focus rectangle.
+     */
     protected void calculateFocusRect() {
         focusRect.x = insetCache.left;
         focusRect.y = insetCache.top;
@@ -535,11 +676,17 @@
         focusRect.height = slider.getHeight() - (insetCache.top + insetCache.bottom);
     }
 
+    /**
+     * Calculates the thumb size rectangle.
+     */
     protected void calculateThumbSize() {
         Dimension size = getThumbSize();
         thumbRect.setSize( size.width, size.height );
     }
 
+    /**
+     * Calculates the content rectangle.
+     */
     protected void calculateContentRect() {
         contentRect.x = focusRect.x + focusInsets.left;
         contentRect.y = focusRect.y + focusInsets.top;
@@ -564,6 +711,9 @@
         return result;
     }
 
+    /**
+     * Calculates the thumb location.
+     */
     protected void calculateThumbLocation() {
         if ( slider.getSnapToTicks() ) {
             int sliderValue = slider.getValue();
@@ -603,6 +753,9 @@
         }
     }
 
+    /**
+     * Calculates the track buffer.
+     */
     protected void calculateTrackBuffer() {
         if ( slider.getPaintLabels() && slider.getLabelTable()  != null ) {
             Component highLabel = getHighestValueLabel();
@@ -627,7 +780,9 @@
         }
     }
 
-
+    /**
+     * Calculates the track rectangle.
+     */
     protected void calculateTrackRect() {
         int centerSpacing; // used to center sliders added using BorderLayout.CENTER (bug 4275631)
         if ( slider.getOrientation() == JSlider.HORIZONTAL ) {
@@ -671,6 +826,9 @@
         return 8;
     }
 
+    /**
+     * Calculates the tick rectangle.
+     */
     protected void calculateTickRect() {
         if ( slider.getOrientation() == JSlider.HORIZONTAL ) {
             tickRect.x = trackRect.x;
@@ -691,6 +849,9 @@
         }
     }
 
+    /**
+     * Calculates the label rectangle.
+     */
     protected void calculateLabelRect() {
         if ( slider.getPaintLabels() ) {
             if ( slider.getOrientation() == JSlider.HORIZONTAL ) {
@@ -733,6 +894,10 @@
         }
     }
 
+    /**
+     * Returns the thumb size.
+     * @return the thumb size
+     */
     protected Dimension getThumbSize() {
         Dimension size = new Dimension();
 
@@ -748,16 +913,24 @@
         return size;
     }
 
+    /**
+     * A property change handler.
+     */
     public class PropertyChangeHandler implements PropertyChangeListener {
         // NOTE: This class exists only for backward compatibility. All
         // its functionality has been moved into Handler. If you need to add
         // new functionality add it to the Handler, but make sure this
         // class calls into the Handler.
+        /** {@inheritDoc} */
         public void propertyChange( PropertyChangeEvent e ) {
             getHandler().propertyChange(e);
         }
     }
 
+    /**
+     * Returns the width of the widest label.
+     * @return the width of the widest label
+     */
     protected int getWidthOfWidestLabel() {
         @SuppressWarnings("rawtypes")
         Dictionary dictionary = slider.getLabelTable();
@@ -772,6 +945,10 @@
         return widest;
     }
 
+    /**
+     * Returns the height of the tallest label.
+     * @return the height of the tallest label
+     */
     protected int getHeightOfTallestLabel() {
         @SuppressWarnings("rawtypes")
         Dictionary dictionary = slider.getLabelTable();
@@ -786,6 +963,10 @@
         return tallest;
     }
 
+    /**
+     * Returns the width of the highest value label.
+     * @return the width of the highest value label
+     */
     protected int getWidthOfHighValueLabel() {
         Component label = getHighestValueLabel();
         int width = 0;
@@ -797,6 +978,10 @@
         return width;
     }
 
+    /**
+     * Returns the width of the lowest value label.
+     * @return the width of the lowest value label
+     */
     protected int getWidthOfLowValueLabel() {
         Component label = getLowestValueLabel();
         int width = 0;
@@ -808,6 +993,10 @@
         return width;
     }
 
+    /**
+     * Returns the height of the highest value label.
+     * @return the height of the highest value label
+     */
     protected int getHeightOfHighValueLabel() {
         Component label = getHighestValueLabel();
         int height = 0;
@@ -819,6 +1008,10 @@
         return height;
     }
 
+    /**
+     * Returns the height of the lowest value label.
+     * @return the height of the lowest value label
+     */
     protected int getHeightOfLowValueLabel() {
         Component label = getLowestValueLabel();
         int height = 0;
@@ -830,6 +1023,10 @@
         return height;
     }
 
+    /**
+     * Draws inverted.
+     * @return the inverted-ness
+     */
     protected boolean drawInverted() {
         if (slider.getOrientation()==JSlider.HORIZONTAL) {
             if(BasicGraphicsUtils.isLeftToRight(slider)) {
@@ -960,6 +1157,9 @@
         }
     }
 
+    /**
+     * Recalculates if the insets have changed.
+     */
     protected void recalculateIfInsetsChanged() {
         Insets newInsets = slider.getInsets();
         if ( !newInsets.equals( insetCache ) ) {
@@ -968,6 +1168,9 @@
         }
     }
 
+    /**
+     * Recalculates if the orientation has changed.
+     */
     protected void recalculateIfOrientationChanged() {
         boolean ltr = BasicGraphicsUtils.isLeftToRight(slider);
         if ( ltr!=leftToRightCache ) {
@@ -976,6 +1179,10 @@
         }
     }
 
+    /**
+     * Paints focus.
+     * @param g the graphics
+     */
     public void paintFocus(Graphics g)  {
         g.setColor( getFocusColor() );
 
@@ -983,6 +1190,10 @@
                                            focusRect.width, focusRect.height );
     }
 
+    /**
+     * Paints track.
+     * @param g the graphics
+     */
     public void paintTrack(Graphics g)  {
 
         Rectangle trackBounds = trackRect;
@@ -1023,6 +1234,10 @@
         }
     }
 
+    /**
+     * Paints ticks.
+     * @param g the graphics
+     */
     public void paintTicks(Graphics g)  {
         Rectangle tickBounds = tickRect;
 
@@ -1120,22 +1335,50 @@
         }
     }
 
+    /**
+     * Paints minor tick for horizontal slider.
+     * @param g the graphics
+     * @param tickBounds the tick bounds
+     * @param x the x coordinate
+     */
     protected void paintMinorTickForHorizSlider( Graphics g, Rectangle tickBounds, int x ) {
         g.drawLine( x, 0, x, tickBounds.height / 2 - 1 );
     }
 
+    /**
+     * Paints major tick for horizontal slider.
+     * @param g the graphics
+     * @param tickBounds the tick bounds
+     * @param x the x coordinate
+     */
     protected void paintMajorTickForHorizSlider( Graphics g, Rectangle tickBounds, int x ) {
         g.drawLine( x, 0, x, tickBounds.height - 2 );
     }
 
+    /**
+     * Paints minor tick for vertical slider.
+     * @param g the graphics
+     * @param tickBounds the tick bounds
+     * @param y the y coordinate
+     */
     protected void paintMinorTickForVertSlider( Graphics g, Rectangle tickBounds, int y ) {
         g.drawLine( 0, y, tickBounds.width / 2 - 1, y );
     }
 
+    /**
+     * Paints major tick for vertical slider.
+     * @param g the graphics
+     * @param tickBounds the tick bounds
+     * @param y the y coordinate
+     */
     protected void paintMajorTickForVertSlider( Graphics g, Rectangle tickBounds, int y ) {
         g.drawLine( 0, y,  tickBounds.width - 2, y );
     }
 
+    /**
+     * Paints the labels.
+     * @param g the graphics
+     */
     public void paintLabels( Graphics g ) {
         Rectangle labelBounds = labelRect;
 
@@ -1222,6 +1465,10 @@
         g.translate( 0, -labelTop );
     }
 
+    /**
+     * Paints the thumb.
+     * @param g the graphics
+     */
     public void paintThumb(Graphics g)  {
         Rectangle knobBounds = thumbRect;
         int w = knobBounds.width;
@@ -1330,6 +1577,11 @@
     // Used exclusively by setThumbLocation()
     private static Rectangle unionRect = new Rectangle();
 
+    /**
+     * Sets the thumb location.
+     * @param x the x coordinate
+     * @param y the y coordinate
+     */
     public void setThumbLocation(int x, int y)  {
         unionRect.setBounds( thumbRect );
 
@@ -1339,6 +1591,10 @@
         slider.repaint( unionRect.x, unionRect.y, unionRect.width, unionRect.height );
     }
 
+    /**
+     * Scrolls by block.
+     * @param direction the direction
+     */
     public void scrollByBlock(int direction)    {
         synchronized(slider)    {
             int blockIncrement =
@@ -1360,6 +1616,10 @@
         }
     }
 
+    /**
+     * Scrolls by unit.
+     * @param direction the direction
+     */
     public void scrollByUnit(int direction) {
         synchronized(slider)    {
             int delta = ((direction > 0) ? POSITIVE_SCROLL : NEGATIVE_SCROLL);
@@ -1384,6 +1644,11 @@
         scrollByBlock( dir );
     }
 
+    /**
+     * Returns the x position for a value.
+     * @param value the value
+     * @return the x position for a value
+     */
     protected int xPositionForValue( int value )    {
         int min = slider.getMinimum();
         int max = slider.getMaximum();
@@ -1409,6 +1674,11 @@
         return xPosition;
     }
 
+    /**
+     * Returns the y position for a value.
+     * @param value the value
+     * @return the y position for a value
+     */
     protected int yPositionForValue( int value )  {
         return yPositionForValue(value, trackRect.y, trackRect.height);
     }
@@ -1605,9 +1875,16 @@
      * Instantiate it only within subclasses of <code>Foo</code>.
      */
     public class TrackListener extends MouseInputAdapter {
+        /** The offset */
         protected transient int offset;
-        protected transient int currentMouseX, currentMouseY;
+        /** Current mouse x. */
+        protected transient int currentMouseX;
+        /** Current mouse y. */
+        protected transient int currentMouseY;
 
+        /**
+         * {@inheritDoc}
+         */
         public void mouseReleased(MouseEvent e) {
             if (!slider.isEnabled()) {
                 return;
@@ -1736,6 +2013,11 @@
             }
         }
 
+        /**
+         * Returns if scrolling should occur
+         * @param direction the direction.
+         * @return if scrolling should occur
+         */
         public boolean shouldScroll(int direction) {
             Rectangle r = thumbRect;
             if (slider.getOrientation() == JSlider.VERTICAL) {
@@ -1772,9 +2054,9 @@
         }
 
         /**
-        * Set the models value to the position of the top/left
-        * of the thumb relative to the origin of the track.
-        */
+         * Set the models value to the position of the top/left
+         * of the thumb relative to the origin of the track.
+         */
         public void mouseDragged(MouseEvent e) {
             int thumbMiddle;
 
@@ -1839,6 +2121,7 @@
             }
         }
 
+        /** {@inheritDoc} */
         public void mouseMoved(MouseEvent e) { }
     }
 
@@ -1855,24 +2138,41 @@
         int direction = POSITIVE_SCROLL;
         boolean useBlockIncrement;
 
+        /**
+         * Constructs a {@code ScrollListener}
+         */
         public ScrollListener() {
             direction = POSITIVE_SCROLL;
             useBlockIncrement = true;
         }
 
+        /**
+         * Constructs a {@code ScrollListener}
+         * @param dir the direction
+         * @param block whether or not to scroll by block
+         */
         public ScrollListener(int dir, boolean block)   {
             direction = dir;
             useBlockIncrement = block;
         }
 
+        /**
+         * Sets the direction.
+         * @param direction the new direction
+         */
         public void setDirection(int direction) {
             this.direction = direction;
         }
 
+        /**
+         * Sets scrolling by block
+         * @param block the new scroll by block value
+         */
         public void setScrollByBlock(boolean block) {
             this.useBlockIncrement = block;
         }
 
+        /** {@inheritDoc} */
         public void actionPerformed(ActionEvent e) {
             if (useBlockIncrement) {
                 scrollByBlock(direction);
@@ -1945,16 +2245,24 @@
         boolean block;
         JSlider slider;
 
+        /**
+         * Constructs an {@code ActionScroller}.
+         * @param slider a slider
+         * @param dir the direction
+         * @param block block scrolling or not
+         */
         public ActionScroller( JSlider slider, int dir, boolean block) {
             this.dir = dir;
             this.block = block;
             this.slider = slider;
         }
 
+        /** {@inheritDoc} */
         public void actionPerformed(ActionEvent e) {
             SHARED_ACTION.scroll(slider, BasicSliderUI.this, dir, block);
         }
 
+        /** {@inheritDoc} */
         public boolean isEnabled() {
             boolean b = true;
             if (slider != null) {
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicSplitPaneUI.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicSplitPaneUI.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -27,6 +27,8 @@
 package javax.swing.plaf.basic;
 
 
+import sun.awt.AWTAccessor;
+import sun.awt.AWTAccessor.ComponentAccessor;
 import sun.swing.DefaultLookup;
 import sun.swing.UIAction;
 import javax.swing.*;
@@ -1191,7 +1193,6 @@
      * Should be messaged before the dragging session starts, resets
      * lastDragLocation and dividerSize.
      */
-    @SuppressWarnings("deprecation")
     protected void startDragging() {
         Component       leftC = splitPane.getLeftComponent();
         Component       rightC = splitPane.getRightComponent();
@@ -1199,10 +1200,11 @@
 
         beginDragDividerLocation = getDividerLocation(splitPane);
         draggingHW = false;
-        if(leftC != null && (cPeer = leftC.getPeer()) != null &&
+        final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
+        if(leftC != null && (cPeer = acc.getPeer(leftC)) != null &&
            !(cPeer instanceof LightweightPeer)) {
             draggingHW = true;
-        } else if(rightC != null && (cPeer = rightC.getPeer()) != null
+        } else if(rightC != null && (cPeer = acc.getPeer(rightC)) != null
                   && !(cPeer instanceof LightweightPeer)) {
             draggingHW = true;
         }
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicTabbedPaneUI.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicTabbedPaneUI.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -56,22 +56,33 @@
 
 // Instance variables initialized at installation
 
+    /** The tab pane */
     protected JTabbedPane tabPane;
 
+    /** Highlight color */
     protected Color highlight;
+    /** Light highlight color */
     protected Color lightHighlight;
+    /** Shadow color */
     protected Color shadow;
+    /** Dark shadow color */
     protected Color darkShadow;
+    /** Focus color */
     protected Color focus;
     private   Color selectedColor;
 
+    /** Text icon gap */
     protected int textIconGap;
-
+    /** Tab run overlay */
     protected int tabRunOverlay;
 
+    /** Tab insets */
     protected Insets tabInsets;
+    /** Selected tab insets */
     protected Insets selectedTabPadInsets;
+    /** Tab area insets */
     protected Insets tabAreaInsets;
+    /** Content border insets */
     protected Insets contentBorderInsets;
     private boolean tabsOverlapBorder;
     private boolean tabsOpaque = true;
@@ -120,19 +131,28 @@
 
 
 // Transient variables (recalculated each time TabbedPane is layed out)
-
+    /** Tab runs */
     protected int tabRuns[] = new int[10];
+    /** Run count */
     protected int runCount = 0;
+    /** Selected run */
     protected int selectedRun = -1;
+    /** Tab rects */
     protected Rectangle rects[] = new Rectangle[0];
+    /** Maximum tab height */
     protected int maxTabHeight;
+    /** Maximum tab width */
     protected int maxTabWidth;
 
 // Listeners
 
+    /** Tab change listener */
     protected ChangeListener tabChangeListener;
+    /** Property change listener */
     protected PropertyChangeListener propertyChangeListener;
+    /** Mouse change listener */
     protected MouseListener mouseListener;
+    /** Focus change listener */
     protected FocusListener focusListener;
 
 // Private instance data
@@ -190,6 +210,11 @@
 
 // UI creation
 
+    /**
+     * Create a UI.
+     * @param c a component
+     * @return a UI
+     */
     public static ComponentUI createUI(JComponent c) {
         return new BasicTabbedPaneUI();
     }
@@ -355,6 +380,9 @@
          tabContainer = null;
     }
 
+    /**
+     * Install the defaults.
+     */
     protected void installDefaults() {
         LookAndFeel.installColorsAndFont(tabPane, "TabbedPane.background",
                                     "TabbedPane.foreground", "TabbedPane.font");
@@ -389,6 +417,9 @@
         if (contentBorderInsets == null) contentBorderInsets = new Insets(2,2,3,3);
     }
 
+    /**
+     * Uninstall the defaults.
+     */
     protected void uninstallDefaults() {
         highlight = null;
         lightHighlight = null;
@@ -401,6 +432,9 @@
         contentBorderInsets = null;
     }
 
+    /**
+     * Install the listeners.
+     */
     protected void installListeners() {
         if ((propertyChangeListener = createPropertyChangeListener()) != null) {
             tabPane.addPropertyChangeListener(propertyChangeListener);
@@ -421,6 +455,9 @@
         }
     }
 
+    /**
+     * Uninstall the listeners.
+     */
     protected void uninstallListeners() {
         if (mouseListener != null) {
             tabPane.removeMouseListener(mouseListener);
@@ -448,18 +485,34 @@
         handler = null;
     }
 
+    /**
+     * Creates a mouse listener.
+     * @return a mouse listener
+     */
     protected MouseListener createMouseListener() {
         return getHandler();
     }
 
+    /**
+     * Creates a focus listener.
+     * @return a focus listener
+     */
     protected FocusListener createFocusListener() {
         return getHandler();
     }
 
+    /**
+     * Creates a change listener.
+     * @return a change listener
+     */
     protected ChangeListener createChangeListener() {
         return getHandler();
     }
 
+    /**
+     * Creates a property change listener.
+     * @return a property change listener
+     */
     protected PropertyChangeListener createPropertyChangeListener() {
         return getHandler();
     }
@@ -471,6 +524,9 @@
         return handler;
     }
 
+    /**
+     * Installs the keyboard actions.
+     */
     protected void installKeyboardActions() {
         InputMap km = getInputMap(JComponent.
                                   WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
@@ -498,6 +554,9 @@
         return null;
     }
 
+    /**
+     * Uninstalls the keyboard actions.
+     */
     protected void uninstallKeyboardActions() {
         SwingUtilities.replaceUIActionMap(tabPane, null);
         SwingUtilities.replaceUIInputMap(tabPane, JComponent.
@@ -844,6 +903,15 @@
         }
     }
 
+    /**
+     * Paints a tab.
+     * @param g the graphics
+     * @param tabPlacement the tab placement
+     * @param rects rectangles
+     * @param tabIndex the tab index
+     * @param iconRect the icon rectangle
+     * @param textRect the text rectangle
+     */
     protected void paintTab(Graphics g, int tabPlacement,
                             Rectangle[] rects, int tabIndex,
                             Rectangle iconRect, Rectangle textRect) {
@@ -1012,6 +1080,18 @@
         }
     }
 
+    /**
+     * Laysout a label.
+     * @param tabPlacement the tab placement
+     * @param metrics the font metric
+     * @param tabIndex the tab index
+     * @param title the title
+     * @param icon the icon
+     * @param tabRect the tab rectangle
+     * @param iconRect the icon rectangle
+     * @param textRect the text rectangle
+     * @param isSelected selection status
+     */
     protected void layoutLabel(int tabPlacement,
                                FontMetrics metrics, int tabIndex,
                                String title, Icon icon,
@@ -1045,6 +1125,15 @@
         textRect.y += yNudge;
     }
 
+    /**
+     * Paints an icon.
+     * @param g the graphics
+     * @param tabPlacement the tab placement
+     * @param tabIndex the tab index
+     * @param icon the icon
+     * @param iconRect the icon rectangle
+     * @param isSelected selection status
+     */
     protected void paintIcon(Graphics g, int tabPlacement,
                              int tabIndex, Icon icon, Rectangle iconRect,
                              boolean isSelected ) {
@@ -1053,6 +1142,17 @@
         }
     }
 
+    /**
+     * Paints text.
+     * @param g the graphics
+     * @param tabPlacement the tab placement
+     * @param font the font
+     * @param metrics the font metrics
+     * @param tabIndex the tab index
+     * @param title the title
+     * @param textRect the text rectangle
+     * @param isSelected selection status
+     */
     protected void paintText(Graphics g, int tabPlacement,
                              Font font, FontMetrics metrics, int tabIndex,
                              String title, Rectangle textRect,
@@ -1096,7 +1196,13 @@
         }
     }
 
-
+    /**
+     * Returns the tab label shift x.
+     * @param tabPlacement the tab placement
+     * @param tabIndex the tab index
+     * @param isSelected selection status
+     * @return the tab label shift x
+     */
     protected int getTabLabelShiftX(int tabPlacement, int tabIndex, boolean isSelected) {
         Rectangle tabRect = rects[tabIndex];
         String propKey = (isSelected ? "selectedLabelShift" : "labelShift");
@@ -1115,6 +1221,13 @@
         }
     }
 
+    /**
+     * Returns the tab label shift y.
+     * @param tabPlacement the tab placement
+     * @param tabIndex the tab index
+     * @param isSelected selection status
+     * @return the tab label shift y
+     */
     protected int getTabLabelShiftY(int tabPlacement, int tabIndex, boolean isSelected) {
         Rectangle tabRect = rects[tabIndex];
         int nudge = (isSelected ? DefaultLookup.getInt(tabPane, this, "TabbedPane.selectedLabelShift", -1) :
@@ -1132,6 +1245,16 @@
         }
     }
 
+    /**
+     * Paints the focus indicator.
+     * @param g the graphics
+     * @param tabPlacement the tab placement
+     * @param rects rectangles
+     * @param tabIndex the tab index
+     * @param iconRect the icon rectangle
+     * @param textRect the text rectangle
+     * @param isSelected selection status
+     */
     protected void paintFocusIndicator(Graphics g, int tabPlacement,
                                        Rectangle[] rects, int tabIndex,
                                        Rectangle iconRect, Rectangle textRect,
@@ -1245,6 +1368,18 @@
         }
     }
 
+    /**
+     * Paints the tab background.
+     * @param g             the graphics context in which to paint
+     * @param tabPlacement  the placement (left, right, bottom, top) of the tab
+     * @param tabIndex      the index of the tab with respect to other tabs
+     * @param x             the x coordinate of tab
+     * @param y             the y coordinate of tab
+     * @param w             the width of the tab
+     * @param h             the height of the tab
+     * @param isSelected    a {@code boolean} which determines whether or not
+     * the tab is selected
+     */
     protected void paintTabBackground(Graphics g, int tabPlacement,
                                       int tabIndex,
                                       int x, int y, int w, int h,
@@ -1267,6 +1402,12 @@
         }
     }
 
+    /**
+     * Paints the content border.
+     * @param g             the graphics context in which to paint
+     * @param tabPlacement  the placement (left, right, bottom, top) of the tab
+     * @param selectedIndex the tab index of the selected component
+     */
     protected void paintContentBorder(Graphics g, int tabPlacement, int selectedIndex) {
         int width = tabPane.getWidth();
         int height = tabPane.getHeight();
@@ -1329,6 +1470,16 @@
 
     }
 
+    /**
+     * Paints the content border top edge.
+     * @param g             the graphics context in which to paint
+     * @param tabPlacement  the placement (left, right, bottom, top) of the tab
+     * @param selectedIndex the tab index of the selected component
+     * @param x             the x coordinate of tab
+     * @param y             the y coordinate of tab
+     * @param w             the width of the tab
+     * @param h             the height of the tab
+     */
     protected void paintContentBorderTopEdge(Graphics g, int tabPlacement,
                                          int selectedIndex,
                                          int x, int y, int w, int h) {
@@ -1358,6 +1509,16 @@
         }
     }
 
+    /**
+     * Paints the content border left edge.
+     * @param g             the graphics context in which to paint
+     * @param tabPlacement  the placement (left, right, bottom, top) of the tab
+     * @param selectedIndex the tab index of the selected component
+     * @param x             the x coordinate of tab
+     * @param y             the y coordinate of tab
+     * @param w             the width of the tab
+     * @param h             the height of the tab
+     */
     protected void paintContentBorderLeftEdge(Graphics g, int tabPlacement,
                                                int selectedIndex,
                                                int x, int y, int w, int h) {
@@ -1384,6 +1545,16 @@
         }
     }
 
+    /**
+     * Paints the content border bottom edge.
+     * @param g             the graphics context in which to paint
+     * @param tabPlacement  the placement (left, right, bottom, top) of the tab
+     * @param selectedIndex the tab index of the selected component
+     * @param x             the x coordinate of tab
+     * @param y             the y coordinate of tab
+     * @param w             the width of the tab
+     * @param h             the height of the tab
+     */
     protected void paintContentBorderBottomEdge(Graphics g, int tabPlacement,
                                                int selectedIndex,
                                                int x, int y, int w, int h) {
@@ -1417,6 +1588,16 @@
 
     }
 
+    /**
+     * Paints the content border right edge.
+     * @param g             the graphics context in which to paint
+     * @param tabPlacement  the placement (left, right, bottom, top) of the tab
+     * @param selectedIndex the tab index of the selected component
+     * @param x             the x coordinate of tab
+     * @param y             the y coordinate of tab
+     * @param w             the width of the tab
+     * @param h             the height of the tab
+     */
     protected void paintContentBorderRightEdge(Graphics g, int tabPlacement,
                                                int selectedIndex,
                                                int x, int y, int w, int h) {
@@ -1618,10 +1799,18 @@
 
 // BasicTabbedPaneUI methods
 
+    /**
+     * Returns the visible component.
+     * @return the visible component
+     */
     protected Component getVisibleComponent() {
         return visibleComponent;
     }
 
+    /**
+     * Sets the visible component.
+     * @param component the component
+     */
     protected void setVisibleComponent(Component component) {
         if (visibleComponent != null
                 && visibleComponent != component
@@ -1636,6 +1825,10 @@
         visibleComponent = component;
     }
 
+    /**
+     * Assure the rectangles are created.
+     * @param tabCount the tab count
+     */
     protected void assureRectsCreated(int tabCount) {
         int rectArrayLen = rects.length;
         if (tabCount != rectArrayLen ) {
@@ -1650,6 +1843,9 @@
 
     }
 
+    /**
+     * Expands the tab runs array.
+     */
     protected void expandTabRunsArray() {
         int rectLen = tabRuns.length;
         int[] newArray = new int[rectLen+10];
@@ -1657,6 +1853,12 @@
         tabRuns = newArray;
     }
 
+    /**
+     * Returns the run for a tab.
+     * @param tabCount the tab count
+     * @param tabIndex the tab index.
+     * @return the run for a tab
+     */
     protected int getRunForTab(int tabCount, int tabIndex) {
         for (int i = 0; i < runCount; i++) {
             int first = tabRuns[i];
@@ -1668,6 +1870,12 @@
         return 0;
     }
 
+    /**
+     * Returns the last tab in a run.
+     * @param tabCount the tab count
+     * @param run the run
+     * @return the last tab in a run
+     */
     protected int lastTabInRun(int tabCount, int run) {
         if (runCount == 1) {
             return tabCount - 1;
@@ -1679,22 +1887,49 @@
         return tabRuns[nextRun]-1;
     }
 
+    /**
+     * Returns the tab run overlay.
+     * @param tabPlacement the placement (left, right, bottom, top) of the tab
+     * @return the tab run overlay
+     */
     protected int getTabRunOverlay(int tabPlacement) {
         return tabRunOverlay;
     }
 
+    /**
+     * Returns the tab run indent.
+     * @param tabPlacement the placement (left, right, bottom, top) of the tab
+     * @param run the tab run
+     * @return the tab run indent
+     */
     protected int getTabRunIndent(int tabPlacement, int run) {
         return 0;
     }
 
+    /**
+     * Returns whether or not the tab run should be padded.
+     * @param tabPlacement the placement (left, right, bottom, top) of the tab
+     * @param run the tab run
+     * @return whether or not the tab run should be padded
+     */
     protected boolean shouldPadTabRun(int tabPlacement, int run) {
         return runCount > 1;
     }
 
+    /**
+     * Returns whether or not the tab run should be rotated.
+     * @param tabPlacement the placement (left, right, bottom, top) of the tab
+     * @return whether or not the tab run should be rotated
+     */
     protected boolean shouldRotateTabRuns(int tabPlacement) {
         return true;
     }
 
+    /**
+     * Returns the icon for a tab.
+     * @param tabIndex the index of the tab
+     * @return the icon for a tab
+     */
     protected Icon getIconForTab(int tabIndex) {
         return (!tabPane.isEnabled() || !tabPane.isEnabledAt(tabIndex))?
                           tabPane.getDisabledIconAt(tabIndex) : tabPane.getIconAt(tabIndex);
@@ -1718,6 +1953,13 @@
         return null;
     }
 
+    /**
+     * Calculates the tab height.
+     * @param tabPlacement  the placement (left, right, bottom, top) of the tab
+     * @param tabIndex      the index of the tab with respect to other tabs
+     * @param fontHeight    the font height
+     * @return the tab height
+     */
     protected int calculateTabHeight(int tabPlacement, int tabIndex, int fontHeight) {
         int height = 0;
         Component c = tabPane.getTabComponentAt(tabIndex);
@@ -1743,6 +1985,11 @@
         return height;
     }
 
+    /**
+     * Calculates the maximum tab height.
+     * @param tabPlacement  the placement (left, right, bottom, top) of the tab
+     * @return the maximum tab height
+     */
     protected int calculateMaxTabHeight(int tabPlacement) {
         FontMetrics metrics = getFontMetrics();
         int tabCount = tabPane.getTabCount();
@@ -1754,6 +2001,13 @@
         return result;
     }
 
+    /**
+     * Calculates the tab width.
+     * @param tabPlacement  the placement (left, right, bottom, top) of the tab
+     * @param tabIndex      the index of the tab with respect to other tabs
+     * @param metrics       the font metrics
+     * @return the tab width
+     */
     protected int calculateTabWidth(int tabPlacement, int tabIndex, FontMetrics metrics) {
         Insets tabInsets = getTabInsets(tabPlacement, tabIndex);
         int width = tabInsets.left + tabInsets.right + 3;
@@ -1778,6 +2032,11 @@
         return width;
     }
 
+    /**
+     * Calculates the maximum tab width.
+     * @param tabPlacement  the placement (left, right, bottom, top) of the tab
+     * @return the maximum tab width
+     */
     protected int calculateMaxTabWidth(int tabPlacement) {
         FontMetrics metrics = getFontMetrics();
         int tabCount = tabPane.getTabCount();
@@ -1788,6 +2047,13 @@
         return result;
     }
 
+    /**
+     * Calculates the tab area height.
+     * @param tabPlacement  the placement (left, right, bottom, top) of the tab
+     * @param horizRunCount horizontal run count
+     * @param maxTabHeight maximum tab height
+     * @return the tab area height
+     */
     protected int calculateTabAreaHeight(int tabPlacement, int horizRunCount, int maxTabHeight) {
         Insets tabAreaInsets = getTabAreaInsets(tabPlacement);
         int tabRunOverlay = getTabRunOverlay(tabPlacement);
@@ -1797,6 +2063,13 @@
                 0);
     }
 
+    /**
+     * Calculates the tab area width.
+     * @param tabPlacement  the placement (left, right, bottom, top) of the tab
+     * @param vertRunCount vertical run count
+     * @param maxTabWidth maximum tab width
+     * @return the tab area width
+     */
     protected int calculateTabAreaWidth(int tabPlacement, int vertRunCount, int maxTabWidth) {
         Insets tabAreaInsets = getTabAreaInsets(tabPlacement);
         int tabRunOverlay = getTabRunOverlay(tabPlacement);
@@ -1806,24 +2079,49 @@
                 0);
     }
 
+    /**
+     * Returns the tab insets.
+     * @param tabPlacement  the placement (left, right, bottom, top) of the tab
+     * @param tabIndex the tab index
+     * @return the tab insets
+     */
     protected Insets getTabInsets(int tabPlacement, int tabIndex) {
         return tabInsets;
     }
 
+    /**
+     * Returns the selected tab pad insets.
+     * @param tabPlacement  the placement (left, right, bottom, top) of the tab
+     * @return the selected tab pad insets
+     */
     protected Insets getSelectedTabPadInsets(int tabPlacement) {
         rotateInsets(selectedTabPadInsets, currentPadInsets, tabPlacement);
         return currentPadInsets;
     }
 
+    /**
+     * Returns the tab area insets.
+     * @param tabPlacement  the placement (left, right, bottom, top) of the tab
+     * @return the pad area insets
+     */
     protected Insets getTabAreaInsets(int tabPlacement) {
         rotateInsets(tabAreaInsets, currentTabAreaInsets, tabPlacement);
         return currentTabAreaInsets;
     }
 
+    /**
+     * Returns the content border insets.
+     * @param tabPlacement  the placement (left, right, bottom, top) of the tab
+     * @return the content border insets
+     */
     protected Insets getContentBorderInsets(int tabPlacement) {
         return contentBorderInsets;
     }
 
+    /**
+     * Returns the font metrics.
+     * @return the font metrics
+     */
     protected FontMetrics getFontMetrics() {
         Font font = tabPane.getFont();
         return tabPane.getFontMetrics(font);
@@ -1832,6 +2130,10 @@
 
 // Tab Navigation methods
 
+    /**
+     * Navigate the selected tab.
+     * @param direction the direction
+     */
     protected void navigateSelectedTab(int direction) {
         int tabPlacement = tabPane.getTabPlacement();
         int current = DefaultLookup.getBoolean(tabPane, this,
@@ -1910,6 +2212,10 @@
         }
     }
 
+    /**
+     * Select the next tab in the run.
+     * @param current the current tab
+     */
     protected void selectNextTabInRun(int current) {
         int tabCount = tabPane.getTabCount();
         int tabIndex = getNextTabIndexInRun(tabCount, current);
@@ -1920,6 +2226,10 @@
         navigateTo(tabIndex);
     }
 
+    /**
+     * Select the previous tab in the run.
+     * @param current the current tab
+     */
     protected void selectPreviousTabInRun(int current) {
         int tabCount = tabPane.getTabCount();
         int tabIndex = getPreviousTabIndexInRun(tabCount, current);
@@ -1930,6 +2240,10 @@
         navigateTo(tabIndex);
     }
 
+    /**
+     * Select the next tab.
+     * @param current the current tab
+     */
     protected void selectNextTab(int current) {
         int tabIndex = getNextTabIndex(current);
 
@@ -1939,6 +2253,10 @@
         navigateTo(tabIndex);
     }
 
+    /**
+     * Select the previous tab.
+     * @param current the current tab
+     */
     protected void selectPreviousTab(int current) {
         int tabIndex = getPreviousTabIndex(current);
 
@@ -1948,6 +2266,12 @@
         navigateTo(tabIndex);
     }
 
+    /**
+     * Selects an adjacent run of tabs.
+     * @param tabPlacement  the placement (left, right, bottom, top) of the tab
+     * @param tabIndex      the index of the tab with respect to other tabs
+     * @param offset        selection offset
+     */
     protected void selectAdjacentRunTab(int tabPlacement,
                                         int tabIndex, int offset) {
         if ( runCount < 2 ) {
@@ -2026,6 +2350,14 @@
         return focusIndex;
     }
 
+    /**
+     * Returns the tab run offset.
+     * @param tabPlacement  the placement (left, right, bottom, top) of the tab
+     * @param tabCount the tab count
+     * @param tabIndex      the index of the tab with respect to other tabs
+     * @param forward forward or not
+     * @return the tab run offset
+     */
     protected int getTabRunOffset(int tabPlacement, int tabCount,
                                   int tabIndex, boolean forward) {
         int run = getRunForTab(tabCount, tabIndex);
@@ -2092,15 +2424,31 @@
         return offset;
     }
 
+    /**
+     * Returns the previous tab index.
+     * @param base the base
+     * @return the previous tab index
+     */
     protected int getPreviousTabIndex(int base) {
         int tabIndex = (base - 1 >= 0? base - 1 : tabPane.getTabCount() - 1);
         return (tabIndex >= 0? tabIndex : 0);
     }
 
+    /**
+     * Returns the next tab index.
+     * @param base the base
+     * @return the next tab index
+     */
     protected int getNextTabIndex(int base) {
         return (base+1)%tabPane.getTabCount();
     }
 
+    /**
+     * Returns the next tab index in the run.
+     * @param tabCount the tab count
+     * @param base the base
+     * @return the next tab index in the run
+     */
     protected int getNextTabIndexInRun(int tabCount, int base) {
         if (runCount < 2) {
             return getNextTabIndex(base);
@@ -2113,6 +2461,12 @@
         return next;
     }
 
+    /**
+     * Returns the previous tab index in the run.
+     * @param tabCount the tab count
+     * @param base the base
+     * @return the previous tab index in the run
+     */
     protected int getPreviousTabIndexInRun(int tabCount, int base) {
         if (runCount < 2) {
             return getPreviousTabIndex(base);
@@ -2125,15 +2479,31 @@
         return getPreviousTabIndex(base);
     }
 
+    /**
+     * Returns the previous tab run.
+     * @param baseRun the base run
+     * @return the previous tab run
+     */
     protected int getPreviousTabRun(int baseRun) {
         int runIndex = (baseRun - 1 >= 0? baseRun - 1 : runCount - 1);
         return (runIndex >= 0? runIndex : 0);
     }
 
+    /**
+     * Returns the next tab run.
+     * @param baseRun the base run
+     * @return the next tab run
+     */
     protected int getNextTabRun(int baseRun) {
         return (baseRun+1)%runCount;
     }
 
+    /**
+     * Rotates the insets.
+     * @param topInsets the top insets
+     * @param targetInsets the target insets
+     * @param targetPlacement the target placement
+     */
     protected static void rotateInsets(Insets topInsets, Insets targetInsets, int targetPlacement) {
 
         switch(targetPlacement) {
@@ -2292,6 +2662,11 @@
             return calculateSize(true);
         }
 
+        /**
+         * Returns the calculated size.
+         * @param minimum use the minimum size or preferred size
+         * @return the calculated size
+         */
         protected Dimension calculateSize(boolean minimum) {
             int tabPlacement = tabPane.getTabPlacement();
             Insets insets = tabPane.getInsets();
@@ -2346,6 +2721,12 @@
 
         }
 
+        /**
+         * Returns the preferred tab area height.
+         * @param tabPlacement the tab placement
+         * @param width the width
+         * @return the preferred tab area height
+         */
         protected int preferredTabAreaHeight(int tabPlacement, int width) {
             FontMetrics metrics = getFontMetrics();
             int tabCount = tabPane.getTabCount();
@@ -2370,6 +2751,12 @@
             return total;
         }
 
+        /**
+         * Returns the preferred tab area width.
+         * @param tabPlacement the tab placement
+         * @param height the height
+         * @return the preferred tab area widty
+         */
         protected int preferredTabAreaWidth(int tabPlacement, int height) {
             FontMetrics metrics = getFontMetrics();
             int tabCount = tabPane.getTabCount();
@@ -2395,6 +2782,7 @@
             return total;
         }
 
+        /** {@inheritDoc} */
         @SuppressWarnings("deprecation")
         public void layoutContainer(Container parent) {
             /* Some of the code in this method deals with changing the
@@ -2517,6 +2905,9 @@
             }
         }
 
+        /**
+         * Calculates the layout info.
+         */
         public void calculateLayoutInfo() {
             int tabCount = tabPane.getTabCount();
             assureRectsCreated(tabCount);
@@ -2556,6 +2947,11 @@
             }
         }
 
+        /**
+         * Calculate the tab rectangles.
+         * @param tabPlacement the tab placement
+         * @param tabCount the tab count
+         */
         protected void calculateTabRects(int tabPlacement, int tabCount) {
             FontMetrics metrics = getFontMetrics();
             Dimension size = tabPane.getSize();
@@ -2741,9 +3137,11 @@
         }
 
 
-       /*
-       * Rotates the run-index array so that the selected run is run[0]
-       */
+        /**
+         * Rotates the run-index array so that the selected run is run[0].
+         * @param tabPlacement the tab placement
+         * @param selectedRun the selected run
+         */
         protected void rotateTabRuns(int tabPlacement, int selectedRun) {
             for (int i = 0; i < selectedRun; i++) {
                 int save = tabRuns[0];
@@ -2754,6 +3152,13 @@
             }
         }
 
+        /**
+         * Normalizes the tab runs.
+         * @param tabPlacement the tab placement
+         * @param tabCount the tab count
+         * @param start the start
+         * @param max the max
+         */
         protected void normalizeTabRuns(int tabPlacement, int tabCount,
                                      int start, int max) {
             boolean verticalTabRuns = (tabPlacement == LEFT || tabPlacement == RIGHT);
@@ -2822,6 +3227,13 @@
             }
         }
 
+        /**
+         * Pads the tab run.
+         * @param tabPlacement the tab placement
+         * @param start the start
+         * @param end the end
+         * @param max the max
+         */
         protected void padTabRun(int tabPlacement, int start, int end, int max) {
             Rectangle lastRect = rects[end];
             if (tabPlacement == TOP || tabPlacement == BOTTOM) {
@@ -2853,6 +3265,11 @@
             }
         }
 
+        /**
+         * Pads selected tab.
+         * @param tabPlacement the tab placement
+         * @param selectedIndex the selected index
+         */
         protected void padSelectedTab(int tabPlacement, int selectedIndex) {
 
             if (selectedIndex >= 0) {
--- a/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicTextUI.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/plaf/basic/BasicTextUI.java	Wed Jul 05 20:33:35 2017 +0200
@@ -102,6 +102,7 @@
  */
 @SuppressWarnings("serial") // Same-version serialization only
 public abstract class BasicTextUI extends TextUI implements ViewFactory {
+    private static final int DEFAULT_CARET_MARGIN = 1;
 
     /**
      * Creates a new UI.
@@ -204,6 +205,12 @@
                 evt.getPropertyName().equals("enabled")) {
 
             updateBackground((JTextComponent)evt.getSource());
+        } else if (evt.getPropertyName().equals("caretWidth")) {
+            Object value = evt.getNewValue();
+            if (value instanceof Number) {
+                int width = ((Number) value).intValue();
+                if (width >= 0) caretMargin = width;
+            }
         }
     }
 
@@ -794,6 +801,20 @@
             installDefaults();
             installDefaults2();
 
+            // margin required to show caret in the rightmost position
+            caretMargin = -1;
+            Object property = UIManager.get("Caret.width");
+            if (property instanceof Number) {
+                caretMargin = ((Number) property).intValue();
+            }
+            property = c.getClientProperty("caretWidth");
+            if (property instanceof Number) {
+                caretMargin = ((Number) property).intValue();
+            }
+            if (caretMargin < 0) {
+                caretMargin = DEFAULT_CARET_MARGIN;
+            }
+
             // attach to the model and editor
             editor.addPropertyChangeListener(updateHandler);
             Document doc = editor.getDocument();
@@ -924,7 +945,7 @@
                 rootView.setSize(Integer.MAX_VALUE, Integer.MAX_VALUE);
             }
             d.width = (int) Math.min((long) rootView.getPreferredSpan(View.X_AXIS) +
-                                     (long) i.left + (long) i.right, Integer.MAX_VALUE);
+                         (long) i.left + (long) i.right + caretMargin, Integer.MAX_VALUE);
             d.height = (int) Math.min((long) rootView.getPreferredSpan(View.Y_AXIS) +
                                       (long) i.top + (long) i.bottom, Integer.MAX_VALUE);
         } finally {
@@ -1323,6 +1344,7 @@
     private final DragListener dragListener = getDragListener();
     private static final Position.Bias[] discardBias = new Position.Bias[1];
     private DefaultCaret dropCaret;
+    private int caretMargin;
 
     /**
      * Root view that acts as a gateway between the component
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/AbstractDocument.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/AbstractDocument.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -308,9 +308,8 @@
      *
      * If no such listeners exist, this method returns an empty array.
      *
-     * @param listenerType the type of listeners requested; this parameter
-     *          should specify an interface that descends from
-     *          <code>java.util.EventListener</code>
+     * @param <T> the listener type
+     * @param listenerType the type of listeners requested
      * @return an array of all objects registered as
      *          <code><em>Foo</em>Listener</code>s on this component,
      *          or an empty array if no such
@@ -905,6 +904,8 @@
      * Returns the root element of the bidirectional structure for this
      * document.  Its children represent character runs with a given
      * Unicode bidi level.
+     * @return the root element of the bidirectional structure for this
+     * document
      */
     public Element getBidiRootElement() {
         return bidiRoot;
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/AbstractWriter.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/AbstractWriter.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -186,7 +186,7 @@
 
     /**
      * Returns the first offset to be output.
-     *
+     * @return the first offset to be output
      * @since 1.3
      */
     public int getStartOffset() {
@@ -195,7 +195,7 @@
 
     /**
      * Returns the last offset to be output.
-     *
+     * @return the last offset to be output
      * @since 1.3
      */
     public int getEndOffset() {
@@ -213,7 +213,7 @@
 
     /**
      * Returns the Writer that is used to output the content.
-     *
+     * @return the Writer that is used to output the content
      * @since 1.3
      */
     protected Writer getWriter() {
@@ -257,6 +257,9 @@
      * by subclasses.  Its responsibility is to
      * iterate over the elements and use the write()
      * methods to generate output in the desired format.
+     * @throws IOException if an I/O problem has occurred
+     * @throws BadLocationException for an invalid location within
+     * the document
      */
     abstract protected void write() throws IOException, BadLocationException;
 
@@ -314,7 +317,7 @@
 
     /**
      * Returns the maximum line length.
-     *
+     * @return the maximum line length
      * @since 1.3
      */
     protected int getLineLength() {
@@ -323,7 +326,7 @@
 
     /**
      * Sets the current line length.
-     *
+     * @param length the new line length
      * @since 1.3
      */
     protected void setCurrentLineLength(int length) {
@@ -333,7 +336,7 @@
 
     /**
      * Returns the current line length.
-     *
+     * @return the current line length
      * @since 1.3
      */
     protected int getCurrentLineLength() {
@@ -344,7 +347,7 @@
      * Returns true if the current line should be considered empty. This
      * is true when <code>getCurrentLineLength</code> == 0 ||
      * <code>indent</code> has been invoked on an empty line.
-     *
+     * @return true if the current line should be considered empty
      * @since 1.3
      */
     protected boolean isLineEmpty() {
@@ -355,7 +358,7 @@
      * Sets whether or not lines can be wrapped. This can be toggled
      * during the writing of lines. For example, outputting HTML might
      * set this to false when outputting a quoted string.
-     *
+     * @param newValue new value for line wrapping
      * @since 1.3
      */
     protected void setCanWrapLines(boolean newValue) {
@@ -365,7 +368,7 @@
     /**
      * Returns whether or not the lines can be wrapped. If this is false
      * no lineSeparator's will be output.
-     *
+     * @return whether or not the lines can be wrapped
      * @since 1.3
      */
     protected boolean getCanWrapLines() {
@@ -385,7 +388,7 @@
 
     /**
      * Returns the amount of space to indent.
-     *
+     * @return the amount of space to indent
      * @since 1.3
      */
     protected int getIndentSpace() {
@@ -396,7 +399,7 @@
      * Sets the String used to represent newlines. This is initialized
      * in the constructor from either the Document, or the System property
      * line.separator.
-     *
+     * @param value the new line separator
      * @since 1.3
      */
     public void setLineSeparator(String value) {
@@ -405,7 +408,7 @@
 
     /**
      * Returns the string used to represent newlines.
-     *
+     * @return the string used to represent newlines
      * @since 1.3
      */
     public String getLineSeparator() {
@@ -446,7 +449,7 @@
      * Returns the current indentation level. That is, the number of times
      * <code>incrIndent</code> has been invoked minus the number of times
      * <code>decrIndent</code> has been invoked.
-     *
+     * @return the current indentation level
      * @since 1.3
      */
     protected int getIndentLevel() {
@@ -514,7 +517,7 @@
     /**
      * Writes the line separator. This invokes <code>output</code> directly
      * as well as setting the <code>lineLength</code> to 0.
-     *
+     * @throws IOException on any I/O error
      * @since 1.3
      */
     protected void writeLineSeparator() throws IOException {
@@ -539,6 +542,10 @@
      * and won't fit in which case the line length will exceed
      * <code>getLineLength</code>.
      *
+     * @param chars characters to output
+     * @param startIndex starting index
+     * @param length length of output
+     * @throws IOException on any I/O error
      * @since 1.3
      */
     protected void write(char[] chars, int startIndex, int length)
@@ -686,6 +693,10 @@
      * <code>writeLineSeparator</code> to write out a newline, which will
      * property update the current line length.
      *
+     * @param content characters to output
+     * @param start starting index
+     * @param length length of output
+     * @throws IOException on any I/O error
      * @since 1.3
      */
     protected void output(char[] content, int start, int length)
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/AsyncBoxView.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/AsyncBoxView.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -71,6 +71,7 @@
      * Fetch the major axis (the axis the children
      * are tiled along).  This will have a value of
      * either X_AXIS or Y_AXIS.
+     * @return the major axis
      */
     public int getMajorAxis() {
         return axis;
@@ -80,6 +81,7 @@
      * Fetch the minor axis (the axis orthogonal
      * to the tiled axis).  This will have a value of
      * either X_AXIS or Y_AXIS.
+     * @return the minor axis
      */
     public int getMinorAxis() {
         return (axis == X_AXIS) ? Y_AXIS : X_AXIS;
@@ -87,6 +89,7 @@
 
     /**
      * Get the top part of the margin around the view.
+     * @return the top part of the margin around the view
      */
     public float getTopInset() {
         return topInset;
@@ -103,6 +106,7 @@
 
     /**
      * Get the bottom part of the margin around the view.
+     * @return the bottom part of the margin around the view
      */
     public float getBottomInset() {
         return bottomInset;
@@ -119,6 +123,7 @@
 
     /**
      * Get the left part of the margin around the view.
+     * @return the left part of the margin around the view
      */
     public float getLeftInset() {
         return leftInset;
@@ -135,6 +140,7 @@
 
     /**
      * Get the right part of the margin around the view.
+     * @return the right part of the margin around the view
      */
     public float getRightInset() {
         return rightInset;
@@ -154,6 +160,7 @@
      *
      * @param axis the axis to determine the total insets along,
      *  either X_AXIS or Y_AXIS.
+     * @return the span along an axis that is taken up by the insets
      * @since 1.4
      */
     protected float getInsetSpan(int axis) {
@@ -173,6 +180,7 @@
      * considered to be accurate and incremental changes will be
      * added into the total as they are calculated.
      *
+     * @param isEstimated new value for the estimatedMajorSpan property
      * @since 1.4
      */
     protected void setEstimatedMajorSpan(boolean isEstimated) {
@@ -181,6 +189,7 @@
 
     /**
      * Is the major span currently estimated?
+     * @return whether or not the major span currently estimated
      *
      * @since 1.4
      */
@@ -194,6 +203,8 @@
      *
      * @param index the child index.  This should be a
      *   value &gt;= 0 and &lt; getViewCount().
+     * @return the object representing the layout state of
+     * of the child at the given index
      */
     protected ChildState getChildState(int index) {
         synchronized(stats) {
@@ -206,6 +217,7 @@
 
     /**
      * Fetch the queue to use for layout.
+     * @return the queue to use for layout
      */
     protected LayoutQueue getLayoutQueue() {
         return LayoutQueue.getDefaultQueue();
@@ -214,7 +226,9 @@
     /**
      * New ChildState records are created through
      * this method to allow subclasses the extend
-     * the ChildState records to do/hold more
+     * the ChildState records to do/hold more.
+     * @param v the view
+     * @return new child state
      */
     protected ChildState createChildState(View v) {
         return new ChildState(v);
@@ -237,6 +251,8 @@
      * not estimated, it is updated by the given delta to reflect
      * the incremental change.  The delta is ignored if the
      * major span is estimated.
+     * @param cs the child state
+     * @param delta the delta
      */
     protected synchronized void majorRequirementChange(ChildState cs, float delta) {
         if (estimatedMajorSpan == false) {
@@ -254,6 +270,7 @@
      * might be the GUI thread if it is trying to update
      * something immediately (such as to perform a
      * model/view translation).
+     * @param cs the child state
      */
     protected synchronized void minorRequirementChange(ChildState cs) {
         minorChanged = true;
@@ -418,6 +435,7 @@
      * where there is a child view for each child element.
      *
      * @param pos the position &gt;= 0
+     * @param b the position bias
      * @return  index of the view representing the given position, or
      *   -1 if no view represents that position
      */
@@ -946,6 +964,7 @@
          * This is called by a ChildState object that has
          * changed it's major span.  This can therefore be
          * called by multiple threads.
+         * @param cs the child state
          */
         public synchronized void childChanged(ChildState cs) {
             if (lastValidOffset == null) {
@@ -958,6 +977,7 @@
 
         /**
          * Paint the children that intersect the clip area.
+         * @param g the rendering surface to use
          */
         public synchronized void paintChildren(Graphics g) {
             Rectangle clip = g.getClipBounds();
@@ -987,6 +1007,9 @@
          * Fetch the allocation to use for a child view.
          * This will update the offsets for all children
          * not yet updated before the given index.
+         * @param index the child index
+         * @param a the allocation
+         * @return the allocation to use for a child view
          */
         public synchronized Shape getChildAllocation(int index, Shape a) {
             if (a == null) {
@@ -1031,6 +1054,8 @@
          * Fetch the allocation to use for a child view.
          * <em>This does not update the offsets in the ChildState
          * records.</em>
+         * @param index the index
+         * @return the allocation to use for a child view
          */
         protected Shape getChildAllocation(int index) {
             ChildState cs = getChildState(index);
@@ -1057,6 +1082,7 @@
          * Copy the currently allocated shape into the Rectangle
          * used to store the current allocation.  This would be
          * a floating point rectangle in a Java2D-specific implementation.
+         * @param a the allocation
          */
         protected void setAllocation(Shape a) {
             if (a instanceof Rectangle) {
@@ -1072,6 +1098,7 @@
          * along the major axis.  Make sure that offsets are set
          * on the ChildState objects up to the given target span
          * past the desired offset.
+         * @param targetOffset the target offset
          *
          * @return   index of the view representing the given visual
          *   location (targetOffset), or -1 if no view represents
@@ -1201,6 +1228,7 @@
          * Construct a child status.  This needs to start
          * out as fairly large so we don't falsely begin with
          * the idea that all of the children are visible.
+         * @param v the view
          * @since 1.4
          */
         public ChildState(View v) {
@@ -1212,7 +1240,8 @@
         }
 
         /**
-         * Fetch the child view this record represents
+         * Fetch the child view this record represents.
+         * @return the child view this record represents
          */
         public View getChildView() {
             return child;
@@ -1322,6 +1351,7 @@
 
         /**
          * What is the span along the minor axis.
+         * @return the span along the minor axis
          */
         public float getMinorSpan() {
             if (max < minorSpan) {
@@ -1333,6 +1363,7 @@
 
         /**
          * What is the offset along the minor axis
+         * @return the offset along the minor axis
          */
         public float getMinorOffset() {
             if (max < minorSpan) {
@@ -1345,13 +1376,15 @@
 
         /**
          * What is the span along the major axis.
+         * @return the span along the major axis
          */
         public float getMajorSpan() {
             return span;
         }
 
         /**
-         * Get the offset along the major axis
+         * Get the offset along the major axis.
+         * @return the offset along the major axis
          */
         public float getMajorOffset() {
             return offset;
@@ -1361,6 +1394,7 @@
          * This method should only be called by the ChildLocator,
          * it is simply a convenient place to hold the cached
          * location.
+         * @param offs offsets
          */
         public void setMajorOffset(float offs) {
             offset = offs;
@@ -1394,6 +1428,7 @@
 
         /**
          * Has the child view been laid out.
+         * @return whether or not the child view been laid out.
          */
         public boolean isLayoutValid() {
             return (minorValid && majorValid && childSizeValid);
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/BoxView.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/BoxView.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -134,6 +134,7 @@
 
     /**
      * Determines if the layout is valid along the given axis.
+     * @return if the layout is valid along the given axis
      *
      * @param axis either <code>View.X_AXIS</code> or <code>View.Y_AXIS</code>
      *
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/ChangedCharSetException.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/ChangedCharSetException.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -38,15 +38,28 @@
     String charSetSpec;
     boolean charSetKey;
 
+    /**
+     * Constructs a {@code ChangedCharSetException}.
+     * @param charSetSpec name of the char set specification
+     * @param charSetKey char set key
+     */
     public ChangedCharSetException(String charSetSpec, boolean charSetKey) {
         this.charSetSpec = charSetSpec;
         this.charSetKey = charSetKey;
     }
 
+    /**
+     * Returns the char set specification.
+     * @return the char set specification
+     */
     public String getCharSetSpec() {
         return charSetSpec;
     }
 
+    /**
+     * Returns the char set key.
+     * @return the char set key
+     */
     public boolean keyEqualsCharSet() {
         return charSetKey;
     }
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/ComponentView.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/ComponentView.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -85,6 +85,8 @@
      * This would result from a call to setParent or
      * as a result of being notified that attributes
      * have changed.
+     * @return the component that is associated with
+     * this view
      */
     protected Component createComponent() {
         AttributeSet attr = getElement().getAttributes();
@@ -94,6 +96,7 @@
 
     /**
      * Fetch the component associated with the view.
+     * @return the component associated with the view
      */
     public final Component getComponent() {
         return createdC;
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/DefaultCaret.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/DefaultCaret.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -825,10 +825,8 @@
      * <pre>ChangeListener[] cls = (ChangeListener[])(c.getListeners(ChangeListener.class));</pre>
      *
      * If no such listeners exist, this method returns an empty array.
-     *
-     * @param listenerType the type of listeners requested; this parameter
-     *          should specify an interface that descends from
-     *          <code>java.util.EventListener</code>
+     * @param <T> the listener type
+     * @param listenerType the type of listeners requested
      * @return an array of all objects registered as
      *          <code><em>Foo</em>Listener</code>s on this component,
      *          or an empty array if no such
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/DefaultFormatterFactory.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/DefaultFormatterFactory.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -97,6 +97,9 @@
     private JFormattedTextField.AbstractFormatter nullFormat;
 
 
+    /**
+     * Constructs a {@code DefaultFormatterFactory}.
+     */
     public DefaultFormatterFactory() {
     }
 
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/DefaultHighlighter.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/DefaultHighlighter.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -336,11 +336,16 @@
      * (if the offsets are in a highlighted region that is). For this to
      * work the painter supplied must be an instance of
      * LayeredHighlightPainter.
+     * @param newValue the new value
      */
     public void setDrawsLayeredHighlights(boolean newValue) {
         drawsLayeredHighlights = newValue;
     }
 
+    /**
+     * Return the draw layered highlights.
+     * @return the draw layered highlights
+     */
     public boolean getDrawsLayeredHighlights() {
         return drawsLayeredHighlights;
     }
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/DefaultStyledDocument.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/DefaultStyledDocument.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -122,6 +122,7 @@
      * structure (i.e. the structure reported by the
      * <code>getDefaultRootElement</code> method.  If the
      * document contained any data it will first be removed.
+     * @param data the element data
      */
     protected void create(ElementSpec[] data) {
         try {
@@ -1104,6 +1105,9 @@
      */
     public static final int BUFFER_SIZE_DEFAULT = 4096;
 
+    /**
+     * The element buffer.
+     */
     protected ElementBuffer buffer;
 
     /** Styles listening to. */
@@ -2524,6 +2528,12 @@
      * Element.
      */
     public static class AttributeUndoableEdit extends AbstractUndoableEdit {
+        /**
+         * Constructs an {@code AttributeUndoableEdit}.
+         * @param element the element
+         * @param newAttributes the new attributes
+         * @param isReplacing true if all the attributes in the element were removed first.
+         */
         public AttributeUndoableEdit(Element element, AttributeSet newAttributes,
                               boolean isReplacing) {
             super();
@@ -2561,13 +2571,21 @@
             as.addAttributes(copy);
         }
 
-        // AttributeSet containing additional entries, must be non-mutable!
+        /**
+         * AttributeSet containing additional entries, must be non-mutable!
+         */
         protected AttributeSet newAttributes;
-        // Copy of the AttributeSet the Element contained.
+        /**
+         * Copy of the AttributeSet the Element contained.
+         */
         protected AttributeSet copy;
-        // true if all the attributes in the element were removed first.
+        /**
+         * true if all the attributes in the element were removed first.
+         */
         protected boolean isReplacing;
-        // Efected Element.
+        /**
+         * Affected Element.
+         */
         protected Element element;
     }
 
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/FlowView.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/FlowView.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -70,6 +70,8 @@
      * rows are tiled (the axis of the default flow
      * rows themselves).  This is typically used
      * by the <code>FlowStrategy</code>.
+     * @return the axis along which views should be
+     * flowed
      */
     public int getFlowAxis() {
         if (getAxis() == Y_AXIS) {
@@ -89,6 +91,8 @@
      *
      * @param index the index of the row being updated.
      *   This should be a value &gt;= 0 and &lt; getViewCount().
+     * @return the constraining span to flow against for
+     * the given child index
      * @see #getFlowStart
      */
     public int getFlowSpan(int index) {
@@ -104,6 +108,8 @@
 
      * @param index the index of the row being updated.
      *   This should be a value &gt;= 0 and &lt; getViewCount().
+     * @return the location along the flow axis that the
+     * flow span will start at
      * @see #getFlowSpan
      */
     public int getFlowStart(int index) {
@@ -116,6 +122,8 @@
      * called by the FlowStrategy when new children
      * are added or removed (i.e. rows are added or
      * removed) in the process of updating the flow.
+     * @return a View that should be used to hold a
+     * a rows worth of children in a flow
      */
     protected abstract View createRow();
 
@@ -359,6 +367,7 @@
          * strategy should update the appropriate changed region (which
          * depends upon the strategy used for repair).
          *
+         * @param fv the flow view
          * @param e the change information from the associated document
          * @param alloc the current allocation of the view inside of the insets.
          *   This value will be null if the view has not yet been displayed.
@@ -385,6 +394,7 @@
          * Gives notification that something was removed from the document
          * in a location that the given flow view is responsible for.
          *
+         * @param fv the flow view
          * @param e the change information from the associated document
          * @param alloc the current allocation of the view inside of the insets.
          * @see View#removeUpdate
@@ -426,6 +436,8 @@
         /**
          * This method gives flow strategies access to the logical
          * view of the FlowView.
+         * @param fv the FlowView
+         * @return the logical view of the FlowView
          */
         protected View getLogicalView(FlowView fv) {
             return fv.layoutPool;
@@ -495,6 +507,7 @@
          * the adjustRow method will be called to perform adjustments
          * to the row to try and make it fit into the given span.
          *
+         * @param fv the flow view
          * @param rowIndex the index of the row to fill in with views.  The
          *   row is assumed to be empty on entry.
          * @param pos  The current position in the children of
@@ -578,6 +591,7 @@
          * the row.  If a forced break is encountered, the
          * break will be positioned there.
          *
+         * @param fv the flow view
          * @param rowIndex the row to adjust to the current layout
          *  span.
          * @param desiredSpan the current layout span &gt;= 0
@@ -654,6 +668,8 @@
          * @param startOffset the start location for the view being created
          * @param spanLeft the about of span left to fill in the row
          * @param rowIndex the row the view will be placed into
+         * @return a view that can be used to represent the current piece
+         * of the flow
          */
         protected View createView(FlowView fv, int startOffset, int spanLeft, int rowIndex) {
             // Get the child view that contains the given starting position
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/GapContent.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/GapContent.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -758,6 +758,8 @@
      * to subclasses.
      *
      * @param positions the UndoPosRef instances to reset
+     * @param offset where the string was inserted
+     * @param length length of inserted string
      */
     @SuppressWarnings("rawtypes") // UndoPosRef type cannot be exposed
     protected void updateUndoPositions(Vector positions, int offset,
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/GlyphView.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/GlyphView.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -102,6 +102,7 @@
      * Fetch the currently installed glyph painter.
      * If a painter has not yet been installed, and
      * a default was not yet needed, null is returned.
+     * @return the currently installed glyph painter
      */
     public GlyphPainter getGlyphPainter() {
         return painter;
@@ -109,6 +110,7 @@
 
     /**
      * Sets the painter to use for rendering glyphs.
+     * @param p the painter to use for rendering glyphs
      */
     public void setGlyphPainter(GlyphPainter p) {
         painter = p;
@@ -144,6 +146,7 @@
      * be returned.  This is implemented to call
      * <code>StyledDocument.getBackground</code> if the associated
      * document is a styled document, otherwise it returns null.
+     * @return the background color to use to render the glyphs
      */
     public Color getBackground() {
         Document doc = getDocument();
@@ -165,6 +168,7 @@
      * is not a StyledDocument, the associated components foreground
      * color is used.  If there is no associated component, null
      * is returned.
+     * @return the foreground color to use to render the glyphs
      */
     public Color getForeground() {
         Document doc = getDocument();
@@ -187,6 +191,7 @@
      * is not a StyledDocument, the associated components font
      * is used.  If there is no associated component, null
      * is returned.
+     * @return the font that the glyphs should be based upon
      */
     public Font getFont() {
         Document doc = getDocument();
@@ -204,6 +209,7 @@
     /**
      * Determine if the glyphs should be underlined.  If true,
      * an underline should be drawn through the baseline.
+     * @return if the glyphs should be underlined
      */
     public boolean isUnderline() {
         AttributeSet attr = getAttributes();
@@ -214,6 +220,7 @@
      * Determine if the glyphs should have a strikethrough
      * line.  If true, a line should be drawn through the center
      * of the glyphs.
+     * @return if the glyphs should have a strikethrough line
      */
     public boolean isStrikeThrough() {
         AttributeSet attr = getAttributes();
@@ -222,6 +229,7 @@
 
     /**
      * Determine if the glyphs should be rendered as superscript.
+     * @return if the glyphs should be rendered as superscript
      */
     public boolean isSubscript() {
         AttributeSet attr = getAttributes();
@@ -230,6 +238,7 @@
 
     /**
      * Determine if the glyphs should be rendered as subscript.
+     * @return if the glyphs should be rendered as subscript
      */
     public boolean isSuperscript() {
         AttributeSet attr = getAttributes();
@@ -238,6 +247,7 @@
 
     /**
      * Fetch the TabExpander to use if tabs are present in this view.
+     * @return the TabExpander to use if tabs are present in this view
      */
     public TabExpander getTabExpander() {
         return expander;
@@ -1148,17 +1158,43 @@
         /**
          * Determine the span the glyphs given a start location
          * (for tab expansion).
+         * @param v  the {@code GlyphView}
+         * @param p0 the beginning position
+         * @param p1 the ending position
+         * @param e  how to expand the tabs when encountered
+         * @param x the X coordinate
+         * @return the span the glyphs given a start location
          */
         public abstract float getSpan(GlyphView v, int p0, int p1, TabExpander e, float x);
 
+        /**
+         * Returns of the height.
+         * @param v  the {@code GlyphView}
+         * @return of the height
+         */
         public abstract float getHeight(GlyphView v);
 
+        /**
+         * Returns of the ascent.
+         * @param v  the {@code GlyphView}
+         * @return of the ascent
+         */
         public abstract float getAscent(GlyphView v);
 
+        /**
+         * Returns of the descent.
+         * @param v  the {@code GlyphView}
+         * @return of the descent
+         */
         public abstract float getDescent(GlyphView v);
 
         /**
          * Paint the glyphs representing the given range.
+         * @param v the {@code GlyphView}
+         * @param g the graphics context
+         * @param a the current allocation of the view
+         * @param p0 the beginning position
+         * @param p1 the ending position
          */
         public abstract void paint(GlyphView v, Graphics g, Shape a, int p0, int p1);
 
@@ -1231,6 +1267,7 @@
          * @param v  the <code>GlyphView</code> to provide a painter for
          * @param p0 the starting document offset &gt;= 0
          * @param p1 the ending document offset &gt;= p0
+         * @return a painter to use for the given GlyphView
          */
         public GlyphPainter getPainter(GlyphView v, int p0, int p1) {
             return this;
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/Highlighter.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/Highlighter.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -124,6 +124,9 @@
 
     }
 
+    /**
+     * A highlight.
+     */
     public interface Highlight {
 
         /**
@@ -148,5 +151,4 @@
         public HighlightPainter getPainter();
 
     }
-
 };
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/JTextComponent.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/JTextComponent.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -536,6 +536,7 @@
      * Sets the <code>NavigationFilter</code>. <code>NavigationFilter</code>
      * is used by <code>DefaultCaret</code> and the default cursor movement
      * actions as a way to restrict the cursor movement.
+     * @param filter the filter
      *
      * @since 1.4
      */
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/LabelView.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/LabelView.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -161,6 +161,7 @@
 
     /**
      * Fetches the <code>FontMetrics</code> used for this view.
+     * @return the <code>FontMetrics</code> used for this view
      * @deprecated FontMetrics are not used for glyph rendering
      *  when running in the JDK.
      */
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/LayeredHighlighter.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/LayeredHighlighter.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -56,6 +56,15 @@
      * Layered highlight renderer.
      */
     static public abstract class LayerPainter implements Highlighter.HighlightPainter {
+        /**
+         * @return a shape
+         * @param g Graphics used to draw
+         * @param p0 starting offset of view
+         * @param p1 ending offset of view
+         * @param viewBounds Bounds of View
+         * @param editor JTextComponent
+         * @param view View instance being rendered
+         */
         public abstract Shape paintLayer(Graphics g, int p0, int p1,
                                         Shape viewBounds,JTextComponent editor,
                                         View view);
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/LayoutQueue.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/LayoutQueue.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -51,6 +51,7 @@
 
     /**
      * Fetch the default layout queue.
+     * @return the default layout queue
      */
     public static LayoutQueue getDefaultQueue() {
         AppContext ac = AppContext.getAppContext();
@@ -78,6 +79,7 @@
     /**
      * Add a task that is not needed immediately because
      * the results are not believed to be visible.
+     * @param task the task to add to the queue
      */
     public synchronized void addTask(Runnable task) {
         if (worker == null) {
@@ -104,7 +106,8 @@
     }
 
     /**
-     * Used by the worker thread to get a new task to execute
+     * Used by the worker thread to get a new task to execute.
+     * @return a task from the queue
      */
     protected synchronized Runnable waitForWork() {
         while (tasks.size() == 0) {
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/MaskFormatter.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/MaskFormatter.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -199,7 +199,7 @@
      * Creates a <code>MaskFormatter</code> with the specified mask.
      * A <code>ParseException</code>
      * will be thrown if <code>mask</code> is an invalid mask.
-     *
+     * @param mask the mask
      * @throws ParseException if mask does not contain valid mask characters
      */
     public MaskFormatter(String mask) throws ParseException {
@@ -211,6 +211,7 @@
      * Sets the mask dictating the legal characters.
      * This will throw a <code>ParseException</code> if <code>mask</code> is
      * not valid.
+     * @param mask the mask
      *
      * @throws ParseException if mask does not contain valid mask characters
      */
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/ParagraphView.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/ParagraphView.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -246,6 +246,7 @@
      * <code>rowIndex</code> gives the index of the view that corresponds
      * that should be looked in.
      * @param pos  position into the model
+     * @param b the bias
      * @param a the allocated region to render into
      * @param direction one of the following values:
      * <ul>
@@ -256,6 +257,7 @@
      *  in this method
      * @param rowIndex the index of the view
      * @param x the x coordinate of interest
+     * @throws BadLocationException if a bad location is encountered
      * @return the closest model position to <code>x</code>
      */
     // NOTE: This will not properly work if ParagraphView contains
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/PlainView.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/PlainView.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -520,6 +520,9 @@
      * view.  The longest line is checked to see if it has
      * changed.
      *
+     * @param changes the change information from the associated document
+     * @param a the current allocation of the view
+     * @param f the factory to use to rebuild if the view has children
      * @since 1.4
      */
     protected void updateDamage(DocumentEvent changes, Shape a, ViewFactory f) {
@@ -608,6 +611,7 @@
      * @param a  the region allocated for the view to render into
      * @param line the line number to find the region of.  This must
      *   be a valid line number in the model.
+     * @return the rectangle that represents the given line
      * @since 1.4
      */
     protected Rectangle lineToRect(Shape a, int line) {
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/StyleContext.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/StyleContext.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -479,9 +479,9 @@
      * behavior of SmallAttributeSet.  This can be reimplemented
      * to return an AttributeSet that provides some sort of
      * attribute conversion.
-     *
      * @param a The set of attributes to be represented in the
      *  the compact form.
+     * @return a compact set of attributes that might be shared
      */
     protected SmallAttributeSet createSmallAttributeSet(AttributeSet a) {
         return new SmallAttributeSet(a);
@@ -498,6 +498,8 @@
      *
      * @param a The set of attributes to be represented in the
      *  the larger form.
+     * @return a large set of attributes that should trade off
+     * space for time
      */
     protected MutableAttributeSet createLargeAttributeSet(AttributeSet a) {
         return new SimpleAttributeSet(a);
@@ -558,6 +560,9 @@
 
     /**
      * Context-specific handling of writing out attributes
+     * @param out the output stream
+     * @param a the attribute set
+     * @exception IOException on any I/O error
      */
     public void writeAttributes(ObjectOutputStream out,
                                   AttributeSet a) throws IOException {
@@ -566,6 +571,13 @@
 
     /**
      * Context-specific handling of reading in attributes
+     * @param in the object stream to read the attribute data from.
+     * @param a  the attribute set to place the attribute
+     *   definitions in.
+     * @exception ClassNotFoundException passed upward if encountered
+     *  when reading the object stream.
+     * @exception IOException passed upward if encountered when
+     *  reading the object stream.
      */
     public void readAttributes(ObjectInputStream in,
                                MutableAttributeSet a) throws ClassNotFoundException, IOException {
@@ -685,6 +697,9 @@
     /**
      * Returns the object previously registered with
      * <code>registerStaticAttributeKey</code>.
+     * @param key the object key
+     * @return Returns the object previously registered with
+     * {@code registerStaticAttributeKey}
      */
     public static Object getStaticAttribute(Object key) {
         if (thawKeyMap == null || key == null) {
@@ -694,9 +709,11 @@
     }
 
     /**
-     * Returns the String that <code>key</code> will be registered with
+     * Returns the String that <code>key</code> will be registered with.
      * @see #getStaticAttribute
      * @see #registerStaticAttributeKey
+     * @param key the object key
+     * @return the String that {@code key} will be registered with
      */
     public static Object getStaticAttributeKey(Object key) {
         return key.getClass().getName() + "." + key.toString();
@@ -772,11 +789,19 @@
      */
     public class SmallAttributeSet implements AttributeSet {
 
+        /**
+         * Constructs a SmallAttributeSet.
+         * @param attributes the attributes
+         */
         public SmallAttributeSet(Object[] attributes) {
             this.attributes = attributes;
             updateResolveParent();
         }
 
+        /**
+         * Constructs a SmallAttributeSet.
+         * @param attrs the attributes
+         */
         public SmallAttributeSet(AttributeSet attrs) {
             int n = attrs.getAttributeCount();
             Object[] tbl = new Object[2 * n];
@@ -818,7 +843,8 @@
         // --- Object methods -------------------------
 
         /**
-         * Returns a string showing the key/value pairs
+         * Returns a string showing the key/value pairs.
+         * @return a string showing the key/value pairs
          */
         public String toString() {
             String s = "{";
@@ -1382,7 +1408,8 @@
         /**
          * Return an array of all the listeners of the given type that
          * were added to this model.
-         *
+         * @param <T> the listener type
+         * @param listenerType the type of listeners requested
          * @return all of the objects receiving <em>listenerType</em> notifications
          *          from this model
          *
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/StyledEditorKit.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/StyledEditorKit.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -288,6 +288,8 @@
      * are in <code>set</code>.<p>
      * This is called anytime the caret moves over a different location.
      *
+     * @param element the element
+     * @param set the attributes
      */
     protected void createInputAttributes(Element element,
                                          MutableAttributeSet set) {
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/TabSet.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/TabSet.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -58,6 +58,7 @@
     /**
      * Creates and returns an instance of TabSet. The array of Tabs
      * passed in must be sorted in ascending order.
+     * @param tabs the TabStops to initialize the TabSet
      */
     public TabSet(TabStop[] tabs) {
         // PENDING(sky): If this becomes a problem, make it sort.
@@ -73,6 +74,7 @@
 
     /**
      * Returns the number of Tab instances the receiver contains.
+     * @return the number of Tab instances the receiver contains
      */
     public int getTabCount() {
         return (tabs == null) ? 0 : tabs.length;
@@ -82,6 +84,8 @@
      * Returns the TabStop at index <code>index</code>. This will throw an
      * IllegalArgumentException if <code>index</code> is outside the range
      * of tabs.
+     * @param index which TapStop to return
+     * @return the TabStop at index {@code index}
      */
     public TabStop getTab(int index) {
         int          numTabs = getTabCount();
@@ -95,6 +99,8 @@
     /**
      * Returns the Tab instance after <code>location</code>. This will
      * return null if there are no tabs after <code>location</code>.
+     * @param location location to find a Tab after
+     * @return the Tab instance after {@code location}
      */
     public TabStop getTabAfter(float location) {
         int     index = getTabIndexAfter(location);
@@ -103,6 +109,9 @@
     }
 
     /**
+     * Returns the index of the TabStop <code>tab</code>, or -1 if
+     * <code>tab</code> is not contained in the receiver.
+     * @param tab the TabStop to find
      * @return the index of the TabStop <code>tab</code>, or -1 if
      * <code>tab</code> is not contained in the receiver.
      */
@@ -117,6 +126,8 @@
     /**
      * Returns the index of the Tab to be used after <code>location</code>.
      * This will return -1 if there are no tabs after <code>location</code>.
+     * @param location location to find a Tab after
+     * @return the index of the Tab to be used after <code>location</code>
      */
     public int getTabIndexAfter(float location) {
         int     current, min, max;
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/TabStop.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/TabStop.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -59,6 +59,7 @@
      * RIGHT_TAB, just includes decimal as additional character to look for.
      */
     public static final int ALIGN_DECIMAL = 4;
+    /** Align bar */
     public static final int ALIGN_BAR     = 5;
 
     /* Bar tabs (whatever they are) are actually a separate kind of tab
@@ -66,11 +67,17 @@
        properties are mutually exclusive, so the reader treats barness
        as being a kind of alignment. */
 
+    /** Lead none */
     public static final int LEAD_NONE      = 0;
+    /** Lead dots */
     public static final int LEAD_DOTS      = 1;
+    /** Lead hyphens */
     public static final int LEAD_HYPHENS   = 2;
+    /** Lead underline */
     public static final int LEAD_UNDERLINE = 3;
+    /** Lead thickline */
     public static final int LEAD_THICKLINE = 4;
+    /** Lead equals */
     public static final int LEAD_EQUALS    = 5;
 
     /** Tab type. */
@@ -82,6 +89,7 @@
     /**
      * Creates a tab at position <code>pos</code> with a default alignment
      * and default leader.
+     * @param pos position of the tab
      */
     public TabStop(float pos) {
         this(pos, ALIGN_LEFT, LEAD_NONE);
@@ -90,6 +98,9 @@
     /**
      * Creates a tab with the specified position <code>pos</code>,
      * alignment <code>align</code> and leader <code>leader</code>.
+     * @param pos position of the tab
+     * @param align alignment of the tab
+     * @param leader leader of the tab
      */
     public TabStop(float pos, int align, int leader) {
         alignment = align;
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/Utilities.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/Utilities.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -311,6 +311,23 @@
                                    justificationData);
     }
 
+    /**
+     * Determines the relative offset into the given text that
+     * best represents the given span in the view coordinate
+     * system.
+     *
+     * @param s  the source of the text
+     * @param metrics the font metrics to use for the calculation
+     * @param x0 the starting view location representing the start
+     *   of the given text &gt;= 0.
+     * @param x  the target view location to translate to an
+     *   offset into the text &gt;= 0.
+     * @param e  how to expand the tabs.  If this value is null,
+     *   tabs will be expanded as a space character.
+     * @param startOffset starting offset of the text in the document &gt;= 0
+     * @param round whether or not to round
+     * @return  the offset into the text &gt;= 0
+     */
     public static final int getTabbedTextOffset(Segment s,
                                                 FontMetrics metrics,
                                                 int x0, int x, TabExpander e,
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/View.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/View.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -381,6 +381,7 @@
     /**
      * Removes one of the children at the given position.
      * This is a convenience call to <code>replace</code>.
+     * @param i the position
      * @since 1.3
      */
     public void remove(int i) {
@@ -444,6 +445,7 @@
      * position.
      *
      * @param pos the position &gt;= 0
+     * @param b the bias
      * @return  index of the view representing the given position, or
      *   -1 if no view represents that position
      * @since 1.3
@@ -480,6 +482,7 @@
      * the {@code BadLocationException} will be thrown.
      *
      * @param pos the position to convert
+     * @param b the bias
      * @param a the allocated region in which to render
      * @param direction the direction from the current position that can
      *  be thought of as the arrow keys typically found on a keyboard.
@@ -490,6 +493,7 @@
      * <li>SwingConstants.NORTH
      * <li>SwingConstants.SOUTH
      * </ul>
+     * @param biasRet the returned bias
      * @return the location within the model that best represents the next
      *  location visual position
      * @exception BadLocationException the given position is not a valid
@@ -662,6 +666,7 @@
      * @param x the X coordinate &gt;= 0
      * @param y the Y coordinate &gt;= 0
      * @param a the allocated region in which to render
+     * @param biasReturn the returned bias
      * @return the location within the model that best represents the
      *  given point in the view &gt;= 0.  The <code>biasReturn</code>
      *  argument will be
@@ -864,6 +869,7 @@
      * for the purpose of rendering or layout, and should always
      * access them through the <code>AttributeSet</code> returned
      * by this method.
+     * @return the attributes to use when rendering
      */
     public AttributeSet getAttributes() {
         return elem.getAttributes();
@@ -1026,6 +1032,10 @@
      * Returns the tooltip text at the specified location. The default
      * implementation returns the value from the child View identified by
      * the passed in location.
+     * @param x the x coordinate
+     * @param y the y coordinate
+     * @param allocation current allocation of the View.
+     * @return the tooltip text at the specified location
      *
      * @since 1.4
      * @see JTextComponent#getToolTipText
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/WrappedPlainView.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/WrappedPlainView.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -228,6 +228,9 @@
      * It will either break at word or character boundaries
      * depending upon the break argument given at
      * construction.
+     * @param p0 the starting document location
+     * @param p1 the ending document location to use
+     * @return the break position
      */
     protected int calculateBreakPosition(int p0, int p1) {
         int p;
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/ZoneView.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/ZoneView.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -94,6 +94,7 @@
 
     /**
      * Get the current maximum zone size.
+     * @return the current maximum zone size
      */
     public int getMaximumZoneSize() {
         return maxZoneSize;
@@ -117,6 +118,8 @@
     /**
      * Get the current setting of the number of zones
      * allowed to be loaded at the same time.
+     * @return current setting of the number of zones
+     * allowed to be loaded at the same time
      */
     public int getMaxZonesLoaded() {
         return maxZonesLoaded;
@@ -184,6 +187,9 @@
      * child elements of the element this view is responsible for.
      * Therefore, the default implementation is to return
      * true if the view has children.
+     * param zone the child view
+     * @param zone the zone
+     * @return whether or not the zone is in the loaded state.
      */
     protected boolean isZoneLoaded(View zone) {
         return (zone.getViewCount() > 0);
@@ -203,6 +209,8 @@
      * @param p1 the end of the desired zone.  This should
      *  be &gt; getStartOffset() and &lt;= getEndOffset().  This
      *  value should also be &gt; p0.
+     * @return a view to represent a zone for the given range within
+     * the model
      */
     protected View createZone(int p0, int p1) {
         Document doc = getDocument();
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/html/FrameSetView.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/html/FrameSetView.java	Wed Jul 05 20:33:35 2017 +0200
@@ -126,7 +126,7 @@
                 if (children[i].length() > 1) {
                     relativeChildren[i] =
                         Integer.parseInt(children[i].substring(
-                            0, children[i].length()-1));
+                            0, children[i].length()-1).trim());
                     relativeTotals += relativeChildren[i];
                 } else {
                     relativeChildren[i] = 1;
@@ -136,7 +136,11 @@
                 percentChildren[i] = parseDigits(children[i]);
                 percentTotals += percentChildren[i];
             } else {
-                absoluteChildren[i] = Integer.parseInt(children[i]);
+                String value = children[i].toLowerCase();
+                if (value.endsWith("px")) {
+                    value = value.substring(0, value.length()-2).trim();
+                }
+                absoluteChildren[i] = Integer.parseInt(value);
             }
         }
         if (percentTotals > 100) {
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/html/parser/ContentModel.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/html/parser/ContentModel.java	Wed Jul 05 20:33:35 2017 +0200
@@ -192,10 +192,9 @@
           case '|':
           case '&': {
             Element e = (Element) token;
-            if (valSet == null) {
+            if (valSet == null || valSet.length <= Element.getMaxIndex()) {
                 valSet = new boolean[Element.getMaxIndex() + 1];
                 val = new boolean[valSet.length];
-                // All Element instances are created before this ever executes
             }
             if (valSet[e.index]) {
                 return val[e.index];
--- a/jdk/src/java.desktop/share/classes/sun/awt/AWTAccessor.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/sun/awt/AWTAccessor.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -29,8 +29,10 @@
 
 import javax.accessibility.AccessibleContext;
 import java.awt.*;
-import java.awt.KeyboardFocusManager;
-import java.awt.DefaultKeyboardFocusManager;
+import java.awt.dnd.DragSourceContext;
+import java.awt.dnd.DropTargetContext;
+import java.awt.dnd.peer.DragSourceContextPeer;
+import java.awt.dnd.peer.DropTargetContextPeer;
 import java.awt.event.InputEvent;
 import java.awt.event.InvocationEvent;
 import java.awt.event.KeyEvent;
@@ -38,6 +40,7 @@
 import java.awt.image.BufferStrategy;
 import java.awt.peer.ComponentPeer;
 
+import java.awt.peer.MenuComponentPeer;
 import java.lang.reflect.InvocationTargetException;
 import java.security.AccessControlContext;
 
@@ -171,7 +174,7 @@
         /**
          * Returns the peer of the component.
          */
-        ComponentPeer getPeer(Component comp);
+        <T extends ComponentPeer> T getPeer(Component comp);
 
         /**
          * Sets the peer of the component to the specified peer.
@@ -481,6 +484,11 @@
         void setAppContext(MenuComponent menuComp, AppContext appContext);
 
         /**
+         * Returns the peer of the menu component.
+         */
+        <T extends MenuComponentPeer> T getPeer(MenuComponent menuComp);
+
+        /**
          * Returns the menu container of the menu component.
          */
         MenuContainer getParent(MenuComponent menuComp);
@@ -781,6 +789,31 @@
     }
 
     /*
+     * An accessor object for the DragSourceContext class
+     */
+    public interface DragSourceContextAccessor {
+        /**
+         * Returns the peer of the DragSourceContext.
+         */
+        DragSourceContextPeer getPeer(DragSourceContext dsc);
+    }
+
+    /*
+     * An accessor object for the DropTargetContext class
+     */
+    public interface DropTargetContextAccessor {
+        /**
+         * Resets the DropTargetContext.
+         */
+        void reset(DropTargetContext dtc);
+        /**
+         * Sets the {@code DropTargetContextPeer}
+         */
+        void setDropTargetContextPeer(DropTargetContext dtc,
+                                      DropTargetContextPeer dtcp);
+    }
+
+    /*
      * Accessor instances are initialized in the static initializers of
      * corresponding AWT classes by using setters defined below.
      */
@@ -811,6 +844,8 @@
     private static InvocationEventAccessor invocationEventAccessor;
     private static SystemColorAccessor systemColorAccessor;
     private static AccessibleContextAccessor accessibleContextAccessor;
+    private static DragSourceContextAccessor dragSourceContextAccessor;
+    private static DropTargetContextAccessor dropTargetContextAccessor;
 
     /*
      * Set an accessor object for the java.awt.Component class.
@@ -1271,4 +1306,39 @@
     public static void setAccessibleContextAccessor(AccessibleContextAccessor accessor) {
         AWTAccessor.accessibleContextAccessor = accessor;
     }
+
+    /*
+     * Get the accessor object for the java.awt.dnd.DragSourceContext class.
+     */
+    public static DragSourceContextAccessor getDragSourceContextAccessor() {
+        if (dragSourceContextAccessor == null) {
+            unsafe.ensureClassInitialized(DragSourceContext.class);
+        }
+        return dragSourceContextAccessor;
+    }
+
+    /*
+     * Set the accessor object for the java.awt.dnd.DragSourceContext class.
+     */
+    public static void setDragSourceContextAccessor(DragSourceContextAccessor accessor) {
+        AWTAccessor.dragSourceContextAccessor = accessor;
+    }
+
+    /*
+     * Get the accessor object for the java.awt.dnd.DropTargetContext class.
+     */
+    public static DropTargetContextAccessor getDropTargetContextAccessor() {
+        if (dropTargetContextAccessor == null) {
+            unsafe.ensureClassInitialized(DropTargetContext.class);
+        }
+        return dropTargetContextAccessor;
+    }
+
+    /*
+     * Set the accessor object for the java.awt.dnd.DropTargetContext class.
+     */
+    public static void setDropTargetContextAccessor(DropTargetContextAccessor accessor) {
+        AWTAccessor.dropTargetContextAccessor = accessor;
+    }
+
 }
--- a/jdk/src/java.desktop/share/classes/sun/awt/AWTAutoShutdown.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/sun/awt/AWTAutoShutdown.java	Wed Jul 05 20:33:35 2017 +0200
@@ -26,7 +26,6 @@
 package sun.awt;
 
 import java.awt.AWTEvent;
-
 import java.security.AccessController;
 import java.security.PrivilegedAction;
 import java.util.HashSet;
@@ -34,9 +33,9 @@
 import java.util.Map;
 import java.util.Set;
 
+import sun.awt.util.ThreadGroupUtils;
 import sun.misc.InnocuousThread;
 import sun.util.logging.PlatformLogger;
-import sun.awt.util.ThreadGroupUtils;
 
 /**
  * This class is to let AWT shutdown automatically when a user is done
@@ -218,10 +217,7 @@
         synchronized (activationLock) {
             synchronized (mainLock) {
                 if (!isReadyToShutdown() && blockerThread == null) {
-                    AccessController.doPrivileged((PrivilegedAction<Void>) () -> {
-                        activateBlockerThread();
-                        return null;
-                    });
+                    activateBlockerThread();
                 } else {
                     mainLock.notifyAll();
                     timeoutPassed = false;
@@ -337,21 +333,22 @@
     /**
      * Creates and starts a new blocker thread. Doesn't return until
      * the new blocker thread starts.
-     *
-     * Must be called with {@link sun.security.util.SecurityConstants#MODIFY_THREADGROUP_PERMISSION}
      */
     private void activateBlockerThread() {
-        Thread thread;
-        String name =  "AWT-Shutdown";
-        if (System.getSecurityManager() == null) {
-            thread = new Thread(ThreadGroupUtils.getRootThreadGroup(), this, name);
-        } else {
-            thread = new InnocuousThread(this, name);
-        }
-        thread.setContextClassLoader(null);
-        thread.setDaemon(false);
-        blockerThread = thread;
-        thread.start();
+        AccessController.doPrivileged((PrivilegedAction<Thread>) () -> {
+            Thread thread;
+            String name = "AWT-Shutdown";
+            if (System.getSecurityManager() == null) {
+                thread = new Thread(ThreadGroupUtils.getRootThreadGroup(), this,
+                                    name);
+            } else {
+                thread = new InnocuousThread(this, name);
+            }
+            thread.setContextClassLoader(null);
+            thread.setDaemon(false);
+            blockerThread = thread;
+            return thread;
+        }).start();
         try {
             /* Wait for the blocker thread to start. */
             mainLock.wait();
--- a/jdk/src/java.desktop/share/classes/sun/awt/AppContext.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/sun/awt/AppContext.java	Wed Jul 05 20:33:35 2017 +0200
@@ -569,7 +569,7 @@
     static final class PostShutdownEventRunnable implements Runnable {
         private final AppContext appContext;
 
-        public PostShutdownEventRunnable(AppContext ac) {
+        PostShutdownEventRunnable(AppContext ac) {
             appContext = ac;
         }
 
@@ -585,7 +585,7 @@
         private final AppContext appContext;
         private final Runnable runnable;
 
-        public CreateThreadAction(AppContext ac, Runnable r) {
+        CreateThreadAction(AppContext ac, Runnable r) {
             appContext = ac;
             runnable = r;
         }
@@ -597,7 +597,7 @@
             } else {
                 t = new InnocuousThread(appContext.getThreadGroup(), runnable, "AppContext Disposer");
             }
-            t.setContextClassLoader(appContext.getContextClassLoader());
+            t.setContextClassLoader(null);
             t.setPriority(Thread.NORM_PRIORITY + 1);
             t.setDaemon(true);
             return t;
--- a/jdk/src/java.desktop/share/classes/sun/awt/ComponentFactory.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/sun/awt/ComponentFactory.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,76 +25,421 @@
 
 package sun.awt;
 
-import sun.awt.datatransfer.DataTransferer;
-
 import java.awt.*;
-import java.awt.dnd.*;
+import java.awt.dnd.DragGestureEvent;
+import java.awt.dnd.InvalidDnDOperationException;
 import java.awt.dnd.peer.DragSourceContextPeer;
 import java.awt.peer.*;
 
+import sun.awt.datatransfer.DataTransferer;
+
+final class LightweightPeerHolder {
+    static final LightweightPeer lightweightMarker = new NullComponentPeer();
+
+    private LightweightPeerHolder() {
+    }
+}
+
 /**
- * Interface for component creation support in toolkits
+ * Interface for component creation support in toolkits.
  */
 public interface ComponentFactory {
 
-    CanvasPeer createCanvas(Canvas target) throws HeadlessException;
+    /**
+     * Creates a peer for a component or container. This peer is windowless and
+     * allows the Component and Container classes to be extended directly to
+     * create windowless components that are defined entirely in java.
+     *
+     * @param  target The Component to be created
+     * @return the peer for the specified component
+     */
+    default LightweightPeer createComponent(Component target) {
+        return LightweightPeerHolder.lightweightMarker;
+    }
 
-    PanelPeer createPanel(Panel target) throws HeadlessException;
+    /**
+     * Creates this toolkit's implementation of the {@code Desktop} using the
+     * specified peer interface.
+     *
+     * @param  target the desktop to be implemented
+     * @return this toolkit's implementation of the {@code Desktop}
+     * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+     *         true
+     * @see java.awt.GraphicsEnvironment#isHeadless
+     * @see java.awt.Desktop
+     * @see java.awt.peer.DesktopPeer
+     * @since 1.6
+     */
+    default DesktopPeer createDesktopPeer(Desktop target) {
+        throw new HeadlessException();
+    }
 
-    WindowPeer createWindow(Window target) throws HeadlessException;
+    /**
+     * Creates this toolkit's implementation of {@code Button} using the
+     * specified peer interface.
+     *
+     * @param  target the button to be implemented
+     * @return this toolkit's implementation of {@code Button}
+     * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+     *         true
+     * @see java.awt.GraphicsEnvironment#isHeadless
+     * @see java.awt.Button
+     * @see java.awt.peer.ButtonPeer
+     */
+    default ButtonPeer createButton(Button target) {
+        throw new HeadlessException();
+    }
 
-    FramePeer createFrame(Frame target) throws HeadlessException;
-
-    DialogPeer createDialog(Dialog target) throws HeadlessException;
+    /**
+     * Creates this toolkit's implementation of {@code TextField} using the
+     * specified peer interface.
+     *
+     * @param  target the text field to be implemented
+     * @return this toolkit's implementation of {@code TextField}
+     * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+     *         true
+     * @see java.awt.GraphicsEnvironment#isHeadless
+     * @see java.awt.TextField
+     * @see java.awt.peer.TextFieldPeer
+     */
+    default TextFieldPeer createTextField(TextField target) {
+        throw new HeadlessException();
+    }
 
-    ButtonPeer createButton(Button target) throws HeadlessException;
+    /**
+     * Creates this toolkit's implementation of {@code Label} using the
+     * specified peer interface.
+     *
+     * @param  target the label to be implemented
+     * @return this toolkit's implementation of {@code Label}
+     * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+     *         true
+     * @see java.awt.GraphicsEnvironment#isHeadless
+     * @see java.awt.Label
+     * @see java.awt.peer.LabelPeer
+     */
+    default LabelPeer createLabel(Label target) {
+        throw new HeadlessException();
+    }
 
-    TextFieldPeer createTextField(TextField target)
-        throws HeadlessException;
+    /**
+     * Creates this toolkit's implementation of {@code List} using the specified
+     * peer interface.
+     *
+     * @param  target the list to be implemented
+     * @return this toolkit's implementation of {@code List}
+     * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+     *         true
+     * @see java.awt.GraphicsEnvironment#isHeadless
+     * @see java.awt.List
+     * @see java.awt.peer.ListPeer
+     */
+    default ListPeer createList(java.awt.List target) {
+        throw new HeadlessException();
+    }
 
-    ChoicePeer createChoice(Choice target) throws HeadlessException;
+    /**
+     * Creates this toolkit's implementation of {@code Checkbox} using the
+     * specified peer interface.
+     *
+     * @param  target the check box to be implemented
+     * @return this toolkit's implementation of {@code Checkbox}
+     * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+     *         true
+     * @see java.awt.GraphicsEnvironment#isHeadless
+     * @see java.awt.Checkbox
+     * @see java.awt.peer.CheckboxPeer
+     */
+    default CheckboxPeer createCheckbox(Checkbox target) {
+        throw new HeadlessException();
+    }
 
-    LabelPeer createLabel(Label target) throws HeadlessException;
-
-    ListPeer createList(List target) throws HeadlessException;
+    /**
+     * Creates this toolkit's implementation of {@code Scrollbar} using the
+     * specified peer interface.
+     *
+     * @param  target the scroll bar to be implemented
+     * @return this toolkit's implementation of {@code Scrollbar}
+     * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+     *         true
+     * @see java.awt.GraphicsEnvironment#isHeadless
+     * @see java.awt.Scrollbar
+     * @see java.awt.peer.ScrollbarPeer
+     */
+    default ScrollbarPeer createScrollbar(Scrollbar target) {
+        throw new HeadlessException();
+    }
 
-    CheckboxPeer createCheckbox(Checkbox target)
-        throws HeadlessException;
+    /**
+     * Creates this toolkit's implementation of {@code ScrollPane} using the
+     * specified peer interface.
+     *
+     * @param  target the scroll pane to be implemented
+     * @return this toolkit's implementation of {@code ScrollPane}
+     * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+     *         true
+     * @see java.awt.GraphicsEnvironment#isHeadless
+     * @see java.awt.ScrollPane
+     * @see java.awt.peer.ScrollPanePeer
+     * @since 1.1
+     */
+    default ScrollPanePeer createScrollPane(ScrollPane target) {
+        throw new HeadlessException();
+    }
 
-    ScrollbarPeer createScrollbar(Scrollbar target)
-        throws HeadlessException;
+    /**
+     * Creates this toolkit's implementation of {@code TextArea} using the
+     * specified peer interface.
+     *
+     * @param  target the text area to be implemented
+     * @return this toolkit's implementation of {@code TextArea}
+     * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+     *         true
+     * @see java.awt.GraphicsEnvironment#isHeadless
+     * @see java.awt.TextArea
+     * @see java.awt.peer.TextAreaPeer
+     */
+    default TextAreaPeer createTextArea(TextArea target) {
+        throw new HeadlessException();
+    }
 
-    ScrollPanePeer createScrollPane(ScrollPane target)
-        throws HeadlessException;
+    /**
+     * Creates this toolkit's implementation of {@code Choice} using the
+     * specified peer interface.
+     *
+     * @param  target the choice to be implemented
+     * @return this toolkit's implementation of {@code Choice}
+     * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+     *         true
+     * @see java.awt.GraphicsEnvironment#isHeadless
+     * @see java.awt.Choice
+     * @see java.awt.peer.ChoicePeer
+     */
+    default ChoicePeer createChoice(Choice target) {
+        throw new HeadlessException();
+    }
+
+    /**
+     * Creates this toolkit's implementation of {@code Frame} using the
+     * specified peer interface.
+     *
+     * @param  target the frame to be implemented
+     * @return this toolkit's implementation of {@code Frame}
+     * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+     *         true
+     * @see java.awt.GraphicsEnvironment#isHeadless
+     * @see java.awt.Frame
+     * @see java.awt.peer.FramePeer
+     */
+    default FramePeer createFrame(Frame target) {
+        throw new HeadlessException();
+    }
 
-    TextAreaPeer createTextArea(TextArea target)
-        throws HeadlessException;
+    /**
+     * Creates this toolkit's implementation of {@code Canvas} using the
+     * specified peer interface.
+     *
+     * @param  target the canvas to be implemented
+     * @return this toolkit's implementation of {@code Canvas}
+     * @see java.awt.Canvas
+     * @see java.awt.peer.CanvasPeer
+     */
+    default CanvasPeer createCanvas(Canvas target) {
+        return (CanvasPeer) createComponent(target);
+    }
 
-    FileDialogPeer createFileDialog(FileDialog target)
-        throws HeadlessException;
+    /**
+     * Creates this toolkit's implementation of {@code Panel} using the
+     * specified peer interface.
+     *
+     * @param  target the panel to be implemented
+     * @return this toolkit's implementation of {@code Panel}
+     * @see java.awt.Panel
+     * @see java.awt.peer.PanelPeer
+     */
+    default PanelPeer createPanel(Panel target) {
+        return (PanelPeer) createComponent(target);
+    }
 
-    MenuBarPeer createMenuBar(MenuBar target) throws HeadlessException;
+    /**
+     * Creates this toolkit's implementation of {@code Window} using the
+     * specified peer interface.
+     *
+     * @param  target the window to be implemented
+     * @return this toolkit's implementation of {@code Window}
+     * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+     *         true
+     * @see java.awt.GraphicsEnvironment#isHeadless
+     * @see java.awt.Window
+     * @see java.awt.peer.WindowPeer
+     */
+    default WindowPeer createWindow(Window target) {
+        throw new HeadlessException();
+    }
 
-    MenuPeer createMenu(Menu target) throws HeadlessException;
+    /**
+     * Creates this toolkit's implementation of {@code Dialog} using the
+     * specified peer interface.
+     *
+     * @param  target the dialog to be implemented
+     * @return this toolkit's implementation of {@code Dialog}
+     * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+     *         true
+     * @see java.awt.GraphicsEnvironment#isHeadless
+     * @see java.awt.Dialog
+     * @see java.awt.peer.DialogPeer
+     */
+    default DialogPeer createDialog(Dialog target) {
+        throw new HeadlessException();
+    }
 
-    PopupMenuPeer createPopupMenu(PopupMenu target)
-        throws HeadlessException;
+    /**
+     * Creates this toolkit's implementation of {@code MenuBar} using the
+     * specified peer interface.
+     *
+     * @param  target the menu bar to be implemented
+     * @return this toolkit's implementation of {@code MenuBar}
+     * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+     *         true
+     * @see java.awt.GraphicsEnvironment#isHeadless
+     * @see java.awt.MenuBar
+     * @see java.awt.peer.MenuBarPeer
+     */
+    default MenuBarPeer createMenuBar(MenuBar target) {
+        throw new HeadlessException();
+    }
 
-    MenuItemPeer createMenuItem(MenuItem target)
-        throws HeadlessException;
+    /**
+     * Creates this toolkit's implementation of {@code Menu} using the specified
+     * peer interface.
+     *
+     * @param  target the menu to be implemented
+     * @return this toolkit's implementation of {@code Menu}
+     * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+     *         true
+     * @see java.awt.GraphicsEnvironment#isHeadless
+     * @see java.awt.Menu
+     * @see java.awt.peer.MenuPeer
+     */
+    default MenuPeer createMenu(Menu target) {
+        throw new HeadlessException();
+    }
 
-    CheckboxMenuItemPeer createCheckboxMenuItem(CheckboxMenuItem target)
-        throws HeadlessException;
+    /**
+     * Creates this toolkit's implementation of {@code PopupMenu} using the
+     * specified peer interface.
+     *
+     * @param  target the popup menu to be implemented
+     * @return this toolkit's implementation of {@code PopupMenu}
+     * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+     *         true
+     * @see java.awt.GraphicsEnvironment#isHeadless
+     * @see java.awt.PopupMenu
+     * @see java.awt.peer.PopupMenuPeer
+     * @since 1.1
+     */
+    default PopupMenuPeer createPopupMenu(PopupMenu target) {
+        throw new HeadlessException();
+    }
 
-    DragSourceContextPeer createDragSourceContextPeer(
-        DragGestureEvent dge)
-        throws InvalidDnDOperationException, HeadlessException;
+    /**
+     * Creates this toolkit's implementation of {@code MenuItem} using the
+     * specified peer interface.
+     *
+     * @param  target the menu item to be implemented
+     * @return this toolkit's implementation of {@code MenuItem}
+     * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+     *         true
+     * @see java.awt.GraphicsEnvironment#isHeadless
+     * @see java.awt.MenuItem
+     * @see java.awt.peer.MenuItemPeer
+     */
+    default MenuItemPeer createMenuItem(MenuItem target) {
+        throw new HeadlessException();
+    }
+
+    /**
+     * Creates this toolkit's implementation of {@code FileDialog} using the
+     * specified peer interface.
+     *
+     * @param  target the file dialog to be implemented
+     * @return this toolkit's implementation of {@code FileDialog}
+     * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+     *         true
+     * @see java.awt.GraphicsEnvironment#isHeadless
+     * @see java.awt.FileDialog
+     * @see java.awt.peer.FileDialogPeer
+     */
+    default FileDialogPeer createFileDialog(FileDialog target) {
+        throw new HeadlessException();
+    }
 
-    FontPeer getFontPeer(String name, int style);
+    /**
+     * Creates this toolkit's implementation of {@code CheckboxMenuItem} using
+     * the specified peer interface.
+     *
+     * @param  target the checkbox menu item to be implemented
+     * @return this toolkit's implementation of {@code CheckboxMenuItem}
+     * @throws HeadlessException if GraphicsEnvironment.isHeadless() returns
+     *         true
+     * @see java.awt.GraphicsEnvironment#isHeadless
+     * @see java.awt.CheckboxMenuItem
+     * @see java.awt.peer.CheckboxMenuItemPeer
+     */
+    default CheckboxMenuItemPeer createCheckboxMenuItem(CheckboxMenuItem target) {
+        throw new HeadlessException();
+    }
+
+    /**
+     * Creates the peer for a DragSourceContext. Always throws
+     * InvalidDndOperationException if GraphicsEnvironment.isHeadless() returns
+     * true.
+     *
+     * @param  dge the {@code DragGestureEvent}
+     * @return the peer created
+     * @see java.awt.GraphicsEnvironment#isHeadless
+     */
+    default DragSourceContextPeer createDragSourceContextPeer(DragGestureEvent dge) {
+        throw new InvalidDnDOperationException("Headless environment");
+    }
 
-    RobotPeer createRobot(Robot target, GraphicsDevice screen)
-        throws AWTException, HeadlessException;
+    /**
+     * Creates this toolkit's implementation of {@code Font} using the specified
+     * peer interface.
+     *
+     * @param name the font to be implemented
+     * @param style the style of the font, such as {@code PLAIN}, {@code BOLD},
+     *        {@code ITALIC}, or a combination
+     * @return this toolkit's implementation of {@code Font}
+     * @see java.awt.Font
+     * @see java.awt.peer.FontPeer
+     * @see java.awt.GraphicsEnvironment#getAllFonts
+     */
+    default FontPeer getFontPeer(String name, int style) {
+        return null;
+    }
 
-    DataTransferer getDataTransferer();
+    default RobotPeer createRobot(Robot target, GraphicsDevice screen)
+            throws AWTException {
+        throw new HeadlessException();
+    }
+
+    default DataTransferer getDataTransferer() {
+        return null;
+    }
 
+    /**
+     * Obtains this toolkit's implementation of helper class for {@code
+     * MouseInfo} operations.
+     *
+     * @return this toolkit's implementation of helper for {@code MouseInfo}
+     * @throws UnsupportedOperationException if this operation is not
+     *         implemented
+     * @see java.awt.peer.MouseInfoPeer
+     * @see java.awt.MouseInfo
+     * @since 1.5
+     */
+    default MouseInfoPeer getMouseInfoPeer() {
+        throw new UnsupportedOperationException("Not implemented");
+    }
 }
--- a/jdk/src/java.desktop/share/classes/sun/awt/EmbeddedFrame.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/sun/awt/EmbeddedFrame.java	Wed Jul 05 20:33:35 2017 +0200
@@ -27,14 +27,12 @@
 
 import java.awt.*;
 import java.awt.event.*;
-import java.awt.image.*;
 import java.awt.peer.*;
 import java.beans.PropertyChangeListener;
 import java.beans.PropertyChangeEvent;
 import java.util.Set;
 import java.awt.AWTKeyStroke;
 import java.applet.Applet;
-import sun.applet.AppletPanel;
 
 /**
  * A generic container used for embedding Java components, usually applets.
@@ -320,10 +318,9 @@
         return true;
     }
 
-    @SuppressWarnings("deprecation")
     public void addNotify() {
         synchronized (getTreeLock()) {
-            if (getPeer() == null) {
+            if (!isDisplayable()) {
                 setPeer(new NullEmbeddedFramePeer());
             }
             super.addNotify();
@@ -331,10 +328,10 @@
     }
 
     // These three functions consitute RFE 4100710. Do not remove.
-    @SuppressWarnings("deprecation")
     public void setCursorAllowed(boolean isCursorAllowed) {
         this.isCursorAllowed = isCursorAllowed;
-        getPeer().updateCursorImmediately();
+        final FramePeer peer = AWTAccessor.getComponentAccessor().getPeer(this);
+        peer.updateCursorImmediately();
     }
     public boolean isCursorAllowed() {
         return isCursorAllowed;
@@ -345,7 +342,6 @@
             : Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR);
     }
 
-    @SuppressWarnings("deprecation")
     protected void setPeer(final ComponentPeer p){
         AWTAccessor.getComponentAccessor().setPeer(EmbeddedFrame.this, p);
     };
@@ -458,9 +454,8 @@
      * @see #getBoundsPrivate
      * @since 1.5
      */
-    @SuppressWarnings("deprecation")
     protected void setBoundsPrivate(int x, int y, int width, int height) {
-        final FramePeer peer = (FramePeer)getPeer();
+        final FramePeer peer = AWTAccessor.getComponentAccessor().getPeer(this);
         if (peer != null) {
             peer.setBoundsPrivate(x, y, width, height);
         }
@@ -490,9 +485,8 @@
      * @see #setBoundsPrivate
      * @since 1.6
      */
-    @SuppressWarnings("deprecation")
     protected Rectangle getBoundsPrivate() {
-        final FramePeer peer = (FramePeer)getPeer();
+        final FramePeer peer = AWTAccessor.getComponentAccessor().getPeer(this);
         if (peer != null) {
             return peer.getBoundsPrivate();
         }
--- a/jdk/src/java.desktop/share/classes/sun/awt/FontDescriptor.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/sun/awt/FontDescriptor.java	Wed Jul 05 20:33:35 2017 +0200
@@ -24,10 +24,12 @@
  */
 package sun.awt;
 
+import java.io.ByteArrayInputStream;
+import java.io.InputStreamReader;
+import java.io.IOException;;
 import java.nio.charset.Charset;
 import java.nio.charset.CharsetEncoder;
 import java.nio.charset.StandardCharsets;
-import sun.nio.cs.HistoricallyNamedCharset;
 
 public class FontDescriptor implements Cloneable {
 
@@ -49,11 +51,15 @@
         this.exclusionRanges = exclusionRanges;
         this.useUnicode = false;
         Charset cs = encoder.charset();
-        if (cs instanceof HistoricallyNamedCharset)
-            this.charsetName = ((HistoricallyNamedCharset)cs).historicalName();
-        else
-            this.charsetName = cs.name();
-
+        // The following looks odd but its the only public way to get the
+        // historical name if one exists and the canonical name otherwise.
+        try {
+            ByteArrayInputStream bais = new ByteArrayInputStream(new byte[8]);
+            InputStreamReader isr = new InputStreamReader(bais, cs);
+            this.charsetName = isr.getEncoding();
+            isr.close();
+        } catch (IOException ioe) {
+        }
     }
 
     public String getNativeName() {
--- a/jdk/src/java.desktop/share/classes/sun/awt/HToolkit.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/sun/awt/HToolkit.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,16 +25,18 @@
 
 package sun.awt;
 
-import sun.awt.datatransfer.DataTransferer;
-
 import java.awt.*;
-import java.awt.dnd.*;
-import java.awt.dnd.peer.DragSourceContextPeer;
+import java.awt.datatransfer.Clipboard;
+import java.awt.dnd.DragGestureListener;
+import java.awt.dnd.DragGestureRecognizer;
+import java.awt.dnd.DragSource;
 import java.awt.im.InputMethodHighlight;
 import java.awt.im.spi.InputMethodDescriptor;
-import java.awt.image.*;
-import java.awt.datatransfer.Clipboard;
-import java.awt.peer.*;
+import java.awt.image.ColorModel;
+import java.awt.peer.FramePeer;
+import java.awt.peer.KeyboardFocusManagerPeer;
+import java.awt.peer.SystemTrayPeer;
+import java.awt.peer.TrayIconPeer;
 import java.util.Map;
 import java.util.Properties;
 
@@ -47,10 +49,15 @@
     implements ComponentFactory {
 
     private static final KeyboardFocusManagerPeer kfmPeer = new KeyboardFocusManagerPeer() {
+        @Override
         public void setCurrentFocusedWindow(Window win) {}
+        @Override
         public Window getCurrentFocusedWindow() { return null; }
+        @Override
         public void setCurrentFocusOwner(Component comp) {}
+        @Override
         public Component getCurrentFocusOwner() { return null; }
+        @Override
         public void clearGlobalFocusOwner(Window activeWindow) {}
     };
 
@@ -61,136 +68,35 @@
      * Component peer objects - unsupported.
      */
 
-    public WindowPeer createWindow(Window target)
-        throws HeadlessException {
-        throw new HeadlessException();
-    }
-
+    @Override
     public FramePeer createLightweightFrame(LightweightFrame target)
         throws HeadlessException {
         throw new HeadlessException();
     }
 
-    public FramePeer createFrame(Frame target)
-        throws HeadlessException {
-        throw new HeadlessException();
-    }
-
-    public DialogPeer createDialog(Dialog target)
-        throws HeadlessException {
-        throw new HeadlessException();
-    }
-
-    public ButtonPeer createButton(Button target)
-        throws HeadlessException {
-        throw new HeadlessException();
-    }
-
-    public TextFieldPeer createTextField(TextField target)
-        throws HeadlessException {
-        throw new HeadlessException();
-    }
-
-    public ChoicePeer createChoice(Choice target)
-        throws HeadlessException {
-        throw new HeadlessException();
-    }
-
-    public LabelPeer createLabel(Label target)
-        throws HeadlessException {
-        throw new HeadlessException();
-    }
-
-    public ListPeer createList(List target)
-        throws HeadlessException {
-        throw new HeadlessException();
-    }
-
-    public CheckboxPeer createCheckbox(Checkbox target)
-        throws HeadlessException {
-        throw new HeadlessException();
-    }
-
-    public ScrollbarPeer createScrollbar(Scrollbar target)
-        throws HeadlessException {
-        throw new HeadlessException();
-    }
-
-    public ScrollPanePeer createScrollPane(ScrollPane target)
-        throws HeadlessException {
-        throw new HeadlessException();
-    }
-
-    public TextAreaPeer createTextArea(TextArea target)
-        throws HeadlessException {
-        throw new HeadlessException();
-    }
-
-    public FileDialogPeer createFileDialog(FileDialog target)
-        throws HeadlessException {
-        throw new HeadlessException();
-    }
-
-    public MenuBarPeer createMenuBar(MenuBar target)
-        throws HeadlessException {
-        throw new HeadlessException();
-    }
-
-    public MenuPeer createMenu(Menu target)
-        throws HeadlessException {
-        throw new HeadlessException();
-    }
-
-    public PopupMenuPeer createPopupMenu(PopupMenu target)
-        throws HeadlessException {
-        throw new HeadlessException();
-    }
-
-    public MenuItemPeer createMenuItem(MenuItem target)
-        throws HeadlessException {
-        throw new HeadlessException();
-    }
-
-    public CheckboxMenuItemPeer createCheckboxMenuItem(CheckboxMenuItem target)
-        throws HeadlessException {
-        throw new HeadlessException();
-    }
-
-    public DragSourceContextPeer createDragSourceContextPeer(
-        DragGestureEvent dge)
-        throws InvalidDnDOperationException {
-        throw new InvalidDnDOperationException("Headless environment");
-    }
-
-    public RobotPeer createRobot(Robot target, GraphicsDevice screen)
-        throws AWTException, HeadlessException {
-        throw new HeadlessException();
-    }
-
+    @Override
     public KeyboardFocusManagerPeer getKeyboardFocusManagerPeer() {
         // See 6833019.
         return kfmPeer;
     }
 
+    @Override
     public TrayIconPeer createTrayIcon(TrayIcon target)
       throws HeadlessException {
         throw new HeadlessException();
     }
 
+    @Override
     public SystemTrayPeer createSystemTray(SystemTray target)
       throws HeadlessException {
         throw new HeadlessException();
     }
 
+    @Override
     public boolean isTraySupported() {
         return false;
     }
 
-    @Override
-    public DataTransferer getDataTransferer() {
-        return null;
-    }
-
     public GlobalCursorManager getGlobalCursorManager()
         throws HeadlessException {
         throw new HeadlessException();
@@ -199,57 +105,68 @@
     /*
      * Headless toolkit - unsupported.
      */
+    @Override
     protected void loadSystemColors(int[] systemColors)
         throws HeadlessException {
         throw new HeadlessException();
     }
 
+    @Override
     public ColorModel getColorModel()
         throws HeadlessException {
         throw new HeadlessException();
     }
 
+    @Override
     public int getScreenResolution()
         throws HeadlessException {
         throw new HeadlessException();
     }
 
+    @Override
     public Map<java.awt.font.TextAttribute, ?> mapInputMethodHighlight(
             InputMethodHighlight highlight)
         throws HeadlessException {
         throw new HeadlessException();
     }
 
+    @Override
     public int getMenuShortcutKeyMask()
         throws HeadlessException {
         throw new HeadlessException();
     }
 
+    @Override
     public boolean getLockingKeyState(int keyCode)
         throws UnsupportedOperationException {
         throw new HeadlessException();
     }
 
+    @Override
     public void setLockingKeyState(int keyCode, boolean on)
         throws UnsupportedOperationException {
         throw new HeadlessException();
     }
 
+    @Override
     public Cursor createCustomCursor(Image cursor, Point hotSpot, String name)
         throws IndexOutOfBoundsException, HeadlessException {
         throw new HeadlessException();
     }
 
+    @Override
     public Dimension getBestCursorSize(int preferredWidth, int preferredHeight)
         throws HeadlessException {
         throw new HeadlessException();
     }
 
+    @Override
     public int getMaximumCursorColors()
         throws HeadlessException {
         throw new HeadlessException();
     }
 
+    @Override
     public <T extends DragGestureRecognizer> T
         createDragGestureRecognizer(Class<T> abstractRecognizerClass,
                                     DragSource ds, Component c,
@@ -258,41 +175,49 @@
         return null;
     }
 
+    @Override
     public int getScreenHeight()
         throws HeadlessException {
         throw new HeadlessException();
     }
 
+    @Override
     public int getScreenWidth()
         throws HeadlessException {
         throw new HeadlessException();
     }
 
+    @Override
     public Dimension getScreenSize()
         throws HeadlessException {
         throw new HeadlessException();
     }
 
+    @Override
     public Insets getScreenInsets(GraphicsConfiguration gc)
         throws HeadlessException {
         throw new HeadlessException();
     }
 
+    @Override
     public void setDynamicLayout(boolean dynamic)
         throws HeadlessException {
         throw new HeadlessException();
     }
 
+    @Override
     protected boolean isDynamicLayoutSet()
         throws HeadlessException {
         throw new HeadlessException();
     }
 
+    @Override
     public boolean isDynamicLayoutActive()
         throws HeadlessException {
         throw new HeadlessException();
     }
 
+    @Override
     public Clipboard getSystemClipboard()
         throws HeadlessException {
         throw new HeadlessException();
@@ -301,6 +226,7 @@
     /*
      * Printing
      */
+    @Override
     public PrintJob getPrintJob(Frame frame, String jobtitle,
         JobAttributes jobAttributes,
         PageAttributes pageAttributes) {
@@ -312,6 +238,7 @@
                 "PrintJob not supported in a headless environment");
     }
 
+    @Override
     public PrintJob getPrintJob(Frame frame, String doctitle, Properties props)
     {
         if (frame != null) {
@@ -326,65 +253,63 @@
      * Headless toolkit - supported.
      */
 
+    @Override
     public void sync() {
         // Do nothing
     }
 
+    @Override
     protected boolean syncNativeQueue(final long timeout) {
         return false;
     }
 
+    @Override
     public void beep() {
         // Send alert character
         System.out.write(0x07);
     }
 
-
-    /*
-     * Fonts
-     */
-    public FontPeer getFontPeer(String name, int style) {
-        return (FontPeer)null;
-    }
-
     /*
      * Modality
      */
+    @Override
     public boolean isModalityTypeSupported(Dialog.ModalityType modalityType) {
         return false;
     }
 
+    @Override
     public boolean isModalExclusionTypeSupported(Dialog.ModalExclusionType exclusionType) {
         return false;
     }
 
+    @Override
     public boolean isDesktopSupported() {
         return false;
     }
 
-    public DesktopPeer createDesktopPeer(Desktop target)
-    throws HeadlessException{
-        throw new HeadlessException();
-    }
-
     public boolean isWindowOpacityControlSupported() {
         return false;
     }
 
+    @Override
     public boolean isWindowShapingSupported() {
         return false;
     }
 
+    @Override
     public boolean isWindowTranslucencySupported() {
         return false;
     }
 
+    @Override
     public  void grab(Window w) { }
 
+    @Override
     public void ungrab(Window w) { }
 
     protected boolean syncNativeQueue() { return false; }
 
+    @Override
     public InputMethodDescriptor getInputMethodAdapterDescriptor()
         throws AWTException
     {
--- a/jdk/src/java.desktop/share/classes/sun/awt/HeadlessToolkit.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/sun/awt/HeadlessToolkit.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,34 +25,43 @@
 
 package sun.awt;
 
-import sun.awt.datatransfer.DataTransferer;
-
 import java.awt.*;
-import java.awt.dnd.*;
-import java.awt.dnd.peer.DragSourceContextPeer;
-import java.awt.event.*;
+import java.awt.datatransfer.Clipboard;
+import java.awt.dnd.DragGestureListener;
+import java.awt.dnd.DragGestureRecognizer;
+import java.awt.dnd.DragSource;
+import java.awt.event.AWTEventListener;
 import java.awt.font.TextAttribute;
 import java.awt.im.InputMethodHighlight;
-import java.awt.image.*;
-import java.awt.datatransfer.Clipboard;
-import java.awt.peer.*;
+import java.awt.image.ColorModel;
+import java.awt.image.ImageObserver;
+import java.awt.image.ImageProducer;
+import java.awt.peer.FontPeer;
+import java.awt.peer.KeyboardFocusManagerPeer;
+import java.awt.peer.SystemTrayPeer;
+import java.awt.peer.TrayIconPeer;
 import java.beans.PropertyChangeListener;
 import java.net.URL;
 import java.util.Map;
 import java.util.Properties;
 
-public class HeadlessToolkit extends Toolkit
+public final class HeadlessToolkit extends Toolkit
     implements ComponentFactory, KeyboardFocusManagerPeerProvider {
 
     private static final KeyboardFocusManagerPeer kfmPeer = new KeyboardFocusManagerPeer() {
+        @Override
         public void setCurrentFocusedWindow(Window win) {}
+        @Override
         public Window getCurrentFocusedWindow() { return null; }
+        @Override
         public void setCurrentFocusOwner(Component comp) {}
+        @Override
         public Component getCurrentFocusOwner() { return null; }
+        @Override
         public void clearGlobalFocusOwner(Window activeWindow) {}
     };
 
-    private Toolkit tk;
+    private final Toolkit tk;
     private ComponentFactory componentFactory;
 
     public HeadlessToolkit(Toolkit tk) {
@@ -66,125 +75,7 @@
         return tk;
     }
 
-    /*
-     * Component peer objects.
-     */
-
-    /* Lightweight implementation of Canvas and Panel */
-
-    public CanvasPeer createCanvas(Canvas target) {
-        return (CanvasPeer)createComponent(target);
-    }
-
-    public PanelPeer createPanel(Panel target) {
-        return (PanelPeer)createComponent(target);
-    }
-
-    /*
-     * Component peer objects - unsupported.
-     */
-
-    public WindowPeer createWindow(Window target)
-        throws HeadlessException {
-        throw new HeadlessException();
-    }
-
-    public FramePeer createFrame(Frame target)
-        throws HeadlessException {
-        throw new HeadlessException();
-    }
-
-    public DialogPeer createDialog(Dialog target)
-        throws HeadlessException {
-        throw new HeadlessException();
-    }
-
-    public ButtonPeer createButton(Button target)
-        throws HeadlessException {
-        throw new HeadlessException();
-    }
-
-    public TextFieldPeer createTextField(TextField target)
-        throws HeadlessException {
-        throw new HeadlessException();
-    }
-
-    public ChoicePeer createChoice(Choice target)
-        throws HeadlessException {
-        throw new HeadlessException();
-    }
-
-    public LabelPeer createLabel(Label target)
-        throws HeadlessException {
-        throw new HeadlessException();
-    }
-
-    public ListPeer createList(List target)
-        throws HeadlessException {
-        throw new HeadlessException();
-    }
-
-    public CheckboxPeer createCheckbox(Checkbox target)
-        throws HeadlessException {
-        throw new HeadlessException();
-    }
-
-    public ScrollbarPeer createScrollbar(Scrollbar target)
-        throws HeadlessException {
-        throw new HeadlessException();
-    }
-
-    public ScrollPanePeer createScrollPane(ScrollPane target)
-        throws HeadlessException {
-        throw new HeadlessException();
-    }
-
-    public TextAreaPeer createTextArea(TextArea target)
-        throws HeadlessException {
-        throw new HeadlessException();
-    }
-
-    public FileDialogPeer createFileDialog(FileDialog target)
-        throws HeadlessException {
-        throw new HeadlessException();
-    }
-
-    public MenuBarPeer createMenuBar(MenuBar target)
-        throws HeadlessException {
-        throw new HeadlessException();
-    }
-
-    public MenuPeer createMenu(Menu target)
-        throws HeadlessException {
-        throw new HeadlessException();
-    }
-
-    public PopupMenuPeer createPopupMenu(PopupMenu target)
-        throws HeadlessException {
-        throw new HeadlessException();
-    }
-
-    public MenuItemPeer createMenuItem(MenuItem target)
-        throws HeadlessException {
-        throw new HeadlessException();
-    }
-
-    public CheckboxMenuItemPeer createCheckboxMenuItem(CheckboxMenuItem target)
-        throws HeadlessException {
-        throw new HeadlessException();
-    }
-
-    public DragSourceContextPeer createDragSourceContextPeer(
-        DragGestureEvent dge)
-        throws InvalidDnDOperationException {
-        throw new InvalidDnDOperationException("Headless environment");
-    }
-
-    public RobotPeer createRobot(Robot target, GraphicsDevice screen)
-        throws AWTException, HeadlessException {
-        throw new HeadlessException();
-    }
-
+    @Override
     public KeyboardFocusManagerPeer getKeyboardFocusManagerPeer() {
         // See 6833019.
         return kfmPeer;
@@ -212,56 +103,67 @@
     /*
      * Headless toolkit - unsupported.
      */
+    @Override
     protected void loadSystemColors(int[] systemColors)
         throws HeadlessException {
         throw new HeadlessException();
     }
 
+    @Override
     public ColorModel getColorModel()
         throws HeadlessException {
         throw new HeadlessException();
     }
 
+    @Override
     public int getScreenResolution()
         throws HeadlessException {
         throw new HeadlessException();
     }
 
+    @Override
     public Map<TextAttribute, ?> mapInputMethodHighlight(InputMethodHighlight highlight)
         throws HeadlessException {
         throw new HeadlessException();
     }
 
+    @Override
     public int getMenuShortcutKeyMask()
         throws HeadlessException {
         throw new HeadlessException();
     }
 
+    @Override
     public boolean getLockingKeyState(int keyCode)
         throws UnsupportedOperationException {
         throw new HeadlessException();
     }
 
+    @Override
     public void setLockingKeyState(int keyCode, boolean on)
         throws UnsupportedOperationException {
         throw new HeadlessException();
     }
 
+    @Override
     public Cursor createCustomCursor(Image cursor, Point hotSpot, String name)
         throws IndexOutOfBoundsException, HeadlessException {
         throw new HeadlessException();
     }
 
+    @Override
     public Dimension getBestCursorSize(int preferredWidth, int preferredHeight)
         throws HeadlessException {
         throw new HeadlessException();
     }
 
+    @Override
     public int getMaximumCursorColors()
         throws HeadlessException {
         throw new HeadlessException();
     }
 
+    @Override
     public <T extends DragGestureRecognizer> T
         createDragGestureRecognizer(Class<T> abstractRecognizerClass,
                                     DragSource ds, Component c,
@@ -280,31 +182,37 @@
         throw new HeadlessException();
     }
 
+    @Override
     public Dimension getScreenSize()
         throws HeadlessException {
         throw new HeadlessException();
     }
 
+    @Override
     public Insets getScreenInsets(GraphicsConfiguration gc)
         throws HeadlessException {
         throw new HeadlessException();
     }
 
+    @Override
     public void setDynamicLayout(boolean dynamic)
         throws HeadlessException {
         throw new HeadlessException();
     }
 
+    @Override
     protected boolean isDynamicLayoutSet()
         throws HeadlessException {
         throw new HeadlessException();
     }
 
+    @Override
     public boolean isDynamicLayoutActive()
         throws HeadlessException {
         throw new HeadlessException();
     }
 
+    @Override
     public Clipboard getSystemClipboard()
         throws HeadlessException {
         throw new HeadlessException();
@@ -313,6 +221,7 @@
     /*
      * Printing
      */
+    @Override
     public PrintJob getPrintJob(Frame frame, String jobtitle,
         JobAttributes jobAttributes,
         PageAttributes pageAttributes) {
@@ -323,6 +232,7 @@
         throw new NullPointerException("frame must not be null");
     }
 
+    @Override
     public PrintJob getPrintJob(Frame frame, String doctitle, Properties props)
     {
         if (frame != null) {
@@ -336,10 +246,12 @@
      * Headless toolkit - supported.
      */
 
+    @Override
     public void sync() {
         // Do nothing
     }
 
+    @Override
     public void beep() {
         // Send alert character
         System.out.write(0x07);
@@ -348,6 +260,7 @@
     /*
      * Event Queue
      */
+    @Override
     public EventQueue getSystemEventQueueImpl() {
         return SunToolkit.getSystemEventQueueImplPP();
     }
@@ -355,39 +268,48 @@
     /*
      * Images.
      */
+    @Override
     public int checkImage(Image img, int w, int h, ImageObserver o) {
         return tk.checkImage(img, w, h, o);
     }
 
+    @Override
     public boolean prepareImage(
         Image img, int w, int h, ImageObserver o) {
         return tk.prepareImage(img, w, h, o);
     }
 
+    @Override
     public Image getImage(String filename) {
         return tk.getImage(filename);
     }
 
+    @Override
     public Image getImage(URL url) {
         return tk.getImage(url);
     }
 
+    @Override
     public Image createImage(String filename) {
         return tk.createImage(filename);
     }
 
+    @Override
     public Image createImage(URL url) {
         return tk.createImage(url);
     }
 
+    @Override
     public Image createImage(byte[] data, int offset, int length) {
         return tk.createImage(data, offset, length);
     }
 
+    @Override
     public Image createImage(ImageProducer producer) {
         return tk.createImage(producer);
     }
 
+    @Override
     public Image createImage(byte[] imagedata) {
         return tk.createImage(imagedata);
     }
@@ -396,7 +318,7 @@
     /*
      * Fonts
      */
-    @SuppressWarnings("deprecation")
+    @Override
     public FontPeer getFontPeer(String name, int style) {
         if (componentFactory != null) {
             return componentFactory.getFontPeer(name, style);
@@ -405,15 +327,12 @@
     }
 
     @Override
-    public DataTransferer getDataTransferer() {
-        return null;
-    }
-
     @SuppressWarnings("deprecation")
     public FontMetrics getFontMetrics(Font font) {
         return tk.getFontMetrics(font);
     }
 
+    @Override
     @SuppressWarnings("deprecation")
     public String[] getFontList() {
         return tk.getFontList();
@@ -423,11 +342,13 @@
      * Desktop properties
      */
 
+    @Override
     public void addPropertyChangeListener(String name,
         PropertyChangeListener pcl) {
         tk.addPropertyChangeListener(name, pcl);
     }
 
+    @Override
     public void removePropertyChangeListener(String name,
         PropertyChangeListener pcl) {
         tk.removePropertyChangeListener(name, pcl);
@@ -436,10 +357,12 @@
     /*
      * Modality
      */
+    @Override
     public boolean isModalityTypeSupported(Dialog.ModalityType modalityType) {
         return false;
     }
 
+    @Override
     public boolean isModalExclusionTypeSupported(Dialog.ModalExclusionType exclusionType) {
         return false;
     }
@@ -447,6 +370,7 @@
     /*
      * Always on top
      */
+    @Override
     public boolean isAlwaysOnTopSupported() {
         return false;
     }
@@ -455,19 +379,23 @@
      * AWT Event listeners
      */
 
+    @Override
     public void addAWTEventListener(AWTEventListener listener,
         long eventMask) {
         tk.addAWTEventListener(listener, eventMask);
     }
 
+    @Override
     public void removeAWTEventListener(AWTEventListener listener) {
         tk.removeAWTEventListener(listener);
     }
 
+    @Override
     public AWTEventListener[] getAWTEventListeners() {
         return tk.getAWTEventListeners();
     }
 
+    @Override
     public AWTEventListener[] getAWTEventListeners(long eventMask) {
         return tk.getAWTEventListeners(eventMask);
     }
@@ -476,11 +404,7 @@
         return false;
     }
 
-    public DesktopPeer createDesktopPeer(Desktop target)
-    throws HeadlessException{
-        throw new HeadlessException();
-    }
-
+    @Override
     public boolean areExtraMouseButtonsEnabled() throws HeadlessException{
         throw new HeadlessException();
     }
--- a/jdk/src/java.desktop/share/classes/sun/awt/KeyboardFocusManagerPeerImpl.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/sun/awt/KeyboardFocusManagerPeerImpl.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,7 +25,6 @@
 package sun.awt;
 
 import java.awt.Component;
-import java.awt.KeyboardFocusManager;
 import java.awt.Window;
 import java.awt.Canvas;
 import java.awt.Scrollbar;
@@ -36,9 +35,7 @@
 import java.awt.peer.KeyboardFocusManagerPeer;
 import java.awt.peer.ComponentPeer;
 
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-
+import sun.awt.AWTAccessor.ComponentAccessor;
 import sun.util.logging.PlatformLogger;
 
 public abstract class KeyboardFocusManagerPeerImpl implements KeyboardFocusManagerPeer {
@@ -75,7 +72,6 @@
      * 1) accepts focus on click (in general)
      * 2) may be a focus owner (in particular)
      */
-    @SuppressWarnings("deprecation")
     public static boolean shouldFocusOnClick(Component component) {
         boolean acceptFocusOnClick = false;
 
@@ -84,6 +80,7 @@
 
 
         // CANVAS & SCROLLBAR accept focus on click
+        final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
         if (component instanceof Canvas ||
             component instanceof Scrollbar)
         {
@@ -96,11 +93,10 @@
 
         // Other components
         } else {
-            ComponentPeer peer = (component != null ? component.getPeer() : null);
+            ComponentPeer peer = (component != null ? acc.getPeer(component) : null);
             acceptFocusOnClick = (peer != null ? peer.isFocusable() : false);
         }
-        return acceptFocusOnClick &&
-               AWTAccessor.getComponentAccessor().canBeFocusOwner(component);
+        return acceptFocusOnClick && acc.canBeFocusOwner(component);
     }
 
     /*
@@ -120,7 +116,7 @@
         }
 
         Component currentOwner = currentFocusOwner;
-        if (currentOwner != null && currentOwner.getPeer() == null) {
+        if (currentOwner != null && !currentOwner.isDisplayable()) {
             currentOwner = null;
         }
         if (currentOwner != null) {
--- a/jdk/src/java.desktop/share/classes/sun/awt/LightweightFrame.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/sun/awt/LightweightFrame.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -91,7 +91,7 @@
     @SuppressWarnings("deprecation")
     @Override public void addNotify() {
         synchronized (getTreeLock()) {
-            if (getPeer() == null) {
+            if (!isDisplayable()) {
                 SunToolkit stk = (SunToolkit)Toolkit.getDefaultToolkit();
                 try {
                     setPeer(stk.createLightweightFrame(this));
@@ -115,9 +115,9 @@
      * @param activate if <code>true</code>, activates the frame;
      *                 otherwise, deactivates the frame
      */
-    @SuppressWarnings("deprecation")
     public void emulateActivation(boolean activate) {
-        ((FramePeer)getPeer()).emulateActivation(activate);
+        final FramePeer peer = AWTAccessor.getComponentAccessor().getPeer(this);
+        peer.emulateActivation(activate);
     }
 
     /**
--- a/jdk/src/java.desktop/share/classes/sun/awt/SunGraphicsCallback.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/sun/awt/SunGraphicsCallback.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -47,11 +47,10 @@
         g.clipRect(0, 0, bounds.width, bounds.height);
     }
 
-    @SuppressWarnings("deprecation")
     public final void runOneComponent(Component comp, Rectangle bounds,
                                       Graphics g, Shape clip,
                                       int weightFlags) {
-        if (comp == null || comp.getPeer() == null || !comp.isVisible()) {
+        if (comp == null || !comp.isDisplayable() || !comp.isVisible()) {
             return;
         }
         boolean lightweight = comp.isLightweight();
--- a/jdk/src/java.desktop/share/classes/sun/awt/SunToolkit.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/sun/awt/SunToolkit.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -26,37 +26,51 @@
 package sun.awt;
 
 import java.awt.*;
-import static java.awt.RenderingHints.*;
-import java.awt.dnd.*;
-import java.awt.dnd.peer.DragSourceContextPeer;
-import java.awt.peer.*;
+import java.awt.event.InputEvent;
+import java.awt.event.KeyEvent;
 import java.awt.event.WindowEvent;
-import java.awt.event.KeyEvent;
-import java.awt.image.*;
-import java.awt.TrayIcon;
-import java.awt.SystemTray;
-import java.awt.event.InputEvent;
+import java.awt.image.BufferedImage;
+import java.awt.image.DataBuffer;
+import java.awt.image.DataBufferInt;
+import java.awt.image.ImageObserver;
+import java.awt.image.ImageProducer;
+import java.awt.image.Raster;
+import java.awt.peer.FramePeer;
+import java.awt.peer.KeyboardFocusManagerPeer;
+import java.awt.peer.MouseInfoPeer;
+import java.awt.peer.SystemTrayPeer;
+import java.awt.peer.TrayIconPeer;
 import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
+import java.lang.reflect.InvocationTargetException;
 import java.net.URL;
-import java.security.PrivilegedAction;
-import java.util.*;
+import java.security.AccessController;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Vector;
+import java.util.WeakHashMap;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.locks.Condition;
-import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReentrantLock;
 
-import sun.awt.datatransfer.DataTransferer;
-import sun.util.logging.PlatformLogger;
-import sun.misc.SoftCache;
+import sun.awt.im.InputContext;
+import sun.awt.image.ByteArrayImageSource;
+import sun.awt.image.FileImageSource;
+import sun.awt.image.ImageRepresentation;
+import sun.awt.image.MultiResolutionImage;
+import sun.awt.image.MultiResolutionToolkitImage;
+import sun.awt.image.ToolkitImage;
+import sun.awt.image.URLImageSource;
 import sun.font.FontDesignMetrics;
-import sun.awt.im.InputContext;
-import sun.awt.image.*;
+import sun.misc.SoftCache;
+import sun.security.action.GetBooleanAction;
 import sun.security.action.GetPropertyAction;
-import sun.security.action.GetBooleanAction;
-import java.lang.reflect.InvocationTargetException;
-import java.security.AccessController;
+import sun.util.logging.PlatformLogger;
+
+import static java.awt.RenderingHints.*;
 
 public abstract class SunToolkit extends Toolkit
     implements ComponentFactory, InputMethodSupport, KeyboardFocusManagerPeerProvider {
@@ -134,68 +148,9 @@
         return false;
     }
 
-    public abstract WindowPeer createWindow(Window target)
-        throws HeadlessException;
-
-    public abstract FramePeer createFrame(Frame target)
-        throws HeadlessException;
-
     public abstract FramePeer createLightweightFrame(LightweightFrame target)
         throws HeadlessException;
 
-    public abstract DialogPeer createDialog(Dialog target)
-        throws HeadlessException;
-
-    public abstract ButtonPeer createButton(Button target)
-        throws HeadlessException;
-
-    public abstract TextFieldPeer createTextField(TextField target)
-        throws HeadlessException;
-
-    public abstract ChoicePeer createChoice(Choice target)
-        throws HeadlessException;
-
-    public abstract LabelPeer createLabel(Label target)
-        throws HeadlessException;
-
-    public abstract ListPeer createList(java.awt.List target)
-        throws HeadlessException;
-
-    public abstract CheckboxPeer createCheckbox(Checkbox target)
-        throws HeadlessException;
-
-    public abstract ScrollbarPeer createScrollbar(Scrollbar target)
-        throws HeadlessException;
-
-    public abstract ScrollPanePeer createScrollPane(ScrollPane target)
-        throws HeadlessException;
-
-    public abstract TextAreaPeer createTextArea(TextArea target)
-        throws HeadlessException;
-
-    public abstract FileDialogPeer createFileDialog(FileDialog target)
-        throws HeadlessException;
-
-    public abstract MenuBarPeer createMenuBar(MenuBar target)
-        throws HeadlessException;
-
-    public abstract MenuPeer createMenu(Menu target)
-        throws HeadlessException;
-
-    public abstract PopupMenuPeer createPopupMenu(PopupMenu target)
-        throws HeadlessException;
-
-    public abstract MenuItemPeer createMenuItem(MenuItem target)
-        throws HeadlessException;
-
-    public abstract CheckboxMenuItemPeer createCheckboxMenuItem(
-        CheckboxMenuItem target)
-        throws HeadlessException;
-
-    public abstract DragSourceContextPeer createDragSourceContextPeer(
-        DragGestureEvent dge)
-        throws InvalidDnDOperationException;
-
     public abstract TrayIconPeer createTrayIcon(TrayIcon target)
         throws HeadlessException, AWTException;
 
@@ -203,12 +158,7 @@
 
     public abstract boolean isTraySupported();
 
-    @SuppressWarnings("deprecation")
-    public abstract FontPeer getFontPeer(String name, int style);
-
-    public abstract RobotPeer createRobot(Robot target, GraphicsDevice screen)
-        throws AWTException;
-
+    @Override
     public abstract KeyboardFocusManagerPeer getKeyboardFocusManagerPeer()
         throws HeadlessException;
 
@@ -511,6 +461,7 @@
      */
     public static void postPriorityEvent(final AWTEvent e) {
         PeerEvent pe = new PeerEvent(Toolkit.getDefaultToolkit(), new Runnable() {
+                @Override
                 public void run() {
                     AWTAccessor.getAWTEventAccessor().setPosted(e);
                     ((Component)e.getSource()).dispatchEvent(e);
@@ -561,6 +512,7 @@
                                                    final long when) {
         executeOnEventHandlerThread(
             new PeerEvent(target, runnable, PeerEvent.PRIORITY_EVENT) {
+                @Override
                 public long getWhen() {
                     return when;
                 }
@@ -636,17 +588,20 @@
         return accessor.isDispatchThreadImpl(eq);
     }
 
+    @Override
     public Dimension getScreenSize() {
         return new Dimension(getScreenWidth(), getScreenHeight());
     }
     protected abstract int getScreenWidth();
     protected abstract int getScreenHeight();
 
+    @Override
     @SuppressWarnings("deprecation")
     public FontMetrics getFontMetrics(Font font) {
         return FontDesignMetrics.getMetrics(font);
     }
 
+    @Override
     @SuppressWarnings("deprecation")
     public String[] getFontList() {
         String[] hardwiredFontList = {
@@ -660,14 +615,6 @@
         return hardwiredFontList;
     }
 
-    public PanelPeer createPanel(Panel target) {
-        return (PanelPeer)createComponent(target);
-    }
-
-    public CanvasPeer createCanvas(Canvas target) {
-        return (CanvasPeer)createComponent(target);
-    }
-
     /**
      * Disables erasing of background on the canvas before painting if
      * this is supported by the current toolkit. It is recommended to
@@ -747,10 +694,12 @@
         }
     }
 
+    @Override
     public Image getImage(String filename) {
         return getImageFromHash(this, filename);
     }
 
+    @Override
     public Image getImage(URL url) {
         return getImageFromHash(this, url);
     }
@@ -784,20 +733,24 @@
     }
 
 
+    @Override
     public Image createImage(String filename) {
         checkPermissions(filename);
         return createImage(new FileImageSource(filename));
     }
 
+    @Override
     public Image createImage(URL url) {
         checkPermissions(url);
         return createImage(new URLImageSource(url));
     }
 
+    @Override
     public Image createImage(byte[] data, int offset, int length) {
         return createImage(new ByteArrayImageSource(data, offset, length));
     }
 
+    @Override
     public Image createImage(ImageProducer producer) {
         return new ToolkitImage(producer);
     }
@@ -807,6 +760,7 @@
         return new MultiResolutionToolkitImage(image, resolutionVariant);
     }
 
+    @Override
     public int checkImage(Image img, int w, int h, ImageObserver o) {
         if (!(img instanceof ToolkitImage)) {
             return ImageObserver.ALLBITS;
@@ -822,6 +776,7 @@
         return (tkimg.check(o) | repbits) & checkResolutionVariant(img, w, h, o);
     }
 
+    @Override
     public boolean prepareImage(Image img, int w, int h, ImageObserver o) {
         if (w == 0 || h == 0) {
             return true;
@@ -888,14 +843,17 @@
     }
 
     protected static boolean imageExists(String filename) {
-        checkPermissions(filename);
-        return filename != null && new File(filename).exists();
+        if (filename != null) {
+            checkPermissions(filename);
+            return new File(filename).exists();
+        }
+        return false;
     }
 
     @SuppressWarnings("try")
     protected static boolean imageExists(URL url) {
-        checkPermissions(url);
         if (url != null) {
+            checkPermissions(url);
             try (InputStream is = url.openStream()) {
                 return true;
             }catch(IOException e){
@@ -1063,6 +1021,7 @@
         return (DataBufferInt)buffer;
     }
 
+    @Override
     protected EventQueue getSystemEventQueueImpl() {
         return getSystemEventQueueImplPP();
     }
@@ -1144,6 +1103,7 @@
      * SunToolkit subclasses can override this method to return better input
      * method windows.
      */
+    @Override
     public Window createInputMethodWindow(String title, InputContext context) {
         return new sun.awt.im.SimpleInputMethodWindow(title, context);
     }
@@ -1152,6 +1112,7 @@
      * Returns whether enableInputMethods should be set to true for peered
      * TextComponent instances on this platform. False by default.
      */
+    @Override
     public boolean enableInputMethodsForTextComponent() {
         return false;
     }
@@ -1193,13 +1154,15 @@
     /**
      * Returns the default keyboard locale of the underlying operating system
      */
+    @Override
     public Locale getDefaultKeyboardLocale() {
         return getStartupLocale();
     }
 
     private static DefaultMouseInfoPeer mPeer = null;
 
-    protected synchronized MouseInfoPeer getMouseInfoPeer() {
+    @Override
+    public synchronized MouseInfoPeer getMouseInfoPeer() {
         if (mPeer == null) {
             mPeer = new DefaultMouseInfoPeer();
         }
@@ -1331,6 +1294,7 @@
     /**
      * Overridden in XToolkit and WToolkit
      */
+    @Override
     public boolean isModalityTypeSupported(Dialog.ModalityType modalityType) {
         return (modalityType == Dialog.ModalityType.MODELESS) ||
                (modalityType == Dialog.ModalityType.APPLICATION_MODAL);
@@ -1339,6 +1303,7 @@
     /**
      * Overridden in XToolkit and WToolkit
      */
+    @Override
     public boolean isModalExclusionTypeSupported(Dialog.ModalExclusionType exclusionType) {
         return (exclusionType == Dialog.ModalExclusionType.NO_EXCLUDE);
     }
@@ -1386,6 +1351,7 @@
             listeners.removeElement(listener);
         }
 
+        @Override
         public void modalityPushed(ModalityEvent ev) {
             Iterator<ModalityListener> it = listeners.iterator();
             while (it.hasNext()) {
@@ -1393,6 +1359,7 @@
             }
         }
 
+        @Override
         public void modalityPopped(ModalityEvent ev) {
             Iterator<ModalityListener> it = listeners.iterator();
             while (it.hasNext()) {
@@ -1592,6 +1559,7 @@
         synchronized(waitLock) {
             postEvent(AppContext.getAppContext(),
                       new PeerEvent(getSystemEventQueueImpl(), null, PeerEvent.LOW_PRIORITY_EVENT) {
+                          @Override
                           public void dispatch() {
                               // Here we block EDT.  It could have some
                               // events, it should have dispatched them by
--- a/jdk/src/java.desktop/share/classes/sun/awt/datatransfer/SunClipboard.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/sun/awt/datatransfer/SunClipboard.java	Wed Jul 05 20:33:35 2017 +0200
@@ -414,7 +414,7 @@
      * @param formats data formats that have just been retrieved from
      *        this clipboard
      */
-    public final void checkChange(final long[] formats) {
+    protected final void checkChange(final long[] formats) {
         if (Arrays.equals(formats, currentFormats)) {
             // we've been able to successfully get available on the clipboard
             // DataFlavors this and previous time and they are coincident;
--- a/jdk/src/java.desktop/share/classes/sun/awt/dnd/SunDropTargetContextPeer.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/sun/awt/dnd/SunDropTargetContextPeer.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -48,6 +48,8 @@
 import java.util.Map;
 import java.util.Arrays;
 
+import sun.awt.AWTAccessor;
+import sun.awt.AWTAccessor.DropTargetContextAccessor;
 import sun.util.logging.PlatformLogger;
 
 import java.io.IOException;
@@ -313,9 +315,10 @@
         Point      hots = event.getPoint();
 
         local = getJVMLocalSourceTransferable();
-
+        DropTargetContextAccessor acc =
+                AWTAccessor.getDropTargetContextAccessor();
         if (currentDTC != null) { // some wreckage from last time
-            currentDTC.removeNotify();
+            acc.reset(currentDTC);
             currentDTC = null;
         }
 
@@ -323,7 +326,7 @@
             currentDT  = dt;
             currentDTC = currentDT.getDropTargetContext();
 
-            currentDTC.addNotify(this);
+            acc.setDropTargetContextPeer(currentDTC, this);
 
             currentA   = dt.getDefaultActions();
 
@@ -370,13 +373,15 @@
         Component         c   = (Component)event.getSource();
         DropTarget        dt  = c.getDropTarget();
         DropTargetContext dtc = null;
+        DropTargetContextAccessor acc =
+                AWTAccessor.getDropTargetContextAccessor();
 
         if (dt == null) {
             currentDT = null;
             currentT  = null;
 
             if (currentDTC != null) {
-                currentDTC.removeNotify();
+                acc.reset(currentDTC);
             }
 
             currentDTC = null;
@@ -387,13 +392,13 @@
         if (dt != currentDT) {
 
             if (currentDTC != null) {
-                currentDTC.removeNotify();
+                acc.reset(currentDTC);
             }
 
             currentDT  = dt;
             currentDTC = dt.getDropTargetContext();
 
-            currentDTC.addNotify(this);
+            acc.setDropTargetContextPeer(currentDTC, this);
         }
 
         dtc = currentDTC;
@@ -409,7 +414,7 @@
             currentDT = null;
             currentT  = null;
 
-            currentDTC.removeNotify();
+            acc.reset(currentDTC);
             currentDTC = null;
 
             local = null;
@@ -440,11 +445,13 @@
         int               id   = event.getID();
         DropTarget        dt   = c.getDropTarget();
         DropTargetContext dtc  = null;
+        DropTargetContextAccessor acc =
+                AWTAccessor.getDropTargetContextAccessor();
 
         if (c.isShowing() && (dt != null) && dt.isActive()) {
             if (currentDT != dt) {
                 if (currentDTC != null) {
-                    currentDTC.removeNotify();
+                    acc.reset(currentDTC);
                 }
 
                 currentDT  = dt;
@@ -454,11 +461,11 @@
             dtc = currentDT.getDropTargetContext();
             if (dtc != currentDTC) {
                 if (currentDTC != null) {
-                    currentDTC.removeNotify();
+                    acc.reset(currentDTC);
                 }
 
                 currentDTC = dtc;
-                currentDTC.addNotify(this);
+                acc.setDropTargetContextPeer(currentDTC, this);
             }
 
             currentA = currentDT.getDefaultActions();
@@ -518,13 +525,15 @@
             DropTargetContext dtc = dt.getDropTargetContext();
 
             currentDT = dt;
+            DropTargetContextAccessor acc =
+                    AWTAccessor.getDropTargetContextAccessor();
 
             if (currentDTC != null) {
-                currentDTC.removeNotify();
+                acc.reset(currentDTC);
             }
 
             currentDTC = dtc;
-            currentDTC.addNotify(this);
+            acc.setDropTargetContextPeer(currentDTC, this);
             currentA = dt.getDefaultActions();
 
             synchronized(_globalLock) {
@@ -687,7 +696,9 @@
             throw new InvalidDnDOperationException("No Drop pending");
         }
 
-        if (currentDTC != null) currentDTC.removeNotify();
+        if (currentDTC != null) {
+            AWTAccessor.getDropTargetContextAccessor().reset(currentDTC);
+        }
 
         currentDT  = null;
         currentDTC = null;
--- a/jdk/src/java.desktop/share/classes/sun/font/FontAccess.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/sun/font/FontAccess.java	Wed Jul 05 20:33:35 2017 +0200
@@ -26,6 +26,7 @@
 package sun.font;
 
 import java.awt.Font;
+import java.awt.peer.FontPeer;
 
 public abstract class FontAccess {
 
@@ -45,4 +46,5 @@
     public abstract void setFont2D(Font f, Font2DHandle h);
     public abstract void setCreatedFont(Font f);
     public abstract boolean isCreatedFont(Font f);
+    public abstract FontPeer getFontPeer(Font f);
 }
--- a/jdk/src/java.desktop/share/classes/sun/font/FontFamily.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/sun/font/FontFamily.java	Wed Jul 05 20:33:35 2017 +0200
@@ -223,9 +223,15 @@
     public void setFont(Font2D font, int style) {
 
         if (FontUtilities.isLogging()) {
-            FontUtilities.getLogger().info(
-            "Request to add " + font + " with style " + style +
-            " to family " + this);
+            String msg;
+            if (font instanceof CompositeFont) {
+                msg = "Request to add " + font.getFamilyName(null) +
+                      " with style " + style + " to family " + familyName;
+            } else {
+                msg = "Request to add " + font +
+                      " with style " + style + " to family " + this;
+            }
+            FontUtilities.getLogger().info(msg);
         }
         /* Allow a lower-rank font only if its a file font
          * from the exact same source as any previous font.
--- a/jdk/src/java.desktop/share/classes/sun/font/FontUtilities.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/sun/font/FontUtilities.java	Wed Jul 05 20:33:35 2017 +0200
@@ -378,12 +378,8 @@
      * Suggested usage is something like :
      * FontUIResource fuir;
      * Font desktopFont = getDesktopFont(..);
-     * // NOTE even if fontSupportsDefaultEncoding returns true because
-     * // you get Tahoma and are running in an English locale, you may
-     * // still want to just call getCompositeFontUIResource() anyway
-     * // as only then will you get fallback fonts - eg for CJK.
      * if (FontManager.fontSupportsDefaultEncoding(desktopFont)) {
-     *   fuir = new FontUIResource(..);
+     *   fuir = new FontUIResource(desktopFont);
      * } else {
      *   fuir = FontManager.getCompositeFontUIResource(desktopFont);
      * }
--- a/jdk/src/java.desktop/share/classes/sun/font/SunFontManager.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/sun/font/SunFontManager.java	Wed Jul 05 20:33:35 2017 +0200
@@ -568,36 +568,6 @@
         }
     }
 
-    /**
-     * This method is provided for internal and exclusive use by Swing.
-     *
-     * @param font representing a physical font.
-     * @return true if the underlying font is a TrueType or OpenType font
-     * that claims to support the Microsoft Windows encoding corresponding to
-     * the default file.encoding property of this JRE instance.
-     * This narrow value is useful for Swing to decide if the font is useful
-     * for the Windows Look and Feel, or, if a composite font should be
-     * used instead.
-     * The information used to make the decision is obtained from
-     * the ulCodePageRange fields in the font.
-     * A caller can use isLogicalFont(Font) in this class before calling
-     * this method and would not need to call this method if that
-     * returns true.
-     */
-//     static boolean fontSupportsDefaultEncoding(Font font) {
-//      String encoding =
-//          (String) java.security.AccessController.doPrivileged(
-//                new sun.security.action.GetPropertyAction("file.encoding"));
-
-//      if (encoding == null || font == null) {
-//          return false;
-//      }
-
-//      encoding = encoding.toLowerCase(Locale.ENGLISH);
-
-//      return FontManager.fontSupportsEncoding(font, encoding);
-//     }
-
     public Font2DHandle getNewComposite(String family, int style,
                                         Font2DHandle handle) {
 
--- a/jdk/src/java.desktop/share/classes/sun/java2d/SunGraphics2D.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/sun/java2d/SunGraphics2D.java	Wed Jul 05 20:33:35 2017 +0200
@@ -244,7 +244,6 @@
     public Shape usrClip;
     protected Region devClip;           // Actual physical drawable in pixels
 
-    private final int devScale;         // Actual physical scale factor
     private int resolutionVariantHint;
 
     // cached state for text rendering
@@ -268,8 +267,6 @@
         surfaceData = sd;
         foregroundColor = fg;
         backgroundColor = bg;
-
-        transform = new AffineTransform();
         stroke = defaultStroke;
         composite = defaultComposite;
         paint = foregroundColor;
@@ -287,14 +284,13 @@
 
         interpolationType = AffineTransformOp.TYPE_NEAREST_NEIGHBOR;
 
-        validateColor();
-
-        devScale = sd.getDefaultScale();
-        if (devScale != 1) {
-            transform.setToScale(devScale, devScale);
+        transform = getDefaultTransform();
+        if (!transform.isIdentity()) {
             invalidateTransform();
         }
 
+        validateColor();
+
         font = f;
         if (font == null) {
             font = defaultFont;
@@ -304,6 +300,11 @@
         invalidatePipe();
     }
 
+    private AffineTransform getDefaultTransform() {
+        GraphicsConfiguration gc = getDeviceConfiguration();
+        return (gc == null) ? new AffineTransform() : gc.getDefaultTransform();
+    }
+
     protected Object clone() {
         try {
             SunGraphics2D g = (SunGraphics2D) super.clone();
@@ -1610,11 +1611,10 @@
      */
     @Override
     public void setTransform(AffineTransform Tx) {
-        if ((constrainX | constrainY) == 0 && devScale == 1) {
+        if ((constrainX | constrainY) == 0) {
             transform.setTransform(Tx);
         } else {
-            transform.setTransform(devScale, 0, 0, devScale, constrainX,
-                                   constrainY);
+            transform.setToTranslation(constrainX, constrainY);
             transform.concatenate(Tx);
         }
         invalidateTransform();
@@ -1674,13 +1674,11 @@
      */
     @Override
     public AffineTransform getTransform() {
-        if ((constrainX | constrainY) == 0 && devScale == 1) {
+        if ((constrainX | constrainY) == 0) {
             return new AffineTransform(transform);
         }
-        final double invScale = 1.0 / devScale;
-        AffineTransform tx = new AffineTransform(invScale, 0, 0, invScale,
-                                                 -constrainX * invScale,
-                                                 -constrainY * invScale);
+        AffineTransform tx
+                = AffineTransform.getTranslateInstance(-constrainX, -constrainY);
         tx.concatenate(transform);
         return tx;
     }
--- a/jdk/src/java.desktop/share/classes/sun/java2d/pisces/Dasher.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/sun/java2d/pisces/Dasher.java	Wed Jul 05 20:33:35 2017 +0200
@@ -146,7 +146,7 @@
         if (dashOn) {
             if (starting) {
                 firstSegmentsBuffer = Helpers.widenArray(firstSegmentsBuffer,
-                                      firstSegidx, type - 2);
+                                      firstSegidx, type - 2 + 1);
                 firstSegmentsBuffer[firstSegidx++] = type;
                 System.arraycopy(pts, off, firstSegmentsBuffer, firstSegidx, type - 2);
                 firstSegidx += type - 2;
--- a/jdk/src/java.desktop/share/classes/sun/print/PSPrinterJob.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/sun/print/PSPrinterJob.java	Wed Jul 05 20:33:35 2017 +0200
@@ -46,6 +46,7 @@
 
 import java.awt.image.BufferedImage;
 
+import java.awt.peer.FontPeer;
 import java.awt.print.Pageable;
 import java.awt.print.PageFormat;
 import java.awt.print.Paper;
@@ -93,6 +94,7 @@
 import sun.awt.FontDescriptor;
 import sun.awt.PlatformFont;
 import sun.awt.SunToolkit;
+import sun.font.FontAccess;
 import sun.font.FontManagerFactory;
 import sun.font.FontUtilities;
 
@@ -1214,13 +1216,13 @@
      * of distinct PS fonts needed to draw this text. This saves us
      * doing this processing one extra time.
      */
-    @SuppressWarnings("deprecation")
     protected int platformFontCount(Font font, String str) {
         if (mFontProps == null) {
             return 0;
         }
-        CharsetString[] acs =
-            ((PlatformFont)(font.getPeer())).makeMultiCharsetString(str,false);
+        PlatformFont peer = (PlatformFont) FontAccess.getFontAccess()
+                                                     .getFontPeer(font);
+        CharsetString[] acs = peer.makeMultiCharsetString(str, false);
         if (acs == null) {
             /* AWT can't convert all chars so use 2D path */
             return 0;
@@ -1229,7 +1231,6 @@
         return (psFonts == null) ? 0 : psFonts.length;
     }
 
-    @SuppressWarnings("deprecation")
      protected boolean textOut(Graphics g, String str, float x, float y,
                                Font mLastFont, FontRenderContext frc,
                                float width) {
@@ -1254,9 +1255,9 @@
             if (str.length() == 0) {
                 return true;
             }
-            CharsetString[] acs =
-                ((PlatformFont)
-                 (mLastFont.getPeer())).makeMultiCharsetString(str, false);
+            PlatformFont peer = (PlatformFont) FontAccess.getFontAccess()
+                                                         .getFontPeer(mLastFont);
+            CharsetString[] acs = peer.makeMultiCharsetString(str, false);
             if (acs == null) {
                 /* AWT can't convert all chars so use 2D path */
                 return false;
--- a/jdk/src/java.desktop/share/classes/sun/print/RasterPrinterJob.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/sun/print/RasterPrinterJob.java	Wed Jul 05 20:33:35 2017 +0200
@@ -559,18 +559,8 @@
         }
 
         Media media = (Media)attSet.get(Media.class);
-        if (media == null) {
-            media =
-                (Media)service.getDefaultAttributeValue(Media.class);
-        }
-        if (!(media instanceof MediaSizeName)) {
-            media = MediaSizeName.NA_LETTER;
-        }
-        MediaSize size =
-            MediaSize.getMediaSizeForName((MediaSizeName)media);
-        if (size == null) {
-            size = MediaSize.NA.LETTER;
-        }
+        MediaSize size = getMediaSize(media, service, page);
+
         Paper paper = new Paper();
         float dim[] = size.getSize(1); //units == 1 to avoid FP error
         double w = Math.rint((dim[0]*72.0)/Size2DSyntax.INCH);
@@ -579,40 +569,58 @@
         MediaPrintableArea area =
              (MediaPrintableArea)
              attSet.get(MediaPrintableArea.class);
-        double ix, iw, iy, ih;
-
-        if (area != null) {
-            // Should pass in same unit as updatePageAttributes
-            // to avoid rounding off errors.
-            ix = Math.rint(
-                           area.getX(MediaPrintableArea.INCH) * DPI);
-            iy = Math.rint(
-                           area.getY(MediaPrintableArea.INCH) * DPI);
-            iw = Math.rint(
-                           area.getWidth(MediaPrintableArea.INCH) * DPI);
-            ih = Math.rint(
-                           area.getHeight(MediaPrintableArea.INCH) * DPI);
+        if (area == null) {
+            area = getDefaultPrintableArea(page, w, h);
         }
-        else {
-            if (w >= 72.0 * 6.0) {
-                ix = 72.0;
-                iw = w - 2 * 72.0;
-            } else {
-                ix = w / 6.0;
-                iw = w * 0.75;
-            }
-            if (h >= 72.0 * 6.0) {
-                iy = 72.0;
-                ih = h - 2 * 72.0;
-            } else {
-                iy = h / 6.0;
-                ih = h * 0.75;
-            }
-        }
+
+        double ix, iw, iy, ih;
+        // Should pass in same unit as updatePageAttributes
+        // to avoid rounding off errors.
+        ix = Math.rint(
+                area.getX(MediaPrintableArea.INCH) * DPI);
+        iy = Math.rint(
+                area.getY(MediaPrintableArea.INCH) * DPI);
+        iw = Math.rint(
+                area.getWidth(MediaPrintableArea.INCH) * DPI);
+        ih = Math.rint(
+                area.getHeight(MediaPrintableArea.INCH) * DPI);
         paper.setImageableArea(ix, iy, iw, ih);
         page.setPaper(paper);
         return page;
     }
+    protected MediaSize getMediaSize(Media media, PrintService service,
+            PageFormat page) {
+        if (media == null) {
+            media = (Media)service.getDefaultAttributeValue(Media.class);
+        }
+        if (!(media instanceof MediaSizeName)) {
+            media = MediaSizeName.NA_LETTER;
+        }
+        MediaSize size = MediaSize.getMediaSizeForName((MediaSizeName) media);
+        return size != null ? size : MediaSize.NA.LETTER;
+    }
+
+    protected MediaPrintableArea getDefaultPrintableArea(PageFormat page,
+            double w, double h) {
+        double ix, iw, iy, ih;
+        if (w >= 72.0 * 6.0) {
+            ix = 72.0;
+            iw = w - 2 * 72.0;
+        } else {
+            ix = w / 6.0;
+            iw = w * 0.75;
+        }
+        if (h >= 72.0 * 6.0) {
+            iy = 72.0;
+            ih = h - 2 * 72.0;
+        } else {
+            iy = h / 6.0;
+            ih = h * 0.75;
+        }
+
+        return new MediaPrintableArea((float) (ix / DPI), (float) (iy / DPI),
+                (float) (iw / DPI), (float) (ih / DPI), MediaPrintableArea.INCH);
+    }
 
     protected void updatePageAttributes(PrintService service,
                                         PageFormat page) {
@@ -809,7 +817,7 @@
    }
 
    protected PageFormat getPageFormatFromAttributes() {
-       if (attributes == null) {
+       if (attributes == null || attributes.isEmpty()) {
             return null;
         }
         return attributeToPageFormat(getPrintService(), this.attributes);
--- a/jdk/src/java.desktop/share/classes/sun/swing/JLightweightFrame.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/classes/sun/swing/JLightweightFrame.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -61,6 +61,7 @@
 import javax.swing.RootPaneContainer;
 import javax.swing.SwingUtilities;
 
+import sun.awt.AWTAccessor;
 import sun.awt.DisplayChangedListener;
 import sun.awt.LightweightFrame;
 import sun.security.action.GetPropertyAction;
@@ -241,7 +242,6 @@
     }
 
     @Override
-    @SuppressWarnings("deprecation")
     public void notifyDisplayChanged(final int scaleFactor) {
         if (scaleFactor != this.scaleFactor) {
             if (!copyBufferEnabled) content.paintLock();
@@ -254,18 +254,19 @@
             }
             this.scaleFactor = scaleFactor;
         }
-        if (getPeer() instanceof DisplayChangedListener) {
-            ((DisplayChangedListener)getPeer()).displayChanged();
+        final Object peer = AWTAccessor.getComponentAccessor().getPeer(this);
+        if (peer instanceof DisplayChangedListener) {
+            ((DisplayChangedListener) peer).displayChanged();
         }
         repaint();
     }
 
     @Override
-    @SuppressWarnings("deprecation")
     public void addNotify() {
         super.addNotify();
-        if (getPeer() instanceof DisplayChangedListener) {
-            ((DisplayChangedListener)getPeer()).displayChanged();
+        final Object peer = AWTAccessor.getComponentAccessor().getPeer(this);
+        if (peer instanceof DisplayChangedListener) {
+            ((DisplayChangedListener) peer).displayChanged();
         }
     }
 
--- a/jdk/src/java.desktop/share/native/libfontmanager/freetypeScaler.c	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/native/libfontmanager/freetypeScaler.c	Wed Jul 05 20:33:35 2017 +0200
@@ -147,20 +147,6 @@
 
 #define FILEDATACACHESIZE 1024
 
-/* NB: is it ever called? */
-static void CloseTTFontFileFunc(FT_Stream stream) {
-    FTScalerInfo *scalerInfo = (FTScalerInfo *) stream->pathname.pointer;
-    JNIEnv* env = scalerInfo->env;
-    jclass tmpClass = (*env)->FindClass(env, "sun/font/TrueTypeFont");
-    jfieldID platNameField =
-         (*env)->GetFieldID(env, tmpClass, "platName", "Ljava/lang/String;");
-    jstring platName = (*env)->GetObjectField(env,
-                                              scalerInfo->font2D,
-                                              platNameField);
-    const char *name = JNU_GetStringPlatformChars(env, platName, NULL);
-    JNU_ReleaseStringPlatformChars(env, platName, name);
-}
-
 static unsigned long ReadTTFontFileFunc(FT_Stream stream,
                                         unsigned long offset,
                                         unsigned char* destBuffer,
@@ -305,7 +291,7 @@
                     ftstream->size = filesize;
                     ftstream->pos = 0;
                     ftstream->read = (FT_Stream_IoFunc) ReadTTFontFileFunc;
-                    ftstream->close = (FT_Stream_CloseFunc) CloseTTFontFileFunc;
+                    ftstream->close = NULL;
                     ftstream->pathname.pointer = (void *) scalerInfo;
 
                     memset(&ft_open_args, 0, sizeof(FT_Open_Args));
--- a/jdk/src/java.desktop/share/native/libjsound/SoundDefs.h	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/native/libjsound/SoundDefs.h	Wed Jul 05 20:33:35 2017 +0200
@@ -34,7 +34,6 @@
 #define X_BSD           4
 #define X_MACOSX        5
 
-#define X_AARCH64       9
 // **********************************
 // Make sure you set X_PLATFORM defines correctly.
 // Everything depends upon this flag being setup correctly.
--- a/jdk/src/java.desktop/share/native/liblcms/cmscgats.c	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/native/liblcms/cmscgats.c	Wed Jul 05 20:33:35 2017 +0200
@@ -353,7 +353,7 @@
         "XYZ_X",          // X component of tristimulus data
         "XYZ_Y",          // Y component of tristimulus data
         "XYZ_Z",          // Z component of tristimulus data
-        "XYY_X"           // x component of chromaticity data
+        "XYY_X",          // x component of chromaticity data
         "XYY_Y",          // y component of chromaticity data
         "XYY_CAPY",       // Y component of tristimulus data
         "LAB_L",          // L* component of Lab data
@@ -2334,7 +2334,6 @@
 
     it8 = (cmsIT8*) hIT8;
     it8 ->MemoryBlock = (char*) _cmsMalloc(ContextID, len + 1);
-    if (it8 ->MemoryBlock == NULL) return NULL;
 
     strncpy(it8 ->MemoryBlock, (const char*) Ptr, len);
     it8 ->MemoryBlock[len] = 0;
--- a/jdk/src/java.desktop/share/native/liblcms/cmscnvrt.c	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/native/liblcms/cmscnvrt.c	Wed Jul 05 20:33:35 2017 +0200
@@ -298,6 +298,8 @@
 {
     cmsMAT3 Scale, m1, m2, m3, m4;
 
+    // TODO: Follow Marc Mahy's recommendation to check if CHAD is same by using M1*M2 == M2*M1. If so, do nothing.
+
     // Adaptation state
     if (AdaptationState == 1.0) {
 
@@ -559,7 +561,7 @@
     cmsHPROFILE hProfile;
     cmsMAT3 m;
     cmsVEC3 off;
-    cmsColorSpaceSignature ColorSpaceIn, ColorSpaceOut, CurrentColorSpace;
+    cmsColorSpaceSignature ColorSpaceIn, ColorSpaceOut = cmsSigLabData, CurrentColorSpace;
     cmsProfileClassSignature ClassSig;
     cmsUInt32Number  i, Intent;
 
@@ -661,6 +663,22 @@
         CurrentColorSpace = ColorSpaceOut;
     }
 
+    // Check for non-negatives clip
+    if (dwFlags & cmsFLAGS_NONEGATIVES) {
+
+           if (ColorSpaceOut == cmsSigGrayData ||
+                  ColorSpaceOut == cmsSigRgbData ||
+                  ColorSpaceOut == cmsSigCmykData) {
+
+                  cmsStage* clip = _cmsStageClipNegatives(Result->ContextID, cmsChannelsOf(ColorSpaceOut));
+                  if (clip == NULL) goto Error;
+
+                  if (!cmsPipelineInsertStage(Result, cmsAT_END, clip))
+                         goto Error;
+           }
+
+    }
+
     return Result;
 
 Error:
@@ -1074,7 +1092,7 @@
         if (TheIntents[i] == INTENT_PERCEPTUAL || TheIntents[i] == INTENT_SATURATION) {
 
             // Force BPC for V4 profiles in perceptual and saturation
-            if (cmsGetProfileVersion(hProfiles[i]) >= 4.0)
+            if (cmsGetEncodedICCversion(hProfiles[i]) >= 0x4000000)
                 BPC[i] = TRUE;
         }
     }
--- a/jdk/src/java.desktop/share/native/liblcms/cmserr.c	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/native/liblcms/cmserr.c	Wed Jul 05 20:33:35 2017 +0200
@@ -30,7 +30,7 @@
 //---------------------------------------------------------------------------------
 //
 //  Little Color Management System
-//  Copyright (c) 1998-2012 Marti Maria Saguer
+//  Copyright (c) 1998-2015 Marti Maria Saguer
 //
 // Permission is hereby granted, free of charge, to any person obtaining
 // a copy of this software and associated documentation files (the "Software"),
@@ -54,6 +54,13 @@
 
 #include "lcms2_internal.h"
 
+
+// This function is here to help applications to prevent mixing lcms versions on header and shared objects.
+int CMSEXPORT cmsGetEncodedCMMversion(void)
+{
+       return LCMS_VERSION;
+}
+
 // I am so tired about incompatibilities on those functions that here are some replacements
 // that hopefully would be fully portable.
 
--- a/jdk/src/java.desktop/share/native/liblcms/cmsintrp.c	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/native/liblcms/cmsintrp.c	Wed Jul 05 20:33:35 2017 +0200
@@ -958,7 +958,7 @@
 
                             Rest = c1 * rx + c2 * ry + c3 * rz;
 
-                            Tmp1[OutChan] = (cmsUInt16Number) c0 + ROUND_FIXED_TO_INT(_cmsToFixedDomain(Rest));
+                            Tmp1[OutChan] = (cmsUInt16Number) ( c0 + ROUND_FIXED_TO_INT(_cmsToFixedDomain(Rest)));
     }
 
 
@@ -1022,7 +1022,7 @@
 
                             Rest = c1 * rx + c2 * ry + c3 * rz;
 
-                            Tmp2[OutChan] = (cmsUInt16Number) c0 + ROUND_FIXED_TO_INT(_cmsToFixedDomain(Rest));
+                            Tmp2[OutChan] = (cmsUInt16Number) (c0 + ROUND_FIXED_TO_INT(_cmsToFixedDomain(Rest)));
     }
 
 
--- a/jdk/src/java.desktop/share/native/liblcms/cmsio0.c	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/native/liblcms/cmsio0.c	Wed Jul 05 20:33:35 2017 +0200
@@ -482,6 +482,14 @@
 
 // -------------------------------------------------------------------------------------------------------
 
+cmsIOHANDLER* CMSEXPORT cmsGetProfileIOhandler(cmsHPROFILE hProfile)
+{
+        _cmsICCPROFILE* Icc = (_cmsICCPROFILE*)hProfile;
+
+        if (Icc == NULL) return NULL;
+        return Icc->IOhandler;
+}
+
 // Creates an empty structure holding all required parameters
 cmsHPROFILE CMSEXPORT cmsCreateProfilePlaceholder(cmsContext ContextID)
 {
@@ -651,25 +659,26 @@
        return _cmsSearchTag(Icc, sig, FALSE) >= 0;
 }
 
-/*
- * Enforces that the profile version is per. spec.
- * Operates on the big endian bytes from the profile.
- * Called before converting to platform endianness.
- * Byte 0 is BCD major version, so max 9.
- * Byte 1 is 2 BCD digits, one per nibble.
- * Reserved bytes 2 & 3 must be 0.
- */
-static cmsUInt32Number _validatedVersion(cmsUInt32Number DWord)
+
+
+// Enforces that the profile version is per. spec.
+// Operates on the big endian bytes from the profile.
+// Called before converting to platform endianness.
+// Byte 0 is BCD major version, so max 9.
+// Byte 1 is 2 BCD digits, one per nibble.
+// Reserved bytes 2 & 3 must be 0.
+static
+cmsUInt32Number _validatedVersion(cmsUInt32Number DWord)
 {
-    cmsUInt8Number* pByte = (cmsUInt8Number*)&DWord;
+    cmsUInt8Number* pByte = (cmsUInt8Number*) &DWord;
     cmsUInt8Number temp1;
     cmsUInt8Number temp2;
 
-    if (*pByte > 0x09) *pByte = (cmsUInt8Number)9;
+    if (*pByte > 0x09) *pByte = (cmsUInt8Number) 0x09;
     temp1 = *(pByte+1) & 0xf0;
     temp2 = *(pByte+1) & 0x0f;
     if (temp1 > 0x90) temp1 = 0x90;
-    if (temp2 > 9) temp2 = 0x09;
+    if (temp2 > 0x09) temp2 = 0x09;
     *(pByte+1) = (cmsUInt8Number)(temp1 | temp2);
     *(pByte+2) = (cmsUInt8Number)0;
     *(pByte+3) = (cmsUInt8Number)0;
@@ -1167,6 +1176,8 @@
     return cmsOpenProfileFromMemTHR(NULL, MemPtr, dwSize);
 }
 
+
+
 // Dump tag contents. If the profile is being modified, untouched tags are copied from FileOrig
 static
 cmsBool SaveTags(_cmsICCPROFILE* Icc, _cmsICCPROFILE* FileOrig)
@@ -1197,7 +1208,7 @@
 
             // Reach here if we are copying a tag from a disk-based ICC profile which has not been modified by user.
             // In this case a blind copy of the block data is performed
-            if (FileOrig != NULL && FileOrig->IOhandler != NULL && Icc -> TagOffsets[i]) {
+            if (FileOrig != NULL && Icc -> TagOffsets[i]) {
 
                 cmsUInt32Number TagSize   = FileOrig -> TagSizes[i];
                 cmsUInt32Number TagOffset = FileOrig -> TagOffsets[i];
@@ -1846,13 +1857,12 @@
 
 // Similar to the anterior. This function allows to write directly to the ICC profile any data, without
 // checking anything. As a rule, mixing Raw with cooked doesn't work, so writting a tag as raw and then reading
-// it as cooked without serializing does result into an error. If that is wha you want, you will need to dump
+// it as cooked without serializing does result into an error. If that is what you want, you will need to dump
 // the profile to memry or disk and then reopen it.
 cmsBool CMSEXPORT cmsWriteRawTag(cmsHPROFILE hProfile, cmsTagSignature sig, const void* data, cmsUInt32Number Size)
 {
     _cmsICCPROFILE* Icc = (_cmsICCPROFILE*) hProfile;
     int i;
-    cmsBool ret = TRUE;
 
     if (!_cmsLockMutex(Icc->ContextID, Icc ->UsrMutex)) return 0;
 
@@ -1868,11 +1878,15 @@
 
     // Keep a copy of the block
     Icc ->TagPtrs[i]  = _cmsDupMem(Icc ->ContextID, data, Size);
-    if (!Icc ->TagPtrs[i]) ret = FALSE;
     Icc ->TagSizes[i] = Size;
 
     _cmsUnlockMutex(Icc->ContextID, Icc ->UsrMutex);
-    return ret;
+
+    if (Icc->TagPtrs[i] == NULL) {
+           Icc->TagNames[i] = 0;
+           return FALSE;
+    }
+    return TRUE;
 }
 
 // Using this function you can collapse several tag entries to the same block in the profile
--- a/jdk/src/java.desktop/share/native/liblcms/cmsio1.c	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/native/liblcms/cmsio1.c	Wed Jul 05 20:33:35 2017 +0200
@@ -339,8 +339,8 @@
 cmsPipeline* _cmsReadInputLUT(cmsHPROFILE hProfile, int Intent)
 {
     cmsTagTypeSignature OriginalType;
-    cmsTagSignature tag16    = Device2PCS16[Intent];
-    cmsTagSignature tagFloat = Device2PCSFloat[Intent];
+    cmsTagSignature tag16;
+    cmsTagSignature tagFloat;
     cmsContext ContextID = cmsGetProfileContextID(hProfile);
 
     // On named color, take the appropiate tag
@@ -369,6 +369,9 @@
     // matter other LUT are present and have precedence. Intent = -1 means just this.
     if (Intent != -1) {
 
+        tag16 = Device2PCS16[Intent];
+        tagFloat = Device2PCSFloat[Intent];
+
         if (cmsIsTag(hProfile, tagFloat)) {  // Float tag takes precedence
 
             // Floating point LUT are always V4, but the encoding range is no
@@ -611,13 +614,16 @@
 cmsPipeline* _cmsReadOutputLUT(cmsHPROFILE hProfile, int Intent)
 {
     cmsTagTypeSignature OriginalType;
-    cmsTagSignature tag16    = PCS2Device16[Intent];
-    cmsTagSignature tagFloat = PCS2DeviceFloat[Intent];
-    cmsContext ContextID     = cmsGetProfileContextID(hProfile);
+    cmsTagSignature tag16;
+    cmsTagSignature tagFloat;
+    cmsContext ContextID  = cmsGetProfileContextID(hProfile);
 
 
     if (Intent != -1) {
 
+        tag16 = PCS2Device16[Intent];
+        tagFloat = PCS2DeviceFloat[Intent];
+
         if (cmsIsTag(hProfile, tagFloat)) {  // Float tag takes precedence
 
             // Floating point LUT are always V4
@@ -935,7 +941,7 @@
 {
     if (!cmsWriteTag(hProfile, cmsSigProfileSequenceDescTag, seq)) return FALSE;
 
-    if (cmsGetProfileVersion(hProfile) >= 4.0) {
+    if (cmsGetEncodedICCversion(hProfile) >= 0x4000000) {
 
             if (!cmsWriteTag(hProfile, cmsSigProfileSequenceIdTag, seq)) return FALSE;
     }
--- a/jdk/src/java.desktop/share/native/liblcms/cmslut.c	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/native/liblcms/cmslut.c	Wed Jul 05 20:33:35 2017 +0200
@@ -1154,7 +1154,23 @@
     return mpe;
 }
 
+// Clips values smaller than zero
+static
+void Clipper(const cmsFloat32Number In[], cmsFloat32Number Out[], const cmsStage *mpe)
+{
+       cmsUInt32Number i;
+       for (i = 0; i < mpe->InputChannels; i++) {
 
+              cmsFloat32Number n = In[i];
+              Out[i] = n < 0 ? 0 : n;
+       }
+}
+
+cmsStage*  _cmsStageClipNegatives(cmsContext ContextID, int nChannels)
+{
+       return _cmsStageAllocPlaceholder(ContextID, cmsSigClipNegativesElemType,
+              nChannels, nChannels, Clipper, NULL, NULL, NULL);
+}
 
 // ********************************************************************************
 // Type cmsSigXYZ2LabElemType
--- a/jdk/src/java.desktop/share/native/liblcms/cmsnamed.c	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/native/liblcms/cmsnamed.c	Wed Jul 05 20:33:35 2017 +0200
@@ -543,8 +543,9 @@
     v ->nColors   = 0;
     v ->ContextID  = ContextID;
 
-    while (v -> Allocated < n)
-        GrowNamedColorList(v);
+    while (v -> Allocated < n){
+        if (!GrowNamedColorList(v)) return NULL;
+    }
 
     strncpy(v ->Prefix, Prefix, sizeof(v ->Prefix)-1);
     strncpy(v ->Suffix, Suffix, sizeof(v ->Suffix)-1);
@@ -573,8 +574,9 @@
     if (NewNC == NULL) return NULL;
 
     // For really large tables we need this
-    while (NewNC ->Allocated < v ->Allocated)
-        GrowNamedColorList(NewNC);
+    while (NewNC ->Allocated < v ->Allocated){
+        if (!GrowNamedColorList(NewNC)) return NULL;
+    }
 
     memmove(NewNC ->Prefix, v ->Prefix, sizeof(v ->Prefix));
     memmove(NewNC ->Suffix, v ->Suffix, sizeof(v ->Suffix));
--- a/jdk/src/java.desktop/share/native/liblcms/cmsopt.c	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/native/liblcms/cmsopt.c	Wed Jul 05 20:33:35 2017 +0200
@@ -192,6 +192,88 @@
     return AnyOpt;
 }
 
+
+static
+cmsBool CloseEnoughFloat(cmsFloat64Number a, cmsFloat64Number b)
+{
+       return fabs(b - a) < 0.00001f;
+}
+
+static
+cmsBool  isFloatMatrixIdentity(const cmsMAT3* a)
+{
+       cmsMAT3 Identity;
+       int i, j;
+
+       _cmsMAT3identity(&Identity);
+
+       for (i = 0; i < 3; i++)
+              for (j = 0; j < 3; j++)
+                     if (!CloseEnoughFloat(a->v[i].n[j], Identity.v[i].n[j])) return FALSE;
+
+       return TRUE;
+}
+// if two adjacent matrices are found, multiply them.
+static
+cmsBool _MultiplyMatrix(cmsPipeline* Lut)
+{
+       cmsStage** pt1;
+       cmsStage** pt2;
+       cmsStage*  chain;
+       cmsBool AnyOpt = FALSE;
+
+       pt1 = &Lut->Elements;
+       if (*pt1 == NULL) return AnyOpt;
+
+       while (*pt1 != NULL) {
+
+              pt2 = &((*pt1)->Next);
+              if (*pt2 == NULL) return AnyOpt;
+
+              if ((*pt1)->Implements == cmsSigMatrixElemType && (*pt2)->Implements == cmsSigMatrixElemType) {
+
+                     // Get both matrices
+                     _cmsStageMatrixData* m1 = (_cmsStageMatrixData*) cmsStageData(*pt1);
+                     _cmsStageMatrixData* m2 = (_cmsStageMatrixData*) cmsStageData(*pt2);
+                     cmsMAT3 res;
+
+                     // Input offset and output offset should be zero to use this optimization
+                     if (m1->Offset != NULL || m2 ->Offset != NULL ||
+                            cmsStageInputChannels(*pt1) != 3 || cmsStageOutputChannels(*pt1) != 3 ||
+                            cmsStageInputChannels(*pt2) != 3 || cmsStageOutputChannels(*pt2) != 3)
+                            return FALSE;
+
+                     // Multiply both matrices to get the result
+                     _cmsMAT3per(&res, (cmsMAT3*)m2->Double, (cmsMAT3*)m1->Double);
+
+                     // Get the next in chain afer the matrices
+                     chain = (*pt2)->Next;
+
+                     // Remove both matrices
+                     _RemoveElement(pt2);
+                     _RemoveElement(pt1);
+
+                     // Now what if the result is a plain identity?
+                     if (!isFloatMatrixIdentity(&res)) {
+
+                            // We can not get rid of full matrix
+                            cmsStage* Multmat = cmsStageAllocMatrix(Lut->ContextID, 3, 3, (const cmsFloat64Number*) &res, NULL);
+
+                            // Recover the chain
+                            Multmat->Next = chain;
+                            *pt1 = Multmat;
+                     }
+
+                     AnyOpt = TRUE;
+              }
+              else
+                     pt1 = &((*pt1)->Next);
+       }
+
+       return AnyOpt;
+}
+
+
 // Preoptimize just gets rif of no-ops coming paired. Conversion from v2 to v4 followed
 // by a v4 to v2 and vice-versa. The elements are then discarded.
 static
@@ -224,6 +306,9 @@
         // Remove float pcs Lab conversions
         Opt |= _Remove2Op(Lut, cmsSigXYZ2FloatPCS, cmsSigFloatPCS2XYZ);
 
+        // Simplify matrix.
+        Opt |= _MultiplyMatrix(Lut);
+
         if (Opt) AnyOpt = TRUE;
 
     } while (Opt);
@@ -280,12 +365,12 @@
 void* Prelin16dup(cmsContext ContextID, const void* ptr)
 {
     Prelin16Data* p16 = (Prelin16Data*) ptr;
-    Prelin16Data* Duped = _cmsDupMem(ContextID, p16, sizeof(Prelin16Data));
+    Prelin16Data* Duped = (Prelin16Data*) _cmsDupMem(ContextID, p16, sizeof(Prelin16Data));
 
     if (Duped == NULL) return NULL;
 
-    Duped ->EvalCurveOut16   = _cmsDupMem(ContextID, p16 ->EvalCurveOut16, p16 ->nOutputs * sizeof(_cmsInterpFn16));
-    Duped ->ParamsCurveOut16 = _cmsDupMem(ContextID, p16 ->ParamsCurveOut16, p16 ->nOutputs * sizeof(cmsInterpParams* ));
+    Duped->EvalCurveOut16 = (_cmsInterpFn16*) _cmsDupMem(ContextID, p16->EvalCurveOut16, p16->nOutputs * sizeof(_cmsInterpFn16));
+    Duped->ParamsCurveOut16 = (cmsInterpParams**)_cmsDupMem(ContextID, p16->ParamsCurveOut16, p16->nOutputs * sizeof(cmsInterpParams*));
 
     return Duped;
 }
@@ -298,7 +383,7 @@
                                int nOutputs, cmsToneCurve** Out )
 {
     int i;
-    Prelin16Data* p16 = _cmsMallocZero(ContextID, sizeof(Prelin16Data));
+    Prelin16Data* p16 = (Prelin16Data*)_cmsMallocZero(ContextID, sizeof(Prelin16Data));
     if (p16 == NULL) return NULL;
 
     p16 ->nInputs = nInputs;
@@ -787,7 +872,7 @@
     cmsS15Fixed16Number v1, v2, v3;
     Prelin8Data* p8;
 
-    p8 = _cmsMallocZero(ContextID, sizeof(Prelin8Data));
+    p8 = (Prelin8Data*)_cmsMallocZero(ContextID, sizeof(Prelin8Data));
     if (p8 == NULL) return NULL;
 
     // Since this only works for 8 bit input, values comes always as x * 257,
@@ -861,7 +946,7 @@
     Prelin8Data* p8 = (Prelin8Data*) D;
     register const cmsInterpParams* p = p8 ->p;
     int                    TotalOut = p -> nOutputs;
-    const cmsUInt16Number* LutTable = p -> Table;
+    const cmsUInt16Number* LutTable = (const cmsUInt16Number*) p->Table;
 
     r = Input[0] >> 8;
     g = Input[1] >> 8;
@@ -1180,29 +1265,15 @@
 static
 void* CurvesDup(cmsContext ContextID, const void* ptr)
 {
-    Curves16Data* Data = _cmsDupMem(ContextID, ptr, sizeof(Curves16Data));
-    int i, j;
+    Curves16Data* Data = (Curves16Data*)_cmsDupMem(ContextID, ptr, sizeof(Curves16Data));
+    int i;
 
     if (Data == NULL) return NULL;
 
-    Data ->Curves = _cmsDupMem(ContextID, Data ->Curves, Data ->nCurves * sizeof(cmsUInt16Number*));
-    if (Data -> Curves == NULL) {
-        _cmsFree(ContextID, Data);
-        return NULL;
-    }
+    Data->Curves = (cmsUInt16Number**) _cmsDupMem(ContextID, Data->Curves, Data->nCurves * sizeof(cmsUInt16Number*));
 
     for (i=0; i < Data -> nCurves; i++) {
-        Data ->Curves[i] = _cmsDupMem(ContextID, Data ->Curves[i], Data -> nElements * sizeof(cmsUInt16Number));
-        if (Data->Curves[i] == NULL) {
-
-            for (j=0; j < i; j++) {
-                _cmsFree(ContextID, Data->Curves[j]);
-            }
-            _cmsFree(ContextID, Data->Curves);
-            _cmsFree(ContextID, Data);
-            return NULL;
-        }
-
+        Data->Curves[i] = (cmsUInt16Number*) _cmsDupMem(ContextID, Data->Curves[i], Data->nElements * sizeof(cmsUInt16Number));
     }
 
     return (void*) Data;
@@ -1215,18 +1286,18 @@
     int i, j;
     Curves16Data* c16;
 
-    c16 = _cmsMallocZero(ContextID, sizeof(Curves16Data));
+    c16 = (Curves16Data*)_cmsMallocZero(ContextID, sizeof(Curves16Data));
     if (c16 == NULL) return NULL;
 
     c16 ->nCurves = nCurves;
     c16 ->nElements = nElements;
 
-    c16 ->Curves = _cmsCalloc(ContextID, nCurves, sizeof(cmsUInt16Number*));
+    c16->Curves = (cmsUInt16Number**) _cmsCalloc(ContextID, nCurves, sizeof(cmsUInt16Number*));
     if (c16 ->Curves == NULL) return NULL;
 
     for (i=0; i < nCurves; i++) {
 
-        c16->Curves[i] = _cmsCalloc(ContextID, nElements, sizeof(cmsUInt16Number));
+        c16->Curves[i] = (cmsUInt16Number*) _cmsCalloc(ContextID, nElements, sizeof(cmsUInt16Number));
 
         if (c16->Curves[i] == NULL) {
 
@@ -1574,49 +1645,83 @@
 }
 
 //  8 bits on input allows matrix-shaper boot up to 25 Mpixels per second on RGB. That's fast!
-// TODO: Allow a third matrix for abs. colorimetric
 static
 cmsBool OptimizeMatrixShaper(cmsPipeline** Lut, cmsUInt32Number Intent, cmsUInt32Number* InputFormat, cmsUInt32Number* OutputFormat, cmsUInt32Number* dwFlags)
 {
-    cmsStage* Curve1, *Curve2;
-    cmsStage* Matrix1, *Matrix2;
-    _cmsStageMatrixData* Data1;
-    _cmsStageMatrixData* Data2;
-    cmsMAT3 res;
-    cmsBool IdentityMat;
-    cmsPipeline* Dest, *Src;
+       cmsStage* Curve1, *Curve2;
+       cmsStage* Matrix1, *Matrix2;
+       cmsMAT3 res;
+       cmsBool IdentityMat;
+       cmsPipeline* Dest, *Src;
+       cmsFloat64Number* Offset;
+
+       // Only works on RGB to RGB
+       if (T_CHANNELS(*InputFormat) != 3 || T_CHANNELS(*OutputFormat) != 3) return FALSE;
+
+       // Only works on 8 bit input
+       if (!_cmsFormatterIs8bit(*InputFormat)) return FALSE;
+
+       // Seems suitable, proceed
+       Src = *Lut;
 
-    // Only works on RGB to RGB
-    if (T_CHANNELS(*InputFormat) != 3 || T_CHANNELS(*OutputFormat) != 3) return FALSE;
+       // Check for:
+       //
+       //    shaper-matrix-matrix-shaper
+       //    shaper-matrix-shaper
+       //
+       // Both of those constructs are possible (first because abs. colorimetric).
+       // additionally, In the first case, the input matrix offset should be zero.
 
-    // Only works on 8 bit input
-    if (!_cmsFormatterIs8bit(*InputFormat)) return FALSE;
+       IdentityMat = FALSE;
+       if (cmsPipelineCheckAndRetreiveStages(Src, 4,
+              cmsSigCurveSetElemType, cmsSigMatrixElemType, cmsSigMatrixElemType, cmsSigCurveSetElemType,
+              &Curve1, &Matrix1, &Matrix2, &Curve2)) {
 
-    // Seems suitable, proceed
-    Src = *Lut;
+              // Get both matrices
+              _cmsStageMatrixData* Data1 = (_cmsStageMatrixData*)cmsStageData(Matrix1);
+              _cmsStageMatrixData* Data2 = (_cmsStageMatrixData*)cmsStageData(Matrix2);
+
+              // Input offset should be zero
+              if (Data1->Offset != NULL) return FALSE;
 
-    // Check for shaper-matrix-matrix-shaper structure, that is what this optimizer stands for
-    if (!cmsPipelineCheckAndRetreiveStages(Src, 4,
-        cmsSigCurveSetElemType, cmsSigMatrixElemType, cmsSigMatrixElemType, cmsSigCurveSetElemType,
-        &Curve1, &Matrix1, &Matrix2, &Curve2)) return FALSE;
+              // Multiply both matrices to get the result
+              _cmsMAT3per(&res, (cmsMAT3*)Data2->Double, (cmsMAT3*)Data1->Double);
+
+              // Only 2nd matrix has offset, or it is zero
+              Offset = Data2->Offset;
 
-    // Get both matrices
-    Data1 = (_cmsStageMatrixData*) cmsStageData(Matrix1);
-    Data2 = (_cmsStageMatrixData*) cmsStageData(Matrix2);
+              // Now the result is in res + Data2 -> Offset. Maybe is a plain identity?
+              if (_cmsMAT3isIdentity(&res) && Offset == NULL) {
+
+                     // We can get rid of full matrix
+                     IdentityMat = TRUE;
+              }
+
+       }
+       else {
 
-    // Input offset should be zero
-    if (Data1 ->Offset != NULL) return FALSE;
+              if (cmsPipelineCheckAndRetreiveStages(Src, 3,
+                     cmsSigCurveSetElemType, cmsSigMatrixElemType, cmsSigCurveSetElemType,
+                     &Curve1, &Matrix1, &Curve2)) {
 
-    // Multiply both matrices to get the result
-    _cmsMAT3per(&res, (cmsMAT3*) Data2 ->Double, (cmsMAT3*) Data1 ->Double);
+                     _cmsStageMatrixData* Data = (_cmsStageMatrixData*)cmsStageData(Matrix1);
+
+                     // Copy the matrix to our result
+                     memcpy(&res, Data->Double, sizeof(res));
 
-    // Now the result is in res + Data2 -> Offset. Maybe is a plain identity?
-    IdentityMat = FALSE;
-    if (_cmsMAT3isIdentity(&res) && Data2 ->Offset == NULL) {
+                     // Preserve the Odffset (may be NULL as a zero offset)
+                     Offset = Data->Offset;
+
+                     if (_cmsMAT3isIdentity(&res) && Offset == NULL) {
 
-        // We can get rid of full matrix
-        IdentityMat = TRUE;
-    }
+                            // We can get rid of full matrix
+                            IdentityMat = TRUE;
+                     }
+              }
+              else
+                     return FALSE; // Not optimizeable this time
+
+       }
 
       // Allocate an empty LUT
     Dest =  cmsPipelineAlloc(Src ->ContextID, Src ->InputChannels, Src ->OutputChannels);
@@ -1626,9 +1731,12 @@
     if (!cmsPipelineInsertStage(Dest, cmsAT_BEGIN, cmsStageDup(Curve1)))
         goto Error;
 
-    if (!IdentityMat)
-        if (!cmsPipelineInsertStage(Dest, cmsAT_END, cmsStageAllocMatrix(Dest ->ContextID, 3, 3, (const cmsFloat64Number*) &res, Data2 ->Offset)))
-            goto Error;
+    if (!IdentityMat) {
+
+           if (!cmsPipelineInsertStage(Dest, cmsAT_END, cmsStageAllocMatrix(Dest->ContextID, 3, 3, (const cmsFloat64Number*)&res, Offset)))
+                  goto Error;
+    }
+
     if (!cmsPipelineInsertStage(Dest, cmsAT_END, cmsStageDup(Curve2)))
         goto Error;
 
@@ -1646,7 +1754,7 @@
         *dwFlags |= cmsFLAGS_NOCACHE;
 
         // Setup the optimizarion routines
-        SetMatShaper(Dest, mpeC1 ->TheCurves, &res, (cmsVEC3*) Data2 ->Offset, mpeC2->TheCurves, OutputFormat);
+        SetMatShaper(Dest, mpeC1 ->TheCurves, &res, (cmsVEC3*) Offset, mpeC2->TheCurves, OutputFormat);
     }
 
     cmsPipelineFree(Src);
--- a/jdk/src/java.desktop/share/native/liblcms/cmspack.c	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/native/liblcms/cmspack.c	Wed Jul 05 20:33:35 2017 +0200
@@ -2438,9 +2438,6 @@
             ((cmsFloat64Number*) output)[i + start] = v;
     }
 
-    if (!ExtraFirst) {
-        output += Extra * sizeof(cmsFloat64Number);
-    }
 
     if (Extra == 0 && SwapFirst) {
 
@@ -2451,7 +2448,7 @@
     if (T_PLANAR(info -> OutputFormat))
         return output + sizeof(cmsFloat64Number);
     else
-        return output + nChan * sizeof(cmsFloat64Number);
+        return output + (nChan + Extra) * sizeof(cmsFloat64Number);
 
 }
 
@@ -2462,50 +2459,47 @@
                                 register cmsUInt8Number* output,
                                 register cmsUInt32Number Stride)
 {
-    int nChan      = T_CHANNELS(info -> OutputFormat);
-    int DoSwap     = T_DOSWAP(info ->OutputFormat);
-    int Reverse    = T_FLAVOR(info ->OutputFormat);
-    int Extra      = T_EXTRA(info -> OutputFormat);
-    int SwapFirst  = T_SWAPFIRST(info -> OutputFormat);
-    int Planar     = T_PLANAR(info -> OutputFormat);
-    int ExtraFirst = DoSwap ^ SwapFirst;
-    cmsFloat64Number maximum = IsInkSpace(info ->OutputFormat) ? 655.35 : 65535.0;
-    cmsFloat64Number v = 0;
-    cmsFloat32Number* swap1 = (cmsFloat32Number*) output;
-    int i, start = 0;
-
-    if (ExtraFirst)
-        start = Extra;
-
-    for (i=0; i < nChan; i++) {
-
-        int index = DoSwap ? (nChan - i - 1) : i;
-
-        v = (cmsFloat64Number) wOut[index] / maximum;
-
-        if (Reverse)
-            v = maximum - v;
-
-        if (Planar)
-            ((cmsFloat32Number*) output)[(i + start ) * Stride]= (cmsFloat32Number) v;
-        else
-            ((cmsFloat32Number*) output)[i + start] = (cmsFloat32Number) v;
-    }
-
-    if (!ExtraFirst) {
-        output += Extra * sizeof(cmsFloat32Number);
-    }
-
-  if (Extra == 0 && SwapFirst) {
-
-         memmove(swap1 + 1, swap1, (nChan-1)* sizeof(cmsFloat32Number));
-        *swap1 = (cmsFloat32Number) v;
-    }
-
-    if (T_PLANAR(info -> OutputFormat))
-        return output + sizeof(cmsFloat32Number);
-    else
-        return output + nChan * sizeof(cmsFloat32Number);
+       int nChan = T_CHANNELS(info->OutputFormat);
+       int DoSwap = T_DOSWAP(info->OutputFormat);
+       int Reverse = T_FLAVOR(info->OutputFormat);
+       int Extra = T_EXTRA(info->OutputFormat);
+       int SwapFirst = T_SWAPFIRST(info->OutputFormat);
+       int Planar = T_PLANAR(info->OutputFormat);
+       int ExtraFirst = DoSwap ^ SwapFirst;
+       cmsFloat64Number maximum = IsInkSpace(info->OutputFormat) ? 655.35 : 65535.0;
+       cmsFloat64Number v = 0;
+       cmsFloat32Number* swap1 = (cmsFloat32Number*)output;
+       int i, start = 0;
+
+       if (ExtraFirst)
+              start = Extra;
+
+       for (i = 0; i < nChan; i++) {
+
+              int index = DoSwap ? (nChan - i - 1) : i;
+
+              v = (cmsFloat64Number)wOut[index] / maximum;
+
+              if (Reverse)
+                     v = maximum - v;
+
+              if (Planar)
+                     ((cmsFloat32Number*)output)[(i + start) * Stride] = (cmsFloat32Number)v;
+              else
+                     ((cmsFloat32Number*)output)[i + start] = (cmsFloat32Number)v;
+       }
+
+
+       if (Extra == 0 && SwapFirst) {
+
+              memmove(swap1 + 1, swap1, (nChan - 1)* sizeof(cmsFloat32Number));
+              *swap1 = (cmsFloat32Number)v;
+       }
+
+       if (T_PLANAR(info->OutputFormat))
+              return output + sizeof(cmsFloat32Number);
+       else
+              return output + (nChan + Extra) * sizeof(cmsFloat32Number);
 }
 
 
@@ -2518,50 +2512,47 @@
                                     cmsUInt8Number* output,
                                     cmsUInt32Number Stride)
 {
-    int nChan      = T_CHANNELS(info -> OutputFormat);
-    int DoSwap     = T_DOSWAP(info ->OutputFormat);
-    int Reverse    = T_FLAVOR(info ->OutputFormat);
-    int Extra      = T_EXTRA(info -> OutputFormat);
-    int SwapFirst  = T_SWAPFIRST(info -> OutputFormat);
-    int Planar     = T_PLANAR(info -> OutputFormat);
-    int ExtraFirst = DoSwap ^ SwapFirst;
-    cmsFloat64Number maximum = IsInkSpace(info ->OutputFormat) ? 100.0 : 1.0;
-    cmsFloat32Number* swap1 = (cmsFloat32Number*) output;
-    cmsFloat64Number v = 0;
-    int i, start = 0;
-
-    if (ExtraFirst)
-        start = Extra;
-
-    for (i=0; i < nChan; i++) {
-
-        int index = DoSwap ? (nChan - i - 1) : i;
-
-        v = wOut[index] * maximum;
-
-        if (Reverse)
-            v = maximum - v;
-
-        if (Planar)
-            ((cmsFloat32Number*) output)[(i + start)* Stride]= (cmsFloat32Number) v;
-        else
-            ((cmsFloat32Number*) output)[i + start] = (cmsFloat32Number) v;
-    }
-
-    if (!ExtraFirst) {
-        output += Extra * sizeof(cmsFloat32Number);
-    }
-
-   if (Extra == 0 && SwapFirst) {
-
-         memmove(swap1 + 1, swap1, (nChan-1)* sizeof(cmsFloat32Number));
-        *swap1 = (cmsFloat32Number) v;
-    }
-
-    if (T_PLANAR(info -> OutputFormat))
-        return output + sizeof(cmsFloat32Number);
-    else
-        return output + nChan * sizeof(cmsFloat32Number);
+       int nChan = T_CHANNELS(info->OutputFormat);
+       int DoSwap = T_DOSWAP(info->OutputFormat);
+       int Reverse = T_FLAVOR(info->OutputFormat);
+       int Extra = T_EXTRA(info->OutputFormat);
+       int SwapFirst = T_SWAPFIRST(info->OutputFormat);
+       int Planar = T_PLANAR(info->OutputFormat);
+       int ExtraFirst = DoSwap ^ SwapFirst;
+       cmsFloat64Number maximum = IsInkSpace(info->OutputFormat) ? 100.0 : 1.0;
+       cmsFloat32Number* swap1 = (cmsFloat32Number*)output;
+       cmsFloat64Number v = 0;
+       int i, start = 0;
+
+       if (ExtraFirst)
+              start = Extra;
+
+       for (i = 0; i < nChan; i++) {
+
+              int index = DoSwap ? (nChan - i - 1) : i;
+
+              v = wOut[index] * maximum;
+
+              if (Reverse)
+                     v = maximum - v;
+
+              if (Planar)
+                     ((cmsFloat32Number*)output)[(i + start)* Stride] = (cmsFloat32Number)v;
+              else
+                     ((cmsFloat32Number*)output)[i + start] = (cmsFloat32Number)v;
+       }
+
+
+       if (Extra == 0 && SwapFirst) {
+
+              memmove(swap1 + 1, swap1, (nChan - 1)* sizeof(cmsFloat32Number));
+              *swap1 = (cmsFloat32Number)v;
+       }
+
+       if (T_PLANAR(info->OutputFormat))
+              return output + sizeof(cmsFloat32Number);
+       else
+              return output + (nChan + Extra) * sizeof(cmsFloat32Number);
 }
 
 static
@@ -2570,51 +2561,47 @@
                                     cmsUInt8Number* output,
                                     cmsUInt32Number Stride)
 {
-    int nChan      = T_CHANNELS(info -> OutputFormat);
-    int DoSwap     = T_DOSWAP(info ->OutputFormat);
-    int Reverse    = T_FLAVOR(info ->OutputFormat);
-    int Extra      = T_EXTRA(info -> OutputFormat);
-    int SwapFirst  = T_SWAPFIRST(info -> OutputFormat);
-    int Planar     = T_PLANAR(info -> OutputFormat);
-    int ExtraFirst = DoSwap ^ SwapFirst;
-    cmsFloat64Number maximum = IsInkSpace(info ->OutputFormat) ? 100.0 : 1.0;
-    cmsFloat64Number v = 0;
-    cmsFloat64Number* swap1 = (cmsFloat64Number*) output;
-    int i, start = 0;
-
-    if (ExtraFirst)
-        start = Extra;
-
-    for (i=0; i < nChan; i++) {
-
-        int index = DoSwap ? (nChan - i - 1) : i;
-
-        v = wOut[index] * maximum;
-
-        if (Reverse)
-            v = maximum - v;
-
-        if (Planar)
-            ((cmsFloat64Number*) output)[(i + start) * Stride] =  v;
-        else
-            ((cmsFloat64Number*) output)[i + start] =  v;
-    }
-
-    if (!ExtraFirst) {
-        output += Extra * sizeof(cmsFloat64Number);
-    }
-
-   if (Extra == 0 && SwapFirst) {
-
-         memmove(swap1 + 1, swap1, (nChan-1)* sizeof(cmsFloat64Number));
-        *swap1 = v;
-    }
-
-
-    if (T_PLANAR(info -> OutputFormat))
-        return output + sizeof(cmsFloat64Number);
-    else
-        return output + nChan * sizeof(cmsFloat64Number);
+       int nChan = T_CHANNELS(info->OutputFormat);
+       int DoSwap = T_DOSWAP(info->OutputFormat);
+       int Reverse = T_FLAVOR(info->OutputFormat);
+       int Extra = T_EXTRA(info->OutputFormat);
+       int SwapFirst = T_SWAPFIRST(info->OutputFormat);
+       int Planar = T_PLANAR(info->OutputFormat);
+       int ExtraFirst = DoSwap ^ SwapFirst;
+       cmsFloat64Number maximum = IsInkSpace(info->OutputFormat) ? 100.0 : 1.0;
+       cmsFloat64Number v = 0;
+       cmsFloat64Number* swap1 = (cmsFloat64Number*)output;
+       int i, start = 0;
+
+       if (ExtraFirst)
+              start = Extra;
+
+       for (i = 0; i < nChan; i++) {
+
+              int index = DoSwap ? (nChan - i - 1) : i;
+
+              v = wOut[index] * maximum;
+
+              if (Reverse)
+                     v = maximum - v;
+
+              if (Planar)
+                     ((cmsFloat64Number*)output)[(i + start) * Stride] = v;
+              else
+                     ((cmsFloat64Number*)output)[i + start] = v;
+       }
+
+       if (Extra == 0 && SwapFirst) {
+
+              memmove(swap1 + 1, swap1, (nChan - 1)* sizeof(cmsFloat64Number));
+              *swap1 = v;
+       }
+
+
+       if (T_PLANAR(info->OutputFormat))
+              return output + sizeof(cmsFloat64Number);
+       else
+              return output + (nChan + Extra) * sizeof(cmsFloat64Number);
 
 }
 
@@ -2850,50 +2837,47 @@
                                 register cmsUInt8Number* output,
                                 register cmsUInt32Number Stride)
 {
-    int nChan      = T_CHANNELS(info -> OutputFormat);
-    int DoSwap     = T_DOSWAP(info ->OutputFormat);
-    int Reverse    = T_FLAVOR(info ->OutputFormat);
-    int Extra      = T_EXTRA(info -> OutputFormat);
-    int SwapFirst  = T_SWAPFIRST(info -> OutputFormat);
-    int Planar     = T_PLANAR(info -> OutputFormat);
-    int ExtraFirst = DoSwap ^ SwapFirst;
-    cmsFloat32Number maximum = IsInkSpace(info ->OutputFormat) ? 655.35F : 65535.0F;
-    cmsFloat32Number v = 0;
-    cmsUInt16Number* swap1 = (cmsUInt16Number*) output;
-    int i, start = 0;
-
-    if (ExtraFirst)
-        start = Extra;
-
-    for (i=0; i < nChan; i++) {
-
-        int index = DoSwap ? (nChan - i - 1) : i;
-
-        v = (cmsFloat32Number) wOut[index] / maximum;
-
-        if (Reverse)
-            v = maximum - v;
-
-        if (Planar)
-            ((cmsUInt16Number*) output)[(i + start ) * Stride]= _cmsFloat2Half(v);
-        else
-            ((cmsUInt16Number*) output)[i + start] =  _cmsFloat2Half(v);
-    }
-
-    if (!ExtraFirst) {
-        output += Extra * sizeof(cmsUInt16Number);
-    }
-
-  if (Extra == 0 && SwapFirst) {
-
-         memmove(swap1 + 1, swap1, (nChan-1)* sizeof(cmsUInt16Number));
-        *swap1 = _cmsFloat2Half(v);
-    }
-
-    if (T_PLANAR(info -> OutputFormat))
-        return output + sizeof(cmsUInt16Number);
-    else
-        return output + nChan * sizeof(cmsUInt16Number);
+       int nChan = T_CHANNELS(info->OutputFormat);
+       int DoSwap = T_DOSWAP(info->OutputFormat);
+       int Reverse = T_FLAVOR(info->OutputFormat);
+       int Extra = T_EXTRA(info->OutputFormat);
+       int SwapFirst = T_SWAPFIRST(info->OutputFormat);
+       int Planar = T_PLANAR(info->OutputFormat);
+       int ExtraFirst = DoSwap ^ SwapFirst;
+       cmsFloat32Number maximum = IsInkSpace(info->OutputFormat) ? 655.35F : 65535.0F;
+       cmsFloat32Number v = 0;
+       cmsUInt16Number* swap1 = (cmsUInt16Number*)output;
+       int i, start = 0;
+
+       if (ExtraFirst)
+              start = Extra;
+
+       for (i = 0; i < nChan; i++) {
+
+              int index = DoSwap ? (nChan - i - 1) : i;
+
+              v = (cmsFloat32Number)wOut[index] / maximum;
+
+              if (Reverse)
+                     v = maximum - v;
+
+              if (Planar)
+                     ((cmsUInt16Number*)output)[(i + start) * Stride] = _cmsFloat2Half(v);
+              else
+                     ((cmsUInt16Number*)output)[i + start] = _cmsFloat2Half(v);
+       }
+
+
+       if (Extra == 0 && SwapFirst) {
+
+              memmove(swap1 + 1, swap1, (nChan - 1)* sizeof(cmsUInt16Number));
+              *swap1 = _cmsFloat2Half(v);
+       }
+
+       if (T_PLANAR(info->OutputFormat))
+              return output + sizeof(cmsUInt16Number);
+       else
+              return output + (nChan + Extra) * sizeof(cmsUInt16Number);
 }
 
 
@@ -2904,50 +2888,47 @@
                                     cmsUInt8Number* output,
                                     cmsUInt32Number Stride)
 {
-    int nChan      = T_CHANNELS(info -> OutputFormat);
-    int DoSwap     = T_DOSWAP(info ->OutputFormat);
-    int Reverse    = T_FLAVOR(info ->OutputFormat);
-    int Extra      = T_EXTRA(info -> OutputFormat);
-    int SwapFirst  = T_SWAPFIRST(info -> OutputFormat);
-    int Planar     = T_PLANAR(info -> OutputFormat);
-    int ExtraFirst = DoSwap ^ SwapFirst;
-    cmsFloat32Number maximum = IsInkSpace(info ->OutputFormat) ? 100.0F : 1.0F;
-    cmsUInt16Number* swap1 = (cmsUInt16Number*) output;
-    cmsFloat32Number v = 0;
-    int i, start = 0;
-
-    if (ExtraFirst)
-        start = Extra;
-
-    for (i=0; i < nChan; i++) {
-
-        int index = DoSwap ? (nChan - i - 1) : i;
-
-        v = wOut[index] * maximum;
-
-        if (Reverse)
-            v = maximum - v;
-
-        if (Planar)
-            ((cmsUInt16Number*) output)[(i + start)* Stride]= _cmsFloat2Half( v );
-        else
-            ((cmsUInt16Number*) output)[i + start] = _cmsFloat2Half( v );
-    }
-
-    if (!ExtraFirst) {
-        output += Extra * sizeof(cmsUInt16Number);
-    }
-
-   if (Extra == 0 && SwapFirst) {
-
-         memmove(swap1 + 1, swap1, (nChan-1)* sizeof(cmsUInt16Number));
-        *swap1 = (cmsUInt16Number)  _cmsFloat2Half( v );
-    }
-
-    if (T_PLANAR(info -> OutputFormat))
-        return output + sizeof(cmsUInt16Number);
-    else
-        return output + nChan * sizeof(cmsUInt16Number);
+       int nChan = T_CHANNELS(info->OutputFormat);
+       int DoSwap = T_DOSWAP(info->OutputFormat);
+       int Reverse = T_FLAVOR(info->OutputFormat);
+       int Extra = T_EXTRA(info->OutputFormat);
+       int SwapFirst = T_SWAPFIRST(info->OutputFormat);
+       int Planar = T_PLANAR(info->OutputFormat);
+       int ExtraFirst = DoSwap ^ SwapFirst;
+       cmsFloat32Number maximum = IsInkSpace(info->OutputFormat) ? 100.0F : 1.0F;
+       cmsUInt16Number* swap1 = (cmsUInt16Number*)output;
+       cmsFloat32Number v = 0;
+       int i, start = 0;
+
+       if (ExtraFirst)
+              start = Extra;
+
+       for (i = 0; i < nChan; i++) {
+
+              int index = DoSwap ? (nChan - i - 1) : i;
+
+              v = wOut[index] * maximum;
+
+              if (Reverse)
+                     v = maximum - v;
+
+              if (Planar)
+                     ((cmsUInt16Number*)output)[(i + start)* Stride] = _cmsFloat2Half(v);
+              else
+                     ((cmsUInt16Number*)output)[i + start] = _cmsFloat2Half(v);
+       }
+
+
+       if (Extra == 0 && SwapFirst) {
+
+              memmove(swap1 + 1, swap1, (nChan - 1)* sizeof(cmsUInt16Number));
+              *swap1 = (cmsUInt16Number)_cmsFloat2Half(v);
+       }
+
+       if (T_PLANAR(info->OutputFormat))
+              return output + sizeof(cmsUInt16Number);
+       else
+              return output + (nChan + Extra)* sizeof(cmsUInt16Number);
 }
 
 #endif
--- a/jdk/src/java.desktop/share/native/liblcms/cmspcs.c	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/native/liblcms/cmspcs.c	Wed Jul 05 20:33:35 2017 +0200
@@ -135,6 +135,15 @@
     Dest -> Z = ((1 - Source -> x - Source -> y) / Source -> y) * Source -> Y;
 }
 
+/*
+       The break point (24/116)^3 = (6/29)^3 is a very small amount of tristimulus
+       primary (0.008856).  Generally, this only happens for
+       nearly ideal blacks and for some orange / amber colors in transmission mode.
+       For example, the Z value of the orange turn indicator lamp lens on an
+       automobile will often be below this value.  But the Z does not
+       contribute to the perceived color directly.
+*/
+
 static
 cmsFloat64Number f(cmsFloat64Number t)
 {
--- a/jdk/src/java.desktop/share/native/liblcms/cmsplugin.c	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/native/liblcms/cmsplugin.c	Wed Jul 05 20:33:35 2017 +0200
@@ -712,15 +712,21 @@
 
 
 // Internal: get the memory area associanted with each context client
-// Returns the block assigned to the specific zone.
+// Returns the block assigned to the specific zone. Never return NULL.
 void* _cmsContextGetClientChunk(cmsContext ContextID, _cmsMemoryClient mc)
 {
     struct _cmsContext_struct* ctx;
     void *ptr;
 
-    if (mc < 0 || mc >= MemoryClientMax) {
-        cmsSignalError(ContextID, cmsERROR_RANGE, "Bad context client");
-        return NULL;
+    if ((int) mc < 0 || mc >= MemoryClientMax) {
+
+           cmsSignalError(ContextID, cmsERROR_INTERNAL, "Bad context client -- possible corruption");
+
+           // This is catastrophic. Should never reach here
+           _cmsAssert(0);
+
+           // Reverts to global context
+           return globalContext.chunks[UserPtr];
     }
 
     ctx = _cmsGetContext(ContextID);
@@ -909,7 +915,7 @@
 }
 
 
-
+/*
 static
 struct _cmsContext_struct* FindPrev(struct _cmsContext_struct* id)
 {
@@ -926,6 +932,7 @@
 
     return NULL;  // List is empty or only one element!
 }
+*/
 
 // Frees any resources associated with the given context,
 // and destroys the context placeholder.
@@ -961,8 +968,8 @@
 
             // Search for previous
             for (prev = _cmsContextPoolHead;
-                prev != NULL;
-                prev = prev ->Next)
+                 prev != NULL;
+                 prev = prev ->Next)
             {
                 if (prev -> Next == ctx) {
                     prev -> Next = ctx ->Next;
--- a/jdk/src/java.desktop/share/native/liblcms/cmssamp.c	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/native/liblcms/cmssamp.c	Wed Jul 05 20:33:35 2017 +0200
@@ -30,7 +30,7 @@
 //---------------------------------------------------------------------------------
 //
 //  Little Color Management System
-//  Copyright (c) 1998-2010 Marti Maria Saguer
+//  Copyright (c) 1998-2014 Marti Maria Saguer
 //
 // Permission is hereby granted, free of charge, to any person obtaining
 // a copy of this software and associated documentation files (the "Software"),
@@ -369,28 +369,7 @@
 
 }
 
-/*
-static
-cmsBool IsMonotonic(int n, const cmsFloat64Number Table[])
-{
-    int i;
-    cmsFloat64Number last;
 
-    last = Table[n-1];
-
-    for (i = n-2; i >= 0; --i) {
-
-        if (Table[i] > last)
-
-            return FALSE;
-        else
-            last = Table[i];
-
-    }
-
-    return TRUE;
-}
-*/
 
 // Calculates the black point of a destination profile.
 // This algorithm comes from the Adobe paper disclosing its black point compensation method.
@@ -515,7 +494,6 @@
 
 
     // Test for mid range straight (only on relative colorimetric)
-
     NearlyStraightMidrange = TRUE;
     MinL = outRamp[0]; MaxL = outRamp[255];
     if (Intent == INTENT_RELATIVE_COLORIMETRIC) {
@@ -531,7 +509,6 @@
         // DestinationBlackPoint shall be the same as initialLab.
         // Otherwise, the DestinationBlackPoint shall be determined
         // using curve fitting.
-
         if (NearlyStraightMidrange) {
 
             cmsLab2XYZ(NULL, BlackPoint, &InitialLab);
@@ -543,14 +520,12 @@
 
     // curve fitting: The round-trip curve normally looks like a nearly constant section at the black point,
     // with a corner and a nearly straight line to the white point.
-
     for (l=0; l < 256; l++) {
 
         yRamp[l] = (outRamp[l] - MinL) / (MaxL - MinL);
     }
 
     // find the black point using the least squares error quadratic curve fitting
-
     if (Intent == INTENT_RELATIVE_COLORIMETRIC) {
         lo = 0.1;
         hi = 0.5;
--- a/jdk/src/java.desktop/share/native/liblcms/cmstypes.c	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/native/liblcms/cmstypes.c	Wed Jul 05 20:33:35 2017 +0200
@@ -1718,10 +1718,7 @@
                 else
                     for (j=0; j < 256; j++) {
 
-                        if (Tables != NULL)
-                            val = (cmsUInt8Number) FROM_16_TO_8(Tables->TheCurves[i]->Table16[j]);
-                        else
-                            val = (cmsUInt8Number) j;
+                        val = (cmsUInt8Number) FROM_16_TO_8(Tables->TheCurves[i]->Table16[j]);
 
                         if (!_cmsWriteUInt8Number(io, val)) return FALSE;
                     }
@@ -3548,7 +3545,6 @@
     if (n ->Desc == NULL) return NULL;
 
     ASCIIString = (char*) _cmsMalloc(self ->ContextID, SizeOfTag + 1);
-    if (ASCIIString == NULL) return NULL;
     if (io ->Read(io, ASCIIString, sizeof(char), SizeOfTag) != SizeOfTag) return NULL;
     ASCIIString[SizeOfTag] = 0;
     cmsMLUsetASCII(n ->Desc, cmsNoLanguage, cmsNoCountry, ASCIIString);
@@ -3576,7 +3572,6 @@
     // Now comes the text. The length is specified by the tag size
     TextSize = cmsMLUgetASCII(Value ->Desc, cmsNoLanguage, cmsNoCountry, NULL, 0);
     Text     = (char*) _cmsMalloc(self ->ContextID, TextSize);
-    if (Text == NULL) return FALSE;
     if (cmsMLUgetASCII(Value ->Desc, cmsNoLanguage, cmsNoCountry, Text, TextSize) != TextSize) return FALSE;
 
     if (!io ->Write(io, TextSize, Text)) return FALSE;
@@ -3674,7 +3669,6 @@
 
     TextSize = cmsMLUgetASCII(mlu, "PS", Section, NULL, 0);
     Text     = (char*) _cmsMalloc(self ->ContextID, TextSize);
-    if (Text == NULL) return FALSE;
 
     if (!_cmsWriteUInt32Number(io, TextSize)) return FALSE;
 
--- a/jdk/src/java.desktop/share/native/liblcms/cmsvirt.c	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/native/liblcms/cmsvirt.c	Wed Jul 05 20:33:35 2017 +0200
@@ -671,7 +671,7 @@
 // Create the ICC virtual profile for sRGB space
 cmsHPROFILE CMSEXPORT cmsCreate_sRGBProfileTHR(cmsContext ContextID)
 {
-       cmsCIExyY       D65;
+       cmsCIExyY       D65 = { 0.3127, 0.3290, 1.0 };
        cmsCIExyYTRIPLE Rec709Primaries = {
                                    {0.6400, 0.3300, 1.0},
                                    {0.3000, 0.6000, 1.0},
@@ -680,7 +680,7 @@
        cmsToneCurve* Gamma22[3];
        cmsHPROFILE  hsRGB;
 
-       cmsWhitePointFromTemp(&D65, 6504);
+      // cmsWhitePointFromTemp(&D65, 6504);
        Gamma22[0] = Gamma22[1] = Gamma22[2] = Build_sRGBGamma(ContextID);
        if (Gamma22[0] == NULL) return NULL;
 
@@ -708,6 +708,7 @@
                 cmsFloat64Number Contrast;
                 cmsFloat64Number Hue;
                 cmsFloat64Number Saturation;
+                cmsBool          lAdjustWP;
                 cmsCIEXYZ WPsrc, WPdest;
 
 } BCHSWADJUSTS, *LPBCHSWADJUSTS;
@@ -737,9 +738,10 @@
     cmsLCh2Lab(&LabOut, &LChOut);
 
     // Move white point in Lab
-
-    cmsLab2XYZ(&bchsw ->WPsrc,  &XYZ, &LabOut);
-    cmsXYZ2Lab(&bchsw ->WPdest, &LabOut, &XYZ);
+    if (bchsw->lAdjustWP) {
+           cmsLab2XYZ(&bchsw->WPsrc, &XYZ, &LabOut);
+           cmsXYZ2Lab(&bchsw->WPdest, &LabOut, &XYZ);
+    }
 
     // Back to encoded
 
@@ -773,18 +775,23 @@
     bchsw.Contrast   = Contrast;
     bchsw.Hue        = Hue;
     bchsw.Saturation = Saturation;
+    if (TempSrc == TempDest) {
 
-    cmsWhitePointFromTemp(&WhitePnt, TempSrc );
-    cmsxyY2XYZ(&bchsw.WPsrc, &WhitePnt);
+           bchsw.lAdjustWP = FALSE;
+    }
+    else {
+           bchsw.lAdjustWP = TRUE;
+           cmsWhitePointFromTemp(&WhitePnt, TempSrc);
+           cmsxyY2XYZ(&bchsw.WPsrc, &WhitePnt);
+           cmsWhitePointFromTemp(&WhitePnt, TempDest);
+           cmsxyY2XYZ(&bchsw.WPdest, &WhitePnt);
 
-    cmsWhitePointFromTemp(&WhitePnt, TempDest);
-    cmsxyY2XYZ(&bchsw.WPdest, &WhitePnt);
+    }
 
     hICC = cmsCreateProfilePlaceholder(ContextID);
     if (!hICC)                          // can't allocate
         return NULL;
 
-
     cmsSetDeviceClass(hICC,      cmsSigAbstractClass);
     cmsSetColorSpace(hICC,       cmsSigLabData);
     cmsSetPCS(hICC,              cmsSigLabData);
@@ -1017,12 +1024,14 @@
 
 } cmsAllowedLUT;
 
+#define cmsSig0 ((cmsTagSignature) 0)
+
 static const cmsAllowedLUT AllowedLUTTypes[] = {
 
-    { FALSE, 0,              cmsSigLut16Type,    4,  { cmsSigMatrixElemType,   cmsSigCurveSetElemType, cmsSigCLutElemType, cmsSigCurveSetElemType}},
-    { FALSE, 0,              cmsSigLut16Type,    3,  { cmsSigCurveSetElemType, cmsSigCLutElemType, cmsSigCurveSetElemType}},
-    { FALSE, 0,              cmsSigLut16Type,    2,  { cmsSigCurveSetElemType, cmsSigCLutElemType}},
-    { TRUE , 0,              cmsSigLutAtoBType,  1,  { cmsSigCurveSetElemType }},
+    { FALSE, cmsSig0,        cmsSigLut16Type, 4, { cmsSigMatrixElemType, cmsSigCurveSetElemType, cmsSigCLutElemType, cmsSigCurveSetElemType } },
+    { FALSE, cmsSig0,        cmsSigLut16Type, 3, { cmsSigCurveSetElemType, cmsSigCLutElemType, cmsSigCurveSetElemType } },
+    { FALSE, cmsSig0,        cmsSigLut16Type, 2, { cmsSigCurveSetElemType, cmsSigCLutElemType } },
+    { TRUE,  cmsSig0,        cmsSigLutAtoBType, 1, { cmsSigCurveSetElemType } },
     { TRUE , cmsSigAToB0Tag, cmsSigLutAtoBType,  3,  { cmsSigCurveSetElemType, cmsSigMatrixElemType, cmsSigCurveSetElemType } },
     { TRUE , cmsSigAToB0Tag, cmsSigLutAtoBType,  3,  { cmsSigCurveSetElemType, cmsSigCLutElemType, cmsSigCurveSetElemType   } },
     { TRUE , cmsSigAToB0Tag, cmsSigLutAtoBType,  5,  { cmsSigCurveSetElemType, cmsSigCLutElemType, cmsSigCurveSetElemType, cmsSigMatrixElemType, cmsSigCurveSetElemType }},
--- a/jdk/src/java.desktop/share/native/liblcms/cmsxform.c	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/native/liblcms/cmsxform.c	Wed Jul 05 20:33:35 2017 +0200
@@ -621,46 +621,48 @@
      _cmsTransformPluginChunkType* ctx = ( _cmsTransformPluginChunkType*) _cmsContextGetClientChunk(ContextID, TransformPlugin);
      _cmsTransformCollection* Plugin;
 
-    // Allocate needed memory
-    _cmsTRANSFORM* p = (_cmsTRANSFORM*) _cmsMallocZero(ContextID, sizeof(_cmsTRANSFORM));
-    if (!p) return NULL;
+       // Allocate needed memory
+       _cmsTRANSFORM* p = (_cmsTRANSFORM*)_cmsMallocZero(ContextID, sizeof(_cmsTRANSFORM));
+       if (!p) return NULL;
 
-    // Store the proposed pipeline
-    p ->Lut = lut;
+       // Store the proposed pipeline
+       p->Lut = lut;
 
-    // Let's see if any plug-in want to do the transform by itself
-    for (Plugin = ctx ->TransformCollection;
-        Plugin != NULL;
-        Plugin = Plugin ->Next) {
+       // Let's see if any plug-in want to do the transform by itself
+       if (p->Lut != NULL) {
 
-            if (Plugin ->Factory(&p->xform, &p->UserData, &p ->FreeUserData, &p ->Lut, InputFormat, OutputFormat, dwFlags)) {
+              for (Plugin = ctx->TransformCollection;
+                     Plugin != NULL;
+                     Plugin = Plugin->Next) {
 
-                // Last plugin in the declaration order takes control. We just keep
-                // the original parameters as a logging.
-                // Note that cmsFLAGS_CAN_CHANGE_FORMATTER is not set, so by default
-                // an optimized transform is not reusable. The plug-in can, however, change
-                // the flags and make it suitable.
+                     if (Plugin->Factory(&p->xform, &p->UserData, &p->FreeUserData, &p->Lut, InputFormat, OutputFormat, dwFlags)) {
 
-                p ->ContextID       = ContextID;
-                p ->InputFormat     = *InputFormat;
-                p ->OutputFormat    = *OutputFormat;
-                p ->dwOriginalFlags = *dwFlags;
+                            // Last plugin in the declaration order takes control. We just keep
+                            // the original parameters as a logging.
+                            // Note that cmsFLAGS_CAN_CHANGE_FORMATTER is not set, so by default
+                            // an optimized transform is not reusable. The plug-in can, however, change
+                            // the flags and make it suitable.
+
+                            p->ContextID = ContextID;
+                            p->InputFormat = *InputFormat;
+                            p->OutputFormat = *OutputFormat;
+                            p->dwOriginalFlags = *dwFlags;
 
-                // Fill the formatters just in case the optimized routine is interested.
-                // No error is thrown if the formatter doesn't exist. It is up to the optimization
-                // factory to decide what to do in those cases.
-                p ->FromInput      = _cmsGetFormatter(ContextID, *InputFormat,  cmsFormatterInput, CMS_PACK_FLAGS_16BITS).Fmt16;
-                p ->ToOutput       = _cmsGetFormatter(ContextID, *OutputFormat, cmsFormatterOutput, CMS_PACK_FLAGS_16BITS).Fmt16;
-                p ->FromInputFloat = _cmsGetFormatter(ContextID, *InputFormat,  cmsFormatterInput, CMS_PACK_FLAGS_FLOAT).FmtFloat;
-                p ->ToOutputFloat  = _cmsGetFormatter(ContextID, *OutputFormat, cmsFormatterOutput, CMS_PACK_FLAGS_FLOAT).FmtFloat;
+                            // Fill the formatters just in case the optimized routine is interested.
+                            // No error is thrown if the formatter doesn't exist. It is up to the optimization
+                            // factory to decide what to do in those cases.
+                            p->FromInput = _cmsGetFormatter(ContextID, *InputFormat, cmsFormatterInput, CMS_PACK_FLAGS_16BITS).Fmt16;
+                            p->ToOutput = _cmsGetFormatter(ContextID, *OutputFormat, cmsFormatterOutput, CMS_PACK_FLAGS_16BITS).Fmt16;
+                            p->FromInputFloat = _cmsGetFormatter(ContextID, *InputFormat, cmsFormatterInput, CMS_PACK_FLAGS_FLOAT).FmtFloat;
+                            p->ToOutputFloat = _cmsGetFormatter(ContextID, *OutputFormat, cmsFormatterOutput, CMS_PACK_FLAGS_FLOAT).FmtFloat;
 
-                return p;
-            }
-    }
+                            return p;
+                     }
+              }
 
-    // Not suitable for the transform plug-in, let's check  the pipeline plug-in
-    if (p ->Lut != NULL)
-        _cmsOptimizePipeline(ContextID, &p->Lut, Intent, InputFormat, OutputFormat, dwFlags);
+              // Not suitable for the transform plug-in, let's check  the pipeline plug-in
+              _cmsOptimizePipeline(ContextID, &p->Lut, Intent, InputFormat, OutputFormat, dwFlags);
+       }
 
     // Check whatever this is a true floating point transform
     if (_cmsFormatterIsFloat(*InputFormat) && _cmsFormatterIsFloat(*OutputFormat)) {
--- a/jdk/src/java.desktop/share/native/liblcms/lcms2.h	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/native/liblcms/lcms2.h	Wed Jul 05 20:33:35 2017 +0200
@@ -52,7 +52,7 @@
 //
 //---------------------------------------------------------------------------------
 //
-// Version 2.6
+// Version 2.7
 //
 
 #ifndef _lcms2_H
@@ -104,7 +104,7 @@
 #endif
 
 // Version/release
-#define LCMS_VERSION        2060
+#define LCMS_VERSION        2070
 
 // I will give the chance of redefining basic types for compilers that are not fully C99 compliant
 #ifndef CMS_BASIC_TYPES_ALREADY_DEFINED
@@ -213,27 +213,19 @@
 #   define CMS_USE_BIG_ENDIAN   1
 #endif
 
-#  ifdef TARGET_CPU_PPC
-#    if TARGET_CPU_PPC
-#      define CMS_USE_BIG_ENDIAN   1
-#    endif
-#  endif
 
 #if defined(__powerpc__) || defined(__ppc__) || defined(TARGET_CPU_PPC)
+#  if __powerpc__ || __ppc__ || TARGET_CPU_PPC
 #   define CMS_USE_BIG_ENDIAN   1
-#   if defined (__GNUC__) && defined(__BYTE_ORDER) && defined(__LITTLE_ENDIAN)
-#       if __BYTE_ORDER  == __LITTLE_ENDIAN
-//               // Don't use big endian for PowerPC little endian mode
+#   if defined (__GNUC__) && defined(__BYTE_ORDER__) && defined(__ORDER_LITTLE_ENDIAN__)
+#       if __BYTE_ORDER__  == __ORDER_LITTLE_ENDIAN__
+                // Don't use big endian for PowerPC little endian mode
 #                undef CMS_USE_BIG_ENDIAN
 #       endif
+#     endif
 #   endif
 #endif
 
-// WORDS_BIGENDIAN takes precedence
-#if defined(_HOST_BIG_ENDIAN) || defined(__BIG_ENDIAN__) || defined(WORDS_BIGENDIAN)
-#   define CMS_USE_BIG_ENDIAN      1
-#endif
-
 #ifdef macintosh
 # ifdef __BIG_ENDIAN__
 #   define CMS_USE_BIG_ENDIAN      1
@@ -243,6 +235,12 @@
 # endif
 #endif
 
+// WORDS_BIGENDIAN takes precedence
+#if defined(_HOST_BIG_ENDIAN) || defined(__BIG_ENDIAN__) || defined(WORDS_BIGENDIAN)
+#   define CMS_USE_BIG_ENDIAN      1
+#endif
+
+
 // Calling convention -- this is hardly platform and compiler dependent
 #ifdef CMS_IS_WINDOWS_
 #  if defined(CMS_DLL) || defined(CMS_DLL_BUILD)
@@ -553,7 +551,8 @@
     cmsSigLab2FloatPCS                  = 0x64326C20,  // 'd2l '
     cmsSigFloatPCS2Lab                  = 0x6C326420,  // 'l2d '
     cmsSigXYZ2FloatPCS                  = 0x64327820,  // 'd2x '
-    cmsSigFloatPCS2XYZ                  = 0x78326420   // 'x2d '
+    cmsSigFloatPCS2XYZ                  = 0x78326420,  // 'x2d '
+    cmsSigClipNegativesElemType         = 0x636c7020   // 'clp '
 
 } cmsStageSignature;
 
@@ -1031,6 +1030,10 @@
 
     } cmsICCViewingConditions;
 
+// Get LittleCMS version (for shared objects) -----------------------------------------------------------------------------
+
+CMSAPI int               CMSEXPORT cmsGetEncodedCMMversion(void);
+
 // Support of non-standard functions --------------------------------------------------------------------------------------
 
 CMSAPI int               CMSEXPORT cmsstrcasecmp(const char* s1, const char* s2);
@@ -1509,7 +1512,7 @@
 
 CMSAPI cmsUInt32Number   CMSEXPORT cmsChannelsOf(cmsColorSpaceSignature ColorSpace);
 
-// Build a suitable formatter for the colorspace of this profile
+// Build a suitable formatter for the colorspace of this profile. nBytes=1 means 8 bits, nBytes=2 means 16 bits.
 CMSAPI cmsUInt32Number   CMSEXPORT cmsFormatterForColorspaceOfProfile(cmsHPROFILE hProfile, cmsUInt32Number nBytes, cmsBool lIsFloat);
 CMSAPI cmsUInt32Number   CMSEXPORT cmsFormatterForPCSOfProfile(cmsHPROFILE hProfile, cmsUInt32Number nBytes, cmsBool lIsFloat);
 
@@ -1538,6 +1541,7 @@
 CMSAPI cmsIOHANDLER*     CMSEXPORT cmsOpenIOhandlerFromStream(cmsContext ContextID, FILE* Stream);
 CMSAPI cmsIOHANDLER*     CMSEXPORT cmsOpenIOhandlerFromMem(cmsContext ContextID, void *Buffer, cmsUInt32Number size, const char* AccessMode);
 CMSAPI cmsIOHANDLER*     CMSEXPORT cmsOpenIOhandlerFromNULL(cmsContext ContextID);
+CMSAPI cmsIOHANDLER*     CMSEXPORT cmsGetProfileIOhandler(cmsHPROFILE hProfile);
 CMSAPI cmsBool           CMSEXPORT cmsCloseIOhandler(cmsIOHANDLER* io);
 
 // MD5 message digest --------------------------------------------------------------------------------------------------
@@ -1672,6 +1676,10 @@
 #define cmsFLAGS_CLUT_POST_LINEARIZATION  0x0001    // create postlinearization tables if possible
 #define cmsFLAGS_CLUT_PRE_LINEARIZATION   0x0010    // create prelinearization tables if possible
 
+// Specific to unbounded mode
+#define cmsFLAGS_NONEGATIVES              0x8000    // Prevent negative numbers in floating point transforms
+
+
 // Fine-tune control over number of gridpoints
 #define cmsFLAGS_GRIDPOINTS(n)           (((n) & 0xFF) << 16)
 
--- a/jdk/src/java.desktop/share/native/liblcms/lcms2_internal.h	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/native/liblcms/lcms2_internal.h	Wed Jul 05 20:33:35 2017 +0200
@@ -223,11 +223,17 @@
 // Microsoft felt that it was necessary to keep it set at -1 for an unlocked critical
 // section, even when they changed the underlying algorithm to be more scalable.
 // The final parts of the critical section object are unimportant, and can be set
-// to zero for their defaults. This yields an initialization macro:
+// to zero for their defaults. This yields to an initialization macro:
 
 typedef CRITICAL_SECTION _cmsMutex;
 
-#define CMS_MUTEX_INITIALIZER {(void*) -1,-1,0,0,0,0}
+#define CMS_MUTEX_INITIALIZER {(PRTL_CRITICAL_SECTION_DEBUG) -1,-1,0,0,0,0}
+
+#ifdef _MSC_VER
+#    if (_MSC_VER >= 1800)
+#          pragma warning(disable : 26135)
+#    endif
+#endif
 
 cmsINLINE int _cmsLockPrimitive(_cmsMutex *m)
 {
@@ -313,38 +319,38 @@
 
 cmsINLINE int _cmsLockPrimitive(_cmsMutex *m)
 {
+    cmsUNUSED_PARAMETER(m);
         return 0;
-    cmsUNUSED_PARAMETER(m);
 }
 
 cmsINLINE int _cmsUnlockPrimitive(_cmsMutex *m)
 {
+    cmsUNUSED_PARAMETER(m);
         return 0;
-    cmsUNUSED_PARAMETER(m);
 }
 
 cmsINLINE int _cmsInitMutexPrimitive(_cmsMutex *m)
 {
+    cmsUNUSED_PARAMETER(m);
         return 0;
-    cmsUNUSED_PARAMETER(m);
 }
 
 cmsINLINE int _cmsDestroyMutexPrimitive(_cmsMutex *m)
 {
+    cmsUNUSED_PARAMETER(m);
         return 0;
-    cmsUNUSED_PARAMETER(m);
 }
 
 cmsINLINE int _cmsEnterCriticalSectionPrimitive(_cmsMutex *m)
 {
+    cmsUNUSED_PARAMETER(m);
         return 0;
-    cmsUNUSED_PARAMETER(m);
 }
 
 cmsINLINE int _cmsLeaveCriticalSectionPrimitive(_cmsMutex *m)
 {
+    cmsUNUSED_PARAMETER(m);
         return 0;
-    cmsUNUSED_PARAMETER(m);
 }
 #endif
 
@@ -852,6 +858,8 @@
 cmsStage*        _cmsStageNormalizeFromXyzFloat(cmsContext ContextID);
 cmsStage*        _cmsStageNormalizeToLabFloat(cmsContext ContextID);
 cmsStage*        _cmsStageNormalizeToXyzFloat(cmsContext ContextID);
+cmsStage*        _cmsStageClipNegatives(cmsContext ContextID, int nChannels);
+
 
 // For curve set only
 cmsToneCurve**     _cmsStageGetPtrToCurveSet(const cmsStage* mpe);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.desktop/share/native/libsplashscreen/giflib/COPYING	Wed Jul 05 20:33:35 2017 +0200
@@ -0,0 +1,19 @@
+The GIFLIB distribution is Copyright (c) 1997  Eric S. Raymond
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
--- a/jdk/src/java.desktop/share/native/libsplashscreen/giflib/dgif_lib.c	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/native/libsplashscreen/giflib/dgif_lib.c	Wed Jul 05 20:33:35 2017 +0200
@@ -23,219 +23,211 @@
  */
 
 /******************************************************************************
- *   "Gif-Lib" - Yet another gif library.
- *
- * Written by:  Gershon Elber            IBM PC Ver 1.1,    Aug. 1990
- ******************************************************************************
- * The kernel of the GIF Decoding process can be found here.
- ******************************************************************************
- * History:
- * 16 Jun 89 - Version 1.0 by Gershon Elber.
- *  3 Sep 90 - Version 1.1 by Gershon Elber (Support for Gif89, Unique names).
- *****************************************************************************/
+
+dgif_lib.c - GIF decoding
 
-/* !!!! */
+The functions here and in egif_lib.c are partitioned carefully so that
+if you only require one of read and write capability, only one of these
+two modules will be linked.  Preserve this property!
 
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
+*****************************************************************************/
 
 #include <stdlib.h>
-#if defined (__MSDOS__) && !defined(__DJGPP__) && !defined(__GNUC__)
-#include <io.h>
-#include <alloc.h>
-#include <sys\stat.h>
-#else
-#include <sys/types.h>
-#include <sys/stat.h>
-#endif /* __MSDOS__ */
+#include <limits.h>
+#include <stdint.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <string.h>
 
 #ifdef _WIN32
 #include <io.h>
-#define _OPEN_BINARY
 #else
 #include <unistd.h>
-#endif
+#endif /* _WIN32 */
 
-#include <fcntl.h>
-
-#include <stdio.h>
-#include <string.h>
 #include "gif_lib.h"
 #include "gif_lib_private.h"
 
-#define COMMENT_EXT_FUNC_CODE 0xfe  /* Extension function code for
-                                       comment. */
+/* compose unsigned little endian value */
+#define UNSIGNED_LITTLE_ENDIAN(lo, hi) ((lo) | ((hi) << 8))
 
 /* avoid extra function call in case we use fread (TVT) */
 #define READ(_gif,_buf,_len)                                     \
   (((GifFilePrivateType*)_gif->Private)->Read ?                   \
-    (size_t)((GifFilePrivateType*)_gif->Private)->Read(_gif,_buf,_len) : \
+    ((GifFilePrivateType*)_gif->Private)->Read(_gif,_buf,_len) : \
     fread(_buf,1,_len,((GifFilePrivateType*)_gif->Private)->File))
 
-static int DGifGetWord(GifFileType *GifFile, int *Word);
+static int DGifGetWord(GifFileType *GifFile, GifWord *Word);
 static int DGifSetupDecompress(GifFileType *GifFile);
 static int DGifDecompressLine(GifFileType *GifFile, GifPixelType *Line,
                               int LineLen);
-static int DGifGetPrefixChar(unsigned int *Prefix, int Code, int ClearCode);
+static int DGifGetPrefixChar(GifPrefixType *Prefix, int Code, int ClearCode);
 static int DGifDecompressInput(GifFileType *GifFile, int *Code);
 static int DGifBufferedInput(GifFileType *GifFile, GifByteType *Buf,
                              GifByteType *NextByte);
 
 /******************************************************************************
- * Open a new gif file for read, given by its name.
- * Returns GifFileType pointer dynamically allocated which serves as the gif
- * info record. _GifError is cleared if succesfull.
- *****************************************************************************/
+ Open a new GIF file for read, given by its name.
+ Returns dynamically allocated GifFileType pointer which serves as the GIF
+ info record.
+******************************************************************************/
 GifFileType *
-DGifOpenFileName(const char *FileName) {
+DGifOpenFileName(const char *FileName, int *Error)
+{
     int FileHandle;
     GifFileType *GifFile;
 
-    if ((FileHandle = open(FileName, O_RDONLY
-#if defined(__MSDOS__) || defined(_OPEN_BINARY)
-                           | O_BINARY
-#endif /* __MSDOS__ || _OPEN_BINARY */
-         )) == -1) {
-        _GifError = D_GIF_ERR_OPEN_FAILED;
+    if ((FileHandle = open(FileName, O_RDONLY)) == -1) {
+        if (Error != NULL)
+            *Error = D_GIF_ERR_OPEN_FAILED;
         return NULL;
     }
 
-    GifFile = DGifOpenFileHandle(FileHandle);
-    if (GifFile == (GifFileType *)NULL)
-        close(FileHandle);
+    GifFile = DGifOpenFileHandle(FileHandle, Error);
     return GifFile;
 }
 
 /******************************************************************************
- * Update a new gif file, given its file handle.
- * Returns GifFileType pointer dynamically allocated which serves as the gif
- * info record. _GifError is cleared if succesfull.
- *****************************************************************************/
+ Update a new GIF file, given its file handle.
+ Returns dynamically allocated GifFileType pointer which serves as the GIF
+ info record.
+******************************************************************************/
 GifFileType *
-DGifOpenFileHandle(int FileHandle) {
-
-    unsigned char Buf[GIF_STAMP_LEN + 1];
+DGifOpenFileHandle(int FileHandle, int *Error)
+{
+    char Buf[GIF_STAMP_LEN + 1];
     GifFileType *GifFile;
     GifFilePrivateType *Private;
     FILE *f;
 
     GifFile = (GifFileType *)malloc(sizeof(GifFileType));
     if (GifFile == NULL) {
-        _GifError = D_GIF_ERR_NOT_ENOUGH_MEM;
+        if (Error != NULL)
+            *Error = D_GIF_ERR_NOT_ENOUGH_MEM;
+        (void)close(FileHandle);
         return NULL;
     }
 
-    memset(GifFile, '\0', sizeof(GifFileType));
+    /*@i1@*/memset(GifFile, '\0', sizeof(GifFileType));
+
+    /* Belt and suspenders, in case the null pointer isn't zero */
+    GifFile->SavedImages = NULL;
+    GifFile->SColorMap = NULL;
 
     Private = (GifFilePrivateType *)malloc(sizeof(GifFilePrivateType));
     if (Private == NULL) {
-        _GifError = D_GIF_ERR_NOT_ENOUGH_MEM;
+        if (Error != NULL)
+            *Error = D_GIF_ERR_NOT_ENOUGH_MEM;
+        (void)close(FileHandle);
         free((char *)GifFile);
         return NULL;
     }
-#ifdef __MSDOS__
-    setmode(FileHandle, O_BINARY);    /* Make sure it is in binary mode. */
-#endif /* __MSDOS__ */
+#ifdef _WIN32
+    _setmode(FileHandle, O_BINARY);    /* Make sure it is in binary mode. */
+#endif /* _WIN32 */
 
     f = fdopen(FileHandle, "rb");    /* Make it into a stream: */
 
-#ifdef __MSDOS__
-    setvbuf(f, NULL, _IOFBF, GIF_FILE_BUFFER_SIZE);    /* And inc. stream
-                                                          buffer. */
-#endif /* __MSDOS__ */
-
-    GifFile->Private = (VoidPtr)Private;
+    /*@-mustfreeonly@*/
+    GifFile->Private = (void *)Private;
     Private->FileHandle = FileHandle;
     Private->File = f;
     Private->FileState = FILE_STATE_READ;
-    Private->Read = 0;    /* don't use alternate input method (TVT) */
-    GifFile->UserData = 0;    /* TVT */
+    Private->Read = NULL;        /* don't use alternate input method (TVT) */
+    GifFile->UserData = NULL;    /* TVT */
+    /*@=mustfreeonly@*/
 
-    /* Lets see if this is a GIF file: */
-    if (READ(GifFile, Buf, GIF_STAMP_LEN) != GIF_STAMP_LEN) {
-        _GifError = D_GIF_ERR_READ_FAILED;
-        fclose(f);
+    /* Let's see if this is a GIF file: */
+    /* coverity[check_return] */
+    if (READ(GifFile, (unsigned char *)Buf, GIF_STAMP_LEN) != GIF_STAMP_LEN) {
+        if (Error != NULL)
+            *Error = D_GIF_ERR_READ_FAILED;
+        (void)fclose(f);
         free((char *)Private);
         free((char *)GifFile);
         return NULL;
     }
 
-    /* The GIF Version number is ignored at this time. Maybe we should do
-     * something more useful with it.  */
+    /* Check for GIF prefix at start of file */
     Buf[GIF_STAMP_LEN] = 0;
-    if (strncmp(GIF_STAMP, (const char*)Buf, GIF_VERSION_POS) != 0) {
-        _GifError = D_GIF_ERR_NOT_GIF_FILE;
-        fclose(f);
+    if (strncmp(GIF_STAMP, Buf, GIF_VERSION_POS) != 0) {
+        if (Error != NULL)
+            *Error = D_GIF_ERR_NOT_GIF_FILE;
+        (void)fclose(f);
         free((char *)Private);
         free((char *)GifFile);
         return NULL;
     }
 
     if (DGifGetScreenDesc(GifFile) == GIF_ERROR) {
-        fclose(f);
+        (void)fclose(f);
         free((char *)Private);
         free((char *)GifFile);
         return NULL;
     }
 
-    _GifError = 0;
+    GifFile->Error = 0;
+
+    /* What version of GIF? */
+    Private->gif89 = (Buf[GIF_VERSION_POS] == '9');
 
     return GifFile;
 }
 
 /******************************************************************************
- * GifFileType constructor with user supplied input function (TVT)
- *****************************************************************************/
+ GifFileType constructor with user supplied input function (TVT)
+******************************************************************************/
 GifFileType *
-DGifOpen(void *userData,
-         InputFunc readFunc) {
-
-    unsigned char Buf[GIF_STAMP_LEN + 1];
+DGifOpen(void *userData, InputFunc readFunc, int *Error)
+{
+    char Buf[GIF_STAMP_LEN + 1];
     GifFileType *GifFile;
     GifFilePrivateType *Private;
 
-    if (!readFunc) {
-        _GifError = D_GIF_ERR_READ_FAILED;
-        return NULL;
-    }
-
     GifFile = (GifFileType *)malloc(sizeof(GifFileType));
     if (GifFile == NULL) {
-        _GifError = D_GIF_ERR_NOT_ENOUGH_MEM;
+        if (Error != NULL)
+            *Error = D_GIF_ERR_NOT_ENOUGH_MEM;
         return NULL;
     }
 
     memset(GifFile, '\0', sizeof(GifFileType));
 
+    /* Belt and suspenders, in case the null pointer isn't zero */
+    GifFile->SavedImages = NULL;
+    GifFile->SColorMap = NULL;
+
     Private = (GifFilePrivateType *)malloc(sizeof(GifFilePrivateType));
     if (!Private) {
-        _GifError = D_GIF_ERR_NOT_ENOUGH_MEM;
+        if (Error != NULL)
+            *Error = D_GIF_ERR_NOT_ENOUGH_MEM;
         free((char *)GifFile);
         return NULL;
     }
 
-    GifFile->Private = (VoidPtr)Private;
+    GifFile->Private = (void *)Private;
     Private->FileHandle = 0;
-    Private->File = 0;
+    Private->File = NULL;
     Private->FileState = FILE_STATE_READ;
 
     Private->Read = readFunc;    /* TVT */
     GifFile->UserData = userData;    /* TVT */
 
     /* Lets see if this is a GIF file: */
-    if (READ(GifFile, Buf, GIF_STAMP_LEN) != GIF_STAMP_LEN) {
-        _GifError = D_GIF_ERR_READ_FAILED;
+    /* coverity[check_return] */
+    if (READ(GifFile, (unsigned char *)Buf, GIF_STAMP_LEN) != GIF_STAMP_LEN) {
+        if (Error != NULL)
+            *Error = D_GIF_ERR_READ_FAILED;
         free((char *)Private);
         free((char *)GifFile);
         return NULL;
     }
 
-    /* The GIF Version number is ignored at this time. Maybe we should do
-     * something more useful with it. */
-    Buf[GIF_STAMP_LEN] = 0;
-    if (strncmp(GIF_STAMP, (const char*)Buf, GIF_VERSION_POS) != 0) {
-        _GifError = D_GIF_ERR_NOT_GIF_FILE;
+    /* Check for GIF prefix at start of file */
+    Buf[GIF_STAMP_LEN] = '\0';
+    if (strncmp(GIF_STAMP, Buf, GIF_VERSION_POS) != 0) {
+        if (Error != NULL)
+            *Error = D_GIF_ERR_NOT_GIF_FILE;
         free((char *)Private);
         free((char *)GifFile);
         return NULL;
@@ -244,28 +236,34 @@
     if (DGifGetScreenDesc(GifFile) == GIF_ERROR) {
         free((char *)Private);
         free((char *)GifFile);
+        if (Error != NULL)
+            *Error = D_GIF_ERR_NO_SCRN_DSCR;
         return NULL;
     }
 
-    _GifError = 0;
+    GifFile->Error = 0;
+
+    /* What version of GIF? */
+    Private->gif89 = (Buf[GIF_VERSION_POS] == '9');
 
     return GifFile;
 }
 
 /******************************************************************************
- * This routine should be called before any other DGif calls. Note that
- * this routine is called automatically from DGif file open routines.
- *****************************************************************************/
+ This routine should be called before any other DGif calls. Note that
+ this routine is called automatically from DGif file open routines.
+******************************************************************************/
 int
-DGifGetScreenDesc(GifFileType * GifFile) {
-
-    int i, BitsPerPixel;
+DGifGetScreenDesc(GifFileType *GifFile)
+{
+    int BitsPerPixel;
+    bool SortFlag;
     GifByteType Buf[3];
     GifFilePrivateType *Private = (GifFilePrivateType *)GifFile->Private;
 
     if (!IS_READABLE(Private)) {
         /* This file was NOT open for reading: */
-        _GifError = D_GIF_ERR_NOT_READABLE;
+        GifFile->Error = D_GIF_ERR_NOT_READABLE;
         return GIF_ERROR;
     }
 
@@ -275,25 +273,33 @@
         return GIF_ERROR;
 
     if (READ(GifFile, Buf, 3) != 3) {
-        _GifError = D_GIF_ERR_READ_FAILED;
+        GifFile->Error = D_GIF_ERR_READ_FAILED;
+        GifFreeMapObject(GifFile->SColorMap);
+        GifFile->SColorMap = NULL;
         return GIF_ERROR;
     }
     GifFile->SColorResolution = (((Buf[0] & 0x70) + 1) >> 4) + 1;
+    SortFlag = (Buf[0] & 0x08) != 0;
     BitsPerPixel = (Buf[0] & 0x07) + 1;
     GifFile->SBackGroundColor = Buf[1];
+    GifFile->AspectByte = Buf[2];
     if (Buf[0] & 0x80) {    /* Do we have global color map? */
+        int i;
 
-        GifFile->SColorMap = MakeMapObject(1 << BitsPerPixel, NULL);
+        GifFile->SColorMap = GifMakeMapObject(1 << BitsPerPixel, NULL);
         if (GifFile->SColorMap == NULL) {
-            _GifError = D_GIF_ERR_NOT_ENOUGH_MEM;
+            GifFile->Error = D_GIF_ERR_NOT_ENOUGH_MEM;
             return GIF_ERROR;
         }
 
         /* Get the global color map: */
+        GifFile->SColorMap->SortFlag = SortFlag;
         for (i = 0; i < GifFile->SColorMap->ColorCount; i++) {
+            /* coverity[check_return] */
             if (READ(GifFile, Buf, 3) != 3) {
-                FreeMapObject(GifFile->SColorMap);
-                _GifError = D_GIF_ERR_READ_FAILED;
+                GifFreeMapObject(GifFile->SColorMap);
+                GifFile->SColorMap = NULL;
+                GifFile->Error = D_GIF_ERR_READ_FAILED;
                 return GIF_ERROR;
             }
             GifFile->SColorMap->Colors[i].Red = Buf[0];
@@ -308,39 +314,39 @@
 }
 
 /******************************************************************************
- * This routine should be called before any attempt to read an image.
- *****************************************************************************/
+ This routine should be called before any attempt to read an image.
+******************************************************************************/
 int
-DGifGetRecordType(GifFileType * GifFile,
-                  GifRecordType * Type) {
-
+DGifGetRecordType(GifFileType *GifFile, GifRecordType* Type)
+{
     GifByteType Buf;
     GifFilePrivateType *Private = (GifFilePrivateType *)GifFile->Private;
 
     if (!IS_READABLE(Private)) {
         /* This file was NOT open for reading: */
-        _GifError = D_GIF_ERR_NOT_READABLE;
+        GifFile->Error = D_GIF_ERR_NOT_READABLE;
         return GIF_ERROR;
     }
 
+    /* coverity[check_return] */
     if (READ(GifFile, &Buf, 1) != 1) {
-        _GifError = D_GIF_ERR_READ_FAILED;
+        GifFile->Error = D_GIF_ERR_READ_FAILED;
         return GIF_ERROR;
     }
 
     switch (Buf) {
-      case ',':
+      case DESCRIPTOR_INTRODUCER:
           *Type = IMAGE_DESC_RECORD_TYPE;
           break;
-      case '!':
+      case EXTENSION_INTRODUCER:
           *Type = EXTENSION_RECORD_TYPE;
           break;
-      case ';':
+      case TERMINATOR_INTRODUCER:
           *Type = TERMINATE_RECORD_TYPE;
           break;
       default:
           *Type = UNDEFINED_RECORD_TYPE;
-          _GifError = D_GIF_ERR_WRONG_RECORD;
+          GifFile->Error = D_GIF_ERR_WRONG_RECORD;
           return GIF_ERROR;
     }
 
@@ -348,20 +354,20 @@
 }
 
 /******************************************************************************
- * This routine should be called before any attempt to read an image.
- * Note it is assumed the Image desc. header (',') has been read.
- *****************************************************************************/
+ This routine should be called before any attempt to read an image.
+ Note it is assumed the Image desc. header has been read.
+******************************************************************************/
 int
-DGifGetImageDesc(GifFileType * GifFile) {
-
-    int i, BitsPerPixel;
+DGifGetImageDesc(GifFileType *GifFile)
+{
+    unsigned int BitsPerPixel;
     GifByteType Buf[3];
     GifFilePrivateType *Private = (GifFilePrivateType *)GifFile->Private;
     SavedImage *sp;
 
     if (!IS_READABLE(Private)) {
         /* This file was NOT open for reading: */
-        _GifError = D_GIF_ERR_NOT_READABLE;
+        GifFile->Error = D_GIF_ERR_NOT_READABLE;
         return GIF_ERROR;
     }
 
@@ -371,51 +377,57 @@
         DGifGetWord(GifFile, &GifFile->Image.Height) == GIF_ERROR)
         return GIF_ERROR;
     if (READ(GifFile, Buf, 1) != 1) {
-        _GifError = D_GIF_ERR_READ_FAILED;
+        GifFile->Error = D_GIF_ERR_READ_FAILED;
+        GifFreeMapObject(GifFile->Image.ColorMap);
+        GifFile->Image.ColorMap = NULL;
         return GIF_ERROR;
     }
     BitsPerPixel = (Buf[0] & 0x07) + 1;
-    GifFile->Image.Interlace = (Buf[0] & 0x40);
-    if (Buf[0] & 0x80) {    /* Does this image have local color map? */
+    GifFile->Image.Interlace = (Buf[0] & 0x40) ? true : false;
 
-        /*** FIXME: Why do we check both of these in order to do this?
-         * Why do we have both Image and SavedImages? */
-        if (GifFile->Image.ColorMap && GifFile->SavedImages == NULL)
-            FreeMapObject(GifFile->Image.ColorMap);
+    /* Setup the colormap */
+    if (GifFile->Image.ColorMap) {
+        GifFreeMapObject(GifFile->Image.ColorMap);
+        GifFile->Image.ColorMap = NULL;
+    }
+    /* Does this image have local color map? */
+    if (Buf[0] & 0x80) {
+        unsigned int i;
 
-        GifFile->Image.ColorMap = MakeMapObject(1 << BitsPerPixel, NULL);
+        GifFile->Image.ColorMap = GifMakeMapObject(1 << BitsPerPixel, NULL);
         if (GifFile->Image.ColorMap == NULL) {
-            _GifError = D_GIF_ERR_NOT_ENOUGH_MEM;
+            GifFile->Error = D_GIF_ERR_NOT_ENOUGH_MEM;
             return GIF_ERROR;
         }
 
         /* Get the image local color map: */
         for (i = 0; i < GifFile->Image.ColorMap->ColorCount; i++) {
+            /* coverity[check_return] */
             if (READ(GifFile, Buf, 3) != 3) {
-                FreeMapObject(GifFile->Image.ColorMap);
-                _GifError = D_GIF_ERR_READ_FAILED;
+                GifFreeMapObject(GifFile->Image.ColorMap);
+                GifFile->Error = D_GIF_ERR_READ_FAILED;
+                GifFile->Image.ColorMap = NULL;
                 return GIF_ERROR;
             }
             GifFile->Image.ColorMap->Colors[i].Red = Buf[0];
             GifFile->Image.ColorMap->Colors[i].Green = Buf[1];
             GifFile->Image.ColorMap->Colors[i].Blue = Buf[2];
         }
-    } else if (GifFile->Image.ColorMap) {
-        FreeMapObject(GifFile->Image.ColorMap);
-        GifFile->Image.ColorMap = NULL;
     }
 
     if (GifFile->SavedImages) {
-        if ((GifFile->SavedImages = (SavedImage *)realloc(GifFile->SavedImages,
-                                      sizeof(SavedImage) *
-                                      (GifFile->ImageCount + 1))) == NULL) {
-            _GifError = D_GIF_ERR_NOT_ENOUGH_MEM;
+        SavedImage* new_saved_images =
+            (SavedImage *)realloc(GifFile->SavedImages,
+                            sizeof(SavedImage) * (GifFile->ImageCount + 1));
+        if (new_saved_images == NULL) {
+            GifFile->Error = D_GIF_ERR_NOT_ENOUGH_MEM;
             return GIF_ERROR;
         }
+        GifFile->SavedImages = new_saved_images;
     } else {
         if ((GifFile->SavedImages =
              (SavedImage *) malloc(sizeof(SavedImage))) == NULL) {
-            _GifError = D_GIF_ERR_NOT_ENOUGH_MEM;
+            GifFile->Error = D_GIF_ERR_NOT_ENOUGH_MEM;
             return GIF_ERROR;
         }
     }
@@ -423,11 +435,11 @@
     sp = &GifFile->SavedImages[GifFile->ImageCount];
     memcpy(&sp->ImageDesc, &GifFile->Image, sizeof(GifImageDesc));
     if (GifFile->Image.ColorMap != NULL) {
-        sp->ImageDesc.ColorMap = MakeMapObject(
+        sp->ImageDesc.ColorMap = GifMakeMapObject(
                                  GifFile->Image.ColorMap->ColorCount,
                                  GifFile->Image.ColorMap->Colors);
         if (sp->ImageDesc.ColorMap == NULL) {
-            _GifError = D_GIF_ERR_NOT_ENOUGH_MEM;
+            GifFile->Error = D_GIF_ERR_NOT_ENOUGH_MEM;
             return GIF_ERROR;
         }
     }
@@ -440,43 +452,40 @@
     Private->PixelCount = (long)GifFile->Image.Width *
        (long)GifFile->Image.Height;
 
-    return DGifSetupDecompress(GifFile);  /* Reset decompress algorithm parameters. */
+    /* Reset decompress algorithm parameters. */
+    return DGifSetupDecompress(GifFile);
 }
 
 /******************************************************************************
- * Get one full scanned line (Line) of length LineLen from GIF file.
- *****************************************************************************/
+ Get one full scanned line (Line) of length LineLen from GIF file.
+******************************************************************************/
 int
-DGifGetLine(GifFileType * GifFile,
-            GifPixelType * Line,
-            int LineLen) {
-
+DGifGetLine(GifFileType *GifFile, GifPixelType *Line, int LineLen)
+{
     GifByteType *Dummy;
     GifFilePrivateType *Private = (GifFilePrivateType *) GifFile->Private;
 
     if (!IS_READABLE(Private)) {
         /* This file was NOT open for reading: */
-        _GifError = D_GIF_ERR_NOT_READABLE;
+        GifFile->Error = D_GIF_ERR_NOT_READABLE;
         return GIF_ERROR;
     }
 
     if (!LineLen)
         LineLen = GifFile->Image.Width;
 
-#if defined(__MSDOS__) || defined(__GNUC__)
     if ((Private->PixelCount -= LineLen) > 0xffff0000UL) {
-#else
-    if ((Private->PixelCount -= LineLen) > 0xffff0000) {
-#endif /* __MSDOS__ */
-        _GifError = D_GIF_ERR_DATA_TOO_BIG;
+        GifFile->Error = D_GIF_ERR_DATA_TOO_BIG;
         return GIF_ERROR;
     }
 
     if (DGifDecompressLine(GifFile, Line, LineLen) == GIF_OK) {
         if (Private->PixelCount == 0) {
-            /* We probably would not be called any more, so lets clean
-             * everything before we return: need to flush out all rest of
-             * image until empty block (size 0) detected. We use GetCodeNext. */
+            /* We probably won't be called any more, so let's clean up
+             * everything before we return: need to flush out all the
+             * rest of image until an empty block (size 0)
+             * detected. We use GetCodeNext.
+             */
             do
                 if (DGifGetCodeNext(GifFile, &Dummy) == GIF_ERROR)
                     return GIF_ERROR;
@@ -488,35 +497,32 @@
 }
 
 /******************************************************************************
- * Put one pixel (Pixel) into GIF file.
- *****************************************************************************/
+ Put one pixel (Pixel) into GIF file.
+******************************************************************************/
 int
-DGifGetPixel(GifFileType * GifFile,
-             GifPixelType Pixel) {
-
+DGifGetPixel(GifFileType *GifFile, GifPixelType Pixel)
+{
     GifByteType *Dummy;
     GifFilePrivateType *Private = (GifFilePrivateType *) GifFile->Private;
 
     if (!IS_READABLE(Private)) {
         /* This file was NOT open for reading: */
-        _GifError = D_GIF_ERR_NOT_READABLE;
+        GifFile->Error = D_GIF_ERR_NOT_READABLE;
         return GIF_ERROR;
     }
-#if defined(__MSDOS__) || defined(__GNUC__)
     if (--Private->PixelCount > 0xffff0000UL)
-#else
-    if (--Private->PixelCount > 0xffff0000)
-#endif /* __MSDOS__ */
     {
-        _GifError = D_GIF_ERR_DATA_TOO_BIG;
+        GifFile->Error = D_GIF_ERR_DATA_TOO_BIG;
         return GIF_ERROR;
     }
 
     if (DGifDecompressLine(GifFile, &Pixel, 1) == GIF_OK) {
         if (Private->PixelCount == 0) {
-            /* We probably would not be called any more, so lets clean
-             * everything before we return: need to flush out all rest of
-             * image until empty block (size 0) detected. We use GetCodeNext. */
+            /* We probably won't be called any more, so let's clean up
+             * everything before we return: need to flush out all the
+             * rest of image until an empty block (size 0)
+             * detected. We use GetCodeNext.
+             */
             do
                 if (DGifGetCodeNext(GifFile, &Dummy) == GIF_ERROR)
                     return GIF_ERROR;
@@ -528,28 +534,27 @@
 }
 
 /******************************************************************************
- * Get an extension block (see GIF manual) from gif file. This routine only
- * returns the first data block, and DGifGetExtensionNext should be called
- * after this one until NULL extension is returned.
- * The Extension should NOT be freed by the user (not dynamically allocated).
- * Note it is assumed the Extension desc. header ('!') has been read.
- *****************************************************************************/
+ Get an extension block (see GIF manual) from GIF file. This routine only
+ returns the first data block, and DGifGetExtensionNext should be called
+ after this one until NULL extension is returned.
+ The Extension should NOT be freed by the user (not dynamically allocated).
+ Note it is assumed the Extension description header has been read.
+******************************************************************************/
 int
-DGifGetExtension(GifFileType * GifFile,
-                 int *ExtCode,
-                 GifByteType ** Extension) {
-
+DGifGetExtension(GifFileType *GifFile, int *ExtCode, GifByteType **Extension)
+{
     GifByteType Buf;
     GifFilePrivateType *Private = (GifFilePrivateType *)GifFile->Private;
 
     if (!IS_READABLE(Private)) {
         /* This file was NOT open for reading: */
-        _GifError = D_GIF_ERR_NOT_READABLE;
+        GifFile->Error = D_GIF_ERR_NOT_READABLE;
         return GIF_ERROR;
     }
 
+    /* coverity[check_return] */
     if (READ(GifFile, &Buf, 1) != 1) {
-        _GifError = D_GIF_ERR_READ_FAILED;
+        GifFile->Error = D_GIF_ERR_READ_FAILED;
         return GIF_ERROR;
     }
     *ExtCode = Buf;
@@ -558,26 +563,26 @@
 }
 
 /******************************************************************************
- * Get a following extension block (see GIF manual) from gif file. This
- * routine should be called until NULL Extension is returned.
- * The Extension should NOT be freed by the user (not dynamically allocated).
- *****************************************************************************/
+ Get a following extension block (see GIF manual) from GIF file. This
+ routine should be called until NULL Extension is returned.
+ The Extension should NOT be freed by the user (not dynamically allocated).
+******************************************************************************/
 int
-DGifGetExtensionNext(GifFileType * GifFile,
-                     GifByteType ** Extension) {
-
+DGifGetExtensionNext(GifFileType *GifFile, GifByteType ** Extension)
+{
     GifByteType Buf;
     GifFilePrivateType *Private = (GifFilePrivateType *)GifFile->Private;
 
     if (READ(GifFile, &Buf, 1) != 1) {
-        _GifError = D_GIF_ERR_READ_FAILED;
+        GifFile->Error = D_GIF_ERR_READ_FAILED;
         return GIF_ERROR;
     }
     if (Buf > 0) {
         *Extension = Private->Buf;    /* Use private unused buffer. */
         (*Extension)[0] = Buf;  /* Pascal strings notation (pos. 0 is len.). */
+        /* coverity[tainted_data,check_return] */
         if (READ(GifFile, &((*Extension)[1]), Buf) != Buf) {
-            _GifError = D_GIF_ERR_READ_FAILED;
+            GifFile->Error = D_GIF_ERR_READ_FAILED;
             return GIF_ERROR;
         }
     } else
@@ -587,91 +592,141 @@
 }
 
 /******************************************************************************
- * This routine should be called last, to close the GIF file.
- *****************************************************************************/
-int
-DGifCloseFile(GifFileType * GifFile) {
+ Extract a Graphics Control Block from raw extension data
+******************************************************************************/
+
+int DGifExtensionToGCB(const size_t GifExtensionLength,
+                       const GifByteType *GifExtension,
+                       GraphicsControlBlock *GCB)
+{
+    if (GifExtensionLength != 4) {
+        return GIF_ERROR;
+    }
+
+    GCB->DisposalMode = (GifExtension[0] >> 2) & 0x07;
+    GCB->UserInputFlag = (GifExtension[0] & 0x02) != 0;
+    GCB->DelayTime = UNSIGNED_LITTLE_ENDIAN(GifExtension[1], GifExtension[2]);
+    if (GifExtension[0] & 0x01)
+        GCB->TransparentColor = (int)GifExtension[3];
+    else
+        GCB->TransparentColor = NO_TRANSPARENT_COLOR;
+
+    return GIF_OK;
+}
+
+/******************************************************************************
+ Extract the Graphics Control Block for a saved image, if it exists.
+******************************************************************************/
+
+int DGifSavedExtensionToGCB(GifFileType *GifFile,
+                int ImageIndex, GraphicsControlBlock *GCB)
+{
+    int i;
+
+    if (ImageIndex < 0 || ImageIndex > GifFile->ImageCount - 1)
+        return GIF_ERROR;
 
-    GifFilePrivateType *Private;
-    FILE *File;
+    GCB->DisposalMode = DISPOSAL_UNSPECIFIED;
+    GCB->UserInputFlag = false;
+    GCB->DelayTime = 0;
+    GCB->TransparentColor = NO_TRANSPARENT_COLOR;
+
+    for (i = 0; i < GifFile->SavedImages[ImageIndex].ExtensionBlockCount; i++) {
+        ExtensionBlock *ep = &GifFile->SavedImages[ImageIndex].ExtensionBlocks[i];
+        if (ep->Function == GRAPHICS_EXT_FUNC_CODE)
+            return DGifExtensionToGCB(ep->ByteCount, ep->Bytes, GCB);
+    }
+
+    return GIF_ERROR;
+}
 
-    if (GifFile == NULL)
+/******************************************************************************
+ This routine should be called last, to close the GIF file.
+******************************************************************************/
+int
+DGifCloseFile(GifFileType *GifFile, int *ErrorCode)
+{
+    GifFilePrivateType *Private;
+
+    if (GifFile == NULL || GifFile->Private == NULL)
         return GIF_ERROR;
 
+    if (GifFile->Image.ColorMap) {
+        GifFreeMapObject(GifFile->Image.ColorMap);
+        GifFile->Image.ColorMap = NULL;
+    }
+
+    if (GifFile->SColorMap) {
+        GifFreeMapObject(GifFile->SColorMap);
+        GifFile->SColorMap = NULL;
+    }
+
+    if (GifFile->SavedImages) {
+        GifFreeSavedImages(GifFile);
+        GifFile->SavedImages = NULL;
+    }
+
+    GifFreeExtensions(&GifFile->ExtensionBlockCount, &GifFile->ExtensionBlocks);
+
     Private = (GifFilePrivateType *) GifFile->Private;
 
     if (!IS_READABLE(Private)) {
         /* This file was NOT open for reading: */
-        _GifError = D_GIF_ERR_NOT_READABLE;
+        if (ErrorCode != NULL)
+            *ErrorCode = D_GIF_ERR_NOT_READABLE;
+        free((char *)GifFile->Private);
+        free(GifFile);
         return GIF_ERROR;
     }
 
-    File = Private->File;
-
-    if (GifFile->Image.ColorMap) {
-        FreeMapObject(GifFile->Image.ColorMap);
-        GifFile->Image.ColorMap = NULL;
-    }
-
-    if (GifFile->SColorMap) {
-        FreeMapObject(GifFile->SColorMap);
-        GifFile->SColorMap = NULL;
+    if (Private->File && (fclose(Private->File) != 0)) {
+        if (ErrorCode != NULL)
+            *ErrorCode = D_GIF_ERR_CLOSE_FAILED;
+        free((char *)GifFile->Private);
+        free(GifFile);
+        return GIF_ERROR;
     }
 
-    if (Private) {
-        free((char *)Private);
-        Private = NULL;
-    }
-
-    if (GifFile->SavedImages) {
-        FreeSavedImages(GifFile);
-        GifFile->SavedImages = NULL;
-    }
-
+    free((char *)GifFile->Private);
     free(GifFile);
-
-    if (File && (fclose(File) != 0)) {
-        _GifError = D_GIF_ERR_CLOSE_FAILED;
-        return GIF_ERROR;
-    }
+    if (ErrorCode != NULL)
+        *ErrorCode = D_GIF_SUCCEEDED;
     return GIF_OK;
 }
 
 /******************************************************************************
- * Get 2 bytes (word) from the given file:
- *****************************************************************************/
+ Get 2 bytes (word) from the given file:
+******************************************************************************/
 static int
-DGifGetWord(GifFileType * GifFile,
-            int *Word) {
-
+DGifGetWord(GifFileType *GifFile, GifWord *Word)
+{
     unsigned char c[2];
 
+    /* coverity[check_return] */
     if (READ(GifFile, c, 2) != 2) {
-        _GifError = D_GIF_ERR_READ_FAILED;
+        GifFile->Error = D_GIF_ERR_READ_FAILED;
         return GIF_ERROR;
     }
 
-    *Word = (((unsigned int)c[1]) << 8) + c[0];
+    *Word = (GifWord)UNSIGNED_LITTLE_ENDIAN(c[0], c[1]);
     return GIF_OK;
 }
 
 /******************************************************************************
- * Get the image code in compressed form.  This routine can be called if the
- * information needed to be piped out as is. Obviously this is much faster
- * than decoding and encoding again. This routine should be followed by calls
- * to DGifGetCodeNext, until NULL block is returned.
- * The block should NOT be freed by the user (not dynamically allocated).
- *****************************************************************************/
+ Get the image code in compressed form.  This routine can be called if the
+ information needed to be piped out as is. Obviously this is much faster
+ than decoding and encoding again. This routine should be followed by calls
+ to DGifGetCodeNext, until NULL block is returned.
+ The block should NOT be freed by the user (not dynamically allocated).
+******************************************************************************/
 int
-DGifGetCode(GifFileType * GifFile,
-            int *CodeSize,
-            GifByteType ** CodeBlock) {
-
+DGifGetCode(GifFileType *GifFile, int *CodeSize, GifByteType **CodeBlock)
+{
     GifFilePrivateType *Private = (GifFilePrivateType *)GifFile->Private;
 
     if (!IS_READABLE(Private)) {
         /* This file was NOT open for reading: */
-        _GifError = D_GIF_ERR_NOT_READABLE;
+        GifFile->Error = D_GIF_ERR_NOT_READABLE;
         return GIF_ERROR;
     }
 
@@ -681,27 +736,30 @@
 }
 
 /******************************************************************************
- * Continue to get the image code in compressed form. This routine should be
- * called until NULL block is returned.
- * The block should NOT be freed by the user (not dynamically allocated).
- *****************************************************************************/
+ Continue to get the image code in compressed form. This routine should be
+ called until NULL block is returned.
+ The block should NOT be freed by the user (not dynamically allocated).
+******************************************************************************/
 int
-DGifGetCodeNext(GifFileType * GifFile,
-                GifByteType ** CodeBlock) {
-
+DGifGetCodeNext(GifFileType *GifFile, GifByteType **CodeBlock)
+{
     GifByteType Buf;
     GifFilePrivateType *Private = (GifFilePrivateType *)GifFile->Private;
 
+    /* coverity[tainted_data_argument] */
+    /* coverity[check_return] */
     if (READ(GifFile, &Buf, 1) != 1) {
-        _GifError = D_GIF_ERR_READ_FAILED;
+        GifFile->Error = D_GIF_ERR_READ_FAILED;
         return GIF_ERROR;
     }
 
+    /* coverity[lower_bounds] */
     if (Buf > 0) {
         *CodeBlock = Private->Buf;    /* Use private unused buffer. */
         (*CodeBlock)[0] = Buf;  /* Pascal strings notation (pos. 0 is len.). */
+        /* coverity[tainted_data] */
         if (READ(GifFile, &((*CodeBlock)[1]), Buf) != Buf) {
-            _GifError = D_GIF_ERR_READ_FAILED;
+            GifFile->Error = D_GIF_ERR_READ_FAILED;
             return GIF_ERROR;
         }
     } else {
@@ -714,20 +772,19 @@
 }
 
 /******************************************************************************
- * Setup the LZ decompression for this image:
- *****************************************************************************/
+ Setup the LZ decompression for this image:
+******************************************************************************/
 static int
-DGifSetupDecompress(GifFileType * GifFile) {
-
+DGifSetupDecompress(GifFileType *GifFile)
+{
     int i, BitsPerPixel;
     GifByteType CodeSize;
-    unsigned int *Prefix;
+    GifPrefixType *Prefix;
     GifFilePrivateType *Private = (GifFilePrivateType *)GifFile->Private;
 
-    READ(GifFile, &CodeSize, 1);    /* Read Code size from file. */
-    if (CodeSize >= 12) {
-        /* Invalid initial code size: report failure */
-        return GIF_ERROR;
+    /* coverity[check_return] */
+    if (READ(GifFile, &CodeSize, 1) < 1) {    /* Read Code size from file. */
+        return GIF_ERROR;    /* Failed to read Code size. */
     }
     BitsPerPixel = CodeSize;
 
@@ -751,20 +808,18 @@
 }
 
 /******************************************************************************
- * The LZ decompression routine:
- * This version decompress the given gif file into Line of length LineLen.
- * This routine can be called few times (one per scan line, for example), in
- * order the complete the whole image.
- *****************************************************************************/
+ The LZ decompression routine:
+ This version decompress the given GIF file into Line of length LineLen.
+ This routine can be called few times (one per scan line, for example), in
+ order the complete the whole image.
+******************************************************************************/
 static int
-DGifDecompressLine(GifFileType * GifFile,
-                   GifPixelType * Line,
-                   int LineLen) {
-
+DGifDecompressLine(GifFileType *GifFile, GifPixelType *Line, int LineLen)
+{
     int i = 0;
     int j, CrntCode, EOFCode, ClearCode, CrntPrefix, LastCode, StackPtr;
     GifByteType *Stack, *Suffix;
-    unsigned int *Prefix;
+    GifPrefixType *Prefix;
     GifFilePrivateType *Private = (GifFilePrivateType *) GifFile->Private;
 
     StackPtr = Private->StackPtr;
@@ -775,8 +830,12 @@
     ClearCode = Private->ClearCode;
     LastCode = Private->LastCode;
 
+    if (StackPtr > LZ_MAX_CODE) {
+        return GIF_ERROR;
+    }
+
     if (StackPtr != 0) {
-        /* Let pop the stack off before continueing to read the gif file: */
+        /* Let pop the stack off before continueing to read the GIF file: */
         while (StackPtr != 0 && i < LineLen)
             Line[i++] = Stack[--StackPtr];
     }
@@ -789,11 +848,8 @@
             /* Note however that usually we will not be here as we will stop
              * decoding as soon as we got all the pixel, or EOF code will
              * not be read at all, and DGifGetLine/Pixel clean everything.  */
-            if (i != LineLen - 1 || Private->PixelCount != 0) {
-                _GifError = D_GIF_ERR_EOF_TOO_SOON;
-                return GIF_ERROR;
-            }
-            i++;
+            GifFile->Error = D_GIF_ERR_EOF_TOO_SOON;
+            return GIF_ERROR;
         } else if (CrntCode == ClearCode) {
             /* We need to start over again: */
             for (j = 0; j <= LZ_MAX_CODE; j++)
@@ -815,36 +871,37 @@
                  * pixels on our stack. If we done, pop the stack in reverse
                  * (thats what stack is good for!) order to output.  */
                 if (Prefix[CrntCode] == NO_SUCH_CODE) {
+                    CrntPrefix = LastCode;
+
                     /* Only allowed if CrntCode is exactly the running code:
                      * In that case CrntCode = XXXCode, CrntCode or the
                      * prefix code is last code and the suffix char is
                      * exactly the prefix of last code! */
                     if (CrntCode == Private->RunningCode - 2) {
-                        CrntPrefix = LastCode;
                         Suffix[Private->RunningCode - 2] =
                            Stack[StackPtr++] = DGifGetPrefixChar(Prefix,
                                                                  LastCode,
                                                                  ClearCode);
                     } else {
-                        _GifError = D_GIF_ERR_IMAGE_DEFECT;
-                        return GIF_ERROR;
+                        Suffix[Private->RunningCode - 2] =
+                           Stack[StackPtr++] = DGifGetPrefixChar(Prefix,
+                                                                 CrntCode,
+                                                                 ClearCode);
                     }
                 } else
                     CrntPrefix = CrntCode;
 
-                /* Now (if image is O.K.) we should not get an NO_SUCH_CODE
-                 * During the trace. As we might loop forever, in case of
-                 * defective image, we count the number of loops we trace
-                 * and stop if we got LZ_MAX_CODE. obviously we can not
-                 * loop more than that.  */
-                j = 0;
-                while (j++ <= LZ_MAX_CODE &&
+                /* Now (if image is O.K.) we should not get a NO_SUCH_CODE
+                 * during the trace. As we might loop forever, in case of
+                 * defective image, we use StackPtr as loop counter and stop
+                 * before overflowing Stack[]. */
+                while (StackPtr < LZ_MAX_CODE &&
                        CrntPrefix > ClearCode && CrntPrefix <= LZ_MAX_CODE) {
                     Stack[StackPtr++] = Suffix[CrntPrefix];
                     CrntPrefix = Prefix[CrntPrefix];
                 }
-                if (j >= LZ_MAX_CODE || CrntPrefix > LZ_MAX_CODE) {
-                    _GifError = D_GIF_ERR_IMAGE_DEFECT;
+                if (StackPtr >= LZ_MAX_CODE || CrntPrefix > LZ_MAX_CODE) {
+                    GifFile->Error = D_GIF_ERR_IMAGE_DEFECT;
                     return GIF_ERROR;
                 }
                 /* Push the last character on stack: */
@@ -854,7 +911,7 @@
                 while (StackPtr != 0 && i < LineLen)
                     Line[i++] = Stack[--StackPtr];
             }
-            if (LastCode != NO_SUCH_CODE) {
+            if (LastCode != NO_SUCH_CODE && Prefix[Private->RunningCode - 2] == NO_SUCH_CODE) {
                 Prefix[Private->RunningCode - 2] = LastCode;
 
                 if (CrntCode == Private->RunningCode - 2) {
@@ -880,37 +937,38 @@
 }
 
 /******************************************************************************
- * Routine to trace the Prefixes linked list until we get a prefix which is
- * not code, but a pixel value (less than ClearCode). Returns that pixel value.
- * If image is defective, we might loop here forever, so we limit the loops to
- * the maximum possible if image O.k. - LZ_MAX_CODE times.
- *****************************************************************************/
+ Routine to trace the Prefixes linked list until we get a prefix which is
+ not code, but a pixel value (less than ClearCode). Returns that pixel value.
+ If image is defective, we might loop here forever, so we limit the loops to
+ the maximum possible if image O.k. - LZ_MAX_CODE times.
+******************************************************************************/
 static int
-DGifGetPrefixChar(unsigned int *Prefix,
-                  int Code,
-                  int ClearCode) {
-
+DGifGetPrefixChar(GifPrefixType *Prefix, int Code, int ClearCode)
+{
     int i = 0;
 
-    while (Code > ClearCode && i++ <= LZ_MAX_CODE)
+    while (Code > ClearCode && i++ <= LZ_MAX_CODE) {
+        if (Code > LZ_MAX_CODE) {
+            return NO_SUCH_CODE;
+        }
         Code = Prefix[Code];
+    }
     return Code;
 }
 
 /******************************************************************************
- * Interface for accessing the LZ codes directly. Set Code to the real code
- * (12bits), or to -1 if EOF code is returned.
- *****************************************************************************/
+ Interface for accessing the LZ codes directly. Set Code to the real code
+ (12bits), or to -1 if EOF code is returned.
+******************************************************************************/
 int
-DGifGetLZCodes(GifFileType * GifFile,
-               int *Code) {
-
+DGifGetLZCodes(GifFileType *GifFile, int *Code)
+{
     GifByteType *CodeBlock;
     GifFilePrivateType *Private = (GifFilePrivateType *)GifFile->Private;
 
     if (!IS_READABLE(Private)) {
         /* This file was NOT open for reading: */
-        _GifError = D_GIF_ERR_NOT_READABLE;
+        GifFile->Error = D_GIF_ERR_NOT_READABLE;
         return GIF_ERROR;
     }
 
@@ -936,32 +994,38 @@
 }
 
 /******************************************************************************
- * The LZ decompression input routine:
- * This routine is responsable for the decompression of the bit stream from
- * 8 bits (bytes) packets, into the real codes.
- * Returns GIF_OK if read succesfully.
- *****************************************************************************/
+ The LZ decompression input routine:
+ This routine is responsable for the decompression of the bit stream from
+ 8 bits (bytes) packets, into the real codes.
+ Returns GIF_OK if read successfully.
+******************************************************************************/
 static int
-DGifDecompressInput(GifFileType * GifFile,
-                    int *Code) {
-
-    GifFilePrivateType *Private = (GifFilePrivateType *)GifFile->Private;
-
-    GifByteType NextByte;
-    static unsigned int CodeMasks[] = {
+DGifDecompressInput(GifFileType *GifFile, int *Code)
+{
+    static const unsigned short CodeMasks[] = {
         0x0000, 0x0001, 0x0003, 0x0007,
         0x000f, 0x001f, 0x003f, 0x007f,
         0x00ff, 0x01ff, 0x03ff, 0x07ff,
         0x0fff
     };
 
+    GifFilePrivateType *Private = (GifFilePrivateType *)GifFile->Private;
+
+    GifByteType NextByte;
+
+    /* The image can't contain more than LZ_BITS per code. */
+    if (Private->RunningBits > LZ_BITS) {
+        GifFile->Error = D_GIF_ERR_IMAGE_DEFECT;
+        return GIF_ERROR;
+    }
+
     while (Private->CrntShiftState < Private->RunningBits) {
         /* Needs to get more bytes from input stream for next code: */
         if (DGifBufferedInput(GifFile, Private->Buf, &NextByte) == GIF_ERROR) {
             return GIF_ERROR;
         }
         Private->CrntShiftDWord |=
-           ((unsigned long)NextByte) << Private->CrntShiftState;
+            ((unsigned long)NextByte) << Private->CrntShiftState;
         Private->CrntShiftState += 8;
     }
     *Code = Private->CrntShiftDWord & CodeMasks[Private->RunningBits];
@@ -970,37 +1034,45 @@
     Private->CrntShiftState -= Private->RunningBits;
 
     /* If code cannot fit into RunningBits bits, must raise its size. Note
-     * however that codes above 4095 are used for special signaling.  */
-    if (++Private->RunningCode > Private->MaxCode1) {
-        if (Private->RunningBits < LZ_BITS) {
-            Private->MaxCode1 <<= 1;
-            Private->RunningBits++;
-        } else {
-            Private->RunningCode = Private->MaxCode1;
-        }
+     * however that codes above 4095 are used for special signaling.
+     * If we're using LZ_BITS bits already and we're at the max code, just
+     * keep using the table as it is, don't increment Private->RunningCode.
+     */
+    if (Private->RunningCode < LZ_MAX_CODE + 2 &&
+        ++Private->RunningCode > Private->MaxCode1 &&
+        Private->RunningBits < LZ_BITS) {
+        Private->MaxCode1 <<= 1;
+        Private->RunningBits++;
     }
     return GIF_OK;
 }
 
 /******************************************************************************
- * This routines read one gif data block at a time and buffers it internally
- * so that the decompression routine could access it.
- * The routine returns the next byte from its internal buffer (or read next
- * block in if buffer empty) and returns GIF_OK if succesful.
- *****************************************************************************/
+ This routines read one GIF data block at a time and buffers it internally
+ so that the decompression routine could access it.
+ The routine returns the next byte from its internal buffer (or read next
+ block in if buffer empty) and returns GIF_OK if succesful.
+******************************************************************************/
 static int
-DGifBufferedInput(GifFileType * GifFile,
-                  GifByteType * Buf,
-                  GifByteType * NextByte) {
-
+DGifBufferedInput(GifFileType *GifFile, GifByteType *Buf, GifByteType *NextByte)
+{
     if (Buf[0] == 0) {
         /* Needs to read the next buffer - this one is empty: */
+        /* coverity[check_return] */
         if (READ(GifFile, Buf, 1) != 1) {
-            _GifError = D_GIF_ERR_READ_FAILED;
+            GifFile->Error = D_GIF_ERR_READ_FAILED;
+            return GIF_ERROR;
+        }
+        /* There shouldn't be any empty data blocks here as the LZW spec
+         * says the LZW termination code should come first.  Therefore we
+         * shouldn't be inside this routine at that point.
+         */
+        if (Buf[0] == 0) {
+            GifFile->Error = D_GIF_ERR_IMAGE_DEFECT;
             return GIF_ERROR;
         }
         if (READ(GifFile, &Buf[1], Buf[0]) != Buf[0]) {
-            _GifError = D_GIF_ERR_READ_FAILED;
+            GifFile->Error = D_GIF_ERR_READ_FAILED;
             return GIF_ERROR;
         }
         *NextByte = Buf[1];
@@ -1015,21 +1087,21 @@
 }
 
 /******************************************************************************
- * This routine reads an entire GIF into core, hanging all its state info off
- * the GifFileType pointer.  Call DGifOpenFileName() or DGifOpenFileHandle()
- * first to initialize I/O.  Its inverse is EGifSpew().
- ******************************************************************************/
+ This routine reads an entire GIF into core, hanging all its state info off
+ the GifFileType pointer.  Call DGifOpenFileName() or DGifOpenFileHandle()
+ first to initialize I/O.  Its inverse is EGifSpew().
+*******************************************************************************/
 int
-DGifSlurp(GifFileType * GifFile) {
-
-    int ImageSize;
+DGifSlurp(GifFileType *GifFile)
+{
+    size_t ImageSize;
     GifRecordType RecordType;
     SavedImage *sp;
     GifByteType *ExtData;
-    SavedImage temp_save;
+    int ExtFunction;
 
-    temp_save.ExtensionBlocks = NULL;
-    temp_save.ExtensionBlockCount = 0;
+    GifFile->ExtensionBlocks = NULL;
+    GifFile->ExtensionBlockCount = 0;
 
     do {
         if (DGifGetRecordType(GifFile, &RecordType) == GIF_ERROR)
@@ -1041,44 +1113,77 @@
                   return (GIF_ERROR);
 
               sp = &GifFile->SavedImages[GifFile->ImageCount - 1];
+              /* Allocate memory for the image */
+              if (sp->ImageDesc.Width < 0 && sp->ImageDesc.Height < 0 &&
+                      sp->ImageDesc.Width > (INT_MAX / sp->ImageDesc.Height)) {
+                  return GIF_ERROR;
+              }
               ImageSize = sp->ImageDesc.Width * sp->ImageDesc.Height;
 
+              if (ImageSize > (SIZE_MAX / sizeof(GifPixelType))) {
+                  return GIF_ERROR;
+              }
               sp->RasterBits = (unsigned char *)malloc(ImageSize *
-                                                       sizeof(GifPixelType));
+                      sizeof(GifPixelType));
+
               if (sp->RasterBits == NULL) {
                   return GIF_ERROR;
               }
-              if (DGifGetLine(GifFile, sp->RasterBits, ImageSize) ==
-                  GIF_ERROR)
-                  return (GIF_ERROR);
-              if (temp_save.ExtensionBlocks) {
-                  sp->ExtensionBlocks = temp_save.ExtensionBlocks;
-                  sp->ExtensionBlockCount = temp_save.ExtensionBlockCount;
 
-                  temp_save.ExtensionBlocks = NULL;
-                  temp_save.ExtensionBlockCount = 0;
+              if (sp->ImageDesc.Interlace) {
+                  int i, j;
+                   /*
+                    * The way an interlaced image should be read -
+                    * offsets and jumps...
+                    */
+                  int InterlacedOffset[] = { 0, 4, 2, 1 };
+                  int InterlacedJumps[] = { 8, 8, 4, 2 };
+                  /* Need to perform 4 passes on the image */
+                  for (i = 0; i < 4; i++)
+                      for (j = InterlacedOffset[i];
+                       j < sp->ImageDesc.Height;
+                       j += InterlacedJumps[i]) {
+                      if (DGifGetLine(GifFile,
+                              sp->RasterBits+j*sp->ImageDesc.Width,
+                              sp->ImageDesc.Width) == GIF_ERROR)
+                          return GIF_ERROR;
+                      }
+              }
+              else {
+                  if (DGifGetLine(GifFile,sp->RasterBits,ImageSize)==GIF_ERROR)
+                      return (GIF_ERROR);
+              }
 
-                  /* FIXME: The following is wrong.  It is left in only for
-                   * backwards compatibility.  Someday it should go away. Use
-                   * the sp->ExtensionBlocks->Function variable instead. */
-                  sp->Function = sp->ExtensionBlocks[0].Function;
+              if (GifFile->ExtensionBlocks) {
+                  sp->ExtensionBlocks = GifFile->ExtensionBlocks;
+                  sp->ExtensionBlockCount = GifFile->ExtensionBlockCount;
+
+                  GifFile->ExtensionBlocks = NULL;
+                  GifFile->ExtensionBlockCount = 0;
               }
               break;
 
           case EXTENSION_RECORD_TYPE:
-              if (DGifGetExtension(GifFile, &temp_save.Function, &ExtData) ==
-                  GIF_ERROR)
+              if (DGifGetExtension(GifFile,&ExtFunction,&ExtData) == GIF_ERROR)
                   return (GIF_ERROR);
-              while (ExtData != NULL) {
-
-                  /* Create an extension block with our data */
-                  if (AddExtensionBlock(&temp_save, ExtData[0], &ExtData[1])
+              /* Create an extension block with our data */
+              if (ExtData != NULL) {
+                  if (GifAddExtensionBlock(&GifFile->ExtensionBlockCount,
+                               &GifFile->ExtensionBlocks,
+                               ExtFunction, ExtData[0], &ExtData[1])
                       == GIF_ERROR)
                       return (GIF_ERROR);
-
+              }
+              while (ExtData != NULL) {
                   if (DGifGetExtensionNext(GifFile, &ExtData) == GIF_ERROR)
                       return (GIF_ERROR);
-                  temp_save.Function = 0;
+                  /* Continue the extension block */
+                  if (ExtData != NULL)
+                      if (GifAddExtensionBlock(&GifFile->ExtensionBlockCount,
+                                   &GifFile->ExtensionBlocks,
+                                   CONTINUE_EXT_FUNC_CODE,
+                                   ExtData[0], &ExtData[1]) == GIF_ERROR)
+                              return (GIF_ERROR);
               }
               break;
 
@@ -1090,12 +1195,13 @@
         }
     } while (RecordType != TERMINATE_RECORD_TYPE);
 
-    /* Just in case the Gif has an extension block without an associated
-     * image... (Should we save this into a savefile structure with no image
-     * instead? Have to check if the present writing code can handle that as
-     * well.... */
-    if (temp_save.ExtensionBlocks)
-        FreeExtension(&temp_save);
+    /* Sanity check for corrupted file */
+    if (GifFile->ImageCount == 0) {
+        GifFile->Error = D_GIF_ERR_NO_IMAG_DSCR;
+        return(GIF_ERROR);
+    }
 
     return (GIF_OK);
 }
+
+/* end */
--- a/jdk/src/java.desktop/share/native/libsplashscreen/giflib/gif_err.c	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/native/libsplashscreen/giflib/gif_err.c	Wed Jul 05 20:33:35 2017 +0200
@@ -23,71 +23,81 @@
  */
 
 /*****************************************************************************
- *   "Gif-Lib" - Yet another gif library.
- *
- * Written by:  Gershon Elber            IBM PC Ver 0.1,    Jun. 1989
- *****************************************************************************
- * Handle error reporting for the GIF library.
- *****************************************************************************
- * History:
- * 17 Jun 89 - Version 1.0 by Gershon Elber.
- ****************************************************************************/
 
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
+gif_err.c - handle error reporting for the GIF library.
+
+****************************************************************************/
 
 #include <stdio.h>
+
 #include "gif_lib.h"
-
-int _GifError = 0;
+#include "gif_lib_private.h"
 
 /*****************************************************************************
- * Return the last GIF error (0 if none) and reset the error.
- ****************************************************************************/
-int
-GifLastError(void) {
-    int i = _GifError;
-
-    _GifError = 0;
+ Return a string description of  the last GIF error
+*****************************************************************************/
+const char *
+GifErrorString(int ErrorCode)
+{
+    const char *Err;
 
-    return i;
-}
-
-/*****************************************************************************
- * Print the last GIF error to stderr.
- ****************************************************************************/
-void
-PrintGifError(void) {
-    char *Err;
-
-    switch (_GifError) {
+    switch (ErrorCode) {
+      case E_GIF_ERR_OPEN_FAILED:
+        Err = "Failed to open given file";
+        break;
+      case E_GIF_ERR_WRITE_FAILED:
+        Err = "Failed to write to given file";
+        break;
+      case E_GIF_ERR_HAS_SCRN_DSCR:
+        Err = "Screen descriptor has already been set";
+        break;
+      case E_GIF_ERR_HAS_IMAG_DSCR:
+        Err = "Image descriptor is still active";
+        break;
+      case E_GIF_ERR_NO_COLOR_MAP:
+        Err = "Neither global nor local color map";
+        break;
+      case E_GIF_ERR_DATA_TOO_BIG:
+        Err = "Number of pixels bigger than width * height";
+        break;
+      case E_GIF_ERR_NOT_ENOUGH_MEM:
+        Err = "Failed to allocate required memory";
+        break;
+      case E_GIF_ERR_DISK_IS_FULL:
+        Err = "Write failed (disk full?)";
+        break;
+      case E_GIF_ERR_CLOSE_FAILED:
+        Err = "Failed to close given file";
+        break;
+      case E_GIF_ERR_NOT_WRITEABLE:
+        Err = "Given file was not opened for write";
+        break;
       case D_GIF_ERR_OPEN_FAILED:
         Err = "Failed to open given file";
         break;
       case D_GIF_ERR_READ_FAILED:
-        Err = "Failed to Read from given file";
+        Err = "Failed to read from given file";
         break;
       case D_GIF_ERR_NOT_GIF_FILE:
-        Err = "Given file is NOT GIF file";
+        Err = "Data is not in GIF format";
         break;
       case D_GIF_ERR_NO_SCRN_DSCR:
-        Err = "No Screen Descriptor detected";
+        Err = "No screen descriptor detected";
         break;
       case D_GIF_ERR_NO_IMAG_DSCR:
         Err = "No Image Descriptor detected";
         break;
       case D_GIF_ERR_NO_COLOR_MAP:
-        Err = "Neither Global Nor Local color map";
+        Err = "Neither global nor local color map";
         break;
       case D_GIF_ERR_WRONG_RECORD:
         Err = "Wrong record type detected";
         break;
       case D_GIF_ERR_DATA_TOO_BIG:
-        Err = "#Pixels bigger than Width * Height";
+        Err = "Number of pixels bigger than width * height";
         break;
       case D_GIF_ERR_NOT_ENOUGH_MEM:
-        Err = "Fail to allocate required memory";
+        Err = "Failed to allocate required memory";
         break;
       case D_GIF_ERR_CLOSE_FAILED:
         Err = "Failed to close given file";
@@ -99,14 +109,13 @@
         Err = "Image is defective, decoding aborted";
         break;
       case D_GIF_ERR_EOF_TOO_SOON:
-        Err = "Image EOF detected, before image complete";
+        Err = "Image EOF detected before image complete";
         break;
       default:
         Err = NULL;
         break;
     }
-    if (Err != NULL)
-        fprintf(stderr, "\nGIF-LIB error: %s.\n", Err);
-    else
-        fprintf(stderr, "\nGIF-LIB undefined error %d.\n", _GifError);
+    return Err;
 }
+
+/* end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.desktop/share/native/libsplashscreen/giflib/gif_hash.h	Wed Jul 05 20:33:35 2017 +0200
@@ -0,0 +1,62 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/******************************************************************************
+
+gif_hash.h - magfic constants and declarations for GIF LZW
+
+******************************************************************************/
+
+#ifndef _GIF_HASH_H_
+#define _GIF_HASH_H_
+
+#include <stdint.h>
+
+#define HT_SIZE         8192    /* 12bits = 4096 or twice as big! */
+#define HT_KEY_MASK     0x1FFF  /* 13bits keys */
+#define HT_KEY_NUM_BITS 13      /* 13bits keys */
+#define HT_MAX_KEY      8191    /* 13bits - 1, maximal code possible */
+#define HT_MAX_CODE     4095    /* Biggest code possible in 12 bits. */
+
+/* The 32 bits of the long are divided into two parts for the key & code:   */
+/* 1. The code is 12 bits as our compression algorithm is limited to 12bits */
+/* 2. The key is 12 bits Prefix code + 8 bit new char or 20 bits.           */
+/* The key is the upper 20 bits.  The code is the lower 12. */
+#define HT_GET_KEY(l)    (l >> 12)
+#define HT_GET_CODE(l)   (l & 0x0FFF)
+#define HT_PUT_KEY(l)    (l << 12)
+#define HT_PUT_CODE(l)   (l & 0x0FFF)
+
+typedef struct GifHashTableType {
+    uint32_t HTable[HT_SIZE];
+} GifHashTableType;
+
+GifHashTableType *_InitHashTable(void);
+void _ClearHashTable(GifHashTableType *HashTable);
+void _InsertHashTable(GifHashTableType *HashTable, uint32_t Key, int Code);
+int _ExistsHashTable(GifHashTableType *HashTable, uint32_t Key);
+
+#endif /* _GIF_HASH_H_ */
+
+/* end */
--- a/jdk/src/java.desktop/share/native/libsplashscreen/giflib/gif_lib.h	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/native/libsplashscreen/giflib/gif_lib.h	Wed Jul 05 20:33:35 2017 +0200
@@ -23,21 +23,10 @@
  */
 
 /******************************************************************************
- * In order to make life a little bit easier when using the GIF file format,
- * this library was written, and which does all the dirty work...
- *
- *                                        Written by Gershon Elber,  Jun. 1989
- *                                        Hacks by Eric S. Raymond,  Sep. 1992
- ******************************************************************************
- * History:
- * 14 Jun 89 - Version 1.0 by Gershon Elber.
- *  3 Sep 90 - Version 1.1 by Gershon Elber (Support for Gif89, Unique names)
- * 15 Sep 90 - Version 2.0 by Eric S. Raymond (Changes to suoport GIF slurp)
- * 26 Jun 96 - Version 3.0 by Eric S. Raymond (Full GIF89 support)
- * 17 Dec 98 - Version 4.0 by Toshio Kuratomi (Fix extension writing code)
- *****************************************************************************/
 
-/* all encoding functionality stripped */
+gif_lib.h - service library for decoding and encoding GIF images
+
+*****************************************************************************/
 
 #ifndef _GIF_LIB_H_
 #define _GIF_LIB_H_ 1
@@ -46,21 +35,21 @@
 extern "C" {
 #endif /* __cplusplus */
 
-#define GIF_LIB_VERSION " Version 4.1, "
+#define GIFLIB_MAJOR 5
+#define GIFLIB_MINOR 1
+#define GIFLIB_RELEASE 1
 
 #define GIF_ERROR   0
 #define GIF_OK      1
 
-#ifndef TRUE
-#define TRUE        1
-#endif /* TRUE */
-#ifndef FALSE
-#define FALSE       0
-#endif /* FALSE */
+#include <stddef.h>
 
-#ifndef NULL
-#define NULL        0
-#endif /* NULL */
+#ifdef bool
+#undef bool
+#endif
+typedef int bool;
+#define false 0
+#define true 1
 
 #define GIF_STAMP "GIFVER"          /* First chars in file - GIF stamp.  */
 #define GIF_STAMP_LEN sizeof(GIF_STAMP) - 1
@@ -68,21 +57,11 @@
 #define GIF87_STAMP "GIF87a"        /* First chars in file - GIF stamp.  */
 #define GIF89_STAMP "GIF89a"        /* First chars in file - GIF stamp.  */
 
-#define GIF_FILE_BUFFER_SIZE 16384  /* Files uses bigger buffers than usual. */
-
-typedef int GifBooleanType;
 typedef unsigned char GifPixelType;
 typedef unsigned char *GifRowType;
 typedef unsigned char GifByteType;
-
-#define GIF_MESSAGE(Msg) fprintf(stderr, "\n%s: %s\n", PROGRAM_NAME, Msg)
-#define GIF_EXIT(Msg)    { GIF_MESSAGE(Msg); exit(-3); }
-
-#ifdef SYSV
-#define VoidPtr char *
-#else
-#define VoidPtr void *
-#endif /* SYSV */
+typedef unsigned int GifPrefixType;
+typedef int GifWord;
 
 typedef struct GifColorType {
     GifByteType Red, Green, Blue;
@@ -91,27 +70,52 @@
 typedef struct ColorMapObject {
     int ColorCount;
     int BitsPerPixel;
+    bool SortFlag;
     GifColorType *Colors;    /* on malloc(3) heap */
 } ColorMapObject;
 
 typedef struct GifImageDesc {
-    int Left, Top, Width, Height,   /* Current image dimensions. */
-      Interlace;                    /* Sequential/Interlaced lines. */
-    ColorMapObject *ColorMap;       /* The local color map */
+    GifWord Left, Top, Width, Height;   /* Current image dimensions. */
+    bool Interlace;                     /* Sequential/Interlaced lines. */
+    ColorMapObject *ColorMap;           /* The local color map */
 } GifImageDesc;
 
+typedef struct ExtensionBlock {
+    int ByteCount;
+    GifByteType *Bytes; /* on malloc(3) heap */
+    int Function;       /* The block function code */
+#define CONTINUE_EXT_FUNC_CODE    0x00    /* continuation subblock */
+#define COMMENT_EXT_FUNC_CODE     0xfe    /* comment */
+#define GRAPHICS_EXT_FUNC_CODE    0xf9    /* graphics control (GIF89) */
+#define PLAINTEXT_EXT_FUNC_CODE   0x01    /* plaintext */
+#define APPLICATION_EXT_FUNC_CODE 0xff    /* application block */
+} ExtensionBlock;
+
+typedef struct SavedImage {
+    GifImageDesc ImageDesc;
+    GifByteType *RasterBits;         /* on malloc(3) heap */
+    int ExtensionBlockCount;         /* Count of extensions before image */
+    ExtensionBlock *ExtensionBlocks; /* Extensions before image */
+} SavedImage;
+
 typedef struct GifFileType {
-    int SWidth, SHeight,        /* Screen dimensions. */
-      SColorResolution,         /* How many colors can we generate? */
-      SBackGroundColor;         /* I hope you understand this one... */
-    ColorMapObject *SColorMap;  /* NULL if not exists. */
-    int ImageCount;             /* Number of current image */
-    GifImageDesc Image;         /* Block describing current image */
-    struct SavedImage *SavedImages; /* Use this to accumulate file state */
-    VoidPtr UserData;           /* hook to attach user data (TVT) */
-    VoidPtr Private;            /* Don't mess with this! */
+    GifWord SWidth, SHeight;         /* Size of virtual canvas */
+    GifWord SColorResolution;        /* How many colors can we generate? */
+    GifWord SBackGroundColor;        /* Background color for virtual canvas */
+    GifByteType AspectByte;          /* Used to compute pixel aspect ratio */
+    ColorMapObject *SColorMap;       /* Global colormap, NULL if nonexistent. */
+    int ImageCount;                  /* Number of current image (both APIs) */
+    GifImageDesc Image;              /* Current image (low-level API) */
+    SavedImage *SavedImages;         /* Image sequence (high-level API) */
+    int ExtensionBlockCount;         /* Count extensions past last image */
+    ExtensionBlock *ExtensionBlocks; /* Extensions past last image */
+    int Error;                       /* Last error condition reported */
+    void *UserData;                  /* hook to attach user data (TVT) */
+    void *Private;                   /* Don't mess with this! */
 } GifFileType;
 
+#define GIF_ASPECT_RATIO(n)    ((n)+15.0/64.0)
+
 typedef enum {
     UNDEFINED_RECORD_TYPE,
     SCREEN_DESC_RECORD_TYPE,
@@ -120,58 +124,95 @@
     TERMINATE_RECORD_TYPE   /* Begin with ';' */
 } GifRecordType;
 
-/* DumpScreen2Gif routine constants identify type of window/screen to dump.
- * Note all values below 1000 are reserved for the IBMPC different display
- * devices (it has many!) and are compatible with the numbering TC2.0
- * (Turbo C 2.0 compiler for IBM PC) gives to these devices.
- */
-typedef enum {
-    GIF_DUMP_SGI_WINDOW = 1000,
-    GIF_DUMP_X_WINDOW = 1001
-} GifScreenDumpType;
-
 /* func type to read gif data from arbitrary sources (TVT) */
 typedef int (*InputFunc) (GifFileType *, GifByteType *, int);
 
-/* func type to write gif data ro arbitrary targets.
+/* func type to write gif data to arbitrary targets.
  * Returns count of bytes written. (MRB)
  */
 typedef int (*OutputFunc) (GifFileType *, const GifByteType *, int);
 
 /******************************************************************************
- *  GIF89 extension function codes
+ GIF89 structures
 ******************************************************************************/
 
-#define COMMENT_EXT_FUNC_CODE     0xfe    /* comment */
-#define GRAPHICS_EXT_FUNC_CODE    0xf9    /* graphics control */
-#define PLAINTEXT_EXT_FUNC_CODE   0x01    /* plaintext */
-#define APPLICATION_EXT_FUNC_CODE 0xff    /* application block */
+typedef struct GraphicsControlBlock {
+    int DisposalMode;
+#define DISPOSAL_UNSPECIFIED      0       /* No disposal specified. */
+#define DISPOSE_DO_NOT            1       /* Leave image in place */
+#define DISPOSE_BACKGROUND        2       /* Set area too background color */
+#define DISPOSE_PREVIOUS          3       /* Restore to previous content */
+    bool UserInputFlag;      /* User confirmation required before disposal */
+    int DelayTime;           /* pre-display delay in 0.01sec units */
+    int TransparentColor;    /* Palette index for transparency, -1 if none */
+#define NO_TRANSPARENT_COLOR    -1
+} GraphicsControlBlock;
 
 /******************************************************************************
- * O.K., here are the routines one can access in order to decode GIF file:
- * (GIF_LIB file DGIF_LIB.C).
- *****************************************************************************/
+ GIF encoding routines
+******************************************************************************/
+
+/* Main entry points */
+GifFileType *EGifOpenFileName(const char *GifFileName,
+                              const bool GifTestExistence, int *Error);
+GifFileType *EGifOpenFileHandle(const int GifFileHandle, int *Error);
+GifFileType *EGifOpen(void *userPtr, OutputFunc writeFunc, int *Error);
+int EGifSpew(GifFileType * GifFile);
+const char *EGifGetGifVersion(GifFileType *GifFile); /* new in 5.x */
+int EGifCloseFile(GifFileType *GifFile, int *ErrorCode);
+
+#define E_GIF_SUCCEEDED          0
+#define E_GIF_ERR_OPEN_FAILED    1    /* And EGif possible errors. */
+#define E_GIF_ERR_WRITE_FAILED   2
+#define E_GIF_ERR_HAS_SCRN_DSCR  3
+#define E_GIF_ERR_HAS_IMAG_DSCR  4
+#define E_GIF_ERR_NO_COLOR_MAP   5
+#define E_GIF_ERR_DATA_TOO_BIG   6
+#define E_GIF_ERR_NOT_ENOUGH_MEM 7
+#define E_GIF_ERR_DISK_IS_FULL   8
+#define E_GIF_ERR_CLOSE_FAILED   9
+#define E_GIF_ERR_NOT_WRITEABLE  10
 
-GifFileType *DGifOpenFileName(const char *GifFileName);
-GifFileType *DGifOpenFileHandle(int GifFileHandle);
-GifFileType *DGifOpen(void *userPtr, InputFunc readFunc);    /* new one
-                                                             * (TVT) */
+/* These are legacy.  You probably do not want to call them directly */
+int EGifPutScreenDesc(GifFileType *GifFile,
+                      const int GifWidth, const int GifHeight,
+                      const int GifColorRes,
+                      const int GifBackGround,
+                      const ColorMapObject *GifColorMap);
+int EGifPutImageDesc(GifFileType *GifFile,
+                     const int GifLeft, const int GifTop,
+                     const int GifWidth, const int GifHeight,
+                     const bool GifInterlace,
+                     const ColorMapObject *GifColorMap);
+void EGifSetGifVersion(GifFileType *GifFile, const bool gif89);
+int EGifPutLine(GifFileType *GifFile, GifPixelType *GifLine,
+                int GifLineLen);
+int EGifPutPixel(GifFileType *GifFile, const GifPixelType GifPixel);
+int EGifPutComment(GifFileType *GifFile, const char *GifComment);
+int EGifPutExtensionLeader(GifFileType *GifFile, const int GifExtCode);
+int EGifPutExtensionBlock(GifFileType *GifFile,
+                         const int GifExtLen, const void *GifExtension);
+int EGifPutExtensionTrailer(GifFileType *GifFile);
+int EGifPutExtension(GifFileType *GifFile, const int GifExtCode,
+                     const int GifExtLen,
+                     const void *GifExtension);
+int EGifPutCode(GifFileType *GifFile, int GifCodeSize,
+                const GifByteType *GifCodeBlock);
+int EGifPutCodeNext(GifFileType *GifFile,
+                    const GifByteType *GifCodeBlock);
+
+/******************************************************************************
+ GIF decoding routines
+******************************************************************************/
+
+/* Main entry points */
+GifFileType *DGifOpenFileName(const char *GifFileName, int *Error);
+GifFileType *DGifOpenFileHandle(int GifFileHandle, int *Error);
 int DGifSlurp(GifFileType * GifFile);
-int DGifGetScreenDesc(GifFileType * GifFile);
-int DGifGetRecordType(GifFileType * GifFile, GifRecordType * GifType);
-int DGifGetImageDesc(GifFileType * GifFile);
-int DGifGetLine(GifFileType * GifFile, GifPixelType * GifLine, int GifLineLen);
-int DGifGetPixel(GifFileType * GifFile, GifPixelType GifPixel);
-int DGifGetComment(GifFileType * GifFile, char *GifComment);
-int DGifGetExtension(GifFileType * GifFile, int *GifExtCode,
-                     GifByteType ** GifExtension);
-int DGifGetExtensionNext(GifFileType * GifFile, GifByteType ** GifExtension);
-int DGifGetCode(GifFileType * GifFile, int *GifCodeSize,
-                GifByteType ** GifCodeBlock);
-int DGifGetCodeNext(GifFileType * GifFile, GifByteType ** GifCodeBlock);
-int DGifGetLZCodes(GifFileType * GifFile, int *GifCode);
-int DGifCloseFile(GifFileType * GifFile);
+GifFileType *DGifOpen(void *userPtr, InputFunc readFunc, int *Error);    /* new one (TVT) */
+    int DGifCloseFile(GifFileType * GifFile, int *ErrorCode);
 
+#define D_GIF_SUCCEEDED          0
 #define D_GIF_ERR_OPEN_FAILED    101    /* And DGif possible errors. */
 #define D_GIF_ERR_READ_FAILED    102
 #define D_GIF_ERR_NOT_GIF_FILE   103
@@ -186,68 +227,113 @@
 #define D_GIF_ERR_IMAGE_DEFECT   112
 #define D_GIF_ERR_EOF_TOO_SOON   113
 
+/* These are legacy.  You probably do not want to call them directly */
+int DGifGetScreenDesc(GifFileType *GifFile);
+int DGifGetRecordType(GifFileType *GifFile, GifRecordType *GifType);
+int DGifGetImageDesc(GifFileType *GifFile);
+int DGifGetLine(GifFileType *GifFile, GifPixelType *GifLine, int GifLineLen);
+int DGifGetPixel(GifFileType *GifFile, GifPixelType GifPixel);
+int DGifGetComment(GifFileType *GifFile, char *GifComment);
+int DGifGetExtension(GifFileType *GifFile, int *GifExtCode,
+                     GifByteType **GifExtension);
+int DGifGetExtensionNext(GifFileType *GifFile, GifByteType **GifExtension);
+int DGifGetCode(GifFileType *GifFile, int *GifCodeSize,
+                GifByteType **GifCodeBlock);
+int DGifGetCodeNext(GifFileType *GifFile, GifByteType **GifCodeBlock);
+int DGifGetLZCodes(GifFileType *GifFile, int *GifCode);
 
-/******************************************************************************
- * O.K., here are the routines from GIF_LIB file GIF_ERR.C.
-******************************************************************************/
-extern void PrintGifError(void);
-extern int GifLastError(void);
 
 /******************************************************************************
- * O.K., here are the routines from GIF_LIB file DEV2GIF.C.
+ Color table quantization (deprecated)
 ******************************************************************************/
-extern int DumpScreen2Gif(const char *FileName,
-                          int ReqGraphDriver,
-                          long ReqGraphMode1,
-                          long ReqGraphMode2,
-                          long ReqGraphMode3);
+int GifQuantizeBuffer(unsigned int Width, unsigned int Height,
+                   int *ColorMapSize, GifByteType * RedInput,
+                   GifByteType * GreenInput, GifByteType * BlueInput,
+                   GifByteType * OutputBuffer,
+                   GifColorType * OutputColorMap);
+
+/******************************************************************************
+ Error handling and reporting.
+******************************************************************************/
+extern const char *GifErrorString(int ErrorCode);     /* new in 2012 - ESR */
 
 /*****************************************************************************
- *
- * Everything below this point is new after version 1.2, supporting `slurp
- * mode' for doing I/O in two big belts with all the image-bashing in core.
- *
- *****************************************************************************/
+ Everything below this point is new after version 1.2, supporting `slurp
+ mode' for doing I/O in two big belts with all the image-bashing in core.
+******************************************************************************/
+
+/******************************************************************************
+ Color map handling from gif_alloc.c
+******************************************************************************/
+
+extern ColorMapObject *GifMakeMapObject(int ColorCount,
+                                     const GifColorType *ColorMap);
+extern void GifFreeMapObject(ColorMapObject *Object);
+extern ColorMapObject *GifUnionColorMap(const ColorMapObject *ColorIn1,
+                                     const ColorMapObject *ColorIn2,
+                                     GifPixelType ColorTransIn2[]);
+extern int GifBitSize(int n);
 
 /******************************************************************************
- * Color Map handling from ALLOCGIF.C
- *****************************************************************************/
+ Support for the in-core structures allocation (slurp mode).
+******************************************************************************/
 
-extern ColorMapObject *MakeMapObject(int ColorCount,
-                                     const GifColorType * ColorMap);
-extern void FreeMapObject(ColorMapObject * Object);
-extern int BitSize(int n);
+extern void GifApplyTranslation(SavedImage *Image, GifPixelType Translation[]);
+extern int GifAddExtensionBlock(int *ExtensionBlock_Count,
+                                ExtensionBlock **ExtensionBlocks,
+                                int Function,
+                                unsigned int Len, unsigned char ExtData[]);
+extern void GifFreeExtensions(int *ExtensionBlock_Count,
+                              ExtensionBlock **ExtensionBlocks);
+extern SavedImage *GifMakeSavedImage(GifFileType *GifFile,
+                                  const SavedImage *CopyFrom);
+extern void GifFreeSavedImages(GifFileType *GifFile);
 
 /******************************************************************************
- * Support for the in-core structures allocation (slurp mode).
- *****************************************************************************/
+ 5.x functions for GIF89 graphics control blocks
+******************************************************************************/
+
+int DGifExtensionToGCB(const size_t GifExtensionLength,
+                       const GifByteType *GifExtension,
+                       GraphicsControlBlock *GCB);
+size_t EGifGCBToExtension(const GraphicsControlBlock *GCB,
+                          GifByteType *GifExtension);
 
-/* This is the in-core version of an extension record */
-typedef struct {
-    int ByteCount;
-    char *Bytes;    /* on malloc(3) heap */
-    int Function;   /* Holds the type of the Extension block. */
-} ExtensionBlock;
+int DGifSavedExtensionToGCB(GifFileType *GifFile,
+                            int ImageIndex,
+                            GraphicsControlBlock *GCB);
+int EGifGCBToSavedExtension(const GraphicsControlBlock *GCB,
+                            GifFileType *GifFile,
+                            int ImageIndex);
+
+/******************************************************************************
+ The library's internal utility font
+******************************************************************************/
 
-/* This holds an image header, its unpacked raster bits, and extensions */
-typedef struct SavedImage {
-    GifImageDesc ImageDesc;
-    unsigned char *RasterBits;  /* on malloc(3) heap */
-    int Function;   /* DEPRECATED: Use ExtensionBlocks[x].Function instead */
-    int ExtensionBlockCount;
-    ExtensionBlock *ExtensionBlocks;    /* on malloc(3) heap */
-} SavedImage;
+#define GIF_FONT_WIDTH  8
+#define GIF_FONT_HEIGHT 8
+extern const unsigned char GifAsciiTable8x8[][GIF_FONT_WIDTH];
+
+extern void GifDrawText8x8(SavedImage *Image,
+                     const int x, const int y,
+                     const char *legend, const int color);
 
-extern void MakeExtension(SavedImage * New, int Function);
-extern int AddExtensionBlock(SavedImage * New, int Len,
-                             unsigned char ExtData[]);
-extern void FreeExtension(SavedImage * Image);
-extern SavedImage *MakeSavedImage(GifFileType * GifFile,
-                                  const SavedImage * CopyFrom);
-extern void FreeSavedImages(GifFileType * GifFile);
+extern void GifDrawBox(SavedImage *Image,
+                    const int x, const int y,
+                    const int w, const int d, const int color);
 
+extern void GifDrawRectangle(SavedImage *Image,
+                   const int x, const int y,
+                   const int w, const int d, const int color);
+
+extern void GifDrawBoxedText8x8(SavedImage *Image,
+                          const int x, const int y,
+                          const char *legend,
+                          const int border, const int bg, const int fg);
 
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */
 #endif /* _GIF_LIB_H */
+
+/* end */
--- a/jdk/src/java.desktop/share/native/libsplashscreen/giflib/gif_lib_private.h	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/native/libsplashscreen/giflib/gif_lib_private.h	Wed Jul 05 20:33:35 2017 +0200
@@ -22,21 +22,21 @@
  * questions.
  */
 
+/****************************************************************************
+
+gif_lib_private.h - internal giflib routines and structures
+
+****************************************************************************/
+
 #ifndef _GIF_LIB_PRIVATE_H
 #define _GIF_LIB_PRIVATE_H
 
 #include "gif_lib.h"
-
-#define PROGRAM_NAME "LIBUNGIF"
+#include "gif_hash.h"
 
-#ifdef SYSV
-#define VersionStr "Gif library module,\t\tEric S. Raymond\n\
-                    (C) Copyright 1997 Eric S. Raymond\n"
-#else
-#define VersionStr PROGRAM_NAME "    IBMPC " GIF_LIB_VERSION \
-                    "    Eric S. Raymond,    " __DATE__ ",   " \
-                    __TIME__ "\n" "(C) Copyright 1997 Eric S. Raymond\n"
-#endif /* SYSV */
+#define EXTENSION_INTRODUCER      0x21
+#define DESCRIPTOR_INTRODUCER     0x2c
+#define TERMINATOR_INTRODUCER     0x3b
 
 #define LZ_MAX_CODE         4095    /* Biggest code possible in 12 bits. */
 #define LZ_BITS             12
@@ -54,7 +54,7 @@
 #define IS_WRITEABLE(Private)   (Private->FileState & FILE_STATE_WRITE)
 
 typedef struct GifFilePrivateType {
-    int FileState, FileHandle,  /* Where all this data goes to! */
+    GifWord FileState, FileHandle,  /* Where all this data goes to! */
       BitsPerPixel,     /* Bits per pixel (Codes uses at least this + 1). */
       ClearCode,   /* The CLEAR LZ code. */
       EOFCode,     /* The EOF LZ code. */
@@ -73,9 +73,11 @@
     GifByteType Buf[256];   /* Compressed input is buffered here. */
     GifByteType Stack[LZ_MAX_CODE]; /* Decoded pixels are stacked here. */
     GifByteType Suffix[LZ_MAX_CODE + 1];    /* So we can trace the codes. */
-    unsigned int Prefix[LZ_MAX_CODE + 1];
+    GifPrefixType Prefix[LZ_MAX_CODE + 1];
+    GifHashTableType *HashTable;
+    bool gif89;
 } GifFilePrivateType;
 
-extern int _GifError;
+#endif /* _GIF_LIB_PRIVATE_H */
 
-#endif /* _GIF_LIB_PRIVATE_H */
+/* end */
--- a/jdk/src/java.desktop/share/native/libsplashscreen/giflib/gifalloc.c	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/native/libsplashscreen/giflib/gifalloc.c	Wed Jul 05 20:33:35 2017 +0200
@@ -23,36 +23,27 @@
  */
 
 /*****************************************************************************
- *   "Gif-Lib" - Yet another gif library.
- *
- * Written by:  Gershon Elber                Ver 0.1, Jun. 1989
- * Extensively hacked by: Eric S. Raymond        Ver 1.?, Sep 1992
- *****************************************************************************
- * GIF construction tools
- *****************************************************************************
- * History:
- * 15 Sep 92 - Version 1.0 by Eric Raymond.
- ****************************************************************************/
 
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
+ GIF construction tools
+
+****************************************************************************/
 
 #include <stdlib.h>
 #include <stdio.h>
 #include <string.h>
+
 #include "gif_lib.h"
 
 #define MAX(x, y)    (((x) > (y)) ? (x) : (y))
 
 /******************************************************************************
- * Miscellaneous utility functions
- *****************************************************************************/
+ Miscellaneous utility functions
+******************************************************************************/
 
 /* return smallest bitfield size n will fit in */
 int
-BitSize(int n) {
-
+GifBitSize(int n)
+{
     register int i;
 
     for (i = 1; i <= 8; i++)
@@ -62,22 +53,21 @@
 }
 
 /******************************************************************************
- * Color map object functions
- *****************************************************************************/
+  Color map object functions
+******************************************************************************/
 
 /*
  * Allocate a color map of given size; initialize with contents of
  * ColorMap if that pointer is non-NULL.
  */
 ColorMapObject *
-MakeMapObject(int ColorCount,
-              const GifColorType * ColorMap) {
-
+GifMakeMapObject(int ColorCount, const GifColorType *ColorMap)
+{
     ColorMapObject *Object;
 
     /*** FIXME: Our ColorCount has to be a power of two.  Is it necessary to
      * make the user know that or should we automatically round up instead? */
-    if (ColorCount != (1 << BitSize(ColorCount))) {
+    if (ColorCount != (1 << GifBitSize(ColorCount))) {
         return ((ColorMapObject *) NULL);
     }
 
@@ -93,9 +83,10 @@
     }
 
     Object->ColorCount = ColorCount;
-    Object->BitsPerPixel = BitSize(ColorCount);
+    Object->BitsPerPixel = GifBitSize(ColorCount);
+    Object->SortFlag = false;
 
-    if (ColorMap) {
+    if (ColorMap != NULL) {
         memcpy((char *)Object->Colors,
                (char *)ColorMap, ColorCount * sizeof(GifColorType));
     }
@@ -103,118 +94,222 @@
     return (Object);
 }
 
-/*
- * Free a color map object
- */
+/*******************************************************************************
+Free a color map object
+*******************************************************************************/
 void
-FreeMapObject(ColorMapObject * Object) {
-
+GifFreeMapObject(ColorMapObject *Object)
+{
     if (Object != NULL) {
-        free(Object->Colors);
-        free(Object);
-        Object = NULL;
+        (void)free(Object->Colors);
+        (void)free(Object);
     }
 }
 
 #ifdef DEBUG
 void
-DumpColorMap(ColorMapObject * Object,
-             FILE * fp) {
-
-    if (Object) {
+DumpColorMap(ColorMapObject *Object,
+             FILE * fp)
+{
+    if (Object != NULL) {
         int i, j, Len = Object->ColorCount;
 
         for (i = 0; i < Len; i += 4) {
             for (j = 0; j < 4 && j < Len; j++) {
-                fprintf(fp, "%3d: %02x %02x %02x   ", i + j,
-                        Object->Colors[i + j].Red,
-                        Object->Colors[i + j].Green,
-                        Object->Colors[i + j].Blue);
+                (void)fprintf(fp, "%3d: %02x %02x %02x   ", i + j,
+                              Object->Colors[i + j].Red,
+                              Object->Colors[i + j].Green,
+                              Object->Colors[i + j].Blue);
             }
-            fprintf(fp, "\n");
+            (void)fprintf(fp, "\n");
         }
     }
 }
 #endif /* DEBUG */
 
-/******************************************************************************
- * Extension record functions
- *****************************************************************************/
+/*******************************************************************************
+ Compute the union of two given color maps and return it.  If result can't
+ fit into 256 colors, NULL is returned, the allocated union otherwise.
+ ColorIn1 is copied as is to ColorUnion, while colors from ColorIn2 are
+ copied iff they didn't exist before.  ColorTransIn2 maps the old
+ ColorIn2 into the ColorUnion color map table./
+*******************************************************************************/
+ColorMapObject *
+GifUnionColorMap(const ColorMapObject *ColorIn1,
+              const ColorMapObject *ColorIn2,
+              GifPixelType ColorTransIn2[])
+{
+    int i, j, CrntSlot, RoundUpTo, NewGifBitSize;
+    ColorMapObject *ColorUnion;
+
+    /*
+     * We don't worry about duplicates within either color map; if
+     * the caller wants to resolve those, he can perform unions
+     * with an empty color map.
+     */
 
-void
-MakeExtension(SavedImage * New,
-              int Function) {
+    /* Allocate table which will hold the result for sure. */
+    ColorUnion = GifMakeMapObject(MAX(ColorIn1->ColorCount,
+                               ColorIn2->ColorCount) * 2, NULL);
+
+    if (ColorUnion == NULL)
+        return (NULL);
+
+    /*
+     * Copy ColorIn1 to ColorUnion.
+     */
+    for (i = 0; i < ColorIn1->ColorCount; i++)
+        ColorUnion->Colors[i] = ColorIn1->Colors[i];
+    CrntSlot = ColorIn1->ColorCount;
+
+    /*
+     * Potentially obnoxious hack:
+     *
+     * Back CrntSlot down past all contiguous {0, 0, 0} slots at the end
+     * of table 1.  This is very useful if your display is limited to
+     * 16 colors.
+     */
+    while (ColorIn1->Colors[CrntSlot - 1].Red == 0
+           && ColorIn1->Colors[CrntSlot - 1].Green == 0
+           && ColorIn1->Colors[CrntSlot - 1].Blue == 0)
+        CrntSlot--;
 
-    New->Function = Function;
-    /*** FIXME:
-     * Someday we might have to deal with multiple extensions.
-     * ??? Was this a note from Gershon or from me?  Does the multiple
-     * extension blocks solve this or do we need multiple Functions?  Or is
-     * this an obsolete function?  (People should use AddExtensionBlock
-     * instead?)
-     * Looks like AddExtensionBlock needs to take the int Function argument
-     * then it can take the place of this function.  Right now people have to
-     * use both.  Fix AddExtensionBlock and add this to the deprecation list.
-     */
+    /* Copy ColorIn2 to ColorUnion (use old colors if they exist): */
+    for (i = 0; i < ColorIn2->ColorCount && CrntSlot <= 256; i++) {
+        /* Let's see if this color already exists: */
+        for (j = 0; j < ColorIn1->ColorCount; j++)
+            if (memcmp (&ColorIn1->Colors[j], &ColorIn2->Colors[i],
+                        sizeof(GifColorType)) == 0)
+                break;
+
+        if (j < ColorIn1->ColorCount)
+            ColorTransIn2[i] = j;    /* color exists in Color1 */
+        else {
+            /* Color is new - copy it to a new slot: */
+            ColorUnion->Colors[CrntSlot] = ColorIn2->Colors[i];
+            ColorTransIn2[i] = CrntSlot++;
+        }
+    }
+
+    if (CrntSlot > 256) {
+        GifFreeMapObject(ColorUnion);
+        return ((ColorMapObject *) NULL);
+    }
+
+    NewGifBitSize = GifBitSize(CrntSlot);
+    RoundUpTo = (1 << NewGifBitSize);
+
+    if (RoundUpTo != ColorUnion->ColorCount) {
+        register GifColorType *Map = ColorUnion->Colors;
+
+        /*
+         * Zero out slots up to next power of 2.
+         * We know these slots exist because of the way ColorUnion's
+         * start dimension was computed.
+         */
+        for (j = CrntSlot; j < RoundUpTo; j++)
+            Map[j].Red = Map[j].Green = Map[j].Blue = 0;
+
+        /* perhaps we can shrink the map? */
+        if (RoundUpTo < ColorUnion->ColorCount) {
+            GifColorType *new_map = (GifColorType *)realloc(Map,
+                                 sizeof(GifColorType) * RoundUpTo);
+            if( new_map == NULL ) {
+                GifFreeMapObject(ColorUnion);
+                return ((ColorMapObject *) NULL);
+            }
+            ColorUnion->Colors = new_map;
+        }
+    }
+
+    ColorUnion->ColorCount = RoundUpTo;
+    ColorUnion->BitsPerPixel = NewGifBitSize;
+
+    return (ColorUnion);
 }
 
+/*******************************************************************************
+ Apply a given color translation to the raster bits of an image
+*******************************************************************************/
+void
+GifApplyTranslation(SavedImage *Image, GifPixelType Translation[])
+{
+    register int i;
+    register int RasterSize = Image->ImageDesc.Height * Image->ImageDesc.Width;
+
+    for (i = 0; i < RasterSize; i++)
+        Image->RasterBits[i] = Translation[Image->RasterBits[i]];
+}
+
+/******************************************************************************
+ Extension record functions
+******************************************************************************/
 int
-AddExtensionBlock(SavedImage * New,
-                  int Len,
-                  unsigned char ExtData[]) {
-
+GifAddExtensionBlock(int *ExtensionBlockCount,
+                     ExtensionBlock **ExtensionBlocks,
+                     int Function,
+                     unsigned int Len,
+                     unsigned char ExtData[])
+{
     ExtensionBlock *ep;
 
-    if (New->ExtensionBlocks == NULL)
-        New->ExtensionBlocks=(ExtensionBlock *)malloc(sizeof(ExtensionBlock));
-    else
-        New->ExtensionBlocks = (ExtensionBlock *)realloc(New->ExtensionBlocks,
+    if (*ExtensionBlocks == NULL)
+        *ExtensionBlocks=(ExtensionBlock *)malloc(sizeof(ExtensionBlock));
+    else {
+        ExtensionBlock* ep_new = (ExtensionBlock *)realloc(*ExtensionBlocks,
                                       sizeof(ExtensionBlock) *
-                                      (New->ExtensionBlockCount + 1));
+                                      (*ExtensionBlockCount + 1));
+        if( ep_new == NULL )
+            return (GIF_ERROR);
+        *ExtensionBlocks = ep_new;
+    }
 
-    if (New->ExtensionBlocks == NULL)
+    if (*ExtensionBlocks == NULL)
         return (GIF_ERROR);
 
-    ep = &New->ExtensionBlocks[New->ExtensionBlockCount++];
+    ep = &(*ExtensionBlocks)[(*ExtensionBlockCount)++];
 
+    ep->Function = Function;
     ep->ByteCount=Len;
-    ep->Bytes = (char *)malloc(ep->ByteCount);
+    ep->Bytes = (GifByteType *)malloc(ep->ByteCount);
     if (ep->Bytes == NULL)
         return (GIF_ERROR);
 
-    if (ExtData) {
+    if (ExtData != NULL) {
         memcpy(ep->Bytes, ExtData, Len);
-        ep->Function = New->Function;
     }
 
     return (GIF_OK);
 }
 
 void
-FreeExtension(SavedImage * Image)
+GifFreeExtensions(int *ExtensionBlockCount,
+                  ExtensionBlock **ExtensionBlocks)
 {
     ExtensionBlock *ep;
 
-    if ((Image == NULL) || (Image->ExtensionBlocks == NULL)) {
+    if (*ExtensionBlocks == NULL)
         return;
-    }
-    for (ep = Image->ExtensionBlocks;
-         ep < (Image->ExtensionBlocks + Image->ExtensionBlockCount); ep++)
+
+    for (ep = *ExtensionBlocks;
+         ep < (*ExtensionBlocks + *ExtensionBlockCount);
+         ep++)
         (void)free((char *)ep->Bytes);
-    free((char *)Image->ExtensionBlocks);
-    Image->ExtensionBlocks = NULL;
+    (void)free((char *)*ExtensionBlocks);
+    *ExtensionBlocks = NULL;
+    *ExtensionBlockCount = 0;
 }
 
 /******************************************************************************
- * Image block allocation functions
+ Image block allocation functions
 ******************************************************************************/
 
 /* Private Function:
  * Frees the last image in the GifFile->SavedImages array
  */
 void
-FreeLastSavedImage(GifFileType *GifFile) {
-
+FreeLastSavedImage(GifFileType *GifFile)
+{
     SavedImage *sp;
 
     if ((GifFile == NULL) || (GifFile->SavedImages == NULL))
@@ -225,20 +320,21 @@
     sp = &GifFile->SavedImages[GifFile->ImageCount];
 
     /* Deallocate its Colormap */
-    if (sp->ImageDesc.ColorMap)
-        FreeMapObject(sp->ImageDesc.ColorMap);
+    if (sp->ImageDesc.ColorMap != NULL) {
+        GifFreeMapObject(sp->ImageDesc.ColorMap);
+        sp->ImageDesc.ColorMap = NULL;
+    }
 
     /* Deallocate the image data */
-    if (sp->RasterBits)
+    if (sp->RasterBits != NULL)
         free((char *)sp->RasterBits);
 
     /* Deallocate any extensions */
-    if (sp->ExtensionBlocks)
-        FreeExtension(sp);
+    GifFreeExtensions(&sp->ExtensionBlockCount, &sp->ExtensionBlocks);
 
     /*** FIXME: We could realloc the GifFile->SavedImages structure but is
      * there a point to it? Saves some memory but we'd have to do it every
-     * time.  If this is used in FreeSavedImages then it would be inefficient
+     * time.  If this is used in GifFreeSavedImages then it would be inefficient
      * (The whole array is going to be deallocated.)  If we just use it when
      * we want to free the last Image it's convenient to do it here.
      */
@@ -248,11 +344,8 @@
  * Append an image block to the SavedImages array
  */
 SavedImage *
-MakeSavedImage(GifFileType * GifFile,
-               const SavedImage * CopyFrom) {
-
-    SavedImage *sp;
-
+GifMakeSavedImage(GifFileType *GifFile, const SavedImage *CopyFrom)
+{
     if (GifFile->SavedImages == NULL)
         GifFile->SavedImages = (SavedImage *)malloc(sizeof(SavedImage));
     else
@@ -262,10 +355,10 @@
     if (GifFile->SavedImages == NULL)
         return ((SavedImage *)NULL);
     else {
-        sp = &GifFile->SavedImages[GifFile->ImageCount++];
+        SavedImage *sp = &GifFile->SavedImages[GifFile->ImageCount++];
         memset((char *)sp, '\0', sizeof(SavedImage));
 
-        if (CopyFrom) {
+        if (CopyFrom != NULL) {
             memcpy((char *)sp, CopyFrom, sizeof(SavedImage));
 
             /*
@@ -275,8 +368,8 @@
              */
 
             /* first, the local color map */
-            if (sp->ImageDesc.ColorMap) {
-                sp->ImageDesc.ColorMap = MakeMapObject(
+            if (sp->ImageDesc.ColorMap != NULL) {
+                sp->ImageDesc.ColorMap = GifMakeMapObject(
                                          CopyFrom->ImageDesc.ColorMap->ColorCount,
                                          CopyFrom->ImageDesc.ColorMap->Colors);
                 if (sp->ImageDesc.ColorMap == NULL) {
@@ -298,7 +391,7 @@
                    CopyFrom->ImageDesc.Width);
 
             /* finally, the extension blocks */
-            if (sp->ExtensionBlocks) {
+            if (sp->ExtensionBlocks != NULL) {
                 sp->ExtensionBlocks = (ExtensionBlock *)malloc(
                                       sizeof(ExtensionBlock) *
                                       CopyFrom->ExtensionBlockCount);
@@ -308,17 +401,6 @@
                 }
                 memcpy(sp->ExtensionBlocks, CopyFrom->ExtensionBlocks,
                        sizeof(ExtensionBlock) * CopyFrom->ExtensionBlockCount);
-
-                /*
-                 * For the moment, the actual blocks can take their
-                 * chances with free().  We'll fix this later.
-                 *** FIXME: [Better check this out... Toshio]
-                 * 2004 May 27: Looks like this was an ESR note.
-                 * It means the blocks are shallow copied from InFile to
-                 * OutFile.  However, I don't see that in this code....
-                 * Did ESR fix it but never remove this note (And other notes
-                 * in gifspnge?)
-                 */
             }
         }
 
@@ -327,8 +409,8 @@
 }
 
 void
-FreeSavedImages(GifFileType * GifFile) {
-
+GifFreeSavedImages(GifFileType *GifFile)
+{
     SavedImage *sp;
 
     if ((GifFile == NULL) || (GifFile->SavedImages == NULL)) {
@@ -336,15 +418,18 @@
     }
     for (sp = GifFile->SavedImages;
          sp < GifFile->SavedImages + GifFile->ImageCount; sp++) {
-        if (sp->ImageDesc.ColorMap)
-            FreeMapObject(sp->ImageDesc.ColorMap);
+        if (sp->ImageDesc.ColorMap != NULL) {
+            GifFreeMapObject(sp->ImageDesc.ColorMap);
+            sp->ImageDesc.ColorMap = NULL;
+        }
 
-        if (sp->RasterBits)
+        if (sp->RasterBits != NULL)
             free((char *)sp->RasterBits);
 
-        if (sp->ExtensionBlocks)
-            FreeExtension(sp);
+        GifFreeExtensions(&sp->ExtensionBlockCount, &sp->ExtensionBlocks);
     }
     free((char *)GifFile->SavedImages);
-    GifFile->SavedImages=NULL;
+    GifFile->SavedImages = NULL;
 }
+
+/* end */
--- a/jdk/src/java.desktop/share/native/libsplashscreen/splashscreen_gif.c	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/share/native/libsplashscreen/splashscreen_gif.c	Wed Jul 05 20:33:35 2017 +0200
@@ -82,8 +82,8 @@
     int i, j;
     int imageIndex;
     int cx, cy, cw, ch; /* clamped coordinates */
-    const int interlacedOffset[] = { 0, 4, 2, 1, 0 };   /* The way Interlaced image should. */
-    const int interlacedJumps[] = { 8, 8, 4, 2, 1 };    /* be read - offsets and jumps... */
+    int numLines;
+    int numPassLines;
 
     if (DGifSlurp(gif) == GIF_ERROR) {
         return 0;
@@ -213,16 +213,6 @@
             byte_t *pSrc = image->RasterBits;
             ImageFormat srcFormat;
             ImageRect srcRect, dstRect;
-            int pass, npass;
-
-            if (desc->Interlace) {
-                pass = 0;
-                npass = 4;
-            }
-            else {
-                pass = 4;
-                npass = 5;
-            }
 
             srcFormat.colorMap = colorMapBuf;
             srcFormat.depthBytes = 1;
@@ -231,26 +221,22 @@
             srcFormat.fixedBits = QUAD_ALPHA_MASK;      // fixed 100% alpha
             srcFormat.premultiplied = 0;
 
-            for (; pass < npass; ++pass) {
-                int jump = interlacedJumps[pass];
-                int ofs = interlacedOffset[pass];
-                /* Number of source lines for current pass */
-                int numPassLines = (desc->Height + jump - ofs - 1) / jump;
-                /* Number of lines that fits to dest buffer */
-                int numLines = (ch + jump - ofs - 1) / jump;
+            /* Number of source lines for current pass */
+            numPassLines = desc->Height;
+            /* Number of lines that fits to dest buffer */
+            numLines = ch;
+
+            initRect(&srcRect, 0, 0, desc->Width, numLines, 1,
+                desc->Width, pSrc, &srcFormat);
 
-                initRect(&srcRect, 0, 0, desc->Width, numLines, 1,
-                    desc->Width, pSrc, &srcFormat);
+            if (numLines > 0) {
+                initRect(&dstRect, cx, cy, cw,
+                         numLines , 1, stride, pBitmapBits, &splash->imageFormat);
 
-                if (numLines > 0) {
-                    initRect(&dstRect, cx, cy + ofs, cw,
-                             numLines , jump, stride, pBitmapBits, &splash->imageFormat);
-
-                    pSrc += convertRect(&srcRect, &dstRect, CVT_ALPHATEST);
-                }
-                // skip extra source data
-                pSrc += (numPassLines - numLines) * srcRect.stride;
+                pSrc += convertRect(&srcRect, &dstRect, CVT_ALPHATEST);
             }
+            // skip extra source data
+            pSrc += (numPassLines - numLines) * srcRect.stride;
         }
 
         // now dispose of the previous frame correctly
@@ -310,7 +296,7 @@
     free(pBitmapBits);
     free(pOldBitmapBits);
 
-    DGifCloseFile(gif);
+    DGifCloseFile(gif, NULL);
 
     return 1;
 }
@@ -318,7 +304,7 @@
 int
 SplashDecodeGifStream(Splash * splash, SplashStream * stream)
 {
-    GifFileType *gif = DGifOpen((void *) stream, SplashStreamGifInputFunc);
+    GifFileType *gif = DGifOpen((void *) stream, SplashStreamGifInputFunc, NULL);
 
     if (!gif)
         return 0;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.desktop/solaris/classes/sun/font/X11CNS11643.java	Wed Jul 05 20:33:35 2017 +0200
@@ -0,0 +1,178 @@
+/*
+ * Copyright (c) 2001, 2008, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package sun.font;
+
+import java.nio.CharBuffer;
+import java.nio.ByteBuffer;
+import java.nio.charset.*;
+import sun.nio.cs.*;
+
+public abstract class X11CNS11643 extends Charset {
+    private final int plane;
+    public X11CNS11643 (int plane, String name) {
+        super(name, null);
+        switch (plane) {
+        case 1:
+            this.plane = 0; // CS1
+            break;
+        case 2:
+        case 3:
+            this.plane = plane;
+            break;
+        default:
+            throw new IllegalArgumentException
+                ("Only planes 1, 2, and 3 supported");
+        }
+    }
+
+    public CharsetEncoder newEncoder() {
+        return new Encoder(this, plane);
+    }
+
+    public CharsetDecoder newDecoder() {
+        return new Decoder(this, plane);
+    }
+
+    public boolean contains(Charset cs) {
+        return cs instanceof X11CNS11643;
+    }
+
+    private class Encoder extends EUC_TW.Encoder {
+        private int plane;
+        public Encoder(Charset cs, int plane) {
+            super(cs);
+            this.plane = plane;
+        }
+
+        private byte[] bb = new byte[4];
+        public boolean canEncode(char c) {
+            if (c <= 0x7F) {
+                return false;
+            }
+            int nb = toEUC(c, bb);
+            if (nb == -1)
+                return false;
+            int p = 0;
+            if (nb == 4)
+                p = (bb[1] & 0xff) - 0xa0;
+            return (p == plane);
+        }
+
+        public boolean isLegalReplacement(byte[] repl) {
+            return true;
+        }
+
+        protected CoderResult encodeLoop(CharBuffer src, ByteBuffer dst) {
+            char[] sa = src.array();
+            int sp = src.arrayOffset() + src.position();
+            int sl = src.arrayOffset() + src.limit();
+            byte[] da = dst.array();
+            int dp = dst.arrayOffset() + dst.position();
+            int dl = dst.arrayOffset() + dst.limit();
+
+            try {
+                while (sp < sl) {
+                    char c = sa[sp];
+                    if ( c > '\u007f'&& c < '\uFFFE') {
+                        int nb = toEUC(c, bb);
+                        if (nb != -1) {
+                            int p = 0;
+                            if (nb == 4)
+                                p = (bb[1] & 0xff) - 0xa0;
+                            if (p == plane) {
+                                if (dl - dp < 2)
+                                    return CoderResult.OVERFLOW;
+                                if (nb == 2) {
+                                    da[dp++] = (byte)(bb[0] & 0x7f);
+                                    da[dp++] = (byte)(bb[1] & 0x7f);
+                                } else {
+                                    da[dp++] = (byte)(bb[2] & 0x7f);
+                                    da[dp++] = (byte)(bb[3] & 0x7f);
+                                }
+                                sp++;
+                                continue;
+                            }
+                        }
+                    }
+                    return CoderResult.unmappableForLength(1);
+                }
+                return CoderResult.UNDERFLOW;
+            } finally {
+                src.position(sp - src.arrayOffset());
+                dst.position(dp - dst.arrayOffset());
+            }
+        }
+    }
+
+    private class Decoder extends EUC_TW.Decoder {
+        int plane;
+        private String table;
+        protected Decoder(Charset cs, int plane) {
+            super(cs);
+            if (plane == 0)
+                this.plane = plane;
+            else if (plane == 2 || plane == 3)
+                this.plane = plane - 1;
+            else
+                throw new IllegalArgumentException
+                    ("Only planes 1, 2, and 3 supported");
+        }
+
+        //we only work on array backed buffer.
+        protected CoderResult decodeLoop(ByteBuffer src, CharBuffer dst) {
+            byte[] sa = src.array();
+            int sp = src.arrayOffset() + src.position();
+            int sl = src.arrayOffset() + src.limit();
+
+            char[] da = dst.array();
+            int dp = dst.arrayOffset() + dst.position();
+            int dl = dst.arrayOffset() + dst.limit();
+
+            try {
+                while (sp < sl) {
+                    if ( sl - sp < 2) {
+                        return CoderResult.UNDERFLOW;
+                    }
+                    int b1 = (sa[sp] & 0xff) | 0x80;
+                    int b2 = (sa[sp + 1] & 0xff) | 0x80;
+                    char[] cc = toUnicode(b1, b2, plane);
+                    // plane3 has non-bmp characters(added), x11cnsp3
+                    // however does not support them
+                    if (cc == null || cc.length == 2)
+                        return CoderResult.unmappableForLength(2);
+                    if (dl - dp < 1)
+                        return CoderResult.OVERFLOW;
+                    da[dp++] = cc[0];
+                    sp +=2;
+                }
+                return CoderResult.UNDERFLOW;
+            } finally {
+                src.position(sp - src.arrayOffset());
+                dst.position(dp - dst.arrayOffset());
+            }
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.desktop/solaris/classes/sun/font/X11CNS11643P1.java	Wed Jul 05 20:33:35 2017 +0200
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 1996, 2005, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+package sun.font;
+
+public class X11CNS11643P1 extends X11CNS11643 {
+    public X11CNS11643P1() {
+        super(1, "X11CNS11643P1");
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.desktop/solaris/classes/sun/font/X11CNS11643P2.java	Wed Jul 05 20:33:35 2017 +0200
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 1996, 2005, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package sun.font;
+
+public class X11CNS11643P2 extends X11CNS11643 {
+    public X11CNS11643P2() {
+        super(2, "X11CNS11643P2");
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.desktop/solaris/classes/sun/font/X11CNS11643P3.java	Wed Jul 05 20:33:35 2017 +0200
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 1997, 2005, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package sun.font;
+
+public class X11CNS11643P3 extends X11CNS11643 {
+    public X11CNS11643P3() {
+        super(3, "X11CNS11643P3");
+    }
+}
--- a/jdk/src/java.desktop/unix/classes/sun/awt/UNIXToolkit.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/UNIXToolkit.java	Wed Jul 05 20:33:35 2017 +0200
@@ -106,6 +106,7 @@
     /**
      * Overridden to handle GTK icon loading
      */
+    @Override
     protected Object lazilyLoadDesktopProperty(String name) {
         if (name.startsWith("gtk.icon.")) {
             return lazilyLoadGTKIcon(name);
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XBaseMenuWindow.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XBaseMenuWindow.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -326,9 +326,8 @@
      * check for adding duplicate items
      * @param item item to add
      */
-    @SuppressWarnings("deprecation")
     public void addItem(MenuItem item) {
-        XMenuItemPeer mp = (XMenuItemPeer)item.getPeer();
+        XMenuItemPeer mp = AWTAccessor.getMenuComponentAccessor().getPeer(item);
         if (mp != null) {
             mp.setContainer(this);
             synchronized(getMenuTreeLock()) {
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XComponentPeer.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XComponentPeer.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -52,7 +52,6 @@
 import java.awt.event.MouseWheelEvent;
 import java.awt.event.PaintEvent;
 import java.awt.event.WindowEvent;
-import java.awt.event.InvocationEvent;
 import java.awt.image.ImageObserver;
 import java.awt.image.ImageProducer;
 import java.awt.image.VolatileImage;
@@ -63,6 +62,8 @@
 import java.util.Collection;
 import java.util.Objects;
 import java.util.Set;
+
+import sun.awt.AWTAccessor.ComponentAccessor;
 import sun.util.logging.PlatformLogger;
 import sun.awt.*;
 import sun.awt.event.IgnorePaintEvent;
@@ -182,7 +183,8 @@
         }
 
         if (container instanceof Window) {
-            XWindowPeer wpeer = (XWindowPeer)(container.getPeer());
+            XWindowPeer wpeer = AWTAccessor.getComponentAccessor()
+                                           .getPeer(container);
             if (wpeer != null) {
                 return (wpeer.winAttr.visibilityState !=
                         XWindowAttributesData.AWT_UNOBSCURED);
@@ -319,7 +321,8 @@
               if (parentWindow == null) {
                   return rejectFocusRequestHelper("WARNING: Parent window is null");
               }
-              XWindowPeer wpeer = (XWindowPeer)parentWindow.getPeer();
+              XWindowPeer wpeer = AWTAccessor.getComponentAccessor()
+                                             .getPeer(parentWindow);
               if (wpeer == null) {
                   return rejectFocusRequestHelper("WARNING: Parent window's peer is null");
               }
@@ -390,7 +393,6 @@
     /**
      * @see java.awt.peer.ComponentPeer
      */
-    @SuppressWarnings("deprecation")
     public void setEnabled(final boolean value) {
         if (enableLog.isLoggable(PlatformLogger.Level.FINE)) {
             enableLog.fine("{0}ing {1}", (value ? "Enabl" : "Disabl"), this);
@@ -399,8 +401,9 @@
         // If any of our heavyweight ancestors are disable, we should be too
         // See 6176875 for more information
         final Container cp = SunToolkit.getNativeContainer(target);
+        final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
         if (cp != null) {
-            status &= ((XComponentPeer) cp.getPeer()).isEnabled();
+            status &= acc.<XComponentPeer>getPeer(cp).isEnabled();
         }
         synchronized (getStateLock()) {
             if (enabled == status) {
@@ -412,7 +415,7 @@
         if (target instanceof Container) {
             final Component[] list = ((Container) target).getComponents();
             for (final Component child : list) {
-                final ComponentPeer p = child.getPeer();
+                final ComponentPeer p = acc.getPeer(child);
                 if (p != null) {
                     p.setEnabled(status && child.isEnabled());
                 }
@@ -489,7 +492,7 @@
     }
 
     XWindowPeer getParentTopLevel() {
-        AWTAccessor.ComponentAccessor compAccessor = AWTAccessor.getComponentAccessor();
+        ComponentAccessor compAccessor = AWTAccessor.getComponentAccessor();
         Container parent = (target instanceof Container) ? ((Container)target) : (compAccessor.getParent(target));
         // Search for parent window
         while (parent != null && !(parent instanceof Window)) {
@@ -1327,11 +1330,10 @@
         }
     }
 
-    @SuppressWarnings("deprecation")
     private void addTree(Collection<Long> order, Set<Long> set, Container cont) {
         for (int i = 0; i < cont.getComponentCount(); i++) {
             Component comp = cont.getComponent(i);
-            ComponentPeer peer = comp.getPeer();
+            Object peer = AWTAccessor.getComponentAccessor().getPeer(comp);
             if (peer instanceof XComponentPeer) {
                 Long window = Long.valueOf(((XComponentPeer)peer).getWindow());
                 if (!set.contains(window)) {
@@ -1348,7 +1350,6 @@
 
     /****** DropTargetPeer implementation ********************/
 
-    @SuppressWarnings("deprecation")
     public void addDropTarget(DropTarget dt) {
         Component comp = target;
         while(!(comp == null || comp instanceof Window)) {
@@ -1356,14 +1357,13 @@
         }
 
         if (comp instanceof Window) {
-            XWindowPeer wpeer = (XWindowPeer)(comp.getPeer());
+            XWindowPeer wpeer = AWTAccessor.getComponentAccessor().getPeer(comp);
             if (wpeer != null) {
                 wpeer.addDropTarget();
             }
         }
     }
 
-    @SuppressWarnings("deprecation")
     public void removeDropTarget(DropTarget dt) {
         Component comp = target;
         while(!(comp == null || comp instanceof Window)) {
@@ -1371,7 +1371,8 @@
         }
 
         if (comp instanceof Window) {
-            XWindowPeer wpeer = (XWindowPeer)(comp.getPeer());
+            XWindowPeer wpeer = AWTAccessor.getComponentAccessor()
+                                           .getPeer(comp);
             if (wpeer != null) {
                 wpeer.removeDropTarget();
             }
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XDecoratedPeer.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XDecoratedPeer.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1226,7 +1226,7 @@
             Window owner = XWindowPeer.getDecoratedOwner(actualFocusedWindow);
 
             if (owner != null && owner == target) {
-                setActualFocusedWindow((XWindowPeer) AWTAccessor.getComponentAccessor().getPeer(actualFocusedWindow));
+                setActualFocusedWindow(AWTAccessor.getComponentAccessor().getPeer(actualFocusedWindow));
             }
         }
         super.handleWindowFocusOut(oppositeWindow, serial);
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XDialogPeer.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XDialogPeer.java	Wed Jul 05 20:33:35 2017 +0200
@@ -117,7 +117,7 @@
         try {
             javaToplevels = XWindowPeer.collectJavaToplevels();
             for (Window w : toBlock) {
-                XWindowPeer wp = (XWindowPeer)AWTAccessor.getComponentAccessor().getPeer(w);
+                XWindowPeer wp = AWTAccessor.getComponentAccessor().getPeer(w);
                 if (wp != null) {
                     wp.setModalBlocked((Dialog)target, true, javaToplevels);
                 }
@@ -139,7 +139,7 @@
         XWindowPeer focusedWindowPeer = null;
 
         if (focusedWindow != null) {
-            focusedWindowPeer = (XWindowPeer)AWTAccessor.getComponentAccessor().getPeer(focusedWindow);
+            focusedWindowPeer = AWTAccessor.getComponentAccessor().getPeer(focusedWindow);
         } else {
             /*
              * For the case when a potential blocked window is not yet focused
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XDragSourceContextPeer.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XDragSourceContextPeer.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -110,7 +110,6 @@
         return theInstance;
     }
 
-    @SuppressWarnings("deprecation")
     protected void startDrag(Transferable transferable,
                              long[] formats, Map<Long, DataFlavor> formatMap) {
         Component component = getTrigger().getComponent();
@@ -121,7 +120,7 @@
              c = AWTAccessor.getComponentAccessor().getParent(c));
 
         if (c instanceof Window) {
-            wpeer = (XWindowPeer)c.getPeer();
+            wpeer = AWTAccessor.getComponentAccessor().getPeer(c);
         }
 
         if (wpeer == null) {
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XDropTargetContextPeer.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XDropTargetContextPeer.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -32,6 +32,7 @@
 
 import java.util.Iterator;
 
+import sun.awt.AWTAccessor;
 import sun.util.logging.PlatformLogger;
 
 import sun.awt.AppContext;
@@ -188,12 +189,12 @@
     // If source is an XEmbedCanvasPeer, passes the event to it for processing and
     // return true if the event is forwarded to the XEmbed child.
     // Otherwise, does nothing and return false.
-    @SuppressWarnings("deprecation")
     private boolean processSunDropTargetEvent(SunDropTargetEvent event) {
         Object source = event.getSource();
 
         if (source instanceof Component) {
-            ComponentPeer peer = ((Component)source).getPeer();
+            Object peer = AWTAccessor.getComponentAccessor()
+                                     .getPeer((Component) source);
             if (peer instanceof XEmbedCanvasPeer) {
                 XEmbedCanvasPeer xEmbedCanvasPeer = (XEmbedCanvasPeer)peer;
                 /* The native context is the pointer to the XClientMessageEvent
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XEmbedChildProxyPeer.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XEmbedChildProxyPeer.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -166,7 +166,6 @@
         XToolkit.postEvent(XToolkit.targetToAppContext(proxy), event);
     }
 
-    @SuppressWarnings("deprecation")
     boolean simulateMotifRequestFocus(Component lightweightChild, boolean temporary,
                                       boolean focusedWindowChangeAllowed, long time)
     {
@@ -174,7 +173,7 @@
             lightweightChild = (Component)proxy;
         }
         Component currentOwner = XKeyboardFocusManagerPeer.getInstance().getCurrentFocusOwner();
-        if (currentOwner != null && currentOwner.getPeer() == null) {
+        if (currentOwner != null && !currentOwner.isDisplayable()) {
             currentOwner = null;
         }
         FocusEvent  fg = new FocusEvent(lightweightChild, FocusEvent.FOCUS_GAINED, false, currentOwner );
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XEmbeddedFrame.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XEmbeddedFrame.java	Wed Jul 05 20:33:35 2017 +0200
@@ -26,8 +26,11 @@
 package sun.awt.X11;
 
 import java.awt.AWTKeyStroke;
+import java.awt.Component;
 import java.awt.Toolkit;
+import java.awt.peer.ComponentPeer;
 
+import sun.awt.AWTAccessor;
 import sun.awt.EmbeddedFrame;
 import sun.util.logging.PlatformLogger;
 
@@ -63,10 +66,9 @@
         }
     }
 
-    @SuppressWarnings("deprecation")
     public void addNotify()
     {
-        if (getPeer() == null) {
+        if (!isDisplayable()) {
             XToolkit toolkit = (XToolkit)Toolkit.getDefaultToolkit();
             setPeer(toolkit.createEmbeddedFrame(this));
         }
@@ -80,9 +82,9 @@
     /*
      * The method shouldn't be called in case of active XEmbed.
      */
-    @SuppressWarnings("deprecation")
     public boolean traverseIn(boolean direction) {
-        XEmbeddedFramePeer peer = (XEmbeddedFramePeer)getPeer();
+        XEmbeddedFramePeer peer = AWTAccessor.getComponentAccessor()
+                                             .getPeer(this);
         if (peer != null) {
             if (peer.supportsXEmbed() && peer.isXEmbedActive()) {
                 log.fine("The method shouldn't be called when XEmbed is active!");
@@ -93,9 +95,9 @@
         return false;
     }
 
-    @SuppressWarnings("deprecation")
     protected boolean traverseOut(boolean direction) {
-        XEmbeddedFramePeer xefp = (XEmbeddedFramePeer) getPeer();
+        XEmbeddedFramePeer xefp = AWTAccessor.getComponentAccessor()
+                                             .getPeer(this);
         if (direction == FORWARD) {
             xefp.traverseOutForward();
         }
@@ -108,9 +110,9 @@
     /*
      * The method shouldn't be called in case of active XEmbed.
      */
-    @SuppressWarnings("deprecation")
     public void synthesizeWindowActivation(boolean doActivate) {
-        XEmbeddedFramePeer peer = (XEmbeddedFramePeer)getPeer();
+        XEmbeddedFramePeer peer = AWTAccessor.getComponentAccessor()
+                                             .getPeer(this);
         if (peer != null) {
             if (peer.supportsXEmbed() && peer.isXEmbedActive()) {
                 log.fine("The method shouldn't be called when XEmbed is active!");
@@ -120,16 +122,17 @@
         }
     }
 
-    @SuppressWarnings("deprecation")
     public void registerAccelerator(AWTKeyStroke stroke) {
-        XEmbeddedFramePeer xefp = (XEmbeddedFramePeer) getPeer();
+        XEmbeddedFramePeer xefp = AWTAccessor.getComponentAccessor()
+                                             .getPeer(this);
         if (xefp != null) {
             xefp.registerAccelerator(stroke);
         }
     }
-    @SuppressWarnings("deprecation")
+
     public void unregisterAccelerator(AWTKeyStroke stroke) {
-        XEmbeddedFramePeer xefp = (XEmbeddedFramePeer) getPeer();
+        XEmbeddedFramePeer xefp = AWTAccessor.getComponentAccessor()
+                                             .getPeer(this);
         if (xefp != null) {
             xefp.unregisterAccelerator(stroke);
         }
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XEmbeddingContainer.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XEmbeddingContainer.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -28,7 +28,6 @@
 import java.awt.*;
 import java.util.HashMap;
 import java.awt.event.KeyEvent;
-import java.lang.reflect.*;
 import sun.awt.AWTAccessor;
 
 public class XEmbeddingContainer extends XEmbedHelper implements XEventDispatcher {
@@ -46,13 +45,14 @@
         XToolkit.removeEventDispatcher(embedder.getWindow(), this);
     }
 
-    @SuppressWarnings("deprecation")
     void add(long child) {
         if (checkXEmbed(child)) {
             Component proxy = createChildProxy(child);
             ((Container)embedder.getTarget()).add("Center", proxy);
-            if (proxy.getPeer() != null) {
-                children.put(Long.valueOf(child), proxy.getPeer());
+            XEmbeddedFramePeer peer = AWTAccessor.getComponentAccessor()
+                                                 .getPeer(proxy);
+            if (peer != null) {
+                children.put(Long.valueOf(child), peer);
             }
         }
     }
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XFileDialogPeer.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XFileDialogPeer.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -32,15 +32,19 @@
 import java.io.*;
 import java.util.Locale;
 import java.util.Arrays;
-import com.sun.java.swing.plaf.motif.*;
-import javax.swing.plaf.ComponentUI;
 import java.security.AccessController;
 import java.security.PrivilegedAction;
+
+import sun.awt.AWTAccessor.ComponentAccessor;
 import sun.util.logging.PlatformLogger;
 import sun.awt.AWTAccessor;
 
-class XFileDialogPeer extends XDialogPeer implements FileDialogPeer, ActionListener, ItemListener, KeyEventDispatcher, XChoicePeerListener {
-    private static final PlatformLogger log = PlatformLogger.getLogger("sun.awt.X11.XFileDialogPeer");
+class XFileDialogPeer extends XDialogPeer
+        implements FileDialogPeer, ActionListener, ItemListener,
+                   KeyEventDispatcher, XChoicePeerListener {
+
+    private static final PlatformLogger log =
+            PlatformLogger.getLogger("sun.awt.X11.XFileDialogPeer");
 
     FileDialog  target;
 
@@ -286,7 +290,8 @@
         fileDialog.setSize(400, 400);
 
         // Update choice's popup width
-        XChoicePeer choicePeer = (XChoicePeer)pathChoice.getPeer();
+        XChoicePeer choicePeer = AWTAccessor.getComponentAccessor()
+                                            .getPeer(pathChoice);
         choicePeer.setDrawSelectedItem(false);
         choicePeer.setAlignUnder(pathField);
 
@@ -642,7 +647,6 @@
         }
     }
 
-    @SuppressWarnings("deprecation")
     public boolean dispatchKeyEvent(KeyEvent keyEvent) {
         int id = keyEvent.getID();
         int keyCode = keyEvent.getKeyCode();
@@ -653,13 +657,15 @@
                 while (comp != null) {
                     // Fix for 6240084 Disposing a file dialog when the drop-down is active does not dispose the dropdown menu, on Xtoolkit
                     // See also 6259493
+                    ComponentAccessor acc = AWTAccessor.getComponentAccessor();
                     if (comp == pathChoice) {
-                        XChoicePeer choicePeer = (XChoicePeer)pathChoice.getPeer();
+                        XChoicePeer choicePeer = acc.getPeer(pathChoice);
                         if (choicePeer.isUnfurled()){
                             return false;
                         }
                     }
-                    if (comp.getPeer() == this) {
+                    Object peer = acc.getPeer(comp);
+                    if (peer == this) {
                         handleCancel();
                         return true;
                     }
@@ -796,16 +802,18 @@
         }
 
         super.setVisible(b);
+        XChoicePeer choicePeer = AWTAccessor.getComponentAccessor()
+                                            .getPeer(pathChoice);
         if (b == true){
             // See 6240074 for more information
-            XChoicePeer choicePeer = (XChoicePeer)pathChoice.getPeer();
             choicePeer.addXChoicePeerListener(this);
-            KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(this);
+            KeyboardFocusManager.getCurrentKeyboardFocusManager()
+                                .addKeyEventDispatcher(this);
         }else{
             // See 6240074 for more information
-            XChoicePeer choicePeer = (XChoicePeer)pathChoice.getPeer();
             choicePeer.removeXChoicePeerListener();
-            KeyboardFocusManager.getCurrentKeyboardFocusManager().removeKeyEventDispatcher(this);
+            KeyboardFocusManager.getCurrentKeyboardFocusManager()
+                                .removeKeyEventDispatcher(this);
         }
 
         selectionField.requestFocusInWindow();
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XFramePeer.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XFramePeer.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -124,7 +124,8 @@
                     }
                 } else {
                     menubar = mb;
-                    menubarPeer = (XMenuBarPeer) mb.getPeer();
+                    menubarPeer = AWTAccessor.getMenuComponentAccessor()
+                                             .getPeer(mb);
                     if (menubarPeer != null) {
                         menubarPeer.init((Frame)target);
                     }
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XInputMethod.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XInputMethod.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -31,6 +31,8 @@
 import java.awt.Rectangle;
 import java.awt.im.spi.InputMethodContext;
 import java.awt.peer.ComponentPeer;
+
+import sun.awt.AWTAccessor;
 import sun.awt.X11InputMethod;
 
 import sun.util.logging.PlatformLogger;
@@ -137,9 +139,10 @@
         XToolkit.awtUnlock();
     }
 
-    @SuppressWarnings("deprecation")
     long getCurrentParentWindow() {
-        return ((XWindow)clientComponentWindow.getPeer()).getContentWindow();
+        XWindow peer = AWTAccessor.getComponentAccessor()
+                                  .getPeer(clientComponentWindow);
+        return peer.getContentWindow();
     }
 
     /*
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XKeyboardFocusManagerPeer.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XKeyboardFocusManagerPeer.java	Wed Jul 05 20:33:35 2017 +0200
@@ -70,13 +70,13 @@
 
         synchronized(this) {
             if (currentFocusedWindow != null) {
-                from = (XWindowPeer)AWTAccessor.getComponentAccessor().getPeer(currentFocusedWindow);
+                from = AWTAccessor.getComponentAccessor().getPeer(currentFocusedWindow);
             }
 
             currentFocusedWindow = win;
 
             if (currentFocusedWindow != null) {
-                to = (XWindowPeer)AWTAccessor.getComponentAccessor().getPeer(currentFocusedWindow);
+                to = AWTAccessor.getComponentAccessor().getPeer(currentFocusedWindow);
             }
         }
 
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XMenuBarPeer.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XMenuBarPeer.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -163,9 +163,8 @@
         postPaintEvent();
     }
 
-    @SuppressWarnings("deprecation")
     public void addHelpMenu(Menu m) {
-        XMenuPeer mp = (XMenuPeer)m.getPeer();
+        XMenuPeer mp = AWTAccessor.getMenuComponentAccessor().getPeer(m);
         synchronized(getMenuTreeLock()) {
             helpMenu = mp;
         }
@@ -180,10 +179,9 @@
     /**
      * called from XFramePeer.setMenuBar
      */
-    @SuppressWarnings("deprecation")
     public void init(Frame frame) {
         this.target = frame;
-        this.framePeer = (XFramePeer)frame.getPeer();
+        this.framePeer = AWTAccessor.getComponentAccessor().getPeer(frame);
         XCreateWindowParams params = getDelayedParams();
         params.remove(DELAYED);
         params.add(PARENT_WINDOW, framePeer.getShell());
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XMouseInfoPeer.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XMouseInfoPeer.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -28,10 +28,11 @@
 import java.awt.Point;
 import java.awt.Window;
 import java.awt.GraphicsEnvironment;
-import java.awt.GraphicsConfiguration;
 import java.awt.GraphicsDevice;
 import java.awt.peer.MouseInfoPeer;
 
+import sun.awt.AWTAccessor;
+
 public class XMouseInfoPeer implements MouseInfoPeer {
 
     /**
@@ -83,8 +84,8 @@
         // java.awt.Component.findUnderMouseInWindow checks that
         // the peer is non-null by checking that the component
         // is showing.
-
-        long contentWindow = ((XWindow)w.getPeer()).getContentWindow();
+        XWindow peer = AWTAccessor.getComponentAccessor().getPeer(w);
+        long contentWindow = peer.getContentWindow();
         long parent = XlibUtil.getParentWindow(contentWindow);
 
         XToolkit.awtLock();
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XPanelPeer.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XPanelPeer.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -27,6 +27,8 @@
 import java.awt.*;
 import java.awt.peer.*;
 
+import sun.awt.AWTAccessor;
+import sun.awt.AWTAccessor.ComponentAccessor;
 import sun.awt.SunGraphicsCallback;
 
 public class XPanelPeer extends XCanvasPeer implements PanelPeer {
@@ -76,17 +78,17 @@
 
     }
 
-    @SuppressWarnings("deprecation")
     public void setBackground(Color c) {
         Component comp;
         int i;
 
         Container cont = (Container) target;
+        final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
         synchronized(target.getTreeLock()) {
             int n = cont.getComponentCount();
             for(i=0; i < n; i++) {
                 comp = cont.getComponent(i);
-                ComponentPeer peer = comp.getPeer();
+                ComponentPeer peer = acc.getPeer(comp);
                 if (peer != null) {
                     Color color = comp.getBackground();
                     if (color == null || color.equals(c)) {
@@ -102,15 +104,15 @@
         setForegroundForHierarchy((Container) target, c);
     }
 
-    @SuppressWarnings("deprecation")
     private void setForegroundForHierarchy(Container cont, Color c) {
         synchronized(target.getTreeLock()) {
+            final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
             int n = cont.getComponentCount();
             for(int i=0; i < n; i++) {
                 Component comp = cont.getComponent(i);
                 Color color = comp.getForeground();
                 if (color == null || color.equals(c)) {
-                    ComponentPeer cpeer = comp.getPeer();
+                    ComponentPeer cpeer = acc.getPeer(comp);
                     if (cpeer != null) {
                         cpeer.setForeground(c);
                     }
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XRepaintArea.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XRepaintArea.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -29,6 +29,7 @@
 import java.awt.Component;
 import java.awt.Graphics;
 
+import sun.awt.AWTAccessor;
 import sun.awt.RepaintArea;
 
 /**
@@ -55,10 +56,10 @@
     /**
      * Calls <code>Component.paint(Graphics)</code> with given Graphics.
      */
-    @SuppressWarnings("deprecation")
     protected void paintComponent(Component comp, Graphics g) {
         if (comp != null) {
-            final XComponentPeer peer = (XComponentPeer) comp.getPeer();
+            final XComponentPeer peer = AWTAccessor.getComponentAccessor()
+                                                   .getPeer(comp);
             if (peer != null) {
                 peer.paintPeer(g);
             }
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XTextAreaPeer.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XTextAreaPeer.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1164,12 +1164,6 @@
         }
 
         @Override
-        @SuppressWarnings("deprecation")
-        public ComponentPeer getPeer() {
-            return (ComponentPeer) (xwin);
-        }
-
-        @Override
         public void updateUI() {
             ComponentUI ui = new XAWTScrollPaneUI();
             setUI(ui);
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XTextFieldPeer.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XTextFieldPeer.java	Wed Jul 05 20:33:35 2017 +0200
@@ -547,71 +547,63 @@
             implements ActionListener, DocumentListener {
 
         private boolean isFocused = false;
-        private final XComponentPeer peer;
+        private final XComponentPeer xwin;
 
-        XAWTTextField(String text, XComponentPeer peer, Container parent) {
+        XAWTTextField(String text, XComponentPeer xwin, Container parent) {
             super(text);
-            this.peer = peer;
+            this.xwin = xwin;
             setDoubleBuffered(true);
             setFocusable(false);
             AWTAccessor.getComponentAccessor().setParent(this,parent);
-            setBackground(peer.getPeerBackground());
-            setForeground(peer.getPeerForeground());
-            setFont(peer.getPeerFont());
+            setBackground(xwin.getPeerBackground());
+            setForeground(xwin.getPeerForeground());
+            setFont(xwin.getPeerFont());
             setCaretPosition(0);
             addActionListener(this);
             addNotify();
-
         }
 
         @Override
         @SuppressWarnings("deprecation")
         public void actionPerformed( ActionEvent actionEvent ) {
-            peer.postEvent(new ActionEvent(peer.target,
-                                           ActionEvent.ACTION_PERFORMED,
-                                           getText(),
-                                           actionEvent.getWhen(),
-                                           actionEvent.getModifiers()));
+            xwin.postEvent(
+                    new ActionEvent(xwin.target, ActionEvent.ACTION_PERFORMED,
+                                    getText(), actionEvent.getWhen(),
+                                    actionEvent.getModifiers()));
 
         }
 
         @Override
         public void insertUpdate(DocumentEvent e) {
-            if (peer != null) {
-                peer.postEvent(new TextEvent(peer.target,
+            if (xwin != null) {
+                xwin.postEvent(new TextEvent(xwin.target,
                                              TextEvent.TEXT_VALUE_CHANGED));
             }
         }
 
         @Override
         public void removeUpdate(DocumentEvent e) {
-            if (peer != null) {
-                peer.postEvent(new TextEvent(peer.target,
+            if (xwin != null) {
+                xwin.postEvent(new TextEvent(xwin.target,
                                              TextEvent.TEXT_VALUE_CHANGED));
             }
         }
 
         @Override
         public void changedUpdate(DocumentEvent e) {
-            if (peer != null) {
-                peer.postEvent(new TextEvent(peer.target,
+            if (xwin != null) {
+                xwin.postEvent(new TextEvent(xwin.target,
                                              TextEvent.TEXT_VALUE_CHANGED));
             }
         }
 
-        @Override
-        @SuppressWarnings("deprecation")
-        public ComponentPeer getPeer() {
-            return (ComponentPeer) peer;
-        }
-
         public void repaintNow() {
             paintImmediately(getBounds());
         }
 
         @Override
         public Graphics getGraphics() {
-            return peer.getGraphics();
+            return xwin.getGraphics();
         }
 
         @Override
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XToolkit.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XToolkit.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -175,6 +175,7 @@
         return uidefaults;
     }
 
+    @Override
     public void loadSystemColors(int[] systemColors) {
         nativeLoadSystemColors(systemColors);
         MotifColorUtilities.loadSystemColors(systemColors);
@@ -347,18 +348,21 @@
         }
     }
 
+    @Override
     public ButtonPeer createButton(Button target) {
         ButtonPeer peer = new XButtonPeer(target);
         targetCreatedPeer(target, peer);
         return peer;
     }
 
+    @Override
     public FramePeer createLightweightFrame(LightweightFrame target) {
         FramePeer peer = new XLightweightFramePeer(target);
         targetCreatedPeer(target, peer);
         return peer;
     }
 
+    @Override
     public FramePeer createFrame(Frame target) {
         FramePeer peer = new XFramePeer(target);
         targetCreatedPeer(target, peer);
@@ -540,6 +544,7 @@
 
     static native void awt_toolkit_init();
 
+    @Override
     public void run() {
         awt_toolkit_init();
         run(PRIMARY_LOOP);
@@ -605,7 +610,7 @@
                     Component owner =
                         XKeyboardFocusManagerPeer.getInstance().getCurrentFocusOwner();
                     if (owner != null) {
-                        XWindow ownerWindow = (XWindow) AWTAccessor.getComponentAccessor().getPeer(owner);
+                        XWindow ownerWindow = AWTAccessor.getComponentAccessor().getPeer(owner);
                         if (ownerWindow != null) {
                             w = ownerWindow.getContentWindow();
                         }
@@ -680,10 +685,12 @@
         return screenHeight;
     }
 
+    @Override
     protected int getScreenWidth() {
         return getDefaultScreenWidth();
     }
 
+    @Override
     protected int getScreenHeight() {
         return getDefaultScreenHeight();
     }
@@ -724,6 +731,7 @@
      * not set, we try to calculate the insets ourselves using
      * getScreenInsetsManually method.
      */
+    @Override
     public Insets getScreenInsets(GraphicsConfiguration gc)
     {
         XNETProtocol netProto = XWM.getWM().getNETProtocol();
@@ -911,6 +919,7 @@
         SunToolkit.targetDisposedPeer(target, peer);
     }
 
+    @Override
     public RobotPeer createRobot(Robot target, GraphicsDevice screen) {
         return new XRobotPeer(screen.getDefaultConfiguration());
     }
@@ -922,10 +931,12 @@
      * automatically.  The setter method for this property is
      * irrelevant on X.
      */
+    @Override
     public void setDynamicLayout(boolean b) {
         dynamicLayoutSetting = b;
     }
 
+    @Override
     protected boolean isDynamicLayoutSet() {
         return dynamicLayoutSetting;
     }
@@ -937,15 +948,17 @@
         return XWM.getWM().supportsDynamicLayout();
     }
 
+    @Override
     public boolean isDynamicLayoutActive() {
         return isDynamicLayoutSupported();
     }
 
-
+    @Override
     public FontPeer getFontPeer(String name, int style){
         return new XFontPeer(name, style);
     }
 
+    @Override
     public DragSourceContextPeer createDragSourceContextPeer(DragGestureEvent dge) throws InvalidDnDOperationException {
         final LightweightFrame f = SunToolkit.getLightweightFrame(dge.getComponent());
         if (f != null) {
@@ -955,6 +968,7 @@
         return XDragSourceContextPeer.createDragSourceContextPeer(dge);
     }
 
+    @Override
     @SuppressWarnings("unchecked")
     public <T extends DragGestureRecognizer> T
     createDragGestureRecognizer(Class<T> recognizerClass,
@@ -974,6 +988,7 @@
             return null;
     }
 
+    @Override
     public CheckboxMenuItemPeer createCheckboxMenuItem(CheckboxMenuItem target) {
         XCheckboxMenuItemPeer peer = new XCheckboxMenuItemPeer(target);
         //vb157120: looks like we don't need to map menu items
@@ -982,6 +997,7 @@
         return peer;
     }
 
+    @Override
     public MenuItemPeer createMenuItem(MenuItem target) {
         XMenuItemPeer peer = new XMenuItemPeer(target);
         //vb157120: looks like we don't need to map menu items
@@ -990,72 +1006,84 @@
         return peer;
     }
 
+    @Override
     public TextFieldPeer createTextField(TextField target) {
         TextFieldPeer  peer = new XTextFieldPeer(target);
         targetCreatedPeer(target, peer);
         return peer;
     }
 
+    @Override
     public LabelPeer createLabel(Label target) {
         LabelPeer  peer = new XLabelPeer(target);
         targetCreatedPeer(target, peer);
         return peer;
     }
 
+    @Override
     public ListPeer createList(java.awt.List target) {
         ListPeer peer = new XListPeer(target);
         targetCreatedPeer(target, peer);
         return peer;
     }
 
+    @Override
     public CheckboxPeer createCheckbox(Checkbox target) {
         CheckboxPeer peer = new XCheckboxPeer(target);
         targetCreatedPeer(target, peer);
         return peer;
     }
 
+    @Override
     public ScrollbarPeer createScrollbar(Scrollbar target) {
         XScrollbarPeer peer = new XScrollbarPeer(target);
         targetCreatedPeer(target, peer);
         return peer;
     }
 
+    @Override
     public ScrollPanePeer createScrollPane(ScrollPane target) {
         XScrollPanePeer peer = new XScrollPanePeer(target);
         targetCreatedPeer(target, peer);
         return peer;
     }
 
+    @Override
     public TextAreaPeer createTextArea(TextArea target) {
         TextAreaPeer peer = new XTextAreaPeer(target);
         targetCreatedPeer(target, peer);
         return peer;
     }
 
+    @Override
     public ChoicePeer createChoice(Choice target) {
         XChoicePeer peer = new XChoicePeer(target);
         targetCreatedPeer(target, peer);
         return peer;
     }
 
+    @Override
     public CanvasPeer createCanvas(Canvas target) {
         XCanvasPeer peer = (isXEmbedServerRequested() ? new XEmbedCanvasPeer(target) : new XCanvasPeer(target));
         targetCreatedPeer(target, peer);
         return peer;
     }
 
+    @Override
     public PanelPeer createPanel(Panel target) {
         PanelPeer peer = new XPanelPeer(target);
         targetCreatedPeer(target, peer);
         return peer;
     }
 
+    @Override
     public WindowPeer createWindow(Window target) {
         WindowPeer peer = new XWindowPeer(target);
         targetCreatedPeer(target, peer);
         return peer;
     }
 
+    @Override
     public DialogPeer createDialog(Dialog target) {
         DialogPeer peer = new XDialogPeer(target);
         targetCreatedPeer(target, peer);
@@ -1076,6 +1104,7 @@
         return sunAwtDisableGtkFileDialogs.booleanValue();
     }
 
+    @Override
     public FileDialogPeer createFileDialog(FileDialog target) {
         FileDialogPeer peer = null;
         // The current GtkFileChooser is available from GTK+ 2.4
@@ -1088,12 +1117,14 @@
         return peer;
     }
 
+    @Override
     public MenuBarPeer createMenuBar(MenuBar target) {
         XMenuBarPeer peer = new XMenuBarPeer(target);
         targetCreatedPeer(target, peer);
         return peer;
     }
 
+    @Override
     public MenuPeer createMenu(Menu target) {
         XMenuPeer peer = new XMenuPeer(target);
         //vb157120: looks like we don't need to map menu items
@@ -1102,12 +1133,14 @@
         return peer;
     }
 
+    @Override
     public PopupMenuPeer createPopupMenu(PopupMenu target) {
         XPopupMenuPeer peer = new XPopupMenuPeer(target);
         targetCreatedPeer(target, peer);
         return peer;
     }
 
+    @Override
     public synchronized MouseInfoPeer getMouseInfoPeer() {
         if (xPeer == null) {
             xPeer = new XMouseInfoPeer();
@@ -1128,6 +1161,7 @@
         return peer;
     }
 
+    @Override
     public KeyboardFocusManagerPeer getKeyboardFocusManagerPeer() throws HeadlessException {
         return XKeyboardFocusManagerPeer.getInstance();
     }
@@ -1135,11 +1169,13 @@
     /**
      * Returns a new custom cursor.
      */
+    @Override
     public Cursor createCustomCursor(Image cursor, Point hotSpot, String name)
       throws IndexOutOfBoundsException {
         return new XCustomCursor(cursor, hotSpot, name);
     }
 
+    @Override
     public TrayIconPeer createTrayIcon(TrayIcon target)
       throws HeadlessException, AWTException
     {
@@ -1148,11 +1184,13 @@
         return peer;
     }
 
+    @Override
     public SystemTrayPeer createSystemTray(SystemTray target) throws HeadlessException {
         SystemTrayPeer peer = new XSystemTrayPeer(target);
         return peer;
     }
 
+    @Override
     public boolean isTraySupported() {
         XSystemTrayPeer peer = XSystemTrayPeer.getPeerInstance();
         if (peer != null) {
@@ -1169,16 +1207,19 @@
     /**
      * Returns the supported cursor size
      */
+    @Override
     public Dimension getBestCursorSize(int preferredWidth, int preferredHeight) {
         return XCustomCursor.getBestCursorSize(
                                                java.lang.Math.max(1,preferredWidth), java.lang.Math.max(1,preferredHeight));
     }
 
 
+    @Override
     public int getMaximumCursorColors() {
         return 2;  // Black and white.
     }
 
+    @Override
     public Map<TextAttribute, ?> mapInputMethodHighlight( InputMethodHighlight highlight) {
         return XInputMethod.mapInputMethodHighlight(highlight);
     }
@@ -1196,6 +1237,7 @@
         }
     }
 
+    @Override
     public  Clipboard getSystemClipboard() {
         SecurityManager security = System.getSecurityManager();
         if (security != null) {
@@ -1209,6 +1251,7 @@
         return clipboard;
     }
 
+    @Override
     public Clipboard getSystemSelection() {
         SecurityManager security = System.getSecurityManager();
         if (security != null) {
@@ -1222,6 +1265,7 @@
         return selection;
     }
 
+    @Override
     public void beep() {
         awtLock();
         try {
@@ -1232,6 +1276,7 @@
         }
     }
 
+    @Override
     public PrintJob getPrintJob(final Frame frame, final String doctitle,
                                 final Properties props) {
 
@@ -1247,6 +1292,7 @@
         return printJob;
     }
 
+    @Override
     public PrintJob getPrintJob(final Frame frame, final String doctitle,
                 final JobAttributes jobAttributes,
                 final PageAttributes pageAttributes)
@@ -1274,6 +1320,7 @@
         }
     }
 
+    @Override
     public int getScreenResolution() {
         long display = getDisplay();
         awtLock();
@@ -1299,6 +1346,7 @@
         return screenmodel;
     }
 
+    @Override
     public ColorModel getColorModel() {
         return getStaticColorModel();
     }
@@ -1306,6 +1354,7 @@
     /**
      * Returns a new input method adapter descriptor for native input methods.
      */
+    @Override
     public InputMethodDescriptor getInputMethodAdapterDescriptor() throws AWTException {
         return new XInputMethodDescriptor();
     }
@@ -1357,6 +1406,7 @@
         }
     }
 
+    @Override
     public boolean isFrameStateSupported(int state)
       throws HeadlessException
     {
@@ -1399,6 +1449,7 @@
 
     private static final XEventDispatcher timeFetcher =
     new XEventDispatcher() {
+            @Override
             public void dispatchEvent(XEvent ev) {
                 switch (ev.get_type()) {
                   case XConstants.PropertyNotify:
@@ -1467,6 +1518,7 @@
         }
         return timeStamp;
     }
+    @Override
     protected void initializeDesktopProperties() {
         desktopProperties.put("DnD.Autoscroll.initialDelay",
                               Integer.valueOf(50));
@@ -1525,6 +1577,7 @@
     private final static String postfix = ".32x32";
     private static final String dndPrefix  = "DnD.";
 
+    @Override
     protected Object lazilyLoadDesktopProperty(String name) {
         if (name.startsWith(prefix)) {
             String cursorName = name.substring(prefix.length(), name.length()) + postfix;
@@ -1547,6 +1600,7 @@
         return super.lazilyLoadDesktopProperty(name);
     }
 
+    @Override
     public synchronized void addPropertyChangeListener(String name, PropertyChangeListener pcl) {
         if (name == null) {
             // See JavaDoc for the Toolkit.addPropertyChangeListener() method
@@ -2045,12 +2099,14 @@
     /**
      * @see sun.awt.SunToolkit#needsXEmbedImpl
      */
+    @Override
     protected boolean needsXEmbedImpl() {
         // XToolkit implements supports for XEmbed-client protocol and
         // requires the supports from the embedding host for it to work.
         return true;
     }
 
+    @Override
     public boolean isModalityTypeSupported(Dialog.ModalityType modalityType) {
         return (modalityType == null) ||
                (modalityType == Dialog.ModalityType.MODELESS) ||
@@ -2059,6 +2115,7 @@
                (modalityType == Dialog.ModalityType.TOOLKIT_MODAL);
     }
 
+    @Override
     public boolean isModalExclusionTypeSupported(Dialog.ModalExclusionType exclusionType) {
         return (exclusionType == null) ||
                (exclusionType == Dialog.ModalExclusionType.NO_EXCLUDE) ||
@@ -2081,6 +2138,7 @@
             .removeSourceEvents(queue, source, removeAllEvents);
     }
 
+    @Override
     public boolean isAlwaysOnTopSupported() {
         for (XLayerProtocol proto : XWM.getWM().getProtocols(XLayerProtocol.class)) {
             if (proto.supportsLayer(XLayerProtocol.LAYER_ALWAYS_ON_TOP)) {
@@ -2090,6 +2148,7 @@
         return false;
     }
 
+    @Override
     public boolean useBufferPerWindow() {
         return XToolkit.getBackingStoreType() == XConstants.NotUseful;
     }
@@ -2398,11 +2457,13 @@
     /**
      * @inheritDoc
      */
+    @Override
     protected boolean syncNativeQueue(final long timeout) {
         XBaseWindow win = XBaseWindow.getXAWTRootWindow();
 
         if (oops_waiter == null) {
             oops_waiter = new XEventDispatcher() {
+                    @Override
                     public void dispatchEvent(XEvent e) {
                         if (e.get_type() == XConstants.ConfigureNotify) {
                             // OOPS ConfigureNotify event catched
@@ -2449,17 +2510,19 @@
             awtUnlock();
         }
     }
-    @SuppressWarnings("deprecation")
+    @Override
     public void grab(Window w) {
-        if (w.getPeer() != null) {
-            ((XWindowPeer)w.getPeer()).setGrab(true);
+        final Object peer = AWTAccessor.getComponentAccessor().getPeer(w);
+        if (peer != null) {
+            ((XWindowPeer) peer).setGrab(true);
         }
     }
 
-    @SuppressWarnings("deprecation")
+    @Override
     public void ungrab(Window w) {
-        if (w.getPeer() != null) {
-           ((XWindowPeer)w.getPeer()).setGrab(false);
+        final Object peer = AWTAccessor.getComponentAccessor().getPeer(w);
+        if (peer != null) {
+            ((XWindowPeer) peer).setGrab(false);
         }
     }
     /**
@@ -2469,14 +2532,17 @@
      * The methods of java.awt.Desktop class are supported on the Gnome desktop.
      * Check if the running desktop is Gnome by checking the window manager.
      */
+    @Override
     public boolean isDesktopSupported(){
         return XDesktopPeer.isDesktopSupported();
     }
 
+    @Override
     public DesktopPeer createDesktopPeer(Desktop target){
         return new XDesktopPeer();
     }
 
+    @Override
     public boolean areExtraMouseButtonsEnabled() throws HeadlessException {
         return areExtraMouseButtonsEnabled;
     }
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XTrayIconPeer.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XTrayIconPeer.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -30,8 +30,6 @@
 import java.awt.peer.TrayIconPeer;
 import sun.awt.*;
 import java.awt.image.*;
-import java.text.BreakIterator;
-import java.util.concurrent.ArrayBlockingQueue;
 import java.security.AccessController;
 import java.security.PrivilegedAction;
 import java.lang.reflect.InvocationTargetException;
@@ -347,7 +345,6 @@
     }
 
     // It's synchronized with disposal by EDT.
-    @SuppressWarnings("deprecation")
     public void showPopupMenu(int x, int y) {
         if (isDisposed())
             return;
@@ -366,7 +363,9 @@
         }
 
         if (popup != null) {
-            Point loc = ((XBaseWindow)eframe.getPeer()).toLocal(new Point(x, y));
+            final XBaseWindow peer = AWTAccessor.getComponentAccessor()
+                                                .getPeer(eframe);
+            Point loc = peer.toLocal(new Point(x, y));
             popup.show(eframe, loc.x, loc.y);
         }
     }
@@ -416,9 +415,9 @@
         canvas.addMouseMotionListener(eventProxy);
     }
 
-    @SuppressWarnings("deprecation")
     long getWindow() {
-        return ((XEmbeddedFramePeer)eframe.getPeer()).getWindow();
+        return AWTAccessor.getComponentAccessor()
+                          .<XEmbeddedFramePeer>getPeer(eframe).getWindow();
     }
 
     public boolean isDisposed() {
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XWindow.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XWindow.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -34,6 +34,7 @@
 
 import java.lang.reflect.Method;
 
+import sun.awt.AWTAccessor.ComponentAccessor;
 import sun.util.logging.PlatformLogger;
 
 import sun.awt.*;
@@ -282,15 +283,15 @@
         return reparented;
     }
 
-    @SuppressWarnings("deprecation")
     static long getParentWindowID(Component target) {
 
-        ComponentPeer peer = target.getParent().getPeer();
         Component temp = target.getParent();
+        final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
+        ComponentPeer peer = acc.getPeer(temp);
         while (!(peer instanceof XWindow))
         {
             temp = temp.getParent();
-            peer = temp.getPeer();
+            peer = acc.getPeer(temp);
         }
 
         if (peer != null && peer instanceof XWindow)
@@ -299,17 +300,17 @@
     }
 
 
-    @SuppressWarnings("deprecation")
     static XWindow getParentXWindowObject(Component target) {
         if (target == null) return null;
         Component temp = target.getParent();
         if (temp == null) return null;
-        ComponentPeer peer = temp.getPeer();
+        final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
+        ComponentPeer peer = acc.getPeer(temp);
         if (peer == null) return null;
         while ((peer != null) && !(peer instanceof XWindow))
         {
             temp = temp.getParent();
-            peer = temp.getPeer();
+            peer = acc.getPeer(temp);
         }
         if (peer != null && peer instanceof XWindow)
             return (XWindow) peer;
@@ -552,7 +553,7 @@
         int h = xe.get_height();
 
         Component target = getEventSource();
-        AWTAccessor.ComponentAccessor compAccessor = AWTAccessor.getComponentAccessor();
+        ComponentAccessor compAccessor = AWTAccessor.getComponentAccessor();
 
         if (!compAccessor.getIgnoreRepaint(target)
             && compAccessor.getWidth(target) != 0
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11/XWindowPeer.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11/XWindowPeer.java	Wed Jul 05 20:33:35 2017 +0200
@@ -46,6 +46,7 @@
 
 import java.util.concurrent.atomic.AtomicBoolean;
 
+import sun.awt.AWTAccessor.ComponentAccessor;
 import sun.util.logging.PlatformLogger;
 
 import sun.awt.AWTAccessor;
@@ -225,7 +226,7 @@
         Window t_window = (Window)target;
         Window owner = t_window.getOwner();
         if (owner != null) {
-            ownerPeer = (XWindowPeer)owner.getPeer();
+            ownerPeer = AWTAccessor.getComponentAccessor().getPeer(owner);
             if (focusLog.isLoggable(PlatformLogger.Level.FINER)) {
                 focusLog.finer("Owner is " + owner);
                 focusLog.finer("Owner peer is " + ownerPeer);
@@ -401,15 +402,15 @@
         }
     }
 
-    @SuppressWarnings("deprecation")
     public void recursivelySetIcon(java.util.List<IconInfo> icons) {
         dumpIcons(winAttr.icons);
         setIconHints(icons);
         Window target = (Window)this.target;
         Window[] children = target.getOwnedWindows();
         int cnt = children.length;
+        final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
         for (int i = 0; i < cnt; i++) {
-            ComponentPeer childPeer = children[i].getPeer();
+            final ComponentPeer childPeer = acc.getPeer(children[i]);
             if (childPeer != null && childPeer instanceof XWindowPeer) {
                 if (((XWindowPeer)childPeer).winAttr.iconsInherited) {
                     ((XWindowPeer)childPeer).winAttr.icons = icons;
@@ -1161,7 +1162,7 @@
         if (warningWindow != null) {
             // We can't use the coordinates stored in the XBaseWindow since
             // they are zeros for decorated frames.
-            AWTAccessor.ComponentAccessor compAccessor = AWTAccessor.getComponentAccessor();
+            ComponentAccessor compAccessor = AWTAccessor.getComponentAccessor();
             int x = compAccessor.getX(target);
             int y = compAccessor.getY(target);
             int width = compAccessor.getWidth(target);
@@ -1486,7 +1487,7 @@
         XToolkit.awtLock();
         try {
             if (isReparented() && delayedModalBlocking) {
-                addToTransientFors((XDialogPeer) AWTAccessor.getComponentAccessor().getPeer(modalBlocker));
+                addToTransientFors(AWTAccessor.getComponentAccessor().getPeer(modalBlocker));
                 delayedModalBlocking = false;
             }
         } finally {
@@ -1570,7 +1571,7 @@
         try {
             // State lock should always be after awtLock
             synchronized(getStateLock()) {
-                XDialogPeer blockerPeer = (XDialogPeer) AWTAccessor.getComponentAccessor().getPeer(d);
+                XDialogPeer blockerPeer = AWTAccessor.getComponentAccessor().getPeer(d);
                 if (blocked) {
                     if (log.isLoggable(PlatformLogger.Level.FINE)) {
                         log.fine("{0} is blocked by {1}", this, blockerPeer);
@@ -1852,7 +1853,7 @@
         // current chain iterator in the order from next to prev
         XWindowPeer chainToSplit = prevTransientFor;
         while (chainToSplit != null) {
-            XWindowPeer blocker = (XWindowPeer) AWTAccessor.getComponentAccessor().getPeer(chainToSplit.modalBlocker);
+            XWindowPeer blocker = AWTAccessor.getComponentAccessor().getPeer(chainToSplit.modalBlocker);
             if (thisChainBlockers.contains(blocker)) {
                 // add to this dialog's chain
                 setToplevelTransientFor(thisChain, chainToSplit, true, false);
@@ -1913,7 +1914,7 @@
         }
         focusLog.fine("Parent window is not active");
 
-        XDecoratedPeer wpeer = (XDecoratedPeer)AWTAccessor.getComponentAccessor().getPeer(ownerWindow);
+        XDecoratedPeer wpeer = AWTAccessor.getComponentAccessor().getPeer(ownerWindow);
         if (wpeer != null && wpeer.requestWindowFocus(this, time, timeProvided)) {
             focusLog.fine("Parent window accepted focus request - generating focus for this window");
             return true;
@@ -2259,7 +2260,7 @@
                         while (w != null && toplevel != this && !(toplevel instanceof XDialogPeer)) {
                             w = (Window) AWTAccessor.getComponentAccessor().getParent(w);
                             if (w != null) {
-                                toplevel = (XWindowPeer) AWTAccessor.getComponentAccessor().getPeer(w);
+                                toplevel = AWTAccessor.getComponentAccessor().getPeer(w);
                             }
                         }
                         if (w == null || (w != this.target && w instanceof Dialog)) {
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11ComponentPeer.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11ComponentPeer.java	Wed Jul 05 20:33:35 2017 +0200
@@ -32,6 +32,7 @@
 import java.awt.Graphics;
 
 public interface X11ComponentPeer {
+    long getWindow();
     long getContentWindow();
     SurfaceData getSurfaceData();
     GraphicsConfiguration getGraphicsConfiguration();
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11FontManager.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11FontManager.java	Wed Jul 05 20:33:35 2017 +0200
@@ -40,7 +40,7 @@
 import java.util.Vector;
 
 import javax.swing.plaf.FontUIResource;
-import sun.awt.motif.MFontConfiguration;
+import sun.font.MFontConfiguration;
 import sun.font.CompositeFont;
 import sun.font.FontManager;
 import sun.font.SunFontManager;
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11GraphicsDevice.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11GraphicsDevice.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -299,11 +299,7 @@
 
     @Override
     public boolean isFullScreenSupported() {
-        // REMIND: for now we will only allow fullscreen exclusive mode
-        // on the primary screen; we could change this behavior slightly
-        // in the future by allowing only one screen to be in fullscreen
-        // exclusive mode at any given time...
-        boolean fsAvailable = (screen == 0) && isXrandrExtensionSupported();
+        boolean fsAvailable = isXrandrExtensionSupported();
         if (fsAvailable) {
             SecurityManager security = System.getSecurityManager();
             if (security != null) {
@@ -326,21 +322,19 @@
         return (isFullScreenSupported() && (getFullScreenWindow() != null));
     }
 
-    @SuppressWarnings("deprecation")
     private static void enterFullScreenExclusive(Window w) {
-        X11ComponentPeer peer = (X11ComponentPeer)w.getPeer();
+        X11ComponentPeer peer = AWTAccessor.getComponentAccessor().getPeer(w);
         if (peer != null) {
-            enterFullScreenExclusive(peer.getContentWindow());
+            enterFullScreenExclusive(peer.getWindow());
             peer.setFullScreenExclusiveModeState(true);
         }
     }
 
-    @SuppressWarnings("deprecation")
     private static void exitFullScreenExclusive(Window w) {
-        X11ComponentPeer peer = (X11ComponentPeer)w.getPeer();
+        X11ComponentPeer peer = AWTAccessor.getComponentAccessor().getPeer(w);
         if (peer != null) {
             peer.setFullScreenExclusiveModeState(false);
-            exitFullScreenExclusive(peer.getContentWindow());
+            exitFullScreenExclusive(peer.getWindow());
         }
     }
 
@@ -382,7 +376,11 @@
     @Override
     public synchronized DisplayMode getDisplayMode() {
         if (isFullScreenSupported()) {
-            return getCurrentDisplayMode(screen);
+            DisplayMode mode = getCurrentDisplayMode(screen);
+            if (mode == null) {
+                mode = getDefaultDisplayMode();
+            }
+            return mode;
         } else {
             if (origDisplayMode == null) {
                 origDisplayMode = getDefaultDisplayMode();
--- a/jdk/src/java.desktop/unix/classes/sun/awt/X11GraphicsEnvironment.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/unix/classes/sun/awt/X11GraphicsEnvironment.java	Wed Jul 05 20:33:35 2017 +0200
@@ -43,7 +43,7 @@
 
 import java.util.*;
 
-import sun.awt.motif.MFontConfiguration;
+import sun.font.MFontConfiguration;
 import sun.font.FcFontConfiguration;
 import sun.font.Font2D;
 import sun.font.FontManager;
--- a/jdk/src/java.desktop/unix/classes/sun/awt/motif/MFontConfiguration.java	Thu May 14 20:14:44 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,332 +0,0 @@
-/*
- * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.awt.motif;
-
-import sun.awt.FontConfiguration;
-import sun.awt.X11FontManager;
-import sun.font.FontUtilities;
-import sun.font.SunFontManager;
-import sun.util.logging.PlatformLogger;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.nio.charset.Charset;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Properties;
-import java.util.Scanner;
-
-public class MFontConfiguration extends FontConfiguration {
-
-    private static FontConfiguration fontConfig = null;
-    private static PlatformLogger logger;
-
-    public MFontConfiguration(SunFontManager fm) {
-        super(fm);
-        if (FontUtilities.debugFonts()) {
-            logger = PlatformLogger.getLogger("sun.awt.FontConfiguration");
-        }
-        initTables();
-    }
-
-
-    public MFontConfiguration(SunFontManager fm,
-                              boolean preferLocaleFonts,
-                              boolean preferPropFonts) {
-        super(fm, preferLocaleFonts, preferPropFonts);
-        if (FontUtilities.debugFonts()) {
-            logger = PlatformLogger.getLogger("sun.awt.FontConfiguration");
-        }
-        initTables();
-    }
-
-    /* Needs to be kept in sync with updates in the languages used in
-     * the fontconfig files.
-     */
-    protected void initReorderMap() {
-        reorderMap = new HashMap<>();
-        if (osName == null) {  /* null means SunOS */
-            initReorderMapForSolaris();
-        } else {
-            initReorderMapForLinux();
-        }
-    }
-
-    private void initReorderMapForSolaris() {
-        /* Don't create a no-op entry, so we can optimize this case
-         * i.e. we don't need to do anything so can avoid slower paths in
-         * the code.
-         */
-//      reorderMap.put("UTF-8", "latin-1");
-        reorderMap.put("UTF-8.hi", "devanagari"); // NB is in Lucida.
-        reorderMap.put("UTF-8.ja",
-                       split("japanese-x0201,japanese-x0208,japanese-x0212"));
-        reorderMap.put("UTF-8.ko", "korean-johab");
-        reorderMap.put("UTF-8.th", "thai");
-        reorderMap.put("UTF-8.zh.TW", "chinese-big5");
-        reorderMap.put("UTF-8.zh.HK", split("chinese-big5,chinese-hkscs"));
-        if (FontUtilities.isSolaris8) {
-            reorderMap.put("UTF-8.zh.CN", split("chinese-gb2312,chinese-big5"));
-        } else {
-            reorderMap.put("UTF-8.zh.CN",
-                           split("chinese-gb18030-0,chinese-gb18030-1"));
-        }
-        reorderMap.put("UTF-8.zh",
-                       split("chinese-big5,chinese-hkscs,chinese-gb18030-0,chinese-gb18030-1"));
-        reorderMap.put("Big5", "chinese-big5");
-        reorderMap.put("Big5-HKSCS", split("chinese-big5,chinese-hkscs"));
-        if (! FontUtilities.isSolaris8 && ! FontUtilities.isSolaris9) {
-            reorderMap.put("GB2312", split("chinese-gbk,chinese-gb2312"));
-        } else {
-            reorderMap.put("GB2312","chinese-gb2312");
-        }
-        reorderMap.put("x-EUC-TW",
-            split("chinese-cns11643-1,chinese-cns11643-2,chinese-cns11643-3"));
-        reorderMap.put("GBK", "chinese-gbk");
-        reorderMap.put("GB18030",split("chinese-gb18030-0,chinese-gb18030-1"));
-
-        reorderMap.put("TIS-620", "thai");
-        reorderMap.put("x-PCK",
-                       split("japanese-x0201,japanese-x0208,japanese-x0212"));
-        reorderMap.put("x-eucJP-Open",
-                       split("japanese-x0201,japanese-x0208,japanese-x0212"));
-        reorderMap.put("EUC-KR", "korean");
-        /* Don't create a no-op entry, so we can optimize this case */
-//      reorderMap.put("ISO-8859-1", "latin-1");
-        reorderMap.put("ISO-8859-2", "latin-2");
-        reorderMap.put("ISO-8859-5", "cyrillic-iso8859-5");
-        reorderMap.put("windows-1251", "cyrillic-cp1251");
-        reorderMap.put("KOI8-R", "cyrillic-koi8-r");
-        reorderMap.put("ISO-8859-6", "arabic");
-        reorderMap.put("ISO-8859-7", "greek");
-        reorderMap.put("ISO-8859-8", "hebrew");
-        reorderMap.put("ISO-8859-9", "latin-5");
-        reorderMap.put("ISO-8859-13", "latin-7");
-        reorderMap.put("ISO-8859-15", "latin-9");
-    }
-
-    private void initReorderMapForLinux() {
-        reorderMap.put("UTF-8.ja.JP", "japanese-iso10646");
-        reorderMap.put("UTF-8.ko.KR", "korean-iso10646");
-        reorderMap.put("UTF-8.zh.TW", "chinese-tw-iso10646");
-        reorderMap.put("UTF-8.zh.HK", "chinese-tw-iso10646");
-        reorderMap.put("UTF-8.zh.CN", "chinese-cn-iso10646");
-        reorderMap.put("x-euc-jp-linux",
-                        split("japanese-x0201,japanese-x0208"));
-        reorderMap.put("GB2312", "chinese-gb18030");
-        reorderMap.put("Big5", "chinese-big5");
-        reorderMap.put("EUC-KR", "korean");
-        if (osName.equals("Sun")){
-            reorderMap.put("GB18030", "chinese-cn-iso10646");
-        }
-        else {
-            reorderMap.put("GB18030", "chinese-gb18030");
-        }
-    }
-
-    /**
-     * Sets the OS name and version from environment information.
-     */
-    protected void setOsNameAndVersion(){
-        super.setOsNameAndVersion();
-
-        if (osName.equals("SunOS")) {
-            //don't care os name on Solaris
-            osName = null;
-        } else if (osName.equals("Linux")) {
-            try {
-                File f;
-                if ((f = new File("/etc/fedora-release")).canRead()) {
-                    osName = "Fedora";
-                    osVersion = getVersionString(f);
-                } else if ((f = new File("/etc/redhat-release")).canRead()) {
-                    osName = "RedHat";
-                    osVersion = getVersionString(f);
-                } else if ((f = new File("/etc/turbolinux-release")).canRead()) {
-                    osName = "Turbo";
-                    osVersion = getVersionString(f);
-                } else if ((f = new File("/etc/SuSE-release")).canRead()) {
-                    osName = "SuSE";
-                    osVersion = getVersionString(f);
-                } else if ((f = new File("/etc/lsb-release")).canRead()) {
-                    /* Ubuntu and (perhaps others) use only lsb-release.
-                     * Syntax and encoding is compatible with java properties.
-                     * For Ubuntu the ID is "Ubuntu".
-                     */
-                    Properties props = new Properties();
-                    props.load(new FileInputStream(f));
-                    osName = props.getProperty("DISTRIB_ID");
-                    osVersion =  props.getProperty("DISTRIB_RELEASE");
-                }
-            } catch (Exception e) {
-            }
-        }
-        return;
-    }
-
-    /**
-     * Gets the OS version string from a Linux release-specific file.
-     */
-    private String getVersionString(File f){
-        try {
-            Scanner sc  = new Scanner(f);
-            return sc.findInLine("(\\d)+((\\.)(\\d)+)*");
-        }
-        catch (Exception e){
-        }
-        return null;
-    }
-
-    private static final String fontsDirPrefix = "$JRE_LIB_FONTS";
-
-    protected String mapFileName(String fileName) {
-        if (fileName != null && fileName.startsWith(fontsDirPrefix)) {
-            return SunFontManager.jreFontDirName
-                    + fileName.substring(fontsDirPrefix.length());
-        }
-        return fileName;
-    }
-
-    // overrides FontConfiguration.getFallbackFamilyName
-    public String getFallbackFamilyName(String fontName, String defaultFallback) {
-        // maintain compatibility with old font.properties files, which
-        // either had aliases for TimesRoman & Co. or defined mappings for them.
-        String compatibilityName = getCompatibilityFamilyName(fontName);
-        if (compatibilityName != null) {
-            return compatibilityName;
-        }
-        return defaultFallback;
-    }
-
-    protected String getEncoding(String awtFontName,
-            String characterSubsetName) {
-        // extract encoding field from XLFD
-        int beginIndex = 0;
-        int fieldNum = 13; // charset registry field
-        while (fieldNum-- > 0 && beginIndex >= 0) {
-            beginIndex = awtFontName.indexOf("-", beginIndex) + 1;
-        }
-        if (beginIndex == -1) {
-            return "default";
-        }
-        String xlfdEncoding = awtFontName.substring(beginIndex);
-        if (xlfdEncoding.indexOf("fontspecific") > 0) {
-            if (awtFontName.indexOf("dingbats") > 0) {
-                return "sun.awt.motif.X11Dingbats";
-            } else if (awtFontName.indexOf("symbol") > 0) {
-                return "sun.awt.Symbol";
-            }
-        }
-        String encoding = encodingMap.get(xlfdEncoding);
-        if (encoding == null) {
-            encoding = "default";
-        }
-        return encoding;
-    }
-
-    protected Charset getDefaultFontCharset(String fontName) {
-        return Charset.forName("ISO8859_1");
-    }
-
-    protected String getFaceNameFromComponentFontName(String componentFontName) {
-        return null;
-    }
-
-    protected String getFileNameFromComponentFontName(String componentFontName) {
-        // for X11, component font name is XLFD
-        // if we have a file name already, just use it; otherwise let's see
-        // what the graphics environment can provide
-        String fileName = getFileNameFromPlatformName(componentFontName);
-        if (fileName != null && fileName.charAt(0) == '/' &&
-            !needToSearchForFile(fileName)) {
-            return fileName;
-        }
-        return ((X11FontManager) fontManager).getFileNameFromXLFD(componentFontName);
-    }
-
-    public HashSet<String> getAWTFontPathSet() {
-        HashSet<String> fontDirs = new HashSet<String>();
-        short[] scripts = getCoreScripts(0);
-        for (int i = 0; i< scripts.length; i++) {
-            String path = getString(table_awtfontpaths[scripts[i]]);
-            if (path != null) {
-                int start = 0;
-                int colon = path.indexOf(':');
-                while (colon >= 0) {
-                    fontDirs.add(path.substring(start, colon));
-                    start = colon + 1;
-                    colon = path.indexOf(':', start);
-                }
-                fontDirs.add((start == 0) ? path : path.substring(start));
-            }
-        }
-        return fontDirs;
-    }
-
-    /* methods for table setup ***********************************************/
-
-    private static HashMap<String, String> encodingMap = new HashMap<>();
-
-    private void initTables() {
-        // encodingMap maps XLFD encoding component to
-        // name of corresponding java.nio charset
-        encodingMap.put("iso8859-1", "ISO-8859-1");
-        encodingMap.put("iso8859-2", "ISO-8859-2");
-        encodingMap.put("iso8859-4", "ISO-8859-4");
-        encodingMap.put("iso8859-5", "ISO-8859-5");
-        encodingMap.put("iso8859-6", "ISO-8859-6");
-        encodingMap.put("iso8859-7", "ISO-8859-7");
-        encodingMap.put("iso8859-8", "ISO-8859-8");
-        encodingMap.put("iso8859-9", "ISO-8859-9");
-        encodingMap.put("iso8859-13", "ISO-8859-13");
-        encodingMap.put("iso8859-15", "ISO-8859-15");
-        encodingMap.put("gb2312.1980-0", "sun.awt.motif.X11GB2312");
-        if (osName == null) {
-            // use standard converter on Solaris
-            encodingMap.put("gbk-0", "GBK");
-        } else {
-            encodingMap.put("gbk-0", "sun.awt.motif.X11GBK");
-        }
-        encodingMap.put("gb18030.2000-0", "sun.awt.motif.X11GB18030_0");
-        encodingMap.put("gb18030.2000-1", "sun.awt.motif.X11GB18030_1");
-        encodingMap.put("cns11643-1", "sun.awt.motif.X11CNS11643P1");
-        encodingMap.put("cns11643-2", "sun.awt.motif.X11CNS11643P2");
-        encodingMap.put("cns11643-3", "sun.awt.motif.X11CNS11643P3");
-        encodingMap.put("big5-1", "Big5");
-        encodingMap.put("big5-0", "Big5");
-        encodingMap.put("hkscs-1", "Big5-HKSCS");
-        encodingMap.put("ansi-1251", "windows-1251");
-        encodingMap.put("koi8-r", "KOI8-R");
-        encodingMap.put("jisx0201.1976-0", "sun.awt.motif.X11JIS0201");
-        encodingMap.put("jisx0208.1983-0", "sun.awt.motif.X11JIS0208");
-        encodingMap.put("jisx0212.1990-0", "sun.awt.motif.X11JIS0212");
-        encodingMap.put("ksc5601.1987-0", "sun.awt.motif.X11KSC5601");
-        encodingMap.put("ksc5601.1992-3", "sun.awt.motif.X11Johab");
-        encodingMap.put("tis620.2533-0", "TIS-620");
-        encodingMap.put("iso10646-1", "UTF-16BE");
-    }
-
-}
--- a/jdk/src/java.desktop/unix/classes/sun/awt/motif/X11CNS11643.java	Thu May 14 20:14:44 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,179 +0,0 @@
-/*
- * Copyright (c) 2001, 2008, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.awt.motif;
-
-import java.nio.CharBuffer;
-import java.nio.ByteBuffer;
-import java.nio.charset.*;
-import sun.nio.cs.*;
-import sun.nio.cs.ext.*;
-
-public abstract class X11CNS11643 extends Charset {
-    private final int plane;
-    public X11CNS11643 (int plane, String name) {
-        super(name, null);
-        switch (plane) {
-        case 1:
-            this.plane = 0; // CS1
-            break;
-        case 2:
-        case 3:
-            this.plane = plane;
-            break;
-        default:
-            throw new IllegalArgumentException
-                ("Only planes 1, 2, and 3 supported");
-        }
-    }
-
-    public CharsetEncoder newEncoder() {
-        return new Encoder(this, plane);
-    }
-
-    public CharsetDecoder newDecoder() {
-        return new Decoder(this, plane);
-    }
-
-    public boolean contains(Charset cs) {
-        return cs instanceof X11CNS11643;
-    }
-
-    private class Encoder extends EUC_TW.Encoder {
-        private int plane;
-        public Encoder(Charset cs, int plane) {
-            super(cs);
-            this.plane = plane;
-        }
-
-        private byte[] bb = new byte[4];
-        public boolean canEncode(char c) {
-            if (c <= 0x7F) {
-                return false;
-            }
-            int nb = toEUC(c, bb);
-            if (nb == -1)
-                return false;
-            int p = 0;
-            if (nb == 4)
-                p = (bb[1] & 0xff) - 0xa0;
-            return (p == plane);
-        }
-
-        public boolean isLegalReplacement(byte[] repl) {
-            return true;
-        }
-
-        protected CoderResult encodeLoop(CharBuffer src, ByteBuffer dst) {
-            char[] sa = src.array();
-            int sp = src.arrayOffset() + src.position();
-            int sl = src.arrayOffset() + src.limit();
-            byte[] da = dst.array();
-            int dp = dst.arrayOffset() + dst.position();
-            int dl = dst.arrayOffset() + dst.limit();
-
-            try {
-                while (sp < sl) {
-                    char c = sa[sp];
-                    if ( c > '\u007f'&& c < '\uFFFE') {
-                        int nb = toEUC(c, bb);
-                        if (nb != -1) {
-                            int p = 0;
-                            if (nb == 4)
-                                p = (bb[1] & 0xff) - 0xa0;
-                            if (p == plane) {
-                                if (dl - dp < 2)
-                                    return CoderResult.OVERFLOW;
-                                if (nb == 2) {
-                                    da[dp++] = (byte)(bb[0] & 0x7f);
-                                    da[dp++] = (byte)(bb[1] & 0x7f);
-                                } else {
-                                    da[dp++] = (byte)(bb[2] & 0x7f);
-                                    da[dp++] = (byte)(bb[3] & 0x7f);
-                                }
-                                sp++;
-                                continue;
-                            }
-                        }
-                    }
-                    return CoderResult.unmappableForLength(1);
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(sp - src.arrayOffset());
-                dst.position(dp - dst.arrayOffset());
-            }
-        }
-    }
-
-    private class Decoder extends EUC_TW.Decoder {
-        int plane;
-        private String table;
-        protected Decoder(Charset cs, int plane) {
-            super(cs);
-            if (plane == 0)
-                this.plane = plane;
-            else if (plane == 2 || plane == 3)
-                this.plane = plane - 1;
-            else
-                throw new IllegalArgumentException
-                    ("Only planes 1, 2, and 3 supported");
-        }
-
-        //we only work on array backed buffer.
-        protected CoderResult decodeLoop(ByteBuffer src, CharBuffer dst) {
-            byte[] sa = src.array();
-            int sp = src.arrayOffset() + src.position();
-            int sl = src.arrayOffset() + src.limit();
-
-            char[] da = dst.array();
-            int dp = dst.arrayOffset() + dst.position();
-            int dl = dst.arrayOffset() + dst.limit();
-
-            try {
-                while (sp < sl) {
-                    if ( sl - sp < 2) {
-                        return CoderResult.UNDERFLOW;
-                    }
-                    int b1 = (sa[sp] & 0xff) | 0x80;
-                    int b2 = (sa[sp + 1] & 0xff) | 0x80;
-                    char[] cc = toUnicode(b1, b2, plane);
-                    // plane3 has non-bmp characters(added), x11cnsp3
-                    // however does not support them
-                    if (cc == null || cc.length == 2)
-                        return CoderResult.unmappableForLength(2);
-                    if (dl - dp < 1)
-                        return CoderResult.OVERFLOW;
-                    da[dp++] = cc[0];
-                    sp +=2;
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(sp - src.arrayOffset());
-                dst.position(dp - dst.arrayOffset());
-            }
-        }
-    }
-}
--- a/jdk/src/java.desktop/unix/classes/sun/awt/motif/X11CNS11643P1.java	Thu May 14 20:14:44 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,33 +0,0 @@
-/*
- * Copyright (c) 1996, 2005, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-
-package sun.awt.motif;
-
-public class X11CNS11643P1 extends X11CNS11643 {
-    public X11CNS11643P1() {
-        super(1, "X11CNS11643P1");
-    }
-}
--- a/jdk/src/java.desktop/unix/classes/sun/awt/motif/X11CNS11643P2.java	Thu May 14 20:14:44 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,32 +0,0 @@
-/*
- * Copyright (c) 1996, 2005, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.awt.motif;
-
-public class X11CNS11643P2 extends X11CNS11643 {
-    public X11CNS11643P2() {
-        super(2, "X11CNS11643P2");
-    }
-}
--- a/jdk/src/java.desktop/unix/classes/sun/awt/motif/X11CNS11643P3.java	Thu May 14 20:14:44 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,32 +0,0 @@
-/*
- * Copyright (c) 1997, 2005, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.awt.motif;
-
-public class X11CNS11643P3 extends X11CNS11643 {
-    public X11CNS11643P3() {
-        super(3, "X11CNS11643P3");
-    }
-}
--- a/jdk/src/java.desktop/unix/classes/sun/awt/motif/X11Dingbats.java	Thu May 14 20:14:44 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,132 +0,0 @@
-/*
- * Copyright (c) 1996, 2005, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.awt.motif;
-
-import java.nio.ByteBuffer;
-import java.nio.CharBuffer;
-import java.nio.charset.*;
-
-public class X11Dingbats extends Charset {
-    public X11Dingbats () {
-        super("X11Dingbats", null);
-    }
-
-    public CharsetEncoder newEncoder() {
-        return new Encoder(this);
-    }
-
-    /* Seems like supporting a decoder is required, but we aren't going
-     * to be publically exposing this class, so no need to waste work
-     */
-    public CharsetDecoder newDecoder() {
-        throw new Error("Decoder is not supported by X11Dingbats Charset");
-    }
-
-    public boolean contains(Charset cs) {
-        return cs instanceof X11Dingbats;
-    }
-
-    private static class Encoder extends CharsetEncoder {
-        public Encoder(Charset cs) {
-            super(cs, 1.0f, 1.0f);
-        }
-
-        public boolean canEncode(char ch) {
-            if (ch >= 0x2701 && ch <= 0x275e) { // direct map
-                return true;
-            }
-            if (ch >= 0x2761 && ch <= 0x27be) {
-                return (table[ch - 0x2761] != 0x00);
-            }
-            return false;
-        }
-
-        protected CoderResult encodeLoop(CharBuffer src, ByteBuffer dst) {
-            char[] sa = src.array();
-            int sp = src.arrayOffset() + src.position();
-            int sl = src.arrayOffset() + src.limit();
-            assert (sp <= sl);
-            sp = (sp <= sl ? sp : sl);
-            byte[] da = dst.array();
-            int dp = dst.arrayOffset() + dst.position();
-            int dl = dst.arrayOffset() + dst.limit();
-            assert (dp <= dl);
-            dp = (dp <= dl ? dp : dl);
-
-            try {
-                while (sp < sl) {
-                    char c = sa[sp];
-                    if (dl - dp < 1)
-                        return CoderResult.OVERFLOW;
-
-                    if (!canEncode(c))
-                        return CoderResult.unmappableForLength(1);
-                    sp++;
-                    if (c >= 0x2761){
-                        da[dp++] = table[c - 0x2761]; // table lookup
-                    } else {
-                        da[dp++] = (byte)(c + 0x20 - 0x2700); // direct map
-                    }
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(sp - src.arrayOffset());
-                dst.position(dp - dst.arrayOffset());
-            }
-        }
-
-        private static byte[] table = {
-            (byte)0xa1, (byte)0xa2, (byte)0xa3, (byte)0xa4,
-            (byte)0xa5, (byte)0xa6, (byte)0xa7,
-            (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
-            (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
-            (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
-            (byte)0x00, (byte)0x00, (byte)0xb6, (byte)0xb7,
-            (byte)0xb8, (byte)0xb9, (byte)0xba, (byte)0xbb,
-            (byte)0xbc, (byte)0xbd, (byte)0xbe, (byte)0xbf,
-            (byte)0xc0, (byte)0xc1, (byte)0xc2, (byte)0xc3,
-            (byte)0xc4, (byte)0xc5, (byte)0xc6, (byte)0xc7,
-            (byte)0xc8, (byte)0xc9, (byte)0xca, (byte)0xcb,
-            (byte)0xcc, (byte)0xcd, (byte)0xce, (byte)0xcf,
-            (byte)0xd0, (byte)0xd1, (byte)0xd2, (byte)0xd3,
-            (byte)0xd4, (byte)0x00, (byte)0x00, (byte)0x00,
-            (byte)0xd8, (byte)0xd9, (byte)0xda, (byte)0xdb,
-            (byte)0xdc, (byte)0xdd, (byte)0xde, (byte)0x00,
-            (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
-            (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
-            (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
-            (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
-            (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
-            (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
-            (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
-            (byte)0x00, (byte)0x00, (byte)0x00};
-
-        /* The default implementation creates a decoder and we don't have one */
-        public boolean isLegalReplacement(byte[] repl) {
-            return true;
-        }
-    }
-}
--- a/jdk/src/java.desktop/unix/classes/sun/awt/motif/X11GB18030_0.java	Thu May 14 20:14:44 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,4274 +0,0 @@
-/*
- * Copyright (c) 2001, 2005, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.awt.motif;
-
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetEncoder;
-import java.nio.charset.CharsetDecoder;
-import sun.nio.cs.ext.DoubleByteEncoder;
-
-public class X11GB18030_0 extends Charset {
-    public X11GB18030_0 () {
-        super("X11GB18030_0", null);
-    }
-
-    public CharsetEncoder newEncoder() {
-        return new Encoder(this);
-    }
-
-    /* Seems like supporting a decoder is required, but we aren't going
-     * to be publically exposing this class, so no need to waste work
-     */
-    public CharsetDecoder newDecoder() {
-        throw new Error("Decoder is not implemented for X11GB18030_0 Charset");
-    }
-
-    public boolean contains(Charset cs) {
-        return cs instanceof X11GB18030_0;
-    }
-
-    private static class Encoder extends DoubleByteEncoder {
-        public Encoder(Charset cs) {
-            super(cs, index1, index2);
-        }
-        protected int encodeSingle(char inputChar) {
-            return -1;
-        }
-        private final static String innerIndex0=
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uA1E8\u0000\u0000\uA1EC"+
-            "\uA1A7\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uA1E3\uA1C0\u0000\u0000\u0000\u0000\u0000\uA1A4"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uA1C1"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uA8A4\uA8A2\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uA8A8\uA8A6\uA8BA\u0000\uA8AC\uA8AA\u0000\u0000"+
-            "\u0000\u0000\uA8B0\uA8AE\u0000\u0000\u0000\uA1C2"+
-            "\u0000\uA8B4\uA8B2\u0000\uA8B9\u0000\u0000\u0000"+
-            "\u0000\uA8A1\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uA8A5\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uA8A7\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uA8A9\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uA8BD\u0000\u0000\u0000"+
-            "\uA8BE\u0000\u0000\u0000\u0000\uA8AD\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uA8B1\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uA8A3\u0000"+
-            "\uA8AB\u0000\uA8AF\u0000\uA8B3\u0000\uA8B5\u0000"+
-            "\uA8B6\u0000\uA8B7\u0000\uA8B8\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uA8BF\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uA8BB\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uA8C0\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uA1A6"+
-            "\u0000\uA1A5\uA840\uA841\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uA842\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uA6A1\uA6A2\uA6A3\uA6A4\uA6A5\uA6A6\uA6A7"+
-            "\uA6A8\uA6A9\uA6AA\uA6AB\uA6AC\uA6AD\uA6AE\uA6AF"+
-            "\uA6B0\uA6B1\u0000\uA6B2\uA6B3\uA6B4\uA6B5\uA6B6"+
-            "\uA6B7\uA6B8\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uA6C1\uA6C2\uA6C3\uA6C4\uA6C5\uA6C6\uA6C7"+
-            "\uA6C8\uA6C9\uA6CA\uA6CB\uA6CC\uA6CD\uA6CE\uA6CF"+
-            "\uA6D0\uA6D1\u0000\uA6D2\uA6D3\uA6D4\uA6D5\uA6D6"+
-            "\uA6D7\uA6D8\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uA7A7\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uA7A1\uA7A2\uA7A3\uA7A4\uA7A5\uA7A6\uA7A8\uA7A9"+
-            "\uA7AA\uA7AB\uA7AC\uA7AD\uA7AE\uA7AF\uA7B0\uA7B1"+
-            "\uA7B2\uA7B3\uA7B4\uA7B5\uA7B6\uA7B7\uA7B8\uA7B9"+
-            "\uA7BA\uA7BB\uA7BC\uA7BD\uA7BE\uA7BF\uA7C0\uA7C1"+
-            "\uA7D1\uA7D2\uA7D3\uA7D4\uA7D5\uA7D6\uA7D8\uA7D9"+
-            "\uA7DA\uA7DB\uA7DC\uA7DD\uA7DE\uA7DF\uA7E0\uA7E1"+
-            "\uA7E2\uA7E3\uA7E4\uA7E5\uA7E6\uA7E7\uA7E8\uA7E9"+
-            "\uA7EA\uA7EB\uA7EC\uA7ED\uA7EE\uA7EF\uA7F0\uA7F1"+
-            "\u0000\uA7D7\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uA95C\u0000\u0000\uA843\uA1AA\uA844\uA1AC\u0000"+
-            "\uA1AE\uA1AF\u0000\u0000\uA1B0\uA1B1\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uA845\uA1AD\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uA1EB\u0000\uA1E4\uA1E5\u0000\uA846\u0000\u0000"+
-            "\u0000\u0000\u0000\uA1F9\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uA2E3\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uA1E6\u0000\uA847\u0000\u0000"+
-            "\u0000\uA848\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uA1ED\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uA959\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uA2F1\uA2F2\uA2F3\uA2F4\uA2F5\uA2F6\uA2F7\uA2F8"+
-            "\uA2F9\uA2FA\uA2FB\uA2FC\u0000\u0000\u0000\u0000"+
-            "\uA2A1\uA2A2\uA2A3\uA2A4\uA2A5\uA2A6\uA2A7\uA2A8"+
-            "\uA2A9\uA2AA\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uA1FB\uA1FC\uA1FA\uA1FD\u0000\u0000\uA849\uA84A"+
-            "\uA84B\uA84C\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uA1CA\u0000\u0000\u0000\u0000\u0000\u0000\uA1C7"+
-            "\u0000\uA1C6\u0000\u0000\u0000\uA84D\u0000\u0000"+
-            "\u0000\u0000\uA1CC\u0000\u0000\uA1D8\uA1DE\uA84E"+
-            "\uA1CF\u0000\u0000\uA84F\u0000\uA1CE\u0000\uA1C4"+
-            "\uA1C5\uA1C9\uA1C8\uA1D2\u0000\u0000\uA1D3\u0000"+
-            "\u0000\u0000\u0000\u0000\uA1E0\uA1DF\uA1C3\uA1CB"+
-            "\u0000\u0000\u0000\u0000\u0000\uA1D7\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uA1D6\u0000\u0000\u0000\uA1D5\u0000\u0000\u0000"+
-            "\u0000\u0000\uA850\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uA1D9\uA1D4\u0000\u0000\uA1DC\uA1DD\uA851\uA852"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uA1DA\uA1DB"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uA892\u0000\u0000"+
-            "\u0000\uA1D1\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uA1CD\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uA853"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uA1D0\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uA2D9\uA2DA\uA2DB\uA2DC\uA2DD\uA2DE\uA2DF\uA2E0"+
-            "\uA2E1\uA2E2\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uA2C5\uA2C6\uA2C7\uA2C8"+
-            "\uA2C9\uA2CA\uA2CB\uA2CC\uA2CD\uA2CE\uA2CF\uA2D0"+
-            "\uA2D1\uA2D2\uA2D3\uA2D4\uA2D5\uA2D6\uA2D7\uA2D8"+
-            "\uA2B1\uA2B2\uA2B3\uA2B4\uA2B5\uA2B6\uA2B7\uA2B8"+
-            "\uA2B9\uA2BA\uA2BB\uA2BC\uA2BD\uA2BE\uA2BF\uA2C0"+
-            "\uA2C1\uA2C2\uA2C3\uA2C4\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uA9A4\uA9A5\uA9A6\uA9A7\uA9A8\uA9A9\uA9AA\uA9AB"+
-            "\uA9AC\uA9AD\uA9AE\uA9AF\uA9B0\uA9B1\uA9B2\uA9B3"+
-            "\uA9B4\uA9B5\uA9B6\uA9B7\uA9B8\uA9B9\uA9BA\uA9BB"+
-            "\uA9BC\uA9BD\uA9BE\uA9BF\uA9C0\uA9C1\uA9C2\uA9C3"+
-            "\uA9C4\uA9C5\uA9C6\uA9C7\uA9C8\uA9C9\uA9CA\uA9CB"+
-            "\uA9CC\uA9CD\uA9CE\uA9CF\uA9D0\uA9D1\uA9D2\uA9D3"+
-            "\uA9D4\uA9D5\uA9D6\uA9D7\uA9D8\uA9D9\uA9DA\uA9DB"+
-            "\uA9DC\uA9DD\uA9DE\uA9DF\uA9E0\uA9E1\uA9E2\uA9E3"+
-            "\uA9E4\uA9E5\uA9E6\uA9E7\uA9E8\uA9E9\uA9EA\uA9EB"+
-            "\uA9EC\uA9ED\uA9EE\uA9EF\u0000\u0000\u0000\u0000"+
-            "\uA854\uA855\uA856\uA857\uA858\uA859\uA85A\uA85B"+
-            "\uA85C\uA85D\uA85E\uA85F\uA860\uA861\uA862\uA863"+
-            "\uA864\uA865\uA866\uA867\uA868\uA869\uA86A\uA86B"+
-            "\uA86C\uA86D\uA86E\uA86F\uA870\uA871\uA872\uA873"+
-            "\uA874\uA875\uA876\uA877\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uA878\uA879\uA87A\uA87B\uA87C\uA87D\uA87E"+
-            "\uA880\uA881\uA882\uA883\uA884\uA885\uA886\uA887"+
-            "\u0000\u0000\u0000\uA888\uA889\uA88A\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uA1F6\uA1F5\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uA1F8\uA1F7\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uA88B\uA88C\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uA1F4\uA1F3"+
-            "\u0000\u0000\u0000\uA1F0\u0000\u0000\uA1F2\uA1F1"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uA88D\uA88E\uA88F\uA890\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uA1EF\uA1EE\u0000"+
-            "\u0000\uA891\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uA1E2\u0000\uA1E1\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uFE50\u0000\u0000\uFE54\u0000\u0000\u0000"+
-            "\uFE57\u0000\u0000\uFE58\uFE5D\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uFE5E"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uFE6B"+
-            "\u0000\u0000\uFE6E\u0000\u0000\u0000\uFE71\u0000"+
-            "\u0000\u0000\u0000\uFE73\u0000\u0000\uFE74\uFE75"+
-            "\u0000\u0000\u0000\uFE79\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uFE84\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uA98A\uA98B\uA98C\uA98D\uA98E\uA98F\uA990\uA991"+
-            "\uA992\uA993\uA994\uA995\u0000\u0000\u0000\u0000"+
-            "\uA1A1\uA1A2\uA1A3\uA1A8\u0000\uA1A9\uA965\uA996"+
-            "\uA1B4\uA1B5\uA1B6\uA1B7\uA1B8\uA1B9\uA1BA\uA1BB"+
-            "\uA1BE\uA1BF\uA893\uA1FE\uA1B2\uA1B3\uA1BC\uA1BD"+
-            "\u0000\u0000\u0000\u0000\u0000\uA894\uA895\u0000"+
-            "\u0000\uA940\uA941\uA942\uA943\uA944\uA945\uA946"+
-            "\uA947\uA948\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uA989\u0000"+
-            "\u0000\uA4A1\uA4A2\uA4A3\uA4A4\uA4A5\uA4A6\uA4A7"+
-            "\uA4A8\uA4A9\uA4AA\uA4AB\uA4AC\uA4AD\uA4AE\uA4AF"+
-            "\uA4B0\uA4B1\uA4B2\uA4B3\uA4B4\uA4B5\uA4B6\uA4B7"+
-            "\uA4B8\uA4B9\uA4BA\uA4BB\uA4BC\uA4BD\uA4BE\uA4BF"+
-            "\uA4C0\uA4C1\uA4C2\uA4C3\uA4C4\uA4C5\uA4C6\uA4C7"+
-            "\uA4C8\uA4C9\uA4CA\uA4CB\uA4CC\uA4CD\uA4CE\uA4CF"+
-            "\uA4D0\uA4D1\uA4D2\uA4D3\uA4D4\uA4D5\uA4D6\uA4D7"+
-            "\uA4D8\uA4D9\uA4DA\uA4DB\uA4DC\uA4DD\uA4DE\uA4DF"+
-            "\uA4E0\uA4E1\uA4E2\uA4E3\uA4E4\uA4E5\uA4E6\uA4E7"+
-            "\uA4E8\uA4E9\uA4EA\uA4EB\uA4EC\uA4ED\uA4EE\uA4EF"+
-            "\uA4F0\uA4F1\uA4F2\uA4F3\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uA961\uA962\uA966\uA967\u0000"+
-            "\u0000\uA5A1\uA5A2\uA5A3\uA5A4\uA5A5\uA5A6\uA5A7"+
-            "\uA5A8\uA5A9\uA5AA\uA5AB\uA5AC\uA5AD\uA5AE\uA5AF"+
-            "\uA5B0\uA5B1\uA5B2\uA5B3\uA5B4\uA5B5\uA5B6\uA5B7"+
-            "\uA5B8\uA5B9\uA5BA\uA5BB\uA5BC\uA5BD\uA5BE\uA5BF"+
-            "\uA5C0\uA5C1\uA5C2\uA5C3\uA5C4\uA5C5\uA5C6\uA5C7"+
-            "\uA5C8\uA5C9\uA5CA\uA5CB\uA5CC\uA5CD\uA5CE\uA5CF"+
-            "\uA5D0\uA5D1\uA5D2\uA5D3\uA5D4\uA5D5\uA5D6\uA5D7"+
-            "\uA5D8\uA5D9\uA5DA\uA5DB\uA5DC\uA5DD\uA5DE\uA5DF"+
-            "\uA5E0\uA5E1\uA5E2\uA5E3\uA5E4\uA5E5\uA5E6\uA5E7"+
-            "\uA5E8\uA5E9\uA5EA\uA5EB\uA5EC\uA5ED\uA5EE\uA5EF"+
-            "\uA5F0\uA5F1\uA5F2\uA5F3\uA5F4\uA5F5\uA5F6\u0000"+
-            "\u0000\u0000\u0000\u0000\uA960\uA963\uA964\u0000";
-
-        private final static String innerIndex1=
-            "\u0000\u0000\u0000\u0000\u0000\uA8C5\uA8C6\uA8C7"+
-            "\uA8C8\uA8C9\uA8CA\uA8CB\uA8CC\uA8CD\uA8CE\uA8CF"+
-            "\uA8D0\uA8D1\uA8D2\uA8D3\uA8D4\uA8D5\uA8D6\uA8D7"+
-            "\uA8D8\uA8D9\uA8DA\uA8DB\uA8DC\uA8DD\uA8DE\uA8DF"+
-            "\uA8E0\uA8E1\uA8E2\uA8E3\uA8E4\uA8E5\uA8E6\uA8E7"+
-            "\uA8E8\uA8E9\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uA2E5\uA2E6\uA2E7\uA2E8\uA2E9\uA2EA\uA2EB\uA2EC"+
-            "\uA2ED\uA2EE\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uA95A\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uA949\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uA94A\uA94B"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uA94C\uA94D\uA94E\u0000"+
-            "\u0000\uA94F\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uA950\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uA951\u0000"+
-            "\u0000\uA952\uA953\u0000\u0000\uA954\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uFE56"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uFE55\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uFE5A\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uFE5C\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uFE5B\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uFE60\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uFE5F\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uFE62"+
-            "\uFE65\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uFE63"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uFE64\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uFE68\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uFE69\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uFE6A\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uFE6F\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uFE70"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uFE72"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uFE78\u0000\u0000\u0000"+
-            "\u0000\uFE77\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uFE7A\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uFE7B\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uFE7D\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uFE7C\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uFE80\u0000\u0000\u0000\u0000"+
-            "\u0000\uFE81\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uFE82\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uFE83\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000";
-
-        private final static String innerIndex2=
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uFE85"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uFE86\u0000\u0000\uFE87\u0000\u0000"+
-            "\u0000\u0000\uFE88\uFE89\u0000\uFE8A\uFE8B\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uFE8D\u0000\u0000\u0000\uFE8C"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uFE8F\uFE8E"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uFE96"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uFE93"+
-            "\uFE94\uFE95\uFE97\uFE92\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uFE98\uFE99\uFE9A\uFE9B\uFE9C"+
-            "\uFE9D\uFE9E\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uFE9F\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uD2BB\uB6A1\u8140\uC6DF\u8141\u8142\u8143\uCDF2"+
-            "\uD5C9\uC8FD\uC9CF\uCFC2\uD8A2\uB2BB\uD3EB\u8144"+
-            "\uD8A4\uB3F3\u8145\uD7A8\uC7D2\uD8A7\uCAC0\u8146"+
-            "\uC7F0\uB1FB\uD2B5\uB4D4\uB6AB\uCBBF\uD8A9\u8147"+
-            "\u8148\u8149\uB6AA\u814A\uC1BD\uD1CF\u814B\uC9A5"+
-            "\uD8AD\u814C\uB8F6\uD1BE\uE3DC\uD6D0\u814D\u814E"+
-            "\uB7E1\u814F\uB4AE\u8150\uC1D9\u8151\uD8BC\u8152"+
-            "\uCDE8\uB5A4\uCEAA\uD6F7\u8153\uC0F6\uBED9\uD8AF"+
-            "\u8154\u8155\u8156\uC4CB\u8157\uBEC3\u8158\uD8B1"+
-            "\uC3B4\uD2E5\u8159\uD6AE\uCEDA\uD5A7\uBAF5\uB7A6"+
-            "\uC0D6\u815A\uC6B9\uC5D2\uC7C7\u815B\uB9D4\u815C"+
-            "\uB3CB\uD2D2\u815D\u815E\uD8BF\uBEC5\uC6F2\uD2B2"+
-            "\uCFB0\uCFE7\u815F\u8160\u8161\u8162\uCAE9\u8163"+
-            "\u8164\uD8C0\u8165\u8166\u8167\u8168\u8169\u816A"+
-            "\uC2F2\uC2D2\u816B\uC8E9\u816C\u816D\u816E\u816F"+
-            "\u8170\u8171\u8172\u8173\u8174\u8175\uC7AC\u8176"+
-            "\u8177\u8178\u8179\u817A\u817B\u817C\uC1CB\u817D"+
-            "\uD3E8\uD5F9\u817E\uCAC2\uB6FE\uD8A1\uD3DA\uBFF7"+
-            "\u8180\uD4C6\uBBA5\uD8C1\uCEE5\uBEAE\u8181\u8182"+
-            "\uD8A8\u8183\uD1C7\uD0A9\u8184\u8185\u8186\uD8BD"+
-            "\uD9EF\uCDF6\uBFBA\u8187\uBDBB\uBAA5\uD2E0\uB2FA"+
-            "\uBAE0\uC4B6\u8188\uCFED\uBEA9\uCDA4\uC1C1\u8189"+
-            "\u818A\u818B\uC7D7\uD9F1\u818C\uD9F4\u818D\u818E"+
-            "\u818F\u8190\uC8CB\uD8E9\u8191\u8192\u8193\uD2DA"+
-            "\uCAB2\uC8CA\uD8EC\uD8EA\uD8C6\uBDF6\uC6CD\uB3F0"+
-            "\u8194\uD8EB\uBDF1\uBDE9\u8195\uC8D4\uB4D3\u8196"+
-            "\u8197\uC2D8\u8198\uB2D6\uD7D0\uCACB\uCBFB\uD5CC"+
-            "\uB8B6\uCFC9\u8199\u819A\u819B\uD9DA\uD8F0\uC7AA"+
-            "\u819C\uD8EE\u819D\uB4FA\uC1EE\uD2D4\u819E\u819F"+
-            "\uD8ED\u81A0\uD2C7\uD8EF\uC3C7\u81A1\u81A2\u81A3"+
-            "\uD1F6\u81A4\uD6D9\uD8F2\u81A5\uD8F5\uBCFE\uBCDB"+
-            "\u81A6\u81A7\u81A8\uC8CE\u81A9\uB7DD\u81AA\uB7C2"+
-            "\u81AB\uC6F3\u81AC\u81AD\u81AE\u81AF\u81B0\u81B1"+
-            "\u81B2\uD8F8\uD2C1\u81B3\u81B4\uCEE9\uBCBF\uB7FC"+
-            "\uB7A5\uD0DD\u81B5\u81B6\u81B7\u81B8\u81B9\uD6DA"+
-            "\uD3C5\uBBEF\uBBE1\uD8F1\u81BA\u81BB\uC9A1\uCEB0"+
-            "\uB4AB\u81BC\uD8F3\u81BD\uC9CB\uD8F6\uC2D7\uD8F7"+
-            "\u81BE\u81BF\uCEB1\uD8F9\u81C0\u81C1\u81C2\uB2AE"+
-            "\uB9C0\u81C3\uD9A3\u81C4\uB0E9\u81C5\uC1E6\u81C6"+
-            "\uC9EC\u81C7\uCBC5\u81C8\uCBC6\uD9A4\u81C9\u81CA"+
-            "\u81CB\u81CC\u81CD\uB5E8\u81CE\u81CF\uB5AB\u81D0"+
-            "\u81D1\u81D2\u81D3\u81D4\u81D5\uCEBB\uB5CD\uD7A1"+
-            "\uD7F4\uD3D3\u81D6\uCCE5\u81D7\uBACE\u81D8\uD9A2"+
-            "\uD9DC\uD3E0\uD8FD\uB7F0\uD7F7\uD8FE\uD8FA\uD9A1"+
-            "\uC4E3\u81D9\u81DA\uD3B6\uD8F4\uD9DD\u81DB\uD8FB"+
-            "\u81DC\uC5E5\u81DD\u81DE\uC0D0\u81DF\u81E0\uD1F0"+
-            "\uB0DB\u81E1\u81E2\uBCD1\uD9A6\u81E3\uD9A5\u81E4"+
-            "\u81E5\u81E6\u81E7\uD9AC\uD9AE\u81E8\uD9AB\uCAB9"+
-            "\u81E9\u81EA\u81EB\uD9A9\uD6B6\u81EC\u81ED\u81EE"+
-            "\uB3DE\uD9A8\u81EF\uC0FD\u81F0\uCACC\u81F1\uD9AA"+
-            "\u81F2\uD9A7\u81F3\u81F4\uD9B0\u81F5\u81F6\uB6B1"+
-            "\u81F7\u81F8\u81F9\uB9A9\u81FA\uD2C0\u81FB\u81FC"+
-            "\uCFC0\u81FD\u81FE\uC2C2\u8240\uBDC4\uD5EC\uB2E0"+
-            "\uC7C8\uBFEB\uD9AD\u8241\uD9AF\u8242\uCEEA\uBAEE"+
-            "\u8243\u8244\u8245\u8246\u8247\uC7D6\u8248\u8249"+
-            "\u824A\u824B\u824C\u824D\u824E\u824F\u8250\uB1E3"+
-            "\u8251\u8252\u8253\uB4D9\uB6ED\uD9B4\u8254\u8255"+
-            "\u8256\u8257\uBFA1\u8258\u8259\u825A\uD9DE\uC7CE"+
-            "\uC0FE\uD9B8\u825B\u825C\u825D\u825E\u825F\uCBD7"+
-            "\uB7FD\u8260\uD9B5\u8261\uD9B7\uB1A3\uD3E1\uD9B9"+
-            "\u8262\uD0C5\u8263\uD9B6\u8264\u8265\uD9B1\u8266"+
-            "\uD9B2\uC1A9\uD9B3\u8267\u8268\uBCF3\uD0DE\uB8A9"+
-            "\u8269\uBEE3\u826A\uD9BD\u826B\u826C\u826D\u826E"+
-            "\uD9BA\u826F\uB0B3\u8270\u8271\u8272\uD9C2\u8273"+
-            "\u8274\u8275\u8276\u8277\u8278\u8279\u827A\u827B"+
-            "\u827C\u827D\u827E\u8280\uD9C4\uB1B6\u8281\uD9BF"+
-            "\u8282\u8283\uB5B9\u8284\uBEF3\u8285\u8286\u8287"+
-            "\uCCC8\uBAF2\uD2D0\u8288\uD9C3\u8289\u828A\uBDE8"+
-            "\u828B\uB3AB\u828C\u828D\u828E\uD9C5\uBEEB\u828F"+
-            "\uD9C6\uD9BB\uC4DF\u8290\uD9BE\uD9C1\uD9C0\u8291"+
-            "\u8292\u8293\u8294\u8295\u8296\u8297\u8298\u8299"+
-            "\u829A\u829B\uD5AE\u829C\uD6B5\u829D\uC7E3\u829E"+
-            "\u829F\u82A0\u82A1\uD9C8\u82A2\u82A3\u82A4\uBCD9"+
-            "\uD9CA\u82A5\u82A6\u82A7\uD9BC\u82A8\uD9CB\uC6AB"+
-            "\u82A9\u82AA\u82AB\u82AC\u82AD\uD9C9\u82AE\u82AF"+
-            "\u82B0\u82B1\uD7F6\u82B2\uCDA3\u82B3\u82B4\u82B5"+
-            "\u82B6\u82B7\u82B8\u82B9\u82BA\uBDA1\u82BB\u82BC"+
-            "\u82BD\u82BE\u82BF\u82C0\uD9CC\u82C1\u82C2\u82C3"+
-            "\u82C4\u82C5\u82C6\u82C7\u82C8\u82C9\uC5BC\uCDB5"+
-            "\u82CA\u82CB\u82CC\uD9CD\u82CD\u82CE\uD9C7\uB3A5"+
-            "\uBFFE\u82CF\u82D0\u82D1\u82D2\uB8B5\u82D3\u82D4"+
-            "\uC0FC\u82D5\u82D6\u82D7\u82D8\uB0F8\u82D9\u82DA"+
-            "\u82DB\u82DC\u82DD\u82DE\u82DF\u82E0\u82E1\u82E2"+
-            "\u82E3\u82E4\u82E5\u82E6\u82E7\u82E8\u82E9\u82EA"+
-            "\u82EB\u82EC\u82ED\uB4F6\u82EE\uD9CE\u82EF\uD9CF"+
-            "\uB4A2\uD9D0\u82F0\u82F1\uB4DF\u82F2\u82F3\u82F4"+
-            "\u82F5\u82F6\uB0C1\u82F7\u82F8\u82F9\u82FA\u82FB"+
-            "\u82FC\u82FD\uD9D1\uC9B5\u82FE\u8340\u8341\u8342"+
-            "\u8343\u8344\u8345\u8346\u8347\u8348\u8349\u834A"+
-            "\u834B\u834C\u834D\u834E\u834F\u8350\u8351\uCFF1"+
-            "\u8352\u8353\u8354\u8355\u8356\u8357\uD9D2\u8358"+
-            "\u8359\u835A\uC1C5\u835B\u835C\u835D\u835E\u835F"+
-            "\u8360\u8361\u8362\u8363\u8364\u8365\uD9D6\uC9AE"+
-            "\u8366\u8367\u8368\u8369\uD9D5\uD9D4\uD9D7\u836A"+
-            "\u836B\u836C\u836D\uCBDB\u836E\uBDA9\u836F\u8370"+
-            "\u8371\u8372\u8373\uC6A7\u8374\u8375\u8376\u8377"+
-            "\u8378\u8379\u837A\u837B\u837C\u837D\uD9D3\uD9D8"+
-            "\u837E\u8380\u8381\uD9D9\u8382\u8383\u8384\u8385"+
-            "\u8386\u8387\uC8E5\u8388\u8389\u838A\u838B\u838C"+
-            "\u838D\u838E\u838F\u8390\u8391\u8392\u8393\u8394"+
-            "\u8395\uC0DC\u8396\u8397\u8398\u8399\u839A\u839B"+
-            "\u839C\u839D\u839E\u839F\u83A0\u83A1\u83A2\u83A3"+
-            "\u83A4\u83A5\u83A6\u83A7\u83A8\u83A9\u83AA\u83AB"+
-            "\u83AC\u83AD\u83AE\u83AF\u83B0\u83B1\u83B2\uB6F9"+
-            "\uD8A3\uD4CA\u83B3\uD4AA\uD0D6\uB3E4\uD5D7\u83B4"+
-            "\uCFC8\uB9E2\u83B5\uBFCB\u83B6\uC3E2\u83B7\u83B8"+
-            "\u83B9\uB6D2\u83BA\u83BB\uCDC3\uD9EE\uD9F0\u83BC"+
-            "\u83BD\u83BE\uB5B3\u83BF\uB6B5\u83C0\u83C1\u83C2"+
-            "\u83C3\u83C4\uBEA4\u83C5\u83C6\uC8EB\u83C7\u83C8"+
-            "\uC8AB\u83C9\u83CA\uB0CB\uB9AB\uC1F9\uD9E2\u83CB"+
-            "\uC0BC\uB9B2\u83CC\uB9D8\uD0CB\uB1F8\uC6E4\uBEDF"+
-            "\uB5E4\uD7C8\u83CD\uD1F8\uBCE6\uCADE\u83CE\u83CF"+
-            "\uBCBD\uD9E6\uD8E7\u83D0\u83D1\uC4DA\u83D2\u83D3"+
-            "\uB8D4\uC8BD\u83D4\u83D5\uB2E1\uD4D9\u83D6\u83D7"+
-            "\u83D8\u83D9\uC3B0\u83DA\u83DB\uC3E1\uDAA2\uC8DF"+
-            "\u83DC\uD0B4\u83DD\uBEFC\uC5A9\u83DE\u83DF\u83E0"+
-            "\uB9DA\u83E1\uDAA3\u83E2\uD4A9\uDAA4\u83E3\u83E4"+
-            "\u83E5\u83E6\u83E7\uD9FB\uB6AC\u83E8\u83E9\uB7EB"+
-            "\uB1F9\uD9FC\uB3E5\uBEF6\u83EA\uBFF6\uD2B1\uC0E4"+
-            "\u83EB\u83EC\u83ED\uB6B3\uD9FE\uD9FD\u83EE\u83EF"+
-            "\uBEBB\u83F0\u83F1\u83F2\uC6E0\u83F3\uD7BC\uDAA1"+
-            "\u83F4\uC1B9\u83F5\uB5F2\uC1E8\u83F6\u83F7\uBCF5"+
-            "\u83F8\uB4D5\u83F9\u83FA\u83FB\u83FC\u83FD\u83FE"+
-            "\u8440\u8441\u8442\uC1DD\u8443\uC4FD\u8444\u8445"+
-            "\uBCB8\uB7B2\u8446\u8447\uB7EF\u8448\u8449\u844A"+
-            "\u844B\u844C\u844D\uD9EC\u844E\uC6BE\u844F\uBFAD"+
-            "\uBBCB\u8450\u8451\uB5CA\u8452\uDBC9\uD0D7\u8453"+
-            "\uCDB9\uB0BC\uB3F6\uBBF7\uDBCA\uBAAF\u8454\uD4E4"+
-            "\uB5B6\uB5F3\uD8D6\uC8D0\u8455\u8456\uB7D6\uC7D0"+
-            "\uD8D7\u8457\uBFAF\u8458\u8459\uDBBB\uD8D8\u845A"+
-            "\u845B\uD0CC\uBBAE\u845C\u845D\u845E\uEBBE\uC1D0"+
-            "\uC1F5\uD4F2\uB8D5\uB4B4\u845F\uB3F5\u8460\u8461"+
-            "\uC9BE\u8462\u8463\u8464\uC5D0\u8465\u8466\u8467"+
-            "\uC5D9\uC0FB\u8468\uB1F0\u8469\uD8D9\uB9CE\u846A"+
-            "\uB5BD\u846B\u846C\uD8DA\u846D\u846E\uD6C6\uCBA2"+
-            "\uC8AF\uC9B2\uB4CC\uBFCC\u846F\uB9F4\u8470\uD8DB"+
-            "\uD8DC\uB6E7\uBCC1\uCCEA\u8471\u8472\u8473\u8474"+
-            "\u8475\u8476\uCFF7\u8477\uD8DD\uC7B0\u8478\u8479"+
-            "\uB9D0\uBDA3\u847A\u847B\uCCDE\u847C\uC6CA\u847D"+
-            "\u847E\u8480\u8481\u8482\uD8E0\u8483\uD8DE\u8484"+
-            "\u8485\uD8DF\u8486\u8487\u8488\uB0FE\u8489\uBEE7"+
-            "\u848A\uCAA3\uBCF4\u848B\u848C\u848D\u848E\uB8B1"+
-            "\u848F\u8490\uB8EE\u8491\u8492\u8493\u8494\u8495"+
-            "\u8496\u8497\u8498\u8499\u849A\uD8E2\u849B\uBDCB"+
-            "\u849C\uD8E4\uD8E3\u849D\u849E\u849F\u84A0\u84A1"+
-            "\uC5FC\u84A2\u84A3\u84A4\u84A5\u84A6\u84A7\u84A8"+
-            "\uD8E5\u84A9\u84AA\uD8E6\u84AB\u84AC\u84AD\u84AE"+
-            "\u84AF\u84B0\u84B1\uC1A6\u84B2\uC8B0\uB0EC\uB9A6"+
-            "\uBCD3\uCEF1\uDBBD\uC1D3\u84B3\u84B4\u84B5\u84B6"+
-            "\uB6AF\uD6FA\uC5AC\uBDD9\uDBBE\uDBBF\u84B7\u84B8"+
-            "\u84B9\uC0F8\uBEA2\uC0CD\u84BA\u84BB\u84BC\u84BD"+
-            "\u84BE\u84BF\u84C0\u84C1\u84C2\u84C3\uDBC0\uCAC6"+
-            "\u84C4\u84C5\u84C6\uB2AA\u84C7\u84C8\u84C9\uD3C2"+
-            "\u84CA\uC3E3\u84CB\uD1AB\u84CC\u84CD\u84CE\u84CF"+
-            "\uDBC2\u84D0\uC0D5\u84D1\u84D2\u84D3\uDBC3\u84D4"+
-            "\uBFB1\u84D5\u84D6\u84D7\u84D8\u84D9\u84DA\uC4BC"+
-            "\u84DB\u84DC\u84DD\u84DE\uC7DA\u84DF\u84E0\u84E1"+
-            "\u84E2\u84E3\u84E4\u84E5\u84E6\u84E7\u84E8\u84E9"+
-            "\uDBC4\u84EA\u84EB\u84EC\u84ED\u84EE\u84EF\u84F0"+
-            "\u84F1\uD9E8\uC9D7\u84F2\u84F3\u84F4\uB9B4\uCEF0"+
-            "\uD4C8\u84F5\u84F6\u84F7\u84F8\uB0FC\uB4D2\u84F9"+
-            "\uD0D9\u84FA\u84FB\u84FC\u84FD\uD9E9\u84FE\uDECB"+
-            "\uD9EB\u8540\u8541\u8542\u8543\uD8B0\uBBAF\uB1B1"+
-            "\u8544\uB3D7\uD8CE\u8545\u8546\uD4D1\u8547\u8548"+
-            "\uBDB3\uBFEF\u8549\uCFBB\u854A\u854B\uD8D0\u854C"+
-            "\u854D\u854E\uB7CB\u854F\u8550\u8551\uD8D1\u8552"+
-            "\u8553\u8554\u8555\u8556\u8557\u8558\u8559\u855A"+
-            "\u855B\uC6A5\uC7F8\uD2BD\u855C\u855D\uD8D2\uC4E4"+
-            "\u855E\uCAAE\u855F\uC7A7\u8560\uD8A6\u8561\uC9FD"+
-            "\uCEE7\uBBDC\uB0EB\u8562\u8563\u8564\uBBAA\uD0AD"+
-            "\u8565\uB1B0\uD7E4\uD7BF\u8566\uB5A5\uC2F4\uC4CF"+
-            "\u8567\u8568\uB2A9\u8569\uB2B7\u856A\uB1E5\uDFB2"+
-            "\uD5BC\uBFA8\uC2AC\uD8D5\uC2B1\u856B\uD8D4\uCED4"+
-            "\u856C\uDAE0\u856D\uCEC0\u856E\u856F\uD8B4\uC3AE"+
-            "\uD3A1\uCEA3\u8570\uBCB4\uC8B4\uC2D1\u8571\uBEED"+
-            "\uD0B6\u8572\uDAE1\u8573\u8574\u8575\u8576\uC7E4"+
-            "\u8577\u8578\uB3A7\u8579\uB6F2\uCCFC\uC0FA\u857A"+
-            "\u857B\uC0F7\u857C\uD1B9\uD1E1\uD8C7\u857D\u857E"+
-            "\u8580\u8581\u8582\u8583\u8584\uB2DE\u8585\u8586"+
-            "\uC0E5\u8587\uBAF1\u8588\u8589\uD8C8\u858A\uD4AD"+
-            "\u858B\u858C\uCFE1\uD8C9\u858D\uD8CA\uCFC3\u858E"+
-            "\uB3F8\uBEC7\u858F\u8590\u8591\u8592\uD8CB\u8593"+
-            "\u8594\u8595\u8596\u8597\u8598\u8599\uDBCC\u859A"+
-            "\u859B\u859C\u859D\uC8A5\u859E\u859F\u85A0\uCFD8"+
-            "\u85A1\uC8FE\uB2CE\u85A2\u85A3\u85A4\u85A5\u85A6"+
-            "\uD3D6\uB2E6\uBCB0\uD3D1\uCBAB\uB7B4\u85A7\u85A8"+
-            "\u85A9\uB7A2\u85AA\u85AB\uCAE5\u85AC\uC8A1\uCADC"+
-            "\uB1E4\uD0F0\u85AD\uC5D1\u85AE\u85AF\u85B0\uDBC5"+
-            "\uB5FE\u85B1\u85B2\uBFDA\uB9C5\uBEE4\uC1ED\u85B3"+
-            "\uDFB6\uDFB5\uD6BB\uBDD0\uD5D9\uB0C8\uB6A3\uBFC9"+
-            "\uCCA8\uDFB3\uCAB7\uD3D2\u85B4\uD8CF\uD2B6\uBAC5"+
-            "\uCBBE\uCCBE\u85B5\uDFB7\uB5F0\uDFB4\u85B6\u85B7"+
-            "\u85B8\uD3F5\u85B9\uB3D4\uB8F7\u85BA\uDFBA\u85BB"+
-            "\uBACF\uBCAA\uB5F5\u85BC\uCDAC\uC3FB\uBAF3\uC0F4"+
-            "\uCDC2\uCFF2\uDFB8\uCFC5\u85BD\uC2C0\uDFB9\uC2F0"+
-            "\u85BE\u85BF\u85C0\uBEFD\u85C1\uC1DF\uCDCC\uD2F7"+
-            "\uB7CD\uDFC1\u85C2\uDFC4\u85C3\u85C4\uB7F1\uB0C9"+
-            "\uB6D6\uB7D4\u85C5\uBAAC\uCCFD\uBFD4\uCBB1\uC6F4"+
-            "\u85C6\uD6A8\uDFC5\u85C7\uCEE2\uB3B3\u85C8\u85C9"+
-            "\uCEFC\uB4B5\u85CA\uCEC7\uBAF0\u85CB\uCEE1\u85CC"+
-            "\uD1BD\u85CD\u85CE\uDFC0\u85CF\u85D0\uB4F4\u85D1"+
-            "\uB3CA\u85D2\uB8E6\uDFBB\u85D3\u85D4\u85D5\u85D6"+
-            "\uC4C5\u85D7\uDFBC\uDFBD\uDFBE\uC5BB\uDFBF\uDFC2"+
-            "\uD4B1\uDFC3\u85D8\uC7BA\uCED8\u85D9\u85DA\u85DB"+
-            "\u85DC\u85DD\uC4D8\u85DE\uDFCA\u85DF\uDFCF\u85E0"+
-            "\uD6DC\u85E1\u85E2\u85E3\u85E4\u85E5\u85E6\u85E7"+
-            "\u85E8\uDFC9\uDFDA\uCEB6\u85E9\uBAC7\uDFCE\uDFC8"+
-            "\uC5DE\u85EA\u85EB\uC9EB\uBAF4\uC3FC\u85EC\u85ED"+
-            "\uBED7\u85EE\uDFC6\u85EF\uDFCD\u85F0\uC5D8\u85F1"+
-            "\u85F2\u85F3\u85F4\uD5A6\uBACD\u85F5\uBECC\uD3BD"+
-            "\uB8C0\u85F6\uD6E4\u85F7\uDFC7\uB9BE\uBFA7\u85F8"+
-            "\u85F9\uC1FC\uDFCB\uDFCC\u85FA\uDFD0\u85FB\u85FC"+
-            "\u85FD\u85FE\u8640\uDFDB\uDFE5\u8641\uDFD7\uDFD6"+
-            "\uD7C9\uDFE3\uDFE4\uE5EB\uD2A7\uDFD2\u8642\uBFA9"+
-            "\u8643\uD4DB\u8644\uBFC8\uDFD4\u8645\u8646\u8647"+
-            "\uCFCC\u8648\u8649\uDFDD\u864A\uD1CA\u864B\uDFDE"+
-            "\uB0A7\uC6B7\uDFD3\u864C\uBAE5\u864D\uB6DF\uCDDB"+
-            "\uB9FE\uD4D5\u864E\u864F\uDFDF\uCFEC\uB0A5\uDFE7"+
-            "\uDFD1\uD1C6\uDFD5\uDFD8\uDFD9\uDFDC\u8650\uBBA9"+
-            "\u8651\uDFE0\uDFE1\u8652\uDFE2\uDFE6\uDFE8\uD3B4"+
-            "\u8653\u8654\u8655\u8656\u8657\uB8E7\uC5B6\uDFEA"+
-            "\uC9DA\uC1A8\uC4C4\u8658\u8659\uBFDE\uCFF8\u865A"+
-            "\u865B\u865C\uD5DC\uDFEE\u865D\u865E\u865F\u8660"+
-            "\u8661\u8662\uB2B8\u8663\uBADF\uDFEC\u8664\uDBC1"+
-            "\u8665\uD1E4\u8666\u8667\u8668\u8669\uCBF4\uB4BD"+
-            "\u866A\uB0A6\u866B\u866C\u866D\u866E\u866F\uDFF1"+
-            "\uCCC6\uDFF2\u8670\u8671\uDFED\u8672\u8673\u8674"+
-            "\u8675\u8676\u8677\uDFE9\u8678\u8679\u867A\u867B"+
-            "\uDFEB\u867C\uDFEF\uDFF0\uBBBD\u867D\u867E\uDFF3"+
-            "\u8680\u8681\uDFF4\u8682\uBBA3\u8683\uCADB\uCEA8"+
-            "\uE0A7\uB3AA\u8684\uE0A6\u8685\u8686\u8687\uE0A1"+
-            "\u8688\u8689\u868A\u868B\uDFFE\u868C\uCDD9\uDFFC"+
-            "\u868D\uDFFA\u868E\uBFD0\uD7C4\u868F\uC9CC\u8690"+
-            "\u8691\uDFF8\uB0A1\u8692\u8693\u8694\u8695\u8696"+
-            "\uDFFD\u8697\u8698\u8699\u869A\uDFFB\uE0A2\u869B"+
-            "\u869C\u869D\u869E\u869F\uE0A8\u86A0\u86A1\u86A2"+
-            "\u86A3\uB7C8\u86A4\u86A5\uC6A1\uC9B6\uC0B2\uDFF5"+
-            "\u86A6\u86A7\uC5BE\u86A8\uD8C4\uDFF9\uC4F6\u86A9"+
-            "\u86AA\u86AB\u86AC\u86AD\u86AE\uE0A3\uE0A4\uE0A5"+
-            "\uD0A5\u86AF\u86B0\uE0B4\uCCE4\u86B1\uE0B1\u86B2"+
-            "\uBFA6\uE0AF\uCEB9\uE0AB\uC9C6\u86B3\u86B4\uC0AE"+
-            "\uE0AE\uBAED\uBAB0\uE0A9\u86B5\u86B6\u86B7\uDFF6"+
-            "\u86B8\uE0B3\u86B9\u86BA\uE0B8\u86BB\u86BC\u86BD"+
-            "\uB4AD\uE0B9\u86BE\u86BF\uCFB2\uBAC8\u86C0\uE0B0"+
-            "\u86C1\u86C2\u86C3\u86C4\u86C5\u86C6\u86C7\uD0FA"+
-            "\u86C8\u86C9\u86CA\u86CB\u86CC\u86CD\u86CE\u86CF"+
-            "\u86D0\uE0AC\u86D1\uD4FB\u86D2\uDFF7\u86D3\uC5E7"+
-            "\u86D4\uE0AD\u86D5\uD3F7\u86D6\uE0B6\uE0B7\u86D7"+
-            "\u86D8\u86D9\u86DA\u86DB\uE0C4\uD0E1\u86DC\u86DD"+
-            "\u86DE\uE0BC\u86DF\u86E0\uE0C9\uE0CA\u86E1\u86E2"+
-            "\u86E3\uE0BE\uE0AA\uC9A4\uE0C1\u86E4\uE0B2\u86E5"+
-            "\u86E6\u86E7\u86E8\u86E9\uCAC8\uE0C3\u86EA\uE0B5"+
-            "\u86EB\uCECB\u86EC\uCBC3\uE0CD\uE0C6\uE0C2\u86ED"+
-            "\uE0CB\u86EE\uE0BA\uE0BF\uE0C0\u86EF\u86F0\uE0C5"+
-            "\u86F1\u86F2\uE0C7\uE0C8\u86F3\uE0CC\u86F4\uE0BB"+
-            "\u86F5\u86F6\u86F7\u86F8\u86F9\uCBD4\uE0D5\u86FA"+
-            "\uE0D6\uE0D2\u86FB\u86FC\u86FD\u86FE\u8740\u8741"+
-            "\uE0D0\uBCCE\u8742\u8743\uE0D1\u8744\uB8C2\uD8C5"+
-            "\u8745\u8746\u8747\u8748\u8749\u874A\u874B\u874C"+
-            "\uD0EA\u874D\u874E\uC2EF\u874F\u8750\uE0CF\uE0BD"+
-            "\u8751\u8752\u8753\uE0D4\uE0D3\u8754\u8755\uE0D7"+
-            "\u8756\u8757\u8758\u8759\uE0DC\uE0D8\u875A\u875B"+
-            "\u875C\uD6F6\uB3B0\u875D\uD7EC\u875E\uCBBB\u875F"+
-            "\u8760\uE0DA\u8761\uCEFB\u8762\u8763\u8764\uBAD9"+
-            "\u8765\u8766\u8767\u8768\u8769\u876A\u876B\u876C"+
-            "\u876D\u876E\u876F\u8770\uE0E1\uE0DD\uD2AD\u8771"+
-            "\u8772\u8773\u8774\u8775\uE0E2\u8776\u8777\uE0DB"+
-            "\uE0D9\uE0DF\u8778\u8779\uE0E0\u877A\u877B\u877C"+
-            "\u877D\u877E\uE0DE\u8780\uE0E4\u8781\u8782\u8783"+
-            "\uC6F7\uD8AC\uD4EB\uE0E6\uCAC9\u8784\u8785\u8786"+
-            "\u8787\uE0E5\u8788\u8789\u878A\u878B\uB8C1\u878C"+
-            "\u878D\u878E\u878F\uE0E7\uE0E8\u8790\u8791\u8792"+
-            "\u8793\u8794\u8795\u8796\u8797\uE0E9\uE0E3\u8798"+
-            "\u8799\u879A\u879B\u879C\u879D\u879E\uBABF\uCCE7"+
-            "\u879F\u87A0\u87A1\uE0EA\u87A2\u87A3\u87A4\u87A5"+
-            "\u87A6\u87A7\u87A8\u87A9\u87AA\u87AB\u87AC\u87AD"+
-            "\u87AE\u87AF\u87B0\uCFF9\u87B1\u87B2\u87B3\u87B4"+
-            "\u87B5\u87B6\u87B7\u87B8\u87B9\u87BA\u87BB\uE0EB"+
-            "\u87BC\u87BD\u87BE\u87BF\u87C0\u87C1\u87C2\uC8C2"+
-            "\u87C3\u87C4\u87C5\u87C6\uBDC0\u87C7\u87C8\u87C9"+
-            "\u87CA\u87CB\u87CC\u87CD\u87CE\u87CF\u87D0\u87D1"+
-            "\u87D2\u87D3\uC4D2\u87D4\u87D5\u87D6\u87D7\u87D8"+
-            "\u87D9\u87DA\u87DB\u87DC\uE0EC\u87DD\u87DE\uE0ED"+
-            "\u87DF\u87E0\uC7F4\uCBC4\u87E1\uE0EE\uBBD8\uD8B6"+
-            "\uD2F2\uE0EF\uCDC5\u87E2\uB6DA\u87E3\u87E4\u87E5"+
-            "\u87E6\u87E7\u87E8\uE0F1\u87E9\uD4B0\u87EA\u87EB"+
-            "\uC0A7\uB4D1\u87EC\u87ED\uCEA7\uE0F0\u87EE\u87EF"+
-            "\u87F0\uE0F2\uB9CC\u87F1\u87F2\uB9FA\uCDBC\uE0F3"+
-            "\u87F3\u87F4\u87F5\uC6D4\uE0F4\u87F6\uD4B2\u87F7"+
-            "\uC8A6\uE0F6\uE0F5\u87F8\u87F9\u87FA\u87FB\u87FC"+
-            "\u87FD\u87FE\u8840\u8841\u8842\u8843\u8844\u8845"+
-            "\u8846\u8847\u8848\u8849\uE0F7\u884A\u884B\uCDC1"+
-            "\u884C\u884D\u884E\uCAA5\u884F\u8850\u8851\u8852"+
-            "\uD4DA\uDBD7\uDBD9\u8853\uDBD8\uB9E7\uDBDC\uDBDD"+
-            "\uB5D8\u8854\u8855\uDBDA\u8856\u8857\u8858\u8859"+
-            "\u885A\uDBDB\uB3A1\uDBDF\u885B\u885C\uBBF8\u885D"+
-            "\uD6B7\u885E\uDBE0\u885F\u8860\u8861\u8862\uBEF9"+
-            "\u8863\u8864\uB7BB\u8865\uDBD0\uCCAE\uBFB2\uBBB5"+
-            "\uD7F8\uBFD3\u8866\u8867\u8868\u8869\u886A\uBFE9"+
-            "\u886B\u886C\uBCE1\uCCB3\uDBDE\uB0D3\uCEEB\uB7D8"+
-            "\uD7B9\uC6C2\u886D\u886E\uC0A4\u886F\uCCB9\u8870"+
-            "\uDBE7\uDBE1\uC6BA\uDBE3\u8871\uDBE8\u8872\uC5F7"+
-            "\u8873\u8874\u8875\uDBEA\u8876\u8877\uDBE9\uBFC0"+
-            "\u8878\u8879\u887A\uDBE6\uDBE5\u887B\u887C\u887D"+
-            "\u887E\u8880\uB4B9\uC0AC\uC2A2\uDBE2\uDBE4\u8881"+
-            "\u8882\u8883\u8884\uD0CD\uDBED\u8885\u8886\u8887"+
-            "\u8888\u8889\uC0DD\uDBF2\u888A\u888B\u888C\u888D"+
-            "\u888E\u888F\u8890\uB6E2\u8891\u8892\u8893\u8894"+
-            "\uDBF3\uDBD2\uB9B8\uD4AB\uDBEC\u8895\uBFD1\uDBF0"+
-            "\u8896\uDBD1\u8897\uB5E6\u8898\uDBEB\uBFE5\u8899"+
-            "\u889A\u889B\uDBEE\u889C\uDBF1\u889D\u889E\u889F"+
-            "\uDBF9\u88A0\u88A1\u88A2\u88A3\u88A4\u88A5\u88A6"+
-            "\u88A7\u88A8\uB9A1\uB0A3\u88A9\u88AA\u88AB\u88AC"+
-            "\u88AD\u88AE\u88AF\uC2F1\u88B0\u88B1\uB3C7\uDBEF"+
-            "\u88B2\u88B3\uDBF8\u88B4\uC6D2\uDBF4\u88B5\u88B6"+
-            "\uDBF5\uDBF7\uDBF6\u88B7\u88B8\uDBFE\u88B9\uD3F2"+
-            "\uB2BA\u88BA\u88BB\u88BC\uDBFD\u88BD\u88BE\u88BF"+
-            "\u88C0\u88C1\u88C2\u88C3\u88C4\uDCA4\u88C5\uDBFB"+
-            "\u88C6\u88C7\u88C8\u88C9\uDBFA\u88CA\u88CB\u88CC"+
-            "\uDBFC\uC5E0\uBBF9\u88CD\u88CE\uDCA3\u88CF\u88D0"+
-            "\uDCA5\u88D1\uCCC3\u88D2\u88D3\u88D4\uB6D1\uDDC0"+
-            "\u88D5\u88D6\u88D7\uDCA1\u88D8\uDCA2\u88D9\u88DA"+
-            "\u88DB\uC7B5\u88DC\u88DD\u88DE\uB6E9\u88DF\u88E0"+
-            "\u88E1\uDCA7\u88E2\u88E3\u88E4\u88E5\uDCA6\u88E6"+
-            "\uDCA9\uB1A4\u88E7\u88E8\uB5CC\u88E9\u88EA\u88EB"+
-            "\u88EC\u88ED\uBFB0\u88EE\u88EF\u88F0\u88F1\u88F2"+
-            "\uD1DF\u88F3\u88F4\u88F5\u88F6\uB6C2\u88F7\u88F8"+
-            "\u88F9\u88FA\u88FB\u88FC\u88FD\u88FE\u8940\u8941"+
-            "\u8942\u8943\u8944\u8945\uDCA8\u8946\u8947\u8948"+
-            "\u8949\u894A\u894B\u894C\uCBFA\uEBF3\u894D\u894E"+
-            "\u894F\uCBDC\u8950\u8951\uCBFE\u8952\u8953\u8954"+
-            "\uCCC1\u8955\u8956\u8957\u8958\u8959\uC8FB\u895A"+
-            "\u895B\u895C\u895D\u895E\u895F\uDCAA\u8960\u8961"+
-            "\u8962\u8963\u8964\uCCEE\uDCAB\u8965\u8966\u8967"+
-            "\u8968\u8969\u896A\u896B\u896C\u896D\u896E\u896F"+
-            "\u8970\u8971\u8972\u8973\u8974\u8975\uDBD3\u8976"+
-            "\uDCAF\uDCAC\u8977\uBEB3\u8978\uCAFB\u8979\u897A"+
-            "\u897B\uDCAD\u897C\u897D\u897E\u8980\u8981\u8982"+
-            "\u8983\u8984\uC9CA\uC4B9\u8985\u8986\u8987\u8988"+
-            "\u8989\uC7BD\uDCAE\u898A\u898B\u898C\uD4F6\uD0E6"+
-            "\u898D\u898E\u898F\u8990\u8991\u8992\u8993\u8994"+
-            "\uC4AB\uB6D5\u8995\u8996\u8997\u8998\u8999\u899A"+
-            "\u899B\u899C\u899D\u899E\u899F\u89A0\u89A1\u89A2"+
-            "\u89A3\u89A4\u89A5\u89A6\uDBD4\u89A7\u89A8\u89A9"+
-            "\u89AA\uB1DA\u89AB\u89AC\u89AD\uDBD5\u89AE\u89AF"+
-            "\u89B0\u89B1\u89B2\u89B3\u89B4\u89B5\u89B6\u89B7"+
-            "\u89B8\uDBD6\u89B9\u89BA\u89BB\uBABE\u89BC\u89BD"+
-            "\u89BE\u89BF\u89C0\u89C1\u89C2\u89C3\u89C4\u89C5"+
-            "\u89C6\u89C7\u89C8\u89C9\uC8C0\u89CA\u89CB\u89CC"+
-            "\u89CD\u89CE\u89CF\uCABF\uC8C9\u89D0\uD7B3\u89D1"+
-            "\uC9F9\u89D2\u89D3\uBFC7\u89D4\u89D5\uBAF8\u89D6"+
-            "\u89D7\uD2BC\u89D8\u89D9\u89DA\u89DB\u89DC\u89DD"+
-            "\u89DE\u89DF\uE2BA\u89E0\uB4A6\u89E1\u89E2\uB1B8"+
-            "\u89E3\u89E4\u89E5\u89E6\u89E7\uB8B4\u89E8\uCFC4"+
-            "\u89E9\u89EA\u89EB\u89EC\uD9E7\uCFA6\uCDE2\u89ED"+
-            "\u89EE\uD9ED\uB6E0\u89EF\uD2B9\u89F0\u89F1\uB9BB"+
-            "\u89F2\u89F3\u89F4\u89F5\uE2B9\uE2B7\u89F6\uB4F3"+
-            "\u89F7\uCCEC\uCCAB\uB7F2\u89F8\uD8B2\uD1EB\uBABB"+
-            "\u89F9\uCAA7\u89FA\u89FB\uCDB7\u89FC\u89FD\uD2C4"+
-            "\uBFE4\uBCD0\uB6E1\u89FE\uDEC5\u8A40\u8A41\u8A42"+
-            "\u8A43\uDEC6\uDBBC\u8A44\uD1D9\u8A45\u8A46\uC6E6"+
-            "\uC4CE\uB7EE\u8A47\uB7DC\u8A48\u8A49\uBFFC\uD7E0"+
-            "\u8A4A\uC6F5\u8A4B\u8A4C\uB1BC\uDEC8\uBDB1\uCCD7"+
-            "\uDECA\u8A4D\uDEC9\u8A4E\u8A4F\u8A50\u8A51\u8A52"+
-            "\uB5EC\u8A53\uC9DD\u8A54\u8A55\uB0C2\u8A56\u8A57"+
-            "\u8A58\u8A59\u8A5A\u8A5B\u8A5C\u8A5D\u8A5E\u8A5F"+
-            "\u8A60\u8A61\u8A62\uC5AE\uC5AB\u8A63\uC4CC\u8A64"+
-            "\uBCE9\uCBFD\u8A65\u8A66\u8A67\uBAC3\u8A68\u8A69"+
-            "\u8A6A\uE5F9\uC8E7\uE5FA\uCDFD\u8A6B\uD7B1\uB8BE"+
-            "\uC2E8\u8A6C\uC8D1\u8A6D\u8A6E\uE5FB\u8A6F\u8A70"+
-            "\u8A71\u8A72\uB6CA\uBCCB\u8A73\u8A74\uD1FD\uE6A1"+
-            "\u8A75\uC3EE\u8A76\u8A77\u8A78\u8A79\uE6A4\u8A7A"+
-            "\u8A7B\u8A7C\u8A7D\uE5FE\uE6A5\uCDD7\u8A7E\u8A80"+
-            "\uB7C1\uE5FC\uE5FD\uE6A3\u8A81\u8A82\uC4DD\uE6A8"+
-            "\u8A83\u8A84\uE6A7\u8A85\u8A86\u8A87\u8A88\u8A89"+
-            "\u8A8A\uC3C3\u8A8B\uC6DE\u8A8C\u8A8D\uE6AA\u8A8E"+
-            "\u8A8F\u8A90\u8A91\u8A92\u8A93\u8A94\uC4B7\u8A95"+
-            "\u8A96\u8A97\uE6A2\uCABC\u8A98\u8A99\u8A9A\u8A9B"+
-            "\uBDE3\uB9C3\uE6A6\uD0D5\uCEAF\u8A9C\u8A9D\uE6A9"+
-            "\uE6B0\u8A9E\uD2A6\u8A9F\uBDAA\uE6AD\u8AA0\u8AA1"+
-            "\u8AA2\u8AA3\u8AA4\uE6AF\u8AA5\uC0D1\u8AA6\u8AA7"+
-            "\uD2CC\u8AA8\u8AA9\u8AAA\uBCA7\u8AAB\u8AAC\u8AAD"+
-            "\u8AAE\u8AAF\u8AB0\u8AB1\u8AB2\u8AB3\u8AB4\u8AB5"+
-            "\u8AB6\uE6B1\u8AB7\uD2F6\u8AB8\u8AB9\u8ABA\uD7CB"+
-            "\u8ABB\uCDFE\u8ABC\uCDDE\uC2A6\uE6AB\uE6AC\uBDBF"+
-            "\uE6AE\uE6B3\u8ABD\u8ABE\uE6B2\u8ABF\u8AC0\u8AC1"+
-            "\u8AC2\uE6B6\u8AC3\uE6B8\u8AC4\u8AC5\u8AC6\u8AC7"+
-            "\uC4EF\u8AC8\u8AC9\u8ACA\uC4C8\u8ACB\u8ACC\uBEEA"+
-            "\uC9EF\u8ACD\u8ACE\uE6B7\u8ACF\uB6F0\u8AD0\u8AD1"+
-            "\u8AD2\uC3E4\u8AD3\u8AD4\u8AD5\u8AD6\u8AD7\u8AD8"+
-            "\u8AD9\uD3E9\uE6B4\u8ADA\uE6B5\u8ADB\uC8A2\u8ADC"+
-            "\u8ADD\u8ADE\u8ADF\u8AE0\uE6BD\u8AE1\u8AE2\u8AE3"+
-            "\uE6B9\u8AE4\u8AE5\u8AE6\u8AE7\u8AE8\uC6C5\u8AE9"+
-            "\u8AEA\uCDF1\uE6BB\u8AEB\u8AEC\u8AED\u8AEE\u8AEF"+
-            "\u8AF0\u8AF1\u8AF2\u8AF3\u8AF4\uE6BC\u8AF5\u8AF6"+
-            "\u8AF7\u8AF8\uBBE9\u8AF9\u8AFA\u8AFB\u8AFC\u8AFD"+
-            "\u8AFE\u8B40\uE6BE\u8B41\u8B42\u8B43\u8B44\uE6BA"+
-            "\u8B45\u8B46\uC0B7\u8B47\u8B48\u8B49\u8B4A\u8B4B"+
-            "\u8B4C\u8B4D\u8B4E\u8B4F\uD3A4\uE6BF\uC9F4\uE6C3"+
-            "\u8B50\u8B51\uE6C4\u8B52\u8B53\u8B54\u8B55\uD0F6"+
-            "\u8B56\u8B57\u8B58\u8B59\u8B5A\u8B5B\u8B5C\u8B5D"+
-            "\u8B5E\u8B5F\u8B60\u8B61\u8B62\u8B63\u8B64\u8B65"+
-            "\u8B66\u8B67\uC3BD\u8B68\u8B69\u8B6A\u8B6B\u8B6C"+
-            "\u8B6D\u8B6E\uC3C4\uE6C2\u8B6F\u8B70\u8B71\u8B72"+
-            "\u8B73\u8B74\u8B75\u8B76\u8B77\u8B78\u8B79\u8B7A"+
-            "\u8B7B\u8B7C\uE6C1\u8B7D\u8B7E\u8B80\u8B81\u8B82"+
-            "\u8B83\u8B84\uE6C7\uCFB1\u8B85\uEBF4\u8B86\u8B87"+
-            "\uE6CA\u8B88\u8B89\u8B8A\u8B8B\u8B8C\uE6C5\u8B8D"+
-            "\u8B8E\uBCDE\uC9A9\u8B8F\u8B90\u8B91\u8B92\u8B93"+
-            "\u8B94\uBCB5\u8B95\u8B96\uCFD3\u8B97\u8B98\u8B99"+
-            "\u8B9A\u8B9B\uE6C8\u8B9C\uE6C9\u8B9D\uE6CE\u8B9E"+
-            "\uE6D0\u8B9F\u8BA0\u8BA1\uE6D1\u8BA2\u8BA3\u8BA4"+
-            "\uE6CB\uB5D5\u8BA5\uE6CC\u8BA6\u8BA7\uE6CF\u8BA8"+
-            "\u8BA9\uC4DB\u8BAA\uE6C6\u8BAB\u8BAC\u8BAD\u8BAE"+
-            "\u8BAF\uE6CD\u8BB0\u8BB1\u8BB2\u8BB3\u8BB4\u8BB5"+
-            "\u8BB6\u8BB7\u8BB8\u8BB9\u8BBA\u8BBB\u8BBC\u8BBD";
-
-        private final static String innerIndex3=
-            "\u8BBE\u8BBF\u8BC0\u8BC1\u8BC2\u8BC3\u8BC4\u8BC5"+
-            "\u8BC6\uE6D2\u8BC7\u8BC8\u8BC9\u8BCA\u8BCB\u8BCC"+
-            "\u8BCD\u8BCE\u8BCF\u8BD0\u8BD1\u8BD2\uE6D4\uE6D3"+
-            "\u8BD3\u8BD4\u8BD5\u8BD6\u8BD7\u8BD8\u8BD9\u8BDA"+
-            "\u8BDB\u8BDC\u8BDD\u8BDE\u8BDF\u8BE0\u8BE1\u8BE2"+
-            "\u8BE3\u8BE4\u8BE5\u8BE6\u8BE7\u8BE8\u8BE9\u8BEA"+
-            "\u8BEB\u8BEC\uE6D5\u8BED\uD9F8\u8BEE\u8BEF\uE6D6"+
-            "\u8BF0\u8BF1\u8BF2\u8BF3\u8BF4\u8BF5\u8BF6\u8BF7"+
-            "\uE6D7\u8BF8\u8BF9\u8BFA\u8BFB\u8BFC\u8BFD\u8BFE"+
-            "\u8C40\u8C41\u8C42\u8C43\u8C44\u8C45\u8C46\u8C47"+
-            "\uD7D3\uE6DD\u8C48\uE6DE\uBFD7\uD4D0\u8C49\uD7D6"+
-            "\uB4E6\uCBEF\uE6DA\uD8C3\uD7CE\uD0A2\u8C4A\uC3CF"+
-            "\u8C4B\u8C4C\uE6DF\uBCBE\uB9C2\uE6DB\uD1A7\u8C4D"+
-            "\u8C4E\uBAA2\uC2CF\u8C4F\uD8AB\u8C50\u8C51\u8C52"+
-            "\uCAEB\uE5EE\u8C53\uE6DC\u8C54\uB7F5\u8C55\u8C56"+
-            "\u8C57\u8C58\uC8E6\u8C59\u8C5A\uC4F5\u8C5B\u8C5C"+
-            "\uE5B2\uC4FE\u8C5D\uCBFC\uE5B3\uD5AC\u8C5E\uD3EE"+
-            "\uCAD8\uB0B2\u8C5F\uCBCE\uCDEA\u8C60\u8C61\uBAEA"+
-            "\u8C62\u8C63\u8C64\uE5B5\u8C65\uE5B4\u8C66\uD7DA"+
-            "\uB9D9\uD6E6\uB6A8\uCDF0\uD2CB\uB1A6\uCAB5\u8C67"+
-            "\uB3E8\uC9F3\uBFCD\uD0FB\uCAD2\uE5B6\uBBC2\u8C68"+
-            "\u8C69\u8C6A\uCFDC\uB9AC\u8C6B\u8C6C\u8C6D\u8C6E"+
-            "\uD4D7\u8C6F\u8C70\uBAA6\uD1E7\uCFFC\uBCD2\u8C71"+
-            "\uE5B7\uC8DD\u8C72\u8C73\u8C74\uBFED\uB1F6\uCBDE"+
-            "\u8C75\u8C76\uBCC5\u8C77\uBCC4\uD2FA\uC3DC\uBFDC"+
-            "\u8C78\u8C79\u8C7A\u8C7B\uB8BB\u8C7C\u8C7D\u8C7E"+
-            "\uC3C2\u8C80\uBAAE\uD4A2\u8C81\u8C82\u8C83\u8C84"+
-            "\u8C85\u8C86\u8C87\u8C88\u8C89\uC7DE\uC4AF\uB2EC"+
-            "\u8C8A\uB9D1\u8C8B\u8C8C\uE5BB\uC1C8\u8C8D\u8C8E"+
-            "\uD5AF\u8C8F\u8C90\u8C91\u8C92\u8C93\uE5BC\u8C94"+
-            "\uE5BE\u8C95\u8C96\u8C97\u8C98\u8C99\u8C9A\u8C9B"+
-            "\uB4E7\uB6D4\uCBC2\uD1B0\uB5BC\u8C9C\u8C9D\uCAD9"+
-            "\u8C9E\uB7E2\u8C9F\u8CA0\uC9E4\u8CA1\uBDAB\u8CA2"+
-            "\u8CA3\uCEBE\uD7F0\u8CA4\u8CA5\u8CA6\u8CA7\uD0A1"+
-            "\u8CA8\uC9D9\u8CA9\u8CAA\uB6FB\uE6D8\uBCE2\u8CAB"+
-            "\uB3BE\u8CAC\uC9D0\u8CAD\uE6D9\uB3A2\u8CAE\u8CAF"+
-            "\u8CB0\u8CB1\uDECC\u8CB2\uD3C8\uDECD\u8CB3\uD2A2"+
-            "\u8CB4\u8CB5\u8CB6\u8CB7\uDECE\u8CB8\u8CB9\u8CBA"+
-            "\u8CBB\uBECD\u8CBC\u8CBD\uDECF\u8CBE\u8CBF\u8CC0"+
-            "\uCAAC\uD2FC\uB3DF\uE5EA\uC4E1\uBEA1\uCEB2\uC4F2"+
-            "\uBED6\uC6A8\uB2E3\u8CC1\u8CC2\uBED3\u8CC3\u8CC4"+
-            "\uC7FC\uCCEB\uBDEC\uCEDD\u8CC5\u8CC6\uCABA\uC6C1"+
-            "\uE5EC\uD0BC\u8CC7\u8CC8\u8CC9\uD5B9\u8CCA\u8CCB"+
-            "\u8CCC\uE5ED\u8CCD\u8CCE\u8CCF\u8CD0\uCAF4\u8CD1"+
-            "\uCDC0\uC2C5\u8CD2\uE5EF\u8CD3\uC2C4\uE5F0\u8CD4"+
-            "\u8CD5\u8CD6\u8CD7\u8CD8\u8CD9\u8CDA\uE5F8\uCDCD"+
-            "\u8CDB\uC9BD\u8CDC\u8CDD\u8CDE\u8CDF\u8CE0\u8CE1"+
-            "\u8CE2\uD2D9\uE1A8\u8CE3\u8CE4\u8CE5\u8CE6\uD3EC"+
-            "\u8CE7\uCBEA\uC6F1\u8CE8\u8CE9\u8CEA\u8CEB\u8CEC"+
-            "\uE1AC\u8CED\u8CEE\u8CEF\uE1A7\uE1A9\u8CF0\u8CF1"+
-            "\uE1AA\uE1AF\u8CF2\u8CF3\uB2ED\u8CF4\uE1AB\uB8DA"+
-            "\uE1AD\uE1AE\uE1B0\uB5BA\uE1B1\u8CF5\u8CF6\u8CF7"+
-            "\u8CF8\u8CF9\uE1B3\uE1B8\u8CFA\u8CFB\u8CFC\u8CFD"+
-            "\u8CFE\uD1D2\u8D40\uE1B6\uE1B5\uC1EB\u8D41\u8D42"+
-            "\u8D43\uE1B7\u8D44\uD4C0\u8D45\uE1B2\u8D46\uE1BA"+
-            "\uB0B6\u8D47\u8D48\u8D49\u8D4A\uE1B4\u8D4B\uBFF9"+
-            "\u8D4C\uE1B9\u8D4D\u8D4E\uE1BB\u8D4F\u8D50\u8D51"+
-            "\u8D52\u8D53\u8D54\uE1BE\u8D55\u8D56\u8D57\u8D58"+
-            "\u8D59\u8D5A\uE1BC\u8D5B\u8D5C\u8D5D\u8D5E\u8D5F"+
-            "\u8D60\uD6C5\u8D61\u8D62\u8D63\u8D64\u8D65\u8D66"+
-            "\u8D67\uCFBF\u8D68\u8D69\uE1BD\uE1BF\uC2CD\u8D6A"+
-            "\uB6EB\u8D6B\uD3F8\u8D6C\u8D6D\uC7CD\u8D6E\u8D6F"+
-            "\uB7E5\u8D70\u8D71\u8D72\u8D73\u8D74\u8D75\u8D76"+
-            "\u8D77\u8D78\u8D79\uBEFE\u8D7A\u8D7B\u8D7C\u8D7D"+
-            "\u8D7E\u8D80\uE1C0\uE1C1\u8D81\u8D82\uE1C7\uB3E7"+
-            "\u8D83\u8D84\u8D85\u8D86\u8D87\u8D88\uC6E9\u8D89"+
-            "\u8D8A\u8D8B\u8D8C\u8D8D\uB4DE\u8D8E\uD1C2\u8D8F"+
-            "\u8D90\u8D91\u8D92\uE1C8\u8D93\u8D94\uE1C6\u8D95"+
-            "\u8D96\u8D97\u8D98\u8D99\uE1C5\u8D9A\uE1C3\uE1C2"+
-            "\u8D9B\uB1C0\u8D9C\u8D9D\u8D9E\uD5B8\uE1C4\u8D9F"+
-            "\u8DA0\u8DA1\u8DA2\u8DA3\uE1CB\u8DA4\u8DA5\u8DA6"+
-            "\u8DA7\u8DA8\u8DA9\u8DAA\u8DAB\uE1CC\uE1CA\u8DAC"+
-            "\u8DAD\u8DAE\u8DAF\u8DB0\u8DB1\u8DB2\u8DB3\uEFFA"+
-            "\u8DB4\u8DB5\uE1D3\uE1D2\uC7B6\u8DB6\u8DB7\u8DB8"+
-            "\u8DB9\u8DBA\u8DBB\u8DBC\u8DBD\u8DBE\u8DBF\u8DC0"+
-            "\uE1C9\u8DC1\u8DC2\uE1CE\u8DC3\uE1D0\u8DC4\u8DC5"+
-            "\u8DC6\u8DC7\u8DC8\u8DC9\u8DCA\u8DCB\u8DCC\u8DCD"+
-            "\u8DCE\uE1D4\u8DCF\uE1D1\uE1CD\u8DD0\u8DD1\uE1CF"+
-            "\u8DD2\u8DD3\u8DD4\u8DD5\uE1D5\u8DD6\u8DD7\u8DD8"+
-            "\u8DD9\u8DDA\u8DDB\u8DDC\u8DDD\u8DDE\u8DDF\u8DE0"+
-            "\u8DE1\u8DE2\uE1D6\u8DE3\u8DE4\u8DE5\u8DE6\u8DE7"+
-            "\u8DE8\u8DE9\u8DEA\u8DEB\u8DEC\u8DED\u8DEE\u8DEF"+
-            "\u8DF0\u8DF1\u8DF2\u8DF3\u8DF4\u8DF5\u8DF6\u8DF7"+
-            "\u8DF8\uE1D7\u8DF9\u8DFA\u8DFB\uE1D8\u8DFC\u8DFD"+
-            "\u8DFE\u8E40\u8E41\u8E42\u8E43\u8E44\u8E45\u8E46"+
-            "\u8E47\u8E48\u8E49\u8E4A\u8E4B\u8E4C\u8E4D\u8E4E"+
-            "\u8E4F\u8E50\u8E51\u8E52\u8E53\u8E54\u8E55\uE1DA"+
-            "\u8E56\u8E57\u8E58\u8E59\u8E5A\u8E5B\u8E5C\u8E5D"+
-            "\u8E5E\u8E5F\u8E60\u8E61\u8E62\uE1DB\u8E63\u8E64"+
-            "\u8E65\u8E66\u8E67\u8E68\u8E69\uCEA1\u8E6A\u8E6B"+
-            "\u8E6C\u8E6D\u8E6E\u8E6F\u8E70\u8E71\u8E72\u8E73"+
-            "\u8E74\u8E75\u8E76\uE7DD\u8E77\uB4A8\uD6DD\u8E78"+
-            "\u8E79\uD1B2\uB3B2\u8E7A\u8E7B\uB9A4\uD7F3\uC7C9"+
-            "\uBEDE\uB9AE\u8E7C\uCED7\u8E7D\u8E7E\uB2EE\uDBCF"+
-            "\u8E80\uBCBA\uD2D1\uCBC8\uB0CD\u8E81\u8E82\uCFEF"+
-            "\u8E83\u8E84\u8E85\u8E86\u8E87\uD9E3\uBDED\u8E88"+
-            "\u8E89\uB1D2\uCAD0\uB2BC\u8E8A\uCBA7\uB7AB\u8E8B"+
-            "\uCAA6\u8E8C\u8E8D\u8E8E\uCFA3\u8E8F\u8E90\uE0F8"+
-            "\uD5CA\uE0FB\u8E91\u8E92\uE0FA\uC5C1\uCCFB\u8E93"+
-            "\uC1B1\uE0F9\uD6E3\uB2AF\uD6C4\uB5DB\u8E94\u8E95"+
-            "\u8E96\u8E97\u8E98\u8E99\u8E9A\u8E9B\uB4F8\uD6A1"+
-            "\u8E9C\u8E9D\u8E9E\u8E9F\u8EA0\uCFAF\uB0EF\u8EA1"+
-            "\u8EA2\uE0FC\u8EA3\u8EA4\u8EA5\u8EA6\u8EA7\uE1A1"+
-            "\uB3A3\u8EA8\u8EA9\uE0FD\uE0FE\uC3B1\u8EAA\u8EAB"+
-            "\u8EAC\u8EAD\uC3DD\u8EAE\uE1A2\uB7F9\u8EAF\u8EB0"+
-            "\u8EB1\u8EB2\u8EB3\u8EB4\uBBCF\u8EB5\u8EB6\u8EB7"+
-            "\u8EB8\u8EB9\u8EBA\u8EBB\uE1A3\uC4BB\u8EBC\u8EBD"+
-            "\u8EBE\u8EBF\u8EC0\uE1A4\u8EC1\u8EC2\uE1A5\u8EC3"+
-            "\u8EC4\uE1A6\uB4B1\u8EC5\u8EC6\u8EC7\u8EC8\u8EC9"+
-            "\u8ECA\u8ECB\u8ECC\u8ECD\u8ECE\u8ECF\u8ED0\u8ED1"+
-            "\u8ED2\u8ED3\uB8C9\uC6BD\uC4EA\u8ED4\uB2A2\u8ED5"+
-            "\uD0D2\u8ED6\uE7DB\uBBC3\uD3D7\uD3C4\u8ED7\uB9E3"+
-            "\uE2CF\u8ED8\u8ED9\u8EDA\uD7AF\u8EDB\uC7EC\uB1D3"+
-            "\u8EDC\u8EDD\uB4B2\uE2D1\u8EDE\u8EDF\u8EE0\uD0F2"+
-            "\uC2AE\uE2D0\u8EE1\uBFE2\uD3A6\uB5D7\uE2D2\uB5EA"+
-            "\u8EE2\uC3ED\uB8FD\u8EE3\uB8AE\u8EE4\uC5D3\uB7CF"+
-            "\uE2D4\u8EE5\u8EE6\u8EE7\u8EE8\uE2D3\uB6C8\uD7F9"+
-            "\u8EE9\u8EEA\u8EEB\u8EEC\u8EED\uCDA5\u8EEE\u8EEF"+
-            "\u8EF0\u8EF1\u8EF2\uE2D8\u8EF3\uE2D6\uCAFC\uBFB5"+
-            "\uD3B9\uE2D5\u8EF4\u8EF5\u8EF6\u8EF7\uE2D7\u8EF8"+
-            "\u8EF9\u8EFA\u8EFB\u8EFC\u8EFD\u8EFE\u8F40\u8F41"+
-            "\u8F42\uC1AE\uC0C8\u8F43\u8F44\u8F45\u8F46\u8F47"+
-            "\u8F48\uE2DB\uE2DA\uC0AA\u8F49\u8F4A\uC1CE\u8F4B"+
-            "\u8F4C\u8F4D\u8F4E\uE2DC\u8F4F\u8F50\u8F51\u8F52"+
-            "\u8F53\u8F54\u8F55\u8F56\u8F57\u8F58\u8F59\u8F5A"+
-            "\uE2DD\u8F5B\uE2DE\u8F5C\u8F5D\u8F5E\u8F5F\u8F60"+
-            "\u8F61\u8F62\u8F63\u8F64\uDBC8\u8F65\uD1D3\uCDA2"+
-            "\u8F66\u8F67\uBDA8\u8F68\u8F69\u8F6A\uDEC3\uD8A5"+
-            "\uBFAA\uDBCD\uD2EC\uC6FA\uC5AA\u8F6B\u8F6C\u8F6D"+
-            "\uDEC4\u8F6E\uB1D7\uDFAE\u8F6F\u8F70\u8F71\uCABD"+
-            "\u8F72\uDFB1\u8F73\uB9AD\u8F74\uD2FD\u8F75\uB8A5"+
-            "\uBAEB\u8F76\u8F77\uB3DA\u8F78\u8F79\u8F7A\uB5DC"+
-            "\uD5C5\u8F7B\u8F7C\u8F7D\u8F7E\uC3D6\uCFD2\uBBA1"+
-            "\u8F80\uE5F3\uE5F2\u8F81\u8F82\uE5F4\u8F83\uCDE4"+
-            "\u8F84\uC8F5\u8F85\u8F86\u8F87\u8F88\u8F89\u8F8A"+
-            "\u8F8B\uB5AF\uC7BF\u8F8C\uE5F6\u8F8D\u8F8E\u8F8F"+
-            "\uECB0\u8F90\u8F91\u8F92\u8F93\u8F94\u8F95\u8F96"+
-            "\u8F97\u8F98\u8F99\u8F9A\u8F9B\u8F9C\u8F9D\u8F9E"+
-            "\uE5E6\u8F9F\uB9E9\uB5B1\u8FA0\uC2BC\uE5E8\uE5E7"+
-            "\uE5E9\u8FA1\u8FA2\u8FA3\u8FA4\uD2CD\u8FA5\u8FA6"+
-            "\u8FA7\uE1EA\uD0CE\u8FA8\uCDAE\u8FA9\uD1E5\u8FAA"+
-            "\u8FAB\uB2CA\uB1EB\u8FAC\uB1F2\uC5ED\u8FAD\u8FAE"+
-            "\uD5C3\uD3B0\u8FAF\uE1DC\u8FB0\u8FB1\u8FB2\uE1DD"+
-            "\u8FB3\uD2DB\u8FB4\uB3B9\uB1CB\u8FB5\u8FB6\u8FB7"+
-            "\uCDF9\uD5F7\uE1DE\u8FB8\uBEB6\uB4FD\u8FB9\uE1DF"+
-            "\uBADC\uE1E0\uBBB2\uC2C9\uE1E1\u8FBA\u8FBB\u8FBC"+
-            "\uD0EC\u8FBD\uCDBD\u8FBE\u8FBF\uE1E2\u8FC0\uB5C3"+
-            "\uC5C7\uE1E3\u8FC1\u8FC2\uE1E4\u8FC3\u8FC4\u8FC5"+
-            "\u8FC6\uD3F9\u8FC7\u8FC8\u8FC9\u8FCA\u8FCB\u8FCC"+
-            "\uE1E5\u8FCD\uD1AD\u8FCE\u8FCF\uE1E6\uCEA2\u8FD0"+
-            "\u8FD1\u8FD2\u8FD3\u8FD4\u8FD5\uE1E7\u8FD6\uB5C2"+
-            "\u8FD7\u8FD8\u8FD9\u8FDA\uE1E8\uBBD5\u8FDB\u8FDC"+
-            "\u8FDD\u8FDE\u8FDF\uD0C4\uE2E0\uB1D8\uD2E4\u8FE0"+
-            "\u8FE1\uE2E1\u8FE2\u8FE3\uBCC9\uC8CC\u8FE4\uE2E3"+
-            "\uECFE\uECFD\uDFAF\u8FE5\u8FE6\u8FE7\uE2E2\uD6BE"+
-            "\uCDFC\uC3A6\u8FE8\u8FE9\u8FEA\uE3C3\u8FEB\u8FEC"+
-            "\uD6D2\uE2E7\u8FED\u8FEE\uE2E8\u8FEF\u8FF0\uD3C7"+
-            "\u8FF1\u8FF2\uE2EC\uBFEC\u8FF3\uE2ED\uE2E5\u8FF4"+
-            "\u8FF5\uB3C0\u8FF6\u8FF7\u8FF8\uC4EE\u8FF9\u8FFA"+
-            "\uE2EE\u8FFB\u8FFC\uD0C3\u8FFD\uBAF6\uE2E9\uB7DE"+
-            "\uBBB3\uCCAC\uCBCB\uE2E4\uE2E6\uE2EA\uE2EB\u8FFE"+
-            "\u9040\u9041\uE2F7\u9042\u9043\uE2F4\uD4F5\uE2F3"+
-            "\u9044\u9045\uC5AD\u9046\uD5FA\uC5C2\uB2C0\u9047"+
-            "\u9048\uE2EF\u9049\uE2F2\uC1AF\uCBBC\u904A\u904B"+
-            "\uB5A1\uE2F9\u904C\u904D\u904E\uBCB1\uE2F1\uD0D4"+
-            "\uD4B9\uE2F5\uB9D6\uE2F6\u904F\u9050\u9051\uC7D3"+
-            "\u9052\u9053\u9054\u9055\u9056\uE2F0\u9057\u9058"+
-            "\u9059\u905A\u905B\uD7DC\uEDA1\u905C\u905D\uE2F8"+
-            "\u905E\uEDA5\uE2FE\uCAD1\u905F\u9060\u9061\u9062"+
-            "\u9063\u9064\u9065\uC1B5\u9066\uBBD0\u9067\u9068"+
-            "\uBFD6\u9069\uBAE3\u906A\u906B\uCBA1\u906C\u906D"+
-            "\u906E\uEDA6\uEDA3\u906F\u9070\uEDA2\u9071\u9072"+
-            "\u9073\u9074\uBBD6\uEDA7\uD0F4\u9075\u9076\uEDA4"+
-            "\uBADE\uB6F7\uE3A1\uB6B2\uCCF1\uB9A7\u9077\uCFA2"+
-            "\uC7A1\u9078\u9079\uBFD2\u907A\u907B\uB6F1\u907C"+
-            "\uE2FA\uE2FB\uE2FD\uE2FC\uC4D5\uE3A2\u907D\uD3C1"+
-            "\u907E\u9080\u9081\uE3A7\uC7C4\u9082\u9083\u9084"+
-            "\u9085\uCFA4\u9086\u9087\uE3A9\uBAB7\u9088\u9089"+
-            "\u908A\u908B\uE3A8\u908C\uBBDA\u908D\uE3A3\u908E"+
-            "\u908F\u9090\uE3A4\uE3AA\u9091\uE3A6\u9092\uCEF2"+
-            "\uD3C6\u9093\u9094\uBBBC\u9095\u9096\uD4C3\u9097"+
-            "\uC4FA\u9098\u9099\uEDA8\uD0FC\uE3A5\u909A\uC3F5"+
-            "\u909B\uE3AD\uB1AF\u909C\uE3B2\u909D\u909E\u909F"+
-            "\uBCC2\u90A0\u90A1\uE3AC\uB5BF\u90A2\u90A3\u90A4"+
-            "\u90A5\u90A6\u90A7\u90A8\u90A9\uC7E9\uE3B0\u90AA"+
-            "\u90AB\u90AC\uBEAA\uCDEF\u90AD\u90AE\u90AF\u90B0"+
-            "\u90B1\uBBF3\u90B2\u90B3\u90B4\uCCE8\u90B5\u90B6"+
-            "\uE3AF\u90B7\uE3B1\u90B8\uCFA7\uE3AE\u90B9\uCEA9"+
-            "\uBBDD\u90BA\u90BB\u90BC\u90BD\u90BE\uB5EB\uBEE5"+
-            "\uB2D2\uB3CD\u90BF\uB1B9\uE3AB\uB2D1\uB5AC\uB9DF"+
-            "\uB6E8\u90C0\u90C1\uCFEB\uE3B7\u90C2\uBBCC\u90C3"+
-            "\u90C4\uC8C7\uD0CA\u90C5\u90C6\u90C7\u90C8\u90C9"+
-            "\uE3B8\uB3EE\u90CA\u90CB\u90CC\u90CD\uEDA9\u90CE"+
-            "\uD3FA\uD3E4\u90CF\u90D0\u90D1\uEDAA\uE3B9\uD2E2"+
-            "\u90D2\u90D3\u90D4\u90D5\u90D6\uE3B5\u90D7\u90D8"+
-            "\u90D9\u90DA\uD3DE\u90DB\u90DC\u90DD\u90DE\uB8D0"+
-            "\uE3B3\u90DF\u90E0\uE3B6\uB7DF\u90E1\uE3B4\uC0A2"+
-            "\u90E2\u90E3\u90E4\uE3BA\u90E5\u90E6\u90E7\u90E8"+
-            "\u90E9\u90EA\u90EB\u90EC\u90ED\u90EE\u90EF\u90F0"+
-            "\u90F1\u90F2\u90F3\u90F4\u90F5\u90F6\u90F7\uD4B8"+
-            "\u90F8\u90F9\u90FA\u90FB\u90FC\u90FD\u90FE\u9140"+
-            "\uB4C8\u9141\uE3BB\u9142\uBBC5\u9143\uC9F7\u9144"+
-            "\u9145\uC9E5\u9146\u9147\u9148\uC4BD\u9149\u914A"+
-            "\u914B\u914C\u914D\u914E\u914F\uEDAB\u9150\u9151"+
-            "\u9152\u9153\uC2FD\u9154\u9155\u9156\u9157\uBBDB"+
-            "\uBFAE\u9158\u9159\u915A\u915B\u915C\u915D\u915E"+
-            "\uCEBF\u915F\u9160\u9161\u9162\uE3BC\u9163\uBFB6"+
-            "\u9164\u9165\u9166\u9167\u9168\u9169\u916A\u916B"+
-            "\u916C\u916D\u916E\u916F\u9170\u9171\u9172\u9173"+
-            "\u9174\u9175\u9176\uB1EF\u9177\u9178\uD4F7\u9179"+
-            "\u917A\u917B\u917C\u917D\uE3BE\u917E\u9180\u9181"+
-            "\u9182\u9183\u9184\u9185\u9186\uEDAD\u9187\u9188"+
-            "\u9189\u918A\u918B\u918C\u918D\u918E\u918F\uE3BF"+
-            "\uBAA9\uEDAC\u9190\u9191\uE3BD\u9192\u9193\u9194"+
-            "\u9195\u9196\u9197\u9198\u9199\u919A\u919B\uE3C0"+
-            "\u919C\u919D\u919E\u919F\u91A0\u91A1\uBAB6\u91A2"+
-            "\u91A3\u91A4\uB6AE\u91A5\u91A6\u91A7\u91A8\u91A9"+
-            "\uD0B8\u91AA\uB0C3\uEDAE\u91AB\u91AC\u91AD\u91AE"+
-            "\u91AF\uEDAF\uC0C1\u91B0\uE3C1\u91B1\u91B2\u91B3"+
-            "\u91B4\u91B5\u91B6\u91B7\u91B8\u91B9\u91BA\u91BB"+
-            "\u91BC\u91BD\u91BE\u91BF\u91C0\u91C1\uC5B3\u91C2"+
-            "\u91C3\u91C4\u91C5\u91C6\u91C7\u91C8\u91C9\u91CA"+
-            "\u91CB\u91CC\u91CD\u91CE\u91CF\uE3C2\u91D0\u91D1"+
-            "\u91D2\u91D3\u91D4\u91D5\u91D6\u91D7\u91D8\uDCB2"+
-            "\u91D9\u91DA\u91DB\u91DC\u91DD\u91DE\uEDB0\u91DF"+
-            "\uB8EA\u91E0\uCEEC\uEAA7\uD0E7\uCAF9\uC8D6\uCFB7"+
-            "\uB3C9\uCED2\uBDE4\u91E1\u91E2\uE3DE\uBBF2\uEAA8"+
-            "\uD5BD\u91E3\uC6DD\uEAA9\u91E4\u91E5\u91E6\uEAAA"+
-            "\u91E7\uEAAC\uEAAB\u91E8\uEAAE\uEAAD\u91E9\u91EA"+
-            "\u91EB\u91EC\uBDD8\u91ED\uEAAF\u91EE\uC2BE\u91EF"+
-            "\u91F0\u91F1\u91F2\uB4C1\uB4F7\u91F3\u91F4\uBBA7"+
-            "\u91F5\u91F6\u91F7\u91F8\u91F9\uECE6\uECE5\uB7BF"+
-            "\uCBF9\uB1E2\u91FA\uECE7\u91FB\u91FC\u91FD\uC9C8"+
-            "\uECE8\uECE9\u91FE\uCAD6\uDED0\uB2C5\uD4FA\u9240"+
-            "\u9241\uC6CB\uB0C7\uB4F2\uC8D3\u9242\u9243\u9244"+
-            "\uCDD0\u9245\u9246\uBFB8\u9247\u9248\u9249\u924A"+
-            "\u924B\u924C\u924D\uBFDB\u924E\u924F\uC7A4\uD6B4"+
-            "\u9250\uC0A9\uDED1\uC9A8\uD1EF\uC5A4\uB0E7\uB3B6"+
-            "\uC8C5\u9251\u9252\uB0E2\u9253\u9254\uB7F6\u9255"+
-            "\u9256\uC5FA\u9257\u9258\uB6F3\u9259\uD5D2\uB3D0"+
-            "\uBCBC\u925A\u925B\u925C\uB3AD\u925D\u925E\u925F"+
-            "\u9260\uBEF1\uB0D1\u9261\u9262\u9263\u9264\u9265"+
-            "\u9266\uD2D6\uCAE3\uD7A5\u9267\uCDB6\uB6B6\uBFB9"+
-            "\uD5DB\u9268\uB8A7\uC5D7\u9269\u926A\u926B\uDED2"+
-            "\uBFD9\uC2D5\uC7C0\u926C\uBBA4\uB1A8\u926D\u926E"+
-            "\uC5EA\u926F\u9270\uC5FB\uCCA7\u9271\u9272\u9273"+
-            "\u9274\uB1A7\u9275\u9276\u9277\uB5D6\u9278\u9279"+
-            "\u927A\uC4A8\u927B\uDED3\uD1BA\uB3E9\u927C\uC3F2"+
-            "\u927D\u927E\uB7F7\u9280\uD6F4\uB5A3\uB2F0\uC4B4"+
-            "\uC4E9\uC0AD\uDED4\u9281\uB0E8\uC5C4\uC1E0\u9282"+
-            "\uB9D5\u9283\uBEDC\uCDD8\uB0CE\u9284\uCDCF\uDED6"+
-            "\uBED0\uD7BE\uDED5\uD5D0\uB0DD\u9285\u9286\uC4E2"+
-            "\u9287\u9288\uC2A3\uBCF0\u9289\uD3B5\uC0B9\uC5A1"+
-            "\uB2A6\uD4F1\u928A\u928B\uC0A8\uCAC3\uDED7\uD5FC"+
-            "\u928C\uB9B0\u928D\uC8AD\uCBA9\u928E\uDED9\uBFBD"+
-            "\u928F\u9290\u9291\u9292\uC6B4\uD7A7\uCAB0\uC4C3"+
-            "\u9293\uB3D6\uB9D2\u9294\u9295\u9296\u9297\uD6B8"+
-            "\uEAFC\uB0B4\u9298\u9299\u929A\u929B\uBFE6\u929C"+
-            "\u929D\uCCF4\u929E\u929F\u92A0\u92A1\uCDDA\u92A2"+
-            "\u92A3\u92A4\uD6BF\uC2CE\u92A5\uCECE\uCCA2\uD0AE"+
-            "\uC4D3\uB5B2\uDED8\uD5F5\uBCB7\uBBD3\u92A6\u92A7"+
-            "\uB0A4\u92A8\uC5B2\uB4EC\u92A9\u92AA\u92AB\uD5F1"+
-            "\u92AC\u92AD\uEAFD\u92AE\u92AF\u92B0\u92B1\u92B2"+
-            "\u92B3\uDEDA\uCDA6\u92B4\u92B5\uCDEC\u92B6\u92B7"+
-            "\u92B8\u92B9\uCEE6\uDEDC\u92BA\uCDB1\uC0A6\u92BB"+
-            "\u92BC\uD7BD\u92BD\uDEDB\uB0C6\uBAB4\uC9D3\uC4F3"+
-            "\uBEE8\u92BE\u92BF\u92C0\u92C1\uB2B6\u92C2\u92C3"+
-            "\u92C4\u92C5\u92C6\u92C7\u92C8\u92C9\uC0CC\uCBF0"+
-            "\u92CA\uBCF1\uBBBB\uB5B7\u92CB\u92CC\u92CD\uC5F5"+
-            "\u92CE\uDEE6\u92CF\u92D0\u92D1\uDEE3\uBEDD\u92D2"+
-            "\u92D3\uDEDF\u92D4\u92D5\u92D6\u92D7\uB4B7\uBDDD"+
-            "\u92D8\u92D9\uDEE0\uC4ED\u92DA\u92DB\u92DC\u92DD"+
-            "\uCFC6\u92DE\uB5E0\u92DF\u92E0\u92E1\u92E2\uB6DE"+
-            "\uCADA\uB5F4\uDEE5\u92E3\uD5C6\u92E4\uDEE1\uCCCD"+
-            "\uC6FE\u92E5\uC5C5\u92E6\u92E7\u92E8\uD2B4\u92E9"+
-            "\uBEF2\u92EA\u92EB\u92EC\u92ED\u92EE\u92EF\u92F0"+
-            "\uC2D3\u92F1\uCCBD\uB3B8\u92F2\uBDD3\u92F3\uBFD8"+
-            "\uCDC6\uD1DA\uB4EB\u92F4\uDEE4\uDEDD\uDEE7\u92F5"+
-            "\uEAFE\u92F6\u92F7\uC2B0\uDEE2\u92F8\u92F9\uD6C0"+
-            "\uB5A7\u92FA\uB2F4\u92FB\uDEE8\u92FC\uDEF2\u92FD"+
-            "\u92FE\u9340\u9341\u9342\uDEED\u9343\uDEF1\u9344"+
-            "\u9345\uC8E0\u9346\u9347\u9348\uD7E1\uDEEF\uC3E8"+
-            "\uCCE1\u9349\uB2E5\u934A\u934B\u934C\uD2BE\u934D"+
-            "\u934E\u934F\u9350\u9351\u9352\u9353\uDEEE\u9354"+
-            "\uDEEB\uCED5\u9355\uB4A7\u9356\u9357\u9358\u9359"+
-            "\u935A\uBFAB\uBEBE\u935B\u935C\uBDD2\u935D\u935E"+
-            "\u935F\u9360\uDEE9\u9361\uD4AE\u9362\uDEDE\u9363"+
-            "\uDEEA\u9364\u9365\u9366\u9367\uC0BF\u9368\uDEEC"+
-            "\uB2F3\uB8E9\uC2A7\u9369\u936A\uBDC1\u936B\u936C"+
-            "\u936D\u936E\u936F\uDEF5\uDEF8\u9370\u9371\uB2AB"+
-            "\uB4A4\u9372\u9373\uB4EA\uC9A6\u9374\u9375\u9376"+
-            "\u9377\u9378\u9379\uDEF6\uCBD1\u937A\uB8E3\u937B"+
-            "\uDEF7\uDEFA\u937C\u937D\u937E\u9380\uDEF9\u9381"+
-            "\u9382\u9383\uCCC2\u9384\uB0E1\uB4EE\u9385\u9386"+
-            "\u9387\u9388\u9389\u938A\uE5BA\u938B\u938C\u938D"+
-            "\u938E\u938F\uD0AF\u9390\u9391\uB2EB\u9392\uEBA1"+
-            "\u9393\uDEF4\u9394\u9395\uC9E3\uDEF3\uB0DA\uD2A1"+
-            "\uB1F7\u9396\uCCAF\u9397\u9398\u9399\u939A\u939B"+
-            "\u939C\u939D\uDEF0\u939E\uCBA4\u939F\u93A0\u93A1"+
-            "\uD5AA\u93A2\u93A3\u93A4\u93A5\u93A6\uDEFB\u93A7"+
-            "\u93A8\u93A9\u93AA\u93AB\u93AC\u93AD\u93AE\uB4DD"+
-            "\u93AF\uC4A6\u93B0\u93B1\u93B2\uDEFD\u93B3\u93B4"+
-            "\u93B5\u93B6\u93B7\u93B8\u93B9\u93BA\u93BB\u93BC"+
-            "\uC3FE\uC4A1\uDFA1\u93BD\u93BE\u93BF\u93C0\u93C1"+
-            "\u93C2\u93C3\uC1CC\u93C4\uDEFC\uBEEF\u93C5\uC6B2"+
-            "\u93C6\u93C7\u93C8\u93C9\u93CA\u93CB\u93CC\u93CD"+
-            "\u93CE\uB3C5\uC8F6\u93CF\u93D0\uCBBA\uDEFE\u93D1"+
-            "\u93D2\uDFA4\u93D3\u93D4\u93D5\u93D6\uD7B2\u93D7"+
-            "\u93D8\u93D9\u93DA\u93DB\uB3B7\u93DC\u93DD\u93DE"+
-            "\u93DF\uC1C3\u93E0\u93E1\uC7CB\uB2A5\uB4E9\u93E2"+
-            "\uD7AB\u93E3\u93E4\u93E5\u93E6\uC4EC\u93E7\uDFA2"+
-            "\uDFA3\u93E8\uDFA5\u93E9\uBAB3\u93EA\u93EB\u93EC"+
-            "\uDFA6\u93ED\uC0DE\u93EE\u93EF\uC9C3\u93F0\u93F1"+
-            "\u93F2\u93F3\u93F4\u93F5\u93F6\uB2D9\uC7E6\u93F7"+
-            "\uDFA7\u93F8\uC7DC\u93F9\u93FA\u93FB\u93FC\uDFA8"+
-            "\uEBA2\u93FD\u93FE\u9440\u9441\u9442\uCBD3\u9443"+
-            "\u9444\u9445\uDFAA\u9446\uDFA9\u9447\uB2C1\u9448"+
-            "\u9449\u944A\u944B\u944C\u944D\u944E\u944F\u9450"+
-            "\u9451\u9452\u9453\u9454\u9455\u9456\u9457\u9458"+
-            "\u9459\u945A\u945B\u945C\u945D\u945E\u945F\u9460"+
-            "\uC5CA\u9461\u9462\u9463\u9464\u9465\u9466\u9467"+
-            "\u9468\uDFAB\u9469\u946A\u946B\u946C\u946D\u946E"+
-            "\u946F\u9470\uD4DC\u9471\u9472\u9473\u9474\u9475"+
-            "\uC8C1\u9476\u9477\u9478\u9479\u947A\u947B\u947C"+
-            "\u947D\u947E\u9480\u9481\u9482\uDFAC\u9483\u9484"+
-            "\u9485\u9486\u9487\uBEF0\u9488\u9489\uDFAD\uD6A7"+
-            "\u948A\u948B\u948C\u948D\uEAB7\uEBB6\uCAD5\u948E"+
-            "\uD8FC\uB8C4\u948F\uB9A5\u9490\u9491\uB7C5\uD5FE"+
-            "\u9492\u9493\u9494\u9495\u9496\uB9CA\u9497\u9498"+
-            "\uD0A7\uF4CD\u9499\u949A\uB5D0\u949B\u949C\uC3F4"+
-            "\u949D\uBEC8\u949E\u949F\u94A0\uEBB7\uB0BD\u94A1"+
-            "\u94A2\uBDCC\u94A3\uC1B2\u94A4\uB1D6\uB3A8\u94A5"+
-            "\u94A6\u94A7\uB8D2\uC9A2\u94A8\u94A9\uB6D8\u94AA"+
-            "\u94AB\u94AC\u94AD\uEBB8\uBEB4\u94AE\u94AF\u94B0"+
-            "\uCAFD\u94B1\uC7C3\u94B2\uD5FB\u94B3\u94B4\uB7F3"+
-            "\u94B5\u94B6\u94B7\u94B8\u94B9\u94BA\u94BB\u94BC"+
-            "\u94BD\u94BE\u94BF\u94C0\u94C1\u94C2\u94C3\uCEC4"+
-            "\u94C4\u94C5\u94C6\uD5AB\uB1F3\u94C7\u94C8\u94C9"+
-            "\uECB3\uB0DF\u94CA\uECB5\u94CB\u94CC\u94CD\uB6B7"+
-            "\u94CE\uC1CF\u94CF\uF5FA\uD0B1\u94D0\u94D1\uD5E5"+
-            "\u94D2\uCED3\u94D3\u94D4\uBDEF\uB3E2\u94D5\uB8AB"+
-            "\u94D6\uD5B6\u94D7\uEDBD\u94D8\uB6CF\u94D9\uCBB9"+
-            "\uD0C2\u94DA\u94DB\u94DC\u94DD\u94DE\u94DF\u94E0"+
-            "\u94E1\uB7BD\u94E2\u94E3\uECB6\uCAA9\u94E4\u94E5"+
-            "\u94E6\uC5D4\u94E7\uECB9\uECB8\uC2C3\uECB7\u94E8"+
-            "\u94E9\u94EA\u94EB\uD0FD\uECBA\u94EC\uECBB\uD7E5"+
-            "\u94ED\u94EE\uECBC\u94EF\u94F0\u94F1\uECBD\uC6EC"+
-            "\u94F2\u94F3\u94F4\u94F5\u94F6\u94F7\u94F8\u94F9"+
-            "\uCEDE\u94FA\uBCC8\u94FB\u94FC\uC8D5\uB5A9\uBEC9"+
-            "\uD6BC\uD4E7\u94FD\u94FE\uD1AE\uD0F1\uEAB8\uEAB9"+
-            "\uEABA\uBAB5\u9540\u9541\u9542\u9543\uCAB1\uBFF5"+
-            "\u9544\u9545\uCDFA\u9546\u9547\u9548\u9549\u954A"+
-            "\uEAC0\u954B\uB0BA\uEABE\u954C\u954D\uC0A5\u954E"+
-            "\u954F\u9550\uEABB\u9551\uB2FD\u9552\uC3F7\uBBE8"+
-            "\u9553\u9554\u9555\uD2D7\uCEF4\uEABF\u9556\u9557"+
-            "\u9558\uEABC\u9559\u955A\u955B\uEAC3\u955C\uD0C7"+
-            "\uD3B3\u955D\u955E\u955F\u9560\uB4BA\u9561\uC3C1"+
-            "\uD7F2\u9562\u9563\u9564\u9565\uD5D1\u9566\uCAC7"+
-            "\u9567\uEAC5\u9568\u9569\uEAC4\uEAC7\uEAC6\u956A"+
-            "\u956B\u956C\u956D\u956E\uD6E7\u956F\uCFD4\u9570"+
-            "\u9571\uEACB\u9572\uBBCE\u9573\u9574\u9575\u9576"+
-            "\u9577\u9578\u9579\uBDFA\uC9CE\u957A\u957B\uEACC"+
-            "\u957C\u957D\uC9B9\uCFFE\uEACA\uD4CE\uEACD\uEACF"+
-            "\u957E\u9580\uCDED\u9581\u9582\u9583\u9584\uEAC9"+
-            "\u9585\uEACE\u9586\u9587\uCEEE\u9588\uBBDE\u9589"+
-            "\uB3BF\u958A\u958B\u958C\u958D\u958E\uC6D5\uBEB0"+
-            "\uCEFA\u958F\u9590\u9591\uC7E7\u9592\uBEA7\uEAD0"+
-            "\u9593\u9594\uD6C7\u9595\u9596\u9597\uC1C0\u9598"+
-            "\u9599\u959A\uD4DD\u959B\uEAD1\u959C\u959D\uCFBE"+
-            "\u959E\u959F\u95A0\u95A1\uEAD2\u95A2\u95A3\u95A4"+
-            "\u95A5\uCAEE\u95A6\u95A7\u95A8\u95A9\uC5AF\uB0B5"+
-            "\u95AA\u95AB\u95AC\u95AD\u95AE\uEAD4\u95AF\u95B0"+
-            "\u95B1\u95B2\u95B3\u95B4\u95B5\u95B6\u95B7\uEAD3"+
-            "\uF4DF\u95B8\u95B9\u95BA\u95BB\u95BC\uC4BA\u95BD"+
-            "\u95BE\u95BF\u95C0\u95C1\uB1A9\u95C2\u95C3\u95C4"+
-            "\u95C5\uE5DF\u95C6\u95C7\u95C8\u95C9\uEAD5\u95CA"+
-            "\u95CB\u95CC\u95CD\u95CE\u95CF\u95D0\u95D1\u95D2"+
-            "\u95D3\u95D4\u95D5\u95D6\u95D7\u95D8\u95D9\u95DA"+
-            "\u95DB\u95DC\u95DD\u95DE\u95DF\u95E0\u95E1\u95E2"+
-            "\u95E3\uCAEF\u95E4\uEAD6\uEAD7\uC6D8\u95E5\u95E6"+
-            "\u95E7\u95E8\u95E9\u95EA\u95EB\u95EC\uEAD8\u95ED"+
-            "\u95EE\uEAD9\u95EF\u95F0\u95F1\u95F2\u95F3\u95F4"+
-            "\uD4BB\u95F5\uC7FA\uD2B7\uB8FC\u95F6\u95F7\uEAC2"+
-            "\u95F8\uB2DC\u95F9\u95FA\uC2FC\u95FB\uD4F8\uCCE6"+
-            "\uD7EE\u95FC\u95FD\u95FE\u9640\u9641\u9642\u9643"+
-            "\uD4C2\uD3D0\uEBC3\uC5F3\u9644\uB7FE\u9645\u9646"+
-            "\uEBD4\u9647\u9648\u9649\uCBB7\uEBDE\u964A\uC0CA"+
-            "\u964B\u964C\u964D\uCDFB\u964E\uB3AF\u964F\uC6DA"+
-            "\u9650\u9651\u9652\u9653\u9654\u9655\uEBFC\u9656"+
-            "\uC4BE\u9657\uCEB4\uC4A9\uB1BE\uD4FD\u9658\uCAF5"+
-            "\u9659\uD6EC\u965A\u965B\uC6D3\uB6E4\u965C\u965D"+
-            "\u965E\u965F\uBBFA\u9660\u9661\uD0E0\u9662\u9663"+
-            "\uC9B1\u9664\uD4D3\uC8A8\u9665\u9666\uB8CB\u9667"+
-            "\uE8BE\uC9BC\u9668\u9669\uE8BB\u966A\uC0EE\uD0D3"+
-            "\uB2C4\uB4E5\u966B\uE8BC\u966C\u966D\uD5C8\u966E"+
-            "\u966F\u9670\u9671\u9672\uB6C5\u9673\uE8BD\uCAF8"+
-            "\uB8DC\uCCF5\u9674\u9675\u9676\uC0B4\u9677\u9678"+
-            "\uD1EE\uE8BF\uE8C2\u9679\u967A\uBABC\u967B\uB1AD"+
-            "\uBDDC\u967C\uEABD\uE8C3\u967D\uE8C6\u967E\uE8CB"+
-            "\u9680\u9681\u9682\u9683\uE8CC\u9684\uCBC9\uB0E5"+
-            "\u9685\uBCAB\u9686\u9687\uB9B9\u9688\u9689\uE8C1"+
-            "\u968A\uCDF7\u968B\uE8CA\u968C\u968D\u968E\u968F"+
-            "\uCEF6\u9690\u9691\u9692\u9693\uD5ED\u9694\uC1D6"+
-            "\uE8C4\u9695\uC3B6\u9696\uB9FB\uD6A6\uE8C8\u9697"+
-            "\u9698\u9699\uCAE0\uD4E6\u969A\uE8C0\u969B\uE8C5"+
-            "\uE8C7\u969C\uC7B9\uB7E3\u969D\uE8C9\u969E\uBFDD"+
-            "\uE8D2\u969F\u96A0\uE8D7\u96A1\uE8D5\uBCDC\uBCCF"+
-            "\uE8DB\u96A2\u96A3\u96A4\u96A5\u96A6\u96A7\u96A8"+
-            "\u96A9\uE8DE\u96AA\uE8DA\uB1FA\u96AB\u96AC\u96AD"+
-            "\u96AE\u96AF\u96B0\u96B1\u96B2\u96B3\u96B4\uB0D8"+
-            "\uC4B3\uB8CC\uC6E2\uC8BE\uC8E1\u96B5\u96B6\u96B7"+
-            "\uE8CF\uE8D4\uE8D6\u96B8\uB9F1\uE8D8\uD7F5\u96B9"+
-            "\uC4FB\u96BA\uE8DC\u96BB\u96BC\uB2E9\u96BD\u96BE"+
-            "\u96BF\uE8D1\u96C0\u96C1\uBCED\u96C2\u96C3\uBFC2"+
-            "\uE8CD\uD6F9\u96C4\uC1F8\uB2F1\u96C5\u96C6\u96C7"+
-            "\u96C8\u96C9\u96CA\u96CB\u96CC\uE8DF\u96CD\uCAC1"+
-            "\uE8D9\u96CE\u96CF\u96D0\u96D1\uD5A4\u96D2\uB1EA"+
-            "\uD5BB\uE8CE\uE8D0\uB6B0\uE8D3\u96D3\uE8DD\uC0B8"+
-            "\u96D4\uCAF7\u96D5\uCBA8\u96D6\u96D7\uC6DC\uC0F5"+
-            "\u96D8\u96D9\u96DA\u96DB\u96DC\uE8E9\u96DD\u96DE"+
-            "\u96DF\uD0A3\u96E0\u96E1\u96E2\u96E3\u96E4\u96E5"+
-            "\u96E6\uE8F2\uD6EA\u96E7\u96E8\u96E9\u96EA\u96EB"+
-            "\u96EC\u96ED\uE8E0\uE8E1\u96EE\u96EF\u96F0\uD1F9"+
-            "\uBACB\uB8F9\u96F1\u96F2\uB8F1\uD4D4\uE8EF\u96F3"+
-            "\uE8EE\uE8EC\uB9F0\uCCD2\uE8E6\uCEA6\uBFF2\u96F4"+
-            "\uB0B8\uE8F1\uE8F0\u96F5\uD7C0\u96F6\uE8E4\u96F7"+
-            "\uCDA9\uC9A3\u96F8\uBBB8\uBDDB\uE8EA\u96F9\u96FA"+
-            "\u96FB\u96FC\u96FD\u96FE\u9740\u9741\u9742\u9743"+
-            "\uE8E2\uE8E3\uE8E5\uB5B5\uE8E7\uC7C5\uE8EB\uE8ED"+
-            "\uBDB0\uD7AE\u9744\uE8F8\u9745\u9746\u9747\u9748"+
-            "\u9749\u974A\u974B\u974C\uE8F5\u974D\uCDB0\uE8F6"+
-            "\u974E\u974F\u9750\u9751\u9752\u9753\u9754\u9755"+
-            "\u9756\uC1BA\u9757\uE8E8\u9758\uC3B7\uB0F0\u9759"+
-            "\u975A\u975B\u975C\u975D\u975E\u975F\u9760\uE8F4"+
-            "\u9761\u9762\u9763\uE8F7\u9764\u9765\u9766\uB9A3"+
-            "\u9767\u9768\u9769\u976A\u976B\u976C\u976D\u976E"+
-            "\u976F\u9770\uC9D2\u9771\u9772\u9773\uC3CE\uCEE0"+
-            "\uC0E6\u9774\u9775\u9776\u9777\uCBF3\u9778\uCCDD"+
-            "\uD0B5\u9779\u977A\uCAE1\u977B\uE8F3\u977C\u977D"+
-            "\u977E\u9780\u9781\u9782\u9783\u9784\u9785\u9786"+
-            "\uBCEC\u9787\uE8F9\u9788\u9789\u978A\u978B\u978C"+
-            "\u978D\uC3DE\u978E\uC6E5\u978F\uB9F7\u9790\u9791"+
-            "\u9792\u9793\uB0F4\u9794\u9795\uD7D8\u9796\u9797"+
-            "\uBCAC\u9798\uC5EF\u9799\u979A\u979B\u979C\u979D"+
-            "\uCCC4\u979E\u979F\uE9A6\u97A0\u97A1\u97A2\u97A3"+
-            "\u97A4\u97A5\u97A6\u97A7\u97A8\u97A9\uC9AD\u97AA"+
-            "\uE9A2\uC0E2\u97AB\u97AC\u97AD\uBFC3\u97AE\u97AF"+
-            "\u97B0\uE8FE\uB9D7\u97B1\uE8FB\u97B2\u97B3\u97B4"+
-            "\u97B5\uE9A4\u97B6\u97B7\u97B8\uD2CE\u97B9\u97BA"+
-            "\u97BB\u97BC\u97BD\uE9A3\u97BE\uD6B2\uD7B5\u97BF"+
-            "\uE9A7\u97C0\uBDB7\u97C1\u97C2\u97C3\u97C4\u97C5"+
-            "\u97C6\u97C7\u97C8\u97C9\u97CA\u97CB\u97CC\uE8FC"+
-            "\uE8FD\u97CD\u97CE\u97CF\uE9A1\u97D0\u97D1\u97D2"+
-            "\u97D3\u97D4\u97D5\u97D6\u97D7\uCDD6\u97D8\u97D9"+
-            "\uD2AC\u97DA\u97DB\u97DC\uE9B2\u97DD\u97DE\u97DF"+
-            "\u97E0\uE9A9\u97E1\u97E2\u97E3\uB4AA\u97E4\uB4BB"+
-            "\u97E5\u97E6\uE9AB\u97E7\u97E8\u97E9\u97EA\u97EB"+
-            "\u97EC\u97ED\u97EE\u97EF\u97F0\u97F1\u97F2\u97F3"+
-            "\u97F4\u97F5\u97F6\u97F7\uD0A8\u97F8\u97F9\uE9A5"+
-            "\u97FA\u97FB\uB3FE\u97FC\u97FD\uE9AC\uC0E3\u97FE"+
-            "\uE9AA\u9840\u9841\uE9B9\u9842\u9843\uE9B8\u9844"+
-            "\u9845\u9846\u9847\uE9AE\u9848\u9849\uE8FA\u984A"+
-            "\u984B\uE9A8\u984C\u984D\u984E\u984F\u9850\uBFAC"+
-            "\uE9B1\uE9BA\u9851\u9852\uC2A5\u9853\u9854\u9855"+
-            "\uE9AF\u9856\uB8C5\u9857\uE9AD\u9858\uD3DC\uE9B4"+
-            "\uE9B5\uE9B7\u9859\u985A\u985B\uE9C7\u985C\u985D"+
-            "\u985E\u985F\u9860\u9861\uC0C6\uE9C5\u9862\u9863"+
-            "\uE9B0\u9864\u9865\uE9BB\uB0F1\u9866\u9867\u9868"+
-            "\u9869\u986A\u986B\u986C\u986D\u986E\u986F\uE9BC"+
-            "\uD5A5\u9870\u9871\uE9BE\u9872\uE9BF\u9873\u9874"+
-            "\u9875\uE9C1\u9876\u9877\uC1F1\u9878\u9879\uC8B6"+
-            "\u987A\u987B\u987C\uE9BD\u987D\u987E\u9880\u9881"+
-            "\u9882\uE9C2\u9883\u9884\u9885\u9886\u9887\u9888"+
-            "\u9889\u988A\uE9C3\u988B\uE9B3\u988C\uE9B6\u988D"+
-            "\uBBB1\u988E\u988F\u9890\uE9C0\u9891\u9892\u9893"+
-            "\u9894\u9895\u9896\uBCF7\u9897\u9898\u9899\uE9C4"+
-            "\uE9C6\u989A\u989B\u989C\u989D\u989E\u989F\u98A0"+
-            "\u98A1\u98A2\u98A3\u98A4\u98A5\uE9CA\u98A6\u98A7"+
-            "\u98A8\u98A9\uE9CE\u98AA\u98AB\u98AC\u98AD\u98AE"+
-            "\u98AF\u98B0\u98B1\u98B2\u98B3\uB2DB\u98B4\uE9C8"+
-            "\u98B5\u98B6\u98B7\u98B8\u98B9\u98BA\u98BB\u98BC"+
-            "\u98BD\u98BE\uB7AE\u98BF\u98C0\u98C1\u98C2\u98C3"+
-            "\u98C4\u98C5\u98C6\u98C7\u98C8\u98C9\u98CA\uE9CB"+
-            "\uE9CC\u98CB\u98CC\u98CD\u98CE\u98CF\u98D0\uD5C1"+
-            "\u98D1\uC4A3\u98D2\u98D3\u98D4\u98D5\u98D6\u98D7"+
-            "\uE9D8\u98D8\uBAE1\u98D9\u98DA\u98DB\u98DC\uE9C9"+
-            "\u98DD\uD3A3\u98DE\u98DF\u98E0\uE9D4\u98E1\u98E2"+
-            "\u98E3\u98E4\u98E5\u98E6\u98E7\uE9D7\uE9D0\u98E8"+
-            "\u98E9\u98EA\u98EB\u98EC\uE9CF\u98ED\u98EE\uC7C1"+
-            "\u98EF\u98F0\u98F1\u98F2\u98F3\u98F4\u98F5\u98F6"+
-            "\uE9D2\u98F7\u98F8\u98F9\u98FA\u98FB\u98FC\u98FD"+
-            "\uE9D9\uB3C8\u98FE\uE9D3\u9940\u9941\u9942\u9943"+
-            "\u9944\uCFF0\u9945\u9946\u9947\uE9CD\u9948\u9949"+
-            "\u994A\u994B\u994C\u994D\u994E\u994F\u9950\u9951"+
-            "\u9952\uB3F7\u9953\u9954\u9955\u9956\u9957\u9958"+
-            "\u9959\uE9D6\u995A\u995B\uE9DA\u995C\u995D\u995E"+
-            "\uCCB4\u995F\u9960\u9961\uCFAD\u9962\u9963\u9964"+
-            "\u9965\u9966\u9967\u9968\u9969\u996A\uE9D5\u996B"+
-            "\uE9DC\uE9DB\u996C\u996D\u996E\u996F\u9970\uE9DE"+
-            "\u9971\u9972\u9973\u9974\u9975\u9976\u9977\u9978"+
-            "\uE9D1\u9979\u997A\u997B\u997C\u997D\u997E\u9980"+
-            "\u9981\uE9DD\u9982\uE9DF\uC3CA\u9983\u9984\u9985"+
-            "\u9986\u9987\u9988\u9989\u998A\u998B\u998C\u998D"+
-            "\u998E\u998F\u9990\u9991\u9992\u9993\u9994\u9995"+
-            "\u9996\u9997\u9998\u9999\u999A\u999B\u999C\u999D"+
-            "\u999E\u999F\u99A0\u99A1\u99A2\u99A3\u99A4\u99A5"+
-            "\u99A6\u99A7\u99A8\u99A9\u99AA\u99AB\u99AC\u99AD"+
-            "\u99AE\u99AF\u99B0\u99B1\u99B2\u99B3\u99B4\u99B5"+
-            "\u99B6\u99B7\u99B8\u99B9\u99BA\u99BB\u99BC\u99BD"+
-            "\u99BE\u99BF\u99C0\u99C1\u99C2\u99C3\u99C4\u99C5"+
-            "\u99C6\u99C7\u99C8\u99C9\u99CA\u99CB\u99CC\u99CD"+
-            "\u99CE\u99CF\u99D0\u99D1\u99D2\u99D3\u99D4\u99D5";
-
-        private final static String innerIndex4=
-            "\u99D6\u99D7\u99D8\u99D9\u99DA\u99DB\u99DC\u99DD"+
-            "\u99DE\u99DF\u99E0\u99E1\u99E2\u99E3\u99E4\u99E5"+
-            "\u99E6\u99E7\u99E8\u99E9\u99EA\u99EB\u99EC\u99ED"+
-            "\u99EE\u99EF\u99F0\u99F1\u99F2\u99F3\u99F4\u99F5"+
-            "\uC7B7\uB4CE\uBBB6\uD0C0\uECA3\u99F6\u99F7\uC5B7"+
-            "\u99F8\u99F9\u99FA\u99FB\u99FC\u99FD\u99FE\u9A40"+
-            "\u9A41\u9A42\uD3FB\u9A43\u9A44\u9A45\u9A46\uECA4"+
-            "\u9A47\uECA5\uC6DB\u9A48\u9A49\u9A4A\uBFEE\u9A4B"+
-            "\u9A4C\u9A4D\u9A4E\uECA6\u9A4F\u9A50\uECA7\uD0AA"+
-            "\u9A51\uC7B8\u9A52\u9A53\uB8E8\u9A54\u9A55\u9A56"+
-            "\u9A57\u9A58\u9A59\u9A5A\u9A5B\u9A5C\u9A5D\u9A5E"+
-            "\u9A5F\uECA8\u9A60\u9A61\u9A62\u9A63\u9A64\u9A65"+
-            "\u9A66\u9A67\uD6B9\uD5FD\uB4CB\uB2BD\uCEE4\uC6E7"+
-            "\u9A68\u9A69\uCDE1\u9A6A\u9A6B\u9A6C\u9A6D\u9A6E"+
-            "\u9A6F\u9A70\u9A71\u9A72\u9A73\u9A74\u9A75\u9A76"+
-            "\u9A77\uB4F5\u9A78\uCBC0\uBCDF\u9A79\u9A7A\u9A7B"+
-            "\u9A7C\uE9E2\uE9E3\uD1EA\uE9E5\u9A7D\uB4F9\uE9E4"+
-            "\u9A7E\uD1B3\uCAE2\uB2D0\u9A80\uE9E8\u9A81\u9A82"+
-            "\u9A83\u9A84\uE9E6\uE9E7\u9A85\u9A86\uD6B3\u9A87"+
-            "\u9A88\u9A89\uE9E9\uE9EA\u9A8A\u9A8B\u9A8C\u9A8D"+
-            "\u9A8E\uE9EB\u9A8F\u9A90\u9A91\u9A92\u9A93\u9A94"+
-            "\u9A95\u9A96\uE9EC\u9A97\u9A98\u9A99\u9A9A\u9A9B"+
-            "\u9A9C\u9A9D\u9A9E\uECAF\uC5B9\uB6CE\u9A9F\uD2F3"+
-            "\u9AA0\u9AA1\u9AA2\u9AA3\u9AA4\u9AA5\u9AA6\uB5EE"+
-            "\u9AA7\uBBD9\uECB1\u9AA8\u9AA9\uD2E3\u9AAA\u9AAB"+
-            "\u9AAC\u9AAD\u9AAE\uCEE3\u9AAF\uC4B8\u9AB0\uC3BF"+
-            "\u9AB1\u9AB2\uB6BE\uD8B9\uB1C8\uB1CF\uB1D1\uC5FE"+
-            "\u9AB3\uB1D0\u9AB4\uC3AB\u9AB5\u9AB6\u9AB7\u9AB8"+
-            "\u9AB9\uD5B1\u9ABA\u9ABB\u9ABC\u9ABD\u9ABE\u9ABF"+
-            "\u9AC0\u9AC1\uEBA4\uBAC1\u9AC2\u9AC3\u9AC4\uCCBA"+
-            "\u9AC5\u9AC6\u9AC7\uEBA5\u9AC8\uEBA7\u9AC9\u9ACA"+
-            "\u9ACB\uEBA8\u9ACC\u9ACD\u9ACE\uEBA6\u9ACF\u9AD0"+
-            "\u9AD1\u9AD2\u9AD3\u9AD4\u9AD5\uEBA9\uEBAB\uEBAA"+
-            "\u9AD6\u9AD7\u9AD8\u9AD9\u9ADA\uEBAC\u9ADB\uCACF"+
-            "\uD8B5\uC3F1\u9ADC\uC3A5\uC6F8\uEBAD\uC4CA\u9ADD"+
-            "\uEBAE\uEBAF\uEBB0\uB7D5\u9ADE\u9ADF\u9AE0\uB7FA"+
-            "\u9AE1\uEBB1\uC7E2\u9AE2\uEBB3\u9AE3\uBAA4\uD1F5"+
-            "\uB0B1\uEBB2\uEBB4\u9AE4\u9AE5\u9AE6\uB5AA\uC2C8"+
-            "\uC7E8\u9AE7\uEBB5\u9AE8\uCBAE\uE3DF\u9AE9\u9AEA"+
-            "\uD3C0\u9AEB\u9AEC\u9AED\u9AEE\uD9DB\u9AEF\u9AF0"+
-            "\uCDA1\uD6AD\uC7F3\u9AF1\u9AF2\u9AF3\uD9E0\uBBE3"+
-            "\u9AF4\uBABA\uE3E2\u9AF5\u9AF6\u9AF7\u9AF8\u9AF9"+
-            "\uCFAB\u9AFA\u9AFB\u9AFC\uE3E0\uC9C7\u9AFD\uBAB9"+
-            "\u9AFE\u9B40\u9B41\uD1B4\uE3E1\uC8EA\uB9AF\uBDAD"+
-            "\uB3D8\uCEDB\u9B42\u9B43\uCCC0\u9B44\u9B45\u9B46"+
-            "\uE3E8\uE3E9\uCDF4\u9B47\u9B48\u9B49\u9B4A\u9B4B"+
-            "\uCCAD\u9B4C\uBCB3\u9B4D\uE3EA\u9B4E\uE3EB\u9B4F"+
-            "\u9B50\uD0DA\u9B51\u9B52\u9B53\uC6FB\uB7DA\u9B54"+
-            "\u9B55\uC7DF\uD2CA\uCED6\u9B56\uE3E4\uE3EC\u9B57"+
-            "\uC9F2\uB3C1\u9B58\u9B59\uE3E7\u9B5A\u9B5B\uC6E3"+
-            "\uE3E5\u9B5C\u9B5D\uEDB3\uE3E6\u9B5E\u9B5F\u9B60"+
-            "\u9B61\uC9B3\u9B62\uC5E6\u9B63\u9B64\u9B65\uB9B5"+
-            "\u9B66\uC3BB\u9B67\uE3E3\uC5BD\uC1A4\uC2D9\uB2D7"+
-            "\u9B68\uE3ED\uBBA6\uC4AD\u9B69\uE3F0\uBEDA\u9B6A"+
-            "\u9B6B\uE3FB\uE3F5\uBAD3\u9B6C\u9B6D\u9B6E\u9B6F"+
-            "\uB7D0\uD3CD\u9B70\uD6CE\uD5D3\uB9C1\uD5B4\uD1D8"+
-            "\u9B71\u9B72\u9B73\u9B74\uD0B9\uC7F6\u9B75\u9B76"+
-            "\u9B77\uC8AA\uB2B4\u9B78\uC3DA\u9B79\u9B7A\u9B7B"+
-            "\uE3EE\u9B7C\u9B7D\uE3FC\uE3EF\uB7A8\uE3F7\uE3F4"+
-            "\u9B7E\u9B80\u9B81\uB7BA\u9B82\u9B83\uC5A2\u9B84"+
-            "\uE3F6\uC5DD\uB2A8\uC6FC\u9B85\uC4E0\u9B86\u9B87"+
-            "\uD7A2\u9B88\uC0E1\uE3F9\u9B89\u9B8A\uE3FA\uE3FD"+
-            "\uCCA9\uE3F3\u9B8B\uD3BE\u9B8C\uB1C3\uEDB4\uE3F1"+
-            "\uE3F2\u9B8D\uE3F8\uD0BA\uC6C3\uD4F3\uE3FE\u9B8E"+
-            "\u9B8F\uBDE0\u9B90\u9B91\uE4A7\u9B92\u9B93\uE4A6"+
-            "\u9B94\u9B95\u9B96\uD1F3\uE4A3\u9B97\uE4A9\u9B98"+
-            "\u9B99\u9B9A\uC8F7\u9B9B\u9B9C\u9B9D\u9B9E\uCFB4"+
-            "\u9B9F\uE4A8\uE4AE\uC2E5\u9BA0\u9BA1\uB6B4\u9BA2"+
-            "\u9BA3\u9BA4\u9BA5\u9BA6\u9BA7\uBDF2\u9BA8\uE4A2"+
-            "\u9BA9\u9BAA\uBAE9\uE4AA\u9BAB\u9BAC\uE4AC\u9BAD"+
-            "\u9BAE\uB6FD\uD6DE\uE4B2\u9BAF\uE4AD\u9BB0\u9BB1"+
-            "\u9BB2\uE4A1\u9BB3\uBBEE\uCDDD\uC7A2\uC5C9\u9BB4"+
-            "\u9BB5\uC1F7\u9BB6\uE4A4\u9BB7\uC7B3\uBDAC\uBDBD"+
-            "\uE4A5\u9BB8\uD7C7\uB2E2\u9BB9\uE4AB\uBCC3\uE4AF"+
-            "\u9BBA\uBBEB\uE4B0\uC5A8\uE4B1\u9BBB\u9BBC\u9BBD"+
-            "\u9BBE\uD5E3\uBFA3\u9BBF\uE4BA\u9BC0\uE4B7\u9BC1"+
-            "\uE4BB\u9BC2\u9BC3\uE4BD\u9BC4\u9BC5\uC6D6\u9BC6"+
-            "\u9BC7\uBAC6\uC0CB\u9BC8\u9BC9\u9BCA\uB8A1\uE4B4"+
-            "\u9BCB\u9BCC\u9BCD\u9BCE\uD4A1\u9BCF\u9BD0\uBAA3"+
-            "\uBDFE\u9BD1\u9BD2\u9BD3\uE4BC\u9BD4\u9BD5\u9BD6"+
-            "\u9BD7\u9BD8\uCDBF\u9BD9\u9BDA\uC4F9\u9BDB\u9BDC"+
-            "\uCFFB\uC9E6\u9BDD\u9BDE\uD3BF\u9BDF\uCFD1\u9BE0"+
-            "\u9BE1\uE4B3\u9BE2\uE4B8\uE4B9\uCCE9\u9BE3\u9BE4"+
-            "\u9BE5\u9BE6\u9BE7\uCCCE\u9BE8\uC0D4\uE4B5\uC1B0"+
-            "\uE4B6\uCED0\u9BE9\uBBC1\uB5D3\u9BEA\uC8F3\uBDA7"+
-            "\uD5C7\uC9AC\uB8A2\uE4CA\u9BEB\u9BEC\uE4CC\uD1C4"+
-            "\u9BED\u9BEE\uD2BA\u9BEF\u9BF0\uBAAD\u9BF1\u9BF2"+
-            "\uBAD4\u9BF3\u9BF4\u9BF5\u9BF6\u9BF7\u9BF8\uE4C3"+
-            "\uB5ED\u9BF9\u9BFA\u9BFB\uD7CD\uE4C0\uCFFD\uE4BF"+
-            "\u9BFC\u9BFD\u9BFE\uC1DC\uCCCA\u9C40\u9C41\u9C42"+
-            "\u9C43\uCAE7\u9C44\u9C45\u9C46\u9C47\uC4D7\u9C48"+
-            "\uCCD4\uE4C8\u9C49\u9C4A\u9C4B\uE4C7\uE4C1\u9C4C"+
-            "\uE4C4\uB5AD\u9C4D\u9C4E\uD3D9\u9C4F\uE4C6\u9C50"+
-            "\u9C51\u9C52\u9C53\uD2F9\uB4E3\u9C54\uBBB4\u9C55"+
-            "\u9C56\uC9EE\u9C57\uB4BE\u9C58\u9C59\u9C5A\uBBEC"+
-            "\u9C5B\uD1CD\u9C5C\uCCED\uEDB5\u9C5D\u9C5E\u9C5F"+
-            "\u9C60\u9C61\u9C62\u9C63\u9C64\uC7E5\u9C65\u9C66"+
-            "\u9C67\u9C68\uD4A8\u9C69\uE4CB\uD7D5\uE4C2\u9C6A"+
-            "\uBDA5\uE4C5\u9C6B\u9C6C\uD3E6\u9C6D\uE4C9\uC9F8"+
-            "\u9C6E\u9C6F\uE4BE\u9C70\u9C71\uD3E5\u9C72\u9C73"+
-            "\uC7FE\uB6C9\u9C74\uD4FC\uB2B3\uE4D7\u9C75\u9C76"+
-            "\u9C77\uCEC2\u9C78\uE4CD\u9C79\uCEBC\u9C7A\uB8DB"+
-            "\u9C7B\u9C7C\uE4D6\u9C7D\uBFCA\u9C7E\u9C80\u9C81"+
-            "\uD3CE\u9C82\uC3EC\u9C83\u9C84\u9C85\u9C86\u9C87"+
-            "\u9C88\u9C89\u9C8A\uC5C8\uE4D8\u9C8B\u9C8C\u9C8D"+
-            "\u9C8E\u9C8F\u9C90\u9C91\u9C92\uCDC4\uE4CF\u9C93"+
-            "\u9C94\u9C95\u9C96\uE4D4\uE4D5\u9C97\uBAFE\u9C98"+
-            "\uCFE6\u9C99\u9C9A\uD5BF\u9C9B\u9C9C\u9C9D\uE4D2"+
-            "\u9C9E\u9C9F\u9CA0\u9CA1\u9CA2\u9CA3\u9CA4\u9CA5"+
-            "\u9CA6\u9CA7\u9CA8\uE4D0\u9CA9\u9CAA\uE4CE\u9CAB"+
-            "\u9CAC\u9CAD\u9CAE\u9CAF\u9CB0\u9CB1\u9CB2\u9CB3"+
-            "\u9CB4\u9CB5\u9CB6\u9CB7\u9CB8\u9CB9\uCDE5\uCAAA"+
-            "\u9CBA\u9CBB\u9CBC\uC0A3\u9CBD\uBDA6\uE4D3\u9CBE"+
-            "\u9CBF\uB8C8\u9CC0\u9CC1\u9CC2\u9CC3\u9CC4\uE4E7"+
-            "\uD4B4\u9CC5\u9CC6\u9CC7\u9CC8\u9CC9\u9CCA\u9CCB"+
-            "\uE4DB\u9CCC\u9CCD\u9CCE\uC1EF\u9CCF\u9CD0\uE4E9"+
-            "\u9CD1\u9CD2\uD2E7\u9CD3\u9CD4\uE4DF\u9CD5\uE4E0"+
-            "\u9CD6\u9CD7\uCFAA\u9CD8\u9CD9\u9CDA\u9CDB\uCBDD"+
-            "\u9CDC\uE4DA\uE4D1\u9CDD\uE4E5\u9CDE\uC8DC\uE4E3"+
-            "\u9CDF\u9CE0\uC4E7\uE4E2\u9CE1\uE4E1\u9CE2\u9CE3"+
-            "\u9CE4\uB3FC\uE4E8\u9CE5\u9CE6\u9CE7\u9CE8\uB5E1"+
-            "\u9CE9\u9CEA\u9CEB\uD7CC\u9CEC\u9CED\u9CEE\uE4E6"+
-            "\u9CEF\uBBAC\u9CF0\uD7D2\uCCCF\uEBF8\u9CF1\uE4E4"+
-            "\u9CF2\u9CF3\uB9F6\u9CF4\u9CF5\u9CF6\uD6CD\uE4D9"+
-            "\uE4DC\uC2FA\uE4DE\u9CF7\uC2CB\uC0C4\uC2D0\u9CF8"+
-            "\uB1F5\uCCB2\u9CF9\u9CFA\u9CFB\u9CFC\u9CFD\u9CFE"+
-            "\u9D40\u9D41\u9D42\u9D43\uB5CE\u9D44\u9D45\u9D46"+
-            "\u9D47\uE4EF\u9D48\u9D49\u9D4A\u9D4B\u9D4C\u9D4D"+
-            "\u9D4E\u9D4F\uC6AF\u9D50\u9D51\u9D52\uC6E1\u9D53"+
-            "\u9D54\uE4F5\u9D55\u9D56\u9D57\u9D58\u9D59\uC2A9"+
-            "\u9D5A\u9D5B\u9D5C\uC0EC\uD1DD\uE4EE\u9D5D\u9D5E"+
-            "\u9D5F\u9D60\u9D61\u9D62\u9D63\u9D64\u9D65\u9D66"+
-            "\uC4AE\u9D67\u9D68\u9D69\uE4ED\u9D6A\u9D6B\u9D6C"+
-            "\u9D6D\uE4F6\uE4F4\uC2FE\u9D6E\uE4DD\u9D6F\uE4F0"+
-            "\u9D70\uCAFE\u9D71\uD5C4\u9D72\u9D73\uE4F1\u9D74"+
-            "\u9D75\u9D76\u9D77\u9D78\u9D79\u9D7A\uD1FA\u9D7B"+
-            "\u9D7C\u9D7D\u9D7E\u9D80\u9D81\u9D82\uE4EB\uE4EC"+
-            "\u9D83\u9D84\u9D85\uE4F2\u9D86\uCEAB\u9D87\u9D88"+
-            "\u9D89\u9D8A\u9D8B\u9D8C\u9D8D\u9D8E\u9D8F\u9D90"+
-            "\uC5CB\u9D91\u9D92\u9D93\uC7B1\u9D94\uC2BA\u9D95"+
-            "\u9D96\u9D97\uE4EA\u9D98\u9D99\u9D9A\uC1CA\u9D9B"+
-            "\u9D9C\u9D9D\u9D9E\u9D9F\u9DA0\uCCB6\uB3B1\u9DA1"+
-            "\u9DA2\u9DA3\uE4FB\u9DA4\uE4F3\u9DA5\u9DA6\u9DA7"+
-            "\uE4FA\u9DA8\uE4FD\u9DA9\uE4FC\u9DAA\u9DAB\u9DAC"+
-            "\u9DAD\u9DAE\u9DAF\u9DB0\uB3CE\u9DB1\u9DB2\u9DB3"+
-            "\uB3BA\uE4F7\u9DB4\u9DB5\uE4F9\uE4F8\uC5EC\u9DB6"+
-            "\u9DB7\u9DB8\u9DB9\u9DBA\u9DBB\u9DBC\u9DBD\u9DBE"+
-            "\u9DBF\u9DC0\u9DC1\u9DC2\uC0BD\u9DC3\u9DC4\u9DC5"+
-            "\u9DC6\uD4E8\u9DC7\u9DC8\u9DC9\u9DCA\u9DCB\uE5A2"+
-            "\u9DCC\u9DCD\u9DCE\u9DCF\u9DD0\u9DD1\u9DD2\u9DD3"+
-            "\u9DD4\u9DD5\u9DD6\uB0C4\u9DD7\u9DD8\uE5A4\u9DD9"+
-            "\u9DDA\uE5A3\u9DDB\u9DDC\u9DDD\u9DDE\u9DDF\u9DE0"+
-            "\uBCA4\u9DE1\uE5A5\u9DE2\u9DE3\u9DE4\u9DE5\u9DE6"+
-            "\u9DE7\uE5A1\u9DE8\u9DE9\u9DEA\u9DEB\u9DEC\u9DED"+
-            "\u9DEE\uE4FE\uB1F4\u9DEF\u9DF0\u9DF1\u9DF2\u9DF3"+
-            "\u9DF4\u9DF5\u9DF6\u9DF7\u9DF8\u9DF9\uE5A8\u9DFA"+
-            "\uE5A9\uE5A6\u9DFB\u9DFC\u9DFD\u9DFE\u9E40\u9E41"+
-            "\u9E42\u9E43\u9E44\u9E45\u9E46\u9E47\uE5A7\uE5AA"+
-            "\u9E48\u9E49\u9E4A\u9E4B\u9E4C\u9E4D\u9E4E\u9E4F"+
-            "\u9E50\u9E51\u9E52\u9E53\u9E54\u9E55\u9E56\u9E57"+
-            "\u9E58\u9E59\u9E5A\u9E5B\u9E5C\u9E5D\u9E5E\u9E5F"+
-            "\u9E60\u9E61\u9E62\u9E63\u9E64\u9E65\u9E66\u9E67"+
-            "\u9E68\uC6D9\u9E69\u9E6A\u9E6B\u9E6C\u9E6D\u9E6E"+
-            "\u9E6F\u9E70\uE5AB\uE5AD\u9E71\u9E72\u9E73\u9E74"+
-            "\u9E75\u9E76\u9E77\uE5AC\u9E78\u9E79\u9E7A\u9E7B"+
-            "\u9E7C\u9E7D\u9E7E\u9E80\u9E81\u9E82\u9E83\u9E84"+
-            "\u9E85\u9E86\u9E87\u9E88\u9E89\uE5AF\u9E8A\u9E8B"+
-            "\u9E8C\uE5AE\u9E8D\u9E8E\u9E8F\u9E90\u9E91\u9E92"+
-            "\u9E93\u9E94\u9E95\u9E96\u9E97\u9E98\u9E99\u9E9A"+
-            "\u9E9B\u9E9C\u9E9D\u9E9E\uB9E0\u9E9F\u9EA0\uE5B0"+
-            "\u9EA1\u9EA2\u9EA3\u9EA4\u9EA5\u9EA6\u9EA7\u9EA8"+
-            "\u9EA9\u9EAA\u9EAB\u9EAC\u9EAD\u9EAE\uE5B1\u9EAF"+
-            "\u9EB0\u9EB1\u9EB2\u9EB3\u9EB4\u9EB5\u9EB6\u9EB7"+
-            "\u9EB8\u9EB9\u9EBA\uBBF0\uECE1\uC3F0\u9EBB\uB5C6"+
-            "\uBBD2\u9EBC\u9EBD\u9EBE\u9EBF\uC1E9\uD4EE\u9EC0"+
-            "\uBEC4\u9EC1\u9EC2\u9EC3\uD7C6\u9EC4\uD4D6\uB2D3"+
-            "\uECBE\u9EC5\u9EC6\u9EC7\u9EC8\uEAC1\u9EC9\u9ECA"+
-            "\u9ECB\uC2AF\uB4B6\u9ECC\u9ECD\u9ECE\uD1D7\u9ECF"+
-            "\u9ED0\u9ED1\uB3B4\u9ED2\uC8B2\uBFBB\uECC0\u9ED3"+
-            "\u9ED4\uD6CB\u9ED5\u9ED6\uECBF\uECC1\u9ED7\u9ED8"+
-            "\u9ED9\u9EDA\u9EDB\u9EDC\u9EDD\u9EDE\u9EDF\u9EE0"+
-            "\u9EE1\u9EE2\u9EE3\uECC5\uBEE6\uCCBF\uC5DA\uBEBC"+
-            "\u9EE4\uECC6\u9EE5\uB1FE\u9EE6\u9EE7\u9EE8\uECC4"+
-            "\uD5A8\uB5E3\u9EE9\uECC2\uC1B6\uB3E3\u9EEA\u9EEB"+
-            "\uECC3\uCBB8\uC0C3\uCCFE\u9EEC\u9EED\u9EEE\u9EEF"+
-            "\uC1D2\u9EF0\uECC8\u9EF1\u9EF2\u9EF3\u9EF4\u9EF5"+
-            "\u9EF6\u9EF7\u9EF8\u9EF9\u9EFA\u9EFB\u9EFC\u9EFD"+
-            "\uBAE6\uC0D3\u9EFE\uD6F2\u9F40\u9F41\u9F42\uD1CC"+
-            "\u9F43\u9F44\u9F45\u9F46\uBFBE\u9F47\uB7B3\uC9D5"+
-            "\uECC7\uBBE2\u9F48\uCCCC\uBDFD\uC8C8\u9F49\uCFA9"+
-            "\u9F4A\u9F4B\u9F4C\u9F4D\u9F4E\u9F4F\u9F50\uCDE9"+
-            "\u9F51\uC5EB\u9F52\u9F53\u9F54\uB7E9\u9F55\u9F56"+
-            "\u9F57\u9F58\u9F59\u9F5A\u9F5B\u9F5C\u9F5D\u9F5E"+
-            "\u9F5F\uD1C9\uBAB8\u9F60\u9F61\u9F62\u9F63\u9F64"+
-            "\uECC9\u9F65\u9F66\uECCA\u9F67\uBBC0\uECCB\u9F68"+
-            "\uECE2\uB1BA\uB7D9\u9F69\u9F6A\u9F6B\u9F6C\u9F6D"+
-            "\u9F6E\u9F6F\u9F70\u9F71\u9F72\u9F73\uBDB9\u9F74"+
-            "\u9F75\u9F76\u9F77\u9F78\u9F79\u9F7A\u9F7B\uECCC"+
-            "\uD1E6\uECCD\u9F7C\u9F7D\u9F7E\u9F80\uC8BB\u9F81"+
-            "\u9F82\u9F83\u9F84\u9F85\u9F86\u9F87\u9F88\u9F89"+
-            "\u9F8A\u9F8B\u9F8C\u9F8D\u9F8E\uECD1\u9F8F\u9F90"+
-            "\u9F91\u9F92\uECD3\u9F93\uBBCD\u9F94\uBCE5\u9F95"+
-            "\u9F96\u9F97\u9F98\u9F99\u9F9A\u9F9B\u9F9C\u9F9D"+
-            "\u9F9E\u9F9F\u9FA0\u9FA1\uECCF\u9FA2\uC9B7\u9FA3"+
-            "\u9FA4\u9FA5\u9FA6\u9FA7\uC3BA\u9FA8\uECE3\uD5D5"+
-            "\uECD0\u9FA9\u9FAA\u9FAB\u9FAC\u9FAD\uD6F3\u9FAE"+
-            "\u9FAF\u9FB0\uECD2\uECCE\u9FB1\u9FB2\u9FB3\u9FB4"+
-            "\uECD4\u9FB5\uECD5\u9FB6\u9FB7\uC9BF\u9FB8\u9FB9"+
-            "\u9FBA\u9FBB\u9FBC\u9FBD\uCFA8\u9FBE\u9FBF\u9FC0"+
-            "\u9FC1\u9FC2\uD0DC\u9FC3\u9FC4\u9FC5\u9FC6\uD1AC"+
-            "\u9FC7\u9FC8\u9FC9\u9FCA\uC8DB\u9FCB\u9FCC\u9FCD"+
-            "\uECD6\uCEF5\u9FCE\u9FCF\u9FD0\u9FD1\u9FD2\uCAEC"+
-            "\uECDA\u9FD3\u9FD4\u9FD5\u9FD6\u9FD7\u9FD8\u9FD9"+
-            "\uECD9\u9FDA\u9FDB\u9FDC\uB0BE\u9FDD\u9FDE\u9FDF"+
-            "\u9FE0\u9FE1\u9FE2\uECD7\u9FE3\uECD8\u9FE4\u9FE5"+
-            "\u9FE6\uECE4\u9FE7\u9FE8\u9FE9\u9FEA\u9FEB\u9FEC"+
-            "\u9FED\u9FEE\u9FEF\uC8BC\u9FF0\u9FF1\u9FF2\u9FF3"+
-            "\u9FF4\u9FF5\u9FF6\u9FF7\u9FF8\u9FF9\uC1C7\u9FFA"+
-            "\u9FFB\u9FFC\u9FFD\u9FFE\uECDC\uD1E0\uA040\uA041"+
-            "\uA042\uA043\uA044\uA045\uA046\uA047\uA048\uA049"+
-            "\uECDB\uA04A\uA04B\uA04C\uA04D\uD4EF\uA04E\uECDD"+
-            "\uA04F\uA050\uA051\uA052\uA053\uA054\uDBC6\uA055"+
-            "\uA056\uA057\uA058\uA059\uA05A\uA05B\uA05C\uA05D"+
-            "\uA05E\uECDE\uA05F\uA060\uA061\uA062\uA063\uA064"+
-            "\uA065\uA066\uA067\uA068\uA069\uA06A\uB1AC\uA06B"+
-            "\uA06C\uA06D\uA06E\uA06F\uA070\uA071\uA072\uA073"+
-            "\uA074\uA075\uA076\uA077\uA078\uA079\uA07A\uA07B"+
-            "\uA07C\uA07D\uA07E\uA080\uA081\uECDF\uA082\uA083"+
-            "\uA084\uA085\uA086\uA087\uA088\uA089\uA08A\uA08B"+
-            "\uECE0\uA08C\uD7A6\uA08D\uC5C0\uA08E\uA08F\uA090"+
-            "\uEBBC\uB0AE\uA091\uA092\uA093\uBEF4\uB8B8\uD2AF"+
-            "\uB0D6\uB5F9\uA094\uD8B3\uA095\uCBAC\uA096\uE3DD"+
-            "\uA097\uA098\uA099\uA09A\uA09B\uA09C\uA09D\uC6AC"+
-            "\uB0E6\uA09E\uA09F\uA0A0\uC5C6\uEBB9\uA0A1\uA0A2"+
-            "\uA0A3\uA0A4\uEBBA\uA0A5\uA0A6\uA0A7\uEBBB\uA0A8"+
-            "\uA0A9\uD1C0\uA0AA\uC5A3\uA0AB\uEAF2\uA0AC\uC4B2"+
-            "\uA0AD\uC4B5\uC0CE\uA0AE\uA0AF\uA0B0\uEAF3\uC4C1"+
-            "\uA0B1\uCEEF\uA0B2\uA0B3\uA0B4\uA0B5\uEAF0\uEAF4"+
-            "\uA0B6\uA0B7\uC9FC\uA0B8\uA0B9\uC7A3\uA0BA\uA0BB"+
-            "\uA0BC\uCCD8\uCEFE\uA0BD\uA0BE\uA0BF\uEAF5\uEAF6"+
-            "\uCFAC\uC0E7\uA0C0\uA0C1\uEAF7\uA0C2\uA0C3\uA0C4"+
-            "\uA0C5\uA0C6\uB6BF\uEAF8\uA0C7\uEAF9\uA0C8\uEAFA"+
-            "\uA0C9\uA0CA\uEAFB\uA0CB\uA0CC\uA0CD\uA0CE\uA0CF"+
-            "\uA0D0\uA0D1\uA0D2\uA0D3\uA0D4\uA0D5\uA0D6\uEAF1"+
-            "\uA0D7\uA0D8\uA0D9\uA0DA\uA0DB\uA0DC\uA0DD\uA0DE"+
-            "\uA0DF\uA0E0\uA0E1\uA0E2\uC8AE\uE1EB\uA0E3\uB7B8"+
-            "\uE1EC\uA0E4\uA0E5\uA0E6\uE1ED\uA0E7\uD7B4\uE1EE"+
-            "\uE1EF\uD3CC\uA0E8\uA0E9\uA0EA\uA0EB\uA0EC\uA0ED"+
-            "\uA0EE\uE1F1\uBFF1\uE1F0\uB5D2\uA0EF\uA0F0\uA0F1"+
-            "\uB1B7\uA0F2\uA0F3\uA0F4\uA0F5\uE1F3\uE1F2\uA0F6"+
-            "\uBAFC\uA0F7\uE1F4\uA0F8\uA0F9\uA0FA\uA0FB\uB9B7"+
-            "\uA0FC\uBED1\uA0FD\uA0FE\uAA40\uAA41\uC4FC\uAA42"+
-            "\uBADD\uBDC6\uAA43\uAA44\uAA45\uAA46\uAA47\uAA48"+
-            "\uE1F5\uE1F7\uAA49\uAA4A\uB6C0\uCFC1\uCAA8\uE1F6"+
-            "\uD5F8\uD3FC\uE1F8\uE1FC\uE1F9\uAA4B\uAA4C\uE1FA"+
-            "\uC0EA\uAA4D\uE1FE\uE2A1\uC0C7\uAA4E\uAA4F\uAA50"+
-            "\uAA51\uE1FB\uAA52\uE1FD\uAA53\uAA54\uAA55\uAA56"+
-            "\uAA57\uAA58\uE2A5\uAA59\uAA5A\uAA5B\uC1D4\uAA5C"+
-            "\uAA5D\uAA5E\uAA5F\uE2A3\uAA60\uE2A8\uB2FE\uE2A2"+
-            "\uAA61\uAA62\uAA63\uC3CD\uB2C2\uE2A7\uE2A6\uAA64"+
-            "\uAA65\uE2A4\uE2A9\uAA66\uAA67\uE2AB\uAA68\uAA69"+
-            "\uAA6A\uD0C9\uD6ED\uC3A8\uE2AC\uAA6B\uCFD7\uAA6C"+
-            "\uAA6D\uE2AE\uAA6E\uAA6F\uBAEF\uAA70\uAA71\uE9E0"+
-            "\uE2AD\uE2AA\uAA72\uAA73\uAA74\uAA75\uBBAB\uD4B3"+
-            "\uAA76\uAA77\uAA78\uAA79\uAA7A\uAA7B\uAA7C\uAA7D"+
-            "\uAA7E\uAA80\uAA81\uAA82\uAA83\uE2B0\uAA84\uAA85"+
-            "\uE2AF\uAA86\uE9E1\uAA87\uAA88\uAA89\uAA8A\uE2B1"+
-            "\uAA8B\uAA8C\uAA8D\uAA8E\uAA8F\uAA90\uAA91\uAA92"+
-            "\uE2B2\uAA93\uAA94\uAA95\uAA96\uAA97\uAA98\uAA99"+
-            "\uAA9A\uAA9B\uAA9C\uAA9D\uE2B3\uCCA1\uAA9E\uE2B4"+
-            "\uAA9F\uAAA0\uAB40\uAB41\uAB42\uAB43\uAB44\uAB45"+
-            "\uAB46\uAB47\uAB48\uAB49\uAB4A\uAB4B\uE2B5\uAB4C"+
-            "\uAB4D\uAB4E\uAB4F\uAB50\uD0FE\uAB51\uAB52\uC2CA"+
-            "\uAB53\uD3F1\uAB54\uCDF5\uAB55\uAB56\uE7E0\uAB57"+
-            "\uAB58\uE7E1\uAB59\uAB5A\uAB5B\uAB5C\uBEC1\uAB5D"+
-            "\uAB5E\uAB5F\uAB60\uC2EA\uAB61\uAB62\uAB63\uE7E4"+
-            "\uAB64\uAB65\uE7E3\uAB66\uAB67\uAB68\uAB69\uAB6A"+
-            "\uAB6B\uCDE6\uAB6C\uC3B5\uAB6D\uAB6E\uE7E2\uBBB7"+
-            "\uCFD6\uAB6F\uC1E1\uE7E9\uAB70\uAB71\uAB72\uE7E8"+
-            "\uAB73\uAB74\uE7F4\uB2A3\uAB75\uAB76\uAB77\uAB78"+
-            "\uE7EA\uAB79\uE7E6\uAB7A\uAB7B\uAB7C\uAB7D\uAB7E"+
-            "\uE7EC\uE7EB\uC9BA\uAB80\uAB81\uD5E4\uAB82\uE7E5"+
-            "\uB7A9\uE7E7\uAB83\uAB84\uAB85\uAB86\uAB87\uAB88"+
-            "\uAB89\uE7EE\uAB8A\uAB8B\uAB8C\uAB8D\uE7F3\uAB8E"+
-            "\uD6E9\uAB8F\uAB90\uAB91\uAB92\uE7ED\uAB93\uE7F2"+
-            "\uAB94\uE7F1\uAB95\uAB96\uAB97\uB0E0\uAB98\uAB99"+
-            "\uAB9A\uAB9B\uE7F5\uAB9C\uAB9D\uAB9E\uAB9F\uABA0"+
-            "\uAC40\uAC41\uAC42\uAC43\uAC44\uAC45\uAC46\uAC47"+
-            "\uAC48\uAC49\uAC4A\uC7F2\uAC4B\uC0C5\uC0ED\uAC4C"+
-            "\uAC4D\uC1F0\uE7F0\uAC4E\uAC4F\uAC50\uAC51\uE7F6"+
-            "\uCBF6\uAC52\uAC53\uAC54\uAC55\uAC56\uAC57\uAC58"+
-            "\uAC59\uAC5A\uE8A2\uE8A1\uAC5B\uAC5C\uAC5D\uAC5E"+
-            "\uAC5F\uAC60\uD7C1\uAC61\uAC62\uE7FA\uE7F9\uAC63"+
-            "\uE7FB\uAC64\uE7F7\uAC65\uE7FE\uAC66\uE7FD\uAC67"+
-            "\uE7FC\uAC68\uAC69\uC1D5\uC7D9\uC5FD\uC5C3\uAC6A"+
-            "\uAC6B\uAC6C\uAC6D\uAC6E\uC7ED\uAC6F\uAC70\uAC71"+
-            "\uAC72\uE8A3\uAC73\uAC74\uAC75\uAC76\uAC77\uAC78"+
-            "\uAC79\uAC7A\uAC7B\uAC7C\uAC7D\uAC7E\uAC80\uAC81"+
-            "\uAC82\uAC83\uAC84\uAC85\uAC86\uE8A6\uAC87\uE8A5"+
-            "\uAC88\uE8A7\uBAF7\uE7F8\uE8A4\uAC89\uC8F0\uC9AA"+
-            "\uAC8A\uAC8B\uAC8C\uAC8D\uAC8E\uAC8F\uAC90\uAC91"+
-            "\uAC92\uAC93\uAC94\uAC95\uAC96\uE8A9\uAC97\uAC98"+
-            "\uB9E5\uAC99\uAC9A\uAC9B\uAC9C\uAC9D\uD1FE\uE8A8"+
-            "\uAC9E\uAC9F\uACA0\uAD40\uAD41\uAD42\uE8AA\uAD43"+
-            "\uE8AD\uE8AE\uAD44\uC1A7\uAD45\uAD46\uAD47\uE8AF"+
-            "\uAD48\uAD49\uAD4A\uE8B0\uAD4B\uAD4C\uE8AC\uAD4D"+
-            "\uE8B4\uAD4E\uAD4F\uAD50\uAD51\uAD52\uAD53\uAD54"+
-            "\uAD55\uAD56\uAD57\uAD58\uE8AB\uAD59\uE8B1\uAD5A"+
-            "\uAD5B\uAD5C\uAD5D\uAD5E\uAD5F\uAD60\uAD61\uE8B5"+
-            "\uE8B2\uE8B3\uAD62\uAD63\uAD64\uAD65\uAD66\uAD67"+
-            "\uAD68\uAD69\uAD6A\uAD6B\uAD6C\uAD6D\uAD6E\uAD6F"+
-            "\uAD70\uAD71\uE8B7\uAD72\uAD73\uAD74\uAD75\uAD76"+
-            "\uAD77\uAD78\uAD79\uAD7A\uAD7B\uAD7C\uAD7D\uAD7E"+
-            "\uAD80\uAD81\uAD82\uAD83\uAD84\uAD85\uAD86\uAD87"+
-            "\uAD88\uAD89\uE8B6\uAD8A\uAD8B\uAD8C\uAD8D\uAD8E"+
-            "\uAD8F\uAD90\uAD91\uAD92\uB9CF\uAD93\uF0AC\uAD94"+
-            "\uF0AD\uAD95\uC6B0\uB0EA\uC8BF\uAD96\uCDDF\uAD97"+
-            "\uAD98\uAD99\uAD9A\uAD9B\uAD9C\uAD9D\uCECD\uEAB1"+
-            "\uAD9E\uAD9F\uADA0\uAE40\uEAB2\uAE41\uC6BF\uB4C9"+
-            "\uAE42\uAE43\uAE44\uAE45\uAE46\uAE47\uAE48\uEAB3"+
-            "\uAE49\uAE4A\uAE4B\uAE4C\uD5E7\uAE4D\uAE4E\uAE4F"+
-            "\uAE50\uAE51\uAE52\uAE53\uAE54\uDDF9\uAE55\uEAB4"+
-            "\uAE56\uEAB5\uAE57\uEAB6\uAE58\uAE59\uAE5A\uAE5B"+
-            "\uB8CA\uDFB0\uC9F5\uAE5C\uCCF0\uAE5D\uAE5E\uC9FA"+
-            "\uAE5F\uAE60\uAE61\uAE62\uAE63\uC9FB\uAE64\uAE65"+
-            "\uD3C3\uCBA6\uAE66\uB8A6\uF0AE\uB1C2\uAE67\uE5B8"+
-            "\uCCEF\uD3C9\uBCD7\uC9EA\uAE68\uB5E7\uAE69\uC4D0"+
-            "\uB5E9\uAE6A\uEEAE\uBBAD\uAE6B\uAE6C\uE7DE\uAE6D"+
-            "\uEEAF\uAE6E\uAE6F\uAE70\uAE71\uB3A9\uAE72\uAE73"+
-            "\uEEB2\uAE74\uAE75\uEEB1\uBDE7\uAE76\uEEB0\uCEB7"+
-            "\uAE77\uAE78\uAE79\uAE7A\uC5CF\uAE7B\uAE7C\uAE7D"+
-            "\uAE7E\uC1F4\uDBCE\uEEB3\uD0F3\uAE80\uAE81\uAE82"+
-            "\uAE83\uAE84\uAE85\uAE86\uAE87\uC2D4\uC6E8\uAE88"+
-            "\uAE89\uAE8A\uB7AC\uAE8B\uAE8C\uAE8D\uAE8E\uAE8F"+
-            "\uAE90\uAE91\uEEB4\uAE92\uB3EB\uAE93\uAE94\uAE95"+
-            "\uBBFB\uEEB5\uAE96\uAE97\uAE98\uAE99\uAE9A\uE7DC"+
-            "\uAE9B\uAE9C\uAE9D\uEEB6\uAE9E\uAE9F\uBDAE\uAEA0"+
-            "\uAF40\uAF41\uAF42\uF1E2\uAF43\uAF44\uAF45\uCAE8"+
-            "\uAF46\uD2C9\uF0DA\uAF47\uF0DB\uAF48\uF0DC\uC1C6"+
-            "\uAF49\uB8ED\uBECE\uAF4A\uAF4B\uF0DE\uAF4C\uC5B1"+
-            "\uF0DD\uD1F1\uAF4D\uF0E0\uB0CC\uBDEA\uAF4E\uAF4F"+
-            "\uAF50\uAF51\uAF52\uD2DF\uF0DF\uAF53\uB4AF\uB7E8"+
-            "\uF0E6\uF0E5\uC6A3\uF0E1\uF0E2\uB4C3\uAF54\uAF55"+
-            "\uF0E3\uD5EE\uAF56\uAF57\uCCDB\uBED2\uBCB2\uAF58"+
-            "\uAF59\uAF5A\uF0E8\uF0E7\uF0E4\uB2A1\uAF5B\uD6A2"+
-            "\uD3B8\uBEB7\uC8AC\uAF5C\uAF5D\uF0EA\uAF5E\uAF5F"+
-            "\uAF60\uAF61\uD1F7\uAF62\uD6CC\uBADB\uF0E9\uAF63"+
-            "\uB6BB\uAF64\uAF65\uCDB4\uAF66\uAF67\uC6A6\uAF68"+
-            "\uAF69\uAF6A\uC1A1\uF0EB\uF0EE\uAF6B\uF0ED\uF0F0"+
-            "\uF0EC\uAF6C\uBBBE\uF0EF\uAF6D\uAF6E\uAF6F\uAF70"+
-            "\uCCB5\uF0F2\uAF71\uAF72\uB3D5\uAF73\uAF74\uAF75"+
-            "\uAF76\uB1D4\uAF77\uAF78\uF0F3\uAF79\uAF7A\uF0F4"+
-            "\uF0F6\uB4E1\uAF7B\uF0F1\uAF7C\uF0F7\uAF7D\uAF7E"+
-            "\uAF80\uAF81\uF0FA\uAF82\uF0F8\uAF83\uAF84\uAF85"+
-            "\uF0F5\uAF86\uAF87\uAF88\uAF89\uF0FD\uAF8A\uF0F9"+
-            "\uF0FC\uF0FE\uAF8B\uF1A1\uAF8C\uAF8D\uAF8E\uCEC1"+
-            "\uF1A4\uAF8F\uF1A3\uAF90\uC1F6\uF0FB\uCADD\uAF91"+
-            "\uAF92\uB4F1\uB1F1\uCCB1\uAF93\uF1A6\uAF94\uAF95"+
-            "\uF1A7\uAF96\uAF97\uF1AC\uD5CE\uF1A9\uAF98\uAF99"+
-            "\uC8B3\uAF9A\uAF9B\uAF9C\uF1A2\uAF9D\uF1AB\uF1A8"+
-            "\uF1A5\uAF9E\uAF9F\uF1AA\uAFA0\uB040\uB041\uB042"+
-            "\uB043\uB044\uB045\uB046\uB0A9\uF1AD\uB047\uB048"+
-            "\uB049\uB04A\uB04B\uB04C\uF1AF\uB04D\uF1B1\uB04E"+
-            "\uB04F\uB050\uB051\uB052\uF1B0\uB053\uF1AE\uB054"+
-            "\uB055\uB056\uB057\uD1A2\uB058\uB059\uB05A\uB05B"+
-            "\uB05C\uB05D\uB05E\uF1B2\uB05F\uB060\uB061\uF1B3"+
-            "\uB062\uB063\uB064\uB065\uB066\uB067\uB068\uB069"+
-            "\uB9EF\uB06A\uB06B\uB5C7\uB06C\uB0D7\uB0D9\uB06D"+
-            "\uB06E\uB06F\uD4ED\uB070\uB5C4\uB071\uBDD4\uBBCA"+
-            "\uF0A7\uB072\uB073\uB8DE\uB074\uB075\uF0A8\uB076"+
-            "\uB077\uB0A8\uB078\uF0A9\uB079\uB07A\uCDEE\uB07B"+
-            "\uB07C\uF0AA\uB07D\uB07E\uB080\uB081\uB082\uB083"+
-            "\uB084\uB085\uB086\uB087\uF0AB\uB088\uB089\uB08A"+
-            "\uB08B\uB08C\uB08D\uB08E\uB08F\uB090\uC6A4\uB091"+
-            "\uB092\uD6E5\uF1E4\uB093\uF1E5\uB094\uB095\uB096"+
-            "\uB097\uB098\uB099\uB09A\uB09B\uB09C\uB09D\uC3F3"+
-            "\uB09E\uB09F\uD3DB\uB0A0\uB140\uD6D1\uC5E8\uB141"+
-            "\uD3AF\uB142\uD2E6\uB143\uB144\uEEC1\uB0BB\uD5B5"+
-            "\uD1CE\uBCE0\uBAD0\uB145\uBFF8\uB146\uB8C7\uB5C1"+
-            "\uC5CC\uB147\uB148\uCAA2\uB149\uB14A\uB14B\uC3CB"+
-            "\uB14C\uB14D\uB14E\uB14F\uB150\uEEC2\uB151\uB152"+
-            "\uB153\uB154\uB155\uB156\uB157\uB158\uC4BF\uB6A2"+
-            "\uB159\uEDEC\uC3A4\uB15A\uD6B1\uB15B\uB15C\uB15D"+
-            "\uCFE0\uEDEF\uB15E\uB15F\uC5CE\uB160\uB6DC\uB161"+
-            "\uB162\uCAA1\uB163\uB164\uEDED\uB165\uB166\uEDF0"+
-            "\uEDF1\uC3BC\uB167\uBFB4\uB168\uEDEE\uB169\uB16A"+
-            "\uB16B\uB16C\uB16D\uB16E\uB16F\uB170\uB171\uB172"+
-            "\uB173\uEDF4\uEDF2\uB174\uB175\uB176\uB177\uD5E6"+
-            "\uC3DF\uB178\uEDF3\uB179\uB17A\uB17B\uEDF6\uB17C"+
-            "\uD5A3\uD1A3\uB17D\uB17E\uB180\uEDF5\uB181\uC3D0"+
-            "\uB182\uB183\uB184\uB185\uB186\uEDF7\uBFF4\uBEEC"+
-            "\uEDF8\uB187\uCCF7\uB188\uD1DB\uB189\uB18A\uB18B"+
-            "\uD7C5\uD5F6\uB18C\uEDFC\uB18D\uB18E\uB18F\uEDFB"+
-            "\uB190\uB191\uB192\uB193\uB194\uB195\uB196\uB197"+
-            "\uEDF9\uEDFA\uB198\uB199\uB19A\uB19B\uB19C\uB19D"+
-            "\uB19E\uB19F\uEDFD\uBEA6\uB1A0\uB240\uB241\uB242"+
-            "\uB243\uCBAF\uEEA1\uB6BD\uB244\uEEA2\uC4C0\uB245"+
-            "\uEDFE\uB246\uB247\uBDDE\uB2C7\uB248\uB249\uB24A"+
-            "\uB24B\uB24C\uB24D\uB24E\uB24F\uB250\uB251\uB252"+
-            "\uB253\uB6C3\uB254\uB255\uB256\uEEA5\uD8BA\uEEA3"+
-            "\uEEA6\uB257\uB258\uB259\uC3E9\uB3F2\uB25A\uB25B"+
-            "\uB25C\uB25D\uB25E\uB25F\uEEA7\uEEA4\uCFB9\uB260"+
-            "\uB261\uEEA8\uC2F7\uB262\uB263\uB264\uB265\uB266"+
-            "\uB267\uB268\uB269\uB26A\uB26B\uB26C\uB26D\uEEA9"+
-            "\uEEAA\uB26E\uDEAB\uB26F\uB270\uC6B3\uB271\uC7C6"+
-            "\uB272\uD6F5\uB5C9\uB273\uCBB2\uB274\uB275\uB276"+
-            "\uEEAB\uB277\uB278\uCDAB\uB279\uEEAC\uB27A\uB27B"+
-            "\uB27C\uB27D\uB27E\uD5B0\uB280\uEEAD\uB281\uF6C4"+
-            "\uB282\uB283\uB284\uB285\uB286\uB287\uB288\uB289"+
-            "\uB28A\uB28B\uB28C\uB28D\uB28E\uDBC7\uB28F\uB290"+
-            "\uB291\uB292\uB293\uB294\uB295\uB296\uB297\uB4A3"+
-            "\uB298\uB299\uB29A\uC3AC\uF1E6\uB29B\uB29C\uB29D"+
-            "\uB29E\uB29F\uCAB8\uD2D3\uB2A0\uD6AA\uB340\uEFF2"+
-            "\uB341\uBED8\uB342\uBDC3\uEFF3\uB6CC\uB0AB\uB343"+
-            "\uB344\uB345\uB346\uCAAF\uB347\uB348\uEDB6\uB349"+
-            "\uEDB7\uB34A\uB34B\uB34C\uB34D\uCEF9\uB7AF\uBFF3"+
-            "\uEDB8\uC2EB\uC9B0\uB34E\uB34F\uB350\uB351\uB352"+
-            "\uB353\uEDB9\uB354\uB355\uC6F6\uBFB3\uB356\uB357"+
-            "\uB358\uEDBC\uC5F8\uB359\uD1D0\uB35A\uD7A9\uEDBA"+
-            "\uEDBB\uB35B\uD1E2\uB35C\uEDBF\uEDC0\uB35D\uEDC4"+
-            "\uB35E\uB35F\uB360\uEDC8\uB361\uEDC6\uEDCE\uD5E8"+
-            "\uB362\uEDC9\uB363\uB364\uEDC7\uEDBE\uB365\uB366"+
-            "\uC5E9\uB367\uB368\uB369\uC6C6\uB36A\uB36B\uC9E9"+
-            "\uD4D2\uEDC1\uEDC2\uEDC3\uEDC5\uB36C\uC0F9\uB36D"+
-            "\uB4A1\uB36E\uB36F\uB370\uB371\uB9E8\uB372\uEDD0"+
-            "\uB373\uB374\uB375\uB376\uEDD1\uB377\uEDCA\uB378"+
-            "\uEDCF\uB379\uCEF8\uB37A\uB37B\uCBB6\uEDCC\uEDCD"+
-            "\uB37C\uB37D\uB37E\uB380\uB381\uCFF5\uB382\uB383"+
-            "\uB384\uB385\uB386\uB387\uB388\uB389\uB38A\uB38B"+
-            "\uB38C\uB38D\uEDD2\uC1F2\uD3B2\uEDCB\uC8B7\uB38E"+
-            "\uB38F\uB390\uB391\uB392\uB393\uB394\uB395\uBCEF"+
-            "\uB396\uB397\uB398\uB399\uC5F0\uB39A\uB39B\uB39C"+
-            "\uB39D\uB39E\uB39F\uB3A0\uB440\uB441\uB442\uEDD6"+
-            "\uB443\uB5EF\uB444\uB445\uC2B5\uB0AD\uCBE9\uB446"+
-            "\uB447\uB1AE\uB448\uEDD4\uB449\uB44A\uB44B\uCDEB"+
-            "\uB5E2\uB44C\uEDD5\uEDD3\uEDD7\uB44D\uB44E\uB5FA"+
-            "\uB44F\uEDD8\uB450\uEDD9\uB451\uEDDC\uB452\uB1CC"+
-            "\uB453\uB454\uB455\uB456\uB457\uB458\uB459\uB45A"+
-            "\uC5F6\uBCEE\uEDDA\uCCBC\uB2EA\uB45B\uB45C\uB45D"+
-            "\uB45E\uEDDB\uB45F\uB460\uB461\uB462\uC4EB\uB463"+
-            "\uB464\uB4C5\uB465\uB466\uB467\uB0F5\uB468\uB469"+
-            "\uB46A\uEDDF\uC0DA\uB4E8\uB46B\uB46C\uB46D\uB46E"+
-            "\uC5CD\uB46F\uB470\uB471\uEDDD\uBFC4\uB472\uB473"+
-            "\uB474\uEDDE\uB475\uB476\uB477\uB478\uB479\uB47A"+
-            "\uB47B\uB47C\uB47D\uB47E\uB480\uB481\uB482\uB483"+
-            "\uC4A5\uB484\uB485\uB486\uEDE0\uB487\uB488\uB489"+
-            "\uB48A\uB48B\uEDE1\uB48C\uEDE3\uB48D\uB48E\uC1D7"+
-            "\uB48F\uB490\uBBC7\uB491\uB492\uB493\uB494\uB495"+
-            "\uB496\uBDB8\uB497\uB498\uB499\uEDE2\uB49A\uB49B"+
-            "\uB49C\uB49D\uB49E\uB49F\uB4A0\uB540\uB541\uB542"+
-            "\uB543\uB544\uB545\uEDE4\uB546\uB547\uB548\uB549"+
-            "\uB54A\uB54B\uB54C\uB54D\uB54E\uB54F\uEDE6\uB550"+
-            "\uB551\uB552\uB553\uB554\uEDE5\uB555\uB556\uB557"+
-            "\uB558\uB559\uB55A\uB55B\uB55C\uB55D\uB55E\uB55F"+
-            "\uB560\uB561\uB562\uB563\uEDE7\uB564\uB565\uB566"+
-            "\uB567\uB568\uCABE\uECEA\uC0F1\uB569\uC9E7\uB56A"+
-            "\uECEB\uC6EE\uB56B\uB56C\uB56D\uB56E\uECEC\uB56F"+
-            "\uC6ED\uECED\uB570\uB571\uB572\uB573\uB574\uB575"+
-            "\uB576\uB577\uB578\uECF0\uB579\uB57A\uD7E6\uECF3"+
-            "\uB57B\uB57C\uECF1\uECEE\uECEF\uD7A3\uC9F1\uCBEE"+
-            "\uECF4\uB57D\uECF2\uB57E\uB580\uCFE9\uB581\uECF6"+
-            "\uC6B1\uB582\uB583\uB584\uB585\uBCC0\uB586\uECF5"+
-            "\uB587\uB588\uB589\uB58A\uB58B\uB58C\uB58D\uB5BB"+
-            "\uBBF6\uB58E\uECF7\uB58F\uB590\uB591\uB592\uB593"+
-            "\uD9F7\uBDFB\uB594\uB595\uC2BB\uECF8\uB596\uB597"+
-            "\uB598\uB599\uECF9\uB59A\uB59B\uB59C\uB59D\uB8A3"+
-            "\uB59E\uB59F\uB5A0\uB640\uB641\uB642\uB643\uB644"+
-            "\uB645\uB646\uECFA\uB647\uB648\uB649\uB64A\uB64B"+
-            "\uB64C\uB64D\uB64E\uB64F\uB650\uB651\uB652\uECFB"+
-            "\uB653\uB654\uB655\uB656\uB657\uB658\uB659\uB65A"+
-            "\uB65B\uB65C\uB65D\uECFC\uB65E\uB65F\uB660\uB661"+
-            "\uB662\uD3ED\uD8AE\uC0EB\uB663\uC7DD\uBACC\uB664"+
-            "\uD0E3\uCBBD\uB665\uCDBA\uB666\uB667\uB8D1\uB668"+
-            "\uB669\uB1FC\uB66A\uC7EF\uB66B\uD6D6\uB66C\uB66D"+
-            "\uB66E\uBFC6\uC3EB\uB66F\uB670\uEFF5\uB671\uB672"+
-            "\uC3D8\uB673\uB674\uB675\uB676\uB677\uB678\uD7E2"+
-            "\uB679\uB67A\uB67B\uEFF7\uB3D3\uB67C\uC7D8\uD1ED"+
-            "\uB67D\uD6C8\uB67E\uEFF8\uB680\uEFF6\uB681\uBBFD"+
-            "\uB3C6\uB682\uB683\uB684\uB685\uB686\uB687\uB688"+
-            "\uBDD5\uB689\uB68A\uD2C6\uB68B\uBBE0\uB68C\uB68D"+
-            "\uCFA1\uB68E\uEFFC\uEFFB\uB68F\uB690\uEFF9\uB691"+
-            "\uB692\uB693\uB694\uB3CC\uB695\uC9D4\uCBB0\uB696"+
-            "\uB697\uB698\uB699\uB69A\uEFFE\uB69B\uB69C\uB0DE"+
-            "\uB69D\uB69E\uD6C9\uB69F\uB6A0\uB740\uEFFD\uB741"+
-            "\uB3ED\uB742\uB743\uF6D5\uB744\uB745\uB746\uB747"+
-            "\uB748\uB749\uB74A\uB74B\uB74C\uB74D\uB74E\uB74F"+
-            "\uB750\uB751\uB752\uCEC8\uB753\uB754\uB755\uF0A2"+
-            "\uB756\uF0A1\uB757\uB5BE\uBCDA\uBBFC\uB758\uB8E5"+
-            "\uB759\uB75A\uB75B\uB75C\uB75D\uB75E\uC4C2\uB75F"+
-            "\uB760\uB761\uB762\uB763\uB764\uB765\uB766\uB767"+
-            "\uB768\uF0A3\uB769\uB76A\uB76B\uB76C\uB76D\uCBEB"+
-            "\uB76E\uB76F\uB770\uB771\uB772\uB773\uB774\uB775"+
-            "\uB776\uB777\uB778\uB779\uB77A\uB77B\uB77C\uB77D"+
-            "\uB77E\uB780\uB781\uB782\uB783\uB784\uB785\uB786"+
-            "\uF0A6\uB787\uB788\uB789\uD1A8\uB78A\uBEBF\uC7EE"+
-            "\uF1B6\uF1B7\uBFD5\uB78B\uB78C\uB78D\uB78E\uB4A9"+
-            "\uF1B8\uCDBB\uB78F\uC7D4\uD5AD\uB790\uF1B9\uB791"+
-            "\uF1BA\uB792\uB793\uB794\uB795\uC7CF\uB796\uB797"+
-            "\uB798\uD2A4\uD6CF\uB799\uB79A\uF1BB\uBDD1\uB4B0"+
-            "\uBEBD\uB79B\uB79C\uB79D\uB4DC\uCED1\uB79E\uBFDF"+
-            "\uF1BD\uB79F\uB7A0\uB840\uB841\uBFFA\uF1BC\uB842"+
-            "\uF1BF\uB843\uB844\uB845\uF1BE\uF1C0\uB846\uB847"+
-            "\uB848\uB849\uB84A\uF1C1\uB84B\uB84C\uB84D\uB84E"+
-            "\uB84F\uB850\uB851\uB852\uB853\uB854\uB855\uC1FE"+
-            "\uB856\uB857\uB858\uB859\uB85A\uB85B\uB85C\uB85D"+
-            "\uB85E\uB85F\uB860\uC1A2\uB861\uB862\uB863\uB864"+
-            "\uB865\uB866\uB867\uB868\uB869\uB86A\uCAFA\uB86B"+
-            "\uB86C\uD5BE\uB86D\uB86E\uB86F\uB870\uBEBA\uBEB9"+
-            "\uD5C2\uB871\uB872\uBFA2\uB873\uCDAF\uF1B5\uB874"+
-            "\uB875\uB876\uB877\uB878\uB879\uBDDF\uB87A\uB6CB"+
-            "\uB87B\uB87C\uB87D\uB87E\uB880\uB881\uB882\uB883"+
-            "\uB884\uD6F1\uF3C3\uB885\uB886\uF3C4\uB887\uB8CD";
-
-        private final static String innerIndex5=
-            "\uB888\uB889\uB88A\uF3C6\uF3C7\uB88B\uB0CA\uB88C"+
-            "\uF3C5\uB88D\uF3C9\uCBF1\uB88E\uB88F\uB890\uF3CB"+
-            "\uB891\uD0A6\uB892\uB893\uB1CA\uF3C8\uB894\uB895"+
-            "\uB896\uF3CF\uB897\uB5D1\uB898\uB899\uF3D7\uB89A"+
-            "\uF3D2\uB89B\uB89C\uB89D\uF3D4\uF3D3\uB7FB\uB89E"+
-            "\uB1BF\uB89F\uF3CE\uF3CA\uB5DA\uB8A0\uF3D0\uB940"+
-            "\uB941\uF3D1\uB942\uF3D5\uB943\uB944\uB945\uB946"+
-            "\uF3CD\uB947\uBCE3\uB948\uC1FD\uB949\uF3D6\uB94A"+
-            "\uB94B\uB94C\uB94D\uB94E\uB94F\uF3DA\uB950\uF3CC"+
-            "\uB951\uB5C8\uB952\uBDEE\uF3DC\uB953\uB954\uB7A4"+
-            "\uBFF0\uD6FE\uCDB2\uB955\uB4F0\uB956\uB2DF\uB957"+
-            "\uF3D8\uB958\uF3D9\uC9B8\uB959\uF3DD\uB95A\uB95B"+
-            "\uF3DE\uB95C\uF3E1\uB95D\uB95E\uB95F\uB960\uB961"+
-            "\uB962\uB963\uB964\uB965\uB966\uB967\uF3DF\uB968"+
-            "\uB969\uF3E3\uF3E2\uB96A\uB96B\uF3DB\uB96C\uBFEA"+
-            "\uB96D\uB3EF\uB96E\uF3E0\uB96F\uB970\uC7A9\uB971"+
-            "\uBCF2\uB972\uB973\uB974\uB975\uF3EB\uB976\uB977"+
-            "\uB978\uB979\uB97A\uB97B\uB97C\uB9BF\uB97D\uB97E"+
-            "\uF3E4\uB980\uB981\uB982\uB2AD\uBBFE\uB983\uCBE3"+
-            "\uB984\uB985\uB986\uB987\uF3ED\uF3E9\uB988\uB989"+
-            "\uB98A\uB9DC\uF3EE\uB98B\uB98C\uB98D\uF3E5\uF3E6"+
-            "\uF3EA\uC2E1\uF3EC\uF3EF\uF3E8\uBCFD\uB98E\uB98F"+
-            "\uB990\uCFE4\uB991\uB992\uF3F0\uB993\uB994\uB995"+
-            "\uF3E7\uB996\uB997\uB998\uB999\uB99A\uB99B\uB99C"+
-            "\uB99D\uF3F2\uB99E\uB99F\uB9A0\uBA40\uD7AD\uC6AA"+
-            "\uBA41\uBA42\uBA43\uBA44\uF3F3\uBA45\uBA46\uBA47"+
-            "\uBA48\uF3F1\uBA49\uC2A8\uBA4A\uBA4B\uBA4C\uBA4D"+
-            "\uBA4E\uB8DD\uF3F5\uBA4F\uBA50\uF3F4\uBA51\uBA52"+
-            "\uBA53\uB4DB\uBA54\uBA55\uBA56\uF3F6\uF3F7\uBA57"+
-            "\uBA58\uBA59\uF3F8\uBA5A\uBA5B\uBA5C\uC0BA\uBA5D"+
-            "\uBA5E\uC0E9\uBA5F\uBA60\uBA61\uBA62\uBA63\uC5F1"+
-            "\uBA64\uBA65\uBA66\uBA67\uF3FB\uBA68\uF3FA\uBA69"+
-            "\uBA6A\uBA6B\uBA6C\uBA6D\uBA6E\uBA6F\uBA70\uB4D8"+
-            "\uBA71\uBA72\uBA73\uF3FE\uF3F9\uBA74\uBA75\uF3FC"+
-            "\uBA76\uBA77\uBA78\uBA79\uBA7A\uBA7B\uF3FD\uBA7C"+
-            "\uBA7D\uBA7E\uBA80\uBA81\uBA82\uBA83\uBA84\uF4A1"+
-            "\uBA85\uBA86\uBA87\uBA88\uBA89\uBA8A\uF4A3\uBBC9"+
-            "\uBA8B\uBA8C\uF4A2\uBA8D\uBA8E\uBA8F\uBA90\uBA91"+
-            "\uBA92\uBA93\uBA94\uBA95\uBA96\uBA97\uBA98\uBA99"+
-            "\uF4A4\uBA9A\uBA9B\uBA9C\uBA9D\uBA9E\uBA9F\uB2BE"+
-            "\uF4A6\uF4A5\uBAA0\uBB40\uBB41\uBB42\uBB43\uBB44"+
-            "\uBB45\uBB46\uBB47\uBB48\uBB49\uBCAE\uBB4A\uBB4B"+
-            "\uBB4C\uBB4D\uBB4E\uBB4F\uBB50\uBB51\uBB52\uBB53"+
-            "\uBB54\uBB55\uBB56\uBB57\uBB58\uBB59\uBB5A\uBB5B"+
-            "\uBB5C\uBB5D\uBB5E\uBB5F\uBB60\uBB61\uBB62\uBB63"+
-            "\uBB64\uBB65\uBB66\uBB67\uBB68\uBB69\uBB6A\uBB6B"+
-            "\uBB6C\uBB6D\uBB6E\uC3D7\uD9E1\uBB6F\uBB70\uBB71"+
-            "\uBB72\uBB73\uBB74\uC0E0\uF4CC\uD7D1\uBB75\uBB76"+
-            "\uBB77\uBB78\uBB79\uBB7A\uBB7B\uBB7C\uBB7D\uBB7E"+
-            "\uBB80\uB7DB\uBB81\uBB82\uBB83\uBB84\uBB85\uBB86"+
-            "\uBB87\uF4CE\uC1A3\uBB88\uBB89\uC6C9\uBB8A\uB4D6"+
-            "\uD5B3\uBB8B\uBB8C\uBB8D\uF4D0\uF4CF\uF4D1\uCBDA"+
-            "\uBB8E\uBB8F\uF4D2\uBB90\uD4C1\uD6E0\uBB91\uBB92"+
-            "\uBB93\uBB94\uB7E0\uBB95\uBB96\uBB97\uC1B8\uBB98"+
-            "\uBB99\uC1BB\uF4D3\uBEAC\uBB9A\uBB9B\uBB9C\uBB9D"+
-            "\uBB9E\uB4E2\uBB9F\uBBA0\uF4D4\uF4D5\uBEAB\uBC40"+
-            "\uBC41\uF4D6\uBC42\uBC43\uBC44\uF4DB\uBC45\uF4D7"+
-            "\uF4DA\uBC46\uBAFD\uBC47\uF4D8\uF4D9\uBC48\uBC49"+
-            "\uBC4A\uBC4B\uBC4C\uBC4D\uBC4E\uB8E2\uCCC7\uF4DC"+
-            "\uBC4F\uB2DA\uBC50\uBC51\uC3D3\uBC52\uBC53\uD4E3"+
-            "\uBFB7\uBC54\uBC55\uBC56\uBC57\uBC58\uBC59\uBC5A"+
-            "\uF4DD\uBC5B\uBC5C\uBC5D\uBC5E\uBC5F\uBC60\uC5B4"+
-            "\uBC61\uBC62\uBC63\uBC64\uBC65\uBC66\uBC67\uBC68"+
-            "\uF4E9\uBC69\uBC6A\uCFB5\uBC6B\uBC6C\uBC6D\uBC6E"+
-            "\uBC6F\uBC70\uBC71\uBC72\uBC73\uBC74\uBC75\uBC76"+
-            "\uBC77\uBC78\uCEC9\uBC79\uBC7A\uBC7B\uBC7C\uBC7D"+
-            "\uBC7E\uBC80\uBC81\uBC82\uBC83\uBC84\uBC85\uBC86"+
-            "\uBC87\uBC88\uBC89\uBC8A\uBC8B\uBC8C\uBC8D\uBC8E"+
-            "\uCBD8\uBC8F\uCBF7\uBC90\uBC91\uBC92\uBC93\uBDF4"+
-            "\uBC94\uBC95\uBC96\uD7CF\uBC97\uBC98\uBC99\uC0DB"+
-            "\uBC9A\uBC9B\uBC9C\uBC9D\uBC9E\uBC9F\uBCA0\uBD40"+
-            "\uBD41\uBD42\uBD43\uBD44\uBD45\uBD46\uBD47\uBD48"+
-            "\uBD49\uBD4A\uBD4B\uBD4C\uBD4D\uBD4E\uBD4F\uBD50"+
-            "\uBD51\uBD52\uBD53\uBD54\uBD55\uBD56\uBD57\uBD58"+
-            "\uBD59\uBD5A\uBD5B\uBD5C\uBD5D\uBD5E\uBD5F\uBD60"+
-            "\uBD61\uBD62\uBD63\uBD64\uBD65\uBD66\uBD67\uBD68"+
-            "\uBD69\uBD6A\uBD6B\uBD6C\uBD6D\uBD6E\uBD6F\uBD70"+
-            "\uBD71\uBD72\uBD73\uBD74\uBD75\uBD76\uD0F5\uBD77"+
-            "\uBD78\uBD79\uBD7A\uBD7B\uBD7C\uBD7D\uBD7E\uF4EA"+
-            "\uBD80\uBD81\uBD82\uBD83\uBD84\uBD85\uBD86\uBD87"+
-            "\uBD88\uBD89\uBD8A\uBD8B\uBD8C\uBD8D\uBD8E\uBD8F"+
-            "\uBD90\uBD91\uBD92\uBD93\uBD94\uBD95\uBD96\uBD97"+
-            "\uBD98\uBD99\uBD9A\uBD9B\uBD9C\uBD9D\uBD9E\uBD9F"+
-            "\uBDA0\uBE40\uBE41\uBE42\uBE43\uBE44\uBE45\uBE46"+
-            "\uBE47\uBE48\uBE49\uBE4A\uBE4B\uBE4C\uF4EB\uBE4D"+
-            "\uBE4E\uBE4F\uBE50\uBE51\uBE52\uBE53\uF4EC\uBE54"+
-            "\uBE55\uBE56\uBE57\uBE58\uBE59\uBE5A\uBE5B\uBE5C"+
-            "\uBE5D\uBE5E\uBE5F\uBE60\uBE61\uBE62\uBE63\uBE64"+
-            "\uBE65\uBE66\uBE67\uBE68\uBE69\uBE6A\uBE6B\uBE6C"+
-            "\uBE6D\uBE6E\uBE6F\uBE70\uBE71\uBE72\uBE73\uBE74"+
-            "\uBE75\uBE76\uBE77\uBE78\uBE79\uBE7A\uBE7B\uBE7C"+
-            "\uBE7D\uBE7E\uBE80\uBE81\uBE82\uBE83\uBE84\uBE85"+
-            "\uBE86\uBE87\uBE88\uBE89\uBE8A\uBE8B\uBE8C\uBE8D"+
-            "\uBE8E\uBE8F\uBE90\uBE91\uBE92\uBE93\uBE94\uBE95"+
-            "\uBE96\uBE97\uBE98\uBE99\uBE9A\uBE9B\uBE9C\uBE9D"+
-            "\uBE9E\uBE9F\uBEA0\uBF40\uBF41\uBF42\uBF43\uBF44"+
-            "\uBF45\uBF46\uBF47\uBF48\uBF49\uBF4A\uBF4B\uBF4C"+
-            "\uBF4D\uBF4E\uBF4F\uBF50\uBF51\uBF52\uBF53\uBF54"+
-            "\uBF55\uBF56\uBF57\uBF58\uBF59\uBF5A\uBF5B\uBF5C"+
-            "\uBF5D\uBF5E\uBF5F\uBF60\uBF61\uBF62\uBF63\uBF64"+
-            "\uBF65\uBF66\uBF67\uBF68\uBF69\uBF6A\uBF6B\uBF6C"+
-            "\uBF6D\uBF6E\uBF6F\uBF70\uBF71\uBF72\uBF73\uBF74"+
-            "\uBF75\uBF76\uBF77\uBF78\uBF79\uBF7A\uBF7B\uBF7C"+
-            "\uBF7D\uBF7E\uBF80\uF7E3\uBF81\uBF82\uBF83\uBF84"+
-            "\uBF85\uB7B1\uBF86\uBF87\uBF88\uBF89\uBF8A\uF4ED"+
-            "\uBF8B\uBF8C\uBF8D\uBF8E\uBF8F\uBF90\uBF91\uBF92"+
-            "\uBF93\uBF94\uBF95\uBF96\uBF97\uBF98\uBF99\uBF9A"+
-            "\uBF9B\uBF9C\uBF9D\uBF9E\uBF9F\uBFA0\uC040\uC041"+
-            "\uC042\uC043\uC044\uC045\uC046\uC047\uC048\uC049"+
-            "\uC04A\uC04B\uC04C\uC04D\uC04E\uC04F\uC050\uC051"+
-            "\uC052\uC053\uC054\uC055\uC056\uC057\uC058\uC059"+
-            "\uC05A\uC05B\uC05C\uC05D\uC05E\uC05F\uC060\uC061"+
-            "\uC062\uC063\uD7EB\uC064\uC065\uC066\uC067\uC068"+
-            "\uC069\uC06A\uC06B\uC06C\uC06D\uC06E\uC06F\uC070"+
-            "\uC071\uC072\uC073\uC074\uC075\uC076\uC077\uC078"+
-            "\uC079\uC07A\uC07B\uF4EE\uC07C\uC07D\uC07E\uE6F9"+
-            "\uBEC0\uE6FA\uBAEC\uE6FB\uCFCB\uE6FC\uD4BC\uBCB6"+
-            "\uE6FD\uE6FE\uBCCD\uC8D2\uCEB3\uE7A1\uC080\uB4BF"+
-            "\uE7A2\uC9B4\uB8D9\uC4C9\uC081\uD7DD\uC2DA\uB7D7"+
-            "\uD6BD\uCEC6\uB7C4\uC082\uC083\uC5A6\uE7A3\uCFDF"+
-            "\uE7A4\uE7A5\uE7A6\uC1B7\uD7E9\uC9F0\uCFB8\uD6AF"+
-            "\uD6D5\uE7A7\uB0ED\uE7A8\uE7A9\uC9DC\uD2EF\uBEAD"+
-            "\uE7AA\uB0F3\uC8DE\uBDE1\uE7AB\uC8C6\uC084\uE7AC"+
-            "\uBBE6\uB8F8\uD1A4\uE7AD\uC2E7\uBEF8\uBDCA\uCDB3"+
-            "\uE7AE\uE7AF\uBEEE\uD0E5\uC085\uCBE7\uCCD0\uBCCC"+
-            "\uE7B0\uBCA8\uD0F7\uE7B1\uC086\uD0F8\uE7B2\uE7B3"+
-            "\uB4C2\uE7B4\uE7B5\uC9FE\uCEAC\uC3E0\uE7B7\uB1C1"+
-            "\uB3F1\uC087\uE7B8\uE7B9\uD7DB\uD5C0\uE7BA\uC2CC"+
-            "\uD7BA\uE7BB\uE7BC\uE7BD\uBCEA\uC3E5\uC0C2\uE7BE"+
-            "\uE7BF\uBCA9\uC088\uE7C0\uE7C1\uE7B6\uB6D0\uE7C2"+
-            "\uC089\uE7C3\uE7C4\uBBBA\uB5DE\uC2C6\uB1E0\uE7C5"+
-            "\uD4B5\uE7C6\uB8BF\uE7C8\uE7C7\uB7EC\uC08A\uE7C9"+
-            "\uB2F8\uE7CA\uE7CB\uE7CC\uE7CD\uE7CE\uE7CF\uE7D0"+
-            "\uD3A7\uCBF5\uE7D1\uE7D2\uE7D3\uE7D4\uC9C9\uE7D5"+
-            "\uE7D6\uE7D7\uE7D8\uE7D9\uBDC9\uE7DA\uF3BE\uC08B"+
-            "\uB8D7\uC08C\uC8B1\uC08D\uC08E\uC08F\uC090\uC091"+
-            "\uC092\uC093\uF3BF\uC094\uF3C0\uF3C1\uC095\uC096"+
-            "\uC097\uC098\uC099\uC09A\uC09B\uC09C\uC09D\uC09E"+
-            "\uB9DE\uCDF8\uC09F\uC0A0\uD8E8\uBAB1\uC140\uC2DE"+
-            "\uEEB7\uC141\uB7A3\uC142\uC143\uC144\uC145\uEEB9"+
-            "\uC146\uEEB8\uB0D5\uC147\uC148\uC149\uC14A\uC14B"+
-            "\uEEBB\uD5D6\uD7EF\uC14C\uC14D\uC14E\uD6C3\uC14F"+
-            "\uC150\uEEBD\uCAF0\uC151\uEEBC\uC152\uC153\uC154"+
-            "\uC155\uEEBE\uC156\uC157\uC158\uC159\uEEC0\uC15A"+
-            "\uC15B\uEEBF\uC15C\uC15D\uC15E\uC15F\uC160\uC161"+
-            "\uC162\uC163\uD1F2\uC164\uC7BC\uC165\uC3C0\uC166"+
-            "\uC167\uC168\uC169\uC16A\uB8E1\uC16B\uC16C\uC16D"+
-            "\uC16E\uC16F\uC1E7\uC170\uC171\uF4C6\uD0DF\uF4C7"+
-            "\uC172\uCFDB\uC173\uC174\uC8BA\uC175\uC176\uF4C8"+
-            "\uC177\uC178\uC179\uC17A\uC17B\uC17C\uC17D\uF4C9"+
-            "\uF4CA\uC17E\uF4CB\uC180\uC181\uC182\uC183\uC184"+
-            "\uD9FA\uB8FE\uC185\uC186\uE5F1\uD3F0\uC187\uF4E0"+
-            "\uC188\uCECC\uC189\uC18A\uC18B\uB3E1\uC18C\uC18D"+
-            "\uC18E\uC18F\uF1B4\uC190\uD2EE\uC191\uF4E1\uC192"+
-            "\uC193\uC194\uC195\uC196\uCFE8\uF4E2\uC197\uC198"+
-            "\uC7CC\uC199\uC19A\uC19B\uC19C\uC19D\uC19E\uB5D4"+
-            "\uB4E4\uF4E4\uC19F\uC1A0\uC240\uF4E3\uF4E5\uC241"+
-            "\uC242\uF4E6\uC243\uC244\uC245\uC246\uF4E7\uC247"+
-            "\uBAB2\uB0BF\uC248\uF4E8\uC249\uC24A\uC24B\uC24C"+
-            "\uC24D\uC24E\uC24F\uB7AD\uD2ED\uC250\uC251\uC252"+
-            "\uD2AB\uC0CF\uC253\uBFBC\uEBA3\uD5DF\uEAC8\uC254"+
-            "\uC255\uC256\uC257\uF1F3\uB6F8\uCBA3\uC258\uC259"+
-            "\uC4CD\uC25A\uF1E7\uC25B\uF1E8\uB8FB\uF1E9\uBAC4"+
-            "\uD4C5\uB0D2\uC25C\uC25D\uF1EA\uC25E\uC25F\uC260"+
-            "\uF1EB\uC261\uF1EC\uC262\uC263\uF1ED\uF1EE\uF1EF"+
-            "\uF1F1\uF1F0\uC5D5\uC264\uC265\uC266\uC267\uC268"+
-            "\uC269\uF1F2\uC26A\uB6FA\uC26B\uF1F4\uD2AE\uDEC7"+
-            "\uCBCA\uC26C\uC26D\uB3DC\uC26E\uB5A2\uC26F\uB9A2"+
-            "\uC270\uC271\uC4F4\uF1F5\uC272\uC273\uF1F6\uC274"+
-            "\uC275\uC276\uC1C4\uC1FB\uD6B0\uF1F7\uC277\uC278"+
-            "\uC279\uC27A\uF1F8\uC27B\uC1AA\uC27C\uC27D\uC27E"+
-            "\uC6B8\uC280\uBEDB\uC281\uC282\uC283\uC284\uC285"+
-            "\uC286\uC287\uC288\uC289\uC28A\uC28B\uC28C\uC28D"+
-            "\uC28E\uF1F9\uB4CF\uC28F\uC290\uC291\uC292\uC293"+
-            "\uC294\uF1FA\uC295\uC296\uC297\uC298\uC299\uC29A"+
-            "\uC29B\uC29C\uC29D\uC29E\uC29F\uC2A0\uC340\uEDB2"+
-            "\uEDB1\uC341\uC342\uCBE0\uD2DE\uC343\uCBC1\uD5D8"+
-            "\uC344\uC8E2\uC345\uC0DF\uBCA1\uC346\uC347\uC348"+
-            "\uC349\uC34A\uC34B\uEBC1\uC34C\uC34D\uD0A4\uC34E"+
-            "\uD6E2\uC34F\uB6C7\uB8D8\uEBC0\uB8CE\uC350\uEBBF"+
-            "\uB3A6\uB9C9\uD6AB\uC351\uB7F4\uB7CA\uC352\uC353"+
-            "\uC354\uBCE7\uB7BE\uEBC6\uC355\uEBC7\uB0B9\uBFCF"+
-            "\uC356\uEBC5\uD3FD\uC357\uEBC8\uC358\uC359\uEBC9"+
-            "\uC35A\uC35B\uB7CE\uC35C\uEBC2\uEBC4\uC9F6\uD6D7"+
-            "\uD5CD\uD0B2\uEBCF\uCEB8\uEBD0\uC35D\uB5A8\uC35E"+
-            "\uC35F\uC360\uC361\uC362\uB1B3\uEBD2\uCCA5\uC363"+
-            "\uC364\uC365\uC366\uC367\uC368\uC369\uC5D6\uEBD3"+
-            "\uC36A\uEBD1\uC5DF\uEBCE\uCAA4\uEBD5\uB0FB\uC36B"+
-            "\uC36C\uBAFA\uC36D\uC36E\uD8B7\uF1E3\uC36F\uEBCA"+
-            "\uEBCB\uEBCC\uEBCD\uEBD6\uE6C0\uEBD9\uC370\uBFE8"+
-            "\uD2C8\uEBD7\uEBDC\uB8EC\uEBD8\uC371\uBDBA\uC372"+
-            "\uD0D8\uC373\uB0B7\uC374\uEBDD\uC4DC\uC375\uC376"+
-            "\uC377\uC378\uD6AC\uC379\uC37A\uC37B\uB4E0\uC37C"+
-            "\uC37D\uC2F6\uBCB9\uC37E\uC380\uEBDA\uEBDB\uD4E0"+
-            "\uC6EA\uC4D4\uEBDF\uC5A7\uD9F5\uC381\uB2B1\uC382"+
-            "\uEBE4\uC383\uBDC5\uC384\uC385\uC386\uEBE2\uC387"+
-            "\uC388\uC389\uC38A\uC38B\uC38C\uC38D\uC38E\uC38F"+
-            "\uC390\uC391\uC392\uC393\uEBE3\uC394\uC395\uB8AC"+
-            "\uC396\uCDD1\uEBE5\uC397\uC398\uC399\uEBE1\uC39A"+
-            "\uC1B3\uC39B\uC39C\uC39D\uC39E\uC39F\uC6A2\uC3A0"+
-            "\uC440\uC441\uC442\uC443\uC444\uC445\uCCF3\uC446"+
-            "\uEBE6\uC447\uC0B0\uD2B8\uEBE7\uC448\uC449\uC44A"+
-            "\uB8AF\uB8AD\uC44B\uEBE8\uC7BB\uCDF3\uC44C\uC44D"+
-            "\uC44E\uEBEA\uEBEB\uC44F\uC450\uC451\uC452\uC453"+
-            "\uEBED\uC454\uC455\uC456\uC457\uD0C8\uC458\uEBF2"+
-            "\uC459\uEBEE\uC45A\uC45B\uC45C\uEBF1\uC8F9\uC45D"+
-            "\uD1FC\uEBEC\uC45E\uC45F\uEBE9\uC460\uC461\uC462"+
-            "\uC463\uB8B9\uCFD9\uC4E5\uEBEF\uEBF0\uCCDA\uCDC8"+
-            "\uB0F2\uC464\uEBF6\uC465\uC466\uC467\uC468\uC469"+
-            "\uEBF5\uC46A\uB2B2\uC46B\uC46C\uC46D\uC46E\uB8E0"+
-            "\uC46F\uEBF7\uC470\uC471\uC472\uC473\uC474\uC475"+
-            "\uB1EC\uC476\uC477\uCCC5\uC4A4\uCFA5\uC478\uC479"+
-            "\uC47A\uC47B\uC47C\uEBF9\uC47D\uC47E\uECA2\uC480"+
-            "\uC5F2\uC481\uEBFA\uC482\uC483\uC484\uC485\uC486"+
-            "\uC487\uC488\uC489\uC9C5\uC48A\uC48B\uC48C\uC48D"+
-            "\uC48E\uC48F\uE2DF\uEBFE\uC490\uC491\uC492\uC493"+
-            "\uCDCE\uECA1\uB1DB\uD3B7\uC494\uC495\uD2DC\uC496"+
-            "\uC497\uC498\uEBFD\uC499\uEBFB\uC49A\uC49B\uC49C"+
-            "\uC49D\uC49E\uC49F\uC4A0\uC540\uC541\uC542\uC543"+
-            "\uC544\uC545\uC546\uC547\uC548\uC549\uC54A\uC54B"+
-            "\uC54C\uC54D\uC54E\uB3BC\uC54F\uC550\uC551\uEAB0"+
-            "\uC552\uC553\uD7D4\uC554\uF4AB\uB3F4\uC555\uC556"+
-            "\uC557\uC558\uC559\uD6C1\uD6C2\uC55A\uC55B\uC55C"+
-            "\uC55D\uC55E\uC55F\uD5E9\uBECA\uC560\uF4A7\uC561"+
-            "\uD2A8\uF4A8\uF4A9\uC562\uF4AA\uBECB\uD3DF\uC563"+
-            "\uC564\uC565\uC566\uC567\uC9E0\uC9E1\uC568\uC569"+
-            "\uF3C2\uC56A\uCAE6\uC56B\uCCF2\uC56C\uC56D\uC56E"+
-            "\uC56F\uC570\uC571\uE2B6\uCBB4\uC572\uCEE8\uD6DB"+
-            "\uC573\uF4AD\uF4AE\uF4AF\uC574\uC575\uC576\uC577"+
-            "\uF4B2\uC578\uBABD\uF4B3\uB0E3\uF4B0\uC579\uF4B1"+
-            "\uBDA2\uB2D5\uC57A\uF4B6\uF4B7\uB6E6\uB2B0\uCFCF"+
-            "\uF4B4\uB4AC\uC57B\uF4B5\uC57C\uC57D\uF4B8\uC57E"+
-            "\uC580\uC581\uC582\uC583\uF4B9\uC584\uC585\uCDA7"+
-            "\uC586\uF4BA\uC587\uF4BB\uC588\uC589\uC58A\uF4BC"+
-            "\uC58B\uC58C\uC58D\uC58E\uC58F\uC590\uC591\uC592"+
-            "\uCBD2\uC593\uF4BD\uC594\uC595\uC596\uC597\uF4BE"+
-            "\uC598\uC599\uC59A\uC59B\uC59C\uC59D\uC59E\uC59F"+
-            "\uF4BF\uC5A0\uC640\uC641\uC642\uC643\uF4DE\uC1BC"+
-            "\uBCE8\uC644\uC9AB\uD1DE\uE5F5\uC645\uC646\uC647"+
-            "\uC648\uDCB3\uD2D5\uC649\uC64A\uDCB4\uB0AC\uDCB5"+
-            "\uC64B\uC64C\uBDDA\uC64D\uDCB9\uC64E\uC64F\uC650"+
-            "\uD8C2\uC651\uDCB7\uD3F3\uC652\uC9D6\uDCBA\uDCB6"+
-            "\uC653\uDCBB\uC3A2\uC654\uC655\uC656\uC657\uDCBC"+
-            "\uDCC5\uDCBD\uC658\uC659\uCEDF\uD6A5\uC65A\uDCCF"+
-            "\uC65B\uDCCD\uC65C\uC65D\uDCD2\uBDE6\uC2AB\uC65E"+
-            "\uDCB8\uDCCB\uDCCE\uDCBE\uB7D2\uB0C5\uDCC7\uD0BE"+
-            "\uDCC1\uBBA8\uC65F\uB7BC\uDCCC\uC660\uC661\uDCC6"+
-            "\uDCBF\uC7DB\uC662\uC663\uC664\uD1BF\uDCC0\uC665"+
-            "\uC666\uDCCA\uC667\uC668\uDCD0\uC669\uC66A\uCEAD"+
-            "\uDCC2\uC66B\uDCC3\uDCC8\uDCC9\uB2D4\uDCD1\uCBD5"+
-            "\uC66C\uD4B7\uDCDB\uDCDF\uCCA6\uDCE6\uC66D\uC3E7"+
-            "\uDCDC\uC66E\uC66F\uBFC1\uDCD9\uC670\uB0FA\uB9B6"+
-            "\uDCE5\uDCD3\uC671\uDCC4\uDCD6\uC8F4\uBFE0\uC672"+
-            "\uC673\uC674\uC675\uC9BB\uC676\uC677\uC678\uB1BD"+
-            "\uC679\uD3A2\uC67A\uC67B\uDCDA\uC67C\uC67D\uDCD5"+
-            "\uC67E\uC6BB\uC680\uDCDE\uC681\uC682\uC683\uC684"+
-            "\uC685\uD7C2\uC3AF\uB7B6\uC7D1\uC3A9\uDCE2\uDCD8"+
-            "\uDCEB\uDCD4\uC686\uC687\uDCDD\uC688\uBEA5\uDCD7"+
-            "\uC689\uDCE0\uC68A\uC68B\uDCE3\uDCE4\uC68C\uDCF8"+
-            "\uC68D\uC68E\uDCE1\uDDA2\uDCE7\uC68F\uC690\uC691"+
-            "\uC692\uC693\uC694\uC695\uC696\uC697\uC698\uBCEB"+
-            "\uB4C4\uC699\uC69A\uC3A3\uB2E7\uDCFA\uC69B\uDCF2"+
-            "\uC69C\uDCEF\uC69D\uDCFC\uDCEE\uD2F0\uB2E8\uC69E"+
-            "\uC8D7\uC8E3\uDCFB\uC69F\uDCED\uC6A0\uC740\uC741"+
-            "\uDCF7\uC742\uC743\uDCF5\uC744\uC745\uBEA3\uDCF4"+
-            "\uC746\uB2DD\uC747\uC748\uC749\uC74A\uC74B\uDCF3"+
-            "\uBCF6\uDCE8\uBBC4\uC74C\uC0F3\uC74D\uC74E\uC74F"+
-            "\uC750\uC751\uBCD4\uDCE9\uDCEA\uC752\uDCF1\uDCF6"+
-            "\uDCF9\uB5B4\uC753\uC8D9\uBBE7\uDCFE\uDCFD\uD3AB"+
-            "\uDDA1\uDDA3\uDDA5\uD2F1\uDDA4\uDDA6\uDDA7\uD2A9"+
-            "\uC754\uC755\uC756\uC757\uC758\uC759\uC75A\uBAC9"+
-            "\uDDA9\uC75B\uC75C\uDDB6\uDDB1\uDDB4\uC75D\uC75E"+
-            "\uC75F\uC760\uC761\uC762\uC763\uDDB0\uC6CE\uC764"+
-            "\uC765\uC0F2\uC766\uC767\uC768\uC769\uC9AF\uC76A"+
-            "\uC76B\uC76C\uDCEC\uDDAE\uC76D\uC76E\uC76F\uC770"+
-            "\uDDB7\uC771\uC772\uDCF0\uDDAF\uC773\uDDB8\uC774"+
-            "\uDDAC\uC775\uC776\uC777\uC778\uC779\uC77A\uC77B"+
-            "\uDDB9\uDDB3\uDDAD\uC4AA\uC77C\uC77D\uC77E\uC780"+
-            "\uDDA8\uC0B3\uC1AB\uDDAA\uDDAB\uC781\uDDB2\uBBF1"+
-            "\uDDB5\uD3A8\uDDBA\uC782\uDDBB\uC3A7\uC783\uC784"+
-            "\uDDD2\uDDBC\uC785\uC786\uC787\uDDD1\uC788\uB9BD"+
-            "\uC789\uC78A\uBED5\uC78B\uBEFA\uC78C\uC78D\uBACA"+
-            "\uC78E\uC78F\uC790\uC791\uDDCA\uC792\uDDC5\uC793"+
-            "\uDDBF\uC794\uC795\uC796\uB2CB\uDDC3\uC797\uDDCB"+
-            "\uB2A4\uDDD5\uC798\uC799\uC79A\uDDBE\uC79B\uC79C"+
-            "\uC79D\uC6D0\uDDD0\uC79E\uC79F\uC7A0\uC840\uC841"+
-            "\uDDD4\uC1E2\uB7C6\uC842\uC843\uC844\uC845\uC846"+
-            "\uDDCE\uDDCF\uC847\uC848\uC849\uDDC4\uC84A\uC84B"+
-            "\uC84C\uDDBD\uC84D\uDDCD\uCCD1\uC84E\uDDC9\uC84F"+
-            "\uC850\uC851\uC852\uDDC2\uC3C8\uC6BC\uCEAE\uDDCC"+
-            "\uC853\uDDC8\uC854\uC855\uC856\uC857\uC858\uC859"+
-            "\uDDC1\uC85A\uC85B\uC85C\uDDC6\uC2DC\uC85D\uC85E"+
-            "\uC85F\uC860\uC861\uC862\uD3A9\uD3AA\uDDD3\uCFF4"+
-            "\uC8F8\uC863\uC864\uC865\uC866\uC867\uC868\uC869"+
-            "\uC86A\uDDE6\uC86B\uC86C\uC86D\uC86E\uC86F\uC870"+
-            "\uDDC7\uC871\uC872\uC873\uDDE0\uC2E4\uC874\uC875"+
-            "\uC876\uC877\uC878\uC879\uC87A\uC87B\uDDE1\uC87C"+
-            "\uC87D\uC87E\uC880\uC881\uC882\uC883\uC884\uC885"+
-            "\uC886\uDDD7\uC887\uC888\uC889\uC88A\uC88B\uD6F8"+
-            "\uC88C\uDDD9\uDDD8\uB8F0\uDDD6\uC88D\uC88E\uC88F"+
-            "\uC890\uC6CF\uC891\uB6AD\uC892\uC893\uC894\uC895"+
-            "\uC896\uDDE2\uC897\uBAF9\uD4E1\uDDE7\uC898\uC899"+
-            "\uC89A\uB4D0\uC89B\uDDDA\uC89C\uBFFB\uDDE3\uC89D"+
-            "\uDDDF\uC89E\uDDDD\uC89F\uC8A0\uC940\uC941\uC942"+
-            "\uC943\uC944\uB5D9\uC945\uC946\uC947\uC948\uDDDB"+
-            "\uDDDC\uDDDE\uC949\uBDAF\uDDE4\uC94A\uDDE5\uC94B"+
-            "\uC94C\uC94D\uC94E\uC94F\uC950\uC951\uC952\uDDF5"+
-            "\uC953\uC3C9\uC954\uC955\uCBE2\uC956\uC957\uC958"+
-            "\uC959\uDDF2\uC95A\uC95B\uC95C\uC95D\uC95E\uC95F"+
-            "\uC960\uC961\uC962\uC963\uC964\uC965\uC966\uD8E1"+
-            "\uC967\uC968\uC6D1\uC969\uDDF4\uC96A\uC96B\uC96C"+
-            "\uD5F4\uDDF3\uDDF0\uC96D\uC96E\uDDEC\uC96F\uDDEF"+
-            "\uC970\uDDE8\uC971\uC972\uD0EE\uC973\uC974\uC975"+
-            "\uC976\uC8D8\uDDEE\uC977\uC978\uDDE9\uC979\uC97A"+
-            "\uDDEA\uCBF2\uC97B\uDDED\uC97C\uC97D\uB1CD\uC97E"+
-            "\uC980\uC981\uC982\uC983\uC984\uC0B6\uC985\uBCBB"+
-            "\uDDF1\uC986\uC987\uDDF7\uC988\uDDF6\uDDEB\uC989"+
-            "\uC98A\uC98B\uC98C\uC98D\uC5EE\uC98E\uC98F\uC990"+
-            "\uDDFB\uC991\uC992\uC993\uC994\uC995\uC996\uC997"+
-            "\uC998\uC999\uC99A\uC99B\uDEA4\uC99C\uC99D\uDEA3"+
-            "\uC99E\uC99F\uC9A0\uCA40\uCA41\uCA42\uCA43\uCA44"+
-            "\uCA45\uCA46\uCA47\uCA48\uDDF8\uCA49\uCA4A\uCA4B"+
-            "\uCA4C\uC3EF\uCA4D\uC2FB\uCA4E\uCA4F\uCA50\uD5E1"+
-            "\uCA51\uCA52\uCEB5\uCA53\uCA54\uCA55\uCA56\uDDFD"+
-            "\uCA57\uB2CC\uCA58\uCA59\uCA5A\uCA5B\uCA5C\uCA5D"+
-            "\uCA5E\uCA5F\uCA60\uC4E8\uCADF\uCA61\uCA62\uCA63"+
-            "\uCA64\uCA65\uCA66\uCA67\uCA68\uCA69\uCA6A\uC7BE"+
-            "\uDDFA\uDDFC\uDDFE\uDEA2\uB0AA\uB1CE\uCA6B\uCA6C"+
-            "\uCA6D\uCA6E\uCA6F\uDEAC\uCA70\uCA71\uCA72\uCA73"+
-            "\uDEA6\uBDB6\uC8EF\uCA74\uCA75\uCA76\uCA77\uCA78"+
-            "\uCA79\uCA7A\uCA7B\uCA7C\uCA7D\uCA7E\uDEA1\uCA80"+
-            "\uCA81\uDEA5\uCA82\uCA83\uCA84\uCA85\uDEA9\uCA86"+
-            "\uCA87\uCA88\uCA89\uCA8A\uDEA8\uCA8B\uCA8C\uCA8D"+
-            "\uDEA7\uCA8E\uCA8F\uCA90\uCA91\uCA92\uCA93\uCA94"+
-            "\uCA95\uCA96\uDEAD\uCA97\uD4CC\uCA98\uCA99\uCA9A"+
-            "\uCA9B\uDEB3\uDEAA\uDEAE\uCA9C\uCA9D\uC0D9\uCA9E"+
-            "\uCA9F\uCAA0\uCB40\uCB41\uB1A1\uDEB6\uCB42\uDEB1"+
-            "\uCB43\uCB44\uCB45\uCB46\uCB47\uCB48\uCB49\uDEB2"+
-            "\uCB4A\uCB4B\uCB4C\uCB4D\uCB4E\uCB4F\uCB50\uCB51"+
-            "\uCB52\uCB53\uCB54\uD1A6\uDEB5\uCB55\uCB56\uCB57"+
-            "\uCB58\uCB59\uCB5A\uCB5B\uDEAF\uCB5C\uCB5D\uCB5E"+
-            "\uDEB0\uCB5F\uD0BD\uCB60\uCB61\uCB62\uDEB4\uCAED"+
-            "\uDEB9\uCB63\uCB64\uCB65\uCB66\uCB67\uCB68\uDEB8"+
-            "\uCB69\uDEB7\uCB6A\uCB6B\uCB6C\uCB6D\uCB6E\uCB6F"+
-            "\uCB70\uDEBB\uCB71\uCB72\uCB73\uCB74\uCB75\uCB76"+
-            "\uCB77\uBDE5\uCB78\uCB79\uCB7A\uCB7B\uCB7C\uB2D8"+
-            "\uC3EA\uCB7D\uCB7E\uDEBA\uCB80\uC5BA\uCB81\uCB82"+
-            "\uCB83\uCB84\uCB85\uCB86\uDEBC\uCB87\uCB88\uCB89"+
-            "\uCB8A\uCB8B\uCB8C\uCB8D\uCCD9\uCB8E\uCB8F\uCB90"+
-            "\uCB91\uB7AA\uCB92\uCB93\uCB94\uCB95\uCB96\uCB97"+
-            "\uCB98\uCB99\uCB9A\uCB9B\uCB9C\uCB9D\uCB9E\uCB9F"+
-            "\uCBA0\uCC40\uCC41\uD4E5\uCC42\uCC43\uCC44\uDEBD"+
-            "\uCC45\uCC46\uCC47\uCC48\uCC49\uDEBF\uCC4A\uCC4B"+
-            "\uCC4C\uCC4D\uCC4E\uCC4F\uCC50\uCC51\uCC52\uCC53"+
-            "\uCC54\uC4A2\uCC55\uCC56\uCC57\uCC58\uDEC1\uCC59"+
-            "\uCC5A\uCC5B\uCC5C\uCC5D\uCC5E\uCC5F\uCC60\uCC61"+
-            "\uCC62\uCC63\uCC64\uCC65\uCC66\uCC67\uCC68\uDEBE"+
-            "\uCC69\uDEC0\uCC6A\uCC6B\uCC6C\uCC6D\uCC6E\uCC6F"+
-            "\uCC70\uCC71\uCC72\uCC73\uCC74\uCC75\uCC76\uCC77"+
-            "\uD5BA\uCC78\uCC79\uCC7A\uDEC2\uCC7B\uCC7C\uCC7D"+
-            "\uCC7E\uCC80\uCC81\uCC82\uCC83\uCC84\uCC85\uCC86"+
-            "\uCC87\uCC88\uCC89\uCC8A\uCC8B\uF2AE\uBBA2\uC2B2"+
-            "\uC5B0\uC2C7\uCC8C\uCC8D\uF2AF\uCC8E\uCC8F\uCC90"+
-            "\uCC91\uCC92\uD0E9\uCC93\uCC94\uCC95\uD3DD\uCC96"+
-            "\uCC97\uCC98\uEBBD\uCC99\uCC9A\uCC9B\uCC9C\uCC9D"+
-            "\uCC9E\uCC9F\uCCA0\uB3E6\uF2B0\uCD40\uF2B1\uCD41"+
-            "\uCD42\uCAAD\uCD43\uCD44\uCD45\uCD46\uCD47\uCD48"+
-            "\uCD49\uBAE7\uF2B3\uF2B5\uF2B4\uCBE4\uCFBA\uF2B2"+
-            "\uCAB4\uD2CF\uC2EC\uCD4A\uCD4B\uCD4C\uCD4D\uCD4E"+
-            "\uCD4F\uCD50\uCEC3\uF2B8\uB0F6\uF2B7\uCD51\uCD52"+
-            "\uCD53\uCD54\uCD55\uF2BE\uCD56\uB2CF\uCD57\uCD58"+
-            "\uCD59\uCD5A\uCD5B\uCD5C\uD1C1\uF2BA\uCD5D\uCD5E"+
-            "\uCD5F\uCD60\uCD61\uF2BC\uD4E9\uCD62\uCD63\uF2BB"+
-            "\uF2B6\uF2BF\uF2BD\uCD64\uF2B9\uCD65\uCD66\uF2C7"+
-            "\uF2C4\uF2C6\uCD67\uCD68\uF2CA\uF2C2\uF2C0\uCD69"+
-            "\uCD6A\uCD6B\uF2C5\uCD6C\uCD6D\uCD6E\uCD6F\uCD70"+
-            "\uD6FB\uCD71\uCD72\uCD73\uF2C1\uCD74\uC7F9\uC9DF"+
-            "\uCD75\uF2C8\uB9C6\uB5B0\uCD76\uCD77\uF2C3\uF2C9"+
-            "\uF2D0\uF2D6\uCD78\uCD79\uBBD7\uCD7A\uCD7B\uCD7C"+
-            "\uF2D5\uCDDC\uCD7D\uD6EB\uCD7E\uCD80\uF2D2\uF2D4"+
-            "\uCD81\uCD82\uCD83\uCD84\uB8F2\uCD85\uCD86\uCD87"+
-            "\uCD88\uF2CB\uCD89\uCD8A\uCD8B\uF2CE\uC2F9\uCD8C"+
-            "\uD5DD\uF2CC\uF2CD\uF2CF\uF2D3\uCD8D\uCD8E\uCD8F"+
-            "\uF2D9\uD3BC\uCD90\uCD91\uCD92\uCD93\uB6EA\uCD94"+
-            "\uCAF1\uCD95\uB7E4\uF2D7\uCD96\uCD97\uCD98\uF2D8"+
-            "\uF2DA\uF2DD\uF2DB\uCD99\uCD9A\uF2DC\uCD9B\uCD9C"+
-            "\uCD9D\uCD9E\uD1D1\uF2D1\uCD9F\uCDC9\uCDA0\uCECF"+
-            "\uD6A9\uCE40\uF2E3\uCE41\uC3DB\uCE42\uF2E0\uCE43"+
-            "\uCE44\uC0AF\uF2EC\uF2DE\uCE45\uF2E1\uCE46\uCE47"+
-            "\uCE48\uF2E8\uCE49\uCE4A\uCE4B\uCE4C\uF2E2\uCE4D"+
-            "\uCE4E\uF2E7\uCE4F\uCE50\uF2E6\uCE51\uCE52\uF2E9"+
-            "\uCE53\uCE54\uCE55\uF2DF\uCE56\uCE57\uF2E4\uF2EA"+
-            "\uCE58\uCE59\uCE5A\uCE5B\uCE5C\uCE5D\uCE5E\uD3AC"+
-            "\uF2E5\uB2F5\uCE5F\uCE60\uF2F2\uCE61\uD0AB\uCE62"+
-            "\uCE63\uCE64\uCE65\uF2F5\uCE66\uCE67\uCE68\uBBC8"+
-            "\uCE69\uF2F9\uCE6A\uCE6B\uCE6C\uCE6D\uCE6E\uCE6F"+
-            "\uF2F0\uCE70\uCE71\uF2F6\uF2F8\uF2FA\uCE72\uCE73"+
-            "\uCE74\uCE75\uCE76\uCE77\uCE78\uCE79\uF2F3\uCE7A"+
-            "\uF2F1\uCE7B\uCE7C\uCE7D\uBAFB\uCE7E\uB5FB\uCE80"+
-            "\uCE81\uCE82\uCE83\uF2EF\uF2F7\uF2ED\uF2EE\uCE84"+
-            "\uCE85\uCE86\uF2EB\uF3A6\uCE87\uF3A3\uCE88\uCE89"+
-            "\uF3A2\uCE8A\uCE8B\uF2F4\uCE8C\uC8DA\uCE8D\uCE8E"+
-            "\uCE8F\uCE90\uCE91\uF2FB\uCE92\uCE93\uCE94\uF3A5"+
-            "\uCE95\uCE96\uCE97\uCE98\uCE99\uCE9A\uCE9B\uC3F8"+
-            "\uCE9C\uCE9D\uCE9E\uCE9F\uCEA0\uCF40\uCF41\uCF42"+
-            "\uF2FD\uCF43\uCF44\uF3A7\uF3A9\uF3A4\uCF45\uF2FC"+
-            "\uCF46\uCF47\uCF48\uF3AB\uCF49\uF3AA\uCF4A\uCF4B"+
-            "\uCF4C\uCF4D\uC2DD\uCF4E\uCF4F\uF3AE\uCF50\uCF51"+
-            "\uF3B0\uCF52\uCF53\uCF54\uCF55\uCF56\uF3A1\uCF57"+
-            "\uCF58\uCF59\uF3B1\uF3AC\uCF5A\uCF5B\uCF5C\uCF5D"+
-            "\uCF5E\uF3AF\uF2FE\uF3AD\uCF5F\uCF60\uCF61\uCF62"+
-            "\uCF63\uCF64\uCF65\uF3B2\uCF66\uCF67\uCF68\uCF69"+
-            "\uF3B4\uCF6A\uCF6B\uCF6C\uCF6D\uF3A8\uCF6E\uCF6F"+
-            "\uCF70\uCF71\uF3B3\uCF72\uCF73\uCF74\uF3B5\uCF75"+
-            "\uCF76\uCF77\uCF78\uCF79\uCF7A\uCF7B\uCF7C\uCF7D"+
-            "\uCF7E\uD0B7\uCF80\uCF81\uCF82\uCF83\uF3B8\uCF84"+
-            "\uCF85\uCF86\uCF87\uD9F9\uCF88\uCF89\uCF8A\uCF8B"+
-            "\uCF8C\uCF8D\uF3B9\uCF8E\uCF8F\uCF90\uCF91\uCF92"+
-            "\uCF93\uCF94\uCF95\uF3B7\uCF96\uC8E4\uF3B6\uCF97"+
-            "\uCF98\uCF99\uCF9A\uF3BA\uCF9B\uCF9C\uCF9D\uCF9E"+
-            "\uCF9F\uF3BB\uB4C0\uCFA0\uD040\uD041\uD042\uD043"+
-            "\uD044\uD045\uD046\uD047\uD048\uD049\uD04A\uD04B"+
-            "\uD04C\uD04D\uEEC3\uD04E\uD04F\uD050\uD051\uD052"+
-            "\uD053\uF3BC\uD054\uD055\uF3BD\uD056\uD057\uD058"+
-            "\uD1AA\uD059\uD05A\uD05B\uF4AC\uD0C6\uD05C\uD05D"+
-            "\uD05E\uD05F\uD060\uD061\uD0D0\uD1DC\uD062\uD063"+
-            "\uD064\uD065\uD066\uD067\uCFCE\uD068\uD069\uBDD6"+
-            "\uD06A\uD1C3\uD06B\uD06C\uD06D\uD06E\uD06F\uD070"+
-            "\uD071\uBAE2\uE1E9\uD2C2\uF1C2\uB2B9\uD072\uD073"+
-            "\uB1ED\uF1C3\uD074\uC9C0\uB3C4\uD075\uD9F2\uD076"+
-            "\uCBA5\uD077\uF1C4\uD078\uD079\uD07A\uD07B\uD6D4"+
-            "\uD07C\uD07D\uD07E\uD080\uD081\uF1C5\uF4C0\uF1C6"+
-            "\uD082\uD4AC\uF1C7\uD083\uB0C0\uF4C1\uD084\uD085"+
-            "\uF4C2\uD086\uD087\uB4FC\uD088\uC5DB\uD089\uD08A"+
-            "\uD08B\uD08C\uCCBB\uD08D\uD08E\uD08F\uD0E4\uD090"+
-            "\uD091\uD092\uD093\uD094\uCDE0\uD095\uD096\uD097"+
-            "\uD098\uD099\uF1C8\uD09A\uD9F3\uD09B\uD09C\uD09D"+
-            "\uD09E\uD09F\uD0A0\uB1BB\uD140\uCFAE\uD141\uD142"+
-            "\uD143\uB8A4\uD144\uD145\uD146\uD147\uD148\uF1CA"+
-            "\uD149\uD14A\uD14B\uD14C\uF1CB\uD14D\uD14E\uD14F"+
-            "\uD150\uB2C3\uC1D1\uD151\uD152\uD7B0\uF1C9\uD153"+
-            "\uD154\uF1CC\uD155\uD156\uD157\uD158\uF1CE\uD159"+
-            "\uD15A\uD15B\uD9F6\uD15C\uD2E1\uD4A3\uD15D\uD15E"+
-            "\uF4C3\uC8B9\uD15F\uD160\uD161\uD162\uD163\uF4C4"+
-            "\uD164\uD165\uF1CD\uF1CF\uBFE3\uF1D0\uD166\uD167"+
-            "\uF1D4\uD168\uD169\uD16A\uD16B\uD16C\uD16D\uD16E"+
-            "\uF1D6\uF1D1\uD16F\uC9D1\uC5E1\uD170\uD171\uD172"+
-            "\uC2E3\uB9FC\uD173\uD174\uF1D3\uD175\uF1D5\uD176"+
-            "\uD177\uD178\uB9D3\uD179\uD17A\uD17B\uD17C\uD17D"+
-            "\uD17E\uD180\uF1DB\uD181\uD182\uD183\uD184\uD185"+
-            "\uBAD6\uD186\uB0FD\uF1D9\uD187\uD188\uD189\uD18A"+
-            "\uD18B\uF1D8\uF1D2\uF1DA\uD18C\uD18D\uD18E\uD18F"+
-            "\uD190\uF1D7\uD191\uD192\uD193\uC8EC\uD194\uD195"+
-            "\uD196\uD197\uCDCA\uF1DD\uD198\uD199\uD19A\uD19B"+
-            "\uE5BD\uD19C\uD19D\uD19E\uF1DC\uD19F\uF1DE\uD1A0"+
-            "\uD240\uD241\uD242\uD243\uD244\uD245\uD246\uD247"+
-            "\uD248\uF1DF\uD249\uD24A\uCFE5\uD24B\uD24C\uD24D"+
-            "\uD24E\uD24F\uD250\uD251\uD252\uD253\uD254\uD255"+
-            "\uD256\uD257\uD258\uD259\uD25A\uD25B\uD25C\uD25D"+
-            "\uD25E\uD25F\uD260\uD261\uD262\uD263\uF4C5\uBDF3"+
-            "\uD264\uD265\uD266\uD267\uD268\uD269\uF1E0\uD26A"+
-            "\uD26B\uD26C\uD26D\uD26E\uD26F\uD270\uD271\uD272"+
-            "\uD273\uD274\uD275\uD276\uD277\uD278\uD279\uD27A"+
-            "\uD27B\uD27C\uD27D\uF1E1\uD27E\uD280\uD281\uCEF7"+
-            "\uD282\uD2AA\uD283\uF1FB\uD284\uD285\uB8B2\uD286"+
-            "\uD287\uD288\uD289\uD28A\uD28B\uD28C\uD28D\uD28E"+
-            "\uD28F\uD290\uD291\uD292\uD293\uD294\uD295\uD296"+
-            "\uD297\uD298\uD299\uD29A\uD29B\uD29C\uD29D\uD29E"+
-            "\uD29F\uD2A0\uD340\uD341\uD342\uD343\uD344\uD345"+
-            "\uD346\uD347\uD348\uD349\uD34A\uD34B\uD34C\uD34D"+
-            "\uD34E\uD34F\uD350\uD351\uD352\uD353\uD354\uD355"+
-            "\uD356\uD357\uD358\uD359\uD35A\uD35B\uD35C\uD35D"+
-            "\uD35E\uBCFB\uB9DB\uD35F\uB9E6\uC3D9\uCAD3\uEAE8"+
-            "\uC0C0\uBEF5\uEAE9\uEAEA\uEAEB\uD360\uEAEC\uEAED"+
-            "\uEAEE\uEAEF\uBDC7\uD361\uD362\uD363\uF5FB\uD364"+
-            "\uD365\uD366\uF5FD\uD367\uF5FE\uD368\uF5FC\uD369"+
-            "\uD36A\uD36B\uD36C\uBDE2\uD36D\uF6A1\uB4A5\uD36E"+
-            "\uD36F\uD370\uD371\uF6A2\uD372\uD373\uD374\uF6A3"+
-            "\uD375\uD376\uD377\uECB2\uD378\uD379\uD37A\uD37B"+
-            "\uD37C\uD37D\uD37E\uD380\uD381\uD382\uD383\uD384"+
-            "\uD1D4\uD385\uD386\uD387\uD388\uD389\uD38A\uD9EA"+
-            "\uD38B\uD38C\uD38D\uD38E\uD38F\uD390\uD391\uD392"+
-            "\uD393\uD394\uD395\uD396\uD397\uD398\uD399\uD39A"+
-            "\uD39B\uD39C\uD39D\uD39E\uD39F\uD3A0\uD440\uD441"+
-            "\uD442\uD443\uD444\uD445\uD446\uD447\uD448\uD449"+
-            "\uD44A\uD44B\uD44C\uD44D\uD44E\uD44F\uD450\uD451"+
-            "\uD452\uD453\uD454\uD455\uD456\uD457\uD458\uD459"+
-            "\uD45A\uD45B\uD45C\uD45D\uD45E\uD45F\uF6A4\uD460"+
-            "\uD461\uD462\uD463\uD464\uD465\uD466\uD467\uD468"+
-            "\uEEBA\uD469\uD46A\uD46B\uD46C\uD46D\uD46E\uD46F"+
-            "\uD470\uD471\uD472\uD473\uD474\uD475\uD476\uD477"+
-            "\uD478\uD479\uD47A\uD47B\uD47C\uD47D\uD47E\uD480"+
-            "\uD481\uD482\uD483\uD484\uD485\uD486\uD487\uD488"+
-            "\uD489\uD48A\uD48B\uD48C\uD48D\uD48E\uD48F\uD490"+
-            "\uD491\uD492\uD493\uD494\uD495\uD496\uD497\uD498"+
-            "\uD499\uD5B2\uD49A\uD49B\uD49C\uD49D\uD49E\uD49F"+
-            "\uD4A0\uD540\uD541\uD542\uD543\uD544\uD545\uD546"+
-            "\uD547\uD3FE\uCCDC\uD548\uD549\uD54A\uD54B\uD54C"+
-            "\uD54D\uD54E\uD54F\uCAC4\uD550\uD551\uD552\uD553"+
-            "\uD554\uD555\uD556\uD557\uD558\uD559\uD55A\uD55B"+
-            "\uD55C\uD55D\uD55E\uD55F\uD560\uD561\uD562\uD563"+
-            "\uD564\uD565\uD566\uD567\uD568\uD569\uD56A\uD56B"+
-            "\uD56C\uD56D\uD56E\uD56F\uD570\uD571\uD572\uD573"+
-            "\uD574\uD575\uD576\uD577\uD578\uD579\uD57A\uD57B"+
-            "\uD57C\uD57D\uD57E\uD580\uD581\uD582\uD583\uD584"+
-            "\uD585\uD586\uD587\uD588\uD589\uD58A\uD58B\uD58C"+
-            "\uD58D\uD58E\uD58F\uD590\uD591\uD592\uD593\uD594"+
-            "\uD595\uD596\uD597\uD598\uD599\uD59A\uD59B\uD59C"+
-            "\uD59D\uD59E\uD59F\uD5A0\uD640\uD641\uD642\uD643"+
-            "\uD644\uD645\uD646\uD647\uD648\uD649\uD64A\uD64B"+
-            "\uD64C\uD64D\uD64E\uD64F\uD650\uD651\uD652\uD653"+
-            "\uD654\uD655\uD656\uD657\uD658\uD659\uD65A\uD65B";
-
-        private final static String innerIndex6=
-            "\uD65C\uD65D\uD65E\uD65F\uD660\uD661\uD662\uE5C0"+
-            "\uD663\uD664\uD665\uD666\uD667\uD668\uD669\uD66A"+
-            "\uD66B\uD66C\uD66D\uD66E\uD66F\uD670\uD671\uD672"+
-            "\uD673\uD674\uD675\uD676\uD677\uD678\uD679\uD67A"+
-            "\uD67B\uD67C\uD67D\uD67E\uD680\uD681\uF6A5\uD682"+
-            "\uD683\uD684\uD685\uD686\uD687\uD688\uD689\uD68A"+
-            "\uD68B\uD68C\uD68D\uD68E\uD68F\uD690\uD691\uD692"+
-            "\uD693\uD694\uD695\uD696\uD697\uD698\uD699\uD69A"+
-            "\uD69B\uD69C\uD69D\uD69E\uD69F\uD6A0\uD740\uD741"+
-            "\uD742\uD743\uD744\uD745\uD746\uD747\uD748\uD749"+
-            "\uD74A\uD74B\uD74C\uD74D\uD74E\uD74F\uD750\uD751"+
-            "\uD752\uD753\uD754\uD755\uD756\uD757\uD758\uD759"+
-            "\uD75A\uD75B\uD75C\uD75D\uD75E\uD75F\uBEAF\uD760"+
-            "\uD761\uD762\uD763\uD764\uC6A9\uD765\uD766\uD767"+
-            "\uD768\uD769\uD76A\uD76B\uD76C\uD76D\uD76E\uD76F"+
-            "\uD770\uD771\uD772\uD773\uD774\uD775\uD776\uD777"+
-            "\uD778\uD779\uD77A\uD77B\uD77C\uD77D\uD77E\uD780"+
-            "\uD781\uD782\uD783\uD784\uD785\uD786\uD787\uD788"+
-            "\uD789\uD78A\uD78B\uD78C\uD78D\uD78E\uD78F\uD790"+
-            "\uD791\uD792\uD793\uD794\uD795\uD796\uD797\uD798"+
-            "\uDAA5\uBCC6\uB6A9\uB8BC\uC8CF\uBCA5\uDAA6\uDAA7"+
-            "\uCCD6\uC8C3\uDAA8\uC6FD\uD799\uD1B5\uD2E9\uD1B6"+
-            "\uBCC7\uD79A\uBDB2\uBBE4\uDAA9\uDAAA\uD1C8\uDAAB"+
-            "\uD0ED\uB6EF\uC2DB\uD79B\uCBCF\uB7ED\uC9E8\uB7C3"+
-            "\uBEF7\uD6A4\uDAAC\uDAAD\uC6C0\uD7E7\uCAB6\uD79C"+
-            "\uD5A9\uCBDF\uD5EF\uDAAE\uD6DF\uB4CA\uDAB0\uDAAF"+
-            "\uD79D\uD2EB\uDAB1\uDAB2\uDAB3\uCAD4\uDAB4\uCAAB"+
-            "\uDAB5\uDAB6\uB3CF\uD6EF\uDAB7\uBBB0\uB5AE\uDAB8"+
-            "\uDAB9\uB9EE\uD1AF\uD2E8\uDABA\uB8C3\uCFEA\uB2EF"+
-            "\uDABB\uDABC\uD79E\uBDEB\uCEDC\uD3EF\uDABD\uCEF3"+
-            "\uDABE\uD3D5\uBBE5\uDABF\uCBB5\uCBD0\uDAC0\uC7EB"+
-            "\uD6EE\uDAC1\uC5B5\uB6C1\uDAC2\uB7CC\uBFCE\uDAC3"+
-            "\uDAC4\uCBAD\uDAC5\uB5F7\uDAC6\uC1C2\uD7BB\uDAC7"+
-            "\uCCB8\uD79F\uD2EA\uC4B1\uDAC8\uB5FD\uBBD1\uDAC9"+
-            "\uD0B3\uDACA\uDACB\uCEBD\uDACC\uDACD\uDACE\uB2F7"+
-            "\uDAD1\uDACF\uD1E8\uDAD0\uC3D5\uDAD2\uD7A0\uDAD3"+
-            "\uDAD4\uDAD5\uD0BB\uD2A5\uB0F9\uDAD6\uC7AB\uDAD7"+
-            "\uBDF7\uC3A1\uDAD8\uDAD9\uC3FD\uCCB7\uDADA\uDADB"+
-            "\uC0BE\uC6D7\uDADC\uDADD\uC7B4\uDADE\uDADF\uB9C8"+
-            "\uD840\uD841\uD842\uD843\uD844\uD845\uD846\uD847"+
-            "\uD848\uBBED\uD849\uD84A\uD84B\uD84C\uB6B9\uF4F8"+
-            "\uD84D\uF4F9\uD84E\uD84F\uCDE3\uD850\uD851\uD852"+
-            "\uD853\uD854\uD855\uD856\uD857\uF5B9\uD858\uD859"+
-            "\uD85A\uD85B\uEBE0\uD85C\uD85D\uD85E\uD85F\uD860"+
-            "\uD861\uCFF3\uBBBF\uD862\uD863\uD864\uD865\uD866"+
-            "\uD867\uD868\uBAC0\uD4A5\uD869\uD86A\uD86B\uD86C"+
-            "\uD86D\uD86E\uD86F\uE1D9\uD870\uD871\uD872\uD873"+
-            "\uF5F4\uB1AA\uB2F2\uD874\uD875\uD876\uD877\uD878"+
-            "\uD879\uD87A\uF5F5\uD87B\uD87C\uF5F7\uD87D\uD87E"+
-            "\uD880\uBAD1\uF5F6\uD881\uC3B2\uD882\uD883\uD884"+
-            "\uD885\uD886\uD887\uD888\uF5F9\uD889\uD88A\uD88B"+
-            "\uF5F8\uD88C\uD88D\uD88E\uD88F\uD890\uD891\uD892"+
-            "\uD893\uD894\uD895\uD896\uD897\uD898\uD899\uD89A"+
-            "\uD89B\uD89C\uD89D\uD89E\uD89F\uD8A0\uD940\uD941"+
-            "\uD942\uD943\uD944\uD945\uD946\uD947\uD948\uD949"+
-            "\uD94A\uD94B\uD94C\uD94D\uD94E\uD94F\uD950\uD951"+
-            "\uD952\uD953\uD954\uD955\uD956\uD957\uD958\uD959"+
-            "\uD95A\uD95B\uD95C\uD95D\uD95E\uD95F\uD960\uD961"+
-            "\uD962\uD963\uD964\uD965\uD966\uD967\uD968\uD969"+
-            "\uD96A\uD96B\uD96C\uD96D\uD96E\uD96F\uD970\uD971"+
-            "\uD972\uD973\uD974\uD975\uD976\uD977\uD978\uD979"+
-            "\uD97A\uD97B\uD97C\uD97D\uD97E\uD980\uD981\uD982"+
-            "\uD983\uD984\uD985\uD986\uD987\uD988\uD989\uD98A"+
-            "\uD98B\uD98C\uD98D\uD98E\uD98F\uD990\uD991\uD992"+
-            "\uD993\uD994\uD995\uD996\uD997\uD998\uD999\uD99A"+
-            "\uD99B\uD99C\uD99D\uD99E\uD99F\uD9A0\uDA40\uDA41"+
-            "\uDA42\uDA43\uDA44\uDA45\uDA46\uDA47\uDA48\uDA49"+
-            "\uDA4A\uDA4B\uDA4C\uDA4D\uDA4E\uB1B4\uD5EA\uB8BA"+
-            "\uDA4F\uB9B1\uB2C6\uD4F0\uCFCD\uB0DC\uD5CB\uBBF5"+
-            "\uD6CA\uB7B7\uCCB0\uC6B6\uB1E1\uB9BA\uD6FC\uB9E1"+
-            "\uB7A1\uBCFA\uEADA\uEADB\uCCF9\uB9F3\uEADC\uB4FB"+
-            "\uC3B3\uB7D1\uBAD8\uEADD\uD4F4\uEADE\uBCD6\uBBDF"+
-            "\uEADF\uC1DE\uC2B8\uD4DF\uD7CA\uEAE0\uEAE1\uEAE4"+
-            "\uEAE2\uEAE3\uC9DE\uB8B3\uB6C4\uEAE5\uCAEA\uC9CD"+
-            "\uB4CD\uDA50\uDA51\uE2D9\uC5E2\uEAE6\uC0B5\uDA52"+
-            "\uD7B8\uEAE7\uD7AC\uC8FC\uD8D3\uD8CD\uD4DE\uDA53"+
-            "\uD4F9\uC9C4\uD3AE\uB8D3\uB3E0\uDA54\uC9E2\uF4F6"+
-            "\uDA55\uDA56\uDA57\uBAD5\uDA58\uF4F7\uDA59\uDA5A"+
-            "\uD7DF\uDA5B\uDA5C\uF4F1\uB8B0\uD5D4\uB8CF\uC6F0"+
-            "\uDA5D\uDA5E\uDA5F\uDA60\uDA61\uDA62\uDA63\uDA64"+
-            "\uDA65\uB3C3\uDA66\uDA67\uF4F2\uB3AC\uDA68\uDA69"+
-            "\uDA6A\uDA6B\uD4BD\uC7F7\uDA6C\uDA6D\uDA6E\uDA6F"+
-            "\uDA70\uF4F4\uDA71\uDA72\uF4F3\uDA73\uDA74\uDA75"+
-            "\uDA76\uDA77\uDA78\uDA79\uDA7A\uDA7B\uDA7C\uCCCB"+
-            "\uDA7D\uDA7E\uDA80\uC8A4\uDA81\uDA82\uDA83\uDA84"+
-            "\uDA85\uDA86\uDA87\uDA88\uDA89\uDA8A\uDA8B\uDA8C"+
-            "\uDA8D\uF4F5\uDA8E\uD7E3\uC5BF\uF5C0\uDA8F\uDA90"+
-            "\uF5BB\uDA91\uF5C3\uDA92\uF5C2\uDA93\uD6BA\uF5C1"+
-            "\uDA94\uDA95\uDA96\uD4BE\uF5C4\uDA97\uF5CC\uDA98"+
-            "\uDA99\uDA9A\uDA9B\uB0CF\uB5F8\uDA9C\uF5C9\uF5CA"+
-            "\uDA9D\uC5DC\uDA9E\uDA9F\uDAA0\uDB40\uF5C5\uF5C6"+
-            "\uDB41\uDB42\uF5C7\uF5CB\uDB43\uBEE0\uF5C8\uB8FA"+
-            "\uDB44\uDB45\uDB46\uF5D0\uF5D3\uDB47\uDB48\uDB49"+
-            "\uBFE7\uDB4A\uB9F2\uF5BC\uF5CD\uDB4B\uDB4C\uC2B7"+
-            "\uDB4D\uDB4E\uDB4F\uCCF8\uDB50\uBCF9\uDB51\uF5CE"+
-            "\uF5CF\uF5D1\uB6E5\uF5D2\uDB52\uF5D5\uDB53\uDB54"+
-            "\uDB55\uDB56\uDB57\uDB58\uDB59\uF5BD\uDB5A\uDB5B"+
-            "\uDB5C\uF5D4\uD3BB\uDB5D\uB3EC\uDB5E\uDB5F\uCCA4"+
-            "\uDB60\uDB61\uDB62\uDB63\uF5D6\uDB64\uDB65\uDB66"+
-            "\uDB67\uDB68\uDB69\uDB6A\uDB6B\uF5D7\uBEE1\uF5D8"+
-            "\uDB6C\uDB6D\uCCDF\uF5DB\uDB6E\uDB6F\uDB70\uDB71"+
-            "\uDB72\uB2C8\uD7D9\uDB73\uF5D9\uDB74\uF5DA\uF5DC"+
-            "\uDB75\uF5E2\uDB76\uDB77\uDB78\uF5E0\uDB79\uDB7A"+
-            "\uDB7B\uF5DF\uF5DD\uDB7C\uDB7D\uF5E1\uDB7E\uDB80"+
-            "\uF5DE\uF5E4\uF5E5\uDB81\uCCE3\uDB82\uDB83\uE5BF"+
-            "\uB5B8\uF5E3\uF5E8\uCCA3\uDB84\uDB85\uDB86\uDB87"+
-            "\uDB88\uF5E6\uF5E7\uDB89\uDB8A\uDB8B\uDB8C\uDB8D"+
-            "\uDB8E\uF5BE\uDB8F\uDB90\uDB91\uDB92\uDB93\uDB94"+
-            "\uDB95\uDB96\uDB97\uDB98\uDB99\uDB9A\uB1C4\uDB9B"+
-            "\uDB9C\uF5BF\uDB9D\uDB9E\uB5C5\uB2E4\uDB9F\uF5EC"+
-            "\uF5E9\uDBA0\uB6D7\uDC40\uF5ED\uDC41\uF5EA\uDC42"+
-            "\uDC43\uDC44\uDC45\uDC46\uF5EB\uDC47\uDC48\uB4DA"+
-            "\uDC49\uD4EA\uDC4A\uDC4B\uDC4C\uF5EE\uDC4D\uB3F9"+
-            "\uDC4E\uDC4F\uDC50\uDC51\uDC52\uDC53\uDC54\uF5EF"+
-            "\uF5F1\uDC55\uDC56\uDC57\uF5F0\uDC58\uDC59\uDC5A"+
-            "\uDC5B\uDC5C\uDC5D\uDC5E\uF5F2\uDC5F\uF5F3\uDC60"+
-            "\uDC61\uDC62\uDC63\uDC64\uDC65\uDC66\uDC67\uDC68"+
-            "\uDC69\uDC6A\uDC6B\uC9ED\uB9AA\uDC6C\uDC6D\uC7FB"+
-            "\uDC6E\uDC6F\uB6E3\uDC70\uDC71\uDC72\uDC73\uDC74"+
-            "\uDC75\uDC76\uCCC9\uDC77\uDC78\uDC79\uDC7A\uDC7B"+
-            "\uDC7C\uDC7D\uDC7E\uDC80\uDC81\uDC82\uDC83\uDC84"+
-            "\uDC85\uDC86\uDC87\uDC88\uDC89\uDC8A\uEAA6\uDC8B"+
-            "\uDC8C\uDC8D\uDC8E\uDC8F\uDC90\uDC91\uDC92\uDC93"+
-            "\uDC94\uDC95\uDC96\uDC97\uDC98\uDC99\uDC9A\uDC9B"+
-            "\uDC9C\uDC9D\uDC9E\uDC9F\uDCA0\uDD40\uDD41\uDD42"+
-            "\uDD43\uDD44\uDD45\uDD46\uDD47\uDD48\uDD49\uDD4A"+
-            "\uDD4B\uDD4C\uDD4D\uDD4E\uDD4F\uDD50\uDD51\uDD52"+
-            "\uDD53\uDD54\uDD55\uDD56\uDD57\uDD58\uDD59\uDD5A"+
-            "\uDD5B\uDD5C\uDD5D\uDD5E\uDD5F\uDD60\uDD61\uDD62"+
-            "\uDD63\uDD64\uDD65\uDD66\uDD67\uDD68\uDD69\uDD6A"+
-            "\uDD6B\uDD6C\uDD6D\uDD6E\uDD6F\uDD70\uDD71\uDD72"+
-            "\uDD73\uDD74\uDD75\uDD76\uDD77\uDD78\uDD79\uDD7A"+
-            "\uDD7B\uDD7C\uDD7D\uDD7E\uDD80\uDD81\uDD82\uDD83"+
-            "\uDD84\uDD85\uDD86\uDD87\uDD88\uDD89\uDD8A\uDD8B"+
-            "\uDD8C\uDD8D\uDD8E\uDD8F\uDD90\uDD91\uDD92\uDD93"+
-            "\uDD94\uDD95\uDD96\uDD97\uDD98\uDD99\uDD9A\uDD9B"+
-            "\uDD9C\uDD9D\uDD9E\uDD9F\uDDA0\uDE40\uDE41\uDE42"+
-            "\uDE43\uDE44\uDE45\uDE46\uDE47\uDE48\uDE49\uDE4A"+
-            "\uDE4B\uDE4C\uDE4D\uDE4E\uDE4F\uDE50\uDE51\uDE52"+
-            "\uDE53\uDE54\uDE55\uDE56\uDE57\uDE58\uDE59\uDE5A"+
-            "\uDE5B\uDE5C\uDE5D\uDE5E\uDE5F\uDE60\uB3B5\uD4FE"+
-            "\uB9EC\uD0F9\uDE61\uE9ED\uD7AA\uE9EE\uC2D6\uC8ED"+
-            "\uBAE4\uE9EF\uE9F0\uE9F1\uD6E1\uE9F2\uE9F3\uE9F5"+
-            "\uE9F4\uE9F6\uE9F7\uC7E1\uE9F8\uD4D8\uE9F9\uBDCE"+
-            "\uDE62\uE9FA\uE9FB\uBDCF\uE9FC\uB8A8\uC1BE\uE9FD"+
-            "\uB1B2\uBBD4\uB9F5\uE9FE\uDE63\uEAA1\uEAA2\uEAA3"+
-            "\uB7F8\uBCAD\uDE64\uCAE4\uE0CE\uD4AF\uCFBD\uD5B7"+
-            "\uEAA4\uD5DE\uEAA5\uD0C1\uB9BC\uDE65\uB4C7\uB1D9"+
-            "\uDE66\uDE67\uDE68\uC0B1\uDE69\uDE6A\uDE6B\uDE6C"+
-            "\uB1E6\uB1E7\uDE6D\uB1E8\uDE6E\uDE6F\uDE70\uDE71"+
-            "\uB3BD\uC8E8\uDE72\uDE73\uDE74\uDE75\uE5C1\uDE76"+
-            "\uDE77\uB1DF\uDE78\uDE79\uDE7A\uC1C9\uB4EF\uDE7B"+
-            "\uDE7C\uC7A8\uD3D8\uDE7D\uC6F9\uD1B8\uDE7E\uB9FD"+
-            "\uC2F5\uDE80\uDE81\uDE82\uDE83\uDE84\uD3AD\uDE85"+
-            "\uD4CB\uBDFC\uDE86\uE5C2\uB7B5\uE5C3\uDE87\uDE88"+
-            "\uBBB9\uD5E2\uDE89\uBDF8\uD4B6\uCEA5\uC1AC\uB3D9"+
-            "\uDE8A\uDE8B\uCCF6\uDE8C\uE5C6\uE5C4\uE5C8\uDE8D"+
-            "\uE5CA\uE5C7\uB5CF\uC6C8\uDE8E\uB5FC\uE5C5\uDE8F"+
-            "\uCAF6\uDE90\uDE91\uE5C9\uDE92\uDE93\uDE94\uC3D4"+
-            "\uB1C5\uBCA3\uDE95\uDE96\uDE97\uD7B7\uDE98\uDE99"+
-            "\uCDCB\uCBCD\uCACA\uCCD3\uE5CC\uE5CB\uC4E6\uDE9A"+
-            "\uDE9B\uD1A1\uD1B7\uE5CD\uDE9C\uE5D0\uDE9D\uCDB8"+
-            "\uD6F0\uE5CF\uB5DD\uDE9E\uCDBE\uDE9F\uE5D1\uB6BA"+
-            "\uDEA0\uDF40\uCDA8\uB9E4\uDF41\uCAC5\uB3D1\uCBD9"+
-            "\uD4EC\uE5D2\uB7EA\uDF42\uDF43\uDF44\uE5CE\uDF45"+
-            "\uDF46\uDF47\uDF48\uDF49\uDF4A\uE5D5\uB4FE\uE5D6"+
-            "\uDF4B\uDF4C\uDF4D\uDF4E\uDF4F\uE5D3\uE5D4\uDF50"+
-            "\uD2DD\uDF51\uDF52\uC2DF\uB1C6\uDF53\uD3E2\uDF54"+
-            "\uDF55\uB6DD\uCBEC\uDF56\uE5D7\uDF57\uDF58\uD3F6"+
-            "\uDF59\uDF5A\uDF5B\uDF5C\uDF5D\uB1E9\uDF5E\uB6F4"+
-            "\uE5DA\uE5D8\uE5D9\uB5C0\uDF5F\uDF60\uDF61\uD2C5"+
-            "\uE5DC\uDF62\uDF63\uE5DE\uDF64\uDF65\uDF66\uDF67"+
-            "\uDF68\uDF69\uE5DD\uC7B2\uDF6A\uD2A3\uDF6B\uDF6C"+
-            "\uE5DB\uDF6D\uDF6E\uDF6F\uDF70\uD4E2\uD5DA\uDF71"+
-            "\uDF72\uDF73\uDF74\uDF75\uE5E0\uD7F1\uDF76\uDF77"+
-            "\uDF78\uDF79\uDF7A\uDF7B\uDF7C\uE5E1\uDF7D\uB1DC"+
-            "\uD1FB\uDF7E\uE5E2\uE5E4\uDF80\uDF81\uDF82\uDF83"+
-            "\uE5E3\uDF84\uDF85\uE5E5\uDF86\uDF87\uDF88\uDF89"+
-            "\uDF8A\uD2D8\uDF8B\uB5CB\uDF8C\uE7DF\uDF8D\uDAF5"+
-            "\uDF8E\uDAF8\uDF8F\uDAF6\uDF90\uDAF7\uDF91\uDF92"+
-            "\uDF93\uDAFA\uD0CF\uC4C7\uDF94\uDF95\uB0EE\uDF96"+
-            "\uDF97\uDF98\uD0B0\uDF99\uDAF9\uDF9A\uD3CA\uBAAA"+
-            "\uDBA2\uC7F1\uDF9B\uDAFC\uDAFB\uC9DB\uDAFD\uDF9C"+
-            "\uDBA1\uD7DE\uDAFE\uC1DA\uDF9D\uDF9E\uDBA5\uDF9F"+
-            "\uDFA0\uD3F4\uE040\uE041\uDBA7\uDBA4\uE042\uDBA8"+
-            "\uE043\uE044\uBDBC\uE045\uE046\uE047\uC0C9\uDBA3"+
-            "\uDBA6\uD6A3\uE048\uDBA9\uE049\uE04A\uE04B\uDBAD"+
-            "\uE04C\uE04D\uE04E\uDBAE\uDBAC\uBAC2\uE04F\uE050"+
-            "\uE051\uBFA4\uDBAB\uE052\uE053\uE054\uDBAA\uD4C7"+
-            "\uB2BF\uE055\uE056\uDBAF\uE057\uB9F9\uE058\uDBB0"+
-            "\uE059\uE05A\uE05B\uE05C\uB3BB\uE05D\uE05E\uE05F"+
-            "\uB5A6\uE060\uE061\uE062\uE063\uB6BC\uDBB1\uE064"+
-            "\uE065\uE066\uB6F5\uE067\uDBB2\uE068\uE069\uE06A"+
-            "\uE06B\uE06C\uE06D\uE06E\uE06F\uE070\uE071\uE072"+
-            "\uE073\uE074\uE075\uE076\uE077\uE078\uE079\uE07A"+
-            "\uE07B\uB1C9\uE07C\uE07D\uE07E\uE080\uDBB4\uE081"+
-            "\uE082\uE083\uDBB3\uDBB5\uE084\uE085\uE086\uE087"+
-            "\uE088\uE089\uE08A\uE08B\uE08C\uE08D\uE08E\uDBB7"+
-            "\uE08F\uDBB6\uE090\uE091\uE092\uE093\uE094\uE095"+
-            "\uE096\uDBB8\uE097\uE098\uE099\uE09A\uE09B\uE09C"+
-            "\uE09D\uE09E\uE09F\uDBB9\uE0A0\uE140\uDBBA\uE141"+
-            "\uE142\uD3CF\uF4FA\uC7F5\uD7C3\uC5E4\uF4FC\uF4FD"+
-            "\uF4FB\uE143\uBEC6\uE144\uE145\uE146\uE147\uD0EF"+
-            "\uE148\uE149\uB7D3\uE14A\uE14B\uD4CD\uCCAA\uE14C"+
-            "\uE14D\uF5A2\uF5A1\uBAA8\uF4FE\uCBD6\uE14E\uE14F"+
-            "\uE150\uF5A4\uC0D2\uE151\uB3EA\uE152\uCDAA\uF5A5"+
-            "\uF5A3\uBDB4\uF5A8\uE153\uF5A9\uBDCD\uC3B8\uBFE1"+
-            "\uCBE1\uF5AA\uE154\uE155\uE156\uF5A6\uF5A7\uC4F0"+
-            "\uE157\uE158\uE159\uE15A\uE15B\uF5AC\uE15C\uB4BC"+
-            "\uE15D\uD7ED\uE15E\uB4D7\uF5AB\uF5AE\uE15F\uE160"+
-            "\uF5AD\uF5AF\uD0D1\uE161\uE162\uE163\uE164\uE165"+
-            "\uE166\uE167\uC3D1\uC8A9\uE168\uE169\uE16A\uE16B"+
-            "\uE16C\uE16D\uF5B0\uF5B1\uE16E\uE16F\uE170\uE171"+
-            "\uE172\uE173\uF5B2\uE174\uE175\uF5B3\uF5B4\uF5B5"+
-            "\uE176\uE177\uE178\uE179\uF5B7\uF5B6\uE17A\uE17B"+
-            "\uE17C\uE17D\uF5B8\uE17E\uE180\uE181\uE182\uE183"+
-            "\uE184\uE185\uE186\uE187\uE188\uE189\uE18A\uB2C9"+
-            "\uE18B\uD3D4\uCACD\uE18C\uC0EF\uD6D8\uD2B0\uC1BF"+
-            "\uE18D\uBDF0\uE18E\uE18F\uE190\uE191\uE192\uE193"+
-            "\uE194\uE195\uE196\uE197\uB8AA\uE198\uE199\uE19A"+
-            "\uE19B\uE19C\uE19D\uE19E\uE19F\uE1A0\uE240\uE241"+
-            "\uE242\uE243\uE244\uE245\uE246\uE247\uE248\uE249"+
-            "\uE24A\uE24B\uE24C\uE24D\uE24E\uE24F\uE250\uE251"+
-            "\uE252\uE253\uE254\uE255\uE256\uE257\uE258\uE259"+
-            "\uE25A\uE25B\uE25C\uE25D\uE25E\uE25F\uE260\uE261"+
-            "\uE262\uE263\uE264\uE265\uE266\uE267\uE268\uE269"+
-            "\uE26A\uE26B\uE26C\uE26D\uE26E\uE26F\uE270\uE271"+
-            "\uE272\uE273\uE274\uE275\uE276\uE277\uE278\uE279"+
-            "\uE27A\uE27B\uE27C\uE27D\uE27E\uE280\uE281\uE282"+
-            "\uE283\uE284\uE285\uE286\uE287\uE288\uE289\uE28A"+
-            "\uE28B\uE28C\uE28D\uE28E\uE28F\uE290\uE291\uE292"+
-            "\uE293\uE294\uE295\uE296\uE297\uE298\uE299\uE29A"+
-            "\uE29B\uE29C\uE29D\uE29E\uE29F\uE2A0\uE340\uE341"+
-            "\uE342\uE343\uE344\uE345\uE346\uE347\uE348\uE349"+
-            "\uE34A\uE34B\uE34C\uE34D\uE34E\uE34F\uE350\uE351"+
-            "\uE352\uE353\uE354\uE355\uE356\uE357\uE358\uE359"+
-            "\uE35A\uE35B\uE35C\uE35D\uE35E\uE35F\uE360\uE361"+
-            "\uE362\uE363\uE364\uE365\uE366\uE367\uE368\uE369"+
-            "\uE36A\uE36B\uE36C\uE36D\uBCF8\uE36E\uE36F\uE370"+
-            "\uE371\uE372\uE373\uE374\uE375\uE376\uE377\uE378"+
-            "\uE379\uE37A\uE37B\uE37C\uE37D\uE37E\uE380\uE381"+
-            "\uE382\uE383\uE384\uE385\uE386\uE387\uF6C6\uE388"+
-            "\uE389\uE38A\uE38B\uE38C\uE38D\uE38E\uE38F\uE390"+
-            "\uE391\uE392\uE393\uE394\uE395\uE396\uE397\uE398"+
-            "\uE399\uE39A\uE39B\uE39C\uE39D\uE39E\uE39F\uE3A0"+
-            "\uE440\uE441\uE442\uE443\uE444\uE445\uF6C7\uE446"+
-            "\uE447\uE448\uE449\uE44A\uE44B\uE44C\uE44D\uE44E"+
-            "\uE44F\uE450\uE451\uE452\uE453\uE454\uE455\uE456"+
-            "\uE457\uE458\uE459\uE45A\uE45B\uE45C\uE45D\uE45E"+
-            "\uF6C8\uE45F\uE460\uE461\uE462\uE463\uE464\uE465"+
-            "\uE466\uE467\uE468\uE469\uE46A\uE46B\uE46C\uE46D"+
-            "\uE46E\uE46F\uE470\uE471\uE472\uE473\uE474\uE475"+
-            "\uE476\uE477\uE478\uE479\uE47A\uE47B\uE47C\uE47D"+
-            "\uE47E\uE480\uE481\uE482\uE483\uE484\uE485\uE486"+
-            "\uE487\uE488\uE489\uE48A\uE48B\uE48C\uE48D\uE48E"+
-            "\uE48F\uE490\uE491\uE492\uE493\uE494\uE495\uE496"+
-            "\uE497\uE498\uE499\uE49A\uE49B\uE49C\uE49D\uE49E"+
-            "\uE49F\uE4A0\uE540\uE541\uE542\uE543\uE544\uE545"+
-            "\uE546\uE547\uE548\uE549\uE54A\uE54B\uE54C\uE54D"+
-            "\uE54E\uE54F\uE550\uE551\uE552\uE553\uE554\uE555"+
-            "\uE556\uE557\uE558\uE559\uE55A\uE55B\uE55C\uE55D"+
-            "\uE55E\uE55F\uE560\uE561\uE562\uE563\uE564\uE565"+
-            "\uE566\uE567\uE568\uE569\uE56A\uE56B\uE56C\uE56D"+
-            "\uE56E\uE56F\uE570\uE571\uE572\uE573\uF6C9\uE574"+
-            "\uE575\uE576\uE577\uE578\uE579\uE57A\uE57B\uE57C"+
-            "\uE57D\uE57E\uE580\uE581\uE582\uE583\uE584\uE585"+
-            "\uE586\uE587\uE588\uE589\uE58A\uE58B\uE58C\uE58D"+
-            "\uE58E\uE58F\uE590\uE591\uE592\uE593\uE594\uE595"+
-            "\uE596\uE597\uE598\uE599\uE59A\uE59B\uE59C\uE59D"+
-            "\uE59E\uE59F\uF6CA\uE5A0\uE640\uE641\uE642\uE643"+
-            "\uE644\uE645\uE646\uE647\uE648\uE649\uE64A\uE64B"+
-            "\uE64C\uE64D\uE64E\uE64F\uE650\uE651\uE652\uE653"+
-            "\uE654\uE655\uE656\uE657\uE658\uE659\uE65A\uE65B"+
-            "\uE65C\uE65D\uE65E\uE65F\uE660\uE661\uE662\uF6CC"+
-            "\uE663\uE664\uE665\uE666\uE667\uE668\uE669\uE66A"+
-            "\uE66B\uE66C\uE66D\uE66E\uE66F\uE670\uE671\uE672"+
-            "\uE673\uE674\uE675\uE676\uE677\uE678\uE679\uE67A"+
-            "\uE67B\uE67C\uE67D\uE67E\uE680\uE681\uE682\uE683"+
-            "\uE684\uE685\uE686\uE687\uE688\uE689\uE68A\uE68B"+
-            "\uE68C\uE68D\uE68E\uE68F\uE690\uE691\uE692\uE693"+
-            "\uE694\uE695\uE696\uE697\uE698\uE699\uE69A\uE69B"+
-            "\uE69C\uE69D\uF6CB\uE69E\uE69F\uE6A0\uE740\uE741"+
-            "\uE742\uE743\uE744\uE745\uE746\uE747\uF7E9\uE748"+
-            "\uE749\uE74A\uE74B\uE74C\uE74D\uE74E\uE74F\uE750"+
-            "\uE751\uE752\uE753\uE754\uE755\uE756\uE757\uE758"+
-            "\uE759\uE75A\uE75B\uE75C\uE75D\uE75E\uE75F\uE760"+
-            "\uE761\uE762\uE763\uE764\uE765\uE766\uE767\uE768"+
-            "\uE769\uE76A\uE76B\uE76C\uE76D\uE76E\uE76F\uE770"+
-            "\uE771\uE772\uE773\uE774\uE775\uE776\uE777\uE778"+
-            "\uE779\uE77A\uE77B\uE77C\uE77D\uE77E\uE780\uE781"+
-            "\uE782\uE783\uE784\uE785\uE786\uE787\uE788\uE789"+
-            "\uE78A\uE78B\uE78C\uE78D\uE78E\uE78F\uE790\uE791"+
-            "\uE792\uE793\uE794\uE795\uE796\uE797\uE798\uE799"+
-            "\uE79A\uE79B\uE79C\uE79D\uE79E\uE79F\uE7A0\uE840"+
-            "\uE841\uE842\uE843\uE844\uE845\uE846\uE847\uE848"+
-            "\uE849\uE84A\uE84B\uE84C\uE84D\uE84E\uF6CD\uE84F"+
-            "\uE850\uE851\uE852\uE853\uE854\uE855\uE856\uE857"+
-            "\uE858\uE859\uE85A\uE85B\uE85C\uE85D\uE85E\uE85F"+
-            "\uE860\uE861\uE862\uE863\uE864\uE865\uE866\uE867"+
-            "\uE868\uE869\uE86A\uE86B\uE86C\uE86D\uE86E\uE86F"+
-            "\uE870\uE871\uE872\uE873\uE874\uE875\uE876\uE877"+
-            "\uE878\uE879\uE87A\uF6CE\uE87B\uE87C\uE87D\uE87E"+
-            "\uE880\uE881\uE882\uE883\uE884\uE885\uE886\uE887"+
-            "\uE888\uE889\uE88A\uE88B\uE88C\uE88D\uE88E\uE88F"+
-            "\uE890\uE891\uE892\uE893\uE894\uEEC4\uEEC5\uEEC6"+
-            "\uD5EB\uB6A4\uEEC8\uEEC7\uEEC9\uEECA\uC7A5\uEECB"+
-            "\uEECC\uE895\uB7B0\uB5F6\uEECD\uEECF\uE896\uEECE"+
-            "\uE897\uB8C6\uEED0\uEED1\uEED2\uB6DB\uB3AE\uD6D3"+
-            "\uC4C6\uB1B5\uB8D6\uEED3\uEED4\uD4BF\uC7D5\uBEFB"+
-            "\uCED9\uB9B3\uEED6\uEED5\uEED8\uEED7\uC5A5\uEED9"+
-            "\uEEDA\uC7AE\uEEDB\uC7AF\uEEDC\uB2A7\uEEDD\uEEDE"+
-            "\uEEDF\uEEE0\uEEE1\uD7EA\uEEE2\uEEE3\uBCD8\uEEE4"+
-            "\uD3CB\uCCFA\uB2AC\uC1E5\uEEE5\uC7A6\uC3AD\uE898"+
-            "\uEEE6\uEEE7\uEEE8\uEEE9\uEEEA\uEEEB\uEEEC\uE899"+
-            "\uEEED\uEEEE\uEEEF\uE89A\uE89B\uEEF0\uEEF1\uEEF2"+
-            "\uEEF4\uEEF3\uE89C\uEEF5\uCDAD\uC2C1\uEEF6\uEEF7"+
-            "\uEEF8\uD5A1\uEEF9\uCFB3\uEEFA\uEEFB\uE89D\uEEFC"+
-            "\uEEFD\uEFA1\uEEFE\uEFA2\uB8F5\uC3FA\uEFA3\uEFA4"+
-            "\uBDC2\uD2BF\uB2F9\uEFA5\uEFA6\uEFA7\uD2F8\uEFA8"+
-            "\uD6FD\uEFA9\uC6CC\uE89E\uEFAA\uEFAB\uC1B4\uEFAC"+
-            "\uCFFA\uCBF8\uEFAE\uEFAD\uB3FA\uB9F8\uEFAF\uEFB0"+
-            "\uD0E2\uEFB1\uEFB2\uB7E6\uD0BF\uEFB3\uEFB4\uEFB5"+
-            "\uC8F1\uCCE0\uEFB6\uEFB7\uEFB8\uEFB9\uEFBA\uD5E0"+
-            "\uEFBB\uB4ED\uC3AA\uEFBC\uE89F\uEFBD\uEFBE\uEFBF"+
-            "\uE8A0\uCEFD\uEFC0\uC2E0\uB4B8\uD7B6\uBDF5\uE940"+
-            "\uCFC7\uEFC3\uEFC1\uEFC2\uEFC4\uB6A7\uBCFC\uBEE2"+
-            "\uC3CC\uEFC5\uEFC6\uE941\uEFC7\uEFCF\uEFC8\uEFC9"+
-            "\uEFCA\uC7C2\uEFF1\uB6CD\uEFCB\uE942\uEFCC\uEFCD"+
-            "\uB6C6\uC3BE\uEFCE\uE943\uEFD0\uEFD1\uEFD2\uD5F2"+
-            "\uE944\uEFD3\uC4F7\uE945\uEFD4\uC4F8\uEFD5\uEFD6"+
-            "\uB8E4\uB0F7\uEFD7\uEFD8\uEFD9\uE946\uEFDA\uEFDB"+
-            "\uEFDC\uEFDD\uE947\uEFDE\uBEB5\uEFE1\uEFDF\uEFE0"+
-            "\uE948\uEFE2\uEFE3\uC1CD\uEFE4\uEFE5\uEFE6\uEFE7"+
-            "\uEFE8\uEFE9\uEFEA\uEFEB\uEFEC\uC0D8\uE949\uEFED"+
-            "\uC1AD\uEFEE\uEFEF\uEFF0\uE94A\uE94B\uCFE2\uE94C"+
-            "\uE94D\uE94E\uE94F\uE950\uE951\uE952\uE953\uB3A4"+
-            "\uE954\uE955\uE956\uE957\uE958\uE959\uE95A\uE95B"+
-            "\uE95C\uE95D\uE95E\uE95F\uE960\uE961\uE962\uE963"+
-            "\uE964\uE965\uE966\uE967\uE968\uE969\uE96A\uE96B"+
-            "\uE96C\uE96D\uE96E\uE96F\uE970\uE971\uE972\uE973"+
-            "\uE974\uE975\uE976\uE977\uE978\uE979\uE97A\uE97B"+
-            "\uE97C\uE97D\uE97E\uE980\uE981\uE982\uE983\uE984"+
-            "\uE985\uE986\uE987\uE988\uE989\uE98A\uE98B\uE98C"+
-            "\uE98D\uE98E\uE98F\uE990\uE991\uE992\uE993\uE994"+
-            "\uE995\uE996\uE997\uE998\uE999\uE99A\uE99B\uE99C"+
-            "\uE99D\uE99E\uE99F\uE9A0\uEA40\uEA41\uEA42\uEA43"+
-            "\uEA44\uEA45\uEA46\uEA47\uEA48\uEA49\uEA4A\uEA4B"+
-            "\uEA4C\uEA4D\uEA4E\uEA4F\uEA50\uEA51\uEA52\uEA53"+
-            "\uEA54\uEA55\uEA56\uEA57\uEA58\uEA59\uEA5A\uEA5B"+
-            "\uC3C5\uE3C5\uC9C1\uE3C6\uEA5C\uB1D5\uCECA\uB4B3"+
-            "\uC8F2\uE3C7\uCFD0\uE3C8\uBCE4\uE3C9\uE3CA\uC3C6"+
-            "\uD5A2\uC4D6\uB9EB\uCEC5\uE3CB\uC3F6\uE3CC\uEA5D"+
-            "\uB7A7\uB8F3\uBAD2\uE3CD\uE3CE\uD4C4\uE3CF\uEA5E"+
-            "\uE3D0\uD1CB\uE3D1\uE3D2\uE3D3\uE3D4\uD1D6\uE3D5"+
-            "\uB2FB\uC0BB\uE3D6\uEA5F\uC0AB\uE3D7\uE3D8\uE3D9"+
-            "\uEA60\uE3DA\uE3DB\uEA61\uB8B7\uDAE2\uEA62\uB6D3"+
-            "\uEA63\uDAE4\uDAE3\uEA64\uEA65\uEA66\uEA67\uEA68"+
-            "\uEA69\uEA6A\uDAE6\uEA6B\uEA6C\uEA6D\uC8EE\uEA6E"+
-            "\uEA6F\uDAE5\uB7C0\uD1F4\uD2F5\uD5F3\uBDD7\uEA70"+
-            "\uEA71\uEA72\uEA73\uD7E8\uDAE8\uDAE7\uEA74\uB0A2"+
-            "\uCDD3\uEA75\uDAE9\uEA76\uB8BD\uBCCA\uC2BD\uC2A4"+
-            "\uB3C2\uDAEA\uEA77\uC2AA\uC4B0\uBDB5\uEA78\uEA79"+
-            "\uCFDE\uEA7A\uEA7B\uEA7C\uDAEB\uC9C2\uEA7D\uEA7E"+
-            "\uEA80\uEA81\uEA82\uB1DD\uEA83\uEA84\uEA85\uDAEC"+
-            "\uEA86\uB6B8\uD4BA\uEA87\uB3FD\uEA88\uEA89\uDAED"+
-            "\uD4C9\uCFD5\uC5E3\uEA8A\uDAEE\uEA8B\uEA8C\uEA8D"+
-            "\uEA8E\uEA8F\uDAEF\uEA90\uDAF0\uC1EA\uCCD5\uCFDD"+
-            "\uEA91\uEA92\uEA93\uEA94\uEA95\uEA96\uEA97\uEA98"+
-            "\uEA99\uEA9A\uEA9B\uEA9C\uEA9D\uD3E7\uC2A1\uEA9E"+
-            "\uDAF1\uEA9F\uEAA0\uCBE5\uEB40\uDAF2\uEB41\uCBE6"+
-            "\uD2FE\uEB42\uEB43\uEB44\uB8F4\uEB45\uEB46\uDAF3"+
-            "\uB0AF\uCFB6\uEB47\uEB48\uD5CF\uEB49\uEB4A\uEB4B"+
-            "\uEB4C\uEB4D\uEB4E\uEB4F\uEB50\uEB51\uEB52\uCBED"+
-            "\uEB53\uEB54\uEB55\uEB56\uEB57\uEB58\uEB59\uEB5A"+
-            "\uDAF4\uEB5B\uEB5C\uE3C4\uEB5D\uEB5E\uC1A5\uEB5F"+
-            "\uEB60\uF6BF\uEB61\uEB62\uF6C0\uF6C1\uC4D1\uEB63"+
-            "\uC8B8\uD1E3\uEB64\uEB65\uD0DB\uD1C5\uBCAF\uB9CD"+
-            "\uEB66\uEFF4\uEB67\uEB68\uB4C6\uD3BA\uF6C2\uB3FB"+
-            "\uEB69\uEB6A\uF6C3\uEB6B\uEB6C\uB5F1\uEB6D\uEB6E"+
-            "\uEB6F\uEB70\uEB71\uEB72\uEB73\uEB74\uEB75\uEB76"+
-            "\uF6C5\uEB77\uEB78\uEB79\uEB7A\uEB7B\uEB7C\uEB7D"+
-            "\uD3EA\uF6A7\uD1A9\uEB7E\uEB80\uEB81\uEB82\uF6A9"+
-            "\uEB83\uEB84\uEB85\uF6A8\uEB86\uEB87\uC1E3\uC0D7"+
-            "\uEB88\uB1A2\uEB89\uEB8A\uEB8B\uEB8C\uCEED\uEB8D"+
-            "\uD0E8\uF6AB\uEB8E\uEB8F\uCFF6\uEB90\uF6AA\uD5F0"+
-            "\uF6AC\uC3B9\uEB91\uEB92\uEB93\uBBF4\uF6AE\uF6AD"+
-            "\uEB94\uEB95\uEB96\uC4DE\uEB97\uEB98\uC1D8\uEB99"+
-            "\uEB9A\uEB9B\uEB9C\uEB9D\uCBAA\uEB9E\uCFBC\uEB9F"+
-            "\uEBA0\uEC40\uEC41\uEC42\uEC43\uEC44\uEC45\uEC46"+
-            "\uEC47\uEC48\uF6AF\uEC49\uEC4A\uF6B0\uEC4B\uEC4C"+
-            "\uF6B1\uEC4D\uC2B6\uEC4E\uEC4F\uEC50\uEC51\uEC52"+
-            "\uB0D4\uC5F9\uEC53\uEC54\uEC55\uEC56\uF6B2\uEC57"+
-            "\uEC58\uEC59\uEC5A\uEC5B\uEC5C\uEC5D\uEC5E\uEC5F"+
-            "\uEC60\uEC61\uEC62\uEC63\uEC64\uEC65\uEC66\uEC67"+
-            "\uEC68\uEC69\uC7E0\uF6A6\uEC6A\uEC6B\uBEB8\uEC6C"+
-            "\uEC6D\uBEB2\uEC6E\uB5E5\uEC6F\uEC70\uB7C7\uEC71"+
-            "\uBFBF\uC3D2\uC3E6\uEC72\uEC73\uD8CC\uEC74\uEC75"+
-            "\uEC76\uB8EF\uEC77\uEC78\uEC79\uEC7A\uEC7B\uEC7C"+
-            "\uEC7D\uEC7E\uEC80\uBDF9\uD1A5\uEC81\uB0D0\uEC82"+
-            "\uEC83\uEC84\uEC85\uEC86\uF7B0\uEC87\uEC88\uEC89"+
-            "\uEC8A\uEC8B\uEC8C\uEC8D\uEC8E\uF7B1\uEC8F\uEC90"+
-            "\uEC91\uEC92\uEC93\uD0AC\uEC94\uB0B0\uEC95\uEC96"+
-            "\uEC97\uF7B2\uF7B3\uEC98\uF7B4\uEC99\uEC9A\uEC9B"+
-            "\uC7CA\uEC9C\uEC9D\uEC9E\uEC9F\uECA0\uED40\uED41"+
-            "\uBECF\uED42\uED43\uF7B7\uED44\uED45\uED46\uED47"+
-            "\uED48\uED49\uED4A\uF7B6\uED4B\uB1DE\uED4C\uF7B5"+
-            "\uED4D\uED4E\uF7B8\uED4F\uF7B9\uED50\uED51\uED52"+
-            "\uED53\uED54\uED55\uED56\uED57\uED58\uED59\uED5A"+
-            "\uED5B\uED5C\uED5D\uED5E\uED5F\uED60\uED61\uED62"+
-            "\uED63\uED64\uED65\uED66\uED67\uED68\uED69\uED6A"+
-            "\uED6B\uED6C\uED6D\uED6E\uED6F\uED70\uED71\uED72"+
-            "\uED73\uED74\uED75\uED76\uED77\uED78\uED79\uED7A"+
-            "\uED7B\uED7C\uED7D\uED7E\uED80\uED81\uCEA4\uC8CD"+
-            "\uED82\uBAAB\uE8B8\uE8B9\uE8BA\uBEC2\uED83\uED84"+
-            "\uED85\uED86\uED87\uD2F4\uED88\uD4CF\uC9D8\uED89"+
-            "\uED8A\uED8B\uED8C\uED8D\uED8E\uED8F\uED90\uED91"+
-            "\uED92\uED93\uED94\uED95\uED96\uED97\uED98\uED99"+
-            "\uED9A\uED9B\uED9C\uED9D\uED9E\uED9F\uEDA0\uEE40"+
-            "\uEE41\uEE42\uEE43\uEE44\uEE45\uEE46\uEE47\uEE48"+
-            "\uEE49\uEE4A\uEE4B\uEE4C\uEE4D\uEE4E\uEE4F\uEE50"+
-            "\uEE51\uEE52\uEE53\uEE54\uEE55\uEE56\uEE57\uEE58"+
-            "\uEE59\uEE5A\uEE5B\uEE5C\uEE5D\uEE5E\uEE5F\uEE60"+
-            "\uEE61\uEE62\uEE63\uEE64\uEE65\uEE66\uEE67\uEE68"+
-            "\uEE69\uEE6A\uEE6B\uEE6C\uEE6D\uEE6E\uEE6F\uEE70"+
-            "\uEE71\uEE72\uEE73\uEE74\uEE75\uEE76\uEE77\uEE78"+
-            "\uEE79\uEE7A\uEE7B\uEE7C\uEE7D\uEE7E\uEE80\uEE81"+
-            "\uEE82\uEE83\uEE84\uEE85\uEE86\uEE87\uEE88\uEE89"+
-            "\uEE8A\uEE8B\uEE8C\uEE8D\uEE8E\uEE8F\uEE90\uEE91"+
-            "\uEE92\uEE93\uEE94\uEE95\uEE96\uEE97\uEE98\uEE99"+
-            "\uEE9A\uEE9B\uEE9C\uEE9D\uEE9E\uEE9F\uEEA0\uEF40"+
-            "\uEF41\uEF42\uEF43\uEF44\uEF45\uD2B3\uB6A5\uC7EA"+
-            "\uF1FC\uCFEE\uCBB3\uD0EB\uE7EF\uCDE7\uB9CB\uB6D9"+
-            "\uF1FD\uB0E4\uCBCC\uF1FE\uD4A4\uC2AD\uC1EC\uC6C4"+
-            "\uBEB1\uF2A1\uBCD5\uEF46\uF2A2\uF2A3\uEF47\uF2A4"+
-            "\uD2C3\uC6B5\uEF48\uCDC7\uF2A5\uEF49\uD3B1\uBFC5"+
-            "\uCCE2\uEF4A\uF2A6\uF2A7\uD1D5\uB6EE\uF2A8\uF2A9"+
-            "\uB5DF\uF2AA\uF2AB\uEF4B\uB2FC\uF2AC\uF2AD\uC8A7"+
-            "\uEF4C\uEF4D\uEF4E\uEF4F\uEF50\uEF51\uEF52\uEF53"+
-            "\uEF54\uEF55\uEF56\uEF57\uEF58\uEF59\uEF5A\uEF5B"+
-            "\uEF5C\uEF5D\uEF5E\uEF5F\uEF60\uEF61\uEF62\uEF63"+
-            "\uEF64\uEF65\uEF66\uEF67\uEF68\uEF69\uEF6A\uEF6B"+
-            "\uEF6C\uEF6D\uEF6E\uEF6F\uEF70\uEF71\uB7E7\uEF72"+
-            "\uEF73\uECA9\uECAA\uECAB\uEF74\uECAC\uEF75\uEF76"+
-            "\uC6AE\uECAD\uECAE\uEF77\uEF78\uEF79\uB7C9\uCAB3"+
-            "\uEF7A\uEF7B\uEF7C\uEF7D\uEF7E\uEF80\uEF81\uE2B8"+
-            "\uF7CF\uEF82\uEF83\uEF84\uEF85\uEF86\uEF87\uEF88"+
-            "\uEF89\uEF8A\uEF8B\uEF8C\uEF8D\uEF8E\uEF8F\uEF90"+
-            "\uEF91\uEF92\uEF93\uEF94\uEF95\uEF96\uEF97\uEF98"+
-            "\uEF99\uEF9A\uEF9B\uEF9C\uEF9D\uEF9E\uEF9F\uEFA0"+
-            "\uF040\uF041\uF042\uF043\uF044\uF7D0\uF045\uF046"+
-            "\uB2CD\uF047\uF048\uF049\uF04A\uF04B\uF04C\uF04D"+
-            "\uF04E\uF04F\uF050\uF051\uF052\uF053\uF054\uF055"+
-            "\uF056\uF057\uF058\uF059\uF05A\uF05B\uF05C\uF05D"+
-            "\uF05E\uF05F\uF060\uF061\uF062\uF063\uF7D1\uF064"+
-            "\uF065\uF066\uF067\uF068\uF069\uF06A\uF06B\uF06C"+
-            "\uF06D\uF06E\uF06F\uF070\uF071\uF072\uF073\uF074"+
-            "\uF075\uF076\uF077\uF078\uF079\uF07A\uF07B\uF07C"+
-            "\uF07D\uF07E\uF080\uF081\uF082\uF083\uF084\uF085"+
-            "\uF086\uF087\uF088\uF089\uF7D3\uF7D2\uF08A\uF08B"+
-            "\uF08C\uF08D\uF08E\uF08F\uF090\uF091\uF092\uF093"+
-            "\uF094\uF095\uF096\uE2BB\uF097\uBCA2\uF098\uE2BC"+
-            "\uE2BD\uE2BE\uE2BF\uE2C0\uE2C1\uB7B9\uD2FB\uBDA4"+
-            "\uCACE\uB1A5\uCBC7\uF099\uE2C2\uB6FC\uC8C4\uE2C3"+
-            "\uF09A\uF09B\uBDC8\uF09C\uB1FD\uE2C4\uF09D\uB6F6"+
-            "\uE2C5\uC4D9\uF09E\uF09F\uE2C6\uCFDA\uB9DD\uE2C7"+
-            "\uC0A1\uF0A0\uE2C8\uB2F6\uF140\uE2C9\uF141\uC1F3"+
-            "\uE2CA\uE2CB\uC2F8\uE2CC\uE2CD\uE2CE\uCAD7\uD8B8"+
-            "\uD9E5\uCFE3\uF142\uF143\uF144\uF145\uF146\uF147"+
-            "\uF148\uF149\uF14A\uF14B\uF14C\uF0A5\uF14D\uF14E"+
-            "\uDCB0\uF14F\uF150\uF151\uF152\uF153\uF154\uF155"+
-            "\uF156\uF157\uF158\uF159\uF15A\uF15B\uF15C\uF15D"+
-            "\uF15E\uF15F\uF160\uF161\uF162\uF163\uF164\uF165"+
-            "\uF166\uF167\uF168\uF169\uF16A\uF16B\uF16C\uF16D"+
-            "\uF16E\uF16F\uF170\uF171\uF172\uF173\uF174\uF175"+
-            "\uF176\uF177\uF178\uF179\uF17A\uF17B\uF17C\uF17D"+
-            "\uF17E\uF180\uF181\uF182\uF183\uF184\uF185\uF186"+
-            "\uF187\uF188\uF189\uF18A\uF18B\uF18C\uF18D\uF18E"+
-            "\uF18F\uF190\uF191\uF192\uF193\uF194\uF195\uF196"+
-            "\uF197\uF198\uF199\uF19A\uF19B\uF19C\uF19D\uF19E"+
-            "\uF19F\uF1A0\uF240\uF241\uF242\uF243\uF244\uF245"+
-            "\uF246\uF247\uF248\uF249\uF24A\uF24B\uF24C\uF24D"+
-            "\uF24E\uF24F\uF250\uF251\uF252\uF253\uF254\uF255"+
-            "\uF256\uF257\uF258\uF259\uF25A\uF25B\uF25C\uF25D"+
-            "\uF25E\uF25F\uF260\uF261\uF262\uF263\uF264\uF265"+
-            "\uF266\uF267\uF268\uF269\uF26A\uF26B\uF26C\uF26D"+
-            "\uF26E\uF26F\uF270\uF271\uF272\uF273\uF274\uF275"+
-            "\uF276\uF277\uF278\uF279\uF27A\uF27B\uF27C\uF27D"+
-            "\uF27E\uF280\uF281\uF282\uF283\uF284\uF285\uF286"+
-            "\uF287\uF288\uF289\uF28A\uF28B\uF28C\uF28D\uF28E"+
-            "\uF28F\uF290\uF291\uF292\uF293\uF294\uF295\uF296"+
-            "\uF297\uF298\uF299\uF29A\uF29B\uF29C\uF29D\uF29E"+
-            "\uF29F\uF2A0\uF340\uF341\uF342\uF343\uF344\uF345"+
-            "\uF346\uF347\uF348\uF349\uF34A\uF34B\uF34C\uF34D"+
-            "\uF34E\uF34F\uF350\uF351\uC2ED\uD4A6\uCDD4\uD1B1"+
-            "\uB3DB\uC7FD\uF352\uB2B5\uC2BF\uE6E0\uCABB\uE6E1"+
-            "\uE6E2\uBED4\uE6E3\uD7A4\uCDD5\uE6E5\uBCDD\uE6E4"+
-            "\uE6E6\uE6E7\uC2EE\uF353\uBDBE\uE6E8\uC2E6\uBAA7"+
-            "\uE6E9\uF354\uE6EA\uB3D2\uD1E9\uF355\uF356\uBFA5"+
-            "\uE6EB\uC6EF\uE6EC\uE6ED\uF357\uF358\uE6EE\uC6AD"+
-            "\uE6EF\uF359\uC9A7\uE6F0\uE6F1\uE6F2\uE5B9\uE6F3"+
-            "\uE6F4\uC2E2\uE6F5\uE6F6\uD6E8\uE6F7\uF35A\uE6F8"+
-            "\uB9C7\uF35B\uF35C\uF35D\uF35E\uF35F\uF360\uF361"+
-            "\uF7BB\uF7BA\uF362\uF363\uF364\uF365\uF7BE\uF7BC"+
-            "\uBAA1\uF366\uF7BF\uF367\uF7C0\uF368\uF369\uF36A"+
-            "\uF7C2\uF7C1\uF7C4\uF36B\uF36C\uF7C3\uF36D\uF36E"+
-            "\uF36F\uF370\uF371\uF7C5\uF7C6\uF372\uF373\uF374"+
-            "\uF375\uF7C7\uF376\uCBE8\uF377\uF378\uF379\uF37A"+
-            "\uB8DF\uF37B\uF37C\uF37D\uF37E\uF380\uF381\uF7D4"+
-            "\uF382\uF7D5\uF383\uF384\uF385\uF386\uF7D6\uF387"+
-            "\uF388\uF389\uF38A\uF7D8\uF38B\uF7DA\uF38C\uF7D7"+
-            "\uF38D\uF38E\uF38F\uF390\uF391\uF392\uF393\uF394"+
-            "\uF395\uF7DB\uF396\uF7D9\uF397\uF398\uF399\uF39A";
-
-        private final static String innerIndex7=
-            "\uF39B\uF39C\uF39D\uD7D7\uF39E\uF39F\uF3A0\uF440"+
-            "\uF7DC\uF441\uF442\uF443\uF444\uF445\uF446\uF7DD"+
-            "\uF447\uF448\uF449\uF7DE\uF44A\uF44B\uF44C\uF44D"+
-            "\uF44E\uF44F\uF450\uF451\uF452\uF453\uF454\uF7DF"+
-            "\uF455\uF456\uF457\uF7E0\uF458\uF459\uF45A\uF45B"+
-            "\uF45C\uF45D\uF45E\uF45F\uF460\uF461\uF462\uDBCB"+
-            "\uF463\uF464\uD8AA\uF465\uF466\uF467\uF468\uF469"+
-            "\uF46A\uF46B\uF46C\uE5F7\uB9ED\uF46D\uF46E\uF46F"+
-            "\uF470\uBFFD\uBBEA\uF7C9\uC6C7\uF7C8\uF471\uF7CA"+
-            "\uF7CC\uF7CB\uF472\uF473\uF474\uF7CD\uF475\uCEBA"+
-            "\uF476\uF7CE\uF477\uF478\uC4A7\uF479\uF47A\uF47B"+
-            "\uF47C\uF47D\uF47E\uF480\uF481\uF482\uF483\uF484"+
-            "\uF485\uF486\uF487\uF488\uF489\uF48A\uF48B\uF48C"+
-            "\uF48D\uF48E\uF48F\uF490\uF491\uF492\uF493\uF494"+
-            "\uF495\uF496\uF497\uF498\uF499\uF49A\uF49B\uF49C"+
-            "\uF49D\uF49E\uF49F\uF4A0\uF540\uF541\uF542\uF543"+
-            "\uF544\uF545\uF546\uF547\uF548\uF549\uF54A\uF54B"+
-            "\uF54C\uF54D\uF54E\uF54F\uF550\uF551\uF552\uF553"+
-            "\uF554\uF555\uF556\uF557\uF558\uF559\uF55A\uF55B"+
-            "\uF55C\uF55D\uF55E\uF55F\uF560\uF561\uF562\uF563"+
-            "\uF564\uF565\uF566\uF567\uF568\uF569\uF56A\uF56B"+
-            "\uF56C\uF56D\uF56E\uF56F\uF570\uF571\uF572\uF573"+
-            "\uF574\uF575\uF576\uF577\uF578\uF579\uF57A\uF57B"+
-            "\uF57C\uF57D\uF57E\uF580\uF581\uF582\uF583\uF584"+
-            "\uF585\uF586\uF587\uF588\uF589\uF58A\uF58B\uF58C"+
-            "\uF58D\uF58E\uF58F\uF590\uF591\uF592\uF593\uF594"+
-            "\uF595\uF596\uF597\uF598\uF599\uF59A\uF59B\uF59C"+
-            "\uF59D\uF59E\uF59F\uF5A0\uF640\uF641\uF642\uF643"+
-            "\uF644\uF645\uF646\uF647\uF648\uF649\uF64A\uF64B"+
-            "\uF64C\uF64D\uF64E\uF64F\uF650\uF651\uF652\uF653"+
-            "\uF654\uF655\uF656\uF657\uF658\uF659\uF65A\uF65B"+
-            "\uF65C\uF65D\uF65E\uF65F\uF660\uF661\uF662\uF663"+
-            "\uF664\uF665\uF666\uF667\uF668\uF669\uF66A\uF66B"+
-            "\uF66C\uF66D\uF66E\uF66F\uF670\uF671\uF672\uF673"+
-            "\uF674\uF675\uF676\uF677\uF678\uF679\uF67A\uF67B"+
-            "\uF67C\uF67D\uF67E\uF680\uF681\uF682\uF683\uF684"+
-            "\uF685\uF686\uF687\uF688\uF689\uF68A\uF68B\uF68C"+
-            "\uF68D\uF68E\uF68F\uF690\uF691\uF692\uF693\uF694"+
-            "\uF695\uF696\uF697\uF698\uF699\uF69A\uF69B\uF69C"+
-            "\uF69D\uF69E\uF69F\uF6A0\uF740\uF741\uF742\uF743"+
-            "\uF744\uF745\uF746\uF747\uF748\uF749\uF74A\uF74B"+
-            "\uF74C\uF74D\uF74E\uF74F\uF750\uF751\uF752\uF753"+
-            "\uF754\uF755\uF756\uF757\uF758\uF759\uF75A\uF75B"+
-            "\uF75C\uF75D\uF75E\uF75F\uF760\uF761\uF762\uF763"+
-            "\uF764\uF765\uF766\uF767\uF768\uF769\uF76A\uF76B"+
-            "\uF76C\uF76D\uF76E\uF76F\uF770\uF771\uF772\uF773"+
-            "\uF774\uF775\uF776\uF777\uF778\uF779\uF77A\uF77B"+
-            "\uF77C\uF77D\uF77E\uF780\uD3E3\uF781\uF782\uF6CF"+
-            "\uF783\uC2B3\uF6D0\uF784\uF785\uF6D1\uF6D2\uF6D3"+
-            "\uF6D4\uF786\uF787\uF6D6\uF788\uB1AB\uF6D7\uF789"+
-            "\uF6D8\uF6D9\uF6DA\uF78A\uF6DB\uF6DC\uF78B\uF78C"+
-            "\uF78D\uF78E\uF6DD\uF6DE\uCFCA\uF78F\uF6DF\uF6E0"+
-            "\uF6E1\uF6E2\uF6E3\uF6E4\uC0F0\uF6E5\uF6E6\uF6E7"+
-            "\uF6E8\uF6E9\uF790\uF6EA\uF791\uF6EB\uF6EC\uF792"+
-            "\uF6ED\uF6EE\uF6EF\uF6F0\uF6F1\uF6F2\uF6F3\uF6F4"+
-            "\uBEA8\uF793\uF6F5\uF6F6\uF6F7\uF6F8\uF794\uF795"+
-            "\uF796\uF797\uF798\uC8FA\uF6F9\uF6FA\uF6FB\uF6FC"+
-            "\uF799\uF79A\uF6FD\uF6FE\uF7A1\uF7A2\uF7A3\uF7A4"+
-            "\uF7A5\uF79B\uF79C\uF7A6\uF7A7\uF7A8\uB1EE\uF7A9"+
-            "\uF7AA\uF7AB\uF79D\uF79E\uF7AC\uF7AD\uC1DB\uF7AE"+
-            "\uF79F\uF7A0\uF7AF\uF840\uF841\uF842\uF843\uF844"+
-            "\uF845\uF846\uF847\uF848\uF849\uF84A\uF84B\uF84C"+
-            "\uF84D\uF84E\uF84F\uF850\uF851\uF852\uF853\uF854"+
-            "\uF855\uF856\uF857\uF858\uF859\uF85A\uF85B\uF85C"+
-            "\uF85D\uF85E\uF85F\uF860\uF861\uF862\uF863\uF864"+
-            "\uF865\uF866\uF867\uF868\uF869\uF86A\uF86B\uF86C"+
-            "\uF86D\uF86E\uF86F\uF870\uF871\uF872\uF873\uF874"+
-            "\uF875\uF876\uF877\uF878\uF879\uF87A\uF87B\uF87C"+
-            "\uF87D\uF87E\uF880\uF881\uF882\uF883\uF884\uF885"+
-            "\uF886\uF887\uF888\uF889\uF88A\uF88B\uF88C\uF88D"+
-            "\uF88E\uF88F\uF890\uF891\uF892\uF893\uF894\uF895"+
-            "\uF896\uF897\uF898\uF899\uF89A\uF89B\uF89C\uF89D"+
-            "\uF89E\uF89F\uF8A0\uF940\uF941\uF942\uF943\uF944"+
-            "\uF945\uF946\uF947\uF948\uF949\uF94A\uF94B\uF94C"+
-            "\uF94D\uF94E\uF94F\uF950\uF951\uF952\uF953\uF954"+
-            "\uF955\uF956\uF957\uF958\uF959\uF95A\uF95B\uF95C"+
-            "\uF95D\uF95E\uF95F\uF960\uF961\uF962\uF963\uF964"+
-            "\uF965\uF966\uF967\uF968\uF969\uF96A\uF96B\uF96C"+
-            "\uF96D\uF96E\uF96F\uF970\uF971\uF972\uF973\uF974"+
-            "\uF975\uF976\uF977\uF978\uF979\uF97A\uF97B\uF97C"+
-            "\uF97D\uF97E\uF980\uF981\uF982\uF983\uF984\uF985"+
-            "\uF986\uF987\uF988\uF989\uF98A\uF98B\uF98C\uF98D"+
-            "\uF98E\uF98F\uF990\uF991\uF992\uF993\uF994\uF995"+
-            "\uF996\uF997\uF998\uF999\uF99A\uF99B\uF99C\uF99D"+
-            "\uF99E\uF99F\uF9A0\uFA40\uFA41\uFA42\uFA43\uFA44"+
-            "\uFA45\uFA46\uFA47\uFA48\uFA49\uFA4A\uFA4B\uFA4C"+
-            "\uFA4D\uFA4E\uFA4F\uFA50\uFA51\uFA52\uFA53\uFA54"+
-            "\uFA55\uFA56\uFA57\uFA58\uFA59\uFA5A\uFA5B\uFA5C"+
-            "\uFA5D\uFA5E\uFA5F\uFA60\uFA61\uFA62\uFA63\uFA64"+
-            "\uFA65\uFA66\uFA67\uFA68\uFA69\uFA6A\uFA6B\uFA6C"+
-            "\uFA6D\uFA6E\uFA6F\uFA70\uFA71\uFA72\uFA73\uFA74"+
-            "\uFA75\uFA76\uFA77\uFA78\uFA79\uFA7A\uFA7B\uFA7C"+
-            "\uFA7D\uFA7E\uFA80\uFA81\uFA82\uFA83\uFA84\uFA85"+
-            "\uFA86\uFA87\uFA88\uFA89\uFA8A\uFA8B\uFA8C\uFA8D"+
-            "\uFA8E\uFA8F\uFA90\uFA91\uFA92\uFA93\uFA94\uFA95"+
-            "\uFA96\uFA97\uFA98\uFA99\uFA9A\uFA9B\uFA9C\uFA9D"+
-            "\uFA9E\uFA9F\uFAA0\uFB40\uFB41\uFB42\uFB43\uFB44"+
-            "\uFB45\uFB46\uFB47\uFB48\uFB49\uFB4A\uFB4B\uFB4C"+
-            "\uFB4D\uFB4E\uFB4F\uFB50\uFB51\uFB52\uFB53\uFB54"+
-            "\uFB55\uFB56\uFB57\uFB58\uFB59\uFB5A\uFB5B\uC4F1"+
-            "\uF0AF\uBCA6\uF0B0\uC3F9\uFB5C\uC5B8\uD1BB\uFB5D"+
-            "\uF0B1\uF0B2\uF0B3\uF0B4\uF0B5\uD1BC\uFB5E\uD1EC"+
-            "\uFB5F\uF0B7\uF0B6\uD4A7\uFB60\uCDD2\uF0B8\uF0BA"+
-            "\uF0B9\uF0BB\uF0BC\uFB61\uFB62\uB8EB\uF0BD\uBAE8"+
-            "\uFB63\uF0BE\uF0BF\uBEE9\uF0C0\uB6EC\uF0C1\uF0C2"+
-            "\uF0C3\uF0C4\uC8B5\uF0C5\uF0C6\uFB64\uF0C7\uC5F4"+
-            "\uFB65\uF0C8\uFB66\uFB67\uFB68\uF0C9\uFB69\uF0CA"+
-            "\uF7BD\uFB6A\uF0CB\uF0CC\uF0CD\uFB6B\uF0CE\uFB6C"+
-            "\uFB6D\uFB6E\uFB6F\uF0CF\uBAD7\uFB70\uF0D0\uF0D1"+
-            "\uF0D2\uF0D3\uF0D4\uF0D5\uF0D6\uF0D8\uFB71\uFB72"+
-            "\uD3A5\uF0D7\uFB73\uF0D9\uFB74\uFB75\uFB76\uFB77"+
-            "\uFB78\uFB79\uFB7A\uFB7B\uFB7C\uFB7D\uF5BA\uC2B9"+
-            "\uFB7E\uFB80\uF7E4\uFB81\uFB82\uFB83\uFB84\uF7E5"+
-            "\uF7E6\uFB85\uFB86\uF7E7\uFB87\uFB88\uFB89\uFB8A"+
-            "\uFB8B\uFB8C\uF7E8\uC2B4\uFB8D\uFB8E\uFB8F\uFB90"+
-            "\uFB91\uFB92\uFB93\uFB94\uFB95\uF7EA\uFB96\uF7EB"+
-            "\uFB97\uFB98\uFB99\uFB9A\uFB9B\uFB9C\uC2F3\uFB9D"+
-            "\uFB9E\uFB9F\uFBA0\uFC40\uFC41\uFC42\uFC43\uFC44"+
-            "\uFC45\uFC46\uFC47\uFC48\uF4F0\uFC49\uFC4A\uFC4B"+
-            "\uF4EF\uFC4C\uFC4D\uC2E9\uFC4E\uF7E1\uF7E2\uFC4F"+
-            "\uFC50\uFC51\uFC52\uFC53\uBBC6\uFC54\uFC55\uFC56"+
-            "\uFC57\uD9E4\uFC58\uFC59\uFC5A\uCAF2\uC0E8\uF0A4"+
-            "\uFC5B\uBADA\uFC5C\uFC5D\uC7AD\uFC5E\uFC5F\uFC60"+
-            "\uC4AC\uFC61\uFC62\uF7EC\uF7ED\uF7EE\uFC63\uF7F0"+
-            "\uF7EF\uFC64\uF7F1\uFC65\uFC66\uF7F4\uFC67\uF7F3"+
-            "\uFC68\uF7F2\uF7F5\uFC69\uFC6A\uFC6B\uFC6C\uF7F6"+
-            "\uFC6D\uFC6E\uFC6F\uFC70\uFC71\uFC72\uFC73\uFC74"+
-            "\uFC75\uEDE9\uFC76\uEDEA\uEDEB\uFC77\uF6BC\uFC78"+
-            "\uFC79\uFC7A\uFC7B\uFC7C\uFC7D\uFC7E\uFC80\uFC81"+
-            "\uFC82\uFC83\uFC84\uF6BD\uFC85\uF6BE\uB6A6\uFC86"+
-            "\uD8BE\uFC87\uFC88\uB9C4\uFC89\uFC8A\uFC8B\uD8BB"+
-            "\uFC8C\uDCB1\uFC8D\uFC8E\uFC8F\uFC90\uFC91\uFC92"+
-            "\uCAF3\uFC93\uF7F7\uFC94\uFC95\uFC96\uFC97\uFC98"+
-            "\uFC99\uFC9A\uFC9B\uFC9C\uF7F8\uFC9D\uFC9E\uF7F9"+
-            "\uFC9F\uFCA0\uFD40\uFD41\uFD42\uFD43\uFD44\uF7FB"+
-            "\uFD45\uF7FA\uFD46\uB1C7\uFD47\uF7FC\uF7FD\uFD48"+
-            "\uFD49\uFD4A\uFD4B\uFD4C\uF7FE\uFD4D\uFD4E\uFD4F"+
-            "\uFD50\uFD51\uFD52\uFD53\uFD54\uFD55\uFD56\uFD57"+
-            "\uC6EB\uECB4\uFD58\uFD59\uFD5A\uFD5B\uFD5C\uFD5D"+
-            "\uFD5E\uFD5F\uFD60\uFD61\uFD62\uFD63\uFD64\uFD65"+
-            "\uFD66\uFD67\uFD68\uFD69\uFD6A\uFD6B\uFD6C\uFD6D"+
-            "\uFD6E\uFD6F\uFD70\uFD71\uFD72\uFD73\uFD74\uFD75"+
-            "\uFD76\uFD77\uFD78\uFD79\uFD7A\uFD7B\uFD7C\uFD7D"+
-            "\uFD7E\uFD80\uFD81\uFD82\uFD83\uFD84\uFD85\uB3DD"+
-            "\uF6B3\uFD86\uFD87\uF6B4\uC1E4\uF6B5\uF6B6\uF6B7"+
-            "\uF6B8\uF6B9\uF6BA\uC8A3\uF6BB\uFD88\uFD89\uFD8A"+
-            "\uFD8B\uFD8C\uFD8D\uFD8E\uFD8F\uFD90\uFD91\uFD92"+
-            "\uFD93\uC1FA\uB9A8\uEDE8\uFD94\uFD95\uFD96\uB9EA"+
-            "\uD9DF\uFD97\uFD98\uFD99\uFD9A\uFD9B\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uAAA1\uAAA2\uAAA3\uAAA4\uAAA5\uAAA6\uAAA7\uAAA8"+
-            "\uAAA9\uAAAA\uAAAB\uAAAC\uAAAD\uAAAE\uAAAF\uAAB0"+
-            "\uAAB1\uAAB2\uAAB3\uAAB4\uAAB5\uAAB6\uAAB7\uAAB8"+
-            "\uAAB9\uAABA\uAABB\uAABC\uAABD\uAABE\uAABF\uAAC0"+
-            "\uAAC1\uAAC2\uAAC3\uAAC4\uAAC5\uAAC6\uAAC7\uAAC8"+
-            "\uAAC9\uAACA\uAACB\uAACC\uAACD\uAACE\uAACF\uAAD0"+
-            "\uAAD1\uAAD2\uAAD3\uAAD4\uAAD5\uAAD6\uAAD7\uAAD8"+
-            "\uAAD9\uAADA\uAADB\uAADC\uAADD\uAADE\uAADF\uAAE0"+
-            "\uAAE1\uAAE2\uAAE3\uAAE4\uAAE5\uAAE6\uAAE7\uAAE8"+
-            "\uAAE9\uAAEA\uAAEB\uAAEC\uAAED\uAAEE\uAAEF\uAAF0"+
-            "\uAAF1\uAAF2\uAAF3\uAAF4\uAAF5\uAAF6\uAAF7\uAAF8"+
-            "\uAAF9\uAAFA\uAAFB\uAAFC\uAAFD\uAAFE\uABA1\uABA2"+
-            "\uABA3\uABA4\uABA5\uABA6\uABA7\uABA8\uABA9\uABAA"+
-            "\uABAB\uABAC\uABAD\uABAE\uABAF\uABB0\uABB1\uABB2"+
-            "\uABB3\uABB4\uABB5\uABB6\uABB7\uABB8\uABB9\uABBA"+
-            "\uABBB\uABBC\uABBD\uABBE\uABBF\uABC0\uABC1\uABC2"+
-            "\uABC3\uABC4\uABC5\uABC6\uABC7\uABC8\uABC9\uABCA"+
-            "\uABCB\uABCC\uABCD\uABCE\uABCF\uABD0\uABD1\uABD2"+
-            "\uABD3\uABD4\uABD5\uABD6\uABD7\uABD8\uABD9\uABDA"+
-            "\uABDB\uABDC\uABDD\uABDE\uABDF\uABE0\uABE1\uABE2"+
-            "\uABE3\uABE4\uABE5\uABE6\uABE7\uABE8\uABE9\uABEA"+
-            "\uABEB\uABEC\uABED\uABEE\uABEF\uABF0\uABF1\uABF2"+
-            "\uABF3\uABF4\uABF5\uABF6\uABF7\uABF8\uABF9\uABFA"+
-            "\uABFB\uABFC\uABFD\uABFE\uACA1\uACA2\uACA3\uACA4"+
-            "\uACA5\uACA6\uACA7\uACA8\uACA9\uACAA\uACAB\uACAC"+
-            "\uACAD\uACAE\uACAF\uACB0\uACB1\uACB2\uACB3\uACB4"+
-            "\uACB5\uACB6\uACB7\uACB8\uACB9\uACBA\uACBB\uACBC"+
-            "\uACBD\uACBE\uACBF\uACC0\uACC1\uACC2\uACC3\uACC4"+
-            "\uACC5\uACC6\uACC7\uACC8\uACC9\uACCA\uACCB\uACCC"+
-            "\uACCD\uACCE\uACCF\uACD0\uACD1\uACD2\uACD3\uACD4"+
-            "\uACD5\uACD6\uACD7\uACD8\uACD9\uACDA\uACDB\uACDC"+
-            "\uACDD\uACDE\uACDF\uACE0\uACE1\uACE2\uACE3\uACE4"+
-            "\uACE5\uACE6\uACE7\uACE8\uACE9\uACEA\uACEB\uACEC"+
-            "\uACED\uACEE\uACEF\uACF0\uACF1\uACF2\uACF3\uACF4"+
-            "\uACF5\uACF6\uACF7\uACF8\uACF9\uACFA\uACFB\uACFC"+
-            "\uACFD\uACFE\uADA1\uADA2\uADA3\uADA4\uADA5\uADA6"+
-            "\uADA7\uADA8\uADA9\uADAA\uADAB\uADAC\uADAD\uADAE"+
-            "\uADAF\uADB0\uADB1\uADB2\uADB3\uADB4\uADB5\uADB6"+
-            "\uADB7\uADB8\uADB9\uADBA\uADBB\uADBC\uADBD\uADBE"+
-            "\uADBF\uADC0\uADC1\uADC2\uADC3\uADC4\uADC5\uADC6"+
-            "\uADC7\uADC8\uADC9\uADCA\uADCB\uADCC\uADCD\uADCE"+
-            "\uADCF\uADD0\uADD1\uADD2\uADD3\uADD4\uADD5\uADD6"+
-            "\uADD7\uADD8\uADD9\uADDA\uADDB\uADDC\uADDD\uADDE"+
-            "\uADDF\uADE0\uADE1\uADE2\uADE3\uADE4\uADE5\uADE6"+
-            "\uADE7\uADE8\uADE9\uADEA\uADEB\uADEC\uADED\uADEE"+
-            "\uADEF\uADF0\uADF1\uADF2\uADF3\uADF4\uADF5\uADF6"+
-            "\uADF7\uADF8\uADF9\uADFA\uADFB\uADFC\uADFD\uADFE"+
-            "\uAEA1\uAEA2\uAEA3\uAEA4\uAEA5\uAEA6\uAEA7\uAEA8"+
-            "\uAEA9\uAEAA\uAEAB\uAEAC\uAEAD\uAEAE\uAEAF\uAEB0"+
-            "\uAEB1\uAEB2\uAEB3\uAEB4\uAEB5\uAEB6\uAEB7\uAEB8"+
-            "\uAEB9\uAEBA\uAEBB\uAEBC\uAEBD\uAEBE\uAEBF\uAEC0"+
-            "\uAEC1\uAEC2\uAEC3\uAEC4\uAEC5\uAEC6\uAEC7\uAEC8"+
-            "\uAEC9\uAECA\uAECB\uAECC\uAECD\uAECE\uAECF\uAED0"+
-            "\uAED1\uAED2\uAED3\uAED4\uAED5\uAED6\uAED7\uAED8"+
-            "\uAED9\uAEDA\uAEDB\uAEDC\uAEDD\uAEDE\uAEDF\uAEE0"+
-            "\uAEE1\uAEE2\uAEE3\uAEE4\uAEE5\uAEE6\uAEE7\uAEE8"+
-            "\uAEE9\uAEEA\uAEEB\uAEEC\uAEED\uAEEE\uAEEF\uAEF0"+
-            "\uAEF1\uAEF2\uAEF3\uAEF4\uAEF5\uAEF6\uAEF7\uAEF8"+
-            "\uAEF9\uAEFA\uAEFB\uAEFC\uAEFD\uAEFE\uAFA1\uAFA2"+
-            "\uAFA3\uAFA4\uAFA5\uAFA6\uAFA7\uAFA8\uAFA9\uAFAA"+
-            "\uAFAB\uAFAC\uAFAD\uAFAE\uAFAF\uAFB0\uAFB1\uAFB2"+
-            "\uAFB3\uAFB4\uAFB5\uAFB6\uAFB7\uAFB8\uAFB9\uAFBA"+
-            "\uAFBB\uAFBC\uAFBD\uAFBE\uAFBF\uAFC0\uAFC1\uAFC2"+
-            "\uAFC3\uAFC4\uAFC5\uAFC6\uAFC7\uAFC8\uAFC9\uAFCA"+
-            "\uAFCB\uAFCC\uAFCD\uAFCE\uAFCF\uAFD0\uAFD1\uAFD2"+
-            "\uAFD3\uAFD4\uAFD5\uAFD6\uAFD7\uAFD8\uAFD9\uAFDA"+
-            "\uAFDB\uAFDC\uAFDD\uAFDE\uAFDF\uAFE0\uAFE1\uAFE2"+
-            "\uAFE3\uAFE4\uAFE5\uAFE6\uAFE7\uAFE8\uAFE9\uAFEA"+
-            "\uAFEB\uAFEC\uAFED\uAFEE\uAFEF\uAFF0\uAFF1\uAFF2"+
-            "\uAFF3\uAFF4\uAFF5\uAFF6\uAFF7\uAFF8\uAFF9\uAFFA"+
-            "\uAFFB\uAFFC\uAFFD\uAFFE\uF8A1\uF8A2\uF8A3\uF8A4"+
-            "\uF8A5\uF8A6\uF8A7\uF8A8\uF8A9\uF8AA\uF8AB\uF8AC"+
-            "\uF8AD\uF8AE\uF8AF\uF8B0\uF8B1\uF8B2\uF8B3\uF8B4"+
-            "\uF8B5\uF8B6\uF8B7\uF8B8\uF8B9\uF8BA\uF8BB\uF8BC"+
-            "\uF8BD\uF8BE\uF8BF\uF8C0\uF8C1\uF8C2\uF8C3\uF8C4"+
-            "\uF8C5\uF8C6\uF8C7\uF8C8\uF8C9\uF8CA\uF8CB\uF8CC"+
-            "\uF8CD\uF8CE\uF8CF\uF8D0\uF8D1\uF8D2\uF8D3\uF8D4"+
-            "\uF8D5\uF8D6\uF8D7\uF8D8\uF8D9\uF8DA\uF8DB\uF8DC"+
-            "\uF8DD\uF8DE\uF8DF\uF8E0\uF8E1\uF8E2\uF8E3\uF8E4"+
-            "\uF8E5\uF8E6\uF8E7\uF8E8\uF8E9\uF8EA\uF8EB\uF8EC"+
-            "\uF8ED\uF8EE\uF8EF\uF8F0\uF8F1\uF8F2\uF8F3\uF8F4"+
-            "\uF8F5\uF8F6\uF8F7\uF8F8\uF8F9\uF8FA\uF8FB\uF8FC"+
-            "\uF8FD\uF8FE\uF9A1\uF9A2\uF9A3\uF9A4\uF9A5\uF9A6"+
-            "\uF9A7\uF9A8\uF9A9\uF9AA\uF9AB\uF9AC\uF9AD\uF9AE"+
-            "\uF9AF\uF9B0\uF9B1\uF9B2\uF9B3\uF9B4\uF9B5\uF9B6"+
-            "\uF9B7\uF9B8\uF9B9\uF9BA\uF9BB\uF9BC\uF9BD\uF9BE"+
-            "\uF9BF\uF9C0\uF9C1\uF9C2\uF9C3\uF9C4\uF9C5\uF9C6"+
-            "\uF9C7\uF9C8\uF9C9\uF9CA\uF9CB\uF9CC\uF9CD\uF9CE"+
-            "\uF9CF\uF9D0\uF9D1\uF9D2\uF9D3\uF9D4\uF9D5\uF9D6"+
-            "\uF9D7\uF9D8\uF9D9\uF9DA\uF9DB\uF9DC\uF9DD\uF9DE"+
-            "\uF9DF\uF9E0\uF9E1\uF9E2\uF9E3\uF9E4\uF9E5\uF9E6"+
-            "\uF9E7\uF9E8\uF9E9\uF9EA\uF9EB\uF9EC\uF9ED\uF9EE"+
-            "\uF9EF\uF9F0\uF9F1\uF9F2\uF9F3\uF9F4\uF9F5\uF9F6"+
-            "\uF9F7\uF9F8\uF9F9\uF9FA\uF9FB\uF9FC\uF9FD\uF9FE"+
-            "\uFAA1\uFAA2\uFAA3\uFAA4\uFAA5\uFAA6\uFAA7\uFAA8"+
-            "\uFAA9\uFAAA\uFAAB\uFAAC\uFAAD\uFAAE\uFAAF\uFAB0"+
-            "\uFAB1\uFAB2\uFAB3\uFAB4\uFAB5\uFAB6\uFAB7\uFAB8"+
-            "\uFAB9\uFABA\uFABB\uFABC\uFABD\uFABE\uFABF\uFAC0"+
-            "\uFAC1\uFAC2\uFAC3\uFAC4\uFAC5\uFAC6\uFAC7\uFAC8"+
-            "\uFAC9\uFACA\uFACB\uFACC\uFACD\uFACE\uFACF\uFAD0"+
-            "\uFAD1\uFAD2\uFAD3\uFAD4\uFAD5\uFAD6\uFAD7\uFAD8"+
-            "\uFAD9\uFADA\uFADB\uFADC\uFADD\uFADE\uFADF\uFAE0"+
-            "\uFAE1\uFAE2\uFAE3\uFAE4\uFAE5\uFAE6\uFAE7\uFAE8"+
-            "\uFAE9\uFAEA\uFAEB\uFAEC\uFAED\uFAEE\uFAEF\uFAF0"+
-            "\uFAF1\uFAF2\uFAF3\uFAF4\uFAF5\uFAF6\uFAF7\uFAF8"+
-            "\uFAF9\uFAFA\uFAFB\uFAFC\uFAFD\uFAFE\uFBA1\uFBA2"+
-            "\uFBA3\uFBA4\uFBA5\uFBA6\uFBA7\uFBA8\uFBA9\uFBAA"+
-            "\uFBAB\uFBAC\uFBAD\uFBAE\uFBAF\uFBB0\uFBB1\uFBB2"+
-            "\uFBB3\uFBB4\uFBB5\uFBB6\uFBB7\uFBB8\uFBB9\uFBBA"+
-            "\uFBBB\uFBBC\uFBBD\uFBBE\uFBBF\uFBC0\uFBC1\uFBC2"+
-            "\uFBC3\uFBC4\uFBC5\uFBC6\uFBC7\uFBC8\uFBC9\uFBCA"+
-            "\uFBCB\uFBCC\uFBCD\uFBCE\uFBCF\uFBD0\uFBD1\uFBD2"+
-            "\uFBD3\uFBD4\uFBD5\uFBD6\uFBD7\uFBD8\uFBD9\uFBDA"+
-            "\uFBDB\uFBDC\uFBDD\uFBDE\uFBDF\uFBE0\uFBE1\uFBE2"+
-            "\uFBE3\uFBE4\uFBE5\uFBE6\uFBE7\uFBE8\uFBE9\uFBEA"+
-            "\uFBEB\uFBEC\uFBED\uFBEE\uFBEF\uFBF0\uFBF1\uFBF2"+
-            "\uFBF3\uFBF4\uFBF5\uFBF6\uFBF7\uFBF8\uFBF9\uFBFA"+
-            "\uFBFB\uFBFC\uFBFD\uFBFE\uFCA1\uFCA2\uFCA3\uFCA4"+
-            "\uFCA5\uFCA6\uFCA7\uFCA8\uFCA9\uFCAA\uFCAB\uFCAC"+
-            "\uFCAD\uFCAE\uFCAF\uFCB0\uFCB1\uFCB2\uFCB3\uFCB4"+
-            "\uFCB5\uFCB6\uFCB7\uFCB8\uFCB9\uFCBA\uFCBB\uFCBC"+
-            "\uFCBD\uFCBE\uFCBF\uFCC0\uFCC1\uFCC2\uFCC3\uFCC4"+
-            "\uFCC5\uFCC6\uFCC7\uFCC8\uFCC9\uFCCA\uFCCB\uFCCC"+
-            "\uFCCD\uFCCE\uFCCF\uFCD0\uFCD1\uFCD2\uFCD3\uFCD4"+
-            "\uFCD5\uFCD6\uFCD7\uFCD8\uFCD9\uFCDA\uFCDB\uFCDC"+
-            "\uFCDD\uFCDE\uFCDF\uFCE0\uFCE1\uFCE2\uFCE3\uFCE4"+
-            "\uFCE5\uFCE6\uFCE7\uFCE8\uFCE9\uFCEA\uFCEB\uFCEC"+
-            "\uFCED\uFCEE\uFCEF\uFCF0\uFCF1\uFCF2\uFCF3\uFCF4"+
-            "\uFCF5\uFCF6\uFCF7\uFCF8\uFCF9\uFCFA\uFCFB\uFCFC"+
-            "\uFCFD\uFCFE\uFDA1\uFDA2\uFDA3\uFDA4\uFDA5\uFDA6"+
-            "\uFDA7\uFDA8\uFDA9\uFDAA\uFDAB\uFDAC\uFDAD\uFDAE"+
-            "\uFDAF\uFDB0\uFDB1\uFDB2\uFDB3\uFDB4\uFDB5\uFDB6"+
-            "\uFDB7\uFDB8\uFDB9\uFDBA\uFDBB\uFDBC\uFDBD\uFDBE"+
-            "\uFDBF\uFDC0\uFDC1\uFDC2\uFDC3\uFDC4\uFDC5\uFDC6"+
-            "\uFDC7\uFDC8\uFDC9\uFDCA\uFDCB\uFDCC\uFDCD\uFDCE"+
-            "\uFDCF\uFDD0\uFDD1\uFDD2\uFDD3\uFDD4\uFDD5\uFDD6"+
-            "\uFDD7\uFDD8\uFDD9\uFDDA\uFDDB\uFDDC\uFDDD\uFDDE"+
-            "\uFDDF\uFDE0\uFDE1\uFDE2\uFDE3\uFDE4\uFDE5\uFDE6"+
-            "\uFDE7\uFDE8\uFDE9\uFDEA\uFDEB\uFDEC\uFDED\uFDEE"+
-            "\uFDEF\uFDF0\uFDF1\uFDF2\uFDF3\uFDF4\uFDF5\uFDF6"+
-            "\uFDF7\uFDF8\uFDF9\uFDFA\uFDFB\uFDFC\uFDFD\uFDFE"+
-            "\uFEA1\uFEA2\uFEA3\uFEA4\uFEA5\uFEA6\uFEA7\uFEA8"+
-            "\uFEA9\uFEAA\uFEAB\uFEAC\uFEAD\uFEAE\uFEAF\uFEB0"+
-            "\uFEB1\uFEB2\uFEB3\uFEB4\uFEB5\uFEB6\uFEB7\uFEB8"+
-            "\uFEB9\uFEBA\uFEBB\uFEBC\uFEBD\uFEBE\uFEBF\uFEC0"+
-            "\uFEC1\uFEC2\uFEC3\uFEC4\uFEC5\uFEC6\uFEC7\uFEC8"+
-            "\uFEC9\uFECA\uFECB\uFECC\uFECD\uFECE\uFECF\uFED0"+
-            "\uFED1\uFED2\uFED3\uFED4\uFED5\uFED6\uFED7\uFED8"+
-            "\uFED9\uFEDA\uFEDB\uFEDC\uFEDD\uFEDE\uFEDF\uFEE0"+
-            "\uFEE1\uFEE2\uFEE3\uFEE4\uFEE5\uFEE6\uFEE7\uFEE8"+
-            "\uFEE9\uFEEA\uFEEB\uFEEC\uFEED\uFEEE\uFEEF\uFEF0"+
-            "\uFEF1\uFEF2\uFEF3\uFEF4\uFEF5\uFEF6\uFEF7\uFEF8"+
-            "\uFEF9\uFEFA\uFEFB\uFEFC\uFEFD\uFEFE\uA140\uA141"+
-            "\uA142\uA143\uA144\uA145\uA146\uA147\uA148\uA149"+
-            "\uA14A\uA14B\uA14C\uA14D\uA14E\uA14F\uA150\uA151"+
-            "\uA152\uA153\uA154\uA155\uA156\uA157\uA158\uA159"+
-            "\uA15A\uA15B\uA15C\uA15D\uA15E\uA15F\uA160\uA161"+
-            "\uA162\uA163\uA164\uA165\uA166\uA167\uA168\uA169"+
-            "\uA16A\uA16B\uA16C\uA16D\uA16E\uA16F\uA170\uA171"+
-            "\uA172\uA173\uA174\uA175\uA176\uA177\uA178\uA179"+
-            "\uA17A\uA17B\uA17C\uA17D\uA17E\uA180\uA181\uA182"+
-            "\uA183\uA184\uA185\uA186\uA187\uA188\uA189\uA18A"+
-            "\uA18B\uA18C\uA18D\uA18E\uA18F\uA190\uA191\uA192"+
-            "\uA193\uA194\uA195\uA196\uA197\uA198\uA199\uA19A"+
-            "\uA19B\uA19C\uA19D\uA19E\uA19F\uA1A0\uA240\uA241"+
-            "\uA242\uA243\uA244\uA245\uA246\uA247\uA248\uA249"+
-            "\uA24A\uA24B\uA24C\uA24D\uA24E\uA24F\uA250\uA251"+
-            "\uA252\uA253\uA254\uA255\uA256\uA257\uA258\uA259"+
-            "\uA25A\uA25B\uA25C\uA25D\uA25E\uA25F\uA260\uA261"+
-            "\uA262\uA263\uA264\uA265\uA266\uA267\uA268\uA269"+
-            "\uA26A\uA26B\uA26C\uA26D\uA26E\uA26F\uA270\uA271"+
-            "\uA272\uA273\uA274\uA275\uA276\uA277\uA278\uA279"+
-            "\uA27A\uA27B\uA27C\uA27D\uA27E\uA280\uA281\uA282"+
-            "\uA283\uA284\uA285\uA286\uA287\uA288\uA289\uA28A"+
-            "\uA28B\uA28C\uA28D\uA28E\uA28F\uA290\uA291\uA292"+
-            "\uA293\uA294\uA295\uA296\uA297\uA298\uA299\uA29A"+
-            "\uA29B\uA29C\uA29D\uA29E\uA29F\uA2A0\uA340\uA341"+
-            "\uA342\uA343\uA344\uA345\uA346\uA347\uA348\uA349"+
-            "\uA34A\uA34B\uA34C\uA34D\uA34E\uA34F\uA350\uA351"+
-            "\uA352\uA353\uA354\uA355\uA356\uA357\uA358\uA359"+
-            "\uA35A\uA35B\uA35C\uA35D\uA35E\uA35F\uA360\uA361"+
-            "\uA362\uA363\uA364\uA365\uA366\uA367\uA368\uA369"+
-            "\uA36A\uA36B\uA36C\uA36D\uA36E\uA36F\uA370\uA371"+
-            "\uA372\uA373\uA374\uA375\uA376\uA377\uA378\uA379"+
-            "\uA37A\uA37B\uA37C\uA37D\uA37E\uA380\uA381\uA382"+
-            "\uA383\uA384\uA385\uA386\uA387\uA388\uA389\uA38A"+
-            "\uA38B\uA38C\uA38D\uA38E\uA38F\uA390\uA391\uA392"+
-            "\uA393\uA394\uA395\uA396\uA397\uA398\uA399\uA39A"+
-            "\uA39B\uA39C\uA39D\uA39E\uA39F\uA3A0\uA440\uA441"+
-            "\uA442\uA443\uA444\uA445\uA446\uA447\uA448\uA449"+
-            "\uA44A\uA44B\uA44C\uA44D\uA44E\uA44F\uA450\uA451"+
-            "\uA452\uA453\uA454\uA455\uA456\uA457\uA458\uA459"+
-            "\uA45A\uA45B\uA45C\uA45D\uA45E\uA45F\uA460\uA461"+
-            "\uA462\uA463\uA464\uA465\uA466\uA467\uA468\uA469"+
-            "\uA46A\uA46B\uA46C\uA46D\uA46E\uA46F\uA470\uA471"+
-            "\uA472\uA473\uA474\uA475\uA476\uA477\uA478\uA479"+
-            "\uA47A\uA47B\uA47C\uA47D\uA47E\uA480\uA481\uA482"+
-            "\uA483\uA484\uA485\uA486\uA487\uA488\uA489\uA48A"+
-            "\uA48B\uA48C\uA48D\uA48E\uA48F\uA490\uA491\uA492"+
-            "\uA493\uA494\uA495\uA496\uA497\uA498\uA499\uA49A"+
-            "\uA49B\uA49C\uA49D\uA49E\uA49F\uA4A0\uA540\uA541"+
-            "\uA542\uA543\uA544\uA545\uA546\uA547\uA548\uA549"+
-            "\uA54A\uA54B\uA54C\uA54D\uA54E\uA54F\uA550\uA551"+
-            "\uA552\uA553\uA554\uA555\uA556\uA557\uA558\uA559"+
-            "\uA55A\uA55B\uA55C\uA55D\uA55E\uA55F\uA560\uA561"+
-            "\uA562\uA563\uA564\uA565\uA566\uA567\uA568\uA569"+
-            "\uA56A\uA56B\uA56C\uA56D\uA56E\uA56F\uA570\uA571"+
-            "\uA572\uA573\uA574\uA575\uA576\uA577\uA578\uA579"+
-            "\uA57A\uA57B\uA57C\uA57D\uA57E\uA580\uA581\uA582"+
-            "\uA583\uA584\uA585\uA586\uA587\uA588\uA589\uA58A"+
-            "\uA58B\uA58C\uA58D\uA58E\uA58F\uA590\uA591\uA592"+
-            "\uA593\uA594\uA595\uA596\uA597\uA598\uA599\uA59A"+
-            "\uA59B\uA59C\uA59D\uA59E\uA59F\uA5A0\uA640\uA641"+
-            "\uA642\uA643\uA644\uA645\uA646\uA647\uA648\uA649"+
-            "\uA64A\uA64B\uA64C\uA64D\uA64E\uA64F\uA650\uA651"+
-            "\uA652\uA653\uA654\uA655\uA656\uA657\uA658\uA659"+
-            "\uA65A\uA65B\uA65C\uA65D\uA65E\uA65F\uA660\uA661"+
-            "\uA662\uA663\uA664\uA665\uA666\uA667\uA668\uA669"+
-            "\uA66A\uA66B\uA66C\uA66D\uA66E\uA66F\uA670\uA671"+
-            "\uA672\uA673\uA674\uA675\uA676\uA677\uA678\uA679"+
-            "\uA67A\uA67B\uA67C\uA67D\uA67E\uA680\uA681\uA682"+
-            "\uA683\uA684\uA685\uA686\uA687\uA688\uA689\uA68A"+
-            "\uA68B\uA68C\uA68D\uA68E\uA68F\uA690\uA691\uA692"+
-            "\uA693\uA694\uA695\uA696\uA697\uA698\uA699\uA69A"+
-            "\uA69B\uA69C\uA69D\uA69E\uA69F\uA6A0\uA740\uA741"+
-            "\uA742\uA743\uA744\uA745\uA746\uA747\uA748\uA749"+
-            "\uA74A\uA74B\uA74C\uA74D\uA74E\uA74F\uA750\uA751"+
-            "\uA752\uA753\uA754\uA755\uA756\uA757\uA758\uA759"+
-            "\uA75A\uA75B\uA75C\uA75D\uA75E\uA75F\uA760\uA761"+
-            "\uA762\uA763\uA764\uA765\uA766\uA767\uA768\uA769"+
-            "\uA76A\uA76B\uA76C\uA76D\uA76E\uA76F\uA770\uA771"+
-            "\uA772\uA773\uA774\uA775\uA776\uA777\uA778\uA779"+
-            "\uA77A\uA77B\uA77C\uA77D\uA77E\uA780\uA781\uA782"+
-            "\uA783\uA784\uA785\uA786\uA787\uA788\uA789\uA78A"+
-            "\uA78B\uA78C\uA78D\uA78E\uA78F\uA790\uA791\uA792"+
-            "\uA793\uA794\uA795\uA796\uA797\uA798\uA799\uA79A"+
-            "\uA79B\uA79C\uA79D\uA79E\uA79F\uA7A0\uA2AB\uA2AC"+
-            "\uA2AD\uA2AE\uA2AF\uA2B0\u0000\uA2E4\uA2EF\uA2F0"+
-            "\uA2FD\uA2FE\uA4F4\uA4F5\uA4F6\uA4F7\uA4F8\uA4F9"+
-            "\uA4FA\uA4FB\uA4FC\uA4FD\uA4FE\uA5F7\uA5F8\uA5F9"+
-            "\uA5FA\uA5FB\uA5FC\uA5FD\uA5FE\uA6B9\uA6BA\uA6BB"+
-            "\uA6BC\uA6BD\uA6BE\uA6BF\uA6C0\uA6D9\uA6DA\uA6DB"+
-            "\uA6DC\uA6DD\uA6DE\uA6DF\uA6EC\uA6ED\uA6F3\uA6F6"+
-            "\uA6F7\uA6F8\uA6F9\uA6FA\uA6FB\uA6FC\uA6FD\uA6FE"+
-            "\uA7C2\uA7C3\uA7C4\uA7C5\uA7C6\uA7C7\uA7C8\uA7C9"+
-            "\uA7CA\uA7CB\uA7CC\uA7CD\uA7CE\uA7CF\uA7D0\uA7F2"+
-            "\uA7F3\uA7F4\uA7F5\uA7F6\uA7F7\uA7F8\uA7F9\uA7FA"+
-            "\uA7FB\uA7FC\uA7FD\uA7FE\uA896\uA897\uA898\uA899"+
-            "\uA89A\uA89B\uA89C\uA89D\uA89E\uA89F\uA8A0\uA8BC"+
-            "\u0000\uA8C1\uA8C2\uA8C3\uA8C4\uA8EA\uA8EB\uA8EC"+
-            "\uA8ED\uA8EE\uA8EF\uA8F0\uA8F1\uA8F2\uA8F3\uA8F4"+
-            "\uA8F5\uA8F6\uA8F7\uA8F8\uA8F9\uA8FA\uA8FB\uA8FC"+
-            "\uA8FD\uA8FE\uA958\uA95B\uA95D\uA95E\uA95F\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uA997\uA998\uA999\uA99A"+
-            "\uA99B\uA99C\uA99D\uA99E\uA99F\uA9A0\uA9A1\uA9A2"+
-            "\uA9A3\uA9F0\uA9F1\uA9F2\uA9F3\uA9F4\uA9F5\uA9F6"+
-            "\uA9F7\uA9F8\uA9F9\uA9FA\uA9FB\uA9FC\uA9FD\uA9FE"+
-            "\uD7FA\uD7FB\uD7FC\uD7FD\uD7FE\u0000\uFE51\uFE52"+
-            "\uFE53\u0000\u0000\u0000\u0000\u0000\uFE59\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uFE61\u0000"+
-            "\u0000\u0000\u0000\uFE66\uFE67\u0000\u0000\u0000"+
-            "\u0000\uFE6C\uFE6D\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uFE76\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uFE7E\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uFE90\uFE91\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uFEA0\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uFD9C\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uFD9D\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uFD9E\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uFD9F"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uFDA0\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uFE40\uFE41\uFE42\uFE43"+
-            "\u0000\uFE44\u0000\uFE45\uFE46\u0000\u0000\u0000"+
-            "\uFE47\u0000\u0000\u0000\u0000\u0000\u0000\uFE48"+
-            "\uFE49\uFE4A\u0000\uFE4B\uFE4C\u0000\u0000\uFE4D"+
-            "\uFE4E\uFE4F\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000";
-
-        private final static String innerIndex8=
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uA955\uA6F2\u0000\uA6F4\uA6F5\uA6E0\uA6E1\uA6F0"+
-            "\uA6F1\uA6E2\uA6E3\uA6EE\uA6EF\uA6E6\uA6E7\uA6E4"+
-            "\uA6E5\uA6E8\uA6E9\uA6EA\uA6EB\u0000\u0000\u0000"+
-            "\u0000\uA968\uA969\uA96A\uA96B\uA96C\uA96D\uA96E"+
-            "\uA96F\uA970\uA971\u0000\uA972\uA973\uA974\uA975"+
-            "\u0000\uA976\uA977\uA978\uA979\uA97A\uA97B\uA97C"+
-            "\uA97D\uA97E\uA980\uA981\uA982\uA983\uA984\u0000"+
-            "\uA985\uA986\uA987\uA988\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uA3A1\uA3A2\uA3A3\uA1E7\uA3A5\uA3A6\uA3A7"+
-            "\uA3A8\uA3A9\uA3AA\uA3AB\uA3AC\uA3AD\uA3AE\uA3AF"+
-            "\uA3B0\uA3B1\uA3B2\uA3B3\uA3B4\uA3B5\uA3B6\uA3B7"+
-            "\uA3B8\uA3B9\uA3BA\uA3BB\uA3BC\uA3BD\uA3BE\uA3BF"+
-            "\uA3C0\uA3C1\uA3C2\uA3C3\uA3C4\uA3C5\uA3C6\uA3C7"+
-            "\uA3C8\uA3C9\uA3CA\uA3CB\uA3CC\uA3CD\uA3CE\uA3CF"+
-            "\uA3D0\uA3D1\uA3D2\uA3D3\uA3D4\uA3D5\uA3D6\uA3D7"+
-            "\uA3D8\uA3D9\uA3DA\uA3DB\uA3DC\uA3DD\uA3DE\uA3DF"+
-            "\uA3E0\uA3E1\uA3E2\uA3E3\uA3E4\uA3E5\uA3E6\uA3E7"+
-            "\uA3E8\uA3E9\uA3EA\uA3EB\uA3EC\uA3ED\uA3EE\uA3EF"+
-            "\uA3F0\uA3F1\uA3F2\uA3F3\uA3F4\uA3F5\uA3F6\uA3F7"+
-            "\uA3F8\uA3F9\uA3FA\uA3FB\uA3FC\uA3FD\uA1AB\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uA1E9\uA1EA\uA956\uA3FE\uA957\uA3A4\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000";
-
-        private final static short index1[] = {
-            1, 2, 3, 4, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-            6, 7, 8, 9, 10, 11, 12, 0, 0, 0, 0, 0, 0, 0, 13, 14,
-            15, 16, 17, 18, 19, 20, 21, 0, 0, 22, 23, 24, 25, 0, 0, 0,
-            26, 27, 0, 28, 29, 0, 30, 31, 0, 32, 0, 0, 33, 34, 35, 36,
-            37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
-            53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68,
-            69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
-            85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100,
-            101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116,
-            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-            117, 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, 0,
-            0, 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, 0, 0, 0, 128, 129
-        };
-
-        private final static String index2[] = {
-            innerIndex0,
-            innerIndex1,
-            innerIndex2,
-            innerIndex3,
-            innerIndex4,
-            innerIndex5,
-            innerIndex6,
-            innerIndex7,
-            innerIndex8
-        };
-
-        /* The default implementation creates a decoder and we don't have one */
-        public boolean isLegalReplacement(byte[] repl) {
-            return true;
-        }
-    }
-}
--- a/jdk/src/java.desktop/unix/classes/sun/awt/motif/X11GB18030_1.java	Thu May 14 20:14:44 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5271 +0,0 @@
-/*
- * Copyright (c) 2001, 2005, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.awt.motif;
-
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetEncoder;
-import java.nio.charset.CharsetDecoder;
-import sun.nio.cs.ext.DoubleByteEncoder;
-
-public class X11GB18030_1 extends Charset {
-    public X11GB18030_1 () {
-        super("X11GB18030_1", null);
-    }
-
-    public CharsetEncoder newEncoder() {
-        return new Encoder(this);
-    }
-
-    /* Seems like supporting a decoder is required, but we aren't going
-     * to be publically exposing this class, so no need to waste work
-     */
-    public CharsetDecoder newDecoder() {
-        throw new Error("Decoder is not implemented for X11GB18030_1 Charset");
-    }
-
-    public boolean contains(Charset cs) {
-        return cs instanceof X11GB18030_1;
-    }
-    private static class Encoder extends DoubleByteEncoder {
-        public Encoder(Charset cs) {
-            super(cs, index1, index2);
-        }
-        protected int encodeSingle(char inputChar) {
-            return -1;
-        }
-        private final static String innerIndex0=
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007"+
-            "\b\t\n\u000B\f\r\u000E\u000F"+
-            "\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017"+
-            "\u0018\u0019\u001A\u001B\u001C\u001D\u001E\u001F"+
-            "\u0020\u0021\"\u0023\u0000\u0024\u0025\u0000"+
-            "\u0000\u0026\'\u0028\u0029\u002A\u002B\u002C"+
-            "\u0000\u0000\u002D\u002E\u002F\u0030\u0031\u0000"+
-            "\u0032\u0033\u0034\u0035\u0036\u0037\u0038\u0039"+
-            "\u003A\u003B\u003C\u003D\u003E\u003F\u0040\u0041"+
-            "\u0042\u0043\u0044\u0045\u0046\u0047\u0048\u0049"+
-            "\u004A\u004B\u004C\u004D\u004E\u004F\u0050\u0000"+
-            "\u0051\u0052\u0053\u0054\u0055\u0056\u0057\u0058"+
-            "\u0000\u0000\u0059\u005A\u005B\\\u005D\u005E"+
-            "\u0000\u0000\u0000\u005F\u0000\u0000\u0060\u0061"+
-            "\u0062\u0063\u0000\u0000\u0064\u0065\u0066\u0000"+
-            "\u0067\u0000\u0000\u0068\u0000\u0069\u006A\u006B"+
-            "\u006C\u0000\u006D\u006E\u006F\u0070\u0071\u0072"+
-            "\u0073\u0074\u0075\u0076\u0077\u0078\u0079\u007A"+
-            "\u007B\u007C\u007D\u0000\u007E\u007F\u0080\u0081"+
-            "\u0082\u0083\u0084\u0000\u0085\u0086\u0087\u0088"+
-            "\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090"+
-            "\u0091\u0092\u0093\u0000\u0094\u0095\u0096\u0097"+
-            "\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F"+
-            "\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7"+
-            "\u00A8\u00A9\u00AA\u00AB\u0000\u00AC\u00AD\u00AE"+
-            "\u0000\u00AF\u00B0\u00B1\u00B2\u0000\u00B3\u00B4"+
-            "\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC"+
-            "\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4"+
-            "\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC"+
-            "\u00CD\u00CE\u00CF\u0000\u00D0\u00D1\u00D2\u00D3"+
-            "\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB"+
-            "\u00DC\u00DD\u00DE\u00DF\u00E0\u00E1\u00E2\u00E3"+
-            "\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB"+
-            "\u00EC\u00ED\u00EE\u00EF\u00F0\u00F1\u00F2\u00F3"+
-            "\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB"+
-            "\u00FC\u00FD\u00FE\u00FF\u0100\u0101\u0102\u0103"+
-            "\u0104\u0105\u0106\u0107\u0108\u0109\u010A\u010B"+
-            "\u010C\u010D\u010E\u010F\u0110\u0111\u0112\u0113"+
-            "\u0114\u0115\u0116\u0117\u0118\u0119\u011A\u011B"+
-            "\u011C\u011D\u011E\u011F\u0120\u0121\u0122\u0123"+
-            "\u0124\u0125\u0126\u0127\u0128\u0129\u012A\u012B"+
-            "\u012C\u012D\u012E\u012F\u0130\u0131\u0000\u0132"+
-            "\u0000\u0133\u0000\u0134\u0000\u0135\u0000\u0136"+
-            "\u0000\u0137\u0000\u0138\u0000\u0139\u013A\u013B"+
-            "\u013C\u013D\u013E\u013F\u0140\u0141\u0142\u0143"+
-            "\u0144\u0145\u0146\u0147\u0148\u0149\u014A\u014B"+
-            "\u014C\u014D\u014E\u014F\u0150\u0151\u0152\u0153"+
-            "\u0154\u0000\u0155\u0156\u0157\u0158\u0159\u015A"+
-            "\u015B\u015C\u015D\u015E\u015F\u0160\u0161\u0162"+
-            "\u0163\u0164\u0165\u0166\u0167\u0168\u0169\u016A"+
-            "\u016B\u016C\u016D\u016E\u016F\u0170\u0171\u0172"+
-            "\u0173\u0174\u0175\u0176\u0177\u0178\u0179\u017A"+
-            "\u017B\u017C\u017D\u017E\u017F\u0180\u0181\u0182"+
-            "\u0183\u0184\u0185\u0186\u0187\u0188\u0189\u018A"+
-            "\u018B\u018C\u018D\u018E\u018F\u0190\u0191\u0192"+
-            "\u0193\u0194\u0195\u0196\u0197\u0198\u0199\u019A"+
-            "\u019B\u019C\u019D\u019E\u019F\u01A0\u01A1\u01A2"+
-            "\u01A3\u01A4\u01A5\u01A6\u01A7\u01A8\u01A9\u01AA"+
-            "\u01AB\u0000\u01AC\u01AD\u01AE\u01AF\u01B0\u01B1"+
-            "\u01B2\u01B3\u01B4\u01B5\u01B6\u01B7\u01B8\u01B9"+
-            "\u01BA\u0000\u01BB\u01BC\u01BD\u01BE\u01BF\u01C0"+
-            "\u01C1\u01C2\u01C3\u01C4\u01C5\u01C6\u01C7\u01C8"+
-            "\u01C9\u01CA\u01CB\u01CC\u01CD\u01CE\u01CF\u01D0"+
-            "\u01D1\u01D2\u01D3\u01D4\u01D5\u01D6\u01D7\u01D8"+
-            "\u01D9\u01DA\u01DB\u01DC\u01DD\u01DE\u01DF\u01E0"+
-            "\u01E1\u01E2\u01E3\u01E4\u01E5\u01E6\u01E7\u01E8"+
-            "\u01E9\u01EA\u01EB\u01EC\u01ED\u01EE\u01EF\u01F0"+
-            "\u01F1\u01F2\u01F3\u01F4\u01F5\u01F6\u01F7\u01F8"+
-            "\u01F9\u01FA\u01FB\u01FC\u01FD\u01FE\u01FF\u0200"+
-            "\u0201\u0202\u0203\u0204\u0205\u0206\u0207\u0208"+
-            "\u0209\u020A\u020B\u020C\u020D\u020E\u020F\u0210"+
-            "\u0211\u0212\u0213\u0214\u0215\u0216\u0217\u0218"+
-            "\u0219\u021A\u021B\u021C\u021D\u021E\u021F\u0000"+
-            "\u0220\u0000\u0000\u0000\u0221\u0222\u0223\u0224"+
-            "\u0225\u0226\u0227\u0228\u0229\u022A\u022B\u022C"+
-            "\u022D\u0000\u022E\u022F\u0230\u0231\u0232\u0233"+
-            "\u0234\u0235\u0236\u0237\u0238\u0239\u023A\u023B"+
-            "\u023C\u023D\u023E\u023F\u0240\u0241\u0242\u0243"+
-            "\u0244\u0245\u0246\u0247\u0248\u0249\u024A\u024B"+
-            "\u024C\u024D\u024E\u024F\u0250\u0251\u0252\u0253"+
-            "\u0254\u0255\u0256\u0257\u0258\u0259\u025A\u025B"+
-            "\u025C\u025D\u025E\u025F\u0260\u0261\u0262\u0263"+
-            "\u0264\u0265\u0266\u0267\u0268\u0269\u026A\u026B"+
-            "\u026C\u026D\u026E\u026F\u0270\u0271\u0272\u0273"+
-            "\u0274\u0275\u0276\u0277\u0278\u0279\u027A\u027B"+
-            "\u027C\u027D\u027E\u027F\u0280\u0281\u0282\u0283"+
-            "\u0284\u0285\u0286\u0287\u0288\u0289\u028A\u028B"+
-            "\u028C\u028D\u028E\u028F\u0290\u0291\u0292\u0293"+
-            "\u0294\u0295\u0296\u0297\u0298\u0299\u029A\u029B"+
-            "\u029C\u029D\u029E\u029F\u02A0\u02A1\u02A2\u02A3"+
-            "\u02A4\u02A5\u02A6\u02A7\u02A8\u02A9\u02AA\u02AB"+
-            "\u02AC\u02AD\u02AE\u02AF\u02B0\u02B1\u02B2\u02B3"+
-            "\u02B4\u02B5\u02B6\u02B7\u02B8\u02B9\u02BA\u02BB"+
-            "\u02BC\u02BD\u02BE\u02BF\u02C0\u02C1\u02C2\u02C3"+
-            "\u02C4\u02C5\u02C6\u02C7\u02C8\u02C9\u02CA\u02CB"+
-            "\u02CC\u02CD\u02CE\u02CF\u02D0\u02D1\u02D2\u02D3"+
-            "\u02D4\u02D5\u02D6\u02D7\u02D8\u02D9\u02DA\u02DB"+
-            "\u02DC\u02DD\u02DE\u02DF\u02E0\u02E1\u02E2\u02E3"+
-            "\u02E4\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u02E5\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u02E6\u02E7\u02E8\u02E9\u02EA\u02EB"+
-            "\u02EC\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u02ED\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u02EE\u02EF\u02F0\u02F1\u02F2\u02F3"+
-            "\u02F4\u02F5\u02F6\u02F7\u02F8\u02F9\u02FA\u02FB"+
-            "\u02FC\u02FD\u02FE\u02FF\u0300\u0301\u0302\u0303"+
-            "\u0304\u0305\u0306\u0307\u0308\u0309\u030A\u030B"+
-            "\u030C\u030D\u030E\u030F\u0310\u0311\u0312\u0313"+
-            "\u0314\u0315\u0316\u0317\u0318\u0319\u031A\u031B"+
-            "\u031C\u031D\u031E\u031F\u0320\u0321\u0322\u0323"+
-            "\u0324\u0000\u0325\u0326\u0327\u0328\u0329\u032A"+
-            "\u032B\u032C\u032D\u032E\u032F\u0330\u0331\u0332"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0333\u0000\u0334\u0335\u0336\u0337\u0338\u0339"+
-            "\u033A\u033B\u033C\u033D\u033E\u033F\u0340\u0341"+
-            "\u0342\u0343\u0344\u0345\u0346\u0347\u0348\u0349"+
-            "\u034A\u034B\u034C\u034D\u034E\u034F\u0350\u0351"+
-            "\u0352\u0353\u0354\u0355\u0356\u0357\u0358\u0359"+
-            "\u035A\u035B\u035C\u035D\u035E\u035F\u0360\u0361"+
-            "\u0362\u0363\u0364\u0365\u0366\u0367\u0368\u0369"+
-            "\u036A\u036B\u036C\u036D\u036E\u036F\u0370\u0371"+
-            "\u0372\u0373\u0374\u0375\u0376\u0377\u0378\u0379"+
-            "\u037A\u037B\u037C\u037D\u037E\u037F\u0380\u0381"+
-            "\u0382\u0383\u0384\u0385\u0386\u0387\u0388\u0389"+
-            "\u038A\u038B\u038C\u038D\u038E\u038F\u0390\u0391"+
-            "\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399"+
-            "\u039A\u039B\u039C\u039D\u039E\u039F\u03A0\u03A1"+
-            "\u03A2\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9"+
-            "\u03AA\u03AB\u03AC\u03AD\u03AE\u03AF\u03B0\u03B1"+
-            "\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9"+
-            "\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1"+
-            "\u03C2\u03C3\u03C4\u03C5\u03C6\u03C7\u03C8\u03C9"+
-            "\u03CA\u03CB\u03CC\u03CD\u03CE\u03CF\u03D0\u03D1"+
-            "\u03D2\u03D3\u03D4\u03D5\u03D6\u03D7\u03D8\u03D9"+
-            "\u03DA\u03DB\u03DC\u03DD\u03DE\u03DF\u03E0\u03E1"+
-            "\u03E2\u03E3\u03E4\u03E5\u03E6\u03E7\u03E8\u03E9"+
-            "\u03EA\u03EB\u03EC\u03ED\u03EE\u03EF\u03F0\u03F1"+
-            "\u03F2\u03F3\u03F4\u03F5\u03F6\u03F7\u03F8\u03F9"+
-            "\u03FA\u03FB\u03FC\u03FD\u03FE\u03FF\u0400\u0401"+
-            "\u0402\u0403\u0404\u0405\u0406\u0407\u0408\u0409"+
-            "\u040A\u040B\u040C\u040D\u040E\u040F\u0410\u0411"+
-            "\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419"+
-            "\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421"+
-            "\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429"+
-            "\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431"+
-            "\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439"+
-            "\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441"+
-            "\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449"+
-            "\u044A\u044B\u044C\u044D\u044E\u044F\u0450\u0451"+
-            "\u0452\u0453\u0454\u0455\u0456\u0457\u0458\u0459"+
-            "\u045A\u045B\u045C\u045D\u045E\u045F\u0460\u0461"+
-            "\u0462\u0463\u0464\u0465\u0466\u0467\u0468\u0469"+
-            "\u046A\u046B\u046C\u046D\u046E\u046F\u0470\u0471"+
-            "\u0472\u0473\u0474\u0475\u0476\u0477\u0478\u0479"+
-            "\u047A\u047B\u047C\u047D\u047E\u047F\u0480\u0481"+
-            "\u0482\u0483\u0484\u0485\u0486\u0487\u0488\u0489"+
-            "\u048A\u048B\u048C\u048D\u048E\u048F\u0490\u0491"+
-            "\u0492\u0493\u0494\u0495\u0496\u0497\u0498\u0499"+
-            "\u049A\u049B\u049C\u049D\u049E\u049F\u04A0\u04A1"+
-            "\u04A2\u04A3\u04A4\u04A5\u04A6\u04A7\u04A8\u04A9"+
-            "\u04AA\u04AB\u04AC\u04AD\u04AE\u04AF\u04B0\u04B1"+
-            "\u04B2\u04B3\u04B4\u04B5\u04B6\u04B7\u04B8\u04B9"+
-            "\u04BA\u04BB\u04BC\u04BD\u04BE\u04BF\u04C0\u04C1"+
-            "\u04C2\u04C3\u04C4\u04C5\u04C6\u04C7\u04C8\u04C9"+
-            "\u04CA\u04CB\u04CC\u04CD\u04CE\u04CF\u04D0\u04D1"+
-            "\u04D2\u04D3\u04D4\u04D5\u04D6\u04D7\u04D8\u04D9"+
-            "\u04DA\u04DB\u04DC\u04DD\u04DE\u04DF\u04E0\u04E1"+
-            "\u04E2\u04E3\u04E4\u04E5\u04E6\u04E7\u04E8\u04E9"+
-            "\u04EA\u04EB\u04EC\u04ED\u04EE\u04EF\u04F0\u04F1"+
-            "\u04F2\u04F3\u04F4\u04F5\u04F6\u04F7\u04F8\u04F9"+
-            "\u04FA\u04FB\u04FC\u04FD\u04FE\u04FF\u0500\u0501"+
-            "\u0502\u0503\u0504\u0505\u0506\u0507\u0508\u0509"+
-            "\u050A\u050B\u050C\u050D\u050E\u050F\u0510\u0511"+
-            "\u0512\u0513\u0514\u0515\u0516\u0517\u0518\u0519"+
-            "\u051A\u051B\u051C\u051D\u051E\u051F\u0520\u0521"+
-            "\u0522\u0523\u0524\u0525\u0526\u0527\u0528\u0529"+
-            "\u052A\u052B\u052C\u052D\u052E\u052F\u0530\u0531"+
-            "\u0532\u0533\u0534\u0535\u0536\u0537\u0538\u0539"+
-            "\u053A\u053B\u053C\u053D\u053E\u053F\u0540\u0541"+
-            "\u0542\u0543\u0544\u0545\u0546\u0547\u0548\u0549"+
-            "\u054A\u054B\u054C\u054D\u054E\u054F\u0550\u0551"+
-            "\u0552\u0553\u0554\u0555\u0556\u0557\u0558\u0559"+
-            "\u055A\u055B\u055C\u055D\u055E\u055F\u0560\u0561"+
-            "\u0562\u0563\u0564\u0565\u0566\u0567\u0568\u0569"+
-            "\u056A\u056B\u056C\u056D\u056E\u056F\u0570\u0571"+
-            "\u0572\u0573\u0574\u0575\u0576\u0577\u0578\u0579"+
-            "\u057A\u057B\u057C\u057D\u057E\u057F\u0580\u0581"+
-            "\u0582\u0583\u0584\u0585\u0586\u0587\u0588\u0589"+
-            "\u058A\u058B\u058C\u058D\u058E\u058F\u0590\u0591"+
-            "\u0592\u0593\u0594\u0595\u0596\u0597\u0598\u0599"+
-            "\u059A\u059B\u059C\u059D\u059E\u059F\u05A0\u05A1"+
-            "\u05A2\u05A3\u05A4\u05A5\u05A6\u05A7\u05A8\u05A9"+
-            "\u05AA\u05AB\u05AC\u05AD\u05AE\u05AF\u05B0\u05B1"+
-            "\u05B2\u05B3\u05B4\u05B5\u05B6\u05B7\u05B8\u05B9"+
-            "\u05BA\u05BB\u05BC\u05BD\u05BE\u05BF\u05C0\u05C1"+
-            "\u05C2\u05C3\u05C4\u05C5\u05C6\u05C7\u05C8\u05C9"+
-            "\u05CA\u05CB\u05CC\u05CD\u05CE\u05CF\u05D0\u05D1"+
-            "\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9"+
-            "\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1"+
-            "\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9"+
-            "\u05EA\u05EB\u05EC\u05ED\u05EE\u05EF\u05F0\u05F1"+
-            "\u05F2\u05F3\u05F4\u05F5\u05F6\u05F7\u05F8\u05F9"+
-            "\u05FA\u05FB\u05FC\u05FD\u05FE\u05FF\u0600\u0601"+
-            "\u0602\u0603\u0604\u0605\u0606\u0607\u0608\u0609"+
-            "\u060A\u060B\u060C\u060D\u060E\u060F\u0610\u0611"+
-            "\u0612\u0613\u0614\u0615\u0616\u0617\u0618\u0619"+
-            "\u061A\u061B\u061C\u061D\u061E\u061F\u0620\u0621"+
-            "\u0622\u0623\u0624\u0625\u0626\u0627\u0628\u0629"+
-            "\u062A\u062B\u062C\u062D\u062E\u062F\u0630\u0631"+
-            "\u0632\u0633\u0634\u0635\u0636\u0637\u0638\u0639"+
-            "\u063A\u063B\u063C\u063D\u063E\u063F\u0640\u0641"+
-            "\u0642\u0643\u0644\u0645\u0646\u0647\u0648\u0649"+
-            "\u064A\u064B\u064C\u064D\u064E\u064F\u0650\u0651"+
-            "\u0652\u0653\u0654\u0655\u0656\u0657\u0658\u0659"+
-            "\u065A\u065B\u065C\u065D\u065E\u065F\u0660\u0661"+
-            "\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669"+
-            "\u066A\u066B\u066C\u066D\u066E\u066F\u0670\u0671"+
-            "\u0672\u0673\u0674\u0675\u0676\u0677\u0678\u0679"+
-            "\u067A\u067B\u067C\u067D\u067E\u067F\u0680\u0681"+
-            "\u0682\u0683\u0684\u0685\u0686\u0687\u0688\u0689"+
-            "\u068A\u068B\u068C\u068D\u068E\u068F\u0690\u0691"+
-            "\u0692\u0693\u0694\u0695\u0696\u0697\u0698\u0699"+
-            "\u069A\u069B\u069C\u069D\u069E\u069F\u06A0\u06A1"+
-            "\u06A2\u06A3\u06A4\u06A5\u06A6\u06A7\u06A8\u06A9"+
-            "\u06AA\u06AB\u06AC\u06AD\u06AE\u06AF\u06B0\u06B1"+
-            "\u06B2\u06B3\u06B4\u06B5\u06B6\u06B7\u06B8\u06B9"+
-            "\u06BA\u06BB\u06BC\u06BD\u06BE\u06BF\u06C0\u06C1"+
-            "\u06C2\u06C3\u06C4\u06C5\u06C6\u06C7\u06C8\u06C9"+
-            "\u06CA\u06CB\u06CC\u06CD\u06CE\u06CF\u06D0\u06D1"+
-            "\u06D2\u06D3\u06D4\u06D5\u06D6\u06D7\u06D8\u06D9"+
-            "\u06DA\u06DB\u06DC\u06DD\u06DE\u06DF\u06E0\u06E1"+
-            "\u06E2\u06E3\u06E4\u06E5\u06E6\u06E7\u06E8\u06E9"+
-            "\u06EA\u06EB\u06EC\u06ED\u06EE\u06EF\u06F0\u06F1"+
-            "\u06F2\u06F3\u06F4\u06F5\u06F6\u06F7\u06F8\u06F9"+
-            "\u06FA\u06FB\u06FC\u06FD\u06FE\u06FF\u0700\u0701"+
-            "\u0702\u0703\u0704\u0705\u0706\u0707\u0708\u0709"+
-            "\u070A\u070B\u070C\u070D\u070E\u070F\u0710\u0711"+
-            "\u0712\u0713\u0714\u0715\u0716\u0717\u0718\u0719"+
-            "\u071A\u071B\u071C\u071D\u071E\u071F\u0720\u0721"+
-            "\u0722\u0723\u0724\u0725\u0726\u0727\u0728\u0729"+
-            "\u072A\u072B\u072C\u072D\u072E\u072F\u0730\u0731"+
-            "\u0732\u0733\u0734\u0735\u0736\u0737\u0738\u0739"+
-            "\u073A\u073B\u073C\u073D\u073E\u073F\u0740\u0741"+
-            "\u0742\u0743\u0744\u0745\u0746\u0747\u0748\u0749"+
-            "\u074A\u074B\u074C\u074D\u074E\u074F\u0750\u0751"+
-            "\u0752\u0753\u0754\u0755\u0756\u0757\u0758\u0759"+
-            "\u075A\u075B\u075C\u075D\u075E\u075F\u0760\u0761"+
-            "\u0762\u0763\u0764\u0765\u0766\u0767\u0768\u0769"+
-            "\u076A\u076B\u076C\u076D\u076E\u076F\u0770\u0771"+
-            "\u0772\u0773\u0774\u0775\u0776\u0777\u0778\u0779"+
-            "\u077A\u077B\u077C\u077D\u077E\u077F\u0780\u0781"+
-            "\u0782\u0783\u0784\u0785\u0786\u0787\u0788\u0789"+
-            "\u078A\u078B\u078C\u078D\u078E\u078F\u0790\u0791"+
-            "\u0792\u0793\u0794\u0795\u0796\u0797\u0798\u0799"+
-            "\u079A\u079B\u079C\u079D\u079E\u079F\u07A0\u07A1"+
-            "\u07A2\u07A3\u07A4\u07A5\u07A6\u07A7\u07A8\u07A9"+
-            "\u07AA\u07AB\u07AC\u07AD\u07AE\u07AF\u07B0\u07B1"+
-            "\u07B2\u07B3\u07B4\u07B5\u07B6\u07B7\u07B8\u07B9"+
-            "\u07BA\u07BB\u07BC\u07BD\u07BE\u07BF\u07C0\u07C1"+
-            "\u07C2\u07C3\u07C4\u07C5\u07C6\u07C7\u07C8\u07C9"+
-            "\u07CA\u07CB\u07CC\u07CD\u07CE\u07CF\u07D0\u07D1"+
-            "\u07D2\u07D3\u07D4\u07D5\u07D6\u07D7\u07D8\u07D9"+
-            "\u07DA\u07DB\u07DC\u07DD\u07DE\u07DF\u07E0\u07E1"+
-            "\u07E2\u07E3\u07E4\u07E5\u07E6\u07E7\u07E8\u07E9"+
-            "\u07EA\u07EB\u07EC\u07ED\u07EE\u07EF\u07F0\u07F1"+
-            "\u07F2\u07F3\u07F4\u07F5\u07F6\u07F7\u07F8\u07F9"+
-            "\u07FA\u07FB\u07FC\u07FD\u07FE\u07FF\u0800\u0801"+
-            "\u0802\u0803\u0804\u0805\u0806\u0807\u0808\u0809"+
-            "\u080A\u080B\u080C\u080D\u080E\u080F\u0810\u0811"+
-            "\u0812\u0813\u0814\u0815\u0816\u0817\u0818\u0819"+
-            "\u081A\u081B\u081C\u081D\u081E\u081F\u0820\u0821"+
-            "\u0822\u0823\u0824\u0825\u0826\u0827\u0828\u0829"+
-            "\u082A\u082B\u082C\u082D\u082E\u082F\u0830\u0831"+
-            "\u0832\u0833\u0834\u0835\u0836\u0837\u0838\u0839"+
-            "\u083A\u083B\u083C\u083D\u083E\u083F\u0840\u0841"+
-            "\u0842\u0843\u0844\u0845\u0846\u0847\u0848\u0849"+
-            "\u084A\u084B\u084C\u084D\u084E\u084F\u0850\u0851"+
-            "\u0852\u0853\u0854\u0855\u0856\u0857\u0858\u0859"+
-            "\u085A\u085B\u085C\u085D\u085E\u085F\u0860\u0861"+
-            "\u0862\u0863\u0864\u0865\u0866\u0867\u0868\u0869"+
-            "\u086A\u086B\u086C\u086D\u086E\u086F\u0870\u0871"+
-            "\u0872\u0873\u0874\u0875\u0876\u0877\u0878\u0879"+
-            "\u087A\u087B\u087C\u087D\u087E\u087F\u0880\u0881"+
-            "\u0882\u0883\u0884\u0885\u0886\u0887\u0888\u0889"+
-            "\u088A\u088B\u088C\u088D\u088E\u088F\u0890\u0891"+
-            "\u0892\u0893\u0894\u0895\u0896\u0897\u0898\u0899"+
-            "\u089A\u089B\u089C\u089D\u089E\u089F\u08A0\u08A1"+
-            "\u08A2\u08A3\u08A4\u08A5\u08A6\u08A7\u08A8\u08A9"+
-            "\u08AA\u08AB\u08AC\u08AD\u08AE\u08AF\u08B0\u08B1"+
-            "\u08B2\u08B3\u08B4\u08B5\u08B6\u08B7\u08B8\u08B9"+
-            "\u08BA\u08BB\u08BC\u08BD\u08BE\u08BF\u08C0\u08C1"+
-            "\u08C2\u08C3\u08C4\u08C5\u08C6\u08C7\u08C8\u08C9"+
-            "\u08CA\u08CB\u08CC\u08CD\u08CE\u08CF\u08D0\u08D1"+
-            "\u08D2\u08D3\u08D4\u08D5\u08D6\u08D7\u08D8\u08D9"+
-            "\u08DA\u08DB\u08DC\u08DD\u08DE\u08DF\u08E0\u08E1"+
-            "\u08E2\u08E3\u08E4\u08E5\u08E6\u08E7\u08E8\u08E9"+
-            "\u08EA\u08EB\u08EC\u08ED\u08EE\u08EF\u08F0\u08F1"+
-            "\u08F2\u08F3\u08F4\u08F5\u08F6\u08F7\u08F8\u08F9"+
-            "\u08FA\u08FB\u08FC\u08FD\u08FE\u08FF\u0900\u0901"+
-            "\u0902\u0903\u0904\u0905\u0906\u0907\u0908\u0909"+
-            "\u090A\u090B\u090C\u090D\u090E\u090F\u0910\u0911"+
-            "\u0912\u0913\u0914\u0915\u0916\u0917\u0918\u0919"+
-            "\u091A\u091B\u091C\u091D\u091E\u091F\u0920\u0921"+
-            "\u0922\u0923\u0924\u0925\u0926\u0927\u0928\u0929"+
-            "\u092A\u092B\u092C\u092D\u092E\u092F\u0930\u0931"+
-            "\u0932\u0933\u0934\u0935\u0936\u0937\u0938\u0939"+
-            "\u093A\u093B\u093C\u093D\u093E\u093F\u0940\u0941"+
-            "\u0942\u0943\u0944\u0945\u0946\u0947\u0948\u0949"+
-            "\u094A\u094B\u094C\u094D\u094E\u094F\u0950\u0951"+
-            "\u0952\u0953\u0954\u0955\u0956\u0957\u0958\u0959"+
-            "\u095A\u095B\u095C\u095D\u095E\u095F\u0960\u0961"+
-            "\u0962\u0963\u0964\u0965\u0966\u0967\u0968\u0969"+
-            "\u096A\u096B\u096C\u096D\u096E\u096F\u0970\u0971"+
-            "\u0972\u0973\u0974\u0975\u0976\u0977\u0978\u0979"+
-            "\u097A\u097B\u097C\u097D\u097E\u097F\u0980\u0981"+
-            "\u0982\u0983\u0984\u0985\u0986\u0987\u0988\u0989"+
-            "\u098A\u098B\u098C\u098D\u098E\u098F\u0990\u0991"+
-            "\u0992\u0993\u0994\u0995\u0996\u0997\u0998\u0999"+
-            "\u099A\u099B\u099C\u099D\u099E\u099F\u09A0\u09A1"+
-            "\u09A2\u09A3\u09A4\u09A5\u09A6\u09A7\u09A8\u09A9"+
-            "\u09AA\u09AB\u09AC\u09AD\u09AE\u09AF\u09B0\u09B1"+
-            "\u09B2\u09B3\u09B4\u09B5\u09B6\u09B7\u09B8\u09B9"+
-            "\u09BA\u09BB\u09BC\u09BD\u09BE\u09BF\u09C0\u09C1"+
-            "\u09C2\u09C3\u09C4\u09C5\u09C6\u09C7\u09C8\u09C9"+
-            "\u09CA\u09CB\u09CC\u09CD\u09CE\u09CF\u09D0\u09D1"+
-            "\u09D2\u09D3\u09D4\u09D5\u09D6\u09D7\u09D8\u09D9"+
-            "\u09DA\u09DB\u09DC\u09DD\u09DE\u09DF\u09E0\u09E1"+
-            "\u09E2\u09E3\u09E4\u09E5\u09E6\u09E7\u09E8\u09E9"+
-            "\u09EA\u09EB\u09EC\u09ED\u09EE\u09EF\u09F0\u09F1"+
-            "\u09F2\u09F3\u09F4\u09F5\u09F6\u09F7\u09F8\u09F9"+
-            "\u09FA\u09FB\u09FC\u09FD\u09FE\u09FF\u0A00\u0A01"+
-            "\u0A02\u0A03\u0A04\u0A05\u0A06\u0A07\u0A08\u0A09"+
-            "\u0A0A\u0A0B\u0A0C\u0A0D\u0A0E\u0A0F\u0A10\u0A11"+
-            "\u0A12\u0A13\u0A14\u0A15\u0A16\u0A17\u0A18\u0A19"+
-            "\u0A1A\u0A1B\u0A1C\u0A1D\u0A1E\u0A1F\u0A20\u0A21"+
-            "\u0A22\u0A23\u0A24\u0A25\u0A26\u0A27\u0A28\u0A29"+
-            "\u0A2A\u0A2B\u0A2C\u0A2D\u0A2E\u0A2F\u0A30\u0A31"+
-            "\u0A32\u0A33\u0A34\u0A35\u0A36\u0A37\u0A38\u0A39"+
-            "\u0A3A\u0A3B\u0A3C\u0A3D\u0A3E\u0A3F\u0A40\u0A41"+
-            "\u0A42\u0A43\u0A44\u0A45\u0A46\u0A47\u0A48\u0A49"+
-            "\u0A4A\u0A4B\u0A4C\u0A4D\u0A4E\u0A4F\u0A50\u0A51"+
-            "\u0A52\u0A53\u0A54\u0A55\u0A56\u0A57\u0A58\u0A59"+
-            "\u0A5A\u0A5B\u0A5C\u0A5D\u0A5E\u0A5F\u0A60\u0A61"+
-            "\u0A62\u0A63\u0A64\u0A65\u0A66\u0A67\u0A68\u0A69"+
-            "\u0A6A\u0A6B\u0A6C\u0A6D\u0A6E\u0A6F\u0A70\u0A71"+
-            "\u0A72\u0A73\u0A74\u0A75\u0A76\u0A77\u0A78\u0A79"+
-            "\u0A7A\u0A7B\u0A7C\u0A7D\u0A7E\u0A7F\u0A80\u0A81"+
-            "\u0A82\u0A83\u0A84\u0A85\u0A86\u0A87\u0A88\u0A89"+
-            "\u0A8A\u0A8B\u0A8C\u0A8D\u0A8E\u0A8F\u0A90\u0A91"+
-            "\u0A92\u0A93\u0A94\u0A95\u0A96\u0A97\u0A98\u0A99"+
-            "\u0A9A\u0A9B\u0A9C\u0A9D\u0A9E\u0A9F\u0AA0\u0AA1"+
-            "\u0AA2\u0AA3\u0AA4\u0AA5\u0AA6\u0AA7\u0AA8\u0AA9"+
-            "\u0AAA\u0AAB\u0AAC\u0AAD\u0AAE\u0AAF\u0AB0\u0AB1"+
-            "\u0AB2\u0AB3\u0AB4\u0AB5\u0AB6\u0AB7\u0AB8\u0AB9"+
-            "\u0ABA\u0ABB\u0ABC\u0ABD\u0ABE\u0ABF\u0AC0\u0AC1"+
-            "\u0AC2\u0AC3\u0AC4\u0AC5\u0AC6\u0AC7\u0AC8\u0AC9"+
-            "\u0ACA\u0ACB\u0ACC\u0ACD\u0ACE\u0ACF\u0AD0\u0AD1"+
-            "\u0AD2\u0AD3\u0AD4\u0AD5\u0AD6\u0AD7\u0AD8\u0AD9"+
-            "\u0ADA\u0ADB\u0ADC\u0ADD\u0ADE\u0ADF\u0AE0\u0AE1"+
-            "\u0AE2\u0AE3\u0AE4\u0AE5\u0AE6\u0AE7\u0AE8\u0AE9"+
-            "\u0AEA\u0AEB\u0AEC\u0AED\u0AEE\u0AEF\u0AF0\u0AF1"+
-            "\u0AF2\u0AF3\u0AF4\u0AF5\u0AF6\u0AF7\u0AF8\u0AF9"+
-            "\u0AFA\u0AFB\u0AFC\u0AFD\u0AFE\u0AFF\u0B00\u0B01"+
-            "\u0B02\u0B03\u0B04\u0B05\u0B06\u0B07\u0B08\u0B09"+
-            "\u0B0A\u0B0B\u0B0C\u0B0D\u0B0E\u0B0F\u0B10\u0B11"+
-            "\u0B12\u0B13\u0B14\u0B15\u0B16\u0B17\u0B18\u0B19"+
-            "\u0B1A\u0B1B\u0B1C\u0B1D\u0B1E\u0B1F\u0B20\u0B21"+
-            "\u0B22\u0B23\u0B24\u0B25\u0B26\u0B27\u0B28\u0B29"+
-            "\u0B2A\u0B2B\u0B2C\u0B2D\u0B2E\u0B2F\u0B30\u0B31"+
-            "\u0B32\u0B33\u0B34\u0B35\u0B36\u0B37\u0B38\u0B39"+
-            "\u0B3A\u0B3B\u0B3C\u0B3D\u0B3E\u0B3F\u0B40\u0B41"+
-            "\u0B42\u0B43\u0B44\u0B45\u0B46\u0B47\u0B48\u0B49"+
-            "\u0B4A\u0B4B\u0B4C\u0B4D\u0B4E\u0B4F\u0B50\u0B51"+
-            "\u0B52\u0B53\u0B54\u0B55\u0B56\u0B57\u0B58\u0B59"+
-            "\u0B5A\u0B5B\u0B5C\u0B5D\u0B5E\u0B5F\u0B60\u0B61"+
-            "\u0B62\u0B63\u0B64\u0B65\u0B66\u0B67\u0B68\u0B69"+
-            "\u0B6A\u0B6B\u0B6C\u0B6D\u0B6E\u0B6F\u0B70\u0B71"+
-            "\u0B72\u0B73\u0B74\u0B75\u0B76\u0B77\u0B78\u0B79"+
-            "\u0B7A\u0B7B\u0B7C\u0B7D\u0B7E\u0B7F\u0B80\u0B81"+
-            "\u0B82\u0B83\u0B84\u0B85\u0B86\u0B87\u0B88\u0B89"+
-            "\u0B8A\u0B8B\u0B8C\u0B8D\u0B8E\u0B8F\u0B90\u0B91"+
-            "\u0B92\u0B93\u0B94\u0B95\u0B96\u0B97\u0B98\u0B99"+
-            "\u0B9A\u0B9B\u0B9C\u0B9D\u0B9E\u0B9F\u0BA0\u0BA1"+
-            "\u0BA2\u0BA3\u0BA4\u0BA5\u0BA6\u0BA7\u0BA8\u0BA9"+
-            "\u0BAA\u0BAB\u0BAC\u0BAD\u0BAE\u0BAF\u0BB0\u0BB1"+
-            "\u0BB2\u0BB3\u0BB4\u0BB5\u0BB6\u0BB7\u0BB8\u0BB9"+
-            "\u0BBA\u0BBB\u0BBC\u0BBD\u0BBE\u0BBF\u0BC0\u0BC1"+
-            "\u0BC2\u0BC3\u0BC4\u0BC5\u0BC6\u0BC7\u0BC8\u0BC9"+
-            "\u0BCA\u0BCB\u0BCC\u0BCD\u0BCE\u0BCF\u0BD0\u0BD1"+
-            "\u0BD2\u0BD3\u0BD4\u0BD5\u0BD6\u0BD7\u0BD8\u0BD9"+
-            "\u0BDA\u0BDB\u0BDC\u0BDD\u0BDE\u0BDF\u0BE0\u0BE1"+
-            "\u0BE2\u0BE3\u0BE4\u0BE5\u0BE6\u0BE7\u0BE8\u0BE9"+
-            "\u0BEA\u0BEB\u0BEC\u0BED\u0BEE\u0BEF\u0BF0\u0BF1"+
-            "\u0BF2\u0BF3\u0BF4\u0BF5\u0BF6\u0BF7\u0BF8\u0BF9"+
-            "\u0BFA\u0BFB\u0BFC\u0BFD\u0BFE\u0BFF\u0C00\u0C01"+
-            "\u0C02\u0C03\u0C04\u0C05\u0C06\u0C07\u0C08\u0C09"+
-            "\u0C0A\u0C0B\u0C0C\u0C0D\u0C0E\u0C0F\u0C10\u0C11"+
-            "\u0C12\u0C13\u0C14\u0C15\u0C16\u0C17\u0C18\u0C19"+
-            "\u0C1A\u0C1B\u0C1C\u0C1D\u0C1E\u0C1F\u0C20\u0C21"+
-            "\u0C22\u0C23\u0C24\u0C25\u0C26\u0C27\u0C28\u0C29"+
-            "\u0C2A\u0C2B\u0C2C\u0C2D\u0C2E\u0C2F\u0C30\u0C31"+
-            "\u0C32\u0C33\u0C34\u0C35\u0C36\u0C37\u0C38\u0C39"+
-            "\u0C3A\u0C3B\u0C3C\u0C3D\u0C3E\u0C3F\u0C40\u0C41"+
-            "\u0C42\u0C43\u0C44\u0C45\u0C46\u0C47\u0C48\u0C49"+
-            "\u0C4A\u0C4B\u0C4C\u0C4D\u0C4E\u0C4F\u0C50\u0C51"+
-            "\u0C52\u0C53\u0C54\u0C55\u0C56\u0C57\u0C58\u0C59"+
-            "\u0C5A\u0C5B\u0C5C\u0C5D\u0C5E\u0C5F\u0C60\u0C61"+
-            "\u0C62\u0C63\u0C64\u0C65\u0C66\u0C67\u0C68\u0C69"+
-            "\u0C6A\u0C6B\u0C6C\u0C6D\u0C6E\u0C6F\u0C70\u0C71"+
-            "\u0C72\u0C73\u0C74\u0C75\u0C76\u0C77\u0C78\u0C79"+
-            "\u0C7A\u0C7B\u0C7C\u0C7D\u0C7E\u0C7F\u0C80\u0C81"+
-            "\u0C82\u0C83\u0C84\u0C85\u0C86\u0C87\u0C88\u0C89"+
-            "\u0C8A\u0C8B\u0C8C\u0C8D\u0C8E\u0C8F\u0C90\u0C91"+
-            "\u0C92\u0C93\u0C94\u0C95\u0C96\u0C97\u0C98\u0C99"+
-            "\u0C9A\u0C9B\u0C9C\u0C9D\u0C9E\u0C9F\u0CA0\u0CA1"+
-            "\u0CA2\u0CA3\u0CA4\u0CA5\u0CA6\u0CA7\u0CA8\u0CA9"+
-            "\u0CAA\u0CAB\u0CAC\u0CAD\u0CAE\u0CAF\u0CB0\u0CB1"+
-            "\u0CB2\u0CB3\u0CB4\u0CB5\u0CB6\u0CB7\u0CB8\u0CB9"+
-            "\u0CBA\u0CBB\u0CBC\u0CBD\u0CBE\u0CBF\u0CC0\u0CC1"+
-            "\u0CC2\u0CC3\u0CC4\u0CC5\u0CC6\u0CC7\u0CC8\u0CC9"+
-            "\u0CCA\u0CCB\u0CCC\u0CCD\u0CCE\u0CCF\u0CD0\u0CD1"+
-            "\u0CD2\u0CD3\u0CD4\u0CD5\u0CD6\u0CD7\u0CD8\u0CD9"+
-            "\u0CDA\u0CDB\u0CDC\u0CDD\u0CDE\u0CDF\u0CE0\u0CE1"+
-            "\u0CE2\u0CE3\u0CE4\u0CE5\u0CE6\u0CE7\u0CE8\u0CE9"+
-            "\u0CEA\u0CEB\u0CEC\u0CED\u0CEE\u0CEF\u0CF0\u0CF1"+
-            "\u0CF2\u0CF3\u0CF4\u0CF5\u0CF6\u0CF7\u0CF8\u0CF9"+
-            "\u0CFA\u0CFB\u0CFC\u0CFD\u0CFE\u0CFF\u0D00\u0D01"+
-            "\u0D02\u0D03\u0D04\u0D05\u0D06\u0D07\u0D08\u0D09"+
-            "\u0D0A\u0D0B\u0D0C\u0D0D\u0D0E\u0D0F\u0D10\u0D11"+
-            "\u0D12\u0D13\u0D14\u0D15\u0D16\u0D17\u0D18\u0D19"+
-            "\u0D1A\u0D1B\u0D1C\u0D1D\u0D1E\u0D1F\u0D20\u0D21"+
-            "\u0D22\u0D23\u0D24\u0D25\u0D26\u0D27\u0D28\u0D29"+
-            "\u0D2A\u0D2B\u0D2C\u0D2D\u0D2E\u0D2F\u0D30\u0D31"+
-            "\u0D32\u0D33\u0D34\u0D35\u0D36\u0D37\u0D38\u0D39"+
-            "\u0D3A\u0D3B\u0D3C\u0D3D\u0D3E\u0D3F\u0D40\u0D41"+
-            "\u0D42\u0D43\u0D44\u0D45\u0D46\u0D47\u0D48\u0D49"+
-            "\u0D4A\u0D4B\u0D4C\u0D4D\u0D4E\u0D4F\u0D50\u0D51"+
-            "\u0D52\u0D53\u0D54\u0D55\u0D56\u0D57\u0D58\u0D59"+
-            "\u0D5A\u0D5B\u0D5C\u0D5D\u0D5E\u0D5F\u0D60\u0D61"+
-            "\u0D62\u0D63\u0D64\u0D65\u0D66\u0D67\u0D68\u0D69"+
-            "\u0D6A\u0D6B\u0D6C\u0D6D\u0D6E\u0D6F\u0D70\u0D71"+
-            "\u0D72\u0D73\u0D74\u0D75\u0D76\u0D77\u0D78\u0D79"+
-            "\u0D7A\u0D7B\u0D7C\u0D7D\u0D7E\u0D7F\u0D80\u0D81"+
-            "\u0D82\u0D83\u0D84\u0D85\u0D86\u0D87\u0D88\u0D89"+
-            "\u0D8A\u0D8B\u0D8C\u0D8D\u0D8E\u0D8F\u0D90\u0D91"+
-            "\u0D92\u0D93\u0D94\u0D95\u0D96\u0D97\u0D98\u0D99"+
-            "\u0D9A\u0D9B\u0D9C\u0D9D\u0D9E\u0D9F\u0DA0\u0DA1"+
-            "\u0DA2\u0DA3\u0DA4\u0DA5\u0DA6\u0DA7\u0DA8\u0DA9"+
-            "\u0DAA\u0DAB\u0DAC\u0DAD\u0DAE\u0DAF\u0DB0\u0DB1"+
-            "\u0DB2\u0DB3\u0DB4\u0DB5\u0DB6\u0DB7\u0DB8\u0DB9"+
-            "\u0DBA\u0DBB\u0DBC\u0DBD\u0DBE\u0DBF\u0DC0\u0DC1"+
-            "\u0DC2\u0DC3\u0DC4\u0DC5\u0DC6\u0DC7\u0DC8\u0DC9"+
-            "\u0DCA\u0DCB\u0DCC\u0DCD\u0DCE\u0DCF\u0DD0\u0DD1"+
-            "\u0DD2\u0DD3\u0DD4\u0DD5\u0DD6\u0DD7\u0DD8\u0DD9"+
-            "\u0DDA\u0DDB\u0DDC\u0DDD\u0DDE\u0DDF\u0DE0\u0DE1";
-
-        private final static String innerIndex1=
-            "\u0DE2\u0DE3\u0DE4\u0DE5\u0DE6\u0DE7\u0DE8\u0DE9"+
-            "\u0DEA\u0DEB\u0DEC\u0DED\u0DEE\u0DEF\u0DF0\u0DF1"+
-            "\u0DF2\u0DF3\u0DF4\u0DF5\u0DF6\u0DF7\u0DF8\u0DF9"+
-            "\u0DFA\u0DFB\u0DFC\u0DFD\u0DFE\u0DFF\u0E00\u0E01"+
-            "\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09"+
-            "\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11"+
-            "\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19"+
-            "\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21"+
-            "\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29"+
-            "\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31"+
-            "\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39"+
-            "\u0E3A\u0E3B\u0E3C\u0E3D\u0E3E\u0E3F\u0E40\u0E41"+
-            "\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49"+
-            "\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51"+
-            "\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59"+
-            "\u0E5A\u0E5B\u0E5C\u0E5D\u0E5E\u0E5F\u0E60\u0E61"+
-            "\u0E62\u0E63\u0E64\u0E65\u0E66\u0E67\u0E68\u0E69"+
-            "\u0E6A\u0E6B\u0E6C\u0E6D\u0E6E\u0E6F\u0E70\u0E71"+
-            "\u0E72\u0E73\u0E74\u0E75\u0E76\u0E77\u0E78\u0E79"+
-            "\u0E7A\u0E7B\u0E7C\u0E7D\u0E7E\u0E7F\u0E80\u0E81"+
-            "\u0E82\u0E83\u0E84\u0E85\u0E86\u0E87\u0E88\u0E89"+
-            "\u0E8A\u0E8B\u0E8C\u0E8D\u0E8E\u0E8F\u0E90\u0E91"+
-            "\u0E92\u0E93\u0E94\u0E95\u0E96\u0E97\u0E98\u0E99"+
-            "\u0E9A\u0E9B\u0E9C\u0E9D\u0E9E\u0E9F\u0EA0\u0EA1"+
-            "\u0EA2\u0EA3\u0EA4\u0EA5\u0EA6\u0EA7\u0EA8\u0EA9"+
-            "\u0EAA\u0EAB\u0EAC\u0EAD\u0EAE\u0EAF\u0EB0\u0EB1"+
-            "\u0EB2\u0EB3\u0EB4\u0EB5\u0EB6\u0EB7\u0EB8\u0EB9"+
-            "\u0EBA\u0EBB\u0EBC\u0EBD\u0EBE\u0EBF\u0EC0\u0EC1"+
-            "\u0EC2\u0EC3\u0EC4\u0EC5\u0EC6\u0EC7\u0EC8\u0EC9"+
-            "\u0ECA\u0ECB\u0ECC\u0ECD\u0ECE\u0ECF\u0ED0\u0ED1"+
-            "\u0ED2\u0ED3\u0ED4\u0ED5\u0ED6\u0ED7\u0ED8\u0ED9"+
-            "\u0EDA\u0EDB\u0EDC\u0EDD\u0EDE\u0EDF\u0EE0\u0EE1"+
-            "\u0EE2\u0EE3\u0EE4\u0EE5\u0EE6\u0EE7\u0EE8\u0EE9"+
-            "\u0EEA\u0EEB\u0EEC\u0EED\u0EEE\u0EEF\u0EF0\u0EF1"+
-            "\u0EF2\u0EF3\u0EF4\u0EF5\u0EF6\u0EF7\u0EF8\u0EF9"+
-            "\u0EFA\u0EFB\u0EFC\u0EFD\u0EFE\u0EFF\u0F00\u0F01"+
-            "\u0F02\u0F03\u0F04\u0F05\u0F06\u0F07\u0F08\u0F09"+
-            "\u0F0A\u0F0B\u0F0C\u0F0D\u0F0E\u0F0F\u0F10\u0F11"+
-            "\u0F12\u0F13\u0F14\u0F15\u0F16\u0F17\u0F18\u0F19"+
-            "\u0F1A\u0F1B\u0F1C\u0F1D\u0F1E\u0F1F\u0F20\u0F21"+
-            "\u0F22\u0F23\u0F24\u0F25\u0F26\u0F27\u0F28\u0F29"+
-            "\u0F2A\u0F2B\u0F2C\u0F2D\u0F2E\u0F2F\u0F30\u0F31"+
-            "\u0F32\u0F33\u0F34\u0F35\u0F36\u0F37\u0F38\u0F39"+
-            "\u0F3A\u0F3B\u0F3C\u0F3D\u0F3E\u0F3F\u0F40\u0F41"+
-            "\u0F42\u0F43\u0F44\u0F45\u0F46\u0F47\u0F48\u0F49"+
-            "\u0F4A\u0F4B\u0F4C\u0F4D\u0F4E\u0F4F\u0F50\u0F51"+
-            "\u0F52\u0F53\u0F54\u0F55\u0F56\u0F57\u0F58\u0F59"+
-            "\u0F5A\u0F5B\u0F5C\u0F5D\u0F5E\u0F5F\u0F60\u0F61"+
-            "\u0F62\u0F63\u0F64\u0F65\u0F66\u0F67\u0F68\u0F69"+
-            "\u0F6A\u0F6B\u0F6C\u0F6D\u0F6E\u0F6F\u0F70\u0F71"+
-            "\u0F72\u0F73\u0F74\u0F75\u0F76\u0F77\u0F78\u0F79"+
-            "\u0F7A\u0F7B\u0F7C\u0F7D\u0F7E\u0F7F\u0F80\u0F81"+
-            "\u0F82\u0F83\u0F84\u0F85\u0F86\u0F87\u0F88\u0F89"+
-            "\u0F8A\u0F8B\u0F8C\u0F8D\u0F8E\u0F8F\u0F90\u0F91"+
-            "\u0F92\u0F93\u0F94\u0F95\u0F96\u0F97\u0F98\u0F99"+
-            "\u0F9A\u0F9B\u0F9C\u0F9D\u0F9E\u0F9F\u0FA0\u0FA1"+
-            "\u0FA2\u0FA3\u0FA4\u0FA5\u0FA6\u0FA7\u0FA8\u0FA9"+
-            "\u0FAA\u0FAB\u0FAC\u0FAD\u0FAE\u0FAF\u0FB0\u0FB1"+
-            "\u0FB2\u0FB3\u0FB4\u0FB5\u0FB6\u0FB7\u0FB8\u0FB9"+
-            "\u0FBA\u0FBB\u0FBC\u0FBD\u0FBE\u0FBF\u0FC0\u0FC1"+
-            "\u0FC2\u0FC3\u0FC4\u0FC5\u0FC6\u0FC7\u0FC8\u0FC9"+
-            "\u0FCA\u0FCB\u0FCC\u0FCD\u0FCE\u0FCF\u0FD0\u0FD1"+
-            "\u0FD2\u0FD3\u0FD4\u0FD5\u0FD6\u0FD7\u0FD8\u0FD9"+
-            "\u0FDA\u0FDB\u0FDC\u0FDD\u0FDE\u0FDF\u0FE0\u0FE1"+
-            "\u0FE2\u0FE3\u0FE4\u0FE5\u0FE6\u0FE7\u0FE8\u0FE9"+
-            "\u0FEA\u0FEB\u0FEC\u0FED\u0FEE\u0FEF\u0FF0\u0FF1"+
-            "\u0FF2\u0FF3\u0FF4\u0FF5\u0FF6\u0FF7\u0FF8\u0FF9"+
-            "\u0FFA\u0FFB\u0FFC\u0FFD\u0FFE\u0FFF\u1000\u1001"+
-            "\u1002\u1003\u1004\u1005\u1006\u1007\u1008\u1009"+
-            "\u100A\u100B\u100C\u100D\u100E\u100F\u1010\u1011"+
-            "\u1012\u1013\u1014\u1015\u1016\u1017\u1018\u1019"+
-            "\u101A\u101B\u101C\u101D\u101E\u101F\u1020\u1021"+
-            "\u1022\u1023\u1024\u1025\u1026\u1027\u1028\u1029"+
-            "\u102A\u102B\u102C\u102D\u102E\u102F\u1030\u1031"+
-            "\u1032\u1033\u1034\u1035\u1036\u1037\u1038\u1039"+
-            "\u103A\u103B\u103C\u103D\u103E\u103F\u1040\u1041"+
-            "\u1042\u1043\u1044\u1045\u1046\u1047\u1048\u1049"+
-            "\u104A\u104B\u104C\u104D\u104E\u104F\u1050\u1051"+
-            "\u1052\u1053\u1054\u1055\u1056\u1057\u1058\u1059"+
-            "\u105A\u105B\u105C\u105D\u105E\u105F\u1060\u1061"+
-            "\u1062\u1063\u1064\u1065\u1066\u1067\u1068\u1069"+
-            "\u106A\u106B\u106C\u106D\u106E\u106F\u1070\u1071"+
-            "\u1072\u1073\u1074\u1075\u1076\u1077\u1078\u1079"+
-            "\u107A\u107B\u107C\u107D\u107E\u107F\u1080\u1081"+
-            "\u1082\u1083\u1084\u1085\u1086\u1087\u1088\u1089"+
-            "\u108A\u108B\u108C\u108D\u108E\u108F\u1090\u1091"+
-            "\u1092\u1093\u1094\u1095\u1096\u1097\u1098\u1099"+
-            "\u109A\u109B\u109C\u109D\u109E\u109F\u10A0\u10A1"+
-            "\u10A2\u10A3\u10A4\u10A5\u10A6\u10A7\u10A8\u10A9"+
-            "\u10AA\u10AB\u10AC\u10AD\u10AE\u10AF\u10B0\u10B1"+
-            "\u10B2\u10B3\u10B4\u10B5\u10B6\u10B7\u10B8\u10B9"+
-            "\u10BA\u10BB\u10BC\u10BD\u10BE\u10BF\u10C0\u10C1"+
-            "\u10C2\u10C3\u10C4\u10C5\u10C6\u10C7\u10C8\u10C9"+
-            "\u10CA\u10CB\u10CC\u10CD\u10CE\u10CF\u10D0\u10D1"+
-            "\u10D2\u10D3\u10D4\u10D5\u10D6\u10D7\u10D8\u10D9"+
-            "\u10DA\u10DB\u10DC\u10DD\u10DE\u10DF\u10E0\u10E1"+
-            "\u10E2\u10E3\u10E4\u10E5\u10E6\u10E7\u10E8\u10E9"+
-            "\u10EA\u10EB\u10EC\u10ED\u10EE\u10EF\u10F0\u10F1"+
-            "\u10F2\u10F3\u10F4\u10F5\u10F6\u10F7\u10F8\u10F9"+
-            "\u10FA\u10FB\u10FC\u10FD\u10FE\u10FF\u1100\u1101"+
-            "\u1102\u1103\u1104\u1105\u1106\u1107\u1108\u1109"+
-            "\u110A\u110B\u110C\u110D\u110E\u110F\u1110\u1111"+
-            "\u1112\u1113\u1114\u1115\u1116\u1117\u1118\u1119"+
-            "\u111A\u111B\u111C\u111D\u111E\u111F\u1120\u1121"+
-            "\u1122\u1123\u1124\u1125\u1126\u1127\u1128\u1129"+
-            "\u112A\u112B\u112C\u112D\u112E\u112F\u1130\u1131"+
-            "\u1132\u1133\u1134\u1135\u1136\u1137\u1138\u1139"+
-            "\u113A\u113B\u113C\u113D\u113E\u113F\u1140\u1141"+
-            "\u1142\u1143\u1144\u1145\u1146\u1147\u1148\u1149"+
-            "\u114A\u114B\u114C\u114D\u114E\u114F\u1150\u1151"+
-            "\u1152\u1153\u1154\u1155\u1156\u1157\u1158\u1159"+
-            "\u115A\u115B\u115C\u115D\u115E\u115F\u1160\u1161"+
-            "\u1162\u1163\u1164\u1165\u1166\u1167\u1168\u1169"+
-            "\u116A\u116B\u116C\u116D\u116E\u116F\u1170\u1171"+
-            "\u1172\u1173\u1174\u1175\u1176\u1177\u1178\u1179"+
-            "\u117A\u117B\u117C\u117D\u117E\u117F\u1180\u1181"+
-            "\u1182\u1183\u1184\u1185\u1186\u1187\u1188\u1189"+
-            "\u118A\u118B\u118C\u118D\u118E\u118F\u1190\u1191"+
-            "\u1192\u1193\u1194\u1195\u1196\u1197\u1198\u1199"+
-            "\u119A\u119B\u119C\u119D\u119E\u119F\u11A0\u11A1"+
-            "\u11A2\u11A3\u11A4\u11A5\u11A6\u11A7\u11A8\u11A9"+
-            "\u11AA\u11AB\u11AC\u11AD\u11AE\u11AF\u11B0\u11B1"+
-            "\u11B2\u11B3\u11B4\u11B5\u11B6\u11B7\u11B8\u11B9"+
-            "\u11BA\u11BB\u11BC\u11BD\u11BE\u11BF\u11C0\u11C1"+
-            "\u11C2\u11C3\u11C4\u11C5\u11C6\u11C7\u11C8\u11C9"+
-            "\u11CA\u11CB\u11CC\u11CD\u11CE\u11CF\u11D0\u11D1"+
-            "\u11D2\u11D3\u11D4\u11D5\u11D6\u11D7\u11D8\u11D9"+
-            "\u11DA\u11DB\u11DC\u11DD\u11DE\u11DF\u11E0\u11E1"+
-            "\u11E2\u11E3\u11E4\u11E5\u11E6\u11E7\u11E8\u11E9"+
-            "\u11EA\u11EB\u11EC\u11ED\u11EE\u11EF\u11F0\u11F1"+
-            "\u11F2\u11F3\u11F4\u11F5\u11F6\u11F7\u11F8\u11F9"+
-            "\u11FA\u11FB\u11FC\u11FD\u11FE\u11FF\u1200\u1201"+
-            "\u1202\u1203\u1204\u1205\u1206\u1207\u1208\u1209"+
-            "\u120A\u120B\u120C\u120D\u120E\u120F\u1210\u1211"+
-            "\u1212\u1213\u1214\u1215\u1216\u1217\u1218\u1219"+
-            "\u121A\u121B\u121C\u121D\u121E\u121F\u1220\u1221"+
-            "\u1222\u1223\u1224\u1225\u1226\u1227\u1228\u1229"+
-            "\u122A\u122B\u122C\u122D\u122E\u122F\u1230\u1231"+
-            "\u1232\u1233\u1234\u1235\u1236\u1237\u1238\u1239"+
-            "\u123A\u123B\u123C\u123D\u123E\u123F\u1240\u1241"+
-            "\u1242\u1243\u1244\u1245\u1246\u1247\u1248\u1249"+
-            "\u124A\u124B\u124C\u124D\u124E\u124F\u1250\u1251"+
-            "\u1252\u1253\u1254\u1255\u1256\u1257\u1258\u1259"+
-            "\u125A\u125B\u125C\u125D\u125E\u125F\u1260\u1261"+
-            "\u1262\u1263\u1264\u1265\u1266\u1267\u1268\u1269"+
-            "\u126A\u126B\u126C\u126D\u126E\u126F\u1270\u1271"+
-            "\u1272\u1273\u1274\u1275\u1276\u1277\u1278\u1279"+
-            "\u127A\u127B\u127C\u127D\u127E\u127F\u1280\u1281"+
-            "\u1282\u1283\u1284\u1285\u1286\u1287\u1288\u1289"+
-            "\u128A\u128B\u128C\u128D\u128E\u128F\u1290\u1291"+
-            "\u1292\u1293\u1294\u1295\u1296\u1297\u1298\u1299"+
-            "\u129A\u129B\u129C\u129D\u129E\u129F\u12A0\u12A1"+
-            "\u12A2\u12A3\u12A4\u12A5\u12A6\u12A7\u12A8\u12A9"+
-            "\u12AA\u12AB\u12AC\u12AD\u12AE\u12AF\u12B0\u12B1"+
-            "\u12B2\u12B3\u12B4\u12B5\u12B6\u12B7\u12B8\u12B9"+
-            "\u12BA\u12BB\u12BC\u12BD\u12BE\u12BF\u12C0\u12C1"+
-            "\u12C2\u12C3\u12C4\u12C5\u12C6\u12C7\u12C8\u12C9"+
-            "\u12CA\u12CB\u12CC\u12CD\u12CE\u12CF\u12D0\u12D1"+
-            "\u12D2\u12D3\u12D4\u12D5\u12D6\u12D7\u12D8\u12D9"+
-            "\u12DA\u12DB\u12DC\u12DD\u12DE\u12DF\u12E0\u12E1"+
-            "\u12E2\u12E3\u12E4\u12E5\u12E6\u12E7\u12E8\u12E9"+
-            "\u12EA\u12EB\u12EC\u12ED\u12EE\u12EF\u12F0\u12F1"+
-            "\u12F2\u12F3\u12F4\u12F5\u12F6\u12F7\u12F8\u12F9"+
-            "\u12FA\u12FB\u12FC\u12FD\u12FE\u12FF\u1300\u1301"+
-            "\u1302\u1303\u1304\u1305\u1306\u1307\u1308\u1309"+
-            "\u130A\u130B\u130C\u130D\u130E\u130F\u1310\u1311"+
-            "\u1312\u1313\u1314\u1315\u1316\u1317\u1318\u1319"+
-            "\u131A\u131B\u131C\u131D\u131E\u131F\u1320\u1321"+
-            "\u1322\u1323\u1324\u1325\u1326\u1327\u1328\u1329"+
-            "\u132A\u132B\u132C\u132D\u132E\u132F\u1330\u1331"+
-            "\u1332\u1333\u1334\u1335\u1336\u1337\u1338\u1339"+
-            "\u133A\u133B\u133C\u133D\u133E\u133F\u1340\u1341"+
-            "\u1342\u1343\u1344\u1345\u1346\u1347\u1348\u1349"+
-            "\u134A\u134B\u134C\u134D\u134E\u134F\u1350\u1351"+
-            "\u1352\u1353\u1354\u1355\u1356\u1357\u1358\u1359"+
-            "\u135A\u135B\u135C\u135D\u135E\u135F\u1360\u1361"+
-            "\u1362\u1363\u1364\u1365\u1366\u1367\u1368\u1369"+
-            "\u136A\u136B\u136C\u136D\u136E\u136F\u1370\u1371"+
-            "\u1372\u1373\u1374\u1375\u1376\u1377\u1378\u1379"+
-            "\u137A\u137B\u137C\u137D\u137E\u137F\u1380\u1381"+
-            "\u1382\u1383\u1384\u1385\u1386\u1387\u1388\u1389"+
-            "\u138A\u138B\u138C\u138D\u138E\u138F\u1390\u1391"+
-            "\u1392\u1393\u1394\u1395\u1396\u1397\u1398\u1399"+
-            "\u139A\u139B\u139C\u139D\u139E\u139F\u13A0\u13A1"+
-            "\u13A2\u13A3\u13A4\u13A5\u13A6\u13A7\u13A8\u13A9"+
-            "\u13AA\u13AB\u13AC\u13AD\u13AE\u13AF\u13B0\u13B1"+
-            "\u13B2\u13B3\u13B4\u13B5\u13B6\u13B7\u13B8\u13B9"+
-            "\u13BA\u13BB\u13BC\u13BD\u13BE\u13BF\u13C0\u13C1"+
-            "\u13C2\u13C3\u13C4\u13C5\u13C6\u13C7\u13C8\u13C9"+
-            "\u13CA\u13CB\u13CC\u13CD\u13CE\u13CF\u13D0\u13D1"+
-            "\u13D2\u13D3\u13D4\u13D5\u13D6\u13D7\u13D8\u13D9"+
-            "\u13DA\u13DB\u13DC\u13DD\u13DE\u13DF\u13E0\u13E1"+
-            "\u13E2\u13E3\u13E4\u13E5\u13E6\u13E7\u13E8\u13E9"+
-            "\u13EA\u13EB\u13EC\u13ED\u13EE\u13EF\u13F0\u13F1"+
-            "\u13F2\u13F3\u13F4\u13F5\u13F6\u13F7\u13F8\u13F9"+
-            "\u13FA\u13FB\u13FC\u13FD\u13FE\u13FF\u1400\u1401"+
-            "\u1402\u1403\u1404\u1405\u1406\u1407\u1408\u1409"+
-            "\u140A\u140B\u140C\u140D\u140E\u140F\u1410\u1411"+
-            "\u1412\u1413\u1414\u1415\u1416\u1417\u1418\u1419"+
-            "\u141A\u141B\u141C\u141D\u141E\u141F\u1420\u1421"+
-            "\u1422\u1423\u1424\u1425\u1426\u1427\u1428\u1429"+
-            "\u142A\u142B\u142C\u142D\u142E\u142F\u1430\u1431"+
-            "\u1432\u1433\u1434\u1435\u1436\u1437\u1438\u1439"+
-            "\u143A\u143B\u143C\u143D\u143E\u143F\u1440\u1441"+
-            "\u1442\u1443\u1444\u1445\u1446\u1447\u1448\u1449"+
-            "\u144A\u144B\u144C\u144D\u144E\u144F\u1450\u1451"+
-            "\u1452\u1453\u1454\u1455\u1456\u1457\u1458\u1459"+
-            "\u145A\u145B\u145C\u145D\u145E\u145F\u1460\u1461"+
-            "\u1462\u1463\u1464\u1465\u1466\u1467\u1468\u1469"+
-            "\u146A\u146B\u146C\u146D\u146E\u146F\u1470\u1471"+
-            "\u1472\u1473\u1474\u1475\u1476\u1477\u1478\u1479"+
-            "\u147A\u147B\u147C\u147D\u147E\u147F\u1480\u1481"+
-            "\u1482\u1483\u1484\u1485\u1486\u1487\u1488\u1489"+
-            "\u148A\u148B\u148C\u148D\u148E\u148F\u1490\u1491"+
-            "\u1492\u1493\u1494\u1495\u1496\u1497\u1498\u1499"+
-            "\u149A\u149B\u149C\u149D\u149E\u149F\u14A0\u14A1"+
-            "\u14A2\u14A3\u14A4\u14A5\u14A6\u14A7\u14A8\u14A9"+
-            "\u14AA\u14AB\u14AC\u14AD\u14AE\u14AF\u14B0\u14B1"+
-            "\u14B2\u14B3\u14B4\u14B5\u14B6\u14B7\u14B8\u14B9"+
-            "\u14BA\u14BB\u14BC\u14BD\u14BE\u14BF\u14C0\u14C1"+
-            "\u14C2\u14C3\u14C4\u14C5\u14C6\u14C7\u14C8\u14C9"+
-            "\u14CA\u14CB\u14CC\u14CD\u14CE\u14CF\u14D0\u14D1"+
-            "\u14D2\u14D3\u14D4\u14D5\u14D6\u14D7\u14D8\u14D9"+
-            "\u14DA\u14DB\u14DC\u14DD\u14DE\u14DF\u14E0\u14E1"+
-            "\u14E2\u14E3\u14E4\u14E5\u14E6\u14E7\u14E8\u14E9"+
-            "\u14EA\u14EB\u14EC\u14ED\u14EE\u14EF\u14F0\u14F1"+
-            "\u14F2\u14F3\u14F4\u14F5\u14F6\u14F7\u14F8\u14F9"+
-            "\u14FA\u14FB\u14FC\u14FD\u14FE\u14FF\u1500\u1501"+
-            "\u1502\u1503\u1504\u1505\u1506\u1507\u1508\u1509"+
-            "\u150A\u150B\u150C\u150D\u150E\u150F\u1510\u1511"+
-            "\u1512\u1513\u1514\u1515\u1516\u1517\u1518\u1519"+
-            "\u151A\u151B\u151C\u151D\u151E\u151F\u1520\u1521"+
-            "\u1522\u1523\u1524\u1525\u1526\u1527\u1528\u1529"+
-            "\u152A\u152B\u152C\u152D\u152E\u152F\u1530\u1531"+
-            "\u1532\u1533\u1534\u1535\u1536\u1537\u1538\u1539"+
-            "\u153A\u153B\u153C\u153D\u153E\u153F\u1540\u1541"+
-            "\u1542\u1543\u1544\u1545\u1546\u1547\u1548\u1549"+
-            "\u154A\u154B\u154C\u154D\u154E\u154F\u1550\u1551"+
-            "\u1552\u1553\u1554\u1555\u1556\u1557\u1558\u1559"+
-            "\u155A\u155B\u155C\u155D\u155E\u155F\u1560\u1561"+
-            "\u1562\u1563\u1564\u1565\u1566\u1567\u1568\u1569"+
-            "\u156A\u156B\u156C\u156D\u156E\u156F\u1570\u1571"+
-            "\u1572\u1573\u1574\u1575\u1576\u1577\u1578\u1579"+
-            "\u157A\u157B\u157C\u157D\u157E\u157F\u1580\u1581"+
-            "\u1582\u1583\u1584\u1585\u1586\u1587\u1588\u1589"+
-            "\u158A\u158B\u158C\u158D\u158E\u158F\u1590\u1591"+
-            "\u1592\u1593\u1594\u1595\u1596\u1597\u1598\u1599"+
-            "\u159A\u159B\u159C\u159D\u159E\u159F\u15A0\u15A1"+
-            "\u15A2\u15A3\u15A4\u15A5\u15A6\u15A7\u15A8\u15A9"+
-            "\u15AA\u15AB\u15AC\u15AD\u15AE\u15AF\u15B0\u15B1"+
-            "\u15B2\u15B3\u15B4\u15B5\u15B6\u15B7\u15B8\u15B9"+
-            "\u15BA\u15BB\u15BC\u15BD\u15BE\u15BF\u15C0\u15C1"+
-            "\u15C2\u15C3\u15C4\u15C5\u15C6\u15C7\u15C8\u15C9"+
-            "\u15CA\u15CB\u15CC\u15CD\u15CE\u15CF\u15D0\u15D1"+
-            "\u15D2\u15D3\u15D4\u15D5\u15D6\u15D7\u15D8\u15D9"+
-            "\u15DA\u15DB\u15DC\u15DD\u15DE\u15DF\u15E0\u15E1"+
-            "\u15E2\u15E3\u15E4\u15E5\u15E6\u15E7\u15E8\u15E9"+
-            "\u15EA\u15EB\u15EC\u15ED\u15EE\u15EF\u15F0\u15F1"+
-            "\u15F2\u15F3\u15F4\u15F5\u15F6\u15F7\u15F8\u15F9"+
-            "\u15FA\u15FB\u15FC\u15FD\u15FE\u15FF\u1600\u1601"+
-            "\u1602\u1603\u1604\u1605\u1606\u1607\u1608\u1609"+
-            "\u160A\u160B\u160C\u160D\u160E\u160F\u1610\u1611"+
-            "\u1612\u1613\u1614\u1615\u1616\u1617\u1618\u1619"+
-            "\u161A\u161B\u161C\u161D\u161E\u161F\u1620\u1621"+
-            "\u1622\u1623\u1624\u1625\u1626\u1627\u1628\u1629"+
-            "\u162A\u162B\u162C\u162D\u162E\u162F\u1630\u1631"+
-            "\u1632\u1633\u1634\u1635\u1636\u1637\u1638\u1639"+
-            "\u163A\u163B\u163C\u163D\u163E\u163F\u1640\u1641"+
-            "\u1642\u1643\u1644\u1645\u1646\u1647\u1648\u1649"+
-            "\u164A\u164B\u164C\u164D\u164E\u164F\u1650\u1651"+
-            "\u1652\u1653\u1654\u1655\u1656\u1657\u1658\u1659"+
-            "\u165A\u165B\u165C\u165D\u165E\u165F\u1660\u1661"+
-            "\u1662\u1663\u1664\u1665\u1666\u1667\u1668\u1669"+
-            "\u166A\u166B\u166C\u166D\u166E\u166F\u1670\u1671"+
-            "\u1672\u1673\u1674\u1675\u1676\u1677\u1678\u1679"+
-            "\u167A\u167B\u167C\u167D\u167E\u167F\u1680\u1681"+
-            "\u1682\u1683\u1684\u1685\u1686\u1687\u1688\u1689"+
-            "\u168A\u168B\u168C\u168D\u168E\u168F\u1690\u1691"+
-            "\u1692\u1693\u1694\u1695\u1696\u1697\u1698\u1699"+
-            "\u169A\u169B\u169C\u169D\u169E\u169F\u16A0\u16A1"+
-            "\u16A2\u16A3\u16A4\u16A5\u16A6\u16A7\u16A8\u16A9"+
-            "\u16AA\u16AB\u16AC\u16AD\u16AE\u16AF\u16B0\u16B1"+
-            "\u16B2\u16B3\u16B4\u16B5\u16B6\u16B7\u16B8\u16B9"+
-            "\u16BA\u16BB\u16BC\u16BD\u16BE\u16BF\u16C0\u16C1"+
-            "\u16C2\u16C3\u16C4\u16C5\u16C6\u16C7\u16C8\u16C9"+
-            "\u16CA\u16CB\u16CC\u16CD\u16CE\u16CF\u16D0\u16D1"+
-            "\u16D2\u16D3\u16D4\u16D5\u16D6\u16D7\u16D8\u16D9"+
-            "\u16DA\u16DB\u16DC\u16DD\u16DE\u16DF\u16E0\u16E1"+
-            "\u16E2\u16E3\u16E4\u16E5\u16E6\u16E7\u16E8\u16E9"+
-            "\u16EA\u16EB\u16EC\u16ED\u16EE\u16EF\u16F0\u16F1"+
-            "\u16F2\u16F3\u16F4\u16F5\u16F6\u16F7\u16F8\u16F9"+
-            "\u16FA\u16FB\u16FC\u16FD\u16FE\u16FF\u1700\u1701"+
-            "\u1702\u1703\u1704\u1705\u1706\u1707\u1708\u1709"+
-            "\u170A\u170B\u170C\u170D\u170E\u170F\u1710\u1711"+
-            "\u1712\u1713\u1714\u1715\u1716\u1717\u1718\u1719"+
-            "\u171A\u171B\u171C\u171D\u171E\u171F\u1720\u1721"+
-            "\u1722\u1723\u1724\u1725\u1726\u1727\u1728\u1729"+
-            "\u172A\u172B\u172C\u172D\u172E\u172F\u1730\u1731"+
-            "\u1732\u1733\u1734\u1735\u1736\u1737\u1738\u1739"+
-            "\u173A\u173B\u173C\u173D\u173E\u173F\u1740\u1741"+
-            "\u1742\u1743\u1744\u1745\u1746\u1747\u1748\u1749"+
-            "\u174A\u174B\u174C\u174D\u174E\u174F\u1750\u1751"+
-            "\u1752\u1753\u1754\u1755\u1756\u1757\u1758\u1759"+
-            "\u175A\u175B\u175C\u175D\u175E\u175F\u1760\u1761"+
-            "\u1762\u1763\u1764\u1765\u1766\u1767\u1768\u1769"+
-            "\u176A\u176B\u176C\u176D\u176E\u176F\u1770\u1771"+
-            "\u1772\u1773\u1774\u1775\u1776\u1777\u1778\u1779"+
-            "\u177A\u177B\u177C\u177D\u177E\u177F\u1780\u1781"+
-            "\u1782\u1783\u1784\u1785\u1786\u1787\u1788\u1789"+
-            "\u178A\u178B\u178C\u178D\u178E\u178F\u1790\u1791"+
-            "\u1792\u1793\u1794\u1795\u1796\u1797\u1798\u1799"+
-            "\u179A\u179B\u179C\u179D\u179E\u179F\u17A0\u17A1"+
-            "\u17A2\u17A3\u17A4\u17A5\u17A6\u17A7\u17A8\u17A9"+
-            "\u17AA\u17AB\u17AC\u17AD\u17AE\u17AF\u17B0\u17B1"+
-            "\u17B2\u17B3\u17B4\u17B5\u17B6\u17B7\u17B8\u17B9"+
-            "\u17BA\u17BB\u17BC\u17BD\u17BE\u17BF\u17C0\u17C1"+
-            "\u17C2\u17C3\u17C4\u17C5\u17C6\u17C7\u17C8\u17C9"+
-            "\u17CA\u17CB\u17CC\u17CD\u17CE\u17CF\u17D0\u17D1"+
-            "\u17D2\u17D3\u17D4\u17D5\u17D6\u17D7\u17D8\u17D9"+
-            "\u17DA\u17DB\u17DC\u17DD\u17DE\u17DF\u17E0\u17E1"+
-            "\u17E2\u17E3\u17E4\u17E5\u17E6\u17E7\u17E8\u17E9"+
-            "\u17EA\u17EB\u17EC\u17ED\u17EE\u17EF\u17F0\u17F1"+
-            "\u17F2\u17F3\u17F4\u17F5\u17F6\u17F7\u17F8\u17F9"+
-            "\u17FA\u17FB\u17FC\u17FD\u17FE\u17FF\u1800\u1801"+
-            "\u1802\u1803\u1804\u1805\u1806\u1807\u1808\u1809"+
-            "\u180A\u180B\u180C\u180D\u180E\u180F\u1810\u1811"+
-            "\u1812\u1813\u1814\u1815\u1816\u1817\u1818\u1819"+
-            "\u181A\u181B\u181C\u181D\u181E\u181F\u1820\u1821"+
-            "\u1822\u1823\u1824\u1825\u1826\u1827\u1828\u1829"+
-            "\u182A\u182B\u182C\u182D\u182E\u182F\u1830\u1831"+
-            "\u1832\u1833\u1834\u1835\u1836\u1837\u1838\u1839"+
-            "\u183A\u183B\u183C\u183D\u183E\u183F\u1840\u1841"+
-            "\u1842\u1843\u1844\u1845\u1846\u1847\u1848\u1849"+
-            "\u184A\u184B\u184C\u184D\u184E\u184F\u1850\u1851"+
-            "\u1852\u1853\u1854\u1855\u1856\u1857\u1858\u1859"+
-            "\u185A\u185B\u185C\u185D\u185E\u185F\u1860\u1861"+
-            "\u1862\u1863\u1864\u1865\u1866\u1867\u1868\u1869"+
-            "\u186A\u186B\u186C\u186D\u186E\u186F\u1870\u1871"+
-            "\u1872\u1873\u1874\u1875\u1876\u1877\u1878\u1879"+
-            "\u187A\u187B\u187C\u187D\u187E\u187F\u1880\u1881"+
-            "\u1882\u1883\u1884\u1885\u1886\u1887\u1888\u1889"+
-            "\u188A\u188B\u188C\u188D\u188E\u188F\u1890\u1891"+
-            "\u1892\u1893\u1894\u1895\u1896\u1897\u1898\u1899"+
-            "\u189A\u189B\u189C\u189D\u189E\u189F\u18A0\u18A1"+
-            "\u18A2\u18A3\u18A4\u18A5\u18A6\u18A7\u18A8\u18A9"+
-            "\u18AA\u18AB\u18AC\u18AD\u18AE\u18AF\u18B0\u18B1"+
-            "\u18B2\u18B3\u18B4\u18B5\u18B6\u18B7\u18B8\u18B9"+
-            "\u18BA\u18BB\u18BC\u18BD\u18BE\u18BF\u18C0\u18C1"+
-            "\u18C2\u18C3\u18C4\u18C5\u18C6\u18C7\u18C8\u18C9"+
-            "\u18CA\u18CB\u18CC\u18CD\u18CE\u18CF\u18D0\u18D1"+
-            "\u18D2\u18D3\u18D4\u18D5\u18D6\u18D7\u18D8\u18D9"+
-            "\u18DA\u18DB\u18DC\u18DD\u18DE\u18DF\u18E0\u18E1"+
-            "\u18E2\u18E3\u18E4\u18E5\u18E6\u18E7\u18E8\u18E9"+
-            "\u18EA\u18EB\u18EC\u18ED\u18EE\u18EF\u18F0\u18F1"+
-            "\u18F2\u18F3\u18F4\u18F5\u18F6\u18F7\u18F8\u18F9"+
-            "\u18FA\u18FB\u18FC\u18FD\u18FE\u18FF\u1900\u1901"+
-            "\u1902\u1903\u1904\u1905\u1906\u1907\u1908\u1909"+
-            "\u190A\u190B\u190C\u190D\u190E\u190F\u1910\u1911"+
-            "\u1912\u1913\u1914\u1915\u1916\u1917\u1918\u1919"+
-            "\u191A\u191B\u191C\u191D\u191E\u191F\u1920\u1921"+
-            "\u1922\u1923\u1924\u1925\u1926\u1927\u1928\u1929"+
-            "\u192A\u192B\u192C\u192D\u192E\u192F\u1930\u1931"+
-            "\u1932\u1933\u1934\u1935\u1936\u1937\u1938\u1939"+
-            "\u193A\u193B\u193C\u193D\u193E\u193F\u1940\u1941"+
-            "\u1942\u1943\u1944\u1945\u1946\u1947\u1948\u1949"+
-            "\u194A\u194B\u194C\u194D\u194E\u194F\u1950\u1951"+
-            "\u1952\u1953\u1954\u1955\u1956\u1957\u1958\u1959"+
-            "\u195A\u195B\u195C\u195D\u195E\u195F\u1960\u1961"+
-            "\u1962\u1963\u1964\u1965\u1966\u1967\u1968\u1969"+
-            "\u196A\u196B\u196C\u196D\u196E\u196F\u1970\u1971"+
-            "\u1972\u1973\u1974\u1975\u1976\u1977\u1978\u1979"+
-            "\u197A\u197B\u197C\u197D\u197E\u197F\u1980\u1981"+
-            "\u1982\u1983\u1984\u1985\u1986\u1987\u1988\u1989"+
-            "\u198A\u198B\u198C\u198D\u198E\u198F\u1990\u1991"+
-            "\u1992\u1993\u1994\u1995\u1996\u1997\u1998\u1999"+
-            "\u199A\u199B\u199C\u199D\u199E\u199F\u19A0\u19A1"+
-            "\u19A2\u19A3\u19A4\u19A5\u19A6\u19A7\u19A8\u19A9"+
-            "\u19AA\u19AB\u19AC\u19AD\u19AE\u19AF\u19B0\u19B1"+
-            "\u19B2\u19B3\u19B4\u19B5\u19B6\u19B7\u19B8\u19B9"+
-            "\u19BA\u19BB\u19BC\u19BD\u19BE\u19BF\u19C0\u19C1"+
-            "\u19C2\u19C3\u19C4\u19C5\u19C6\u19C7\u19C8\u19C9"+
-            "\u19CA\u19CB\u19CC\u19CD\u19CE\u19CF\u19D0\u19D1"+
-            "\u19D2\u19D3\u19D4\u19D5\u19D6\u19D7\u19D8\u19D9"+
-            "\u19DA\u19DB\u19DC\u19DD\u19DE\u19DF\u19E0\u19E1"+
-            "\u19E2\u19E3\u19E4\u19E5\u19E6\u19E7\u19E8\u19E9"+
-            "\u19EA\u19EB\u19EC\u19ED\u19EE\u19EF\u19F0\u19F1"+
-            "\u19F2\u19F3\u19F4\u19F5\u19F6\u19F7\u19F8\u19F9"+
-            "\u19FA\u19FB\u19FC\u19FD\u19FE\u19FF\u1A00\u1A01"+
-            "\u1A02\u1A03\u1A04\u1A05\u1A06\u1A07\u1A08\u1A09"+
-            "\u1A0A\u1A0B\u1A0C\u1A0D\u1A0E\u1A0F\u1A10\u1A11"+
-            "\u1A12\u1A13\u1A14\u1A15\u1A16\u1A17\u1A18\u1A19"+
-            "\u1A1A\u1A1B\u1A1C\u1A1D\u1A1E\u1A1F\u1A20\u1A21"+
-            "\u1A22\u1A23\u1A24\u1A25\u1A26\u1A27\u1A28\u1A29"+
-            "\u1A2A\u1A2B\u1A2C\u1A2D\u1A2E\u1A2F\u1A30\u1A31"+
-            "\u1A32\u1A33\u1A34\u1A35\u1A36\u1A37\u1A38\u1A39"+
-            "\u1A3A\u1A3B\u1A3C\u1A3D\u1A3E\u1A3F\u1A40\u1A41"+
-            "\u1A42\u1A43\u1A44\u1A45\u1A46\u1A47\u1A48\u1A49"+
-            "\u1A4A\u1A4B\u1A4C\u1A4D\u1A4E\u1A4F\u1A50\u1A51"+
-            "\u1A52\u1A53\u1A54\u1A55\u1A56\u1A57\u1A58\u1A59"+
-            "\u1A5A\u1A5B\u1A5C\u1A5D\u1A5E\u1A5F\u1A60\u1A61"+
-            "\u1A62\u1A63\u1A64\u1A65\u1A66\u1A67\u1A68\u1A69"+
-            "\u1A6A\u1A6B\u1A6C\u1A6D\u1A6E\u1A6F\u1A70\u1A71"+
-            "\u1A72\u1A73\u1A74\u1A75\u1A76\u1A77\u1A78\u1A79"+
-            "\u1A7A\u1A7B\u1A7C\u1A7D\u1A7E\u1A7F\u1A80\u1A81"+
-            "\u1A82\u1A83\u1A84\u1A85\u1A86\u1A87\u1A88\u1A89"+
-            "\u1A8A\u1A8B\u1A8C\u1A8D\u1A8E\u1A8F\u1A90\u1A91"+
-            "\u1A92\u1A93\u1A94\u1A95\u1A96\u1A97\u1A98\u1A99"+
-            "\u1A9A\u1A9B\u1A9C\u1A9D\u1A9E\u1A9F\u1AA0\u1AA1"+
-            "\u1AA2\u1AA3\u1AA4\u1AA5\u1AA6\u1AA7\u1AA8\u1AA9"+
-            "\u1AAA\u1AAB\u1AAC\u1AAD\u1AAE\u1AAF\u1AB0\u1AB1"+
-            "\u1AB2\u1AB3\u1AB4\u1AB5\u1AB6\u1AB7\u1AB8\u1AB9"+
-            "\u1ABA\u1ABB\u1ABC\u1ABD\u1ABE\u1ABF\u1AC0\u1AC1"+
-            "\u1AC2\u1AC3\u1AC4\u1AC5\u1AC6\u1AC7\u1AC8\u1AC9"+
-            "\u1ACA\u1ACB\u1ACC\u1ACD\u1ACE\u1ACF\u1AD0\u1AD1"+
-            "\u1AD2\u1AD3\u1AD4\u1AD5\u1AD6\u1AD7\u1AD8\u1AD9"+
-            "\u1ADA\u1ADB\u1ADC\u1ADD\u1ADE\u1ADF\u1AE0\u1AE1"+
-            "\u1AE2\u1AE3\u1AE4\u1AE5\u1AE6\u1AE7\u1AE8\u1AE9"+
-            "\u1AEA\u1AEB\u1AEC\u1AED\u1AEE\u1AEF\u1AF0\u1AF1"+
-            "\u1AF2\u1AF3\u1AF4\u1AF5\u1AF6\u1AF7\u1AF8\u1AF9"+
-            "\u1AFA\u1AFB\u1AFC\u1AFD\u1AFE\u1AFF\u1B00\u1B01"+
-            "\u1B02\u1B03\u1B04\u1B05\u1B06\u1B07\u1B08\u1B09"+
-            "\u1B0A\u1B0B\u1B0C\u1B0D\u1B0E\u1B0F\u1B10\u1B11"+
-            "\u1B12\u1B13\u1B14\u1B15\u1B16\u1B17\u1B18\u1B19"+
-            "\u1B1A\u1B1B\u1B1C\u1B1D\u1B1E\u1B1F\u1B20\u1B21"+
-            "\u1B22\u1B23\u1B24\u1B25\u1B26\u1B27\u1B28\u1B29"+
-            "\u1B2A\u1B2B\u1B2C\u1B2D\u1B2E\u1B2F\u1B30\u1B31"+
-            "\u1B32\u1B33\u1B34\u1B35\u1B36\u1B37\u1B38\u1B39"+
-            "\u1B3A\u1B3B\u1B3C\u1B3D\u1B3E\u1B3F\u1B40\u1B41"+
-            "\u1B42\u1B43\u1B44\u1B45\u1B46\u1B47\u1B48\u1B49"+
-            "\u1B4A\u1B4B\u1B4C\u1B4D\u1B4E\u1B4F\u1B50\u1B51"+
-            "\u1B52\u1B53\u1B54\u1B55\u1B56\u1B57\u1B58\u1B59"+
-            "\u1B5A\u1B5B\u1B5C\u1B5D\u1B5E\u1B5F\u1B60\u1B61"+
-            "\u1B62\u1B63\u1B64\u1B65\u1B66\u1B67\u1B68\u1B69"+
-            "\u1B6A\u1B6B\u1B6C\u1B6D\u1B6E\u1B6F\u1B70\u1B71"+
-            "\u1B72\u1B73\u1B74\u1B75\u1B76\u1B77\u1B78\u1B79"+
-            "\u1B7A\u1B7B\u1B7C\u1B7D\u1B7E\u1B7F\u1B80\u1B81"+
-            "\u1B82\u1B83\u1B84\u1B85\u1B86\u1B87\u1B88\u1B89"+
-            "\u1B8A\u1B8B\u1B8C\u1B8D\u1B8E\u1B8F\u1B90\u1B91"+
-            "\u1B92\u1B93\u1B94\u1B95\u1B96\u1B97\u1B98\u1B99"+
-            "\u1B9A\u1B9B\u1B9C\u1B9D\u1B9E\u1B9F\u1BA0\u1BA1"+
-            "\u1BA2\u1BA3\u1BA4\u1BA5\u1BA6\u1BA7\u1BA8\u1BA9"+
-            "\u1BAA\u1BAB\u1BAC\u1BAD\u1BAE\u1BAF\u1BB0\u1BB1"+
-            "\u1BB2\u1BB3\u1BB4\u1BB5\u1BB6\u1BB7\u1BB8\u1BB9"+
-            "\u1BBA\u1BBB\u1BBC\u1BBD\u1BBE\u1BBF\u1BC0\u1BC1"+
-            "\u1BC2\u1BC3\u1BC4\u1BC5\u1BC6\u1BC7\u1BC8\u1BC9"+
-            "\u1BCA\u1BCB\u1BCC\u1BCD\u1BCE\u1BCF\u1BD0\u1BD1"+
-            "\u1BD2\u1BD3\u1BD4\u1BD5\u1BD6\u1BD7\u1BD8\u1BD9"+
-            "\u1BDA\u1BDB\u1BDC\u1BDD\u1BDE\u1BDF\u1BE0\u1BE1"+
-            "\u1BE2\u1BE3\u1BE4\u1BE5\u1BE6\u1BE7\u1BE8\u1BE9"+
-            "\u1BEA\u1BEB\u1BEC\u1BED\u1BEE\u1BEF\u1BF0\u1BF1"+
-            "\u1BF2\u1BF3\u1BF4\u1BF5\u1BF6\u1BF7\u1BF8\u1BF9"+
-            "\u1BFA\u1BFB\u1BFC\u1BFD\u1BFE\u1BFF\u1C00\u1C01"+
-            "\u1C02\u1C03\u1C04\u1C05\u1C06\u1C07\u1C08\u1C09"+
-            "\u1C0A\u1C0B\u1C0C\u1C0D\u1C0E\u1C0F\u1C10\u1C11"+
-            "\u1C12\u1C13\u1C14\u1C15\u1C16\u1C17\u1C18\u1C19"+
-            "\u1C1A\u1C1B\u1C1C\u1C1D\u1C1E\u1C1F\u1C20\u1C21"+
-            "\u1C22\u1C23\u1C24\u1C25\u1C26\u1C27\u1C28\u1C29"+
-            "\u1C2A\u1C2B\u1C2C\u1C2D\u1C2E\u1C2F\u1C30\u1C31"+
-            "\u1C32\u1C33\u1C34\u1C35\u1C36\u1C37\u1C38\u1C39"+
-            "\u1C3A\u1C3B\u1C3C\u1C3D\u1C3E\u1C3F\u1C40\u1C41"+
-            "\u1C42\u1C43\u1C44\u1C45\u1C46\u1C47\u1C48\u1C49"+
-            "\u1C4A\u1C4B\u1C4C\u1C4D\u1C4E\u1C4F\u1C50\u1C51"+
-            "\u1C52\u1C53\u1C54\u1C55\u1C56\u1C57\u1C58\u1C59"+
-            "\u1C5A\u1C5B\u1C5C\u1C5D\u1C5E\u1C5F\u1C60\u1C61"+
-            "\u1C62\u1C63\u1C64\u1C65\u1C66\u1C67\u1C68\u1C69"+
-            "\u1C6A\u1C6B\u1C6C\u1C6D\u1C6E\u1C6F\u1C70\u1C71"+
-            "\u1C72\u1C73\u1C74\u1C75\u1C76\u1C77\u1C78\u1C79"+
-            "\u1C7A\u1C7B\u1C7C\u1C7D\u1C7E\u1C7F\u1C80\u1C81"+
-            "\u1C82\u1C83\u1C84\u1C85\u1C86\u1C87\u1C88\u1C89"+
-            "\u1C8A\u1C8B\u1C8C\u1C8D\u1C8E\u1C8F\u1C90\u1C91"+
-            "\u1C92\u1C93\u1C94\u1C95\u1C96\u1C97\u1C98\u1C99"+
-            "\u1C9A\u1C9B\u1C9C\u1C9D\u1C9E\u1C9F\u1CA0\u1CA1"+
-            "\u1CA2\u1CA3\u1CA4\u1CA5\u1CA6\u1CA7\u1CA8\u1CA9"+
-            "\u1CAA\u1CAB\u1CAC\u1CAD\u1CAE\u1CAF\u1CB0\u1CB1"+
-            "\u1CB2\u1CB3\u1CB4\u1CB5\u1CB6\u1CB7\u1CB8\u1CB9"+
-            "\u1CBA\u1CBB\u1CBC\u1CBD\u1CBE\u1CBF\u1CC0\u1CC1"+
-            "\u1CC2\u1CC3\u1CC4\u1CC5\u1CC6\u1CC7\u1CC8\u1CC9"+
-            "\u1CCA\u1CCB\u1CCC\u1CCD\u1CCE\u1CCF\u1CD0\u1CD1"+
-            "\u1CD2\u1CD3\u1CD4\u1CD5\u1CD6\u1CD7\u1CD8\u1CD9"+
-            "\u1CDA\u1CDB\u1CDC\u1CDD\u1CDE\u1CDF\u1CE0\u1CE1"+
-            "\u1CE2\u1CE3\u1CE4\u1CE5\u1CE6\u1CE7\u1CE8\u1CE9"+
-            "\u1CEA\u1CEB\u1CEC\u1CED\u1CEE\u1CEF\u1CF0\u1CF1"+
-            "\u1CF2\u1CF3\u1CF4\u1CF5\u1CF6\u1CF7\u1CF8\u1CF9"+
-            "\u1CFA\u1CFB\u1CFC\u1CFD\u1CFE\u1CFF\u1D00\u1D01"+
-            "\u1D02\u1D03\u1D04\u1D05\u1D06\u1D07\u1D08\u1D09"+
-            "\u1D0A\u1D0B\u1D0C\u1D0D\u1D0E\u1D0F\u1D10\u1D11"+
-            "\u1D12\u1D13\u1D14\u1D15\u1D16\u1D17\u1D18\u1D19"+
-            "\u1D1A\u1D1B\u1D1C\u1D1D\u1D1E\u1D1F\u1D20\u1D21"+
-            "\u1D22\u1D23\u1D24\u1D25\u1D26\u1D27\u1D28\u1D29"+
-            "\u1D2A\u1D2B\u1D2C\u1D2D\u1D2E\u1D2F\u1D30\u1D31"+
-            "\u1D32\u1D33\u1D34\u1D35\u1D36\u1D37\u1D38\u1D39"+
-            "\u1D3A\u1D3B\u1D3C\u1D3D\u1D3E\u1D3F\u1D40\u1D41"+
-            "\u1D42\u1D43\u1D44\u1D45\u1D46\u1D47\u1D48\u1D49"+
-            "\u1D4A\u1D4B\u1D4C\u1D4D\u1D4E\u1D4F\u1D50\u1D51"+
-            "\u1D52\u1D53\u1D54\u1D55\u1D56\u1D57\u1D58\u1D59"+
-            "\u1D5A\u1D5B\u1D5C\u1D5D\u1D5E\u1D5F\u1D60\u1D61"+
-            "\u1D62\u1D63\u1D64\u1D65\u1D66\u1D67\u1D68\u1D69"+
-            "\u1D6A\u1D6B\u1D6C\u1D6D\u1D6E\u1D6F\u1D70\u1D71"+
-            "\u1D72\u1D73\u1D74\u1D75\u1D76\u1D77\u1D78\u1D79"+
-            "\u1D7A\u1D7B\u1D7C\u1D7D\u1D7E\u1D7F\u1D80\u1D81"+
-            "\u1D82\u1D83\u1D84\u1D85\u1D86\u1D87\u1D88\u1D89"+
-            "\u1D8A\u1D8B\u1D8C\u1D8D\u1D8E\u1D8F\u1D90\u1D91"+
-            "\u1D92\u1D93\u1D94\u1D95\u1D96\u1D97\u1D98\u1D99"+
-            "\u1D9A\u1D9B\u1D9C\u1D9D\u1D9E\u1D9F\u1DA0\u1DA1"+
-            "\u1DA2\u1DA3\u1DA4\u1DA5\u1DA6\u1DA7\u1DA8\u1DA9"+
-            "\u1DAA\u1DAB\u1DAC\u1DAD\u1DAE\u1DAF\u1DB0\u1DB1"+
-            "\u1DB2\u1DB3\u1DB4\u1DB5\u1DB6\u1DB7\u1DB8\u1DB9"+
-            "\u1DBA\u1DBB\u1DBC\u1DBD\u1DBE\u1DBF\u1DC0\u1DC1"+
-            "\u1DC2\u1DC3\u1DC4\u1DC5\u1DC6\u1DC7\u1DC8\u1DC9"+
-            "\u1DCA\u1DCB\u1DCC\u1DCD\u1DCE\u1DCF\u1DD0\u1DD1"+
-            "\u1DD2\u1DD3\u1DD4\u1DD5\u1DD6\u1DD7\u1DD8\u1DD9"+
-            "\u1DDA\u1DDB\u1DDC\u1DDD\u1DDE\u1DDF\u1DE0\u1DE1";
-
-        private final static String innerIndex2=
-            "\u1DE2\u1DE3\u1DE4\u1DE5\u1DE6\u1DE7\u1DE8\u1DE9"+
-            "\u1DEA\u1DEB\u1DEC\u1DED\u1DEE\u1DEF\u1DF0\u1DF1"+
-            "\u1DF2\u1DF3\u1DF4\u1DF5\u1DF6\u1DF7\u1DF8\u1DF9"+
-            "\u1DFA\u1DFB\u1DFC\u1DFD\u1DFE\u1DFF\u1E00\u1E01"+
-            "\u1E02\u1E03\u1E04\u1E05\u1E06\u1E07\u1E08\u1E09"+
-            "\u1E0A\u1E0B\u1E0C\u1E0D\u1E0E\u1E0F\u1E10\u1E11"+
-            "\u1E12\u1E13\u1E14\u1E15\u1E16\u1E17\u1E18\u1E19"+
-            "\u1E1A\u1E1B\u1E1C\u1E1D\u1E1E\u1E1F\u1E20\u1E21"+
-            "\u1E22\u1E23\u1E24\u1E25\u1E26\u1E27\u1E28\u1E29"+
-            "\u1E2A\u1E2B\u1E2C\u1E2D\u1E2E\u1E2F\u1E30\u1E31"+
-            "\u1E32\u1E33\u1E34\u1E35\u1E36\u1E37\u1E38\u1E39"+
-            "\u1E3A\u1E3B\u1E3C\u1E3D\u1E3E\u1E3F\u1E40\u1E41"+
-            "\u1E42\u1E43\u1E44\u1E45\u1E46\u1E47\u1E48\u1E49"+
-            "\u1E4A\u1E4B\u1E4C\u1E4D\u1E4E\u1E4F\u1E50\u1E51"+
-            "\u1E52\u1E53\u1E54\u1E55\u1E56\u1E57\u1E58\u1E59"+
-            "\u1E5A\u1E5B\u1E5C\u1E5D\u1E5E\u1E5F\u1E60\u1E61"+
-            "\u1E62\u1E63\u1E64\u1E65\u1E66\u1E67\u1E68\u1E69"+
-            "\u1E6A\u1E6B\u1E6C\u1E6D\u1E6E\u1E6F\u1E70\u1E71"+
-            "\u1E72\u1E73\u1E74\u1E75\u1E76\u1E77\u1E78\u1E79"+
-            "\u1E7A\u1E7B\u1E7C\u1E7D\u1E7E\u1E7F\u1E80\u1E81"+
-            "\u1E82\u1E83\u1E84\u1E85\u1E86\u1E87\u1E88\u1E89"+
-            "\u1E8A\u1E8B\u1E8C\u1E8D\u1E8E\u1E8F\u1E90\u1E91"+
-            "\u1E92\u1E93\u1E94\u1E95\u1E96\u1E97\u1E98\u1E99"+
-            "\u1E9A\u1E9B\u1E9C\u1E9D\u1E9E\u1E9F\u1EA0\u1EA1"+
-            "\u1EA2\u1EA3\u1EA4\u1EA5\u1EA6\u1EA7\u1EA8\u1EA9"+
-            "\u1EAA\u1EAB\u1EAC\u1EAD\u1EAE\u1EAF\u1EB0\u1EB1"+
-            "\u1EB2\u1EB3\u1EB4\u1EB5\u1EB6\u1EB7\u1EB8\u1EB9"+
-            "\u1EBA\u1EBB\u1EBC\u1EBD\u1EBE\u1EBF\u1EC0\u1EC1"+
-            "\u1EC2\u1EC3\u1EC4\u1EC5\u1EC6\u1EC7\u1EC8\u1EC9"+
-            "\u1ECA\u1ECB\u1ECC\u1ECD\u1ECE\u1ECF\u1ED0\u1ED1"+
-            "\u1ED2\u1ED3\u1ED4\u1ED5\u1ED6\u1ED7\u1ED8\u1ED9"+
-            "\u1EDA\u1EDB\u1EDC\u1EDD\u1EDE\u1EDF\u1EE0\u1EE1"+
-            "\u1EE2\u1EE3\u1EE4\u1EE5\u1EE6\u1EE7\u1EE8\u1EE9"+
-            "\u1EEA\u1EEB\u1EEC\u1EED\u1EEE\u1EEF\u1EF0\u1EF1"+
-            "\u0000\u1EF2\u1EF3\u0000\u0000\u0000\u0000\u1EF4"+
-            "\u0000\u0000\u1EF5\u1EF6\u0000\u0000\u1EF7\u1EF8"+
-            "\u1EF9\u1EFA\u1EFB\u1EFC\u1EFD\u0000\u0000\u1EFE"+
-            "\u1EFF\u1F00\u1F01\u1F02\u1F03\u1F04\u1F05\u1F06"+
-            "\u0000\u1F07\u0000\u0000\u1F08\u0000\u1F09\u1F0A"+
-            "\u1F0B\u1F0C\u1F0D\u0000\u1F0E\u1F0F\u1F10\u1F11"+
-            "\u1F12\u1F13\u1F14\u1F15\u1F16\u1F17\u1F18\u1F19"+
-            "\u1F1A\u1F1B\u1F1C\u1F1D\u1F1E\u1F1F\u1F20\u1F21"+
-            "\u1F22\u1F23\u1F24\u1F25\u1F26\u1F27\u1F28\u1F29"+
-            "\u1F2A\u1F2B\u1F2C\u1F2D\u1F2E\u1F2F\u1F30\u1F31"+
-            "\u1F32\u1F33\u1F34\u1F35\u1F36\u1F37\u1F38\u1F39"+
-            "\u1F3A\u1F3B\u1F3C\u1F3D\u1F3E\u1F3F\u1F40\u1F41"+
-            "\u1F42\u1F43\u1F44\u1F45\u1F46\u1F47\u1F48\u1F49"+
-            "\u1F4A\u1F4B\u1F4C\u1F4D\u1F4E\u1F4F\u1F50\u1F51"+
-            "\u1F52\u1F53\u1F54\u1F55\u1F56\u1F57\u1F58\u1F59"+
-            "\u1F5A\u1F5B\u1F5C\u1F5D\u1F5E\u1F5F\u1F60\u1F61"+
-            "\u1F62\u1F63\u1F64\u1F65\u1F66\u1F67\u1F68\u1F69"+
-            "\u1F6A\u1F6B\u1F6C\u1F6D\u1F6E\u1F6F\u1F70\u1F71"+
-            "\u1F72\u1F73\u1F74\u1F75\u1F76\u1F77\u1F78\u1F79"+
-            "\u1F7A\u1F7B\u1F7C\u1F7D\u0000\u1F7E\u1F7F\u1F80"+
-            "\u1F81\u1F82\u1F83\u1F84\u1F85\u1F86\u1F87\u1F88"+
-            "\u1F89\u1F8A\u1F8B\u1F8C\u1F8D\u1F8E\u1F8F\u1F90"+
-            "\u1F91\u1F92\u1F93\u1F94\u1F95\u1F96\u1F97\u1F98"+
-            "\u1F99\u1F9A\u1F9B\u1F9C\u1F9D\u1F9E\u1F9F\u1FA0"+
-            "\u1FA1\u1FA2\u1FA3\u1FA4\u1FA5\u1FA6\u1FA7\u1FA8"+
-            "\u1FA9\u1FAA\u1FAB\u1FAC\u1FAD\u1FAE\u1FAF\u1FB0"+
-            "\u1FB1\u1FB2\u1FB3\u1FB4\u1FB5\u1FB6\u1FB7\u1FB8"+
-            "\u1FB9\u1FBA\u1FBB\u1FBC\u1FBD\u1FBE\u1FBF\u1FC0"+
-            "\u1FC1\u1FC2\u1FC3\u1FC4\u1FC5\u1FC6\u1FC7\u1FC8"+
-            "\u1FC9\u1FCA\u1FCB\u1FCC\u1FCD\u1FCE\u1FCF\u1FD0"+
-            "\u1FD1\u1FD2\u1FD3\u0000\u1FD4\u0000\u1FD5\u1FD6"+
-            "\u1FD7\u0000\u1FD8\u1FD9\u1FDA\u1FDB\u1FDC\u1FDD"+
-            "\u1FDE\u1FDF\u1FE0\u1FE1\u1FE2\u1FE3\u0000\u1FE4"+
-            "\u1FE5\u1FE6\u1FE7\u1FE8\u1FE9\u1FEA\u1FEB\u1FEC"+
-            "\u1FED\u0000\u1FEE\u1FEF\u1FF0\u1FF1\u1FF2\u1FF3"+
-            "\u1FF4\u1FF5\u1FF6\u1FF7\u1FF8\u1FF9\u1FFA\u1FFB"+
-            "\u1FFC\u1FFD\u1FFE\u1FFF\u2000\u2001\u2002\u2003"+
-            "\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u200B"+
-            "\u200C\u200D\u200E\u200F\u2010\u2011\u2012\u2013"+
-            "\u2014\u2015\u2016\u2017\u2018\u2019\u201A\u201B"+
-            "\u201C\u201D\u201E\u201F\u2020\u2021\u2022\u2023"+
-            "\u2024\u2025\u2026\u2027\u2028\u2029\u202A\u202B"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u202C\u202D\u202E\u202F"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u2030\u2031\u2032\u2033\u2034\u2035"+
-            "\u2036\u2037\u2038\u2039\u203A\u203B\u203C\u203D"+
-            "\u203E\u203F\u2040\u2041\u2042\u2043\u2044\u2045"+
-            "\u0000\u0000\u0000\u0000\u2046\u2047\u0000\u0000"+
-            "\u0000\u0000\u2048\u2049\u204A\u204B\u204C\u204D"+
-            "\u204E\u204F\u2050\u2051\u2052\u2053\u2054\u2055"+
-            "\u2056\u2057\u2058\u2059\u205A\u205B\u205C\u205D"+
-            "\u205E\u205F\u2060\u2061\u2062\u2063\u2064\u2065"+
-            "\u2066\u2067\u2068\u2069\u206A\u206B\u206C\u206D"+
-            "\u206E\u206F\u2070\u2071\u2072\u2073\u2074\u2075"+
-            "\u2076\u2077\u2078\u2079\u207A\u207B\u207C\u207D"+
-            "\u207E\u207F\u2080\u2081\u2082\u2083\u2084\u2085"+
-            "\u2086\u2087\u2088\u2089\u208A\u208B\u208C\u208D"+
-            "\u208E\u208F\u2090\u2091\u2092\u2093\u2094\u2095"+
-            "\u2096\u2097\u2098\u2099\u209A\u209B\u209C\u209D"+
-            "\u209E\u209F\u20A0\u20A1\u20A2\u20A3\u20A4\u20A5"+
-            "\u20A6\u20A7\u20A8\u20A9\u20AA\u20AB\u20AC\u20AD"+
-            "\u20AE\u20AF\u20B0\u20B1\u20B2\u20B3\u20B4\u20B5"+
-            "\u0000\u20B6\u20B7\u20B8\u20B9\u20BA\u20BB\u0000"+
-            "\u20BC\u0000\u20BD\u20BE\u20BF\u0000\u20C0\u20C1"+
-            "\u20C2\u20C3\u0000\u20C4\u20C5\u0000\u0000\u0000"+
-            "\u0000\u20C6\u20C7\u0000\u20C8\u0000\u20C9\u0000"+
-            "\u0000\u0000\u0000\u0000\u20CA\u20CB\u0000\u20CC"+
-            "\u20CD\u20CE\u20CF\u20D0\u0000\u0000\u0000\u0000"+
-            "\u20D1\u20D2\u20D3\u20D4\u20D5\u0000\u20D6\u20D7"+
-            "\u20D8\u20D9\u20DA\u20DB\u20DC\u20DD\u20DE\u20DF"+
-            "\u0000\u20E0\u20E1\u20E2\u0000\u20E3\u20E4\u20E5"+
-            "\u20E6\u20E7\u0000\u20E8\u20E9\u20EA\u20EB\u20EC"+
-            "\u20ED\u20EE\u20EF\u20F0\u20F1\u20F2\u20F3\u20F4"+
-            "\u0000\u0000\u20F5\u20F6\u0000\u0000\u0000\u0000"+
-            "\u20F7\u20F8\u20F9\u20FA\u20FB\u20FC\u0000\u0000"+
-            "\u20FD\u20FE\u20FF\u2100\u2101\u2102\u2103\u2104"+
-            "\u2105\u2106\u2107\u2108\u2109\u210A\u210B\u210C"+
-            "\u210D\u210E\u210F\u2110\u2111\u2112\u2113\u2114"+
-            "\u2115\u2116\u2117\u2118\u2119\u211A\u211B\u211C"+
-            "\u211D\u211E\u211F\u2120\u2121\u0000\u2122\u2123"+
-            "\u2124\u0000\u2125\u2126\u2127\u2128\u2129\u212A"+
-            "\u212B\u212C\u212D\u212E\u212F\u0000\u2130\u2131"+
-            "\u2132\u2133\u2134\u2135\u2136\u2137\u2138\u2139"+
-            "\u213A\u213B\u213C\u213D\u213E\u213F\u2140\u2141"+
-            "\u2142\u2143\u2144\u2145\u2146\u2147\u2148\u0000"+
-            "\u2149\u214A\u214B\u214C\u214D\u214E\u214F\u2150"+
-            "\u2151\u2152\u2153\u2154\u2155\u2156\u2157\u2158"+
-            "\u2159\u215A\u215B\u215C\u215D\u215E\u215F\u2160"+
-            "\u2161\u2162\u2163\u2164\u2165\u2166\u2167\u2168"+
-            "\u2169\u216A\u216B\u216C\u216D\u216E\u216F\u2170"+
-            "\u2171\u2172\u2173\u2174\u2175\u2176\u2177\u2178"+
-            "\u2179\u217A\u217B\u217C\u217D\u217E\u217F\u2180"+
-            "\u2181\u2182\u2183\u2184\u2185\u2186\u2187\u2188"+
-            "\u2189\u218A\u218B\u218C\u218D\u218E\u218F\u2190"+
-            "\u2191\u2192\u2193\u2194\u2195\u2196\u2197\u2198"+
-            "\u2199\u219A\u0000\u219B\u219C\u219D\u219E\u219F"+
-            "\u21A0\u21A1\u21A2\u21A3\u21A4\u21A5\u21A6\u21A7"+
-            "\u21A8\u21A9\u21AA\u21AB\u21AC\u21AD\u21AE\u21AF"+
-            "\u21B0\u21B1\u21B2\u21B3\u21B4\u21B5\u21B6\u21B7"+
-            "\u21B8\u21B9\u21BA\u21BB\u21BC\u21BD\u21BE\u21BF"+
-            "\u21C0\u21C1\u21C2\u21C3\u21C4\u21C5\u21C6\u21C7"+
-            "\u21C8\u21C9\u21CA\u21CB\u21CC\u21CD\u21CE\u21CF"+
-            "\u21D0\u21D1\u21D2\u21D3\u21D4\u21D5\u21D6\u21D7"+
-            "\u21D8\u21D9\u21DA\u21DB\u21DC\u21DD\u21DE\u21DF"+
-            "\u21E0\u21E1\u21E2\u21E3\u21E4\u21E5\u21E6\u21E7"+
-            "\u21E8\u21E9\u21EA\u21EB\u21EC\u21ED\u21EE\u21EF"+
-            "\u21F0\u21F1\u21F2\u21F3\u21F4\u21F5\u21F6\u21F7"+
-            "\u21F8\u21F9\u21FA\u21FB\u21FC\u21FD\u21FE\u21FF"+
-            "\u2200\u2201\u2202\u2203\u2204\u2205\u2206\u2207"+
-            "\u2208\u2209\u220A\u220B\u220C\u220D\u220E\u220F"+
-            "\u2210\u2211\u2212\u2213\u2214\u2215\u2216\u2217"+
-            "\u2218\u2219\u221A\u221B\u221C\u221D\u221E\u221F"+
-            "\u2220\u2221\u2222\u2223\u2224\u2225\u2226\u2227"+
-            "\u2228\u2229\u222A\u222B\u222C\u222D\u222E\u222F"+
-            "\u2230\u2231\u2232\u2233\u2234\u2235\u2236\u2237"+
-            "\u2238\u2239\u223A\u223B\u223C\u223D\u223E\u223F"+
-            "\u2240\u2241\u2242\u2243\u2244\u2245\u2246\u2247"+
-            "\u2248\u2249\u224A\u224B\u224C\u224D\u224E\u224F"+
-            "\u2250\u2251\u2252\u2253\u2254\u2255\u2256\u2257"+
-            "\u2258\u2259\u225A\u225B\u225C\u225D\u225E\u225F"+
-            "\u2260\u2261\u2262\u2263\u2264\u2265\u2266\u2267"+
-            "\u2268\u2269\u226A\u226B\u226C\u226D\u226E\u226F"+
-            "\u2270\u2271\u2272\u2273\u2274\u2275\u2276\u2277"+
-            "\u2278\u2279\u227A\u227B\u227C\u227D\u227E\u227F"+
-            "\u2280\u2281\u2282\u2283\u2284\u2285\u2286\u2287"+
-            "\u2288\u2289\u228A\u228B\u228C\u228D\u228E\u228F"+
-            "\u2290\u2291\u2292\u2293\u2294\u2295\u2296\u2297"+
-            "\u2298\u2299\u229A\u229B\u229C\u229D\u229E\u229F"+
-            "\u22A0\u22A1\u22A2\u22A3\u22A4\u22A5\u22A6\u22A7"+
-            "\u22A8\u22A9\u22AA\u22AB\u22AC\u22AD\u22AE\u22AF"+
-            "\u22B0\u22B1\u22B2\u22B3\u22B4\u22B5\u22B6\u22B7"+
-            "\u22B8\u22B9\u22BA\u22BB\u22BC\u22BD\u22BE\u22BF"+
-            "\u22C0\u22C1\u22C2\u22C3\u22C4\u22C5\u22C6\u22C7"+
-            "\u22C8\u22C9\u22CA\u22CB\u22CC\u22CD\u22CE\u22CF"+
-            "\u22D0\u22D1\u22D2\u22D3\u22D4\u22D5\u22D6\u22D7"+
-            "\u22D8\u22D9\u22DA\u22DB\u22DC\u22DD\u22DE\u22DF"+
-            "\u22E0\u22E1\u22E2\u22E3\u22E4\u22E5\u22E6\u22E7"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u22E8\u22E9\u22EA\u22EB\u22EC\u22ED"+
-            "\u22EE\u22EF\u22F0\u22F1\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u22F2\u22F3\u22F4\u22F5"+
-            "\u22F6\u22F7\u22F8\u22F9\u22FA\u22FB\u22FC\u22FD"+
-            "\u22FE\u22FF\u2300\u2301\u2302\u2303\u2304\u2305"+
-            "\u2306\u2307\u2308\u2309\u230A\u230B\u230C\u230D"+
-            "\u230E\u230F\u2310\u2311\u2312\u2313\u2314\u2315"+
-            "\u2316\u2317\u2318\u2319\u231A\u231B\u231C\u231D"+
-            "\u231E\u231F\u2320\u2321\u2322\u2323\u2324\u2325"+
-            "\u2326\u2327\u2328\u2329\u232A\u232B\u232C\u232D"+
-            "\u232E\u232F\u2330\u2331\u2332\u2333\u2334\u2335"+
-            "\u2336\u2337\u2338\u2339\u233A\u233B\u233C\u233D"+
-            "\u233E\u233F\u2340\u2341\u2342\u2343\u2344\u2345"+
-            "\u2346\u2347\u2348\u2349\u234A\u234B\u234C\u234D"+
-            "\u234E\u234F\u2350\u2351\u2352\u2353\u2354\u2355"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u2356\u2357\u2358\u2359"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u235A\u235B\u235C\u235D"+
-            "\u235E\u235F\u2360\u2361\u2362\u2363\u2364\u2365"+
-            "\u2366\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u2367\u2368\u2369\u0000\u0000\u0000\u236A\u236B"+
-            "\u236C\u236D\u236E\u236F\u2370\u2371\u2372\u2373"+
-            "\u0000\u0000\u2374\u2375\u2376\u2377\u2378\u2379"+
-            "\u237A\u237B\u237C\u237D\u237E\u237F\u2380\u2381"+
-            "\u2382\u2383\u0000\u0000\u2384\u2385\u2386\u2387"+
-            "\u2388\u2389\u238A\u238B\u0000\u0000\u238C\u238D"+
-            "\u238E\u238F\u2390\u2391\u2392\u2393\u0000\u0000"+
-            "\u2394\u2395\u2396\u0000\u2397\u2398\u0000\u0000"+
-            "\u2399\u239A\u239B\u239C\u239D\u239E\u239F\u23A0"+
-            "\u23A1\u23A2\u23A3\u23A4\u23A5\u23A6\u23A7\u23A8"+
-            "\u23A9\u23AA\u0000\u0000\u0000\u0000\u23AB\u23AC"+
-            "\u23AD\u23AE\u23AF\u23B0\u23B1\u23B2\u23B3\u23B4"+
-            "\u23B5\u23B6\u23B7\u23B8\u23B9\u23BA\u23BB\u23BC"+
-            "\u23BD\u23BE\u23BF\u23C0\u23C1\u23C2\u23C3\u23C4"+
-            "\u23C5\u23C6\u23C7\u23C8\u23C9\u0000\u0000\u23CA"+
-            "\u23CB\u0000\u23CC\u23CD\u23CE\u23CF\u23D0\u23D1"+
-            "\u23D2\u23D3\u23D4\u23D5\u23D6\u23D7\u23D8\u23D9"+
-            "\u23DA\u23DB\u23DC\u23DD\u23DE\u23DF\u23E0\u23E1"+
-            "\u23E2\u23E3\u23E4\u23E5\u23E6\u23E7\u23E8\u23E9"+
-            "\u23EA\u23EB\u23EC\u23ED\u23EE\u23EF\u23F0\u23F1"+
-            "\u23F2\u23F3\u23F4\u23F5\u23F6\u23F7\u23F8\u23F9"+
-            "\u23FA\u23FB\u23FC\u23FD\u23FE\u23FF\u2400\u2401"+
-            "\u0000\u2402\u0000\u2403\u2404\u2405\u2406\u2407"+
-            "\u2408\u2409\u240A\u240B\u240C\u240D\u240E\u240F"+
-            "\u2410\u2411\u2412\u2413\u2414\u2415\u2416\u2417"+
-            "\u2418\u2419\u241A\u241B\u241C\u241D\u241E\u241F"+
-            "\u2420\u2421\u2422\u2423\u2424\u2425\u2426\u2427"+
-            "\u2428\u2429\u242A\u242B\u242C\u242D\u242E\u242F"+
-            "\u2430\u2431\u2432\u2433\u2434\u2435\u2436\u2437"+
-            "\u2438\u2439\u243A\u243B\u243C\u243D\u243E\u243F"+
-            "\u2440\u2441\u2442\u2443\u2444\u2445\u2446\u2447"+
-            "\u2448\u2449\u244A\u244B\u244C\u244D\u244E\u244F"+
-            "\u2450\u2451\u2452\u2453\u2454\u2455\u2456\u2457"+
-            "\u2458\u2459\u245A\u245B\u245C\u245D\u245E\u245F"+
-            "\u2460\u2461\u2462\u2463\u2464\u2465\u2466\u2467"+
-            "\u2468\u2469\u246A\u246B\u246C\u246D\u246E\u246F"+
-            "\u2470\u2471\u2472\u2473\u2474\u2475\u2476\u2477"+
-            "\u2478\u2479\u247A\u247B\u247C\u247D\u247E\u247F"+
-            "\u2480\u2481\u2482\u2483\u2484\u2485\u2486\u2487"+
-            "\u2488\u2489\u248A\u248B\u248C\u248D\u248E\u248F"+
-            "\u2490\u2491\u2492\u2493\u2494\u2495\u2496\u2497"+
-            "\u2498\u2499\u249A\u249B\u249C\u249D\u249E\u249F"+
-            "\u24A0\u24A1\u24A2\u24A3\u24A4\u24A5\u24A6\u24A7"+
-            "\u24A8\u24A9\u24AA\u24AB\u24AC\u24AD\u24AE\u24AF"+
-            "\u24B0\u24B1\u24B2\u24B3\u24B4\u24B5\u24B6\u24B7"+
-            "\u24B8\u24B9\u24BA\u24BB\u24BC\u24BD\u24BE\u24BF"+
-            "\u24C0\u24C1\u24C2\u24C3\u24C4\u24C5\u24C6\u24C7"+
-            "\u24C8\u24C9\u24CA\u24CB\u24CC\u24CD\u24CE\u24CF"+
-            "\u24D0\u24D1\u24D2\u24D3\u24D4\u24D5\u24D6\u24D7"+
-            "\u24D8\u24D9\u24DA\u24DB\u24DC\u24DD\u24DE\u24DF"+
-            "\u24E0\u24E1\u24E2\u24E3\u24E4\u24E5\u24E6\u24E7"+
-            "\u24E8\u24E9\u24EA\u24EB\u24EC\u24ED\u24EE\u24EF"+
-            "\u24F0\u24F1\u24F2\u24F3\u24F4\u24F5\u24F6\u24F7"+
-            "\u24F8\u24F9\u24FA\u24FB\u24FC\u24FD\u24FE\u24FF"+
-            "\u2500\u2501\u2502\u2503\u2504\u2505\u2506\u2507"+
-            "\u2508\u2509\u250A\u250B\u250C\u250D\u250E\u250F"+
-            "\u2510\u2511\u2512\u2513\u2514\u2515\u2516\u2517"+
-            "\u2518\u2519\u251A\u251B\u251C\u251D\u251E\u251F"+
-            "\u2520\u2521\u2522\u2523\u2524\u2525\u2526\u2527"+
-            "\u2528\u2529\u252A\u252B\u252C\u252D\u252E\u252F"+
-            "\u2530\u2531\u2532\u2533\u2534\u2535\u2536\u2537"+
-            "\u2538\u2539\u253A\u253B\u253C\u253D\u253E\u253F"+
-            "\u2540\u2541\u2542\u2543\u2544\u2545\u2546\u2547"+
-            "\u2548\u2549\u254A\u254B\u254C\u254D\u254E\u254F"+
-            "\u2550\u2551\u2552\u2553\u2554\u2555\u2556\u2557"+
-            "\u2558\u2559\u255A\u255B\u255C\u255D\u255E\u255F"+
-            "\u2560\u2561\u2562\u2563\u2564\u2565\u2566\u2567"+
-            "\u2568\u2569\u256A\u256B\u256C\u256D\u256E\u256F"+
-            "\u2570\u2571\u2572\u2573\u2574\u2575\u2576\u2577"+
-            "\u2578\u2579\u257A\u257B\u257C\u257D\u257E\u257F"+
-            "\u2580\u2581\u2582\u2583\u2584\u2585\u2586\u2587"+
-            "\u2588\u2589\u258A\u258B\u258C\u258D\u258E\u258F"+
-            "\u2590\u2591\u2592\u2593\u2594\u2595\u2596\u2597"+
-            "\u2598\u2599\u259A\u259B\u259C\u259D\u259E\u259F"+
-            "\u25A0\u25A1\u25A2\u25A3\u25A4\u25A5\u25A6\u25A7"+
-            "\u25A8\u25A9\u25AA\u25AB\u25AC\u25AD\u25AE\u25AF"+
-            "\u25B0\u25B1\u25B2\u25B3\u25B4\u25B5\u25B6\u25B7"+
-            "\u25B8\u25B9\u25BA\u25BB\u25BC\u25BD\u25BE\u25BF"+
-            "\u25C0\u25C1\u25C2\u25C3\u25C4\u25C5\u25C6\u25C7"+
-            "\u25C8\u25C9\u25CA\u25CB\u25CC\u25CD\u25CE\u25CF"+
-            "\u25D0\u25D1\u25D2\u25D3\u25D4\u25D5\u25D6\u25D7"+
-            "\u25D8\u25D9\u25DA\u25DB\u25DC\u25DD\u25DE\u25DF"+
-            "\u25E0\u25E1\u25E2\u25E3\u25E4\u25E5\u25E6\u25E7"+
-            "\u25E8\u25E9\u25EA\u25EB\u25EC\u25ED\u25EE\u25EF"+
-            "\u25F0\u25F1\u25F2\u25F3\u25F4\u25F5\u25F6\u25F7"+
-            "\u25F8\u25F9\u25FA\u25FB\u25FC\u25FD\u25FE\u25FF"+
-            "\u2600\u2601\u2602\u2603\u2604\u2605\u2606\u2607"+
-            "\u2608\u2609\u260A\u260B\u260C\u260D\u260E\u260F"+
-            "\u2610\u2611\u2612\u2613\u2614\u2615\u2616\u2617"+
-            "\u2618\u2619\u261A\u261B\u261C\u261D\u261E\u261F"+
-            "\u2620\u2621\u2622\u2623\u2624\u2625\u2626\u2627"+
-            "\u2628\u2629\u262A\u262B\u262C\u262D\u262E\u262F"+
-            "\u2630\u2631\u2632\u2633\u2634\u2635\u2636\u2637"+
-            "\u2638\u2639\u263A\u263B\u263C\u263D\u263E\u263F"+
-            "\u2640\u2641\u2642\u2643\u2644\u2645\u2646\u2647"+
-            "\u2648\u2649\u264A\u264B\u264C\u264D\u264E\u264F"+
-            "\u2650\u2651\u2652\u2653\u2654\u2655\u2656\u2657"+
-            "\u2658\u2659\u265A\u265B\u265C\u265D\u265E\u265F"+
-            "\u2660\u2661\u2662\u2663\u2664\u2665\u2666\u2667"+
-            "\u2668\u2669\u266A\u266B\u266C\u266D\u266E\u266F"+
-            "\u2670\u2671\u2672\u2673\u2674\u2675\u2676\u2677"+
-            "\u2678\u2679\u267A\u267B\u267C\u267D\u267E\u267F"+
-            "\u2680\u2681\u2682\u2683\u2684\u2685\u2686\u2687"+
-            "\u2688\u2689\u268A\u268B\u268C\u268D\u268E\u268F"+
-            "\u2690\u2691\u2692\u2693\u2694\u2695\u2696\u2697"+
-            "\u2698\u2699\u269A\u269B\u269C\u269D\u269E\u269F"+
-            "\u26A0\u26A1\u26A2\u26A3\u26A4\u26A5\u26A6\u26A7"+
-            "\u26A8\u26A9\u26AA\u26AB\u26AC\u26AD\u26AE\u26AF"+
-            "\u26B0\u26B1\u26B2\u26B3\u26B4\u26B5\u26B6\u26B7"+
-            "\u26B8\u26B9\u26BA\u26BB\u26BC\u26BD\u26BE\u26BF"+
-            "\u26C0\u26C1\u26C2\u26C3\u26C4\u26C5\u26C6\u26C7"+
-            "\u26C8\u26C9\u26CA\u26CB\u26CC\u26CD\u26CE\u26CF"+
-            "\u26D0\u26D1\u26D2\u26D3\u26D4\u26D5\u26D6\u26D7"+
-            "\u26D8\u26D9\u26DA\u26DB\u26DC\u26DD\u26DE\u26DF"+
-            "\u26E0\u26E1\u26E2\u26E3\u26E4\u26E5\u26E6\u26E7"+
-            "\u26E8\u26E9\u26EA\u26EB\u26EC\u26ED\u26EE\u26EF"+
-            "\u26F0\u26F1\u26F2\u26F3\u26F4\u26F5\u26F6\u26F7"+
-            "\u26F8\u26F9\u26FA\u26FB\u26FC\u26FD\u26FE\u26FF"+
-            "\u2700\u2701\u2702\u2703\u2704\u2705\u2706\u2707"+
-            "\u2708\u2709\u270A\u270B\u270C\u270D\u270E\u270F"+
-            "\u2710\u2711\u2712\u2713\u2714\u2715\u2716\u2717"+
-            "\u2718\u2719\u271A\u271B\u271C\u271D\u271E\u271F"+
-            "\u2720\u2721\u2722\u2723\u2724\u2725\u2726\u2727"+
-            "\u2728\u2729\u272A\u272B\u272C\u272D\u272E\u272F"+
-            "\u2730\u2731\u2732\u2733\u2734\u2735\u2736\u2737"+
-            "\u2738\u2739\u273A\u273B\u273C\u273D\u273E\u273F"+
-            "\u2740\u2741\u2742\u2743\u2744\u2745\u2746\u2747"+
-            "\u2748\u2749\u274A\u274B\u274C\u274D\u274E\u274F"+
-            "\u2750\u2751\u2752\u2753\u2754\u2755\u2756\u2757"+
-            "\u2758\u2759\u275A\u275B\u275C\u275D\u275E\u275F"+
-            "\u2760\u2761\u2762\u2763\u2764\u2765\u2766\u2767"+
-            "\u2768\u2769\u276A\u276B\u276C\u276D\u276E\u276F"+
-            "\u2770\u2771\u2772\u2773\u2774\u2775\u2776\u2777"+
-            "\u2778\u2779\u277A\u277B\u277C\u277D\u277E\u277F"+
-            "\u2780\u2781\u2782\u2783\u2784\u2785\u2786\u2787"+
-            "\u2788\u2789\u278A\u278B\u278C\u278D\u278E\u278F"+
-            "\u2790\u2791\u2792\u2793\u2794\u2795\u2796\u2797"+
-            "\u2798\u2799\u279A\u279B\u279C\u279D\u279E\u279F"+
-            "\u27A0\u27A1\u27A2\u27A3\u27A4\u27A5\u27A6\u27A7"+
-            "\u27A8\u27A9\u27AA\u27AB\u27AC\u27AD\u27AE\u27AF"+
-            "\u27B0\u27B1\u27B2\u27B3\u27B4\u27B5\u27B6\u27B7"+
-            "\u27B8\u27B9\u27BA\u27BB\u27BC\u27BD\u27BE\u27BF"+
-            "\u27C0\u27C1\u27C2\u27C3\u27C4\u27C5\u27C6\u27C7"+
-            "\u27C8\u27C9\u27CA\u27CB\u27CC\u27CD\u27CE\u27CF"+
-            "\u27D0\u27D1\u27D2\u27D3\u27D4\u27D5\u27D6\u27D7"+
-            "\u27D8\u27D9\u27DA\u27DB\u27DC\u27DD\u27DE\u27DF"+
-            "\u27E0\u27E1\u27E2\u27E3\u27E4\u27E5\u27E6\u27E7"+
-            "\u27E8\u27E9\u27EA\u27EB\u27EC\u27ED\u27EE\u27EF"+
-            "\u27F0\u27F1\u27F2\u27F3\u27F4\u27F5\u27F6\u27F7"+
-            "\u27F8\u27F9\u27FA\u27FB\u27FC\u27FD\u27FE\u27FF"+
-            "\u2800\u2801\u2802\u2803\u2804\u2805\u2806\u2807"+
-            "\u2808\u2809\u280A\u280B\u280C\u280D\u280E\u280F"+
-            "\u2810\u2811\u2812\u2813\u2814\u2815\u2816\u2817"+
-            "\u2818\u2819\u281A\u281B\u281C\u281D\u281E\u281F"+
-            "\u2820\u2821\u2822\u2823\u2824\u2825\u2826\u2827"+
-            "\u2828\u2829\u282A\u282B\u282C\u282D\u282E\u282F"+
-            "\u2830\u2831\u2832\u2833\u2834\u2835\u2836\u2837"+
-            "\u2838\u2839\u283A\u283B\u283C\u283D\u283E\u283F"+
-            "\u2840\u2841\u2842\u2843\u2844\u2845\u2846\u2847"+
-            "\u2848\u2849\u284A\u284B\u284C\u284D\u284E\u284F"+
-            "\u2850\u2851\u2852\u2853\u2854\u2855\u2856\u2857"+
-            "\u2858\u2859\u285A\u285B\u285C\u285D\u285E\u285F"+
-            "\u2860\u2861\u2862\u2863\u2864\u2865\u2866\u2867"+
-            "\u2868\u2869\u286A\u286B\u286C\u286D\u286E\u286F"+
-            "\u2870\u2871\u2872\u2873\u2874\u2875\u2876\u2877"+
-            "\u2878\u2879\u287A\u287B\u287C\u287D\u287E\u287F"+
-            "\u2880\u2881\u2882\u2883\u2884\u2885\u2886\u2887"+
-            "\u2888\u2889\u288A\u288B\u288C\u288D\u288E\u288F"+
-            "\u2890\u2891\u2892\u2893\u2894\u2895\u2896\u2897"+
-            "\u2898\u2899\u289A\u289B\u289C\u289D\u289E\u289F"+
-            "\u28A0\u28A1\u28A2\u28A3\u28A4\u28A5\u28A6\u28A7"+
-            "\u28A8\u28A9\u28AA\u28AB\u28AC\u28AD\u28AE\u28AF"+
-            "\u28B0\u28B1\u28B2\u28B3\u28B4\u28B5\u28B6\u28B7"+
-            "\u28B8\u28B9\u28BA\u28BB\u28BC\u28BD\u28BE\u28BF"+
-            "\u28C0\u28C1\u28C2\u28C3\u28C4\u28C5\u28C6\u28C7"+
-            "\u28C8\u28C9\u28CA\u28CB\u28CC\u28CD\u28CE\u28CF"+
-            "\u28D0\u28D1\u28D2\u28D3\u28D4\u28D5\u28D6\u28D7"+
-            "\u28D8\u28D9\u28DA\u28DB\u28DC\u28DD\u28DE\u28DF"+
-            "\u28E0\u28E1\u28E2\u28E3\u28E4\u28E5\u28E6\u28E7"+
-            "\u28E8\u28E9\u28EA\u28EB\u28EC\u28ED\u28EE\u28EF"+
-            "\u28F0\u28F1\u28F2\u28F3\u28F4\u28F5\u28F6\u28F7"+
-            "\u28F8\u28F9\u28FA\u28FB\u28FC\u28FD\u28FE\u28FF"+
-            "\u2900\u2901\u2902\u2903\u2904\u2905\u2906\u2907"+
-            "\u2908\u2909\u290A\u290B\u290C\u290D\u290E\u290F"+
-            "\u2910\u2911\u2912\u2913\u2914\u2915\u2916\u2917"+
-            "\u2918\u2919\u291A\u291B\u291C\u291D\u291E\u291F"+
-            "\u2920\u2921\u2922\u2923\u2924\u2925\u2926\u2927"+
-            "\u2928\u2929\u292A\u292B\u292C\u292D\u292E\u292F"+
-            "\u2930\u2931\u2932\u2933\u2934\u2935\u2936\u2937"+
-            "\u2938\u2939\u293A\u293B\u293C\u293D\u293E\u293F"+
-            "\u2940\u2941\u2942\u2943\u2944\u2945\u2946\u2947"+
-            "\u2948\u2949\u294A\u294B\u294C\u294D\u294E\u294F"+
-            "\u2950\u2951\u2952\u2953\u2954\u2955\u2956\u2957"+
-            "\u2958\u2959\u295A\u295B\u295C\u295D\u295E\u295F"+
-            "\u2960\u2961\u2962\u2963\u2964\u2965\u2966\u2967"+
-            "\u2968\u2969\u296A\u296B\u296C\u296D\u296E\u296F"+
-            "\u2970\u2971\u2972\u2973\u2974\u2975\u2976\u2977"+
-            "\u2978\u2979\u297A\u297B\u297C\u297D\u297E\u297F"+
-            "\u2980\u2981\u2982\u2983\u2984\u2985\u2986\u2987"+
-            "\u2988\u2989\u298A\u298B\u298C\u298D\u298E\u298F"+
-            "\u2990\u2991\u2992\u2993\u2994\u2995\u2996\u2997"+
-            "\u2998\u2999\u299A\u299B\u299C\u299D\u299E\u299F"+
-            "\u29A0\u29A1\u29A2\u29A3\u29A4\u29A5\u29A6\u29A7"+
-            "\u29A8\u29A9\u29AA\u29AB\u29AC\u29AD\u29AE\u29AF"+
-            "\u29B0\u29B1\u29B2\u29B3\u29B4\u29B5\u29B6\u29B7"+
-            "\u29B8\u29B9\u29BA\u29BB\u29BC\u29BD\u29BE\u29BF"+
-            "\u29C0\u29C1\u29C2\u29C3\u29C4\u29C5\u29C6\u29C7"+
-            "\u29C8\u29C9\u29CA\u29CB\u29CC\u29CD\u29CE\u29CF"+
-            "\u29D0\u29D1\u29D2\u29D3\u29D4\u29D5\u29D6\u29D7"+
-            "\u29D8\u29D9\u29DA\u29DB\u29DC\u29DD\u29DE\u29DF"+
-            "\u29E0\u29E1\u29E2\u29E3\u29E4\u29E5\u29E6\u29E7"+
-            "\u29E8\u29E9\u29EA\u29EB\u29EC\u29ED\u29EE\u29EF"+
-            "\u29F0\u29F1\u29F2\u29F3\u29F4\u29F5\u29F6\u29F7"+
-            "\u29F8\u29F9\u29FA\u29FB\u29FC\u29FD\u29FE\u29FF"+
-            "\u2A00\u2A01\u2A02\u2A03\u2A04\u2A05\u2A06\u2A07"+
-            "\u2A08\u2A09\u2A0A\u2A0B\u2A0C\u2A0D\u2A0E\u2A0F"+
-            "\u2A10\u2A11\u2A12\u2A13\u2A14\u2A15\u2A16\u2A17"+
-            "\u2A18\u2A19\u2A1A\u2A1B\u2A1C\u2A1D\u2A1E\u2A1F"+
-            "\u2A20\u2A21\u2A22\u2A23\u2A24\u2A25\u2A26\u2A27"+
-            "\u2A28\u2A29\u2A2A\u2A2B\u2A2C\u2A2D\u2A2E\u2A2F"+
-            "\u2A30\u2A31\u2A32\u2A33\u2A34\u2A35\u2A36\u2A37"+
-            "\u2A38\u2A39\u2A3A\u2A3B\u2A3C\u2A3D\u2A3E\u2A3F"+
-            "\u2A40\u2A41\u2A42\u2A43\u2A44\u2A45\u2A46\u2A47"+
-            "\u2A48\u2A49\u2A4A\u2A4B\u2A4C\u2A4D\u2A4E\u2A4F"+
-            "\u2A50\u2A51\u2A52\u2A53\u2A54\u2A55\u2A56\u2A57"+
-            "\u2A58\u2A59\u2A5A\u2A5B\u2A5C\u2A5D\u2A5E\u2A5F"+
-            "\u2A60\u2A61\u2A62\u2A63\u2A64\u2A65\u2A66\u2A67"+
-            "\u2A68\u2A69\u2A6A\u2A6B\u2A6C\u2A6D\u2A6E\u2A6F"+
-            "\u2A70\u2A71\u2A72\u2A73\u2A74\u2A75\u2A76\u2A77"+
-            "\u2A78\u2A79\u2A7A\u2A7B\u2A7C\u2A7D\u2A7E\u2A7F"+
-            "\u2A80\u2A81\u2A82\u2A83\u2A84\u2A85\u2A86\u2A87"+
-            "\u2A88\u2A89\u2A8A\u2A8B\u2A8C\u2A8D\u2A8E\u2A8F"+
-            "\u2A90\u2A91\u2A92\u2A93\u2A94\u2A95\u2A96\u2A97"+
-            "\u2A98\u2A99\u2A9A\u2A9B\u2A9C\u2A9D\u2A9E\u2A9F"+
-            "\u2AA0\u2AA1\u2AA2\u2AA3\u2AA4\u2AA5\u2AA6\u2AA7"+
-            "\u2AA8\u2AA9\u2AAA\u2AAB\u2AAC\u2AAD\u2AAE\u2AAF"+
-            "\u2AB0\u2AB1\u2AB2\u2AB3\u2AB4\u2AB5\u2AB6\u2AB7"+
-            "\u2AB8\u2AB9\u2ABA\u2ABB\u2ABC\u2ABD\u2ABE\u2ABF"+
-            "\u2AC0\u2AC1\u2AC2\u2AC3\u2AC4\u2AC5\u2AC6\u2AC7"+
-            "\u2AC8\u2AC9\u2ACA\u2ACB\u2ACC\u2ACD\u2ACE\u2ACF"+
-            "\u2AD0\u2AD1\u2AD2\u2AD3\u2AD4\u2AD5\u2AD6\u2AD7"+
-            "\u2AD8\u2AD9\u2ADA\u2ADB\u2ADC\u2ADD\u2ADE\u2ADF"+
-            "\u2AE0\u2AE1\u2AE2\u2AE3\u2AE4\u2AE5\u2AE6\u2AE7"+
-            "\u2AE8\u2AE9\u2AEA\u2AEB\u2AEC\u2AED\u2AEE\u2AEF"+
-            "\u2AF0\u2AF1\u2AF2\u2AF3\u2AF4\u2AF5\u2AF6\u2AF7"+
-            "\u2AF8\u2AF9\u2AFA\u2AFB\u2AFC\u2AFD\u2AFE\u2AFF"+
-            "\u2B00\u2B01\u2B02\u2B03\u2B04\u2B05\u2B06\u2B07"+
-            "\u2B08\u2B09\u2B0A\u2B0B\u2B0C\u2B0D\u2B0E\u2B0F"+
-            "\u2B10\u2B11\u2B12\u2B13\u2B14\u2B15\u2B16\u2B17"+
-            "\u2B18\u2B19\u2B1A\u2B1B\u2B1C\u2B1D\u2B1E\u2B1F"+
-            "\u2B20\u2B21\u2B22\u2B23\u2B24\u2B25\u2B26\u2B27"+
-            "\u2B28\u2B29\u2B2A\u2B2B\u2B2C\u2B2D\u2B2E\u2B2F"+
-            "\u2B30\u2B31\u2B32\u2B33\u2B34\u2B35\u2B36\u2B37"+
-            "\u2B38\u2B39\u2B3A\u2B3B\u2B3C\u2B3D\u2B3E\u2B3F"+
-            "\u2B40\u2B41\u2B42\u2B43\u2B44\u2B45\u2B46\u2B47"+
-            "\u2B48\u2B49\u2B4A\u2B4B\u2B4C\u2B4D\u2B4E\u2B4F"+
-            "\u2B50\u2B51\u2B52\u2B53\u2B54\u2B55\u2B56\u2B57"+
-            "\u2B58\u2B59\u2B5A\u2B5B\u2B5C\u2B5D\u2B5E\u2B5F"+
-            "\u2B60\u2B61\u2B62\u2B63\u2B64\u2B65\u2B66\u2B67"+
-            "\u2B68\u2B69\u2B6A\u2B6B\u2B6C\u2B6D\u2B6E\u2B6F"+
-            "\u2B70\u2B71\u2B72\u2B73\u2B74\u2B75\u2B76\u2B77"+
-            "\u2B78\u2B79\u2B7A\u2B7B\u2B7C\u2B7D\u2B7E\u2B7F"+
-            "\u2B80\u2B81\u2B82\u2B83\u2B84\u2B85\u2B86\u2B87"+
-            "\u2B88\u2B89\u2B8A\u2B8B\u2B8C\u2B8D\u2B8E\u2B8F"+
-            "\u2B90\u2B91\u2B92\u2B93\u2B94\u2B95\u2B96\u2B97"+
-            "\u2B98\u2B99\u2B9A\u2B9B\u2B9C\u2B9D\u2B9E\u2B9F"+
-            "\u2BA0\u2BA1\u2BA2\u2BA3\u2BA4\u2BA5\u2BA6\u2BA7"+
-            "\u2BA8\u2BA9\u2BAA\u2BAB\u2BAC\u2BAD\u2BAE\u2BAF"+
-            "\u2BB0\u2BB1\u2BB2\u2BB3\u2BB4\u2BB5\u2BB6\u2BB7"+
-            "\u2BB8\u2BB9\u2BBA\u2BBB\u2BBC\u2BBD\u2BBE\u2BBF"+
-            "\u2BC0\u2BC1\u2BC2\u2BC3\u2BC4\u2BC5\u2BC6\u2BC7"+
-            "\u2BC8\u2BC9\u2BCA\u2BCB\u2BCC\u2BCD\u2BCE\u2BCF"+
-            "\u2BD0\u2BD1\u2BD2\u2BD3\u2BD4\u2BD5\u2BD6\u2BD7"+
-            "\u2BD8\u2BD9\u2BDA\u2BDB\u2BDC\u2BDD\u2BDE\u2BDF"+
-            "\u2BE0\u2BE1\u2BE2\u2BE3\u2BE4\u2BE5\u2BE6\u2BE7"+
-            "\u2BE8\u2BE9\u2BEA\u2BEB\u2BEC\u2BED\u2BEE\u2BEF"+
-            "\u2BF0\u2BF1\u2BF2\u2BF3\u2BF4\u2BF5\u2BF6\u2BF7"+
-            "\u2BF8\u2BF9\u2BFA\u2BFB\u2BFC\u2BFD\u2BFE\u2BFF"+
-            "\u2C00\u2C01\u2C02\u2C03\u2C04\u2C05\u2C06\u2C07"+
-            "\u2C08\u2C09\u2C0A\u2C0B\u2C0C\u2C0D\u2C0E\u2C0F"+
-            "\u2C10\u2C11\u2C12\u2C13\u2C14\u2C15\u2C16\u2C17"+
-            "\u2C18\u2C19\u2C1A\u2C1B\u2C1C\u2C1D\u2C1E\u2C1F"+
-            "\u2C20\u2C21\u2C22\u2C23\u2C24\u2C25\u2C26\u2C27"+
-            "\u2C28\u2C29\u2C2A\u2C2B\u2C2C\u2C2D\u2C2E\u2C2F"+
-            "\u2C30\u2C31\u2C32\u2C33\u2C34\u2C35\u2C36\u2C37"+
-            "\u2C38\u2C39\u2C3A\u2C3B\u2C3C\u2C3D\u2C3E\u2C3F"+
-            "\u2C40\u0000\u2C41\u2C42\u0000\u2C43\u2C44\u2C45"+
-            "\u0000\u2C46\u2C47\u0000\u0000\u2C48\u2C49\u2C4A"+
-            "\u2C4B\u2C4C\u2C4D\u2C4E\u2C4F\u2C50\u2C51\u0000"+
-            "\u2C52\u2C53\u2C54\u2C55\u2C56\u2C57\u2C58\u2C59"+
-            "\u2C5A\u2C5B\u2C5C\u2C5D\u2C5E\u2C5F\u2C60\u0000"+
-            "\u2C61\u2C62\u0000\u2C63\u2C64\u2C65\u0000\u2C66"+
-            "\u2C67\u2C68\u2C69\u0000\u2C6A\u2C6B\u0000\u0000"+
-            "\u2C6C\u2C6D\u2C6E\u0000\u2C6F\u2C70\u2C71\u2C72"+
-            "\u2C73\u2C74\u2C75\u2C76\u2C77\u2C78\u2C79\u2C7A"+
-            "\u2C7B\u2C7C\u0000\u2C7D\u2C7E\u2C7F\u2C80\u2C81"+
-            "\u2C82\u2C83\u2C84\u2C85\u2C86\u2C87\u2C88\u2C89"+
-            "\u2C8A\u2C8B\u2C8C\u2C8D\u2C8E\u2C8F\u2C90\u2C91"+
-            "\u2C92\u2C93\u2C94\u2C95\u2C96\u2C97\u2C98\u2C99"+
-            "\u2C9A\u2C9B\u2C9C\u2C9D\u2C9E\u2C9F\u2CA0\u2CA1"+
-            "\u2CA2\u2CA3\u2CA4\u2CA5\u2CA6\u2CA7\u2CA8\u2CA9"+
-            "\u2CAA\u2CAB\u2CAC\u2CAD\u2CAE\u2CAF\u2CB0\u2CB1";
-
-        private final static String innerIndex3=
-            "\u2CB2\u2CB3\u2CB4\u2CB5\u2CB6\u2CB7\u2CB8\u2CB9"+
-            "\u2CBA\u2CBB\u2CBC\u2CBD\u2CBE\u2CBF\u2CC0\u2CC1"+
-            "\u2CC2\u2CC3\u2CC4\u2CC5\u2CC6\u2CC7\u2CC8\u2CC9"+
-            "\u2CCA\u2CCB\u2CCC\u2CCD\u2CCE\u2CCF\u2CD0\u2CD1"+
-            "\u2CD2\u2CD3\u2CD4\u2CD5\u2CD6\u2CD7\u2CD8\u2CD9"+
-            "\u2CDA\u2CDB\u2CDC\u2CDD\u2CDE\u2CDF\u2CE0\u2CE1"+
-            "\u2CE2\u2CE3\u2CE4\u2CE5\u2CE6\u2CE7\u2CE8\u2CE9"+
-            "\u2CEA\u2CEB\u2CEC\u2CED\u2CEE\u2CEF\u2CF0\u2CF1"+
-            "\u2CF2\u2CF3\u2CF4\u2CF5\u2CF6\u2CF7\u2CF8\u2CF9"+
-            "\u2CFA\u2CFB\u2CFC\u2CFD\u2CFE\u2CFF\u2D00\u2D01"+
-            "\u2D02\u2D03\u2D04\u2D05\u2D06\u2D07\u2D08\u2D09"+
-            "\u2D0A\u2D0B\u2D0C\u2D0D\u2D0E\u2D0F\u2D10\u2D11"+
-            "\u2D12\u2D13\u2D14\u2D15\u2D16\u2D17\u2D18\u2D19"+
-            "\u2D1A\u2D1B\u2D1C\u2D1D\u2D1E\u2D1F\u2D20\u2D21"+
-            "\u2D22\u2D23\u2D24\u2D25\u2D26\u2D27\u2D28\u2D29"+
-            "\u2D2A\u2D2B\u2D2C\u2D2D\u2D2E\u2D2F\u2D30\u2D31"+
-            "\u2D32\u2D33\u2D34\u2D35\u2D36\u2D37\u2D38\u2D39"+
-            "\u2D3A\u2D3B\u2D3C\u2D3D\u2D3E\u2D3F\u2D40\u2D41"+
-            "\u2D42\u2D43\u2D44\u2D45\u2D46\u2D47\u2D48\u2D49"+
-            "\u2D4A\u2D4B\u2D4C\u2D4D\u2D4E\u2D4F\u2D50\u2D51"+
-            "\u2D52\u2D53\u2D54\u2D55\u2D56\u2D57\u2D58\u2D59"+
-            "\u2D5A\u2D5B\u2D5C\u2D5D\u2D5E\u2D5F\u2D60\u2D61"+
-            "\u2D62\u2D63\u2D64\u2D65\u2D66\u2D67\u2D68\u2D69"+
-            "\u2D6A\u2D6B\u2D6C\u2D6D\u2D6E\u2D6F\u2D70\u2D71"+
-            "\u2D72\u2D73\u2D74\u2D75\u2D76\u2D77\u2D78\u2D79"+
-            "\u2D7A\u2D7B\u2D7C\u2D7D\u2D7E\u2D7F\u2D80\u2D81"+
-            "\u2D82\u2D83\u2D84\u2D85\u2D86\u2D87\u2D88\u2D89"+
-            "\u2D8A\u2D8B\u2D8C\u2D8D\u2D8E\u2D8F\u2D90\u2D91"+
-            "\u2D92\u2D93\u2D94\u2D95\u2D96\u2D97\u2D98\u2D99"+
-            "\u2D9A\u2D9B\u2D9C\u2D9D\u2D9E\u2D9F\u2DA0\u2DA1"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u2DA2\u2DA3\u2DA4\u2DA5"+
-            "\u0000\u0000\u0000\u0000\u2DA6\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u2DA7\u2DA8\u2DA9\u2DAA\u2DAB\u0000\u0000\u2DAC"+
-            "\u2DAD\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u2DAE\u2DAF\u2DB0\u2DB1\u2DB2\u2DB3"+
-            "\u2DB4\u2DB5\u2DB6\u2DB7\u2DB8\u2DB9\u2DBA\u2DBB"+
-            "\u2DBC\u2DBD\u2DBE\u2DBF\u2DC0\u2DC1\u0000\u2DC2"+
-            "\u2DC3\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u2DC4\u2DC5\u2DC6\u2DC7"+
-            "\u2DC8\u2DC9\u2DCA\u0000\u0000\u0000\u0000\u2DCB"+
-            "\u2DCC\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u2DCD"+
-            "\u2DCE\u2DCF\u2DD0\u2DD1\u0000\u0000\u0000\u2DD2"+
-            "\u2DD3\u2DD4\u2DD5\u2DD6\u2DD7\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u2DD8\u2DD9\u2DDA\u2DDB\u2DDC\u2DDD"+
-            "\u2DDE\u2DDF\u2DE0\u2DE1\u2DE2\u2DE3\u2DE4\u2DE5"+
-            "\u2DE6\u2DE7\u2DE8\u2DE9\u2DEA\u2DEB\u2DEC\u2DED"+
-            "\u2DEE\u2DEF\u2DF0\u2DF1\u2DF2\u2DF3\u2DF4\u2DF5"+
-            "\u2DF6\u2DF7\u2DF8\u2DF9\u2DFA\u2DFB\u2DFC\u2DFD"+
-            "\u2DFE\u2DFF\u2E00\u2E01\u2E02\u2E03\u2E04\u2E05"+
-            "\u2E06\u2E07\u2E08\u2E09\u2E0A\u2E0B\u2E0C\u2E0D"+
-            "\u2E0E\u2E0F\u2E10\u2E11\u2E12\u2E13\u2E14\u2E15"+
-            "\u2E16\u2E17\u2E18\u2E19\u2E1A\u2E1B\u2E1C\u2E1D"+
-            "\u2E1E\u2E1F\u2E20\u2E21\u2E22\u2E23\u2E24\u2E25"+
-            "\u2E26\u2E27\u2E28\u2E29\u2E2A\u2E2B\u2E2C\u2E2D"+
-            "\u2E2E\u2E2F\u2E30\u2E31\u2E32\u2E33\u2E34\u2E35"+
-            "\u2E36\u2E37\u2E38\u2E39\u2E3A\u2E3B\u2E3C\u2E3D"+
-            "\u2E3E\u2E3F\u2E40\u2E41\u2E42\u2E43\u2E44\u2E45"+
-            "\u2E46\u2E47\u2E48\u2E49\u2E4A\u2E4B\u2E4C\u2E4D"+
-            "\u2E4E\u2E4F\u2E50\u2E51\u2E52\u2E53\u2E54\u2E55"+
-            "\u2E56\u2E57\u2E58\u2E59\u2E5A\u2E5B\u2E5C\u2E5D"+
-            "\u2E5E\u2E5F\u2E60\u2E61\u2E62\u2E63\u2E64\u2E65"+
-            "\u2E66\u2E67\u2E68\u2E69\u2E6A\u2E6B\u2E6C\u2E6D"+
-            "\u2E6E\u2E6F\u2E70\u2E71\u2E72\u2E73\u2E74\u2E75"+
-            "\u2E76\u2E77\u2E78\u2E79\u2E7A\u2E7B\u2E7C\u2E7D"+
-            "\u2E7E\u2E7F\u2E80\u2E81\u2E82\u2E83\u2E84\u2E85"+
-            "\u2E86\u2E87\u2E88\u2E89\u2E8A\u2E8B\u2E8C\u2E8D"+
-            "\u2E8E\u2E8F\u2E90\u2E91\u2E92\u2E93\u2E94\u2E95"+
-            "\u2E96\u2E97\u2E98\u2E99\u2E9A\u2E9B\u2E9C\u2E9D"+
-            "\u2E9E\u2E9F\u2EA0\u2EA1\u2EA2\u2EA3\u2EA4\u2EA5"+
-            "\u2EA6\u2EA7\u2EA8\u2EA9\u2EAA\u2EAB\u2EAC\u2EAD"+
-            "\u2EAE\u2EAF\u2EB0\u2EB1\u2EB2\u2EB3\u2EB4\u2EB5"+
-            "\u2EB6\u2EB7\u2EB8\u2EB9\u2EBA\u2EBB\u2EBC\u2EBD"+
-            "\u2EBE\u2EBF\u2EC0\u2EC1\u2EC2\u2EC3\u2EC4\u2EC5"+
-            "\u2EC6\u2EC7\u2EC8\u2EC9\u2ECA\u2ECB\u2ECC\u2ECD"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u2ECE\u2ECF\u2ED0\u2ED1\u2ED2\u2ED3"+
-            "\u2ED4\u0000\u2ED5\u2ED6\u2ED7\u2ED8\u2ED9\u2EDA"+
-            "\u2EDB\u2EDC\u2EDD\u2EDE\u2EDF\u2EE0\u2EE1\u2EE2"+
-            "\u2EE3\u2EE4\u2EE5\u2EE6\u2EE7\u2EE8\u2EE9\u2EEA"+
-            "\u2EEB\u2EEC\u2EED\u2EEE\u2EEF\u2EF0\u2EF1\u2EF2"+
-            "\u2EF3\u2EF4\u2EF5\u2EF6\u2EF7\u2EF8\u2EF9\u2EFA"+
-            "\u2EFB\u2EFC\u2EFD\u2EFE\u2EFF\u2F00\u2F01\u2F02"+
-            "\u2F03\u2F04\u2F05\u2F06\u2F07\u2F08\u2F09\u2F0A"+
-            "\u2F0B\u2F0C\u2F0D\u2F0E\u2F0F\u2F10\u2F11\u2F12"+
-            "\u2F13\u2F14\u2F15\u2F16\u2F17\u2F18\u2F19\u2F1A"+
-            "\u2F1B\u2F1C\u2F1D\u2F1E\u2F1F\u2F20\u2F21\u2F22"+
-            "\u2F23\u2F24\u2F25\u2F26\u2F27\u2F28\u2F29\u2F2A"+
-            "\u2F2B\u2F2C\u2F2D\u2F2E\u2F2F\u2F30\u2F31\u2F32"+
-            "\u2F33\u2F34\u2F35\u2F36\u2F37\u2F38\u2F39\u2F3A"+
-            "\u2F3B\u2F3C\u2F3D\u2F3E\u2F3F\u2F40\u2F41\u2F42"+
-            "\u2F43\u2F44\u2F45\u0000\u2F46\u2F47\u2F48\u2F49"+
-            "\u2F4A\u2F4B\u2F4C\u2F4D\u2F4E\u2F4F\u2F50\u2F51"+
-            "\u2F52\u2F53\u2F54\u2F55\u2F56\u2F57\u2F58\u2F59"+
-            "\u2F5A\u2F5B\u2F5C\u2F5D\u2F5E\u2F5F\u2F60\u2F61"+
-            "\u2F62\u2F63\u2F64\u2F65\u2F66\u2F67\u2F68\u2F69"+
-            "\u2F6A\u2F6B\u2F6C\u2F6D\u2F6E\u2F6F\u2F70\u2F71"+
-            "\u2F72\u2F73\u2F74\u2F75\u2F76\u2F77\u2F78\u2F79"+
-            "\u2F7A\u2F7B\u2F7C\u2F7D\u2F7E\u2F7F\u2F80\u2F81"+
-            "\u2F82\u2F83\u2F84\u2F85\u2F86\u2F87\u2F88\u2F89"+
-            "\u2F8A\u2F8B\u2F8C\u2F8D\u2F8E\u2F8F\u2F90\u2F91"+
-            "\u2F92\u2F93\u2F94\u2F95\u2F96\u2F97\u2F98\u2F99"+
-            "\u2F9A\u2F9B\u2F9C\u2F9D\u2F9E\u2F9F\u2FA0\u2FA1"+
-            "\u2FA2\u2FA3\u2FA4\u2FA5\u2FA6\u2FA7\u2FA8\u2FA9"+
-            "\u2FAA\u2FAB\u2FAC\u2FAD\u2FAE\u2FAF\u2FB0\u2FB1"+
-            "\u2FB2\u2FB3\u2FB4\u2FB5\u2FB6\u2FB7\u2FB8\u2FB9"+
-            "\u2FBA\u2FBB\u2FBC\u2FBD\u2FBE\u2FBF\u2FC0\u2FC1"+
-            "\u2FC2\u2FC3\u2FC4\u2FC5\u2FC6\u2FC7\u2FC8\u2FC9"+
-            "\u2FCA\u2FCB\u2FCC\u2FCD\u2FCE\u2FCF\u2FD0\u2FD1"+
-            "\u2FD2\u2FD3\u2FD4\u2FD5\u2FD6\u2FD7\u2FD8\u2FD9"+
-            "\u2FDA\u2FDB\u2FDC\u2FDD\u2FDE\u2FDF\u2FE0\u2FE1"+
-            "\u2FE2\u2FE3\u2FE4\u2FE5\u2FE6\u2FE7\u2FE8\u2FE9"+
-            "\u2FEA\u2FEB\u2FEC\u2FED\u2FEE\u2FEF\u2FF0\u2FF1"+
-            "\u2FF2\u2FF3\u2FF4\u2FF5\u2FF6\u2FF7\u2FF8\u2FF9"+
-            "\u2FFA\u2FFB\u2FFC\u2FFD\u2FFE\u2FFF\u3000\u3001"+
-            "\u3002\u3003\u3004\u3005\u3006\u3007\u3008\u3009"+
-            "\u300A\u300B\u300C\u300D\u300E\u300F\u3010\u3011"+
-            "\u3012\u3013\u3014\u3015\u3016\u3017\u3018\u3019"+
-            "\u301A\u301B\u301C\u301D\u301E\u301F\u3020\u3021"+
-            "\u3022\u3023\u3024\u3025\u3026\u3027\u3028\u3029"+
-            "\u302A\u302B\u302C\u302D\u302E\u302F\u0000\u0000"+
-            "\u3030\u3031\u3032\u3033\u3034\u3035\u3036\u3037"+
-            "\u3038\u3039\u303A\u303B\u0000\u0000\u0000\u303C"+
-            "\u303D\u0000\u303E\u303F\u3040\u3041\u3042\u3043"+
-            "\u3044\u3045\u3046\u3047\u3048\u3049\u304A\u304B"+
-            "\u304C\u304D\u304E\u304F\u3050\u3051\u3052\u3053"+
-            "\u3054\u3055\u3056\u3057\u3058\u3059\u305A\u305B"+
-            "\u305C\u305D\u305E\u305F\u0000\u3060\u3061\u3062"+
-            "\u3063\u3064\u3065\u3066\u3067\u3068\u0000\u3069"+
-            "\u306A\u0000\u0000\u306B\u306C\u0000\u306D\u306E"+
-            "\u306F\u3070\u3071\u3072\u3073\u3074\u3075\u3076"+
-            "\u3077\u3078\u3079\u307A\u307B\u307C\u307D\u307E"+
-            "\u307F\u3080\u3081\u3082\u3083\u3084\u3085\u3086"+
-            "\u3087\u3088\u3089\u308A\u308B\u308C\u308D\u308E"+
-            "\u308F\u3090\u3091\u3092\u3093\u3094\u3095\u3096"+
-            "\u3097\u3098\u3099\u309A\u309B\u309C\u309D\u309E"+
-            "\u309F\u30A0\u30A1\u30A2\u30A3\u30A4\u30A5\u30A6"+
-            "\u30A7\u30A8\u30A9\u30AA\u30AB\u30AC\u30AD\u30AE"+
-            "\u30AF\u30B0\u30B1\u30B2\u30B3\u30B4\u30B5\u30B6"+
-            "\u30B7\u30B8\u30B9\u30BA\u30BB\u30BC\u30BD\u30BE"+
-            "\u30BF\u30C0\u30C1\u30C2\u30C3\u30C4\u30C5\u30C6"+
-            "\u30C7\u30C8\u30C9\u30CA\u30CB\u30CC\u30CD\u30CE"+
-            "\u30CF\u30D0\u30D1\u30D2\u30D3\u30D4\u30D5\u30D6"+
-            "\u30D7\u30D8\u30D9\u30DA\u30DB\u30DC\u30DD\u0000"+
-            "\u30DE\u30DF\u30E0\u30E1\u30E2\u30E3\u30E4\u30E5"+
-            "\u30E6\u30E7\u30E8\u30E9\u30EA\u30EB\u30EC\u30ED"+
-            "\u30EE\u30EF\u30F0\u30F1\u30F2\u30F3\u30F4\u30F5"+
-            "\u30F6\u30F7\u30F8\u30F9\u30FA\u30FB\u30FC\u30FD"+
-            "\u30FE\u30FF\u3100\u3101\u3102\u3103\u3104\u3105"+
-            "\u3106\u3107\u3108\u0000\u3109\u310A\u310B\u310C"+
-            "\u310D\u310E\u310F\u3110\u3111\u3112\u3113\u3114"+
-            "\u3115\u3116\u3117\u3118\u3119\u311A\u311B\u311C"+
-            "\u311D\u311E\u311F\u3120\u3121\u3122\u3123\u3124"+
-            "\u3125\u3126\u3127\u3128\u3129\u312A\u312B\u312C"+
-            "\u312D\u312E\u312F\u3130\u3131\u3132\u3133\u3134"+
-            "\u3135\u3136\u3137\u3138\u3139\u313A\u313B\u313C"+
-            "\u313D\u313E\u313F\u3140\u3141\u3142\u3143\u3144"+
-            "\u3145\u3146\u3147\u3148\u3149\u314A\u314B\u314C"+
-            "\u314D\u314E\u314F\u3150\u3151\u3152\u3153\u3154"+
-            "\u3155\u3156\u3157\u3158\u3159\u315A\u315B\u315C"+
-            "\u315D\u315E\u315F\u3160\u3161\u3162\u3163\u3164"+
-            "\u3165\u3166\u3167\u3168\u3169\u316A\u316B\u316C"+
-            "\u316D\u316E\u316F\u3170\u3171\u3172\u3173\u3174"+
-            "\u3175\u3176\u3177\u3178\u3179\u317A\u317B\u317C"+
-            "\u317D\u317E\u317F\u3180\u3181\u3182\u3183\u3184"+
-            "\u3185\u3186\u3187\u3188\u3189\u318A\u318B\u318C"+
-            "\u318D\u318E\u318F\u3190\u3191\u3192\u3193\u3194"+
-            "\u3195\u3196\u3197\u3198\u3199\u319A\u319B\u319C"+
-            "\u319D\u319E\u319F\u31A0\u31A1\u31A2\u31A3\u31A4"+
-            "\u31A5\u31A6\u31A7\u31A8\u31A9\u31AA\u31AB\u31AC"+
-            "\u31AD\u31AE\u31AF\u31B0\u31B1\u31B2\u31B3\u31B4"+
-            "\u31B5\u31B6\u31B7\u31B8\u31B9\u31BA\u31BB\u31BC"+
-            "\u31BD\u31BE\u31BF\u31C0\u31C1\u31C2\u31C3\u31C4"+
-            "\u31C5\u31C6\u31C7\u31C8\u31C9\u31CA\u31CB\u31CC"+
-            "\u31CD\u31CE\u31CF\u31D0\u31D1\u31D2\u31D3\u31D4"+
-            "\u31D5\u31D6\u31D7\u31D8\u31D9\u31DA\u31DB\u31DC"+
-            "\u31DD\u31DE\u31DF\u31E0\u31E1\u31E2\u31E3\u31E4"+
-            "\u31E5\u31E6\u31E7\u31E8\u31E9\u31EA\u31EB\u31EC"+
-            "\u31ED\u31EE\u31EF\u31F0\u31F1\u31F2\u31F3\u31F4"+
-            "\u31F5\u31F6\u31F7\u31F8\u31F9\u31FA\u31FB\u31FC"+
-            "\u31FD\u31FE\u31FF\u3200\u3201\u3202\u3203\u3204"+
-            "\u3205\u3206\u3207\u3208\u3209\u320A\u320B\u320C"+
-            "\u320D\u320E\u320F\u3210\u3211\u3212\u3213\u3214"+
-            "\u3215\u3216\u3217\u3218\u3219\u321A\u321B\u321C"+
-            "\u321D\u321E\u321F\u3220\u3221\u3222\u3223\u3224"+
-            "\u3225\u3226\u3227\u3228\u3229\u322A\u322B\u322C"+
-            "\u322D\u322E\u322F\u3230\u3231\u3232\u0000\u3233"+
-            "\u3234\u3235\u3236\u3237\u3238\u3239\u323A\u323B"+
-            "\u323C\u323D\u323E\u323F\u3240\u3241\u3242\u3243"+
-            "\u3244\u3245\u3246\u3247\u3248\u3249\u324A\u324B"+
-            "\u324C\u324D\u324E\u324F\u3250\u3251\u3252\u3253"+
-            "\u3254\u3255\u3256\u3257\u3258\u3259\u325A\u325B"+
-            "\u325C\u325D\u325E\u325F\u3260\u3261\u3262\u3263"+
-            "\u3264\u3265\u3266\u3267\u3268\u3269\u326A\u326B"+
-            "\u326C\u326D\u326E\u326F\u3270\u3271\u3272\u3273"+
-            "\u3274\u3275\u3276\u3277\u3278\u3279\u327A\u327B"+
-            "\u327C\u327D\u327E\u327F\u3280\u3281\u3282\u3283"+
-            "\u3284\u3285\u3286\u3287\u3288\u3289\u328A\u328B"+
-            "\u328C\u328D\u328E\u328F\u3290\u3291\u3292\u3293"+
-            "\u3294\u3295\u3296\u3297\u3298\u3299\u329A\u329B"+
-            "\u329C\u329D\u329E\u329F\u32A0\u32A1\u0000\u32A2"+
-            "\u32A3\u32A4\u32A5\u32A6\u32A7\u32A8\u32A9\u32AA"+
-            "\u32AB\u32AC\u0000\u32AD\u32AE\u32AF\u32B0\u32B1"+
-            "\u32B2\u32B3\u32B4\u32B5\u32B6\u32B7\u32B8\u32B9"+
-            "\u32BA\u32BB\u32BC\u32BD\u32BE\u32BF\u32C0\u32C1"+
-            "\u32C2\u32C3\u32C4\u32C5\u32C6\u32C7\u32C8\u32C9"+
-            "\u32CA\u32CB\u32CC\u32CD\u32CE\u32CF\u32D0\u32D1"+
-            "\u32D2\u32D3\u32D4\u32D5\u32D6\u32D7\u32D8\u32D9"+
-            "\u32DA\u32DB\u32DC\u32DD\u32DE\u32DF\u32E0\u32E1"+
-            "\u32E2\u32E3\u32E4\u32E5\u32E6\u32E7\u32E8\u32E9"+
-            "\u32EA\u32EB\u32EC\u32ED\u32EE\u32EF\u32F0\u32F1"+
-            "\u32F2\u32F3\u32F4\u32F5\u32F6\u32F7\u32F8\u32F9"+
-            "\u32FA\u32FB\u32FC\u32FD\u32FE\u32FF\u3300\u3301"+
-            "\u3302\u3303\u3304\u3305\u3306\u3307\u3308\u3309"+
-            "\u330A\u330B\u330C\u330D\u330E\u330F\u3310\u3311"+
-            "\u3312\u3313\u3314\u3315\u3316\u3317\u3318\u3319"+
-            "\u331A\u331B\u331C\u331D\u331E\u331F\u3320\u3321"+
-            "\u3322\u3323\u3324\u3325\u3326\u3327\u3328\u3329"+
-            "\u332A\u332B\u332C\u332D\u332E\u332F\u3330\u3331"+
-            "\u3332\u3333\u3334\u3335\u3336\u3337\u3338\u3339"+
-            "\u333A\u333B\u333C\u333D\u333E\u333F\u3340\u3341"+
-            "\u3342\u3343\u3344\u3345\u3346\u3347\u3348\u3349"+
-            "\u334A\u334B\u334C\u334D\u334E\u334F\u3350\u3351"+
-            "\u3352\u3353\u3354\u3355\u3356\u3357\u3358\u3359"+
-            "\u335A\u335B\u335C\u335D\u335E\u335F\u3360\u3361"+
-            "\u3362\u3363\u3364\u3365\u3366\u3367\u3368\u3369"+
-            "\u336A\u336B\u336C\u336D\u336E\u336F\u3370\u3371"+
-            "\u3372\u3373\u3374\u3375\u3376\u3377\u3378\u3379"+
-            "\u337A\u337B\u337C\u337D\u337E\u337F\u3380\u3381"+
-            "\u3382\u3383\u3384\u3385\u3386\u3387\u3388\u3389"+
-            "\u338A\u338B\u338C\u338D\u338E\u338F\u3390\u3391"+
-            "\u3392\u3393\u3394\u3395\u3396\u3397\u3398\u3399"+
-            "\u339A\u339B\u339C\u339D\u339E\u339F\u33A0\u33A1"+
-            "\u33A2\u33A3\u33A4\u33A5\u33A6\u33A7\u33A8\u33A9"+
-            "\u33AA\u33AB\u33AC\u33AD\u33AE\u33AF\u33B0\u33B1"+
-            "\u33B2\u33B3\u33B4\u33B5\u33B6\u33B7\u33B8\u33B9"+
-            "\u33BA\u33BB\u33BC\u33BD\u33BE\u33BF\u33C0\u33C1"+
-            "\u33C2\u33C3\u33C4\u33C5\u33C6\u33C7\u33C8\u33C9"+
-            "\u33CA\u33CB\u33CC\u33CD\u33CE\u33CF\u33D0\u33D1"+
-            "\u33D2\u33D3\u33D4\u33D5\u33D6\u33D7\u33D8\u33D9"+
-            "\u33DA\u33DB\u33DC\u33DD\u33DE\u33DF\u33E0\u33E1"+
-            "\u33E2\u33E3\u33E4\u33E5\u33E6\u33E7\u33E8\u33E9"+
-            "\u33EA\u33EB\u33EC\u33ED\u33EE\u33EF\u33F0\u33F1"+
-            "\u33F2\u33F3\u33F4\u33F5\u33F6\u33F7\u33F8\u33F9"+
-            "\u33FA\u33FB\u33FC\u33FD\u33FE\u33FF\u3400\u3401"+
-            "\u3402\u3403\u3404\u3405\u3406\u3407\u3408\u3409"+
-            "\u340A\u340B\u340C\u340D\u340E\u340F\u3410\u3411"+
-            "\u3412\u3413\u3414\u3415\u3416\u3417\u3418\u3419"+
-            "\u341A\u341B\u341C\u341D\u341E\u341F\u3420\u3421"+
-            "\u3422\u3423\u3424\u3425\u3426\u3427\u3428\u3429"+
-            "\u342A\u342B\u342C\u342D\u342E\u342F\u3430\u3431"+
-            "\u3432\u3433\u3434\u3435\u3436\u3437\u3438\u3439"+
-            "\u343A\u343B\u343C\u343D\u343E\u343F\u3440\u3441"+
-            "\u3442\u3443\u3444\u3445\u3446\u3447\u3448\u3449"+
-            "\u344A\u344B\u344C\u344D\u344E\u344F\u3450\u3451"+
-            "\u3452\u3453\u3454\u3455\u3456\u3457\u3458\u3459"+
-            "\u345A\u345B\u345C\u345D\u345E\u345F\u3460\u3461"+
-            "\u3462\u3463\u3464\u3465\u3466\u3467\u3468\u3469"+
-            "\u346A\u346B\u346C\u346D\u346E\u346F\u3470\u3471"+
-            "\u3472\u3473\u3474\u3475\u3476\u3477\u3478\u3479"+
-            "\u347A\u347B\u347C\u347D\u347E\u347F\u3480\u3481"+
-            "\u3482\u3483\u3484\u3485\u3486\u3487\u3488\u3489"+
-            "\u348A\u348B\u348C\u348D\u348E\u348F\u3490\u3491"+
-            "\u3492\u3493\u3494\u3495\u3496\u3497\u3498\u3499"+
-            "\u349A\u349B\u349C\u349D\u349E\u349F\u34A0\u34A1"+
-            "\u34A2\u34A3\u34A4\u34A5\u34A6\u34A7\u34A8\u34A9"+
-            "\u34AA\u34AB\u34AC\u34AD\u34AE\u34AF\u34B0\u34B1"+
-            "\u34B2\u34B3\u34B4\u34B5\u34B6\u34B7\u34B8\u34B9"+
-            "\u34BA\u34BB\u34BC\u34BD\u34BE\u34BF\u34C0\u34C1"+
-            "\u34C2\u34C3\u34C4\u34C5\u34C6\u34C7\u34C8\u34C9"+
-            "\u34CA\u34CB\u34CC\u34CD\u34CE\u34CF\u34D0\u34D1"+
-            "\u34D2\u34D3\u34D4\u34D5\u34D6\u34D7\u34D8\u34D9"+
-            "\u34DA\u34DB\u34DC\u34DD\u34DE\u34DF\u34E0\u34E1"+
-            "\u34E2\u34E3\u34E4\u34E5\u34E6\u34E7\u34E8\u34E9"+
-            "\u34EA\u34EB\u34EC\u34ED\u34EE\u34EF\u34F0\u34F1"+
-            "\u34F2\u34F3\u34F4\u34F5\u34F6\u34F7\u34F8\u34F9"+
-            "\u34FA\u34FB\u34FC\u34FD\u34FE\u34FF\u3500\u3501"+
-            "\u3502\u3503\u3504\u3505\u3506\u3507\u3508\u3509"+
-            "\u350A\u350B\u350C\u350D\u350E\u350F\u3510\u3511"+
-            "\u3512\u3513\u3514\u3515\u3516\u3517\u3518\u3519"+
-            "\u351A\u351B\u351C\u351D\u351E\u351F\u3520\u3521"+
-            "\u3522\u3523\u3524\u3525\u3526\u3527\u3528\u3529"+
-            "\u352A\u352B\u352C\u352D\u352E\u352F\u3530\u3531"+
-            "\u3532\u3533\u3534\u3535\u3536\u3537\u3538\u3539"+
-            "\u353A\u353B\u353C\u353D\u353E\u353F\u3540\u3541"+
-            "\u3542\u3543\u3544\u3545\u3546\u3547\u3548\u3549"+
-            "\u354A\u354B\u354C\u354D\u354E\u354F\u3550\u3551"+
-            "\u3552\u3553\u3554\u3555\u3556\u3557\u3558\u3559"+
-            "\u355A\u355B\u355C\u355D\u355E\u355F\u3560\u3561"+
-            "\u3562\u3563\u3564\u3565\u3566\u3567\u3568\u3569"+
-            "\u356A\u356B\u356C\u356D\u356E\u356F\u3570\u3571"+
-            "\u3572\u3573\u3574\u3575\u3576\u3577\u3578\u3579"+
-            "\u357A\u357B\u357C\u357D\u357E\u357F\u3580\u3581"+
-            "\u3582\u3583\u3584\u3585\u3586\u3587\u3588\u3589"+
-            "\u358A\u358B\u358C\u358D\u358E\u358F\u3590\u3591"+
-            "\u3592\u3593\u3594\u3595\u3596\u3597\u3598\u3599"+
-            "\u359A\u359B\u359C\u359D\u359E\u359F\u35A0\u35A1"+
-            "\u35A2\u35A3\u35A4\u35A5\u35A6\u35A7\u35A8\u35A9"+
-            "\u0000\u35AA\u35AB\u35AC\u35AD\u35AE\u35AF\u35B0"+
-            "\u35B1\u35B2\u35B3\u35B4\u35B5\u35B6\u35B7\u35B8"+
-            "\u35B9\u35BA\u35BB\u35BC\u35BD\u35BE\u35BF\u35C0"+
-            "\u35C1\u35C2\u35C3\u35C4\u35C5\u35C6\u35C7\u35C8"+
-            "\u35C9\u35CA\u35CB\u35CC\u35CD\u35CE\u35CF\u35D0"+
-            "\u35D1\u35D2\u35D3\u35D4\u35D5\u35D6\u35D7\u35D8"+
-            "\u35D9\u35DA\u35DB\u35DC\u35DD\u35DE\u35DF\u35E0"+
-            "\u35E1\u35E2\u35E3\u35E4\u35E5\u35E6\u35E7\u35E8"+
-            "\u35E9\u35EA\u35EB\u35EC\u35ED\u35EE\u35EF\u35F0"+
-            "\u35F1\u35F2\u35F3\u35F4\u35F5\u35F6\u35F7\u35F8"+
-            "\u35F9\u35FA\u35FB\u35FC\u35FD\u35FE\u0000\u35FF"+
-            "\u3600\u3601\u3602\u3603\u3604\u3605\u3606\u3607"+
-            "\u3608\u3609\u360A\u360B\u360C\u360D\u360E\u360F"+
-            "\u3610\u3611\u3612\u3613\u3614\u3615\u3616\u3617"+
-            "\u3618\u3619\u361A\u361B\u361C\u361D\u361E\u361F"+
-            "\u3620\u3621\u3622\u3623\u3624\u3625\u3626\u3627"+
-            "\u3628\u3629\u362A\u362B\u362C\u362D\u362E\u362F"+
-            "\u3630\u3631\u3632\u3633\u3634\u3635\u3636\u3637"+
-            "\u3638\u3639\u363A\u363B\u363C\u363D\u363E\u363F"+
-            "\u3640\u3641\u3642\u3643\u3644\u3645\u3646\u3647"+
-            "\u3648\u3649\u364A\u364B\u364C\u364D\u364E\u364F"+
-            "\u3650\u3651\u3652\u3653\u3654\u3655\u3656\u3657"+
-            "\u3658\u3659\u365A\u365B\u365C\u365D\u365E\u0000"+
-            "\u0000\u365F\u3660\u3661\u3662\u3663\u3664\u3665"+
-            "\u3666\u3667\u3668\u3669\u366A\u366B\u366C\u0000"+
-            "\u366D\u366E\u366F\u3670\u3671\u3672\u3673\u3674"+
-            "\u3675\u3676\u3677\u3678\u3679\u367A\u367B\u367C"+
-            "\u367D\u367E\u367F\u3680\u3681\u3682\u3683\u3684"+
-            "\u3685\u3686\u3687\u3688\u3689\u368A\u368B\u368C"+
-            "\u368D\u368E\u368F\u3690\u3691\u3692\u3693\u3694"+
-            "\u3695\u3696\u3697\u3698\u3699\u369A\u369B\u369C"+
-            "\u369D\u369E\u369F\u36A0\u36A1\u36A2\u36A3\u36A4"+
-            "\u36A5\u36A6\u36A7\u36A8\u36A9\u36AA\u36AB\u36AC"+
-            "\u36AD\u36AE\u36AF\u36B0\u36B1\u36B2\u36B3\u36B4"+
-            "\u36B5\u36B6\u36B7\u36B8\u36B9\u36BA\u36BB\u36BC"+
-            "\u36BD\u36BE\u36BF\u36C0\u36C1\u36C2\u36C3\u36C4"+
-            "\u36C5\u36C6\u36C7\u36C8\u36C9\u36CA\u36CB\u36CC"+
-            "\u36CD\u36CE\u36CF\u36D0\u36D1\u36D2\u36D3\u36D4"+
-            "\u36D5\u36D6\u36D7\u36D8\u36D9\u36DA\u36DB\u36DC"+
-            "\u36DD\u36DE\u36DF\u36E0\u36E1\u36E2\u36E3\u36E4"+
-            "\u36E5\u36E6\u36E7\u36E8\u36E9\u36EA\u36EB\u36EC"+
-            "\u36ED\u36EE\u36EF\u36F0\u36F1\u36F2\u36F3\u36F4"+
-            "\u36F5\u36F6\u36F7\u36F8\u36F9\u36FA\u36FB\u36FC"+
-            "\u36FD\u36FE\u36FF\u0000\u3700\u3701\u3702\u3703"+
-            "\u3704\u3705\u3706\u3707\u3708\u3709\u370A\u370B"+
-            "\u370C\u370D\u370E\u370F\u3710\u3711\u3712\u3713"+
-            "\u3714\u3715\u3716\u3717\u3718\u3719\u371A\u371B"+
-            "\u371C\u371D\u371E\u371F\u3720\u3721\u3722\u3723"+
-            "\u3724\u3725\u3726\u3727\u3728\u3729\u372A\u372B"+
-            "\u372C\u372D\u372E\u372F\u3730\u3731\u3732\u3733"+
-            "\u3734\u3735\u3736\u3737\u3738\u3739\u373A\u373B"+
-            "\u373C\u373D\u373E\u373F\u3740\u3741\u3742\u3743"+
-            "\u3744\u3745\u3746\u3747\u3748\u3749\u374A\u374B"+
-            "\u374C\u374D\u374E\u374F\u3750\u3751\u3752\u3753"+
-            "\u3754\u3755\u3756\u3757\u3758\u3759\u375A\u375B"+
-            "\u375C\u375D\u375E\u375F\u3760\u3761\u3762\u3763"+
-            "\u3764\u3765\u3766\u3767\u3768\u3769\u376A\u376B"+
-            "\u376C\u376D\u376E\u376F\u3770\u3771\u3772\u3773"+
-            "\u3774\u3775\u3776\u3777\u3778\u3779\u377A\u377B"+
-            "\u377C\u377D\u377E\u377F\u3780\u3781\u3782\u3783"+
-            "\u3784\u3785\u3786\u3787\u3788\u3789\u378A\u378B"+
-            "\u378C\u378D\u378E\u378F\u3790\u3791\u3792\u3793"+
-            "\u3794\u3795\u3796\u3797\u3798\u3799\u379A\u379B"+
-            "\u379C\u379D\u379E\u379F\u37A0\u37A1\u37A2\u37A3"+
-            "\u37A4\u37A5\u37A6\u37A7\u37A8\u37A9\u37AA\u37AB"+
-            "\u37AC\u37AD\u37AE\u37AF\u37B0\u37B1\u37B2\u37B3"+
-            "\u37B4\u37B5\u37B6\u37B7\u37B8\u37B9\u37BA\u37BB"+
-            "\u37BC\u37BD\u37BE\u37BF\u37C0\u37C1\u37C2\u37C3"+
-            "\u37C4\u37C5\u37C6\u37C7\u37C8\u37C9\u37CA\u37CB"+
-            "\u37CC\u37CD\u37CE\u37CF\u37D0\u37D1\u37D2\u37D3"+
-            "\u37D4\u37D5\u37D6\u37D7\u37D8\u37D9\u0000\u37DA"+
-            "\u37DB\u37DC\u37DD\u37DE\u37DF\u37E0\u37E1\u37E2"+
-            "\u37E3\u37E4\u37E5\u37E6\u37E7\u37E8\u37E9\u37EA"+
-            "\u37EB\u37EC\u37ED\u37EE\u37EF\u37F0\u37F1\u37F2"+
-            "\u37F3\u37F4\u37F5\u37F6\u37F7\u37F8\u37F9\u37FA"+
-            "\u37FB\u37FC\u37FD\u37FE\u37FF\u3800\u3801\u3802"+
-            "\u3803\u3804\u3805\u3806\u3807\u3808\u3809\u380A"+
-            "\u380B\u380C\u380D\u380E\u380F\u3810\u3811\u3812"+
-            "\u3813\u3814\u3815\u3816\u3817\u3818\u3819\u381A"+
-            "\u381B\u381C\u381D\u381E\u381F\u3820\u3821\u3822"+
-            "\u3823\u3824\u3825\u3826\u3827\u3828\u3829\u382A"+
-            "\u382B\u382C\u382D\u382E\u382F\u3830\u3831\u3832"+
-            "\u3833\u3834\u3835\u3836\u3837\u3838\u3839\u383A"+
-            "\u383B\u383C\u383D\u383E\u383F\u3840\u3841\u3842"+
-            "\u3843\u3844\u3845\u3846\u3847\u3848\u3849\u384A"+
-            "\u384B\u384C\u384D\u384E\u384F\u3850\u3851\u3852"+
-            "\u3853\u3854\u3855\u3856\u3857\u3858\u3859\u385A"+
-            "\u385B\u385C\u385D\u385E\u385F\u3860\u3861\u3862"+
-            "\u3863\u3864\u3865\u3866\u3867\u3868\u3869\u386A"+
-            "\u386B\u386C\u386D\u386E\u386F\u3870\u3871\u3872"+
-            "\u3873\u3874\u3875\u3876\u3877\u3878\u3879\u387A"+
-            "\u387B\u387C\u387D\u387E\u387F\u3880\u3881\u3882"+
-            "\u3883\u3884\u3885\u3886\u3887\u3888\u3889\u388A"+
-            "\u388B\u388C\u388D\u388E\u388F\u3890\u3891\u3892"+
-            "\u3893\u3894\u3895\u3896\u3897\u3898\u3899\u389A"+
-            "\u389B\u389C\u389D\u389E\u389F\u38A0\u38A1\u38A2"+
-            "\u38A3\u38A4\u38A5\u38A6\u38A7\u38A8\u38A9\u38AA"+
-            "\u38AB\u38AC\u38AD\u38AE\u38AF\u38B0\u38B1\u38B2"+
-            "\u38B3\u38B4\u38B5\u38B6\u38B7\u38B8\u38B9\u38BA"+
-            "\u38BB\u38BC\u38BD\u38BE\u38BF\u38C0\u38C1\u38C2"+
-            "\u38C3\u38C4\u38C5\u38C6\u38C7\u38C8\u38C9\u38CA"+
-            "\u38CB\u38CC\u38CD\u38CE\u38CF\u38D0\u38D1\u38D2"+
-            "\u38D3\u38D4\u38D5\u38D6\u38D7\u38D8\u38D9\u38DA"+
-            "\u38DB\u38DC\u38DD\u38DE\u38DF\u38E0\u38E1\u38E2"+
-            "\u38E3\u38E4\u38E5\u38E6\u38E7\u38E8\u38E9\u38EA"+
-            "\u38EB\u38EC\u38ED\u38EE\u38EF\u38F0\u38F1\u38F2"+
-            "\u38F3\u38F4\u38F5\u38F6\u38F7\u38F8\u0000\u38F9"+
-            "\u38FA\u38FB\u38FC\u38FD\u38FE\u38FF\u3900\u3901"+
-            "\u3902\u3903\u3904\u3905\u3906\u3907\u3908\u3909"+
-            "\u390A\u390B\u390C\u390D\u390E\u390F\u3910\u3911"+
-            "\u3912\u3913\u3914\u3915\u3916\u3917\u3918\u3919"+
-            "\u391A\u391B\u391C\u391D\u391E\u391F\u3920\u3921"+
-            "\u3922\u3923\u3924\u3925\u3926\u3927\u3928\u3929"+
-            "\u392A\u392B\u392C\u392D\u392E\u392F\u3930\u3931"+
-            "\u3932\u3933\u3934\u3935\u3936\u3937\u3938\u3939"+
-            "\u393A\u393B\u393C\u393D\u393E\u393F\u3940\u3941"+
-            "\u3942\u3943\u3944\u3945\u3946\u3947\u3948\u3949"+
-            "\u394A\u394B\u394C\u394D\u394E\u394F\u3950\u3951"+
-            "\u3952\u3953\u3954\u3955\u3956\u3957\u3958\u3959"+
-            "\u395A\u395B\u395C\u395D\u395E\u395F\u3960\u3961"+
-            "\u3962\u3963\u3964\u3965\u3966\u3967\u3968\u3969"+
-            "\u0000\u396A\u396B\u396C\u396D\u396E\u396F\u3970"+
-            "\u3971\u3972\u3973\u3974\u3975\u3976\u3977\u3978"+
-            "\u3979\u397A\u397B\u397C\u397D\u397E\u397F\u3980"+
-            "\u3981\u3982\u3983\u3984\u3985\u3986\u3987\u3988"+
-            "\u3989\u398A\u398B\u398C\u398D\u398E\u398F\u3990"+
-            "\u3991\u3992\u3993\u3994\u3995\u3996\u3997\u3998"+
-            "\u3999\u399A\u399B\u399C\u399D\u399E\u399F\u39A0"+
-            "\u39A1\u39A2\u39A3\u39A4\u39A5\u39A6\u39A7\u39A8"+
-            "\u39A9\u39AA\u39AB\u39AC\u39AD\u39AE\u39AF\u39B0"+
-            "\u39B1\u39B2\u39B3\u39B4\u39B5\u39B6\u39B7\u39B8"+
-            "\u39B9\u39BA\u39BB\u39BC\u39BD\u39BE\u39BF\u39C0"+
-            "\u39C1\u39C2\u39C3\u39C4\u39C5\u39C6\u39C7\u39C8"+
-            "\u39C9\u39CA\u39CB\u39CC\u39CD\u39CE\u39CF\u39D0"+
-            "\u39D1\u39D2\u39D3\u39D4\u39D5\u39D6\u39D7\u39D8"+
-            "\u39D9\u39DA\u39DB\u39DC\u39DD\u39DE\u39DF\u39E0"+
-            "\u39E1\u39E2\u39E3\u39E4\u39E5\u39E6\u39E7\u39E8"+
-            "\u39E9\u39EA\u39EB\u39EC\u39ED\u39EE\u39EF\u39F0"+
-            "\u39F1\u39F2\u39F3\u39F4\u39F5\u39F6\u39F7\u39F8"+
-            "\u39F9\u39FA\u39FB\u39FC\u39FD\u39FE\u39FF\u3A00"+
-            "\u3A01\u3A02\u3A03\u3A04\u3A05\u3A06\u3A07\u3A08"+
-            "\u3A09\u3A0A\u3A0B\u3A0C\u3A0D\u3A0E\u3A0F\u3A10"+
-            "\u3A11\u3A12\u3A13\u3A14\u3A15\u3A16\u3A17\u3A18"+
-            "\u3A19\u3A1A\u3A1B\u3A1C\u3A1D\u3A1E\u3A1F\u3A20"+
-            "\u3A21\u3A22\u3A23\u3A24\u3A25\u3A26\u3A27\u3A28"+
-            "\u3A29\u3A2A\u3A2B\u3A2C\u3A2D\u3A2E\u3A2F\u3A30"+
-            "\u3A31\u3A32\u3A33\u3A34\u3A35\u3A36\u3A37\u3A38"+
-            "\u3A39\u3A3A\u3A3B\u3A3C\u3A3D\u3A3E\u3A3F\u3A40"+
-            "\u3A41\u3A42\u3A43\u3A44\u3A45\u3A46\u3A47\u3A48"+
-            "\u3A49\u3A4A\u3A4B\u3A4C\u3A4D\u3A4E\u3A4F\u3A50"+
-            "\u3A51\u3A52\u3A53\u3A54\u3A55\u3A56\u3A57\u3A58"+
-            "\u3A59\u3A5A\u3A5B\u3A5C\u3A5D\u3A5E\u3A5F\u3A60"+
-            "\u3A61\u3A62\u3A63\u3A64\u3A65\u3A66\u3A67\u3A68"+
-            "\u3A69\u3A6A\u3A6B\u3A6C\u3A6D\u3A6E\u3A6F\u3A70"+
-            "\u3A71\u3A72\u3A73\u3A74\u3A75\u3A76\u3A77\u3A78"+
-            "\u3A79\u3A7A\u3A7B\u3A7C\u3A7D\u3A7E\u3A7F\u3A80"+
-            "\u3A81\u3A82\u3A83\u3A84\u3A85\u3A86\u3A87\u3A88"+
-            "\u3A89\u3A8A\u3A8B\u3A8C\u3A8D\u3A8E\u3A8F\u3A90"+
-            "\u3A91\u3A92\u3A93\u3A94\u3A95\u3A96\u3A97\u3A98"+
-            "\u3A99\u3A9A\u3A9B\u3A9C\u3A9D\u3A9E\u3A9F\u3AA0"+
-            "\u3AA1\u3AA2\u3AA3\u3AA4\u3AA5\u3AA6\u3AA7\u3AA8"+
-            "\u3AA9\u3AAA\u3AAB\u3AAC\u3AAD\u3AAE\u3AAF\u3AB0"+
-            "\u3AB1\u3AB2\u3AB3\u3AB4\u3AB5\u3AB6\u3AB7\u3AB8"+
-            "\u3AB9\u3ABA\u3ABB\u3ABC\u3ABD\u3ABE\u3ABF\u3AC0"+
-            "\u3AC1\u3AC2\u3AC3\u3AC4\u3AC5\u3AC6\u3AC7\u3AC8"+
-            "\u3AC9\u3ACA\u3ACB\u3ACC\u3ACD\u3ACE\u3ACF\u3AD0"+
-            "\u3AD1\u3AD2\u3AD3\u3AD4\u3AD5\u3AD6\u3AD7\u3AD8"+
-            "\u3AD9\u3ADA\u3ADB\u3ADC\u3ADD\u3ADE\u3ADF\u3AE0"+
-            "\u3AE1\u3AE2\u3AE3\u3AE4\u3AE5\u3AE6\u3AE7\u3AE8"+
-            "\u3AE9\u3AEA\u3AEB\u3AEC\u3AED\u3AEE\u3AEF\u3AF0"+
-            "\u3AF1\u3AF2\u3AF3\u3AF4\u3AF5\u3AF6\u3AF7\u3AF8"+
-            "\u3AF9\u3AFA\u3AFB\u3AFC\u3AFD\u3AFE\u3AFF\u3B00"+
-            "\u3B01\u3B02\u3B03\u3B04\u3B05\u3B06\u3B07\u3B08"+
-            "\u3B09\u3B0A\u3B0B\u3B0C\u3B0D\u3B0E\u3B0F\u3B10"+
-            "\u3B11\u3B12\u3B13\u3B14\u3B15\u3B16\u3B17\u3B18"+
-            "\u3B19\u3B1A\u3B1B\u3B1C\u3B1D\u3B1E\u3B1F\u3B20"+
-            "\u3B21\u3B22\u3B23\u3B24\u3B25\u3B26\u3B27\u3B28"+
-            "\u3B29\u3B2A\u3B2B\u3B2C\u3B2D\u3B2E\u3B2F\u3B30"+
-            "\u3B31\u3B32\u3B33\u3B34\u3B35\u3B36\u3B37\u3B38"+
-            "\u3B39\u3B3A\u3B3B\u3B3C\u3B3D\u3B3E\u3B3F\u3B40"+
-            "\u3B41\u3B42\u3B43\u3B44\u3B45\u3B46\u3B47\u3B48"+
-            "\u3B49\u3B4A\u3B4B\u3B4C\u3B4D\u3B4E\u3B4F\u3B50"+
-            "\u3B51\u3B52\u3B53\u3B54\u3B55\u3B56\u3B57\u3B58"+
-            "\u3B59\u3B5A\u3B5B\u3B5C\u3B5D\u3B5E\u3B5F\u3B60"+
-            "\u3B61\u3B62\u3B63\u3B64\u3B65\u3B66\u3B67\u3B68"+
-            "\u3B69\u3B6A\u3B6B\u3B6C\u3B6D\u3B6E\u3B6F\u3B70"+
-            "\u3B71\u3B72\u3B73\u3B74\u3B75\u3B76\u3B77\u3B78"+
-            "\u3B79\u3B7A\u3B7B\u3B7C\u3B7D\u3B7E\u3B7F\u3B80"+
-            "\u3B81\u3B82\u3B83\u3B84\u3B85\u3B86\u3B87\u3B88";
-
-        private final static String innerIndex4=
-            "\u3B89\u3B8A\u3B8B\u3B8C\u3B8D\u3B8E\u3B8F\u3B90"+
-            "\u3B91\u3B92\u3B93\u3B94\u3B95\u3B96\u3B97\u3B98"+
-            "\u3B99\u3B9A\u3B9B\u3B9C\u3B9D\u3B9E\u3B9F\u3BA0"+
-            "\u3BA1\u3BA2\u3BA3\u3BA4\u3BA5\u3BA6\u3BA7\u3BA8"+
-            "\u3BA9\u3BAA\u3BAB\u3BAC\u3BAD\u3BAE\u3BAF\u3BB0"+
-            "\u3BB1\u3BB2\u3BB3\u3BB4\u3BB5\u3BB6\u3BB7\u3BB8"+
-            "\u3BB9\u3BBA\u3BBB\u3BBC\u3BBD\u3BBE\u3BBF\u3BC0"+
-            "\u3BC1\u3BC2\u3BC3\u3BC4\u3BC5\u3BC6\u3BC7\u3BC8"+
-            "\u3BC9\u3BCA\u3BCB\u3BCC\u3BCD\u3BCE\u3BCF\u3BD0"+
-            "\u3BD1\u3BD2\u3BD3\u3BD4\u3BD5\u3BD6\u3BD7\u3BD8"+
-            "\u3BD9\u3BDA\u3BDB\u3BDC\u3BDD\u3BDE\u3BDF\u3BE0"+
-            "\u3BE1\u3BE2\u3BE3\u3BE4\u3BE5\u3BE6\u3BE7\u3BE8"+
-            "\u3BE9\u3BEA\u3BEB\u3BEC\u3BED\u3BEE\u3BEF\u3BF0"+
-            "\u3BF1\u3BF2\u3BF3\u3BF4\u3BF5\u3BF6\u3BF7\u3BF8"+
-            "\u3BF9\u3BFA\u3BFB\u3BFC\u3BFD\u3BFE\u3BFF\u3C00"+
-            "\u3C01\u3C02\u3C03\u3C04\u3C05\u3C06\u3C07\u3C08"+
-            "\u3C09\u3C0A\u3C0B\u3C0C\u3C0D\u3C0E\u3C0F\u3C10"+
-            "\u3C11\u3C12\u3C13\u3C14\u3C15\u3C16\u3C17\u3C18"+
-            "\u3C19\u3C1A\u3C1B\u3C1C\u3C1D\u3C1E\u3C1F\u3C20"+
-            "\u3C21\u3C22\u3C23\u3C24\u3C25\u3C26\u3C27\u3C28"+
-            "\u3C29\u3C2A\u3C2B\u3C2C\u3C2D\u3C2E\u3C2F\u3C30"+
-            "\u3C31\u3C32\u3C33\u3C34\u3C35\u3C36\u3C37\u3C38"+
-            "\u3C39\u3C3A\u3C3B\u3C3C\u3C3D\u3C3E\u3C3F\u3C40"+
-            "\u3C41\u3C42\u3C43\u3C44\u3C45\u3C46\u3C47\u3C48"+
-            "\u3C49\u3C4A\u3C4B\u3C4C\u3C4D\u3C4E\u3C4F\u3C50"+
-            "\u3C51\u3C52\u3C53\u3C54\u3C55\u3C56\u3C57\u3C58"+
-            "\u3C59\u3C5A\u3C5B\u3C5C\u3C5D\u3C5E\u3C5F\u3C60"+
-            "\u3C61\u3C62\u3C63\u3C64\u3C65\u3C66\u3C67\u3C68"+
-            "\u3C69\u3C6A\u3C6B\u3C6C\u3C6D\u3C6E\u3C6F\u3C70"+
-            "\u3C71\u3C72\u3C73\u3C74\u3C75\u3C76\u3C77\u3C78"+
-            "\u3C79\u3C7A\u3C7B\u3C7C\u3C7D\u3C7E\u3C7F\u3C80"+
-            "\u3C81\u3C82\u3C83\u3C84\u3C85\u3C86\u3C87\u3C88"+
-            "\u3C89\u3C8A\u3C8B\u3C8C\u3C8D\u3C8E\u3C8F\u3C90"+
-            "\u3C91\u3C92\u3C93\u3C94\u3C95\u3C96\u3C97\u3C98"+
-            "\u3C99\u3C9A\u3C9B\u3C9C\u3C9D\u3C9E\u3C9F\u3CA0"+
-            "\u3CA1\u3CA2\u3CA3\u3CA4\u3CA5\u3CA6\u3CA7\u3CA8"+
-            "\u3CA9\u3CAA\u3CAB\u3CAC\u3CAD\u3CAE\u3CAF\u3CB0"+
-            "\u3CB1\u3CB2\u3CB3\u3CB4\u3CB5\u3CB6\u3CB7\u3CB8"+
-            "\u3CB9\u3CBA\u3CBB\u3CBC\u3CBD\u3CBE\u3CBF\u3CC0"+
-            "\u3CC1\u3CC2\u3CC3\u3CC4\u3CC5\u3CC6\u3CC7\u3CC8"+
-            "\u3CC9\u3CCA\u3CCB\u3CCC\u3CCD\u3CCE\u3CCF\u3CD0"+
-            "\u3CD1\u3CD2\u3CD3\u3CD4\u3CD5\u3CD6\u3CD7\u3CD8"+
-            "\u3CD9\u3CDA\u3CDB\u3CDC\u3CDD\u3CDE\u0000\u3CDF"+
-            "\u3CE0\u3CE1\u3CE2\u3CE3\u3CE4\u3CE5\u3CE6\u3CE7"+
-            "\u3CE8\u3CE9\u3CEA\u3CEB\u3CEC\u3CED\u3CEE\u3CEF"+
-            "\u3CF0\u3CF1\u3CF2\u3CF3\u3CF4\u3CF5\u3CF6\u3CF7"+
-            "\u3CF8\u3CF9\u3CFA\u3CFB\u3CFC\u3CFD\u3CFE\u3CFF"+
-            "\u3D00\u3D01\u3D02\u3D03\u3D04\u3D05\u3D06\u3D07"+
-            "\u3D08\u3D09\u3D0A\u3D0B\u3D0C\u3D0D\u3D0E\u3D0F"+
-            "\u3D10\u3D11\u3D12\u3D13\u3D14\u3D15\u3D16\u3D17"+
-            "\u3D18\u3D19\u3D1A\u3D1B\u3D1C\u3D1D\u3D1E\u3D1F"+
-            "\u3D20\u3D21\u3D22\u3D23\u3D24\u3D25\u3D26\u3D27"+
-            "\u3D28\u3D29\u3D2A\u3D2B\u3D2C\u3D2D\u3D2E\u3D2F"+
-            "\u3D30\u3D31\u3D32\u3D33\u3D34\u3D35\u3D36\u3D37"+
-            "\u3D38\u3D39\u3D3A\u3D3B\u3D3C\u3D3D\u3D3E\u3D3F"+
-            "\u3D40\u3D41\u3D42\u3D43\u3D44\u3D45\u3D46\u3D47"+
-            "\u3D48\u3D49\u3D4A\u3D4B\u3D4C\u3D4D\u3D4E\u3D4F"+
-            "\u3D50\u3D51\u3D52\u3D53\u3D54\u3D55\u3D56\u3D57"+
-            "\u3D58\u3D59\u3D5A\u3D5B\u3D5C\u3D5D\u3D5E\u3D5F"+
-            "\u3D60\u3D61\u3D62\u3D63\u3D64\u3D65\u3D66\u3D67"+
-            "\u3D68\u3D69\u3D6A\u3D6B\u3D6C\u3D6D\u3D6E\u3D6F"+
-            "\u3D70\u3D71\u3D72\u3D73\u3D74\u3D75\u3D76\u3D77"+
-            "\u3D78\u3D79\u3D7A\u3D7B\u3D7C\u3D7D\u3D7E\u3D7F"+
-            "\u3D80\u3D81\u3D82\u3D83\u3D84\u3D85\u3D86\u3D87"+
-            "\u3D88\u3D89\u3D8A\u3D8B\u3D8C\u3D8D\u3D8E\u3D8F"+
-            "\u3D90\u3D91\u3D92\u3D93\u3D94\u3D95\u3D96\u3D97"+
-            "\u3D98\u3D99\u3D9A\u3D9B\u3D9C\u3D9D\u3D9E\u3D9F"+
-            "\u3DA0\u3DA1\u3DA2\u3DA3\u3DA4\u3DA5\u3DA6\u3DA7"+
-            "\u3DA8\u3DA9\u3DAA\u3DAB\u3DAC\u3DAD\u3DAE\u3DAF"+
-            "\u3DB0\u3DB1\u3DB2\u3DB3\u3DB4\u3DB5\u3DB6\u3DB7"+
-            "\u3DB8\u3DB9\u3DBA\u3DBB\u3DBC\u3DBD\u3DBE\u3DBF"+
-            "\u3DC0\u3DC1\u3DC2\u3DC3\u3DC4\u3DC5\u3DC6\u3DC7"+
-            "\u3DC8\u3DC9\u3DCA\u3DCB\u3DCC\u3DCD\u3DCE\u3DCF"+
-            "\u3DD0\u3DD1\u3DD2\u3DD3\u3DD4\u3DD5\u3DD6\u3DD7"+
-            "\u3DD8\u3DD9\u3DDA\u3DDB\u3DDC\u3DDD\u3DDE\u3DDF"+
-            "\u3DE0\u3DE1\u3DE2\u3DE3\u3DE4\u3DE5\u3DE6\u0000"+
-            "\u3DE7\u3DE8\u3DE9\u3DEA\u3DEB\u3DEC\u3DED\u3DEE"+
-            "\u3DEF\u3DF0\u3DF1\u3DF2\u3DF3\u3DF4\u3DF5\u3DF6"+
-            "\u3DF7\u3DF8\u3DF9\u3DFA\u3DFB\u3DFC\u3DFD\u3DFE"+
-            "\u3DFF\u3E00\u3E01\u3E02\u3E03\u3E04\u3E05\u3E06"+
-            "\u3E07\u3E08\u3E09\u3E0A\u3E0B\u3E0C\u3E0D\u3E0E"+
-            "\u3E0F\u3E10\u3E11\u3E12\u3E13\u3E14\u3E15\u3E16"+
-            "\u3E17\u3E18\u3E19\u3E1A\u3E1B\u3E1C\u3E1D\u3E1E"+
-            "\u3E1F\u3E20\u3E21\u3E22\u3E23\u3E24\u3E25\u3E26"+
-            "\u3E27\u3E28\u3E29\u3E2A\u3E2B\u3E2C\u3E2D\u3E2E"+
-            "\u3E2F\u3E30\u3E31\u3E32\u3E33\u3E34\u3E35\u3E36"+
-            "\u3E37\u3E38\u3E39\u3E3A\u3E3B\u3E3C\u3E3D\u3E3E"+
-            "\u3E3F\u3E40\u3E41\u3E42\u3E43\u3E44\u3E45\u3E46"+
-            "\u3E47\u3E48\u3E49\u3E4A\u3E4B\u3E4C\u3E4D\u3E4E"+
-            "\u3E4F\u3E50\u3E51\u3E52\u3E53\u3E54\u3E55\u3E56"+
-            "\u3E57\u3E58\u3E59\u3E5A\u3E5B\u3E5C\u3E5D\u3E5E"+
-            "\u3E5F\u3E60\u3E61\u3E62\u3E63\u3E64\u3E65\u3E66"+
-            "\u3E67\u3E68\u3E69\u3E6A\u3E6B\u3E6C\u3E6D\u3E6E"+
-            "\u3E6F\u3E70\u3E71\u3E72\u3E73\u3E74\u3E75\u3E76"+
-            "\u3E77\u3E78\u3E79\u3E7A\u3E7B\u3E7C\u3E7D\u3E7E"+
-            "\u3E7F\u3E80\u3E81\u3E82\u3E83\u3E84\u3E85\u3E86"+
-            "\u3E87\u3E88\u3E89\u3E8A\u3E8B\u3E8C\u3E8D\u3E8E"+
-            "\u3E8F\u3E90\u3E91\u3E92\u3E93\u3E94\u3E95\u3E96"+
-            "\u3E97\u3E98\u3E99\u3E9A\u3E9B\u3E9C\u3E9D\u3E9E"+
-            "\u3E9F\u3EA0\u3EA1\u3EA2\u3EA3\u3EA4\u3EA5\u3EA6"+
-            "\u3EA7\u3EA8\u3EA9\u3EAA\u3EAB\u3EAC\u3EAD\u3EAE"+
-            "\u3EAF\u3EB0\u3EB1\u3EB2\u3EB3\u3EB4\u3EB5\u3EB6"+
-            "\u3EB7\u3EB8\u3EB9\u3EBA\u3EBB\u3EBC\u3EBD\u3EBE"+
-            "\u3EBF\u3EC0\u3EC1\u3EC2\u3EC3\u3EC4\u3EC5\u3EC6"+
-            "\u3EC7\u3EC8\u3EC9\u3ECA\u3ECB\u3ECC\u3ECD\u3ECE"+
-            "\u3ECF\u3ED0\u3ED1\u3ED2\u3ED3\u3ED4\u3ED5\u3ED6"+
-            "\u3ED7\u3ED8\u3ED9\u3EDA\u3EDB\u3EDC\u3EDD\u3EDE"+
-            "\u3EDF\u3EE0\u3EE1\u3EE2\u3EE3\u3EE4\u3EE5\u3EE6"+
-            "\u3EE7\u3EE8\u3EE9\u3EEA\u3EEB\u3EEC\u3EED\u3EEE"+
-            "\u3EEF\u3EF0\u3EF1\u3EF2\u3EF3\u3EF4\u3EF5\u3EF6"+
-            "\u3EF7\u3EF8\u3EF9\u3EFA\u3EFB\u3EFC\u3EFD\u3EFE"+
-            "\u3EFF\u3F00\u3F01\u3F02\u3F03\u3F04\u3F05\u3F06"+
-            "\u3F07\u3F08\u3F09\u3F0A\u3F0B\u3F0C\u3F0D\u3F0E"+
-            "\u3F0F\u3F10\u3F11\u3F12\u3F13\u3F14\u3F15\u3F16"+
-            "\u3F17\u3F18\u3F19\u3F1A\u3F1B\u3F1C\u3F1D\u3F1E"+
-            "\u3F1F\u3F20\u3F21\u3F22\u3F23\u3F24\u3F25\u3F26"+
-            "\u3F27\u3F28\u3F29\u3F2A\u3F2B\u3F2C\u3F2D\u3F2E"+
-            "\u3F2F\u3F30\u3F31\u3F32\u3F33\u3F34\u3F35\u3F36"+
-            "\u3F37\u3F38\u3F39\u3F3A\u3F3B\u3F3C\u3F3D\u3F3E"+
-            "\u3F3F\u3F40\u3F41\u3F42\u3F43\u3F44\u3F45\u3F46"+
-            "\u3F47\u3F48\u3F49\u3F4A\u3F4B\u3F4C\u3F4D\u3F4E"+
-            "\u3F4F\u3F50\u3F51\u3F52\u3F53\u3F54\u3F55\u3F56"+
-            "\u3F57\u3F58\u3F59\u3F5A\u3F5B\u3F5C\u3F5D\u3F5E"+
-            "\u3F5F\u3F60\u3F61\u3F62\u3F63\u3F64\u3F65\u3F66"+
-            "\u3F67\u3F68\u3F69\u3F6A\u3F6B\u3F6C\u3F6D\u3F6E"+
-            "\u3F6F\u3F70\u3F71\u3F72\u3F73\u3F74\u3F75\u3F76"+
-            "\u3F77\u3F78\u3F79\u3F7A\u3F7B\u3F7C\u3F7D\u3F7E"+
-            "\u3F7F\u3F80\u3F81\u3F82\u3F83\u3F84\u3F85\u3F86"+
-            "\u3F87\u3F88\u3F89\u3F8A\u3F8B\u3F8C\u3F8D\u3F8E"+
-            "\u3F8F\u3F90\u3F91\u3F92\u3F93\u3F94\u3F95\u3F96"+
-            "\u3F97\u3F98\u3F99\u3F9A\u3F9B\u3F9C\u3F9D\u3F9E"+
-            "\u3F9F\u3FA0\u3FA1\u3FA2\u3FA3\u3FA4\u3FA5\u3FA6"+
-            "\u3FA7\u3FA8\u3FA9\u3FAA\u3FAB\u3FAC\u3FAD\u3FAE"+
-            "\u3FAF\u3FB0\u3FB1\u3FB2\u3FB3\u3FB4\u3FB5\u3FB6"+
-            "\u3FB7\u3FB8\u3FB9\u3FBA\u3FBB\u3FBC\u3FBD\u0000"+
-            "\u3FBE\u3FBF\u3FC0\u3FC1\u3FC2\u3FC3\u3FC4\u3FC5"+
-            "\u3FC6\u3FC7\u3FC8\u3FC9\u3FCA\u3FCB\u3FCC\u3FCD"+
-            "\u3FCE\u3FCF\u3FD0\u3FD1\u3FD2\u3FD3\u3FD4\u3FD5"+
-            "\u3FD6\u3FD7\u3FD8\u3FD9\u3FDA\u3FDB\u3FDC\u3FDD"+
-            "\u3FDE\u3FDF\u3FE0\u3FE1\u3FE2\u3FE3\u3FE4\u3FE5"+
-            "\u3FE6\u3FE7\u3FE8\u3FE9\u3FEA\u3FEB\u3FEC\u3FED"+
-            "\u3FEE\u3FEF\u3FF0\u3FF1\u3FF2\u3FF3\u3FF4\u3FF5"+
-            "\u3FF6\u3FF7\u3FF8\u3FF9\u3FFA\u3FFB\u3FFC\u3FFD"+
-            "\u3FFE\u3FFF\u4000\u4001\u4002\u4003\u4004\u4005"+
-            "\u4006\u4007\u4008\u4009\u400A\u400B\u400C\u400D"+
-            "\u400E\u400F\u4010\u4011\u4012\u4013\u4014\u4015"+
-            "\u4016\u4017\u4018\u4019\u401A\u401B\u401C\u401D"+
-            "\u401E\u401F\u4020\u4021\u4022\u4023\u4024\u4025"+
-            "\u4026\u4027\u4028\u4029\u402A\u402B\u402C\u402D"+
-            "\u402E\u402F\u4030\u4031\u0000\u4032\u4033\u4034"+
-            "\u4035\u0000\u4036\u4037\u4038\u4039\u403A\u403B"+
-            "\u403C\u403D\u403E\u403F\u4040\u4041\u4042\u4043"+
-            "\u4044\u4045\u4046\u4047\u4048\u4049\u404A\u404B"+
-            "\u404C\u404D\u404E\u404F\u4050\u4051\u4052\u4053"+
-            "\u4054\u4055\u4056\u4057\u4058\u4059\u405A\u405B"+
-            "\u405C\u405D\u405E\u405F\u4060\u0000\u4061\u4062"+
-            "\u4063\u4064\u4065\u4066\u4067\u4068\u4069\u406A"+
-            "\u406B\u406C\u406D\u406E\u406F\u4070\u4071\u4072"+
-            "\u4073\u4074\u4075\u4076\u4077\u4078\u4079\u407A"+
-            "\u407B\u407C\u407D\u407E\u407F\u4080\u4081\u4082"+
-            "\u4083\u4084\u4085\u4086\u4087\u4088\u4089\u408A"+
-            "\u408B\u408C\u408D\u408E\u408F\u4090\u4091\u4092"+
-            "\u4093\u4094\u4095\u4096\u4097\u4098\u4099\u409A"+
-            "\u409B\u409C\u409D\u409E\u409F\u40A0\u40A1\u40A2"+
-            "\u40A3\u40A4\u40A5\u40A6\u40A7\u40A8\u40A9\u40AA"+
-            "\u40AB\u40AC\u40AD\u40AE\u40AF\u40B0\u40B1\u40B2"+
-            "\u40B3\u40B4\u40B5\u40B6\u40B7\u40B8\u40B9\u40BA"+
-            "\u40BB\u40BC\u40BD\u40BE\u40BF\u40C0\u40C1\u40C2"+
-            "\u40C3\u40C4\u40C5\u40C6\u40C7\u40C8\u40C9\u40CA"+
-            "\u40CB\u40CC\u40CD\u40CE\u40CF\u40D0\u40D1\u40D2"+
-            "\u40D3\u40D4\u40D5\u40D6\u40D7\u40D8\u40D9\u40DA"+
-            "\u40DB\u40DC\u40DD\u40DE\u40DF\u40E0\u40E1\u40E2"+
-            "\u40E3\u40E4\u40E5\u40E6\u40E7\u40E8\u40E9\u40EA"+
-            "\u40EB\u40EC\u40ED\u40EE\u40EF\u40F0\u40F1\u40F2"+
-            "\u40F3\u40F4\u40F5\u40F6\u40F7\u40F8\u40F9\u40FA"+
-            "\u40FB\u40FC\u40FD\u40FE\u40FF\u4100\u4101\u4102"+
-            "\u4103\u4104\u4105\u4106\u4107\u4108\u4109\u410A"+
-            "\u410B\u410C\u410D\u410E\u410F\u4110\u4111\u4112"+
-            "\u4113\u4114\u4115\u4116\u4117\u4118\u4119\u411A"+
-            "\u411B\u411C\u411D\u411E\u411F\u4120\u4121\u4122"+
-            "\u4123\u4124\u4125\u4126\u4127\u4128\u4129\u412A"+
-            "\u412B\u412C\u412D\u412E\u412F\u4130\u4131\u4132"+
-            "\u4133\u4134\u4135\u4136\u4137\u4138\u4139\u413A"+
-            "\u413B\u413C\u413D\u413E\u413F\u4140\u4141\u4142"+
-            "\u4143\u4144\u4145\u4146\u4147\u4148\u4149\u414A"+
-            "\u414B\u414C\u414D\u414E\u414F\u4150\u4151\u4152"+
-            "\u4153\u4154\u4155\u4156\u4157\u4158\u0000\u4159"+
-            "\u415A\u415B\u415C\u415D\u415E\u415F\u4160\u4161"+
-            "\u4162\u4163\u4164\u4165\u4166\u4167\u4168\u4169"+
-            "\u416A\u416B\u416C\u416D\u416E\u416F\u4170\u4171"+
-            "\u4172\u4173\u4174\u4175\u4176\u4177\u4178\u4179"+
-            "\u417A\u417B\u417C\u417D\u417E\u417F\u4180\u4181"+
-            "\u4182\u4183\u4184\u4185\u4186\u4187\u4188\u4189"+
-            "\u418A\u418B\u418C\u418D\u418E\u418F\u4190\u4191"+
-            "\u4192\u4193\u4194\u4195\u4196\u4197\u4198\u4199"+
-            "\u419A\u419B\u419C\u419D\u419E\u419F\u41A0\u41A1"+
-            "\u41A2\u41A3\u41A4\u41A5\u41A6\u41A7\u41A8\u41A9"+
-            "\u41AA\u41AB\u41AC\u41AD\u41AE\u41AF\u41B0\u41B1"+
-            "\u41B2\u41B3\u41B4\u41B5\u41B6\u41B7\u41B8\u41B9"+
-            "\u41BA\u41BB\u41BC\u41BD\u41BE\u41BF\u41C0\u41C1"+
-            "\u41C2\u41C3\u41C4\u41C5\u41C6\u41C7\u41C8\u41C9"+
-            "\u41CA\u41CB\u41CC\u41CD\u41CE\u41CF\u41D0\u41D1"+
-            "\u41D2\u41D3\u41D4\u41D5\u41D6\u41D7\u41D8\u41D9"+
-            "\u41DA\u41DB\u41DC\u41DD\u41DE\u41DF\u41E0\u41E1"+
-            "\u41E2\u41E3\u41E4\u41E5\u41E6\u41E7\u41E8\u41E9"+
-            "\u41EA\u41EB\u41EC\u41ED\u41EE\u41EF\u41F0\u41F1"+
-            "\u41F2\u41F3\u41F4\u41F5\u41F6\u41F7\u41F8\u41F9"+
-            "\u41FA\u41FB\u41FC\u41FD\u41FE\u41FF\u4200\u4201"+
-            "\u4202\u4203\u4204\u4205\u4206\u4207\u4208\u4209"+
-            "\u420A\u420B\u420C\u420D\u420E\u420F\u4210\u4211"+
-            "\u4212\u4213\u4214\u4215\u4216\u4217\u4218\u4219"+
-            "\u421A\u421B\u421C\u421D\u421E\u421F\u4220\u4221"+
-            "\u4222\u4223\u4224\u4225\u4226\u4227\u4228\u4229"+
-            "\u422A\u422B\u422C\u422D\u422E\u422F\u4230\u4231"+
-            "\u4232\u4233\u4234\u4235\u4236\u4237\u4238\u4239"+
-            "\u423A\u423B\u423C\u423D\u423E\u423F\u4240\u4241"+
-            "\u4242\u4243\u4244\u4245\u4246\u4247\u4248\u4249"+
-            "\u424A\u424B\u424C\u424D\u424E\u424F\u4250\u4251"+
-            "\u4252\u4253\u4254\u4255\u4256\u4257\u4258\u4259"+
-            "\u425A\u425B\u425C\u425D\u425E\u425F\u4260\u4261"+
-            "\u4262\u4263\u4264\u4265\u4266\u4267\u4268\u4269"+
-            "\u426A\u426B\u426C\u426D\u426E\u426F\u4270\u4271"+
-            "\u4272\u4273\u4274\u4275\u4276\u4277\u4278\u4279"+
-            "\u427A\u427B\u427C\u427D\u427E\u427F\u4280\u4281"+
-            "\u4282\u4283\u4284\u4285\u4286\u4287\u4288\u4289"+
-            "\u428A\u428B\u428C\u428D\u428E\u428F\u4290\u4291"+
-            "\u4292\u4293\u4294\u4295\u4296\u4297\u4298\u4299"+
-            "\u429A\u429B\u429C\u429D\u429E\u429F\u42A0\u42A1"+
-            "\u42A2\u42A3\u42A4\u42A5\u42A6\u42A7\u42A8\u42A9"+
-            "\u42AA\u42AB\u42AC\u42AD\u42AE\u42AF\u42B0\u42B1"+
-            "\u42B2\u42B3\u42B4\u42B5\u42B6\u42B7\u42B8\u42B9"+
-            "\u42BA\u42BB\u42BC\u42BD\u42BE\u42BF\u42C0\u42C1"+
-            "\u42C2\u42C3\u42C4\u42C5\u42C6\u42C7\u42C8\u42C9"+
-            "\u42CA\u42CB\u42CC\u42CD\u0000\u42CE\u42CF\u42D0"+
-            "\u42D1\u42D2\u42D3\u42D4\u42D5\u42D6\u42D7\u42D8"+
-            "\u42D9\u42DA\u42DB\u42DC\u42DD\u42DE\u42DF\u42E0"+
-            "\u42E1\u0000\u42E2\u42E3\u42E4\u42E5\u42E6\u42E7"+
-            "\u42E8\u42E9\u42EA\u42EB\u42EC\u42ED\u42EE\u42EF"+
-            "\u42F0\u42F1\u42F2\u42F3\u42F4\u42F5\u42F6\u42F7"+
-            "\u42F8\u42F9\u42FA\u42FB\u42FC\u42FD\u42FE\u42FF"+
-            "\u4300\u4301\u4302\u4303\u4304\u4305\u4306\u4307"+
-            "\u4308\u4309\u430A\u430B\u430C\u430D\u430E\u430F"+
-            "\u4310\u4311\u4312\u4313\u4314\u4315\u4316\u4317"+
-            "\u4318\u4319\u431A\u431B\u431C\u431D\u431E\u431F"+
-            "\u4320\u4321\u4322\u4323\u4324\u4325\u4326\u4327"+
-            "\u4328\u4329\u432A\u432B\u432C\u432D\u432E\u432F"+
-            "\u4330\u4331\u4332\u4333\u4334\u4335\u4336\u4337"+
-            "\u4338\u4339\u433A\u433B\u433C\u433D\u433E\u433F"+
-            "\u4340\u4341\u4342\u4343\u4344\u4345\u4346\u4347"+
-            "\u4348\u4349\u434A\u434B\u434C\u434D\u434E\u434F"+
-            "\u4350\u4351\u4352\u4353\u4354\u4355\u4356\u4357"+
-            "\u4358\u4359\u435A\u435B\u435C\u435D\u435E\u435F"+
-            "\u4360\u4361\u4362\u4363\u4364\u4365\u4366\u4367"+
-            "\u4368\u4369\u436A\u436B\u436C\u436D\u436E\u436F"+
-            "\u4370\u4371\u4372\u4373\u4374\u4375\u4376\u4377"+
-            "\u4378\u4379\u437A\u437B\u437C\u437D\u437E\u437F"+
-            "\u4380\u4381\u4382\u4383\u4384\u4385\u4386\u4387"+
-            "\u4388\u4389\u438A\u438B\u438C\u438D\u438E\u438F"+
-            "\u4390\u4391\u4392\u4393\u4394\u4395\u4396\u4397"+
-            "\u4398\u4399\u439A\u439B\u439C\u439D\u439E\u439F"+
-            "\u43A0\u43A1\u43A2\u0000\u43A3\u43A4\u43A5\u43A6"+
-            "\u43A7\u0000\u43A8\u43A9\u43AA\u43AB\u43AC\u43AD"+
-            "\u43AE\u43AF\u43B0\u43B1\u43B2\u43B3\u43B4\u43B5"+
-            "\u43B6\u43B7\u43B8\u43B9\u43BA\u43BB\u43BC\u43BD"+
-            "\u43BE\u43BF\u43C0\u43C1\u43C2\u43C3\u43C4\u43C5"+
-            "\u43C6\u43C7\u43C8\u43C9\u43CA\u43CB\u43CC\u43CD"+
-            "\u43CE\u43CF\u43D0\u43D1\u43D2\u43D3\u43D4\u43D5"+
-            "\u43D6\u43D7\u43D8\u43D9\u43DA\u43DB\u43DC\u43DD"+
-            "\u43DE\u43DF\u43E0\u43E1\u43E2\u43E3\u43E4\u43E5"+
-            "\u43E6\u43E7\u43E8\u43E9\u43EA\u43EB\u43EC\u43ED"+
-            "\u43EE\u43EF\u43F0\u43F1\u43F2\u43F3\u43F4\u43F5"+
-            "\u43F6\u43F7\u43F8\u43F9\u0000\u43FA\u43FB\u43FC"+
-            "\u43FD\u43FE\u43FF\u4400\u4401\u4402\u4403\u4404"+
-            "\u4405\u4406\u4407\u4408\u4409\u0000\u440A\u440B"+
-            "\u440C\u440D\u440E\u440F\u4410\u4411\u4412\u4413"+
-            "\u4414\u4415\u4416\u4417\u4418\u4419\u441A\u441B"+
-            "\u441C\u441D\u441E\u441F\u4420\u4421\u4422\u4423"+
-            "\u4424\u4425\u4426\u4427\u4428\u4429\u442A\u442B"+
-            "\u442C\u442D\u442E\u442F\u4430\u4431\u4432\u4433"+
-            "\u4434\u4435\u4436\u4437\u4438\u4439\u443A\u443B"+
-            "\u443C\u443D\u443E\u443F\u4440\u4441\u4442\u4443"+
-            "\u4444\u4445\u4446\u4447\u4448\u4449\u444A\u444B"+
-            "\u444C\u444D\u444E\u444F\u4450\u4451\u4452\u4453"+
-            "\u4454\u4455\u4456\u4457\u4458\u4459\u445A\u445B"+
-            "\u445C\u445D\u445E\u445F\u4460\u4461\u4462\u4463"+
-            "\u4464\u4465\u4466\u4467\u4468\u4469\u446A\u446B"+
-            "\u446C\u446D\u446E\u446F\u4470\u4471\u4472\u4473"+
-            "\u4474\u4475\u4476\u4477\u4478\u4479\u447A\u447B"+
-            "\u447C\u447D\u447E\u447F\u4480\u4481\u4482\u4483"+
-            "\u4484\u4485\u4486\u4487\u4488\u4489\u448A\u448B"+
-            "\u448C\u448D\u448E\u448F\u4490\u4491\u4492\u4493"+
-            "\u4494\u4495\u4496\u4497\u4498\u4499\u449A\u449B"+
-            "\u449C\u449D\u449E\u449F\u44A0\u44A1\u44A2\u44A3"+
-            "\u44A4\u44A5\u44A6\u44A7\u44A8\u44A9\u44AA\u44AB"+
-            "\u44AC\u44AD\u44AE\u44AF\u44B0\u44B1\u44B2\u44B3"+
-            "\u44B4\u44B5\u44B6\u44B7\u44B8\u44B9\u44BA\u44BB"+
-            "\u44BC\u44BD\u44BE\u44BF\u44C0\u44C1\u44C2\u44C3"+
-            "\u44C4\u44C5\u44C6\u44C7\u44C8\u44C9\u44CA\u44CB"+
-            "\u44CC\u44CD\u44CE\u44CF\u44D0\u44D1\u44D2\u44D3"+
-            "\u44D4\u44D5\u44D6\u44D7\u44D8\u44D9\u44DA\u44DB"+
-            "\u44DC\u44DD\u44DE\u44DF\u44E0\u44E1\u44E2\u44E3"+
-            "\u44E4\u44E5\u44E6\u44E7\u44E8\u44E9\u44EA\u44EB"+
-            "\u44EC\u44ED\u44EE\u44EF\u44F0\u44F1\u44F2\u44F3"+
-            "\u44F4\u44F5\u44F6\u44F7\u44F8\u44F9\u44FA\u44FB"+
-            "\u44FC\u44FD\u44FE\u44FF\u4500\u4501\u4502\u4503"+
-            "\u4504\u4505\u4506\u4507\u4508\u4509\u450A\u450B"+
-            "\u450C\u450D\u450E\u450F\u4510\u4511\u4512\u4513"+
-            "\u4514\u4515\u4516\u4517\u4518\u4519\u451A\u451B"+
-            "\u451C\u451D\u451E\u451F\u4520\u4521\u4522\u4523"+
-            "\u4524\u4525\u4526\u4527\u4528\u4529\u452A\u452B"+
-            "\u452C\u452D\u452E\u452F\u4530\u4531\u4532\u4533"+
-            "\u4534\u4535\u4536\u4537\u4538\u4539\u453A\u453B"+
-            "\u453C\u453D\u453E\u453F\u4540\u4541\u4542\u4543"+
-            "\u4544\u4545\u4546\u4547\u4548\u4549\u454A\u454B"+
-            "\u454C\u454D\u454E\u454F\u4550\u4551\u4552\u4553"+
-            "\u4554\u4555\u4556\u4557\u4558\u4559\u455A\u455B"+
-            "\u455C\u455D\u455E\u455F\u4560\u4561\u4562\u4563"+
-            "\u4564\u4565\u4566\u4567\u4568\u4569\u456A\u456B"+
-            "\u456C\u456D\u456E\u456F\u4570\u4571\u4572\u4573"+
-            "\u4574\u4575\u4576\u4577\u4578\u4579\u457A\u457B"+
-            "\u457C\u457D\u457E\u457F\u4580\u4581\u4582\u4583"+
-            "\u4584\u4585\u4586\u4587\u4588\u4589\u458A\u458B"+
-            "\u458C\u458D\u458E\u458F\u4590\u4591\u4592\u4593"+
-            "\u4594\u4595\u4596\u4597\u4598\u4599\u459A\u459B"+
-            "\u459C\u459D\u459E\u459F\u45A0\u45A1\u45A2\u45A3"+
-            "\u45A4\u45A5\u45A6\u45A7\u45A8\u45A9\u45AA\u45AB"+
-            "\u45AC\u45AD\u45AE\u45AF\u45B0\u45B1\u45B2\u45B3"+
-            "\u45B4\u45B5\u45B6\u45B7\u45B8\u45B9\u45BA\u45BB"+
-            "\u45BC\u45BD\u45BE\u45BF\u45C0\u45C1\u45C2\u0000"+
-            "\u45C3\u45C4\u45C5\u45C6\u45C7\u45C8\u45C9\u45CA"+
-            "\u45CB\u45CC\u45CD\u45CE\u45CF\u45D0\u45D1\u45D2"+
-            "\u45D3\u45D4\u45D5\u45D6\u45D7\u45D8\u45D9\u45DA"+
-            "\u45DB\u45DC\u45DD\u45DE\u45DF\u45E0\u45E1\u45E2"+
-            "\u45E3\u45E4\u45E5\u45E6\u45E7\u45E8\u45E9\u45EA"+
-            "\u45EB\u45EC\u45ED\u45EE\u45EF\u45F0\u45F1\u45F2"+
-            "\u45F3\u45F4\u0000\u45F5\u45F6\u0000\u45F7\u45F8"+
-            "\u45F9\u45FA\u0000\u0000\u45FB\u0000\u0000\u45FC"+
-            "\u45FD\u45FE\u45FF\u4600\u4601\u4602\u4603\u4604"+
-            "\u4605\u4606\u4607\u4608\u4609\u460A\u460B\u460C"+
-            "\u460D\u460E\u460F\u0000\u4610\u4611\u4612\u0000"+
-            "\u4613\u4614\u4615\u4616\u4617\u4618\u4619\u461A"+
-            "\u461B\u461C\u461D\u461E\u461F\u4620\u4621\u4622"+
-            "\u4623\u4624\u4625\u4626\u4627\u4628\u0000\u0000"+
-            "\u4629\u462A\u462B\u462C\u462D\u462E\u462F\u4630"+
-            "\u4631\u4632\u4633\u4634\u4635\u4636\u4637\u4638"+
-            "\u4639\u463A\u463B\u463C\u463D\u463E\u463F\u4640"+
-            "\u4641\u4642\u4643\u4644\u4645\u4646\u4647\u4648"+
-            "\u4649\u464A\u464B\u464C\u464D\u464E\u464F\u4650"+
-            "\u4651\u4652\u4653\u4654\u4655\u4656\u4657\u4658"+
-            "\u4659\u465A\u465B\u465C\u465D\u465E\u465F\u4660"+
-            "\u4661\u4662\u4663\u4664\u4665\u4666\u4667\u4668"+
-            "\u4669\u466A\u466B\u466C\u466D\u466E\u466F\u4670"+
-            "\u4671\u4672\u4673\u4674\u4675\u4676\u4677\u4678"+
-            "\u4679\u467A\u467B\u467C\u467D\u467E\u467F\u4680"+
-            "\u4681\u4682\u4683\u4684\u4685\u4686\u4687\u4688"+
-            "\u4689\u468A\u468B\u468C\u468D\u468E\u468F\u4690"+
-            "\u4691\u4692\u4693\u4694\u4695\u4696\u4697\u4698"+
-            "\u4699\u469A\u469B\u469C\u469D\u469E\u469F\u46A0"+
-            "\u46A1\u46A2\u46A3\u46A4\u46A5\u46A6\u46A7\u46A8"+
-            "\u46A9\u46AA\u46AB\u46AC\u46AD\u46AE\u46AF\u46B0"+
-            "\u46B1\u46B2\u46B3\u46B4\u46B5\u46B6\u46B7\u46B8"+
-            "\u46B9\u46BA\u46BB\u46BC\u46BD\u46BE\u46BF\u46C0"+
-            "\u46C1\u46C2\u46C3\u46C4\u46C5\u46C6\u46C7\u46C8"+
-            "\u46C9\u46CA\u46CB\u46CC\u46CD\u46CE\u46CF\u46D0"+
-            "\u46D1\u46D2\u46D3\u46D4\u46D5\u46D6\u46D7\u46D8"+
-            "\u46D9\u46DA\u46DB\u46DC\u46DD\u46DE\u46DF\u46E0"+
-            "\u46E1\u46E2\u46E3\u46E4\u46E5\u46E6\u46E7\u46E8"+
-            "\u46E9\u46EA\u46EB\u46EC\u46ED\u46EE\u46EF\u46F0"+
-            "\u46F1\u46F2\u46F3\u46F4\u46F5\u46F6\u46F7\u46F8"+
-            "\u46F9\u46FA\u46FB\u46FC\u46FD\u46FE\u46FF\u4700"+
-            "\u4701\u4702\u4703\u4704\u4705\u4706\u4707\u4708"+
-            "\u4709\u470A\u470B\u470C\u470D\u470E\u470F\u4710"+
-            "\u4711\u4712\u4713\u4714\u4715\u4716\u4717\u4718"+
-            "\u4719\u471A\u471B\u471C\u471D\u471E\u471F\u4720"+
-            "\u4721\u4722\u4723\u4724\u4725\u4726\u4727\u4728"+
-            "\u4729\u472A\u472B\u472C\u472D\u472E\u472F\u4730"+
-            "\u4731\u4732\u4733\u4734\u4735\u4736\u4737\u4738"+
-            "\u4739\u473A\u473B\u473C\u473D\u473E\u473F\u4740"+
-            "\u4741\u4742\u4743\u4744\u4745\u4746\u4747\u4748"+
-            "\u4749\u474A\u474B\u474C\u474D\u474E\u474F\u4750"+
-            "\u4751\u4752\u4753\u4754\u4755\u4756\u4757\u4758"+
-            "\u4759\u475A\u475B\u475C\u475D\u475E\u475F\u4760"+
-            "\u4761\u4762\u4763\u4764\u4765\u4766\u4767\u4768"+
-            "\u4769\u476A\u476B\u476C\u476D\u476E\u476F\u4770"+
-            "\u4771\u4772\u4773\u4774\u4775\u4776\u4777\u4778"+
-            "\u4779\u477A\u477B\u477C\u477D\u477E\u477F\u4780"+
-            "\u4781\u4782\u4783\u4784\u4785\u4786\u4787\u4788"+
-            "\u4789\u478A\u478B\u478C\u478D\u478E\u478F\u4790"+
-            "\u4791\u4792\u4793\u4794\u4795\u4796\u4797\u4798"+
-            "\u4799\u479A\u479B\u479C\u479D\u479E\u479F\u47A0"+
-            "\u47A1\u47A2\u47A3\u47A4\u47A5\u47A6\u47A7\u47A8"+
-            "\u47A9\u47AA\u47AB\u47AC\u47AD\u47AE\u47AF\u47B0"+
-            "\u47B1\u47B2\u47B3\u47B4\u47B5\u47B6\u47B7\u47B8"+
-            "\u47B9\u47BA\u47BB\u47BC\u47BD\u47BE\u47BF\u47C0"+
-            "\u47C1\u47C2\u47C3\u47C4\u47C5\u47C6\u47C7\u47C8"+
-            "\u47C9\u47CA\u47CB\u47CC\u47CD\u47CE\u47CF\u47D0"+
-            "\u47D1\u47D2\u47D3\u47D4\u47D5\u47D6\u47D7\u47D8"+
-            "\u47D9\u47DA\u47DB\u47DC\u47DD\u47DE\u47DF\u47E0"+
-            "\u47E1\u47E2\u47E3\u47E4\u47E5\u47E6\u47E7\u47E8"+
-            "\u47E9\u47EA\u47EB\u47EC\u47ED\u47EE\u47EF\u47F0"+
-            "\u47F1\u47F2\u47F3\u47F4\u47F5\u47F6\u47F7\u47F8"+
-            "\u47F9\u47FA\u47FB\u47FC\u47FD\u47FE\u47FF\u4800"+
-            "\u4801\u4802\u4803\u4804\u4805\u4806\u4807\u4808"+
-            "\u4809\u480A\u480B\u480C\u480D\u480E\u480F\u4810"+
-            "\u4811\u4812\u4813\u4814\u4815\u4816\u4817\u4818"+
-            "\u4819\u481A\u481B\u481C\u481D\u481E\u481F\u4820"+
-            "\u4821\u4822\u4823\u4824\u4825\u4826\u4827\u4828"+
-            "\u4829\u482A\u482B\u482C\u482D\u482E\u482F\u4830"+
-            "\u4831\u4832\u4833\u4834\u4835\u4836\u4837\u4838"+
-            "\u4839\u483A\u483B\u483C\u483D\u483E\u483F\u4840"+
-            "\u4841\u4842\u4843\u4844\u4845\u4846\u4847\u4848"+
-            "\u4849\u484A\u484B\u484C\u484D\u484E\u484F\u4850"+
-            "\u4851\u4852\u4853\u4854\u4855\u4856\u4857\u4858"+
-            "\u4859\u485A\u485B\u485C\u485D\u485E\u485F\u4860"+
-            "\u4861\u4862\u4863\u4864\u4865\u4866\u4867\u4868"+
-            "\u4869\u486A\u486B\u486C\u486D\u486E\u486F\u4870"+
-            "\u4871\u4872\u4873\u4874\u4875\u4876\u4877\u4878"+
-            "\u4879\u487A\u487B\u487C\u487D\u487E\u487F\u4880"+
-            "\u4881\u4882\u4883\u4884\u4885\u4886\u4887\u4888"+
-            "\u4889\u488A\u488B\u488C\u488D\u488E\u488F\u4890"+
-            "\u4891\u4892\u4893\u4894\u4895\u4896\u4897\u4898"+
-            "\u4899\u489A\u489B\u489C\u489D\u489E\u489F\u48A0"+
-            "\u48A1\u48A2\u48A3\u48A4\u48A5\u48A6\u48A7\u48A8"+
-            "\u48A9\u48AA\u48AB\u48AC\u48AD\u48AE\u48AF\u48B0"+
-            "\u48B1\u48B2\u48B3\u48B4\u48B5\u48B6\u48B7\u48B8"+
-            "\u48B9\u48BA\u48BB\u48BC\u48BD\u48BE\u48BF\u48C0"+
-            "\u48C1\u48C2\u48C3\u48C4\u48C5\u48C6\u48C7\u48C8"+
-            "\u48C9\u48CA\u48CB\u48CC\u48CD\u48CE\u48CF\u48D0"+
-            "\u48D1\u48D2\u48D3\u48D4\u48D5\u48D6\u48D7\u48D8"+
-            "\u48D9\u48DA\u48DB\u48DC\u48DD\u48DE\u48DF\u48E0"+
-            "\u48E1\u48E2\u48E3\u48E4\u48E5\u48E6\u48E7\u0000"+
-            "\u48E8\u48E9\u48EA\u48EB\u48EC\u48ED\u48EE\u48EF"+
-            "\u48F0\u48F1\u48F2\u48F3\u48F4\u48F5\u48F6\u48F7"+
-            "\u48F8\u48F9\u48FA\u48FB\u48FC\u48FD\u48FE\u48FF"+
-            "\u4900\u4901\u4902\u4903\u4904\u4905\u4906\u4907"+
-            "\u4908\u4909\u490A\u490B\u490C\u490D\u490E\u0000"+
-            "\u0000\u0000\u0000\u0000\u490F\u4910\u4911\u4912"+
-            "\u4913\u4914\u4915\u4916\u4917\u4918\u4919\u491A"+
-            "\u491B\u491C\u491D\u491E\u491F\u4920\u4921\u4922"+
-            "\u4923\u4924\u4925\u4926\u4927\u4928\u4929\u492A"+
-            "\u492B\u492C\u492D\u492E\u492F\u4930\u4931\u4932"+
-            "\u4933\u4934\u4935\u4936\u4937\u4938\u4939\u493A"+
-            "\u493B\u493C\u493D\u493E\u493F\u4940\u4941\u4942"+
-            "\u4943\u4944\u4945\u4946\u4947\u4948\u4949\u494A"+
-            "\u494B\u494C\u494D\u494E\u494F\u4950\u4951\u4952"+
-            "\u4953\u4954\u4955\u4956\u4957\u4958\u4959\u495A"+
-            "\u495B\u495C\u495D\u495E\u495F\u4960\u4961\u4962"+
-            "\u4963\u4964\u4965\u4966\u4967\u4968\u4969\u496A"+
-            "\u496B\u496C\u496D\u496E\u496F\u4970\u4971\u4972"+
-            "\u4973\u4974\u4975\u4976\u4977\u4978\u4979\u497A"+
-            "\u497B\u497C\u497D\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u497E\u497F\u4980\u4981\u4982\u4983"+
-            "\u4984\u4985\u4986\u4987\u4988\u4989\u498A\u498B"+
-            "\u498C\u498D\u498E\u498F\u4990\u4991\u4992\u4993"+
-            "\u4994\u4995\u4996\u4997\u4998\u4999\u499A\u499B"+
-            "\u499C\u499D\u499E\u499F\u49A0\u49A1\u49A2\u49A3"+
-            "\u49A4\u49A5\u49A6\u49A7\u49A8\u49A9\u49AA\u49AB"+
-            "\u49AC\u49AD\u49AE\u49AF\u49B0\u49B1\u49B2\u49B3"+
-            "\u49B4\u49B5\u49B6\u49B7\u49B8\u49B9\u49BA\u49BB"+
-            "\u49BC\u49BD\u49BE\u49BF\u49C0\u49C1\u49C2\u49C3"+
-            "\u49C4\u49C5\u49C6\u49C7\u49C8\u49C9\u49CA\u49CB"+
-            "\u49CC\u49CD\u49CE\u49CF\u49D0\u49D1\u49D2\u49D3"+
-            "\u49D4\u49D5\u49D6\u49D7\u49D8\u49D9\u49DA\u49DB"+
-            "\u49DC\u49DD\u49DE\u49DF\u49E0\u49E1\u49E2\u49E3"+
-            "\u49E4\u49E5\u49E6\u49E7\u49E8\u49E9\u49EA\u49EB"+
-            "\u49EC\u49ED\u49EE\u49EF\u49F0\u49F1\u49F2\u49F3"+
-            "\u49F4\u49F5\u49F6\u49F7\u49F8\u49F9\u49FA\u49FB"+
-            "\u49FC\u49FD\u49FE\u49FF\u4A00\u4A01\u4A02\u4A03"+
-            "\u4A04\u4A05\u4A06\u4A07\u4A08\u4A09\u4A0A\u4A0B"+
-            "\u4A0C\u4A0D\u4A0E\u4A0F\u4A10\u4A11\u0000\u4A12"+
-            "\u4A13\u4A14\u4A15\u4A16\u4A17\u4A18\u4A19\u4A1A"+
-            "\u4A1B\u4A1C\u4A1D\u4A1E\u4A1F\u4A20\u4A21\u4A22"+
-            "\u4A23\u4A24\u4A25\u4A26\u4A27\u4A28\u4A29\u4A2A"+
-            "\u4A2B\u4A2C\u4A2D\u4A2E\u4A2F\u4A30\u4A31\u4A32"+
-            "\u4A33\u4A34\u4A35\u4A36\u4A37\u4A38\u4A39\u4A3A"+
-            "\u4A3B\u4A3C\u4A3D\u4A3E\u4A3F\u4A40\u4A41\u4A42"+
-            "\u4A43\u4A44\u4A45\u4A46\u4A47\u4A48\u4A49\u4A4A"+
-            "\u4A4B\u4A4C\u4A4D\u4A4E\u4A4F\u4A50\u4A51\u4A52"+
-            "\u4A53\u4A54\u4A55\u4A56\u4A57\u4A58\u4A59\u4A5A"+
-            "\u4A5B\u4A5C\u4A5D\u4A5E\u4A5F\u4A60\u4A61\u4A62"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u4A63\u4A64"+
-            "\u4A65\u4A66\u4A67\u4A68\u4A69\u4A6A\u4A6B\u4A6C"+
-            "\u4A6D\u4A6E\u4A6F\u4A70\u4A71\u4A72\u4A73\u4A74"+
-            "\u4A75\u4A76\u4A77\u4A78\u4A79\u4A7A\u4A7B\u4A7C"+
-            "\u4A7D\u4A7E\u4A7F\u4A80\u4A81\u4A82\u4A83\u4A84"+
-            "\u4A85\u4A86\u4A87\u4A88\u4A89\u4A8A\u4A8B\u4A8C"+
-            "\u4A8D\u4A8E\u4A8F\u4A90\u4A91\u4A92\u4A93\u4A94"+
-            "\u4A95\u4A96\u4A97\u4A98\u4A99\u4A9A\u4A9B\u4A9C"+
-            "\u4A9D\u4A9E\u4A9F\u4AA0\u4AA1\u4AA2\u4AA3\u4AA4"+
-            "\u4AA5\u4AA6\u4AA7\u4AA8\u4AA9\u4AAA\u4AAB\u4AAC"+
-            "\u4AAD\u4AAE\u4AAF\u4AB0\u4AB1\u4AB2\u4AB3\u4AB4"+
-            "\u4AB5\u4AB6\u4AB7\u4AB8\u4AB9\u4ABA\u4ABB\u4ABC";
-
-        private final static String innerIndex5=
-            "\u4ABD\u4ABE\u4ABF\u4AC0\u4AC1\u4AC2\u4AC3\u4AC4"+
-            "\u4AC5\u4AC6\u4AC7\u4AC8\u4AC9\u4ACA\u4ACB\u4ACC"+
-            "\u4ACD\u4ACE\u4ACF\u4AD0\u4AD1\u4AD2\u4AD3\u4AD4"+
-            "\u4AD5\u4AD6\u4AD7\u4AD8\u4AD9\u4ADA\u4ADB\u4ADC"+
-            "\u4ADD\u4ADE\u4ADF\u4AE0\u4AE1\u4AE2\u4AE3\u4AE4"+
-            "\u4AE5\u4AE6\u4AE7\u4AE8\u4AE9\u4AEA\u4AEB\u4AEC"+
-            "\u4AED\u4AEE\u4AEF\u4AF0\u4AF1\u4AF2\u4AF3\u4AF4"+
-            "\u4AF5\u4AF6\u4AF7\u4AF8\u4AF9\u4AFA\u4AFB\u4AFC"+
-            "\u4AFD\u4AFE\u4AFF\u4B00\u4B01\u4B02\u4B03\u4B04"+
-            "\u4B05\u4B06\u4B07\u4B08\u4B09\u4B0A\u4B0B\u4B0C"+
-            "\u4B0D\u4B0E\u4B0F\u4B10\u4B11\u4B12\u4B13\u4B14"+
-            "\u4B15\u4B16\u4B17\u4B18\u4B19\u4B1A\u4B1B\u4B1C"+
-            "\u4B1D\u4B1E\u4B1F\u4B20\u4B21\u4B22\u4B23\u4B24"+
-            "\u4B25\u4B26\u4B27\u4B28\u4B29\u4B2A\u4B2B\u4B2C"+
-            "\u4B2D\u4B2E\u4B2F\u4B30\u4B31\u4B32\u4B33\u4B34"+
-            "\u4B35\u4B36\u4B37\u4B38\u4B39\u4B3A\u4B3B\u4B3C"+
-            "\u4B3D\u4B3E\u4B3F\u4B40\u4B41\u4B42\u4B43\u4B44"+
-            "\u4B45\u4B46\u4B47\u4B48\u4B49\u4B4A\u4B4B\u4B4C"+
-            "\u4B4D\u4B4E\u4B4F\u4B50\u4B51\u4B52\u4B53\u4B54"+
-            "\u4B55\u4B56\u4B57\u4B58\u4B59\u4B5A\u4B5B\u4B5C"+
-            "\u4B5D\u4B5E\u4B5F\u4B60\u4B61\u4B62\u4B63\u4B64"+
-            "\u4B65\u4B66\u4B67\u4B68\u4B69\u4B6A\u4B6B\u4B6C"+
-            "\u4B6D\u4B6E\u4B6F\u4B70\u4B71\u4B72\u4B73\u4B74"+
-            "\u4B75\u4B76\u4B77\u4B78\u4B79\u4B7A\u4B7B\u4B7C"+
-            "\u4B7D\u4B7E\u4B7F\u4B80\u4B81\u4B82\u4B83\u4B84"+
-            "\u4B85\u4B86\u4B87\u4B88\u4B89\u4B8A\u4B8B\u4B8C"+
-            "\u4B8D\u4B8E\u4B8F\u4B90\u4B91\u4B92\u4B93\u4B94"+
-            "\u4B95\u4B96\u4B97\u4B98\u4B99\u4B9A\u4B9B\u4B9C"+
-            "\u4B9D\u4B9E\u4B9F\u4BA0\u4BA1\u4BA2\u4BA3\u4BA4"+
-            "\u4BA5\u4BA6\u4BA7\u4BA8\u4BA9\u4BAA\u4BAB\u4BAC"+
-            "\u4BAD\u4BAE\u4BAF\u4BB0\u4BB1\u4BB2\u4BB3\u4BB4"+
-            "\u4BB5\u4BB6\u4BB7\u4BB8\u4BB9\u4BBA\u4BBB\u4BBC"+
-            "\u4BBD\u4BBE\u4BBF\u4BC0\u4BC1\u4BC2\u4BC3\u4BC4"+
-            "\u4BC5\u4BC6\u4BC7\u4BC8\u4BC9\u4BCA\u4BCB\u4BCC"+
-            "\u4BCD\u4BCE\u4BCF\u4BD0\u4BD1\u4BD2\u4BD3\u4BD4"+
-            "\u4BD5\u4BD6\u4BD7\u4BD8\u4BD9\u4BDA\u4BDB\u4BDC"+
-            "\u4BDD\u4BDE\u4BDF\u4BE0\u4BE1\u4BE2\u4BE3\u4BE4"+
-            "\u4BE5\u4BE6\u4BE7\u4BE8\u4BE9\u4BEA\u4BEB\u4BEC"+
-            "\u4BED\u4BEE\u4BEF\u4BF0\u4BF1\u4BF2\u4BF3\u4BF4"+
-            "\u4BF5\u4BF6\u4BF7\u4BF8\u4BF9\u4BFA\u4BFB\u4BFC"+
-            "\u4BFD\u4BFE\u4BFF\u4C00\u4C01\u4C02\u4C03\u4C04"+
-            "\u4C05\u4C06\u4C07\u4C08\u4C09\u4C0A\u4C0B\u4C0C"+
-            "\u4C0D\u4C0E\u4C0F\u4C10\u4C11\u4C12\u4C13\u4C14"+
-            "\u4C15\u4C16\u4C17\u4C18\u4C19\u4C1A\u4C1B\u4C1C"+
-            "\u4C1D\u4C1E\u4C1F\u4C20\u4C21\u4C22\u4C23\u4C24"+
-            "\u4C25\u4C26\u4C27\u4C28\u4C29\u4C2A\u4C2B\u4C2C"+
-            "\u4C2D\u4C2E\u4C2F\u4C30\u4C31\u4C32\u4C33\u4C34"+
-            "\u4C35\u4C36\u4C37\u4C38\u4C39\u4C3A\u4C3B\u4C3C"+
-            "\u4C3D\u4C3E\u4C3F\u4C40\u4C41\u4C42\u4C43\u4C44"+
-            "\u4C45\u4C46\u4C47\u4C48\u4C49\u4C4A\u4C4B\u4C4C"+
-            "\u4C4D\u4C4E\u4C4F\u4C50\u4C51\u4C52\u4C53\u4C54"+
-            "\u4C55\u4C56\u4C57\u4C58\u4C59\u4C5A\u4C5B\u4C5C"+
-            "\u4C5D\u4C5E\u4C5F\u4C60\u4C61\u4C62\u4C63\u4C64"+
-            "\u4C65\u4C66\u4C67\u4C68\u4C69\u4C6A\u4C6B\u4C6C"+
-            "\u4C6D\u4C6E\u4C6F\u4C70\u4C71\u4C72\u4C73\u4C74"+
-            "\u4C75\u4C76\u4C77\u4C78\u4C79\u4C7A\u4C7B\u4C7C"+
-            "\u4C7D\u4C7E\u4C7F\u4C80\u4C81\u4C82\u4C83\u4C84"+
-            "\u4C85\u4C86\u4C87\u4C88\u4C89\u4C8A\u4C8B\u4C8C"+
-            "\u4C8D\u4C8E\u4C8F\u4C90\u4C91\u4C92\u4C93\u4C94"+
-            "\u4C95\u4C96\u4C97\u4C98\u4C99\u4C9A\u4C9B\u4C9C"+
-            "\u4C9D\u4C9E\u4C9F\u4CA0\u4CA1\u4CA2\u4CA3\u4CA4"+
-            "\u4CA5\u4CA6\u4CA7\u4CA8\u4CA9\u4CAA\u4CAB\u4CAC"+
-            "\u4CAD\u4CAE\u4CAF\u4CB0\u4CB1\u4CB2\u4CB3\u4CB4"+
-            "\u4CB5\u4CB6\u4CB7\u4CB8\u4CB9\u4CBA\u4CBB\u4CBC"+
-            "\u4CBD\u4CBE\u4CBF\u4CC0\u4CC1\u4CC2\u4CC3\u4CC4"+
-            "\u4CC5\u4CC6\u4CC7\u4CC8\u4CC9\u4CCA\u4CCB\u4CCC"+
-            "\u4CCD\u4CCE\u4CCF\u4CD0\u4CD1\u4CD2\u4CD3\u4CD4"+
-            "\u4CD5\u4CD6\u4CD7\u4CD8\u4CD9\u4CDA\u4CDB\u4CDC"+
-            "\u4CDD\u4CDE\u4CDF\u4CE0\u4CE1\u4CE2\u4CE3\u4CE4"+
-            "\u4CE5\u4CE6\u4CE7\u4CE8\u4CE9\u4CEA\u4CEB\u4CEC"+
-            "\u4CED\u4CEE\u4CEF\u4CF0\u4CF1\u4CF2\u4CF3\u4CF4"+
-            "\u4CF5\u4CF6\u4CF7\u4CF8\u4CF9\u4CFA\u4CFB\u4CFC"+
-            "\u4CFD\u4CFE\u4CFF\u4D00\u4D01\u4D02\u4D03\u4D04"+
-            "\u4D05\u4D06\u4D07\u4D08\u4D09\u4D0A\u4D0B\u4D0C"+
-            "\u4D0D\u4D0E\u4D0F\u4D10\u4D11\u4D12\u4D13\u4D14"+
-            "\u4D15\u4D16\u4D17\u4D18\u4D19\u4D1A\u4D1B\u4D1C"+
-            "\u4D1D\u4D1E\u4D1F\u4D20\u4D21\u4D22\u4D23\u4D24"+
-            "\u4D25\u4D26\u4D27\u4D28\u4D29\u4D2A\u4D2B\u4D2C"+
-            "\u4D2D\u4D2E\u4D2F\u4D30\u4D31\u4D32\u4D33\u4D34"+
-            "\u4D35\u4D36\u4D37\u4D38\u4D39\u4D3A\u4D3B\u4D3C"+
-            "\u4D3D\u4D3E\u4D3F\u4D40\u4D41\u4D42\u4D43\u4D44"+
-            "\u4D45\u4D46\u4D47\u4D48\u4D49\u4D4A\u4D4B\u4D4C"+
-            "\u4D4D\u4D4E\u4D4F\u4D50\u4D51\u4D52\u4D53\u4D54"+
-            "\u4D55\u4D56\u4D57\u4D58\u4D59\u4D5A\u4D5B\u4D5C"+
-            "\u4D5D\u4D5E\u4D5F\u4D60\u4D61\u4D62\u4D63\u4D64"+
-            "\u4D65\u4D66\u4D67\u4D68\u4D69\u4D6A\u4D6B\u4D6C"+
-            "\u4D6D\u4D6E\u4D6F\u4D70\u4D71\u4D72\u4D73\u4D74"+
-            "\u4D75\u4D76\u4D77\u4D78\u4D79\u4D7A\u4D7B\u4D7C"+
-            "\u4D7D\u4D7E\u4D7F\u4D80\u4D81\u4D82\u4D83\u4D84"+
-            "\u4D85\u4D86\u4D87\u4D88\u4D89\u4D8A\u4D8B\u4D8C"+
-            "\u4D8D\u4D8E\u4D8F\u4D90\u4D91\u4D92\u4D93\u4D94"+
-            "\u4D95\u4D96\u4D97\u4D98\u4D99\u4D9A\u4D9B\u4D9C"+
-            "\u4D9D\u4D9E\u4D9F\u4DA0\u4DA1\u4DA2\u4DA3\u4DA4"+
-            "\u4DA5\u4DA6\u4DA7\u4DA8\u4DA9\u4DAA\u4DAB\u4DAC"+
-            "\u4DAD\u4DAE\u4DAF\u4DB0\u4DB1\u4DB2\u4DB3\u4DB4"+
-            "\u4DB5\u4DB6\u4DB7\u4DB8\u4DB9\u4DBA\u4DBB\u4DBC"+
-            "\u4DBD\u4DBE\u4DBF\u4DC0\u4DC1\u4DC2\u4DC3\u4DC4"+
-            "\u4DC5\u4DC6\u4DC7\u4DC8\u4DC9\u4DCA\u4DCB\u4DCC"+
-            "\u4DCD\u4DCE\u4DCF\u4DD0\u4DD1\u4DD2\u4DD3\u4DD4"+
-            "\u4DD5\u4DD6\u4DD7\u4DD8\u4DD9\u4DDA\u4DDB\u4DDC"+
-            "\u4DDD\u4DDE\u4DDF\u4DE0\u4DE1\u4DE2\u4DE3\u4DE4"+
-            "\u4DE5\u4DE6\u4DE7\u4DE8\u4DE9\u4DEA\u4DEB\u4DEC"+
-            "\u4DED\u4DEE\u4DEF\u4DF0\u4DF1\u4DF2\u4DF3\u4DF4"+
-            "\u4DF5\u4DF6\u4DF7\u4DF8\u4DF9\u4DFA\u4DFB\u4DFC"+
-            "\u4DFD\u4DFE\u4DFF\u4E00\u4E01\u4E02\u4E03\u4E04"+
-            "\u4E05\u4E06\u4E07\u4E08\u4E09\u4E0A\u4E0B\u4E0C"+
-            "\u4E0D\u4E0E\u4E0F\u4E10\u4E11\u4E12\u4E13\u4E14"+
-            "\u4E15\u4E16\u4E17\u4E18\u4E19\u4E1A\u4E1B\u4E1C"+
-            "\u4E1D\u4E1E\u4E1F\u4E20\u4E21\u4E22\u4E23\u4E24"+
-            "\u4E25\u4E26\u4E27\u4E28\u4E29\u4E2A\u4E2B\u4E2C"+
-            "\u4E2D\u4E2E\u4E2F\u4E30\u4E31\u4E32\u4E33\u4E34"+
-            "\u4E35\u4E36\u4E37\u4E38\u4E39\u4E3A\u4E3B\u4E3C"+
-            "\u4E3D\u4E3E\u4E3F\u4E40\u4E41\u4E42\u4E43\u4E44"+
-            "\u4E45\u4E46\u4E47\u4E48\u4E49\u4E4A\u4E4B\u4E4C"+
-            "\u4E4D\u4E4E\u4E4F\u4E50\u4E51\u4E52\u4E53\u4E54"+
-            "\u4E55\u4E56\u4E57\u4E58\u4E59\u4E5A\u4E5B\u4E5C"+
-            "\u4E5D\u4E5E\u4E5F\u4E60\u4E61\u4E62\u4E63\u4E64"+
-            "\u4E65\u4E66\u4E67\u4E68\u4E69\u4E6A\u4E6B\u4E6C"+
-            "\u4E6D\u4E6E\u4E6F\u4E70\u4E71\u4E72\u4E73\u4E74"+
-            "\u4E75\u4E76\u4E77\u4E78\u4E79\u4E7A\u4E7B\u4E7C"+
-            "\u4E7D\u4E7E\u4E7F\u4E80\u4E81\u4E82\u4E83\u4E84"+
-            "\u4E85\u4E86\u4E87\u4E88\u4E89\u4E8A\u4E8B\u4E8C"+
-            "\u4E8D\u4E8E\u4E8F\u4E90\u4E91\u4E92\u4E93\u4E94"+
-            "\u4E95\u4E96\u4E97\u4E98\u4E99\u4E9A\u4E9B\u4E9C"+
-            "\u4E9D\u4E9E\u4E9F\u4EA0\u4EA1\u4EA2\u4EA3\u4EA4"+
-            "\u4EA5\u4EA6\u4EA7\u4EA8\u4EA9\u4EAA\u4EAB\u4EAC"+
-            "\u4EAD\u4EAE\u4EAF\u4EB0\u4EB1\u4EB2\u4EB3\u4EB4"+
-            "\u4EB5\u4EB6\u4EB7\u4EB8\u4EB9\u4EBA\u4EBB\u4EBC"+
-            "\u4EBD\u4EBE\u4EBF\u4EC0\u4EC1\u4EC2\u4EC3\u4EC4"+
-            "\u4EC5\u4EC6\u4EC7\u4EC8\u4EC9\u4ECA\u4ECB\u4ECC"+
-            "\u4ECD\u4ECE\u4ECF\u4ED0\u4ED1\u4ED2\u4ED3\u4ED4"+
-            "\u4ED5\u4ED6\u4ED7\u4ED8\u4ED9\u4EDA\u4EDB\u4EDC"+
-            "\u4EDD\u4EDE\u4EDF\u4EE0\u4EE1\u4EE2\u4EE3\u4EE4"+
-            "\u4EE5\u4EE6\u4EE7\u4EE8\u4EE9\u4EEA\u4EEB\u4EEC"+
-            "\u4EED\u4EEE\u4EEF\u4EF0\u4EF1\u4EF2\u4EF3\u4EF4"+
-            "\u4EF5\u4EF6\u4EF7\u4EF8\u4EF9\u4EFA\u4EFB\u4EFC"+
-            "\u4EFD\u4EFE\u4EFF\u4F00\u4F01\u4F02\u4F03\u4F04"+
-            "\u4F05\u4F06\u4F07\u4F08\u4F09\u4F0A\u4F0B\u4F0C"+
-            "\u4F0D\u4F0E\u4F0F\u4F10\u4F11\u4F12\u4F13\u4F14"+
-            "\u4F15\u4F16\u4F17\u4F18\u4F19\u4F1A\u4F1B\u4F1C"+
-            "\u4F1D\u4F1E\u4F1F\u4F20\u4F21\u4F22\u4F23\u4F24"+
-            "\u4F25\u4F26\u4F27\u4F28\u4F29\u4F2A\u4F2B\u4F2C"+
-            "\u4F2D\u4F2E\u4F2F\u4F30\u4F31\u4F32\u4F33\u4F34"+
-            "\u4F35\u4F36\u4F37\u4F38\u4F39\u4F3A\u4F3B\u4F3C"+
-            "\u4F3D\u4F3E\u4F3F\u4F40\u4F41\u4F42\u4F43\u4F44"+
-            "\u4F45\u4F46\u4F47\u4F48\u4F49\u4F4A\u4F4B\u4F4C"+
-            "\u4F4D\u4F4E\u4F4F\u4F50\u4F51\u4F52\u4F53\u4F54"+
-            "\u4F55\u4F56\u4F57\u4F58\u4F59\u4F5A\u4F5B\u4F5C"+
-            "\u4F5D\u4F5E\u4F5F\u4F60\u4F61\u4F62\u4F63\u4F64"+
-            "\u4F65\u4F66\u4F67\u4F68\u4F69\u4F6A\u4F6B\u4F6C"+
-            "\u4F6D\u4F6E\u4F6F\u4F70\u4F71\u4F72\u4F73\u4F74"+
-            "\u4F75\u4F76\u4F77\u4F78\u4F79\u4F7A\u4F7B\u4F7C"+
-            "\u4F7D\u4F7E\u4F7F\u4F80\u4F81\u4F82\u4F83\u4F84"+
-            "\u4F85\u4F86\u4F87\u4F88\u4F89\u4F8A\u4F8B\u4F8C"+
-            "\u4F8D\u4F8E\u4F8F\u4F90\u4F91\u4F92\u4F93\u4F94"+
-            "\u4F95\u4F96\u4F97\u4F98\u4F99\u4F9A\u4F9B\u4F9C"+
-            "\u4F9D\u4F9E\u4F9F\u4FA0\u4FA1\u4FA2\u4FA3\u4FA4"+
-            "\u4FA5\u4FA6\u4FA7\u4FA8\u4FA9\u4FAA\u4FAB\u4FAC"+
-            "\u4FAD\u4FAE\u4FAF\u4FB0\u4FB1\u4FB2\u4FB3\u4FB4"+
-            "\u4FB5\u4FB6\u4FB7\u4FB8\u4FB9\u4FBA\u4FBB\u4FBC"+
-            "\u4FBD\u4FBE\u4FBF\u4FC0\u4FC1\u4FC2\u4FC3\u4FC4"+
-            "\u4FC5\u4FC6\u4FC7\u4FC8\u4FC9\u4FCA\u4FCB\u4FCC"+
-            "\u4FCD\u4FCE\u4FCF\u4FD0\u4FD1\u4FD2\u4FD3\u4FD4"+
-            "\u4FD5\u4FD6\u4FD7\u4FD8\u4FD9\u4FDA\u4FDB\u4FDC"+
-            "\u4FDD\u4FDE\u4FDF\u4FE0\u4FE1\u4FE2\u4FE3\u4FE4"+
-            "\u4FE5\u4FE6\u4FE7\u4FE8\u4FE9\u4FEA\u4FEB\u4FEC"+
-            "\u4FED\u4FEE\u4FEF\u4FF0\u4FF1\u4FF2\u4FF3\u4FF4"+
-            "\u4FF5\u4FF6\u4FF7\u4FF8\u4FF9\u4FFA\u4FFB\u4FFC"+
-            "\u4FFD\u4FFE\u4FFF\u5000\u5001\u5002\u5003\u5004"+
-            "\u5005\u5006\u5007\u5008\u5009\u500A\u500B\u500C"+
-            "\u500D\u500E\u500F\u5010\u5011\u5012\u5013\u5014"+
-            "\u5015\u5016\u5017\u5018\u5019\u501A\u501B\u501C"+
-            "\u501D\u501E\u501F\u5020\u5021\u5022\u5023\u5024"+
-            "\u5025\u5026\u5027\u5028\u5029\u502A\u502B\u502C"+
-            "\u502D\u502E\u502F\u5030\u5031\u5032\u5033\u5034"+
-            "\u5035\u5036\u5037\u5038\u5039\u503A\u503B\u503C"+
-            "\u503D\u503E\u503F\u5040\u5041\u5042\u5043\u5044"+
-            "\u5045\u5046\u5047\u5048\u5049\u504A\u504B\u504C"+
-            "\u504D\u504E\u504F\u5050\u5051\u5052\u5053\u5054"+
-            "\u5055\u5056\u5057\u5058\u5059\u505A\u505B\u505C"+
-            "\u505D\u505E\u505F\u5060\u5061\u5062\u5063\u5064"+
-            "\u5065\u5066\u5067\u5068\u5069\u506A\u506B\u506C"+
-            "\u506D\u506E\u506F\u5070\u5071\u5072\u5073\u5074"+
-            "\u5075\u5076\u5077\u5078\u5079\u507A\u507B\u507C"+
-            "\u507D\u507E\u507F\u5080\u5081\u5082\u5083\u5084"+
-            "\u5085\u5086\u5087\u5088\u5089\u508A\u508B\u508C"+
-            "\u508D\u508E\u508F\u5090\u5091\u5092\u5093\u5094"+
-            "\u5095\u5096\u5097\u5098\u5099\u509A\u509B\u509C"+
-            "\u509D\u509E\u509F\u50A0\u50A1\u50A2\u50A3\u50A4"+
-            "\u50A5\u50A6\u50A7\u50A8\u50A9\u50AA\u50AB\u50AC"+
-            "\u50AD\u50AE\u50AF\u50B0\u50B1\u50B2\u50B3\u50B4"+
-            "\u50B5\u50B6\u50B7\u50B8\u50B9\u50BA\u50BB\u50BC"+
-            "\u50BD\u50BE\u50BF\u50C0\u50C1\u50C2\u50C3\u50C4"+
-            "\u50C5\u50C6\u50C7\u50C8\u50C9\u50CA\u50CB\u50CC"+
-            "\u50CD\u50CE\u50CF\u50D0\u50D1\u50D2\u50D3\u50D4"+
-            "\u50D5\u50D6\u50D7\u50D8\u50D9\u50DA\u50DB\u50DC"+
-            "\u50DD\u50DE\u50DF\u50E0\u50E1\u50E2\u50E3\u50E4"+
-            "\u50E5\u50E6\u50E7\u50E8\u50E9\u50EA\u50EB\u50EC"+
-            "\u50ED\u50EE\u50EF\u50F0\u50F1\u50F2\u50F3\u50F4"+
-            "\u50F5\u50F6\u50F7\u50F8\u50F9\u50FA\u50FB\u50FC"+
-            "\u50FD\u50FE\u50FF\u5100\u5101\u5102\u5103\u5104"+
-            "\u5105\u5106\u5107\u5108\u5109\u510A\u510B\u510C"+
-            "\u510D\u510E\u510F\u5110\u5111\u5112\u5113\u5114"+
-            "\u5115\u5116\u5117\u5118\u5119\u511A\u511B\u511C"+
-            "\u511D\u511E\u511F\u5120\u5121\u5122\u5123\u5124"+
-            "\u5125\u5126\u5127\u5128\u5129\u512A\u512B\u512C"+
-            "\u512D\u512E\u512F\u5130\u5131\u5132\u5133\u5134"+
-            "\u5135\u5136\u5137\u5138\u5139\u513A\u513B\u513C"+
-            "\u513D\u513E\u513F\u5140\u5141\u5142\u5143\u5144"+
-            "\u5145\u5146\u5147\u5148\u5149\u514A\u514B\u514C"+
-            "\u514D\u514E\u514F\u5150\u5151\u5152\u5153\u5154"+
-            "\u5155\u5156\u5157\u5158\u5159\u515A\u515B\u515C"+
-            "\u515D\u515E\u515F\u5160\u5161\u5162\u5163\u5164"+
-            "\u5165\u5166\u5167\u5168\u5169\u516A\u516B\u516C"+
-            "\u516D\u516E\u516F\u5170\u5171\u5172\u5173\u5174"+
-            "\u5175\u5176\u5177\u5178\u5179\u517A\u517B\u517C"+
-            "\u517D\u517E\u517F\u5180\u5181\u5182\u5183\u5184"+
-            "\u5185\u5186\u5187\u5188\u5189\u518A\u518B\u518C"+
-            "\u518D\u518E\u518F\u5190\u5191\u5192\u5193\u5194"+
-            "\u5195\u5196\u5197\u5198\u5199\u519A\u519B\u519C"+
-            "\u519D\u519E\u519F\u51A0\u51A1\u51A2\u51A3\u51A4"+
-            "\u51A5\u51A6\u51A7\u51A8\u51A9\u51AA\u51AB\u51AC"+
-            "\u51AD\u51AE\u51AF\u51B0\u51B1\u51B2\u51B3\u51B4"+
-            "\u51B5\u51B6\u51B7\u51B8\u51B9\u51BA\u51BB\u51BC"+
-            "\u51BD\u51BE\u51BF\u51C0\u51C1\u51C2\u51C3\u51C4"+
-            "\u51C5\u51C6\u51C7\u51C8\u51C9\u51CA\u51CB\u51CC"+
-            "\u51CD\u51CE\u51CF\u51D0\u51D1\u51D2\u51D3\u51D4"+
-            "\u51D5\u51D6\u51D7\u51D8\u51D9\u51DA\u51DB\u51DC"+
-            "\u51DD\u51DE\u51DF\u51E0\u51E1\u51E2\u51E3\u51E4"+
-            "\u51E5\u51E6\u51E7\u51E8\u51E9\u51EA\u51EB\u51EC"+
-            "\u51ED\u51EE\u51EF\u51F0\u51F1\u51F2\u51F3\u51F4"+
-            "\u51F5\u51F6\u51F7\u51F8\u51F9\u51FA\u51FB\u51FC"+
-            "\u51FD\u51FE\u51FF\u5200\u5201\u5202\u5203\u5204"+
-            "\u5205\u5206\u5207\u5208\u5209\u520A\u520B\u520C"+
-            "\u520D\u520E\u520F\u5210\u5211\u5212\u5213\u5214"+
-            "\u5215\u5216\u5217\u5218\u5219\u521A\u521B\u521C"+
-            "\u521D\u521E\u521F\u5220\u5221\u5222\u5223\u5224"+
-            "\u5225\u5226\u5227\u5228\u5229\u522A\u522B\u522C"+
-            "\u522D\u522E\u522F\u5230\u5231\u5232\u5233\u5234"+
-            "\u5235\u5236\u5237\u5238\u5239\u523A\u523B\u523C"+
-            "\u523D\u523E\u523F\u5240\u5241\u5242\u5243\u5244"+
-            "\u5245\u5246\u5247\u5248\u5249\u524A\u524B\u524C"+
-            "\u524D\u524E\u524F\u5250\u5251\u5252\u5253\u5254"+
-            "\u5255\u5256\u5257\u5258\u5259\u525A\u525B\u525C"+
-            "\u525D\u525E\u525F\u5260\u5261\u5262\u5263\u5264"+
-            "\u5265\u5266\u5267\u5268\u5269\u526A\u526B\u526C"+
-            "\u526D\u526E\u526F\u5270\u5271\u5272\u5273\u5274"+
-            "\u5275\u5276\u5277\u5278\u5279\u527A\u527B\u527C"+
-            "\u527D\u527E\u527F\u5280\u5281\u5282\u5283\u5284"+
-            "\u5285\u5286\u5287\u5288\u5289\u528A\u528B\u528C"+
-            "\u528D\u528E\u528F\u5290\u5291\u5292\u5293\u5294"+
-            "\u5295\u5296\u5297\u5298\u5299\u529A\u529B\u529C"+
-            "\u529D\u529E\u529F\u52A0\u52A1\u52A2\u52A3\u52A4"+
-            "\u52A5\u52A6\u52A7\u52A8\u52A9\u52AA\u52AB\u52AC"+
-            "\u52AD\u52AE\u52AF\u52B0\u52B1\u52B2\u52B3\u52B4"+
-            "\u52B5\u52B6\u52B7\u52B8\u52B9\u52BA\u52BB\u52BC"+
-            "\u52BD\u52BE\u52BF\u52C0\u52C1\u52C2\u52C3\u52C4"+
-            "\u52C5\u52C6\u52C7\u52C8\u52C9\u52CA\u52CB\u52CC"+
-            "\u52CD\u52CE\u52CF\u52D0\u52D1\u52D2\u52D3\u52D4"+
-            "\u52D5\u52D6\u52D7\u52D8\u52D9\u52DA\u52DB\u52DC"+
-            "\u52DD\u52DE\u52DF\u52E0\u52E1\u52E2\u52E3\u52E4"+
-            "\u52E5\u52E6\u52E7\u52E8\u52E9\u52EA\u52EB\u52EC"+
-            "\u52ED\u52EE\u52EF\u52F0\u52F1\u52F2\u52F3\u52F4"+
-            "\u52F5\u52F6\u52F7\u52F8\u52F9\u52FA\u52FB\u52FC"+
-            "\u52FD\u52FE\u52FF\u5300\u5301\u5302\u5303\u5304"+
-            "\u5305\u5306\u5307\u5308\u5309\u530A\u530B\u530C"+
-            "\u530D\u530E\u530F\u5310\u5311\u5312\u5313\u5314"+
-            "\u5315\u5316\u5317\u5318\u5319\u531A\u531B\u531C"+
-            "\u531D\u531E\u531F\u5320\u5321\u5322\u5323\u5324"+
-            "\u5325\u5326\u5327\u5328\u5329\u532A\u532B\u532C"+
-            "\u532D\u532E\u532F\u5330\u5331\u5332\u5333\u5334"+
-            "\u5335\u5336\u5337\u5338\u5339\u533A\u533B\u533C"+
-            "\u533D\u533E\u533F\u5340\u5341\u5342\u5343\u5344"+
-            "\u5345\u5346\u5347\u5348\u5349\u534A\u534B\u534C"+
-            "\u534D\u534E\u534F\u5350\u5351\u5352\u5353\u5354"+
-            "\u5355\u5356\u5357\u5358\u5359\u535A\u535B\u535C"+
-            "\u535D\u535E\u535F\u5360\u5361\u5362\u5363\u5364"+
-            "\u5365\u5366\u5367\u5368\u5369\u536A\u536B\u536C"+
-            "\u536D\u536E\u536F\u5370\u5371\u5372\u5373\u5374"+
-            "\u5375\u5376\u5377\u5378\u5379\u537A\u537B\u537C"+
-            "\u537D\u537E\u537F\u5380\u5381\u5382\u5383\u5384"+
-            "\u5385\u5386\u5387\u5388\u5389\u538A\u538B\u538C"+
-            "\u538D\u538E\u538F\u5390\u5391\u5392\u5393\u5394"+
-            "\u5395\u5396\u5397\u5398\u5399\u539A\u539B\u539C"+
-            "\u539D\u539E\u539F\u53A0\u53A1\u53A2\u53A3\u53A4"+
-            "\u53A5\u53A6\u53A7\u53A8\u53A9\u53AA\u53AB\u53AC"+
-            "\u53AD\u53AE\u53AF\u53B0\u53B1\u53B2\u53B3\u53B4"+
-            "\u53B5\u53B6\u53B7\u53B8\u53B9\u53BA\u53BB\u53BC"+
-            "\u53BD\u53BE\u53BF\u53C0\u53C1\u53C2\u53C3\u53C4"+
-            "\u53C5\u53C6\u53C7\u53C8\u53C9\u53CA\u53CB\u53CC"+
-            "\u53CD\u53CE\u53CF\u53D0\u53D1\u53D2\u53D3\u53D4"+
-            "\u53D5\u53D6\u53D7\u53D8\u53D9\u53DA\u53DB\u53DC"+
-            "\u53DD\u53DE\u53DF\u53E0\u53E1\u53E2\u53E3\u53E4"+
-            "\u53E5\u53E6\u53E7\u53E8\u53E9\u53EA\u53EB\u53EC"+
-            "\u53ED\u53EE\u53EF\u53F0\u53F1\u53F2\u53F3\u53F4"+
-            "\u53F5\u53F6\u53F7\u53F8\u53F9\u53FA\u53FB\u53FC"+
-            "\u53FD\u53FE\u53FF\u5400\u5401\u5402\u5403\u5404"+
-            "\u5405\u5406\u5407\u5408\u5409\u540A\u540B\u540C"+
-            "\u540D\u540E\u540F\u5410\u5411\u5412\u5413\u5414"+
-            "\u5415\u5416\u5417\u5418\u5419\u541A\u541B\u541C"+
-            "\u541D\u541E\u541F\u5420\u5421\u5422\u5423\u5424"+
-            "\u5425\u5426\u5427\u5428\u5429\u542A\u542B\u542C"+
-            "\u542D\u542E\u542F\u5430\u5431\u5432\u5433\u5434"+
-            "\u5435\u5436\u5437\u5438\u5439\u543A\u543B\u543C"+
-            "\u543D\u543E\u543F\u5440\u5441\u5442\u5443\u5444"+
-            "\u5445\u5446\u5447\u5448\u5449\u544A\u544B\u544C"+
-            "\u544D\u544E\u544F\u5450\u5451\u5452\u5453\u5454"+
-            "\u5455\u5456\u5457\u5458\u5459\u545A\u545B\u545C"+
-            "\u545D\u545E\u545F\u5460\u5461\u5462\u5463\u5464"+
-            "\u5465\u5466\u5467\u5468\u5469\u546A\u546B\u546C"+
-            "\u546D\u546E\u546F\u5470\u5471\u5472\u5473\u5474"+
-            "\u5475\u5476\u5477\u5478\u5479\u547A\u547B\u547C"+
-            "\u547D\u547E\u547F\u5480\u5481\u5482\u5483\u5484"+
-            "\u5485\u5486\u5487\u5488\u5489\u548A\u548B\u548C"+
-            "\u548D\u548E\u548F\u5490\u5491\u5492\u5493\u5494"+
-            "\u5495\u5496\u5497\u5498\u5499\u549A\u549B\u549C"+
-            "\u549D\u549E\u549F\u54A0\u54A1\u54A2\u54A3\u54A4"+
-            "\u54A5\u54A6\u54A7\u54A8\u54A9\u54AA\u54AB\u54AC"+
-            "\u54AD\u54AE\u54AF\u54B0\u54B1\u54B2\u54B3\u54B4"+
-            "\u54B5\u54B6\u54B7\u54B8\u54B9\u54BA\u54BB\u54BC"+
-            "\u54BD\u54BE\u54BF\u54C0\u54C1\u54C2\u54C3\u54C4"+
-            "\u54C5\u54C6\u54C7\u54C8\u54C9\u54CA\u54CB\u54CC"+
-            "\u54CD\u54CE\u54CF\u54D0\u54D1\u54D2\u54D3\u54D4"+
-            "\u54D5\u54D6\u54D7\u54D8\u54D9\u54DA\u54DB\u54DC"+
-            "\u54DD\u54DE\u54DF\u54E0\u54E1\u54E2\u54E3\u54E4"+
-            "\u54E5\u54E6\u54E7\u54E8\u54E9\u54EA\u54EB\u54EC"+
-            "\u54ED\u54EE\u54EF\u54F0\u54F1\u54F2\u54F3\u54F4"+
-            "\u54F5\u54F6\u54F7\u54F8\u54F9\u54FA\u54FB\u54FC"+
-            "\u54FD\u54FE\u54FF\u5500\u5501\u5502\u5503\u5504"+
-            "\u5505\u5506\u5507\u5508\u5509\u550A\u550B\u550C"+
-            "\u550D\u550E\u550F\u5510\u5511\u5512\u5513\u5514"+
-            "\u5515\u5516\u5517\u5518\u5519\u551A\u551B\u551C"+
-            "\u551D\u551E\u551F\u5520\u5521\u5522\u5523\u5524"+
-            "\u5525\u5526\u5527\u5528\u5529\u552A\u552B\u552C"+
-            "\u552D\u552E\u552F\u5530\u5531\u5532\u5533\u5534"+
-            "\u5535\u5536\u5537\u5538\u5539\u553A\u553B\u553C"+
-            "\u553D\u553E\u553F\u5540\u5541\u5542\u5543\u5544"+
-            "\u5545\u5546\u5547\u5548\u5549\u554A\u554B\u554C"+
-            "\u554D\u554E\u554F\u5550\u5551\u5552\u5553\u5554"+
-            "\u5555\u5556\u5557\u5558\u5559\u555A\u555B\u555C"+
-            "\u555D\u555E\u555F\u5560\u5561\u5562\u5563\u5564"+
-            "\u5565\u5566\u5567\u5568\u5569\u556A\u556B\u556C"+
-            "\u556D\u556E\u556F\u5570\u5571\u5572\u5573\u5574"+
-            "\u5575\u5576\u5577\u5578\u5579\u557A\u557B\u557C"+
-            "\u557D\u557E\u557F\u5580\u5581\u5582\u5583\u5584"+
-            "\u5585\u5586\u5587\u5588\u5589\u558A\u558B\u558C"+
-            "\u558D\u558E\u558F\u5590\u5591\u5592\u5593\u5594"+
-            "\u5595\u5596\u5597\u5598\u5599\u559A\u559B\u559C"+
-            "\u559D\u559E\u559F\u55A0\u55A1\u55A2\u55A3\u55A4"+
-            "\u55A5\u55A6\u55A7\u55A8\u55A9\u55AA\u55AB\u55AC"+
-            "\u55AD\u55AE\u55AF\u55B0\u55B1\u55B2\u55B3\u55B4"+
-            "\u55B5\u55B6\u55B7\u55B8\u55B9\u55BA\u55BB\u55BC"+
-            "\u55BD\u55BE\u55BF\u55C0\u55C1\u55C2\u55C3\u55C4"+
-            "\u55C5\u55C6\u55C7\u55C8\u55C9\u55CA\u55CB\u55CC"+
-            "\u55CD\u55CE\u55CF\u55D0\u55D1\u55D2\u55D3\u55D4"+
-            "\u55D5\u55D6\u55D7\u55D8\u55D9\u55DA\u55DB\u55DC"+
-            "\u55DD\u55DE\u55DF\u55E0\u55E1\u55E2\u55E3\u55E4"+
-            "\u55E5\u55E6\u55E7\u55E8\u55E9\u55EA\u55EB\u55EC"+
-            "\u55ED\u55EE\u55EF\u55F0\u55F1\u55F2\u55F3\u55F4"+
-            "\u55F5\u55F6\u55F7\u55F8\u55F9\u55FA\u55FB\u55FC"+
-            "\u55FD\u55FE\u55FF\u5600\u5601\u5602\u5603\u5604"+
-            "\u5605\u5606\u5607\u5608\u5609\u560A\u560B\u560C"+
-            "\u560D\u560E\u560F\u5610\u5611\u5612\u5613\u5614"+
-            "\u5615\u5616\u5617\u5618\u5619\u561A\u561B\u561C"+
-            "\u561D\u561E\u561F\u5620\u5621\u5622\u5623\u5624"+
-            "\u5625\u5626\u5627\u5628\u5629\u562A\u562B\u562C"+
-            "\u562D\u562E\u562F\u5630\u5631\u5632\u5633\u5634"+
-            "\u5635\u5636\u5637\u5638\u5639\u563A\u563B\u563C"+
-            "\u563D\u563E\u563F\u5640\u5641\u5642\u5643\u5644"+
-            "\u5645\u5646\u5647\u5648\u5649\u564A\u564B\u564C"+
-            "\u564D\u564E\u564F\u5650\u5651\u5652\u5653\u5654"+
-            "\u5655\u5656\u5657\u5658\u5659\u565A\u565B\u565C"+
-            "\u565D\u565E\u565F\u5660\u5661\u5662\u5663\u5664"+
-            "\u5665\u5666\u5667\u5668\u5669\u566A\u566B\u566C"+
-            "\u566D\u566E\u566F\u5670\u5671\u5672\u5673\u5674"+
-            "\u5675\u5676\u5677\u5678\u5679\u567A\u567B\u567C"+
-            "\u567D\u567E\u567F\u5680\u5681\u5682\u5683\u5684"+
-            "\u5685\u5686\u5687\u5688\u5689\u568A\u568B\u568C"+
-            "\u568D\u568E\u568F\u5690\u5691\u5692\u5693\u5694"+
-            "\u5695\u5696\u5697\u5698\u5699\u569A\u569B\u569C"+
-            "\u569D\u569E\u569F\u56A0\u56A1\u56A2\u56A3\u56A4"+
-            "\u56A5\u56A6\u56A7\u56A8\u56A9\u56AA\u56AB\u56AC"+
-            "\u56AD\u56AE\u56AF\u56B0\u56B1\u56B2\u56B3\u56B4"+
-            "\u56B5\u56B6\u56B7\u56B8\u56B9\u56BA\u56BB\u56BC"+
-            "\u56BD\u56BE\u56BF\u56C0\u56C1\u56C2\u56C3\u56C4"+
-            "\u56C5\u56C6\u56C7\u56C8\u56C9\u56CA\u56CB\u56CC"+
-            "\u56CD\u56CE\u56CF\u56D0\u56D1\u56D2\u56D3\u56D4"+
-            "\u56D5\u56D6\u56D7\u56D8\u56D9\u56DA\u56DB\u56DC"+
-            "\u56DD\u56DE\u56DF\u56E0\u56E1\u56E2\u56E3\u56E4"+
-            "\u56E5\u56E6\u56E7\u56E8\u56E9\u56EA\u56EB\u56EC"+
-            "\u56ED\u56EE\u56EF\u56F0\u56F1\u56F2\u56F3\u56F4"+
-            "\u56F5\u56F6\u56F7\u56F8\u56F9\u56FA\u56FB\u56FC"+
-            "\u56FD\u56FE\u56FF\u5700\u5701\u5702\u5703\u5704"+
-            "\u5705\u5706\u5707\u5708\u5709\u570A\u570B\u570C"+
-            "\u570D\u570E\u570F\u5710\u5711\u5712\u5713\u5714"+
-            "\u5715\u5716\u5717\u5718\u5719\u571A\u571B\u571C"+
-            "\u571D\u571E\u571F\u5720\u5721\u5722\u5723\u5724"+
-            "\u5725\u5726\u5727\u5728\u5729\u572A\u572B\u572C"+
-            "\u572D\u572E\u572F\u5730\u5731\u5732\u5733\u5734"+
-            "\u5735\u5736\u5737\u5738\u5739\u573A\u573B\u573C"+
-            "\u573D\u573E\u573F\u5740\u5741\u5742\u5743\u5744"+
-            "\u5745\u5746\u5747\u5748\u5749\u574A\u574B\u574C"+
-            "\u574D\u574E\u574F\u5750\u5751\u5752\u5753\u5754"+
-            "\u5755\u5756\u5757\u5758\u5759\u575A\u575B\u575C"+
-            "\u575D\u575E\u575F\u5760\u5761\u5762\u5763\u5764"+
-            "\u5765\u5766\u5767\u5768\u5769\u576A\u576B\u576C"+
-            "\u576D\u576E\u576F\u5770\u5771\u5772\u5773\u5774"+
-            "\u5775\u5776\u5777\u5778\u5779\u577A\u577B\u577C"+
-            "\u577D\u577E\u577F\u5780\u5781\u5782\u5783\u5784"+
-            "\u5785\u5786\u5787\u5788\u5789\u578A\u578B\u578C"+
-            "\u578D\u578E\u578F\u5790\u5791\u5792\u5793\u5794"+
-            "\u5795\u5796\u5797\u5798\u5799\u579A\u579B\u579C"+
-            "\u579D\u579E\u579F\u57A0\u57A1\u57A2\u57A3\u57A4"+
-            "\u57A5\u57A6\u57A7\u57A8\u57A9\u57AA\u57AB\u57AC"+
-            "\u57AD\u57AE\u57AF\u57B0\u57B1\u57B2\u57B3\u57B4"+
-            "\u57B5\u57B6\u57B7\u57B8\u57B9\u57BA\u57BB\u57BC"+
-            "\u57BD\u57BE\u57BF\u57C0\u57C1\u57C2\u57C3\u57C4"+
-            "\u57C5\u57C6\u57C7\u57C8\u57C9\u57CA\u57CB\u57CC"+
-            "\u57CD\u57CE\u57CF\u57D0\u57D1\u57D2\u57D3\u57D4"+
-            "\u57D5\u57D6\u57D7\u57D8\u57D9\u57DA\u57DB\u57DC"+
-            "\u57DD\u57DE\u57DF\u57E0\u57E1\u57E2\u57E3\u57E4"+
-            "\u57E5\u57E6\u57E7\u57E8\u57E9\u57EA\u57EB\u57EC"+
-            "\u57ED\u57EE\u57EF\u57F0\u57F1\u57F2\u57F3\u57F4"+
-            "\u57F5\u57F6\u57F7\u57F8\u57F9\u57FA\u57FB\u57FC"+
-            "\u57FD\u57FE\u57FF\u5800\u5801\u5802\u5803\u5804"+
-            "\u5805\u5806\u5807\u5808\u5809\u580A\u580B\u580C"+
-            "\u580D\u580E\u580F\u5810\u5811\u5812\u5813\u5814"+
-            "\u5815\u5816\u5817\u5818\u5819\u581A\u581B\u581C"+
-            "\u581D\u581E\u581F\u5820\u5821\u5822\u5823\u5824"+
-            "\u5825\u5826\u5827\u5828\u5829\u582A\u582B\u582C"+
-            "\u582D\u582E\u582F\u5830\u5831\u5832\u5833\u5834"+
-            "\u5835\u5836\u5837\u5838\u5839\u583A\u583B\u583C"+
-            "\u583D\u583E\u583F\u5840\u5841\u5842\u5843\u5844"+
-            "\u5845\u5846\u5847\u5848\u5849\u584A\u584B\u584C"+
-            "\u584D\u584E\u584F\u5850\u5851\u5852\u5853\u5854"+
-            "\u5855\u5856\u5857\u5858\u5859\u585A\u585B\u585C"+
-            "\u585D\u585E\u585F\u5860\u5861\u5862\u5863\u5864"+
-            "\u5865\u5866\u5867\u5868\u5869\u586A\u586B\u586C"+
-            "\u586D\u586E\u586F\u5870\u5871\u5872\u5873\u5874"+
-            "\u5875\u5876\u5877\u5878\u5879\u587A\u587B\u587C"+
-            "\u587D\u587E\u587F\u5880\u5881\u5882\u5883\u5884"+
-            "\u5885\u5886\u5887\u5888\u5889\u588A\u588B\u588C"+
-            "\u588D\u588E\u588F\u5890\u5891\u5892\u5893\u5894"+
-            "\u5895\u5896\u5897\u5898\u5899\u589A\u589B\u589C"+
-            "\u589D\u589E\u589F\u58A0\u58A1\u58A2\u58A3\u58A4"+
-            "\u58A5\u58A6\u58A7\u58A8\u58A9\u58AA\u58AB\u58AC"+
-            "\u58AD\u58AE\u58AF\u58B0\u58B1\u58B2\u58B3\u58B4"+
-            "\u58B5\u58B6\u58B7\u58B8\u58B9\u58BA\u58BB\u58BC"+
-            "\u58BD\u58BE\u58BF\u58C0\u58C1\u58C2\u58C3\u58C4"+
-            "\u58C5\u58C6\u58C7\u58C8\u58C9\u58CA\u58CB\u58CC"+
-            "\u58CD\u58CE\u58CF\u58D0\u58D1\u58D2\u58D3\u58D4"+
-            "\u58D5\u58D6\u58D7\u58D8\u58D9\u58DA\u58DB\u58DC"+
-            "\u58DD\u58DE\u58DF\u58E0\u58E1\u58E2\u58E3\u58E4"+
-            "\u58E5\u58E6\u58E7\u58E8\u58E9\u58EA\u58EB\u58EC"+
-            "\u58ED\u58EE\u58EF\u58F0\u58F1\u58F2\u58F3\u58F4"+
-            "\u58F5\u58F6\u58F7\u58F8\u58F9\u58FA\u58FB\u58FC"+
-            "\u58FD\u58FE\u58FF\u5900\u5901\u5902\u5903\u5904"+
-            "\u5905\u5906\u5907\u5908\u5909\u590A\u590B\u590C"+
-            "\u590D\u590E\u590F\u5910\u5911\u5912\u5913\u5914"+
-            "\u5915\u5916\u5917\u5918\u5919\u591A\u591B\u591C"+
-            "\u591D\u591E\u591F\u5920\u5921\u5922\u5923\u5924"+
-            "\u5925\u5926\u5927\u5928\u5929\u592A\u592B\u592C"+
-            "\u592D\u592E\u592F\u5930\u5931\u5932\u5933\u5934"+
-            "\u5935\u5936\u5937\u5938\u5939\u593A\u593B\u593C"+
-            "\u593D\u593E\u593F\u5940\u5941\u5942\u5943\u5944"+
-            "\u5945\u5946\u5947\u5948\u5949\u594A\u594B\u594C"+
-            "\u594D\u594E\u594F\u5950\u5951\u5952\u5953\u5954"+
-            "\u5955\u5956\u5957\u5958\u5959\u595A\u595B\u595C"+
-            "\u595D\u595E\u595F\u5960\u5961\u5962\u5963\u5964"+
-            "\u5965\u5966\u5967\u5968\u5969\u596A\u596B\u596C"+
-            "\u596D\u596E\u596F\u5970\u5971\u5972\u5973\u5974"+
-            "\u5975\u5976\u5977\u5978\u5979\u597A\u597B\u597C"+
-            "\u597D\u597E\u597F\u5980\u5981\u5982\u5983\u5984"+
-            "\u5985\u5986\u5987\u5988\u5989\u598A\u598B\u598C"+
-            "\u598D\u598E\u598F\u5990\u5991\u5992\u5993\u5994"+
-            "\u5995\u5996\u5997\u5998\u5999\u599A\u599B\u599C"+
-            "\u599D\u599E\u599F\u59A0\u59A1\u59A2\u59A3\u59A4"+
-            "\u59A5\u59A6\u59A7\u59A8\u59A9\u59AA\u59AB\u59AC"+
-            "\u59AD\u59AE\u59AF\u59B0\u59B1\u59B2\u59B3\u59B4"+
-            "\u59B5\u59B6\u59B7\u59B8\u59B9\u59BA\u59BB\u59BC"+
-            "\u59BD\u59BE\u59BF\u59C0\u59C1\u59C2\u59C3\u59C4"+
-            "\u59C5\u59C6\u59C7\u59C8\u59C9\u59CA\u59CB\u59CC"+
-            "\u59CD\u59CE\u59CF\u59D0\u59D1\u59D2\u59D3\u59D4"+
-            "\u59D5\u59D6\u59D7\u59D8\u59D9\u59DA\u59DB\u59DC"+
-            "\u59DD\u59DE\u59DF\u59E0\u59E1\u59E2\u59E3\u59E4"+
-            "\u59E5\u59E6\u59E7\u59E8\u59E9\u59EA\u59EB\u59EC"+
-            "\u59ED\u59EE\u59EF\u59F0\u59F1\u59F2\u59F3\u59F4"+
-            "\u59F5\u59F6\u59F7\u59F8\u59F9\u59FA\u59FB\u59FC"+
-            "\u59FD\u59FE\u59FF\u5A00\u5A01\u5A02\u5A03\u5A04"+
-            "\u5A05\u5A06\u5A07\u5A08\u5A09\u5A0A\u5A0B\u5A0C"+
-            "\u5A0D\u5A0E\u5A0F\u5A10\u5A11\u5A12\u5A13\u5A14"+
-            "\u5A15\u5A16\u5A17\u5A18\u5A19\u5A1A\u5A1B\u5A1C"+
-            "\u5A1D\u5A1E\u5A1F\u5A20\u5A21\u5A22\u5A23\u5A24"+
-            "\u5A25\u5A26\u5A27\u5A28\u5A29\u5A2A\u5A2B\u5A2C"+
-            "\u5A2D\u5A2E\u5A2F\u5A30\u5A31\u5A32\u5A33\u5A34"+
-            "\u5A35\u5A36\u5A37\u5A38\u5A39\u5A3A\u5A3B\u5A3C"+
-            "\u5A3D\u5A3E\u5A3F\u5A40\u5A41\u5A42\u5A43\u5A44"+
-            "\u5A45\u5A46\u5A47\u5A48\u5A49\u5A4A\u5A4B\u5A4C"+
-            "\u5A4D\u5A4E\u5A4F\u5A50\u5A51\u5A52\u5A53\u5A54"+
-            "\u5A55\u5A56\u5A57\u5A58\u5A59\u5A5A\u5A5B\u5A5C"+
-            "\u5A5D\u5A5E\u5A5F\u5A60\u5A61\u5A62\u5A63\u5A64"+
-            "\u5A65\u5A66\u5A67\u5A68\u5A69\u5A6A\u5A6B\u5A6C"+
-            "\u5A6D\u5A6E\u5A6F\u5A70\u5A71\u5A72\u5A73\u5A74"+
-            "\u5A75\u5A76\u5A77\u5A78\u5A79\u5A7A\u5A7B\u5A7C"+
-            "\u5A7D\u5A7E\u5A7F\u5A80\u5A81\u5A82\u5A83\u5A84"+
-            "\u5A85\u5A86\u5A87\u5A88\u5A89\u5A8A\u5A8B\u5A8C"+
-            "\u5A8D\u5A8E\u5A8F\u5A90\u5A91\u5A92\u5A93\u5A94"+
-            "\u5A95\u5A96\u5A97\u5A98\u5A99\u5A9A\u5A9B\u5A9C"+
-            "\u5A9D\u5A9E\u5A9F\u5AA0\u5AA1\u5AA2\u5AA3\u5AA4"+
-            "\u5AA5\u5AA6\u5AA7\u5AA8\u5AA9\u5AAA\u5AAB\u5AAC"+
-            "\u5AAD\u5AAE\u5AAF\u5AB0\u5AB1\u5AB2\u5AB3\u5AB4"+
-            "\u5AB5\u5AB6\u5AB7\u5AB8\u5AB9\u5ABA\u5ABB\u5ABC";
-
-        private final static String innerIndex6=
-            "\u5ABD\u5ABE\u5ABF\u5AC0\u5AC1\u5AC2\u5AC3\u5AC4"+
-            "\u5AC5\u5AC6\u5AC7\u5AC8\u5AC9\u5ACA\u5ACB\u5ACC"+
-            "\u5ACD\u5ACE\u5ACF\u5AD0\u5AD1\u5AD2\u5AD3\u5AD4"+
-            "\u5AD5\u5AD6\u5AD7\u5AD8\u5AD9\u5ADA\u5ADB\u5ADC"+
-            "\u5ADD\u5ADE\u5ADF\u5AE0\u5AE1\u5AE2\u5AE3\u5AE4"+
-            "\u5AE5\u5AE6\u5AE7\u5AE8\u5AE9\u5AEA\u5AEB\u5AEC"+
-            "\u5AED\u5AEE\u5AEF\u5AF0\u5AF1\u5AF2\u5AF3\u5AF4"+
-            "\u5AF5\u5AF6\u5AF7\u5AF8\u5AF9\u5AFA\u5AFB\u5AFC"+
-            "\u5AFD\u5AFE\u5AFF\u5B00\u5B01\u5B02\u5B03\u5B04"+
-            "\u5B05\u5B06\u5B07\u5B08\u5B09\u5B0A\u5B0B\u5B0C"+
-            "\u5B0D\u5B0E\u5B0F\u5B10\u5B11\u5B12\u5B13\u5B14"+
-            "\u5B15\u5B16\u5B17\u5B18\u5B19\u5B1A\u5B1B\u5B1C"+
-            "\u5B1D\u5B1E\u5B1F\u5B20\u5B21\u5B22\u5B23\u5B24"+
-            "\u5B25\u5B26\u5B27\u5B28\u5B29\u5B2A\u5B2B\u5B2C"+
-            "\u5B2D\u5B2E\u5B2F\u5B30\u5B31\u5B32\u5B33\u5B34"+
-            "\u5B35\u5B36\u5B37\u5B38\u5B39\u5B3A\u5B3B\u5B3C"+
-            "\u5B3D\u5B3E\u5B3F\u5B40\u5B41\u5B42\u5B43\u5B44"+
-            "\u5B45\u5B46\u5B47\u5B48\u5B49\u5B4A\u5B4B\u5B4C"+
-            "\u5B4D\u5B4E\u5B4F\u5B50\u5B51\u5B52\u5B53\u5B54"+
-            "\u5B55\u5B56\u5B57\u5B58\u5B59\u5B5A\u5B5B\u5B5C"+
-            "\u5B5D\u5B5E\u5B5F\u5B60\u5B61\u5B62\u5B63\u5B64"+
-            "\u5B65\u5B66\u5B67\u5B68\u5B69\u5B6A\u5B6B\u5B6C"+
-            "\u5B6D\u5B6E\u5B6F\u5B70\u5B71\u5B72\u5B73\u5B74"+
-            "\u5B75\u5B76\u5B77\u5B78\u5B79\u5B7A\u5B7B\u5B7C"+
-            "\u5B7D\u5B7E\u5B7F\u5B80\u5B81\u5B82\u5B83\u5B84"+
-            "\u5B85\u5B86\u5B87\u5B88\u5B89\u5B8A\u5B8B\u5B8C"+
-            "\u5B8D\u5B8E\u5B8F\u5B90\u5B91\u5B92\u5B93\u5B94"+
-            "\u5B95\u5B96\u5B97\u5B98\u5B99\u5B9A\u5B9B\u5B9C"+
-            "\u5B9D\u5B9E\u5B9F\u5BA0\u5BA1\u5BA2\u5BA3\u5BA4"+
-            "\u5BA5\u5BA6\u5BA7\u5BA8\u5BA9\u5BAA\u5BAB\u5BAC"+
-            "\u5BAD\u5BAE\u5BAF\u5BB0\u5BB1\u5BB2\u5BB3\u5BB4"+
-            "\u5BB5\u5BB6\u5BB7\u5BB8\u5BB9\u5BBA\u5BBB\u5BBC"+
-            "\u5BBD\u5BBE\u5BBF\u5BC0\u5BC1\u5BC2\u5BC3\u5BC4"+
-            "\u5BC5\u5BC6\u5BC7\u5BC8\u5BC9\u5BCA\u5BCB\u5BCC"+
-            "\u5BCD\u5BCE\u5BCF\u5BD0\u5BD1\u5BD2\u5BD3\u5BD4"+
-            "\u5BD5\u5BD6\u5BD7\u5BD8\u5BD9\u5BDA\u5BDB\u5BDC"+
-            "\u5BDD\u5BDE\u5BDF\u5BE0\u5BE1\u5BE2\u5BE3\u5BE4"+
-            "\u5BE5\u5BE6\u5BE7\u5BE8\u5BE9\u5BEA\u5BEB\u5BEC"+
-            "\u5BED\u5BEE\u5BEF\u5BF0\u5BF1\u5BF2\u5BF3\u5BF4"+
-            "\u5BF5\u5BF6\u5BF7\u5BF8\u5BF9\u5BFA\u5BFB\u5BFC"+
-            "\u5BFD\u5BFE\u5BFF\u5C00\u5C01\u5C02\u5C03\u5C04"+
-            "\u5C05\u5C06\u5C07\u5C08\u5C09\u5C0A\u5C0B\u5C0C"+
-            "\u5C0D\u5C0E\u5C0F\u5C10\u5C11\u5C12\u5C13\u5C14"+
-            "\u5C15\u5C16\u5C17\u5C18\u5C19\u5C1A\u5C1B\u5C1C"+
-            "\u5C1D\u5C1E\u5C1F\u5C20\u5C21\u5C22\u5C23\u5C24"+
-            "\u5C25\u5C26\u5C27\u5C28\u5C29\u5C2A\u5C2B\u5C2C"+
-            "\u5C2D\u5C2E\u5C2F\u5C30\u5C31\u5C32\u5C33\u5C34"+
-            "\u5C35\u5C36\u5C37\u5C38\u5C39\u5C3A\u5C3B\u5C3C"+
-            "\u5C3D\u5C3E\u5C3F\u5C40\u5C41\u5C42\u5C43\u5C44"+
-            "\u5C45\u5C46\u5C47\u5C48\u5C49\u5C4A\u5C4B\u5C4C"+
-            "\u5C4D\u5C4E\u5C4F\u5C50\u5C51\u5C52\u5C53\u5C54"+
-            "\u5C55\u5C56\u5C57\u5C58\u5C59\u5C5A\u5C5B\u5C5C"+
-            "\u5C5D\u5C5E\u5C5F\u5C60\u5C61\u5C62\u5C63\u5C64"+
-            "\u5C65\u5C66\u5C67\u5C68\u5C69\u5C6A\u5C6B\u5C6C"+
-            "\u5C6D\u5C6E\u5C6F\u5C70\u5C71\u5C72\u5C73\u5C74"+
-            "\u5C75\u5C76\u5C77\u5C78\u5C79\u5C7A\u5C7B\u5C7C"+
-            "\u5C7D\u5C7E\u5C7F\u5C80\u5C81\u5C82\u5C83\u5C84"+
-            "\u5C85\u5C86\u5C87\u5C88\u5C89\u5C8A\u5C8B\u5C8C"+
-            "\u5C8D\u5C8E\u5C8F\u5C90\u5C91\u5C92\u5C93\u5C94"+
-            "\u5C95\u5C96\u5C97\u5C98\u5C99\u5C9A\u5C9B\u5C9C"+
-            "\u5C9D\u5C9E\u5C9F\u5CA0\u5CA1\u5CA2\u5CA3\u5CA4"+
-            "\u5CA5\u5CA6\u5CA7\u5CA8\u5CA9\u5CAA\u5CAB\u5CAC"+
-            "\u5CAD\u5CAE\u5CAF\u5CB0\u5CB1\u5CB2\u5CB3\u5CB4"+
-            "\u5CB5\u5CB6\u5CB7\u5CB8\u5CB9\u5CBA\u5CBB\u5CBC"+
-            "\u5CBD\u5CBE\u5CBF\u5CC0\u5CC1\u5CC2\u5CC3\u5CC4"+
-            "\u5CC5\u5CC6\u5CC7\u5CC8\u5CC9\u5CCA\u5CCB\u5CCC"+
-            "\u5CCD\u5CCE\u5CCF\u5CD0\u5CD1\u5CD2\u5CD3\u5CD4"+
-            "\u5CD5\u5CD6\u5CD7\u5CD8\u5CD9\u5CDA\u5CDB\u5CDC"+
-            "\u5CDD\u5CDE\u5CDF\u5CE0\u5CE1\u5CE2\u5CE3\u5CE4"+
-            "\u5CE5\u5CE6\u5CE7\u5CE8\u5CE9\u5CEA\u5CEB\u5CEC"+
-            "\u5CED\u5CEE\u5CEF\u5CF0\u5CF1\u5CF2\u5CF3\u5CF4"+
-            "\u5CF5\u5CF6\u5CF7\u5CF8\u5CF9\u5CFA\u5CFB\u5CFC"+
-            "\u5CFD\u5CFE\u5CFF\u5D00\u5D01\u5D02\u5D03\u5D04"+
-            "\u5D05\u5D06\u5D07\u5D08\u5D09\u5D0A\u5D0B\u5D0C"+
-            "\u5D0D\u5D0E\u5D0F\u5D10\u5D11\u5D12\u5D13\u5D14"+
-            "\u5D15\u5D16\u5D17\u5D18\u5D19\u5D1A\u5D1B\u5D1C"+
-            "\u5D1D\u5D1E\u5D1F\u5D20\u5D21\u5D22\u5D23\u5D24"+
-            "\u5D25\u5D26\u5D27\u5D28\u5D29\u5D2A\u5D2B\u5D2C"+
-            "\u5D2D\u5D2E\u5D2F\u5D30\u5D31\u5D32\u5D33\u5D34"+
-            "\u5D35\u5D36\u5D37\u5D38\u5D39\u5D3A\u5D3B\u5D3C"+
-            "\u5D3D\u5D3E\u5D3F\u5D40\u5D41\u5D42\u5D43\u5D44"+
-            "\u5D45\u5D46\u5D47\u5D48\u5D49\u5D4A\u5D4B\u5D4C"+
-            "\u5D4D\u5D4E\u5D4F\u5D50\u5D51\u5D52\u5D53\u5D54"+
-            "\u5D55\u5D56\u5D57\u5D58\u5D59\u5D5A\u5D5B\u5D5C"+
-            "\u5D5D\u5D5E\u5D5F\u5D60\u5D61\u5D62\u5D63\u5D64"+
-            "\u5D65\u5D66\u5D67\u5D68\u5D69\u5D6A\u5D6B\u5D6C"+
-            "\u5D6D\u5D6E\u5D6F\u5D70\u5D71\u5D72\u5D73\u5D74"+
-            "\u5D75\u5D76\u5D77\u5D78\u5D79\u5D7A\u5D7B\u5D7C"+
-            "\u5D7D\u5D7E\u5D7F\u5D80\u5D81\u5D82\u5D83\u5D84"+
-            "\u5D85\u5D86\u5D87\u5D88\u5D89\u5D8A\u5D8B\u5D8C"+
-            "\u5D8D\u5D8E\u5D8F\u5D90\u5D91\u5D92\u5D93\u5D94"+
-            "\u5D95\u5D96\u5D97\u5D98\u5D99\u5D9A\u5D9B\u5D9C"+
-            "\u5D9D\u5D9E\u5D9F\u5DA0\u5DA1\u5DA2\u5DA3\u5DA4"+
-            "\u5DA5\u5DA6\u5DA7\u5DA8\u5DA9\u5DAA\u5DAB\u5DAC"+
-            "\u5DAD\u5DAE\u5DAF\u5DB0\u5DB1\u5DB2\u5DB3\u5DB4"+
-            "\u5DB5\u5DB6\u5DB7\u5DB8\u5DB9\u5DBA\u5DBB\u5DBC"+
-            "\u5DBD\u5DBE\u5DBF\u5DC0\u5DC1\u5DC2\u5DC3\u5DC4"+
-            "\u5DC5\u5DC6\u5DC7\u5DC8\u5DC9\u5DCA\u5DCB\u5DCC"+
-            "\u5DCD\u5DCE\u5DCF\u5DD0\u5DD1\u5DD2\u5DD3\u5DD4"+
-            "\u5DD5\u5DD6\u5DD7\u5DD8\u5DD9\u5DDA\u5DDB\u5DDC"+
-            "\u5DDD\u5DDE\u5DDF\u5DE0\u5DE1\u5DE2\u5DE3\u5DE4"+
-            "\u5DE5\u5DE6\u5DE7\u5DE8\u5DE9\u5DEA\u5DEB\u5DEC"+
-            "\u5DED\u5DEE\u5DEF\u5DF0\u5DF1\u5DF2\u5DF3\u5DF4"+
-            "\u5DF5\u5DF6\u5DF7\u5DF8\u5DF9\u5DFA\u5DFB\u5DFC"+
-            "\u5DFD\u5DFE\u5DFF\u5E00\u5E01\u5E02\u5E03\u5E04"+
-            "\u5E05\u5E06\u5E07\u5E08\u5E09\u5E0A\u5E0B\u5E0C"+
-            "\u5E0D\u5E0E\u5E0F\u5E10\u5E11\u5E12\u5E13\u5E14"+
-            "\u5E15\u5E16\u5E17\u5E18\u5E19\u5E1A\u5E1B\u5E1C"+
-            "\u5E1D\u5E1E\u5E1F\u5E20\u5E21\u5E22\u5E23\u5E24"+
-            "\u5E25\u5E26\u5E27\u5E28\u5E29\u5E2A\u5E2B\u5E2C"+
-            "\u5E2D\u5E2E\u5E2F\u5E30\u5E31\u5E32\u5E33\u5E34"+
-            "\u5E35\u5E36\u5E37\u5E38\u5E39\u5E3A\u5E3B\u5E3C"+
-            "\u5E3D\u5E3E\u5E3F\u5E40\u5E41\u5E42\u5E43\u5E44"+
-            "\u5E45\u5E46\u5E47\u5E48\u5E49\u5E4A\u5E4B\u5E4C"+
-            "\u5E4D\u5E4E\u5E4F\u5E50\u5E51\u5E52\u5E53\u5E54"+
-            "\u5E55\u5E56\u5E57\u5E58\u5E59\u5E5A\u5E5B\u5E5C"+
-            "\u5E5D\u5E5E\u5E5F\u5E60\u5E61\u5E62\u5E63\u5E64"+
-            "\u5E65\u5E66\u5E67\u5E68\u5E69\u5E6A\u5E6B\u5E6C"+
-            "\u5E6D\u5E6E\u5E6F\u5E70\u5E71\u5E72\u5E73\u5E74"+
-            "\u5E75\u5E76\u5E77\u5E78\u5E79\u5E7A\u5E7B\u5E7C"+
-            "\u5E7D\u5E7E\u5E7F\u5E80\u5E81\u5E82\u5E83\u5E84"+
-            "\u5E85\u5E86\u5E87\u5E88\u5E89\u5E8A\u5E8B\u5E8C"+
-            "\u5E8D\u5E8E\u5E8F\u5E90\u5E91\u5E92\u5E93\u5E94"+
-            "\u5E95\u5E96\u5E97\u5E98\u5E99\u5E9A\u5E9B\u5E9C"+
-            "\u5E9D\u5E9E\u5E9F\u5EA0\u5EA1\u5EA2\u5EA3\u5EA4"+
-            "\u5EA5\u5EA6\u5EA7\u5EA8\u5EA9\u5EAA\u5EAB\u5EAC"+
-            "\u5EAD\u5EAE\u5EAF\u5EB0\u5EB1\u5EB2\u5EB3\u5EB4"+
-            "\u5EB5\u5EB6\u5EB7\u5EB8\u5EB9\u5EBA\u5EBB\u5EBC"+
-            "\u5EBD\u5EBE\u5EBF\u5EC0\u5EC1\u5EC2\u5EC3\u5EC4"+
-            "\u5EC5\u5EC6\u5EC7\u5EC8\u5EC9\u5ECA\u5ECB\u5ECC"+
-            "\u5ECD\u5ECE\u5ECF\u5ED0\u5ED1\u5ED2\u5ED3\u5ED4"+
-            "\u5ED5\u5ED6\u5ED7\u5ED8\u5ED9\u5EDA\u5EDB\u5EDC"+
-            "\u5EDD\u5EDE\u5EDF\u5EE0\u5EE1\u5EE2\u5EE3\u5EE4"+
-            "\u5EE5\u5EE6\u5EE7\u5EE8\u5EE9\u5EEA\u5EEB\u5EEC"+
-            "\u5EED\u5EEE\u5EEF\u5EF0\u5EF1\u5EF2\u5EF3\u5EF4"+
-            "\u5EF5\u5EF6\u5EF7\u5EF8\u5EF9\u5EFA\u5EFB\u5EFC"+
-            "\u5EFD\u5EFE\u5EFF\u5F00\u5F01\u5F02\u5F03\u5F04"+
-            "\u5F05\u5F06\u5F07\u5F08\u5F09\u5F0A\u5F0B\u5F0C"+
-            "\u5F0D\u5F0E\u5F0F\u5F10\u5F11\u5F12\u5F13\u5F14"+
-            "\u5F15\u5F16\u5F17\u5F18\u5F19\u5F1A\u5F1B\u5F1C"+
-            "\u5F1D\u5F1E\u5F1F\u5F20\u5F21\u5F22\u5F23\u5F24"+
-            "\u5F25\u5F26\u5F27\u5F28\u5F29\u5F2A\u5F2B\u5F2C"+
-            "\u5F2D\u5F2E\u5F2F\u5F30\u5F31\u5F32\u5F33\u5F34"+
-            "\u5F35\u5F36\u5F37\u5F38\u5F39\u5F3A\u5F3B\u5F3C"+
-            "\u5F3D\u5F3E\u5F3F\u5F40\u5F41\u5F42\u5F43\u5F44"+
-            "\u5F45\u5F46\u5F47\u5F48\u5F49\u5F4A\u5F4B\u5F4C"+
-            "\u5F4D\u5F4E\u5F4F\u5F50\u5F51\u5F52\u5F53\u5F54"+
-            "\u5F55\u5F56\u5F57\u5F58\u5F59\u5F5A\u5F5B\u5F5C"+
-            "\u5F5D\u5F5E\u5F5F\u5F60\u5F61\u5F62\u5F63\u5F64"+
-            "\u5F65\u5F66\u5F67\u5F68\u5F69\u5F6A\u5F6B\u5F6C"+
-            "\u5F6D\u5F6E\u5F6F\u5F70\u5F71\u5F72\u5F73\u5F74"+
-            "\u5F75\u5F76\u5F77\u5F78\u5F79\u5F7A\u5F7B\u5F7C"+
-            "\u5F7D\u5F7E\u5F7F\u5F80\u5F81\u5F82\u5F83\u5F84"+
-            "\u5F85\u5F86\u5F87\u5F88\u5F89\u5F8A\u5F8B\u5F8C"+
-            "\u5F8D\u5F8E\u5F8F\u5F90\u5F91\u5F92\u5F93\u5F94"+
-            "\u5F95\u5F96\u5F97\u5F98\u5F99\u5F9A\u5F9B\u5F9C"+
-            "\u5F9D\u5F9E\u5F9F\u5FA0\u5FA1\u5FA2\u5FA3\u5FA4"+
-            "\u5FA5\u5FA6\u5FA7\u5FA8\u5FA9\u5FAA\u5FAB\u5FAC"+
-            "\u5FAD\u5FAE\u5FAF\u5FB0\u5FB1\u5FB2\u5FB3\u5FB4"+
-            "\u5FB5\u5FB6\u5FB7\u5FB8\u5FB9\u5FBA\u5FBB\u5FBC"+
-            "\u5FBD\u5FBE\u5FBF\u5FC0\u5FC1\u5FC2\u5FC3\u5FC4"+
-            "\u5FC5\u5FC6\u5FC7\u5FC8\u5FC9\u5FCA\u5FCB\u5FCC"+
-            "\u5FCD\u5FCE\u5FCF\u5FD0\u5FD1\u5FD2\u5FD3\u5FD4"+
-            "\u5FD5\u5FD6\u5FD7\u5FD8\u5FD9\u5FDA\u5FDB\u5FDC"+
-            "\u5FDD\u5FDE\u5FDF\u5FE0\u5FE1\u5FE2\u5FE3\u5FE4"+
-            "\u5FE5\u5FE6\u5FE7\u5FE8\u5FE9\u5FEA\u5FEB\u5FEC"+
-            "\u5FED\u5FEE\u5FEF\u5FF0\u5FF1\u5FF2\u5FF3\u5FF4"+
-            "\u5FF5\u5FF6\u5FF7\u5FF8\u5FF9\u5FFA\u5FFB\u5FFC"+
-            "\u5FFD\u5FFE\u5FFF\u6000\u6001\u6002\u6003\u6004"+
-            "\u6005\u6006\u6007\u6008\u6009\u600A\u600B\u600C"+
-            "\u600D\u600E\u600F\u6010\u6011\u6012\u6013\u6014"+
-            "\u6015\u6016\u6017\u6018\u6019\u601A\u601B\u601C"+
-            "\u601D\u601E\u601F\u6020\u6021\u6022\u6023\u6024"+
-            "\u6025\u6026\u6027\u6028\u6029\u602A\u602B\u602C"+
-            "\u602D\u602E\u602F\u6030\u6031\u6032\u6033\u6034"+
-            "\u6035\u6036\u6037\u6038\u6039\u603A\u603B\u603C"+
-            "\u603D\u603E\u603F\u6040\u6041\u6042\u6043\u6044"+
-            "\u6045\u6046\u6047\u6048\u6049\u604A\u604B\u604C"+
-            "\u604D\u604E\u604F\u6050\u6051\u6052\u6053\u6054"+
-            "\u6055\u6056\u6057\u6058\u6059\u605A\u605B\u605C"+
-            "\u605D\u605E\u605F\u6060\u6061\u6062\u6063\u6064"+
-            "\u6065\u6066\u6067\u6068\u6069\u606A\u606B\u606C"+
-            "\u606D\u606E\u606F\u6070\u6071\u6072\u6073\u6074"+
-            "\u6075\u6076\u6077\u6078\u6079\u607A\u607B\u607C"+
-            "\u607D\u607E\u607F\u6080\u6081\u6082\u6083\u6084"+
-            "\u6085\u6086\u6087\u6088\u6089\u608A\u608B\u608C"+
-            "\u608D\u608E\u608F\u6090\u6091\u6092\u6093\u6094"+
-            "\u6095\u6096\u6097\u6098\u6099\u609A\u609B\u609C"+
-            "\u609D\u609E\u609F\u60A0\u60A1\u60A2\u60A3\u60A4"+
-            "\u60A5\u60A6\u60A7\u60A8\u60A9\u60AA\u60AB\u60AC"+
-            "\u60AD\u60AE\u60AF\u60B0\u60B1\u60B2\u60B3\u60B4"+
-            "\u60B5\u60B6\u60B7\u60B8\u60B9\u60BA\u60BB\u60BC"+
-            "\u60BD\u60BE\u60BF\u60C0\u60C1\u60C2\u60C3\u60C4"+
-            "\u60C5\u60C6\u60C7\u60C8\u60C9\u60CA\u60CB\u60CC"+
-            "\u60CD\u60CE\u60CF\u60D0\u60D1\u60D2\u60D3\u60D4"+
-            "\u60D5\u60D6\u60D7\u60D8\u60D9\u60DA\u60DB\u60DC"+
-            "\u60DD\u60DE\u60DF\u60E0\u60E1\u60E2\u60E3\u60E4"+
-            "\u60E5\u60E6\u60E7\u60E8\u60E9\u60EA\u60EB\u60EC"+
-            "\u60ED\u60EE\u60EF\u60F0\u60F1\u60F2\u60F3\u60F4"+
-            "\u60F5\u60F6\u60F7\u60F8\u60F9\u60FA\u60FB\u60FC"+
-            "\u60FD\u60FE\u60FF\u6100\u6101\u6102\u6103\u6104"+
-            "\u6105\u6106\u6107\u6108\u6109\u610A\u610B\u610C"+
-            "\u610D\u610E\u610F\u6110\u6111\u6112\u6113\u6114"+
-            "\u6115\u6116\u6117\u6118\u6119\u611A\u611B\u611C"+
-            "\u611D\u611E\u611F\u6120\u6121\u6122\u6123\u6124"+
-            "\u6125\u6126\u6127\u6128\u6129\u612A\u612B\u612C"+
-            "\u612D\u612E\u612F\u6130\u6131\u6132\u6133\u6134"+
-            "\u6135\u6136\u6137\u6138\u6139\u613A\u613B\u613C"+
-            "\u613D\u613E\u613F\u6140\u6141\u6142\u6143\u6144"+
-            "\u6145\u6146\u6147\u6148\u6149\u614A\u614B\u614C"+
-            "\u614D\u614E\u614F\u6150\u6151\u6152\u6153\u6154"+
-            "\u6155\u6156\u6157\u6158\u6159\u615A\u615B\u615C"+
-            "\u615D\u615E\u615F\u6160\u6161\u6162\u6163\u6164"+
-            "\u6165\u6166\u6167\u6168\u6169\u616A\u616B\u616C"+
-            "\u616D\u616E\u616F\u6170\u6171\u6172\u6173\u6174"+
-            "\u6175\u6176\u6177\u6178\u6179\u617A\u617B\u617C"+
-            "\u617D\u617E\u617F\u6180\u6181\u6182\u6183\u6184"+
-            "\u6185\u6186\u6187\u6188\u6189\u618A\u618B\u618C"+
-            "\u618D\u618E\u618F\u6190\u6191\u6192\u6193\u6194"+
-            "\u6195\u6196\u6197\u6198\u6199\u619A\u619B\u619C"+
-            "\u619D\u619E\u619F\u61A0\u61A1\u61A2\u61A3\u61A4"+
-            "\u61A5\u61A6\u61A7\u61A8\u61A9\u61AA\u61AB\u61AC"+
-            "\u61AD\u61AE\u61AF\u61B0\u61B1\u61B2\u61B3\u61B4"+
-            "\u61B5\u61B6\u61B7\u61B8\u61B9\u61BA\u61BB\u61BC"+
-            "\u61BD\u61BE\u61BF\u61C0\u61C1\u61C2\u61C3\u61C4"+
-            "\u61C5\u61C6\u61C7\u61C8\u61C9\u61CA\u61CB\u61CC"+
-            "\u61CD\u61CE\u61CF\u61D0\u61D1\u61D2\u61D3\u61D4"+
-            "\u61D5\u61D6\u61D7\u61D8\u61D9\u61DA\u61DB\u61DC"+
-            "\u61DD\u61DE\u61DF\u61E0\u61E1\u61E2\u61E3\u61E4"+
-            "\u61E5\u61E6\u61E7\u61E8\u61E9\u61EA\u61EB\u61EC"+
-            "\u61ED\u61EE\u61EF\u61F0\u61F1\u61F2\u61F3\u61F4"+
-            "\u61F5\u61F6\u61F7\u61F8\u61F9\u61FA\u61FB\u61FC"+
-            "\u61FD\u61FE\u61FF\u6200\u6201\u6202\u6203\u6204"+
-            "\u6205\u6206\u6207\u6208\u6209\u620A\u620B\u620C"+
-            "\u620D\u620E\u620F\u6210\u6211\u6212\u6213\u6214"+
-            "\u6215\u6216\u6217\u6218\u6219\u621A\u621B\u621C"+
-            "\u621D\u621E\u621F\u6220\u6221\u6222\u6223\u6224"+
-            "\u6225\u6226\u6227\u6228\u6229\u622A\u622B\u622C"+
-            "\u622D\u622E\u622F\u6230\u6231\u6232\u6233\u6234"+
-            "\u6235\u6236\u6237\u6238\u6239\u623A\u623B\u623C"+
-            "\u623D\u623E\u623F\u6240\u6241\u6242\u6243\u6244"+
-            "\u6245\u6246\u6247\u6248\u6249\u624A\u624B\u624C"+
-            "\u624D\u624E\u624F\u6250\u6251\u6252\u6253\u6254"+
-            "\u6255\u6256\u6257\u6258\u6259\u625A\u625B\u625C"+
-            "\u625D\u625E\u625F\u6260\u6261\u6262\u6263\u6264"+
-            "\u6265\u6266\u6267\u6268\u6269\u626A\u626B\u626C"+
-            "\u626D\u626E\u626F\u6270\u6271\u6272\u6273\u6274"+
-            "\u6275\u6276\u6277\u6278\u6279\u627A\u627B\u627C"+
-            "\u627D\u627E\u627F\u6280\u6281\u6282\u6283\u6284"+
-            "\u6285\u6286\u6287\u6288\u6289\u628A\u628B\u628C"+
-            "\u628D\u628E\u628F\u6290\u6291\u6292\u6293\u6294"+
-            "\u6295\u6296\u6297\u6298\u6299\u629A\u629B\u629C"+
-            "\u629D\u629E\u629F\u62A0\u62A1\u62A2\u62A3\u62A4"+
-            "\u62A5\u62A6\u62A7\u62A8\u62A9\u62AA\u62AB\u62AC"+
-            "\u62AD\u62AE\u62AF\u62B0\u62B1\u62B2\u62B3\u62B4"+
-            "\u62B5\u62B6\u62B7\u62B8\u62B9\u62BA\u62BB\u62BC"+
-            "\u62BD\u62BE\u62BF\u62C0\u62C1\u62C2\u62C3\u62C4"+
-            "\u62C5\u62C6\u62C7\u62C8\u62C9\u62CA\u62CB\u62CC"+
-            "\u62CD\u62CE\u62CF\u62D0\u62D1\u62D2\u62D3\u62D4"+
-            "\u62D5\u62D6\u62D7\u62D8\u62D9\u62DA\u62DB\u62DC"+
-            "\u62DD\u62DE\u62DF\u62E0\u62E1\u62E2\u62E3\u62E4"+
-            "\u62E5\u62E6\u62E7\u62E8\u62E9\u62EA\u62EB\u62EC"+
-            "\u62ED\u62EE\u62EF\u62F0\u62F1\u62F2\u62F3\u62F4"+
-            "\u62F5\u62F6\u62F7\u62F8\u62F9\u62FA\u62FB\u62FC"+
-            "\u62FD\u62FE\u62FF\u6300\u6301\u6302\u6303\u6304"+
-            "\u6305\u6306\u6307\u6308\u6309\u630A\u630B\u630C"+
-            "\u630D\u630E\u630F\u6310\u6311\u6312\u6313\u6314"+
-            "\u6315\u6316\u6317\u6318\u6319\u631A\u631B\u631C"+
-            "\u631D\u631E\u631F\u6320\u6321\u6322\u6323\u6324"+
-            "\u6325\u6326\u6327\u6328\u6329\u632A\u632B\u632C"+
-            "\u632D\u632E\u632F\u6330\u6331\u6332\u6333\u6334"+
-            "\u6335\u6336\u6337\u6338\u6339\u633A\u633B\u633C"+
-            "\u633D\u633E\u633F\u6340\u6341\u6342\u6343\u6344"+
-            "\u6345\u6346\u6347\u6348\u6349\u634A\u634B\u634C"+
-            "\u634D\u634E\u634F\u6350\u6351\u6352\u6353\u6354"+
-            "\u6355\u6356\u6357\u6358\u6359\u635A\u635B\u635C"+
-            "\u635D\u635E\u635F\u6360\u6361\u6362\u6363\u6364"+
-            "\u6365\u6366\u6367\u6368\u6369\u636A\u636B\u636C"+
-            "\u636D\u636E\u636F\u6370\u6371\u6372\u6373\u6374"+
-            "\u6375\u6376\u6377\u6378\u6379\u637A\u637B\u637C"+
-            "\u637D\u637E\u637F\u6380\u6381\u6382\u6383\u6384"+
-            "\u6385\u6386\u6387\u6388\u6389\u638A\u638B\u638C"+
-            "\u638D\u638E\u638F\u6390\u6391\u6392\u6393\u6394"+
-            "\u6395\u6396\u6397\u6398\u6399\u639A\u639B\u639C"+
-            "\u639D\u639E\u639F\u63A0\u63A1\u63A2\u63A3\u63A4"+
-            "\u63A5\u63A6\u63A7\u63A8\u63A9\u63AA\u63AB\u63AC"+
-            "\u63AD\u63AE\u63AF\u63B0\u63B1\u63B2\u63B3\u63B4"+
-            "\u63B5\u63B6\u63B7\u63B8\u63B9\u63BA\u63BB\u63BC"+
-            "\u63BD\u63BE\u63BF\u63C0\u63C1\u63C2\u63C3\u63C4"+
-            "\u63C5\u63C6\u63C7\u63C8\u63C9\u63CA\u63CB\u63CC"+
-            "\u63CD\u63CE\u63CF\u63D0\u63D1\u63D2\u63D3\u63D4"+
-            "\u63D5\u63D6\u63D7\u63D8\u63D9\u63DA\u63DB\u63DC"+
-            "\u63DD\u63DE\u63DF\u63E0\u63E1\u63E2\u63E3\u63E4"+
-            "\u63E5\u63E6\u63E7\u63E8\u63E9\u63EA\u63EB\u63EC"+
-            "\u63ED\u63EE\u63EF\u63F0\u63F1\u63F2\u63F3\u63F4"+
-            "\u63F5\u63F6\u63F7\u63F8\u63F9\u63FA\u63FB\u63FC"+
-            "\u63FD\u63FE\u63FF\u6400\u6401\u6402\u6403\u6404"+
-            "\u6405\u6406\u6407\u6408\u6409\u640A\u640B\u640C"+
-            "\u640D\u640E\u640F\u6410\u6411\u6412\u6413\u6414"+
-            "\u6415\u6416\u6417\u6418\u6419\u641A\u641B\u641C"+
-            "\u641D\u641E\u641F\u6420\u6421\u6422\u6423\u6424"+
-            "\u6425\u6426\u6427\u6428\u6429\u642A\u642B\u642C"+
-            "\u642D\u642E\u642F\u6430\u6431\u6432\u6433\u6434"+
-            "\u6435\u6436\u6437\u6438\u6439\u643A\u643B\u643C"+
-            "\u643D\u643E\u643F\u6440\u6441\u6442\u6443\u6444"+
-            "\u6445\u6446\u6447\u6448\u6449\u644A\u644B\u644C"+
-            "\u644D\u644E\u644F\u6450\u6451\u6452\u6453\u6454"+
-            "\u6455\u6456\u6457\u6458\u6459\u645A\u645B\u645C"+
-            "\u645D\u645E\u645F\u6460\u6461\u6462\u6463\u6464"+
-            "\u6465\u6466\u6467\u6468\u6469\u646A\u646B\u646C"+
-            "\u646D\u646E\u646F\u6470\u6471\u6472\u6473\u6474"+
-            "\u6475\u6476\u6477\u6478\u6479\u647A\u647B\u647C"+
-            "\u647D\u647E\u647F\u6480\u6481\u6482\u6483\u6484"+
-            "\u6485\u6486\u6487\u6488\u6489\u648A\u648B\u648C"+
-            "\u648D\u648E\u648F\u6490\u6491\u6492\u6493\u6494"+
-            "\u6495\u6496\u6497\u6498\u6499\u649A\u649B\u649C"+
-            "\u649D\u649E\u649F\u64A0\u64A1\u64A2\u64A3\u64A4"+
-            "\u64A5\u64A6\u64A7\u64A8\u64A9\u64AA\u64AB\u64AC"+
-            "\u64AD\u64AE\u64AF\u64B0\u64B1\u64B2\u64B3\u64B4"+
-            "\u64B5\u64B6\u64B7\u64B8\u64B9\u64BA\u64BB\u64BC"+
-            "\u64BD\u64BE\u64BF\u64C0\u64C1\u64C2\u64C3\u64C4"+
-            "\u64C5\u64C6\u64C7\u64C8\u64C9\u64CA\u64CB\u64CC"+
-            "\u64CD\u64CE\u64CF\u64D0\u64D1\u64D2\u64D3\u64D4"+
-            "\u64D5\u64D6\u64D7\u64D8\u64D9\u64DA\u64DB\u64DC"+
-            "\u64DD\u64DE\u64DF\u64E0\u64E1\u64E2\u64E3\u64E4"+
-            "\u64E5\u64E6\u64E7\u64E8\u64E9\u64EA\u64EB\u64EC"+
-            "\u64ED\u64EE\u64EF\u64F0\u64F1\u64F2\u64F3\u64F4"+
-            "\u64F5\u64F6\u64F7\u64F8\u64F9\u64FA\u64FB\u64FC"+
-            "\u64FD\u64FE\u64FF\u6500\u6501\u6502\u6503\u6504"+
-            "\u6505\u6506\u6507\u6508\u6509\u650A\u650B\u650C"+
-            "\u650D\u650E\u650F\u6510\u6511\u6512\u6513\u6514"+
-            "\u6515\u6516\u6517\u6518\u6519\u651A\u651B\u651C"+
-            "\u651D\u651E\u651F\u6520\u6521\u6522\u6523\u6524"+
-            "\u6525\u6526\u6527\u6528\u6529\u652A\u652B\u652C"+
-            "\u652D\u652E\u652F\u6530\u6531\u6532\u6533\u6534"+
-            "\u6535\u6536\u6537\u6538\u6539\u653A\u653B\u653C"+
-            "\u653D\u653E\u653F\u6540\u6541\u6542\u6543\u6544"+
-            "\u6545\u6546\u6547\u6548\u6549\u654A\u654B\u654C"+
-            "\u654D\u654E\u654F\u6550\u6551\u6552\u6553\u6554"+
-            "\u6555\u6556\u6557\u6558\u6559\u655A\u655B\u655C"+
-            "\u655D\u655E\u655F\u6560\u6561\u6562\u6563\u6564"+
-            "\u6565\u6566\u6567\u6568\u6569\u656A\u656B\u656C"+
-            "\u656D\u656E\u656F\u6570\u6571\u6572\u6573\u6574"+
-            "\u6575\u6576\u6577\u6578\u6579\u657A\u657B\u657C"+
-            "\u657D\u657E\u657F\u6580\u6581\u6582\u6583\u6584"+
-            "\u6585\u6586\u6587\u6588\u6589\u658A\u658B\u658C"+
-            "\u658D\u658E\u658F\u6590\u6591\u6592\u6593\u6594"+
-            "\u6595\u6596\u6597\u6598\u6599\u659A\u659B\u659C"+
-            "\u659D\u659E\u659F\u65A0\u65A1\u65A2\u65A3\u65A4"+
-            "\u65A5\u65A6\u65A7\u65A8\u65A9\u65AA\u65AB\u65AC"+
-            "\u65AD\u65AE\u65AF\u65B0\u65B1\u65B2\u65B3\u65B4"+
-            "\u65B5\u65B6\u65B7\u65B8\u65B9\u65BA\u65BB\u65BC"+
-            "\u65BD\u65BE\u65BF\u65C0\u65C1\u65C2\u65C3\u65C4"+
-            "\u65C5\u65C6\u65C7\u65C8\u65C9\u65CA\u65CB\u65CC"+
-            "\u65CD\u65CE\u65CF\u65D0\u65D1\u65D2\u65D3\u65D4"+
-            "\u65D5\u65D6\u65D7\u65D8\u65D9\u65DA\u65DB\u65DC"+
-            "\u65DD\u65DE\u65DF\u65E0\u65E1\u65E2\u65E3\u65E4"+
-            "\u65E5\u65E6\u65E7\u65E8\u65E9\u65EA\u65EB\u65EC"+
-            "\u65ED\u65EE\u65EF\u65F0\u65F1\u65F2\u65F3\u65F4"+
-            "\u65F5\u65F6\u65F7\u65F8\u65F9\u65FA\u65FB\u65FC"+
-            "\u65FD\u65FE\u65FF\u6600\u6601\u6602\u6603\u6604"+
-            "\u6605\u6606\u6607\u6608\u6609\u660A\u660B\u660C"+
-            "\u660D\u660E\u660F\u6610\u6611\u6612\u6613\u6614"+
-            "\u6615\u6616\u6617\u6618\u6619\u661A\u661B\u661C"+
-            "\u661D\u661E\u661F\u6620\u6621\u6622\u6623\u6624"+
-            "\u6625\u6626\u6627\u6628\u6629\u662A\u662B\u662C"+
-            "\u662D\u662E\u662F\u6630\u6631\u6632\u6633\u6634"+
-            "\u6635\u6636\u6637\u6638\u6639\u663A\u663B\u663C"+
-            "\u663D\u663E\u663F\u6640\u6641\u6642\u6643\u6644"+
-            "\u6645\u6646\u6647\u6648\u6649\u664A\u664B\u664C"+
-            "\u664D\u664E\u664F\u6650\u6651\u6652\u6653\u6654"+
-            "\u6655\u6656\u6657\u6658\u6659\u665A\u665B\u665C"+
-            "\u665D\u665E\u665F\u6660\u6661\u6662\u6663\u6664"+
-            "\u6665\u6666\u6667\u6668\u6669\u666A\u666B\u666C"+
-            "\u666D\u666E\u666F\u6670\u6671\u6672\u6673\u6674"+
-            "\u6675\u6676\u6677\u6678\u6679\u667A\u667B\u667C"+
-            "\u667D\u667E\u667F\u6680\u6681\u6682\u6683\u6684"+
-            "\u6685\u6686\u6687\u6688\u6689\u668A\u668B\u668C"+
-            "\u668D\u668E\u668F\u6690\u6691\u6692\u6693\u6694"+
-            "\u6695\u6696\u6697\u6698\u6699\u669A\u669B\u669C"+
-            "\u669D\u669E\u669F\u66A0\u66A1\u66A2\u66A3\u66A4"+
-            "\u66A5\u66A6\u66A7\u66A8\u66A9\u66AA\u66AB\u66AC"+
-            "\u66AD\u66AE\u66AF\u66B0\u66B1\u66B2\u66B3\u66B4"+
-            "\u66B5\u66B6\u66B7\u66B8\u66B9\u66BA\u66BB\u66BC"+
-            "\u66BD\u66BE\u66BF\u66C0\u66C1\u66C2\u66C3\u66C4"+
-            "\u66C5\u66C6\u66C7\u66C8\u66C9\u66CA\u66CB\u66CC"+
-            "\u66CD\u66CE\u66CF\u66D0\u66D1\u66D2\u66D3\u66D4"+
-            "\u66D5\u66D6\u66D7\u66D8\u66D9\u66DA\u66DB\u66DC"+
-            "\u66DD\u66DE\u66DF\u66E0\u66E1\u66E2\u66E3\u66E4"+
-            "\u66E5\u66E6\u66E7\u66E8\u66E9\u66EA\u66EB\u66EC"+
-            "\u66ED\u66EE\u66EF\u66F0\u66F1\u66F2\u66F3\u66F4"+
-            "\u66F5\u66F6\u66F7\u66F8\u66F9\u66FA\u66FB\u66FC"+
-            "\u66FD\u66FE\u66FF\u6700\u6701\u6702\u6703\u6704"+
-            "\u6705\u6706\u6707\u6708\u6709\u670A\u670B\u670C"+
-            "\u670D\u670E\u670F\u6710\u6711\u6712\u6713\u6714"+
-            "\u6715\u6716\u6717\u6718\u6719\u671A\u671B\u671C"+
-            "\u671D\u671E\u671F\u6720\u6721\u6722\u6723\u6724"+
-            "\u6725\u6726\u6727\u6728\u6729\u672A\u672B\u672C"+
-            "\u672D\u672E\u672F\u6730\u6731\u6732\u6733\u6734"+
-            "\u6735\u6736\u6737\u6738\u6739\u673A\u673B\u673C"+
-            "\u673D\u673E\u673F\u6740\u6741\u6742\u6743\u6744"+
-            "\u6745\u6746\u6747\u6748\u6749\u674A\u674B\u674C"+
-            "\u674D\u674E\u674F\u6750\u6751\u6752\u6753\u6754"+
-            "\u6755\u6756\u6757\u6758\u6759\u675A\u675B\u675C"+
-            "\u675D\u675E\u675F\u6760\u6761\u6762\u6763\u6764"+
-            "\u6765\u6766\u6767\u6768\u6769\u676A\u676B\u676C"+
-            "\u676D\u676E\u676F\u6770\u6771\u6772\u6773\u6774"+
-            "\u6775\u6776\u6777\u6778\u6779\u677A\u677B\u677C"+
-            "\u677D\u677E\u677F\u6780\u6781\u6782\u6783\u6784"+
-            "\u6785\u6786\u6787\u6788\u6789\u678A\u678B\u678C"+
-            "\u678D\u678E\u678F\u6790\u6791\u6792\u6793\u6794"+
-            "\u6795\u6796\u6797\u6798\u6799\u679A\u679B\u679C"+
-            "\u679D\u679E\u679F\u67A0\u67A1\u67A2\u67A3\u67A4"+
-            "\u67A5\u67A6\u67A7\u67A8\u67A9\u67AA\u67AB\u67AC"+
-            "\u67AD\u67AE\u67AF\u67B0\u67B1\u67B2\u67B3\u67B4"+
-            "\u67B5\u67B6\u67B7\u67B8\u67B9\u67BA\u67BB\u67BC"+
-            "\u67BD\u67BE\u67BF\u67C0\u67C1\u67C2\u67C3\u67C4"+
-            "\u67C5\u67C6\u67C7\u67C8\u67C9\u67CA\u67CB\u67CC"+
-            "\u67CD\u67CE\u67CF\u67D0\u67D1\u67D2\u67D3\u67D4"+
-            "\u67D5\u67D6\u67D7\u67D8\u67D9\u67DA\u67DB\u67DC"+
-            "\u67DD\u67DE\u67DF\u67E0\u67E1\u67E2\u67E3\u67E4"+
-            "\u67E5\u67E6\u67E7\u67E8\u67E9\u67EA\u67EB\u67EC"+
-            "\u67ED\u67EE\u67EF\u67F0\u67F1\u67F2\u67F3\u67F4"+
-            "\u67F5\u67F6\u67F7\u67F8\u67F9\u67FA\u67FB\u67FC"+
-            "\u67FD\u67FE\u67FF\u6800\u6801\u6802\u6803\u6804"+
-            "\u6805\u6806\u6807\u6808\u6809\u680A\u680B\u680C"+
-            "\u680D\u680E\u680F\u6810\u6811\u6812\u6813\u6814"+
-            "\u6815\u6816\u6817\u6818\u6819\u681A\u681B\u681C"+
-            "\u681D\u681E\u681F\u6820\u6821\u6822\u6823\u6824"+
-            "\u6825\u6826\u6827\u6828\u6829\u682A\u682B\u682C"+
-            "\u682D\u682E\u682F\u6830\u6831\u6832\u6833\u6834"+
-            "\u6835\u6836\u6837\u6838\u6839\u683A\u683B\u683C"+
-            "\u683D\u683E\u683F\u6840\u6841\u6842\u6843\u6844"+
-            "\u6845\u6846\u6847\u6848\u6849\u684A\u684B\u684C"+
-            "\u684D\u684E\u684F\u6850\u6851\u6852\u6853\u6854"+
-            "\u6855\u6856\u6857\u6858\u6859\u685A\u685B\u685C"+
-            "\u685D\u685E\u685F\u6860\u6861\u6862\u6863\u6864"+
-            "\u6865\u6866\u6867\u6868\u6869\u686A\u686B\u686C"+
-            "\u686D\u686E\u686F\u6870\u6871\u6872\u6873\u6874"+
-            "\u6875\u6876\u6877\u6878\u6879\u687A\u687B\u687C"+
-            "\u687D\u687E\u687F\u6880\u6881\u6882\u6883\u6884"+
-            "\u6885\u6886\u6887\u6888\u6889\u688A\u688B\u688C"+
-            "\u688D\u688E\u688F\u6890\u6891\u6892\u6893\u6894"+
-            "\u6895\u6896\u6897\u6898\u6899\u689A\u689B\u689C"+
-            "\u689D\u689E\u689F\u68A0\u68A1\u68A2\u68A3\u68A4"+
-            "\u68A5\u68A6\u68A7\u68A8\u68A9\u68AA\u68AB\u68AC"+
-            "\u68AD\u68AE\u68AF\u68B0\u68B1\u68B2\u68B3\u68B4"+
-            "\u68B5\u68B6\u68B7\u68B8\u68B9\u68BA\u68BB\u68BC"+
-            "\u68BD\u68BE\u68BF\u68C0\u68C1\u68C2\u68C3\u68C4"+
-            "\u68C5\u68C6\u68C7\u68C8\u68C9\u68CA\u68CB\u68CC"+
-            "\u68CD\u68CE\u68CF\u68D0\u68D1\u68D2\u68D3\u68D4"+
-            "\u68D5\u68D6\u68D7\u68D8\u68D9\u68DA\u68DB\u68DC"+
-            "\u68DD\u68DE\u68DF\u68E0\u68E1\u68E2\u68E3\u68E4"+
-            "\u68E5\u68E6\u68E7\u68E8\u68E9\u68EA\u68EB\u68EC"+
-            "\u68ED\u68EE\u68EF\u68F0\u68F1\u68F2\u68F3\u68F4"+
-            "\u68F5\u68F6\u68F7\u68F8\u68F9\u68FA\u68FB\u68FC"+
-            "\u68FD\u68FE\u68FF\u6900\u6901\u6902\u6903\u6904"+
-            "\u6905\u6906\u6907\u6908\u6909\u690A\u690B\u690C"+
-            "\u690D\u690E\u690F\u6910\u6911\u6912\u6913\u6914"+
-            "\u6915\u6916\u6917\u6918\u6919\u691A\u691B\u691C"+
-            "\u691D\u691E\u691F\u6920\u6921\u6922\u6923\u6924"+
-            "\u6925\u6926\u6927\u6928\u6929\u692A\u692B\u692C"+
-            "\u692D\u692E\u692F\u6930\u6931\u6932\u6933\u6934"+
-            "\u6935\u6936\u6937\u6938\u6939\u693A\u693B\u693C"+
-            "\u693D\u693E\u693F\u6940\u6941\u6942\u6943\u6944"+
-            "\u6945\u6946\u6947\u6948\u6949\u694A\u694B\u694C"+
-            "\u694D\u694E\u694F\u6950\u6951\u6952\u6953\u6954"+
-            "\u6955\u6956\u6957\u6958\u6959\u695A\u695B\u695C"+
-            "\u695D\u695E\u695F\u6960\u6961\u6962\u6963\u6964"+
-            "\u6965\u6966\u6967\u6968\u6969\u696A\u696B\u696C"+
-            "\u696D\u696E\u696F\u6970\u6971\u6972\u6973\u6974"+
-            "\u6975\u6976\u6977\u6978\u6979\u697A\u697B\u697C"+
-            "\u697D\u697E\u697F\u6980\u6981\u6982\u6983\u6984"+
-            "\u6985\u6986\u6987\u6988\u6989\u698A\u698B\u698C"+
-            "\u698D\u698E\u698F\u6990\u6991\u6992\u6993\u6994"+
-            "\u6995\u6996\u6997\u6998\u6999\u699A\u699B\u699C"+
-            "\u699D\u699E\u699F\u69A0\u69A1\u69A2\u69A3\u69A4"+
-            "\u69A5\u69A6\u69A7\u69A8\u69A9\u69AA\u69AB\u69AC"+
-            "\u69AD\u69AE\u69AF\u69B0\u69B1\u69B2\u69B3\u69B4"+
-            "\u69B5\u69B6\u69B7\u69B8\u69B9\u69BA\u69BB\u69BC"+
-            "\u69BD\u69BE\u69BF\u69C0\u69C1\u69C2\u69C3\u69C4"+
-            "\u69C5\u69C6\u69C7\u69C8\u69C9\u69CA\u69CB\u69CC"+
-            "\u69CD\u69CE\u69CF\u69D0\u69D1\u69D2\u69D3\u69D4"+
-            "\u69D5\u69D6\u69D7\u69D8\u69D9\u69DA\u69DB\u69DC"+
-            "\u69DD\u69DE\u69DF\u69E0\u69E1\u69E2\u69E3\u69E4"+
-            "\u69E5\u69E6\u69E7\u69E8\u69E9\u69EA\u69EB\u69EC"+
-            "\u69ED\u69EE\u69EF\u69F0\u69F1\u69F2\u69F3\u69F4"+
-            "\u69F5\u69F6\u69F7\u69F8\u69F9\u69FA\u69FB\u69FC"+
-            "\u69FD\u69FE\u69FF\u6A00\u6A01\u6A02\u6A03\u6A04"+
-            "\u6A05\u6A06\u6A07\u6A08\u6A09\u6A0A\u6A0B\u6A0C"+
-            "\u6A0D\u6A0E\u6A0F\u6A10\u6A11\u6A12\u6A13\u6A14"+
-            "\u6A15\u6A16\u6A17\u6A18\u6A19\u6A1A\u6A1B\u6A1C"+
-            "\u6A1D\u6A1E\u6A1F\u6A20\u6A21\u6A22\u6A23\u6A24"+
-            "\u6A25\u6A26\u6A27\u6A28\u6A29\u6A2A\u6A2B\u6A2C"+
-            "\u6A2D\u6A2E\u6A2F\u6A30\u6A31\u6A32\u6A33\u6A34"+
-            "\u6A35\u6A36\u6A37\u6A38\u6A39\u6A3A\u6A3B\u6A3C"+
-            "\u6A3D\u6A3E\u6A3F\u6A40\u6A41\u6A42\u6A43\u6A44"+
-            "\u6A45\u6A46\u6A47\u6A48\u6A49\u6A4A\u6A4B\u6A4C"+
-            "\u6A4D\u6A4E\u6A4F\u6A50\u6A51\u6A52\u6A53\u6A54"+
-            "\u6A55\u6A56\u6A57\u6A58\u6A59\u6A5A\u6A5B\u6A5C"+
-            "\u6A5D\u6A5E\u6A5F\u6A60\u6A61\u6A62\u6A63\u6A64"+
-            "\u6A65\u6A66\u6A67\u6A68\u6A69\u6A6A\u6A6B\u6A6C"+
-            "\u6A6D\u6A6E\u6A6F\u6A70\u6A71\u6A72\u6A73\u6A74"+
-            "\u6A75\u6A76\u6A77\u6A78\u6A79\u6A7A\u6A7B\u6A7C"+
-            "\u6A7D\u6A7E\u6A7F\u6A80\u6A81\u6A82\u6A83\u6A84"+
-            "\u6A85\u6A86\u6A87\u6A88\u6A89\u6A8A\u6A8B\u6A8C"+
-            "\u6A8D\u6A8E\u6A8F\u6A90\u6A91\u6A92\u6A93\u6A94"+
-            "\u6A95\u6A96\u6A97\u6A98\u6A99\u6A9A\u6A9B\u6A9C"+
-            "\u6A9D\u6A9E\u6A9F\u6AA0\u6AA1\u6AA2\u6AA3\u6AA4"+
-            "\u6AA5\u6AA6\u6AA7\u6AA8\u6AA9\u6AAA\u6AAB\u6AAC"+
-            "\u6AAD\u6AAE\u6AAF\u6AB0\u6AB1\u6AB2\u6AB3\u6AB4"+
-            "\u6AB5\u6AB6\u6AB7\u6AB8\u6AB9\u6ABA\u6ABB\u6ABC";
-
-        private final static String innerIndex7=
-            "\u6ABD\u6ABE\u6ABF\u6AC0\u6AC1\u6AC2\u6AC3\u6AC4"+
-            "\u6AC5\u6AC6\u6AC7\u6AC8\u6AC9\u6ACA\u6ACB\u6ACC"+
-            "\u6ACD\u6ACE\u6ACF\u6AD0\u6AD1\u6AD2\u6AD3\u6AD4"+
-            "\u6AD5\u6AD6\u6AD7\u6AD8\u6AD9\u6ADA\u6ADB\u6ADC"+
-            "\u6ADD\u6ADE\u6ADF\u6AE0\u6AE1\u6AE2\u6AE3\u6AE4"+
-            "\u6AE5\u6AE6\u6AE7\u6AE8\u6AE9\u6AEA\u6AEB\u6AEC"+
-            "\u6AED\u6AEE\u6AEF\u6AF0\u6AF1\u6AF2\u6AF3\u6AF4"+
-            "\u6AF5\u6AF6\u6AF7\u6AF8\u6AF9\u6AFA\u6AFB\u6AFC"+
-            "\u6AFD\u6AFE\u6AFF\u6B00\u6B01\u6B02\u6B03\u6B04"+
-            "\u6B05\u6B06\u6B07\u6B08\u6B09\u6B0A\u6B0B\u6B0C"+
-            "\u6B0D\u6B0E\u6B0F\u6B10\u6B11\u6B12\u6B13\u6B14"+
-            "\u6B15\u6B16\u6B17\u6B18\u6B19\u6B1A\u6B1B\u6B1C"+
-            "\u6B1D\u6B1E\u6B1F\u6B20\u6B21\u6B22\u6B23\u6B24"+
-            "\u6B25\u6B26\u6B27\u6B28\u6B29\u6B2A\u6B2B\u6B2C"+
-            "\u6B2D\u6B2E\u6B2F\u6B30\u6B31\u6B32\u6B33\u6B34"+
-            "\u6B35\u6B36\u6B37\u6B38\u6B39\u6B3A\u6B3B\u6B3C"+
-            "\u6B3D\u6B3E\u6B3F\u6B40\u6B41\u6B42\u6B43\u6B44"+
-            "\u6B45\u6B46\u6B47\u6B48\u6B49\u6B4A\u6B4B\u6B4C"+
-            "\u6B4D\u6B4E\u6B4F\u6B50\u6B51\u6B52\u6B53\u6B54"+
-            "\u6B55\u6B56\u6B57\u6B58\u6B59\u6B5A\u6B5B\u6B5C"+
-            "\u6B5D\u6B5E\u6B5F\u6B60\u6B61\u6B62\u6B63\u6B64"+
-            "\u6B65\u6B66\u6B67\u6B68\u6B69\u6B6A\u6B6B\u6B6C"+
-            "\u6B6D\u6B6E\u6B6F\u6B70\u6B71\u6B72\u6B73\u6B74"+
-            "\u6B75\u6B76\u6B77\u6B78\u6B79\u6B7A\u6B7B\u6B7C"+
-            "\u6B7D\u6B7E\u6B7F\u6B80\u6B81\u6B82\u6B83\u6B84"+
-            "\u6B85\u6B86\u6B87\u6B88\u6B89\u6B8A\u6B8B\u6B8C"+
-            "\u6B8D\u6B8E\u6B8F\u6B90\u6B91\u6B92\u6B93\u6B94"+
-            "\u6B95\u6B96\u6B97\u6B98\u6B99\u6B9A\u6B9B\u6B9C"+
-            "\u6B9D\u6B9E\u6B9F\u6BA0\u6BA1\u6BA2\u6BA3\u6BA4"+
-            "\u6BA5\u6BA6\u6BA7\u6BA8\u6BA9\u6BAA\u6BAB\u6BAC"+
-            "\u6BAD\u6BAE\u6BAF\u6BB0\u6BB1\u6BB2\u6BB3\u6BB4"+
-            "\u6BB5\u6BB6\u6BB7\u6BB8\u6BB9\u6BBA\u6BBB\u6BBC"+
-            "\u6BBD\u6BBE\u6BBF\u6BC0\u6BC1\u6BC2\u6BC3\u6BC4"+
-            "\u6BC5\u6BC6\u6BC7\u6BC8\u6BC9\u6BCA\u6BCB\u6BCC"+
-            "\u6BCD\u6BCE\u6BCF\u6BD0\u6BD1\u6BD2\u6BD3\u6BD4"+
-            "\u6BD5\u6BD6\u6BD7\u6BD8\u6BD9\u6BDA\u6BDB\u6BDC"+
-            "\u6BDD\u6BDE\u6BDF\u6BE0\u6BE1\u6BE2\u6BE3\u6BE4"+
-            "\u6BE5\u6BE6\u6BE7\u6BE8\u6BE9\u6BEA\u6BEB\u6BEC"+
-            "\u6BED\u6BEE\u6BEF\u6BF0\u6BF1\u6BF2\u6BF3\u6BF4"+
-            "\u6BF5\u6BF6\u6BF7\u6BF8\u6BF9\u6BFA\u6BFB\u6BFC"+
-            "\u6BFD\u6BFE\u6BFF\u6C00\u6C01\u6C02\u6C03\u6C04"+
-            "\u6C05\u6C06\u6C07\u6C08\u6C09\u6C0A\u6C0B\u6C0C"+
-            "\u6C0D\u6C0E\u6C0F\u6C10\u6C11\u6C12\u6C13\u6C14"+
-            "\u6C15\u6C16\u6C17\u6C18\u6C19\u6C1A\u6C1B\u6C1C"+
-            "\u6C1D\u6C1E\u6C1F\u6C20\u6C21\u6C22\u6C23\u6C24"+
-            "\u6C25\u6C26\u6C27\u6C28\u6C29\u6C2A\u6C2B\u6C2C"+
-            "\u6C2D\u6C2E\u6C2F\u6C30\u6C31\u6C32\u6C33\u6C34"+
-            "\u6C35\u6C36\u6C37\u6C38\u6C39\u6C3A\u6C3B\u6C3C"+
-            "\u6C3D\u6C3E\u6C3F\u6C40\u6C41\u6C42\u6C43\u6C44"+
-            "\u6C45\u6C46\u6C47\u6C48\u6C49\u6C4A\u6C4B\u6C4C"+
-            "\u6C4D\u6C4E\u6C4F\u6C50\u6C51\u6C52\u6C53\u6C54"+
-            "\u6C55\u6C56\u6C57\u6C58\u6C59\u6C5A\u6C5B\u6C5C"+
-            "\u6C5D\u6C5E\u6C5F\u6C60\u6C61\u6C62\u6C63\u6C64"+
-            "\u6C65\u6C66\u6C67\u6C68\u6C69\u6C6A\u6C6B\u6C6C"+
-            "\u6C6D\u6C6E\u6C6F\u6C70\u6C71\u6C72\u6C73\u6C74"+
-            "\u6C75\u6C76\u6C77\u6C78\u6C79\u6C7A\u6C7B\u6C7C"+
-            "\u6C7D\u6C7E\u6C7F\u6C80\u6C81\u6C82\u6C83\u6C84"+
-            "\u6C85\u6C86\u6C87\u6C88\u6C89\u6C8A\u6C8B\u6C8C"+
-            "\u6C8D\u6C8E\u6C8F\u6C90\u6C91\u6C92\u6C93\u6C94"+
-            "\u6C95\u6C96\u6C97\u6C98\u6C99\u6C9A\u6C9B\u6C9C"+
-            "\u6C9D\u6C9E\u6C9F\u6CA0\u6CA1\u6CA2\u6CA3\u6CA4"+
-            "\u6CA5\u6CA6\u6CA7\u6CA8\u6CA9\u6CAA\u6CAB\u6CAC"+
-            "\u6CAD\u6CAE\u6CAF\u6CB0\u6CB1\u6CB2\u6CB3\u6CB4"+
-            "\u6CB5\u6CB6\u6CB7\u6CB8\u6CB9\u6CBA\u6CBB\u6CBC"+
-            "\u6CBD\u6CBE\u6CBF\u6CC0\u6CC1\u6CC2\u6CC3\u6CC4"+
-            "\u6CC5\u6CC6\u6CC7\u6CC8\u6CC9\u6CCA\u6CCB\u6CCC"+
-            "\u6CCD\u6CCE\u6CCF\u6CD0\u6CD1\u6CD2\u6CD3\u6CD4"+
-            "\u6CD5\u6CD6\u6CD7\u6CD8\u6CD9\u6CDA\u6CDB\u6CDC"+
-            "\u6CDD\u6CDE\u6CDF\u6CE0\u6CE1\u6CE2\u6CE3\u6CE4"+
-            "\u6CE5\u6CE6\u6CE7\u6CE8\u6CE9\u6CEA\u6CEB\u6CEC"+
-            "\u6CED\u6CEE\u6CEF\u6CF0\u6CF1\u6CF2\u6CF3\u6CF4"+
-            "\u6CF5\u6CF6\u6CF7\u6CF8\u6CF9\u6CFA\u6CFB\u6CFC"+
-            "\u6CFD\u6CFE\u6CFF\u6D00\u6D01\u6D02\u6D03\u6D04"+
-            "\u6D05\u6D06\u6D07\u6D08\u6D09\u6D0A\u6D0B\u6D0C"+
-            "\u6D0D\u6D0E\u6D0F\u6D10\u6D11\u6D12\u6D13\u6D14"+
-            "\u6D15\u6D16\u6D17\u6D18\u6D19\u6D1A\u6D1B\u6D1C"+
-            "\u6D1D\u6D1E\u6D1F\u6D20\u6D21\u6D22\u6D23\u6D24"+
-            "\u6D25\u6D26\u6D27\u6D28\u6D29\u6D2A\u6D2B\u6D2C"+
-            "\u6D2D\u6D2E\u6D2F\u6D30\u6D31\u6D32\u6D33\u6D34"+
-            "\u6D35\u6D36\u6D37\u6D38\u6D39\u6D3A\u6D3B\u6D3C"+
-            "\u6D3D\u6D3E\u6D3F\u6D40\u6D41\u6D42\u6D43\u6D44"+
-            "\u6D45\u6D46\u6D47\u6D48\u6D49\u6D4A\u6D4B\u6D4C"+
-            "\u6D4D\u6D4E\u6D4F\u6D50\u6D51\u6D52\u6D53\u6D54"+
-            "\u6D55\u6D56\u6D57\u6D58\u6D59\u6D5A\u6D5B\u6D5C"+
-            "\u6D5D\u6D5E\u6D5F\u6D60\u6D61\u6D62\u6D63\u6D64"+
-            "\u6D65\u6D66\u6D67\u6D68\u6D69\u6D6A\u6D6B\u6D6C"+
-            "\u6D6D\u6D6E\u6D6F\u6D70\u6D71\u6D72\u6D73\u6D74"+
-            "\u6D75\u6D76\u6D77\u6D78\u6D79\u6D7A\u6D7B\u6D7C"+
-            "\u6D7D\u6D7E\u6D7F\u6D80\u6D81\u6D82\u6D83\u6D84"+
-            "\u6D85\u6D86\u6D87\u6D88\u6D89\u6D8A\u6D8B\u6D8C"+
-            "\u6D8D\u6D8E\u6D8F\u6D90\u6D91\u6D92\u6D93\u6D94"+
-            "\u6D95\u6D96\u6D97\u6D98\u6D99\u6D9A\u6D9B\u6D9C"+
-            "\u6D9D\u6D9E\u6D9F\u6DA0\u6DA1\u6DA2\u6DA3\u6DA4"+
-            "\u6DA5\u6DA6\u6DA7\u6DA8\u6DA9\u6DAA\u6DAB\u6DAC"+
-            "\u6DAD\u6DAE\u6DAF\u6DB0\u6DB1\u6DB2\u6DB3\u6DB4"+
-            "\u6DB5\u6DB6\u6DB7\u6DB8\u6DB9\u6DBA\u6DBB\u6DBC"+
-            "\u6DBD\u6DBE\u6DBF\u6DC0\u6DC1\u6DC2\u6DC3\u6DC4"+
-            "\u6DC5\u6DC6\u6DC7\u6DC8\u6DC9\u6DCA\u6DCB\u6DCC"+
-            "\u6DCD\u6DCE\u6DCF\u6DD0\u6DD1\u6DD2\u6DD3\u6DD4"+
-            "\u6DD5\u6DD6\u6DD7\u6DD8\u6DD9\u6DDA\u6DDB\u6DDC"+
-            "\u6DDD\u6DDE\u6DDF\u6DE0\u6DE1\u6DE2\u6DE3\u6DE4"+
-            "\u6DE5\u6DE6\u6DE7\u6DE8\u6DE9\u6DEA\u6DEB\u6DEC"+
-            "\u6DED\u6DEE\u6DEF\u6DF0\u6DF1\u6DF2\u6DF3\u6DF4"+
-            "\u6DF5\u6DF6\u6DF7\u6DF8\u6DF9\u6DFA\u6DFB\u6DFC"+
-            "\u6DFD\u6DFE\u6DFF\u6E00\u6E01\u6E02\u6E03\u6E04"+
-            "\u6E05\u6E06\u6E07\u6E08\u6E09\u6E0A\u6E0B\u6E0C"+
-            "\u6E0D\u6E0E\u6E0F\u6E10\u6E11\u6E12\u6E13\u6E14"+
-            "\u6E15\u6E16\u6E17\u6E18\u6E19\u6E1A\u6E1B\u6E1C"+
-            "\u6E1D\u6E1E\u6E1F\u6E20\u6E21\u6E22\u6E23\u6E24"+
-            "\u6E25\u6E26\u6E27\u6E28\u6E29\u6E2A\u6E2B\u6E2C"+
-            "\u6E2D\u6E2E\u6E2F\u6E30\u6E31\u6E32\u6E33\u6E34"+
-            "\u6E35\u6E36\u6E37\u6E38\u6E39\u6E3A\u6E3B\u6E3C"+
-            "\u6E3D\u6E3E\u6E3F\u6E40\u6E41\u6E42\u6E43\u6E44"+
-            "\u6E45\u6E46\u6E47\u6E48\u6E49\u6E4A\u6E4B\u6E4C"+
-            "\u6E4D\u6E4E\u6E4F\u6E50\u6E51\u6E52\u6E53\u6E54"+
-            "\u6E55\u6E56\u6E57\u6E58\u6E59\u6E5A\u6E5B\u6E5C"+
-            "\u6E5D\u6E5E\u6E5F\u6E60\u6E61\u6E62\u6E63\u6E64"+
-            "\u6E65\u6E66\u6E67\u6E68\u6E69\u6E6A\u6E6B\u6E6C"+
-            "\u6E6D\u6E6E\u6E6F\u6E70\u6E71\u6E72\u6E73\u6E74"+
-            "\u6E75\u6E76\u6E77\u6E78\u6E79\u6E7A\u6E7B\u6E7C"+
-            "\u6E7D\u6E7E\u6E7F\u6E80\u6E81\u6E82\u6E83\u6E84"+
-            "\u6E85\u6E86\u6E87\u6E88\u6E89\u6E8A\u6E8B\u6E8C"+
-            "\u6E8D\u6E8E\u6E8F\u6E90\u6E91\u6E92\u6E93\u6E94"+
-            "\u6E95\u6E96\u6E97\u6E98\u6E99\u6E9A\u6E9B\u6E9C"+
-            "\u6E9D\u6E9E\u6E9F\u6EA0\u6EA1\u6EA2\u6EA3\u6EA4"+
-            "\u6EA5\u6EA6\u6EA7\u6EA8\u6EA9\u6EAA\u6EAB\u6EAC"+
-            "\u6EAD\u6EAE\u6EAF\u6EB0\u6EB1\u6EB2\u6EB3\u6EB4"+
-            "\u6EB5\u6EB6\u6EB7\u6EB8\u6EB9\u6EBA\u6EBB\u6EBC"+
-            "\u6EBD\u6EBE\u6EBF\u6EC0\u6EC1\u6EC2\u6EC3\u6EC4"+
-            "\u6EC5\u6EC6\u6EC7\u6EC8\u6EC9\u6ECA\u6ECB\u6ECC"+
-            "\u6ECD\u6ECE\u6ECF\u6ED0\u6ED1\u6ED2\u6ED3\u6ED4"+
-            "\u6ED5\u6ED6\u6ED7\u6ED8\u6ED9\u6EDA\u6EDB\u6EDC"+
-            "\u6EDD\u6EDE\u6EDF\u6EE0\u6EE1\u6EE2\u6EE3\u6EE4"+
-            "\u6EE5\u6EE6\u6EE7\u6EE8\u6EE9\u6EEA\u6EEB\u6EEC"+
-            "\u6EED\u6EEE\u6EEF\u6EF0\u6EF1\u6EF2\u6EF3\u6EF4"+
-            "\u6EF5\u6EF6\u6EF7\u6EF8\u6EF9\u6EFA\u6EFB\u6EFC"+
-            "\u6EFD\u6EFE\u6EFF\u6F00\u6F01\u6F02\u6F03\u6F04"+
-            "\u6F05\u6F06\u6F07\u6F08\u6F09\u6F0A\u6F0B\u6F0C"+
-            "\u6F0D\u6F0E\u6F0F\u6F10\u6F11\u6F12\u6F13\u6F14"+
-            "\u6F15\u6F16\u6F17\u6F18\u6F19\u6F1A\u6F1B\u6F1C"+
-            "\u6F1D\u6F1E\u6F1F\u6F20\u6F21\u6F22\u6F23\u6F24"+
-            "\u6F25\u6F26\u6F27\u6F28\u6F29\u6F2A\u6F2B\u6F2C"+
-            "\u6F2D\u6F2E\u6F2F\u6F30\u6F31\u6F32\u6F33\u6F34"+
-            "\u6F35\u6F36\u6F37\u6F38\u6F39\u6F3A\u6F3B\u6F3C"+
-            "\u6F3D\u6F3E\u6F3F\u6F40\u6F41\u6F42\u6F43\u6F44"+
-            "\u6F45\u6F46\u6F47\u6F48\u6F49\u6F4A\u6F4B\u6F4C"+
-            "\u6F4D\u6F4E\u6F4F\u6F50\u6F51\u6F52\u6F53\u6F54"+
-            "\u6F55\u6F56\u6F57\u6F58\u6F59\u6F5A\u6F5B\u6F5C"+
-            "\u6F5D\u6F5E\u6F5F\u6F60\u6F61\u6F62\u6F63\u6F64"+
-            "\u6F65\u6F66\u6F67\u6F68\u6F69\u6F6A\u6F6B\u6F6C"+
-            "\u6F6D\u6F6E\u6F6F\u6F70\u6F71\u6F72\u6F73\u6F74"+
-            "\u6F75\u6F76\u6F77\u6F78\u6F79\u6F7A\u6F7B\u6F7C"+
-            "\u6F7D\u6F7E\u6F7F\u6F80\u6F81\u6F82\u6F83\u6F84"+
-            "\u6F85\u6F86\u6F87\u6F88\u6F89\u6F8A\u6F8B\u6F8C"+
-            "\u6F8D\u6F8E\u6F8F\u6F90\u6F91\u6F92\u6F93\u6F94"+
-            "\u6F95\u6F96\u6F97\u6F98\u6F99\u6F9A\u6F9B\u6F9C"+
-            "\u6F9D\u6F9E\u6F9F\u6FA0\u6FA1\u6FA2\u6FA3\u6FA4"+
-            "\u6FA5\u6FA6\u6FA7\u6FA8\u6FA9\u6FAA\u6FAB\u6FAC"+
-            "\u6FAD\u6FAE\u6FAF\u6FB0\u6FB1\u6FB2\u6FB3\u6FB4"+
-            "\u6FB5\u6FB6\u6FB7\u6FB8\u6FB9\u6FBA\u6FBB\u6FBC"+
-            "\u6FBD\u6FBE\u6FBF\u6FC0\u6FC1\u6FC2\u6FC3\u6FC4"+
-            "\u6FC5\u6FC6\u6FC7\u6FC8\u6FC9\u6FCA\u6FCB\u6FCC"+
-            "\u6FCD\u6FCE\u6FCF\u6FD0\u6FD1\u6FD2\u6FD3\u6FD4"+
-            "\u6FD5\u6FD6\u6FD7\u6FD8\u6FD9\u6FDA\u6FDB\u6FDC"+
-            "\u6FDD\u6FDE\u6FDF\u6FE0\u6FE1\u6FE2\u6FE3\u6FE4"+
-            "\u6FE5\u6FE6\u6FE7\u6FE8\u6FE9\u6FEA\u6FEB\u6FEC"+
-            "\u6FED\u6FEE\u6FEF\u6FF0\u6FF1\u6FF2\u6FF3\u6FF4"+
-            "\u6FF5\u6FF6\u6FF7\u6FF8\u6FF9\u6FFA\u6FFB\u6FFC"+
-            "\u6FFD\u6FFE\u6FFF\u7000\u7001\u7002\u7003\u7004"+
-            "\u7005\u7006\u7007\u7008\u7009\u700A\u700B\u700C"+
-            "\u700D\u700E\u700F\u7010\u7011\u7012\u7013\u7014"+
-            "\u7015\u7016\u7017\u7018\u7019\u701A\u701B\u701C"+
-            "\u701D\u701E\u701F\u7020\u7021\u7022\u7023\u7024"+
-            "\u7025\u7026\u7027\u7028\u7029\u702A\u702B\u702C"+
-            "\u702D\u702E\u702F\u7030\u7031\u7032\u7033\u7034"+
-            "\u7035\u7036\u7037\u7038\u7039\u703A\u703B\u703C"+
-            "\u703D\u703E\u703F\u7040\u7041\u7042\u7043\u7044"+
-            "\u7045\u7046\u7047\u7048\u7049\u704A\u704B\u704C"+
-            "\u704D\u704E\u704F\u7050\u7051\u7052\u7053\u7054"+
-            "\u7055\u7056\u7057\u7058\u7059\u705A\u705B\u705C"+
-            "\u705D\u705E\u705F\u7060\u7061\u7062\u7063\u7064"+
-            "\u7065\u7066\u7067\u7068\u7069\u706A\u706B\u706C"+
-            "\u706D\u706E\u706F\u7070\u7071\u7072\u7073\u7074"+
-            "\u7075\u7076\u7077\u7078\u7079\u707A\u707B\u707C"+
-            "\u707D\u707E\u707F\u7080\u7081\u7082\u7083\u7084"+
-            "\u7085\u7086\u7087\u7088\u7089\u708A\u708B\u708C"+
-            "\u708D\u708E\u708F\u7090\u7091\u7092\u7093\u7094"+
-            "\u7095\u7096\u7097\u7098\u7099\u709A\u709B\u709C"+
-            "\u709D\u709E\u709F\u70A0\u70A1\u70A2\u70A3\u70A4"+
-            "\u70A5\u70A6\u70A7\u70A8\u70A9\u70AA\u70AB\u70AC"+
-            "\u70AD\u70AE\u70AF\u70B0\u70B1\u70B2\u70B3\u70B4"+
-            "\u70B5\u70B6\u70B7\u70B8\u70B9\u70BA\u70BB\u70BC"+
-            "\u70BD\u70BE\u70BF\u70C0\u70C1\u70C2\u70C3\u70C4"+
-            "\u70C5\u70C6\u70C7\u70C8\u70C9\u70CA\u70CB\u70CC"+
-            "\u70CD\u70CE\u70CF\u70D0\u70D1\u70D2\u70D3\u70D4"+
-            "\u70D5\u70D6\u70D7\u70D8\u70D9\u70DA\u70DB\u70DC"+
-            "\u70DD\u70DE\u70DF\u70E0\u70E1\u70E2\u70E3\u70E4"+
-            "\u70E5\u70E6\u70E7\u70E8\u70E9\u70EA\u70EB\u70EC"+
-            "\u70ED\u70EE\u70EF\u70F0\u70F1\u70F2\u70F3\u70F4"+
-            "\u70F5\u70F6\u70F7\u70F8\u70F9\u70FA\u70FB\u70FC"+
-            "\u70FD\u70FE\u70FF\u7100\u7101\u7102\u7103\u7104"+
-            "\u7105\u7106\u7107\u7108\u7109\u710A\u710B\u710C"+
-            "\u710D\u710E\u710F\u7110\u7111\u7112\u7113\u7114"+
-            "\u7115\u7116\u7117\u7118\u7119\u711A\u711B\u711C"+
-            "\u711D\u711E\u711F\u7120\u7121\u7122\u7123\u7124"+
-            "\u7125\u7126\u7127\u7128\u7129\u712A\u712B\u712C"+
-            "\u712D\u712E\u712F\u7130\u7131\u7132\u7133\u7134"+
-            "\u7135\u7136\u7137\u7138\u7139\u713A\u713B\u713C"+
-            "\u713D\u713E\u713F\u7140\u7141\u7142\u7143\u7144"+
-            "\u7145\u7146\u7147\u7148\u7149\u714A\u714B\u714C"+
-            "\u714D\u714E\u714F\u7150\u7151\u7152\u7153\u7154"+
-            "\u7155\u7156\u7157\u7158\u7159\u715A\u715B\u715C"+
-            "\u715D\u715E\u715F\u7160\u7161\u7162\u7163\u7164"+
-            "\u7165\u7166\u7167\u7168\u7169\u716A\u716B\u716C"+
-            "\u716D\u716E\u716F\u7170\u7171\u7172\u7173\u7174"+
-            "\u7175\u7176\u7177\u7178\u7179\u717A\u717B\u717C"+
-            "\u717D\u717E\u717F\u7180\u7181\u7182\u7183\u7184"+
-            "\u7185\u7186\u7187\u7188\u7189\u718A\u718B\u718C"+
-            "\u718D\u718E\u718F\u7190\u7191\u7192\u7193\u7194"+
-            "\u7195\u7196\u7197\u7198\u7199\u719A\u719B\u719C"+
-            "\u719D\u719E\u719F\u71A0\u71A1\u71A2\u71A3\u71A4"+
-            "\u71A5\u71A6\u71A7\u71A8\u71A9\u71AA\u71AB\u71AC"+
-            "\u71AD\u71AE\u71AF\u71B0\u71B1\u71B2\u71B3\u71B4"+
-            "\u71B5\u71B6\u71B7\u71B8\u71B9\u71BA\u71BB\u71BC"+
-            "\u71BD\u71BE\u71BF\u71C0\u71C1\u71C2\u71C3\u71C4"+
-            "\u71C5\u71C6\u71C7\u71C8\u71C9\u71CA\u71CB\u71CC"+
-            "\u71CD\u71CE\u71CF\u71D0\u71D1\u71D2\u71D3\u71D4"+
-            "\u71D5\u71D6\u71D7\u71D8\u71D9\u71DA\u71DB\u71DC"+
-            "\u71DD\u71DE\u71DF\u71E0\u71E1\u71E2\u71E3\u71E4"+
-            "\u71E5\u71E6\u71E7\u71E8\u71E9\u71EA\u71EB\u71EC"+
-            "\u71ED\u71EE\u71EF\u71F0\u71F1\u71F2\u71F3\u71F4"+
-            "\u71F5\u71F6\u71F7\u71F8\u71F9\u71FA\u71FB\u71FC"+
-            "\u71FD\u71FE\u71FF\u7200\u7201\u7202\u7203\u7204"+
-            "\u7205\u7206\u7207\u7208\u7209\u720A\u720B\u720C"+
-            "\u720D\u720E\u720F\u7210\u7211\u7212\u7213\u7214"+
-            "\u7215\u7216\u7217\u7218\u7219\u721A\u721B\u721C"+
-            "\u721D\u721E\u721F\u7220\u7221\u7222\u7223\u7224"+
-            "\u7225\u7226\u7227\u7228\u7229\u722A\u722B\u722C"+
-            "\u722D\u722E\u722F\u7230\u7231\u7232\u7233\u7234"+
-            "\u7235\u7236\u7237\u7238\u7239\u723A\u723B\u723C"+
-            "\u723D\u723E\u723F\u7240\u7241\u7242\u7243\u7244"+
-            "\u7245\u7246\u7247\u7248\u7249\u724A\u724B\u724C"+
-            "\u724D\u724E\u724F\u7250\u7251\u7252\u7253\u7254"+
-            "\u7255\u7256\u7257\u7258\u7259\u725A\u725B\u725C"+
-            "\u725D\u725E\u725F\u7260\u7261\u7262\u7263\u7264"+
-            "\u7265\u7266\u7267\u7268\u7269\u726A\u726B\u726C"+
-            "\u726D\u726E\u726F\u7270\u7271\u7272\u7273\u7274"+
-            "\u7275\u7276\u7277\u7278\u7279\u727A\u727B\u727C"+
-            "\u727D\u727E\u727F\u7280\u7281\u7282\u7283\u7284"+
-            "\u7285\u7286\u7287\u7288\u7289\u728A\u728B\u728C"+
-            "\u728D\u728E\u728F\u7290\u7291\u7292\u7293\u7294"+
-            "\u7295\u7296\u7297\u7298\u7299\u729A\u729B\u729C"+
-            "\u729D\u729E\u729F\u72A0\u72A1\u72A2\u72A3\u72A4"+
-            "\u72A5\u72A6\u72A7\u72A8\u72A9\u72AA\u72AB\u72AC"+
-            "\u72AD\u72AE\u72AF\u72B0\u72B1\u72B2\u72B3\u72B4"+
-            "\u72B5\u72B6\u72B7\u72B8\u72B9\u72BA\u72BB\u72BC"+
-            "\u72BD\u72BE\u72BF\u72C0\u72C1\u72C2\u72C3\u72C4"+
-            "\u72C5\u72C6\u72C7\u72C8\u72C9\u72CA\u72CB\u72CC"+
-            "\u72CD\u72CE\u72CF\u72D0\u72D1\u72D2\u72D3\u72D4"+
-            "\u72D5\u72D6\u72D7\u72D8\u72D9\u72DA\u72DB\u72DC"+
-            "\u72DD\u72DE\u72DF\u72E0\u72E1\u72E2\u72E3\u72E4"+
-            "\u72E5\u72E6\u72E7\u72E8\u72E9\u72EA\u72EB\u72EC"+
-            "\u72ED\u72EE\u72EF\u72F0\u72F1\u72F2\u72F3\u72F4"+
-            "\u72F5\u72F6\u72F7\u72F8\u72F9\u72FA\u72FB\u72FC"+
-            "\u72FD\u72FE\u72FF\u7300\u7301\u7302\u7303\u7304"+
-            "\u7305\u7306\u7307\u7308\u7309\u730A\u730B\u730C"+
-            "\u730D\u730E\u730F\u7310\u7311\u7312\u7313\u7314"+
-            "\u7315\u7316\u7317\u7318\u7319\u731A\u731B\u731C"+
-            "\u731D\u731E\u731F\u7320\u7321\u7322\u7323\u7324"+
-            "\u7325\u7326\u7327\u7328\u7329\u732A\u732B\u732C"+
-            "\u732D\u732E\u732F\u7330\u7331\u7332\u7333\u7334"+
-            "\u7335\u7336\u7337\u7338\u7339\u733A\u733B\u733C"+
-            "\u733D\u733E\u733F\u7340\u7341\u7342\u7343\u7344"+
-            "\u7345\u7346\u7347\u7348\u7349\u734A\u734B\u734C"+
-            "\u734D\u734E\u734F\u7350\u7351\u7352\u7353\u7354"+
-            "\u7355\u7356\u7357\u7358\u7359\u735A\u735B\u735C"+
-            "\u735D\u735E\u735F\u7360\u7361\u7362\u7363\u7364"+
-            "\u7365\u7366\u7367\u7368\u7369\u736A\u736B\u736C"+
-            "\u736D\u736E\u736F\u7370\u7371\u7372\u7373\u7374"+
-            "\u7375\u7376\u7377\u7378\u7379\u737A\u737B\u737C"+
-            "\u737D\u737E\u737F\u7380\u7381\u7382\u7383\u7384"+
-            "\u7385\u7386\u7387\u7388\u7389\u738A\u738B\u738C"+
-            "\u738D\u738E\u738F\u7390\u7391\u7392\u7393\u7394"+
-            "\u7395\u7396\u7397\u7398\u7399\u739A\u739B\u739C"+
-            "\u739D\u739E\u739F\u73A0\u73A1\u73A2\u73A3\u73A4"+
-            "\u73A5\u73A6\u73A7\u73A8\u73A9\u73AA\u73AB\u73AC"+
-            "\u73AD\u73AE\u73AF\u73B0\u73B1\u73B2\u73B3\u73B4"+
-            "\u73B5\u73B6\u73B7\u73B8\u73B9\u73BA\u73BB\u73BC"+
-            "\u73BD\u73BE\u73BF\u73C0\u73C1\u73C2\u73C3\u73C4"+
-            "\u73C5\u73C6\u73C7\u73C8\u73C9\u73CA\u73CB\u73CC"+
-            "\u73CD\u73CE\u73CF\u73D0\u73D1\u73D2\u73D3\u73D4"+
-            "\u73D5\u73D6\u73D7\u73D8\u73D9\u73DA\u73DB\u73DC"+
-            "\u73DD\u73DE\u73DF\u73E0\u73E1\u73E2\u73E3\u73E4"+
-            "\u73E5\u73E6\u73E7\u73E8\u73E9\u73EA\u73EB\u73EC"+
-            "\u73ED\u73EE\u73EF\u73F0\u73F1\u73F2\u73F3\u73F4"+
-            "\u73F5\u73F6\u73F7\u73F8\u73F9\u73FA\u73FB\u73FC"+
-            "\u73FD\u73FE\u73FF\u7400\u7401\u7402\u7403\u7404"+
-            "\u7405\u7406\u7407\u7408\u7409\u740A\u740B\u740C"+
-            "\u740D\u740E\u740F\u7410\u7411\u7412\u7413\u7414"+
-            "\u7415\u7416\u7417\u7418\u7419\u741A\u741B\u741C"+
-            "\u741D\u741E\u741F\u7420\u7421\u7422\u7423\u7424"+
-            "\u7425\u7426\u7427\u7428\u7429\u742A\u742B\u742C"+
-            "\u742D\u742E\u742F\u7430\u7431\u7432\u7433\u7434"+
-            "\u7435\u7436\u7437\u7438\u7439\u743A\u743B\u743C"+
-            "\u743D\u743E\u743F\u7440\u7441\u7442\u7443\u7444"+
-            "\u7445\u7446\u7447\u7448\u7449\u744A\u744B\u744C"+
-            "\u744D\u744E\u744F\u7450\u7451\u7452\u7453\u7454"+
-            "\u7455\u7456\u7457\u7458\u7459\u745A\u745B\u745C"+
-            "\u745D\u745E\u745F\u7460\u7461\u7462\u7463\u7464"+
-            "\u7465\u7466\u7467\u7468\u7469\u746A\u746B\u746C"+
-            "\u746D\u746E\u746F\u7470\u7471\u7472\u7473\u7474"+
-            "\u7475\u7476\u7477\u7478\u7479\u747A\u747B\u747C"+
-            "\u747D\u747E\u747F\u7480\u7481\u7482\u7483\u7484"+
-            "\u7485\u7486\u7487\u7488\u7489\u748A\u748B\u748C"+
-            "\u748D\u748E\u748F\u7490\u7491\u7492\u7493\u7494"+
-            "\u7495\u7496\u7497\u7498\u7499\u749A\u749B\u749C"+
-            "\u749D\u749E\u749F\u74A0\u74A1\u74A2\u74A3\u74A4"+
-            "\u74A5\u74A6\u74A7\u74A8\u74A9\u74AA\u74AB\u74AC"+
-            "\u74AD\u74AE\u74AF\u74B0\u74B1\u74B2\u74B3\u74B4"+
-            "\u74B5\u74B6\u74B7\u74B8\u74B9\u74BA\u74BB\u74BC"+
-            "\u74BD\u74BE\u74BF\u74C0\u74C1\u74C2\u74C3\u74C4"+
-            "\u74C5\u74C6\u74C7\u74C8\u74C9\u74CA\u74CB\u74CC"+
-            "\u74CD\u74CE\u74CF\u74D0\u74D1\u74D2\u74D3\u74D4"+
-            "\u74D5\u74D6\u74D7\u74D8\u74D9\u74DA\u74DB\u74DC"+
-            "\u74DD\u74DE\u74DF\u74E0\u74E1\u74E2\u74E3\u74E4"+
-            "\u74E5\u74E6\u74E7\u74E8\u74E9\u74EA\u74EB\u74EC"+
-            "\u74ED\u74EE\u74EF\u74F0\u74F1\u74F2\u74F3\u74F4"+
-            "\u74F5\u74F6\u74F7\u74F8\u74F9\u74FA\u74FB\u74FC"+
-            "\u74FD\u74FE\u74FF\u7500\u7501\u7502\u7503\u7504"+
-            "\u7505\u7506\u7507\u7508\u7509\u750A\u750B\u750C"+
-            "\u750D\u750E\u750F\u7510\u7511\u7512\u7513\u7514"+
-            "\u7515\u7516\u7517\u7518\u7519\u751A\u751B\u751C"+
-            "\u751D\u751E\u751F\u7520\u7521\u7522\u7523\u7524"+
-            "\u7525\u7526\u7527\u7528\u7529\u752A\u752B\u752C"+
-            "\u752D\u752E\u752F\u7530\u7531\u7532\u7533\u7534"+
-            "\u7535\u7536\u7537\u7538\u7539\u753A\u753B\u753C"+
-            "\u753D\u753E\u753F\u7540\u7541\u7542\u7543\u7544"+
-            "\u7545\u7546\u7547\u7548\u7549\u754A\u754B\u754C"+
-            "\u754D\u754E\u754F\u7550\u7551\u7552\u7553\u7554"+
-            "\u7555\u7556\u7557\u7558\u7559\u755A\u755B\u755C"+
-            "\u755D\u755E\u755F\u7560\u7561\u7562\u7563\u7564"+
-            "\u7565\u7566\u7567\u7568\u7569\u756A\u756B\u756C"+
-            "\u756D\u756E\u756F\u7570\u7571\u7572\u7573\u7574"+
-            "\u7575\u7576\u7577\u7578\u7579\u757A\u757B\u757C"+
-            "\u757D\u757E\u757F\u7580\u7581\u7582\u7583\u7584"+
-            "\u7585\u7586\u7587\u7588\u7589\u758A\u758B\u758C"+
-            "\u758D\u758E\u758F\u7590\u7591\u7592\u7593\u7594"+
-            "\u7595\u7596\u7597\u7598\u7599\u759A\u759B\u759C"+
-            "\u759D\u759E\u759F\u75A0\u75A1\u75A2\u75A3\u75A4"+
-            "\u75A5\u75A6\u75A7\u75A8\u75A9\u75AA\u75AB\u75AC"+
-            "\u75AD\u75AE\u75AF\u75B0\u75B1\u75B2\u75B3\u75B4"+
-            "\u75B5\u75B6\u75B7\u75B8\u75B9\u75BA\u75BB\u75BC"+
-            "\u75BD\u75BE\u75BF\u75C0\u75C1\u75C2\u75C3\u75C4"+
-            "\u75C5\u75C6\u75C7\u75C8\u75C9\u75CA\u75CB\u75CC"+
-            "\u75CD\u75CE\u75CF\u75D0\u75D1\u75D2\u75D3\u75D4"+
-            "\u75D5\u75D6\u75D7\u75D8\u75D9\u75DA\u75DB\u75DC"+
-            "\u75DD\u75DE\u75DF\u75E0\u75E1\u75E2\u75E3\u75E4"+
-            "\u75E5\u75E6\u75E7\u75E8\u75E9\u75EA\u75EB\u75EC"+
-            "\u75ED\u75EE\u75EF\u75F0\u75F1\u75F2\u75F3\u75F4"+
-            "\u75F5\u75F6\u75F7\u75F8\u75F9\u75FA\u75FB\u75FC"+
-            "\u75FD\u75FE\u75FF\u7600\u7601\u7602\u7603\u7604"+
-            "\u7605\u7606\u7607\u7608\u7609\u760A\u760B\u760C"+
-            "\u760D\u760E\u760F\u7610\u7611\u7612\u7613\u7614"+
-            "\u7615\u7616\u7617\u7618\u7619\u761A\u761B\u761C"+
-            "\u761D\u761E\u761F\u7620\u7621\u7622\u7623\u7624"+
-            "\u7625\u7626\u7627\u7628\u7629\u762A\u762B\u762C"+
-            "\u762D\u762E\u762F\u7630\u7631\u7632\u7633\u7634"+
-            "\u7635\u7636\u7637\u7638\u7639\u763A\u763B\u763C"+
-            "\u763D\u763E\u763F\u7640\u7641\u7642\u7643\u7644"+
-            "\u7645\u7646\u7647\u7648\u7649\u764A\u764B\u764C"+
-            "\u764D\u764E\u764F\u7650\u7651\u7652\u7653\u7654"+
-            "\u7655\u7656\u7657\u7658\u7659\u765A\u765B\u765C"+
-            "\u765D\u765E\u765F\u7660\u7661\u7662\u7663\u7664"+
-            "\u7665\u7666\u7667\u7668\u7669\u766A\u766B\u766C"+
-            "\u766D\u766E\u766F\u7670\u7671\u7672\u7673\u7674"+
-            "\u7675\u7676\u7677\u7678\u7679\u767A\u767B\u767C"+
-            "\u767D\u767E\u767F\u7680\u7681\u7682\u7683\u7684"+
-            "\u7685\u7686\u7687\u7688\u7689\u768A\u768B\u768C"+
-            "\u768D\u768E\u768F\u7690\u7691\u7692\u7693\u7694"+
-            "\u7695\u7696\u7697\u7698\u7699\u769A\u769B\u769C"+
-            "\u769D\u769E\u769F\u76A0\u76A1\u76A2\u76A3\u76A4"+
-            "\u76A5\u76A6\u76A7\u76A8\u76A9\u76AA\u76AB\u76AC"+
-            "\u76AD\u76AE\u76AF\u76B0\u76B1\u76B2\u76B3\u76B4"+
-            "\u76B5\u76B6\u76B7\u76B8\u76B9\u76BA\u76BB\u76BC"+
-            "\u76BD\u76BE\u76BF\u76C0\u76C1\u76C2\u76C3\u76C4"+
-            "\u76C5\u76C6\u76C7\u76C8\u76C9\u76CA\u76CB\u76CC"+
-            "\u76CD\u76CE\u76CF\u76D0\u76D1\u76D2\u76D3\u76D4"+
-            "\u76D5\u76D6\u76D7\u76D8\u76D9\u76DA\u76DB\u76DC"+
-            "\u76DD\u76DE\u76DF\u76E0\u76E1\u76E2\u76E3\u76E4"+
-            "\u76E5\u76E6\u76E7\u76E8\u76E9\u76EA\u76EB\u76EC"+
-            "\u76ED\u76EE\u76EF\u76F0\u76F1\u76F2\u76F3\u76F4"+
-            "\u76F5\u76F6\u76F7\u76F8\u76F9\u76FA\u76FB\u76FC"+
-            "\u76FD\u76FE\u76FF\u7700\u7701\u7702\u7703\u7704"+
-            "\u7705\u7706\u7707\u7708\u7709\u770A\u770B\u770C"+
-            "\u770D\u770E\u770F\u7710\u7711\u7712\u7713\u7714"+
-            "\u7715\u7716\u7717\u7718\u7719\u771A\u771B\u771C"+
-            "\u771D\u771E\u771F\u7720\u7721\u7722\u7723\u7724"+
-            "\u7725\u7726\u7727\u7728\u7729\u772A\u772B\u772C"+
-            "\u772D\u772E\u772F\u7730\u7731\u7732\u7733\u7734"+
-            "\u7735\u7736\u7737\u7738\u7739\u773A\u773B\u773C"+
-            "\u773D\u773E\u773F\u7740\u7741\u7742\u7743\u7744"+
-            "\u7745\u7746\u7747\u7748\u7749\u774A\u774B\u774C"+
-            "\u774D\u774E\u774F\u7750\u7751\u7752\u7753\u7754"+
-            "\u7755\u7756\u7757\u7758\u7759\u775A\u775B\u775C"+
-            "\u775D\u775E\u775F\u7760\u7761\u7762\u7763\u7764"+
-            "\u7765\u7766\u7767\u7768\u7769\u776A\u776B\u776C"+
-            "\u776D\u776E\u776F\u7770\u7771\u7772\u7773\u7774"+
-            "\u7775\u7776\u7777\u7778\u7779\u777A\u777B\u777C"+
-            "\u777D\u777E\u777F\u7780\u7781\u7782\u7783\u7784"+
-            "\u7785\u7786\u7787\u7788\u7789\u778A\u778B\u778C"+
-            "\u778D\u778E\u778F\u7790\u7791\u7792\u7793\u7794"+
-            "\u7795\u7796\u7797\u7798\u7799\u779A\u779B\u779C"+
-            "\u779D\u779E\u779F\u77A0\u77A1\u77A2\u77A3\u77A4"+
-            "\u77A5\u77A6\u77A7\u77A8\u77A9\u77AA\u77AB\u77AC"+
-            "\u77AD\u77AE\u77AF\u77B0\u77B1\u77B2\u77B3\u77B4"+
-            "\u77B5\u77B6\u77B7\u77B8\u77B9\u77BA\u77BB\u77BC"+
-            "\u77BD\u77BE\u77BF\u77C0\u77C1\u77C2\u77C3\u77C4"+
-            "\u77C5\u77C6\u77C7\u77C8\u77C9\u77CA\u77CB\u77CC"+
-            "\u77CD\u77CE\u77CF\u77D0\u77D1\u77D2\u77D3\u77D4"+
-            "\u77D5\u77D6\u77D7\u77D8\u77D9\u77DA\u77DB\u77DC"+
-            "\u77DD\u77DE\u77DF\u77E0\u77E1\u77E2\u77E3\u77E4"+
-            "\u77E5\u77E6\u77E7\u77E8\u77E9\u77EA\u77EB\u77EC"+
-            "\u77ED\u77EE\u77EF\u77F0\u77F1\u77F2\u77F3\u77F4"+
-            "\u77F5\u77F6\u77F7\u77F8\u77F9\u77FA\u77FB\u77FC"+
-            "\u77FD\u77FE\u77FF\u7800\u7801\u7802\u7803\u7804"+
-            "\u7805\u7806\u7807\u7808\u7809\u780A\u780B\u780C"+
-            "\u780D\u780E\u780F\u7810\u7811\u7812\u7813\u7814"+
-            "\u7815\u7816\u7817\u7818\u7819\u781A\u781B\u781C"+
-            "\u781D\u781E\u781F\u7820\u7821\u7822\u7823\u7824"+
-            "\u7825\u7826\u7827\u7828\u7829\u782A\u782B\u782C"+
-            "\u782D\u782E\u782F\u7830\u7831\u7832\u7833\u7834"+
-            "\u7835\u7836\u7837\u7838\u7839\u783A\u783B\u783C"+
-            "\u783D\u783E\u783F\u7840\u7841\u7842\u7843\u7844"+
-            "\u7845\u7846\u7847\u7848\u7849\u784A\u784B\u784C"+
-            "\u784D\u784E\u784F\u7850\u7851\u7852\u7853\u7854"+
-            "\u7855\u7856\u7857\u7858\u7859\u785A\u785B\u785C"+
-            "\u785D\u785E\u785F\u7860\u7861\u7862\u7863\u7864"+
-            "\u7865\u7866\u7867\u7868\u7869\u786A\u786B\u786C"+
-            "\u786D\u786E\u786F\u7870\u7871\u7872\u7873\u7874"+
-            "\u7875\u7876\u7877\u7878\u7879\u787A\u787B\u787C"+
-            "\u787D\u787E\u787F\u7880\u7881\u7882\u7883\u7884"+
-            "\u7885\u7886\u7887\u7888\u7889\u788A\u788B\u788C"+
-            "\u788D\u788E\u788F\u7890\u7891\u7892\u7893\u7894"+
-            "\u7895\u7896\u7897\u7898\u7899\u789A\u789B\u789C"+
-            "\u789D\u789E\u789F\u78A0\u78A1\u78A2\u78A3\u78A4"+
-            "\u78A5\u78A6\u78A7\u78A8\u78A9\u78AA\u78AB\u78AC"+
-            "\u78AD\u78AE\u78AF\u78B0\u78B1\u78B2\u78B3\u78B4"+
-            "\u78B5\u78B6\u78B7\u78B8\u78B9\u78BA\u78BB\u78BC"+
-            "\u78BD\u78BE\u78BF\u78C0\u78C1\u78C2\u78C3\u78C4"+
-            "\u78C5\u78C6\u78C7\u78C8\u78C9\u78CA\u78CB\u78CC"+
-            "\u78CD\u78CE\u78CF\u78D0\u78D1\u78D2\u78D3\u78D4"+
-            "\u78D5\u78D6\u78D7\u78D8\u78D9\u78DA\u78DB\u78DC"+
-            "\u78DD\u78DE\u78DF\u78E0\u78E1\u78E2\u78E3\u78E4"+
-            "\u78E5\u78E6\u78E7\u78E8\u78E9\u78EA\u78EB\u78EC"+
-            "\u78ED\u78EE\u78EF\u78F0\u78F1\u78F2\u78F3\u78F4"+
-            "\u78F5\u78F6\u78F7\u78F8\u78F9\u78FA\u78FB\u78FC"+
-            "\u78FD\u78FE\u78FF\u7900\u7901\u7902\u7903\u7904"+
-            "\u7905\u7906\u7907\u7908\u7909\u790A\u790B\u790C"+
-            "\u790D\u790E\u790F\u7910\u7911\u7912\u7913\u7914"+
-            "\u7915\u7916\u7917\u7918\u7919\u791A\u791B\u791C"+
-            "\u791D\u791E\u791F\u7920\u7921\u7922\u7923\u7924"+
-            "\u7925\u7926\u7927\u7928\u7929\u792A\u792B\u792C"+
-            "\u792D\u792E\u792F\u7930\u7931\u7932\u7933\u7934"+
-            "\u7935\u7936\u7937\u7938\u7939\u793A\u793B\u793C"+
-            "\u793D\u793E\u793F\u7940\u7941\u7942\u7943\u7944"+
-            "\u7945\u7946\u7947\u7948\u7949\u794A\u794B\u794C"+
-            "\u794D\u794E\u794F\u7950\u7951\u7952\u7953\u7954"+
-            "\u7955\u7956\u7957\u7958\u7959\u795A\u795B\u795C"+
-            "\u795D\u795E\u795F\u7960\u7961\u7962\u7963\u7964"+
-            "\u7965\u7966\u7967\u7968\u7969\u796A\u796B\u796C"+
-            "\u796D\u796E\u796F\u7970\u7971\u7972\u7973\u7974"+
-            "\u7975\u7976\u7977\u7978\u7979\u797A\u797B\u797C"+
-            "\u797D\u797E\u797F\u7980\u7981\u7982\u7983\u7984"+
-            "\u7985\u7986\u7987\u7988\u7989\u798A\u798B\u798C"+
-            "\u798D\u798E\u798F\u7990\u7991\u7992\u7993\u7994"+
-            "\u7995\u7996\u7997\u7998\u7999\u799A\u799B\u799C"+
-            "\u799D\u799E\u799F\u79A0\u79A1\u79A2\u79A3\u79A4"+
-            "\u79A5\u79A6\u79A7\u79A8\u79A9\u79AA\u79AB\u79AC"+
-            "\u79AD\u79AE\u79AF\u79B0\u79B1\u79B2\u79B3\u79B4"+
-            "\u79B5\u79B6\u79B7\u79B8\u79B9\u79BA\u79BB\u79BC"+
-            "\u79BD\u79BE\u79BF\u79C0\u79C1\u79C2\u79C3\u79C4"+
-            "\u79C5\u79C6\u79C7\u79C8\u79C9\u79CA\u79CB\u79CC"+
-            "\u79CD\u79CE\u79CF\u79D0\u79D1\u79D2\u79D3\u79D4"+
-            "\u79D5\u79D6\u79D7\u79D8\u79D9\u79DA\u79DB\u79DC"+
-            "\u79DD\u79DE\u79DF\u79E0\u79E1\u79E2\u79E3\u79E4"+
-            "\u79E5\u79E6\u79E7\u79E8\u79E9\u79EA\u79EB\u79EC"+
-            "\u79ED\u79EE\u79EF\u79F0\u79F1\u79F2\u79F3\u79F4"+
-            "\u79F5\u79F6\u79F7\u79F8\u79F9\u79FA\u79FB\u79FC"+
-            "\u79FD\u79FE\u79FF\u7A00\u7A01\u7A02\u7A03\u7A04"+
-            "\u7A05\u7A06\u7A07\u7A08\u7A09\u7A0A\u7A0B\u7A0C"+
-            "\u7A0D\u7A0E\u7A0F\u7A10\u7A11\u7A12\u7A13\u7A14"+
-            "\u7A15\u7A16\u7A17\u7A18\u7A19\u7A1A\u7A1B\u7A1C"+
-            "\u7A1D\u7A1E\u7A1F\u7A20\u7A21\u7A22\u7A23\u7A24"+
-            "\u7A25\u7A26\u7A27\u7A28\u7A29\u7A2A\u7A2B\u7A2C"+
-            "\u7A2D\u7A2E\u7A2F\u7A30\u7A31\u7A32\u7A33\u7A34"+
-            "\u7A35\u7A36\u7A37\u7A38\u7A39\u7A3A\u7A3B\u7A3C"+
-            "\u7A3D\u7A3E\u7A3F\u7A40\u7A41\u7A42\u7A43\u7A44"+
-            "\u7A45\u7A46\u7A47\u7A48\u7A49\u7A4A\u7A4B\u7A4C"+
-            "\u7A4D\u7A4E\u7A4F\u7A50\u7A51\u7A52\u7A53\u7A54"+
-            "\u7A55\u7A56\u7A57\u7A58\u7A59\u7A5A\u7A5B\u7A5C"+
-            "\u7A5D\u7A5E\u7A5F\u7A60\u7A61\u7A62\u7A63\u7A64"+
-            "\u7A65\u7A66\u7A67\u7A68\u7A69\u7A6A\u7A6B\u7A6C"+
-            "\u7A6D\u7A6E\u7A6F\u7A70\u7A71\u7A72\u7A73\u7A74"+
-            "\u7A75\u7A76\u7A77\u7A78\u7A79\u7A7A\u7A7B\u7A7C"+
-            "\u7A7D\u7A7E\u7A7F\u7A80\u7A81\u7A82\u7A83\u7A84"+
-            "\u7A85\u7A86\u7A87\u7A88\u7A89\u7A8A\u7A8B\u7A8C"+
-            "\u7A8D\u7A8E\u7A8F\u7A90\u7A91\u7A92\u7A93\u7A94"+
-            "\u7A95\u7A96\u7A97\u7A98\u7A99\u7A9A\u7A9B\u7A9C"+
-            "\u7A9D\u7A9E\u7A9F\u7AA0\u7AA1\u7AA2\u7AA3\u7AA4"+
-            "\u7AA5\u7AA6\u7AA7\u7AA8\u7AA9\u7AAA\u7AAB\u7AAC"+
-            "\u7AAD\u7AAE\u7AAF\u7AB0\u7AB1\u7AB2\u7AB3\u7AB4"+
-            "\u7AB5\u7AB6\u7AB7\u7AB8\u7AB9\u7ABA\u7ABB\u7ABC";
-
-        private final static String innerIndex8=
-            "\u7ABD\u7ABE\u7ABF\u7AC0\u7AC1\u7AC2\u7AC3\u7AC4"+
-            "\u7AC5\u7AC6\u7AC7\u7AC8\u7AC9\u7ACA\u7ACB\u7ACC"+
-            "\u7ACD\u7ACE\u7ACF\u7AD0\u7AD1\u7AD2\u7AD3\u7AD4"+
-            "\u7AD5\u7AD6\u7AD7\u7AD8\u7AD9\u7ADA\u7ADB\u7ADC"+
-            "\u7ADD\u7ADE\u7ADF\u7AE0\u7AE1\u7AE2\u7AE3\u7AE4"+
-            "\u7AE5\u7AE6\u7AE7\u7AE8\u7AE9\u7AEA\u7AEB\u7AEC"+
-            "\u7AED\u7AEE\u7AEF\u7AF0\u7AF1\u7AF2\u7AF3\u7AF4"+
-            "\u7AF5\u7AF6\u7AF7\u7AF8\u7AF9\u7AFA\u7AFB\u7AFC"+
-            "\u7AFD\u7AFE\u7AFF\u7B00\u7B01\u7B02\u7B03\u7B04"+
-            "\u7B05\u7B06\u7B07\u7B08\u7B09\u7B0A\u7B0B\u7B0C"+
-            "\u7B0D\u7B0E\u7B0F\u7B10\u7B11\u7B12\u7B13\u7B14"+
-            "\u7B15\u7B16\u7B17\u7B18\u7B19\u7B1A\u7B1B\u7B1C"+
-            "\u7B1D\u7B1E\u7B1F\u7B20\u7B21\u7B22\u7B23\u7B24"+
-            "\u7B25\u7B26\u7B27\u7B28\u7B29\u7B2A\u7B2B\u7B2C"+
-            "\u7B2D\u7B2E\u7B2F\u7B30\u7B31\u7B32\u7B33\u7B34"+
-            "\u7B35\u7B36\u7B37\u7B38\u7B39\u7B3A\u7B3B\u7B3C"+
-            "\u7B3D\u7B3E\u7B3F\u7B40\u7B41\u7B42\u7B43\u7B44"+
-            "\u7B45\u7B46\u7B47\u7B48\u7B49\u7B4A\u7B4B\u7B4C"+
-            "\u7B4D\u7B4E\u7B4F\u7B50\u7B51\u7B52\u7B53\u7B54"+
-            "\u7B55\u7B56\u7B57\u7B58\u7B59\u7B5A\u7B5B\u7B5C"+
-            "\u7B5D\u7B5E\u7B5F\u7B60\u7B61\u7B62\u7B63\u7B64"+
-            "\u7B65\u7B66\u7B67\u7B68\u7B69\u7B6A\u7B6B\u7B6C"+
-            "\u7B6D\u7B6E\u7B6F\u7B70\u7B71\u7B72\u7B73\u7B74"+
-            "\u7B75\u7B76\u7B77\u7B78\u7B79\u7B7A\u7B7B\u7B7C"+
-            "\u7B7D\u7B7E\u7B7F\u7B80\u7B81\u7B82\u7B83\u7B84"+
-            "\u7B85\u7B86\u7B87\u7B88\u7B89\u7B8A\u7B8B\u7B8C"+
-            "\u7B8D\u7B8E\u7B8F\u7B90\u7B91\u7B92\u7B93\u7B94"+
-            "\u7B95\u7B96\u7B97\u7B98\u7B99\u7B9A\u7B9B\u7B9C"+
-            "\u7B9D\u7B9E\u7B9F\u7BA0\u7BA1\u7BA2\u7BA3\u7BA4"+
-            "\u7BA5\u7BA6\u7BA7\u7BA8\u7BA9\u7BAA\u7BAB\u7BAC"+
-            "\u7BAD\u7BAE\u7BAF\u7BB0\u7BB1\u7BB2\u7BB3\u7BB4"+
-            "\u7BB5\u7BB6\u7BB7\u7BB8\u7BB9\u7BBA\u7BBB\u7BBC"+
-            "\u7BBD\u7BBE\u7BBF\u7BC0\u7BC1\u7BC2\u7BC3\u7BC4"+
-            "\u7BC5\u7BC6\u7BC7\u7BC8\u7BC9\u7BCA\u7BCB\u7BCC"+
-            "\u7BCD\u7BCE\u7BCF\u7BD0\u7BD1\u7BD2\u7BD3\u7BD4"+
-            "\u7BD5\u7BD6\u7BD7\u7BD8\u7BD9\u7BDA\u7BDB\u7BDC"+
-            "\u7BDD\u7BDE\u7BDF\u7BE0\u7BE1\u7BE2\u7BE3\u7BE4"+
-            "\u7BE5\u7BE6\u7BE7\u7BE8\u7BE9\u7BEA\u7BEB\u7BEC"+
-            "\u7BED\u7BEE\u7BEF\u7BF0\u7BF1\u7BF2\u7BF3\u7BF4"+
-            "\u7BF5\u7BF6\u7BF7\u7BF8\u7BF9\u7BFA\u7BFB\u7BFC"+
-            "\u7BFD\u7BFE\u7BFF\u7C00\u7C01\u7C02\u7C03\u7C04"+
-            "\u7C05\u7C06\u7C07\u7C08\u7C09\u7C0A\u7C0B\u7C0C"+
-            "\u7C0D\u7C0E\u7C0F\u7C10\u7C11\u7C12\u7C13\u7C14"+
-            "\u7C15\u7C16\u7C17\u7C18\u7C19\u7C1A\u7C1B\u7C1C"+
-            "\u7C1D\u7C1E\u7C1F\u7C20\u7C21\u7C22\u7C23\u7C24"+
-            "\u7C25\u7C26\u7C27\u7C28\u7C29\u7C2A\u7C2B\u7C2C"+
-            "\u7C2D\u7C2E\u7C2F\u7C30\u7C31\u7C32\u7C33\u7C34"+
-            "\u7C35\u7C36\u7C37\u7C38\u7C39\u7C3A\u7C3B\u7C3C"+
-            "\u7C3D\u7C3E\u7C3F\u7C40\u7C41\u7C42\u7C43\u7C44"+
-            "\u7C45\u7C46\u7C47\u7C48\u7C49\u7C4A\u7C4B\u7C4C"+
-            "\u7C4D\u7C4E\u7C4F\u7C50\u7C51\u7C52\u7C53\u7C54"+
-            "\u7C55\u7C56\u7C57\u7C58\u7C59\u7C5A\u7C5B\u7C5C"+
-            "\u7C5D\u7C5E\u7C5F\u7C60\u7C61\u7C62\u7C63\u7C64"+
-            "\u7C65\u7C66\u7C67\u7C68\u7C69\u7C6A\u7C6B\u7C6C"+
-            "\u7C6D\u7C6E\u7C6F\u7C70\u7C71\u7C72\u7C73\u7C74"+
-            "\u7C75\u7C76\u7C77\u7C78\u7C79\u7C7A\u7C7B\u7C7C"+
-            "\u7C7D\u7C7E\u7C7F\u7C80\u7C81\u7C82\u7C83\u7C84"+
-            "\u7C85\u7C86\u7C87\u7C88\u7C89\u7C8A\u7C8B\u7C8C"+
-            "\u7C8D\u7C8E\u7C8F\u7C90\u7C91\u7C92\u7C93\u7C94"+
-            "\u7C95\u7C96\u7C97\u7C98\u7C99\u7C9A\u7C9B\u7C9C"+
-            "\u7C9D\u7C9E\u7C9F\u7CA0\u7CA1\u7CA2\u7CA3\u7CA4"+
-            "\u7CA5\u7CA6\u7CA7\u7CA8\u7CA9\u7CAA\u7CAB\u7CAC"+
-            "\u7CAD\u7CAE\u7CAF\u7CB0\u7CB1\u7CB2\u7CB3\u7CB4"+
-            "\u7CB5\u7CB6\u7CB7\u7CB8\u7CB9\u7CBA\u7CBB\u7CBC"+
-            "\u7CBD\u7CBE\u7CBF\u7CC0\u7CC1\u7CC2\u7CC3\u7CC4"+
-            "\u7CC5\u7CC6\u7CC7\u7CC8\u7CC9\u7CCA\u7CCB\u7CCC"+
-            "\u7CCD\u7CCE\u7CCF\u7CD0\u7CD1\u7CD2\u7CD3\u7CD4"+
-            "\u7CD5\u7CD6\u7CD7\u7CD8\u7CD9\u7CDA\u7CDB\u7CDC"+
-            "\u7CDD\u7CDE\u7CDF\u7CE0\u7CE1\u7CE2\u7CE3\u7CE4"+
-            "\u7CE5\u7CE6\u7CE7\u7CE8\u7CE9\u7CEA\u7CEB\u7CEC"+
-            "\u7CED\u7CEE\u7CEF\u7CF0\u7CF1\u7CF2\u7CF3\u7CF4"+
-            "\u7CF5\u7CF6\u7CF7\u7CF8\u7CF9\u7CFA\u7CFB\u7CFC"+
-            "\u7CFD\u7CFE\u7CFF\u7D00\u7D01\u7D02\u7D03\u7D04"+
-            "\u7D05\u7D06\u7D07\u7D08\u7D09\u7D0A\u7D0B\u7D0C"+
-            "\u7D0D\u7D0E\u7D0F\u7D10\u7D11\u7D12\u7D13\u7D14"+
-            "\u7D15\u7D16\u7D17\u7D18\u7D19\u7D1A\u7D1B\u7D1C"+
-            "\u7D1D\u7D1E\u7D1F\u7D20\u7D21\u7D22\u7D23\u7D24"+
-            "\u7D25\u7D26\u7D27\u7D28\u7D29\u7D2A\u7D2B\u7D2C"+
-            "\u7D2D\u7D2E\u7D2F\u7D30\u7D31\u7D32\u7D33\u7D34"+
-            "\u7D35\u7D36\u7D37\u7D38\u7D39\u7D3A\u7D3B\u7D3C"+
-            "\u7D3D\u7D3E\u7D3F\u7D40\u7D41\u7D42\u7D43\u7D44"+
-            "\u7D45\u7D46\u7D47\u7D48\u7D49\u7D4A\u7D4B\u7D4C"+
-            "\u7D4D\u7D4E\u7D4F\u7D50\u7D51\u7D52\u7D53\u7D54"+
-            "\u7D55\u7D56\u7D57\u7D58\u7D59\u7D5A\u7D5B\u7D5C"+
-            "\u7D5D\u7D5E\u7D5F\u7D60\u7D61\u7D62\u7D63\u7D64"+
-            "\u7D65\u7D66\u7D67\u7D68\u7D69\u7D6A\u7D6B\u7D6C"+
-            "\u7D6D\u7D6E\u7D6F\u7D70\u7D71\u7D72\u7D73\u7D74"+
-            "\u7D75\u7D76\u7D77\u7D78\u7D79\u7D7A\u7D7B\u7D7C"+
-            "\u7D7D\u7D7E\u7D7F\u7D80\u7D81\u7D82\u7D83\u7D84"+
-            "\u7D85\u7D86\u7D87\u7D88\u7D89\u7D8A\u7D8B\u7D8C"+
-            "\u7D8D\u7D8E\u7D8F\u7D90\u7D91\u7D92\u7D93\u7D94"+
-            "\u7D95\u7D96\u7D97\u7D98\u7D99\u7D9A\u7D9B\u7D9C"+
-            "\u7D9D\u7D9E\u7D9F\u7DA0\u7DA1\u7DA2\u7DA3\u7DA4"+
-            "\u7DA5\u7DA6\u7DA7\u7DA8\u7DA9\u7DAA\u7DAB\u7DAC"+
-            "\u7DAD\u7DAE\u7DAF\u7DB0\u7DB1\u7DB2\u7DB3\u7DB4"+
-            "\u7DB5\u7DB6\u7DB7\u7DB8\u7DB9\u7DBA\u7DBB\u7DBC"+
-            "\u7DBD\u7DBE\u7DBF\u7DC0\u7DC1\u7DC2\u7DC3\u7DC4"+
-            "\u7DC5\u7DC6\u7DC7\u7DC8\u7DC9\u7DCA\u7DCB\u7DCC"+
-            "\u7DCD\u7DCE\u7DCF\u7DD0\u7DD1\u7DD2\u7DD3\u7DD4"+
-            "\u7DD5\u7DD6\u7DD7\u7DD8\u7DD9\u7DDA\u7DDB\u7DDC"+
-            "\u7DDD\u7DDE\u7DDF\u7DE0\u7DE1\u7DE2\u7DE3\u7DE4"+
-            "\u7DE5\u7DE6\u7DE7\u7DE8\u7DE9\u7DEA\u7DEB\u7DEC"+
-            "\u7DED\u7DEE\u7DEF\u7DF0\u7DF1\u7DF2\u7DF3\u7DF4"+
-            "\u7DF5\u7DF6\u7DF7\u7DF8\u7DF9\u7DFA\u7DFB\u7DFC"+
-            "\u7DFD\u7DFE\u7DFF\u7E00\u7E01\u7E02\u7E03\u7E04"+
-            "\u7E05\u7E06\u7E07\u7E08\u7E09\u7E0A\u7E0B\u7E0C"+
-            "\u7E0D\u7E0E\u7E0F\u7E10\u7E11\u7E12\u7E13\u7E14"+
-            "\u7E15\u7E16\u7E17\u7E18\u7E19\u7E1A\u7E1B\u7E1C"+
-            "\u7E1D\u7E1E\u7E1F\u7E20\u7E21\u7E22\u7E23\u7E24"+
-            "\u7E25\u7E26\u7E27\u7E28\u7E29\u7E2A\u7E2B\u7E2C"+
-            "\u7E2D\u7E2E\u7E2F\u7E30\u7E31\u7E32\u7E33\u7E34"+
-            "\u7E35\u7E36\u7E37\u7E38\u7E39\u7E3A\u7E3B\u7E3C"+
-            "\u7E3D\u7E3E\u7E3F\u7E40\u7E41\u7E42\u7E43\u7E44"+
-            "\u7E45\u7E46\u7E47\u7E48\u7E49\u7E4A\u7E4B\u7E4C"+
-            "\u7E4D\u7E4E\u7E4F\u7E50\u7E51\u7E52\u7E53\u7E54"+
-            "\u7E55\u7E56\u7E57\u7E58\u7E59\u7E5A\u7E5B\u7E5C"+
-            "\u7E5D\u7E5E\u7E5F\u7E60\u7E61\u7E62\u7E63\u7E64"+
-            "\u7E65\u7E66\u7E67\u7E68\u7E69\u7E6A\u7E6B\u7E6C"+
-            "\u7E6D\u7E6E\u7E6F\u7E70\u7E71\u7E72\u7E73\u7E74"+
-            "\u7E75\u7E76\u7E77\u7E78\u7E79\u7E7A\u7E7B\u7E7C"+
-            "\u7E7D\u7E7E\u7E7F\u7E80\u7E81\u7E82\u7E83\u7E84"+
-            "\u7E85\u7E86\u7E87\u7E88\u7E89\u7E8A\u7E8B\u7E8C"+
-            "\u7E8D\u7E8E\u7E8F\u7E90\u7E91\u7E92\u7E93\u7E94"+
-            "\u7E95\u7E96\u7E97\u7E98\u7E99\u7E9A\u7E9B\u7E9C"+
-            "\u7E9D\u7E9E\u7E9F\u7EA0\u7EA1\u7EA2\u7EA3\u7EA4"+
-            "\u7EA5\u7EA6\u7EA7\u7EA8\u7EA9\u7EAA\u7EAB\u7EAC"+
-            "\u7EAD\u7EAE\u7EAF\u7EB0\u7EB1\u7EB2\u7EB3\u7EB4"+
-            "\u7EB5\u7EB6\u7EB7\u7EB8\u7EB9\u7EBA\u7EBB\u7EBC"+
-            "\u7EBD\u7EBE\u7EBF\u7EC0\u7EC1\u7EC2\u7EC3\u7EC4"+
-            "\u7EC5\u7EC6\u7EC7\u7EC8\u7EC9\u7ECA\u7ECB\u7ECC"+
-            "\u7ECD\u7ECE\u7ECF\u7ED0\u7ED1\u7ED2\u7ED3\u7ED4"+
-            "\u7ED5\u7ED6\u7ED7\u7ED8\u7ED9\u7EDA\u7EDB\u7EDC"+
-            "\u7EDD\u7EDE\u7EDF\u7EE0\u7EE1\u7EE2\u7EE3\u7EE4"+
-            "\u7EE5\u7EE6\u7EE7\u7EE8\u7EE9\u7EEA\u7EEB\u7EEC"+
-            "\u7EED\u7EEE\u7EEF\u7EF0\u7EF1\u7EF2\u7EF3\u7EF4"+
-            "\u7EF5\u7EF6\u7EF7\u7EF8\u7EF9\u7EFA\u7EFB\u7EFC"+
-            "\u7EFD\u7EFE\u7EFF\u7F00\u7F01\u7F02\u7F03\u7F04"+
-            "\u7F05\u7F06\u7F07\u7F08\u7F09\u7F0A\u7F0B\u7F0C"+
-            "\u7F0D\u7F0E\u7F0F\u7F10\u7F11\u7F12\u7F13\u7F14"+
-            "\u7F15\u7F16\u7F17\u7F18\u7F19\u7F1A\u7F1B\u7F1C"+
-            "\u7F1D\u7F1E\u7F1F\u7F20\u7F21\u7F22\u7F23\u7F24"+
-            "\u7F25\u7F26\u7F27\u7F28\u7F29\u7F2A\u7F2B\u7F2C"+
-            "\u7F2D\u7F2E\u7F2F\u7F30\u7F31\u7F32\u7F33\u7F34"+
-            "\u7F35\u7F36\u7F37\u7F38\u7F39\u7F3A\u7F3B\u7F3C"+
-            "\u7F3D\u7F3E\u7F3F\u7F40\u7F41\u7F42\u7F43\u7F44"+
-            "\u7F45\u7F46\u7F47\u7F48\u7F49\u7F4A\u7F4B\u7F4C"+
-            "\u7F4D\u7F4E\u7F4F\u7F50\u7F51\u7F52\u7F53\u7F54"+
-            "\u7F55\u7F56\u7F57\u7F58\u7F59\u7F5A\u7F5B\u7F5C"+
-            "\u7F5D\u7F5E\u7F5F\u7F60\u7F61\u7F62\u7F63\u7F64"+
-            "\u7F65\u7F66\u7F67\u7F68\u7F69\u7F6A\u7F6B\u7F6C"+
-            "\u7F6D\u7F6E\u7F6F\u7F70\u7F71\u7F72\u7F73\u7F74"+
-            "\u7F75\u7F76\u7F77\u7F78\u7F79\u7F7A\u7F7B\u7F7C"+
-            "\u7F7D\u7F7E\u7F7F\u7F80\u7F81\u7F82\u7F83\u7F84"+
-            "\u7F85\u7F86\u7F87\u7F88\u7F89\u7F8A\u7F8B\u7F8C"+
-            "\u7F8D\u7F8E\u7F8F\u7F90\u7F91\u7F92\u7F93\u7F94"+
-            "\u7F95\u7F96\u7F97\u7F98\u7F99\u7F9A\u7F9B\u7F9C"+
-            "\u7F9D\u7F9E\u7F9F\u7FA0\u7FA1\u7FA2\u7FA3\u7FA4"+
-            "\u7FA5\u7FA6\u7FA7\u7FA8\u7FA9\u7FAA\u7FAB\u7FAC"+
-            "\u7FAD\u7FAE\u7FAF\u7FB0\u7FB1\u7FB2\u7FB3\u7FB4"+
-            "\u7FB5\u7FB6\u7FB7\u7FB8\u7FB9\u7FBA\u7FBB\u7FBC"+
-            "\u7FBD\u7FBE\u7FBF\u7FC0\u7FC1\u7FC2\u7FC3\u7FC4"+
-            "\u7FC5\u7FC6\u7FC7\u7FC8\u7FC9\u7FCA\u7FCB\u7FCC"+
-            "\u7FCD\u7FCE\u7FCF\u7FD0\u7FD1\u7FD2\u7FD3\u7FD4"+
-            "\u7FD5\u7FD6\u7FD7\u7FD8\u7FD9\u7FDA\u7FDB\u7FDC"+
-            "\u7FDD\u7FDE\u7FDF\u7FE0\u7FE1\u7FE2\u7FE3\u7FE4"+
-            "\u7FE5\u7FE6\u7FE7\u7FE8\u7FE9\u7FEA\u7FEB\u7FEC"+
-            "\u7FED\u7FEE\u7FEF\u7FF0\u7FF1\u7FF2\u7FF3\u7FF4"+
-            "\u7FF5\u7FF6\u7FF7\u7FF8\u7FF9\u7FFA\u7FFB\u7FFC"+
-            "\u7FFD\u7FFE\u7FFF\u8000\u8001\u8002\u8003\u8004"+
-            "\u8005\u8006\u8007\u8008\u8009\u800A\u800B\u800C"+
-            "\u800D\u800E\u800F\u8010\u8011\u8012\u8013\u8014"+
-            "\u8015\u8016\u8017\u8018\u8019\u801A\u801B\u801C"+
-            "\u801D\u801E\u801F\u8020\u8021\u8022\u8023\u8024"+
-            "\u8025\u8026\u8027\u8028\u8029\u802A\u802B\u802C"+
-            "\u802D\u802E\u802F\u8030\u8031\u8032\u8033\u8034"+
-            "\u8035\u8036\u8037\u8038\u8039\u803A\u803B\u803C"+
-            "\u803D\u803E\u803F\u8040\u8041\u8042\u8043\u8044"+
-            "\u8045\u8046\u8047\u8048\u8049\u804A\u804B\u804C"+
-            "\u804D\u804E\u804F\u8050\u8051\u8052\u8053\u8054"+
-            "\u8055\u8056\u8057\u8058\u8059\u805A\u805B\u805C"+
-            "\u805D\u805E\u805F\u8060\u8061\u8062\u8063\u8064"+
-            "\u8065\u8066\u8067\u8068\u8069\u806A\u806B\u806C"+
-            "\u806D\u806E\u806F\u8070\u8071\u8072\u8073\u8074"+
-            "\u8075\u8076\u8077\u8078\u8079\u807A\u807B\u807C"+
-            "\u807D\u807E\u807F\u8080\u8081\u8082\u8083\u8084"+
-            "\u8085\u8086\u8087\u8088\u8089\u808A\u808B\u808C"+
-            "\u808D\u808E\u808F\u8090\u8091\u8092\u8093\u8094"+
-            "\u8095\u8096\u8097\u8098\u8099\u809A\u809B\u809C"+
-            "\u809D\u809E\u809F\u80A0\u80A1\u80A2\u80A3\u80A4"+
-            "\u80A5\u80A6\u80A7\u80A8\u80A9\u80AA\u80AB\u80AC"+
-            "\u80AD\u80AE\u80AF\u80B0\u80B1\u80B2\u80B3\u80B4"+
-            "\u80B5\u80B6\u80B7\u80B8\u80B9\u80BA\u80BB\u80BC"+
-            "\u80BD\u80BE\u80BF\u80C0\u80C1\u80C2\u80C3\u80C4"+
-            "\u80C5\u80C6\u80C7\u80C8\u80C9\u80CA\u80CB\u80CC"+
-            "\u80CD\u80CE\u80CF\u80D0\u80D1\u80D2\u80D3\u80D4"+
-            "\u80D5\u80D6\u80D7\u80D8\u80D9\u80DA\u80DB\u80DC"+
-            "\u80DD\u80DE\u80DF\u80E0\u80E1\u80E2\u80E3\u80E4"+
-            "\u80E5\u80E6\u80E7\u80E8\u80E9\u80EA\u80EB\u80EC"+
-            "\u80ED\u80EE\u80EF\u80F0\u80F1\u80F2\u80F3\u80F4"+
-            "\u80F5\u80F6\u80F7\u80F8\u80F9\u80FA\u80FB\u80FC"+
-            "\u80FD\u80FE\u80FF\u8100\u8101\u8102\u8103\u8104"+
-            "\u8105\u8106\u8107\u8108\u8109\u810A\u810B\u810C"+
-            "\u810D\u810E\u810F\u8110\u8111\u8112\u8113\u8114"+
-            "\u8115\u8116\u8117\u8118\u8119\u811A\u811B\u811C"+
-            "\u811D\u811E\u811F\u8120\u8121\u8122\u8123\u8124"+
-            "\u8125\u8126\u8127\u8128\u8129\u812A\u812B\u812C"+
-            "\u812D\u812E\u812F\u8130\u8131\u8132\u8133\u8134"+
-            "\u8135\u8136\u8137\u8138\u8139\u813A\u813B\u813C"+
-            "\u813D\u813E\u813F\u8140\u8141\u8142\u8143\u8144"+
-            "\u8145\u8146\u8147\u8148\u8149\u814A\u814B\u814C"+
-            "\u814D\u814E\u814F\u8150\u8151\u8152\u8153\u8154"+
-            "\u8155\u8156\u8157\u8158\u8159\u815A\u815B\u815C"+
-            "\u815D\u815E\u815F\u8160\u8161\u8162\u8163\u8164"+
-            "\u8165\u8166\u8167\u8168\u8169\u816A\u816B\u816C"+
-            "\u816D\u816E\u816F\u8170\u8171\u8172\u8173\u8174"+
-            "\u8175\u8176\u8177\u8178\u8179\u817A\u817B\u817C"+
-            "\u817D\u817E\u817F\u8180\u8181\u8182\u8183\u8184"+
-            "\u8185\u8186\u8187\u8188\u8189\u818A\u818B\u818C"+
-            "\u818D\u818E\u818F\u8190\u8191\u8192\u8193\u8194"+
-            "\u8195\u8196\u8197\u8198\u8199\u819A\u819B\u819C"+
-            "\u819D\u819E\u819F\u81A0\u81A1\u81A2\u81A3\u81A4"+
-            "\u81A5\u81A6\u81A7\u81A8\u81A9\u81AA\u81AB\u81AC"+
-            "\u81AD\u81AE\u81AF\u81B0\u81B1\u81B2\u81B3\u81B4"+
-            "\u81B5\u81B6\u81B7\u81B8\u81B9\u81BA\u81BB\u81BC"+
-            "\u81BD\u81BE\u81BF\u81C0\u81C1\u81C2\u81C3\u81C4"+
-            "\u81C5\u81C6\u81C7\u81C8\u81C9\u81CA\u81CB\u81CC"+
-            "\u81CD\u81CE\u81CF\u81D0\u81D1\u81D2\u81D3\u81D4"+
-            "\u81D5\u81D6\u81D7\u81D8\u81D9\u81DA\u81DB\u81DC"+
-            "\u81DD\u81DE\u81DF\u81E0\u81E1\u81E2\u81E3\u81E4"+
-            "\u81E5\u81E6\u81E7\u81E8\u81E9\u81EA\u81EB\u81EC"+
-            "\u81ED\u81EE\u81EF\u81F0\u81F1\u81F2\u81F3\u81F4"+
-            "\u81F5\u81F6\u81F7\u81F8\u81F9\u81FA\u81FB\u81FC"+
-            "\u81FD\u81FE\u81FF\u8200\u8201\u8202\u8203\u8204"+
-            "\u8205\u8206\u8207\u8208\u8209\u820A\u820B\u820C"+
-            "\u820D\u820E\u820F\u8210\u8211\u8212\u8213\u8214"+
-            "\u8215\u8216\u8217\u8218\u8219\u821A\u821B\u821C"+
-            "\u821D\u821E\u821F\u8220\u8221\u8222\u8223\u8224"+
-            "\u8225\u8226\u8227\u8228\u8229\u822A\u822B\u822C"+
-            "\u822D\u822E\u822F\u8230\u8231\u8232\u8233\u8234"+
-            "\u8235\u8236\u8237\u8238\u8239\u823A\u823B\u823C"+
-            "\u823D\u823E\u823F\u8240\u8241\u8242\u8243\u8244"+
-            "\u8245\u8246\u8247\u8248\u8249\u824A\u824B\u824C"+
-            "\u824D\u824E\u824F\u8250\u8251\u8252\u8253\u8254"+
-            "\u8255\u8256\u8257\u8258\u8259\u825A\u825B\u825C"+
-            "\u825D\u825E\u825F\u8260\u8261\u8262\u8263\u8264"+
-            "\u8265\u8266\u8267\u8268\u8269\u826A\u826B\u826C"+
-            "\u826D\u826E\u826F\u8270\u8271\u8272\u8273\u8274"+
-            "\u8275\u8276\u8277\u8278\u8279\u827A\u827B\u827C"+
-            "\u827D\u827E\u827F\u8280\u8281\u8282\u8283\u8284"+
-            "\u8285\u8286\u8287\u8288\u8289\u828A\u828B\u828C"+
-            "\u828D\u828E\u828F\u8290\u8291\u8292\u8293\u8294"+
-            "\u8295\u8296\u8297\u8298\u8299\u829A\u829B\u829C"+
-            "\u829D\u829E\u829F\u82A0\u82A1\u82A2\u82A3\u82A4"+
-            "\u82A5\u82A6\u82A7\u82A8\u82A9\u82AA\u82AB\u82AC"+
-            "\u82AD\u82AE\u82AF\u82B0\u82B1\u82B2\u82B3\u82B4"+
-            "\u82B5\u82B6\u82B7\u82B8\u82B9\u82BA\u82BB\u82BC"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u82BD\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u82BE\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u82BF"+
-            "\u82C0\u82C1\u82C2\u82C3\u82C4\u82C5\u82C6\u82C7"+
-            "\u82C8\u82C9\u82CA\u82CB\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u82CC\u0000\u0000"+
-            "\u0000\u82CD\u82CE\u82CF\u82D0\u82D1\u0000\u82D2"+
-            "\u82D3\u82D4\u82D5\u82D6\u82D7\u82D8\u0000\u82D9"+
-            "\u82DA\u82DB\u82DC\u0000\u0000\u82DD\u82DE\u82DF"+
-            "\u82E0\u0000\u0000\u82E1\u82E2\u82E3\u82E4\u82E5"+
-            "\u82E6\u82E7\u82E8\u0000\u82E9\u82EA\u82EB\u82EC"+
-            "\u82ED\u82EE\u82EF\u0000\u82F0\u82F1\u82F2\u82F3"+
-            "\u82F4\u82F5\u82F6\u82F7\u82F8\u82F9\u82FA\u82FB"+
-            "\u82FC\u82FD\u82FE\u82FF\u0000\u0000\u8300\u8301"+
-            "\u8302\u8303\u8304\u8305\u8306\u8307\u8308\u8309"+
-            "\u830A\u830B\u830C\u830D\u0000\u830E\u830F\u8310"+
-            "\u8311\u8312\u8313\u8314\u8315\u8316\u8317\u8318"+
-            "\u8319\u831A\u831B\u831C\u831D\u831E\u831F\u8320"+
-            "\u8321\u8322\u8323\u8324\u8325\u8326\u8327\u8328"+
-            "\u8329\u832A\u832B\u832C\u832D\u832E\u832F\u8330"+
-            "\u8331\u8332\u8333\u8334\u8335\u8336\u8337\u8338"+
-            "\u8339\u833A\u833B\u833C\u833D\u833E\u833F\u8340"+
-            "\u8341\u8342\u8343\u8344\u8345\u8346\u8347\u8348"+
-            "\u8349\u834A\u834B\u834C\u834D\u834E\u834F\u8350"+
-            "\u8351\u8352\u8353\u8354\u8355\u8356\u8357\u8358"+
-            "\u8359\u835A\u835B\u835C\u835D\u835E\u835F\u8360"+
-            "\u8361\u8362\u8363\u8364\u8365\u8366\u8367\u8368"+
-            "\u8369\u836A\u836B\u836C\u836D\u836E\u836F\u8370"+
-            "\u8371\u8372\u8373\u8374\u8375\u8376\u8377\u8378"+
-            "\u8379\u837A\u837B\u837C\u837D\u837E\u837F\u8380"+
-            "\u8381\u8382\u8383\u8384\u8385\u8386\u8387\u8388"+
-            "\u8389\u838A\u838B\u838C\u838D\u838E\u838F\u8390"+
-            "\u8391\u8392\u8393\u8394\u8395\u8396\u8397\u8398"+
-            "\u8399\u839A\u839B\u839C\u839D\u839E\u839F\u83A0"+
-            "\u83A1\u83A2\u83A3\u83A4\u83A5\u83A6\u83A7\u83A8"+
-            "\u83A9\u83AA\u83AB\u83AC\u83AD\u83AE\u83AF\u83B0"+
-            "\u83B1\u83B2\u83B3\u83B4\u83B5\u83B6\u83B7\u83B8"+
-            "\u83B9\u83BA\u83BB\u83BC\u83BD\u83BE\u83BF\u83C0"+
-            "\u83C1\u83C2\u83C3\u83C4\u83C5\u83C6\u83C7\u83C8"+
-            "\u83C9\u83CA\u83CB\u83CC\u83CD\u83CE\u83CF\u83D0"+
-            "\u83D1\u83D2\u83D3\u83D4\u83D5\u83D6\u83D7\u83D8"+
-            "\u83D9\u83DA\u83DB\u83DC\u83DD\u83DE\u83DF\u83E0"+
-            "\u83E1\u83E2\u83E3\u83E4\u83E5\u83E6\u83E7\u83E8"+
-            "\u83E9\u83EA\u83EB\u83EC\u83ED\u83EE\u83EF\u83F0"+
-            "\u83F1\u83F2\u83F3\u83F4\u83F5\u83F6\u83F7\u83F8"+
-            "\u83F9\u83FA\u83FB\u83FC\u83FD\u83FE\u83FF\u8400"+
-            "\u8401\u8402\u8403\u8404\u8405\u8406\u8407\u8408"+
-            "\u8409\u840A\u840B\u840C\u840D\u840E\u840F\u8410"+
-            "\u8411\u8412\u8413\u8414\u8415\u8416\u8417\u8418"+
-            "\u8419\u841A\u841B\u841C\u841D\u841E\u841F\u8420"+
-            "\u8421\u8422\u8423\u8424\u8425\u8426\u8427\u8428"+
-            "\u8429\u842A\u842B\u842C\u842D\u842E\u842F\u8430"+
-            "\u8431\u8432\u8433\u8434\u8435\u8436\u8437\u8438"+
-            "\u8439\u843A\u843B\u843C\u843D\u843E\u843F\u8440"+
-            "\u8441\u8442\u8443\u8444\u8445\u8446\u8447\u8448"+
-            "\u8449\u844A\u844B\u844C\u844D\u844E\u844F\u8450"+
-            "\u8451\u8452\u8453\u8454\u8455\u8456\u8457\u8458"+
-            "\u8459\u845A\u845B\u845C\u845D\u845E\u845F\u8460"+
-            "\u8461\u8462\u8463\u8464\u8465\u8466\u8467\u8468"+
-            "\u8469\u846A\u846B\u846C\u846D\u846E\u846F\u8470"+
-            "\u8471\u8472\u8473\u8474\u8475\u8476\u8477\u8478"+
-            "\u8479\u847A\u847B\u847C\u847D\u847E\u847F\u8480"+
-            "\u8481\u8482\u8483\u8484\u8485\u8486\u8487\u8488"+
-            "\u8489\u848A\u848B\u848C\u848D\u848E\u848F\u8490"+
-            "\u8491\u8492\u8493\u8494\u8495\u8496\u8497\u8498"+
-            "\u8499\u849A\u849B\u849C\u849D\u849E\u849F\u84A0"+
-            "\u84A1\u84A2\u84A3\u84A4\u84A5\u84A6\u84A7\u84A8"+
-            "\u84A9\u84AA\u84AB\u84AC\u84AD\u84AE\u84AF\u84B0"+
-            "\u84B1\u84B2\u84B3\u84B4\u84B5\u84B6\u84B7\u84B8"+
-            "\u84B9\u84BA\u84BB\u84BC\u84BD\u84BE\u84BF\u84C0"+
-            "\u84C1\u84C2\u84C3\u84C4\u84C5\u84C6\u84C7\u84C8"+
-            "\u84C9\u84CA\u84CB\u84CC\u84CD\u84CE\u84CF\u84D0"+
-            "\u84D1\u84D2\u84D3\u84D4\u84D5\u84D6\u84D7\u84D8"+
-            "\u84D9\u84DA\u84DB\u84DC\u84DD\u84DE\u84DF\u84E0"+
-            "\u84E1\u84E2\u84E3\u84E4\u84E5\u84E6\u84E7\u84E8"+
-            "\u84E9\u84EA\u84EB\u84EC\u84ED\u84EE\u84EF\u84F0"+
-            "\u84F1\u84F2\u84F3\u84F4\u84F5\u84F6\u84F7\u84F8"+
-            "\u84F9\u84FA\u84FB\u84FC\u84FD\u84FE\u84FF\u8500"+
-            "\u8501\u8502\u8503\u8504\u8505\u8506\u8507\u8508"+
-            "\u8509\u850A\u850B\u850C\u850D\u850E\u850F\u8510"+
-            "\u8511\u8512\u8513\u8514\u8515\u8516\u8517\u8518"+
-            "\u8519\u851A\u851B\u851C\u851D\u851E\u851F\u8520"+
-            "\u8521\u8522\u8523\u8524\u8525\u8526\u8527\u8528"+
-            "\u8529\u852A\u852B\u852C\u852D\u852E\u852F\u8530"+
-            "\u8531\u8532\u8533\u8534\u8535\u8536\u8537\u8538"+
-            "\u8539\u853A\u853B\u853C\u853D\u853E\u853F\u8540"+
-            "\u8541\u8542\u8543\u8544\u8545\u8546\u8547\u8548"+
-            "\u8549\u854A\u854B\u854C\u854D\u854E\u854F\u8550"+
-            "\u8551\u8552\u8553\u8554\u8555\u8556\u8557\u8558"+
-            "\u8559\u855A\u855B\u855C\u855D\u855E\u855F\u8560"+
-            "\u8561\u8562\u8563\u8564\u8565\u8566\u8567\u8568"+
-            "\u8569\u856A\u856B\u856C\u856D\u856E\u856F\u8570"+
-            "\u8571\u8572\u8573\u8574\u8575\u8576\u8577\u8578"+
-            "\u8579\u857A\u857B\u857C\u857D\u857E\u857F\u8580"+
-            "\u8581\u8582\u8583\u8584\u8585\u8586\u8587\u8588"+
-            "\u8589\u858A\u858B\u858C\u858D\u858E\u858F\u8590"+
-            "\u8591\u8592\u8593\u8594\u8595\u8596\u8597\u8598"+
-            "\u8599\u859A\u859B\u859C\u859D\u859E\u859F\u85A0"+
-            "\u85A1\u85A2\u85A3\u85A4\u85A5\u85A6\u85A7\u85A8"+
-            "\u85A9\u85AA\u85AB\u85AC\u85AD\u85AE\u85AF\u85B0"+
-            "\u85B1\u85B2\u85B3\u85B4\u85B5\u85B6\u85B7\u85B8"+
-            "\u85B9\u85BA\u85BB\u85BC\u85BD\u85BE\u85BF\u85C0"+
-            "\u85C1\u85C2\u85C3\u85C4\u85C5\u85C6\u85C7\u85C8"+
-            "\u85C9\u85CA\u85CB\u85CC\u85CD\u85CE\u85CF\u85D0"+
-            "\u85D1\u85D2\u85D3\u85D4\u85D5\u85D6\u85D7\u85D8"+
-            "\u85D9\u85DA\u85DB\u85DC\u85DD\u85DE\u85DF\u85E0"+
-            "\u85E1\u85E2\u85E3\u85E4\u85E5\u85E6\u85E7\u85E8"+
-            "\u85E9\u85EA\u85EB\u85EC\u85ED\u85EE\u85EF\u85F0"+
-            "\u85F1\u85F2\u85F3\u85F4\u85F5\u85F6\u85F7\u85F8"+
-            "\u85F9\u85FA\u85FB\u85FC\u85FD\u85FE\u85FF\u8600"+
-            "\u8601\u8602\u8603\u8604\u8605\u8606\u8607\u8608"+
-            "\u8609\u860A\u860B\u860C\u860D\u860E\u860F\u8610"+
-            "\u8611\u8612\u8613\u8614\u8615\u8616\u8617\u8618"+
-            "\u8619\u861A\u861B\u861C\u861D\u861E\u861F\u8620"+
-            "\u8621\u8622\u8623\u8624\u8625\u8626\u8627\u8628"+
-            "\u8629\u862A\u862B\u862C\u862D\u862E\u862F\u8630"+
-            "\u8631\u8632\u8633\u8634\u8635\u8636\u8637\u8638"+
-            "\u8639\u863A\u863B\u863C\u863D\u863E\u863F\u8640"+
-            "\u8641\u8642\u8643\u8644\u8645\u8646\u8647\u8648"+
-            "\u8649\u864A\u864B\u864C\u864D\u864E\u864F\u8650"+
-            "\u8651\u8652\u8653\u8654\u8655\u8656\u8657\u8658"+
-            "\u8659\u865A\u865B\u865C\u865D\u865E\u865F\u8660"+
-            "\u8661\u8662\u8663\u8664\u8665\u8666\u8667\u8668"+
-            "\u8669\u866A\u866B\u866C\u866D\u866E\u866F\u8670"+
-            "\u8671\u8672\u8673\u8674\u8675\u8676\u8677\u8678"+
-            "\u8679\u867A\u867B\u867C\u867D\u867E\u867F\u8680"+
-            "\u8681\u8682\u8683\u8684\u8685\u8686\u8687\u8688"+
-            "\u8689\u868A\u868B\u868C\u868D\u868E\u868F\u8690"+
-            "\u8691\u8692\u8693\u8694\u8695\u8696\u8697\u8698"+
-            "\u8699\u869A\u869B\u869C\u869D\u869E\u869F\u86A0"+
-            "\u86A1\u86A2\u86A3\u86A4\u86A5\u86A6\u86A7\u86A8"+
-            "\u86A9\u86AA\u86AB\u86AC\u86AD\u86AE\u86AF\u86B0"+
-            "\u86B1\u86B2\u86B3\u86B4\u86B5\u86B6\u86B7\u86B8"+
-            "\u86B9\u86BA\u86BB\u86BC\u86BD\u86BE\u86BF\u86C0"+
-            "\u86C1\u86C2\u86C3\u86C4\u86C5\u86C6\u86C7\u86C8"+
-            "\u86C9\u86CA\u86CB\u86CC\u86CD\u86CE\u86CF\u86D0"+
-            "\u86D1\u86D2\u86D3\u86D4\u86D5\u86D6\u86D7\u86D8"+
-            "\u86D9\u86DA\u86DB\u86DC\u86DD\u86DE\u86DF\u86E0"+
-            "\u86E1\u86E2\u86E3\u86E4\u86E5\u86E6\u86E7\u86E8"+
-            "\u86E9\u86EA\u86EB\u86EC\u86ED\u86EE\u86EF\u86F0"+
-            "\u86F1\u86F2\u86F3\u86F4\u86F5\u86F6\u86F7\u86F8"+
-            "\u86F9\u86FA\u86FB\u86FC\u86FD\u86FE\u86FF\u8700"+
-            "\u8701\u8702\u8703\u8704\u8705\u8706\u8707\u8708"+
-            "\u8709\u870A\u870B\u870C\u870D\u870E\u870F\u8710"+
-            "\u8711\u8712\u8713\u8714\u8715\u8716\u8717\u8718"+
-            "\u8719\u871A\u871B\u871C\u871D\u871E\u871F\u8720"+
-            "\u8721\u8722\u8723\u8724\u8725\u8726\u8727\u8728"+
-            "\u8729\u872A\u872B\u872C\u872D\u872E\u872F\u8730"+
-            "\u8731\u8732\u8733\u8734\u8735\u8736\u8737\u8738"+
-            "\u8739\u873A\u873B\u873C\u873D\u873E\u873F\u8740"+
-            "\u8741\u8742\u8743\u8744\u8745\u8746\u8747\u8748"+
-            "\u8749\u874A\u874B\u874C\u874D\u874E\u874F\u8750"+
-            "\u8751\u8752\u8753\u8754\u8755\u8756\u8757\u8758"+
-            "\u8759\u875A\u875B\u875C\u875D\u875E\u875F\u8760"+
-            "\u8761\u8762\u8763\u8764\u8765\u8766\u8767\u8768"+
-            "\u8769\u876A\u876B\u876C\u876D\u876E\u876F\u8770"+
-            "\u8771\u8772\u8773\u8774\u8775\u8776\u8777\u8778"+
-            "\u8779\u877A\u877B\u877C\u877D\u877E\u877F\u8780"+
-            "\u8781\u8782\u8783\u8784\u8785\u8786\u8787\u8788"+
-            "\u8789\u878A\u878B\u878C\u878D\u878E\u878F\u8790"+
-            "\u8791\u8792\u8793\u8794\u8795\u8796\u8797\u8798"+
-            "\u8799\u879A\u879B\u879C\u879D\u879E\u879F\u87A0"+
-            "\u87A1\u87A2\u87A3\u87A4\u87A5\u87A6\u87A7\u87A8"+
-            "\u87A9\u87AA\u87AB\u87AC\u87AD\u87AE\u87AF\u87B0"+
-            "\u87B1\u87B2\u87B3\u87B4\u87B5\u87B6\u87B7\u87B8"+
-            "\u87B9\u87BA\u87BB\u87BC\u87BD\u87BE\u87BF\u87C0"+
-            "\u87C1\u87C2\u87C3\u87C4\u87C5\u87C6\u87C7\u87C8"+
-            "\u87C9\u87CA\u87CB\u87CC\u87CD\u87CE\u87CF\u87D0"+
-            "\u87D1\u87D2\u87D3\u87D4\u87D5\u87D6\u87D7\u87D8"+
-            "\u87D9\u87DA\u87DB\u87DC\u87DD\u87DE\u87DF\u87E0"+
-            "\u87E1\u87E2\u87E3\u87E4\u87E5\u87E6\u87E7\u87E8"+
-            "\u87E9\u87EA\u87EB\u87EC\u87ED\u87EE\u87EF\u87F0"+
-            "\u87F1\u87F2\u87F3\u87F4\u87F5\u87F6\u87F7\u87F8"+
-            "\u87F9\u87FA\u87FB\u87FC\u87FD\u87FE\u87FF\u8800"+
-            "\u8801\u8802\u8803\u8804\u8805\u8806\u8807\u8808"+
-            "\u8809\u880A\u880B\u880C\u880D\u880E\u880F\u8810"+
-            "\u8811\u8812\u8813\u8814\u8815\u8816\u8817\u8818"+
-            "\u8819\u881A\u881B\u881C\u881D\u881E\u881F\u8820"+
-            "\u8821\u8822\u8823\u8824\u8825\u8826\u8827\u8828"+
-            "\u8829\u882A\u882B\u882C\u882D\u882E\u882F\u8830"+
-            "\u8831\u8832\u8833\u8834\u8835\u8836\u8837\u8838"+
-            "\u8839\u883A\u883B\u883C\u883D\u883E\u883F\u8840"+
-            "\u8841\u8842\u8843\u8844\u8845\u8846\u8847\u8848"+
-            "\u8849\u884A\u884B\u884C\u884D\u884E\u884F\u8850"+
-            "\u8851\u8852\u8853\u8854\u8855\u8856\u8857\u8858"+
-            "\u8859\u885A\u885B\u885C\u885D\u885E\u885F\u8860"+
-            "\u8861\u8862\u8863\u8864\u8865\u8866\u8867\u8868"+
-            "\u8869\u886A\u886B\u886C\u886D\u886E\u886F\u8870"+
-            "\u8871\u8872\u8873\u8874\u8875\u8876\u8877\u8878"+
-            "\u8879\u887A\u887B\u887C\u887D\u887E\u887F\u8880"+
-            "\u8881\u8882\u8883\u8884\u8885\u8886\u8887\u8888"+
-            "\u8889\u888A\u888B\u888C\u888D\u888E\u888F\u8890"+
-            "\u8891\u8892\u8893\u8894\u8895\u8896\u8897\u8898"+
-            "\u8899\u889A\u889B\u889C\u889D\u889E\u889F\u88A0"+
-            "\u88A1\u88A2\u88A3\u88A4\u88A5\u88A6\u88A7\u88A8"+
-            "\u88A9\u88AA\u88AB\u88AC\u88AD\u88AE\u88AF\u88B0"+
-            "\u88B1\u88B2\u88B3\u88B4\u88B5\u88B6\u88B7\u88B8"+
-            "\u88B9\u88BA\u88BB\u88BC\u88BD\u88BE\u88BF\u88C0"+
-            "\u88C1\u88C2\u88C3\u88C4\u88C5\u88C6\u88C7\u88C8"+
-            "\u88C9\u88CA\u88CB\u88CC\u88CD\u88CE\u88CF\u88D0"+
-            "\u88D1\u88D2\u88D3\u88D4\u88D5\u88D6\u88D7\u88D8"+
-            "\u88D9\u88DA\u88DB\u88DC\u88DD\u88DE\u88DF\u88E0"+
-            "\u88E1\u88E2\u88E3\u88E4\u88E5\u88E6\u88E7\u88E8"+
-            "\u88E9\u88EA\u88EB\u88EC\u88ED\u88EE\u88EF\u88F0"+
-            "\u88F1\u88F2\u88F3\u88F4\u88F5\u88F6\u88F7\u88F8"+
-            "\u88F9\u88FA\u88FB\u88FC\u88FD\u88FE\u88FF\u8900"+
-            "\u8901\u8902\u8903\u8904\u8905\u8906\u8907\u8908"+
-            "\u8909\u890A\u890B\u890C\u890D\u890E\u890F\u8910"+
-            "\u8911\u8912\u8913\u8914\u8915\u8916\u8917\u8918"+
-            "\u8919\u891A\u891B\u891C\u891D\u891E\u891F\u8920"+
-            "\u8921\u8922\u8923\u8924\u8925\u8926\u8927\u8928"+
-            "\u8929\u892A\u892B\u892C\u892D\u892E\u892F\u8930"+
-            "\u8931\u8932\u8933\u8934\u8935\u8936\u8937\u8938"+
-            "\u8939\u893A\u893B\u893C\u893D\u893E\u893F\u8940"+
-            "\u8941\u8942\u8943\u8944\u8945\u8946\u8947\u8948"+
-            "\u8949\u894A\u894B\u894C\u894D\u894E\u894F\u8950"+
-            "\u8951\u8952\u8953\u8954\u8955\u8956\u8957\u8958"+
-            "\u8959\u895A\u895B\u895C\u895D\u895E\u895F\u8960"+
-            "\u8961\u8962\u8963\u8964\u8965\u8966\u8967\u8968"+
-            "\u8969\u896A\u896B\u896C\u896D\u896E\u896F\u8970"+
-            "\u8971\u8972\u8973\u8974\u8975\u8976\u8977\u8978"+
-            "\u8979\u897A\u897B\u897C\u897D\u897E\u897F\u8980"+
-            "\u8981\u8982\u8983\u8984\u8985\u8986\u8987\u8988"+
-            "\u8989\u898A\u898B\u898C\u898D\u898E\u898F\u8990"+
-            "\u8991\u8992\u8993\u8994\u8995\u8996\u8997\u8998"+
-            "\u8999\u899A\u899B\u899C\u899D\u899E\u899F\u89A0"+
-            "\u89A1\u89A2\u89A3\u89A4\u89A5\u89A6\u89A7\u89A8";
-
-        private final static String innerIndex9=
-            "\u89A9\u89AA\u89AB\u89AC\u89AD\u89AE\u89AF\u89B0"+
-            "\u89B1\u89B2\u89B3\u89B4\u89B5\u89B6\u89B7\u89B8"+
-            "\u89B9\u89BA\u89BB\u89BC\u89BD\u89BE\u89BF\u89C0"+
-            "\u89C1\u89C2\u89C3\u89C4\u89C5\u89C6\u89C7\u89C8"+
-            "\u89C9\u89CA\u89CB\u89CC\u89CD\u89CE\u89CF\u89D0"+
-            "\u89D1\u89D2\u89D3\u89D4\u89D5\u89D6\u89D7\u89D8"+
-            "\u89D9\u89DA\u89DB\u89DC\u89DD\u89DE\u89DF\u89E0"+
-            "\u89E1\u89E2\u89E3\u89E4\u89E5\u89E6\u89E7\u89E8"+
-            "\u89E9\u89EA\u89EB\u89EC\u89ED\u89EE\u89EF\u89F0"+
-            "\u89F1\u89F2\u89F3\u89F4\u89F5\u89F6\u89F7\u89F8"+
-            "\u89F9\u89FA\u89FB\u89FC\u89FD\u89FE\u89FF\u8A00"+
-            "\u8A01\u8A02\u8A03\u8A04\u8A05\u8A06\u8A07\u8A08"+
-            "\u8A09\u8A0A\u8A0B\u8A0C\u8A0D\u8A0E\u8A0F\u8A10"+
-            "\u8A11\u8A12\u8A13\u8A14\u8A15\u8A16\u8A17\u8A18"+
-            "\u8A19\u8A1A\u8A1B\u8A1C\u8A1D\u8A1E\u8A1F\u8A20"+
-            "\u8A21\u8A22\u8A23\u8A24\u8A25\u8A26\u8A27\u8A28"+
-            "\u8A29\u8A2A\u8A2B\u8A2C\u8A2D\u8A2E\u8A2F\u8A30"+
-            "\u8A31\u8A32\u8A33\u8A34\u8A35\u8A36\u8A37\u8A38"+
-            "\u8A39\u8A3A\u8A3B\u8A3C\u8A3D\u8A3E\u8A3F\u8A40"+
-            "\u8A41\u8A42\u8A43\u8A44\u8A45\u8A46\u8A47\u8A48"+
-            "\u8A49\u8A4A\u8A4B\u8A4C\u8A4D\u8A4E\u8A4F\u8A50"+
-            "\u8A51\u8A52\u8A53\u8A54\u8A55\u8A56\u8A57\u8A58"+
-            "\u8A59\u8A5A\u8A5B\u8A5C\u8A5D\u8A5E\u8A5F\u8A60"+
-            "\u8A61\u8A62\u8A63\u8A64\u8A65\u8A66\u8A67\u8A68"+
-            "\u8A69\u8A6A\u8A6B\u8A6C\u8A6D\u8A6E\u8A6F\u8A70"+
-            "\u8A71\u8A72\u8A73\u8A74\u8A75\u8A76\u8A77\u8A78"+
-            "\u8A79\u8A7A\u8A7B\u8A7C\u8A7D\u8A7E\u8A7F\u8A80"+
-            "\u8A81\u8A82\u8A83\u8A84\u8A85\u8A86\u8A87\u8A88"+
-            "\u8A89\u8A8A\u8A8B\u8A8C\u8A8D\u8A8E\u8A8F\u8A90"+
-            "\u8A91\u8A92\u8A93\u8A94\u8A95\u8A96\u8A97\u8A98"+
-            "\u8A99\u8A9A\u8A9B\u8A9C\u8A9D\u8A9E\u8A9F\u8AA0"+
-            "\u8AA1\u8AA2\u8AA3\u8AA4\u8AA5\u8AA6\u8AA7\u8AA8"+
-            "\u8AA9\u8AAA\u8AAB\u8AAC\u8AAD\u8AAE\u8AAF\u8AB0"+
-            "\u8AB1\u8AB2\u8AB3\u8AB4\u8AB5\u8AB6\u8AB7\u8AB8"+
-            "\u8AB9\u8ABA\u8ABB\u8ABC\u8ABD\u8ABE\u8ABF\u8AC0"+
-            "\u8AC1\u8AC2\u8AC3\u8AC4\u8AC5\u8AC6\u8AC7\u8AC8"+
-            "\u8AC9\u8ACA\u8ACB\u8ACC\u8ACD\u8ACE\u8ACF\u8AD0"+
-            "\u8AD1\u8AD2\u8AD3\u8AD4\u8AD5\u8AD6\u8AD7\u8AD8"+
-            "\u8AD9\u8ADA\u8ADB\u8ADC\u8ADD\u8ADE\u8ADF\u8AE0"+
-            "\u8AE1\u8AE2\u8AE3\u8AE4\u8AE5\u8AE6\u8AE7\u8AE8"+
-            "\u8AE9\u8AEA\u8AEB\u8AEC\u8AED\u8AEE\u8AEF\u8AF0"+
-            "\u8AF1\u8AF2\u8AF3\u8AF4\u8AF5\u8AF6\u8AF7\u8AF8"+
-            "\u8AF9\u8AFA\u8AFB\u8AFC\u8AFD\u8AFE\u8AFF\u8B00"+
-            "\u8B01\u8B02\u8B03\u8B04\u8B05\u8B06\u8B07\u8B08"+
-            "\u8B09\u8B0A\u8B0B\u8B0C\u8B0D\u8B0E\u8B0F\u8B10"+
-            "\u8B11\u8B12\u8B13\u8B14\u8B15\u8B16\u8B17\u8B18"+
-            "\u8B19\u8B1A\u8B1B\u8B1C\u8B1D\u8B1E\u8B1F\u8B20"+
-            "\u8B21\u8B22\u8B23\u8B24\u8B25\u8B26\u8B27\u8B28"+
-            "\u8B29\u8B2A\u8B2B\u8B2C\u8B2D\u8B2E\u8B2F\u8B30"+
-            "\u8B31\u8B32\u8B33\u8B34\u8B35\u8B36\u8B37\u8B38"+
-            "\u8B39\u8B3A\u8B3B\u8B3C\u8B3D\u8B3E\u8B3F\u8B40"+
-            "\u8B41\u8B42\u8B43\u8B44\u8B45\u8B46\u8B47\u8B48"+
-            "\u8B49\u8B4A\u8B4B\u8B4C\u8B4D\u8B4E\u8B4F\u8B50"+
-            "\u8B51\u8B52\u8B53\u8B54\u8B55\u8B56\u8B57\u8B58"+
-            "\u8B59\u8B5A\u8B5B\u8B5C\u8B5D\u8B5E\u8B5F\u8B60"+
-            "\u8B61\u8B62\u8B63\u8B64\u8B65\u8B66\u8B67\u8B68"+
-            "\u8B69\u8B6A\u8B6B\u8B6C\u8B6D\u8B6E\u8B6F\u8B70"+
-            "\u8B71\u8B72\u8B73\u8B74\u8B75\u8B76\u8B77\u8B78"+
-            "\u8B79\u8B7A\u8B7B\u8B7C\u8B7D\u8B7E\u8B7F\u8B80"+
-            "\u8B81\u8B82\u8B83\u8B84\u8B85\u8B86\u8B87\u8B88"+
-            "\u8B89\u8B8A\u8B8B\u8B8C\u8B8D\u8B8E\u8B8F\u8B90"+
-            "\u8B91\u8B92\u8B93\u8B94\u8B95\u8B96\u8B97\u8B98"+
-            "\u8B99\u8B9A\u8B9B\u8B9C\u8B9D\u8B9E\u8B9F\u8BA0"+
-            "\u8BA1\u8BA2\u8BA3\u8BA4\u8BA5\u8BA6\u8BA7\u8BA8"+
-            "\u8BA9\u8BAA\u8BAB\u8BAC\u8BAD\u8BAE\u8BAF\u8BB0"+
-            "\u8BB1\u8BB2\u8BB3\u8BB4\u8BB5\u8BB6\u8BB7\u8BB8"+
-            "\u8BB9\u8BBA\u8BBB\u8BBC\u8BBD\u8BBE\u8BBF\u8BC0"+
-            "\u8BC1\u8BC2\u8BC3\u8BC4\u8BC5\u8BC6\u8BC7\u8BC8"+
-            "\u8BC9\u8BCA\u8BCB\u8BCC\u8BCD\u8BCE\u8BCF\u8BD0"+
-            "\u8BD1\u8BD2\u8BD3\u8BD4\u8BD5\u8BD6\u8BD7\u8BD8"+
-            "\u8BD9\u8BDA\u8BDB\u8BDC\u8BDD\u8BDE\u8BDF\u8BE0"+
-            "\u8BE1\u8BE2\u8BE3\u8BE4\u8BE5\u8BE6\u8BE7\u8BE8"+
-            "\u8BE9\u8BEA\u8BEB\u8BEC\u8BED\u8BEE\u8BEF\u8BF0"+
-            "\u8BF1\u8BF2\u8BF3\u8BF4\u8BF5\u8BF6\u8BF7\u8BF8"+
-            "\u8BF9\u8BFA\u8BFB\u8BFC\u8BFD\u8BFE\u8BFF\u8C00"+
-            "\u8C01\u8C02\u8C03\u8C04\u8C05\u8C06\u8C07\u8C08"+
-            "\u8C09\u8C0A\u8C0B\u8C0C\u8C0D\u8C0E\u8C0F\u8C10"+
-            "\u8C11\u8C12\u8C13\u8C14\u8C15\u8C16\u8C17\u8C18"+
-            "\u8C19\u8C1A\u8C1B\u8C1C\u8C1D\u8C1E\u8C1F\u8C20"+
-            "\u8C21\u8C22\u8C23\u8C24\u8C25\u8C26\u8C27\u8C28"+
-            "\u8C29\u8C2A\u8C2B\u8C2C\u8C2D\u8C2E\u8C2F\u8C30"+
-            "\u8C31\u8C32\u8C33\u8C34\u8C35\u8C36\u8C37\u8C38"+
-            "\u8C39\u8C3A\u8C3B\u8C3C\u8C3D\u8C3E\u8C3F\u8C40"+
-            "\u8C41\u8C42\u8C43\u8C44\u8C45\u8C46\u8C47\u8C48"+
-            "\u8C49\u8C4A\u8C4B\u8C4C\u8C4D\u8C4E\u8C4F\u8C50"+
-            "\u8C51\u8C52\u8C53\u8C54\u8C55\u8C56\u8C57\u8C58"+
-            "\u8C59\u8C5A\u8C5B\u8C5C\u8C5D\u8C5E\u8C5F\u8C60"+
-            "\u8C61\u8C62\u8C63\u8C64\u8C65\u8C66\u8C67\u8C68"+
-            "\u8C69\u8C6A\u8C6B\u8C6C\u8C6D\u8C6E\u8C6F\u8C70"+
-            "\u8C71\u8C72\u8C73\u8C74\u8C75\u8C76\u8C77\u8C78"+
-            "\u8C79\u8C7A\u8C7B\u8C7C\u8C7D\u8C7E\u8C7F\u8C80"+
-            "\u8C81\u8C82\u8C83\u8C84\u8C85\u8C86\u8C87\u8C88"+
-            "\u8C89\u8C8A\u8C8B\u8C8C\u8C8D\u8C8E\u8C8F\u8C90"+
-            "\u8C91\u8C92\u8C93\u8C94\u8C95\u8C96\u8C97\u8C98"+
-            "\u8C99\u8C9A\u8C9B\u8C9C\u8C9D\u8C9E\u8C9F\u8CA0"+
-            "\u8CA1\u8CA2\u8CA3\u8CA4\u8CA5\u8CA6\u8CA7\u8CA8"+
-            "\u8CA9\u8CAA\u8CAB\u8CAC\u8CAD\u8CAE\u8CAF\u8CB0"+
-            "\u8CB1\u8CB2\u8CB3\u8CB4\u8CB5\u8CB6\u8CB7\u8CB8"+
-            "\u8CB9\u8CBA\u8CBB\u8CBC\u8CBD\u8CBE\u8CBF\u8CC0"+
-            "\u8CC1\u8CC2\u8CC3\u8CC4\u8CC5\u8CC6\u8CC7\u8CC8"+
-            "\u8CC9\u8CCA\u8CCB\u8CCC\u8CCD\u8CCE\u8CCF\u8CD0"+
-            "\u8CD1\u8CD2\u8CD3\u8CD4\u8CD5\u8CD6\u8CD7\u8CD8"+
-            "\u8CD9\u8CDA\u8CDB\u8CDC\u8CDD\u8CDE\u8CDF\u8CE0"+
-            "\u8CE1\u8CE2\u8CE3\u8CE4\u8CE5\u8CE6\u8CE7\u8CE8"+
-            "\u8CE9\u8CEA\u8CEB\u8CEC\u8CED\u8CEE\u8CEF\u8CF0"+
-            "\u8CF1\u8CF2\u8CF3\u8CF4\u8CF5\u8CF6\u8CF7\u8CF8"+
-            "\u8CF9\u8CFA\u8CFB\u8CFC\u8CFD\u8CFE\u8CFF\u8D00"+
-            "\u8D01\u8D02\u8D03\u8D04\u8D05\u8D06\u8D07\u8D08"+
-            "\u8D09\u8D0A\u8D0B\u8D0C\u8D0D\u8D0E\u8D0F\u8D10"+
-            "\u8D11\u8D12\u8D13\u8D14\u8D15\u8D16\u8D17\u8D18"+
-            "\u8D19\u8D1A\u8D1B\u8D1C\u8D1D\u8D1E\u8D1F\u8D20"+
-            "\u8D21\u8D22\u8D23\u8D24\u8D25\u8D26\u8D27\u8D28"+
-            "\u8D29\u8D2A\u8D2B\u8D2C\u8D2D\u8D2E\u8D2F\u8D30"+
-            "\u8D31\u8D32\u8D33\u8D34\u8D35\u8D36\u8D37\u8D38"+
-            "\u8D39\u8D3A\u8D3B\u8D3C\u8D3D\u8D3E\u8D3F\u8D40"+
-            "\u8D41\u8D42\u8D43\u8D44\u8D45\u8D46\u8D47\u8D48"+
-            "\u8D49\u8D4A\u8D4B\u8D4C\u8D4D\u8D4E\u8D4F\u8D50"+
-            "\u8D51\u8D52\u8D53\u8D54\u8D55\u8D56\u8D57\u8D58"+
-            "\u8D59\u8D5A\u8D5B\u8D5C\u8D5D\u8D5E\u8D5F\u8D60"+
-            "\u8D61\u8D62\u8D63\u8D64\u8D65\u8D66\u8D67\u8D68"+
-            "\u8D69\u8D6A\u8D6B\u8D6C\u8D6D\u8D6E\u8D6F\u8D70"+
-            "\u8D71\u8D72\u8D73\u8D74\u8D75\u8D76\u8D77\u8D78"+
-            "\u8D79\u8D7A\u8D7B\u8D7C\u8D7D\u8D7E\u8D7F\u8D80"+
-            "\u8D81\u8D82\u8D83\u8D84\u8D85\u8D86\u8D87\u8D88"+
-            "\u8D89\u8D8A\u8D8B\u8D8C\u8D8D\u8D8E\u8D8F\u8D90"+
-            "\u8D91\u8D92\u8D93\u8D94\u8D95\u8D96\u8D97\u8D98"+
-            "\u8D99\u8D9A\u8D9B\u8D9C\u8D9D\u8D9E\u8D9F\u8DA0"+
-            "\u8DA1\u8DA2\u8DA3\u8DA4\u8DA5\u8DA6\u8DA7\u8DA8"+
-            "\u8DA9\u8DAA\u8DAB\u8DAC\u8DAD\u8DAE\u8DAF\u8DB0"+
-            "\u8DB1\u8DB2\u8DB3\u8DB4\u8DB5\u8DB6\u8DB7\u8DB8"+
-            "\u8DB9\u8DBA\u8DBB\u8DBC\u8DBD\u8DBE\u8DBF\u8DC0"+
-            "\u8DC1\u8DC2\u8DC3\u8DC4\u8DC5\u8DC6\u8DC7\u8DC8"+
-            "\u8DC9\u8DCA\u8DCB\u8DCC\u8DCD\u8DCE\u8DCF\u8DD0"+
-            "\u8DD1\u8DD2\u8DD3\u8DD4\u8DD5\u8DD6\u8DD7\u8DD8"+
-            "\u8DD9\u8DDA\u8DDB\u8DDC\u8DDD\u8DDE\u8DDF\u8DE0"+
-            "\u8DE1\u8DE2\u8DE3\u8DE4\u8DE5\u8DE6\u8DE7\u8DE8"+
-            "\u8DE9\u8DEA\u8DEB\u8DEC\u8DED\u8DEE\u8DEF\u8DF0"+
-            "\u8DF1\u8DF2\u8DF3\u8DF4\u8DF5\u8DF6\u8DF7\u8DF8"+
-            "\u8DF9\u8DFA\u8DFB\u8DFC\u8DFD\u8DFE\u8DFF\u8E00"+
-            "\u8E01\u8E02\u8E03\u8E04\u8E05\u8E06\u8E07\u8E08"+
-            "\u8E09\u8E0A\u8E0B\u8E0C\u8E0D\u8E0E\u8E0F\u8E10"+
-            "\u8E11\u8E12\u8E13\u8E14\u8E15\u8E16\u8E17\u8E18"+
-            "\u8E19\u8E1A\u8E1B\u8E1C\u8E1D\u8E1E\u8E1F\u8E20"+
-            "\u8E21\u8E22\u8E23\u8E24\u8E25\u8E26\u8E27\u8E28"+
-            "\u8E29\u8E2A\u8E2B\u8E2C\u8E2D\u8E2E\u8E2F\u8E30"+
-            "\u8E31\u8E32\u8E33\u8E34\u8E35\u8E36\u8E37\u8E38"+
-            "\u8E39\u8E3A\u8E3B\u8E3C\u8E3D\u8E3E\u8E3F\u8E40"+
-            "\u8E41\u8E42\u8E43\u8E44\u8E45\u8E46\u8E47\u8E48"+
-            "\u8E49\u8E4A\u8E4B\u8E4C\u8E4D\u8E4E\u8E4F\u8E50"+
-            "\u8E51\u8E52\u8E53\u8E54\u8E55\u8E56\u8E57\u8E58"+
-            "\u8E59\u8E5A\u8E5B\u8E5C\u8E5D\u8E5E\u8E5F\u8E60"+
-            "\u8E61\u8E62\u8E63\u8E64\u8E65\u8E66\u8E67\u8E68"+
-            "\u8E69\u8E6A\u8E6B\u8E6C\u8E6D\u8E6E\u8E6F\u8E70"+
-            "\u8E71\u8E72\u8E73\u8E74\u8E75\u8E76\u8E77\u8E78"+
-            "\u8E79\u8E7A\u8E7B\u8E7C\u8E7D\u8E7E\u8E7F\u8E80"+
-            "\u8E81\u8E82\u8E83\u8E84\u8E85\u8E86\u8E87\u8E88"+
-            "\u8E89\u8E8A\u8E8B\u8E8C\u8E8D\u8E8E\u8E8F\u8E90"+
-            "\u8E91\u8E92\u8E93\u8E94\u8E95\u8E96\u8E97\u8E98"+
-            "\u8E99\u8E9A\u8E9B\u8E9C\u8E9D\u8E9E\u8E9F\u8EA0"+
-            "\u8EA1\u8EA2\u8EA3\u8EA4\u8EA5\u8EA6\u8EA7\u8EA8"+
-            "\u8EA9\u8EAA\u8EAB\u8EAC\u8EAD\u8EAE\u8EAF\u8EB0"+
-            "\u8EB1\u8EB2\u8EB3\u8EB4\u8EB5\u8EB6\u8EB7\u8EB8"+
-            "\u8EB9\u8EBA\u8EBB\u8EBC\u8EBD\u8EBE\u8EBF\u8EC0"+
-            "\u8EC1\u8EC2\u8EC3\u8EC4\u8EC5\u8EC6\u8EC7\u8EC8"+
-            "\u8EC9\u8ECA\u8ECB\u8ECC\u8ECD\u8ECE\u8ECF\u8ED0"+
-            "\u8ED1\u8ED2\u8ED3\u8ED4\u8ED5\u8ED6\u8ED7\u8ED8"+
-            "\u8ED9\u8EDA\u8EDB\u8EDC\u8EDD\u8EDE\u8EDF\u8EE0"+
-            "\u8EE1\u8EE2\u8EE3\u8EE4\u8EE5\u8EE6\u8EE7\u8EE8"+
-            "\u8EE9\u8EEA\u8EEB\u8EEC\u8EED\u8EEE\u8EEF\u8EF0"+
-            "\u8EF1\u8EF2\u8EF3\u8EF4\u8EF5\u8EF6\u8EF7\u8EF8"+
-            "\u8EF9\u8EFA\u8EFB\u8EFC\u8EFD\u8EFE\u8EFF\u8F00"+
-            "\u8F01\u8F02\u8F03\u8F04\u8F05\u8F06\u8F07\u8F08"+
-            "\u8F09\u8F0A\u8F0B\u8F0C\u8F0D\u8F0E\u8F0F\u8F10"+
-            "\u8F11\u8F12\u8F13\u8F14\u8F15\u8F16\u8F17\u8F18"+
-            "\u8F19\u8F1A\u8F1B\u8F1C\u8F1D\u8F1E\u8F1F\u8F20"+
-            "\u8F21\u8F22\u8F23\u8F24\u8F25\u8F26\u8F27\u8F28"+
-            "\u8F29\u8F2A\u8F2B\u8F2C\u8F2D\u8F2E\u8F2F\u8F30"+
-            "\u8F31\u8F32\u8F33\u8F34\u8F35\u8F36\u8F37\u8F38"+
-            "\u8F39\u8F3A\u8F3B\u8F3C\u8F3D\u8F3E\u8F3F\u8F40"+
-            "\u8F41\u8F42\u8F43\u8F44\u8F45\u8F46\u8F47\u8F48"+
-            "\u8F49\u8F4A\u8F4B\u8F4C\u8F4D\u8F4E\u8F4F\u8F50"+
-            "\u8F51\u8F52\u8F53\u8F54\u8F55\u8F56\u8F57\u8F58"+
-            "\u8F59\u8F5A\u8F5B\u8F5C\u8F5D\u8F5E\u8F5F\u8F60"+
-            "\u8F61\u8F62\u8F63\u8F64\u8F65\u8F66\u8F67\u8F68"+
-            "\u8F69\u8F6A\u8F6B\u8F6C\u8F6D\u8F6E\u8F6F\u8F70"+
-            "\u8F71\u8F72\u8F73\u8F74\u8F75\u8F76\u8F77\u8F78"+
-            "\u8F79\u8F7A\u8F7B\u8F7C\u8F7D\u8F7E\u8F7F\u8F80"+
-            "\u8F81\u8F82\u8F83\u8F84\u8F85\u8F86\u8F87\u8F88"+
-            "\u8F89\u8F8A\u8F8B\u8F8C\u8F8D\u8F8E\u8F8F\u8F90"+
-            "\u8F91\u8F92\u8F93\u8F94\u8F95\u8F96\u8F97\u8F98"+
-            "\u8F99\u8F9A\u8F9B\u8F9C\u8F9D\u8F9E\u8F9F\u8FA0"+
-            "\u8FA1\u8FA2\u8FA3\u8FA4\u8FA5\u8FA6\u8FA7\u8FA8"+
-            "\u8FA9\u8FAA\u8FAB\u8FAC\u8FAD\u8FAE\u8FAF\u8FB0"+
-            "\u8FB1\u8FB2\u8FB3\u8FB4\u8FB5\u8FB6\u8FB7\u8FB8"+
-            "\u8FB9\u8FBA\u8FBB\u8FBC\u8FBD\u8FBE\u8FBF\u8FC0"+
-            "\u8FC1\u8FC2\u8FC3\u8FC4\u8FC5\u8FC6\u8FC7\u8FC8"+
-            "\u8FC9\u8FCA\u8FCB\u8FCC\u8FCD\u8FCE\u8FCF\u8FD0"+
-            "\u8FD1\u8FD2\u8FD3\u8FD4\u8FD5\u8FD6\u8FD7\u8FD8"+
-            "\u8FD9\u8FDA\u8FDB\u8FDC\u8FDD\u8FDE\u8FDF\u8FE0"+
-            "\u8FE1\u8FE2\u8FE3\u8FE4\u8FE5\u8FE6\u8FE7\u8FE8"+
-            "\u8FE9\u8FEA\u8FEB\u8FEC\u8FED\u8FEE\u8FEF\u8FF0"+
-            "\u8FF1\u8FF2\u8FF3\u8FF4\u8FF5\u8FF6\u8FF7\u8FF8"+
-            "\u8FF9\u8FFA\u8FFB\u8FFC\u8FFD\u8FFE\u8FFF\u9000"+
-            "\u9001\u9002\u9003\u9004\u9005\u9006\u9007\u9008"+
-            "\u9009\u900A\u900B\u900C\u900D\u900E\u900F\u9010"+
-            "\u9011\u9012\u9013\u9014\u9015\u9016\u9017\u9018"+
-            "\u9019\u901A\u901B\u901C\u901D\u901E\u901F\u9020"+
-            "\u9021\u9022\u9023\u9024\u9025\u9026\u9027\u9028"+
-            "\u9029\u902A\u902B\u902C\u902D\u902E\u902F\u9030"+
-            "\u9031\u9032\u9033\u9034\u9035\u9036\u9037\u9038"+
-            "\u9039\u903A\u903B\u903C\u903D\u903E\u903F\u9040"+
-            "\u9041\u9042\u9043\u9044\u9045\u9046\u9047\u9048"+
-            "\u9049\u904A\u904B\u904C\u904D\u904E\u904F\u9050"+
-            "\u9051\u9052\u9053\u9054\u9055\u9056\u9057\u9058"+
-            "\u9059\u905A\u905B\u905C\u905D\u905E\u905F\u9060"+
-            "\u9061\u9062\u9063\u9064\u9065\u9066\u9067\u9068"+
-            "\u9069\u906A\u906B\u906C\u906D\u906E\u906F\u9070"+
-            "\u9071\u9072\u9073\u9074\u9075\u9076\u9077\u9078"+
-            "\u9079\u907A\u907B\u907C\u907D\u907E\u907F\u9080"+
-            "\u9081\u9082\u9083\u9084\u9085\u9086\u9087\u9088"+
-            "\u9089\u908A\u908B\u908C\u908D\u908E\u908F\u9090"+
-            "\u9091\u9092\u9093\u9094\u9095\u9096\u9097\u9098"+
-            "\u9099\u909A\u909B\u909C\u909D\u909E\u909F\u90A0"+
-            "\u90A1\u90A2\u90A3\u90A4\u90A5\u90A6\u90A7\u90A8"+
-            "\u90A9\u90AA\u90AB\u90AC\u90AD\u90AE\u90AF\u90B0"+
-            "\u90B1\u90B2\u90B3\u90B4\u90B5\u90B6\u90B7\u90B8"+
-            "\u90B9\u90BA\u90BB\u90BC\u90BD\u90BE\u90BF\u90C0"+
-            "\u90C1\u90C2\u90C3\u90C4\u90C5\u90C6\u90C7\u90C8"+
-            "\u90C9\u90CA\u90CB\u90CC\u90CD\u90CE\u90CF\u90D0"+
-            "\u90D1\u90D2\u90D3\u90D4\u90D5\u90D6\u90D7\u90D8"+
-            "\u90D9\u90DA\u90DB\u90DC\u90DD\u90DE\u90DF\u90E0"+
-            "\u90E1\u90E2\u90E3\u90E4\u90E5\u90E6\u90E7\u90E8"+
-            "\u90E9\u90EA\u90EB\u90EC\u90ED\u90EE\u90EF\u90F0"+
-            "\u90F1\u90F2\u90F3\u90F4\u90F5\u90F6\u90F7\u90F8"+
-            "\u90F9\u90FA\u90FB\u90FC\u90FD\u90FE\u90FF\u9100"+
-            "\u9101\u9102\u9103\u9104\u9105\u9106\u9107\u9108"+
-            "\u9109\u910A\u910B\u910C\u910D\u910E\u910F\u9110"+
-            "\u9111\u9112\u9113\u9114\u9115\u9116\u9117\u9118"+
-            "\u9119\u911A\u911B\u911C\u911D\u911E\u911F\u9120"+
-            "\u9121\u9122\u9123\u9124\u9125\u9126\u9127\u9128"+
-            "\u9129\u912A\u912B\u912C\u912D\u912E\u912F\u9130"+
-            "\u9131\u9132\u9133\u9134\u9135\u9136\u9137\u9138"+
-            "\u9139\u913A\u913B\u913C\u913D\u913E\u913F\u9140"+
-            "\u9141\u9142\u9143\u9144\u9145\u9146\u9147\u9148"+
-            "\u9149\u914A\u914B\u914C\u914D\u914E\u914F\u9150"+
-            "\u9151\u9152\u9153\u9154\u9155\u9156\u9157\u9158"+
-            "\u9159\u915A\u915B\u915C\u915D\u915E\u915F\u9160"+
-            "\u9161\u9162\u9163\u9164\u9165\u9166\u9167\u9168"+
-            "\u9169\u916A\u916B\u916C\u916D\u916E\u916F\u9170"+
-            "\u9171\u9172\u9173\u9174\u9175\u9176\u9177\u9178"+
-            "\u9179\u917A\u917B\u917C\u917D\u917E\u917F\u9180"+
-            "\u9181\u9182\u9183\u9184\u9185\u9186\u9187\u9188"+
-            "\u9189\u918A\u918B\u918C\u918D\u918E\u918F\u9190"+
-            "\u9191\u9192\u9193\u9194\u9195\u9196\u9197\u9198"+
-            "\u9199\u919A\u919B\u919C\u919D\u919E\u919F\u91A0"+
-            "\u91A1\u91A2\u91A3\u91A4\u91A5\u91A6\u91A7\u91A8"+
-            "\u91A9\u91AA\u91AB\u91AC\u91AD\u91AE\u91AF\u91B0"+
-            "\u91B1\u91B2\u91B3\u91B4\u91B5\u91B6\u91B7\u91B8"+
-            "\u91B9\u91BA\u91BB\u91BC\u91BD\u91BE\u91BF\u91C0"+
-            "\u91C1\u91C2\u91C3\u91C4\u91C5\u91C6\u91C7\u91C8"+
-            "\u91C9\u91CA\u91CB\u91CC\u91CD\u91CE\u91CF\u91D0"+
-            "\u91D1\u91D2\u91D3\u91D4\u91D5\u91D6\u91D7\u91D8"+
-            "\u91D9\u91DA\u91DB\u91DC\u91DD\u91DE\u91DF\u91E0"+
-            "\u91E1\u91E2\u91E3\u91E4\u91E5\u91E6\u91E7\u91E8"+
-            "\u91E9\u91EA\u91EB\u91EC\u91ED\u91EE\u91EF\u91F0"+
-            "\u91F1\u91F2\u91F3\u91F4\u91F5\u91F6\u91F7\u91F8"+
-            "\u91F9\u91FA\u91FB\u91FC\u91FD\u91FE\u91FF\u9200"+
-            "\u9201\u9202\u9203\u9204\u9205\u9206\u9207\u9208"+
-            "\u9209\u920A\u920B\u920C\u920D\u920E\u920F\u9210"+
-            "\u9211\u9212\u9213\u9214\u9215\u9216\u9217\u9218"+
-            "\u9219\u921A\u921B\u921C\u921D\u921E\u921F\u9220"+
-            "\u9221\u9222\u9223\u9224\u9225\u9226\u9227\u9228"+
-            "\u9229\u922A\u922B\u922C\u922D\u922E\u922F\u9230"+
-            "\u9231\u9232\u9233\u9234\u9235\u9236\u9237\u9238"+
-            "\u9239\u923A\u923B\u923C\u923D\u923E\u923F\u9240"+
-            "\u9241\u9242\u9243\u9244\u9245\u9246\u9247\u9248"+
-            "\u9249\u924A\u924B\u924C\u924D\u924E\u924F\u9250"+
-            "\u9251\u9252\u9253\u9254\u9255\u9256\u9257\u9258"+
-            "\u9259\u925A\u925B\u925C\u925D\u925E\u925F\u9260"+
-            "\u9261\u9262\u9263\u9264\u9265\u9266\u9267\u9268"+
-            "\u9269\u926A\u926B\u926C\u926D\u926E\u926F\u9270"+
-            "\u9271\u9272\u9273\u9274\u9275\u9276\u9277\u9278"+
-            "\u9279\u927A\u927B\u927C\u927D\u927E\u927F\u9280"+
-            "\u9281\u9282\u9283\u9284\u9285\u9286\u9287\u9288"+
-            "\u9289\u928A\u928B\u928C\u928D\u928E\u928F\u9290"+
-            "\u9291\u9292\u9293\u9294\u9295\u9296\u9297\u9298"+
-            "\u9299\u929A\u929B\u929C\u929D\u929E\u929F\u92A0"+
-            "\u92A1\u92A2\u92A3\u92A4\u92A5\u92A6\u92A7\u92A8"+
-            "\u92A9\u92AA\u92AB\u92AC\u92AD\u92AE\u92AF\u92B0"+
-            "\u92B1\u92B2\u92B3\u92B4\u92B5\u92B6\u92B7\u92B8"+
-            "\u92B9\u92BA\u92BB\u92BC\u92BD\u92BE\u92BF\u92C0"+
-            "\u92C1\u92C2\u92C3\u92C4\u92C5\u92C6\u92C7\u92C8"+
-            "\u92C9\u92CA\u92CB\u92CC\u92CD\u92CE\u92CF\u92D0"+
-            "\u92D1\u92D2\u92D3\u92D4\u92D5\u92D6\u92D7\u92D8"+
-            "\u92D9\u92DA\u92DB\u92DC\u92DD\u92DE\u92DF\u92E0"+
-            "\u92E1\u92E2\u92E3\u92E4\u92E5\u92E6\u92E7\u92E8"+
-            "\u92E9\u92EA\u92EB\u92EC\u92ED\u92EE\u92EF\u92F0"+
-            "\u92F1\u92F2\u92F3\u92F4\u92F5\u92F6\u92F7\u92F8"+
-            "\u92F9\u92FA\u92FB\u92FC\u92FD\u92FE\u92FF\u9300"+
-            "\u9301\u9302\u9303\u9304\u9305\u9306\u9307\u9308"+
-            "\u9309\u930A\u930B\u930C\u930D\u930E\u930F\u9310"+
-            "\u9311\u9312\u9313\u9314\u9315\u9316\u9317\u9318"+
-            "\u9319\u931A\u931B\u931C\u931D\u931E\u931F\u9320"+
-            "\u9321\u9322\u9323\u9324\u9325\u9326\u9327\u9328"+
-            "\u9329\u932A\u932B\u932C\u932D\u932E\u932F\u9330"+
-            "\u9331\u9332\u9333\u9334\u9335\u9336\u9337\u9338"+
-            "\u9339\u933A\u933B\u933C\u933D\u933E\u933F\u9340"+
-            "\u9341\u9342\u9343\u9344\u9345\u9346\u9347\u9348"+
-            "\u9349\u934A\u934B\u934C\u934D\u934E\u934F\u9350"+
-            "\u9351\u9352\u9353\u9354\u9355\u9356\u9357\u9358"+
-            "\u9359\u935A\u935B\u935C\u935D\u935E\u935F\u9360"+
-            "\u9361\u9362\u9363\u9364\u9365\u9366\u9367\u9368"+
-            "\u9369\u936A\u936B\u936C\u936D\u936E\u936F\u9370"+
-            "\u9371\u9372\u9373\u9374\u9375\u9376\u9377\u9378"+
-            "\u9379\u937A\u937B\u937C\u937D\u937E\u937F\u9380"+
-            "\u9381\u9382\u9383\u9384\u9385\u9386\u9387\u9388"+
-            "\u9389\u938A\u938B\u938C\u938D\u938E\u938F\u9390"+
-            "\u9391\u9392\u9393\u9394\u9395\u9396\u9397\u9398"+
-            "\u9399\u939A\u939B\u939C\u939D\u939E\u939F\u93A0"+
-            "\u93A1\u93A2\u93A3\u93A4\u93A5\u93A6\u93A7\u93A8"+
-            "\u93A9\u93AA\u93AB\u93AC\u93AD\u93AE\u93AF\u93B0"+
-            "\u93B1\u93B2\u93B3\u93B4\u93B5\u93B6\u93B7\u93B8"+
-            "\u93B9\u93BA\u93BB\u93BC\u93BD\u93BE\u93BF\u93C0"+
-            "\u93C1\u93C2\u93C3\u93C4\u93C5\u93C6\u93C7\u93C8"+
-            "\u93C9\u93CA\u93CB\u93CC\u93CD\u93CE\u93CF\u93D0"+
-            "\u93D1\u93D2\u93D3\u93D4\u0000\u93D5\u93D6\u93D7"+
-            "\u93D8\u93D9\u93DA\u93DB\u93DC\u93DD\u93DE\u93DF"+
-            "\u93E0\u93E1\u93E2\u93E3\u93E4\u93E5\u93E6\u93E7"+
-            "\u93E8\u93E9\u93EA\u93EB\u93EC\u93ED\u93EE\u93EF"+
-            "\u93F0\u93F1\u93F2\u93F3\u93F4\u93F5\u93F6\u93F7"+
-            "\u93F8\u93F9\u93FA\u93FB\u93FC\u93FD\u93FE\u93FF"+
-            "\u9400\u9401\u9402\u9403\u9404\u9405\u9406\u9407"+
-            "\u9408\u9409\u940A\u940B\u940C\u940D\u940E\u940F"+
-            "\u9410\u9411\u9412\u9413\u9414\u9415\u9416\u9417"+
-            "\u9418\u9419\u941A\u941B\u941C\u941D\u941E\u941F"+
-            "\u9420\u0000\u9421\u9422\u9423\u9424\u9425\u9426"+
-            "\u9427\u9428\u9429\u942A\u942B\u942C\u942D\u942E"+
-            "\u942F\u9430\u9431\u9432\u9433\u9434\u9435\u9436"+
-            "\u9437\u9438\u9439\u943A\u943B\u0000\u943C\u943D"+
-            "\u943E\u943F\u9440\u9441\u9442\u9443\u9444\u9445"+
-            "\u9446\u9447\u9448\u9449\u944A\u944B\u944C\u944D"+
-            "\u944E\u944F\u9450\u9451\u9452\u9453\u9454\u9455"+
-            "\u9456\u9457\u9458\u9459\u945A\u945B\u945C\u945D"+
-            "\u945E\u945F\u9460\u9461\u9462\u9463\u9464\u9465"+
-            "\u9466\u9467\u9468\u9469\u946A\u946B\u946C\u946D"+
-            "\u946E\u946F\u9470\u9471\u9472\u9473\u9474\u9475"+
-            "\u9476\u9477\u9478\u9479\u947A\u947B\u947C\u947D"+
-            "\u947E\u947F\u9480\u9481\u9482\u9483\u9484\u9485"+
-            "\u9486\u9487\u9488\u9489\u948A\u948B\u948C\u0000"+
-            "\u948D\u948E\u948F\u9490\u9491\u9492\u9493\u9494"+
-            "\u9495\u0000\u9496\u9497\u9498\u9499\u949A\u949B"+
-            "\u949C\u949D\u949E\u949F\u94A0\u94A1\u94A2\u94A3"+
-            "\u94A4\u94A5\u94A6\u94A7\u94A8\u94A9\u94AA\u94AB"+
-            "\u94AC\u94AD\u94AE\u94AF\u0000\u0000\u0000\u0000"+
-            "\u94B0\u0000\u94B1\u0000\u0000\u94B2\u94B3\u94B4"+
-            "\u0000\u94B5\u94B6\u94B7\u94B8\u94B9\u94BA\u0000"+
-            "\u0000\u0000\u94BB\u0000\u0000\u94BC\u94BD\u0000"+
-            "\u0000\u0000\u94BE\u94BF\u94C0\u94C1\u94C2\u94C3"+
-            "\u94C4\u94C5\u94C6\u94C7\u94C8\u94C9\u94CA\u94CB"+
-            "\u94CC\u94CD\u94CE\u94CF\u94D0\u94D1\u94D2\u94D3"+
-            "\u94D4\u94D5\u94D6\u94D7\u94D8\u94D9\u94DA\u94DB"+
-            "\u94DC\u94DD\u94DE\u94DF\u94E0\u94E1\u94E2\u94E3"+
-            "\u94E4\u94E5\u94E6\u94E7\u94E8\u94E9\u94EA\u94EB"+
-            "\u94EC\u94ED\u94EE\u94EF\u94F0\u94F1\u94F2\u94F3"+
-            "\u94F4\u94F5\u94F6\u94F7\u94F8\u94F9\u94FA\u94FB"+
-            "\u94FC\u94FD\u94FE\u94FF\u9500\u9501\u9502\u9503"+
-            "\u9504\u9505\u9506\u9507\u9508\u9509\u950A\u950B"+
-            "\u950C\u950D\u950E\u950F\u9510\u9511\u9512\u9513"+
-            "\u9514\u9515\u9516\u9517\u9518\u9519\u951A\u951B"+
-            "\u951C\u951D\u951E\u951F\u9520\u9521\u9522\u9523"+
-            "\u9524\u9525\u9526\u9527\u9528\u9529\u952A\u952B"+
-            "\u952C\u952D\u952E\u952F\u9530\u9531\u9532\u9533"+
-            "\u9534\u9535\u9536\u9537\u9538\u9539\u953A\u953B"+
-            "\u953C\u953D\u953E\u953F\u9540\u9541\u9542\u9543"+
-            "\u9544\u9545\u9546\u9547\u9548\u9549\u954A\u954B"+
-            "\u954C\u954D\u954E\u954F\u9550\u9551\u9552\u9553"+
-            "\u9554\u9555\u9556\u9557\u9558\u9559\u955A\u955B"+
-            "\u955C\u955D\u955E\u955F\u9560\u9561\u9562\u9563"+
-            "\u9564\u9565\u9566\u9567\u9568\u9569\u956A\u956B"+
-            "\u956C\u956D\u956E\u956F\u9570\u9571\u9572\u9573"+
-            "\u9574\u9575\u9576\u9577\u9578\u9579\u957A\u957B"+
-            "\u957C\u957D\u957E\u957F\u9580\u9581\u9582\u9583"+
-            "\u9584\u9585\u9586\u9587\u9588\u9589\u958A\u958B"+
-            "\u958C\u958D\u958E\u958F\u9590\u9591\u9592\u9593"+
-            "\u9594\u9595\u9596\u9597\u9598\u9599\u959A\u959B"+
-            "\u959C\u959D\u959E\u959F\u95A0\u95A1\u95A2\u95A3"+
-            "\u95A4\u95A5\u95A6\u95A7\u95A8\u95A9\u95AA\u95AB"+
-            "\u95AC\u95AD\u95AE\u95AF\u95B0\u95B1\u95B2\u95B3"+
-            "\u95B4\u95B5\u95B6\u95B7\u95B8\u95B9\u95BA\u95BB"+
-            "\u95BC\u95BD\u95BE\u95BF\u95C0\u95C1\u95C2\u95C3"+
-            "\u95C4\u95C5\u95C6\u95C7\u95C8\u95C9\u95CA\u95CB"+
-            "\u95CC\u95CD\u95CE\u95CF\u95D0\u95D1\u95D2\u95D3"+
-            "\u95D4\u95D5\u95D6\u95D7\u95D8\u95D9\u95DA\u95DB"+
-            "\u95DC\u95DD\u95DE\u95DF\u95E0\u95E1\u95E2\u95E3"+
-            "\u95E4\u95E5\u95E6\u95E7\u95E8\u95E9\u95EA\u95EB"+
-            "\u95EC\u95ED\u95EE\u95EF\u95F0\u95F1\u95F2\u95F3"+
-            "\u95F4\u95F5\u95F6\u95F7\u95F8\u95F9\u95FA\u95FB"+
-            "\u95FC\u95FD\u95FE\u95FF\u9600\u9601\u9602\u9603"+
-            "\u9604\u9605\u9606\u9607\u9608\u9609\u960A\u960B"+
-            "\u960C\u960D\u960E\u960F\u9610\u9611\u9612\u9613"+
-            "\u9614\u9615\u9616\u9617\u9618\u9619\u961A\u961B"+
-            "\u961C\u961D\u961E\u961F\u9620\u9621\u9622\u9623"+
-            "\u9624\u9625\u9626\u9627\u9628\u9629\u962A\u962B"+
-            "\u962C\u962D\u962E\u962F\u9630\u9631\u9632\u9633"+
-            "\u9634\u9635\u9636\u9637\u9638\u9639\u963A\u963B"+
-            "\u963C\u963D\u963E\u963F\u9640\u9641\u9642\u9643"+
-            "\u9644\u9645\u9646\u9647\u9648\u9649\u964A\u964B"+
-            "\u964C\u964D\u964E\u964F\u9650\u9651\u9652\u9653"+
-            "\u9654\u9655\u9656\u9657\u9658\u9659\u965A\u965B"+
-            "\u965C\u965D\u965E\u965F\u9660\u9661\u9662\u9663"+
-            "\u9664\u9665\u9666\u9667\u9668\u9669\u966A\u966B"+
-            "\u966C\u966D\u966E\u966F\u9670\u9671\u9672\u9673"+
-            "\u9674\u9675\u9676\u9677\u9678\u9679\u967A\u967B"+
-            "\u967C\u967D\u967E\u967F\u9680\u9681\u9682\u9683"+
-            "\u9684\u9685\u9686\u9687\u9688\u9689\u968A\u968B"+
-            "\u968C\u968D\u968E\u968F\u9690\u9691\u9692\u9693"+
-            "\u9694\u9695\u9696\u9697\u9698\u9699\u969A\u969B"+
-            "\u969C\u969D\u969E\u969F\u96A0\u96A1\u96A2\u96A3"+
-            "\u96A4\u96A5\u96A6\u96A7\u96A8\u96A9\u96AA\u96AB"+
-            "\u96AC\u96AD\u96AE\u96AF\u96B0\u96B1\u96B2\u96B3"+
-            "\u96B4\u96B5\u96B6\u96B7\u96B8\u96B9\u96BA\u96BB"+
-            "\u96BC\u96BD\u96BE\u96BF\u96C0\u96C1\u96C2\u96C3"+
-            "\u96C4\u96C5\u96C6\u96C7\u96C8\u96C9\u96CA\u96CB"+
-            "\u96CC\u96CD\u96CE\u96CF\u96D0\u96D1\u96D2\u96D3"+
-            "\u96D4\u96D5\u96D6\u96D7\u96D8\u96D9\u96DA\u96DB"+
-            "\u96DC\u96DD\u96DE\u96DF\u96E0\u96E1\u96E2\u96E3"+
-            "\u96E4\u96E5\u96E6\u96E7\u96E8\u96E9\u96EA\u96EB"+
-            "\u96EC\u96ED\u96EE\u96EF\u96F0\u96F1\u96F2\u96F3"+
-            "\u96F4\u96F5\u96F6\u96F7\u96F8\u96F9\u96FA\u96FB"+
-            "\u96FC\u96FD\u96FE\u96FF\u9700\u9701\u9702\u9703"+
-            "\u9704\u9705\u9706\u9707\u9708\u9709\u970A\u970B"+
-            "\u970C\u970D\u970E\u970F\u9710\u9711\u9712\u9713"+
-            "\u9714\u9715\u9716\u9717\u9718\u9719\u971A\u971B"+
-            "\u971C\u971D\u971E\u971F\u9720\u9721\u9722\u9723"+
-            "\u9724\u9725\u9726\u9727\u9728\u9729\u972A\u972B"+
-            "\u972C\u972D\u972E\u972F\u9730\u9731\u9732\u9733"+
-            "\u9734\u9735\u9736\u9737\u9738\u9739\u973A\u973B"+
-            "\u973C\u973D\u973E\u973F\u9740\u9741\u9742\u9743"+
-            "\u9744\u9745\u9746\u9747\u9748\u9749\u974A\u974B"+
-            "\u974C\u974D\u974E\u974F\u9750\u9751\u9752\u9753"+
-            "\u9754\u9755\u9756\u9757\u9758\u9759\u975A\u975B"+
-            "\u975C\u975D\u975E\u975F\u9760\u9761\u9762\u9763"+
-            "\u9764\u9765\u9766\u9767\u9768\u9769\u976A\u976B"+
-            "\u976C\u976D\u976E\u976F\u9770\u9771\u9772\u9773"+
-            "\u9774\u9775\u9776\u9777\u9778\u9779\u977A\u977B"+
-            "\u977C\u977D\u977E\u977F\u9780\u9781\u9782\u9783"+
-            "\u9784\u9785\u9786\u9787\u9788\u9789\u978A\u978B"+
-            "\u978C\u978D\u978E\u978F\u9790\u9791\u9792\u9793"+
-            "\u9794\u9795\u9796\u9797\u9798\u9799\u979A\u979B"+
-            "\u979C\u979D\u979E\u979F\u97A0\u97A1\u97A2\u97A3"+
-            "\u97A4\u97A5\u97A6\u97A7\u97A8\u97A9\u97AA\u97AB"+
-            "\u97AC\u97AD\u97AE\u97AF\u97B0\u97B1\u97B2\u97B3"+
-            "\u97B4\u97B5\u97B6\u97B7\u97B8\u97B9\u97BA\u97BB"+
-            "\u97BC\u97BD\u97BE\u97BF\u97C0\u97C1\u97C2\u97C3"+
-            "\u97C4\u97C5\u97C6\u97C7\u97C8\u97C9\u97CA\u97CB"+
-            "\u97CC\u97CD\u97CE\u97CF\u97D0\u97D1\u97D2\u97D3"+
-            "\u97D4\u97D5\u97D6\u97D7\u97D8\u97D9\u97DA\u97DB"+
-            "\u97DC\u97DD\u97DE\u97DF\u97E0\u97E1\u97E2\u97E3"+
-            "\u97E4\u97E5\u97E6\u97E7\u97E8\u97E9\u97EA\u97EB"+
-            "\u97EC\u97ED\u97EE\u97EF\u97F0\u97F1\u97F2\u97F3"+
-            "\u97F4\u97F5\u97F6\u97F7\u97F8\u97F9\u97FA\u97FB"+
-            "\u97FC\u97FD\u97FE\u97FF\u9800\u9801\u9802\u9803"+
-            "\u9804\u9805\u9806\u9807\u9808\u9809\u980A\u980B"+
-            "\u980C\u980D\u980E\u980F\u9810\u9811\u9812\u9813"+
-            "\u9814\u9815\u9816\u9817\u9818\u9819\u981A\u981B"+
-            "\u981C\u981D\u981E\u981F\u9820\u9821\u9822\u9823"+
-            "\u9824\u9825\u9826\u9827\u9828\u9829\u982A\u982B"+
-            "\u982C\u982D\u982E\u982F\u9830\u9831\u9832\u9833"+
-            "\u9834\u9835\u9836\u9837\u9838\u9839\u983A\u983B"+
-            "\u983C\u983D\u983E\u983F\u9840\u9841\u9842\u9843"+
-            "\u9844\u9845\u9846\u9847\u9848\u9849\u984A\u984B"+
-            "\u984C\u984D\u984E\u984F\u9850\u9851\u9852\u9853"+
-            "\u9854\u9855\u9856\u9857\u9858\u9859\u985A\u985B"+
-            "\u985C\u985D\u985E\u985F\u9860\u9861\u9862\u9863"+
-            "\u9864\u9865\u9866\u9867\u9868\u9869\u986A\u986B"+
-            "\u986C\u986D\u986E\u986F\u9870\u9871\u9872\u9873"+
-            "\u9874\u9875\u9876\u9877\u9878\u9879\u987A\u987B"+
-            "\u987C\u987D\u987E\u987F\u9880\u9881\u9882\u9883"+
-            "\u9884\u9885\u9886\u9887\u9888\u9889\u988A\u988B"+
-            "\u988C\u988D\u988E\u988F\u9890\u9891\u9892\u9893"+
-            "\u9894\u9895\u9896\u9897\u9898\u9899\u989A\u989B"+
-            "\u989C\u989D\u989E\u989F\u98A0\u98A1\u98A2\u98A3"+
-            "\u98A4\u98A5\u98A6\u98A7\u98A8\u98A9\u98AA\u98AB"+
-            "\u98AC\u98AD\u98AE\u98AF\u98B0\u98B1\u98B2\u98B3"+
-            "\u98B4\u98B5\u98B6\u98B7\u98B8\u98B9\u98BA\u98BB"+
-            "\u98BC\u98BD\u98BE\u98BF\u98C0\u98C1\u98C2\u98C3"+
-            "\u0000\u0000\u98C4\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u98C5\u98C6\u98C7"+
-            "\u98C8\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u98C9\u0000\u0000\u0000\u0000"+
-            "\u98CA\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u98CB"+
-            "\u0000\u0000\u0000\u0000\u98CC\u98CD\u98CE\u98CF"+
-            "\u98D0\u98D1\u98D2\u98D3\u98D4\u98D5\u98D6\u98D7"+
-            "\u98D8\u98D9\u98DA\u98DB\u98DC\u98DD\u98DE\u98DF"+
-            "\u98E0\u98E1\u98E2\u98E3\u98E4\u98E5\u98E6\u98E7"+
-            "\u98E8\u98E9\u98EA\u98EB\u98EC\u98ED\u98EE\u98EF"+
-            "\u98F0\u98F1\u98F2\u98F3\u98F4\u98F5\u98F6\u98F7"+
-            "\u98F8\u98F9\u98FA\u98FB\u98FC\u98FD\u98FE\u98FF"+
-            "\u9900\u9901\u9902\u9903\u9904\u9905\u9906\u9907"+
-            "\u9908\u9909\u990A\u990B\u990C\u990D\u990E\u990F"+
-            "\u9910\u9911\u9912\u9913\u9914\u9915\u9916\u9917"+
-            "\u9918\u9919\u991A\u991B\u991C\u991D\u991E\u991F"+
-            "\u9920\u9921\u9922\u9923\u9924\u9925\u9926\u9927"+
-            "\u9928\u9929\u992A\u992B\u992C\u992D\u992E\u992F"+
-            "\u9930\u9931\u9932\u9933\u9934\u9935\u9936\u9937"+
-            "\u9938\u9939\u993A\u993B\u993C\u993D\u993E\u993F"+
-            "\u9940\u9941\u9942\u9943\u9944\u9945\u9946\u9947"+
-            "\u9948\u9949\u994A\u994B\u994C\u994D\u994E\u994F"+
-            "\u9950\u9951\u9952\u9953\u9954\u9955\u9956\u9957"+
-            "\u9958\u9959\u995A\u995B\u995C\u995D\u995E\u995F";
-
-        private final static String innerIndex10=
-            "\u9960\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u9961"+
-            "\u9962\u9963\u9964\u9965\u9966\u9967\u9968\u9969"+
-            "\u996A\u996B\u996C\u996D\u996E\u996F\u9970\u9971"+
-            "\u9972\u9973\u9974\u9975\u9976\u9977\u9978\u9979"+
-            "\u997A\u997B\u997C\u997D\u997E\u997F\u9980\u9981"+
-            "\u9982\u9983\u9984\u9985\u9986\u9987\u9988\u9989"+
-            "\u998A\u998B\u998C\u998D\u998E\u998F\u9990\u9991"+
-            "\u9992\u9993\u9994\u9995\u9996\u9997\u9998\u9999"+
-            "\u999A\u999B\u999C\u999D\u999E\u999F\u99A0\u99A1"+
-            "\u99A2\u99A3\u99A4\u99A5\u99A6\u99A7\u99A8\u99A9"+
-            "\u99AA\u99AB\u99AC\u99AD\u99AE\u99AF\u99B0\u99B1"+
-            "\u99B2\u99B3\u99B4\u99B5\u99B6\u99B7\u99B8\u99B9"+
-            "\u99BA\u99BB\u99BC\u99BD\u99BE\u99BF\u99C0\u99C1"+
-            "\u99C2\u99C3\u99C4\u99C5\u99C6\u99C7\u99C8\u99C9"+
-            "\u99CA\u99CB\u99CC\u99CD\u99CE\u99CF\u99D0\u99D1"+
-            "\u99D2\u99D3\u99D4\u99D5\u99D6\u99D7\u99D8\u99D9"+
-            "\u99DA\u99DB\u99DC\u99DD\u99DE\u99DF\u99E0\u99E1"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u99E2\u99E3"+
-            "\u99E4\u99E5\u99E6\u99E7\u99E8\u99E9\u99EA\u99EB"+
-            "\u99EC\u99ED\u99EE\u99EF\u99F0\u99F1\u99F2\u99F3"+
-            "\u99F4\u99F5\u99F6\u99F7\u99F8\u0000\u99FA\u99FB";
-
-        private final static short index1[] = {
-            1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
-            17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
-            33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
-            49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
-            65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 0, 0,
-            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79,
-            80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
-            96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
-            112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127,
-            128, 129, 130, 131, 132, 133, 134, 135, 0, 0, 0, 0, 0, 0, 0, 0,
-            0, 0, 0, 0, 0, 0, 0, 136, 137, 138, 139, 140, 141, 142, 143, 144,
-            145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160
-        };
-
-        private final static String index2[] = {
-            innerIndex0,
-            innerIndex1,
-            innerIndex2,
-            innerIndex3,
-            innerIndex4,
-            innerIndex5,
-            innerIndex6,
-            innerIndex7,
-            innerIndex8,
-            innerIndex9,
-            innerIndex10
-        };
-
-        /* The default implementation creates a decoder and we don't have one */
-        public boolean isLegalReplacement(byte[] repl) {
-            return true;
-        }
-    }
-}
--- a/jdk/src/java.desktop/unix/classes/sun/awt/motif/X11GB2312.java	Thu May 14 20:14:44 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,150 +0,0 @@
-/*
- * Copyright (c) 1996, 2005, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.awt.motif;
-
-import java.nio.CharBuffer;
-import java.nio.ByteBuffer;
-import java.nio.charset.*;
-import sun.nio.cs.*;
-import sun.nio.cs.ext.*;
-import static sun.nio.cs.CharsetMapping.*;
-
-public class X11GB2312 extends Charset {
-    public X11GB2312 () {
-        super("X11GB2312", null);
-    }
-    public CharsetEncoder newEncoder() {
-        return new Encoder(this);
-    }
-    public CharsetDecoder newDecoder() {
-        return new Decoder(this);
-    }
-
-    public boolean contains(Charset cs) {
-        return cs instanceof X11GB2312;
-    }
-
-    private class Encoder extends CharsetEncoder {
-        private DoubleByte.Encoder enc = (DoubleByte.Encoder)new EUC_CN().newEncoder();
-
-        public Encoder(Charset cs) {
-            super(cs, 2.0f, 2.0f);
-        }
-
-        public boolean canEncode(char c) {
-            if (c <= 0x7F) {
-                return false;
-            }
-            return enc.canEncode(c);
-        }
-
-        protected int encodeDouble(char c) {
-            return enc.encodeChar(c);
-        }
-
-        protected CoderResult encodeLoop(CharBuffer src, ByteBuffer dst) {
-            char[] sa = src.array();
-            int sp = src.arrayOffset() + src.position();
-            int sl = src.arrayOffset() + src.limit();
-
-            byte[] da = dst.array();
-            int dp = dst.arrayOffset() + dst.position();
-            int dl = dst.arrayOffset() + dst.limit();
-
-            try {
-                while (sp < sl) {
-                    char c = sa[sp];
-                    if (c <= '\u007f')
-                        return CoderResult.unmappableForLength(1);
-                    int ncode = encodeDouble(c);
-                    if (ncode != 0 && c != '\u0000' ) {
-                        da[dp++] = (byte) ((ncode  >> 8) & 0x7f);
-                        da[dp++] = (byte) (ncode & 0x7f);
-                        sp++;
-                        continue;
-                    }
-                    return CoderResult.unmappableForLength(1);
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(sp - src.arrayOffset());
-                dst.position(dp - dst.arrayOffset());
-            }
-        }
-        public boolean isLegalReplacement(byte[] repl) {
-            return true;
-        }
-    }
-
-    private class Decoder extends  CharsetDecoder {
-        private DoubleByte.Decoder dec = (DoubleByte.Decoder)new EUC_CN().newDecoder();
-
-        public Decoder(Charset cs) {
-            super(cs, 0.5f, 1.0f);
-        }
-
-        protected char decodeDouble(int b1, int b2) {
-            return dec.decodeDouble(b1, b2);
-        }
-
-        protected CoderResult decodeLoop(ByteBuffer src, CharBuffer dst) {
-            byte[] sa = src.array();
-            int sp = src.arrayOffset() + src.position();
-            int sl = src.arrayOffset() + src.limit();
-            assert (sp <= sl);
-            sp = (sp <= sl ? sp : sl);
-            char[] da = dst.array();
-            int dp = dst.arrayOffset() + dst.position();
-            int dl = dst.arrayOffset() + dst.limit();
-            assert (dp <= dl);
-            dp = (dp <= dl ? dp : dl);
-
-            try {
-                while (sp < sl) {
-                    if ( sl - sp < 2) {
-                        return CoderResult.UNDERFLOW;
-                    }
-                    int b1 = sa[sp] & 0xFF | 0x80;
-                    int b2 = sa[sp + 1] & 0xFF | 0x80;
-                    char c = decodeDouble(b1, b2);
-                    if (c == UNMAPPABLE_DECODING) {
-                        return CoderResult.unmappableForLength(2);
-                    }
-                    if (dl - dp < 1)
-                        return CoderResult.OVERFLOW;
-                    da[dp++] = c;
-                    sp +=2;
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(sp - src.arrayOffset());
-                dst.position(dp - dst.arrayOffset());
-            }
-
-        }
-    }
-
-}
--- a/jdk/src/java.desktop/unix/classes/sun/awt/motif/X11GBK.java	Thu May 14 20:14:44 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,67 +0,0 @@
-/*
- * Copyright (c) 1999, 2005, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.awt.motif;
-
-import java.nio.charset.*;
-import sun.nio.cs.*;
-import sun.nio.cs.ext.*;
-import static sun.nio.cs.CharsetMapping.*;
-
-public class X11GBK extends Charset {
-    public X11GBK () {
-        super("X11GBK", null);
-    }
-    public CharsetEncoder newEncoder() {
-        return new Encoder(this);
-    }
-    public CharsetDecoder newDecoder() {
-        return new GBK().newDecoder();
-    }
-
-    public boolean contains(Charset cs) {
-        return cs instanceof X11GBK;
-    }
-
-    private class Encoder extends DoubleByte.Encoder {
-
-        private DoubleByte.Encoder enc = (DoubleByte.Encoder)new GBK().newEncoder();
-
-        Encoder(Charset cs) {
-            super(cs, (char[])null, (char[])null);
-        }
-
-        public boolean canEncode(char ch){
-            if (ch < 0x80) return false;
-            return enc.canEncode(ch);
-        }
-
-        public int encodeChar(char ch) {
-            if (ch < 0x80)
-                return UNMAPPABLE_ENCODING;
-            return enc.encodeChar(ch);
-        }
-    }
-}
--- a/jdk/src/java.desktop/unix/classes/sun/awt/motif/X11JIS0201.java	Thu May 14 20:14:44 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,109 +0,0 @@
-/*
- * Copyright (c) 1996, 2012, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.awt.motif;
-
-import java.nio.ByteBuffer;
-import java.nio.CharBuffer;
-import java.nio.charset.*;
-import sun.nio.cs.*;
-import sun.nio.cs.ext.*;
-import static sun.nio.cs.CharsetMapping.*;
-
-public class X11JIS0201 extends Charset {
-
-    private static Charset jis0201 = new JIS_X_0201();
-    private static SingleByte.Encoder enc =
-        (SingleByte.Encoder)jis0201.newEncoder();
-
-    public X11JIS0201 () {
-        super("X11JIS0201", null);
-    }
-
-    public CharsetEncoder newEncoder() {
-        return new Encoder(this);
-    }
-
-    public CharsetDecoder newDecoder() {
-        return jis0201.newDecoder();
-    }
-
-    public boolean contains(Charset cs) {
-        return cs instanceof X11JIS0201;
-    }
-
-    private class Encoder extends CharsetEncoder {
-
-        public Encoder(Charset cs) {
-            super(cs, 1.0f, 1.0f);
-        }
-
-        public boolean canEncode(char c){
-            if ((c >= 0xff61 && c <= 0xff9f)
-                || c == 0x203e
-                || c == 0xa5) {
-                return true;
-            }
-            return false;
-        }
-
-        private Surrogate.Parser sgp;
-        protected CoderResult encodeLoop(CharBuffer src, ByteBuffer dst) {
-            char[] sa = src.array();
-            int sp = src.arrayOffset() + src.position();
-            int sl = src.arrayOffset() + src.limit();
-
-            byte[] da = dst.array();
-            int dp = dst.arrayOffset() + dst.position();
-            int dl = dst.arrayOffset() + dst.limit();
-            CoderResult cr = CoderResult.UNDERFLOW;
-            if ((dl - dp) < (sl - sp)) {
-                sl = sp + (dl - dp);
-                cr = CoderResult.OVERFLOW;
-            }
-            try {
-                while (sp < sl) {
-                    char c = sa[sp];
-                    int b = enc.encode(c);
-                    if (b == UNMAPPABLE_ENCODING) {
-                        if (Character.isSurrogate(c)) {
-                            if (sgp == null)
-                                sgp = new Surrogate.Parser();
-                            if (sgp.parse(c, sa, sp, sl) >= 0)
-                                return CoderResult.unmappableForLength(2);
-                        }
-                        return CoderResult.unmappableForLength(1);
-                    }
-                    da[dp++] = (byte)b;
-                    sp++;
-                }
-                return cr;
-            } finally {
-                src.position(sp - src.arrayOffset());
-                dst.position(dp - dst.arrayOffset());
-            }
-        }
-    }
-}
--- a/jdk/src/java.desktop/unix/classes/sun/awt/motif/X11JIS0208.java	Thu May 14 20:14:44 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,53 +0,0 @@
-/*
- * Copyright (c) 1996, 2012, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.awt.motif;
-
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetEncoder;
-import java.nio.charset.CharsetDecoder;
-import sun.nio.cs.*;
-import sun.nio.cs.ext.*;
-
-public class X11JIS0208 extends Charset {
-
-    private static Charset jis0208 = new JIS_X_0208();
-
-    public X11JIS0208 () {
-        super("X11JIS0208", null);
-    }
-
-    public CharsetEncoder newEncoder() {
-        return jis0208.newEncoder();
-    }
-
-    public CharsetDecoder newDecoder() {
-        return jis0208.newDecoder();
-    }
-
-    public boolean contains(Charset cs) {
-        return cs instanceof X11JIS0208;
-    }
-}
--- a/jdk/src/java.desktop/unix/classes/sun/awt/motif/X11JIS0212.java	Thu May 14 20:14:44 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.awt.motif;
-
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetEncoder;
-import java.nio.charset.CharsetDecoder;
-import sun.nio.cs.*;
-import sun.nio.cs.ext.*;
-
-public class X11JIS0212 extends Charset {
-    private static Charset jis0212 = new JIS_X_0212();
-
-    public X11JIS0212 () {
-        super("X11JIS0212", null);
-    }
-    public CharsetEncoder newEncoder() {
-        return jis0212.newEncoder();
-    }
-    public CharsetDecoder newDecoder() {
-        return jis0212.newDecoder();
-    }
-    public boolean contains(Charset cs) {
-        return cs instanceof X11JIS0212;
-    }
-}
--- a/jdk/src/java.desktop/unix/classes/sun/awt/motif/X11Johab.java	Thu May 14 20:14:44 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,4783 +0,0 @@
-/*
- * Copyright (c) 2002, 2005, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.awt.motif;
-
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetEncoder;
-import java.nio.charset.CharsetDecoder;
-import sun.nio.cs.ext.DoubleByteEncoder;
-
-public class X11Johab extends Charset {
-    public X11Johab () {
-        super("X11Johab", null);
-    }
-
-    public CharsetEncoder newEncoder() {
-        return new Encoder(this);
-    }
-
-    public CharsetDecoder newDecoder() {
-        throw new Error("Decoder is not supported by X11Johab Charset");
-    }
-
-    public boolean contains(Charset cs) {
-        return cs instanceof X11GB18030_1;
-    }
-
-    private static class Encoder extends DoubleByteEncoder {
-        public Encoder(Charset cs) {
-            super(cs, index1, index2);
-        }
-
-        public boolean isLegalReplacement(byte[] repl) {
-            return true;
-        }
-
-        private final static String innerIndex0=
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uD9AE\u0000\u0000\uD9B4\u0000\u0000\uD967"+
-            "\uD937\u0000\uDCA3\uD97C\u0000\u0000\u0000\u0000"+
-            "\uD956\uD94E\uDD99\uDD9A\uD9A5\u0000\uD9D2\u0000"+
-            "\uD9AC\uDD98\uDCAC\uD97D\uDCF9\uDCF6\uDCFA\uD9AF"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uDCA1\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uDCA2\u0000\u0000\u0000\u0000\u0000\u0000\uD94F"+
-            "\uDCAA\u0000\u0000\u0000\u0000\u0000\uDCAD\uDD3C"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uDD31\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uDD33\u0000\u0000\u0000\u0000\u0000\u0000\uD950"+
-            "\uDD3A\u0000\u0000\u0000\u0000\u0000\uDD3D\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uDD32\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uDCA4\uDD34"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uDD35\uDCA6\uDD36\u0000\u0000\u0000\u0000"+
-            "\uDD37\u0000\u0000\u0000\u0000\u0000\u0000\uDCA8"+
-            "\uDD38\uDCA9\uDD39\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uDD40\uDCAF\uDD3F\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uDCAB\uDD3B\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uDCAE\uDD3E"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD9A7"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uD9A8\uD9AB\uD9AA\uD9AD\uD9A6\uD9A9\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uDB51\uDB52\uDB53\uDB54\uDB55\uDB56\uDB57"+
-            "\uDB58\uDB59\uDB5A\uDB5B\uDB5C\uDB5D\uDB5E\uDB5F"+
-            "\uDB60\uDB61\u0000\uDB62\uDB63\uDB64\uDB65\uDB66"+
-            "\uDB67\uDB68\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uDB71\uDB72\uDB73\uDB74\uDB75\uDB76\uDB77"+
-            "\uDB78\uDB79\uDB7A\uDB7B\uDB7C\uDB7D\uDB7E\uDB91"+
-            "\uDB92\uDB93\u0000\uDB94\uDB95\uDB96\uDB97\uDB98"+
-            "\uDB99\uDB9A\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uDEA7\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uDEA1\uDEA2\uDEA3\uDEA4\uDEA5\uDEA6\uDEA8\uDEA9"+
-            "\uDEAA\uDEAB\uDEAC\uDEAD\uDEAE\uDEAF\uDEB0\uDEB1"+
-            "\uDEB2\uDEB3\uDEB4\uDEB5\uDEB6\uDEB7\uDEB8\uDEB9"+
-            "\uDEBA\uDEBB\uDEBC\uDEBD\uDEBE\uDEBF\uDEC0\uDEC1"+
-            "\uDED1\uDED2\uDED3\uDED4\uDED5\uDED6\uDED8\uDED9"+
-            "\uDEDA\uDEDB\uDEDC\uDEDD\uDEDE\uDEDF\uDEE0\uDEE1"+
-            "\uDEE2\uDEE3\uDEE4\uDEE5\uDEE6\uDEE7\uDEE8\uDEE9"+
-            "\uDEEA\uDEEB\uDEEC\uDEED\uDEEE\uDEEF\uDEF0\uDEF1"+
-            "\u0000\uDED7\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uD939\uD93A\u0000\uD93B\u0000"+
-            "\uD93E\uD93F\u0000\u0000\uD940\uD941\u0000\u0000"+
-            "\uD9D3\uD9D4\u0000\u0000\u0000\uD935\uD936\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uD9B6\u0000\uD957\uD958\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uD968\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uDD9B\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDD9C"+
-            "\u0000\uDD9D\uDD9E\uDD9F\uDDA0\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uD959\u0000\u0000\u0000\u0000"+
-            "\u0000\uD9B5\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uDC34\u0000\u0000\uD9E0\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uD9E5\uD9E2\u0000\u0000\u0000\uDC69\u0000"+
-            "\u0000\u0000\u0000\uD95A\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uDCF7\uDCF8\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uDCFB\uDCFC\uDCFD\uDCFE\u0000"+
-            "\uDB40\uDB41\uDB42\uDB43\uDB44\uDB45\uDB46\uDB47"+
-            "\uDB48\uDB49\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uDB31\uDB32\uDB33\uDB34\uDB35\uDB36\uDB37\uDB38"+
-            "\uDB39\uDB3A\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uD977\uD978\uD976\uD979\uD97A\uD9D5\uD9D8\uD9D6"+
-            "\uD9D9\uD9D7\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uD9A1\u0000\uD9A2\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uD9A3\u0000\uD963\uD9A4\u0000\u0000\u0000\uD964"+
-            "\uD996\u0000\u0000\uD997\u0000\u0000\u0000\uD9B3"+
-            "\u0000\uD9B2\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uD97E\u0000\u0000\uD992\uD954\u0000"+
-            "\uD960\u0000\u0000\u0000\u0000\u0000\u0000\uD99E"+
-            "\uD99F\uD99D\uD99C\uD994\uD995\u0000\uD9B1\u0000"+
-            "\u0000\u0000\u0000\u0000\uD955\uD993\uD9B0\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uD991\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uD966\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uD951\uD965\u0000\u0000\uD952\uD953\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uD99A\uD99B\u0000\u0000\uD998\uD999"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uD961\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uD962\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uDCE7\uDCE8\uDCE9\uDCEA\uDCEB\uDCEC\uDCED\uDCEE"+
-            "\uDCEF\uDCF0\uDCF1\uDCF2\uDCF3\uDCF4\uDCF5\u0000"+
-            "\u0000\u0000\u0000\u0000\uDD77\uDD78\uDD79\uDD7A"+
-            "\uDD7B\uDD7C\uDD7D\uDD7E\uDD91\uDD92\uDD93\uDD94"+
-            "\uDD95\uDD96\uDD97\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uDD5D\uDD5E\uDD5F\uDD60"+
-            "\uDD61\uDD62\uDD63\uDD64\uDD65\uDD66\uDD67\uDD68"+
-            "\uDD69\uDD6A\uDD6B\uDD6C\uDD6D\uDD6E\uDD6F\uDD70"+
-            "\uDD71\uDD72\uDD73\uDD74\uDD75\uDD76\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uDCCD\uDCCE\uDCCF\uDCD0\uDCD1\uDCD2\uDCD3\uDCD4"+
-            "\uDCD5\uDCD6\uDCD7\uDCD8\uDCD9\uDCDA\uDCDB\uDCDC"+
-            "\uDCDD\uDCDE\uDCDF\uDCE0\uDCE1\uDCE2\uDCE3\uDCE4"+
-            "\uDCE5\uDCE6\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uDBA1\uDBAC\uDBA2\uDBAD\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uDBA3\uDBC8\uDBC7\uDBAE"+
-            "\uDBA4\uDBC2\uDBC1\uDBAF\uDBA6\uDBC6\uDBC5\uDBB1"+
-            "\uDBA5\uDBC4\uDBC3\uDBB0\uDBA7\uDBBC\uDBC9\uDBCA"+
-            "\uDBB7\uDBCB\uDBCC\uDBB2\uDBA9\uDBBE\uDBCD\uDBCE"+
-            "\uDBB9\uDBCF\uDBD0\uDBB4\uDBA8\uDBD1\uDBD2\uDBB8"+
-            "\uDBBD\uDBD3\uDBD4\uDBB3\uDBAA\uDBD5\uDBD6\uDBBA"+
-            "\uDBBF\uDBD7\uDBD8\uDBB5\uDBAB\uDBD9\uDBDA\uDBBB"+
-            "\uDBDB\uDBDC\uDBC0\uDBDD\uDBDE\uDBDF\uDBE0\uDBE1"+
-            "\uDBE2\uDBE3\uDBE4\uDBB6\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uD9C6\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uD971\uD970\u0000\uD9C3\uD9C7\uD9C8\uD9CB\uD9CA"+
-            "\uD9C9\uD9CC\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uD973\uD972\u0000\u0000\uD9BA\uD9B9"+
-            "\u0000\u0000\u0000\u0000\uD975\uD974\u0000\u0000"+
-            "\uD9B8\uD9B7\u0000\u0000\u0000\u0000\uD96F\uD96E"+
-            "\uD9C2\uD9C1\u0000\uD96B\u0000\u0000\uD96D\uD96C"+
-            "\uD9C4\uD9C5\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uD96A\uD969\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uD9CF\uD9CE"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uD9D0\u0000\uD9D1\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uD95F\u0000\uD95E\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uD9BC\uD9BD\u0000\uD9C0\uD9BB\uD9BE\u0000\uD9BF"+
-            "\uD9CD\uD9DB\uD9DC\u0000\uD9DD\uD9DA\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uD931\uD932\uD933\uD938\u0000\u0000\u0000\u0000"+
-            "\uD944\uD945\uD946\uD947\uD948\uD949\uD94A\uD94B"+
-            "\uD94C\uD94D\u0000\uD97B\uD942\uD943\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uDDA1\uDDA2\uDDA3\uDDA4\uDDA5\uDDA6\uDDA7"+
-            "\uDDA8\uDDA9\uDDAA\uDDAB\uDDAC\uDDAD\uDDAE\uDDAF"+
-            "\uDDB0\uDDB1\uDDB2\uDDB3\uDDB4\uDDB5\uDDB6\uDDB7"+
-            "\uDDB8\uDDB9\uDDBA\uDDBB\uDDBC\uDDBD\uDDBE\uDDBF"+
-            "\uDDC0\uDDC1\uDDC2\uDDC3\uDDC4\uDDC5\uDDC6\uDDC7"+
-            "\uDDC8\uDDC9\uDDCA\uDDCB\uDDCC\uDDCD\uDDCE\uDDCF"+
-            "\uDDD0\uDDD1\uDDD2\uDDD3\uDDD4\uDDD5\uDDD6\uDDD7"+
-            "\uDDD8\uDDD9\uDDDA\uDDDB\uDDDC\uDDDD\uDDDE\uDDDF"+
-            "\uDDE0\uDDE1\uDDE2\uDDE3\uDDE4\uDDE5\uDDE6\uDDE7"+
-            "\uDDE8\uDDE9\uDDEA\uDDEB\uDDEC\uDDED\uDDEE\uDDEF"+
-            "\uDDF0\uDDF1\uDDF2\uDDF3\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uDE31\uDE32\uDE33\uDE34\uDE35\uDE36\uDE37"+
-            "\uDE38\uDE39\uDE3A\uDE3B\uDE3C\uDE3D\uDE3E\uDE3F"+
-            "\uDE40\uDE41\uDE42\uDE43\uDE44\uDE45\uDE46\uDE47"+
-            "\uDE48\uDE49\uDE4A\uDE4B\uDE4C\uDE4D\uDE4E\uDE4F"+
-            "\uDE50\uDE51\uDE52\uDE53\uDE54\uDE55\uDE56\uDE57"+
-            "\uDE58\uDE59\uDE5A\uDE5B\uDE5C\uDE5D\uDE5E\uDE5F"+
-            "\uDE60\uDE61\uDE62\uDE63\uDE64\uDE65\uDE66\uDE67"+
-            "\uDE68\uDE69\uDE6A\uDE6B\uDE6C\uDE6D\uDE6E\uDE6F"+
-            "\uDE70\uDE71\uDE72\uDE73\uDE74\uDE75\uDE76\uDE77"+
-            "\uDE78\uDE79\uDE7A\uDE7B\uDE7C\uDE7D\uDE7E\uDE91"+
-            "\uDE92\uDE93\uDE94\uDE95\uDE96\uDE97\uDE98\u0000"+
-            "\u0000\u0000\u0000\uD934\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uDAA1\uDAA2\uDAA3\uDAA4\uDAA5\uDAA6\uDAA7"+
-            "\uDAA8\uDAA9\uDAAA\uDAAB\uDAAC\uDAAD\uDAAE\uDAAF"+
-            "\uDAB0\uDAB1\uDAB2\uDAB3\uDAB4\uDAB5\uDAB6\uDAB7"+
-            "\uDAB8\uDAB9\uDABA\uDABB\uDABC\uDABD\uDABE\uDABF"+
-            "\uDAC0\uDAC1\uDAC2\uDAC3\uDAC4\uDAC5\uDAC6\uDAC7"+
-            "\uDAC8\uDAC9\uDACA\uDACB\uDACC\uDACD\uDACE\uDACF"+
-            "\uDAD0\uDAD1\uDAD2\uDAD3\uDAD4\uDAD5\uDAD6\uDAD7"+
-            "\uDAD8\uDAD9\uDADA\uDADB\uDADC\uDADD\uDADE\uDADF"+
-            "\uDAE0\uDAE1\uDAE2\uDAE3\uDAE4\uDAE5\uDAE6\uDAE7"+
-            "\uDAE8\uDAE9\uDAEA\uDAEB\uDAEC\uDAED\uDAEE\uDAEF"+
-            "\uDAF0\uDAF1\uDAF2\uDAF3\uDAF4\uDAF5\uDAF6\uDAF7"+
-            "\uDAF8\uDAF9\uDAFA\uDAFB\uDAFC\uDAFD\uDAFE\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uDD41\uDD42\uDD43\uDD44\uDD45\uDD46\uDD47\uDD48"+
-            "\uDD49\uDD4A\uDD4B\uDD4C\uDD4D\uDD4E\uDD4F\uDD50"+
-            "\uDD51\uDD52\uDD53\uDD54\uDD55\uDD56\uDD57\uDD58"+
-            "\uDD59\uDD5A\uDD5B\uDD5C\uD9DF\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uDCB1\uDCB2\uDCB3\uDCB4\uDCB5\uDCB6\uDCB7\uDCB8"+
-            "\uDCB9\uDCBA\uDCBB\uDCBC\uDCBD\uDCBE\uDCBF\uDCC0"+
-            "\uDCC1\uDCC2\uDCC3\uDCC4\uDCC5\uDCC6\uDCC7\uDCC8"+
-            "\uDCC9\uDCCA\uDCCB\uDCCC\u0000\u0000\u0000\uD9DE"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000";
-
-        private final static String innerIndex1=
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uDC59\uDC5A\uDC5B\uDC5C\uDC5D\u0000\u0000\u0000"+
-            "\uDC4A\uDC4B\uDC6C\uDC6D\uDC6E\uDC46\uDC47\uDC48"+
-            "\uDC64\uDC65\uDC66\uDC67\uDC68\uDC31\uDC32\uDC33"+
-            "\uDC35\uDC3B\uDC3C\uDC3D\uDC3E\uDC3F\uDC40\uDC41"+
-            "\uDC42\uDC43\uDC44\uDC37\uDC38\uDC39\uDC3A\uDC4D"+
-            "\uDC4E\uDC75\uDC76\uDC77\uDC78\uDC71\uDC72\uDC73"+
-            "\uDC4F\uDC50\uDC51\uDC52\uDC53\uDC54\uDC55\uDC56"+
-            "\uDC57\uDC58\uDC5E\uDC5F\uDC60\uDC61\uDC62\uDC63"+
-            "\uDC6A\uDC6B\uD9E3\uDC7C\uDC36\uDC70\uDC91\uD9E1"+
-            "\uDC4C\uDC7D\uDC45\u0000\u0000\u0000\u0000\uDC49"+
-            "\uDC7A\u0000\u0000\uDC7B\u0000\u0000\uDC6F\u0000"+
-            "\uD9E4\u0000\u0000\uDC74\uDC7E\uDC79\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF179\uF2CB\u0000\uF662\u0000\u0000\u0000\uE742"+
-            "\uF1DB\uEAB2\uEABE\uF7BB\u0000\uE996\u0000\u0000"+
-            "\u0000\uF5E4\u0000\u0000\uF4A6\uE9E0\uEBA6\u0000"+
-            "\uE29A\uE940\u0000\u0000\u0000\u0000\uECAA\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF3E9\u0000\u0000"+
-            "\u0000\u0000\uE1FA\u0000\u0000\u0000\u0000\u0000"+
-            "\uF93F\uE4A1\u0000\uF3AB\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uEED1\uE43C\u0000\uE29B\u0000\u0000"+
-            "\u0000\u0000\u0000\uF3FD\u0000\uEA4F\uF8BA\uF7B9"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE262\u0000"+
-            "\uECAB\uF0E0\u0000\u0000\u0000\uE29C\uE0F7\uEDA5"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE071\u0000\uE55C\u0000\u0000"+
-            "\u0000\u0000\u0000\uF071\u0000\u0000\uE973\uEAAD"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE0EB\u0000"+
-            "\u0000\u0000\uE5AF\u0000\u0000\u0000\uE697\u0000"+
-            "\uEDF8\u0000\u0000\uEA50\uF133\u0000\uEFCD\u0000"+
-            "\uF037\uEFF6\uF8BB\u0000\uEEE9\uF2CC\u0000\u0000"+
-            "\uE376\u0000\u0000\uEA51\u0000\u0000\uED3C\u0000"+
-            "\u0000\uE75C\uF7F1\u0000\uE26F\uF834\uEE42\u0000"+
-            "\uF89D\u0000\u0000\uF84D\uE158\uF2CD\uE5D5\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE4A2\u0000"+
-            "\u0000\u0000\uF161\u0000\u0000\u0000\u0000\u0000"+
-            "\uED37\uF162\u0000\u0000\uF641\u0000\u0000\uE29D"+
-            "\u0000\u0000\uE361\uE0BF\u0000\uF1A4\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uF1A8\uEA52\uF672\uF1DC"+
-            "\uE997\uEB49\u0000\u0000\u0000\uE55E\u0000\uF545"+
-            "\u0000\u0000\u0000\uE4DB\uE645\uF134\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uED76\u0000\uF3EA\u0000\u0000\u0000\uE0EC\uE0C0"+
-            "\u0000\u0000\u0000\uF194\u0000\u0000\u0000\u0000"+
-            "\u0000\uE37A\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF7F2\uF135\uE36F\u0000\uEEEA\uE37B\uE961"+
-            "\uE8E9\uF9CC\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE8D7"+
-            "\u0000\u0000\u0000\u0000\uE871\u0000\uE646\u0000"+
-            "\uECDF\u0000\uEA53\u0000\uEA54\uE031\u0000\u0000"+
-            "\u0000\u0000\u0000\uF27C\u0000\u0000\uE4A3\uF247"+
-            "\uF75F\u0000\u0000\u0000\u0000\uF058\uF248\uF3AC"+
-            "\uF3A5\uEFCE\u0000\u0000\u0000\uF7BC\u0000\u0000"+
-            "\u0000\uEDF9\uF17A\uE9D6\uF1C2\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF735\u0000\u0000\u0000\u0000\u0000\uEDBA"+
-            "\uE8D8\u0000\u0000\uE032\u0000\u0000\uE3CD\u0000"+
-            "\u0000\u0000\uF27D\u0000\u0000\u0000\uF17B\uEA55"+
-            "\u0000\uECE0\u0000\uE059\uF479\u0000\uE5CE\u0000"+
-            "\uF646\u0000\uE252\uE657\u0000\uECB4\u0000\uF3AD"+
-            "\u0000\uF072\u0000\u0000\u0000\u0000\uE6C2\u0000"+
-            "\uF4A7\u0000\u0000\uE1EA\u0000\uF0EE\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE7B2\uF9A5"+
-            "\u0000\u0000\u0000\u0000\u0000\uF665\uE5E2\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF745"+
-            "\u0000\u0000\uE197\uF5B5\uED3D\u0000\u0000\u0000"+
-            "\u0000\uEEEB\uF3D5\u0000\u0000\u0000\uF34B\u0000"+
-            "\u0000\uEFB5\u0000\uE159\uF865\u0000\u0000\uEBD4"+
-            "\u0000\u0000\uE6D6\u0000\u0000\uE951\u0000\uEA56"+
-            "\uF891\uECE1\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uEBF3\uE998"+
-            "\u0000\uE29E\u0000\uE8C4\u0000\uF793\u0000\u0000"+
-            "\uE974\u0000\uEDEF\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE941\u0000\u0000\u0000\uE5D6\u0000"+
-            "\u0000\uF4DA\u0000\uE0C1\u0000\uE8C3\u0000\u0000"+
-            "\u0000\uE7FA\uE4EE\u0000\u0000\u0000\uF848\u0000"+
-            "\u0000\uF9A6\uF0EF\u0000\uF536\u0000\uE15A\uF4A8"+
-            "\u0000\uF4DB\u0000\uE8A7\uF647\u0000\uE2E6\uF394"+
-            "\uE0DA\u0000\uEED2\uE6C3\uF692\uEF6E\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uEDA6\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uEDE7\u0000\u0000\u0000\uE033"+
-            "\uE137\uF059\u0000\u0000\u0000\u0000\u0000\uF746"+
-            "\u0000\u0000\u0000\u0000\u0000\uF835\u0000\u0000"+
-            "\u0000\u0000\uF3AE\u0000\uF2CE\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uE0ED\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uF640\uF2CF\uEFCF\u0000"+
-            "\uF6DE\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE263\u0000\u0000\u0000\u0000\uE999\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uE8A8\u0000\u0000"+
-            "\u0000\uE0F8\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uEAA1\uE9E1\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uF5CA\uEFB6\u0000\u0000"+
-            "\u0000\u0000\uEEEC\uF27E\u0000\uF4F0\u0000\uEABF"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE15B\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uE351\u0000\u0000"+
-            "\u0000\uF562\uEB4A\u0000\u0000\u0000\u0000\uEAC0"+
-            "\u0000\uE270\u0000\u0000\u0000\uE962\uF9EA\u0000"+
-            "\u0000\u0000\uE698\u0000\u0000\u0000\uF05A\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uEF79\u0000\uECAC"+
-            "\u0000\u0000\u0000\u0000\u0000\uF4D0\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE034\u0000\uE8F8\u0000\u0000\u0000\uEA57"+
-            "\uF0F0\uF3D6\u0000\u0000\uEDE2\u0000\uE15C\u0000"+
-            "\u0000\uE0FB\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF073\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEAC1"+
-            "\u0000\uE67D\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uEFD0\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF249\u0000\u0000\u0000\u0000\uE5E3"+
-            "\u0000\u0000\uE3D3\u0000\uEDF0\u0000\u0000\u0000"+
-            "\uEF44\uF0C3\u0000\uF03A\uF89E\uF5F6\uF34C\uF9D4"+
-            "\uEB4B\uE253\u0000\uE34A\uF6BA\uE795\uF6CD\u0000"+
-            "\u0000\u0000\uED3E\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uE56F\u0000\u0000\u0000"+
-            "\u0000\u0000\uE377\u0000\u0000\uF19F\u0000\uE43E"+
-            "\uF291\uE5D7\uF074\uF732\uE1EB\uE6BF\uF8B1\u0000"+
-            "\u0000\uE1EC\u0000\u0000\u0000\uE942\uE37C\uE29F"+
-            "\uF292\u0000\u0000\u0000\uE152\u0000\u0000\u0000"+
-            "\uE37D\u0000\u0000\u0000\u0000\u0000\uEDF7\u0000"+
-            "\u0000\u0000\uF4FC\u0000\u0000\uF232\u0000\u0000"+
-            "\u0000\u0000\uE7B3\u0000\u0000\uE796\u0000\uEFB7"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE23E\u0000\u0000\u0000\u0000\uE7A2\u0000\u0000"+
-            "\u0000\u0000\uE793\u0000\uE55F\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uEDA7\uE5D2"+
-            "\u0000\u0000\u0000\u0000\u0000\uE639\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uF532\u0000\uF3D7\u0000"+
-            "\u0000\uE5D8\u0000\uF34D\uE6D0\uE560\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uE6CF\uF0EA\uF9EB\u0000"+
-            "\u0000\uE8ED\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF955\uE0C2\u0000\u0000\u0000\u0000\uF9D5\u0000"+
-            "\uF558\uEF7A\uF5F3\u0000\u0000\uF7DE\u0000\u0000"+
-            "\uE4EF\u0000\u0000\uF163\u0000\u0000\uE9C2\uF2B7"+
-            "\uEED4\u0000\uE05A\u0000\u0000\u0000\uE7FB\u0000"+
-            "\u0000\uF89F\u0000\u0000\u0000\u0000\u0000\uE63A"+
-            "\u0000\u0000\u0000\u0000\u0000\uF59A\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uF6F7\uE93C\u0000\u0000"+
-            "\u0000\uE6D7\uEAA2\u0000\u0000\u0000\uE24E\u0000"+
-            "\uE4F0\u0000\u0000\u0000\u0000\u0000\uF334\uEBEC"+
-            "\uE2E7\uF4CB\uF1A9\uE04E\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF591\u0000\u0000\u0000\uF65E"+
-            "\u0000\u0000\uEA9D\uE34B\uE5B7\uF293\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uF538\u0000\uE99A\u0000"+
-            "\u0000\u0000\u0000\uE0A7\u0000\uE85E\u0000\u0000"+
-            "\u0000\uEB76\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF1A5\uF294\u0000\u0000\u0000\u0000\uE99B"+
-            "\u0000\u0000\uF7DC\u0000\u0000\uF4DC\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF794\u0000\uF59B"+
-            "\u0000\u0000\u0000\uF993\u0000\u0000\u0000\uE34C"+
-            "\uE8F9\uE6B1\u0000\u0000\u0000\uE0FC\u0000\u0000"+
-            "\u0000\uF335\uE0FD\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE5F4\u0000\u0000\u0000\uE1ED"+
-            "\uE035\u0000\u0000\uE63B\uE352\u0000\u0000\u0000"+
-            "\u0000\uF34E\uE44D\uE134\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF846\u0000"+
-            "\u0000\uE15D\u0000\uE89C\u0000\uF65F\u0000\uEFB8"+
-            "\u0000\uE797\u0000\u0000\u0000\uE15E\u0000\u0000"+
-            "\u0000\u0000\uE6CD\u0000\u0000\uE561\uEFED\u0000"+
-            "\uE07B\uE7E2\u0000\uF9B2\u0000\uECAD\uE65C\uE7B4"+
-            "\u0000\u0000\uEBA7\uF263\uE353\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF9B3\u0000\uE5E4\u0000\u0000"+
-            "\uE2E8\u0000\uF1C3\uE342\u0000\u0000\uE2A0\uE838"+
-            "\u0000\u0000\u0000\u0000\u0000\uF760\u0000\u0000"+
-            "\uF9D6\u0000\u0000\u0000\u0000\uF761\u0000\uF762"+
-            "\uE963\u0000\u0000\u0000\u0000\uE9E2\uF8F9\uE9C1"+
-            "\u0000\uECB5\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF1DD\uE254\u0000\uE0A1\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE9E3\u0000\u0000\u0000\u0000\uF96D"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF7AF\u0000\u0000\u0000\u0000\u0000\uE49D"+
-            "\uE2A1\uED38\u0000\uF546\uF1A0\u0000\u0000\uECAE"+
-            "\uEEED\uF9C1\uE872\u0000\u0000\uE743\u0000\u0000"+
-            "\u0000\uE9E4\uF391\uF693\uF892\u0000\u0000\uE3F5"+
-            "\u0000\u0000\uE85F\u0000\uE964\u0000\uE936\u0000"+
-            "\uF2BF\u0000\u0000\u0000\u0000\u0000\uE25F\u0000"+
-            "\uEB69\u0000\u0000\u0000\u0000\u0000\u0000\uE7D6"+
-            "\uF164\uF05B\u0000\u0000\uE04F\uE5B0\u0000\uE2E9"+
-            "\u0000\u0000\u0000\u0000\u0000\uF3ED\u0000\uE15F"+
-            "\u0000\u0000\u0000\u0000\uED9A\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uED7D\u0000\u0000\u0000\u0000"+
-            "\uE6D8\u0000\uF9A7\u0000\u0000\u0000\u0000\uF03B"+
-            "\uF642\u0000\u0000\u0000\u0000\uE2F0\uF7BD\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uEE96\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE0DB\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF4D1\u0000\u0000\u0000\u0000"+
-            "\uEFD1\uF4A9\uE370\uEFD2\u0000\uE873\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uEC62\u0000\uF632\uEBF4"+
-            "\u0000\u0000\u0000\uE874\u0000\u0000\u0000\u0000"+
-            "\u0000\uEED5\uF5BF\uE2A2\uE1AF\uE2A3\u0000\u0000"+
-            "\u0000\uE1B0\uF3FE\uE333\uEBAF\uF733\u0000\uE036"+
-            "\uF6BB\uF47A\uEA58\uEFD3\u0000\u0000\u0000\u0000"+
-            "\uEA59\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF9DE\uE050\u0000\u0000\u0000"+
-            "\uF7EA\uE3CE\uF264\u0000\uE562\uE7A3\uF9A8\uE6D9"+
-            "\uF6CE\uF84E\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE2D6\u0000\uE6F0\u0000\uF0E1"+
-            "\uF755\u0000\u0000\u0000\u0000\u0000\uE99C\u0000"+
-            "\u0000\uE9C3\u0000\uF7DF\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uEEEF\u0000\u0000\u0000\u0000"+
-            "\uF9E5\uF633\u0000\uE7FC\uF9A9\u0000\uEEEE\u0000"+
-            "\u0000\u0000\uE5E5\u0000\u0000\u0000\u0000\u0000"+
-            "\uF2D0\u0000\uE1B1\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF6A2\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF3B2\u0000\uF3B1\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE1B2\u0000\uE83B\u0000\uE037\u0000\u0000"+
-            "\u0000\u0000\u0000\uECE2\uF8BC\uE7A4\u0000\u0000"+
-            "\uF24A\u0000\u0000\u0000\u0000\u0000\uF763\u0000"+
-            "\u0000\u0000\u0000\u0000\uF8FA\u0000\uE2A4\u0000"+
-            "\uE99D\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uF673\u0000\u0000\u0000"+
-            "\uF1AA\u0000\u0000\uF431\uE271\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF836\u0000\u0000\u0000\u0000"+
-            "\uF7E0\u0000\u0000\u0000\u0000\uF166\u0000\u0000"+
-            "\uED7E\uF7A1\u0000\u0000\uF8EF\u0000\u0000\u0000"+
-            "\uF7EB\uF233\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF03C\u0000\u0000\u0000\uE038\u0000\u0000"+
-            "\uF59C\u0000\u0000\u0000\u0000\uE1D6\uF998\u0000"+
-            "\u0000\u0000\uF559\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF764\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uF736\u0000\uEA5A\uF456"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE6DA\u0000"+
-            "\uE4D0\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uE755\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF076"+
-            "\u0000\uF4DD\u0000\u0000\u0000\uED6A\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF674\u0000"+
-            "\u0000\u0000\u0000\u0000\uF694\u0000\uEAC2\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE7FD"+
-            "\u0000\u0000\u0000\uE198\u0000\u0000\uE4BA\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uED3F\u0000"+
-            "\u0000\u0000\u0000\uF7E1\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uF336\u0000\u0000\u0000"+
-            "\uE0D3\u0000\u0000\u0000\uEB4C\u0000\uF55A\uE59C"+
-            "\u0000\uF9AA\uF7E2\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF547\uF9C2\uF940\u0000\uF9EC\uE072\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF9BD"+
-            "\u0000\uF077\uEAC3\uE3D2\uE272\u0000\uE4A4\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF9AB\u0000\uEAE0"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uF457\u0000\u0000\u0000"+
-            "\u0000\u0000\uEEF0\u0000\uE37E\u0000\u0000\uF4AA"+
-            "\u0000\u0000\u0000\uEA5B\uF648\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uEBF5\uF3B3\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF6A3\u0000"+
-            "\u0000\uE039\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uE2A5\u0000\u0000\uEAC4"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEBB0"+
-            "\u0000\u0000\uF34F\u0000\uF634\u0000\uECB6\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF856\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE391\u0000\u0000\uF9ED\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uE9C4\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF999\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uEE4F\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uEA3D\u0000\uF84F\u0000"+
-            "\u0000\u0000\u0000\u0000\uEDF1\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uF1C4\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE435\u0000\u0000\uF9EE\u0000\u0000"+
-            "\u0000\uF5B6\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uEBF6\uEA5C\u0000\u0000\uF96E\u0000"+
-            "\uF167\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE1DD\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE647\uE1B3\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF765\uEDD8\u0000\u0000\u0000"+
-            "\uE2EA\u0000\u0000\uE2D0\u0000\uF05C\u0000\u0000"+
-            "\u0000\u0000\uF03E\uF03D\u0000\u0000\uE4F1\u0000"+
-            "\uE4A5\u0000\u0000\u0000\u0000\u0000\u0000\uF6CF"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF234\u0000\u0000\u0000\u0000\uE334\u0000\u0000"+
-            "\uF432\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE392\u0000\u0000\u0000\u0000"+
-            "\uF433\u0000\uF6F8\u0000\u0000\u0000\u0000\uE343"+
-            "\u0000\u0000\uE8A9\u0000\u0000\uE4BB\uE07C\u0000"+
-            "\uF3A6\uE0D5\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF6E7\u0000\u0000\uE1DE\u0000\uF6A4\u0000"+
-            "\u0000\u0000\uF750\u0000\u0000\u0000\uE4DD\u0000"+
-            "\uE160\u0000\u0000\u0000\u0000\uE2A6\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uF695\u0000\u0000\u0000"+
-            "\u0000\u0000\uEBF7\u0000\u0000\u0000\u0000\u0000"+
-            "\uE4DC\u0000\u0000\uF8A0\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF837\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF0D9\u0000\uE2A7\uF03F\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uED91\u0000\u0000\u0000\uEFB9"+
-            "\uF3D8\u0000\u0000\uE768\u0000\u0000\uEB94\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEE44"+
-            "\uE99E\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF4F1\u0000\u0000\u0000\uECD0\u0000\u0000\uF49D"+
-            "\u0000\uE8C6\uE393\u0000\uE394\u0000\u0000\u0000"+
-            "\uE2DC\u0000\uE4D1\u0000\u0000\uE141\uF6D8\u0000"+
-            "\uE0A8\uF0BC\uED4E\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF56C\u0000"+
-            "\u0000\uE952\u0000\u0000\uF337\u0000\u0000\uEE50"+
-            "\u0000\u0000\uE07D\u0000\u0000\u0000\u0000\uEF7B"+
-            "\uEDE8\uE953\u0000\u0000\uF1DE\uE4F2\u0000\u0000"+
-            "\u0000\u0000\uE199\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE264\uEEAB\u0000\u0000\u0000\uE0C3"+
-            "\u0000\uEBB1\u0000\u0000\uF6B2\u0000\u0000\uE4F3"+
-            "\uE4D2\u0000\uF5C0\u0000\u0000\u0000\uEADD\u0000"+
-            "\u0000\uF295\uEEF1\u0000\uF9B4\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF458\u0000\u0000"+
-            "\u0000\uF4D2\u0000\u0000\uF296\u0000\uEC63\u0000"+
-            "\u0000\u0000\u0000\uE161\u0000\uEAEA\u0000\u0000"+
-            "\u0000\uEFBA\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE7D7\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uF5CD\u0000\uF3F2\uF857"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE7F8\uE552\u0000\u0000\u0000\u0000\uF675\u0000"+
-            "\u0000\u0000\u0000\uE9C5\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uEEF2\uF1DF\u0000\u0000\uE05B\u0000"+
-            "\u0000\uE8FA\u0000\u0000\u0000\uEF45\u0000\uE4A6"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF9B5\u0000"+
-            "\u0000\uF7C9\u0000\uED72\u0000\uF8BD\u0000\u0000"+
-            "\uE6A4\uE255\u0000\u0000\u0000\u0000\uE265\uE676"+
-            "\u0000\u0000\u0000\u0000\uEDBD\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uEA5D\uF195\u0000\u0000\uF1E0"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF17C\uF8BE\uEAEB\u0000\uEBF8\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF7BE"+
-            "\u0000\u0000\u0000\u0000\uE395\uEB3A\uEF72\u0000"+
-            "\u0000\uEC64\uE49F\u0000\uEDA8\u0000\u0000\u0000"+
-            "\u0000\u0000\uE7D3\u0000\u0000\u0000\u0000\uE4DE"+
-            "\u0000\uF548\uF6BC\uE99F\u0000\uEF7C\uED77\u0000"+
-            "\u0000\uECF7\u0000\u0000\u0000\u0000\u0000\uF138"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF893\u0000"+
-            "\u0000\u0000\u0000\u0000\uEDF2\u0000\u0000\uE396"+
-            "\uE43F\uE975\u0000\u0000\u0000\u0000\uE335\uF3B4"+
-            "\uF941\uE19A\u0000\u0000\uE9C6\uF861\u0000\uF6DF"+
-            "\u0000\u0000\uF838\u0000\u0000\u0000\u0000\u0000"+
-            "\uF297\u0000\uEA5E\u0000\u0000\u0000\u0000\uEEF3"+
-            "\u0000\u0000\uF6AC\uF0C4\uF1E1\uEB3B\uE9C7\u0000"+
-            "\u0000\u0000\u0000\uE443\uE44F\u0000\u0000\u0000"+
-            "\uE05C\u0000\u0000\u0000\u0000\uF8BF\u0000\u0000"+
-            "\u0000\u0000\uEDFD\uE9E5\uE75D\u0000\u0000\u0000"+
-            "\u0000\u0000\uF196\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE397\u0000\u0000\uEF7D\uE362"+
-            "\u0000\uE7D8\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF676\u0000\u0000"+
-            "\uE8AA\u0000\u0000\u0000\uF6E0\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE769\u0000\uF533\u0000\u0000\uF56D\u0000"+
-            "\u0000\u0000\u0000\uF2D1\u0000\u0000\uE7B5\u0000"+
-            "\u0000\uF1AB\u0000\uECB7\u0000\u0000\u0000\u0000"+
-            "\uF24B\uE1B4\u0000\uEB95\uF05D\u0000\u0000\u0000"+
-            "\u0000\uF197\uEF7E\u0000\uE0A9\uF3AF\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE05D\u0000"+
-            "\uF139\u0000\uF47B\u0000\uF9EF\u0000\uF7F3\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uEE51\u0000\u0000\uF168\u0000\u0000\u0000\uF1AC"+
-            "\u0000\uF05E\u0000\uEF6F\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uEA5F\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE436\u0000\u0000\uEEF4\uE3D6\u0000\u0000\uEE52"+
-            "\uECE3\u0000\u0000\u0000\u0000\uED40\u0000\u0000"+
-            "\u0000\uE744\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF635\u0000"+
-            "\u0000\u0000\u0000\u0000\uF4DE\u0000\u0000\u0000"+
-            "\u0000\uE6A5\u0000\u0000\u0000\u0000\uF6E8\u0000"+
-            "\u0000\uEF56\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF8E6\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE9E6\u0000\u0000\u0000\uE9A0\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE76A\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE83C\uF040\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uECB8\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE03A\uEBF9\u0000\uF041\u0000\u0000\u0000"+
-            "\u0000\uF47C\u0000\u0000\uF87E\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF265\u0000\u0000\u0000\u0000\uF7F4\u0000"+
-            "\u0000\uE47C\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF8FB\u0000\u0000"+
-            "\u0000\uF9F0\u0000\uEB4D\uE273\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF756\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uEA3E\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uEAC5\u0000\u0000\uEDBE\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF1AD\uF87A\u0000\u0000\uE1EE\uF1A6\u0000\uF1AE"+
-            "\uF37D\u0000\uE9A1\u0000\uF1AF\uF99A\u0000\uE77B"+
-            "\u0000\u0000\u0000\uE19B\uE1B5\u0000\u0000\u0000"+
-            "\u0000\uF839\u0000\uEBDD\u0000\u0000\u0000\u0000"+
-            "\uEC65\uF1CF\u0000\u0000\u0000\uE9A2\u0000\u0000"+
-            "\uF7CA\u0000\uF078\u0000\uEDED\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uE4EB\u0000\uEFD4"+
-            "\uEBFA\uED5C\u0000\uEBE4\uEF57\u0000\u0000\uE26B"+
-            "\u0000\u0000\u0000\uE965\u0000\uF6B5\uF995\uF395"+
-            "\uE23F\uF3B5\uF2D2\uEF58\uF0F1\u0000\u0000\u0000"+
-            "\u0000\u0000\uE0D4\uEB4E\uECF8\uF079\uF942\u0000"+
-            "\u0000\u0000\u0000\u0000\uEB96\u0000\uE2E0\u0000"+
-            "\uF235\u0000\u0000\uF83A\uEE53\uEBB2\uE03B\u0000"+
-            "\uECE4\uEFBB\u0000\u0000\u0000\u0000\u0000\uEC66"+
-            "\uF4F2\u0000\uF266\uF042\uE398\uF169\uE85B\uE2A8"+
-            "\u0000\u0000\u0000\u0000\uE9A3\u0000\u0000\u0000"+
-            "\uE76B\u0000\uF7CE\uEFD5\uECD1\u0000\u0000\uE44C"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE73C\uF4CC"+
-            "\u0000\uE1FB\uF666\u0000\uEEF5\uEF91\uECF9\uE44B"+
-            "\uF4F3\uECFB\u0000\uEA60\uE240\u0000\uE699\uF3D9"+
-            "\u0000\u0000\u0000\u0000\u0000\uF5C1\uE954\u0000"+
-            "\uF5BB\u0000\uEA61\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE976\u0000\u0000\uEA62\u0000\u0000\uF1E2"+
-            "\uF298\uF05F\uF37E\uECFC\u0000\uE4DF\uE4F4\uEBB3"+
-            "\u0000\uEBB4\u0000\u0000\u0000\u0000\uF563\u0000"+
-            "\u0000\uEAC6\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uEFD6\u0000\u0000\u0000"+
-            "\uE8AB\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF636\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uECB9\uF0C5\uF539\uE1B6\uE49B\u0000\uE83D\uE473"+
-            "\uE2D1\u0000\u0000\u0000\u0000\uE0DC\uE19C\u0000"+
-            "\uE2DD\u0000\u0000\uEF39\u0000\uECBB\uECBA\u0000"+
-            "\u0000\uEB6A\u0000\u0000\u0000\uF299\u0000\u0000"+
-            "\u0000\u0000\u0000\uE943\u0000\u0000\u0000\u0000"+
-            "\uE4F5\u0000\uE6A6\u0000\uF645\uE6DB\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uEBD5\u0000\u0000\uE57A"+
-            "\u0000\uEAA3\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF9DF\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE399\uF1D4\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE0AA\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uED6B\u0000\uEBFB\uE0A2\u0000\u0000\u0000"+
-            "\u0000\uE4E0\u0000\uED4F\u0000\uF8C0\u0000\uE84E"+
-            "\uED5D\u0000\uE649\u0000\u0000\u0000\uF2C0\u0000"+
-            "\uEBFC\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF649\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uEAC7\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uED41\u0000\u0000\u0000\u0000\u0000\u0000\uE977"+
-            "\uE978\u0000\u0000\u0000\uF866\u0000\uE4F6\u0000"+
-            "\u0000\u0000\u0000\uF3DA\u0000\uF894\u0000\u0000";
-
-        private final static String innerIndex2=
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEC9F"+
-            "\u0000\u0000\u0000\u0000\u0000\uE5CF\uE39A\u0000"+
-            "\u0000\uE1DF\u0000\u0000\uF5CB\u0000\uED92\uE0AB"+
-            "\u0000\uE6C4\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uECA0"+
-            "\u0000\uE9DA\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE83E\uE07E\u0000\u0000\u0000"+
-            "\uE5B9\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uECA1\u0000\u0000\uEF73\u0000\u0000\uF4AB"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE2A9"+
-            "\u0000\u0000\u0000\uE4F7\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uE593\u0000\u0000"+
-            "\uE274\u0000\uEF94\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uEDF5\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uEEAE\u0000\uE64A\u0000\uEAEC\uED50\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uEF74\u0000\u0000"+
-            "\u0000\u0000\uE745\u0000\u0000\u0000\uED6C\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF549\uF3B6\u0000"+
-            "\u0000\uEC6E\uEBB5\u0000\u0000\uE1EF\uF3A7\uE275"+
-            "\uE0DD\u0000\u0000\uE7E3\u0000\u0000\uF4AC\u0000"+
-            "\u0000\uE39B\uF13B\uEA63\uF6E9\u0000\u0000\uF7F5"+
-            "\u0000\u0000\u0000\u0000\u0000\uEBDE\uE0EE\u0000"+
-            "\u0000\u0000\uECBC\uF766\u0000\u0000\uE8EE\u0000"+
-            "\u0000\u0000\u0000\u0000\uF9F1\u0000\u0000\u0000"+
-            "\u0000\uF6B6\u0000\u0000\u0000\u0000\uF56E\u0000"+
-            "\u0000\uF47D\u0000\uE8D9\u0000\uF338\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uEBFD\u0000\u0000"+
-            "\u0000\u0000\u0000\uEA64\u0000\uEB3C\u0000\u0000"+
-            "\u0000\u0000\u0000\uF1E3\u0000\u0000\uE4E1\u0000"+
-            "\uEAC8\u0000\u0000\u0000\u0000\uE7B6\u0000\uF9AC"+
-            "\uF2D3\u0000\u0000\u0000\uED51\uF77B\u0000\uE8AC"+
-            "\u0000\u0000\u0000\u0000\uF956\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uE73D\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF64A"+
-            "\u0000\uE8DF\uE4D3\uF757\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE05E\uF751\uE444\u0000\u0000\uE944"+
-            "\uF849\uE05F\u0000\uF943\uF07A\uF07B\uE39C\u0000"+
-            "\u0000\u0000\u0000\u0000\uF1E4\u0000\u0000\uE9E7"+
-            "\u0000\u0000\uEAC9\u0000\u0000\u0000\u0000\uEAED"+
-            "\u0000\u0000\u0000\u0000\u0000\uF24C\u0000\uF2C1"+
-            "\u0000\u0000\uE162\u0000\uE9A4\u0000\u0000\u0000"+
-            "\uEACA\u0000\u0000\u0000\u0000\u0000\uE4F8\uF3A8"+
-            "\u0000\u0000\u0000\uE1B7\u0000\uF2D4\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uED6D\uEAEE\uE0AC"+
-            "\uEFBC\u0000\u0000\u0000\u0000\u0000\uF07C\u0000"+
-            "\u0000\u0000\uEACB\u0000\u0000\u0000\u0000\u0000"+
-            "\uF7BF\uE63F\uE5C6\u0000\u0000\u0000\u0000\u0000"+
-            "\uE2AA\u0000\u0000\uE239\u0000\u0000\uE69A\u0000"+
-            "\u0000\u0000\uF3B7\uF29A\u0000\u0000\u0000\uE7D9"+
-            "\uF4DF\u0000\uF758\uE256\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uE5E6\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF576\u0000\u0000\uEE55\uF2D5"+
-            "\u0000\u0000\uE0EF\uF96F\u0000\u0000\u0000\u0000"+
-            "\u0000\uE937\u0000\u0000\uE677\u0000\u0000\u0000"+
-            "\u0000\u0000\uF759\u0000\u0000\u0000\u0000\uECD2"+
-            "\u0000\uECBD\u0000\uE2E1\uF350\uF16A\u0000\uE9D7"+
-            "\uF8F0\u0000\u0000\uF13C\u0000\u0000\u0000\uF339"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF867\uF8C1"+
-            "\u0000\uE450\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uEDB0\u0000\u0000\u0000\uF1E5\u0000\u0000"+
-            "\u0000\u0000\uE0AD\u0000\uF7B0\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF6A5\u0000\uE0AE\u0000\uE83F\u0000\uE746\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE4A7\uF8B2"+
-            "\u0000\uF9C4\u0000\uF13D\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF8A1\u0000\u0000\u0000\uEDE9\uEFEE"+
-            "\u0000\uF4F4\uF795\uF351\uEA3F\uF740\u0000\u0000"+
-            "\uF4E0\uEEAF\u0000\u0000\u0000\u0000\u0000\uE8AD"+
-            "\u0000\uEE45\u0000\u0000\uF7A8\u0000\u0000\uE9D8"+
-            "\uEF69\uF2D6\u0000\u0000\u0000\uE4E2\u0000\uEC6F"+
-            "\u0000\u0000\uF970\uE6C8\uF9AD\u0000\u0000\u0000"+
-            "\uEAEF\uE163\uE4F9\u0000\u0000\u0000\u0000\uE592"+
-            "\uE8C7\uEA65\u0000\u0000\u0000\u0000\uF396\u0000"+
-            "\uE5D0\uEDD9\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF957\uE966\uEC70\u0000\u0000\u0000\uE840\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF4A3\u0000\uE4EC"+
-            "\u0000\uF55B\u0000\u0000\u0000\uF9C5\u0000\u0000"+
-            "\u0000\u0000\u0000\uECFD\u0000\uF7B1\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uE39D\uF16B\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF5BC\uF434"+
-            "\uE75E\uE75F\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF5F7\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF671\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uE447\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF8EC\u0000\uE9C8"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uED78"+
-            "\u0000\u0000\uE451\u0000\u0000\u0000\uF767\u0000"+
-            "\u0000\u0000\u0000\u0000\uE64B\uEA66\u0000\u0000"+
-            "\uF6BD\uF13E\u0000\u0000\u0000\uE371\u0000\uEB97"+
-            "\uF043\u0000\uE266\u0000\u0000\u0000\u0000\uE135"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF198\uEC71\uECBE\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF958\u0000\u0000"+
-            "\uE1F0\u0000\uF7F6\u0000\u0000\uEAF0\u0000\u0000"+
-            "\u0000\uEDBF\u0000\u0000\u0000\uE24F\u0000\u0000"+
-            "\u0000\u0000\uF971\uF1B0\uF9D1\uF64B\u0000\u0000"+
-            "\uF7CF\uF0DA\uE051\u0000\uE448\uE1F1\u0000\uECD3"+
-            "\uF9E6\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uEE7D\u0000\u0000"+
-            "\u0000\uECFA\u0000\u0000\uF33A\uF7D0\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uF972\u0000\uF737\u0000"+
-            "\u0000\u0000\uEBE5\uF29B\u0000\u0000\u0000\uEEF6"+
-            "\uF07D\u0000\u0000\uF944\uF5C2\u0000\u0000\uE6DC"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF397\u0000\uE9E8\uE4ED\uF5FC\u0000\uE84F\u0000"+
-            "\uE19D\u0000\u0000\u0000\uE4FA\uF534\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF2D7\u0000\uE553"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF8E3\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF8ED\u0000\uEB3D\u0000\u0000\uF07E"+
-            "\uF8B3\uED52\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF677\uE46D\u0000\uEACC\u0000\u0000\uF959\u0000"+
-            "\u0000\uEDA9\uEB98\uF643\u0000\u0000\u0000\u0000"+
-            "\u0000\uEBFE\u0000\u0000\u0000\u0000\uE0F0\u0000"+
-            "\uF091\uF092\u0000\u0000\u0000\uE850\uF744\uF0F2"+
-            "\u0000\u0000\u0000\u0000\u0000\uED53\u0000\u0000"+
-            "\u0000\u0000\uEFD7\uED93\u0000\u0000\u0000\uE091"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE267"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF95A\u0000\u0000\u0000\uF4E1\u0000\u0000\uE0C4"+
-            "\u0000\u0000\u0000\u0000\uECE5\u0000\uE0C5\uF044"+
-            "\u0000\u0000\uEFBD\u0000\uE6C9\u0000\u0000\uF0DB"+
-            "\uF1B1\u0000\uE153\uF6BE\uF95B\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF796\u0000\uE7B7\u0000\u0000"+
-            "\uF4D3\uF4D4\u0000\u0000\u0000\uF6E4\u0000\uF6D1"+
-            "\u0000\u0000\uE747\uE241\uE052\u0000\u0000\uF8B4"+
-            "\uE0C6\u0000\u0000\uF398\u0000\u0000\uE5E7\u0000"+
-            "\uF060\u0000\u0000\u0000\u0000\u0000\uE164\uE0AF"+
-            "\u0000\u0000\u0000\u0000\u0000\uF53A\uEFAF\u0000"+
-            "\u0000\uF5C3\uEFD8\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE9E9\u0000\u0000\u0000\uF3F3\u0000"+
-            "\uE5FB\uEA4B\u0000\u0000\uF59D\u0000\u0000\u0000"+
-            "\uF9F3\uF9F2\uF6A6\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uE9C9\u0000\u0000\uE563"+
-            "\u0000\uE138\u0000\uE851\uE165\u0000\uE7E4\u0000"+
-            "\u0000\u0000\uF85A\u0000\u0000\u0000\uEDE3\u0000"+
-            "\u0000\u0000\uE4BC\u0000\u0000\u0000\uE092\u0000"+
-            "\u0000\u0000\u0000\uE354\u0000\u0000\u0000\uE060"+
-            "\uF83B\uF0EB\uEEF8\uE7E5\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE3D7\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF4A4\u0000\u0000\u0000\uE59D\uF973"+
-            "\uF868\u0000\uF4D5\u0000\uE2AB\u0000\u0000\uF0F3"+
-            "\uE5FC\u0000\u0000\u0000\u0000\u0000\u0000\uE4D4"+
-            "\uE1FC\u0000\uE7E6\u0000\uEC9B\uEC31\uF0D4\u0000"+
-            "\uEB99\uED42\uE19E\u0000\u0000\u0000\uF8E4\u0000"+
-            "\u0000\u0000\uF53B\u0000\u0000\u0000\u0000\uE34D"+
-            "\u0000\uE093\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF2B8\u0000\u0000\u0000\uE6C0\u0000"+
-            "\uF29C\uF9F4\u0000\u0000\uE4E3\u0000\uF8C2\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE5E8\uE8AE"+
-            "\uEBB6\uF747\u0000\u0000\u0000\u0000\u0000\uEB4F"+
-            "\uF8C3\uE9EA\u0000\uEC32\u0000\uF236\u0000\u0000"+
-            "\u0000\u0000\u0000\uF678\u0000\u0000\u0000\u0000"+
-            "\uF697\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE9CA\u0000"+
-            "\u0000\uE372\u0000\u0000\u0000\u0000\uE9A6\u0000"+
-            "\u0000\uE9EB\u0000\u0000\uED9B\u0000\u0000\uECAF"+
-            "\uE39E\u0000\u0000\u0000\uF59E\u0000\u0000\u0000"+
-            "\u0000\uE14C\uF6EA\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uEDE4\uEAF1\u0000\u0000\uF6E1\u0000\uF7F7"+
-            "\uF2B9\u0000\u0000\uF768\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF7A9\u0000\u0000\u0000\u0000"+
-            "\u0000\uF769\u0000\u0000\u0000\uF24D\u0000\u0000"+
-            "\u0000\uE756\u0000\u0000\uED73\uF5CE\u0000\u0000"+
-            "\u0000\u0000\uE9D9\u0000\u0000\u0000\u0000\uE7E7"+
-            "\uE449\uE5C3\u0000\u0000\uE875\uE860\u0000\uE3D9"+
-            "\uE268\u0000\uE0DE\uF53C\uE89D\u0000\uF679\uEF95"+
-            "\uE2AC\uF392\u0000\uF59F\uE8C8\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uE250\uECD4\uE3CF\uF3F5"+
-            "\u0000\uE1F2\u0000\uE2EB\u0000\u0000\u0000\uE1B8"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uECA6\uE3DA"+
-            "\u0000\uF435\u0000\u0000\u0000\u0000\u0000\uF436"+
-            "\u0000\uED5E\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE4FB\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF3A9\u0000\u0000\u0000\uF459"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF2D8\uEE59\u0000\uE748\uF895\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF4B5\u0000\u0000\uF734\u0000\u0000\uE3F3"+
-            "\uEE58\u0000\u0000\u0000\u0000\uF76A\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE979"+
-            "\uEA67\u0000\u0000\u0000\u0000\u0000\uE0DF\u0000"+
-            "\u0000\u0000\uE2EC\u0000\u0000\u0000\u0000\uF56F"+
-            "\u0000\u0000\uE3F4\uE44A\u0000\u0000\u0000\uEAF2"+
-            "\u0000\u0000\u0000\uEBB7\u0000\u0000\u0000\u0000"+
-            "\uEC33\uE4FC\u0000\u0000\uF1E6\u0000\u0000\u0000"+
-            "\u0000\u0000\uE8C9\u0000\u0000\u0000\uED9C\u0000"+
-            "\uE2DE\u0000\u0000\uE260\u0000\u0000\u0000\u0000"+
-            "\uE5D3\uF4F5\uF6AE\u0000\u0000\uF2C8\u0000\uE1F3"+
-            "\uF5CF\uEDF3\uF352\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE061\u0000\u0000\u0000\uF093\u0000\uE336\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE7DA"+
-            "\uF33B\u0000\u0000\u0000\u0000\u0000\uF0E7\u0000"+
-            "\u0000\u0000\uEDC0\uF945\u0000\u0000\u0000\u0000"+
-            "\u0000\uED54\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uE139\uF9C6\u0000"+
-            "\u0000\u0000\u0000\u0000\uF045\u0000\uEDAA\uEABA"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uEBDF\u0000\uE861"+
-            "\u0000\u0000\u0000\u0000\uEBB8\u0000\uEF96\uE4FD"+
-            "\u0000\u0000\u0000\u0000\uEC34\u0000\u0000\u0000"+
-            "\u0000\u0000\uF45A\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uE876\uF6B3\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF9CD\u0000\u0000\u0000\uF4B6\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF267\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF5C4\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE734\u0000\u0000\u0000\u0000\u0000\uF437"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE7B8\uE7B9\uF2C9\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE65E\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF6CB\uEAAE\uEF97\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE445\u0000\u0000\u0000\uE4D5\u0000"+
-            "\u0000\u0000\u0000\u0000\uF55C\uE89E\u0000\u0000"+
-            "\u0000\u0000\u0000\uE7E8\u0000\uF6EB\uF5C9\u0000"+
-            "\uF4BC\u0000\uE862\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE4B5\u0000\u0000\u0000\u0000"+
-            "\u0000\uEF46\u0000\u0000\uE65F\uF54A\u0000\uF6C9"+
-            "\u0000\u0000\uE13A\u0000\u0000\uF353\uE166\u0000"+
-            "\u0000\u0000\uE363\u0000\uE4BD\u0000\u0000\u0000"+
-            "\uE8FB\u0000\uE0E0\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE4E4\uF699\u0000\u0000\uE5BA\uF4CD\uE0E1"+
-            "\u0000\u0000\u0000\u0000\uF0F4\u0000\u0000\u0000"+
-            "\u0000\u0000\uF53D\u0000\uF93A\u0000\u0000\u0000"+
-            "\u0000\u0000\uF6EC\u0000\u0000\u0000\uEF98\u0000"+
-            "\uE877\u0000\u0000\u0000\uF6CC\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uEDC1\u0000\u0000\u0000\u0000\uEB7E\u0000\u0000"+
-            "\u0000\u0000\u0000\uE5FD\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE276\uF93B\uE5BB\u0000\u0000\uF438"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uEC35\uE1B9"+
-            "\uF094\uE0C7\u0000\uE1F4\u0000\u0000\uE8AF\uF2D9"+
-            "\u0000\u0000\u0000\u0000\u0000\uE1BA\u0000\u0000"+
-            "\uF99B\u0000\u0000\u0000\u0000\uEAF3\uE277\uE852"+
-            "\u0000\uE2AD\u0000\u0000\u0000\u0000\uEEF9\uF738"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF4E2\u0000"+
-            "\u0000\u0000\uE094\uEAA4\u0000\u0000\uE554\u0000"+
-            "\u0000\u0000\u0000\u0000\uE167\uEDC2\u0000\u0000"+
-            "\u0000\u0000\uE1BB\u0000\uF2DA\uF268\u0000\uE9A7"+
-            "\uEC36\u0000\u0000\u0000\u0000\u0000\uEB50\u0000"+
-            "\u0000\u0000\uE640\uF75A\u0000\uF99C\u0000\uE7FE"+
-            "\u0000\u0000\u0000\u0000\uEA40\u0000\u0000\u0000"+
-            "\uE9EC\uE878\u0000\u0000\u0000\u0000\u0000\uE570"+
-            "\u0000\uE69B\u0000\uE1D7\uEA68\u0000\u0000\uF49A"+
-            "\u0000\uED66\u0000\u0000\uE355\uF53E\u0000\uE9A8"+
-            "\u0000\u0000\u0000\uF1C5\uF4D6\u0000\u0000\uEA69"+
-            "\uECE6\u0000\u0000\u0000\u0000\u0000\u0000\uE4A8"+
-            "\u0000\uE8B0\u0000\u0000\uEDDA\uECBF\u0000\u0000"+
-            "\u0000\uE8B1\u0000\u0000\u0000\uE5E9\u0000\u0000"+
-            "\u0000\u0000\u0000\uEB51\uF2DB\u0000\u0000\uF379"+
-            "\u0000\u0000\uE6B2\u0000\u0000\u0000\u0000\uE39F"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE7E9\u0000\u0000\uE3A0\u0000\uF17D\uE4A9\u0000"+
-            "\uF439\uF354\u0000\u0000\uEC72\uEFEF\u0000\u0000"+
-            "\u0000\uF7D1\u0000\u0000\uEFD9\u0000\u0000\u0000"+
-            "\u0000\u0000\uEF6A\uE853\uE854\uE555\u0000\uEEFA"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE1E0\uECB0"+
-            "\u0000\uE8B2\uF8C4\u0000\uF4E3\u0000\uE7A5\uF8E7"+
-            "\uE9CB\uE364\u0000\uEE46\uEB3E\uF9DA\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE945\uEB9A"+
-            "\uEEB1\u0000\u0000\u0000\u0000\uF5F0\u0000\uE76C"+
-            "\uF1C6\u0000\u0000\u0000\u0000\uEBB9\u0000\uECC0"+
-            "\uF7C0\uEFF0\u0000\u0000\uE7DB\u0000\uF4E4\u0000"+
-            "\u0000\u0000\uE946\uED79\u0000\u0000\u0000\u0000"+
-            "\u0000\uF355\uECC1\uF95C\uF95D\u0000\u0000\u0000"+
-            "\u0000\uF45B\u0000\uF45C\u0000\u0000\u0000\uED5F"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF3DB\u0000\uF869\u0000\uF3B8\uF9F5\uEB9B"+
-            "\u0000\u0000\u0000\u0000\uEEFB\uF947\uF974\uF8C5"+
-            "\uECE7\uE749\u0000\uF69A\u0000\u0000\uE955\uE168"+
-            "\u0000\u0000\u0000\uEB3F\uF577\u0000\uF2DC\uE2FC"+
-            "\uF2DD\u0000\uF43A\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uF9BE\u0000\u0000\uE03C"+
-            "\uF9BB\uF9C7\u0000\u0000\u0000\u0000\uEEB2\u0000"+
-            "\uF061\uEAF4\u0000\u0000\u0000\u0000\uE3EC\uED6E"+
-            "\uEDC3\u0000\u0000\u0000\u0000\uE7A6\u0000\u0000"+
-            "\uE1BC\u0000\uF4E5\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF1D5\u0000\u0000\uE7BA\u0000"+
-            "\u0000\u0000\uF1E7\uF8B5\uF77C\u0000\u0000\u0000"+
-            "\u0000\uEB77\u0000\uE169\u0000\u0000\uE556\u0000"+
-            "\u0000\u0000\u0000\u0000\uEEA5\u0000\uE5F5\uE4BE"+
-            "\u0000\uF99D\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uED94\u0000"+
-            "\u0000\uEAF5\u0000\u0000\uEF9A\uF77D\u0000\u0000"+
-            "\uE257\u0000\u0000\u0000\u0000\u0000\uF9F6\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uEF68\u0000\uE1D8\uEED6\uE16A\u0000\u0000\uE073"+
-            "\uEAF6\uF357\uF356\u0000\uE74A\u0000\uF3F4\uF592"+
-            "\uF5CC\u0000\u0000\uF975\u0000\u0000\u0000\u0000"+
-            "\uF055\uF095\u0000\uE9DB\u0000\uE967\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uEA9F\uF49B\u0000\uE5C7"+
-            "\u0000\u0000\u0000\uE760\u0000\uF358\uE3A1\uE3A2"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE7D4\uE678"+
-            "\uE7CA\u0000\uE841\uE757\uE972\uF4CE\uF5F4\u0000"+
-            "\u0000\uF3B9\u0000\u0000\uE863\u0000\uF67A\u0000"+
-            "\u0000\u0000\uE2F5\u0000\u0000\uF9AE\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE062\u0000"+
-            "\u0000\uEAB4\u0000\u0000\u0000\u0000\uE6DD\uF84A"+
-            "\uF237\uF5BD\u0000\uF797\u0000\u0000\uF1E8\u0000"+
-            "\u0000\u0000\u0000\u0000\uE571\u0000\uE3A3\uEBD6"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF7F8\u0000\uE8CA"+
-            "\uE0F9\uE564\u0000\uE7DC\u0000\uF24E\u0000\uF6ED"+
-            "\u0000\u0000\u0000\uE47E\u0000\u0000\uEBE6\uF6F9"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE9ED"+
-            "\u0000\uEF6B\u0000\uE8B3\u0000\u0000\u0000\uE3F7"+
-            "\uEB40\u0000\u0000\uE572\u0000\uF667\u0000\uE6F9"+
-            "\u0000\u0000\uE76D\u0000\uE1FD\uF43B\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE1BD"+
-            "\uF752\u0000\u0000\uF43C\u0000\u0000\uE03D\uE03E"+
-            "\uE2AE\u0000\u0000\u0000\u0000\u0000\uECC2\u0000"+
-            "\u0000\u0000\u0000\u0000\uE947\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE8DA"+
-            "\uE7BB\uE095\uF663\uEE9A\uF097\u0000\u0000\u0000"+
-            "\u0000\u0000\uF098\u0000\u0000\uF69B\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE2AF\u0000\u0000\uE063\u0000\u0000\uE03F"+
-            "\uE440\uF3BA\u0000\uE6B3\uECC3\uF4FD\uEA6A\u0000"+
-            "\u0000\u0000\u0000\uEA6B\u0000\u0000\uF2DE\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uEC73\uF29D\u0000\u0000\uEAF7\uE6CA"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE278\uE8DB\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF3BB\u0000\u0000\u0000\u0000\uEFF1"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF847\uE356\u0000\u0000\uE13B\uF238\u0000\u0000"+
-            "\uE0FA\uF7F9\uE19F\uE4FE\u0000\u0000\u0000\u0000"+
-            "\uED60\u0000\u0000\u0000\u0000\u0000\uF47E\u0000"+
-            "\uE565\uEACD\u0000\uF948\uE3D0\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF45D\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF6D2\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE064"+
-            "\u0000\uE5D9\u0000\u0000\u0000\uE76E\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE1D9"+
-            "\u0000\u0000\u0000\uF239\uF64C\u0000\u0000\uE16B"+
-            "\u0000\u0000\u0000\u0000\u0000\uF359\u0000\uF99E"+
-            "\u0000\uEF59\uF5A0\u0000\u0000\u0000\u0000\uEEFC"+
-            "\uE6DE\u0000\u0000\u0000\u0000\uEA6C\u0000\uF33C"+
-            "\uE1A0\uE1E1\u0000\uEBBA\u0000\uE8EF\uE842\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uE3A5\uE948\u0000\u0000"+
-            "\u0000\uE798\u0000\uE3A4\u0000\uE1E2\u0000\u0000"+
-            "\u0000\u0000\uE97A\u0000\u0000\uF399\u0000\uF35A"+
-            "\uE34E\u0000\uE9DC\u0000\u0000\u0000\u0000\uE566"+
-            "\uE4D6\u0000\u0000\u0000\u0000\u0000\u0000\uF1D0"+
-            "\uE1A1\u0000\u0000\u0000\u0000\u0000\uEAB5\u0000"+
-            "\u0000\u0000\uEAF8\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE531\uE242\u0000\u0000\u0000\u0000\u0000"+
-            "\uEF5A\u0000\u0000\u0000\u0000\uF0F5\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uECD5\uF5D0\u0000"+
-            "\u0000\u0000\uF5A1\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE7A7"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uEDAB\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uEE5B\u0000\uF5F1"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uEDC5\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF7A3\uEB6B\uF67B\u0000\uE0F1"+
-            "\u0000\uE7EA\uF5A2\u0000\u0000\u0000\uE6D1\u0000"+
-            "\uE3F8\uF09A\uF09B\uE843\u0000\u0000\u0000\u0000"+
-            "\uF2DF\u0000\u0000\uF3EF\u0000\uEDF6\uF24F\uEC74"+
-            "\u0000\u0000\u0000\u0000\u0000\uE34F\u0000\uF83C"+
-            "\uF5D1\uEEB3\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uEFBE\u0000\u0000"+
-            "\u0000\u0000\u0000\uF45E\uE8B4\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF95E\u0000\uE9EE"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uEEB4\u0000"+
-            "\u0000\u0000\u0000\u0000\uE6B4\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF6B4\u0000\u0000\u0000\u0000"+
-            "\u0000\uE1BE\u0000\uE879\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE2B0\uF6D9\uF4E6\u0000\u0000"+
-            "\uE269\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE23A\u0000\uE0C8\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE337\u0000\uF35B\u0000\uE357"+
-            "\u0000\u0000\uED55\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE8E0\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE5DA\u0000\uE6A7\u0000\u0000\u0000\uF250"+
-            "\u0000\uF798\u0000\u0000\u0000\u0000\uF5D2\uF1E9"+
-            "\u0000\uE7BC\u0000\uEDC6\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF5A3\u0000\u0000"+
-            "\uE864\uEC37\uF8FC\u0000\u0000\uF3DC\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uE096\u0000\u0000\u0000"+
-            "\uEF9C\u0000\u0000\uE279\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uEFF8\uEC75\u0000\u0000\u0000\u0000"+
-            "\uE349\uE594\u0000\u0000\u0000\u0000\u0000\uE3A6"+
-            "\u0000\uEACE\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF996\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE4AA\u0000\u0000\u0000\uE13C\u0000\u0000\u0000"+
-            "\u0000\uF2E0\u0000\u0000\u0000\uEDE5\uE365\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE8FC"+
-            "\u0000\u0000\u0000\u0000\uF976\u0000\u0000\u0000"+
-            "\u0000\u0000\uE0FE\uF1EA\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uEA41\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF7E3\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE532\uE2F6\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE660\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE5EA\uF3EE\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF85B\u0000"+
-            "\u0000\u0000\u0000\uEDA1\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uE5B1\u0000\u0000\u0000"+
-            "\u0000\u0000\uE2ED\u0000\uF1EB\u0000\u0000\u0000"+
-            "\u0000\u0000\uE5B2\u0000\u0000\u0000\uE5BC\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF9E2\uF4AD\u0000\uF9DB\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uEFB0\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE3A7\u0000\u0000\uF9E3\uE243\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF9E4\uF85E"+
-            "\u0000\u0000\u0000\u0000\uE040\u0000\uF6A7\u0000"+
-            "\uE2B1\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEE32"+
-            "\u0000\uF946\uF43D\uF2E1\uF4AE\uE956\uE7EB\u0000"+
-            "\u0000\u0000\uEF70\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uEBA8\u0000\u0000\u0000\u0000\uE5F6"+
-            "\uE2FD\u0000\u0000\uEA6D\u0000\u0000\u0000\uE7D1"+
-            "\u0000\u0000\u0000\uED7A\uF45F\u0000\uF6BF\u0000"+
-            "\u0000\uEC76\uEC38\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uECD6\u0000"+
-            "\uF1D1\u0000\u0000\u0000\u0000\u0000\uEFF9\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE641\uEA42"+
-            "\u0000\u0000\uEB78\u0000\u0000\uE4AB\u0000\uF0DC"+
-            "\u0000\u0000\uEAAF\u0000\uE053\u0000\u0000\uF29E"+
-            "\u0000\uF9C3\u0000\u0000\u0000\uF0F6\uE2B2\u0000"+
-            "\u0000\u0000\u0000\uE7EC\u0000\uE7BD\u0000\uE76F"+
-            "\u0000\u0000\uE548\uF0BE\uE9EF\u0000\uE9F0\uE9F1"+
-            "\uE9F2\u0000\u0000\uE7BE\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF8C6\uE2B3\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF29F\u0000\u0000\u0000\u0000\u0000\u0000\uED3B"+
-            "\u0000\uE855\u0000\uE77C\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE3A8\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uEC39\u0000\u0000\uEA4C"+
-            "\uEEB5\u0000\u0000\u0000\u0000\u0000\uE8F0\u0000"+
-            "\uF2E2\uF3F0\uE2B4\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE8F1\u0000"+
-            "\uEB41\u0000\u0000\u0000\u0000\uEAA5\u0000\uF7D2"+
-            "\u0000\u0000\uEEFD\u0000\u0000\uEE33\uF8F1\uE0B0"+
-            "\uF43E\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE1E7\u0000\uEF6C\u0000\u0000\uEED7\u0000\u0000"+
-            "\uF6C0\u0000\uE373\u0000\u0000\u0000\uE831\u0000"+
-            "\u0000\u0000\uE14D\u0000\u0000\uE3A9\uE9CC\u0000"+
-            "\u0000\uECFE\uE3AA\uEF3A\u0000\uF046\uF7FA\uEE5C"+
-            "\uF668\u0000\u0000\u0000\uE557\u0000\u0000\u0000"+
-            "\uE7CB\u0000\uE7D2\uE4CB\uE799\uE839\uF5F8\u0000"+
-            "\u0000\uEA6E\uF43F\uF739\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE758\u0000\u0000\uF251\u0000"+
-            "\u0000\u0000\u0000\uF7C1\u0000\u0000\u0000\u0000"+
-            "\uE9F3\uF09C\u0000\uF64D\uEBBB\uE1BF\uF564\uEE5D"+
-            "\u0000\uF95F\uF8A2\u0000\uEB6C\u0000\u0000\u0000"+
-            "\u0000\uF54B\uE865\u0000\uF7B2\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF8F2\u0000\uE8F6\u0000\uEA6F"+
-            "\u0000\u0000\u0000\uE8F2\u0000\u0000\u0000\u0000"+
-            "\u0000\uF76C\uF6EE\uF0E8\u0000\uE49C\u0000\u0000"+
-            "\uF3BC\u0000\u0000\uF86A\u0000\u0000\uE87A\uE856"+
-            "\uF6C1\u0000\u0000\uEEB6\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000";
-
-        private final static String innerIndex3=
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uEDC7\uE63C\u0000\u0000\u0000"+
-            "\u0000\uE957\u0000\u0000\u0000\u0000\u0000\uEBA9"+
-            "\u0000\uEC3A\u0000\uE5A6\u0000\u0000\uE567\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF460\u0000\uF09D"+
-            "\u0000\uEB6D\uF8F3\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF3BD\u0000\u0000\uEC77\uF9D7\u0000"+
-            "\uE258\uF047\u0000\uF950\u0000\uF9E7\uF6EF\u0000"+
-            "\u0000\uE6B5\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF2BA\uF3DD\u0000\uEA43\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uEF5B\u0000\u0000\uF76D\u0000"+
-            "\u0000\uF8C7\uE5C8\u0000\uE6DF\u0000\uE9A9\u0000"+
-            "\u0000\u0000\u0000\u0000\uEFB1\u0000\u0000\uF83D"+
-            "\uF669\uF896\u0000\u0000\u0000\u0000\u0000\uF73A"+
-            "\u0000\u0000\u0000\u0000\u0000\uEE7E\u0000\uE16C"+
-            "\uEBBC\uEB91\u0000\u0000\uEFBF\uF99F\uEE5E\u0000"+
-            "\u0000\uEBD7\u0000\uEE5F\u0000\uF593\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uED95"+
-            "\u0000\u0000\uED9D\u0000\u0000\uF7E4\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF2E3\u0000\u0000\uE2EE\uF64E\uEB42\uF9A0\uE3AB"+
-            "\u0000\u0000\u0000\uE6FA\u0000\u0000\u0000\uF8C8"+
-            "\u0000\uEC67\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE533\uF39A\uE6A8\u0000\u0000\u0000\uEBE7\u0000"+
-            "\u0000\uE4BF\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF2E4\u0000\uE6C5\uF0E2\u0000\u0000\uF977\u0000"+
-            "\u0000\uED32\u0000\uEC78\u0000\uEE60\u0000\uF8E8"+
-            "\uF578\uEDF4\uF54C\uF565\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEAB6"+
-            "\u0000\uF949\uF252\uE097\u0000\u0000\u0000\uF2E5"+
-            "\uE0E2\uE534\u0000\uEA70\uE89F\uED56\uEF4E\u0000"+
-            "\u0000\u0000\u0000\uEB6E\uF644\uF062\u0000\uF7FB"+
-            "\u0000\u0000\uEB52\u0000\uE074\u0000\uEEB7\u0000"+
-            "\uF09F\u0000\uE7DD\u0000\uE844\uF23A\uF8E9\u0000"+
-            "\u0000\u0000\u0000\uE8CB\uE845\u0000\u0000\u0000"+
-            "\u0000\u0000\uF3BE\u0000\u0000\uE4AC\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF8C9\u0000"+
-            "\uEACF\u0000\u0000\uE4C0\uECD7\u0000\uF2E6\uF960"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEFC0"+
-            "\u0000\u0000\u0000\uF5D3\u0000\u0000\uF16C\uF6B7"+
-            "\u0000\u0000\uF048\uE3F9\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE958\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF049\u0000\u0000\u0000\u0000\u0000\uF3DE\u0000"+
-            "\u0000\u0000\u0000\u0000\uE6B6\uE2B5\u0000\uE7A8"+
-            "\u0000\u0000\uF17E\u0000\u0000\uE9AA\u0000\u0000"+
-            "\u0000\u0000\uE1A2\uEF3E\u0000\u0000\u0000\uEBBD"+
-            "\u0000\uF461\u0000\u0000\u0000\u0000\uEFC1\u0000"+
-            "\u0000\u0000\uE49E\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE8B5\u0000\uF4E7\uE7A0\u0000\u0000"+
-            "\u0000\uF961\u0000\uF1B2\uF53F\u0000\uF8A3\u0000"+
-            "\u0000\uF951\u0000\uF23B\uE535\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF594"+
-            "\u0000\u0000\u0000\u0000\uF269\u0000\u0000\u0000"+
-            "\uF8CA\u0000\u0000\u0000\u0000\u0000\uE1E3\uE74B"+
-            "\u0000\uEDDB\uF799\u0000\u0000\u0000\uF664\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE6A9"+
-            "\u0000\uE0C9\u0000\u0000\uEE61\uF35C\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE73E\u0000\uF7D3\uE5FE\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE74C\uF440\u0000\u0000\u0000"+
-            "\u0000\uEC3B\uF4E8\u0000\u0000\u0000\u0000\u0000"+
-            "\uF2C2\u0000\u0000\u0000\u0000\u0000\u0000\uF1EC"+
-            "\u0000\uEEB8\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE8A0\u0000\u0000\uE14E\u0000\u0000\uF49E"+
-            "\uE87B\u0000\uEC68\uF1D6\u0000\u0000\uE661\uEB43"+
-            "\u0000\u0000\uF962\u0000\uF0C8\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uE4C1\uF35D\u0000"+
-            "\uE2F7\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF1D2\u0000\uE568\uE959\uE6F1\u0000"+
-            "\u0000\uEABB\u0000\u0000\uF4A5\u0000\u0000\u0000"+
-            "\uF55D\u0000\u0000\u0000\u0000\uF3BF\uF741\u0000"+
-            "\uEFFA\u0000\u0000\u0000\uF8CB\u0000\u0000\uE065"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF7D4\uF6CA\u0000\u0000\uE658"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF978\uF4BD"+
-            "\u0000\uF2A0\u0000\uEEFE\u0000\u0000\u0000\u0000"+
-            "\u0000\uE4C2\u0000\u0000\u0000\u0000\uE4B6\u0000"+
-            "\uE13D\uF69C\uE642\uE468\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uEED8\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uECA5\u0000\u0000"+
-            "\u0000\u0000\uEEB9\u0000\u0000\u0000\u0000\uF33D"+
-            "\uF8CC\uF0A1\u0000\u0000\uE536\u0000\u0000\u0000"+
-            "\u0000\uF8CD\u0000\uE5BD\uF3DF\u0000\u0000\uF69D"+
-            "\u0000\uEA44\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE5EB\u0000"+
-            "\u0000\uEDC8\u0000\u0000\u0000\uF8A4\uE549\u0000"+
-            "\u0000\uEA71\u0000\uED33\u0000\u0000\u0000\uE6B7"+
-            "\u0000\uF77E\u0000\u0000\u0000\uEA45\u0000\u0000"+
-            "\uE662\u0000\uF7D5\uEEBA\uF0D5\uE5F7\uF2E7\uEBBE"+
-            "\u0000\u0000\u0000\uF83E\u0000\u0000\u0000\uE679"+
-            "\uE67E\u0000\u0000\u0000\u0000\u0000\u0000\uEEBB"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF15B"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE5B3\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uE244\u0000\u0000\u0000"+
-            "\uF8A5\uEBEE\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF6A8\u0000\u0000\u0000\u0000\uF8CE\u0000\u0000"+
-            "\u0000\u0000\u0000\uE74D\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF8FD\u0000\u0000\u0000\u0000"+
-            "\uF979\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE2B6\u0000\u0000\u0000\uF1C7\uF23C\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uE16D\u0000\u0000"+
-            "\u0000\u0000\uF637\u0000\u0000\u0000\uEE9C\u0000"+
-            "\u0000\u0000\uF5A4\u0000\u0000\u0000\u0000\u0000"+
-            "\uF9DC\uF1B3\uE259\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF2E8\u0000\u0000\uEBBF\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF86B\uE0E3\uF6A9\u0000\uF8A6"+
-            "\u0000\u0000\u0000\uE949\u0000\u0000\u0000\uF3C0"+
-            "\uF1C8\uF2C3\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE63D\u0000\u0000\uF9CE\u0000\u0000\u0000\uEF31"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF8F4\uE5A7\u0000\u0000\u0000\uF3F6\u0000\uEE63"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE16E\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF742\u0000\u0000\u0000\uE97B\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uF9B6\u0000\u0000\u0000"+
-            "\u0000\uEDEA\u0000\u0000\uF3E0\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE8CC\uE9CD\u0000\u0000\u0000\uE558\u0000"+
-            "\u0000\uE7ED\u0000\u0000\u0000\u0000\uF5A5\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uEE9D\u0000\u0000\u0000\u0000\u0000\uEE64\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF9C8"+
-            "\u0000\uE631\uF9BF\u0000\uF963\u0000\uF2A1\u0000"+
-            "\uEEBC\u0000\u0000\u0000\u0000\u0000\uE3EE\u0000"+
-            "\u0000\uEE65\u0000\u0000\uEFF2\u0000\uEAB0\u0000"+
-            "\u0000\u0000\u0000\u0000\uE770\uF94A\uF9AF\uF35E"+
-            "\u0000\uE8E1\u0000\u0000\uEDC9\u0000\uF1B4\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uEB53\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uECD8\u0000\u0000\u0000"+
-            "\u0000\uEFFB\uF038\u0000\u0000\u0000\u0000\uF9B7"+
-            "\u0000\u0000\uF8A7\u0000\uEFC2\u0000\u0000\u0000"+
-            "\u0000\uF9F7\u0000\u0000\u0000\u0000\u0000\uEC69"+
-            "\u0000\u0000\uE97C\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uEF32\u0000\u0000\u0000"+
-            "\u0000\uEE92\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF9F8\uF9F9\u0000\u0000\u0000\uF64F\u0000"+
-            "\u0000\uEEA7\u0000\uEE67\u0000\u0000\u0000\u0000"+
-            "\uE595\uE559\u0000\u0000\u0000\u0000\uE69C\u0000"+
-            "\uE6F2\u0000\uEBC0\u0000\uE8E2\uEE68\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEEBD"+
-            "\u0000\u0000\u0000\u0000\u0000\uF35F\uF4BE\uEC3C"+
-            "\u0000\u0000\u0000\u0000\u0000\uF5B7\uEB92\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF9B8\uECE8\u0000\uE537\uEF9E"+
-            "\uF862\u0000\u0000\u0000\u0000\u0000\uF791\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE663\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE5B4\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF360\u0000\uF6F0\uF243\u0000\u0000"+
-            "\uF04A\u0000\uF063\u0000\u0000\uF1C9\uE9AB\u0000"+
-            "\u0000\u0000\uEDAC\uF9A1\u0000\uEAD0\uF143\u0000"+
-            "\uEAD1\u0000\u0000\u0000\u0000\u0000\uF1ED\uF748"+
-            "\uF6FA\u0000\u0000\u0000\uF73B\u0000\u0000\u0000"+
-            "\u0000\u0000\uF570\u0000\u0000\u0000\u0000\u0000"+
-            "\uE54A\uED43\u0000\uEFDA\u0000\uEA46\u0000\uE7BF"+
-            "\u0000\uE7C0\uE691\u0000\u0000\u0000\u0000\uE7CC"+
-            "\u0000\uE83A\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uEAE5\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF6E5\u0000\u0000\u0000\uE142\u0000\u0000"+
-            "\uEAF9\uE6E0\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE54B\u0000\u0000\u0000\u0000\uF9FA"+
-            "\u0000\u0000\u0000\u0000\uE143\u0000\u0000\uE8F3"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uEAD2\u0000\uE25A\u0000\uF26A\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uED74\u0000"+
-            "\uF8CF\u0000\u0000\u0000\u0000\u0000\u0000\uE2B7"+
-            "\u0000\uF253\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE27A\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uEC3D\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE6E1\uF897\u0000\u0000\uE5C9\uF73C\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uEED9\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF4E9\u0000"+
-            "\u0000\u0000\u0000\uE77D\uECC4\uF393\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uEF75\u0000\u0000"+
-            "\u0000\uEB9C\uF254\uE7DE\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF0A2\uF0A3"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF952\uF04B"+
-            "\u0000\u0000\u0000\u0000\uEF3B\uEA72\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF1EF\u0000\uEF33\u0000\u0000\u0000\u0000\uE2F1"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE54C\u0000\uF97A\u0000\u0000\u0000\u0000\u0000"+
-            "\uEEBE\u0000\uF994\u0000\u0000\uE644\u0000\u0000"+
-            "\uEC3E\u0000\uE4B7\uF85C\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uF86C\u0000\uF1B5\uEBE3"+
-            "\u0000\uEF3C\u0000\uEF6D\u0000\u0000\uF2E9\u0000"+
-            "\u0000\u0000\u0000\u0000\uF54D\u0000\uE2B8\uEFDB"+
-            "\uE3AC\u0000\u0000\u0000\u0000\u0000\u0000\uE857"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF0C9"+
-            "\u0000\uEF5C\u0000\u0000\u0000\uEA47\u0000\u0000"+
-            "\u0000\u0000\uE64C\uE4E5\u0000\u0000\u0000\u0000"+
-            "\u0000\uF86D\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE866\u0000\uE041\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE858\uEAA6\u0000\uF7B3\uF462\u0000\uE054"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE25B\u0000"+
-            "\u0000\uE1F5\u0000\u0000\u0000\uF9B0\uE5A8\u0000"+
-            "\uF3C1\u0000\u0000\uEC79\uE95A\uF144\uF850\u0000"+
-            "\u0000\uF8A8\uE338\u0000\u0000\uE87C\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE7EE"+
-            "\u0000\uEB9D\u0000\u0000\u0000\uF2EA\uF86E\u0000"+
-            "\u0000\uEB54\u0000\uE2B9\u0000\uE5CA\uE6E2\uEC3F"+
-            "\u0000\uE6B8\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uEF5D\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF66A\u0000\u0000\u0000\u0000"+
-            "\uF2A2\uEC6A\uF69E\u0000\u0000\uF8D0\uE3AD\u0000"+
-            "\uE1E4\u0000\uE3AE\uE97D\uEF5E\u0000\uF39B\uE245"+
-            "\uEE9E\u0000\u0000\uE6FB\uE366\uE9F5\uF6F1\u0000"+
-            "\uF69F\u0000\uE8F7\u0000\u0000\u0000\u0000\uF8EA"+
-            "\uEFDC\uE7C1\u0000\uF5F2\uEB55\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF064\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF7C2\u0000\uF04C"+
-            "\u0000\uE455\uF8D1\uEEC0\uF0A5\u0000\uEAFA\uECA2"+
-            "\uE6B9\u0000\uEFC3\u0000\uEF9F\uEF3F\u0000\u0000"+
-            "\uF463\uF8A9\uE735\u0000\u0000\u0000\u0000\uE5CB"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE358\u0000"+
-            "\u0000\u0000\uE3AF\uE6E3\u0000\u0000\u0000\uEB56"+
-            "\u0000\uE632\u0000\uF1F0\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE6F3\u0000\u0000\u0000\uF964\u0000\uE867\uE16F"+
-            "\u0000\uF464\u0000\uE3B0\u0000\uE170\u0000\uE8FD"+
-            "\uF4BF\u0000\uF361\u0000\u0000\u0000\u0000\u0000"+
-            "\uF94B\u0000\uEC40\u0000\u0000\uEE35\u0000\u0000"+
-            "\u0000\uEC6B\u0000\u0000\u0000\uEADE\u0000\uEB57"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF491\u0000"+
-            "\u0000\u0000\uE171\u0000\u0000\u0000\u0000\uE67A"+
-            "\u0000\u0000\u0000\u0000\uEEC2\u0000\u0000\u0000"+
-            "\uE246\u0000\uF4C0\u0000\uE1FE\u0000\u0000\u0000"+
-            "\uF8D2\u0000\uF79A\uF6FB\u0000\u0000\uEF4F\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uEF47\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF1B6"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE94A\u0000\u0000\uE144\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF3F7\u0000\u0000\u0000\uEF48\u0000\u0000"+
-            "\uE098\u0000\uED34\uF566\u0000\u0000\u0000\uEAE6"+
-            "\u0000\u0000\u0000\uEAA7\u0000\uEAE7\uEBC1\u0000"+
-            "\uEFC4\u0000\u0000\uE95B\uEFC5\u0000\u0000\u0000"+
-            "\uF2A3\uF0A6\uE0A3\uECE9\u0000\u0000\u0000\uE3FB"+
-            "\uF2A4\u0000\uF2EB\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE344"+
-            "\u0000\u0000\u0000\u0000\uE1A3\u0000\u0000\uEF76"+
-            "\u0000\uF2A5\u0000\uE4CC\uE87D\u0000\u0000\u0000"+
-            "\u0000\uE6BA\u0000\uF465\uF5E5\uE7EF\u0000\u0000"+
-            "\u0000\u0000\uF7B4\u0000\u0000\uE5D4\uF9CF\u0000"+
-            "\u0000\u0000\uE8E3\u0000\u0000\u0000\u0000\uF3E1"+
-            "\uF146\u0000\u0000\u0000\u0000\uF8FE\uE4D7\u0000"+
-            "\uE3B1\u0000\uE0B1\u0000\u0000\u0000\u0000\uE3B2"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE0B2\uF3C2"+
-            "\u0000\u0000\uF571\uF7B5\u0000\u0000\uEBC3\uEBC2"+
-            "\u0000\uF0F7\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uEAA8\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uE0CA\u0000\u0000"+
-            "\u0000\u0000\u0000\uEE49\u0000\u0000\u0000\u0000"+
-            "\u0000\uF76E\uF7AA\uE099\u0000\uF1B7\u0000\u0000"+
-            "\uE4B8\uF466\u0000\u0000\uE569\uF255\uF492\u0000"+
-            "\u0000\u0000\uE042\u0000\u0000\uE94B\u0000\uF3F8"+
-            "\u0000\u0000\u0000\u0000\u0000\uF147\u0000\u0000"+
-            "\u0000\u0000\uEDCA\u0000\uF650\uF9DD\u0000\u0000"+
-            "\uE573\uE172\u0000\uF6D4\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE6E5\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE4C3\u0000\uE736\u0000\uF651\u0000\u0000\u0000"+
-            "\u0000\u0000\uE9F6\u0000\uE1C0\u0000\u0000\u0000"+
-            "\uEDDC\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uEDCB\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uEBC4\u0000\u0000\u0000\u0000\u0000\uEF40"+
-            "\uF540\uF4EA\uE87E\u0000\uE6BB\u0000\uEC41\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE6AA\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE69D\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uED6F\u0000\uE066\u0000"+
-            "\u0000\u0000\uF0A8\u0000\u0000\u0000\uE8FE\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF652\u0000\u0000\uF2BB\u0000\u0000\u0000"+
-            "\u0000\uE59F\u0000\u0000\uEB58\u0000\u0000\u0000"+
-            "\uEF49\u0000\uF2A6\u0000\u0000\u0000\u0000\u0000"+
-            "\uE1A4\u0000\u0000\uE596\uE8A1\uE8DC\uE8DD\u0000"+
-            "\u0000\u0000\u0000\u0000\uF26C\u0000\uE0CB\uF965"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE27B\u0000"+
-            "\uE1C1\u0000\u0000\uF8D3\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF7AB\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF5D4\u0000\u0000\u0000\u0000\uE7A9"+
-            "\u0000\u0000\uEFDD\uE8CD\u0000\u0000\uE9CE\u0000"+
-            "\uEEC3\u0000\uF15C\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF7EC\u0000\u0000\u0000\uE0CC\u0000"+
-            "\u0000\u0000\u0000\uEB9E\uE538\u0000\uF1D3\uE791"+
-            "\u0000\uF467\u0000\uE09A\uE891\u0000\u0000\uE664"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE7CD\u0000"+
-            "\u0000\u0000\uE77E\u0000\uF451\u0000\u0000\u0000"+
-            "\uEAD3\u0000\u0000\u0000\uE892\u0000\uEC7A\u0000"+
-            "\u0000\uEB9F\u0000\u0000\uE79A\u0000\u0000\u0000"+
-            "\uF6AF\uE846\u0000\uE067\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF468\u0000"+
-            "\uE79B\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF86F\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE2EF"+
-            "\uE7C2\u0000\uF362\u0000\uED61\u0000\u0000\u0000"+
-            "\uF4B7\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF870\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF2EC\u0000\u0000\u0000\u0000"+
-            "\u0000\uEC42\u0000\uE54D\u0000\u0000\uE7CE\u0000"+
-            "\u0000\u0000\u0000\uF572\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE539\u0000\u0000\u0000\u0000\uE1C2\uEEDA"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF469\u0000\u0000\u0000\u0000"+
-            "\u0000\uE7AA\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE74E\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uE93D\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uEC7B\uE69E\u0000\u0000"+
-            "\uE09B\u0000\u0000\uE56A\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF567\uE131\u0000\u0000\uE2BA"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF5B8"+
-            "\u0000\u0000\u0000\uE7C3\uE378\u0000\u0000\u0000"+
-            "\u0000\u0000\uECC5\uF0F8\u0000\uF441\u0000\u0000"+
-            "\u0000\uE2BB\u0000\u0000\u0000\uE4AD\uEF71\uE27C"+
-            "\u0000\u0000\u0000\uEB44\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uEA73\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE9F7\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF442\uF4F6\uF66B"+
-            "\u0000\u0000\u0000\u0000\uE6FE\u0000\u0000\u0000"+
-            "\u0000\u0000\uF76F\u0000\uF6F2\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uE339\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEE6A"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF5A6\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE6BC\uE173\u0000\u0000\uEE6B"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uE9DD\u0000\u0000\u0000"+
-            "\u0000\uE3B3\u0000\u0000\u0000\u0000\u0000\uF2ED"+
-            "\u0000\u0000\u0000\u0000\uE66E\uED96\uEBEF\u0000"+
-            "\u0000\uE9F8\u0000\u0000\u0000\u0000\u0000\uEF5F"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE075\u0000\u0000\u0000\uE931"+
-            "\u0000\uEB45\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF93C\uF93D\uE737\u0000\u0000\u0000"+
-            "\u0000\uF1B8\u0000\u0000\u0000\uE8B6\u0000\u0000"+
-            "\u0000\u0000\uE692\uF4AF\u0000\u0000\uE1A5\u0000"+
-            "\uE893\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE738\u0000\u0000\u0000\uE174\u0000\u0000\uE3B4"+
-            "\u0000\u0000\u0000\u0000\u0000\uE068\u0000\u0000"+
-            "\u0000\u0000\u0000\uE894\u0000\u0000\u0000\u0000"+
-            "\u0000\uF5A7\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF5A8\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uEE36\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE5EC\uE5F8\uE895\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uECC6\u0000\u0000\u0000\uEA74\u0000"+
-            "\uEA75\uE3B5\u0000\u0000\u0000\u0000\u0000\uE3B6"+
-            "\uE3B7\uF443\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uEFDE\u0000\u0000\u0000\u0000\u0000\uF363\uF444"+
-            "\u0000\u0000\uF364\uE0E4\uF8D4\uF5E6\uECEA\u0000"+
-            "\uEA76\u0000\u0000\u0000\u0000\uEAD4\u0000\u0000"+
-            "\uF79B\u0000\u0000\u0000\u0000\uF33E\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE3B8\u0000\u0000\u0000\u0000\uE66F"+
-            "\u0000\uE367\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF931\uF2EE\uE968"+
-            "\u0000\uEFDF\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uEDDD\uF9FB"+
-            "\u0000\u0000\uEB59\u0000\u0000\u0000\uE659\u0000"+
-            "\u0000\uE53A\u0000\uEDCC\u0000\u0000\u0000\u0000"+
-            "\u0000\uEFE0\u0000\u0000\u0000\uE368\uF932\uE54E"+
-            "\uEC43\uEA77\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE94C\uE446\uF5D5\u0000\u0000\u0000\u0000"+
-            "\u0000\uE231\uF5A9\u0000\u0000\uE9F9\u0000\u0000"+
-            "\uE9FA\u0000\u0000\u0000\u0000\u0000\u0000\uF365"+
-            "\u0000\u0000\u0000\u0000\uF66F\u0000\uF46A\uED7B"+
-            "\u0000\uF493\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF149\u0000\u0000\u0000\u0000"+
-            "\uF9FC\u0000\u0000\u0000\u0000\uEBAA\u0000\u0000"+
-            "\uE069\u0000\u0000\uF2EF\u0000\uF5AA\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uF19B\u0000\u0000\uF73D"+
-            "\u0000\uF452\uF653\u0000\uE6D2\u0000\u0000\uF7A2"+
-            "\uF366\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF39C\u0000"+
-            "\u0000\uF670\u0000\u0000\u0000\u0000\uEFF3\uF453"+
-            "\u0000\u0000\u0000\uE53B\uE043\uE1A6\u0000\uE1C3"+
-            "\uE1DA\u0000\u0000\u0000\u0000\u0000\uE7CF\u0000"+
-            "\u0000\uF654\u0000\u0000\u0000\uF26D\uEEC4\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEC44"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uEAE2\uEEDB\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uEF41\u0000\uF93E\u0000\u0000\u0000\u0000"+
-            "\uEDCD\u0000\u0000\u0000\uF87B\u0000\uE2BC\u0000"+
-            "\u0000\uE2E2\uE1F6\u0000\u0000\uF2F0\u0000\uF54E"+
-            "\u0000\uE55D\u0000\u0000\uF4B8\u0000\u0000\u0000"+
-            "\uEFA1\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF494\uF4EB\u0000\uF367\u0000\u0000"+
-            "\uE2D7\u0000\u0000\u0000\u0000\u0000\u0000\uE2DF"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uEF50\uEF51\u0000\u0000\u0000\uE2E3\uEFA2"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE33A\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uF4C1\uE33B\u0000\uE574"+
-            "\u0000\u0000\uF2BC\uE731\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE7DF"+
-            "\u0000\uF4D7\u0000\u0000\u0000\uE94D\u0000\uE175"+
-            "\uF1F1\u0000\u0000\uF3E2\u0000\uE56B\u0000\u0000"+
-            "\u0000\u0000\uEC45\u0000\u0000\uE076\u0000\uE4AE"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE176\u0000"+
-            "\u0000\uF3D3\uF5E7\u0000\u0000\u0000\u0000\uE06A"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF8EE"+
-            "\u0000\uEBC5\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uEAE9\u0000\uF26E\u0000\u0000\uF6C2\u0000"+
-            "\uE732\u0000\u0000\u0000\u0000\u0000\uE9AC\u0000"+
-            "\u0000\u0000\u0000\u0000\uF33F\uE64D\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uEBAB\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF7B6\u0000"+
-            "\u0000\uE597\u0000\uE359\uF2A7\uEC7C\u0000\uE8EA"+
-            "\uE25C\uF5E8\uF6D5\u0000\uE4CD\u0000\uF4FE\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE345\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uEBA0\u0000\uEAFB\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uEE6D\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uEF34\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE0CD"+
-            "\u0000\u0000\u0000\uF2A8\u0000\u0000\u0000\uF244"+
-            "\u0000\u0000\u0000\u0000\uE868\uE3B9\u0000\uEAA9"+
-            "\u0000\u0000\uF4B0\u0000\u0000\uE154\u0000\u0000"+
-            "\u0000\uE247\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF2A9\u0000\u0000"+
-            "\u0000\uEAD5\u0000\u0000\uF1D7\u0000\u0000\u0000"+
-            "\uF256\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF2BD\uF966\u0000\u0000\uE8F4\u0000\uF2AA\uF749"+
-            "\u0000\uF5E9\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uECD9\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uEBC6\u0000\u0000\u0000\uE54F\u0000\u0000\u0000"+
-            "\u0000\uEA78\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF37A"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF4C2\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE4AF\u0000"+
-            "\u0000\uE06B\u0000\u0000\u0000\u0000\u0000\uF967"+
-            "\u0000\u0000\uF1D8\uEBC7\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF568\uE643\uE9AD"+
-            "\u0000\u0000\u0000\uE5BE\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uF3C3\uF26F\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE67B\u0000\u0000\u0000\uF569\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uE6E6\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE847\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE9FB\u0000\u0000\u0000\u0000"+
-            "\u0000\uE9CF\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE733\u0000\u0000\uE869\u0000\uF368"+
-            "\uF2C4\u0000\u0000\u0000\u0000\u0000\u0000\uEBD8"+
-            "\u0000\u0000\u0000\u0000\u0000\uF3D4\u0000\uF1F2"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE5DB\u0000"+
-            "\u0000\uE5DC\uF4C4\uE0D7\u0000\u0000\u0000\u0000"+
-            "\u0000\uEC46\u0000\u0000\u0000\u0000\uF2F1\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF8D5\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE4D8\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE9D0\uF369"+
-            "\uE0B3\u0000\u0000\u0000\u0000\u0000\u0000\uE5DD"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE1A7\u0000\u0000\uE33C\u0000";
-
-        private final static String innerIndex4=
-            "\uE3BA\u0000\uF3C4\u0000\uEDB3\uF8F5\uEFE1\uF9E0"+
-            "\uF94C\u0000\uE832\uE833\u0000\uE431\u0000\u0000"+
-            "\uE491\u0000\u0000\u0000\uEC7D\u0000\u0000\uEA79"+
-            "\uE26C\uF445\uE374\uE9D1\u0000\u0000\u0000\u0000"+
-            "\uEBC8\uE8B7\uEAE3\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF1B9\uF3C5\u0000\uF4CF\uE6AB"+
-            "\uEBAC\u0000\u0000\uECEB\u0000\uF257\u0000\u0000"+
-            "\u0000\uEBC9\uE09C\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF39D\uF871\uF36A\uE177\uE896\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE14F\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE27D\u0000"+
-            "\u0000\uE5A9\uF872\u0000\u0000\u0000\uE375\u0000"+
-            "\uF0D6\u0000\uF16F\u0000\u0000\u0000\uEAFC\u0000"+
-            "\u0000\uF6D6\uEA7A\uE0B4\u0000\u0000\uF2BE\u0000"+
-            "\u0000\uE145\u0000\u0000\u0000\u0000\u0000\uE2BD"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF2F2\uEC47"+
-            "\u0000\u0000\u0000\uE178\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uF39E\u0000\u0000\u0000"+
-            "\uE670\u0000\uF3C6\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uEC48\uF0AB\u0000\u0000"+
-            "\u0000\uE0B5\uE761\u0000\uF55E\uF4F7\u0000\u0000"+
-            "\uE6C6\u0000\uE3BB\uF6AA\u0000\uF1CA\uE6D3\uE79C"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF655"+
-            "\u0000\u0000\uE3CC\uE9FC\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uEAFD\u0000"+
-            "\uF7E5\u0000\uEB5A\u0000\u0000\uF49F\uE4B0\u0000"+
-            "\uF595\uE859\u0000\uEE6E\u0000\u0000\u0000\u0000"+
-            "\uF74A\uEF60\u0000\u0000\uE79D\u0000\u0000\uF065"+
-            "\u0000\u0000\u0000\u0000\uE633\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF656\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF46B\uED9E\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uEF42\u0000\u0000"+
-            "\u0000\u0000\u0000\uE86A\u0000\uF46C\uF8D6\uEFB2"+
-            "\u0000\uF23D\u0000\uF873\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE97E\u0000\u0000\uF5EA\uEE70"+
-            "\u0000\uF39F\u0000\u0000\u0000\u0000\u0000\uE6AC"+
-            "\u0000\u0000\u0000\u0000\u0000\uF5C5\uF270\u0000"+
-            "\u0000\uE8E5\u0000\uE9DE\u0000\u0000\uE7F0\uEFA3"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF3F9\u0000\uF454\uEB5B\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uEFA4\u0000"+
-            "\u0000\uEC49\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uECB1\uF97B\uE1A8\u0000\uE146\u0000\u0000"+
-            "\uF36B\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uEE4A\u0000\u0000\uE1A9\u0000\u0000\u0000"+
-            "\u0000\u0000\uF4C3\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uEBD9\u0000\u0000\uF2AB"+
-            "\u0000\u0000\u0000\uEEC5\u0000\u0000\uEB79\u0000"+
-            "\uF4C5\u0000\u0000\uE550\uE5BF\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE9AE\u0000"+
-            "\uF7FC\u0000\uE150\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uEDA2\u0000\u0000\u0000"+
-            "\uE248\u0000\u0000\u0000\uE762\uF7D6\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF3AA\uE261\u0000\u0000\uF657\u0000"+
-            "\uE8EB\u0000\uEAFE\u0000\u0000\uE771\u0000\uF6F3"+
-            "\u0000\uE6E7\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uE5A0\u0000\u0000"+
-            "\uE3BC\u0000\uEDCF\u0000\uE0B6\u0000\uE848\u0000"+
-            "\u0000\u0000\u0000\u0000\uE1C4\u0000\u0000\u0000"+
-            "\u0000\u0000\uE64E\u0000\u0000\u0000\uEC4A\u0000"+
-            "\u0000\u0000\u0000\u0000\uE2D8\u0000\u0000\u0000"+
-            "\uEB5C\uF0F9\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF9FD\u0000\u0000\u0000\u0000\u0000"+
-            "\uE6E8\uE0D8\u0000\u0000\u0000\uEFE2\u0000\u0000"+
-            "\u0000\uEF4A\u0000\u0000\u0000\uECC7\u0000\u0000"+
-            "\u0000\u0000\uF15D\u0000\uF15E\u0000\uE64F\u0000"+
-            "\u0000\u0000\uECA7\u0000\uEAD6\uF9E8\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF271"+
-            "\uF638\uE9FD\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF74B\u0000\uEF61\u0000\u0000\u0000\u0000"+
-            "\uF7D7\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE27E\u0000\u0000\uF15F\u0000\u0000\u0000"+
-            "\uEFA5\uE665\u0000\uE1C5\u0000\uF1BA\uE3BD\u0000"+
-            "\u0000\uE2BE\u0000\u0000\uF14B\u0000\u0000\u0000"+
-            "\uE441\u0000\u0000\u0000\u0000\uE179\u0000\uE7C4"+
-            "\uEFFC\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uE3BE\u0000\u0000"+
-            "\u0000\u0000\u0000\uF14C\u0000\u0000\uEDAD\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF6B0\u0000\uE17A"+
-            "\u0000\u0000\u0000\uE4C4\u0000\u0000\uE650\u0000"+
-            "\u0000\u0000\uE69F\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uEBA1\u0000"+
-            "\uEA4D\u0000\uF639\u0000\u0000\u0000\uE834\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE634"+
-            "\uF5C6\u0000\uEBA2\uEFC6\u0000\u0000\u0000\uF455"+
-            "\u0000\u0000\u0000\u0000\u0000\uF579\uE67C\uF0D3"+
-            "\u0000\u0000\u0000\u0000\uF14D\uEC6C\uEA7B\uF36C"+
-            "\u0000\uF0BF\u0000\uE6CE\uE3BF\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF5AB\u0000"+
-            "\u0000\u0000\u0000\uF7FD\u0000\uE06C\u0000\u0000"+
-            "\u0000\uE1C6\uF446\u0000\u0000\uE9FE\u0000\u0000"+
-            "\u0000\uE147\uE8B8\u0000\u0000\u0000\u0000\uE379"+
-            "\u0000\uE26D\uF0C0\u0000\uF9A2\u0000\u0000\u0000"+
-            "\u0000\u0000\uF75B\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF066\uF3B0\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uE8CE\u0000\uF6C3\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE8CF\uE0A4\u0000\u0000\uF770\u0000"+
-            "\u0000\uF8D7\u0000\u0000\uF0CA\uEB31\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE25D\u0000\u0000\uE56C\u0000\u0000\u0000"+
-            "\uF9D8\u0000\u0000\u0000\u0000\uE498\u0000\u0000"+
-            "\u0000\u0000\uF447\u0000\u0000\uF898\uF63A\uF899"+
-            "\uE776\u0000\uF541\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uEF62\u0000\uE055\uE17B\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uEC7E\u0000\u0000\u0000\u0000"+
-            "\u0000\uEC4B\u0000\uF6AD\u0000\u0000\u0000\uF771"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF4EC\u0000\u0000\u0000\u0000\uEA31\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uED9F\u0000\u0000\uECEC\u0000"+
-            "\uE9AF\uE9B0\u0000\u0000\uE0B7\uEF63\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uEBA3\uE470\u0000"+
-            "\u0000\u0000\u0000\uF3A0\u0000\u0000\u0000\u0000"+
-            "\uEFA6\uE0F2\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF1F3\uE969\uEB5D\u0000\u0000\u0000\u0000\uF6DA"+
-            "\uE8B9\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE13E\u0000\uE86B\u0000\u0000\u0000\u0000\uE1C7"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE9B1\u0000\uE73F\uECA3\u0000\u0000"+
-            "\uE291\u0000\u0000\uF495\u0000\u0000\u0000\u0000"+
-            "\uF743\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uEB5E\u0000\uF5FD\u0000\u0000"+
-            "\u0000\u0000\uF0EC\u0000\u0000\uE4C5\uF97C\uE46B"+
-            "\uE57B\u0000\uEA32\u0000\u0000\u0000\uEDE6\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF340\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE5C4\u0000\u0000\u0000\u0000\u0000\u0000\uF1F4"+
-            "\u0000\u0000\u0000\uECED\u0000\uEF52\u0000\uF1F5"+
-            "\uE6FC\u0000\uF1BB\u0000\u0000\uF63B\u0000\u0000"+
-            "\u0000\u0000\u0000\uF448\uF658\u0000\u0000\u0000"+
-            "\u0000\u0000\uE4E6\uF46D\uE2BF\u0000\uF0AC\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uE2C0\u0000\uEE38"+
-            "\uF9E9\u0000\uE2C1\u0000\uEB6F\uEA7C\u0000\u0000"+
-            "\u0000\u0000\uEB32\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF54F\uEC91\u0000\uE7F1\uF3C7"+
-            "\u0000\uE0B8\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF7FE\uE8BA\uE897\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF67C\uE86C\uF874"+
-            "\u0000\uEB5F\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE9B2\u0000\u0000\u0000\u0000\uEE39\u0000\uF2F3"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF4ED\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uF0FA\u0000\uF7E6\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE06D\uE5DE"+
-            "\u0000\uE06E\uEAE4\u0000\u0000\u0000\uEE9F\u0000"+
-            "\uF5AC\u0000\u0000\u0000\u0000\u0000\uED97\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uEFE3\u0000\uF1CB\uE2E4\u0000"+
-            "\u0000\u0000\uE763\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE9B3\uE57C\u0000\u0000\uF449\u0000\uEAB7"+
-            "\u0000\u0000\u0000\u0000\u0000\uE0CE\uF8D8\u0000"+
-            "\u0000\uE369\u0000\u0000\uE9D2\uF6F4\uEEDC\uED35"+
-            "\u0000\uF933\u0000\uE8BB\u0000\u0000\u0000\uF44A"+
-            "\uEFFD\uE35A\u0000\uF5D6\uE7C5\uED44\u0000\uF1A7"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF04D\uEEA0\u0000\uF6C4\uF5AD\u0000\uE7E0"+
-            "\u0000\u0000\u0000\uE044\u0000\u0000\uF772\uE2C2"+
-            "\u0000\uF14E\u0000\u0000\u0000\uEDB4\uE1C8\uF258"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uEEC8\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uE1C9\uF7B7\u0000"+
-            "\u0000\uF3E8\uE7F2\uE8F5\uE045\uE7C6\u0000\u0000"+
-            "\u0000\uE759\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE7AB"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF1BC\u0000\u0000\uE764\u0000\u0000\u0000\uE96A"+
-            "\u0000\uEC4C\u0000\u0000\uF97D\uF170\uE4A0\u0000"+
-            "\uEFC7\uEE3A\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uEC92\u0000\u0000\u0000\u0000\u0000\u0000\uF84B"+
-            "\u0000\uF5AE\uF8AA\u0000\u0000\u0000\u0000\uF19D"+
-            "\u0000\uF14F\uF968\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE575\u0000\u0000\u0000\uF7C3"+
-            "\u0000\u0000\u0000\uF272\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE6E9\uF1F6\u0000\u0000\u0000\uEA7D\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE17C\u0000"+
-            "\uECEE\u0000\u0000\u0000\u0000\u0000\uEF64\u0000"+
-            "\u0000\u0000\uF89A\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE9B4\uED45\uE740\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uE765\u0000\u0000"+
-            "\u0000\uF57A\u0000\u0000\u0000\uE249\u0000\u0000"+
-            "\u0000\uE671\uE2D2\u0000\uE346\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE232\u0000\u0000\uF4EE\u0000"+
-            "\u0000\u0000\u0000\u0000\uF4F8\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE95C\u0000\uE35B\u0000\u0000\u0000\uF934"+
-            "\uE1CA\uE6D4\uEA33\u0000\uED70\u0000\u0000\u0000"+
-            "\u0000\uF259\u0000\u0000\u0000\uEC6D\u0000\u0000"+
-            "\u0000\u0000\u0000\uF5FE\uE53C\u0000\u0000\u0000"+
-            "\u0000\u0000\uE5D1\u0000\uE792\uF753\uF067\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF5D7\u0000\u0000\uE74F\u0000\u0000\u0000"+
-            "\u0000\uF9C0\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF0AD\u0000\u0000\u0000\u0000\uE5AA\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uEEA8\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF25A"+
-            "\u0000\u0000\u0000\uE077\u0000\u0000\u0000\u0000"+
-            "\u0000\uF773\u0000\uE56D\u0000\u0000\uF068\u0000"+
-            "\u0000\u0000\u0000\uF8D9\uF1F7\u0000\u0000\uEDB5"+
-            "\u0000\u0000\u0000\u0000\u0000\uE33D\u0000\u0000"+
-            "\u0000\u0000\uF3F1\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uEC4D\u0000\u0000\u0000\uECC8\u0000\u0000\u0000"+
-            "\u0000\uE7D5\u0000\u0000\uEAAA\u0000\u0000\u0000"+
-            "\u0000\uE8BC\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF774\u0000\u0000\u0000\u0000\u0000"+
-            "\uF3FA\u0000\u0000\uEDB6\uF4EF\u0000\u0000\uF8DA"+
-            "\uEBE0\u0000\uE7AC\u0000\uF5EB\u0000\uEB46\u0000"+
-            "\u0000\uEFC8\u0000\uE0CF\u0000\uECC9\u0000\u0000"+
-            "\u0000\uEA7E\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uEC4E\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uE991\u0000\uE635\u0000"+
-            "\u0000\u0000\u0000\u0000\uEC93\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uE6A0\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE7A1\u0000\uE750\uE96B\u0000\u0000\uF1BD"+
-            "\uEAB8\u0000\uF035\u0000\u0000\u0000\uE6AD\u0000"+
-            "\u0000\uF4F9\u0000\uF1F8\u0000\uF5C7\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uEBCA\uF0E3\u0000\uF46E"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF75C\u0000\uF069"+
-            "\u0000\uE4C6\u0000\uE8E6\u0000\u0000\u0000\u0000"+
-            "\u0000\uF5AF\u0000\u0000\u0000\u0000\uE292\u0000"+
-            "\u0000\u0000\u0000\uEFFE\u0000\u0000\u0000\u0000"+
-            "\u0000\uF8B6\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uEC94\u0000\u0000\u0000\u0000"+
-            "\uE2F2\uF6B9\uE7F3\u0000\u0000\uEBCB\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uE86D\u0000\u0000\uE849"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF0FB"+
-            "\u0000\uE0B9\u0000\u0000\uF1F9\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uEB70\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF550\u0000"+
-            "\uF9BC\uEAB1\uECEF\u0000\u0000\u0000\u0000\uEB33"+
-            "\uF9B9\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF341\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE1CB\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF1BE\u0000\u0000\u0000\uE5C0\uECF0\uF1FA"+
-            "\u0000\u0000\u0000\u0000\u0000\uEFE4\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uE5ED\uEEDD\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uE598\uEDB7\u0000\u0000"+
-            "\u0000\uE8E7\uEC4F\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF25B"+
-            "\u0000\u0000\uE6F4\uF36D\u0000\u0000\u0000\uE23B"+
-            "\u0000\u0000\uEEDE\u0000\u0000\u0000\uE666\uEBCC"+
-            "\u0000\u0000\uEF43\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uEDEE\uE932"+
-            "\u0000\u0000\uEB60\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uE5B5\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE5A1"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF8DB\u0000"+
-            "\uF7CB\u0000\u0000\u0000\uE0F3\uF535\u0000\u0000"+
-            "\u0000\u0000\u0000\uF858\uE667\u0000\uEFE5\uF8DC"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF9D0"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF8F6\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE835\u0000\uE8BD\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF172\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE1F7\uF36E\u0000\u0000\u0000"+
-            "\u0000\uF659\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEA91"+
-            "\u0000\u0000\u0000\uE4B1\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uF97E\u0000\u0000\u0000"+
-            "\u0000\uEF53\u0000\uF3C8\u0000\u0000\u0000\uE293"+
-            "\u0000\u0000\u0000\u0000\uF7ED\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF496\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uED46\u0000"+
-            "\uF5B9\u0000\uE992\uECF1\u0000\u0000\u0000\u0000"+
-            "\uEF35\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF44B\u0000\uEA34\u0000\uE85C\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE079\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uECDA\u0000\uF969"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF06A"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF7C4\u0000"+
-            "\uECA4\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uF8DD\u0000\uF2CA\u0000"+
-            "\uEF54\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE5CC\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF0D7\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE7AD"+
-            "\u0000\u0000\uF8AB\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE4D9\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE5A2\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uF66E\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE898\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uEB61\u0000\u0000\uEFA8"+
-            "\u0000\u0000\uF5F9\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF83F\u0000\uF0FC\u0000\u0000\uEB7A\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uECB2\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE5C5"+
-            "\u0000\u0000\uF3E3\uE5EE\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE1CC\u0000\u0000\u0000\u0000\uF1D9\u0000"+
-            "\u0000\u0000\u0000\uE751\u0000\u0000\u0000\u0000"+
-            "\uF87C\u0000\u0000\u0000\u0000\u0000\uF3EB\u0000"+
-            "\u0000\u0000\u0000\u0000\uF84C\uEE72\u0000\u0000"+
-            "\u0000\u0000\uF875\uEC9C\u0000\u0000\u0000\uE046"+
-            "\u0000\uED47\u0000\uF06B\u0000\uF5FA\u0000\u0000"+
-            "\u0000\uF8AC\uE2C3\uF0FD\u0000\u0000\u0000\u0000"+
-            "\uF79C\u0000\u0000\uEAB9\u0000\u0000\u0000\u0000"+
-            "\uEBF1\u0000\uE434\u0000\u0000\u0000\u0000\uF5FB"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE36A\uE36B"+
-            "\u0000\uF04E\uE7B1\u0000\u0000\u0000\u0000\u0000"+
-            "\uE047\u0000\u0000\uE4E7\u0000\uF775\u0000\u0000"+
-            "\u0000\u0000\uE4B2\u0000\u0000\u0000\uEC50\uF46F"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE1E5\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF7AC\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uE1CD\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF23E\uE63E\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE6EA"+
-            "\u0000\u0000\u0000\u0000\uEEE0\uF0AE\u0000\u0000"+
-            "\u0000\uE2D9\u0000\u0000\uE95D\uF1FB\u0000\uEA92"+
-            "\u0000\uE6EB\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uEA35\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uEAD7\uE8D0\uE8D1\u0000\u0000"+
-            "\uE5A3\u0000\u0000\u0000\u0000\uF342\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE96C"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE078\u0000\uF776\uE95E\u0000\u0000\u0000\u0000"+
-            "\uF06C\uE8D2\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uEFB3\u0000\u0000"+
-            "\u0000\u0000\uF6DB\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uECA8\u0000"+
-            "\uE6AE\u0000\u0000\uEB71\u0000\u0000\u0000\u0000"+
-            "\u0000\uE0BA\u0000\u0000\uEDD1\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE36C"+
-            "\u0000\u0000\u0000\u0000\uE5C1\u0000\u0000\u0000"+
-            "\u0000\u0000\uE75A\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uECA9\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEB34"+
-            "\u0000\uEFA9\u0000\uE4C7\u0000\u0000\uE96D\uF73E"+
-            "\u0000\u0000\u0000\uE148\u0000\u0000\u0000\uE33E"+
-            "\u0000\u0000\u0000\uE794\u0000\u0000\uECCA\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE13F\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE53D\uF661\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE35C\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE056\u0000\u0000\uE5C2\u0000\u0000"+
-            "\uE24A\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE057\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF840\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uEAD8\u0000\u0000\u0000"+
-            "\uF5BA\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uEDEB\u0000\uF2F4\uE9B5\u0000\u0000\u0000\u0000"+
-            "\uE1AA\u0000\uECF2\u0000\uF8F7\u0000\uF6D0\u0000"+
-            "\u0000\u0000\u0000\uF9BA\u0000\u0000\uF9E1\uF6A0"+
-            "\uE3C0\u0000\u0000\uEF55\u0000\uED48\u0000\uEBE8"+
-            "\u0000\u0000\u0000\uE151\u0000\uE47D\u0000\u0000"+
-            "\u0000\u0000\uE8BE\u0000\u0000\uEB72\u0000\u0000"+
-            "\u0000\uF859\u0000\u0000\uEBCD\u0000\uE048\u0000"+
-            "\u0000\u0000\uF470\uF3C9\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uEA93\u0000\u0000\u0000\uF36F\uF754\u0000\u0000"+
-            "\u0000\u0000\u0000\uF25C\u0000\u0000\uEA94\u0000"+
-            "\uEEC9\u0000\uEC95\uEEE1\u0000\u0000\uECCB\u0000"+
-            "\u0000\uECCC\u0000\u0000\u0000\uE2F8\uF2AC\u0000"+
-            "\uF9FE\uF935\uF841\uEAD9\u0000\uEB62\u0000\u0000"+
-            "\u0000\uF56A\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF3CA\u0000\uE233"+
-            "\u0000\u0000\u0000\u0000\uF44C\uF173\u0000\u0000"+
-            "\u0000\u0000\u0000\uEB35\u0000\uF6AB\u0000\u0000"+
-            "\uF0AF\u0000\u0000\u0000\u0000\u0000\uEDDE\u0000"+
-            "\uEBA4\uE1AB\u0000\uE7F4\uEF36\uE1CE\uEBE9\u0000"+
-            "\uF991\u0000\uEB73\u0000\u0000\u0000\u0000\u0000"+
-            "\uEC51\u0000\uE234\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uEA36\u0000\u0000\uF0FE\u0000\uF0DD\uF370"+
-            "\u0000\u0000\uF56B\u0000\uEC96\u0000\u0000\uE4C8"+
-            "\u0000\u0000\u0000\uF57B\u0000\uF245\u0000\uF5D8"+
-            "\u0000\u0000\uE5DF\u0000\u0000\u0000\uE675\u0000"+
-            "\u0000\u0000\u0000\uF0B0\uF573\u0000\u0000\u0000"+
-            "\u0000\uECCD\u0000\u0000\u0000\u0000\uF596\uF842"+
-            "\u0000\u0000\uF2F5\uE06F\u0000\uF0B1\uF1BF\u0000"+
-            "\u0000\uF9C9\u0000\u0000\u0000\u0000\uED36\uF7A4"+
-            "\uF343\u0000\uEDEC\u0000\u0000\u0000\uE3E7\u0000"+
-            "\uE7C7\uED67\uF06D\u0000\uE599\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE84A\u0000"+
-            "\uE85D\u0000\u0000\u0000\uF7CC\u0000\uEBDA\uE8BF"+
-            "\u0000\uE155\uF160\uE0BB\u0000\uEA95\u0000\u0000"+
-            "\uEFAA\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE7C8\u0000\u0000\uF273\uE6BD\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE2C4\u0000\u0000\u0000\u0000"+
-            "\u0000\uE35D\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF936\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF3FB\u0000\u0000\u0000\u0000\uF9D2\uE3C1"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uECDB\u0000\uE4C9\u0000\uE95F\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE17D\u0000"+
-            "\u0000\u0000\u0000\u0000\uEA37\u0000\u0000\uEE4B"+
-            "\uF131\u0000\u0000\u0000\uE149\u0000\u0000\uF8DE"+
-            "\u0000\u0000\u0000\u0000\u0000\uEEE2\u0000\u0000"+
-            "\uE551\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE938\u0000\u0000\u0000\u0000\u0000"+
-            "\uEC52\u0000\uF4D8\uEDD3\u0000\u0000\uF4D9\u0000"+
-            "\u0000\u0000\uF4C6\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE1DB"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE1AC"+
-            "\u0000\uF953\u0000\u0000\u0000\u0000\uE577\u0000"+
-            "\uE3C2\u0000\uF7A5\u0000\uEF65\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uECCE\u0000\u0000"+
-            "\u0000\u0000\uE55A\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uEADA\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF8DF\uEEE3\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF79D\uECCF\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF5B0\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE777\u0000\uE7C9\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF73F\uF2F6\u0000"+
-            "\uE9B6\uF23F\uE1F8\u0000\u0000\u0000\u0000\uEA48"+
-            "\uF937\uF6FC\uF6B1\uE24B\uF531\u0000\u0000\uF25D"+
-            "\uEBAE\u0000\u0000\uF153\uE2FE\u0000\uF74F\uE772"+
-            "\uE4E8\u0000\u0000\uEA38\uF574\uF152\u0000\uE7F5"+
-            "\uF7C5\uE9D3\uE693\uF19E\uF992\u0000\u0000\uF1C0"+
-            "\uE049\u0000\uF274\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF471\u0000\uEA49\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE694\u0000\uEA96\u0000\uEADB\u0000"+
-            "\uE8D3\u0000\uF877\uE773\uF551\u0000\uE9B7\u0000"+
-            "\u0000\u0000\uF497\u0000\u0000\uE53E\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uE695\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE9B8\uE2C5\uEADF\u0000\u0000";
-
-        private final static String innerIndex5=
-            "\u0000\u0000\u0000\u0000\uF44E\uF631\u0000\uF0CB"+
-            "\uF3FC\u0000\uF4C7\u0000\u0000\uEB7B\u0000\u0000"+
-            "\u0000\u0000\u0000\uF1FC\u0000\u0000\uEBDB\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uF275\u0000\uEA97\u0000"+
-            "\u0000\u0000\u0000\uF863\u0000\u0000\u0000\u0000"+
-            "\uF3CB\u0000\u0000\uE33F\uE9B9\u0000\u0000\uE3C3"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF5B1\u0000\u0000"+
-            "\u0000\u0000\uF056\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF371\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF63C\u0000\u0000\u0000\u0000"+
-            "\uF5D9\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF37B\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE9BA\u0000\u0000\u0000\uF44F\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF6C5\u0000"+
-            "\u0000\u0000\u0000\uE8A2\uF498\u0000\u0000\uE04A"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF6F5\u0000\uE0E5\u0000\u0000"+
-            "\u0000\uF276\u0000\uEB63\u0000\u0000\u0000\u0000"+
-            "\uE235\u0000\u0000\u0000\u0000\u0000\u0000\uE668"+
-            "\u0000\u0000\u0000\uE53F\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uEFC9\u0000\u0000\u0000\u0000\uE4CE"+
-            "\uF552\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE0E6\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF3A1\u0000\u0000\u0000\u0000\u0000"+
-            "\uF0B2\u0000\u0000\u0000\u0000\uF3A2\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF0B3\u0000\uF344\u0000\u0000\uE0F4"+
-            "\uE540\uF4B2\uF8B7\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF5EC\u0000\u0000\u0000\u0000\u0000\uF277"+
-            "\uF542\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uF5ED\u0000\uE2F3\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF372\u0000\u0000\u0000\u0000\u0000\uF25E"+
-            "\u0000\u0000\uF3CC\u0000\u0000\uEDB8\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE6F5\uECF3\uE2E5\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE2C6\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF4B3\uED68\uE2F9\uE2DA\u0000\u0000"+
-            "\u0000\u0000\uF85D\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEE73"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF472\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF5EE\u0000\u0000\uE04B\u0000\u0000\uECDC\u0000"+
-            "\u0000\u0000\u0000\uE294\u0000\uE669\u0000\u0000"+
-            "\u0000\uF240\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF575\uE752\uE960\uE17E\u0000\u0000"+
-            "\u0000\u0000\u0000\uE5E0\uF65A\uF9CA\uE766\uF55F"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE636\uE94E"+
-            "\u0000\uE8D4\uE6C7\u0000\u0000\u0000\u0000\uF4A0"+
-            "\u0000\u0000\u0000\uF3CD\u0000\u0000\u0000\u0000"+
-            "\uEC53\uE96E\u0000\uE96F\u0000\u0000\uF2AD\uEE3B"+
-            "\u0000\u0000\u0000\u0000\uF7DD\uF04F\u0000\u0000"+
-            "\u0000\uF2AE\u0000\u0000\u0000\uF560\uE295\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uEE3C\u0000\uE26E"+
-            "\u0000\u0000\uE5F9\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uECF4\uE1D0\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE5B8\u0000\u0000\uF6FD\u0000"+
-            "\uE939\u0000\u0000\u0000\u0000\uEA98\u0000\uE93A"+
-            "\uF473\uEFB4\uE46C\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uEFE6\u0000\u0000\uECF6\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uEECA\u0000"+
-            "\u0000\uE35E\u0000\u0000\uE899\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE04C\u0000"+
-            "\u0000\u0000\uF278\uE86E\u0000\uF499\u0000\u0000"+
-            "\uEC9D\u0000\uE136\u0000\u0000\u0000\u0000\uE84B"+
-            "\u0000\uF279\u0000\u0000\u0000\uF5DA\u0000\u0000"+
-            "\uF6DC\uEBEA\uE251\uE541\u0000\uF9B1\uEE4D\u0000"+
-            "\uF8AD\u0000\u0000\uF777\u0000\uEBCE\u0000\uF6E2"+
-            "\uF5EF\uE2C7\u0000\u0000\uE542\uE191\u0000\uE578"+
-            "\u0000\uF25F\uF6D7\u0000\u0000\uEB36\uE651\uEBDC"+
-            "\uF373\uF3E4\uE993\uE637\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF597\u0000"+
-            "\u0000\uF3CE\uF474\u0000\u0000\uE340\u0000\u0000"+
-            "\uF191\u0000\u0000\u0000\uF7BA\u0000\uF0B5\u0000"+
-            "\u0000\uE57D\uEC54\u0000\u0000\u0000\u0000\uEFE7"+
-            "\u0000\u0000\uF0B4\uF031\u0000\uF74C\uE236\u0000"+
-            "\uF7C6\uF96A\u0000\uE543\uE4B9\uF06E\u0000\u0000"+
-            "\u0000\uEFAB\u0000\u0000\uEBE1\uE4CF\uF598\u0000"+
-            "\uF050\uEBCF\u0000\uE14A\u0000\u0000\u0000\u0000"+
-            "\u0000\uF27A\u0000\u0000\u0000\uF374\uF4B4\uE57E"+
-            "\u0000\u0000\uF450\u0000\u0000\uF3E5\u0000\uF553"+
-            "\uEB64\u0000\uF0B6\u0000\uE6A1\uE0E8\u0000\uF7AD"+
-            "\uEFAD\uE774\uF843\uEC55\uF94D\u0000\u0000\uF154"+
-            "\uE741\u0000\uE93B\u0000\u0000\u0000\u0000\uE5A4"+
-            "\u0000\uF0E9\u0000\u0000\u0000\uEF4B\u0000\u0000"+
-            "\u0000\uE767\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF8AE\uE3E1\u0000\u0000\uE8C0\u0000"+
-            "\uF5BE\u0000\uEA99\u0000\u0000\u0000\u0000\uE09D"+
-            "\uF6C6\uE2C8\u0000\u0000\u0000\uEBD0\u0000\u0000"+
-            "\uF260\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uEFF4\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE296\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE5CD\u0000"+
-            "\u0000\uE2DB\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE9BB\u0000\u0000\u0000\u0000\uE23C\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uEFE8\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uE544\u0000\u0000"+
-            "\u0000\u0000\uED57\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF5DB\u0000\u0000\uF851\u0000\u0000"+
-            "\u0000\uEA39\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE59A"+
-            "\u0000\u0000\u0000\u0000\u0000\uF2F7\u0000\u0000"+
-            "\u0000\u0000\uE4B3\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF0B7\uF2F8\uF5DC\uF1CC\uE8D5\uF3CF\u0000"+
-            "\u0000\u0000\uF3D0\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF5B2\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE7AE\uE5AC\u0000\uEC56\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF9A3\u0000\uF8E5"+
-            "\uEAAB\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEC97"+
-            "\u0000\uF63D\u0000\uF5B3\u0000\uF345\u0000\u0000"+
-            "\u0000\u0000\uEBA5\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uF5DD\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF132\uF1FD\u0000\uF5B4\uF8B8"+
-            "\u0000\uE8A3\u0000\u0000\uE65A\uE0D9\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uEDD4\u0000\u0000\u0000\u0000\u0000\u0000\uF4FA"+
-            "\u0000\uF0B8\u0000\uEB47\uE6EC\uF3EC\uEDAF\uE5E1"+
-            "\uE6ED\uE3D1\u0000\u0000\u0000\u0000\u0000\uEBF2"+
-            "\uF2F9\u0000\u0000\u0000\uE9BC\uF66C\u0000\u0000"+
-            "\u0000\u0000\u0000\uF375\u0000\u0000\u0000\uF554"+
-            "\u0000\u0000\uEFE9\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF4FB\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uE591\u0000\u0000"+
-            "\uE132\uF6FE\uEABC\u0000\u0000\u0000\u0000\uF0CD"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE347\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uE652\u0000\u0000\u0000"+
-            "\u0000\u0000\uEF3D\u0000\u0000\u0000\u0000\uF2AF"+
-            "\uE0A5\u0000\u0000\u0000\u0000\uE0E9\u0000\u0000"+
-            "\u0000\uF878\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE156"+
-            "\u0000\u0000\u0000\uEE77\u0000\u0000\uF057\u0000"+
-            "\u0000\u0000\uE8A4\u0000\uE2C9\uEC9E\uF2FA\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF0DE\u0000\u0000\uF5C8\u0000\uE56E\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uEB65\u0000\uF2B0\u0000\u0000\uEC57\u0000"+
-            "\uE7AF\u0000\u0000\u0000\uF7E7\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uEEE5\u0000\u0000\uE2CA\uEBD1"+
-            "\u0000\uEC58\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uF2FB\u0000\u0000\uF89B"+
-            "\u0000\u0000\uE994\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uEB37\u0000\u0000\u0000"+
-            "\u0000\u0000\uF778\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE0EA\u0000\u0000\u0000\uE0BC\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uE672\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF5DE\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF5DF\u0000\uF246\u0000\u0000\u0000\uEC98\uE4CA"+
-            "\uF2FC\uE3C4\uF2B1\u0000\uE3C5\u0000\uE36E\u0000"+
-            "\uE7E1\u0000\u0000\uEB48\u0000\u0000\uE1D1\uF4B9"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uEECC\u0000\uE638\uE237\u0000\uE545\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uED58\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE4B4\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF0B9\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uE0F5\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uF66D\u0000\uF3A3\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uE157\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uEFCA\u0000\uEBF0\u0000"+
-            "\u0000\u0000\uF5E0\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF8AF\u0000\u0000\u0000\uE0D1"+
-            "\u0000\u0000\u0000\u0000\uF8E0\uF475\u0000\u0000"+
-            "\uF192\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF37C\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF27B\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uEFCB\u0000"+
-            "\u0000\uE192\u0000\u0000\uE6AF\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF4A1\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uF997\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF3A4\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uEB66\u0000\u0000"+
-            "\u0000\u0000\u0000\uF2B2\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF561\u0000\u0000"+
-            "\uF6A1\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uF3D1\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE09E\uE09F\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE25E\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF4C8\u0000\uF4BA"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF1FE"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE836\u0000\u0000\uEB7C\u0000\u0000\u0000\u0000"+
-            "\u0000\uF75D\u0000\uE0D2\u0000\u0000\u0000\uF0CE"+
-            "\u0000\uF7D8\uF7D9\uE070\uE85A\u0000\u0000\u0000"+
-            "\uE0A6\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE058\uF7EE\uE8EC\u0000\u0000"+
-            "\uE341\u0000\u0000\u0000\u0000\uE5EF\u0000\u0000"+
-            "\u0000\uEE95\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uEEA2\uED69\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uED71"+
-            "\u0000\u0000\uF954\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uF7EF\uE2F4\uF6E6\u0000"+
-            "\u0000\u0000\u0000\u0000\uE24C\u0000\u0000\u0000"+
-            "\u0000\uF555\uE933\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uE9BD\u0000\u0000\u0000"+
-            "\u0000\uF556\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF731\u0000\u0000\u0000\uEF66\u0000"+
-            "\u0000\u0000\uE8C1\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF376\u0000\u0000\u0000\uED49"+
-            "\uF67D\u0000\uF7AE\u0000\uE9BE\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE6B0\uE778\uE0BD\u0000\u0000"+
-            "\uF7DA\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF75E\uF7F0\uEB7D\uECB3\uF543"+
-            "\u0000\u0000\uF052\uF476\uF346\u0000\u0000\u0000"+
-            "\u0000\u0000\uE8D6\u0000\u0000\u0000\u0000\u0000"+
-            "\uF0E4\u0000\u0000\uF477\u0000\uE6D5\uE546\uF7E8"+
-            "\uE6C1\u0000\u0000\u0000\u0000\uEDD5\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uEFEA\uE6CC\u0000"+
-            "\u0000\u0000\uE4E9\uEC59\u0000\uF96B\uE1AD\u0000"+
-            "\u0000\u0000\u0000\u0000\uE140\uF032\u0000\u0000"+
-            "\uED98\uE350\u0000\uF347\uF231\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE6F6\u0000\u0000\u0000\uEC5A"+
-            "\uEC5B\u0000\uF85F\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF0DF\u0000\u0000\u0000\u0000\u0000\uE65B"+
-            "\u0000\u0000\u0000\uF544\u0000\u0000\u0000\u0000"+
-            "\uF1CD\uED62\u0000\u0000\uF039\uED4A\uF4A2\uE1D2"+
-            "\u0000\uF65B\u0000\uF3E6\uF1C1\uEF4C\uF261\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF377\uEC5C\u0000"+
-            "\u0000\uED3A\u0000\uF5E1\uF1DA\u0000\u0000\u0000"+
-            "\u0000\u0000\uE6EE\uE3F1\u0000\u0000\u0000\u0000"+
-            "\uEFEB\uEFEC\uEB74\u0000\u0000\u0000\u0000\uE837"+
-            "\uE9D4\u0000\uF033\u0000\u0000\u0000\uE653\uE696"+
-            "\u0000\uE86F\u0000\uF2B3\u0000\u0000\u0000\u0000"+
-            "\uEC5D\u0000\u0000\u0000\u0000\u0000\uF2FD\uF478"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF2C5\u0000\uEEE7\u0000\u0000\uE6FD\u0000"+
-            "\u0000\uEECE\u0000\u0000\uEADC\u0000\uF7C7\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE7F6"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uEAAC\u0000\uE66A\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE934\u0000\u0000\u0000\uF348\u0000\u0000"+
-            "\u0000\u0000\uE5FA\u0000\uED99\u0000\u0000\u0000"+
-            "\uE654\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF57C\u0000\u0000\u0000\u0000\uF2FE\u0000"+
-            "\u0000\u0000\u0000\u0000\uF331\u0000\uEA3A\u0000"+
-            "\u0000\uE84C\uE79E\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF864\u0000\u0000\u0000\uF175\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uF938\u0000\u0000\uF176"+
-            "\u0000\u0000\uE75B\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF8B9\u0000\uED63\u0000\uE1F9"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE2D3\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE07A\u0000\u0000\uE2D4\u0000\uF74D\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF557\u0000"+
-            "\u0000\u0000\u0000\uF06F\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF7DB\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uE547\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF0E5\u0000\u0000\uEBD2\u0000"+
-            "\u0000\u0000\u0000\uF034\u0000\u0000\u0000\uF852"+
-            "\uF8E1\uF87D\uF332\uE193\u0000\uF833\uEC99\u0000"+
-            "\uEC5E\u0000\uEFF5\u0000\uEBEB\u0000\u0000\u0000"+
-            "\uEEE8\uEF67\uE89A\uE55B\u0000\u0000\u0000\uF6F6"+
-            "\uE655\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uE579\u0000\u0000"+
-            "\uF89C\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE194\uF6DD\u0000\uEA4A\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE238\u0000"+
-            "\u0000\u0000\u0000\u0000\uF349\uEDA0\uED59\u0000"+
-            "\u0000\u0000\u0000\u0000\uED64\u0000\u0000\u0000"+
-            "\uF053\u0000\uF2B4\u0000\u0000\u0000\uE6BE\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF8E2\u0000\uE1D3"+
-            "\u0000\u0000\u0000\uF2B5\u0000\u0000\u0000\uF879"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF7A6\u0000\u0000\u0000\u0000\u0000\u0000\uEABD"+
-            "\u0000\uF6C7\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uF79F\u0000\u0000\uF79E"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uEA3B\uE8E8\u0000\u0000\uECDD"+
-            "\u0000\uEBE2\uE3C6\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF660\uF0E6\uE89B"+
-            "\u0000\u0000\u0000\u0000\uF157\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uEA9A\uF779\uECDE\u0000"+
-            "\u0000\u0000\u0000\uE297\u0000\u0000\u0000\u0000"+
-            "\u0000\uF853\uEDD7\u0000\uF158\u0000\u0000\u0000"+
-            "\uF4C9\u0000\u0000\uED4B\u0000\u0000\u0000\u0000"+
-            "\uEE3E\u0000\u0000\u0000\u0000\u0000\uF2B6\u0000"+
-            "\uE94F\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE24D\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uE753\u0000\u0000"+
-            "\u0000\uE35F\u0000\uE2FA\uF4CA\uEB67\u0000\u0000"+
-            "\u0000\uE3C7\uEFAE\u0000\uEF4D\u0000\u0000\uF854"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uEC5F\u0000"+
-            "\u0000\uF855\u0000\u0000\u0000\uF7B8\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uE970\u0000\u0000"+
-            "\uF8B0\u0000\u0000\u0000\uE739\uEDDF\uF7A7\u0000"+
-            "\u0000\uF67E\u0000\uF65C\uEC9A\u0000\u0000\u0000"+
-            "\u0000\uF193\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE870\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF3D2\uE45C\uE2CB\u0000\u0000\uE04D\u0000\u0000"+
-            "\u0000\uE9BF\u0000\u0000\u0000\uF691\u0000\uEA9B"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF844\u0000\u0000"+
-            "\u0000\uE5AD\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF3E7"+
-            "\u0000\uEA4E\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE950\u0000\u0000\u0000\u0000\u0000\uE3C8\uE3C9"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF74E\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE0F6\u0000\u0000\u0000\u0000"+
-            "\uE59B\u0000\u0000\u0000\u0000\u0000\uF5E2\uEBD3"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE779\u0000\u0000\uF7A0\u0000\uE2CC\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF9A4\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uE298\u0000\uF860"+
-            "\u0000\u0000\uE195\uEE4E\u0000\u0000\u0000\uF63E"+
-            "\u0000\u0000\uE5F0\u0000\u0000\uE3CA\u0000\u0000"+
-            "\u0000\uF94E\uE5F1\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE1E9\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uF845\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uEC60\uF599\u0000\u0000\u0000"+
-            "\uE1D4\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uEEA3\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uE8A5\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uEC61\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE6A2"+
-            "\u0000\u0000\uF6E3\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uF036\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uE331\u0000\u0000\u0000"+
-            "\u0000\uE26A\uF8EB\uE8A6\uE8DE\uE775\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF070"+
-            "\u0000\u0000\u0000\u0000\uE73A\u0000\u0000\u0000"+
-            "\u0000\u0000\uEDE0\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE66B"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF2C6\u0000"+
-            "\u0000\uF77A\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uED65"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE299\u0000\u0000\uEB68\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE6EF\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uF57D\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uE1E6\u0000\u0000\u0000"+
-            "\uE196\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF5E3\u0000\u0000"+
-            "\uED5A\u0000\uE971\u0000\u0000\uF7C8\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF94F\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uEF37\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE754\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE0BE"+
-            "\u0000\uE93E\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE6F7"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uF378\u0000\uE9C0"+
-            "\u0000\uE2CD\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uE995\uE7B0\u0000\uEE79\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000";
-
-        private final static String innerIndex6=
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uED4C\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF054\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\uED7C\u0000"+
-            "\uED75\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uF8F8\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE14B\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uED4D\u0000\u0000"+
-            "\uE1DC\uE7F7\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uE9DF\u0000\u0000\u0000"+
-            "\u0000\u0000\uF1CE\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uE7D0\u0000\u0000\u0000\u0000\u0000\uEDA3"+
-            "\u0000\u0000\u0000\u0000\uF7CD\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uE1AE\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE2CE"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF63F\u0000\u0000\u0000\u0000\u0000"+
-            "\uF9D3\uF0ED\uE66C\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uEDA4\u0000\u0000\u0000\uE5B6\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uE66D\u0000\u0000"+
-            "\u0000\uF7E9\u0000\u0000\u0000\uEEA4\u0000\uE673"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uE3CB\uE674\u0000\u0000\u0000\uE5F2"+
-            "\u0000\u0000\u0000\u0000\u0000\uEA9C\u0000\uE6F8"+
-            "\u0000\u0000\u0000\u0000\u0000\uE77A\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uE2D5\uE79F\u0000\u0000"+
-            "\u0000\u0000\u0000\uE73B\u0000\u0000\uF9CB\u0000"+
-            "\u0000\u0000\u0000\uF96C\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uEB38\uE5F3\u0000"+
-            "\u0000\uF9D9\u0000\u0000\uE133\u0000\u0000\u0000"+
-            "\uE7F9\u0000\u0000\uE4EA\uF5F5\u0000\uF2C7\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE4DA\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uE84D\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEF38"+
-            "\uE93F\u0000\u0000\u0000\u0000\u0000\uF333\u0000"+
-            "\u0000\u0000\u0000\uE1D5\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uEB39\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\uEA3C\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\uF34A\uF241\u0000\u0000\uF242\u0000"+
-            "\u0000\u0000\uF65D\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF262"+
-            "\u0000\uE656\u0000\u0000\u0000\u0000\u0000\uEB75"+
-            "\u0000\u0000\uF4BB\u0000\uEDE1\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uED5B"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\uE6A3\u0000\u0000"+
-            "\uE8C2\u0000\u0000\u0000\u0000\uE0A0\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\uE2CF\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u8861\u8862\u8863\u8864\u8865\u8866\u8867\u8868"+
-            "\u8869\u886A\u886B\u886C\u886D\u886E\u886F\u8870"+
-            "\u8871\u8873\u8874\u8875\u8876\u8877\u8878\u8879"+
-            "\u887A\u887B\u887C\u887D\u8881\u8882\u8883\u8884"+
-            "\u8885\u8886\u8887\u8888\u8889\u888A\u888B\u888C"+
-            "\u888D\u888E\u888F\u8890\u8891\u8893\u8894\u8895"+
-            "\u8896\u8897\u8898\u8899\u889A\u889B\u889C\u889D"+
-            "\u88A1\u88A2\u88A3\u88A4\u88A5\u88A6\u88A7\u88A8"+
-            "\u88A9\u88AA\u88AB\u88AC\u88AD\u88AE\u88AF\u88B0"+
-            "\u88B1\u88B3\u88B4\u88B5\u88B6\u88B7\u88B8\u88B9"+
-            "\u88BA\u88BB\u88BC\u88BD\u88C1\u88C2\u88C3\u88C4"+
-            "\u88C5\u88C6\u88C7\u88C8\u88C9\u88CA\u88CB\u88CC"+
-            "\u88CD\u88CE\u88CF\u88D0\u88D1\u88D3\u88D4\u88D5"+
-            "\u88D6\u88D7\u88D8\u88D9\u88DA\u88DB\u88DC\u88DD"+
-            "\u88E1\u88E2\u88E3\u88E4\u88E5\u88E6\u88E7\u88E8"+
-            "\u88E9\u88EA\u88EB\u88EC\u88ED\u88EE\u88EF\u88F0"+
-            "\u88F1\u88F3\u88F4\u88F5\u88F6\u88F7\u88F8\u88F9"+
-            "\u88FA\u88FB\u88FC\u88FD\u8941\u8942\u8943\u8944"+
-            "\u8945\u8946\u8947\u8948\u8949\u894A\u894B\u894C"+
-            "\u894D\u894E\u894F\u8950\u8951\u8953\u8954\u8955"+
-            "\u8956\u8957\u8958\u8959\u895A\u895B\u895C\u895D"+
-            "\u8961\u8962\u8963\u8964\u8965\u8966\u8967\u8968"+
-            "\u8969\u896A\u896B\u896C\u896D\u896E\u896F\u8970"+
-            "\u8971\u8973\u8974\u8975\u8976\u8977\u8978\u8979"+
-            "\u897A\u897B\u897C\u897D\u8981\u8982\u8983\u8984"+
-            "\u8985\u8986\u8987\u8988\u8989\u898A\u898B\u898C"+
-            "\u898D\u898E\u898F\u8990\u8991\u8993\u8994\u8995"+
-            "\u8996\u8997\u8998\u8999\u899A\u899B\u899C\u899D"+
-            "\u89A1\u89A2\u89A3\u89A4\u89A5\u89A6\u89A7\u89A8"+
-            "\u89A9\u89AA\u89AB\u89AC\u89AD\u89AE\u89AF\u89B0"+
-            "\u89B1\u89B3\u89B4\u89B5\u89B6\u89B7\u89B8\u89B9"+
-            "\u89BA\u89BB\u89BC\u89BD\u89C1\u89C2\u89C3\u89C4"+
-            "\u89C5\u89C6\u89C7\u89C8\u89C9\u89CA\u89CB\u89CC"+
-            "\u89CD\u89CE\u89CF\u89D0\u89D1\u89D3\u89D4\u89D5"+
-            "\u89D6\u89D7\u89D8\u89D9\u89DA\u89DB\u89DC\u89DD"+
-            "\u89E1\u89E2\u89E3\u89E4\u89E5\u89E6\u89E7\u89E8"+
-            "\u89E9\u89EA\u89EB\u89EC\u89ED\u89EE\u89EF\u89F0"+
-            "\u89F1\u89F3\u89F4\u89F5\u89F6\u89F7\u89F8\u89F9"+
-            "\u89FA\u89FB\u89FC\u89FD\u8A41\u8A42\u8A43\u8A44"+
-            "\u8A45\u8A46\u8A47\u8A48\u8A49\u8A4A\u8A4B\u8A4C"+
-            "\u8A4D\u8A4E\u8A4F\u8A50\u8A51\u8A53\u8A54\u8A55"+
-            "\u8A56\u8A57\u8A58\u8A59\u8A5A\u8A5B\u8A5C\u8A5D"+
-            "\u8A61\u8A62\u8A63\u8A64\u8A65\u8A66\u8A67\u8A68"+
-            "\u8A69\u8A6A\u8A6B\u8A6C\u8A6D\u8A6E\u8A6F\u8A70"+
-            "\u8A71\u8A73\u8A74\u8A75\u8A76\u8A77\u8A78\u8A79"+
-            "\u8A7A\u8A7B\u8A7C\u8A7D\u8A81\u8A82\u8A83\u8A84"+
-            "\u8A85\u8A86\u8A87\u8A88\u8A89\u8A8A\u8A8B\u8A8C"+
-            "\u8A8D\u8A8E\u8A8F\u8A90\u8A91\u8A93\u8A94\u8A95"+
-            "\u8A96\u8A97\u8A98\u8A99\u8A9A\u8A9B\u8A9C\u8A9D"+
-            "\u8AA1\u8AA2\u8AA3\u8AA4\u8AA5\u8AA6\u8AA7\u8AA8"+
-            "\u8AA9\u8AAA\u8AAB\u8AAC\u8AAD\u8AAE\u8AAF\u8AB0"+
-            "\u8AB1\u8AB3\u8AB4\u8AB5\u8AB6\u8AB7\u8AB8\u8AB9"+
-            "\u8ABA\u8ABB\u8ABC\u8ABD\u8AC1\u8AC2\u8AC3\u8AC4"+
-            "\u8AC5\u8AC6\u8AC7\u8AC8\u8AC9\u8ACA\u8ACB\u8ACC"+
-            "\u8ACD\u8ACE\u8ACF\u8AD0\u8AD1\u8AD3\u8AD4\u8AD5"+
-            "\u8AD6\u8AD7\u8AD8\u8AD9\u8ADA\u8ADB\u8ADC\u8ADD"+
-            "\u8AE1\u8AE2\u8AE3\u8AE4\u8AE5\u8AE6\u8AE7\u8AE8"+
-            "\u8AE9\u8AEA\u8AEB\u8AEC\u8AED\u8AEE\u8AEF\u8AF0"+
-            "\u8AF1\u8AF3\u8AF4\u8AF5\u8AF6\u8AF7\u8AF8\u8AF9"+
-            "\u8AFA\u8AFB\u8AFC\u8AFD\u8B41\u8B42\u8B43\u8B44"+
-            "\u8B45\u8B46\u8B47\u8B48\u8B49\u8B4A\u8B4B\u8B4C"+
-            "\u8B4D\u8B4E\u8B4F\u8B50\u8B51\u8B53\u8B54\u8B55"+
-            "\u8B56\u8B57\u8B58\u8B59\u8B5A\u8B5B\u8B5C\u8B5D"+
-            "\u8B61\u8B62\u8B63\u8B64\u8B65\u8B66\u8B67\u8B68"+
-            "\u8B69\u8B6A\u8B6B\u8B6C\u8B6D\u8B6E\u8B6F\u8B70"+
-            "\u8B71\u8B73\u8B74\u8B75\u8B76\u8B77\u8B78\u8B79"+
-            "\u8B7A\u8B7B\u8B7C\u8B7D\u8B81\u8B82\u8B83\u8B84"+
-            "\u8B85\u8B86\u8B87\u8B88\u8B89\u8B8A\u8B8B\u8B8C"+
-            "\u8B8D\u8B8E\u8B8F\u8B90\u8B91\u8B93\u8B94\u8B95"+
-            "\u8B96\u8B97\u8B98\u8B99\u8B9A\u8B9B\u8B9C\u8B9D"+
-            "\u8BA1\u8BA2\u8BA3\u8BA4\u8BA5\u8BA6\u8BA7\u8BA8"+
-            "\u8BA9\u8BAA\u8BAB\u8BAC\u8BAD\u8BAE\u8BAF\u8BB0"+
-            "\u8BB1\u8BB3\u8BB4\u8BB5\u8BB6\u8BB7\u8BB8\u8BB9"+
-            "\u8BBA\u8BBB\u8BBC\u8BBD\u8C61\u8C62\u8C63\u8C64"+
-            "\u8C65\u8C66\u8C67\u8C68\u8C69\u8C6A\u8C6B\u8C6C"+
-            "\u8C6D\u8C6E\u8C6F\u8C70\u8C71\u8C73\u8C74\u8C75"+
-            "\u8C76\u8C77\u8C78\u8C79\u8C7A\u8C7B\u8C7C\u8C7D"+
-            "\u8C81\u8C82\u8C83\u8C84\u8C85\u8C86\u8C87\u8C88"+
-            "\u8C89\u8C8A\u8C8B\u8C8C\u8C8D\u8C8E\u8C8F\u8C90"+
-            "\u8C91\u8C93\u8C94\u8C95\u8C96\u8C97\u8C98\u8C99"+
-            "\u8C9A\u8C9B\u8C9C\u8C9D\u8CA1\u8CA2\u8CA3\u8CA4"+
-            "\u8CA5\u8CA6\u8CA7\u8CA8\u8CA9\u8CAA\u8CAB\u8CAC"+
-            "\u8CAD\u8CAE\u8CAF\u8CB0\u8CB1\u8CB3\u8CB4\u8CB5"+
-            "\u8CB6\u8CB7\u8CB8\u8CB9\u8CBA\u8CBB\u8CBC\u8CBD"+
-            "\u8CC1\u8CC2\u8CC3\u8CC4\u8CC5\u8CC6\u8CC7\u8CC8"+
-            "\u8CC9\u8CCA\u8CCB\u8CCC\u8CCD\u8CCE\u8CCF\u8CD0"+
-            "\u8CD1\u8CD3\u8CD4\u8CD5\u8CD6\u8CD7\u8CD8\u8CD9"+
-            "\u8CDA\u8CDB\u8CDC\u8CDD\u8CE1\u8CE2\u8CE3\u8CE4"+
-            "\u8CE5\u8CE6\u8CE7\u8CE8\u8CE9\u8CEA\u8CEB\u8CEC"+
-            "\u8CED\u8CEE\u8CEF\u8CF0\u8CF1\u8CF3\u8CF4\u8CF5"+
-            "\u8CF6\u8CF7\u8CF8\u8CF9\u8CFA\u8CFB\u8CFC\u8CFD"+
-            "\u8D41\u8D42\u8D43\u8D44\u8D45\u8D46\u8D47\u8D48"+
-            "\u8D49\u8D4A\u8D4B\u8D4C\u8D4D\u8D4E\u8D4F\u8D50"+
-            "\u8D51\u8D53\u8D54\u8D55\u8D56\u8D57\u8D58\u8D59"+
-            "\u8D5A\u8D5B\u8D5C\u8D5D\u8D61\u8D62\u8D63\u8D64"+
-            "\u8D65\u8D66\u8D67\u8D68\u8D69\u8D6A\u8D6B\u8D6C"+
-            "\u8D6D\u8D6E\u8D6F\u8D70\u8D71\u8D73\u8D74\u8D75"+
-            "\u8D76\u8D77\u8D78\u8D79\u8D7A\u8D7B\u8D7C\u8D7D"+
-            "\u8D81\u8D82\u8D83\u8D84\u8D85\u8D86\u8D87\u8D88"+
-            "\u8D89\u8D8A\u8D8B\u8D8C\u8D8D\u8D8E\u8D8F\u8D90"+
-            "\u8D91\u8D93\u8D94\u8D95\u8D96\u8D97\u8D98\u8D99"+
-            "\u8D9A\u8D9B\u8D9C\u8D9D\u8DA1\u8DA2\u8DA3\u8DA4"+
-            "\u8DA5\u8DA6\u8DA7\u8DA8\u8DA9\u8DAA\u8DAB\u8DAC"+
-            "\u8DAD\u8DAE\u8DAF\u8DB0\u8DB1\u8DB3\u8DB4\u8DB5"+
-            "\u8DB6\u8DB7\u8DB8\u8DB9\u8DBA\u8DBB\u8DBC\u8DBD"+
-            "\u8DC1\u8DC2\u8DC3\u8DC4\u8DC5\u8DC6\u8DC7\u8DC8"+
-            "\u8DC9\u8DCA\u8DCB\u8DCC\u8DCD\u8DCE\u8DCF\u8DD0"+
-            "\u8DD1\u8DD3\u8DD4\u8DD5\u8DD6\u8DD7\u8DD8\u8DD9"+
-            "\u8DDA\u8DDB\u8DDC\u8DDD\u8DE1\u8DE2\u8DE3\u8DE4"+
-            "\u8DE5\u8DE6\u8DE7\u8DE8\u8DE9\u8DEA\u8DEB\u8DEC"+
-            "\u8DED\u8DEE\u8DEF\u8DF0\u8DF1\u8DF3\u8DF4\u8DF5"+
-            "\u8DF6\u8DF7\u8DF8\u8DF9\u8DFA\u8DFB\u8DFC\u8DFD"+
-            "\u8E41\u8E42\u8E43\u8E44\u8E45\u8E46\u8E47\u8E48"+
-            "\u8E49\u8E4A\u8E4B\u8E4C\u8E4D\u8E4E\u8E4F\u8E50"+
-            "\u8E51\u8E53\u8E54\u8E55\u8E56\u8E57\u8E58\u8E59"+
-            "\u8E5A\u8E5B\u8E5C\u8E5D\u8E61\u8E62\u8E63\u8E64"+
-            "\u8E65\u8E66\u8E67\u8E68\u8E69\u8E6A\u8E6B\u8E6C"+
-            "\u8E6D\u8E6E\u8E6F\u8E70\u8E71\u8E73\u8E74\u8E75"+
-            "\u8E76\u8E77\u8E78\u8E79\u8E7A\u8E7B\u8E7C\u8E7D"+
-            "\u8E81\u8E82\u8E83\u8E84\u8E85\u8E86\u8E87\u8E88"+
-            "\u8E89\u8E8A\u8E8B\u8E8C\u8E8D\u8E8E\u8E8F\u8E90"+
-            "\u8E91\u8E93\u8E94\u8E95\u8E96\u8E97\u8E98\u8E99"+
-            "\u8E9A\u8E9B\u8E9C\u8E9D\u8EA1\u8EA2\u8EA3\u8EA4"+
-            "\u8EA5\u8EA6\u8EA7\u8EA8\u8EA9\u8EAA\u8EAB\u8EAC"+
-            "\u8EAD\u8EAE\u8EAF\u8EB0\u8EB1\u8EB3\u8EB4\u8EB5"+
-            "\u8EB6\u8EB7\u8EB8\u8EB9\u8EBA\u8EBB\u8EBC\u8EBD"+
-            "\u8EC1\u8EC2\u8EC3\u8EC4\u8EC5\u8EC6\u8EC7\u8EC8"+
-            "\u8EC9\u8ECA\u8ECB\u8ECC\u8ECD\u8ECE\u8ECF\u8ED0"+
-            "\u8ED1\u8ED3\u8ED4\u8ED5\u8ED6\u8ED7\u8ED8\u8ED9"+
-            "\u8EDA\u8EDB\u8EDC\u8EDD\u8EE1\u8EE2\u8EE3\u8EE4"+
-            "\u8EE5\u8EE6\u8EE7\u8EE8\u8EE9\u8EEA\u8EEB\u8EEC"+
-            "\u8EED\u8EEE\u8EEF\u8EF0\u8EF1\u8EF3\u8EF4\u8EF5"+
-            "\u8EF6\u8EF7\u8EF8\u8EF9\u8EFA\u8EFB\u8EFC\u8EFD"+
-            "\u8F41\u8F42\u8F43\u8F44\u8F45\u8F46\u8F47\u8F48"+
-            "\u8F49\u8F4A\u8F4B\u8F4C\u8F4D\u8F4E\u8F4F\u8F50"+
-            "\u8F51\u8F53\u8F54\u8F55\u8F56\u8F57\u8F58\u8F59"+
-            "\u8F5A\u8F5B\u8F5C\u8F5D\u8F61\u8F62\u8F63\u8F64"+
-            "\u8F65\u8F66\u8F67\u8F68\u8F69\u8F6A\u8F6B\u8F6C"+
-            "\u8F6D\u8F6E\u8F6F\u8F70\u8F71\u8F73\u8F74\u8F75"+
-            "\u8F76\u8F77\u8F78\u8F79\u8F7A\u8F7B\u8F7C\u8F7D"+
-            "\u8F81\u8F82\u8F83\u8F84\u8F85\u8F86\u8F87\u8F88"+
-            "\u8F89\u8F8A\u8F8B\u8F8C\u8F8D\u8F8E\u8F8F\u8F90"+
-            "\u8F91\u8F93\u8F94\u8F95\u8F96\u8F97\u8F98\u8F99"+
-            "\u8F9A\u8F9B\u8F9C\u8F9D\u8FA1\u8FA2\u8FA3\u8FA4"+
-            "\u8FA5\u8FA6\u8FA7\u8FA8\u8FA9\u8FAA\u8FAB\u8FAC"+
-            "\u8FAD\u8FAE\u8FAF\u8FB0\u8FB1\u8FB3\u8FB4\u8FB5"+
-            "\u8FB6\u8FB7\u8FB8\u8FB9\u8FBA\u8FBB\u8FBC\u8FBD"+
-            "\u9061\u9062\u9063\u9064\u9065\u9066\u9067\u9068"+
-            "\u9069\u906A\u906B\u906C\u906D\u906E\u906F\u9070"+
-            "\u9071\u9073\u9074\u9075\u9076\u9077\u9078\u9079"+
-            "\u907A\u907B\u907C\u907D\u9081\u9082\u9083\u9084"+
-            "\u9085\u9086\u9087\u9088\u9089\u908A\u908B\u908C"+
-            "\u908D\u908E\u908F\u9090\u9091\u9093\u9094\u9095"+
-            "\u9096\u9097\u9098\u9099\u909A\u909B\u909C\u909D"+
-            "\u90A1\u90A2\u90A3\u90A4\u90A5\u90A6\u90A7\u90A8"+
-            "\u90A9\u90AA\u90AB\u90AC\u90AD\u90AE\u90AF\u90B0"+
-            "\u90B1\u90B3\u90B4\u90B5\u90B6\u90B7\u90B8\u90B9"+
-            "\u90BA\u90BB\u90BC\u90BD\u90C1\u90C2\u90C3\u90C4"+
-            "\u90C5\u90C6\u90C7\u90C8\u90C9\u90CA\u90CB\u90CC"+
-            "\u90CD\u90CE\u90CF\u90D0\u90D1\u90D3\u90D4\u90D5"+
-            "\u90D6\u90D7\u90D8\u90D9\u90DA\u90DB\u90DC\u90DD"+
-            "\u90E1\u90E2\u90E3\u90E4\u90E5\u90E6\u90E7\u90E8"+
-            "\u90E9\u90EA\u90EB\u90EC\u90ED\u90EE\u90EF\u90F0"+
-            "\u90F1\u90F3\u90F4\u90F5\u90F6\u90F7\u90F8\u90F9"+
-            "\u90FA\u90FB\u90FC\u90FD\u9141\u9142\u9143\u9144"+
-            "\u9145\u9146\u9147\u9148\u9149\u914A\u914B\u914C"+
-            "\u914D\u914E\u914F\u9150\u9151\u9153\u9154\u9155"+
-            "\u9156\u9157\u9158\u9159\u915A\u915B\u915C\u915D"+
-            "\u9161\u9162\u9163\u9164\u9165\u9166\u9167\u9168"+
-            "\u9169\u916A\u916B\u916C\u916D\u916E\u916F\u9170"+
-            "\u9171\u9173\u9174\u9175\u9176\u9177\u9178\u9179"+
-            "\u917A\u917B\u917C\u917D\u9181\u9182\u9183\u9184"+
-            "\u9185\u9186\u9187\u9188\u9189\u918A\u918B\u918C"+
-            "\u918D\u918E\u918F\u9190\u9191\u9193\u9194\u9195"+
-            "\u9196\u9197\u9198\u9199\u919A\u919B\u919C\u919D"+
-            "\u91A1\u91A2\u91A3\u91A4\u91A5\u91A6\u91A7\u91A8"+
-            "\u91A9\u91AA\u91AB\u91AC\u91AD\u91AE\u91AF\u91B0"+
-            "\u91B1\u91B3\u91B4\u91B5\u91B6\u91B7\u91B8\u91B9"+
-            "\u91BA\u91BB\u91BC\u91BD\u91C1\u91C2\u91C3\u91C4"+
-            "\u91C5\u91C6\u91C7\u91C8\u91C9\u91CA\u91CB\u91CC"+
-            "\u91CD\u91CE\u91CF\u91D0\u91D1\u91D3\u91D4\u91D5"+
-            "\u91D6\u91D7\u91D8\u91D9\u91DA\u91DB\u91DC\u91DD"+
-            "\u91E1\u91E2\u91E3\u91E4\u91E5\u91E6\u91E7\u91E8"+
-            "\u91E9\u91EA\u91EB\u91EC\u91ED\u91EE\u91EF\u91F0"+
-            "\u91F1\u91F3\u91F4\u91F5\u91F6\u91F7\u91F8\u91F9"+
-            "\u91FA\u91FB\u91FC\u91FD\u9241\u9242\u9243\u9244"+
-            "\u9245\u9246\u9247\u9248\u9249\u924A\u924B\u924C"+
-            "\u924D\u924E\u924F\u9250\u9251\u9253\u9254\u9255"+
-            "\u9256\u9257\u9258\u9259\u925A\u925B\u925C\u925D"+
-            "\u9261\u9262\u9263\u9264\u9265\u9266\u9267\u9268"+
-            "\u9269\u926A\u926B\u926C\u926D\u926E\u926F\u9270"+
-            "\u9271\u9273\u9274\u9275\u9276\u9277\u9278\u9279"+
-            "\u927A\u927B\u927C\u927D\u9281\u9282\u9283\u9284"+
-            "\u9285\u9286\u9287\u9288\u9289\u928A\u928B\u928C"+
-            "\u928D\u928E\u928F\u9290\u9291\u9293\u9294\u9295"+
-            "\u9296\u9297\u9298\u9299\u929A\u929B\u929C\u929D"+
-            "\u92A1\u92A2\u92A3\u92A4\u92A5\u92A6\u92A7\u92A8"+
-            "\u92A9\u92AA\u92AB\u92AC\u92AD\u92AE\u92AF\u92B0"+
-            "\u92B1\u92B3\u92B4\u92B5\u92B6\u92B7\u92B8\u92B9"+
-            "\u92BA\u92BB\u92BC\u92BD\u92C1\u92C2\u92C3\u92C4"+
-            "\u92C5\u92C6\u92C7\u92C8\u92C9\u92CA\u92CB\u92CC"+
-            "\u92CD\u92CE\u92CF\u92D0\u92D1\u92D3\u92D4\u92D5"+
-            "\u92D6\u92D7\u92D8\u92D9\u92DA\u92DB\u92DC\u92DD"+
-            "\u92E1\u92E2\u92E3\u92E4\u92E5\u92E6\u92E7\u92E8"+
-            "\u92E9\u92EA\u92EB\u92EC\u92ED\u92EE\u92EF\u92F0"+
-            "\u92F1\u92F3\u92F4\u92F5\u92F6\u92F7\u92F8\u92F9"+
-            "\u92FA\u92FB\u92FC\u92FD\u9341\u9342\u9343\u9344"+
-            "\u9345\u9346\u9347\u9348\u9349\u934A\u934B\u934C"+
-            "\u934D\u934E\u934F\u9350\u9351\u9353\u9354\u9355"+
-            "\u9356\u9357\u9358\u9359\u935A\u935B\u935C\u935D"+
-            "\u9361\u9362\u9363\u9364\u9365\u9366\u9367\u9368"+
-            "\u9369\u936A\u936B\u936C\u936D\u936E\u936F\u9370"+
-            "\u9371\u9373\u9374\u9375\u9376\u9377\u9378\u9379"+
-            "\u937A\u937B\u937C\u937D\u9381\u9382\u9383\u9384"+
-            "\u9385\u9386\u9387\u9388\u9389\u938A\u938B\u938C"+
-            "\u938D\u938E\u938F\u9390\u9391\u9393\u9394\u9395"+
-            "\u9396\u9397\u9398\u9399\u939A\u939B\u939C\u939D"+
-            "\u93A1\u93A2\u93A3\u93A4\u93A5\u93A6\u93A7\u93A8"+
-            "\u93A9\u93AA\u93AB\u93AC\u93AD\u93AE\u93AF\u93B0"+
-            "\u93B1\u93B3\u93B4\u93B5\u93B6\u93B7\u93B8\u93B9"+
-            "\u93BA\u93BB\u93BC\u93BD\u9461\u9462\u9463\u9464"+
-            "\u9465\u9466\u9467\u9468\u9469\u946A\u946B\u946C"+
-            "\u946D\u946E\u946F\u9470\u9471\u9473\u9474\u9475"+
-            "\u9476\u9477\u9478\u9479\u947A\u947B\u947C\u947D"+
-            "\u9481\u9482\u9483\u9484\u9485\u9486\u9487\u9488"+
-            "\u9489\u948A\u948B\u948C\u948D\u948E\u948F\u9490"+
-            "\u9491\u9493\u9494\u9495\u9496\u9497\u9498\u9499"+
-            "\u949A\u949B\u949C\u949D\u94A1\u94A2\u94A3\u94A4"+
-            "\u94A5\u94A6\u94A7\u94A8\u94A9\u94AA\u94AB\u94AC"+
-            "\u94AD\u94AE\u94AF\u94B0\u94B1\u94B3\u94B4\u94B5"+
-            "\u94B6\u94B7\u94B8\u94B9\u94BA\u94BB\u94BC\u94BD"+
-            "\u94C1\u94C2\u94C3\u94C4\u94C5\u94C6\u94C7\u94C8"+
-            "\u94C9\u94CA\u94CB\u94CC\u94CD\u94CE\u94CF\u94D0"+
-            "\u94D1\u94D3\u94D4\u94D5\u94D6\u94D7\u94D8\u94D9"+
-            "\u94DA\u94DB\u94DC\u94DD\u94E1\u94E2\u94E3\u94E4"+
-            "\u94E5\u94E6\u94E7\u94E8\u94E9\u94EA\u94EB\u94EC"+
-            "\u94ED\u94EE\u94EF\u94F0\u94F1\u94F3\u94F4\u94F5"+
-            "\u94F6\u94F7\u94F8\u94F9\u94FA\u94FB\u94FC\u94FD"+
-            "\u9541\u9542\u9543\u9544\u9545\u9546\u9547\u9548"+
-            "\u9549\u954A\u954B\u954C\u954D\u954E\u954F\u9550"+
-            "\u9551\u9553\u9554\u9555\u9556\u9557\u9558\u9559"+
-            "\u955A\u955B\u955C\u955D\u9561\u9562\u9563\u9564"+
-            "\u9565\u9566\u9567\u9568\u9569\u956A\u956B\u956C"+
-            "\u956D\u956E\u956F\u9570\u9571\u9573\u9574\u9575"+
-            "\u9576\u9577\u9578\u9579\u957A\u957B\u957C\u957D"+
-            "\u9581\u9582\u9583\u9584\u9585\u9586\u9587\u9588"+
-            "\u9589\u958A\u958B\u958C\u958D\u958E\u958F\u9590"+
-            "\u9591\u9593\u9594\u9595\u9596\u9597\u9598\u9599"+
-            "\u959A\u959B\u959C\u959D\u95A1\u95A2\u95A3\u95A4"+
-            "\u95A5\u95A6\u95A7\u95A8\u95A9\u95AA\u95AB\u95AC"+
-            "\u95AD\u95AE\u95AF\u95B0\u95B1\u95B3\u95B4\u95B5"+
-            "\u95B6\u95B7\u95B8\u95B9\u95BA\u95BB\u95BC\u95BD"+
-            "\u95C1\u95C2\u95C3\u95C4\u95C5\u95C6\u95C7\u95C8"+
-            "\u95C9\u95CA\u95CB\u95CC\u95CD\u95CE\u95CF\u95D0"+
-            "\u95D1\u95D3\u95D4\u95D5\u95D6\u95D7\u95D8\u95D9"+
-            "\u95DA\u95DB\u95DC\u95DD\u95E1\u95E2\u95E3\u95E4"+
-            "\u95E5\u95E6\u95E7\u95E8\u95E9\u95EA\u95EB\u95EC"+
-            "\u95ED\u95EE\u95EF\u95F0\u95F1\u95F3\u95F4\u95F5"+
-            "\u95F6\u95F7\u95F8\u95F9\u95FA\u95FB\u95FC\u95FD"+
-            "\u9641\u9642\u9643\u9644\u9645\u9646\u9647\u9648"+
-            "\u9649\u964A\u964B\u964C\u964D\u964E\u964F\u9650"+
-            "\u9651\u9653\u9654\u9655\u9656\u9657\u9658\u9659"+
-            "\u965A\u965B\u965C\u965D\u9661\u9662\u9663\u9664"+
-            "\u9665\u9666\u9667\u9668\u9669\u966A\u966B\u966C"+
-            "\u966D\u966E\u966F\u9670\u9671\u9673\u9674\u9675"+
-            "\u9676\u9677\u9678\u9679\u967A\u967B\u967C\u967D"+
-            "\u9681\u9682\u9683\u9684\u9685\u9686\u9687\u9688"+
-            "\u9689\u968A\u968B\u968C\u968D\u968E\u968F\u9690"+
-            "\u9691\u9693\u9694\u9695\u9696\u9697\u9698\u9699"+
-            "\u969A\u969B\u969C\u969D\u96A1\u96A2\u96A3\u96A4"+
-            "\u96A5\u96A6\u96A7\u96A8\u96A9\u96AA\u96AB\u96AC"+
-            "\u96AD\u96AE\u96AF\u96B0\u96B1\u96B3\u96B4\u96B5"+
-            "\u96B6\u96B7\u96B8\u96B9\u96BA\u96BB\u96BC\u96BD"+
-            "\u96C1\u96C2\u96C3\u96C4\u96C5\u96C6\u96C7\u96C8"+
-            "\u96C9\u96CA\u96CB\u96CC\u96CD\u96CE\u96CF\u96D0"+
-            "\u96D1\u96D3\u96D4\u96D5\u96D6\u96D7\u96D8\u96D9"+
-            "\u96DA\u96DB\u96DC\u96DD\u96E1\u96E2\u96E3\u96E4"+
-            "\u96E5\u96E6\u96E7\u96E8\u96E9\u96EA\u96EB\u96EC"+
-            "\u96ED\u96EE\u96EF\u96F0\u96F1\u96F3\u96F4\u96F5"+
-            "\u96F6\u96F7\u96F8\u96F9\u96FA\u96FB\u96FC\u96FD"+
-            "\u9741\u9742\u9743\u9744\u9745\u9746\u9747\u9748"+
-            "\u9749\u974A\u974B\u974C\u974D\u974E\u974F\u9750"+
-            "\u9751\u9753\u9754\u9755\u9756\u9757\u9758\u9759"+
-            "\u975A\u975B\u975C\u975D\u9761\u9762\u9763\u9764"+
-            "\u9765\u9766\u9767\u9768\u9769\u976A\u976B\u976C"+
-            "\u976D\u976E\u976F\u9770\u9771\u9773\u9774\u9775"+
-            "\u9776\u9777\u9778\u9779\u977A\u977B\u977C\u977D"+
-            "\u9781\u9782\u9783\u9784\u9785\u9786\u9787\u9788"+
-            "\u9789\u978A\u978B\u978C\u978D\u978E\u978F\u9790"+
-            "\u9791\u9793\u9794\u9795\u9796\u9797\u9798\u9799"+
-            "\u979A\u979B\u979C\u979D\u97A1\u97A2\u97A3\u97A4"+
-            "\u97A5\u97A6\u97A7\u97A8\u97A9\u97AA\u97AB\u97AC"+
-            "\u97AD\u97AE\u97AF\u97B0\u97B1\u97B3\u97B4\u97B5"+
-            "\u97B6\u97B7\u97B8\u97B9\u97BA\u97BB\u97BC\u97BD"+
-            "\u9861\u9862\u9863\u9864\u9865\u9866\u9867\u9868"+
-            "\u9869\u986A\u986B\u986C\u986D\u986E\u986F\u9870"+
-            "\u9871\u9873\u9874\u9875\u9876\u9877\u9878\u9879"+
-            "\u987A\u987B\u987C\u987D\u9881\u9882\u9883\u9884"+
-            "\u9885\u9886\u9887\u9888\u9889\u988A\u988B\u988C"+
-            "\u988D\u988E\u988F\u9890\u9891\u9893\u9894\u9895"+
-            "\u9896\u9897\u9898\u9899\u989A\u989B\u989C\u989D"+
-            "\u98A1\u98A2\u98A3\u98A4\u98A5\u98A6\u98A7\u98A8"+
-            "\u98A9\u98AA\u98AB\u98AC\u98AD\u98AE\u98AF\u98B0"+
-            "\u98B1\u98B3\u98B4\u98B5\u98B6\u98B7\u98B8\u98B9"+
-            "\u98BA\u98BB\u98BC\u98BD\u98C1\u98C2\u98C3\u98C4"+
-            "\u98C5\u98C6\u98C7\u98C8\u98C9\u98CA\u98CB\u98CC"+
-            "\u98CD\u98CE\u98CF\u98D0\u98D1\u98D3\u98D4\u98D5"+
-            "\u98D6\u98D7\u98D8\u98D9\u98DA\u98DB\u98DC\u98DD"+
-            "\u98E1\u98E2\u98E3\u98E4\u98E5\u98E6\u98E7\u98E8"+
-            "\u98E9\u98EA\u98EB\u98EC\u98ED\u98EE\u98EF\u98F0"+
-            "\u98F1\u98F3\u98F4\u98F5\u98F6\u98F7\u98F8\u98F9"+
-            "\u98FA\u98FB\u98FC\u98FD\u9941\u9942\u9943\u9944"+
-            "\u9945\u9946\u9947\u9948\u9949\u994A\u994B\u994C"+
-            "\u994D\u994E\u994F\u9950\u9951\u9953\u9954\u9955"+
-            "\u9956\u9957\u9958\u9959\u995A\u995B\u995C\u995D"+
-            "\u9961\u9962\u9963\u9964\u9965\u9966\u9967\u9968"+
-            "\u9969\u996A\u996B\u996C\u996D\u996E\u996F\u9970"+
-            "\u9971\u9973\u9974\u9975\u9976\u9977\u9978\u9979"+
-            "\u997A\u997B\u997C\u997D\u9981\u9982\u9983\u9984"+
-            "\u9985\u9986\u9987\u9988\u9989\u998A\u998B\u998C"+
-            "\u998D\u998E\u998F\u9990\u9991\u9993\u9994\u9995"+
-            "\u9996\u9997\u9998\u9999\u999A\u999B\u999C\u999D"+
-            "\u99A1\u99A2\u99A3\u99A4\u99A5\u99A6\u99A7\u99A8"+
-            "\u99A9\u99AA\u99AB\u99AC\u99AD\u99AE\u99AF\u99B0"+
-            "\u99B1\u99B3\u99B4\u99B5\u99B6\u99B7\u99B8\u99B9"+
-            "\u99BA\u99BB\u99BC\u99BD\u99C1\u99C2\u99C3\u99C4"+
-            "\u99C5\u99C6\u99C7\u99C8\u99C9\u99CA\u99CB\u99CC"+
-            "\u99CD\u99CE\u99CF\u99D0\u99D1\u99D3\u99D4\u99D5"+
-            "\u99D6\u99D7\u99D8\u99D9\u99DA\u99DB\u99DC\u99DD"+
-            "\u99E1\u99E2\u99E3\u99E4\u99E5\u99E6\u99E7\u99E8"+
-            "\u99E9\u99EA\u99EB\u99EC\u99ED\u99EE\u99EF\u99F0"+
-            "\u99F1\u99F3\u99F4\u99F5\u99F6\u99F7\u99F8\u99F9"+
-            "\u99FA\u99FB\u99FC\u99FD\u9A41\u9A42\u9A43\u9A44"+
-            "\u9A45\u9A46\u9A47\u9A48\u9A49\u9A4A\u9A4B\u9A4C"+
-            "\u9A4D\u9A4E\u9A4F\u9A50\u9A51\u9A53\u9A54\u9A55"+
-            "\u9A56\u9A57\u9A58\u9A59\u9A5A\u9A5B\u9A5C\u9A5D"+
-            "\u9A61\u9A62\u9A63\u9A64\u9A65\u9A66\u9A67\u9A68"+
-            "\u9A69\u9A6A\u9A6B\u9A6C\u9A6D\u9A6E\u9A6F\u9A70"+
-            "\u9A71\u9A73\u9A74\u9A75\u9A76\u9A77\u9A78\u9A79"+
-            "\u9A7A\u9A7B\u9A7C\u9A7D\u9A81\u9A82\u9A83\u9A84"+
-            "\u9A85\u9A86\u9A87\u9A88\u9A89\u9A8A\u9A8B\u9A8C"+
-            "\u9A8D\u9A8E\u9A8F\u9A90\u9A91\u9A93\u9A94\u9A95"+
-            "\u9A96\u9A97\u9A98\u9A99\u9A9A\u9A9B\u9A9C\u9A9D"+
-            "\u9AA1\u9AA2\u9AA3\u9AA4\u9AA5\u9AA6\u9AA7\u9AA8"+
-            "\u9AA9\u9AAA\u9AAB\u9AAC\u9AAD\u9AAE\u9AAF\u9AB0"+
-            "\u9AB1\u9AB3\u9AB4\u9AB5\u9AB6\u9AB7\u9AB8\u9AB9"+
-            "\u9ABA\u9ABB\u9ABC\u9ABD\u9AC1\u9AC2\u9AC3\u9AC4"+
-            "\u9AC5\u9AC6\u9AC7\u9AC8\u9AC9\u9ACA\u9ACB\u9ACC"+
-            "\u9ACD\u9ACE\u9ACF\u9AD0\u9AD1\u9AD3\u9AD4\u9AD5"+
-            "\u9AD6\u9AD7\u9AD8\u9AD9\u9ADA\u9ADB\u9ADC\u9ADD"+
-            "\u9AE1\u9AE2\u9AE3\u9AE4\u9AE5\u9AE6\u9AE7\u9AE8"+
-            "\u9AE9\u9AEA\u9AEB\u9AEC\u9AED\u9AEE\u9AEF\u9AF0"+
-            "\u9AF1\u9AF3\u9AF4\u9AF5\u9AF6\u9AF7\u9AF8\u9AF9"+
-            "\u9AFA\u9AFB\u9AFC\u9AFD\u9B41\u9B42\u9B43\u9B44"+
-            "\u9B45\u9B46\u9B47\u9B48\u9B49\u9B4A\u9B4B\u9B4C"+
-            "\u9B4D\u9B4E\u9B4F\u9B50\u9B51\u9B53\u9B54\u9B55"+
-            "\u9B56\u9B57\u9B58\u9B59\u9B5A\u9B5B\u9B5C\u9B5D"+
-            "\u9B61\u9B62\u9B63\u9B64\u9B65\u9B66\u9B67\u9B68"+
-            "\u9B69\u9B6A\u9B6B\u9B6C\u9B6D\u9B6E\u9B6F\u9B70"+
-            "\u9B71\u9B73\u9B74\u9B75\u9B76\u9B77\u9B78\u9B79"+
-            "\u9B7A\u9B7B\u9B7C\u9B7D\u9B81\u9B82\u9B83\u9B84"+
-            "\u9B85\u9B86\u9B87\u9B88\u9B89\u9B8A\u9B8B\u9B8C"+
-            "\u9B8D\u9B8E\u9B8F\u9B90\u9B91\u9B93\u9B94\u9B95"+
-            "\u9B96\u9B97\u9B98\u9B99\u9B9A\u9B9B\u9B9C\u9B9D"+
-            "\u9BA1\u9BA2\u9BA3\u9BA4\u9BA5\u9BA6\u9BA7\u9BA8"+
-            "\u9BA9\u9BAA\u9BAB\u9BAC\u9BAD\u9BAE\u9BAF\u9BB0"+
-            "\u9BB1\u9BB3\u9BB4\u9BB5\u9BB6\u9BB7\u9BB8\u9BB9"+
-            "\u9BBA\u9BBB\u9BBC\u9BBD\u9C61\u9C62\u9C63\u9C64"+
-            "\u9C65\u9C66\u9C67\u9C68\u9C69\u9C6A\u9C6B\u9C6C"+
-            "\u9C6D\u9C6E\u9C6F\u9C70\u9C71\u9C73\u9C74\u9C75"+
-            "\u9C76\u9C77\u9C78\u9C79\u9C7A\u9C7B\u9C7C\u9C7D"+
-            "\u9C81\u9C82\u9C83\u9C84\u9C85\u9C86\u9C87\u9C88"+
-            "\u9C89\u9C8A\u9C8B\u9C8C\u9C8D\u9C8E\u9C8F\u9C90"+
-            "\u9C91\u9C93\u9C94\u9C95\u9C96\u9C97\u9C98\u9C99"+
-            "\u9C9A\u9C9B\u9C9C\u9C9D\u9CA1\u9CA2\u9CA3\u9CA4"+
-            "\u9CA5\u9CA6\u9CA7\u9CA8\u9CA9\u9CAA\u9CAB\u9CAC"+
-            "\u9CAD\u9CAE\u9CAF\u9CB0\u9CB1\u9CB3\u9CB4\u9CB5"+
-            "\u9CB6\u9CB7\u9CB8\u9CB9\u9CBA\u9CBB\u9CBC\u9CBD"+
-            "\u9CC1\u9CC2\u9CC3\u9CC4\u9CC5\u9CC6\u9CC7\u9CC8"+
-            "\u9CC9\u9CCA\u9CCB\u9CCC\u9CCD\u9CCE\u9CCF\u9CD0"+
-            "\u9CD1\u9CD3\u9CD4\u9CD5\u9CD6\u9CD7\u9CD8\u9CD9"+
-            "\u9CDA\u9CDB\u9CDC\u9CDD\u9CE1\u9CE2\u9CE3\u9CE4"+
-            "\u9CE5\u9CE6\u9CE7\u9CE8\u9CE9\u9CEA\u9CEB\u9CEC"+
-            "\u9CED\u9CEE\u9CEF\u9CF0\u9CF1\u9CF3\u9CF4\u9CF5"+
-            "\u9CF6\u9CF7\u9CF8\u9CF9\u9CFA\u9CFB\u9CFC\u9CFD"+
-            "\u9D41\u9D42\u9D43\u9D44\u9D45\u9D46\u9D47\u9D48"+
-            "\u9D49\u9D4A\u9D4B\u9D4C\u9D4D\u9D4E\u9D4F\u9D50"+
-            "\u9D51\u9D53\u9D54\u9D55\u9D56\u9D57\u9D58\u9D59"+
-            "\u9D5A\u9D5B\u9D5C\u9D5D\u9D61\u9D62\u9D63\u9D64"+
-            "\u9D65\u9D66\u9D67\u9D68\u9D69\u9D6A\u9D6B\u9D6C"+
-            "\u9D6D\u9D6E\u9D6F\u9D70\u9D71\u9D73\u9D74\u9D75"+
-            "\u9D76\u9D77\u9D78\u9D79\u9D7A\u9D7B\u9D7C\u9D7D"+
-            "\u9D81\u9D82\u9D83\u9D84\u9D85\u9D86\u9D87\u9D88"+
-            "\u9D89\u9D8A\u9D8B\u9D8C\u9D8D\u9D8E\u9D8F\u9D90"+
-            "\u9D91\u9D93\u9D94\u9D95\u9D96\u9D97\u9D98\u9D99"+
-            "\u9D9A\u9D9B\u9D9C\u9D9D\u9DA1\u9DA2\u9DA3\u9DA4"+
-            "\u9DA5\u9DA6\u9DA7\u9DA8\u9DA9\u9DAA\u9DAB\u9DAC"+
-            "\u9DAD\u9DAE\u9DAF\u9DB0\u9DB1\u9DB3\u9DB4\u9DB5"+
-            "\u9DB6\u9DB7\u9DB8\u9DB9\u9DBA\u9DBB\u9DBC\u9DBD"+
-            "\u9DC1\u9DC2\u9DC3\u9DC4\u9DC5\u9DC6\u9DC7\u9DC8"+
-            "\u9DC9\u9DCA\u9DCB\u9DCC\u9DCD\u9DCE\u9DCF\u9DD0"+
-            "\u9DD1\u9DD3\u9DD4\u9DD5\u9DD6\u9DD7\u9DD8\u9DD9"+
-            "\u9DDA\u9DDB\u9DDC\u9DDD\u9DE1\u9DE2\u9DE3\u9DE4"+
-            "\u9DE5\u9DE6\u9DE7\u9DE8\u9DE9\u9DEA\u9DEB\u9DEC"+
-            "\u9DED\u9DEE\u9DEF\u9DF0\u9DF1\u9DF3\u9DF4\u9DF5"+
-            "\u9DF6\u9DF7\u9DF8\u9DF9\u9DFA\u9DFB\u9DFC\u9DFD"+
-            "\u9E41\u9E42\u9E43\u9E44\u9E45\u9E46\u9E47\u9E48"+
-            "\u9E49\u9E4A\u9E4B\u9E4C\u9E4D\u9E4E\u9E4F\u9E50"+
-            "\u9E51\u9E53\u9E54\u9E55\u9E56\u9E57\u9E58\u9E59"+
-            "\u9E5A\u9E5B\u9E5C\u9E5D\u9E61\u9E62\u9E63\u9E64"+
-            "\u9E65\u9E66\u9E67\u9E68\u9E69\u9E6A\u9E6B\u9E6C"+
-            "\u9E6D\u9E6E\u9E6F\u9E70\u9E71\u9E73\u9E74\u9E75"+
-            "\u9E76\u9E77\u9E78\u9E79\u9E7A\u9E7B\u9E7C\u9E7D"+
-            "\u9E81\u9E82\u9E83\u9E84\u9E85\u9E86\u9E87\u9E88"+
-            "\u9E89\u9E8A\u9E8B\u9E8C\u9E8D\u9E8E\u9E8F\u9E90"+
-            "\u9E91\u9E93\u9E94\u9E95\u9E96\u9E97\u9E98\u9E99";
-
-        private final static String innerIndex7=
-            "\u9E9A\u9E9B\u9E9C\u9E9D\u9EA1\u9EA2\u9EA3\u9EA4"+
-            "\u9EA5\u9EA6\u9EA7\u9EA8\u9EA9\u9EAA\u9EAB\u9EAC"+
-            "\u9EAD\u9EAE\u9EAF\u9EB0\u9EB1\u9EB3\u9EB4\u9EB5"+
-            "\u9EB6\u9EB7\u9EB8\u9EB9\u9EBA\u9EBB\u9EBC\u9EBD"+
-            "\u9EC1\u9EC2\u9EC3\u9EC4\u9EC5\u9EC6\u9EC7\u9EC8"+
-            "\u9EC9\u9ECA\u9ECB\u9ECC\u9ECD\u9ECE\u9ECF\u9ED0"+
-            "\u9ED1\u9ED3\u9ED4\u9ED5\u9ED6\u9ED7\u9ED8\u9ED9"+
-            "\u9EDA\u9EDB\u9EDC\u9EDD\u9EE1\u9EE2\u9EE3\u9EE4"+
-            "\u9EE5\u9EE6\u9EE7\u9EE8\u9EE9\u9EEA\u9EEB\u9EEC"+
-            "\u9EED\u9EEE\u9EEF\u9EF0\u9EF1\u9EF3\u9EF4\u9EF5"+
-            "\u9EF6\u9EF7\u9EF8\u9EF9\u9EFA\u9EFB\u9EFC\u9EFD"+
-            "\u9F41\u9F42\u9F43\u9F44\u9F45\u9F46\u9F47\u9F48"+
-            "\u9F49\u9F4A\u9F4B\u9F4C\u9F4D\u9F4E\u9F4F\u9F50"+
-            "\u9F51\u9F53\u9F54\u9F55\u9F56\u9F57\u9F58\u9F59"+
-            "\u9F5A\u9F5B\u9F5C\u9F5D\u9F61\u9F62\u9F63\u9F64"+
-            "\u9F65\u9F66\u9F67\u9F68\u9F69\u9F6A\u9F6B\u9F6C"+
-            "\u9F6D\u9F6E\u9F6F\u9F70\u9F71\u9F73\u9F74\u9F75"+
-            "\u9F76\u9F77\u9F78\u9F79\u9F7A\u9F7B\u9F7C\u9F7D"+
-            "\u9F81\u9F82\u9F83\u9F84\u9F85\u9F86\u9F87\u9F88"+
-            "\u9F89\u9F8A\u9F8B\u9F8C\u9F8D\u9F8E\u9F8F\u9F90"+
-            "\u9F91\u9F93\u9F94\u9F95\u9F96\u9F97\u9F98\u9F99"+
-            "\u9F9A\u9F9B\u9F9C\u9F9D\u9FA1\u9FA2\u9FA3\u9FA4"+
-            "\u9FA5\u9FA6\u9FA7\u9FA8\u9FA9\u9FAA\u9FAB\u9FAC"+
-            "\u9FAD\u9FAE\u9FAF\u9FB0\u9FB1\u9FB3\u9FB4\u9FB5"+
-            "\u9FB6\u9FB7\u9FB8\u9FB9\u9FBA\u9FBB\u9FBC\u9FBD"+
-            "\uA061\uA062\uA063\uA064\uA065\uA066\uA067\uA068"+
-            "\uA069\uA06A\uA06B\uA06C\uA06D\uA06E\uA06F\uA070"+
-            "\uA071\uA073\uA074\uA075\uA076\uA077\uA078\uA079"+
-            "\uA07A\uA07B\uA07C\uA07D\uA081\uA082\uA083\uA084"+
-            "\uA085\uA086\uA087\uA088\uA089\uA08A\uA08B\uA08C"+
-            "\uA08D\uA08E\uA08F\uA090\uA091\uA093\uA094\uA095"+
-            "\uA096\uA097\uA098\uA099\uA09A\uA09B\uA09C\uA09D"+
-            "\uA0A1\uA0A2\uA0A3\uA0A4\uA0A5\uA0A6\uA0A7\uA0A8"+
-            "\uA0A9\uA0AA\uA0AB\uA0AC\uA0AD\uA0AE\uA0AF\uA0B0"+
-            "\uA0B1\uA0B3\uA0B4\uA0B5\uA0B6\uA0B7\uA0B8\uA0B9"+
-            "\uA0BA\uA0BB\uA0BC\uA0BD\uA0C1\uA0C2\uA0C3\uA0C4"+
-            "\uA0C5\uA0C6\uA0C7\uA0C8\uA0C9\uA0CA\uA0CB\uA0CC"+
-            "\uA0CD\uA0CE\uA0CF\uA0D0\uA0D1\uA0D3\uA0D4\uA0D5"+
-            "\uA0D6\uA0D7\uA0D8\uA0D9\uA0DA\uA0DB\uA0DC\uA0DD"+
-            "\uA0E1\uA0E2\uA0E3\uA0E4\uA0E5\uA0E6\uA0E7\uA0E8"+
-            "\uA0E9\uA0EA\uA0EB\uA0EC\uA0ED\uA0EE\uA0EF\uA0F0"+
-            "\uA0F1\uA0F3\uA0F4\uA0F5\uA0F6\uA0F7\uA0F8\uA0F9"+
-            "\uA0FA\uA0FB\uA0FC\uA0FD\uA141\uA142\uA143\uA144"+
-            "\uA145\uA146\uA147\uA148\uA149\uA14A\uA14B\uA14C"+
-            "\uA14D\uA14E\uA14F\uA150\uA151\uA153\uA154\uA155"+
-            "\uA156\uA157\uA158\uA159\uA15A\uA15B\uA15C\uA15D"+
-            "\uA161\uA162\uA163\uA164\uA165\uA166\uA167\uA168"+
-            "\uA169\uA16A\uA16B\uA16C\uA16D\uA16E\uA16F\uA170"+
-            "\uA171\uA173\uA174\uA175\uA176\uA177\uA178\uA179"+
-            "\uA17A\uA17B\uA17C\uA17D\uA181\uA182\uA183\uA184"+
-            "\uA185\uA186\uA187\uA188\uA189\uA18A\uA18B\uA18C"+
-            "\uA18D\uA18E\uA18F\uA190\uA191\uA193\uA194\uA195"+
-            "\uA196\uA197\uA198\uA199\uA19A\uA19B\uA19C\uA19D"+
-            "\uA1A1\uA1A2\uA1A3\uA1A4\uA1A5\uA1A6\uA1A7\uA1A8"+
-            "\uA1A9\uA1AA\uA1AB\uA1AC\uA1AD\uA1AE\uA1AF\uA1B0"+
-            "\uA1B1\uA1B3\uA1B4\uA1B5\uA1B6\uA1B7\uA1B8\uA1B9"+
-            "\uA1BA\uA1BB\uA1BC\uA1BD\uA1C1\uA1C2\uA1C3\uA1C4"+
-            "\uA1C5\uA1C6\uA1C7\uA1C8\uA1C9\uA1CA\uA1CB\uA1CC"+
-            "\uA1CD\uA1CE\uA1CF\uA1D0\uA1D1\uA1D3\uA1D4\uA1D5"+
-            "\uA1D6\uA1D7\uA1D8\uA1D9\uA1DA\uA1DB\uA1DC\uA1DD"+
-            "\uA1E1\uA1E2\uA1E3\uA1E4\uA1E5\uA1E6\uA1E7\uA1E8"+
-            "\uA1E9\uA1EA\uA1EB\uA1EC\uA1ED\uA1EE\uA1EF\uA1F0"+
-            "\uA1F1\uA1F3\uA1F4\uA1F5\uA1F6\uA1F7\uA1F8\uA1F9"+
-            "\uA1FA\uA1FB\uA1FC\uA1FD\uA241\uA242\uA243\uA244"+
-            "\uA245\uA246\uA247\uA248\uA249\uA24A\uA24B\uA24C"+
-            "\uA24D\uA24E\uA24F\uA250\uA251\uA253\uA254\uA255"+
-            "\uA256\uA257\uA258\uA259\uA25A\uA25B\uA25C\uA25D"+
-            "\uA261\uA262\uA263\uA264\uA265\uA266\uA267\uA268"+
-            "\uA269\uA26A\uA26B\uA26C\uA26D\uA26E\uA26F\uA270"+
-            "\uA271\uA273\uA274\uA275\uA276\uA277\uA278\uA279"+
-            "\uA27A\uA27B\uA27C\uA27D\uA281\uA282\uA283\uA284"+
-            "\uA285\uA286\uA287\uA288\uA289\uA28A\uA28B\uA28C"+
-            "\uA28D\uA28E\uA28F\uA290\uA291\uA293\uA294\uA295"+
-            "\uA296\uA297\uA298\uA299\uA29A\uA29B\uA29C\uA29D"+
-            "\uA2A1\uA2A2\uA2A3\uA2A4\uA2A5\uA2A6\uA2A7\uA2A8"+
-            "\uA2A9\uA2AA\uA2AB\uA2AC\uA2AD\uA2AE\uA2AF\uA2B0"+
-            "\uA2B1\uA2B3\uA2B4\uA2B5\uA2B6\uA2B7\uA2B8\uA2B9"+
-            "\uA2BA\uA2BB\uA2BC\uA2BD\uA2C1\uA2C2\uA2C3\uA2C4"+
-            "\uA2C5\uA2C6\uA2C7\uA2C8\uA2C9\uA2CA\uA2CB\uA2CC"+
-            "\uA2CD\uA2CE\uA2CF\uA2D0\uA2D1\uA2D3\uA2D4\uA2D5"+
-            "\uA2D6\uA2D7\uA2D8\uA2D9\uA2DA\uA2DB\uA2DC\uA2DD"+
-            "\uA2E1\uA2E2\uA2E3\uA2E4\uA2E5\uA2E6\uA2E7\uA2E8"+
-            "\uA2E9\uA2EA\uA2EB\uA2EC\uA2ED\uA2EE\uA2EF\uA2F0"+
-            "\uA2F1\uA2F3\uA2F4\uA2F5\uA2F6\uA2F7\uA2F8\uA2F9"+
-            "\uA2FA\uA2FB\uA2FC\uA2FD\uA341\uA342\uA343\uA344"+
-            "\uA345\uA346\uA347\uA348\uA349\uA34A\uA34B\uA34C"+
-            "\uA34D\uA34E\uA34F\uA350\uA351\uA353\uA354\uA355"+
-            "\uA356\uA357\uA358\uA359\uA35A\uA35B\uA35C\uA35D"+
-            "\uA361\uA362\uA363\uA364\uA365\uA366\uA367\uA368"+
-            "\uA369\uA36A\uA36B\uA36C\uA36D\uA36E\uA36F\uA370"+
-            "\uA371\uA373\uA374\uA375\uA376\uA377\uA378\uA379"+
-            "\uA37A\uA37B\uA37C\uA37D\uA381\uA382\uA383\uA384"+
-            "\uA385\uA386\uA387\uA388\uA389\uA38A\uA38B\uA38C"+
-            "\uA38D\uA38E\uA38F\uA390\uA391\uA393\uA394\uA395"+
-            "\uA396\uA397\uA398\uA399\uA39A\uA39B\uA39C\uA39D"+
-            "\uA3A1\uA3A2\uA3A3\uA3A4\uA3A5\uA3A6\uA3A7\uA3A8"+
-            "\uA3A9\uA3AA\uA3AB\uA3AC\uA3AD\uA3AE\uA3AF\uA3B0"+
-            "\uA3B1\uA3B3\uA3B4\uA3B5\uA3B6\uA3B7\uA3B8\uA3B9"+
-            "\uA3BA\uA3BB\uA3BC\uA3BD\uA461\uA462\uA463\uA464"+
-            "\uA465\uA466\uA467\uA468\uA469\uA46A\uA46B\uA46C"+
-            "\uA46D\uA46E\uA46F\uA470\uA471\uA473\uA474\uA475"+
-            "\uA476\uA477\uA478\uA479\uA47A\uA47B\uA47C\uA47D"+
-            "\uA481\uA482\uA483\uA484\uA485\uA486\uA487\uA488"+
-            "\uA489\uA48A\uA48B\uA48C\uA48D\uA48E\uA48F\uA490"+
-            "\uA491\uA493\uA494\uA495\uA496\uA497\uA498\uA499"+
-            "\uA49A\uA49B\uA49C\uA49D\uA4A1\uA4A2\uA4A3\uA4A4"+
-            "\uA4A5\uA4A6\uA4A7\uA4A8\uA4A9\uA4AA\uA4AB\uA4AC"+
-            "\uA4AD\uA4AE\uA4AF\uA4B0\uA4B1\uA4B3\uA4B4\uA4B5"+
-            "\uA4B6\uA4B7\uA4B8\uA4B9\uA4BA\uA4BB\uA4BC\uA4BD"+
-            "\uA4C1\uA4C2\uA4C3\uA4C4\uA4C5\uA4C6\uA4C7\uA4C8"+
-            "\uA4C9\uA4CA\uA4CB\uA4CC\uA4CD\uA4CE\uA4CF\uA4D0"+
-            "\uA4D1\uA4D3\uA4D4\uA4D5\uA4D6\uA4D7\uA4D8\uA4D9"+
-            "\uA4DA\uA4DB\uA4DC\uA4DD\uA4E1\uA4E2\uA4E3\uA4E4"+
-            "\uA4E5\uA4E6\uA4E7\uA4E8\uA4E9\uA4EA\uA4EB\uA4EC"+
-            "\uA4ED\uA4EE\uA4EF\uA4F0\uA4F1\uA4F3\uA4F4\uA4F5"+
-            "\uA4F6\uA4F7\uA4F8\uA4F9\uA4FA\uA4FB\uA4FC\uA4FD"+
-            "\uA541\uA542\uA543\uA544\uA545\uA546\uA547\uA548"+
-            "\uA549\uA54A\uA54B\uA54C\uA54D\uA54E\uA54F\uA550"+
-            "\uA551\uA553\uA554\uA555\uA556\uA557\uA558\uA559"+
-            "\uA55A\uA55B\uA55C\uA55D\uA561\uA562\uA563\uA564"+
-            "\uA565\uA566\uA567\uA568\uA569\uA56A\uA56B\uA56C"+
-            "\uA56D\uA56E\uA56F\uA570\uA571\uA573\uA574\uA575"+
-            "\uA576\uA577\uA578\uA579\uA57A\uA57B\uA57C\uA57D"+
-            "\uA581\uA582\uA583\uA584\uA585\uA586\uA587\uA588"+
-            "\uA589\uA58A\uA58B\uA58C\uA58D\uA58E\uA58F\uA590"+
-            "\uA591\uA593\uA594\uA595\uA596\uA597\uA598\uA599"+
-            "\uA59A\uA59B\uA59C\uA59D\uA5A1\uA5A2\uA5A3\uA5A4"+
-            "\uA5A5\uA5A6\uA5A7\uA5A8\uA5A9\uA5AA\uA5AB\uA5AC"+
-            "\uA5AD\uA5AE\uA5AF\uA5B0\uA5B1\uA5B3\uA5B4\uA5B5"+
-            "\uA5B6\uA5B7\uA5B8\uA5B9\uA5BA\uA5BB\uA5BC\uA5BD"+
-            "\uA5C1\uA5C2\uA5C3\uA5C4\uA5C5\uA5C6\uA5C7\uA5C8"+
-            "\uA5C9\uA5CA\uA5CB\uA5CC\uA5CD\uA5CE\uA5CF\uA5D0"+
-            "\uA5D1\uA5D3\uA5D4\uA5D5\uA5D6\uA5D7\uA5D8\uA5D9"+
-            "\uA5DA\uA5DB\uA5DC\uA5DD\uA5E1\uA5E2\uA5E3\uA5E4"+
-            "\uA5E5\uA5E6\uA5E7\uA5E8\uA5E9\uA5EA\uA5EB\uA5EC"+
-            "\uA5ED\uA5EE\uA5EF\uA5F0\uA5F1\uA5F3\uA5F4\uA5F5"+
-            "\uA5F6\uA5F7\uA5F8\uA5F9\uA5FA\uA5FB\uA5FC\uA5FD"+
-            "\uA641\uA642\uA643\uA644\uA645\uA646\uA647\uA648"+
-            "\uA649\uA64A\uA64B\uA64C\uA64D\uA64E\uA64F\uA650"+
-            "\uA651\uA653\uA654\uA655\uA656\uA657\uA658\uA659"+
-            "\uA65A\uA65B\uA65C\uA65D\uA661\uA662\uA663\uA664"+
-            "\uA665\uA666\uA667\uA668\uA669\uA66A\uA66B\uA66C"+
-            "\uA66D\uA66E\uA66F\uA670\uA671\uA673\uA674\uA675"+
-            "\uA676\uA677\uA678\uA679\uA67A\uA67B\uA67C\uA67D"+
-            "\uA681\uA682\uA683\uA684\uA685\uA686\uA687\uA688"+
-            "\uA689\uA68A\uA68B\uA68C\uA68D\uA68E\uA68F\uA690"+
-            "\uA691\uA693\uA694\uA695\uA696\uA697\uA698\uA699"+
-            "\uA69A\uA69B\uA69C\uA69D\uA6A1\uA6A2\uA6A3\uA6A4"+
-            "\uA6A5\uA6A6\uA6A7\uA6A8\uA6A9\uA6AA\uA6AB\uA6AC"+
-            "\uA6AD\uA6AE\uA6AF\uA6B0\uA6B1\uA6B3\uA6B4\uA6B5"+
-            "\uA6B6\uA6B7\uA6B8\uA6B9\uA6BA\uA6BB\uA6BC\uA6BD"+
-            "\uA6C1\uA6C2\uA6C3\uA6C4\uA6C5\uA6C6\uA6C7\uA6C8"+
-            "\uA6C9\uA6CA\uA6CB\uA6CC\uA6CD\uA6CE\uA6CF\uA6D0"+
-            "\uA6D1\uA6D3\uA6D4\uA6D5\uA6D6\uA6D7\uA6D8\uA6D9"+
-            "\uA6DA\uA6DB\uA6DC\uA6DD\uA6E1\uA6E2\uA6E3\uA6E4"+
-            "\uA6E5\uA6E6\uA6E7\uA6E8\uA6E9\uA6EA\uA6EB\uA6EC"+
-            "\uA6ED\uA6EE\uA6EF\uA6F0\uA6F1\uA6F3\uA6F4\uA6F5"+
-            "\uA6F6\uA6F7\uA6F8\uA6F9\uA6FA\uA6FB\uA6FC\uA6FD"+
-            "\uA741\uA742\uA743\uA744\uA745\uA746\uA747\uA748"+
-            "\uA749\uA74A\uA74B\uA74C\uA74D\uA74E\uA74F\uA750"+
-            "\uA751\uA753\uA754\uA755\uA756\uA757\uA758\uA759"+
-            "\uA75A\uA75B\uA75C\uA75D\uA761\uA762\uA763\uA764"+
-            "\uA765\uA766\uA767\uA768\uA769\uA76A\uA76B\uA76C"+
-            "\uA76D\uA76E\uA76F\uA770\uA771\uA773\uA774\uA775"+
-            "\uA776\uA777\uA778\uA779\uA77A\uA77B\uA77C\uA77D"+
-            "\uA781\uA782\uA783\uA784\uA785\uA786\uA787\uA788"+
-            "\uA789\uA78A\uA78B\uA78C\uA78D\uA78E\uA78F\uA790"+
-            "\uA791\uA793\uA794\uA795\uA796\uA797\uA798\uA799"+
-            "\uA79A\uA79B\uA79C\uA79D\uA7A1\uA7A2\uA7A3\uA7A4"+
-            "\uA7A5\uA7A6\uA7A7\uA7A8\uA7A9\uA7AA\uA7AB\uA7AC"+
-            "\uA7AD\uA7AE\uA7AF\uA7B0\uA7B1\uA7B3\uA7B4\uA7B5"+
-            "\uA7B6\uA7B7\uA7B8\uA7B9\uA7BA\uA7BB\uA7BC\uA7BD"+
-            "\uA861\uA862\uA863\uA864\uA865\uA866\uA867\uA868"+
-            "\uA869\uA86A\uA86B\uA86C\uA86D\uA86E\uA86F\uA870"+
-            "\uA871\uA873\uA874\uA875\uA876\uA877\uA878\uA879"+
-            "\uA87A\uA87B\uA87C\uA87D\uA881\uA882\uA883\uA884"+
-            "\uA885\uA886\uA887\uA888\uA889\uA88A\uA88B\uA88C"+
-            "\uA88D\uA88E\uA88F\uA890\uA891\uA893\uA894\uA895"+
-            "\uA896\uA897\uA898\uA899\uA89A\uA89B\uA89C\uA89D"+
-            "\uA8A1\uA8A2\uA8A3\uA8A4\uA8A5\uA8A6\uA8A7\uA8A8"+
-            "\uA8A9\uA8AA\uA8AB\uA8AC\uA8AD\uA8AE\uA8AF\uA8B0"+
-            "\uA8B1\uA8B3\uA8B4\uA8B5\uA8B6\uA8B7\uA8B8\uA8B9"+
-            "\uA8BA\uA8BB\uA8BC\uA8BD\uA8C1\uA8C2\uA8C3\uA8C4"+
-            "\uA8C5\uA8C6\uA8C7\uA8C8\uA8C9\uA8CA\uA8CB\uA8CC"+
-            "\uA8CD\uA8CE\uA8CF\uA8D0\uA8D1\uA8D3\uA8D4\uA8D5"+
-            "\uA8D6\uA8D7\uA8D8\uA8D9\uA8DA\uA8DB\uA8DC\uA8DD"+
-            "\uA8E1\uA8E2\uA8E3\uA8E4\uA8E5\uA8E6\uA8E7\uA8E8"+
-            "\uA8E9\uA8EA\uA8EB\uA8EC\uA8ED\uA8EE\uA8EF\uA8F0"+
-            "\uA8F1\uA8F3\uA8F4\uA8F5\uA8F6\uA8F7\uA8F8\uA8F9"+
-            "\uA8FA\uA8FB\uA8FC\uA8FD\uA941\uA942\uA943\uA944"+
-            "\uA945\uA946\uA947\uA948\uA949\uA94A\uA94B\uA94C"+
-            "\uA94D\uA94E\uA94F\uA950\uA951\uA953\uA954\uA955"+
-            "\uA956\uA957\uA958\uA959\uA95A\uA95B\uA95C\uA95D"+
-            "\uA961\uA962\uA963\uA964\uA965\uA966\uA967\uA968"+
-            "\uA969\uA96A\uA96B\uA96C\uA96D\uA96E\uA96F\uA970"+
-            "\uA971\uA973\uA974\uA975\uA976\uA977\uA978\uA979"+
-            "\uA97A\uA97B\uA97C\uA97D\uA981\uA982\uA983\uA984"+
-            "\uA985\uA986\uA987\uA988\uA989\uA98A\uA98B\uA98C"+
-            "\uA98D\uA98E\uA98F\uA990\uA991\uA993\uA994\uA995"+
-            "\uA996\uA997\uA998\uA999\uA99A\uA99B\uA99C\uA99D"+
-            "\uA9A1\uA9A2\uA9A3\uA9A4\uA9A5\uA9A6\uA9A7\uA9A8"+
-            "\uA9A9\uA9AA\uA9AB\uA9AC\uA9AD\uA9AE\uA9AF\uA9B0"+
-            "\uA9B1\uA9B3\uA9B4\uA9B5\uA9B6\uA9B7\uA9B8\uA9B9"+
-            "\uA9BA\uA9BB\uA9BC\uA9BD\uA9C1\uA9C2\uA9C3\uA9C4"+
-            "\uA9C5\uA9C6\uA9C7\uA9C8\uA9C9\uA9CA\uA9CB\uA9CC"+
-            "\uA9CD\uA9CE\uA9CF\uA9D0\uA9D1\uA9D3\uA9D4\uA9D5"+
-            "\uA9D6\uA9D7\uA9D8\uA9D9\uA9DA\uA9DB\uA9DC\uA9DD"+
-            "\uA9E1\uA9E2\uA9E3\uA9E4\uA9E5\uA9E6\uA9E7\uA9E8"+
-            "\uA9E9\uA9EA\uA9EB\uA9EC\uA9ED\uA9EE\uA9EF\uA9F0"+
-            "\uA9F1\uA9F3\uA9F4\uA9F5\uA9F6\uA9F7\uA9F8\uA9F9"+
-            "\uA9FA\uA9FB\uA9FC\uA9FD\uAA41\uAA42\uAA43\uAA44"+
-            "\uAA45\uAA46\uAA47\uAA48\uAA49\uAA4A\uAA4B\uAA4C"+
-            "\uAA4D\uAA4E\uAA4F\uAA50\uAA51\uAA53\uAA54\uAA55"+
-            "\uAA56\uAA57\uAA58\uAA59\uAA5A\uAA5B\uAA5C\uAA5D"+
-            "\uAA61\uAA62\uAA63\uAA64\uAA65\uAA66\uAA67\uAA68"+
-            "\uAA69\uAA6A\uAA6B\uAA6C\uAA6D\uAA6E\uAA6F\uAA70"+
-            "\uAA71\uAA73\uAA74\uAA75\uAA76\uAA77\uAA78\uAA79"+
-            "\uAA7A\uAA7B\uAA7C\uAA7D\uAA81\uAA82\uAA83\uAA84"+
-            "\uAA85\uAA86\uAA87\uAA88\uAA89\uAA8A\uAA8B\uAA8C"+
-            "\uAA8D\uAA8E\uAA8F\uAA90\uAA91\uAA93\uAA94\uAA95"+
-            "\uAA96\uAA97\uAA98\uAA99\uAA9A\uAA9B\uAA9C\uAA9D"+
-            "\uAAA1\uAAA2\uAAA3\uAAA4\uAAA5\uAAA6\uAAA7\uAAA8"+
-            "\uAAA9\uAAAA\uAAAB\uAAAC\uAAAD\uAAAE\uAAAF\uAAB0"+
-            "\uAAB1\uAAB3\uAAB4\uAAB5\uAAB6\uAAB7\uAAB8\uAAB9"+
-            "\uAABA\uAABB\uAABC\uAABD\uAAC1\uAAC2\uAAC3\uAAC4"+
-            "\uAAC5\uAAC6\uAAC7\uAAC8\uAAC9\uAACA\uAACB\uAACC"+
-            "\uAACD\uAACE\uAACF\uAAD0\uAAD1\uAAD3\uAAD4\uAAD5"+
-            "\uAAD6\uAAD7\uAAD8\uAAD9\uAADA\uAADB\uAADC\uAADD"+
-            "\uAAE1\uAAE2\uAAE3\uAAE4\uAAE5\uAAE6\uAAE7\uAAE8"+
-            "\uAAE9\uAAEA\uAAEB\uAAEC\uAAED\uAAEE\uAAEF\uAAF0"+
-            "\uAAF1\uAAF3\uAAF4\uAAF5\uAAF6\uAAF7\uAAF8\uAAF9"+
-            "\uAAFA\uAAFB\uAAFC\uAAFD\uAB41\uAB42\uAB43\uAB44"+
-            "\uAB45\uAB46\uAB47\uAB48\uAB49\uAB4A\uAB4B\uAB4C"+
-            "\uAB4D\uAB4E\uAB4F\uAB50\uAB51\uAB53\uAB54\uAB55"+
-            "\uAB56\uAB57\uAB58\uAB59\uAB5A\uAB5B\uAB5C\uAB5D"+
-            "\uAB61\uAB62\uAB63\uAB64\uAB65\uAB66\uAB67\uAB68"+
-            "\uAB69\uAB6A\uAB6B\uAB6C\uAB6D\uAB6E\uAB6F\uAB70"+
-            "\uAB71\uAB73\uAB74\uAB75\uAB76\uAB77\uAB78\uAB79"+
-            "\uAB7A\uAB7B\uAB7C\uAB7D\uAB81\uAB82\uAB83\uAB84"+
-            "\uAB85\uAB86\uAB87\uAB88\uAB89\uAB8A\uAB8B\uAB8C"+
-            "\uAB8D\uAB8E\uAB8F\uAB90\uAB91\uAB93\uAB94\uAB95"+
-            "\uAB96\uAB97\uAB98\uAB99\uAB9A\uAB9B\uAB9C\uAB9D"+
-            "\uABA1\uABA2\uABA3\uABA4\uABA5\uABA6\uABA7\uABA8"+
-            "\uABA9\uABAA\uABAB\uABAC\uABAD\uABAE\uABAF\uABB0"+
-            "\uABB1\uABB3\uABB4\uABB5\uABB6\uABB7\uABB8\uABB9"+
-            "\uABBA\uABBB\uABBC\uABBD\uAC61\uAC62\uAC63\uAC64"+
-            "\uAC65\uAC66\uAC67\uAC68\uAC69\uAC6A\uAC6B\uAC6C"+
-            "\uAC6D\uAC6E\uAC6F\uAC70\uAC71\uAC73\uAC74\uAC75"+
-            "\uAC76\uAC77\uAC78\uAC79\uAC7A\uAC7B\uAC7C\uAC7D"+
-            "\uAC81\uAC82\uAC83\uAC84\uAC85\uAC86\uAC87\uAC88"+
-            "\uAC89\uAC8A\uAC8B\uAC8C\uAC8D\uAC8E\uAC8F\uAC90"+
-            "\uAC91\uAC93\uAC94\uAC95\uAC96\uAC97\uAC98\uAC99"+
-            "\uAC9A\uAC9B\uAC9C\uAC9D\uACA1\uACA2\uACA3\uACA4"+
-            "\uACA5\uACA6\uACA7\uACA8\uACA9\uACAA\uACAB\uACAC"+
-            "\uACAD\uACAE\uACAF\uACB0\uACB1\uACB3\uACB4\uACB5"+
-            "\uACB6\uACB7\uACB8\uACB9\uACBA\uACBB\uACBC\uACBD"+
-            "\uACC1\uACC2\uACC3\uACC4\uACC5\uACC6\uACC7\uACC8"+
-            "\uACC9\uACCA\uACCB\uACCC\uACCD\uACCE\uACCF\uACD0"+
-            "\uACD1\uACD3\uACD4\uACD5\uACD6\uACD7\uACD8\uACD9"+
-            "\uACDA\uACDB\uACDC\uACDD\uACE1\uACE2\uACE3\uACE4"+
-            "\uACE5\uACE6\uACE7\uACE8\uACE9\uACEA\uACEB\uACEC"+
-            "\uACED\uACEE\uACEF\uACF0\uACF1\uACF3\uACF4\uACF5"+
-            "\uACF6\uACF7\uACF8\uACF9\uACFA\uACFB\uACFC\uACFD"+
-            "\uAD41\uAD42\uAD43\uAD44\uAD45\uAD46\uAD47\uAD48"+
-            "\uAD49\uAD4A\uAD4B\uAD4C\uAD4D\uAD4E\uAD4F\uAD50"+
-            "\uAD51\uAD53\uAD54\uAD55\uAD56\uAD57\uAD58\uAD59"+
-            "\uAD5A\uAD5B\uAD5C\uAD5D\uAD61\uAD62\uAD63\uAD64"+
-            "\uAD65\uAD66\uAD67\uAD68\uAD69\uAD6A\uAD6B\uAD6C"+
-            "\uAD6D\uAD6E\uAD6F\uAD70\uAD71\uAD73\uAD74\uAD75"+
-            "\uAD76\uAD77\uAD78\uAD79\uAD7A\uAD7B\uAD7C\uAD7D"+
-            "\uAD81\uAD82\uAD83\uAD84\uAD85\uAD86\uAD87\uAD88"+
-            "\uAD89\uAD8A\uAD8B\uAD8C\uAD8D\uAD8E\uAD8F\uAD90"+
-            "\uAD91\uAD93\uAD94\uAD95\uAD96\uAD97\uAD98\uAD99"+
-            "\uAD9A\uAD9B\uAD9C\uAD9D\uADA1\uADA2\uADA3\uADA4"+
-            "\uADA5\uADA6\uADA7\uADA8\uADA9\uADAA\uADAB\uADAC"+
-            "\uADAD\uADAE\uADAF\uADB0\uADB1\uADB3\uADB4\uADB5"+
-            "\uADB6\uADB7\uADB8\uADB9\uADBA\uADBB\uADBC\uADBD"+
-            "\uADC1\uADC2\uADC3\uADC4\uADC5\uADC6\uADC7\uADC8"+
-            "\uADC9\uADCA\uADCB\uADCC\uADCD\uADCE\uADCF\uADD0"+
-            "\uADD1\uADD3\uADD4\uADD5\uADD6\uADD7\uADD8\uADD9"+
-            "\uADDA\uADDB\uADDC\uADDD\uADE1\uADE2\uADE3\uADE4"+
-            "\uADE5\uADE6\uADE7\uADE8\uADE9\uADEA\uADEB\uADEC"+
-            "\uADED\uADEE\uADEF\uADF0\uADF1\uADF3\uADF4\uADF5"+
-            "\uADF6\uADF7\uADF8\uADF9\uADFA\uADFB\uADFC\uADFD"+
-            "\uAE41\uAE42\uAE43\uAE44\uAE45\uAE46\uAE47\uAE48"+
-            "\uAE49\uAE4A\uAE4B\uAE4C\uAE4D\uAE4E\uAE4F\uAE50"+
-            "\uAE51\uAE53\uAE54\uAE55\uAE56\uAE57\uAE58\uAE59"+
-            "\uAE5A\uAE5B\uAE5C\uAE5D\uAE61\uAE62\uAE63\uAE64"+
-            "\uAE65\uAE66\uAE67\uAE68\uAE69\uAE6A\uAE6B\uAE6C"+
-            "\uAE6D\uAE6E\uAE6F\uAE70\uAE71\uAE73\uAE74\uAE75"+
-            "\uAE76\uAE77\uAE78\uAE79\uAE7A\uAE7B\uAE7C\uAE7D"+
-            "\uAE81\uAE82\uAE83\uAE84\uAE85\uAE86\uAE87\uAE88"+
-            "\uAE89\uAE8A\uAE8B\uAE8C\uAE8D\uAE8E\uAE8F\uAE90"+
-            "\uAE91\uAE93\uAE94\uAE95\uAE96\uAE97\uAE98\uAE99"+
-            "\uAE9A\uAE9B\uAE9C\uAE9D\uAEA1\uAEA2\uAEA3\uAEA4"+
-            "\uAEA5\uAEA6\uAEA7\uAEA8\uAEA9\uAEAA\uAEAB\uAEAC"+
-            "\uAEAD\uAEAE\uAEAF\uAEB0\uAEB1\uAEB3\uAEB4\uAEB5"+
-            "\uAEB6\uAEB7\uAEB8\uAEB9\uAEBA\uAEBB\uAEBC\uAEBD"+
-            "\uAEC1\uAEC2\uAEC3\uAEC4\uAEC5\uAEC6\uAEC7\uAEC8"+
-            "\uAEC9\uAECA\uAECB\uAECC\uAECD\uAECE\uAECF\uAED0"+
-            "\uAED1\uAED3\uAED4\uAED5\uAED6\uAED7\uAED8\uAED9"+
-            "\uAEDA\uAEDB\uAEDC\uAEDD\uAEE1\uAEE2\uAEE3\uAEE4"+
-            "\uAEE5\uAEE6\uAEE7\uAEE8\uAEE9\uAEEA\uAEEB\uAEEC"+
-            "\uAEED\uAEEE\uAEEF\uAEF0\uAEF1\uAEF3\uAEF4\uAEF5"+
-            "\uAEF6\uAEF7\uAEF8\uAEF9\uAEFA\uAEFB\uAEFC\uAEFD"+
-            "\uAF41\uAF42\uAF43\uAF44\uAF45\uAF46\uAF47\uAF48"+
-            "\uAF49\uAF4A\uAF4B\uAF4C\uAF4D\uAF4E\uAF4F\uAF50"+
-            "\uAF51\uAF53\uAF54\uAF55\uAF56\uAF57\uAF58\uAF59"+
-            "\uAF5A\uAF5B\uAF5C\uAF5D\uAF61\uAF62\uAF63\uAF64"+
-            "\uAF65\uAF66\uAF67\uAF68\uAF69\uAF6A\uAF6B\uAF6C"+
-            "\uAF6D\uAF6E\uAF6F\uAF70\uAF71\uAF73\uAF74\uAF75"+
-            "\uAF76\uAF77\uAF78\uAF79\uAF7A\uAF7B\uAF7C\uAF7D"+
-            "\uAF81\uAF82\uAF83\uAF84\uAF85\uAF86\uAF87\uAF88"+
-            "\uAF89\uAF8A\uAF8B\uAF8C\uAF8D\uAF8E\uAF8F\uAF90"+
-            "\uAF91\uAF93\uAF94\uAF95\uAF96\uAF97\uAF98\uAF99"+
-            "\uAF9A\uAF9B\uAF9C\uAF9D\uAFA1\uAFA2\uAFA3\uAFA4"+
-            "\uAFA5\uAFA6\uAFA7\uAFA8\uAFA9\uAFAA\uAFAB\uAFAC"+
-            "\uAFAD\uAFAE\uAFAF\uAFB0\uAFB1\uAFB3\uAFB4\uAFB5"+
-            "\uAFB6\uAFB7\uAFB8\uAFB9\uAFBA\uAFBB\uAFBC\uAFBD"+
-            "\uB061\uB062\uB063\uB064\uB065\uB066\uB067\uB068"+
-            "\uB069\uB06A\uB06B\uB06C\uB06D\uB06E\uB06F\uB070"+
-            "\uB071\uB073\uB074\uB075\uB076\uB077\uB078\uB079"+
-            "\uB07A\uB07B\uB07C\uB07D\uB081\uB082\uB083\uB084"+
-            "\uB085\uB086\uB087\uB088\uB089\uB08A\uB08B\uB08C"+
-            "\uB08D\uB08E\uB08F\uB090\uB091\uB093\uB094\uB095"+
-            "\uB096\uB097\uB098\uB099\uB09A\uB09B\uB09C\uB09D"+
-            "\uB0A1\uB0A2\uB0A3\uB0A4\uB0A5\uB0A6\uB0A7\uB0A8"+
-            "\uB0A9\uB0AA\uB0AB\uB0AC\uB0AD\uB0AE\uB0AF\uB0B0"+
-            "\uB0B1\uB0B3\uB0B4\uB0B5\uB0B6\uB0B7\uB0B8\uB0B9"+
-            "\uB0BA\uB0BB\uB0BC\uB0BD\uB0C1\uB0C2\uB0C3\uB0C4"+
-            "\uB0C5\uB0C6\uB0C7\uB0C8\uB0C9\uB0CA\uB0CB\uB0CC"+
-            "\uB0CD\uB0CE\uB0CF\uB0D0\uB0D1\uB0D3\uB0D4\uB0D5"+
-            "\uB0D6\uB0D7\uB0D8\uB0D9\uB0DA\uB0DB\uB0DC\uB0DD"+
-            "\uB0E1\uB0E2\uB0E3\uB0E4\uB0E5\uB0E6\uB0E7\uB0E8"+
-            "\uB0E9\uB0EA\uB0EB\uB0EC\uB0ED\uB0EE\uB0EF\uB0F0"+
-            "\uB0F1\uB0F3\uB0F4\uB0F5\uB0F6\uB0F7\uB0F8\uB0F9"+
-            "\uB0FA\uB0FB\uB0FC\uB0FD\uB141\uB142\uB143\uB144"+
-            "\uB145\uB146\uB147\uB148\uB149\uB14A\uB14B\uB14C"+
-            "\uB14D\uB14E\uB14F\uB150\uB151\uB153\uB154\uB155"+
-            "\uB156\uB157\uB158\uB159\uB15A\uB15B\uB15C\uB15D"+
-            "\uB161\uB162\uB163\uB164\uB165\uB166\uB167\uB168"+
-            "\uB169\uB16A\uB16B\uB16C\uB16D\uB16E\uB16F\uB170"+
-            "\uB171\uB173\uB174\uB175\uB176\uB177\uB178\uB179"+
-            "\uB17A\uB17B\uB17C\uB17D\uB181\uB182\uB183\uB184"+
-            "\uB185\uB186\uB187\uB188\uB189\uB18A\uB18B\uB18C"+
-            "\uB18D\uB18E\uB18F\uB190\uB191\uB193\uB194\uB195"+
-            "\uB196\uB197\uB198\uB199\uB19A\uB19B\uB19C\uB19D"+
-            "\uB1A1\uB1A2\uB1A3\uB1A4\uB1A5\uB1A6\uB1A7\uB1A8"+
-            "\uB1A9\uB1AA\uB1AB\uB1AC\uB1AD\uB1AE\uB1AF\uB1B0"+
-            "\uB1B1\uB1B3\uB1B4\uB1B5\uB1B6\uB1B7\uB1B8\uB1B9"+
-            "\uB1BA\uB1BB\uB1BC\uB1BD\uB1C1\uB1C2\uB1C3\uB1C4"+
-            "\uB1C5\uB1C6\uB1C7\uB1C8\uB1C9\uB1CA\uB1CB\uB1CC"+
-            "\uB1CD\uB1CE\uB1CF\uB1D0\uB1D1\uB1D3\uB1D4\uB1D5"+
-            "\uB1D6\uB1D7\uB1D8\uB1D9\uB1DA\uB1DB\uB1DC\uB1DD"+
-            "\uB1E1\uB1E2\uB1E3\uB1E4\uB1E5\uB1E6\uB1E7\uB1E8"+
-            "\uB1E9\uB1EA\uB1EB\uB1EC\uB1ED\uB1EE\uB1EF\uB1F0"+
-            "\uB1F1\uB1F3\uB1F4\uB1F5\uB1F6\uB1F7\uB1F8\uB1F9"+
-            "\uB1FA\uB1FB\uB1FC\uB1FD\uB241\uB242\uB243\uB244"+
-            "\uB245\uB246\uB247\uB248\uB249\uB24A\uB24B\uB24C"+
-            "\uB24D\uB24E\uB24F\uB250\uB251\uB253\uB254\uB255"+
-            "\uB256\uB257\uB258\uB259\uB25A\uB25B\uB25C\uB25D"+
-            "\uB261\uB262\uB263\uB264\uB265\uB266\uB267\uB268"+
-            "\uB269\uB26A\uB26B\uB26C\uB26D\uB26E\uB26F\uB270"+
-            "\uB271\uB273\uB274\uB275\uB276\uB277\uB278\uB279"+
-            "\uB27A\uB27B\uB27C\uB27D\uB281\uB282\uB283\uB284"+
-            "\uB285\uB286\uB287\uB288\uB289\uB28A\uB28B\uB28C"+
-            "\uB28D\uB28E\uB28F\uB290\uB291\uB293\uB294\uB295"+
-            "\uB296\uB297\uB298\uB299\uB29A\uB29B\uB29C\uB29D"+
-            "\uB2A1\uB2A2\uB2A3\uB2A4\uB2A5\uB2A6\uB2A7\uB2A8"+
-            "\uB2A9\uB2AA\uB2AB\uB2AC\uB2AD\uB2AE\uB2AF\uB2B0"+
-            "\uB2B1\uB2B3\uB2B4\uB2B5\uB2B6\uB2B7\uB2B8\uB2B9"+
-            "\uB2BA\uB2BB\uB2BC\uB2BD\uB2C1\uB2C2\uB2C3\uB2C4"+
-            "\uB2C5\uB2C6\uB2C7\uB2C8\uB2C9\uB2CA\uB2CB\uB2CC"+
-            "\uB2CD\uB2CE\uB2CF\uB2D0\uB2D1\uB2D3\uB2D4\uB2D5"+
-            "\uB2D6\uB2D7\uB2D8\uB2D9\uB2DA\uB2DB\uB2DC\uB2DD"+
-            "\uB2E1\uB2E2\uB2E3\uB2E4\uB2E5\uB2E6\uB2E7\uB2E8"+
-            "\uB2E9\uB2EA\uB2EB\uB2EC\uB2ED\uB2EE\uB2EF\uB2F0"+
-            "\uB2F1\uB2F3\uB2F4\uB2F5\uB2F6\uB2F7\uB2F8\uB2F9"+
-            "\uB2FA\uB2FB\uB2FC\uB2FD\uB341\uB342\uB343\uB344"+
-            "\uB345\uB346\uB347\uB348\uB349\uB34A\uB34B\uB34C"+
-            "\uB34D\uB34E\uB34F\uB350\uB351\uB353\uB354\uB355"+
-            "\uB356\uB357\uB358\uB359\uB35A\uB35B\uB35C\uB35D"+
-            "\uB361\uB362\uB363\uB364\uB365\uB366\uB367\uB368"+
-            "\uB369\uB36A\uB36B\uB36C\uB36D\uB36E\uB36F\uB370"+
-            "\uB371\uB373\uB374\uB375\uB376\uB377\uB378\uB379"+
-            "\uB37A\uB37B\uB37C\uB37D\uB381\uB382\uB383\uB384"+
-            "\uB385\uB386\uB387\uB388\uB389\uB38A\uB38B\uB38C"+
-            "\uB38D\uB38E\uB38F\uB390\uB391\uB393\uB394\uB395"+
-            "\uB396\uB397\uB398\uB399\uB39A\uB39B\uB39C\uB39D"+
-            "\uB3A1\uB3A2\uB3A3\uB3A4\uB3A5\uB3A6\uB3A7\uB3A8"+
-            "\uB3A9\uB3AA\uB3AB\uB3AC\uB3AD\uB3AE\uB3AF\uB3B0"+
-            "\uB3B1\uB3B3\uB3B4\uB3B5\uB3B6\uB3B7\uB3B8\uB3B9"+
-            "\uB3BA\uB3BB\uB3BC\uB3BD\uB461\uB462\uB463\uB464"+
-            "\uB465\uB466\uB467\uB468\uB469\uB46A\uB46B\uB46C"+
-            "\uB46D\uB46E\uB46F\uB470\uB471\uB473\uB474\uB475"+
-            "\uB476\uB477\uB478\uB479\uB47A\uB47B\uB47C\uB47D"+
-            "\uB481\uB482\uB483\uB484\uB485\uB486\uB487\uB488"+
-            "\uB489\uB48A\uB48B\uB48C\uB48D\uB48E\uB48F\uB490"+
-            "\uB491\uB493\uB494\uB495\uB496\uB497\uB498\uB499"+
-            "\uB49A\uB49B\uB49C\uB49D\uB4A1\uB4A2\uB4A3\uB4A4"+
-            "\uB4A5\uB4A6\uB4A7\uB4A8\uB4A9\uB4AA\uB4AB\uB4AC"+
-            "\uB4AD\uB4AE\uB4AF\uB4B0\uB4B1\uB4B3\uB4B4\uB4B5"+
-            "\uB4B6\uB4B7\uB4B8\uB4B9\uB4BA\uB4BB\uB4BC\uB4BD"+
-            "\uB4C1\uB4C2\uB4C3\uB4C4\uB4C5\uB4C6\uB4C7\uB4C8"+
-            "\uB4C9\uB4CA\uB4CB\uB4CC\uB4CD\uB4CE\uB4CF\uB4D0"+
-            "\uB4D1\uB4D3\uB4D4\uB4D5\uB4D6\uB4D7\uB4D8\uB4D9"+
-            "\uB4DA\uB4DB\uB4DC\uB4DD\uB4E1\uB4E2\uB4E3\uB4E4"+
-            "\uB4E5\uB4E6\uB4E7\uB4E8\uB4E9\uB4EA\uB4EB\uB4EC"+
-            "\uB4ED\uB4EE\uB4EF\uB4F0\uB4F1\uB4F3\uB4F4\uB4F5"+
-            "\uB4F6\uB4F7\uB4F8\uB4F9\uB4FA\uB4FB\uB4FC\uB4FD"+
-            "\uB541\uB542\uB543\uB544\uB545\uB546\uB547\uB548"+
-            "\uB549\uB54A\uB54B\uB54C\uB54D\uB54E\uB54F\uB550"+
-            "\uB551\uB553\uB554\uB555\uB556\uB557\uB558\uB559"+
-            "\uB55A\uB55B\uB55C\uB55D\uB561\uB562\uB563\uB564"+
-            "\uB565\uB566\uB567\uB568\uB569\uB56A\uB56B\uB56C"+
-            "\uB56D\uB56E\uB56F\uB570\uB571\uB573\uB574\uB575"+
-            "\uB576\uB577\uB578\uB579\uB57A\uB57B\uB57C\uB57D"+
-            "\uB581\uB582\uB583\uB584\uB585\uB586\uB587\uB588"+
-            "\uB589\uB58A\uB58B\uB58C\uB58D\uB58E\uB58F\uB590"+
-            "\uB591\uB593\uB594\uB595\uB596\uB597\uB598\uB599"+
-            "\uB59A\uB59B\uB59C\uB59D\uB5A1\uB5A2\uB5A3\uB5A4"+
-            "\uB5A5\uB5A6\uB5A7\uB5A8\uB5A9\uB5AA\uB5AB\uB5AC"+
-            "\uB5AD\uB5AE\uB5AF\uB5B0\uB5B1\uB5B3\uB5B4\uB5B5"+
-            "\uB5B6\uB5B7\uB5B8\uB5B9\uB5BA\uB5BB\uB5BC\uB5BD"+
-            "\uB5C1\uB5C2\uB5C3\uB5C4\uB5C5\uB5C6\uB5C7\uB5C8"+
-            "\uB5C9\uB5CA\uB5CB\uB5CC\uB5CD\uB5CE\uB5CF\uB5D0"+
-            "\uB5D1\uB5D3\uB5D4\uB5D5\uB5D6\uB5D7\uB5D8\uB5D9"+
-            "\uB5DA\uB5DB\uB5DC\uB5DD\uB5E1\uB5E2\uB5E3\uB5E4"+
-            "\uB5E5\uB5E6\uB5E7\uB5E8\uB5E9\uB5EA\uB5EB\uB5EC"+
-            "\uB5ED\uB5EE\uB5EF\uB5F0\uB5F1\uB5F3\uB5F4\uB5F5"+
-            "\uB5F6\uB5F7\uB5F8\uB5F9\uB5FA\uB5FB\uB5FC\uB5FD"+
-            "\uB641\uB642\uB643\uB644\uB645\uB646\uB647\uB648"+
-            "\uB649\uB64A\uB64B\uB64C\uB64D\uB64E\uB64F\uB650"+
-            "\uB651\uB653\uB654\uB655\uB656\uB657\uB658\uB659"+
-            "\uB65A\uB65B\uB65C\uB65D\uB661\uB662\uB663\uB664"+
-            "\uB665\uB666\uB667\uB668\uB669\uB66A\uB66B\uB66C"+
-            "\uB66D\uB66E\uB66F\uB670\uB671\uB673\uB674\uB675"+
-            "\uB676\uB677\uB678\uB679\uB67A\uB67B\uB67C\uB67D"+
-            "\uB681\uB682\uB683\uB684\uB685\uB686\uB687\uB688"+
-            "\uB689\uB68A\uB68B\uB68C\uB68D\uB68E\uB68F\uB690"+
-            "\uB691\uB693\uB694\uB695\uB696\uB697\uB698\uB699"+
-            "\uB69A\uB69B\uB69C\uB69D\uB6A1\uB6A2\uB6A3\uB6A4"+
-            "\uB6A5\uB6A6\uB6A7\uB6A8\uB6A9\uB6AA\uB6AB\uB6AC"+
-            "\uB6AD\uB6AE\uB6AF\uB6B0\uB6B1\uB6B3\uB6B4\uB6B5"+
-            "\uB6B6\uB6B7\uB6B8\uB6B9\uB6BA\uB6BB\uB6BC\uB6BD"+
-            "\uB6C1\uB6C2\uB6C3\uB6C4\uB6C5\uB6C6\uB6C7\uB6C8"+
-            "\uB6C9\uB6CA\uB6CB\uB6CC\uB6CD\uB6CE\uB6CF\uB6D0"+
-            "\uB6D1\uB6D3\uB6D4\uB6D5\uB6D6\uB6D7\uB6D8\uB6D9"+
-            "\uB6DA\uB6DB\uB6DC\uB6DD\uB6E1\uB6E2\uB6E3\uB6E4"+
-            "\uB6E5\uB6E6\uB6E7\uB6E8\uB6E9\uB6EA\uB6EB\uB6EC"+
-            "\uB6ED\uB6EE\uB6EF\uB6F0\uB6F1\uB6F3\uB6F4\uB6F5"+
-            "\uB6F6\uB6F7\uB6F8\uB6F9\uB6FA\uB6FB\uB6FC\uB6FD"+
-            "\uB741\uB742\uB743\uB744\uB745\uB746\uB747\uB748"+
-            "\uB749\uB74A\uB74B\uB74C\uB74D\uB74E\uB74F\uB750"+
-            "\uB751\uB753\uB754\uB755\uB756\uB757\uB758\uB759"+
-            "\uB75A\uB75B\uB75C\uB75D\uB761\uB762\uB763\uB764"+
-            "\uB765\uB766\uB767\uB768\uB769\uB76A\uB76B\uB76C"+
-            "\uB76D\uB76E\uB76F\uB770\uB771\uB773\uB774\uB775"+
-            "\uB776\uB777\uB778\uB779\uB77A\uB77B\uB77C\uB77D"+
-            "\uB781\uB782\uB783\uB784\uB785\uB786\uB787\uB788"+
-            "\uB789\uB78A\uB78B\uB78C\uB78D\uB78E\uB78F\uB790"+
-            "\uB791\uB793\uB794\uB795\uB796\uB797\uB798\uB799"+
-            "\uB79A\uB79B\uB79C\uB79D\uB7A1\uB7A2\uB7A3\uB7A4"+
-            "\uB7A5\uB7A6\uB7A7\uB7A8\uB7A9\uB7AA\uB7AB\uB7AC"+
-            "\uB7AD\uB7AE\uB7AF\uB7B0\uB7B1\uB7B3\uB7B4\uB7B5"+
-            "\uB7B6\uB7B7\uB7B8\uB7B9\uB7BA\uB7BB\uB7BC\uB7BD"+
-            "\uB861\uB862\uB863\uB864\uB865\uB866\uB867\uB868"+
-            "\uB869\uB86A\uB86B\uB86C\uB86D\uB86E\uB86F\uB870"+
-            "\uB871\uB873\uB874\uB875\uB876\uB877\uB878\uB879"+
-            "\uB87A\uB87B\uB87C\uB87D\uB881\uB882\uB883\uB884"+
-            "\uB885\uB886\uB887\uB888\uB889\uB88A\uB88B\uB88C"+
-            "\uB88D\uB88E\uB88F\uB890\uB891\uB893\uB894\uB895"+
-            "\uB896\uB897\uB898\uB899\uB89A\uB89B\uB89C\uB89D"+
-            "\uB8A1\uB8A2\uB8A3\uB8A4\uB8A5\uB8A6\uB8A7\uB8A8"+
-            "\uB8A9\uB8AA\uB8AB\uB8AC\uB8AD\uB8AE\uB8AF\uB8B0"+
-            "\uB8B1\uB8B3\uB8B4\uB8B5\uB8B6\uB8B7\uB8B8\uB8B9"+
-            "\uB8BA\uB8BB\uB8BC\uB8BD\uB8C1\uB8C2\uB8C3\uB8C4"+
-            "\uB8C5\uB8C6\uB8C7\uB8C8\uB8C9\uB8CA\uB8CB\uB8CC"+
-            "\uB8CD\uB8CE\uB8CF\uB8D0\uB8D1\uB8D3\uB8D4\uB8D5"+
-            "\uB8D6\uB8D7\uB8D8\uB8D9\uB8DA\uB8DB\uB8DC\uB8DD"+
-            "\uB8E1\uB8E2\uB8E3\uB8E4\uB8E5\uB8E6\uB8E7\uB8E8"+
-            "\uB8E9\uB8EA\uB8EB\uB8EC\uB8ED\uB8EE\uB8EF\uB8F0"+
-            "\uB8F1\uB8F3\uB8F4\uB8F5\uB8F6\uB8F7\uB8F8\uB8F9"+
-            "\uB8FA\uB8FB\uB8FC\uB8FD\uB941\uB942\uB943\uB944"+
-            "\uB945\uB946\uB947\uB948\uB949\uB94A\uB94B\uB94C"+
-            "\uB94D\uB94E\uB94F\uB950\uB951\uB953\uB954\uB955"+
-            "\uB956\uB957\uB958\uB959\uB95A\uB95B\uB95C\uB95D"+
-            "\uB961\uB962\uB963\uB964\uB965\uB966\uB967\uB968"+
-            "\uB969\uB96A\uB96B\uB96C\uB96D\uB96E\uB96F\uB970"+
-            "\uB971\uB973\uB974\uB975\uB976\uB977\uB978\uB979"+
-            "\uB97A\uB97B\uB97C\uB97D\uB981\uB982\uB983\uB984"+
-            "\uB985\uB986\uB987\uB988\uB989\uB98A\uB98B\uB98C"+
-            "\uB98D\uB98E\uB98F\uB990\uB991\uB993\uB994\uB995"+
-            "\uB996\uB997\uB998\uB999\uB99A\uB99B\uB99C\uB99D"+
-            "\uB9A1\uB9A2\uB9A3\uB9A4\uB9A5\uB9A6\uB9A7\uB9A8"+
-            "\uB9A9\uB9AA\uB9AB\uB9AC\uB9AD\uB9AE\uB9AF\uB9B0"+
-            "\uB9B1\uB9B3\uB9B4\uB9B5\uB9B6\uB9B7\uB9B8\uB9B9"+
-            "\uB9BA\uB9BB\uB9BC\uB9BD\uB9C1\uB9C2\uB9C3\uB9C4"+
-            "\uB9C5\uB9C6\uB9C7\uB9C8\uB9C9\uB9CA\uB9CB\uB9CC"+
-            "\uB9CD\uB9CE\uB9CF\uB9D0\uB9D1\uB9D3\uB9D4\uB9D5"+
-            "\uB9D6\uB9D7\uB9D8\uB9D9\uB9DA\uB9DB\uB9DC\uB9DD"+
-            "\uB9E1\uB9E2\uB9E3\uB9E4\uB9E5\uB9E6\uB9E7\uB9E8"+
-            "\uB9E9\uB9EA\uB9EB\uB9EC\uB9ED\uB9EE\uB9EF\uB9F0"+
-            "\uB9F1\uB9F3\uB9F4\uB9F5\uB9F6\uB9F7\uB9F8\uB9F9"+
-            "\uB9FA\uB9FB\uB9FC\uB9FD\uBA41\uBA42\uBA43\uBA44"+
-            "\uBA45\uBA46\uBA47\uBA48\uBA49\uBA4A\uBA4B\uBA4C"+
-            "\uBA4D\uBA4E\uBA4F\uBA50\uBA51\uBA53\uBA54\uBA55"+
-            "\uBA56\uBA57\uBA58\uBA59\uBA5A\uBA5B\uBA5C\uBA5D"+
-            "\uBA61\uBA62\uBA63\uBA64\uBA65\uBA66\uBA67\uBA68"+
-            "\uBA69\uBA6A\uBA6B\uBA6C\uBA6D\uBA6E\uBA6F\uBA70"+
-            "\uBA71\uBA73\uBA74\uBA75\uBA76\uBA77\uBA78\uBA79"+
-            "\uBA7A\uBA7B\uBA7C\uBA7D\uBA81\uBA82\uBA83\uBA84";
-
-        private final static String innerIndex8=
-            "\uBA85\uBA86\uBA87\uBA88\uBA89\uBA8A\uBA8B\uBA8C"+
-            "\uBA8D\uBA8E\uBA8F\uBA90\uBA91\uBA93\uBA94\uBA95"+
-            "\uBA96\uBA97\uBA98\uBA99\uBA9A\uBA9B\uBA9C\uBA9D"+
-            "\uBAA1\uBAA2\uBAA3\uBAA4\uBAA5\uBAA6\uBAA7\uBAA8"+
-            "\uBAA9\uBAAA\uBAAB\uBAAC\uBAAD\uBAAE\uBAAF\uBAB0"+
-            "\uBAB1\uBAB3\uBAB4\uBAB5\uBAB6\uBAB7\uBAB8\uBAB9"+
-            "\uBABA\uBABB\uBABC\uBABD\uBAC1\uBAC2\uBAC3\uBAC4"+
-            "\uBAC5\uBAC6\uBAC7\uBAC8\uBAC9\uBACA\uBACB\uBACC"+
-            "\uBACD\uBACE\uBACF\uBAD0\uBAD1\uBAD3\uBAD4\uBAD5"+
-            "\uBAD6\uBAD7\uBAD8\uBAD9\uBADA\uBADB\uBADC\uBADD"+
-            "\uBAE1\uBAE2\uBAE3\uBAE4\uBAE5\uBAE6\uBAE7\uBAE8"+
-            "\uBAE9\uBAEA\uBAEB\uBAEC\uBAED\uBAEE\uBAEF\uBAF0"+
-            "\uBAF1\uBAF3\uBAF4\uBAF5\uBAF6\uBAF7\uBAF8\uBAF9"+
-            "\uBAFA\uBAFB\uBAFC\uBAFD\uBB41\uBB42\uBB43\uBB44"+
-            "\uBB45\uBB46\uBB47\uBB48\uBB49\uBB4A\uBB4B\uBB4C"+
-            "\uBB4D\uBB4E\uBB4F\uBB50\uBB51\uBB53\uBB54\uBB55"+
-            "\uBB56\uBB57\uBB58\uBB59\uBB5A\uBB5B\uBB5C\uBB5D"+
-            "\uBB61\uBB62\uBB63\uBB64\uBB65\uBB66\uBB67\uBB68"+
-            "\uBB69\uBB6A\uBB6B\uBB6C\uBB6D\uBB6E\uBB6F\uBB70"+
-            "\uBB71\uBB73\uBB74\uBB75\uBB76\uBB77\uBB78\uBB79"+
-            "\uBB7A\uBB7B\uBB7C\uBB7D\uBB81\uBB82\uBB83\uBB84"+
-            "\uBB85\uBB86\uBB87\uBB88\uBB89\uBB8A\uBB8B\uBB8C"+
-            "\uBB8D\uBB8E\uBB8F\uBB90\uBB91\uBB93\uBB94\uBB95"+
-            "\uBB96\uBB97\uBB98\uBB99\uBB9A\uBB9B\uBB9C\uBB9D"+
-            "\uBBA1\uBBA2\uBBA3\uBBA4\uBBA5\uBBA6\uBBA7\uBBA8"+
-            "\uBBA9\uBBAA\uBBAB\uBBAC\uBBAD\uBBAE\uBBAF\uBBB0"+
-            "\uBBB1\uBBB3\uBBB4\uBBB5\uBBB6\uBBB7\uBBB8\uBBB9"+
-            "\uBBBA\uBBBB\uBBBC\uBBBD\uBC61\uBC62\uBC63\uBC64"+
-            "\uBC65\uBC66\uBC67\uBC68\uBC69\uBC6A\uBC6B\uBC6C"+
-            "\uBC6D\uBC6E\uBC6F\uBC70\uBC71\uBC73\uBC74\uBC75"+
-            "\uBC76\uBC77\uBC78\uBC79\uBC7A\uBC7B\uBC7C\uBC7D"+
-            "\uBC81\uBC82\uBC83\uBC84\uBC85\uBC86\uBC87\uBC88"+
-            "\uBC89\uBC8A\uBC8B\uBC8C\uBC8D\uBC8E\uBC8F\uBC90"+
-            "\uBC91\uBC93\uBC94\uBC95\uBC96\uBC97\uBC98\uBC99"+
-            "\uBC9A\uBC9B\uBC9C\uBC9D\uBCA1\uBCA2\uBCA3\uBCA4"+
-            "\uBCA5\uBCA6\uBCA7\uBCA8\uBCA9\uBCAA\uBCAB\uBCAC"+
-            "\uBCAD\uBCAE\uBCAF\uBCB0\uBCB1\uBCB3\uBCB4\uBCB5"+
-            "\uBCB6\uBCB7\uBCB8\uBCB9\uBCBA\uBCBB\uBCBC\uBCBD"+
-            "\uBCC1\uBCC2\uBCC3\uBCC4\uBCC5\uBCC6\uBCC7\uBCC8"+
-            "\uBCC9\uBCCA\uBCCB\uBCCC\uBCCD\uBCCE\uBCCF\uBCD0"+
-            "\uBCD1\uBCD3\uBCD4\uBCD5\uBCD6\uBCD7\uBCD8\uBCD9"+
-            "\uBCDA\uBCDB\uBCDC\uBCDD\uBCE1\uBCE2\uBCE3\uBCE4"+
-            "\uBCE5\uBCE6\uBCE7\uBCE8\uBCE9\uBCEA\uBCEB\uBCEC"+
-            "\uBCED\uBCEE\uBCEF\uBCF0\uBCF1\uBCF3\uBCF4\uBCF5"+
-            "\uBCF6\uBCF7\uBCF8\uBCF9\uBCFA\uBCFB\uBCFC\uBCFD"+
-            "\uBD41\uBD42\uBD43\uBD44\uBD45\uBD46\uBD47\uBD48"+
-            "\uBD49\uBD4A\uBD4B\uBD4C\uBD4D\uBD4E\uBD4F\uBD50"+
-            "\uBD51\uBD53\uBD54\uBD55\uBD56\uBD57\uBD58\uBD59"+
-            "\uBD5A\uBD5B\uBD5C\uBD5D\uBD61\uBD62\uBD63\uBD64"+
-            "\uBD65\uBD66\uBD67\uBD68\uBD69\uBD6A\uBD6B\uBD6C"+
-            "\uBD6D\uBD6E\uBD6F\uBD70\uBD71\uBD73\uBD74\uBD75"+
-            "\uBD76\uBD77\uBD78\uBD79\uBD7A\uBD7B\uBD7C\uBD7D"+
-            "\uBD81\uBD82\uBD83\uBD84\uBD85\uBD86\uBD87\uBD88"+
-            "\uBD89\uBD8A\uBD8B\uBD8C\uBD8D\uBD8E\uBD8F\uBD90"+
-            "\uBD91\uBD93\uBD94\uBD95\uBD96\uBD97\uBD98\uBD99"+
-            "\uBD9A\uBD9B\uBD9C\uBD9D\uBDA1\uBDA2\uBDA3\uBDA4"+
-            "\uBDA5\uBDA6\uBDA7\uBDA8\uBDA9\uBDAA\uBDAB\uBDAC"+
-            "\uBDAD\uBDAE\uBDAF\uBDB0\uBDB1\uBDB3\uBDB4\uBDB5"+
-            "\uBDB6\uBDB7\uBDB8\uBDB9\uBDBA\uBDBB\uBDBC\uBDBD"+
-            "\uBDC1\uBDC2\uBDC3\uBDC4\uBDC5\uBDC6\uBDC7\uBDC8"+
-            "\uBDC9\uBDCA\uBDCB\uBDCC\uBDCD\uBDCE\uBDCF\uBDD0"+
-            "\uBDD1\uBDD3\uBDD4\uBDD5\uBDD6\uBDD7\uBDD8\uBDD9"+
-            "\uBDDA\uBDDB\uBDDC\uBDDD\uBDE1\uBDE2\uBDE3\uBDE4"+
-            "\uBDE5\uBDE6\uBDE7\uBDE8\uBDE9\uBDEA\uBDEB\uBDEC"+
-            "\uBDED\uBDEE\uBDEF\uBDF0\uBDF1\uBDF3\uBDF4\uBDF5"+
-            "\uBDF6\uBDF7\uBDF8\uBDF9\uBDFA\uBDFB\uBDFC\uBDFD"+
-            "\uBE41\uBE42\uBE43\uBE44\uBE45\uBE46\uBE47\uBE48"+
-            "\uBE49\uBE4A\uBE4B\uBE4C\uBE4D\uBE4E\uBE4F\uBE50"+
-            "\uBE51\uBE53\uBE54\uBE55\uBE56\uBE57\uBE58\uBE59"+
-            "\uBE5A\uBE5B\uBE5C\uBE5D\uBE61\uBE62\uBE63\uBE64"+
-            "\uBE65\uBE66\uBE67\uBE68\uBE69\uBE6A\uBE6B\uBE6C"+
-            "\uBE6D\uBE6E\uBE6F\uBE70\uBE71\uBE73\uBE74\uBE75"+
-            "\uBE76\uBE77\uBE78\uBE79\uBE7A\uBE7B\uBE7C\uBE7D"+
-            "\uBE81\uBE82\uBE83\uBE84\uBE85\uBE86\uBE87\uBE88"+
-            "\uBE89\uBE8A\uBE8B\uBE8C\uBE8D\uBE8E\uBE8F\uBE90"+
-            "\uBE91\uBE93\uBE94\uBE95\uBE96\uBE97\uBE98\uBE99"+
-            "\uBE9A\uBE9B\uBE9C\uBE9D\uBEA1\uBEA2\uBEA3\uBEA4"+
-            "\uBEA5\uBEA6\uBEA7\uBEA8\uBEA9\uBEAA\uBEAB\uBEAC"+
-            "\uBEAD\uBEAE\uBEAF\uBEB0\uBEB1\uBEB3\uBEB4\uBEB5"+
-            "\uBEB6\uBEB7\uBEB8\uBEB9\uBEBA\uBEBB\uBEBC\uBEBD"+
-            "\uBEC1\uBEC2\uBEC3\uBEC4\uBEC5\uBEC6\uBEC7\uBEC8"+
-            "\uBEC9\uBECA\uBECB\uBECC\uBECD\uBECE\uBECF\uBED0"+
-            "\uBED1\uBED3\uBED4\uBED5\uBED6\uBED7\uBED8\uBED9"+
-            "\uBEDA\uBEDB\uBEDC\uBEDD\uBEE1\uBEE2\uBEE3\uBEE4"+
-            "\uBEE5\uBEE6\uBEE7\uBEE8\uBEE9\uBEEA\uBEEB\uBEEC"+
-            "\uBEED\uBEEE\uBEEF\uBEF0\uBEF1\uBEF3\uBEF4\uBEF5"+
-            "\uBEF6\uBEF7\uBEF8\uBEF9\uBEFA\uBEFB\uBEFC\uBEFD"+
-            "\uBF41\uBF42\uBF43\uBF44\uBF45\uBF46\uBF47\uBF48"+
-            "\uBF49\uBF4A\uBF4B\uBF4C\uBF4D\uBF4E\uBF4F\uBF50"+
-            "\uBF51\uBF53\uBF54\uBF55\uBF56\uBF57\uBF58\uBF59"+
-            "\uBF5A\uBF5B\uBF5C\uBF5D\uBF61\uBF62\uBF63\uBF64"+
-            "\uBF65\uBF66\uBF67\uBF68\uBF69\uBF6A\uBF6B\uBF6C"+
-            "\uBF6D\uBF6E\uBF6F\uBF70\uBF71\uBF73\uBF74\uBF75"+
-            "\uBF76\uBF77\uBF78\uBF79\uBF7A\uBF7B\uBF7C\uBF7D"+
-            "\uBF81\uBF82\uBF83\uBF84\uBF85\uBF86\uBF87\uBF88"+
-            "\uBF89\uBF8A\uBF8B\uBF8C\uBF8D\uBF8E\uBF8F\uBF90"+
-            "\uBF91\uBF93\uBF94\uBF95\uBF96\uBF97\uBF98\uBF99"+
-            "\uBF9A\uBF9B\uBF9C\uBF9D\uBFA1\uBFA2\uBFA3\uBFA4"+
-            "\uBFA5\uBFA6\uBFA7\uBFA8\uBFA9\uBFAA\uBFAB\uBFAC"+
-            "\uBFAD\uBFAE\uBFAF\uBFB0\uBFB1\uBFB3\uBFB4\uBFB5"+
-            "\uBFB6\uBFB7\uBFB8\uBFB9\uBFBA\uBFBB\uBFBC\uBFBD"+
-            "\uC061\uC062\uC063\uC064\uC065\uC066\uC067\uC068"+
-            "\uC069\uC06A\uC06B\uC06C\uC06D\uC06E\uC06F\uC070"+
-            "\uC071\uC073\uC074\uC075\uC076\uC077\uC078\uC079"+
-            "\uC07A\uC07B\uC07C\uC07D\uC081\uC082\uC083\uC084"+
-            "\uC085\uC086\uC087\uC088\uC089\uC08A\uC08B\uC08C"+
-            "\uC08D\uC08E\uC08F\uC090\uC091\uC093\uC094\uC095"+
-            "\uC096\uC097\uC098\uC099\uC09A\uC09B\uC09C\uC09D"+
-            "\uC0A1\uC0A2\uC0A3\uC0A4\uC0A5\uC0A6\uC0A7\uC0A8"+
-            "\uC0A9\uC0AA\uC0AB\uC0AC\uC0AD\uC0AE\uC0AF\uC0B0"+
-            "\uC0B1\uC0B3\uC0B4\uC0B5\uC0B6\uC0B7\uC0B8\uC0B9"+
-            "\uC0BA\uC0BB\uC0BC\uC0BD\uC0C1\uC0C2\uC0C3\uC0C4"+
-            "\uC0C5\uC0C6\uC0C7\uC0C8\uC0C9\uC0CA\uC0CB\uC0CC"+
-            "\uC0CD\uC0CE\uC0CF\uC0D0\uC0D1\uC0D3\uC0D4\uC0D5"+
-            "\uC0D6\uC0D7\uC0D8\uC0D9\uC0DA\uC0DB\uC0DC\uC0DD"+
-            "\uC0E1\uC0E2\uC0E3\uC0E4\uC0E5\uC0E6\uC0E7\uC0E8"+
-            "\uC0E9\uC0EA\uC0EB\uC0EC\uC0ED\uC0EE\uC0EF\uC0F0"+
-            "\uC0F1\uC0F3\uC0F4\uC0F5\uC0F6\uC0F7\uC0F8\uC0F9"+
-            "\uC0FA\uC0FB\uC0FC\uC0FD\uC141\uC142\uC143\uC144"+
-            "\uC145\uC146\uC147\uC148\uC149\uC14A\uC14B\uC14C"+
-            "\uC14D\uC14E\uC14F\uC150\uC151\uC153\uC154\uC155"+
-            "\uC156\uC157\uC158\uC159\uC15A\uC15B\uC15C\uC15D"+
-            "\uC161\uC162\uC163\uC164\uC165\uC166\uC167\uC168"+
-            "\uC169\uC16A\uC16B\uC16C\uC16D\uC16E\uC16F\uC170"+
-            "\uC171\uC173\uC174\uC175\uC176\uC177\uC178\uC179"+
-            "\uC17A\uC17B\uC17C\uC17D\uC181\uC182\uC183\uC184"+
-            "\uC185\uC186\uC187\uC188\uC189\uC18A\uC18B\uC18C"+
-            "\uC18D\uC18E\uC18F\uC190\uC191\uC193\uC194\uC195"+
-            "\uC196\uC197\uC198\uC199\uC19A\uC19B\uC19C\uC19D"+
-            "\uC1A1\uC1A2\uC1A3\uC1A4\uC1A5\uC1A6\uC1A7\uC1A8"+
-            "\uC1A9\uC1AA\uC1AB\uC1AC\uC1AD\uC1AE\uC1AF\uC1B0"+
-            "\uC1B1\uC1B3\uC1B4\uC1B5\uC1B6\uC1B7\uC1B8\uC1B9"+
-            "\uC1BA\uC1BB\uC1BC\uC1BD\uC1C1\uC1C2\uC1C3\uC1C4"+
-            "\uC1C5\uC1C6\uC1C7\uC1C8\uC1C9\uC1CA\uC1CB\uC1CC"+
-            "\uC1CD\uC1CE\uC1CF\uC1D0\uC1D1\uC1D3\uC1D4\uC1D5"+
-            "\uC1D6\uC1D7\uC1D8\uC1D9\uC1DA\uC1DB\uC1DC\uC1DD"+
-            "\uC1E1\uC1E2\uC1E3\uC1E4\uC1E5\uC1E6\uC1E7\uC1E8"+
-            "\uC1E9\uC1EA\uC1EB\uC1EC\uC1ED\uC1EE\uC1EF\uC1F0"+
-            "\uC1F1\uC1F3\uC1F4\uC1F5\uC1F6\uC1F7\uC1F8\uC1F9"+
-            "\uC1FA\uC1FB\uC1FC\uC1FD\uC241\uC242\uC243\uC244"+
-            "\uC245\uC246\uC247\uC248\uC249\uC24A\uC24B\uC24C"+
-            "\uC24D\uC24E\uC24F\uC250\uC251\uC253\uC254\uC255"+
-            "\uC256\uC257\uC258\uC259\uC25A\uC25B\uC25C\uC25D"+
-            "\uC261\uC262\uC263\uC264\uC265\uC266\uC267\uC268"+
-            "\uC269\uC26A\uC26B\uC26C\uC26D\uC26E\uC26F\uC270"+
-            "\uC271\uC273\uC274\uC275\uC276\uC277\uC278\uC279"+
-            "\uC27A\uC27B\uC27C\uC27D\uC281\uC282\uC283\uC284"+
-            "\uC285\uC286\uC287\uC288\uC289\uC28A\uC28B\uC28C"+
-            "\uC28D\uC28E\uC28F\uC290\uC291\uC293\uC294\uC295"+
-            "\uC296\uC297\uC298\uC299\uC29A\uC29B\uC29C\uC29D"+
-            "\uC2A1\uC2A2\uC2A3\uC2A4\uC2A5\uC2A6\uC2A7\uC2A8"+
-            "\uC2A9\uC2AA\uC2AB\uC2AC\uC2AD\uC2AE\uC2AF\uC2B0"+
-            "\uC2B1\uC2B3\uC2B4\uC2B5\uC2B6\uC2B7\uC2B8\uC2B9"+
-            "\uC2BA\uC2BB\uC2BC\uC2BD\uC2C1\uC2C2\uC2C3\uC2C4"+
-            "\uC2C5\uC2C6\uC2C7\uC2C8\uC2C9\uC2CA\uC2CB\uC2CC"+
-            "\uC2CD\uC2CE\uC2CF\uC2D0\uC2D1\uC2D3\uC2D4\uC2D5"+
-            "\uC2D6\uC2D7\uC2D8\uC2D9\uC2DA\uC2DB\uC2DC\uC2DD"+
-            "\uC2E1\uC2E2\uC2E3\uC2E4\uC2E5\uC2E6\uC2E7\uC2E8"+
-            "\uC2E9\uC2EA\uC2EB\uC2EC\uC2ED\uC2EE\uC2EF\uC2F0"+
-            "\uC2F1\uC2F3\uC2F4\uC2F5\uC2F6\uC2F7\uC2F8\uC2F9"+
-            "\uC2FA\uC2FB\uC2FC\uC2FD\uC341\uC342\uC343\uC344"+
-            "\uC345\uC346\uC347\uC348\uC349\uC34A\uC34B\uC34C"+
-            "\uC34D\uC34E\uC34F\uC350\uC351\uC353\uC354\uC355"+
-            "\uC356\uC357\uC358\uC359\uC35A\uC35B\uC35C\uC35D"+
-            "\uC361\uC362\uC363\uC364\uC365\uC366\uC367\uC368"+
-            "\uC369\uC36A\uC36B\uC36C\uC36D\uC36E\uC36F\uC370"+
-            "\uC371\uC373\uC374\uC375\uC376\uC377\uC378\uC379"+
-            "\uC37A\uC37B\uC37C\uC37D\uC381\uC382\uC383\uC384"+
-            "\uC385\uC386\uC387\uC388\uC389\uC38A\uC38B\uC38C"+
-            "\uC38D\uC38E\uC38F\uC390\uC391\uC393\uC394\uC395"+
-            "\uC396\uC397\uC398\uC399\uC39A\uC39B\uC39C\uC39D"+
-            "\uC3A1\uC3A2\uC3A3\uC3A4\uC3A5\uC3A6\uC3A7\uC3A8"+
-            "\uC3A9\uC3AA\uC3AB\uC3AC\uC3AD\uC3AE\uC3AF\uC3B0"+
-            "\uC3B1\uC3B3\uC3B4\uC3B5\uC3B6\uC3B7\uC3B8\uC3B9"+
-            "\uC3BA\uC3BB\uC3BC\uC3BD\uC461\uC462\uC463\uC464"+
-            "\uC465\uC466\uC467\uC468\uC469\uC46A\uC46B\uC46C"+
-            "\uC46D\uC46E\uC46F\uC470\uC471\uC473\uC474\uC475"+
-            "\uC476\uC477\uC478\uC479\uC47A\uC47B\uC47C\uC47D"+
-            "\uC481\uC482\uC483\uC484\uC485\uC486\uC487\uC488"+
-            "\uC489\uC48A\uC48B\uC48C\uC48D\uC48E\uC48F\uC490"+
-            "\uC491\uC493\uC494\uC495\uC496\uC497\uC498\uC499"+
-            "\uC49A\uC49B\uC49C\uC49D\uC4A1\uC4A2\uC4A3\uC4A4"+
-            "\uC4A5\uC4A6\uC4A7\uC4A8\uC4A9\uC4AA\uC4AB\uC4AC"+
-            "\uC4AD\uC4AE\uC4AF\uC4B0\uC4B1\uC4B3\uC4B4\uC4B5"+
-            "\uC4B6\uC4B7\uC4B8\uC4B9\uC4BA\uC4BB\uC4BC\uC4BD"+
-            "\uC4C1\uC4C2\uC4C3\uC4C4\uC4C5\uC4C6\uC4C7\uC4C8"+
-            "\uC4C9\uC4CA\uC4CB\uC4CC\uC4CD\uC4CE\uC4CF\uC4D0"+
-            "\uC4D1\uC4D3\uC4D4\uC4D5\uC4D6\uC4D7\uC4D8\uC4D9"+
-            "\uC4DA\uC4DB\uC4DC\uC4DD\uC4E1\uC4E2\uC4E3\uC4E4"+
-            "\uC4E5\uC4E6\uC4E7\uC4E8\uC4E9\uC4EA\uC4EB\uC4EC"+
-            "\uC4ED\uC4EE\uC4EF\uC4F0\uC4F1\uC4F3\uC4F4\uC4F5"+
-            "\uC4F6\uC4F7\uC4F8\uC4F9\uC4FA\uC4FB\uC4FC\uC4FD"+
-            "\uC541\uC542\uC543\uC544\uC545\uC546\uC547\uC548"+
-            "\uC549\uC54A\uC54B\uC54C\uC54D\uC54E\uC54F\uC550"+
-            "\uC551\uC553\uC554\uC555\uC556\uC557\uC558\uC559"+
-            "\uC55A\uC55B\uC55C\uC55D\uC561\uC562\uC563\uC564"+
-            "\uC565\uC566\uC567\uC568\uC569\uC56A\uC56B\uC56C"+
-            "\uC56D\uC56E\uC56F\uC570\uC571\uC573\uC574\uC575"+
-            "\uC576\uC577\uC578\uC579\uC57A\uC57B\uC57C\uC57D"+
-            "\uC581\uC582\uC583\uC584\uC585\uC586\uC587\uC588"+
-            "\uC589\uC58A\uC58B\uC58C\uC58D\uC58E\uC58F\uC590"+
-            "\uC591\uC593\uC594\uC595\uC596\uC597\uC598\uC599"+
-            "\uC59A\uC59B\uC59C\uC59D\uC5A1\uC5A2\uC5A3\uC5A4"+
-            "\uC5A5\uC5A6\uC5A7\uC5A8\uC5A9\uC5AA\uC5AB\uC5AC"+
-            "\uC5AD\uC5AE\uC5AF\uC5B0\uC5B1\uC5B3\uC5B4\uC5B5"+
-            "\uC5B6\uC5B7\uC5B8\uC5B9\uC5BA\uC5BB\uC5BC\uC5BD"+
-            "\uC5C1\uC5C2\uC5C3\uC5C4\uC5C5\uC5C6\uC5C7\uC5C8"+
-            "\uC5C9\uC5CA\uC5CB\uC5CC\uC5CD\uC5CE\uC5CF\uC5D0"+
-            "\uC5D1\uC5D3\uC5D4\uC5D5\uC5D6\uC5D7\uC5D8\uC5D9"+
-            "\uC5DA\uC5DB\uC5DC\uC5DD\uC5E1\uC5E2\uC5E3\uC5E4"+
-            "\uC5E5\uC5E6\uC5E7\uC5E8\uC5E9\uC5EA\uC5EB\uC5EC"+
-            "\uC5ED\uC5EE\uC5EF\uC5F0\uC5F1\uC5F3\uC5F4\uC5F5"+
-            "\uC5F6\uC5F7\uC5F8\uC5F9\uC5FA\uC5FB\uC5FC\uC5FD"+
-            "\uC641\uC642\uC643\uC644\uC645\uC646\uC647\uC648"+
-            "\uC649\uC64A\uC64B\uC64C\uC64D\uC64E\uC64F\uC650"+
-            "\uC651\uC653\uC654\uC655\uC656\uC657\uC658\uC659"+
-            "\uC65A\uC65B\uC65C\uC65D\uC661\uC662\uC663\uC664"+
-            "\uC665\uC666\uC667\uC668\uC669\uC66A\uC66B\uC66C"+
-            "\uC66D\uC66E\uC66F\uC670\uC671\uC673\uC674\uC675"+
-            "\uC676\uC677\uC678\uC679\uC67A\uC67B\uC67C\uC67D"+
-            "\uC681\uC682\uC683\uC684\uC685\uC686\uC687\uC688"+
-            "\uC689\uC68A\uC68B\uC68C\uC68D\uC68E\uC68F\uC690"+
-            "\uC691\uC693\uC694\uC695\uC696\uC697\uC698\uC699"+
-            "\uC69A\uC69B\uC69C\uC69D\uC6A1\uC6A2\uC6A3\uC6A4"+
-            "\uC6A5\uC6A6\uC6A7\uC6A8\uC6A9\uC6AA\uC6AB\uC6AC"+
-            "\uC6AD\uC6AE\uC6AF\uC6B0\uC6B1\uC6B3\uC6B4\uC6B5"+
-            "\uC6B6\uC6B7\uC6B8\uC6B9\uC6BA\uC6BB\uC6BC\uC6BD"+
-            "\uC6C1\uC6C2\uC6C3\uC6C4\uC6C5\uC6C6\uC6C7\uC6C8"+
-            "\uC6C9\uC6CA\uC6CB\uC6CC\uC6CD\uC6CE\uC6CF\uC6D0"+
-            "\uC6D1\uC6D3\uC6D4\uC6D5\uC6D6\uC6D7\uC6D8\uC6D9"+
-            "\uC6DA\uC6DB\uC6DC\uC6DD\uC6E1\uC6E2\uC6E3\uC6E4"+
-            "\uC6E5\uC6E6\uC6E7\uC6E8\uC6E9\uC6EA\uC6EB\uC6EC"+
-            "\uC6ED\uC6EE\uC6EF\uC6F0\uC6F1\uC6F3\uC6F4\uC6F5"+
-            "\uC6F6\uC6F7\uC6F8\uC6F9\uC6FA\uC6FB\uC6FC\uC6FD"+
-            "\uC741\uC742\uC743\uC744\uC745\uC746\uC747\uC748"+
-            "\uC749\uC74A\uC74B\uC74C\uC74D\uC74E\uC74F\uC750"+
-            "\uC751\uC753\uC754\uC755\uC756\uC757\uC758\uC759"+
-            "\uC75A\uC75B\uC75C\uC75D\uC761\uC762\uC763\uC764"+
-            "\uC765\uC766\uC767\uC768\uC769\uC76A\uC76B\uC76C"+
-            "\uC76D\uC76E\uC76F\uC770\uC771\uC773\uC774\uC775"+
-            "\uC776\uC777\uC778\uC779\uC77A\uC77B\uC77C\uC77D"+
-            "\uC781\uC782\uC783\uC784\uC785\uC786\uC787\uC788"+
-            "\uC789\uC78A\uC78B\uC78C\uC78D\uC78E\uC78F\uC790"+
-            "\uC791\uC793\uC794\uC795\uC796\uC797\uC798\uC799"+
-            "\uC79A\uC79B\uC79C\uC79D\uC7A1\uC7A2\uC7A3\uC7A4"+
-            "\uC7A5\uC7A6\uC7A7\uC7A8\uC7A9\uC7AA\uC7AB\uC7AC"+
-            "\uC7AD\uC7AE\uC7AF\uC7B0\uC7B1\uC7B3\uC7B4\uC7B5"+
-            "\uC7B6\uC7B7\uC7B8\uC7B9\uC7BA\uC7BB\uC7BC\uC7BD"+
-            "\uC861\uC862\uC863\uC864\uC865\uC866\uC867\uC868"+
-            "\uC869\uC86A\uC86B\uC86C\uC86D\uC86E\uC86F\uC870"+
-            "\uC871\uC873\uC874\uC875\uC876\uC877\uC878\uC879"+
-            "\uC87A\uC87B\uC87C\uC87D\uC881\uC882\uC883\uC884"+
-            "\uC885\uC886\uC887\uC888\uC889\uC88A\uC88B\uC88C"+
-            "\uC88D\uC88E\uC88F\uC890\uC891\uC893\uC894\uC895"+
-            "\uC896\uC897\uC898\uC899\uC89A\uC89B\uC89C\uC89D"+
-            "\uC8A1\uC8A2\uC8A3\uC8A4\uC8A5\uC8A6\uC8A7\uC8A8"+
-            "\uC8A9\uC8AA\uC8AB\uC8AC\uC8AD\uC8AE\uC8AF\uC8B0"+
-            "\uC8B1\uC8B3\uC8B4\uC8B5\uC8B6\uC8B7\uC8B8\uC8B9"+
-            "\uC8BA\uC8BB\uC8BC\uC8BD\uC8C1\uC8C2\uC8C3\uC8C4"+
-            "\uC8C5\uC8C6\uC8C7\uC8C8\uC8C9\uC8CA\uC8CB\uC8CC"+
-            "\uC8CD\uC8CE\uC8CF\uC8D0\uC8D1\uC8D3\uC8D4\uC8D5"+
-            "\uC8D6\uC8D7\uC8D8\uC8D9\uC8DA\uC8DB\uC8DC\uC8DD"+
-            "\uC8E1\uC8E2\uC8E3\uC8E4\uC8E5\uC8E6\uC8E7\uC8E8"+
-            "\uC8E9\uC8EA\uC8EB\uC8EC\uC8ED\uC8EE\uC8EF\uC8F0"+
-            "\uC8F1\uC8F3\uC8F4\uC8F5\uC8F6\uC8F7\uC8F8\uC8F9"+
-            "\uC8FA\uC8FB\uC8FC\uC8FD\uC941\uC942\uC943\uC944"+
-            "\uC945\uC946\uC947\uC948\uC949\uC94A\uC94B\uC94C"+
-            "\uC94D\uC94E\uC94F\uC950\uC951\uC953\uC954\uC955"+
-            "\uC956\uC957\uC958\uC959\uC95A\uC95B\uC95C\uC95D"+
-            "\uC961\uC962\uC963\uC964\uC965\uC966\uC967\uC968"+
-            "\uC969\uC96A\uC96B\uC96C\uC96D\uC96E\uC96F\uC970"+
-            "\uC971\uC973\uC974\uC975\uC976\uC977\uC978\uC979"+
-            "\uC97A\uC97B\uC97C\uC97D\uC981\uC982\uC983\uC984"+
-            "\uC985\uC986\uC987\uC988\uC989\uC98A\uC98B\uC98C"+
-            "\uC98D\uC98E\uC98F\uC990\uC991\uC993\uC994\uC995"+
-            "\uC996\uC997\uC998\uC999\uC99A\uC99B\uC99C\uC99D"+
-            "\uC9A1\uC9A2\uC9A3\uC9A4\uC9A5\uC9A6\uC9A7\uC9A8"+
-            "\uC9A9\uC9AA\uC9AB\uC9AC\uC9AD\uC9AE\uC9AF\uC9B0"+
-            "\uC9B1\uC9B3\uC9B4\uC9B5\uC9B6\uC9B7\uC9B8\uC9B9"+
-            "\uC9BA\uC9BB\uC9BC\uC9BD\uC9C1\uC9C2\uC9C3\uC9C4"+
-            "\uC9C5\uC9C6\uC9C7\uC9C8\uC9C9\uC9CA\uC9CB\uC9CC"+
-            "\uC9CD\uC9CE\uC9CF\uC9D0\uC9D1\uC9D3\uC9D4\uC9D5"+
-            "\uC9D6\uC9D7\uC9D8\uC9D9\uC9DA\uC9DB\uC9DC\uC9DD"+
-            "\uC9E1\uC9E2\uC9E3\uC9E4\uC9E5\uC9E6\uC9E7\uC9E8"+
-            "\uC9E9\uC9EA\uC9EB\uC9EC\uC9ED\uC9EE\uC9EF\uC9F0"+
-            "\uC9F1\uC9F3\uC9F4\uC9F5\uC9F6\uC9F7\uC9F8\uC9F9"+
-            "\uC9FA\uC9FB\uC9FC\uC9FD\uCA41\uCA42\uCA43\uCA44"+
-            "\uCA45\uCA46\uCA47\uCA48\uCA49\uCA4A\uCA4B\uCA4C"+
-            "\uCA4D\uCA4E\uCA4F\uCA50\uCA51\uCA53\uCA54\uCA55"+
-            "\uCA56\uCA57\uCA58\uCA59\uCA5A\uCA5B\uCA5C\uCA5D"+
-            "\uCA61\uCA62\uCA63\uCA64\uCA65\uCA66\uCA67\uCA68"+
-            "\uCA69\uCA6A\uCA6B\uCA6C\uCA6D\uCA6E\uCA6F\uCA70"+
-            "\uCA71\uCA73\uCA74\uCA75\uCA76\uCA77\uCA78\uCA79"+
-            "\uCA7A\uCA7B\uCA7C\uCA7D\uCA81\uCA82\uCA83\uCA84"+
-            "\uCA85\uCA86\uCA87\uCA88\uCA89\uCA8A\uCA8B\uCA8C"+
-            "\uCA8D\uCA8E\uCA8F\uCA90\uCA91\uCA93\uCA94\uCA95"+
-            "\uCA96\uCA97\uCA98\uCA99\uCA9A\uCA9B\uCA9C\uCA9D"+
-            "\uCAA1\uCAA2\uCAA3\uCAA4\uCAA5\uCAA6\uCAA7\uCAA8"+
-            "\uCAA9\uCAAA\uCAAB\uCAAC\uCAAD\uCAAE\uCAAF\uCAB0"+
-            "\uCAB1\uCAB3\uCAB4\uCAB5\uCAB6\uCAB7\uCAB8\uCAB9"+
-            "\uCABA\uCABB\uCABC\uCABD\uCAC1\uCAC2\uCAC3\uCAC4"+
-            "\uCAC5\uCAC6\uCAC7\uCAC8\uCAC9\uCACA\uCACB\uCACC"+
-            "\uCACD\uCACE\uCACF\uCAD0\uCAD1\uCAD3\uCAD4\uCAD5"+
-            "\uCAD6\uCAD7\uCAD8\uCAD9\uCADA\uCADB\uCADC\uCADD"+
-            "\uCAE1\uCAE2\uCAE3\uCAE4\uCAE5\uCAE6\uCAE7\uCAE8"+
-            "\uCAE9\uCAEA\uCAEB\uCAEC\uCAED\uCAEE\uCAEF\uCAF0"+
-            "\uCAF1\uCAF3\uCAF4\uCAF5\uCAF6\uCAF7\uCAF8\uCAF9"+
-            "\uCAFA\uCAFB\uCAFC\uCAFD\uCB41\uCB42\uCB43\uCB44"+
-            "\uCB45\uCB46\uCB47\uCB48\uCB49\uCB4A\uCB4B\uCB4C"+
-            "\uCB4D\uCB4E\uCB4F\uCB50\uCB51\uCB53\uCB54\uCB55"+
-            "\uCB56\uCB57\uCB58\uCB59\uCB5A\uCB5B\uCB5C\uCB5D"+
-            "\uCB61\uCB62\uCB63\uCB64\uCB65\uCB66\uCB67\uCB68"+
-            "\uCB69\uCB6A\uCB6B\uCB6C\uCB6D\uCB6E\uCB6F\uCB70"+
-            "\uCB71\uCB73\uCB74\uCB75\uCB76\uCB77\uCB78\uCB79"+
-            "\uCB7A\uCB7B\uCB7C\uCB7D\uCB81\uCB82\uCB83\uCB84"+
-            "\uCB85\uCB86\uCB87\uCB88\uCB89\uCB8A\uCB8B\uCB8C"+
-            "\uCB8D\uCB8E\uCB8F\uCB90\uCB91\uCB93\uCB94\uCB95"+
-            "\uCB96\uCB97\uCB98\uCB99\uCB9A\uCB9B\uCB9C\uCB9D"+
-            "\uCBA1\uCBA2\uCBA3\uCBA4\uCBA5\uCBA6\uCBA7\uCBA8"+
-            "\uCBA9\uCBAA\uCBAB\uCBAC\uCBAD\uCBAE\uCBAF\uCBB0"+
-            "\uCBB1\uCBB3\uCBB4\uCBB5\uCBB6\uCBB7\uCBB8\uCBB9"+
-            "\uCBBA\uCBBB\uCBBC\uCBBD\uCC61\uCC62\uCC63\uCC64"+
-            "\uCC65\uCC66\uCC67\uCC68\uCC69\uCC6A\uCC6B\uCC6C"+
-            "\uCC6D\uCC6E\uCC6F\uCC70\uCC71\uCC73\uCC74\uCC75"+
-            "\uCC76\uCC77\uCC78\uCC79\uCC7A\uCC7B\uCC7C\uCC7D"+
-            "\uCC81\uCC82\uCC83\uCC84\uCC85\uCC86\uCC87\uCC88"+
-            "\uCC89\uCC8A\uCC8B\uCC8C\uCC8D\uCC8E\uCC8F\uCC90"+
-            "\uCC91\uCC93\uCC94\uCC95\uCC96\uCC97\uCC98\uCC99"+
-            "\uCC9A\uCC9B\uCC9C\uCC9D\uCCA1\uCCA2\uCCA3\uCCA4"+
-            "\uCCA5\uCCA6\uCCA7\uCCA8\uCCA9\uCCAA\uCCAB\uCCAC"+
-            "\uCCAD\uCCAE\uCCAF\uCCB0\uCCB1\uCCB3\uCCB4\uCCB5"+
-            "\uCCB6\uCCB7\uCCB8\uCCB9\uCCBA\uCCBB\uCCBC\uCCBD"+
-            "\uCCC1\uCCC2\uCCC3\uCCC4\uCCC5\uCCC6\uCCC7\uCCC8"+
-            "\uCCC9\uCCCA\uCCCB\uCCCC\uCCCD\uCCCE\uCCCF\uCCD0"+
-            "\uCCD1\uCCD3\uCCD4\uCCD5\uCCD6\uCCD7\uCCD8\uCCD9"+
-            "\uCCDA\uCCDB\uCCDC\uCCDD\uCCE1\uCCE2\uCCE3\uCCE4"+
-            "\uCCE5\uCCE6\uCCE7\uCCE8\uCCE9\uCCEA\uCCEB\uCCEC"+
-            "\uCCED\uCCEE\uCCEF\uCCF0\uCCF1\uCCF3\uCCF4\uCCF5"+
-            "\uCCF6\uCCF7\uCCF8\uCCF9\uCCFA\uCCFB\uCCFC\uCCFD"+
-            "\uCD41\uCD42\uCD43\uCD44\uCD45\uCD46\uCD47\uCD48"+
-            "\uCD49\uCD4A\uCD4B\uCD4C\uCD4D\uCD4E\uCD4F\uCD50"+
-            "\uCD51\uCD53\uCD54\uCD55\uCD56\uCD57\uCD58\uCD59"+
-            "\uCD5A\uCD5B\uCD5C\uCD5D\uCD61\uCD62\uCD63\uCD64"+
-            "\uCD65\uCD66\uCD67\uCD68\uCD69\uCD6A\uCD6B\uCD6C"+
-            "\uCD6D\uCD6E\uCD6F\uCD70\uCD71\uCD73\uCD74\uCD75"+
-            "\uCD76\uCD77\uCD78\uCD79\uCD7A\uCD7B\uCD7C\uCD7D"+
-            "\uCD81\uCD82\uCD83\uCD84\uCD85\uCD86\uCD87\uCD88"+
-            "\uCD89\uCD8A\uCD8B\uCD8C\uCD8D\uCD8E\uCD8F\uCD90"+
-            "\uCD91\uCD93\uCD94\uCD95\uCD96\uCD97\uCD98\uCD99"+
-            "\uCD9A\uCD9B\uCD9C\uCD9D\uCDA1\uCDA2\uCDA3\uCDA4"+
-            "\uCDA5\uCDA6\uCDA7\uCDA8\uCDA9\uCDAA\uCDAB\uCDAC"+
-            "\uCDAD\uCDAE\uCDAF\uCDB0\uCDB1\uCDB3\uCDB4\uCDB5"+
-            "\uCDB6\uCDB7\uCDB8\uCDB9\uCDBA\uCDBB\uCDBC\uCDBD"+
-            "\uCDC1\uCDC2\uCDC3\uCDC4\uCDC5\uCDC6\uCDC7\uCDC8"+
-            "\uCDC9\uCDCA\uCDCB\uCDCC\uCDCD\uCDCE\uCDCF\uCDD0"+
-            "\uCDD1\uCDD3\uCDD4\uCDD5\uCDD6\uCDD7\uCDD8\uCDD9"+
-            "\uCDDA\uCDDB\uCDDC\uCDDD\uCDE1\uCDE2\uCDE3\uCDE4"+
-            "\uCDE5\uCDE6\uCDE7\uCDE8\uCDE9\uCDEA\uCDEB\uCDEC"+
-            "\uCDED\uCDEE\uCDEF\uCDF0\uCDF1\uCDF3\uCDF4\uCDF5"+
-            "\uCDF6\uCDF7\uCDF8\uCDF9\uCDFA\uCDFB\uCDFC\uCDFD"+
-            "\uCE41\uCE42\uCE43\uCE44\uCE45\uCE46\uCE47\uCE48"+
-            "\uCE49\uCE4A\uCE4B\uCE4C\uCE4D\uCE4E\uCE4F\uCE50"+
-            "\uCE51\uCE53\uCE54\uCE55\uCE56\uCE57\uCE58\uCE59"+
-            "\uCE5A\uCE5B\uCE5C\uCE5D\uCE61\uCE62\uCE63\uCE64"+
-            "\uCE65\uCE66\uCE67\uCE68\uCE69\uCE6A\uCE6B\uCE6C"+
-            "\uCE6D\uCE6E\uCE6F\uCE70\uCE71\uCE73\uCE74\uCE75"+
-            "\uCE76\uCE77\uCE78\uCE79\uCE7A\uCE7B\uCE7C\uCE7D"+
-            "\uCE81\uCE82\uCE83\uCE84\uCE85\uCE86\uCE87\uCE88"+
-            "\uCE89\uCE8A\uCE8B\uCE8C\uCE8D\uCE8E\uCE8F\uCE90"+
-            "\uCE91\uCE93\uCE94\uCE95\uCE96\uCE97\uCE98\uCE99"+
-            "\uCE9A\uCE9B\uCE9C\uCE9D\uCEA1\uCEA2\uCEA3\uCEA4"+
-            "\uCEA5\uCEA6\uCEA7\uCEA8\uCEA9\uCEAA\uCEAB\uCEAC"+
-            "\uCEAD\uCEAE\uCEAF\uCEB0\uCEB1\uCEB3\uCEB4\uCEB5"+
-            "\uCEB6\uCEB7\uCEB8\uCEB9\uCEBA\uCEBB\uCEBC\uCEBD"+
-            "\uCEC1\uCEC2\uCEC3\uCEC4\uCEC5\uCEC6\uCEC7\uCEC8"+
-            "\uCEC9\uCECA\uCECB\uCECC\uCECD\uCECE\uCECF\uCED0"+
-            "\uCED1\uCED3\uCED4\uCED5\uCED6\uCED7\uCED8\uCED9"+
-            "\uCEDA\uCEDB\uCEDC\uCEDD\uCEE1\uCEE2\uCEE3\uCEE4"+
-            "\uCEE5\uCEE6\uCEE7\uCEE8\uCEE9\uCEEA\uCEEB\uCEEC"+
-            "\uCEED\uCEEE\uCEEF\uCEF0\uCEF1\uCEF3\uCEF4\uCEF5"+
-            "\uCEF6\uCEF7\uCEF8\uCEF9\uCEFA\uCEFB\uCEFC\uCEFD"+
-            "\uCF41\uCF42\uCF43\uCF44\uCF45\uCF46\uCF47\uCF48"+
-            "\uCF49\uCF4A\uCF4B\uCF4C\uCF4D\uCF4E\uCF4F\uCF50"+
-            "\uCF51\uCF53\uCF54\uCF55\uCF56\uCF57\uCF58\uCF59"+
-            "\uCF5A\uCF5B\uCF5C\uCF5D\uCF61\uCF62\uCF63\uCF64"+
-            "\uCF65\uCF66\uCF67\uCF68\uCF69\uCF6A\uCF6B\uCF6C"+
-            "\uCF6D\uCF6E\uCF6F\uCF70\uCF71\uCF73\uCF74\uCF75"+
-            "\uCF76\uCF77\uCF78\uCF79\uCF7A\uCF7B\uCF7C\uCF7D"+
-            "\uCF81\uCF82\uCF83\uCF84\uCF85\uCF86\uCF87\uCF88"+
-            "\uCF89\uCF8A\uCF8B\uCF8C\uCF8D\uCF8E\uCF8F\uCF90"+
-            "\uCF91\uCF93\uCF94\uCF95\uCF96\uCF97\uCF98\uCF99"+
-            "\uCF9A\uCF9B\uCF9C\uCF9D\uCFA1\uCFA2\uCFA3\uCFA4"+
-            "\uCFA5\uCFA6\uCFA7\uCFA8\uCFA9\uCFAA\uCFAB\uCFAC"+
-            "\uCFAD\uCFAE\uCFAF\uCFB0\uCFB1\uCFB3\uCFB4\uCFB5"+
-            "\uCFB6\uCFB7\uCFB8\uCFB9\uCFBA\uCFBB\uCFBC\uCFBD"+
-            "\uD061\uD062\uD063\uD064\uD065\uD066\uD067\uD068"+
-            "\uD069\uD06A\uD06B\uD06C\uD06D\uD06E\uD06F\uD070"+
-            "\uD071\uD073\uD074\uD075\uD076\uD077\uD078\uD079"+
-            "\uD07A\uD07B\uD07C\uD07D\uD081\uD082\uD083\uD084"+
-            "\uD085\uD086\uD087\uD088\uD089\uD08A\uD08B\uD08C"+
-            "\uD08D\uD08E\uD08F\uD090\uD091\uD093\uD094\uD095"+
-            "\uD096\uD097\uD098\uD099\uD09A\uD09B\uD09C\uD09D"+
-            "\uD0A1\uD0A2\uD0A3\uD0A4\uD0A5\uD0A6\uD0A7\uD0A8"+
-            "\uD0A9\uD0AA\uD0AB\uD0AC\uD0AD\uD0AE\uD0AF\uD0B0"+
-            "\uD0B1\uD0B3\uD0B4\uD0B5\uD0B6\uD0B7\uD0B8\uD0B9"+
-            "\uD0BA\uD0BB\uD0BC\uD0BD\uD0C1\uD0C2\uD0C3\uD0C4"+
-            "\uD0C5\uD0C6\uD0C7\uD0C8\uD0C9\uD0CA\uD0CB\uD0CC"+
-            "\uD0CD\uD0CE\uD0CF\uD0D0\uD0D1\uD0D3\uD0D4\uD0D5"+
-            "\uD0D6\uD0D7\uD0D8\uD0D9\uD0DA\uD0DB\uD0DC\uD0DD"+
-            "\uD0E1\uD0E2\uD0E3\uD0E4\uD0E5\uD0E6\uD0E7\uD0E8"+
-            "\uD0E9\uD0EA\uD0EB\uD0EC\uD0ED\uD0EE\uD0EF\uD0F0"+
-            "\uD0F1\uD0F3\uD0F4\uD0F5\uD0F6\uD0F7\uD0F8\uD0F9"+
-            "\uD0FA\uD0FB\uD0FC\uD0FD\uD141\uD142\uD143\uD144"+
-            "\uD145\uD146\uD147\uD148\uD149\uD14A\uD14B\uD14C"+
-            "\uD14D\uD14E\uD14F\uD150\uD151\uD153\uD154\uD155"+
-            "\uD156\uD157\uD158\uD159\uD15A\uD15B\uD15C\uD15D"+
-            "\uD161\uD162\uD163\uD164\uD165\uD166\uD167\uD168"+
-            "\uD169\uD16A\uD16B\uD16C\uD16D\uD16E\uD16F\uD170"+
-            "\uD171\uD173\uD174\uD175\uD176\uD177\uD178\uD179"+
-            "\uD17A\uD17B\uD17C\uD17D\uD181\uD182\uD183\uD184"+
-            "\uD185\uD186\uD187\uD188\uD189\uD18A\uD18B\uD18C"+
-            "\uD18D\uD18E\uD18F\uD190\uD191\uD193\uD194\uD195"+
-            "\uD196\uD197\uD198\uD199\uD19A\uD19B\uD19C\uD19D"+
-            "\uD1A1\uD1A2\uD1A3\uD1A4\uD1A5\uD1A6\uD1A7\uD1A8"+
-            "\uD1A9\uD1AA\uD1AB\uD1AC\uD1AD\uD1AE\uD1AF\uD1B0"+
-            "\uD1B1\uD1B3\uD1B4\uD1B5\uD1B6\uD1B7\uD1B8\uD1B9"+
-            "\uD1BA\uD1BB\uD1BC\uD1BD\uD1C1\uD1C2\uD1C3\uD1C4"+
-            "\uD1C5\uD1C6\uD1C7\uD1C8\uD1C9\uD1CA\uD1CB\uD1CC"+
-            "\uD1CD\uD1CE\uD1CF\uD1D0\uD1D1\uD1D3\uD1D4\uD1D5"+
-            "\uD1D6\uD1D7\uD1D8\uD1D9\uD1DA\uD1DB\uD1DC\uD1DD"+
-            "\uD1E1\uD1E2\uD1E3\uD1E4\uD1E5\uD1E6\uD1E7\uD1E8"+
-            "\uD1E9\uD1EA\uD1EB\uD1EC\uD1ED\uD1EE\uD1EF\uD1F0"+
-            "\uD1F1\uD1F3\uD1F4\uD1F5\uD1F6\uD1F7\uD1F8\uD1F9"+
-            "\uD1FA\uD1FB\uD1FC\uD1FD\uD241\uD242\uD243\uD244"+
-            "\uD245\uD246\uD247\uD248\uD249\uD24A\uD24B\uD24C"+
-            "\uD24D\uD24E\uD24F\uD250\uD251\uD253\uD254\uD255"+
-            "\uD256\uD257\uD258\uD259\uD25A\uD25B\uD25C\uD25D"+
-            "\uD261\uD262\uD263\uD264\uD265\uD266\uD267\uD268"+
-            "\uD269\uD26A\uD26B\uD26C\uD26D\uD26E\uD26F\uD270"+
-            "\uD271\uD273\uD274\uD275\uD276\uD277\uD278\uD279"+
-            "\uD27A\uD27B\uD27C\uD27D\uD281\uD282\uD283\uD284"+
-            "\uD285\uD286\uD287\uD288\uD289\uD28A\uD28B\uD28C"+
-            "\uD28D\uD28E\uD28F\uD290\uD291\uD293\uD294\uD295"+
-            "\uD296\uD297\uD298\uD299\uD29A\uD29B\uD29C\uD29D"+
-            "\uD2A1\uD2A2\uD2A3\uD2A4\uD2A5\uD2A6\uD2A7\uD2A8"+
-            "\uD2A9\uD2AA\uD2AB\uD2AC\uD2AD\uD2AE\uD2AF\uD2B0"+
-            "\uD2B1\uD2B3\uD2B4\uD2B5\uD2B6\uD2B7\uD2B8\uD2B9"+
-            "\uD2BA\uD2BB\uD2BC\uD2BD\uD2C1\uD2C2\uD2C3\uD2C4"+
-            "\uD2C5\uD2C6\uD2C7\uD2C8\uD2C9\uD2CA\uD2CB\uD2CC"+
-            "\uD2CD\uD2CE\uD2CF\uD2D0\uD2D1\uD2D3\uD2D4\uD2D5"+
-            "\uD2D6\uD2D7\uD2D8\uD2D9\uD2DA\uD2DB\uD2DC\uD2DD"+
-            "\uD2E1\uD2E2\uD2E3\uD2E4\uD2E5\uD2E6\uD2E7\uD2E8"+
-            "\uD2E9\uD2EA\uD2EB\uD2EC\uD2ED\uD2EE\uD2EF\uD2F0"+
-            "\uD2F1\uD2F3\uD2F4\uD2F5\uD2F6\uD2F7\uD2F8\uD2F9"+
-            "\uD2FA\uD2FB\uD2FC\uD2FD\uD341\uD342\uD343\uD344"+
-            "\uD345\uD346\uD347\uD348\uD349\uD34A\uD34B\uD34C"+
-            "\uD34D\uD34E\uD34F\uD350\uD351\uD353\uD354\uD355"+
-            "\uD356\uD357\uD358\uD359\uD35A\uD35B\uD35C\uD35D"+
-            "\uD361\uD362\uD363\uD364\uD365\uD366\uD367\uD368"+
-            "\uD369\uD36A\uD36B\uD36C\uD36D\uD36E\uD36F\uD370"+
-            "\uD371\uD373\uD374\uD375\uD376\uD377\uD378\uD379"+
-            "\uD37A\uD37B\uD37C\uD37D\uD381\uD382\uD383\uD384"+
-            "\uD385\uD386\uD387\uD388\uD389\uD38A\uD38B\uD38C"+
-            "\uD38D\uD38E\uD38F\uD390\uD391\uD393\uD394\uD395"+
-            "\uD396\uD397\uD398\uD399\uD39A\uD39B\uD39C\uD39D"+
-            "\uD3A1\uD3A2\uD3A3\uD3A4\uD3A5\uD3A6\uD3A7\uD3A8"+
-            "\uD3A9\uD3AA\uD3AB\uD3AC\uD3AD\uD3AE\uD3AF\uD3B0"+
-            "\uD3B1\uD3B3\uD3B4\uD3B5\uD3B6\uD3B7\uD3B8\uD3B9"+
-            "\uD3BA\uD3BB\uD3BC\uD3BD\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uE0D0\uE0D6\uE0E7\uE1CF\uE1E8\uE23D\uE2FB\uE332"+
-            "\uE348\uE360\uE36D\uE3D4\uE3D5\uE3D8\uE3DB\uE3DC"+
-            "\uE3DD\uE3DE\uE3DF\uE3E0\uE3E2\uE3E3\uE3E4\uE3E5"+
-            "\uE3E6\uE3E8\uE3E9\uE3EA\uE3EB\uE3ED\uE3EF\uE3F0"+
-            "\uE3F2\uE3F6\uE3FA\uE3FC\uE3FD\uE3FE\uE432\uE433"+
-            "\uE437\uE438\uE439\uE43A\uE43B\uE43D\uE442\uE44E"+
-            "\uE452\uE453\uE454\uE456\uE457\uE458\uE459\uE45A"+
-            "\uE45B\uE45D\uE45E\uE45F\uE460\uE461\uE462\uE463"+
-            "\uE464\uE465\uE466\uE467\uE469\uE46A\uE46E\uE46F"+
-            "\uE471\uE472\uE474\uE475\uE476\uE477\uE478\uE479"+
-            "\uE47A\uE47B\uE492\uE493\uE494\uE495\uE496\uE497"+
-            "\uE499\uE49A\uE576\uE59E\uE5A5\uE5AB\uE5AE\uE648"+
-            "\uE65D\uE6CB\uE6E4\uE8C5\uE8E4\uE935\uE9A5\uE9D5"+
-            "\uE9F4\uEA9E\uEAA0\uEAB3\uEAE1\uEAE8\uEB93\uEBAD"+
-            "\uEBED\uECF5\uED31\uED39\uEDAE\uEDB1\uEDB2\uEDB9"+
-            "\uEDBB\uEDBC\uEDC4\uEDCE\uEDD0\uEDD2\uEDD6\uEDFA"+
-            "\uEDFB\uEDFC\uEDFE\uEE31\uEE34\uEE37\uEE3D\uEE3F"+
-            "\uEE40\uEE41\uEE43\uEE47\uEE48\uEE4C\uEE54\uEE56"+
-            "\uEE57\uEE5A\uEE62\uEE66\uEE69\uEE6C\uEE6F\uEE71"+
-            "\uEE74\uEE75\uEE76\uEE78\uEE7A\uEE7B\uEE7C\uEE91"+
-            "\uEE93\uEE94\uEE97\uEE98\uEE99\uEE9B\uEEA1\uEEA6"+
-            "\uEEA9\uEEAA\uEEAC\uEEAD\uEEB0\uEEBF\uEEC1\uEEC6"+
-            "\uEEC7\uEECB\uEECD\uEECF\uEED0\uEED3\uEEDF\uEEE4"+
-            "\uEEE6\uEEF7\uEF77\uEF78\uEF92\uEF93\uEF99\uEF9B"+
-            "\uEF9D\uEFA0\uEFA7\uEFAC\uEFCC\uEFF7\uF051\uF075"+
-            "\uF096\uF099\uF09E\uF0A0\uF0A4\uF0A7\uF0A9\uF0AA"+
-            "\uF0BA\uF0BB\uF0BD\uF0C1\uF0C2\uF0C6\uF0C7\uF0CC"+
-            "\uF0CF\uF0D0\uF0D1\uF0D2\uF0D8\uF136\uF137\uF13A"+
-            "\uF13F\uF140\uF141\uF142\uF145\uF148\uF14A\uF150"+
-            "\uF151\uF155\uF156\uF159\uF15A\uF165\uF16D\uF16E"+
-            "\uF171\uF174\uF177\uF178\uF199\uF19A\uF19C\uF1A1"+
-            "\uF1A2\uF1A3\uF1EE\uF26B\uF44D\uF49C\uF4B1\uF537";
-
-        private final static String innerIndex9=
-            "\uF57E\uF696\uF698\uF6B8\uF6C8\uF6D3\uF76B\uF792"+
-            "\uF831\uF832\uF876\uF939\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\uDA31\uDA32\uDA33\uDA34\uDA35\uDA36\uDA37"+
-            "\uDA38\uDA39\uDA3A\uDA3B\uDA3C\uDA3D\uDA3E\uDA3F"+
-            "\uDA40\uDA41\uDA42\uDA43\uDA44\uDA45\uDA46\uDA47"+
-            "\uDA48\uDA49\uDA4A\uDA4B\uDA4C\uDA4D\uDA4E\uDA4F"+
-            "\uDA50\uDA51\uDA52\uDA53\uDA54\uDA55\uDA56\uDA57"+
-            "\uDA58\uDA59\uDA5A\uDA5B\uDA5C\uDA5D\uDA5E\uDA5F"+
-            "\uDA60\uDA61\uDA62\uDA63\uDA64\uDA65\uDA66\uDA67"+
-            "\uDA68\uDA69\uDA6A\uDA6B\uD93C\uDA6D\uDA6E\uDA6F"+
-            "\uDA70\uDA71\uDA72\uDA73\uDA74\uDA75\uDA76\uDA77"+
-            "\uDA78\uDA79\uDA7A\uDA7B\uDA7C\uDA7D\uDA7E\uDA91"+
-            "\uDA92\uDA93\uDA94\uDA95\uDA96\uDA97\uDA98\uDA99"+
-            "\uDA9A\uDA9B\uDA9C\uDA9D\uDA9E\uDA9F\uD93D\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\uD95B\uD95C\uD9A0\uDAA0\u0000\uD95D\uDA6C\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000";
-
-        private final static short index1[] = {
-            1, 2, 3, 4, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-            6, 7, 8, 9, 10, 11, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-            13, 14, 15, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 18,
-            19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
-            35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
-            51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
-            67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
-            83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98,
-            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 100, 101, 102,
-            103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118,
-            119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
-            135, 136, 137, 138, 139, 140, 141, 142, 0, 0, 0, 0, 0, 0, 0, 0,
-            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-            0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 144, 0, 0, 0, 0, 145
-        };
-
-        private static String index2[] = {
-            innerIndex0,
-            innerIndex1,
-            innerIndex2,
-            innerIndex3,
-            innerIndex4,
-            innerIndex5,
-            innerIndex6,
-            innerIndex7,
-            innerIndex8,
-            innerIndex9
-        };
-    }
-}
--- a/jdk/src/java.desktop/unix/classes/sun/awt/motif/X11KSC5601.java	Thu May 14 20:14:44 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,149 +0,0 @@
-/*
- * Copyright (c) 1996, 2005, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.awt.motif;
-
-import java.nio.CharBuffer;
-import java.nio.ByteBuffer;
-import java.nio.charset.*;
-import sun.nio.cs.*;
-import sun.nio.cs.ext.*;
-import static sun.nio.cs.CharsetMapping.*;
-
-public class X11KSC5601 extends Charset {
-    public X11KSC5601 () {
-        super("X11KSC5601", null);
-    }
-    public CharsetEncoder newEncoder() {
-        return new Encoder(this);
-    }
-    public CharsetDecoder newDecoder() {
-        return new Decoder(this);
-    }
-
-    public boolean contains(Charset cs) {
-        return cs instanceof X11KSC5601;
-    }
-
-    private class Encoder extends CharsetEncoder {
-        private DoubleByte.Encoder enc = (DoubleByte.Encoder)new EUC_KR().newEncoder();
-
-        public Encoder(Charset cs) {
-            super(cs, 2.0f, 2.0f);
-        }
-
-        public boolean canEncode(char c) {
-            if (c <= 0x7F) {
-                return false;
-            }
-            return enc.canEncode(c);
-        }
-
-        protected int encodeDouble(char c) {
-            return enc.encodeChar(c);
-        }
-
-        protected CoderResult encodeLoop(CharBuffer src, ByteBuffer dst) {
-            char[] sa = src.array();
-            int sp = src.arrayOffset() + src.position();
-            int sl = src.arrayOffset() + src.limit();
-            byte[] da = dst.array();
-            int dp = dst.arrayOffset() + dst.position();
-            int dl = dst.arrayOffset() + dst.limit();
-
-            try {
-                while (sp < sl) {
-                    char c = sa[sp];
-                    if (c <= '\u007f')
-                        return CoderResult.unmappableForLength(1);
-                    int ncode = encodeDouble(c);
-                    if (ncode != 0 && c != '\u0000' ) {
-                        da[dp++] = (byte) ((ncode  >> 8) & 0x7f);
-                        da[dp++] = (byte) (ncode & 0x7f);
-                        sp++;
-                        continue;
-                    }
-                    return CoderResult.unmappableForLength(1);
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(sp - src.arrayOffset());
-                dst.position(dp - dst.arrayOffset());
-            }
-        }
-        public boolean isLegalReplacement(byte[] repl) {
-            return true;
-        }
-    }
-
-    private class Decoder extends  CharsetDecoder {
-        private DoubleByte.Decoder dec = (DoubleByte.Decoder)new EUC_KR().newDecoder();
-
-        public Decoder(Charset cs) {
-            super(cs, 0.5f, 1.0f);
-        }
-
-        protected char decodeDouble(int b1, int b2) {
-            return dec.decodeDouble(b1, b2);
-        }
-
-        protected CoderResult decodeLoop(ByteBuffer src, CharBuffer dst) {
-            byte[] sa = src.array();
-            int sp = src.arrayOffset() + src.position();
-            int sl = src.arrayOffset() + src.limit();
-            assert (sp <= sl);
-            sp = (sp <= sl ? sp : sl);
-            char[] da = dst.array();
-            int dp = dst.arrayOffset() + dst.position();
-            int dl = dst.arrayOffset() + dst.limit();
-            assert (dp <= dl);
-            dp = (dp <= dl ? dp : dl);
-
-
-            try {
-                while (sp < sl) {
-                    if ( sl - sp < 2) {
-                        return CoderResult.UNDERFLOW;
-                    }
-                    int b1 = sa[sp] & 0xFF | 0x80;
-                    int b2 = sa[sp + 1] & 0xFF | 0x80;
-                    char c = decodeDouble(b1, b2);
-                    if (c == UNMAPPABLE_DECODING) {
-                        return CoderResult.unmappableForLength(2);
-                    }
-                    if (dl - dp < 1)
-                        return CoderResult.OVERFLOW;
-                    da[dp++] = c;
-                    sp +=2;
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(sp - src.arrayOffset());
-                dst.position(dp - dst.arrayOffset());
-            }
-
-        }
-    }
-}
--- a/jdk/src/java.desktop/unix/classes/sun/awt/motif/X11SunUnicode_0.java	Thu May 14 20:14:44 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,153 +0,0 @@
-/*
- * Copyright (c) 2001, 2005, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-
-package sun.awt.motif;
-
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetEncoder;
-import java.nio.charset.CharsetDecoder;
-import sun.nio.cs.ext.DoubleByteEncoder;
-
-public class X11SunUnicode_0 extends Charset {
-    public X11SunUnicode_0 () {
-        super("X11SunUnicode_0", null);
-    }
-
-    public CharsetEncoder newEncoder() {
-        return new Encoder(this);
-    }
-
-    /* Seems like supporting a decoder is required, but we aren't going
-     * to be publically exposing this class, so no need to waste work
-     */
-    public CharsetDecoder newDecoder() {
-        throw new Error("Decoder is not implemented for X11SunUnicode_0 Charset");
-    }
-
-    public boolean contains(Charset cs) {
-        return cs instanceof X11SunUnicode_0;
-    }
-
-    private static class Encoder extends DoubleByteEncoder {
-        public Encoder(Charset cs) {
-            super(cs, index1, index2);
-        }
-
-        private final static String innerIndex0=
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0120\u0121\u0122\u0000\u0123\u0124\u0125"+
-            "\u0126\u0127\u0128\u0129\u012A\u012B\u012C\u012D"+
-            "\u012E\u012F\u0130\u0131\u0132\u0133\u0134\u0135"+
-            "\u0136\u0137\u0138\u0139\u013A\u013B\u013C\u013D"+
-            "\u013E\u013F\u0140\u0141\u0142\u0143\u0144\u0145"+
-            "\u0146\u0147\u0148\u0149\u014A\u014B\u014C\u014D"+
-            "\u014E\u014F\u0150\u0151\u0152\u0153\u0154\u0155"+
-            "\u0156\u0157\u0000\u0000\u0158\u0159\u015A\u015B"+
-            "\u015C\u015D\u015E\u015F\u0160\u0161\u0162\u0163"+
-            "\u0164\u0165\u0166\u0167\u0168\u0169\u0000\u0000"+
-            "\u016A\u016B\u016C\u016D\u016E\u0000\u0000\u0000"+
-            "\u016F\u0170\u0171\u0172\u0173\u0174\u0175\u0176"+
-            "\u0177\u0178\u0179\u017A\u017B\u017C\u017D\u017E"+
-            "\u017F\u0180\u0181\u0182\u0183\u0184\u0185\u0186"+
-            "\u0187\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
-            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000";
-
-        private final static short index1[] = {
-            0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
-            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-        };
-
-        private final static String index2[] = {
-            innerIndex0
-        };
-
-        /* The default implementation creates a decoder and we don't have one */
-        public boolean isLegalReplacement(byte[] repl) {
-            return true;
-        }
-    }
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.desktop/unix/classes/sun/font/DoubleByteEncoder.java	Wed Jul 05 20:33:35 2017 +0200
@@ -0,0 +1,241 @@
+/*
+ * Copyright (c) 2002, 2006, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ */
+
+package sun.font;
+
+import java.nio.ByteBuffer;
+import java.nio.CharBuffer;
+import java.nio.charset.Charset;
+import java.nio.charset.CharsetEncoder;
+import java.nio.charset.CoderResult;
+import sun.nio.cs.Surrogate;
+
+public abstract class DoubleByteEncoder
+    extends CharsetEncoder
+{
+
+    private short index1[];
+    private String index2[];
+
+    private final Surrogate.Parser sgp = new Surrogate.Parser();
+
+    protected DoubleByteEncoder(Charset cs,
+                                short[] index1, String[] index2)
+    {
+        super(cs, 2.0f, 2.0f);
+        this.index1 = index1;
+        this.index2 = index2;
+    }
+
+    protected DoubleByteEncoder(Charset cs,
+                                short[] index1, String[] index2,
+                                float avg, float max)
+    {
+        super(cs, avg, max);
+        this.index1 = index1;
+        this.index2 = index2;
+    }
+
+    protected DoubleByteEncoder(Charset cs,
+                                short[] index1, String[] index2, byte[] repl)
+    {
+        super(cs, 2.0f, 2.0f, repl);
+        this.index1 = index1;
+        this.index2 = index2;
+    }
+
+
+    protected DoubleByteEncoder(Charset cs,
+                                short[] index1, String[] index2,
+                                byte[] repl, float avg, float max)
+    {
+        super(cs, avg, max,repl);
+        this.index1 = index1;
+        this.index2 = index2;
+    }
+
+    public boolean canEncode(char c) {
+        return (encodeSingle(c) != -1 ||
+                encodeDouble(c) != 0);
+    }
+
+    private CoderResult encodeArrayLoop(CharBuffer src, ByteBuffer dst) {
+        char[] sa = src.array();
+        int sp = src.arrayOffset() + src.position();
+        int sl = src.arrayOffset() + src.limit();
+        byte[] da = dst.array();
+        int dp = dst.arrayOffset() + dst.position();
+        int dl = dst.arrayOffset() + dst.limit();
+
+        try {
+            while (sp < sl) {
+                char c = sa[sp];
+                if (Character.isSurrogate(c)) {
+                    if (sgp.parse(c, sa, sp, sl) < 0)
+                        return sgp.error();
+                    if (sl - sp < 2)
+                        return CoderResult.UNDERFLOW;
+                    char c2 = sa[sp + 1];
+
+                    byte[] outputBytes = new byte[2];
+                    outputBytes = encodeSurrogate(c, c2);
+
+                    if (outputBytes == null) {
+                        return sgp.unmappableResult();
+                    }
+                    else {
+                        if (dl - dp < 2)
+                            return CoderResult.OVERFLOW;
+                        da[dp++] = outputBytes[0];
+                        da[dp++] = outputBytes[1];
+                        sp += 2;
+                        continue;
+                    }
+                }
+                if (c >= '\uFFFE')
+                    return CoderResult.unmappableForLength(1);
+
+                int b = encodeSingle(c);
+                if (b != -1) { // Single Byte
+                    if (dl - dp < 1)
+                        return CoderResult.OVERFLOW;
+                    da[dp++] = (byte)b;
+                    sp++;
+                    continue;
+                }
+
+                int ncode  = encodeDouble(c);
+                if (ncode != 0 && c != '\u0000' ) {
+                    if (dl - dp < 2)
+                        return CoderResult.OVERFLOW;
+                    da[dp++] = (byte) ((ncode & 0xff00) >> 8);
+                    da[dp++] = (byte) (ncode & 0xff);
+                    sp++;
+                    continue;
+                }
+                return CoderResult.unmappableForLength(1);
+                }
+            return CoderResult.UNDERFLOW;
+        } finally {
+            src.position(sp - src.arrayOffset());
+            dst.position(dp - dst.arrayOffset());
+        }
+    }
+
+    private CoderResult encodeBufferLoop(CharBuffer src, ByteBuffer dst) {
+        int mark = src.position();
+
+        try {
+            while (src.hasRemaining()) {
+                char c = src.get();
+                if (Character.isSurrogate(c)) {
+                    int surr;
+                    if ((surr = sgp.parse(c, src)) < 0)
+                        return sgp.error();
+                    char c2 = Surrogate.low(surr);
+                    byte[] outputBytes = new byte[2];
+                    outputBytes = encodeSurrogate(c, c2);
+
+                    if (outputBytes == null) {
+                        return sgp.unmappableResult();
+                    } else {
+                        if (dst.remaining() < 2)
+                            return CoderResult.OVERFLOW;
+                        mark += 2;
+                        dst.put(outputBytes[0]);
+                        dst.put(outputBytes[1]);
+                        continue;
+                    }
+                }
+                if (c >= '\uFFFE')
+                    return CoderResult.unmappableForLength(1);
+                int b = encodeSingle(c);
+
+                if (b != -1) { // Single-byte character
+                    if (dst.remaining() < 1)
+                        return CoderResult.OVERFLOW;
+                    mark++;
+                    dst.put((byte)b);
+                    continue;
+                }
+                // Double Byte character
+
+                int ncode = encodeDouble(c);
+                if (ncode != 0 && c != '\u0000') {
+                    if (dst.remaining() < 2)
+                        return CoderResult.OVERFLOW;
+                    mark++;
+                    dst.put((byte) ((ncode & 0xff00) >> 8));
+                    dst.put((byte) ncode);
+                    continue;
+                }
+                return CoderResult.unmappableForLength(1);
+            }
+
+            return CoderResult.UNDERFLOW;
+        } finally {
+            src.position(mark);
+        }
+    }
+
+    protected CoderResult encodeLoop(CharBuffer src, ByteBuffer dst) {
+        if (true && src.hasArray() && dst.hasArray())
+            return encodeArrayLoop(src, dst);
+        else
+            return encodeBufferLoop(src, dst);
+    }
+
+    /*
+     * Can be changed by subclass
+     */
+    protected int encodeDouble(char ch) {
+        int offset = index1[((ch & 0xff00) >> 8 )] << 8;
+        return index2[offset >> 12].charAt((offset & 0xfff) + (ch & 0xff));
+    }
+
+    /*
+     * Can be changed by subclass
+     */
+    protected int encodeSingle(char inputChar) {
+        if (inputChar < 0x80)
+            return (byte)inputChar;
+        else
+            return -1;
+    }
+
+    /**
+     *  Protected method which should be overridden by concrete DBCS
+     *  CharsetEncoder classes which included supplementary characters
+     *  within their mapping coverage.
+     *  null return value indicates surrogate values could not be
+     *  handled or encoded.
+     */
+    protected byte[] encodeSurrogate(char highSurrogate, char lowSurrogate) {
+        return null;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.desktop/unix/classes/sun/font/MFontConfiguration.java	Wed Jul 05 20:33:35 2017 +0200
@@ -0,0 +1,332 @@
+/*
+ * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package sun.font;
+
+import sun.awt.FontConfiguration;
+import sun.awt.X11FontManager;
+import sun.font.FontUtilities;
+import sun.font.SunFontManager;
+import sun.util.logging.PlatformLogger;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.nio.charset.Charset;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Properties;
+import java.util.Scanner;
+
+public class MFontConfiguration extends FontConfiguration {
+
+    private static FontConfiguration fontConfig = null;
+    private static PlatformLogger logger;
+
+    public MFontConfiguration(SunFontManager fm) {
+        super(fm);
+        if (FontUtilities.debugFonts()) {
+            logger = PlatformLogger.getLogger("sun.awt.FontConfiguration");
+        }
+        initTables();
+    }
+
+
+    public MFontConfiguration(SunFontManager fm,
+                              boolean preferLocaleFonts,
+                              boolean preferPropFonts) {
+        super(fm, preferLocaleFonts, preferPropFonts);
+        if (FontUtilities.debugFonts()) {
+            logger = PlatformLogger.getLogger("sun.awt.FontConfiguration");
+        }
+        initTables();
+    }
+
+    /* Needs to be kept in sync with updates in the languages used in
+     * the fontconfig files.
+     */
+    protected void initReorderMap() {
+        reorderMap = new HashMap<>();
+        if (osName == null) {  /* null means SunOS */
+            initReorderMapForSolaris();
+        } else {
+            initReorderMapForLinux();
+        }
+    }
+
+    private void initReorderMapForSolaris() {
+        /* Don't create a no-op entry, so we can optimize this case
+         * i.e. we don't need to do anything so can avoid slower paths in
+         * the code.
+         */
+//      reorderMap.put("UTF-8", "latin-1");
+        reorderMap.put("UTF-8.hi", "devanagari"); // NB is in Lucida.
+        reorderMap.put("UTF-8.ja",
+                       split("japanese-x0201,japanese-x0208,japanese-x0212"));
+        reorderMap.put("UTF-8.ko", "korean-johab");
+        reorderMap.put("UTF-8.th", "thai");
+        reorderMap.put("UTF-8.zh.TW", "chinese-big5");
+        reorderMap.put("UTF-8.zh.HK", split("chinese-big5,chinese-hkscs"));
+        if (FontUtilities.isSolaris8) {
+            reorderMap.put("UTF-8.zh.CN", split("chinese-gb2312,chinese-big5"));
+        } else {
+            reorderMap.put("UTF-8.zh.CN",
+                           split("chinese-gb18030-0,chinese-gb18030-1"));
+        }
+        reorderMap.put("UTF-8.zh",
+                       split("chinese-big5,chinese-hkscs,chinese-gb18030-0,chinese-gb18030-1"));
+        reorderMap.put("Big5", "chinese-big5");
+        reorderMap.put("Big5-HKSCS", split("chinese-big5,chinese-hkscs"));
+        if (! FontUtilities.isSolaris8 && ! FontUtilities.isSolaris9) {
+            reorderMap.put("GB2312", split("chinese-gbk,chinese-gb2312"));
+        } else {
+            reorderMap.put("GB2312","chinese-gb2312");
+        }
+        reorderMap.put("x-EUC-TW",
+            split("chinese-cns11643-1,chinese-cns11643-2,chinese-cns11643-3"));
+        reorderMap.put("GBK", "chinese-gbk");
+        reorderMap.put("GB18030",split("chinese-gb18030-0,chinese-gb18030-1"));
+
+        reorderMap.put("TIS-620", "thai");
+        reorderMap.put("x-PCK",
+                       split("japanese-x0201,japanese-x0208,japanese-x0212"));
+        reorderMap.put("x-eucJP-Open",
+                       split("japanese-x0201,japanese-x0208,japanese-x0212"));
+        reorderMap.put("EUC-KR", "korean");
+        /* Don't create a no-op entry, so we can optimize this case */
+//      reorderMap.put("ISO-8859-1", "latin-1");
+        reorderMap.put("ISO-8859-2", "latin-2");
+        reorderMap.put("ISO-8859-5", "cyrillic-iso8859-5");
+        reorderMap.put("windows-1251", "cyrillic-cp1251");
+        reorderMap.put("KOI8-R", "cyrillic-koi8-r");
+        reorderMap.put("ISO-8859-6", "arabic");
+        reorderMap.put("ISO-8859-7", "greek");
+        reorderMap.put("ISO-8859-8", "hebrew");
+        reorderMap.put("ISO-8859-9", "latin-5");
+        reorderMap.put("ISO-8859-13", "latin-7");
+        reorderMap.put("ISO-8859-15", "latin-9");
+    }
+
+    private void initReorderMapForLinux() {
+        reorderMap.put("UTF-8.ja.JP", "japanese-iso10646");
+        reorderMap.put("UTF-8.ko.KR", "korean-iso10646");
+        reorderMap.put("UTF-8.zh.TW", "chinese-tw-iso10646");
+        reorderMap.put("UTF-8.zh.HK", "chinese-tw-iso10646");
+        reorderMap.put("UTF-8.zh.CN", "chinese-cn-iso10646");
+        reorderMap.put("x-euc-jp-linux",
+                        split("japanese-x0201,japanese-x0208"));
+        reorderMap.put("GB2312", "chinese-gb18030");
+        reorderMap.put("Big5", "chinese-big5");
+        reorderMap.put("EUC-KR", "korean");
+        if (osName.equals("Sun")){
+            reorderMap.put("GB18030", "chinese-cn-iso10646");
+        }
+        else {
+            reorderMap.put("GB18030", "chinese-gb18030");
+        }
+    }
+
+    /**
+     * Sets the OS name and version from environment information.
+     */
+    protected void setOsNameAndVersion(){
+        super.setOsNameAndVersion();
+
+        if (osName.equals("SunOS")) {
+            //don't care os name on Solaris
+            osName = null;
+        } else if (osName.equals("Linux")) {
+            try {
+                File f;
+                if ((f = new File("/etc/fedora-release")).canRead()) {
+                    osName = "Fedora";
+                    osVersion = getVersionString(f);
+                } else if ((f = new File("/etc/redhat-release")).canRead()) {
+                    osName = "RedHat";
+                    osVersion = getVersionString(f);
+                } else if ((f = new File("/etc/turbolinux-release")).canRead()) {
+                    osName = "Turbo";
+                    osVersion = getVersionString(f);
+                } else if ((f = new File("/etc/SuSE-release")).canRead()) {
+                    osName = "SuSE";
+                    osVersion = getVersionString(f);
+                } else if ((f = new File("/etc/lsb-release")).canRead()) {
+                    /* Ubuntu and (perhaps others) use only lsb-release.
+                     * Syntax and encoding is compatible with java properties.
+                     * For Ubuntu the ID is "Ubuntu".
+                     */
+                    Properties props = new Properties();
+                    props.load(new FileInputStream(f));
+                    osName = props.getProperty("DISTRIB_ID");
+                    osVersion =  props.getProperty("DISTRIB_RELEASE");
+                }
+            } catch (Exception e) {
+            }
+        }
+        return;
+    }
+
+    /**
+     * Gets the OS version string from a Linux release-specific file.
+     */
+    private String getVersionString(File f){
+        try {
+            Scanner sc  = new Scanner(f);
+            return sc.findInLine("(\\d)+((\\.)(\\d)+)*");
+        }
+        catch (Exception e){
+        }
+        return null;
+    }
+
+    private static final String fontsDirPrefix = "$JRE_LIB_FONTS";
+
+    protected String mapFileName(String fileName) {
+        if (fileName != null && fileName.startsWith(fontsDirPrefix)) {
+            return SunFontManager.jreFontDirName
+                    + fileName.substring(fontsDirPrefix.length());
+        }
+        return fileName;
+    }
+
+    // overrides FontConfiguration.getFallbackFamilyName
+    public String getFallbackFamilyName(String fontName, String defaultFallback) {
+        // maintain compatibility with old font.properties files, which
+        // either had aliases for TimesRoman & Co. or defined mappings for them.
+        String compatibilityName = getCompatibilityFamilyName(fontName);
+        if (compatibilityName != null) {
+            return compatibilityName;
+        }
+        return defaultFallback;
+    }
+
+    protected String getEncoding(String awtFontName,
+            String characterSubsetName) {
+        // extract encoding field from XLFD
+        int beginIndex = 0;
+        int fieldNum = 13; // charset registry field
+        while (fieldNum-- > 0 && beginIndex >= 0) {
+            beginIndex = awtFontName.indexOf("-", beginIndex) + 1;
+        }
+        if (beginIndex == -1) {
+            return "default";
+        }
+        String xlfdEncoding = awtFontName.substring(beginIndex);
+        if (xlfdEncoding.indexOf("fontspecific") > 0) {
+            if (awtFontName.indexOf("dingbats") > 0) {
+                return "sun.font.X11Dingbats";
+            } else if (awtFontName.indexOf("symbol") > 0) {
+                return "sun.awt.Symbol";
+            }
+        }
+        String encoding = encodingMap.get(xlfdEncoding);
+        if (encoding == null) {
+            encoding = "default";
+        }
+        return encoding;
+    }
+
+    protected Charset getDefaultFontCharset(String fontName) {
+        return Charset.forName("ISO8859_1");
+    }
+
+    protected String getFaceNameFromComponentFontName(String componentFontName) {
+        return null;
+    }
+
+    protected String getFileNameFromComponentFontName(String componentFontName) {
+        // for X11, component font name is XLFD
+        // if we have a file name already, just use it; otherwise let's see
+        // what the graphics environment can provide
+        String fileName = getFileNameFromPlatformName(componentFontName);
+        if (fileName != null && fileName.charAt(0) == '/' &&
+            !needToSearchForFile(fileName)) {
+            return fileName;
+        }
+        return ((X11FontManager) fontManager).getFileNameFromXLFD(componentFontName);
+    }
+
+    public HashSet<String> getAWTFontPathSet() {
+        HashSet<String> fontDirs = new HashSet<String>();
+        short[] scripts = getCoreScripts(0);
+        for (int i = 0; i< scripts.length; i++) {
+            String path = getString(table_awtfontpaths[scripts[i]]);
+            if (path != null) {
+                int start = 0;
+                int colon = path.indexOf(':');
+                while (colon >= 0) {
+                    fontDirs.add(path.substring(start, colon));
+                    start = colon + 1;
+                    colon = path.indexOf(':', start);
+                }
+                fontDirs.add((start == 0) ? path : path.substring(start));
+            }
+        }
+        return fontDirs;
+    }
+
+    /* methods for table setup ***********************************************/
+
+    private static HashMap<String, String> encodingMap = new HashMap<>();
+
+    private void initTables() {
+        // encodingMap maps XLFD encoding component to
+        // name of corresponding java.nio charset
+        encodingMap.put("iso8859-1", "ISO-8859-1");
+        encodingMap.put("iso8859-2", "ISO-8859-2");
+        encodingMap.put("iso8859-4", "ISO-8859-4");
+        encodingMap.put("iso8859-5", "ISO-8859-5");
+        encodingMap.put("iso8859-6", "ISO-8859-6");
+        encodingMap.put("iso8859-7", "ISO-8859-7");
+        encodingMap.put("iso8859-8", "ISO-8859-8");
+        encodingMap.put("iso8859-9", "ISO-8859-9");
+        encodingMap.put("iso8859-13", "ISO-8859-13");
+        encodingMap.put("iso8859-15", "ISO-8859-15");
+        encodingMap.put("gb2312.1980-0", "sun.font.X11GB2312");
+        if (osName == null) {
+            // use standard converter on Solaris
+            encodingMap.put("gbk-0", "GBK");
+        } else {
+            encodingMap.put("gbk-0", "sun.font.X11GBK");
+        }
+        encodingMap.put("gb18030.2000-0", "sun.font.X11GB18030_0");
+        encodingMap.put("gb18030.2000-1", "sun.font.X11GB18030_1");
+        encodingMap.put("cns11643-1", "sun.font.X11CNS11643P1");
+        encodingMap.put("cns11643-2", "sun.font.X11CNS11643P2");
+        encodingMap.put("cns11643-3", "sun.font.X11CNS11643P3");
+        encodingMap.put("big5-1", "Big5");
+        encodingMap.put("big5-0", "Big5");
+        encodingMap.put("hkscs-1", "Big5-HKSCS");
+        encodingMap.put("ansi-1251", "windows-1251");
+        encodingMap.put("koi8-r", "KOI8-R");
+        encodingMap.put("jisx0201.1976-0", "JIS0201");
+        encodingMap.put("jisx0208.1983-0", "JIS0208");
+        encodingMap.put("jisx0212.1990-0", "JIS0212");
+        encodingMap.put("ksc5601.1987-0", "sun.font.X11KSC5601");
+        encodingMap.put("ksc5601.1992-3", "sun.font.X11Johab");
+        encodingMap.put("tis620.2533-0", "TIS-620");
+        encodingMap.put("iso10646-1", "UTF-16BE");
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.desktop/unix/classes/sun/font/X11Dingbats.java	Wed Jul 05 20:33:35 2017 +0200
@@ -0,0 +1,132 @@
+/*
+ * Copyright (c) 1996, 2005, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package sun.font;
+
+import java.nio.ByteBuffer;
+import java.nio.CharBuffer;
+import java.nio.charset.*;
+
+public class X11Dingbats extends Charset {
+    public X11Dingbats () {
+        super("X11Dingbats", null);
+    }
+
+    public CharsetEncoder newEncoder() {
+        return new Encoder(this);
+    }
+
+    /* Seems like supporting a decoder is required, but we aren't going
+     * to be publically exposing this class, so no need to waste work
+     */
+    public CharsetDecoder newDecoder() {
+        throw new Error("Decoder is not supported by X11Dingbats Charset");
+    }
+
+    public boolean contains(Charset cs) {
+        return cs instanceof X11Dingbats;
+    }
+
+    private static class Encoder extends CharsetEncoder {
+        public Encoder(Charset cs) {
+            super(cs, 1.0f, 1.0f);
+        }
+
+        public boolean canEncode(char ch) {
+            if (ch >= 0x2701 && ch <= 0x275e) { // direct map
+                return true;
+            }
+            if (ch >= 0x2761 && ch <= 0x27be) {
+                return (table[ch - 0x2761] != 0x00);
+            }
+            return false;
+        }
+
+        protected CoderResult encodeLoop(CharBuffer src, ByteBuffer dst) {
+            char[] sa = src.array();
+            int sp = src.arrayOffset() + src.position();
+            int sl = src.arrayOffset() + src.limit();
+            assert (sp <= sl);
+            sp = (sp <= sl ? sp : sl);
+            byte[] da = dst.array();
+            int dp = dst.arrayOffset() + dst.position();
+            int dl = dst.arrayOffset() + dst.limit();
+            assert (dp <= dl);
+            dp = (dp <= dl ? dp : dl);
+
+            try {
+                while (sp < sl) {
+                    char c = sa[sp];
+                    if (dl - dp < 1)
+                        return CoderResult.OVERFLOW;
+
+                    if (!canEncode(c))
+                        return CoderResult.unmappableForLength(1);
+                    sp++;
+                    if (c >= 0x2761){
+                        da[dp++] = table[c - 0x2761]; // table lookup
+                    } else {
+                        da[dp++] = (byte)(c + 0x20 - 0x2700); // direct map
+                    }
+                }
+                return CoderResult.UNDERFLOW;
+            } finally {
+                src.position(sp - src.arrayOffset());
+                dst.position(dp - dst.arrayOffset());
+            }
+        }
+
+        private static byte[] table = {
+            (byte)0xa1, (byte)0xa2, (byte)0xa3, (byte)0xa4,
+            (byte)0xa5, (byte)0xa6, (byte)0xa7,
+            (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
+            (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
+            (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
+            (byte)0x00, (byte)0x00, (byte)0xb6, (byte)0xb7,
+            (byte)0xb8, (byte)0xb9, (byte)0xba, (byte)0xbb,
+            (byte)0xbc, (byte)0xbd, (byte)0xbe, (byte)0xbf,
+            (byte)0xc0, (byte)0xc1, (byte)0xc2, (byte)0xc3,
+            (byte)0xc4, (byte)0xc5, (byte)0xc6, (byte)0xc7,
+            (byte)0xc8, (byte)0xc9, (byte)0xca, (byte)0xcb,
+            (byte)0xcc, (byte)0xcd, (byte)0xce, (byte)0xcf,
+            (byte)0xd0, (byte)0xd1, (byte)0xd2, (byte)0xd3,
+            (byte)0xd4, (byte)0x00, (byte)0x00, (byte)0x00,
+            (byte)0xd8, (byte)0xd9, (byte)0xda, (byte)0xdb,
+            (byte)0xdc, (byte)0xdd, (byte)0xde, (byte)0x00,
+            (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
+            (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
+            (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
+            (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
+            (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
+            (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
+            (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
+            (byte)0x00, (byte)0x00, (byte)0x00};
+
+        /* The default implementation creates a decoder and we don't have one */
+        public boolean isLegalReplacement(byte[] repl) {
+            return true;
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.desktop/unix/classes/sun/font/X11GB18030_0.java	Wed Jul 05 20:33:35 2017 +0200
@@ -0,0 +1,4273 @@
+/*
+ * Copyright (c) 2001, 2005, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package sun.font;
+
+import java.nio.charset.Charset;
+import java.nio.charset.CharsetEncoder;
+import java.nio.charset.CharsetDecoder;
+
+public class X11GB18030_0 extends Charset {
+    public X11GB18030_0 () {
+        super("X11GB18030_0", null);
+    }
+
+    public CharsetEncoder newEncoder() {
+        return new Encoder(this);
+    }
+
+    /* Seems like supporting a decoder is required, but we aren't going
+     * to be publically exposing this class, so no need to waste work
+     */
+    public CharsetDecoder newDecoder() {
+        throw new Error("Decoder is not implemented for X11GB18030_0 Charset");
+    }
+
+    public boolean contains(Charset cs) {
+        return cs instanceof X11GB18030_0;
+    }
+
+    private static class Encoder extends DoubleByteEncoder {
+        public Encoder(Charset cs) {
+            super(cs, index1, index2);
+        }
+        protected int encodeSingle(char inputChar) {
+            return -1;
+        }
+        private final static String innerIndex0=
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uA1E8\u0000\u0000\uA1EC"+
+            "\uA1A7\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uA1E3\uA1C0\u0000\u0000\u0000\u0000\u0000\uA1A4"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uA1C1"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uA8A4\uA8A2\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uA8A8\uA8A6\uA8BA\u0000\uA8AC\uA8AA\u0000\u0000"+
+            "\u0000\u0000\uA8B0\uA8AE\u0000\u0000\u0000\uA1C2"+
+            "\u0000\uA8B4\uA8B2\u0000\uA8B9\u0000\u0000\u0000"+
+            "\u0000\uA8A1\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uA8A5\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uA8A7\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uA8A9\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uA8BD\u0000\u0000\u0000"+
+            "\uA8BE\u0000\u0000\u0000\u0000\uA8AD\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uA8B1\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uA8A3\u0000"+
+            "\uA8AB\u0000\uA8AF\u0000\uA8B3\u0000\uA8B5\u0000"+
+            "\uA8B6\u0000\uA8B7\u0000\uA8B8\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uA8BF\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uA8BB\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uA8C0\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uA1A6"+
+            "\u0000\uA1A5\uA840\uA841\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uA842\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uA6A1\uA6A2\uA6A3\uA6A4\uA6A5\uA6A6\uA6A7"+
+            "\uA6A8\uA6A9\uA6AA\uA6AB\uA6AC\uA6AD\uA6AE\uA6AF"+
+            "\uA6B0\uA6B1\u0000\uA6B2\uA6B3\uA6B4\uA6B5\uA6B6"+
+            "\uA6B7\uA6B8\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uA6C1\uA6C2\uA6C3\uA6C4\uA6C5\uA6C6\uA6C7"+
+            "\uA6C8\uA6C9\uA6CA\uA6CB\uA6CC\uA6CD\uA6CE\uA6CF"+
+            "\uA6D0\uA6D1\u0000\uA6D2\uA6D3\uA6D4\uA6D5\uA6D6"+
+            "\uA6D7\uA6D8\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uA7A7\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uA7A1\uA7A2\uA7A3\uA7A4\uA7A5\uA7A6\uA7A8\uA7A9"+
+            "\uA7AA\uA7AB\uA7AC\uA7AD\uA7AE\uA7AF\uA7B0\uA7B1"+
+            "\uA7B2\uA7B3\uA7B4\uA7B5\uA7B6\uA7B7\uA7B8\uA7B9"+
+            "\uA7BA\uA7BB\uA7BC\uA7BD\uA7BE\uA7BF\uA7C0\uA7C1"+
+            "\uA7D1\uA7D2\uA7D3\uA7D4\uA7D5\uA7D6\uA7D8\uA7D9"+
+            "\uA7DA\uA7DB\uA7DC\uA7DD\uA7DE\uA7DF\uA7E0\uA7E1"+
+            "\uA7E2\uA7E3\uA7E4\uA7E5\uA7E6\uA7E7\uA7E8\uA7E9"+
+            "\uA7EA\uA7EB\uA7EC\uA7ED\uA7EE\uA7EF\uA7F0\uA7F1"+
+            "\u0000\uA7D7\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uA95C\u0000\u0000\uA843\uA1AA\uA844\uA1AC\u0000"+
+            "\uA1AE\uA1AF\u0000\u0000\uA1B0\uA1B1\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uA845\uA1AD\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uA1EB\u0000\uA1E4\uA1E5\u0000\uA846\u0000\u0000"+
+            "\u0000\u0000\u0000\uA1F9\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uA2E3\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uA1E6\u0000\uA847\u0000\u0000"+
+            "\u0000\uA848\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uA1ED\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uA959\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uA2F1\uA2F2\uA2F3\uA2F4\uA2F5\uA2F6\uA2F7\uA2F8"+
+            "\uA2F9\uA2FA\uA2FB\uA2FC\u0000\u0000\u0000\u0000"+
+            "\uA2A1\uA2A2\uA2A3\uA2A4\uA2A5\uA2A6\uA2A7\uA2A8"+
+            "\uA2A9\uA2AA\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uA1FB\uA1FC\uA1FA\uA1FD\u0000\u0000\uA849\uA84A"+
+            "\uA84B\uA84C\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uA1CA\u0000\u0000\u0000\u0000\u0000\u0000\uA1C7"+
+            "\u0000\uA1C6\u0000\u0000\u0000\uA84D\u0000\u0000"+
+            "\u0000\u0000\uA1CC\u0000\u0000\uA1D8\uA1DE\uA84E"+
+            "\uA1CF\u0000\u0000\uA84F\u0000\uA1CE\u0000\uA1C4"+
+            "\uA1C5\uA1C9\uA1C8\uA1D2\u0000\u0000\uA1D3\u0000"+
+            "\u0000\u0000\u0000\u0000\uA1E0\uA1DF\uA1C3\uA1CB"+
+            "\u0000\u0000\u0000\u0000\u0000\uA1D7\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uA1D6\u0000\u0000\u0000\uA1D5\u0000\u0000\u0000"+
+            "\u0000\u0000\uA850\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uA1D9\uA1D4\u0000\u0000\uA1DC\uA1DD\uA851\uA852"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uA1DA\uA1DB"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uA892\u0000\u0000"+
+            "\u0000\uA1D1\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uA1CD\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uA853"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uA1D0\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uA2D9\uA2DA\uA2DB\uA2DC\uA2DD\uA2DE\uA2DF\uA2E0"+
+            "\uA2E1\uA2E2\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uA2C5\uA2C6\uA2C7\uA2C8"+
+            "\uA2C9\uA2CA\uA2CB\uA2CC\uA2CD\uA2CE\uA2CF\uA2D0"+
+            "\uA2D1\uA2D2\uA2D3\uA2D4\uA2D5\uA2D6\uA2D7\uA2D8"+
+            "\uA2B1\uA2B2\uA2B3\uA2B4\uA2B5\uA2B6\uA2B7\uA2B8"+
+            "\uA2B9\uA2BA\uA2BB\uA2BC\uA2BD\uA2BE\uA2BF\uA2C0"+
+            "\uA2C1\uA2C2\uA2C3\uA2C4\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uA9A4\uA9A5\uA9A6\uA9A7\uA9A8\uA9A9\uA9AA\uA9AB"+
+            "\uA9AC\uA9AD\uA9AE\uA9AF\uA9B0\uA9B1\uA9B2\uA9B3"+
+            "\uA9B4\uA9B5\uA9B6\uA9B7\uA9B8\uA9B9\uA9BA\uA9BB"+
+            "\uA9BC\uA9BD\uA9BE\uA9BF\uA9C0\uA9C1\uA9C2\uA9C3"+
+            "\uA9C4\uA9C5\uA9C6\uA9C7\uA9C8\uA9C9\uA9CA\uA9CB"+
+            "\uA9CC\uA9CD\uA9CE\uA9CF\uA9D0\uA9D1\uA9D2\uA9D3"+
+            "\uA9D4\uA9D5\uA9D6\uA9D7\uA9D8\uA9D9\uA9DA\uA9DB"+
+            "\uA9DC\uA9DD\uA9DE\uA9DF\uA9E0\uA9E1\uA9E2\uA9E3"+
+            "\uA9E4\uA9E5\uA9E6\uA9E7\uA9E8\uA9E9\uA9EA\uA9EB"+
+            "\uA9EC\uA9ED\uA9EE\uA9EF\u0000\u0000\u0000\u0000"+
+            "\uA854\uA855\uA856\uA857\uA858\uA859\uA85A\uA85B"+
+            "\uA85C\uA85D\uA85E\uA85F\uA860\uA861\uA862\uA863"+
+            "\uA864\uA865\uA866\uA867\uA868\uA869\uA86A\uA86B"+
+            "\uA86C\uA86D\uA86E\uA86F\uA870\uA871\uA872\uA873"+
+            "\uA874\uA875\uA876\uA877\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uA878\uA879\uA87A\uA87B\uA87C\uA87D\uA87E"+
+            "\uA880\uA881\uA882\uA883\uA884\uA885\uA886\uA887"+
+            "\u0000\u0000\u0000\uA888\uA889\uA88A\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uA1F6\uA1F5\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uA1F8\uA1F7\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uA88B\uA88C\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uA1F4\uA1F3"+
+            "\u0000\u0000\u0000\uA1F0\u0000\u0000\uA1F2\uA1F1"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uA88D\uA88E\uA88F\uA890\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uA1EF\uA1EE\u0000"+
+            "\u0000\uA891\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uA1E2\u0000\uA1E1\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uFE50\u0000\u0000\uFE54\u0000\u0000\u0000"+
+            "\uFE57\u0000\u0000\uFE58\uFE5D\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uFE5E"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uFE6B"+
+            "\u0000\u0000\uFE6E\u0000\u0000\u0000\uFE71\u0000"+
+            "\u0000\u0000\u0000\uFE73\u0000\u0000\uFE74\uFE75"+
+            "\u0000\u0000\u0000\uFE79\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uFE84\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uA98A\uA98B\uA98C\uA98D\uA98E\uA98F\uA990\uA991"+
+            "\uA992\uA993\uA994\uA995\u0000\u0000\u0000\u0000"+
+            "\uA1A1\uA1A2\uA1A3\uA1A8\u0000\uA1A9\uA965\uA996"+
+            "\uA1B4\uA1B5\uA1B6\uA1B7\uA1B8\uA1B9\uA1BA\uA1BB"+
+            "\uA1BE\uA1BF\uA893\uA1FE\uA1B2\uA1B3\uA1BC\uA1BD"+
+            "\u0000\u0000\u0000\u0000\u0000\uA894\uA895\u0000"+
+            "\u0000\uA940\uA941\uA942\uA943\uA944\uA945\uA946"+
+            "\uA947\uA948\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uA989\u0000"+
+            "\u0000\uA4A1\uA4A2\uA4A3\uA4A4\uA4A5\uA4A6\uA4A7"+
+            "\uA4A8\uA4A9\uA4AA\uA4AB\uA4AC\uA4AD\uA4AE\uA4AF"+
+            "\uA4B0\uA4B1\uA4B2\uA4B3\uA4B4\uA4B5\uA4B6\uA4B7"+
+            "\uA4B8\uA4B9\uA4BA\uA4BB\uA4BC\uA4BD\uA4BE\uA4BF"+
+            "\uA4C0\uA4C1\uA4C2\uA4C3\uA4C4\uA4C5\uA4C6\uA4C7"+
+            "\uA4C8\uA4C9\uA4CA\uA4CB\uA4CC\uA4CD\uA4CE\uA4CF"+
+            "\uA4D0\uA4D1\uA4D2\uA4D3\uA4D4\uA4D5\uA4D6\uA4D7"+
+            "\uA4D8\uA4D9\uA4DA\uA4DB\uA4DC\uA4DD\uA4DE\uA4DF"+
+            "\uA4E0\uA4E1\uA4E2\uA4E3\uA4E4\uA4E5\uA4E6\uA4E7"+
+            "\uA4E8\uA4E9\uA4EA\uA4EB\uA4EC\uA4ED\uA4EE\uA4EF"+
+            "\uA4F0\uA4F1\uA4F2\uA4F3\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uA961\uA962\uA966\uA967\u0000"+
+            "\u0000\uA5A1\uA5A2\uA5A3\uA5A4\uA5A5\uA5A6\uA5A7"+
+            "\uA5A8\uA5A9\uA5AA\uA5AB\uA5AC\uA5AD\uA5AE\uA5AF"+
+            "\uA5B0\uA5B1\uA5B2\uA5B3\uA5B4\uA5B5\uA5B6\uA5B7"+
+            "\uA5B8\uA5B9\uA5BA\uA5BB\uA5BC\uA5BD\uA5BE\uA5BF"+
+            "\uA5C0\uA5C1\uA5C2\uA5C3\uA5C4\uA5C5\uA5C6\uA5C7"+
+            "\uA5C8\uA5C9\uA5CA\uA5CB\uA5CC\uA5CD\uA5CE\uA5CF"+
+            "\uA5D0\uA5D1\uA5D2\uA5D3\uA5D4\uA5D5\uA5D6\uA5D7"+
+            "\uA5D8\uA5D9\uA5DA\uA5DB\uA5DC\uA5DD\uA5DE\uA5DF"+
+            "\uA5E0\uA5E1\uA5E2\uA5E3\uA5E4\uA5E5\uA5E6\uA5E7"+
+            "\uA5E8\uA5E9\uA5EA\uA5EB\uA5EC\uA5ED\uA5EE\uA5EF"+
+            "\uA5F0\uA5F1\uA5F2\uA5F3\uA5F4\uA5F5\uA5F6\u0000"+
+            "\u0000\u0000\u0000\u0000\uA960\uA963\uA964\u0000";
+
+        private final static String innerIndex1=
+            "\u0000\u0000\u0000\u0000\u0000\uA8C5\uA8C6\uA8C7"+
+            "\uA8C8\uA8C9\uA8CA\uA8CB\uA8CC\uA8CD\uA8CE\uA8CF"+
+            "\uA8D0\uA8D1\uA8D2\uA8D3\uA8D4\uA8D5\uA8D6\uA8D7"+
+            "\uA8D8\uA8D9\uA8DA\uA8DB\uA8DC\uA8DD\uA8DE\uA8DF"+
+            "\uA8E0\uA8E1\uA8E2\uA8E3\uA8E4\uA8E5\uA8E6\uA8E7"+
+            "\uA8E8\uA8E9\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uA2E5\uA2E6\uA2E7\uA2E8\uA2E9\uA2EA\uA2EB\uA2EC"+
+            "\uA2ED\uA2EE\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uA95A\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uA949\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uA94A\uA94B"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uA94C\uA94D\uA94E\u0000"+
+            "\u0000\uA94F\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uA950\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uA951\u0000"+
+            "\u0000\uA952\uA953\u0000\u0000\uA954\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uFE56"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uFE55\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uFE5A\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uFE5C\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uFE5B\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uFE60\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uFE5F\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uFE62"+
+            "\uFE65\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uFE63"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uFE64\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uFE68\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uFE69\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uFE6A\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uFE6F\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uFE70"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uFE72"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uFE78\u0000\u0000\u0000"+
+            "\u0000\uFE77\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uFE7A\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uFE7B\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uFE7D\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uFE7C\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uFE80\u0000\u0000\u0000\u0000"+
+            "\u0000\uFE81\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uFE82\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uFE83\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000";
+
+        private final static String innerIndex2=
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uFE85"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uFE86\u0000\u0000\uFE87\u0000\u0000"+
+            "\u0000\u0000\uFE88\uFE89\u0000\uFE8A\uFE8B\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uFE8D\u0000\u0000\u0000\uFE8C"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uFE8F\uFE8E"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uFE96"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uFE93"+
+            "\uFE94\uFE95\uFE97\uFE92\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uFE98\uFE99\uFE9A\uFE9B\uFE9C"+
+            "\uFE9D\uFE9E\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uFE9F\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uD2BB\uB6A1\u8140\uC6DF\u8141\u8142\u8143\uCDF2"+
+            "\uD5C9\uC8FD\uC9CF\uCFC2\uD8A2\uB2BB\uD3EB\u8144"+
+            "\uD8A4\uB3F3\u8145\uD7A8\uC7D2\uD8A7\uCAC0\u8146"+
+            "\uC7F0\uB1FB\uD2B5\uB4D4\uB6AB\uCBBF\uD8A9\u8147"+
+            "\u8148\u8149\uB6AA\u814A\uC1BD\uD1CF\u814B\uC9A5"+
+            "\uD8AD\u814C\uB8F6\uD1BE\uE3DC\uD6D0\u814D\u814E"+
+            "\uB7E1\u814F\uB4AE\u8150\uC1D9\u8151\uD8BC\u8152"+
+            "\uCDE8\uB5A4\uCEAA\uD6F7\u8153\uC0F6\uBED9\uD8AF"+
+            "\u8154\u8155\u8156\uC4CB\u8157\uBEC3\u8158\uD8B1"+
+            "\uC3B4\uD2E5\u8159\uD6AE\uCEDA\uD5A7\uBAF5\uB7A6"+
+            "\uC0D6\u815A\uC6B9\uC5D2\uC7C7\u815B\uB9D4\u815C"+
+            "\uB3CB\uD2D2\u815D\u815E\uD8BF\uBEC5\uC6F2\uD2B2"+
+            "\uCFB0\uCFE7\u815F\u8160\u8161\u8162\uCAE9\u8163"+
+            "\u8164\uD8C0\u8165\u8166\u8167\u8168\u8169\u816A"+
+            "\uC2F2\uC2D2\u816B\uC8E9\u816C\u816D\u816E\u816F"+
+            "\u8170\u8171\u8172\u8173\u8174\u8175\uC7AC\u8176"+
+            "\u8177\u8178\u8179\u817A\u817B\u817C\uC1CB\u817D"+
+            "\uD3E8\uD5F9\u817E\uCAC2\uB6FE\uD8A1\uD3DA\uBFF7"+
+            "\u8180\uD4C6\uBBA5\uD8C1\uCEE5\uBEAE\u8181\u8182"+
+            "\uD8A8\u8183\uD1C7\uD0A9\u8184\u8185\u8186\uD8BD"+
+            "\uD9EF\uCDF6\uBFBA\u8187\uBDBB\uBAA5\uD2E0\uB2FA"+
+            "\uBAE0\uC4B6\u8188\uCFED\uBEA9\uCDA4\uC1C1\u8189"+
+            "\u818A\u818B\uC7D7\uD9F1\u818C\uD9F4\u818D\u818E"+
+            "\u818F\u8190\uC8CB\uD8E9\u8191\u8192\u8193\uD2DA"+
+            "\uCAB2\uC8CA\uD8EC\uD8EA\uD8C6\uBDF6\uC6CD\uB3F0"+
+            "\u8194\uD8EB\uBDF1\uBDE9\u8195\uC8D4\uB4D3\u8196"+
+            "\u8197\uC2D8\u8198\uB2D6\uD7D0\uCACB\uCBFB\uD5CC"+
+            "\uB8B6\uCFC9\u8199\u819A\u819B\uD9DA\uD8F0\uC7AA"+
+            "\u819C\uD8EE\u819D\uB4FA\uC1EE\uD2D4\u819E\u819F"+
+            "\uD8ED\u81A0\uD2C7\uD8EF\uC3C7\u81A1\u81A2\u81A3"+
+            "\uD1F6\u81A4\uD6D9\uD8F2\u81A5\uD8F5\uBCFE\uBCDB"+
+            "\u81A6\u81A7\u81A8\uC8CE\u81A9\uB7DD\u81AA\uB7C2"+
+            "\u81AB\uC6F3\u81AC\u81AD\u81AE\u81AF\u81B0\u81B1"+
+            "\u81B2\uD8F8\uD2C1\u81B3\u81B4\uCEE9\uBCBF\uB7FC"+
+            "\uB7A5\uD0DD\u81B5\u81B6\u81B7\u81B8\u81B9\uD6DA"+
+            "\uD3C5\uBBEF\uBBE1\uD8F1\u81BA\u81BB\uC9A1\uCEB0"+
+            "\uB4AB\u81BC\uD8F3\u81BD\uC9CB\uD8F6\uC2D7\uD8F7"+
+            "\u81BE\u81BF\uCEB1\uD8F9\u81C0\u81C1\u81C2\uB2AE"+
+            "\uB9C0\u81C3\uD9A3\u81C4\uB0E9\u81C5\uC1E6\u81C6"+
+            "\uC9EC\u81C7\uCBC5\u81C8\uCBC6\uD9A4\u81C9\u81CA"+
+            "\u81CB\u81CC\u81CD\uB5E8\u81CE\u81CF\uB5AB\u81D0"+
+            "\u81D1\u81D2\u81D3\u81D4\u81D5\uCEBB\uB5CD\uD7A1"+
+            "\uD7F4\uD3D3\u81D6\uCCE5\u81D7\uBACE\u81D8\uD9A2"+
+            "\uD9DC\uD3E0\uD8FD\uB7F0\uD7F7\uD8FE\uD8FA\uD9A1"+
+            "\uC4E3\u81D9\u81DA\uD3B6\uD8F4\uD9DD\u81DB\uD8FB"+
+            "\u81DC\uC5E5\u81DD\u81DE\uC0D0\u81DF\u81E0\uD1F0"+
+            "\uB0DB\u81E1\u81E2\uBCD1\uD9A6\u81E3\uD9A5\u81E4"+
+            "\u81E5\u81E6\u81E7\uD9AC\uD9AE\u81E8\uD9AB\uCAB9"+
+            "\u81E9\u81EA\u81EB\uD9A9\uD6B6\u81EC\u81ED\u81EE"+
+            "\uB3DE\uD9A8\u81EF\uC0FD\u81F0\uCACC\u81F1\uD9AA"+
+            "\u81F2\uD9A7\u81F3\u81F4\uD9B0\u81F5\u81F6\uB6B1"+
+            "\u81F7\u81F8\u81F9\uB9A9\u81FA\uD2C0\u81FB\u81FC"+
+            "\uCFC0\u81FD\u81FE\uC2C2\u8240\uBDC4\uD5EC\uB2E0"+
+            "\uC7C8\uBFEB\uD9AD\u8241\uD9AF\u8242\uCEEA\uBAEE"+
+            "\u8243\u8244\u8245\u8246\u8247\uC7D6\u8248\u8249"+
+            "\u824A\u824B\u824C\u824D\u824E\u824F\u8250\uB1E3"+
+            "\u8251\u8252\u8253\uB4D9\uB6ED\uD9B4\u8254\u8255"+
+            "\u8256\u8257\uBFA1\u8258\u8259\u825A\uD9DE\uC7CE"+
+            "\uC0FE\uD9B8\u825B\u825C\u825D\u825E\u825F\uCBD7"+
+            "\uB7FD\u8260\uD9B5\u8261\uD9B7\uB1A3\uD3E1\uD9B9"+
+            "\u8262\uD0C5\u8263\uD9B6\u8264\u8265\uD9B1\u8266"+
+            "\uD9B2\uC1A9\uD9B3\u8267\u8268\uBCF3\uD0DE\uB8A9"+
+            "\u8269\uBEE3\u826A\uD9BD\u826B\u826C\u826D\u826E"+
+            "\uD9BA\u826F\uB0B3\u8270\u8271\u8272\uD9C2\u8273"+
+            "\u8274\u8275\u8276\u8277\u8278\u8279\u827A\u827B"+
+            "\u827C\u827D\u827E\u8280\uD9C4\uB1B6\u8281\uD9BF"+
+            "\u8282\u8283\uB5B9\u8284\uBEF3\u8285\u8286\u8287"+
+            "\uCCC8\uBAF2\uD2D0\u8288\uD9C3\u8289\u828A\uBDE8"+
+            "\u828B\uB3AB\u828C\u828D\u828E\uD9C5\uBEEB\u828F"+
+            "\uD9C6\uD9BB\uC4DF\u8290\uD9BE\uD9C1\uD9C0\u8291"+
+            "\u8292\u8293\u8294\u8295\u8296\u8297\u8298\u8299"+
+            "\u829A\u829B\uD5AE\u829C\uD6B5\u829D\uC7E3\u829E"+
+            "\u829F\u82A0\u82A1\uD9C8\u82A2\u82A3\u82A4\uBCD9"+
+            "\uD9CA\u82A5\u82A6\u82A7\uD9BC\u82A8\uD9CB\uC6AB"+
+            "\u82A9\u82AA\u82AB\u82AC\u82AD\uD9C9\u82AE\u82AF"+
+            "\u82B0\u82B1\uD7F6\u82B2\uCDA3\u82B3\u82B4\u82B5"+
+            "\u82B6\u82B7\u82B8\u82B9\u82BA\uBDA1\u82BB\u82BC"+
+            "\u82BD\u82BE\u82BF\u82C0\uD9CC\u82C1\u82C2\u82C3"+
+            "\u82C4\u82C5\u82C6\u82C7\u82C8\u82C9\uC5BC\uCDB5"+
+            "\u82CA\u82CB\u82CC\uD9CD\u82CD\u82CE\uD9C7\uB3A5"+
+            "\uBFFE\u82CF\u82D0\u82D1\u82D2\uB8B5\u82D3\u82D4"+
+            "\uC0FC\u82D5\u82D6\u82D7\u82D8\uB0F8\u82D9\u82DA"+
+            "\u82DB\u82DC\u82DD\u82DE\u82DF\u82E0\u82E1\u82E2"+
+            "\u82E3\u82E4\u82E5\u82E6\u82E7\u82E8\u82E9\u82EA"+
+            "\u82EB\u82EC\u82ED\uB4F6\u82EE\uD9CE\u82EF\uD9CF"+
+            "\uB4A2\uD9D0\u82F0\u82F1\uB4DF\u82F2\u82F3\u82F4"+
+            "\u82F5\u82F6\uB0C1\u82F7\u82F8\u82F9\u82FA\u82FB"+
+            "\u82FC\u82FD\uD9D1\uC9B5\u82FE\u8340\u8341\u8342"+
+            "\u8343\u8344\u8345\u8346\u8347\u8348\u8349\u834A"+
+            "\u834B\u834C\u834D\u834E\u834F\u8350\u8351\uCFF1"+
+            "\u8352\u8353\u8354\u8355\u8356\u8357\uD9D2\u8358"+
+            "\u8359\u835A\uC1C5\u835B\u835C\u835D\u835E\u835F"+
+            "\u8360\u8361\u8362\u8363\u8364\u8365\uD9D6\uC9AE"+
+            "\u8366\u8367\u8368\u8369\uD9D5\uD9D4\uD9D7\u836A"+
+            "\u836B\u836C\u836D\uCBDB\u836E\uBDA9\u836F\u8370"+
+            "\u8371\u8372\u8373\uC6A7\u8374\u8375\u8376\u8377"+
+            "\u8378\u8379\u837A\u837B\u837C\u837D\uD9D3\uD9D8"+
+            "\u837E\u8380\u8381\uD9D9\u8382\u8383\u8384\u8385"+
+            "\u8386\u8387\uC8E5\u8388\u8389\u838A\u838B\u838C"+
+            "\u838D\u838E\u838F\u8390\u8391\u8392\u8393\u8394"+
+            "\u8395\uC0DC\u8396\u8397\u8398\u8399\u839A\u839B"+
+            "\u839C\u839D\u839E\u839F\u83A0\u83A1\u83A2\u83A3"+
+            "\u83A4\u83A5\u83A6\u83A7\u83A8\u83A9\u83AA\u83AB"+
+            "\u83AC\u83AD\u83AE\u83AF\u83B0\u83B1\u83B2\uB6F9"+
+            "\uD8A3\uD4CA\u83B3\uD4AA\uD0D6\uB3E4\uD5D7\u83B4"+
+            "\uCFC8\uB9E2\u83B5\uBFCB\u83B6\uC3E2\u83B7\u83B8"+
+            "\u83B9\uB6D2\u83BA\u83BB\uCDC3\uD9EE\uD9F0\u83BC"+
+            "\u83BD\u83BE\uB5B3\u83BF\uB6B5\u83C0\u83C1\u83C2"+
+            "\u83C3\u83C4\uBEA4\u83C5\u83C6\uC8EB\u83C7\u83C8"+
+            "\uC8AB\u83C9\u83CA\uB0CB\uB9AB\uC1F9\uD9E2\u83CB"+
+            "\uC0BC\uB9B2\u83CC\uB9D8\uD0CB\uB1F8\uC6E4\uBEDF"+
+            "\uB5E4\uD7C8\u83CD\uD1F8\uBCE6\uCADE\u83CE\u83CF"+
+            "\uBCBD\uD9E6\uD8E7\u83D0\u83D1\uC4DA\u83D2\u83D3"+
+            "\uB8D4\uC8BD\u83D4\u83D5\uB2E1\uD4D9\u83D6\u83D7"+
+            "\u83D8\u83D9\uC3B0\u83DA\u83DB\uC3E1\uDAA2\uC8DF"+
+            "\u83DC\uD0B4\u83DD\uBEFC\uC5A9\u83DE\u83DF\u83E0"+
+            "\uB9DA\u83E1\uDAA3\u83E2\uD4A9\uDAA4\u83E3\u83E4"+
+            "\u83E5\u83E6\u83E7\uD9FB\uB6AC\u83E8\u83E9\uB7EB"+
+            "\uB1F9\uD9FC\uB3E5\uBEF6\u83EA\uBFF6\uD2B1\uC0E4"+
+            "\u83EB\u83EC\u83ED\uB6B3\uD9FE\uD9FD\u83EE\u83EF"+
+            "\uBEBB\u83F0\u83F1\u83F2\uC6E0\u83F3\uD7BC\uDAA1"+
+            "\u83F4\uC1B9\u83F5\uB5F2\uC1E8\u83F6\u83F7\uBCF5"+
+            "\u83F8\uB4D5\u83F9\u83FA\u83FB\u83FC\u83FD\u83FE"+
+            "\u8440\u8441\u8442\uC1DD\u8443\uC4FD\u8444\u8445"+
+            "\uBCB8\uB7B2\u8446\u8447\uB7EF\u8448\u8449\u844A"+
+            "\u844B\u844C\u844D\uD9EC\u844E\uC6BE\u844F\uBFAD"+
+            "\uBBCB\u8450\u8451\uB5CA\u8452\uDBC9\uD0D7\u8453"+
+            "\uCDB9\uB0BC\uB3F6\uBBF7\uDBCA\uBAAF\u8454\uD4E4"+
+            "\uB5B6\uB5F3\uD8D6\uC8D0\u8455\u8456\uB7D6\uC7D0"+
+            "\uD8D7\u8457\uBFAF\u8458\u8459\uDBBB\uD8D8\u845A"+
+            "\u845B\uD0CC\uBBAE\u845C\u845D\u845E\uEBBE\uC1D0"+
+            "\uC1F5\uD4F2\uB8D5\uB4B4\u845F\uB3F5\u8460\u8461"+
+            "\uC9BE\u8462\u8463\u8464\uC5D0\u8465\u8466\u8467"+
+            "\uC5D9\uC0FB\u8468\uB1F0\u8469\uD8D9\uB9CE\u846A"+
+            "\uB5BD\u846B\u846C\uD8DA\u846D\u846E\uD6C6\uCBA2"+
+            "\uC8AF\uC9B2\uB4CC\uBFCC\u846F\uB9F4\u8470\uD8DB"+
+            "\uD8DC\uB6E7\uBCC1\uCCEA\u8471\u8472\u8473\u8474"+
+            "\u8475\u8476\uCFF7\u8477\uD8DD\uC7B0\u8478\u8479"+
+            "\uB9D0\uBDA3\u847A\u847B\uCCDE\u847C\uC6CA\u847D"+
+            "\u847E\u8480\u8481\u8482\uD8E0\u8483\uD8DE\u8484"+
+            "\u8485\uD8DF\u8486\u8487\u8488\uB0FE\u8489\uBEE7"+
+            "\u848A\uCAA3\uBCF4\u848B\u848C\u848D\u848E\uB8B1"+
+            "\u848F\u8490\uB8EE\u8491\u8492\u8493\u8494\u8495"+
+            "\u8496\u8497\u8498\u8499\u849A\uD8E2\u849B\uBDCB"+
+            "\u849C\uD8E4\uD8E3\u849D\u849E\u849F\u84A0\u84A1"+
+            "\uC5FC\u84A2\u84A3\u84A4\u84A5\u84A6\u84A7\u84A8"+
+            "\uD8E5\u84A9\u84AA\uD8E6\u84AB\u84AC\u84AD\u84AE"+
+            "\u84AF\u84B0\u84B1\uC1A6\u84B2\uC8B0\uB0EC\uB9A6"+
+            "\uBCD3\uCEF1\uDBBD\uC1D3\u84B3\u84B4\u84B5\u84B6"+
+            "\uB6AF\uD6FA\uC5AC\uBDD9\uDBBE\uDBBF\u84B7\u84B8"+
+            "\u84B9\uC0F8\uBEA2\uC0CD\u84BA\u84BB\u84BC\u84BD"+
+            "\u84BE\u84BF\u84C0\u84C1\u84C2\u84C3\uDBC0\uCAC6"+
+            "\u84C4\u84C5\u84C6\uB2AA\u84C7\u84C8\u84C9\uD3C2"+
+            "\u84CA\uC3E3\u84CB\uD1AB\u84CC\u84CD\u84CE\u84CF"+
+            "\uDBC2\u84D0\uC0D5\u84D1\u84D2\u84D3\uDBC3\u84D4"+
+            "\uBFB1\u84D5\u84D6\u84D7\u84D8\u84D9\u84DA\uC4BC"+
+            "\u84DB\u84DC\u84DD\u84DE\uC7DA\u84DF\u84E0\u84E1"+
+            "\u84E2\u84E3\u84E4\u84E5\u84E6\u84E7\u84E8\u84E9"+
+            "\uDBC4\u84EA\u84EB\u84EC\u84ED\u84EE\u84EF\u84F0"+
+            "\u84F1\uD9E8\uC9D7\u84F2\u84F3\u84F4\uB9B4\uCEF0"+
+            "\uD4C8\u84F5\u84F6\u84F7\u84F8\uB0FC\uB4D2\u84F9"+
+            "\uD0D9\u84FA\u84FB\u84FC\u84FD\uD9E9\u84FE\uDECB"+
+            "\uD9EB\u8540\u8541\u8542\u8543\uD8B0\uBBAF\uB1B1"+
+            "\u8544\uB3D7\uD8CE\u8545\u8546\uD4D1\u8547\u8548"+
+            "\uBDB3\uBFEF\u8549\uCFBB\u854A\u854B\uD8D0\u854C"+
+            "\u854D\u854E\uB7CB\u854F\u8550\u8551\uD8D1\u8552"+
+            "\u8553\u8554\u8555\u8556\u8557\u8558\u8559\u855A"+
+            "\u855B\uC6A5\uC7F8\uD2BD\u855C\u855D\uD8D2\uC4E4"+
+            "\u855E\uCAAE\u855F\uC7A7\u8560\uD8A6\u8561\uC9FD"+
+            "\uCEE7\uBBDC\uB0EB\u8562\u8563\u8564\uBBAA\uD0AD"+
+            "\u8565\uB1B0\uD7E4\uD7BF\u8566\uB5A5\uC2F4\uC4CF"+
+            "\u8567\u8568\uB2A9\u8569\uB2B7\u856A\uB1E5\uDFB2"+
+            "\uD5BC\uBFA8\uC2AC\uD8D5\uC2B1\u856B\uD8D4\uCED4"+
+            "\u856C\uDAE0\u856D\uCEC0\u856E\u856F\uD8B4\uC3AE"+
+            "\uD3A1\uCEA3\u8570\uBCB4\uC8B4\uC2D1\u8571\uBEED"+
+            "\uD0B6\u8572\uDAE1\u8573\u8574\u8575\u8576\uC7E4"+
+            "\u8577\u8578\uB3A7\u8579\uB6F2\uCCFC\uC0FA\u857A"+
+            "\u857B\uC0F7\u857C\uD1B9\uD1E1\uD8C7\u857D\u857E"+
+            "\u8580\u8581\u8582\u8583\u8584\uB2DE\u8585\u8586"+
+            "\uC0E5\u8587\uBAF1\u8588\u8589\uD8C8\u858A\uD4AD"+
+            "\u858B\u858C\uCFE1\uD8C9\u858D\uD8CA\uCFC3\u858E"+
+            "\uB3F8\uBEC7\u858F\u8590\u8591\u8592\uD8CB\u8593"+
+            "\u8594\u8595\u8596\u8597\u8598\u8599\uDBCC\u859A"+
+            "\u859B\u859C\u859D\uC8A5\u859E\u859F\u85A0\uCFD8"+
+            "\u85A1\uC8FE\uB2CE\u85A2\u85A3\u85A4\u85A5\u85A6"+
+            "\uD3D6\uB2E6\uBCB0\uD3D1\uCBAB\uB7B4\u85A7\u85A8"+
+            "\u85A9\uB7A2\u85AA\u85AB\uCAE5\u85AC\uC8A1\uCADC"+
+            "\uB1E4\uD0F0\u85AD\uC5D1\u85AE\u85AF\u85B0\uDBC5"+
+            "\uB5FE\u85B1\u85B2\uBFDA\uB9C5\uBEE4\uC1ED\u85B3"+
+            "\uDFB6\uDFB5\uD6BB\uBDD0\uD5D9\uB0C8\uB6A3\uBFC9"+
+            "\uCCA8\uDFB3\uCAB7\uD3D2\u85B4\uD8CF\uD2B6\uBAC5"+
+            "\uCBBE\uCCBE\u85B5\uDFB7\uB5F0\uDFB4\u85B6\u85B7"+
+            "\u85B8\uD3F5\u85B9\uB3D4\uB8F7\u85BA\uDFBA\u85BB"+
+            "\uBACF\uBCAA\uB5F5\u85BC\uCDAC\uC3FB\uBAF3\uC0F4"+
+            "\uCDC2\uCFF2\uDFB8\uCFC5\u85BD\uC2C0\uDFB9\uC2F0"+
+            "\u85BE\u85BF\u85C0\uBEFD\u85C1\uC1DF\uCDCC\uD2F7"+
+            "\uB7CD\uDFC1\u85C2\uDFC4\u85C3\u85C4\uB7F1\uB0C9"+
+            "\uB6D6\uB7D4\u85C5\uBAAC\uCCFD\uBFD4\uCBB1\uC6F4"+
+            "\u85C6\uD6A8\uDFC5\u85C7\uCEE2\uB3B3\u85C8\u85C9"+
+            "\uCEFC\uB4B5\u85CA\uCEC7\uBAF0\u85CB\uCEE1\u85CC"+
+            "\uD1BD\u85CD\u85CE\uDFC0\u85CF\u85D0\uB4F4\u85D1"+
+            "\uB3CA\u85D2\uB8E6\uDFBB\u85D3\u85D4\u85D5\u85D6"+
+            "\uC4C5\u85D7\uDFBC\uDFBD\uDFBE\uC5BB\uDFBF\uDFC2"+
+            "\uD4B1\uDFC3\u85D8\uC7BA\uCED8\u85D9\u85DA\u85DB"+
+            "\u85DC\u85DD\uC4D8\u85DE\uDFCA\u85DF\uDFCF\u85E0"+
+            "\uD6DC\u85E1\u85E2\u85E3\u85E4\u85E5\u85E6\u85E7"+
+            "\u85E8\uDFC9\uDFDA\uCEB6\u85E9\uBAC7\uDFCE\uDFC8"+
+            "\uC5DE\u85EA\u85EB\uC9EB\uBAF4\uC3FC\u85EC\u85ED"+
+            "\uBED7\u85EE\uDFC6\u85EF\uDFCD\u85F0\uC5D8\u85F1"+
+            "\u85F2\u85F3\u85F4\uD5A6\uBACD\u85F5\uBECC\uD3BD"+
+            "\uB8C0\u85F6\uD6E4\u85F7\uDFC7\uB9BE\uBFA7\u85F8"+
+            "\u85F9\uC1FC\uDFCB\uDFCC\u85FA\uDFD0\u85FB\u85FC"+
+            "\u85FD\u85FE\u8640\uDFDB\uDFE5\u8641\uDFD7\uDFD6"+
+            "\uD7C9\uDFE3\uDFE4\uE5EB\uD2A7\uDFD2\u8642\uBFA9"+
+            "\u8643\uD4DB\u8644\uBFC8\uDFD4\u8645\u8646\u8647"+
+            "\uCFCC\u8648\u8649\uDFDD\u864A\uD1CA\u864B\uDFDE"+
+            "\uB0A7\uC6B7\uDFD3\u864C\uBAE5\u864D\uB6DF\uCDDB"+
+            "\uB9FE\uD4D5\u864E\u864F\uDFDF\uCFEC\uB0A5\uDFE7"+
+            "\uDFD1\uD1C6\uDFD5\uDFD8\uDFD9\uDFDC\u8650\uBBA9"+
+            "\u8651\uDFE0\uDFE1\u8652\uDFE2\uDFE6\uDFE8\uD3B4"+
+            "\u8653\u8654\u8655\u8656\u8657\uB8E7\uC5B6\uDFEA"+
+            "\uC9DA\uC1A8\uC4C4\u8658\u8659\uBFDE\uCFF8\u865A"+
+            "\u865B\u865C\uD5DC\uDFEE\u865D\u865E\u865F\u8660"+
+            "\u8661\u8662\uB2B8\u8663\uBADF\uDFEC\u8664\uDBC1"+
+            "\u8665\uD1E4\u8666\u8667\u8668\u8669\uCBF4\uB4BD"+
+            "\u866A\uB0A6\u866B\u866C\u866D\u866E\u866F\uDFF1"+
+            "\uCCC6\uDFF2\u8670\u8671\uDFED\u8672\u8673\u8674"+
+            "\u8675\u8676\u8677\uDFE9\u8678\u8679\u867A\u867B"+
+            "\uDFEB\u867C\uDFEF\uDFF0\uBBBD\u867D\u867E\uDFF3"+
+            "\u8680\u8681\uDFF4\u8682\uBBA3\u8683\uCADB\uCEA8"+
+            "\uE0A7\uB3AA\u8684\uE0A6\u8685\u8686\u8687\uE0A1"+
+            "\u8688\u8689\u868A\u868B\uDFFE\u868C\uCDD9\uDFFC"+
+            "\u868D\uDFFA\u868E\uBFD0\uD7C4\u868F\uC9CC\u8690"+
+            "\u8691\uDFF8\uB0A1\u8692\u8693\u8694\u8695\u8696"+
+            "\uDFFD\u8697\u8698\u8699\u869A\uDFFB\uE0A2\u869B"+
+            "\u869C\u869D\u869E\u869F\uE0A8\u86A0\u86A1\u86A2"+
+            "\u86A3\uB7C8\u86A4\u86A5\uC6A1\uC9B6\uC0B2\uDFF5"+
+            "\u86A6\u86A7\uC5BE\u86A8\uD8C4\uDFF9\uC4F6\u86A9"+
+            "\u86AA\u86AB\u86AC\u86AD\u86AE\uE0A3\uE0A4\uE0A5"+
+            "\uD0A5\u86AF\u86B0\uE0B4\uCCE4\u86B1\uE0B1\u86B2"+
+            "\uBFA6\uE0AF\uCEB9\uE0AB\uC9C6\u86B3\u86B4\uC0AE"+
+            "\uE0AE\uBAED\uBAB0\uE0A9\u86B5\u86B6\u86B7\uDFF6"+
+            "\u86B8\uE0B3\u86B9\u86BA\uE0B8\u86BB\u86BC\u86BD"+
+            "\uB4AD\uE0B9\u86BE\u86BF\uCFB2\uBAC8\u86C0\uE0B0"+
+            "\u86C1\u86C2\u86C3\u86C4\u86C5\u86C6\u86C7\uD0FA"+
+            "\u86C8\u86C9\u86CA\u86CB\u86CC\u86CD\u86CE\u86CF"+
+            "\u86D0\uE0AC\u86D1\uD4FB\u86D2\uDFF7\u86D3\uC5E7"+
+            "\u86D4\uE0AD\u86D5\uD3F7\u86D6\uE0B6\uE0B7\u86D7"+
+            "\u86D8\u86D9\u86DA\u86DB\uE0C4\uD0E1\u86DC\u86DD"+
+            "\u86DE\uE0BC\u86DF\u86E0\uE0C9\uE0CA\u86E1\u86E2"+
+            "\u86E3\uE0BE\uE0AA\uC9A4\uE0C1\u86E4\uE0B2\u86E5"+
+            "\u86E6\u86E7\u86E8\u86E9\uCAC8\uE0C3\u86EA\uE0B5"+
+            "\u86EB\uCECB\u86EC\uCBC3\uE0CD\uE0C6\uE0C2\u86ED"+
+            "\uE0CB\u86EE\uE0BA\uE0BF\uE0C0\u86EF\u86F0\uE0C5"+
+            "\u86F1\u86F2\uE0C7\uE0C8\u86F3\uE0CC\u86F4\uE0BB"+
+            "\u86F5\u86F6\u86F7\u86F8\u86F9\uCBD4\uE0D5\u86FA"+
+            "\uE0D6\uE0D2\u86FB\u86FC\u86FD\u86FE\u8740\u8741"+
+            "\uE0D0\uBCCE\u8742\u8743\uE0D1\u8744\uB8C2\uD8C5"+
+            "\u8745\u8746\u8747\u8748\u8749\u874A\u874B\u874C"+
+            "\uD0EA\u874D\u874E\uC2EF\u874F\u8750\uE0CF\uE0BD"+
+            "\u8751\u8752\u8753\uE0D4\uE0D3\u8754\u8755\uE0D7"+
+            "\u8756\u8757\u8758\u8759\uE0DC\uE0D8\u875A\u875B"+
+            "\u875C\uD6F6\uB3B0\u875D\uD7EC\u875E\uCBBB\u875F"+
+            "\u8760\uE0DA\u8761\uCEFB\u8762\u8763\u8764\uBAD9"+
+            "\u8765\u8766\u8767\u8768\u8769\u876A\u876B\u876C"+
+            "\u876D\u876E\u876F\u8770\uE0E1\uE0DD\uD2AD\u8771"+
+            "\u8772\u8773\u8774\u8775\uE0E2\u8776\u8777\uE0DB"+
+            "\uE0D9\uE0DF\u8778\u8779\uE0E0\u877A\u877B\u877C"+
+            "\u877D\u877E\uE0DE\u8780\uE0E4\u8781\u8782\u8783"+
+            "\uC6F7\uD8AC\uD4EB\uE0E6\uCAC9\u8784\u8785\u8786"+
+            "\u8787\uE0E5\u8788\u8789\u878A\u878B\uB8C1\u878C"+
+            "\u878D\u878E\u878F\uE0E7\uE0E8\u8790\u8791\u8792"+
+            "\u8793\u8794\u8795\u8796\u8797\uE0E9\uE0E3\u8798"+
+            "\u8799\u879A\u879B\u879C\u879D\u879E\uBABF\uCCE7"+
+            "\u879F\u87A0\u87A1\uE0EA\u87A2\u87A3\u87A4\u87A5"+
+            "\u87A6\u87A7\u87A8\u87A9\u87AA\u87AB\u87AC\u87AD"+
+            "\u87AE\u87AF\u87B0\uCFF9\u87B1\u87B2\u87B3\u87B4"+
+            "\u87B5\u87B6\u87B7\u87B8\u87B9\u87BA\u87BB\uE0EB"+
+            "\u87BC\u87BD\u87BE\u87BF\u87C0\u87C1\u87C2\uC8C2"+
+            "\u87C3\u87C4\u87C5\u87C6\uBDC0\u87C7\u87C8\u87C9"+
+            "\u87CA\u87CB\u87CC\u87CD\u87CE\u87CF\u87D0\u87D1"+
+            "\u87D2\u87D3\uC4D2\u87D4\u87D5\u87D6\u87D7\u87D8"+
+            "\u87D9\u87DA\u87DB\u87DC\uE0EC\u87DD\u87DE\uE0ED"+
+            "\u87DF\u87E0\uC7F4\uCBC4\u87E1\uE0EE\uBBD8\uD8B6"+
+            "\uD2F2\uE0EF\uCDC5\u87E2\uB6DA\u87E3\u87E4\u87E5"+
+            "\u87E6\u87E7\u87E8\uE0F1\u87E9\uD4B0\u87EA\u87EB"+
+            "\uC0A7\uB4D1\u87EC\u87ED\uCEA7\uE0F0\u87EE\u87EF"+
+            "\u87F0\uE0F2\uB9CC\u87F1\u87F2\uB9FA\uCDBC\uE0F3"+
+            "\u87F3\u87F4\u87F5\uC6D4\uE0F4\u87F6\uD4B2\u87F7"+
+            "\uC8A6\uE0F6\uE0F5\u87F8\u87F9\u87FA\u87FB\u87FC"+
+            "\u87FD\u87FE\u8840\u8841\u8842\u8843\u8844\u8845"+
+            "\u8846\u8847\u8848\u8849\uE0F7\u884A\u884B\uCDC1"+
+            "\u884C\u884D\u884E\uCAA5\u884F\u8850\u8851\u8852"+
+            "\uD4DA\uDBD7\uDBD9\u8853\uDBD8\uB9E7\uDBDC\uDBDD"+
+            "\uB5D8\u8854\u8855\uDBDA\u8856\u8857\u8858\u8859"+
+            "\u885A\uDBDB\uB3A1\uDBDF\u885B\u885C\uBBF8\u885D"+
+            "\uD6B7\u885E\uDBE0\u885F\u8860\u8861\u8862\uBEF9"+
+            "\u8863\u8864\uB7BB\u8865\uDBD0\uCCAE\uBFB2\uBBB5"+
+            "\uD7F8\uBFD3\u8866\u8867\u8868\u8869\u886A\uBFE9"+
+            "\u886B\u886C\uBCE1\uCCB3\uDBDE\uB0D3\uCEEB\uB7D8"+
+            "\uD7B9\uC6C2\u886D\u886E\uC0A4\u886F\uCCB9\u8870"+
+            "\uDBE7\uDBE1\uC6BA\uDBE3\u8871\uDBE8\u8872\uC5F7"+
+            "\u8873\u8874\u8875\uDBEA\u8876\u8877\uDBE9\uBFC0"+
+            "\u8878\u8879\u887A\uDBE6\uDBE5\u887B\u887C\u887D"+
+            "\u887E\u8880\uB4B9\uC0AC\uC2A2\uDBE2\uDBE4\u8881"+
+            "\u8882\u8883\u8884\uD0CD\uDBED\u8885\u8886\u8887"+
+            "\u8888\u8889\uC0DD\uDBF2\u888A\u888B\u888C\u888D"+
+            "\u888E\u888F\u8890\uB6E2\u8891\u8892\u8893\u8894"+
+            "\uDBF3\uDBD2\uB9B8\uD4AB\uDBEC\u8895\uBFD1\uDBF0"+
+            "\u8896\uDBD1\u8897\uB5E6\u8898\uDBEB\uBFE5\u8899"+
+            "\u889A\u889B\uDBEE\u889C\uDBF1\u889D\u889E\u889F"+
+            "\uDBF9\u88A0\u88A1\u88A2\u88A3\u88A4\u88A5\u88A6"+
+            "\u88A7\u88A8\uB9A1\uB0A3\u88A9\u88AA\u88AB\u88AC"+
+            "\u88AD\u88AE\u88AF\uC2F1\u88B0\u88B1\uB3C7\uDBEF"+
+            "\u88B2\u88B3\uDBF8\u88B4\uC6D2\uDBF4\u88B5\u88B6"+
+            "\uDBF5\uDBF7\uDBF6\u88B7\u88B8\uDBFE\u88B9\uD3F2"+
+            "\uB2BA\u88BA\u88BB\u88BC\uDBFD\u88BD\u88BE\u88BF"+
+            "\u88C0\u88C1\u88C2\u88C3\u88C4\uDCA4\u88C5\uDBFB"+
+            "\u88C6\u88C7\u88C8\u88C9\uDBFA\u88CA\u88CB\u88CC"+
+            "\uDBFC\uC5E0\uBBF9\u88CD\u88CE\uDCA3\u88CF\u88D0"+
+            "\uDCA5\u88D1\uCCC3\u88D2\u88D3\u88D4\uB6D1\uDDC0"+
+            "\u88D5\u88D6\u88D7\uDCA1\u88D8\uDCA2\u88D9\u88DA"+
+            "\u88DB\uC7B5\u88DC\u88DD\u88DE\uB6E9\u88DF\u88E0"+
+            "\u88E1\uDCA7\u88E2\u88E3\u88E4\u88E5\uDCA6\u88E6"+
+            "\uDCA9\uB1A4\u88E7\u88E8\uB5CC\u88E9\u88EA\u88EB"+
+            "\u88EC\u88ED\uBFB0\u88EE\u88EF\u88F0\u88F1\u88F2"+
+            "\uD1DF\u88F3\u88F4\u88F5\u88F6\uB6C2\u88F7\u88F8"+
+            "\u88F9\u88FA\u88FB\u88FC\u88FD\u88FE\u8940\u8941"+
+            "\u8942\u8943\u8944\u8945\uDCA8\u8946\u8947\u8948"+
+            "\u8949\u894A\u894B\u894C\uCBFA\uEBF3\u894D\u894E"+
+            "\u894F\uCBDC\u8950\u8951\uCBFE\u8952\u8953\u8954"+
+            "\uCCC1\u8955\u8956\u8957\u8958\u8959\uC8FB\u895A"+
+            "\u895B\u895C\u895D\u895E\u895F\uDCAA\u8960\u8961"+
+            "\u8962\u8963\u8964\uCCEE\uDCAB\u8965\u8966\u8967"+
+            "\u8968\u8969\u896A\u896B\u896C\u896D\u896E\u896F"+
+            "\u8970\u8971\u8972\u8973\u8974\u8975\uDBD3\u8976"+
+            "\uDCAF\uDCAC\u8977\uBEB3\u8978\uCAFB\u8979\u897A"+
+            "\u897B\uDCAD\u897C\u897D\u897E\u8980\u8981\u8982"+
+            "\u8983\u8984\uC9CA\uC4B9\u8985\u8986\u8987\u8988"+
+            "\u8989\uC7BD\uDCAE\u898A\u898B\u898C\uD4F6\uD0E6"+
+            "\u898D\u898E\u898F\u8990\u8991\u8992\u8993\u8994"+
+            "\uC4AB\uB6D5\u8995\u8996\u8997\u8998\u8999\u899A"+
+            "\u899B\u899C\u899D\u899E\u899F\u89A0\u89A1\u89A2"+
+            "\u89A3\u89A4\u89A5\u89A6\uDBD4\u89A7\u89A8\u89A9"+
+            "\u89AA\uB1DA\u89AB\u89AC\u89AD\uDBD5\u89AE\u89AF"+
+            "\u89B0\u89B1\u89B2\u89B3\u89B4\u89B5\u89B6\u89B7"+
+            "\u89B8\uDBD6\u89B9\u89BA\u89BB\uBABE\u89BC\u89BD"+
+            "\u89BE\u89BF\u89C0\u89C1\u89C2\u89C3\u89C4\u89C5"+
+            "\u89C6\u89C7\u89C8\u89C9\uC8C0\u89CA\u89CB\u89CC"+
+            "\u89CD\u89CE\u89CF\uCABF\uC8C9\u89D0\uD7B3\u89D1"+
+            "\uC9F9\u89D2\u89D3\uBFC7\u89D4\u89D5\uBAF8\u89D6"+
+            "\u89D7\uD2BC\u89D8\u89D9\u89DA\u89DB\u89DC\u89DD"+
+            "\u89DE\u89DF\uE2BA\u89E0\uB4A6\u89E1\u89E2\uB1B8"+
+            "\u89E3\u89E4\u89E5\u89E6\u89E7\uB8B4\u89E8\uCFC4"+
+            "\u89E9\u89EA\u89EB\u89EC\uD9E7\uCFA6\uCDE2\u89ED"+
+            "\u89EE\uD9ED\uB6E0\u89EF\uD2B9\u89F0\u89F1\uB9BB"+
+            "\u89F2\u89F3\u89F4\u89F5\uE2B9\uE2B7\u89F6\uB4F3"+
+            "\u89F7\uCCEC\uCCAB\uB7F2\u89F8\uD8B2\uD1EB\uBABB"+
+            "\u89F9\uCAA7\u89FA\u89FB\uCDB7\u89FC\u89FD\uD2C4"+
+            "\uBFE4\uBCD0\uB6E1\u89FE\uDEC5\u8A40\u8A41\u8A42"+
+            "\u8A43\uDEC6\uDBBC\u8A44\uD1D9\u8A45\u8A46\uC6E6"+
+            "\uC4CE\uB7EE\u8A47\uB7DC\u8A48\u8A49\uBFFC\uD7E0"+
+            "\u8A4A\uC6F5\u8A4B\u8A4C\uB1BC\uDEC8\uBDB1\uCCD7"+
+            "\uDECA\u8A4D\uDEC9\u8A4E\u8A4F\u8A50\u8A51\u8A52"+
+            "\uB5EC\u8A53\uC9DD\u8A54\u8A55\uB0C2\u8A56\u8A57"+
+            "\u8A58\u8A59\u8A5A\u8A5B\u8A5C\u8A5D\u8A5E\u8A5F"+
+            "\u8A60\u8A61\u8A62\uC5AE\uC5AB\u8A63\uC4CC\u8A64"+
+            "\uBCE9\uCBFD\u8A65\u8A66\u8A67\uBAC3\u8A68\u8A69"+
+            "\u8A6A\uE5F9\uC8E7\uE5FA\uCDFD\u8A6B\uD7B1\uB8BE"+
+            "\uC2E8\u8A6C\uC8D1\u8A6D\u8A6E\uE5FB\u8A6F\u8A70"+
+            "\u8A71\u8A72\uB6CA\uBCCB\u8A73\u8A74\uD1FD\uE6A1"+
+            "\u8A75\uC3EE\u8A76\u8A77\u8A78\u8A79\uE6A4\u8A7A"+
+            "\u8A7B\u8A7C\u8A7D\uE5FE\uE6A5\uCDD7\u8A7E\u8A80"+
+            "\uB7C1\uE5FC\uE5FD\uE6A3\u8A81\u8A82\uC4DD\uE6A8"+
+            "\u8A83\u8A84\uE6A7\u8A85\u8A86\u8A87\u8A88\u8A89"+
+            "\u8A8A\uC3C3\u8A8B\uC6DE\u8A8C\u8A8D\uE6AA\u8A8E"+
+            "\u8A8F\u8A90\u8A91\u8A92\u8A93\u8A94\uC4B7\u8A95"+
+            "\u8A96\u8A97\uE6A2\uCABC\u8A98\u8A99\u8A9A\u8A9B"+
+            "\uBDE3\uB9C3\uE6A6\uD0D5\uCEAF\u8A9C\u8A9D\uE6A9"+
+            "\uE6B0\u8A9E\uD2A6\u8A9F\uBDAA\uE6AD\u8AA0\u8AA1"+
+            "\u8AA2\u8AA3\u8AA4\uE6AF\u8AA5\uC0D1\u8AA6\u8AA7"+
+            "\uD2CC\u8AA8\u8AA9\u8AAA\uBCA7\u8AAB\u8AAC\u8AAD"+
+            "\u8AAE\u8AAF\u8AB0\u8AB1\u8AB2\u8AB3\u8AB4\u8AB5"+
+            "\u8AB6\uE6B1\u8AB7\uD2F6\u8AB8\u8AB9\u8ABA\uD7CB"+
+            "\u8ABB\uCDFE\u8ABC\uCDDE\uC2A6\uE6AB\uE6AC\uBDBF"+
+            "\uE6AE\uE6B3\u8ABD\u8ABE\uE6B2\u8ABF\u8AC0\u8AC1"+
+            "\u8AC2\uE6B6\u8AC3\uE6B8\u8AC4\u8AC5\u8AC6\u8AC7"+
+            "\uC4EF\u8AC8\u8AC9\u8ACA\uC4C8\u8ACB\u8ACC\uBEEA"+
+            "\uC9EF\u8ACD\u8ACE\uE6B7\u8ACF\uB6F0\u8AD0\u8AD1"+
+            "\u8AD2\uC3E4\u8AD3\u8AD4\u8AD5\u8AD6\u8AD7\u8AD8"+
+            "\u8AD9\uD3E9\uE6B4\u8ADA\uE6B5\u8ADB\uC8A2\u8ADC"+
+            "\u8ADD\u8ADE\u8ADF\u8AE0\uE6BD\u8AE1\u8AE2\u8AE3"+
+            "\uE6B9\u8AE4\u8AE5\u8AE6\u8AE7\u8AE8\uC6C5\u8AE9"+
+            "\u8AEA\uCDF1\uE6BB\u8AEB\u8AEC\u8AED\u8AEE\u8AEF"+
+            "\u8AF0\u8AF1\u8AF2\u8AF3\u8AF4\uE6BC\u8AF5\u8AF6"+
+            "\u8AF7\u8AF8\uBBE9\u8AF9\u8AFA\u8AFB\u8AFC\u8AFD"+
+            "\u8AFE\u8B40\uE6BE\u8B41\u8B42\u8B43\u8B44\uE6BA"+
+            "\u8B45\u8B46\uC0B7\u8B47\u8B48\u8B49\u8B4A\u8B4B"+
+            "\u8B4C\u8B4D\u8B4E\u8B4F\uD3A4\uE6BF\uC9F4\uE6C3"+
+            "\u8B50\u8B51\uE6C4\u8B52\u8B53\u8B54\u8B55\uD0F6"+
+            "\u8B56\u8B57\u8B58\u8B59\u8B5A\u8B5B\u8B5C\u8B5D"+
+            "\u8B5E\u8B5F\u8B60\u8B61\u8B62\u8B63\u8B64\u8B65"+
+            "\u8B66\u8B67\uC3BD\u8B68\u8B69\u8B6A\u8B6B\u8B6C"+
+            "\u8B6D\u8B6E\uC3C4\uE6C2\u8B6F\u8B70\u8B71\u8B72"+
+            "\u8B73\u8B74\u8B75\u8B76\u8B77\u8B78\u8B79\u8B7A"+
+            "\u8B7B\u8B7C\uE6C1\u8B7D\u8B7E\u8B80\u8B81\u8B82"+
+            "\u8B83\u8B84\uE6C7\uCFB1\u8B85\uEBF4\u8B86\u8B87"+
+            "\uE6CA\u8B88\u8B89\u8B8A\u8B8B\u8B8C\uE6C5\u8B8D"+
+            "\u8B8E\uBCDE\uC9A9\u8B8F\u8B90\u8B91\u8B92\u8B93"+
+            "\u8B94\uBCB5\u8B95\u8B96\uCFD3\u8B97\u8B98\u8B99"+
+            "\u8B9A\u8B9B\uE6C8\u8B9C\uE6C9\u8B9D\uE6CE\u8B9E"+
+            "\uE6D0\u8B9F\u8BA0\u8BA1\uE6D1\u8BA2\u8BA3\u8BA4"+
+            "\uE6CB\uB5D5\u8BA5\uE6CC\u8BA6\u8BA7\uE6CF\u8BA8"+
+            "\u8BA9\uC4DB\u8BAA\uE6C6\u8BAB\u8BAC\u8BAD\u8BAE"+
+            "\u8BAF\uE6CD\u8BB0\u8BB1\u8BB2\u8BB3\u8BB4\u8BB5"+
+            "\u8BB6\u8BB7\u8BB8\u8BB9\u8BBA\u8BBB\u8BBC\u8BBD";
+
+        private final static String innerIndex3=
+            "\u8BBE\u8BBF\u8BC0\u8BC1\u8BC2\u8BC3\u8BC4\u8BC5"+
+            "\u8BC6\uE6D2\u8BC7\u8BC8\u8BC9\u8BCA\u8BCB\u8BCC"+
+            "\u8BCD\u8BCE\u8BCF\u8BD0\u8BD1\u8BD2\uE6D4\uE6D3"+
+            "\u8BD3\u8BD4\u8BD5\u8BD6\u8BD7\u8BD8\u8BD9\u8BDA"+
+            "\u8BDB\u8BDC\u8BDD\u8BDE\u8BDF\u8BE0\u8BE1\u8BE2"+
+            "\u8BE3\u8BE4\u8BE5\u8BE6\u8BE7\u8BE8\u8BE9\u8BEA"+
+            "\u8BEB\u8BEC\uE6D5\u8BED\uD9F8\u8BEE\u8BEF\uE6D6"+
+            "\u8BF0\u8BF1\u8BF2\u8BF3\u8BF4\u8BF5\u8BF6\u8BF7"+
+            "\uE6D7\u8BF8\u8BF9\u8BFA\u8BFB\u8BFC\u8BFD\u8BFE"+
+            "\u8C40\u8C41\u8C42\u8C43\u8C44\u8C45\u8C46\u8C47"+
+            "\uD7D3\uE6DD\u8C48\uE6DE\uBFD7\uD4D0\u8C49\uD7D6"+
+            "\uB4E6\uCBEF\uE6DA\uD8C3\uD7CE\uD0A2\u8C4A\uC3CF"+
+            "\u8C4B\u8C4C\uE6DF\uBCBE\uB9C2\uE6DB\uD1A7\u8C4D"+
+            "\u8C4E\uBAA2\uC2CF\u8C4F\uD8AB\u8C50\u8C51\u8C52"+
+            "\uCAEB\uE5EE\u8C53\uE6DC\u8C54\uB7F5\u8C55\u8C56"+
+            "\u8C57\u8C58\uC8E6\u8C59\u8C5A\uC4F5\u8C5B\u8C5C"+
+            "\uE5B2\uC4FE\u8C5D\uCBFC\uE5B3\uD5AC\u8C5E\uD3EE"+
+            "\uCAD8\uB0B2\u8C5F\uCBCE\uCDEA\u8C60\u8C61\uBAEA"+
+            "\u8C62\u8C63\u8C64\uE5B5\u8C65\uE5B4\u8C66\uD7DA"+
+            "\uB9D9\uD6E6\uB6A8\uCDF0\uD2CB\uB1A6\uCAB5\u8C67"+
+            "\uB3E8\uC9F3\uBFCD\uD0FB\uCAD2\uE5B6\uBBC2\u8C68"+
+            "\u8C69\u8C6A\uCFDC\uB9AC\u8C6B\u8C6C\u8C6D\u8C6E"+
+            "\uD4D7\u8C6F\u8C70\uBAA6\uD1E7\uCFFC\uBCD2\u8C71"+
+            "\uE5B7\uC8DD\u8C72\u8C73\u8C74\uBFED\uB1F6\uCBDE"+
+            "\u8C75\u8C76\uBCC5\u8C77\uBCC4\uD2FA\uC3DC\uBFDC"+
+            "\u8C78\u8C79\u8C7A\u8C7B\uB8BB\u8C7C\u8C7D\u8C7E"+
+            "\uC3C2\u8C80\uBAAE\uD4A2\u8C81\u8C82\u8C83\u8C84"+
+            "\u8C85\u8C86\u8C87\u8C88\u8C89\uC7DE\uC4AF\uB2EC"+
+            "\u8C8A\uB9D1\u8C8B\u8C8C\uE5BB\uC1C8\u8C8D\u8C8E"+
+            "\uD5AF\u8C8F\u8C90\u8C91\u8C92\u8C93\uE5BC\u8C94"+
+            "\uE5BE\u8C95\u8C96\u8C97\u8C98\u8C99\u8C9A\u8C9B"+
+            "\uB4E7\uB6D4\uCBC2\uD1B0\uB5BC\u8C9C\u8C9D\uCAD9"+
+            "\u8C9E\uB7E2\u8C9F\u8CA0\uC9E4\u8CA1\uBDAB\u8CA2"+
+            "\u8CA3\uCEBE\uD7F0\u8CA4\u8CA5\u8CA6\u8CA7\uD0A1"+
+            "\u8CA8\uC9D9\u8CA9\u8CAA\uB6FB\uE6D8\uBCE2\u8CAB"+
+            "\uB3BE\u8CAC\uC9D0\u8CAD\uE6D9\uB3A2\u8CAE\u8CAF"+
+            "\u8CB0\u8CB1\uDECC\u8CB2\uD3C8\uDECD\u8CB3\uD2A2"+
+            "\u8CB4\u8CB5\u8CB6\u8CB7\uDECE\u8CB8\u8CB9\u8CBA"+
+            "\u8CBB\uBECD\u8CBC\u8CBD\uDECF\u8CBE\u8CBF\u8CC0"+
+            "\uCAAC\uD2FC\uB3DF\uE5EA\uC4E1\uBEA1\uCEB2\uC4F2"+
+            "\uBED6\uC6A8\uB2E3\u8CC1\u8CC2\uBED3\u8CC3\u8CC4"+
+            "\uC7FC\uCCEB\uBDEC\uCEDD\u8CC5\u8CC6\uCABA\uC6C1"+
+            "\uE5EC\uD0BC\u8CC7\u8CC8\u8CC9\uD5B9\u8CCA\u8CCB"+
+            "\u8CCC\uE5ED\u8CCD\u8CCE\u8CCF\u8CD0\uCAF4\u8CD1"+
+            "\uCDC0\uC2C5\u8CD2\uE5EF\u8CD3\uC2C4\uE5F0\u8CD4"+
+            "\u8CD5\u8CD6\u8CD7\u8CD8\u8CD9\u8CDA\uE5F8\uCDCD"+
+            "\u8CDB\uC9BD\u8CDC\u8CDD\u8CDE\u8CDF\u8CE0\u8CE1"+
+            "\u8CE2\uD2D9\uE1A8\u8CE3\u8CE4\u8CE5\u8CE6\uD3EC"+
+            "\u8CE7\uCBEA\uC6F1\u8CE8\u8CE9\u8CEA\u8CEB\u8CEC"+
+            "\uE1AC\u8CED\u8CEE\u8CEF\uE1A7\uE1A9\u8CF0\u8CF1"+
+            "\uE1AA\uE1AF\u8CF2\u8CF3\uB2ED\u8CF4\uE1AB\uB8DA"+
+            "\uE1AD\uE1AE\uE1B0\uB5BA\uE1B1\u8CF5\u8CF6\u8CF7"+
+            "\u8CF8\u8CF9\uE1B3\uE1B8\u8CFA\u8CFB\u8CFC\u8CFD"+
+            "\u8CFE\uD1D2\u8D40\uE1B6\uE1B5\uC1EB\u8D41\u8D42"+
+            "\u8D43\uE1B7\u8D44\uD4C0\u8D45\uE1B2\u8D46\uE1BA"+
+            "\uB0B6\u8D47\u8D48\u8D49\u8D4A\uE1B4\u8D4B\uBFF9"+
+            "\u8D4C\uE1B9\u8D4D\u8D4E\uE1BB\u8D4F\u8D50\u8D51"+
+            "\u8D52\u8D53\u8D54\uE1BE\u8D55\u8D56\u8D57\u8D58"+
+            "\u8D59\u8D5A\uE1BC\u8D5B\u8D5C\u8D5D\u8D5E\u8D5F"+
+            "\u8D60\uD6C5\u8D61\u8D62\u8D63\u8D64\u8D65\u8D66"+
+            "\u8D67\uCFBF\u8D68\u8D69\uE1BD\uE1BF\uC2CD\u8D6A"+
+            "\uB6EB\u8D6B\uD3F8\u8D6C\u8D6D\uC7CD\u8D6E\u8D6F"+
+            "\uB7E5\u8D70\u8D71\u8D72\u8D73\u8D74\u8D75\u8D76"+
+            "\u8D77\u8D78\u8D79\uBEFE\u8D7A\u8D7B\u8D7C\u8D7D"+
+            "\u8D7E\u8D80\uE1C0\uE1C1\u8D81\u8D82\uE1C7\uB3E7"+
+            "\u8D83\u8D84\u8D85\u8D86\u8D87\u8D88\uC6E9\u8D89"+
+            "\u8D8A\u8D8B\u8D8C\u8D8D\uB4DE\u8D8E\uD1C2\u8D8F"+
+            "\u8D90\u8D91\u8D92\uE1C8\u8D93\u8D94\uE1C6\u8D95"+
+            "\u8D96\u8D97\u8D98\u8D99\uE1C5\u8D9A\uE1C3\uE1C2"+
+            "\u8D9B\uB1C0\u8D9C\u8D9D\u8D9E\uD5B8\uE1C4\u8D9F"+
+            "\u8DA0\u8DA1\u8DA2\u8DA3\uE1CB\u8DA4\u8DA5\u8DA6"+
+            "\u8DA7\u8DA8\u8DA9\u8DAA\u8DAB\uE1CC\uE1CA\u8DAC"+
+            "\u8DAD\u8DAE\u8DAF\u8DB0\u8DB1\u8DB2\u8DB3\uEFFA"+
+            "\u8DB4\u8DB5\uE1D3\uE1D2\uC7B6\u8DB6\u8DB7\u8DB8"+
+            "\u8DB9\u8DBA\u8DBB\u8DBC\u8DBD\u8DBE\u8DBF\u8DC0"+
+            "\uE1C9\u8DC1\u8DC2\uE1CE\u8DC3\uE1D0\u8DC4\u8DC5"+
+            "\u8DC6\u8DC7\u8DC8\u8DC9\u8DCA\u8DCB\u8DCC\u8DCD"+
+            "\u8DCE\uE1D4\u8DCF\uE1D1\uE1CD\u8DD0\u8DD1\uE1CF"+
+            "\u8DD2\u8DD3\u8DD4\u8DD5\uE1D5\u8DD6\u8DD7\u8DD8"+
+            "\u8DD9\u8DDA\u8DDB\u8DDC\u8DDD\u8DDE\u8DDF\u8DE0"+
+            "\u8DE1\u8DE2\uE1D6\u8DE3\u8DE4\u8DE5\u8DE6\u8DE7"+
+            "\u8DE8\u8DE9\u8DEA\u8DEB\u8DEC\u8DED\u8DEE\u8DEF"+
+            "\u8DF0\u8DF1\u8DF2\u8DF3\u8DF4\u8DF5\u8DF6\u8DF7"+
+            "\u8DF8\uE1D7\u8DF9\u8DFA\u8DFB\uE1D8\u8DFC\u8DFD"+
+            "\u8DFE\u8E40\u8E41\u8E42\u8E43\u8E44\u8E45\u8E46"+
+            "\u8E47\u8E48\u8E49\u8E4A\u8E4B\u8E4C\u8E4D\u8E4E"+
+            "\u8E4F\u8E50\u8E51\u8E52\u8E53\u8E54\u8E55\uE1DA"+
+            "\u8E56\u8E57\u8E58\u8E59\u8E5A\u8E5B\u8E5C\u8E5D"+
+            "\u8E5E\u8E5F\u8E60\u8E61\u8E62\uE1DB\u8E63\u8E64"+
+            "\u8E65\u8E66\u8E67\u8E68\u8E69\uCEA1\u8E6A\u8E6B"+
+            "\u8E6C\u8E6D\u8E6E\u8E6F\u8E70\u8E71\u8E72\u8E73"+
+            "\u8E74\u8E75\u8E76\uE7DD\u8E77\uB4A8\uD6DD\u8E78"+
+            "\u8E79\uD1B2\uB3B2\u8E7A\u8E7B\uB9A4\uD7F3\uC7C9"+
+            "\uBEDE\uB9AE\u8E7C\uCED7\u8E7D\u8E7E\uB2EE\uDBCF"+
+            "\u8E80\uBCBA\uD2D1\uCBC8\uB0CD\u8E81\u8E82\uCFEF"+
+            "\u8E83\u8E84\u8E85\u8E86\u8E87\uD9E3\uBDED\u8E88"+
+            "\u8E89\uB1D2\uCAD0\uB2BC\u8E8A\uCBA7\uB7AB\u8E8B"+
+            "\uCAA6\u8E8C\u8E8D\u8E8E\uCFA3\u8E8F\u8E90\uE0F8"+
+            "\uD5CA\uE0FB\u8E91\u8E92\uE0FA\uC5C1\uCCFB\u8E93"+
+            "\uC1B1\uE0F9\uD6E3\uB2AF\uD6C4\uB5DB\u8E94\u8E95"+
+            "\u8E96\u8E97\u8E98\u8E99\u8E9A\u8E9B\uB4F8\uD6A1"+
+            "\u8E9C\u8E9D\u8E9E\u8E9F\u8EA0\uCFAF\uB0EF\u8EA1"+
+            "\u8EA2\uE0FC\u8EA3\u8EA4\u8EA5\u8EA6\u8EA7\uE1A1"+
+            "\uB3A3\u8EA8\u8EA9\uE0FD\uE0FE\uC3B1\u8EAA\u8EAB"+
+            "\u8EAC\u8EAD\uC3DD\u8EAE\uE1A2\uB7F9\u8EAF\u8EB0"+
+            "\u8EB1\u8EB2\u8EB3\u8EB4\uBBCF\u8EB5\u8EB6\u8EB7"+
+            "\u8EB8\u8EB9\u8EBA\u8EBB\uE1A3\uC4BB\u8EBC\u8EBD"+
+            "\u8EBE\u8EBF\u8EC0\uE1A4\u8EC1\u8EC2\uE1A5\u8EC3"+
+            "\u8EC4\uE1A6\uB4B1\u8EC5\u8EC6\u8EC7\u8EC8\u8EC9"+
+            "\u8ECA\u8ECB\u8ECC\u8ECD\u8ECE\u8ECF\u8ED0\u8ED1"+
+            "\u8ED2\u8ED3\uB8C9\uC6BD\uC4EA\u8ED4\uB2A2\u8ED5"+
+            "\uD0D2\u8ED6\uE7DB\uBBC3\uD3D7\uD3C4\u8ED7\uB9E3"+
+            "\uE2CF\u8ED8\u8ED9\u8EDA\uD7AF\u8EDB\uC7EC\uB1D3"+
+            "\u8EDC\u8EDD\uB4B2\uE2D1\u8EDE\u8EDF\u8EE0\uD0F2"+
+            "\uC2AE\uE2D0\u8EE1\uBFE2\uD3A6\uB5D7\uE2D2\uB5EA"+
+            "\u8EE2\uC3ED\uB8FD\u8EE3\uB8AE\u8EE4\uC5D3\uB7CF"+
+            "\uE2D4\u8EE5\u8EE6\u8EE7\u8EE8\uE2D3\uB6C8\uD7F9"+
+            "\u8EE9\u8EEA\u8EEB\u8EEC\u8EED\uCDA5\u8EEE\u8EEF"+
+            "\u8EF0\u8EF1\u8EF2\uE2D8\u8EF3\uE2D6\uCAFC\uBFB5"+
+            "\uD3B9\uE2D5\u8EF4\u8EF5\u8EF6\u8EF7\uE2D7\u8EF8"+
+            "\u8EF9\u8EFA\u8EFB\u8EFC\u8EFD\u8EFE\u8F40\u8F41"+
+            "\u8F42\uC1AE\uC0C8\u8F43\u8F44\u8F45\u8F46\u8F47"+
+            "\u8F48\uE2DB\uE2DA\uC0AA\u8F49\u8F4A\uC1CE\u8F4B"+
+            "\u8F4C\u8F4D\u8F4E\uE2DC\u8F4F\u8F50\u8F51\u8F52"+
+            "\u8F53\u8F54\u8F55\u8F56\u8F57\u8F58\u8F59\u8F5A"+
+            "\uE2DD\u8F5B\uE2DE\u8F5C\u8F5D\u8F5E\u8F5F\u8F60"+
+            "\u8F61\u8F62\u8F63\u8F64\uDBC8\u8F65\uD1D3\uCDA2"+
+            "\u8F66\u8F67\uBDA8\u8F68\u8F69\u8F6A\uDEC3\uD8A5"+
+            "\uBFAA\uDBCD\uD2EC\uC6FA\uC5AA\u8F6B\u8F6C\u8F6D"+
+            "\uDEC4\u8F6E\uB1D7\uDFAE\u8F6F\u8F70\u8F71\uCABD"+
+            "\u8F72\uDFB1\u8F73\uB9AD\u8F74\uD2FD\u8F75\uB8A5"+
+            "\uBAEB\u8F76\u8F77\uB3DA\u8F78\u8F79\u8F7A\uB5DC"+
+            "\uD5C5\u8F7B\u8F7C\u8F7D\u8F7E\uC3D6\uCFD2\uBBA1"+
+            "\u8F80\uE5F3\uE5F2\u8F81\u8F82\uE5F4\u8F83\uCDE4"+
+            "\u8F84\uC8F5\u8F85\u8F86\u8F87\u8F88\u8F89\u8F8A"+
+            "\u8F8B\uB5AF\uC7BF\u8F8C\uE5F6\u8F8D\u8F8E\u8F8F"+
+            "\uECB0\u8F90\u8F91\u8F92\u8F93\u8F94\u8F95\u8F96"+
+            "\u8F97\u8F98\u8F99\u8F9A\u8F9B\u8F9C\u8F9D\u8F9E"+
+            "\uE5E6\u8F9F\uB9E9\uB5B1\u8FA0\uC2BC\uE5E8\uE5E7"+
+            "\uE5E9\u8FA1\u8FA2\u8FA3\u8FA4\uD2CD\u8FA5\u8FA6"+
+            "\u8FA7\uE1EA\uD0CE\u8FA8\uCDAE\u8FA9\uD1E5\u8FAA"+
+            "\u8FAB\uB2CA\uB1EB\u8FAC\uB1F2\uC5ED\u8FAD\u8FAE"+
+            "\uD5C3\uD3B0\u8FAF\uE1DC\u8FB0\u8FB1\u8FB2\uE1DD"+
+            "\u8FB3\uD2DB\u8FB4\uB3B9\uB1CB\u8FB5\u8FB6\u8FB7"+
+            "\uCDF9\uD5F7\uE1DE\u8FB8\uBEB6\uB4FD\u8FB9\uE1DF"+
+            "\uBADC\uE1E0\uBBB2\uC2C9\uE1E1\u8FBA\u8FBB\u8FBC"+
+            "\uD0EC\u8FBD\uCDBD\u8FBE\u8FBF\uE1E2\u8FC0\uB5C3"+
+            "\uC5C7\uE1E3\u8FC1\u8FC2\uE1E4\u8FC3\u8FC4\u8FC5"+
+            "\u8FC6\uD3F9\u8FC7\u8FC8\u8FC9\u8FCA\u8FCB\u8FCC"+
+            "\uE1E5\u8FCD\uD1AD\u8FCE\u8FCF\uE1E6\uCEA2\u8FD0"+
+            "\u8FD1\u8FD2\u8FD3\u8FD4\u8FD5\uE1E7\u8FD6\uB5C2"+
+            "\u8FD7\u8FD8\u8FD9\u8FDA\uE1E8\uBBD5\u8FDB\u8FDC"+
+            "\u8FDD\u8FDE\u8FDF\uD0C4\uE2E0\uB1D8\uD2E4\u8FE0"+
+            "\u8FE1\uE2E1\u8FE2\u8FE3\uBCC9\uC8CC\u8FE4\uE2E3"+
+            "\uECFE\uECFD\uDFAF\u8FE5\u8FE6\u8FE7\uE2E2\uD6BE"+
+            "\uCDFC\uC3A6\u8FE8\u8FE9\u8FEA\uE3C3\u8FEB\u8FEC"+
+            "\uD6D2\uE2E7\u8FED\u8FEE\uE2E8\u8FEF\u8FF0\uD3C7"+
+            "\u8FF1\u8FF2\uE2EC\uBFEC\u8FF3\uE2ED\uE2E5\u8FF4"+
+            "\u8FF5\uB3C0\u8FF6\u8FF7\u8FF8\uC4EE\u8FF9\u8FFA"+
+            "\uE2EE\u8FFB\u8FFC\uD0C3\u8FFD\uBAF6\uE2E9\uB7DE"+
+            "\uBBB3\uCCAC\uCBCB\uE2E4\uE2E6\uE2EA\uE2EB\u8FFE"+
+            "\u9040\u9041\uE2F7\u9042\u9043\uE2F4\uD4F5\uE2F3"+
+            "\u9044\u9045\uC5AD\u9046\uD5FA\uC5C2\uB2C0\u9047"+
+            "\u9048\uE2EF\u9049\uE2F2\uC1AF\uCBBC\u904A\u904B"+
+            "\uB5A1\uE2F9\u904C\u904D\u904E\uBCB1\uE2F1\uD0D4"+
+            "\uD4B9\uE2F5\uB9D6\uE2F6\u904F\u9050\u9051\uC7D3"+
+            "\u9052\u9053\u9054\u9055\u9056\uE2F0\u9057\u9058"+
+            "\u9059\u905A\u905B\uD7DC\uEDA1\u905C\u905D\uE2F8"+
+            "\u905E\uEDA5\uE2FE\uCAD1\u905F\u9060\u9061\u9062"+
+            "\u9063\u9064\u9065\uC1B5\u9066\uBBD0\u9067\u9068"+
+            "\uBFD6\u9069\uBAE3\u906A\u906B\uCBA1\u906C\u906D"+
+            "\u906E\uEDA6\uEDA3\u906F\u9070\uEDA2\u9071\u9072"+
+            "\u9073\u9074\uBBD6\uEDA7\uD0F4\u9075\u9076\uEDA4"+
+            "\uBADE\uB6F7\uE3A1\uB6B2\uCCF1\uB9A7\u9077\uCFA2"+
+            "\uC7A1\u9078\u9079\uBFD2\u907A\u907B\uB6F1\u907C"+
+            "\uE2FA\uE2FB\uE2FD\uE2FC\uC4D5\uE3A2\u907D\uD3C1"+
+            "\u907E\u9080\u9081\uE3A7\uC7C4\u9082\u9083\u9084"+
+            "\u9085\uCFA4\u9086\u9087\uE3A9\uBAB7\u9088\u9089"+
+            "\u908A\u908B\uE3A8\u908C\uBBDA\u908D\uE3A3\u908E"+
+            "\u908F\u9090\uE3A4\uE3AA\u9091\uE3A6\u9092\uCEF2"+
+            "\uD3C6\u9093\u9094\uBBBC\u9095\u9096\uD4C3\u9097"+
+            "\uC4FA\u9098\u9099\uEDA8\uD0FC\uE3A5\u909A\uC3F5"+
+            "\u909B\uE3AD\uB1AF\u909C\uE3B2\u909D\u909E\u909F"+
+            "\uBCC2\u90A0\u90A1\uE3AC\uB5BF\u90A2\u90A3\u90A4"+
+            "\u90A5\u90A6\u90A7\u90A8\u90A9\uC7E9\uE3B0\u90AA"+
+            "\u90AB\u90AC\uBEAA\uCDEF\u90AD\u90AE\u90AF\u90B0"+
+            "\u90B1\uBBF3\u90B2\u90B3\u90B4\uCCE8\u90B5\u90B6"+
+            "\uE3AF\u90B7\uE3B1\u90B8\uCFA7\uE3AE\u90B9\uCEA9"+
+            "\uBBDD\u90BA\u90BB\u90BC\u90BD\u90BE\uB5EB\uBEE5"+
+            "\uB2D2\uB3CD\u90BF\uB1B9\uE3AB\uB2D1\uB5AC\uB9DF"+
+            "\uB6E8\u90C0\u90C1\uCFEB\uE3B7\u90C2\uBBCC\u90C3"+
+            "\u90C4\uC8C7\uD0CA\u90C5\u90C6\u90C7\u90C8\u90C9"+
+            "\uE3B8\uB3EE\u90CA\u90CB\u90CC\u90CD\uEDA9\u90CE"+
+            "\uD3FA\uD3E4\u90CF\u90D0\u90D1\uEDAA\uE3B9\uD2E2"+
+            "\u90D2\u90D3\u90D4\u90D5\u90D6\uE3B5\u90D7\u90D8"+
+            "\u90D9\u90DA\uD3DE\u90DB\u90DC\u90DD\u90DE\uB8D0"+
+            "\uE3B3\u90DF\u90E0\uE3B6\uB7DF\u90E1\uE3B4\uC0A2"+
+            "\u90E2\u90E3\u90E4\uE3BA\u90E5\u90E6\u90E7\u90E8"+
+            "\u90E9\u90EA\u90EB\u90EC\u90ED\u90EE\u90EF\u90F0"+
+            "\u90F1\u90F2\u90F3\u90F4\u90F5\u90F6\u90F7\uD4B8"+
+            "\u90F8\u90F9\u90FA\u90FB\u90FC\u90FD\u90FE\u9140"+
+            "\uB4C8\u9141\uE3BB\u9142\uBBC5\u9143\uC9F7\u9144"+
+            "\u9145\uC9E5\u9146\u9147\u9148\uC4BD\u9149\u914A"+
+            "\u914B\u914C\u914D\u914E\u914F\uEDAB\u9150\u9151"+
+            "\u9152\u9153\uC2FD\u9154\u9155\u9156\u9157\uBBDB"+
+            "\uBFAE\u9158\u9159\u915A\u915B\u915C\u915D\u915E"+
+            "\uCEBF\u915F\u9160\u9161\u9162\uE3BC\u9163\uBFB6"+
+            "\u9164\u9165\u9166\u9167\u9168\u9169\u916A\u916B"+
+            "\u916C\u916D\u916E\u916F\u9170\u9171\u9172\u9173"+
+            "\u9174\u9175\u9176\uB1EF\u9177\u9178\uD4F7\u9179"+
+            "\u917A\u917B\u917C\u917D\uE3BE\u917E\u9180\u9181"+
+            "\u9182\u9183\u9184\u9185\u9186\uEDAD\u9187\u9188"+
+            "\u9189\u918A\u918B\u918C\u918D\u918E\u918F\uE3BF"+
+            "\uBAA9\uEDAC\u9190\u9191\uE3BD\u9192\u9193\u9194"+
+            "\u9195\u9196\u9197\u9198\u9199\u919A\u919B\uE3C0"+
+            "\u919C\u919D\u919E\u919F\u91A0\u91A1\uBAB6\u91A2"+
+            "\u91A3\u91A4\uB6AE\u91A5\u91A6\u91A7\u91A8\u91A9"+
+            "\uD0B8\u91AA\uB0C3\uEDAE\u91AB\u91AC\u91AD\u91AE"+
+            "\u91AF\uEDAF\uC0C1\u91B0\uE3C1\u91B1\u91B2\u91B3"+
+            "\u91B4\u91B5\u91B6\u91B7\u91B8\u91B9\u91BA\u91BB"+
+            "\u91BC\u91BD\u91BE\u91BF\u91C0\u91C1\uC5B3\u91C2"+
+            "\u91C3\u91C4\u91C5\u91C6\u91C7\u91C8\u91C9\u91CA"+
+            "\u91CB\u91CC\u91CD\u91CE\u91CF\uE3C2\u91D0\u91D1"+
+            "\u91D2\u91D3\u91D4\u91D5\u91D6\u91D7\u91D8\uDCB2"+
+            "\u91D9\u91DA\u91DB\u91DC\u91DD\u91DE\uEDB0\u91DF"+
+            "\uB8EA\u91E0\uCEEC\uEAA7\uD0E7\uCAF9\uC8D6\uCFB7"+
+            "\uB3C9\uCED2\uBDE4\u91E1\u91E2\uE3DE\uBBF2\uEAA8"+
+            "\uD5BD\u91E3\uC6DD\uEAA9\u91E4\u91E5\u91E6\uEAAA"+
+            "\u91E7\uEAAC\uEAAB\u91E8\uEAAE\uEAAD\u91E9\u91EA"+
+            "\u91EB\u91EC\uBDD8\u91ED\uEAAF\u91EE\uC2BE\u91EF"+
+            "\u91F0\u91F1\u91F2\uB4C1\uB4F7\u91F3\u91F4\uBBA7"+
+            "\u91F5\u91F6\u91F7\u91F8\u91F9\uECE6\uECE5\uB7BF"+
+            "\uCBF9\uB1E2\u91FA\uECE7\u91FB\u91FC\u91FD\uC9C8"+
+            "\uECE8\uECE9\u91FE\uCAD6\uDED0\uB2C5\uD4FA\u9240"+
+            "\u9241\uC6CB\uB0C7\uB4F2\uC8D3\u9242\u9243\u9244"+
+            "\uCDD0\u9245\u9246\uBFB8\u9247\u9248\u9249\u924A"+
+            "\u924B\u924C\u924D\uBFDB\u924E\u924F\uC7A4\uD6B4"+
+            "\u9250\uC0A9\uDED1\uC9A8\uD1EF\uC5A4\uB0E7\uB3B6"+
+            "\uC8C5\u9251\u9252\uB0E2\u9253\u9254\uB7F6\u9255"+
+            "\u9256\uC5FA\u9257\u9258\uB6F3\u9259\uD5D2\uB3D0"+
+            "\uBCBC\u925A\u925B\u925C\uB3AD\u925D\u925E\u925F"+
+            "\u9260\uBEF1\uB0D1\u9261\u9262\u9263\u9264\u9265"+
+            "\u9266\uD2D6\uCAE3\uD7A5\u9267\uCDB6\uB6B6\uBFB9"+
+            "\uD5DB\u9268\uB8A7\uC5D7\u9269\u926A\u926B\uDED2"+
+            "\uBFD9\uC2D5\uC7C0\u926C\uBBA4\uB1A8\u926D\u926E"+
+            "\uC5EA\u926F\u9270\uC5FB\uCCA7\u9271\u9272\u9273"+
+            "\u9274\uB1A7\u9275\u9276\u9277\uB5D6\u9278\u9279"+
+            "\u927A\uC4A8\u927B\uDED3\uD1BA\uB3E9\u927C\uC3F2"+
+            "\u927D\u927E\uB7F7\u9280\uD6F4\uB5A3\uB2F0\uC4B4"+
+            "\uC4E9\uC0AD\uDED4\u9281\uB0E8\uC5C4\uC1E0\u9282"+
+            "\uB9D5\u9283\uBEDC\uCDD8\uB0CE\u9284\uCDCF\uDED6"+
+            "\uBED0\uD7BE\uDED5\uD5D0\uB0DD\u9285\u9286\uC4E2"+
+            "\u9287\u9288\uC2A3\uBCF0\u9289\uD3B5\uC0B9\uC5A1"+
+            "\uB2A6\uD4F1\u928A\u928B\uC0A8\uCAC3\uDED7\uD5FC"+
+            "\u928C\uB9B0\u928D\uC8AD\uCBA9\u928E\uDED9\uBFBD"+
+            "\u928F\u9290\u9291\u9292\uC6B4\uD7A7\uCAB0\uC4C3"+
+            "\u9293\uB3D6\uB9D2\u9294\u9295\u9296\u9297\uD6B8"+
+            "\uEAFC\uB0B4\u9298\u9299\u929A\u929B\uBFE6\u929C"+
+            "\u929D\uCCF4\u929E\u929F\u92A0\u92A1\uCDDA\u92A2"+
+            "\u92A3\u92A4\uD6BF\uC2CE\u92A5\uCECE\uCCA2\uD0AE"+
+            "\uC4D3\uB5B2\uDED8\uD5F5\uBCB7\uBBD3\u92A6\u92A7"+
+            "\uB0A4\u92A8\uC5B2\uB4EC\u92A9\u92AA\u92AB\uD5F1"+
+            "\u92AC\u92AD\uEAFD\u92AE\u92AF\u92B0\u92B1\u92B2"+
+            "\u92B3\uDEDA\uCDA6\u92B4\u92B5\uCDEC\u92B6\u92B7"+
+            "\u92B8\u92B9\uCEE6\uDEDC\u92BA\uCDB1\uC0A6\u92BB"+
+            "\u92BC\uD7BD\u92BD\uDEDB\uB0C6\uBAB4\uC9D3\uC4F3"+
+            "\uBEE8\u92BE\u92BF\u92C0\u92C1\uB2B6\u92C2\u92C3"+
+            "\u92C4\u92C5\u92C6\u92C7\u92C8\u92C9\uC0CC\uCBF0"+
+            "\u92CA\uBCF1\uBBBB\uB5B7\u92CB\u92CC\u92CD\uC5F5"+
+            "\u92CE\uDEE6\u92CF\u92D0\u92D1\uDEE3\uBEDD\u92D2"+
+            "\u92D3\uDEDF\u92D4\u92D5\u92D6\u92D7\uB4B7\uBDDD"+
+            "\u92D8\u92D9\uDEE0\uC4ED\u92DA\u92DB\u92DC\u92DD"+
+            "\uCFC6\u92DE\uB5E0\u92DF\u92E0\u92E1\u92E2\uB6DE"+
+            "\uCADA\uB5F4\uDEE5\u92E3\uD5C6\u92E4\uDEE1\uCCCD"+
+            "\uC6FE\u92E5\uC5C5\u92E6\u92E7\u92E8\uD2B4\u92E9"+
+            "\uBEF2\u92EA\u92EB\u92EC\u92ED\u92EE\u92EF\u92F0"+
+            "\uC2D3\u92F1\uCCBD\uB3B8\u92F2\uBDD3\u92F3\uBFD8"+
+            "\uCDC6\uD1DA\uB4EB\u92F4\uDEE4\uDEDD\uDEE7\u92F5"+
+            "\uEAFE\u92F6\u92F7\uC2B0\uDEE2\u92F8\u92F9\uD6C0"+
+            "\uB5A7\u92FA\uB2F4\u92FB\uDEE8\u92FC\uDEF2\u92FD"+
+            "\u92FE\u9340\u9341\u9342\uDEED\u9343\uDEF1\u9344"+
+            "\u9345\uC8E0\u9346\u9347\u9348\uD7E1\uDEEF\uC3E8"+
+            "\uCCE1\u9349\uB2E5\u934A\u934B\u934C\uD2BE\u934D"+
+            "\u934E\u934F\u9350\u9351\u9352\u9353\uDEEE\u9354"+
+            "\uDEEB\uCED5\u9355\uB4A7\u9356\u9357\u9358\u9359"+
+            "\u935A\uBFAB\uBEBE\u935B\u935C\uBDD2\u935D\u935E"+
+            "\u935F\u9360\uDEE9\u9361\uD4AE\u9362\uDEDE\u9363"+
+            "\uDEEA\u9364\u9365\u9366\u9367\uC0BF\u9368\uDEEC"+
+            "\uB2F3\uB8E9\uC2A7\u9369\u936A\uBDC1\u936B\u936C"+
+            "\u936D\u936E\u936F\uDEF5\uDEF8\u9370\u9371\uB2AB"+
+            "\uB4A4\u9372\u9373\uB4EA\uC9A6\u9374\u9375\u9376"+
+            "\u9377\u9378\u9379\uDEF6\uCBD1\u937A\uB8E3\u937B"+
+            "\uDEF7\uDEFA\u937C\u937D\u937E\u9380\uDEF9\u9381"+
+            "\u9382\u9383\uCCC2\u9384\uB0E1\uB4EE\u9385\u9386"+
+            "\u9387\u9388\u9389\u938A\uE5BA\u938B\u938C\u938D"+
+            "\u938E\u938F\uD0AF\u9390\u9391\uB2EB\u9392\uEBA1"+
+            "\u9393\uDEF4\u9394\u9395\uC9E3\uDEF3\uB0DA\uD2A1"+
+            "\uB1F7\u9396\uCCAF\u9397\u9398\u9399\u939A\u939B"+
+            "\u939C\u939D\uDEF0\u939E\uCBA4\u939F\u93A0\u93A1"+
+            "\uD5AA\u93A2\u93A3\u93A4\u93A5\u93A6\uDEFB\u93A7"+
+            "\u93A8\u93A9\u93AA\u93AB\u93AC\u93AD\u93AE\uB4DD"+
+            "\u93AF\uC4A6\u93B0\u93B1\u93B2\uDEFD\u93B3\u93B4"+
+            "\u93B5\u93B6\u93B7\u93B8\u93B9\u93BA\u93BB\u93BC"+
+            "\uC3FE\uC4A1\uDFA1\u93BD\u93BE\u93BF\u93C0\u93C1"+
+            "\u93C2\u93C3\uC1CC\u93C4\uDEFC\uBEEF\u93C5\uC6B2"+
+            "\u93C6\u93C7\u93C8\u93C9\u93CA\u93CB\u93CC\u93CD"+
+            "\u93CE\uB3C5\uC8F6\u93CF\u93D0\uCBBA\uDEFE\u93D1"+
+            "\u93D2\uDFA4\u93D3\u93D4\u93D5\u93D6\uD7B2\u93D7"+
+            "\u93D8\u93D9\u93DA\u93DB\uB3B7\u93DC\u93DD\u93DE"+
+            "\u93DF\uC1C3\u93E0\u93E1\uC7CB\uB2A5\uB4E9\u93E2"+
+            "\uD7AB\u93E3\u93E4\u93E5\u93E6\uC4EC\u93E7\uDFA2"+
+            "\uDFA3\u93E8\uDFA5\u93E9\uBAB3\u93EA\u93EB\u93EC"+
+            "\uDFA6\u93ED\uC0DE\u93EE\u93EF\uC9C3\u93F0\u93F1"+
+            "\u93F2\u93F3\u93F4\u93F5\u93F6\uB2D9\uC7E6\u93F7"+
+            "\uDFA7\u93F8\uC7DC\u93F9\u93FA\u93FB\u93FC\uDFA8"+
+            "\uEBA2\u93FD\u93FE\u9440\u9441\u9442\uCBD3\u9443"+
+            "\u9444\u9445\uDFAA\u9446\uDFA9\u9447\uB2C1\u9448"+
+            "\u9449\u944A\u944B\u944C\u944D\u944E\u944F\u9450"+
+            "\u9451\u9452\u9453\u9454\u9455\u9456\u9457\u9458"+
+            "\u9459\u945A\u945B\u945C\u945D\u945E\u945F\u9460"+
+            "\uC5CA\u9461\u9462\u9463\u9464\u9465\u9466\u9467"+
+            "\u9468\uDFAB\u9469\u946A\u946B\u946C\u946D\u946E"+
+            "\u946F\u9470\uD4DC\u9471\u9472\u9473\u9474\u9475"+
+            "\uC8C1\u9476\u9477\u9478\u9479\u947A\u947B\u947C"+
+            "\u947D\u947E\u9480\u9481\u9482\uDFAC\u9483\u9484"+
+            "\u9485\u9486\u9487\uBEF0\u9488\u9489\uDFAD\uD6A7"+
+            "\u948A\u948B\u948C\u948D\uEAB7\uEBB6\uCAD5\u948E"+
+            "\uD8FC\uB8C4\u948F\uB9A5\u9490\u9491\uB7C5\uD5FE"+
+            "\u9492\u9493\u9494\u9495\u9496\uB9CA\u9497\u9498"+
+            "\uD0A7\uF4CD\u9499\u949A\uB5D0\u949B\u949C\uC3F4"+
+            "\u949D\uBEC8\u949E\u949F\u94A0\uEBB7\uB0BD\u94A1"+
+            "\u94A2\uBDCC\u94A3\uC1B2\u94A4\uB1D6\uB3A8\u94A5"+
+            "\u94A6\u94A7\uB8D2\uC9A2\u94A8\u94A9\uB6D8\u94AA"+
+            "\u94AB\u94AC\u94AD\uEBB8\uBEB4\u94AE\u94AF\u94B0"+
+            "\uCAFD\u94B1\uC7C3\u94B2\uD5FB\u94B3\u94B4\uB7F3"+
+            "\u94B5\u94B6\u94B7\u94B8\u94B9\u94BA\u94BB\u94BC"+
+            "\u94BD\u94BE\u94BF\u94C0\u94C1\u94C2\u94C3\uCEC4"+
+            "\u94C4\u94C5\u94C6\uD5AB\uB1F3\u94C7\u94C8\u94C9"+
+            "\uECB3\uB0DF\u94CA\uECB5\u94CB\u94CC\u94CD\uB6B7"+
+            "\u94CE\uC1CF\u94CF\uF5FA\uD0B1\u94D0\u94D1\uD5E5"+
+            "\u94D2\uCED3\u94D3\u94D4\uBDEF\uB3E2\u94D5\uB8AB"+
+            "\u94D6\uD5B6\u94D7\uEDBD\u94D8\uB6CF\u94D9\uCBB9"+
+            "\uD0C2\u94DA\u94DB\u94DC\u94DD\u94DE\u94DF\u94E0"+
+            "\u94E1\uB7BD\u94E2\u94E3\uECB6\uCAA9\u94E4\u94E5"+
+            "\u94E6\uC5D4\u94E7\uECB9\uECB8\uC2C3\uECB7\u94E8"+
+            "\u94E9\u94EA\u94EB\uD0FD\uECBA\u94EC\uECBB\uD7E5"+
+            "\u94ED\u94EE\uECBC\u94EF\u94F0\u94F1\uECBD\uC6EC"+
+            "\u94F2\u94F3\u94F4\u94F5\u94F6\u94F7\u94F8\u94F9"+
+            "\uCEDE\u94FA\uBCC8\u94FB\u94FC\uC8D5\uB5A9\uBEC9"+
+            "\uD6BC\uD4E7\u94FD\u94FE\uD1AE\uD0F1\uEAB8\uEAB9"+
+            "\uEABA\uBAB5\u9540\u9541\u9542\u9543\uCAB1\uBFF5"+
+            "\u9544\u9545\uCDFA\u9546\u9547\u9548\u9549\u954A"+
+            "\uEAC0\u954B\uB0BA\uEABE\u954C\u954D\uC0A5\u954E"+
+            "\u954F\u9550\uEABB\u9551\uB2FD\u9552\uC3F7\uBBE8"+
+            "\u9553\u9554\u9555\uD2D7\uCEF4\uEABF\u9556\u9557"+
+            "\u9558\uEABC\u9559\u955A\u955B\uEAC3\u955C\uD0C7"+
+            "\uD3B3\u955D\u955E\u955F\u9560\uB4BA\u9561\uC3C1"+
+            "\uD7F2\u9562\u9563\u9564\u9565\uD5D1\u9566\uCAC7"+
+            "\u9567\uEAC5\u9568\u9569\uEAC4\uEAC7\uEAC6\u956A"+
+            "\u956B\u956C\u956D\u956E\uD6E7\u956F\uCFD4\u9570"+
+            "\u9571\uEACB\u9572\uBBCE\u9573\u9574\u9575\u9576"+
+            "\u9577\u9578\u9579\uBDFA\uC9CE\u957A\u957B\uEACC"+
+            "\u957C\u957D\uC9B9\uCFFE\uEACA\uD4CE\uEACD\uEACF"+
+            "\u957E\u9580\uCDED\u9581\u9582\u9583\u9584\uEAC9"+
+            "\u9585\uEACE\u9586\u9587\uCEEE\u9588\uBBDE\u9589"+
+            "\uB3BF\u958A\u958B\u958C\u958D\u958E\uC6D5\uBEB0"+
+            "\uCEFA\u958F\u9590\u9591\uC7E7\u9592\uBEA7\uEAD0"+
+            "\u9593\u9594\uD6C7\u9595\u9596\u9597\uC1C0\u9598"+
+            "\u9599\u959A\uD4DD\u959B\uEAD1\u959C\u959D\uCFBE"+
+            "\u959E\u959F\u95A0\u95A1\uEAD2\u95A2\u95A3\u95A4"+
+            "\u95A5\uCAEE\u95A6\u95A7\u95A8\u95A9\uC5AF\uB0B5"+
+            "\u95AA\u95AB\u95AC\u95AD\u95AE\uEAD4\u95AF\u95B0"+
+            "\u95B1\u95B2\u95B3\u95B4\u95B5\u95B6\u95B7\uEAD3"+
+            "\uF4DF\u95B8\u95B9\u95BA\u95BB\u95BC\uC4BA\u95BD"+
+            "\u95BE\u95BF\u95C0\u95C1\uB1A9\u95C2\u95C3\u95C4"+
+            "\u95C5\uE5DF\u95C6\u95C7\u95C8\u95C9\uEAD5\u95CA"+
+            "\u95CB\u95CC\u95CD\u95CE\u95CF\u95D0\u95D1\u95D2"+
+            "\u95D3\u95D4\u95D5\u95D6\u95D7\u95D8\u95D9\u95DA"+
+            "\u95DB\u95DC\u95DD\u95DE\u95DF\u95E0\u95E1\u95E2"+
+            "\u95E3\uCAEF\u95E4\uEAD6\uEAD7\uC6D8\u95E5\u95E6"+
+            "\u95E7\u95E8\u95E9\u95EA\u95EB\u95EC\uEAD8\u95ED"+
+            "\u95EE\uEAD9\u95EF\u95F0\u95F1\u95F2\u95F3\u95F4"+
+            "\uD4BB\u95F5\uC7FA\uD2B7\uB8FC\u95F6\u95F7\uEAC2"+
+            "\u95F8\uB2DC\u95F9\u95FA\uC2FC\u95FB\uD4F8\uCCE6"+
+            "\uD7EE\u95FC\u95FD\u95FE\u9640\u9641\u9642\u9643"+
+            "\uD4C2\uD3D0\uEBC3\uC5F3\u9644\uB7FE\u9645\u9646"+
+            "\uEBD4\u9647\u9648\u9649\uCBB7\uEBDE\u964A\uC0CA"+
+            "\u964B\u964C\u964D\uCDFB\u964E\uB3AF\u964F\uC6DA"+
+            "\u9650\u9651\u9652\u9653\u9654\u9655\uEBFC\u9656"+
+            "\uC4BE\u9657\uCEB4\uC4A9\uB1BE\uD4FD\u9658\uCAF5"+
+            "\u9659\uD6EC\u965A\u965B\uC6D3\uB6E4\u965C\u965D"+
+            "\u965E\u965F\uBBFA\u9660\u9661\uD0E0\u9662\u9663"+
+            "\uC9B1\u9664\uD4D3\uC8A8\u9665\u9666\uB8CB\u9667"+
+            "\uE8BE\uC9BC\u9668\u9669\uE8BB\u966A\uC0EE\uD0D3"+
+            "\uB2C4\uB4E5\u966B\uE8BC\u966C\u966D\uD5C8\u966E"+
+            "\u966F\u9670\u9671\u9672\uB6C5\u9673\uE8BD\uCAF8"+
+            "\uB8DC\uCCF5\u9674\u9675\u9676\uC0B4\u9677\u9678"+
+            "\uD1EE\uE8BF\uE8C2\u9679\u967A\uBABC\u967B\uB1AD"+
+            "\uBDDC\u967C\uEABD\uE8C3\u967D\uE8C6\u967E\uE8CB"+
+            "\u9680\u9681\u9682\u9683\uE8CC\u9684\uCBC9\uB0E5"+
+            "\u9685\uBCAB\u9686\u9687\uB9B9\u9688\u9689\uE8C1"+
+            "\u968A\uCDF7\u968B\uE8CA\u968C\u968D\u968E\u968F"+
+            "\uCEF6\u9690\u9691\u9692\u9693\uD5ED\u9694\uC1D6"+
+            "\uE8C4\u9695\uC3B6\u9696\uB9FB\uD6A6\uE8C8\u9697"+
+            "\u9698\u9699\uCAE0\uD4E6\u969A\uE8C0\u969B\uE8C5"+
+            "\uE8C7\u969C\uC7B9\uB7E3\u969D\uE8C9\u969E\uBFDD"+
+            "\uE8D2\u969F\u96A0\uE8D7\u96A1\uE8D5\uBCDC\uBCCF"+
+            "\uE8DB\u96A2\u96A3\u96A4\u96A5\u96A6\u96A7\u96A8"+
+            "\u96A9\uE8DE\u96AA\uE8DA\uB1FA\u96AB\u96AC\u96AD"+
+            "\u96AE\u96AF\u96B0\u96B1\u96B2\u96B3\u96B4\uB0D8"+
+            "\uC4B3\uB8CC\uC6E2\uC8BE\uC8E1\u96B5\u96B6\u96B7"+
+            "\uE8CF\uE8D4\uE8D6\u96B8\uB9F1\uE8D8\uD7F5\u96B9"+
+            "\uC4FB\u96BA\uE8DC\u96BB\u96BC\uB2E9\u96BD\u96BE"+
+            "\u96BF\uE8D1\u96C0\u96C1\uBCED\u96C2\u96C3\uBFC2"+
+            "\uE8CD\uD6F9\u96C4\uC1F8\uB2F1\u96C5\u96C6\u96C7"+
+            "\u96C8\u96C9\u96CA\u96CB\u96CC\uE8DF\u96CD\uCAC1"+
+            "\uE8D9\u96CE\u96CF\u96D0\u96D1\uD5A4\u96D2\uB1EA"+
+            "\uD5BB\uE8CE\uE8D0\uB6B0\uE8D3\u96D3\uE8DD\uC0B8"+
+            "\u96D4\uCAF7\u96D5\uCBA8\u96D6\u96D7\uC6DC\uC0F5"+
+            "\u96D8\u96D9\u96DA\u96DB\u96DC\uE8E9\u96DD\u96DE"+
+            "\u96DF\uD0A3\u96E0\u96E1\u96E2\u96E3\u96E4\u96E5"+
+            "\u96E6\uE8F2\uD6EA\u96E7\u96E8\u96E9\u96EA\u96EB"+
+            "\u96EC\u96ED\uE8E0\uE8E1\u96EE\u96EF\u96F0\uD1F9"+
+            "\uBACB\uB8F9\u96F1\u96F2\uB8F1\uD4D4\uE8EF\u96F3"+
+            "\uE8EE\uE8EC\uB9F0\uCCD2\uE8E6\uCEA6\uBFF2\u96F4"+
+            "\uB0B8\uE8F1\uE8F0\u96F5\uD7C0\u96F6\uE8E4\u96F7"+
+            "\uCDA9\uC9A3\u96F8\uBBB8\uBDDB\uE8EA\u96F9\u96FA"+
+            "\u96FB\u96FC\u96FD\u96FE\u9740\u9741\u9742\u9743"+
+            "\uE8E2\uE8E3\uE8E5\uB5B5\uE8E7\uC7C5\uE8EB\uE8ED"+
+            "\uBDB0\uD7AE\u9744\uE8F8\u9745\u9746\u9747\u9748"+
+            "\u9749\u974A\u974B\u974C\uE8F5\u974D\uCDB0\uE8F6"+
+            "\u974E\u974F\u9750\u9751\u9752\u9753\u9754\u9755"+
+            "\u9756\uC1BA\u9757\uE8E8\u9758\uC3B7\uB0F0\u9759"+
+            "\u975A\u975B\u975C\u975D\u975E\u975F\u9760\uE8F4"+
+            "\u9761\u9762\u9763\uE8F7\u9764\u9765\u9766\uB9A3"+
+            "\u9767\u9768\u9769\u976A\u976B\u976C\u976D\u976E"+
+            "\u976F\u9770\uC9D2\u9771\u9772\u9773\uC3CE\uCEE0"+
+            "\uC0E6\u9774\u9775\u9776\u9777\uCBF3\u9778\uCCDD"+
+            "\uD0B5\u9779\u977A\uCAE1\u977B\uE8F3\u977C\u977D"+
+            "\u977E\u9780\u9781\u9782\u9783\u9784\u9785\u9786"+
+            "\uBCEC\u9787\uE8F9\u9788\u9789\u978A\u978B\u978C"+
+            "\u978D\uC3DE\u978E\uC6E5\u978F\uB9F7\u9790\u9791"+
+            "\u9792\u9793\uB0F4\u9794\u9795\uD7D8\u9796\u9797"+
+            "\uBCAC\u9798\uC5EF\u9799\u979A\u979B\u979C\u979D"+
+            "\uCCC4\u979E\u979F\uE9A6\u97A0\u97A1\u97A2\u97A3"+
+            "\u97A4\u97A5\u97A6\u97A7\u97A8\u97A9\uC9AD\u97AA"+
+            "\uE9A2\uC0E2\u97AB\u97AC\u97AD\uBFC3\u97AE\u97AF"+
+            "\u97B0\uE8FE\uB9D7\u97B1\uE8FB\u97B2\u97B3\u97B4"+
+            "\u97B5\uE9A4\u97B6\u97B7\u97B8\uD2CE\u97B9\u97BA"+
+            "\u97BB\u97BC\u97BD\uE9A3\u97BE\uD6B2\uD7B5\u97BF"+
+            "\uE9A7\u97C0\uBDB7\u97C1\u97C2\u97C3\u97C4\u97C5"+
+            "\u97C6\u97C7\u97C8\u97C9\u97CA\u97CB\u97CC\uE8FC"+
+            "\uE8FD\u97CD\u97CE\u97CF\uE9A1\u97D0\u97D1\u97D2"+
+            "\u97D3\u97D4\u97D5\u97D6\u97D7\uCDD6\u97D8\u97D9"+
+            "\uD2AC\u97DA\u97DB\u97DC\uE9B2\u97DD\u97DE\u97DF"+
+            "\u97E0\uE9A9\u97E1\u97E2\u97E3\uB4AA\u97E4\uB4BB"+
+            "\u97E5\u97E6\uE9AB\u97E7\u97E8\u97E9\u97EA\u97EB"+
+            "\u97EC\u97ED\u97EE\u97EF\u97F0\u97F1\u97F2\u97F3"+
+            "\u97F4\u97F5\u97F6\u97F7\uD0A8\u97F8\u97F9\uE9A5"+
+            "\u97FA\u97FB\uB3FE\u97FC\u97FD\uE9AC\uC0E3\u97FE"+
+            "\uE9AA\u9840\u9841\uE9B9\u9842\u9843\uE9B8\u9844"+
+            "\u9845\u9846\u9847\uE9AE\u9848\u9849\uE8FA\u984A"+
+            "\u984B\uE9A8\u984C\u984D\u984E\u984F\u9850\uBFAC"+
+            "\uE9B1\uE9BA\u9851\u9852\uC2A5\u9853\u9854\u9855"+
+            "\uE9AF\u9856\uB8C5\u9857\uE9AD\u9858\uD3DC\uE9B4"+
+            "\uE9B5\uE9B7\u9859\u985A\u985B\uE9C7\u985C\u985D"+
+            "\u985E\u985F\u9860\u9861\uC0C6\uE9C5\u9862\u9863"+
+            "\uE9B0\u9864\u9865\uE9BB\uB0F1\u9866\u9867\u9868"+
+            "\u9869\u986A\u986B\u986C\u986D\u986E\u986F\uE9BC"+
+            "\uD5A5\u9870\u9871\uE9BE\u9872\uE9BF\u9873\u9874"+
+            "\u9875\uE9C1\u9876\u9877\uC1F1\u9878\u9879\uC8B6"+
+            "\u987A\u987B\u987C\uE9BD\u987D\u987E\u9880\u9881"+
+            "\u9882\uE9C2\u9883\u9884\u9885\u9886\u9887\u9888"+
+            "\u9889\u988A\uE9C3\u988B\uE9B3\u988C\uE9B6\u988D"+
+            "\uBBB1\u988E\u988F\u9890\uE9C0\u9891\u9892\u9893"+
+            "\u9894\u9895\u9896\uBCF7\u9897\u9898\u9899\uE9C4"+
+            "\uE9C6\u989A\u989B\u989C\u989D\u989E\u989F\u98A0"+
+            "\u98A1\u98A2\u98A3\u98A4\u98A5\uE9CA\u98A6\u98A7"+
+            "\u98A8\u98A9\uE9CE\u98AA\u98AB\u98AC\u98AD\u98AE"+
+            "\u98AF\u98B0\u98B1\u98B2\u98B3\uB2DB\u98B4\uE9C8"+
+            "\u98B5\u98B6\u98B7\u98B8\u98B9\u98BA\u98BB\u98BC"+
+            "\u98BD\u98BE\uB7AE\u98BF\u98C0\u98C1\u98C2\u98C3"+
+            "\u98C4\u98C5\u98C6\u98C7\u98C8\u98C9\u98CA\uE9CB"+
+            "\uE9CC\u98CB\u98CC\u98CD\u98CE\u98CF\u98D0\uD5C1"+
+            "\u98D1\uC4A3\u98D2\u98D3\u98D4\u98D5\u98D6\u98D7"+
+            "\uE9D8\u98D8\uBAE1\u98D9\u98DA\u98DB\u98DC\uE9C9"+
+            "\u98DD\uD3A3\u98DE\u98DF\u98E0\uE9D4\u98E1\u98E2"+
+            "\u98E3\u98E4\u98E5\u98E6\u98E7\uE9D7\uE9D0\u98E8"+
+            "\u98E9\u98EA\u98EB\u98EC\uE9CF\u98ED\u98EE\uC7C1"+
+            "\u98EF\u98F0\u98F1\u98F2\u98F3\u98F4\u98F5\u98F6"+
+            "\uE9D2\u98F7\u98F8\u98F9\u98FA\u98FB\u98FC\u98FD"+
+            "\uE9D9\uB3C8\u98FE\uE9D3\u9940\u9941\u9942\u9943"+
+            "\u9944\uCFF0\u9945\u9946\u9947\uE9CD\u9948\u9949"+
+            "\u994A\u994B\u994C\u994D\u994E\u994F\u9950\u9951"+
+            "\u9952\uB3F7\u9953\u9954\u9955\u9956\u9957\u9958"+
+            "\u9959\uE9D6\u995A\u995B\uE9DA\u995C\u995D\u995E"+
+            "\uCCB4\u995F\u9960\u9961\uCFAD\u9962\u9963\u9964"+
+            "\u9965\u9966\u9967\u9968\u9969\u996A\uE9D5\u996B"+
+            "\uE9DC\uE9DB\u996C\u996D\u996E\u996F\u9970\uE9DE"+
+            "\u9971\u9972\u9973\u9974\u9975\u9976\u9977\u9978"+
+            "\uE9D1\u9979\u997A\u997B\u997C\u997D\u997E\u9980"+
+            "\u9981\uE9DD\u9982\uE9DF\uC3CA\u9983\u9984\u9985"+
+            "\u9986\u9987\u9988\u9989\u998A\u998B\u998C\u998D"+
+            "\u998E\u998F\u9990\u9991\u9992\u9993\u9994\u9995"+
+            "\u9996\u9997\u9998\u9999\u999A\u999B\u999C\u999D"+
+            "\u999E\u999F\u99A0\u99A1\u99A2\u99A3\u99A4\u99A5"+
+            "\u99A6\u99A7\u99A8\u99A9\u99AA\u99AB\u99AC\u99AD"+
+            "\u99AE\u99AF\u99B0\u99B1\u99B2\u99B3\u99B4\u99B5"+
+            "\u99B6\u99B7\u99B8\u99B9\u99BA\u99BB\u99BC\u99BD"+
+            "\u99BE\u99BF\u99C0\u99C1\u99C2\u99C3\u99C4\u99C5"+
+            "\u99C6\u99C7\u99C8\u99C9\u99CA\u99CB\u99CC\u99CD"+
+            "\u99CE\u99CF\u99D0\u99D1\u99D2\u99D3\u99D4\u99D5";
+
+        private final static String innerIndex4=
+            "\u99D6\u99D7\u99D8\u99D9\u99DA\u99DB\u99DC\u99DD"+
+            "\u99DE\u99DF\u99E0\u99E1\u99E2\u99E3\u99E4\u99E5"+
+            "\u99E6\u99E7\u99E8\u99E9\u99EA\u99EB\u99EC\u99ED"+
+            "\u99EE\u99EF\u99F0\u99F1\u99F2\u99F3\u99F4\u99F5"+
+            "\uC7B7\uB4CE\uBBB6\uD0C0\uECA3\u99F6\u99F7\uC5B7"+
+            "\u99F8\u99F9\u99FA\u99FB\u99FC\u99FD\u99FE\u9A40"+
+            "\u9A41\u9A42\uD3FB\u9A43\u9A44\u9A45\u9A46\uECA4"+
+            "\u9A47\uECA5\uC6DB\u9A48\u9A49\u9A4A\uBFEE\u9A4B"+
+            "\u9A4C\u9A4D\u9A4E\uECA6\u9A4F\u9A50\uECA7\uD0AA"+
+            "\u9A51\uC7B8\u9A52\u9A53\uB8E8\u9A54\u9A55\u9A56"+
+            "\u9A57\u9A58\u9A59\u9A5A\u9A5B\u9A5C\u9A5D\u9A5E"+
+            "\u9A5F\uECA8\u9A60\u9A61\u9A62\u9A63\u9A64\u9A65"+
+            "\u9A66\u9A67\uD6B9\uD5FD\uB4CB\uB2BD\uCEE4\uC6E7"+
+            "\u9A68\u9A69\uCDE1\u9A6A\u9A6B\u9A6C\u9A6D\u9A6E"+
+            "\u9A6F\u9A70\u9A71\u9A72\u9A73\u9A74\u9A75\u9A76"+
+            "\u9A77\uB4F5\u9A78\uCBC0\uBCDF\u9A79\u9A7A\u9A7B"+
+            "\u9A7C\uE9E2\uE9E3\uD1EA\uE9E5\u9A7D\uB4F9\uE9E4"+
+            "\u9A7E\uD1B3\uCAE2\uB2D0\u9A80\uE9E8\u9A81\u9A82"+
+            "\u9A83\u9A84\uE9E6\uE9E7\u9A85\u9A86\uD6B3\u9A87"+
+            "\u9A88\u9A89\uE9E9\uE9EA\u9A8A\u9A8B\u9A8C\u9A8D"+
+            "\u9A8E\uE9EB\u9A8F\u9A90\u9A91\u9A92\u9A93\u9A94"+
+            "\u9A95\u9A96\uE9EC\u9A97\u9A98\u9A99\u9A9A\u9A9B"+
+            "\u9A9C\u9A9D\u9A9E\uECAF\uC5B9\uB6CE\u9A9F\uD2F3"+
+            "\u9AA0\u9AA1\u9AA2\u9AA3\u9AA4\u9AA5\u9AA6\uB5EE"+
+            "\u9AA7\uBBD9\uECB1\u9AA8\u9AA9\uD2E3\u9AAA\u9AAB"+
+            "\u9AAC\u9AAD\u9AAE\uCEE3\u9AAF\uC4B8\u9AB0\uC3BF"+
+            "\u9AB1\u9AB2\uB6BE\uD8B9\uB1C8\uB1CF\uB1D1\uC5FE"+
+            "\u9AB3\uB1D0\u9AB4\uC3AB\u9AB5\u9AB6\u9AB7\u9AB8"+
+            "\u9AB9\uD5B1\u9ABA\u9ABB\u9ABC\u9ABD\u9ABE\u9ABF"+
+            "\u9AC0\u9AC1\uEBA4\uBAC1\u9AC2\u9AC3\u9AC4\uCCBA"+
+            "\u9AC5\u9AC6\u9AC7\uEBA5\u9AC8\uEBA7\u9AC9\u9ACA"+
+            "\u9ACB\uEBA8\u9ACC\u9ACD\u9ACE\uEBA6\u9ACF\u9AD0"+
+            "\u9AD1\u9AD2\u9AD3\u9AD4\u9AD5\uEBA9\uEBAB\uEBAA"+
+            "\u9AD6\u9AD7\u9AD8\u9AD9\u9ADA\uEBAC\u9ADB\uCACF"+
+            "\uD8B5\uC3F1\u9ADC\uC3A5\uC6F8\uEBAD\uC4CA\u9ADD"+
+            "\uEBAE\uEBAF\uEBB0\uB7D5\u9ADE\u9ADF\u9AE0\uB7FA"+
+            "\u9AE1\uEBB1\uC7E2\u9AE2\uEBB3\u9AE3\uBAA4\uD1F5"+
+            "\uB0B1\uEBB2\uEBB4\u9AE4\u9AE5\u9AE6\uB5AA\uC2C8"+
+            "\uC7E8\u9AE7\uEBB5\u9AE8\uCBAE\uE3DF\u9AE9\u9AEA"+
+            "\uD3C0\u9AEB\u9AEC\u9AED\u9AEE\uD9DB\u9AEF\u9AF0"+
+            "\uCDA1\uD6AD\uC7F3\u9AF1\u9AF2\u9AF3\uD9E0\uBBE3"+
+            "\u9AF4\uBABA\uE3E2\u9AF5\u9AF6\u9AF7\u9AF8\u9AF9"+
+            "\uCFAB\u9AFA\u9AFB\u9AFC\uE3E0\uC9C7\u9AFD\uBAB9"+
+            "\u9AFE\u9B40\u9B41\uD1B4\uE3E1\uC8EA\uB9AF\uBDAD"+
+            "\uB3D8\uCEDB\u9B42\u9B43\uCCC0\u9B44\u9B45\u9B46"+
+            "\uE3E8\uE3E9\uCDF4\u9B47\u9B48\u9B49\u9B4A\u9B4B"+
+            "\uCCAD\u9B4C\uBCB3\u9B4D\uE3EA\u9B4E\uE3EB\u9B4F"+
+            "\u9B50\uD0DA\u9B51\u9B52\u9B53\uC6FB\uB7DA\u9B54"+
+            "\u9B55\uC7DF\uD2CA\uCED6\u9B56\uE3E4\uE3EC\u9B57"+
+            "\uC9F2\uB3C1\u9B58\u9B59\uE3E7\u9B5A\u9B5B\uC6E3"+
+            "\uE3E5\u9B5C\u9B5D\uEDB3\uE3E6\u9B5E\u9B5F\u9B60"+
+            "\u9B61\uC9B3\u9B62\uC5E6\u9B63\u9B64\u9B65\uB9B5"+
+            "\u9B66\uC3BB\u9B67\uE3E3\uC5BD\uC1A4\uC2D9\uB2D7"+
+            "\u9B68\uE3ED\uBBA6\uC4AD\u9B69\uE3F0\uBEDA\u9B6A"+
+            "\u9B6B\uE3FB\uE3F5\uBAD3\u9B6C\u9B6D\u9B6E\u9B6F"+
+            "\uB7D0\uD3CD\u9B70\uD6CE\uD5D3\uB9C1\uD5B4\uD1D8"+
+            "\u9B71\u9B72\u9B73\u9B74\uD0B9\uC7F6\u9B75\u9B76"+
+            "\u9B77\uC8AA\uB2B4\u9B78\uC3DA\u9B79\u9B7A\u9B7B"+
+            "\uE3EE\u9B7C\u9B7D\uE3FC\uE3EF\uB7A8\uE3F7\uE3F4"+
+            "\u9B7E\u9B80\u9B81\uB7BA\u9B82\u9B83\uC5A2\u9B84"+
+            "\uE3F6\uC5DD\uB2A8\uC6FC\u9B85\uC4E0\u9B86\u9B87"+
+            "\uD7A2\u9B88\uC0E1\uE3F9\u9B89\u9B8A\uE3FA\uE3FD"+
+            "\uCCA9\uE3F3\u9B8B\uD3BE\u9B8C\uB1C3\uEDB4\uE3F1"+
+            "\uE3F2\u9B8D\uE3F8\uD0BA\uC6C3\uD4F3\uE3FE\u9B8E"+
+            "\u9B8F\uBDE0\u9B90\u9B91\uE4A7\u9B92\u9B93\uE4A6"+
+            "\u9B94\u9B95\u9B96\uD1F3\uE4A3\u9B97\uE4A9\u9B98"+
+            "\u9B99\u9B9A\uC8F7\u9B9B\u9B9C\u9B9D\u9B9E\uCFB4"+
+            "\u9B9F\uE4A8\uE4AE\uC2E5\u9BA0\u9BA1\uB6B4\u9BA2"+
+            "\u9BA3\u9BA4\u9BA5\u9BA6\u9BA7\uBDF2\u9BA8\uE4A2"+
+            "\u9BA9\u9BAA\uBAE9\uE4AA\u9BAB\u9BAC\uE4AC\u9BAD"+
+            "\u9BAE\uB6FD\uD6DE\uE4B2\u9BAF\uE4AD\u9BB0\u9BB1"+
+            "\u9BB2\uE4A1\u9BB3\uBBEE\uCDDD\uC7A2\uC5C9\u9BB4"+
+            "\u9BB5\uC1F7\u9BB6\uE4A4\u9BB7\uC7B3\uBDAC\uBDBD"+
+            "\uE4A5\u9BB8\uD7C7\uB2E2\u9BB9\uE4AB\uBCC3\uE4AF"+
+            "\u9BBA\uBBEB\uE4B0\uC5A8\uE4B1\u9BBB\u9BBC\u9BBD"+
+            "\u9BBE\uD5E3\uBFA3\u9BBF\uE4BA\u9BC0\uE4B7\u9BC1"+
+            "\uE4BB\u9BC2\u9BC3\uE4BD\u9BC4\u9BC5\uC6D6\u9BC6"+
+            "\u9BC7\uBAC6\uC0CB\u9BC8\u9BC9\u9BCA\uB8A1\uE4B4"+
+            "\u9BCB\u9BCC\u9BCD\u9BCE\uD4A1\u9BCF\u9BD0\uBAA3"+
+            "\uBDFE\u9BD1\u9BD2\u9BD3\uE4BC\u9BD4\u9BD5\u9BD6"+
+            "\u9BD7\u9BD8\uCDBF\u9BD9\u9BDA\uC4F9\u9BDB\u9BDC"+
+            "\uCFFB\uC9E6\u9BDD\u9BDE\uD3BF\u9BDF\uCFD1\u9BE0"+
+            "\u9BE1\uE4B3\u9BE2\uE4B8\uE4B9\uCCE9\u9BE3\u9BE4"+
+            "\u9BE5\u9BE6\u9BE7\uCCCE\u9BE8\uC0D4\uE4B5\uC1B0"+
+            "\uE4B6\uCED0\u9BE9\uBBC1\uB5D3\u9BEA\uC8F3\uBDA7"+
+            "\uD5C7\uC9AC\uB8A2\uE4CA\u9BEB\u9BEC\uE4CC\uD1C4"+
+            "\u9BED\u9BEE\uD2BA\u9BEF\u9BF0\uBAAD\u9BF1\u9BF2"+
+            "\uBAD4\u9BF3\u9BF4\u9BF5\u9BF6\u9BF7\u9BF8\uE4C3"+
+            "\uB5ED\u9BF9\u9BFA\u9BFB\uD7CD\uE4C0\uCFFD\uE4BF"+
+            "\u9BFC\u9BFD\u9BFE\uC1DC\uCCCA\u9C40\u9C41\u9C42"+
+            "\u9C43\uCAE7\u9C44\u9C45\u9C46\u9C47\uC4D7\u9C48"+
+            "\uCCD4\uE4C8\u9C49\u9C4A\u9C4B\uE4C7\uE4C1\u9C4C"+
+            "\uE4C4\uB5AD\u9C4D\u9C4E\uD3D9\u9C4F\uE4C6\u9C50"+
+            "\u9C51\u9C52\u9C53\uD2F9\uB4E3\u9C54\uBBB4\u9C55"+
+            "\u9C56\uC9EE\u9C57\uB4BE\u9C58\u9C59\u9C5A\uBBEC"+
+            "\u9C5B\uD1CD\u9C5C\uCCED\uEDB5\u9C5D\u9C5E\u9C5F"+
+            "\u9C60\u9C61\u9C62\u9C63\u9C64\uC7E5\u9C65\u9C66"+
+            "\u9C67\u9C68\uD4A8\u9C69\uE4CB\uD7D5\uE4C2\u9C6A"+
+            "\uBDA5\uE4C5\u9C6B\u9C6C\uD3E6\u9C6D\uE4C9\uC9F8"+
+            "\u9C6E\u9C6F\uE4BE\u9C70\u9C71\uD3E5\u9C72\u9C73"+
+            "\uC7FE\uB6C9\u9C74\uD4FC\uB2B3\uE4D7\u9C75\u9C76"+
+            "\u9C77\uCEC2\u9C78\uE4CD\u9C79\uCEBC\u9C7A\uB8DB"+
+            "\u9C7B\u9C7C\uE4D6\u9C7D\uBFCA\u9C7E\u9C80\u9C81"+
+            "\uD3CE\u9C82\uC3EC\u9C83\u9C84\u9C85\u9C86\u9C87"+
+            "\u9C88\u9C89\u9C8A\uC5C8\uE4D8\u9C8B\u9C8C\u9C8D"+
+            "\u9C8E\u9C8F\u9C90\u9C91\u9C92\uCDC4\uE4CF\u9C93"+
+            "\u9C94\u9C95\u9C96\uE4D4\uE4D5\u9C97\uBAFE\u9C98"+
+            "\uCFE6\u9C99\u9C9A\uD5BF\u9C9B\u9C9C\u9C9D\uE4D2"+
+            "\u9C9E\u9C9F\u9CA0\u9CA1\u9CA2\u9CA3\u9CA4\u9CA5"+
+            "\u9CA6\u9CA7\u9CA8\uE4D0\u9CA9\u9CAA\uE4CE\u9CAB"+
+            "\u9CAC\u9CAD\u9CAE\u9CAF\u9CB0\u9CB1\u9CB2\u9CB3"+
+            "\u9CB4\u9CB5\u9CB6\u9CB7\u9CB8\u9CB9\uCDE5\uCAAA"+
+            "\u9CBA\u9CBB\u9CBC\uC0A3\u9CBD\uBDA6\uE4D3\u9CBE"+
+            "\u9CBF\uB8C8\u9CC0\u9CC1\u9CC2\u9CC3\u9CC4\uE4E7"+
+            "\uD4B4\u9CC5\u9CC6\u9CC7\u9CC8\u9CC9\u9CCA\u9CCB"+
+            "\uE4DB\u9CCC\u9CCD\u9CCE\uC1EF\u9CCF\u9CD0\uE4E9"+
+            "\u9CD1\u9CD2\uD2E7\u9CD3\u9CD4\uE4DF\u9CD5\uE4E0"+
+            "\u9CD6\u9CD7\uCFAA\u9CD8\u9CD9\u9CDA\u9CDB\uCBDD"+
+            "\u9CDC\uE4DA\uE4D1\u9CDD\uE4E5\u9CDE\uC8DC\uE4E3"+
+            "\u9CDF\u9CE0\uC4E7\uE4E2\u9CE1\uE4E1\u9CE2\u9CE3"+
+            "\u9CE4\uB3FC\uE4E8\u9CE5\u9CE6\u9CE7\u9CE8\uB5E1"+
+            "\u9CE9\u9CEA\u9CEB\uD7CC\u9CEC\u9CED\u9CEE\uE4E6"+
+            "\u9CEF\uBBAC\u9CF0\uD7D2\uCCCF\uEBF8\u9CF1\uE4E4"+
+            "\u9CF2\u9CF3\uB9F6\u9CF4\u9CF5\u9CF6\uD6CD\uE4D9"+
+            "\uE4DC\uC2FA\uE4DE\u9CF7\uC2CB\uC0C4\uC2D0\u9CF8"+
+            "\uB1F5\uCCB2\u9CF9\u9CFA\u9CFB\u9CFC\u9CFD\u9CFE"+
+            "\u9D40\u9D41\u9D42\u9D43\uB5CE\u9D44\u9D45\u9D46"+
+            "\u9D47\uE4EF\u9D48\u9D49\u9D4A\u9D4B\u9D4C\u9D4D"+
+            "\u9D4E\u9D4F\uC6AF\u9D50\u9D51\u9D52\uC6E1\u9D53"+
+            "\u9D54\uE4F5\u9D55\u9D56\u9D57\u9D58\u9D59\uC2A9"+
+            "\u9D5A\u9D5B\u9D5C\uC0EC\uD1DD\uE4EE\u9D5D\u9D5E"+
+            "\u9D5F\u9D60\u9D61\u9D62\u9D63\u9D64\u9D65\u9D66"+
+            "\uC4AE\u9D67\u9D68\u9D69\uE4ED\u9D6A\u9D6B\u9D6C"+
+            "\u9D6D\uE4F6\uE4F4\uC2FE\u9D6E\uE4DD\u9D6F\uE4F0"+
+            "\u9D70\uCAFE\u9D71\uD5C4\u9D72\u9D73\uE4F1\u9D74"+
+            "\u9D75\u9D76\u9D77\u9D78\u9D79\u9D7A\uD1FA\u9D7B"+
+            "\u9D7C\u9D7D\u9D7E\u9D80\u9D81\u9D82\uE4EB\uE4EC"+
+            "\u9D83\u9D84\u9D85\uE4F2\u9D86\uCEAB\u9D87\u9D88"+
+            "\u9D89\u9D8A\u9D8B\u9D8C\u9D8D\u9D8E\u9D8F\u9D90"+
+            "\uC5CB\u9D91\u9D92\u9D93\uC7B1\u9D94\uC2BA\u9D95"+
+            "\u9D96\u9D97\uE4EA\u9D98\u9D99\u9D9A\uC1CA\u9D9B"+
+            "\u9D9C\u9D9D\u9D9E\u9D9F\u9DA0\uCCB6\uB3B1\u9DA1"+
+            "\u9DA2\u9DA3\uE4FB\u9DA4\uE4F3\u9DA5\u9DA6\u9DA7"+
+            "\uE4FA\u9DA8\uE4FD\u9DA9\uE4FC\u9DAA\u9DAB\u9DAC"+
+            "\u9DAD\u9DAE\u9DAF\u9DB0\uB3CE\u9DB1\u9DB2\u9DB3"+
+            "\uB3BA\uE4F7\u9DB4\u9DB5\uE4F9\uE4F8\uC5EC\u9DB6"+
+            "\u9DB7\u9DB8\u9DB9\u9DBA\u9DBB\u9DBC\u9DBD\u9DBE"+
+            "\u9DBF\u9DC0\u9DC1\u9DC2\uC0BD\u9DC3\u9DC4\u9DC5"+
+            "\u9DC6\uD4E8\u9DC7\u9DC8\u9DC9\u9DCA\u9DCB\uE5A2"+
+            "\u9DCC\u9DCD\u9DCE\u9DCF\u9DD0\u9DD1\u9DD2\u9DD3"+
+            "\u9DD4\u9DD5\u9DD6\uB0C4\u9DD7\u9DD8\uE5A4\u9DD9"+
+            "\u9DDA\uE5A3\u9DDB\u9DDC\u9DDD\u9DDE\u9DDF\u9DE0"+
+            "\uBCA4\u9DE1\uE5A5\u9DE2\u9DE3\u9DE4\u9DE5\u9DE6"+
+            "\u9DE7\uE5A1\u9DE8\u9DE9\u9DEA\u9DEB\u9DEC\u9DED"+
+            "\u9DEE\uE4FE\uB1F4\u9DEF\u9DF0\u9DF1\u9DF2\u9DF3"+
+            "\u9DF4\u9DF5\u9DF6\u9DF7\u9DF8\u9DF9\uE5A8\u9DFA"+
+            "\uE5A9\uE5A6\u9DFB\u9DFC\u9DFD\u9DFE\u9E40\u9E41"+
+            "\u9E42\u9E43\u9E44\u9E45\u9E46\u9E47\uE5A7\uE5AA"+
+            "\u9E48\u9E49\u9E4A\u9E4B\u9E4C\u9E4D\u9E4E\u9E4F"+
+            "\u9E50\u9E51\u9E52\u9E53\u9E54\u9E55\u9E56\u9E57"+
+            "\u9E58\u9E59\u9E5A\u9E5B\u9E5C\u9E5D\u9E5E\u9E5F"+
+            "\u9E60\u9E61\u9E62\u9E63\u9E64\u9E65\u9E66\u9E67"+
+            "\u9E68\uC6D9\u9E69\u9E6A\u9E6B\u9E6C\u9E6D\u9E6E"+
+            "\u9E6F\u9E70\uE5AB\uE5AD\u9E71\u9E72\u9E73\u9E74"+
+            "\u9E75\u9E76\u9E77\uE5AC\u9E78\u9E79\u9E7A\u9E7B"+
+            "\u9E7C\u9E7D\u9E7E\u9E80\u9E81\u9E82\u9E83\u9E84"+
+            "\u9E85\u9E86\u9E87\u9E88\u9E89\uE5AF\u9E8A\u9E8B"+
+            "\u9E8C\uE5AE\u9E8D\u9E8E\u9E8F\u9E90\u9E91\u9E92"+
+            "\u9E93\u9E94\u9E95\u9E96\u9E97\u9E98\u9E99\u9E9A"+
+            "\u9E9B\u9E9C\u9E9D\u9E9E\uB9E0\u9E9F\u9EA0\uE5B0"+
+            "\u9EA1\u9EA2\u9EA3\u9EA4\u9EA5\u9EA6\u9EA7\u9EA8"+
+            "\u9EA9\u9EAA\u9EAB\u9EAC\u9EAD\u9EAE\uE5B1\u9EAF"+
+            "\u9EB0\u9EB1\u9EB2\u9EB3\u9EB4\u9EB5\u9EB6\u9EB7"+
+            "\u9EB8\u9EB9\u9EBA\uBBF0\uECE1\uC3F0\u9EBB\uB5C6"+
+            "\uBBD2\u9EBC\u9EBD\u9EBE\u9EBF\uC1E9\uD4EE\u9EC0"+
+            "\uBEC4\u9EC1\u9EC2\u9EC3\uD7C6\u9EC4\uD4D6\uB2D3"+
+            "\uECBE\u9EC5\u9EC6\u9EC7\u9EC8\uEAC1\u9EC9\u9ECA"+
+            "\u9ECB\uC2AF\uB4B6\u9ECC\u9ECD\u9ECE\uD1D7\u9ECF"+
+            "\u9ED0\u9ED1\uB3B4\u9ED2\uC8B2\uBFBB\uECC0\u9ED3"+
+            "\u9ED4\uD6CB\u9ED5\u9ED6\uECBF\uECC1\u9ED7\u9ED8"+
+            "\u9ED9\u9EDA\u9EDB\u9EDC\u9EDD\u9EDE\u9EDF\u9EE0"+
+            "\u9EE1\u9EE2\u9EE3\uECC5\uBEE6\uCCBF\uC5DA\uBEBC"+
+            "\u9EE4\uECC6\u9EE5\uB1FE\u9EE6\u9EE7\u9EE8\uECC4"+
+            "\uD5A8\uB5E3\u9EE9\uECC2\uC1B6\uB3E3\u9EEA\u9EEB"+
+            "\uECC3\uCBB8\uC0C3\uCCFE\u9EEC\u9EED\u9EEE\u9EEF"+
+            "\uC1D2\u9EF0\uECC8\u9EF1\u9EF2\u9EF3\u9EF4\u9EF5"+
+            "\u9EF6\u9EF7\u9EF8\u9EF9\u9EFA\u9EFB\u9EFC\u9EFD"+
+            "\uBAE6\uC0D3\u9EFE\uD6F2\u9F40\u9F41\u9F42\uD1CC"+
+            "\u9F43\u9F44\u9F45\u9F46\uBFBE\u9F47\uB7B3\uC9D5"+
+            "\uECC7\uBBE2\u9F48\uCCCC\uBDFD\uC8C8\u9F49\uCFA9"+
+            "\u9F4A\u9F4B\u9F4C\u9F4D\u9F4E\u9F4F\u9F50\uCDE9"+
+            "\u9F51\uC5EB\u9F52\u9F53\u9F54\uB7E9\u9F55\u9F56"+
+            "\u9F57\u9F58\u9F59\u9F5A\u9F5B\u9F5C\u9F5D\u9F5E"+
+            "\u9F5F\uD1C9\uBAB8\u9F60\u9F61\u9F62\u9F63\u9F64"+
+            "\uECC9\u9F65\u9F66\uECCA\u9F67\uBBC0\uECCB\u9F68"+
+            "\uECE2\uB1BA\uB7D9\u9F69\u9F6A\u9F6B\u9F6C\u9F6D"+
+            "\u9F6E\u9F6F\u9F70\u9F71\u9F72\u9F73\uBDB9\u9F74"+
+            "\u9F75\u9F76\u9F77\u9F78\u9F79\u9F7A\u9F7B\uECCC"+
+            "\uD1E6\uECCD\u9F7C\u9F7D\u9F7E\u9F80\uC8BB\u9F81"+
+            "\u9F82\u9F83\u9F84\u9F85\u9F86\u9F87\u9F88\u9F89"+
+            "\u9F8A\u9F8B\u9F8C\u9F8D\u9F8E\uECD1\u9F8F\u9F90"+
+            "\u9F91\u9F92\uECD3\u9F93\uBBCD\u9F94\uBCE5\u9F95"+
+            "\u9F96\u9F97\u9F98\u9F99\u9F9A\u9F9B\u9F9C\u9F9D"+
+            "\u9F9E\u9F9F\u9FA0\u9FA1\uECCF\u9FA2\uC9B7\u9FA3"+
+            "\u9FA4\u9FA5\u9FA6\u9FA7\uC3BA\u9FA8\uECE3\uD5D5"+
+            "\uECD0\u9FA9\u9FAA\u9FAB\u9FAC\u9FAD\uD6F3\u9FAE"+
+            "\u9FAF\u9FB0\uECD2\uECCE\u9FB1\u9FB2\u9FB3\u9FB4"+
+            "\uECD4\u9FB5\uECD5\u9FB6\u9FB7\uC9BF\u9FB8\u9FB9"+
+            "\u9FBA\u9FBB\u9FBC\u9FBD\uCFA8\u9FBE\u9FBF\u9FC0"+
+            "\u9FC1\u9FC2\uD0DC\u9FC3\u9FC4\u9FC5\u9FC6\uD1AC"+
+            "\u9FC7\u9FC8\u9FC9\u9FCA\uC8DB\u9FCB\u9FCC\u9FCD"+
+            "\uECD6\uCEF5\u9FCE\u9FCF\u9FD0\u9FD1\u9FD2\uCAEC"+
+            "\uECDA\u9FD3\u9FD4\u9FD5\u9FD6\u9FD7\u9FD8\u9FD9"+
+            "\uECD9\u9FDA\u9FDB\u9FDC\uB0BE\u9FDD\u9FDE\u9FDF"+
+            "\u9FE0\u9FE1\u9FE2\uECD7\u9FE3\uECD8\u9FE4\u9FE5"+
+            "\u9FE6\uECE4\u9FE7\u9FE8\u9FE9\u9FEA\u9FEB\u9FEC"+
+            "\u9FED\u9FEE\u9FEF\uC8BC\u9FF0\u9FF1\u9FF2\u9FF3"+
+            "\u9FF4\u9FF5\u9FF6\u9FF7\u9FF8\u9FF9\uC1C7\u9FFA"+
+            "\u9FFB\u9FFC\u9FFD\u9FFE\uECDC\uD1E0\uA040\uA041"+
+            "\uA042\uA043\uA044\uA045\uA046\uA047\uA048\uA049"+
+            "\uECDB\uA04A\uA04B\uA04C\uA04D\uD4EF\uA04E\uECDD"+
+            "\uA04F\uA050\uA051\uA052\uA053\uA054\uDBC6\uA055"+
+            "\uA056\uA057\uA058\uA059\uA05A\uA05B\uA05C\uA05D"+
+            "\uA05E\uECDE\uA05F\uA060\uA061\uA062\uA063\uA064"+
+            "\uA065\uA066\uA067\uA068\uA069\uA06A\uB1AC\uA06B"+
+            "\uA06C\uA06D\uA06E\uA06F\uA070\uA071\uA072\uA073"+
+            "\uA074\uA075\uA076\uA077\uA078\uA079\uA07A\uA07B"+
+            "\uA07C\uA07D\uA07E\uA080\uA081\uECDF\uA082\uA083"+
+            "\uA084\uA085\uA086\uA087\uA088\uA089\uA08A\uA08B"+
+            "\uECE0\uA08C\uD7A6\uA08D\uC5C0\uA08E\uA08F\uA090"+
+            "\uEBBC\uB0AE\uA091\uA092\uA093\uBEF4\uB8B8\uD2AF"+
+            "\uB0D6\uB5F9\uA094\uD8B3\uA095\uCBAC\uA096\uE3DD"+
+            "\uA097\uA098\uA099\uA09A\uA09B\uA09C\uA09D\uC6AC"+
+            "\uB0E6\uA09E\uA09F\uA0A0\uC5C6\uEBB9\uA0A1\uA0A2"+
+            "\uA0A3\uA0A4\uEBBA\uA0A5\uA0A6\uA0A7\uEBBB\uA0A8"+
+            "\uA0A9\uD1C0\uA0AA\uC5A3\uA0AB\uEAF2\uA0AC\uC4B2"+
+            "\uA0AD\uC4B5\uC0CE\uA0AE\uA0AF\uA0B0\uEAF3\uC4C1"+
+            "\uA0B1\uCEEF\uA0B2\uA0B3\uA0B4\uA0B5\uEAF0\uEAF4"+
+            "\uA0B6\uA0B7\uC9FC\uA0B8\uA0B9\uC7A3\uA0BA\uA0BB"+
+            "\uA0BC\uCCD8\uCEFE\uA0BD\uA0BE\uA0BF\uEAF5\uEAF6"+
+            "\uCFAC\uC0E7\uA0C0\uA0C1\uEAF7\uA0C2\uA0C3\uA0C4"+
+            "\uA0C5\uA0C6\uB6BF\uEAF8\uA0C7\uEAF9\uA0C8\uEAFA"+
+            "\uA0C9\uA0CA\uEAFB\uA0CB\uA0CC\uA0CD\uA0CE\uA0CF"+
+            "\uA0D0\uA0D1\uA0D2\uA0D3\uA0D4\uA0D5\uA0D6\uEAF1"+
+            "\uA0D7\uA0D8\uA0D9\uA0DA\uA0DB\uA0DC\uA0DD\uA0DE"+
+            "\uA0DF\uA0E0\uA0E1\uA0E2\uC8AE\uE1EB\uA0E3\uB7B8"+
+            "\uE1EC\uA0E4\uA0E5\uA0E6\uE1ED\uA0E7\uD7B4\uE1EE"+
+            "\uE1EF\uD3CC\uA0E8\uA0E9\uA0EA\uA0EB\uA0EC\uA0ED"+
+            "\uA0EE\uE1F1\uBFF1\uE1F0\uB5D2\uA0EF\uA0F0\uA0F1"+
+            "\uB1B7\uA0F2\uA0F3\uA0F4\uA0F5\uE1F3\uE1F2\uA0F6"+
+            "\uBAFC\uA0F7\uE1F4\uA0F8\uA0F9\uA0FA\uA0FB\uB9B7"+
+            "\uA0FC\uBED1\uA0FD\uA0FE\uAA40\uAA41\uC4FC\uAA42"+
+            "\uBADD\uBDC6\uAA43\uAA44\uAA45\uAA46\uAA47\uAA48"+
+            "\uE1F5\uE1F7\uAA49\uAA4A\uB6C0\uCFC1\uCAA8\uE1F6"+
+            "\uD5F8\uD3FC\uE1F8\uE1FC\uE1F9\uAA4B\uAA4C\uE1FA"+
+            "\uC0EA\uAA4D\uE1FE\uE2A1\uC0C7\uAA4E\uAA4F\uAA50"+
+            "\uAA51\uE1FB\uAA52\uE1FD\uAA53\uAA54\uAA55\uAA56"+
+            "\uAA57\uAA58\uE2A5\uAA59\uAA5A\uAA5B\uC1D4\uAA5C"+
+            "\uAA5D\uAA5E\uAA5F\uE2A3\uAA60\uE2A8\uB2FE\uE2A2"+
+            "\uAA61\uAA62\uAA63\uC3CD\uB2C2\uE2A7\uE2A6\uAA64"+
+            "\uAA65\uE2A4\uE2A9\uAA66\uAA67\uE2AB\uAA68\uAA69"+
+            "\uAA6A\uD0C9\uD6ED\uC3A8\uE2AC\uAA6B\uCFD7\uAA6C"+
+            "\uAA6D\uE2AE\uAA6E\uAA6F\uBAEF\uAA70\uAA71\uE9E0"+
+            "\uE2AD\uE2AA\uAA72\uAA73\uAA74\uAA75\uBBAB\uD4B3"+
+            "\uAA76\uAA77\uAA78\uAA79\uAA7A\uAA7B\uAA7C\uAA7D"+
+            "\uAA7E\uAA80\uAA81\uAA82\uAA83\uE2B0\uAA84\uAA85"+
+            "\uE2AF\uAA86\uE9E1\uAA87\uAA88\uAA89\uAA8A\uE2B1"+
+            "\uAA8B\uAA8C\uAA8D\uAA8E\uAA8F\uAA90\uAA91\uAA92"+
+            "\uE2B2\uAA93\uAA94\uAA95\uAA96\uAA97\uAA98\uAA99"+
+            "\uAA9A\uAA9B\uAA9C\uAA9D\uE2B3\uCCA1\uAA9E\uE2B4"+
+            "\uAA9F\uAAA0\uAB40\uAB41\uAB42\uAB43\uAB44\uAB45"+
+            "\uAB46\uAB47\uAB48\uAB49\uAB4A\uAB4B\uE2B5\uAB4C"+
+            "\uAB4D\uAB4E\uAB4F\uAB50\uD0FE\uAB51\uAB52\uC2CA"+
+            "\uAB53\uD3F1\uAB54\uCDF5\uAB55\uAB56\uE7E0\uAB57"+
+            "\uAB58\uE7E1\uAB59\uAB5A\uAB5B\uAB5C\uBEC1\uAB5D"+
+            "\uAB5E\uAB5F\uAB60\uC2EA\uAB61\uAB62\uAB63\uE7E4"+
+            "\uAB64\uAB65\uE7E3\uAB66\uAB67\uAB68\uAB69\uAB6A"+
+            "\uAB6B\uCDE6\uAB6C\uC3B5\uAB6D\uAB6E\uE7E2\uBBB7"+
+            "\uCFD6\uAB6F\uC1E1\uE7E9\uAB70\uAB71\uAB72\uE7E8"+
+            "\uAB73\uAB74\uE7F4\uB2A3\uAB75\uAB76\uAB77\uAB78"+
+            "\uE7EA\uAB79\uE7E6\uAB7A\uAB7B\uAB7C\uAB7D\uAB7E"+
+            "\uE7EC\uE7EB\uC9BA\uAB80\uAB81\uD5E4\uAB82\uE7E5"+
+            "\uB7A9\uE7E7\uAB83\uAB84\uAB85\uAB86\uAB87\uAB88"+
+            "\uAB89\uE7EE\uAB8A\uAB8B\uAB8C\uAB8D\uE7F3\uAB8E"+
+            "\uD6E9\uAB8F\uAB90\uAB91\uAB92\uE7ED\uAB93\uE7F2"+
+            "\uAB94\uE7F1\uAB95\uAB96\uAB97\uB0E0\uAB98\uAB99"+
+            "\uAB9A\uAB9B\uE7F5\uAB9C\uAB9D\uAB9E\uAB9F\uABA0"+
+            "\uAC40\uAC41\uAC42\uAC43\uAC44\uAC45\uAC46\uAC47"+
+            "\uAC48\uAC49\uAC4A\uC7F2\uAC4B\uC0C5\uC0ED\uAC4C"+
+            "\uAC4D\uC1F0\uE7F0\uAC4E\uAC4F\uAC50\uAC51\uE7F6"+
+            "\uCBF6\uAC52\uAC53\uAC54\uAC55\uAC56\uAC57\uAC58"+
+            "\uAC59\uAC5A\uE8A2\uE8A1\uAC5B\uAC5C\uAC5D\uAC5E"+
+            "\uAC5F\uAC60\uD7C1\uAC61\uAC62\uE7FA\uE7F9\uAC63"+
+            "\uE7FB\uAC64\uE7F7\uAC65\uE7FE\uAC66\uE7FD\uAC67"+
+            "\uE7FC\uAC68\uAC69\uC1D5\uC7D9\uC5FD\uC5C3\uAC6A"+
+            "\uAC6B\uAC6C\uAC6D\uAC6E\uC7ED\uAC6F\uAC70\uAC71"+
+            "\uAC72\uE8A3\uAC73\uAC74\uAC75\uAC76\uAC77\uAC78"+
+            "\uAC79\uAC7A\uAC7B\uAC7C\uAC7D\uAC7E\uAC80\uAC81"+
+            "\uAC82\uAC83\uAC84\uAC85\uAC86\uE8A6\uAC87\uE8A5"+
+            "\uAC88\uE8A7\uBAF7\uE7F8\uE8A4\uAC89\uC8F0\uC9AA"+
+            "\uAC8A\uAC8B\uAC8C\uAC8D\uAC8E\uAC8F\uAC90\uAC91"+
+            "\uAC92\uAC93\uAC94\uAC95\uAC96\uE8A9\uAC97\uAC98"+
+            "\uB9E5\uAC99\uAC9A\uAC9B\uAC9C\uAC9D\uD1FE\uE8A8"+
+            "\uAC9E\uAC9F\uACA0\uAD40\uAD41\uAD42\uE8AA\uAD43"+
+            "\uE8AD\uE8AE\uAD44\uC1A7\uAD45\uAD46\uAD47\uE8AF"+
+            "\uAD48\uAD49\uAD4A\uE8B0\uAD4B\uAD4C\uE8AC\uAD4D"+
+            "\uE8B4\uAD4E\uAD4F\uAD50\uAD51\uAD52\uAD53\uAD54"+
+            "\uAD55\uAD56\uAD57\uAD58\uE8AB\uAD59\uE8B1\uAD5A"+
+            "\uAD5B\uAD5C\uAD5D\uAD5E\uAD5F\uAD60\uAD61\uE8B5"+
+            "\uE8B2\uE8B3\uAD62\uAD63\uAD64\uAD65\uAD66\uAD67"+
+            "\uAD68\uAD69\uAD6A\uAD6B\uAD6C\uAD6D\uAD6E\uAD6F"+
+            "\uAD70\uAD71\uE8B7\uAD72\uAD73\uAD74\uAD75\uAD76"+
+            "\uAD77\uAD78\uAD79\uAD7A\uAD7B\uAD7C\uAD7D\uAD7E"+
+            "\uAD80\uAD81\uAD82\uAD83\uAD84\uAD85\uAD86\uAD87"+
+            "\uAD88\uAD89\uE8B6\uAD8A\uAD8B\uAD8C\uAD8D\uAD8E"+
+            "\uAD8F\uAD90\uAD91\uAD92\uB9CF\uAD93\uF0AC\uAD94"+
+            "\uF0AD\uAD95\uC6B0\uB0EA\uC8BF\uAD96\uCDDF\uAD97"+
+            "\uAD98\uAD99\uAD9A\uAD9B\uAD9C\uAD9D\uCECD\uEAB1"+
+            "\uAD9E\uAD9F\uADA0\uAE40\uEAB2\uAE41\uC6BF\uB4C9"+
+            "\uAE42\uAE43\uAE44\uAE45\uAE46\uAE47\uAE48\uEAB3"+
+            "\uAE49\uAE4A\uAE4B\uAE4C\uD5E7\uAE4D\uAE4E\uAE4F"+
+            "\uAE50\uAE51\uAE52\uAE53\uAE54\uDDF9\uAE55\uEAB4"+
+            "\uAE56\uEAB5\uAE57\uEAB6\uAE58\uAE59\uAE5A\uAE5B"+
+            "\uB8CA\uDFB0\uC9F5\uAE5C\uCCF0\uAE5D\uAE5E\uC9FA"+
+            "\uAE5F\uAE60\uAE61\uAE62\uAE63\uC9FB\uAE64\uAE65"+
+            "\uD3C3\uCBA6\uAE66\uB8A6\uF0AE\uB1C2\uAE67\uE5B8"+
+            "\uCCEF\uD3C9\uBCD7\uC9EA\uAE68\uB5E7\uAE69\uC4D0"+
+            "\uB5E9\uAE6A\uEEAE\uBBAD\uAE6B\uAE6C\uE7DE\uAE6D"+
+            "\uEEAF\uAE6E\uAE6F\uAE70\uAE71\uB3A9\uAE72\uAE73"+
+            "\uEEB2\uAE74\uAE75\uEEB1\uBDE7\uAE76\uEEB0\uCEB7"+
+            "\uAE77\uAE78\uAE79\uAE7A\uC5CF\uAE7B\uAE7C\uAE7D"+
+            "\uAE7E\uC1F4\uDBCE\uEEB3\uD0F3\uAE80\uAE81\uAE82"+
+            "\uAE83\uAE84\uAE85\uAE86\uAE87\uC2D4\uC6E8\uAE88"+
+            "\uAE89\uAE8A\uB7AC\uAE8B\uAE8C\uAE8D\uAE8E\uAE8F"+
+            "\uAE90\uAE91\uEEB4\uAE92\uB3EB\uAE93\uAE94\uAE95"+
+            "\uBBFB\uEEB5\uAE96\uAE97\uAE98\uAE99\uAE9A\uE7DC"+
+            "\uAE9B\uAE9C\uAE9D\uEEB6\uAE9E\uAE9F\uBDAE\uAEA0"+
+            "\uAF40\uAF41\uAF42\uF1E2\uAF43\uAF44\uAF45\uCAE8"+
+            "\uAF46\uD2C9\uF0DA\uAF47\uF0DB\uAF48\uF0DC\uC1C6"+
+            "\uAF49\uB8ED\uBECE\uAF4A\uAF4B\uF0DE\uAF4C\uC5B1"+
+            "\uF0DD\uD1F1\uAF4D\uF0E0\uB0CC\uBDEA\uAF4E\uAF4F"+
+            "\uAF50\uAF51\uAF52\uD2DF\uF0DF\uAF53\uB4AF\uB7E8"+
+            "\uF0E6\uF0E5\uC6A3\uF0E1\uF0E2\uB4C3\uAF54\uAF55"+
+            "\uF0E3\uD5EE\uAF56\uAF57\uCCDB\uBED2\uBCB2\uAF58"+
+            "\uAF59\uAF5A\uF0E8\uF0E7\uF0E4\uB2A1\uAF5B\uD6A2"+
+            "\uD3B8\uBEB7\uC8AC\uAF5C\uAF5D\uF0EA\uAF5E\uAF5F"+
+            "\uAF60\uAF61\uD1F7\uAF62\uD6CC\uBADB\uF0E9\uAF63"+
+            "\uB6BB\uAF64\uAF65\uCDB4\uAF66\uAF67\uC6A6\uAF68"+
+            "\uAF69\uAF6A\uC1A1\uF0EB\uF0EE\uAF6B\uF0ED\uF0F0"+
+            "\uF0EC\uAF6C\uBBBE\uF0EF\uAF6D\uAF6E\uAF6F\uAF70"+
+            "\uCCB5\uF0F2\uAF71\uAF72\uB3D5\uAF73\uAF74\uAF75"+
+            "\uAF76\uB1D4\uAF77\uAF78\uF0F3\uAF79\uAF7A\uF0F4"+
+            "\uF0F6\uB4E1\uAF7B\uF0F1\uAF7C\uF0F7\uAF7D\uAF7E"+
+            "\uAF80\uAF81\uF0FA\uAF82\uF0F8\uAF83\uAF84\uAF85"+
+            "\uF0F5\uAF86\uAF87\uAF88\uAF89\uF0FD\uAF8A\uF0F9"+
+            "\uF0FC\uF0FE\uAF8B\uF1A1\uAF8C\uAF8D\uAF8E\uCEC1"+
+            "\uF1A4\uAF8F\uF1A3\uAF90\uC1F6\uF0FB\uCADD\uAF91"+
+            "\uAF92\uB4F1\uB1F1\uCCB1\uAF93\uF1A6\uAF94\uAF95"+
+            "\uF1A7\uAF96\uAF97\uF1AC\uD5CE\uF1A9\uAF98\uAF99"+
+            "\uC8B3\uAF9A\uAF9B\uAF9C\uF1A2\uAF9D\uF1AB\uF1A8"+
+            "\uF1A5\uAF9E\uAF9F\uF1AA\uAFA0\uB040\uB041\uB042"+
+            "\uB043\uB044\uB045\uB046\uB0A9\uF1AD\uB047\uB048"+
+            "\uB049\uB04A\uB04B\uB04C\uF1AF\uB04D\uF1B1\uB04E"+
+            "\uB04F\uB050\uB051\uB052\uF1B0\uB053\uF1AE\uB054"+
+            "\uB055\uB056\uB057\uD1A2\uB058\uB059\uB05A\uB05B"+
+            "\uB05C\uB05D\uB05E\uF1B2\uB05F\uB060\uB061\uF1B3"+
+            "\uB062\uB063\uB064\uB065\uB066\uB067\uB068\uB069"+
+            "\uB9EF\uB06A\uB06B\uB5C7\uB06C\uB0D7\uB0D9\uB06D"+
+            "\uB06E\uB06F\uD4ED\uB070\uB5C4\uB071\uBDD4\uBBCA"+
+            "\uF0A7\uB072\uB073\uB8DE\uB074\uB075\uF0A8\uB076"+
+            "\uB077\uB0A8\uB078\uF0A9\uB079\uB07A\uCDEE\uB07B"+
+            "\uB07C\uF0AA\uB07D\uB07E\uB080\uB081\uB082\uB083"+
+            "\uB084\uB085\uB086\uB087\uF0AB\uB088\uB089\uB08A"+
+            "\uB08B\uB08C\uB08D\uB08E\uB08F\uB090\uC6A4\uB091"+
+            "\uB092\uD6E5\uF1E4\uB093\uF1E5\uB094\uB095\uB096"+
+            "\uB097\uB098\uB099\uB09A\uB09B\uB09C\uB09D\uC3F3"+
+            "\uB09E\uB09F\uD3DB\uB0A0\uB140\uD6D1\uC5E8\uB141"+
+            "\uD3AF\uB142\uD2E6\uB143\uB144\uEEC1\uB0BB\uD5B5"+
+            "\uD1CE\uBCE0\uBAD0\uB145\uBFF8\uB146\uB8C7\uB5C1"+
+            "\uC5CC\uB147\uB148\uCAA2\uB149\uB14A\uB14B\uC3CB"+
+            "\uB14C\uB14D\uB14E\uB14F\uB150\uEEC2\uB151\uB152"+
+            "\uB153\uB154\uB155\uB156\uB157\uB158\uC4BF\uB6A2"+
+            "\uB159\uEDEC\uC3A4\uB15A\uD6B1\uB15B\uB15C\uB15D"+
+            "\uCFE0\uEDEF\uB15E\uB15F\uC5CE\uB160\uB6DC\uB161"+
+            "\uB162\uCAA1\uB163\uB164\uEDED\uB165\uB166\uEDF0"+
+            "\uEDF1\uC3BC\uB167\uBFB4\uB168\uEDEE\uB169\uB16A"+
+            "\uB16B\uB16C\uB16D\uB16E\uB16F\uB170\uB171\uB172"+
+            "\uB173\uEDF4\uEDF2\uB174\uB175\uB176\uB177\uD5E6"+
+            "\uC3DF\uB178\uEDF3\uB179\uB17A\uB17B\uEDF6\uB17C"+
+            "\uD5A3\uD1A3\uB17D\uB17E\uB180\uEDF5\uB181\uC3D0"+
+            "\uB182\uB183\uB184\uB185\uB186\uEDF7\uBFF4\uBEEC"+
+            "\uEDF8\uB187\uCCF7\uB188\uD1DB\uB189\uB18A\uB18B"+
+            "\uD7C5\uD5F6\uB18C\uEDFC\uB18D\uB18E\uB18F\uEDFB"+
+            "\uB190\uB191\uB192\uB193\uB194\uB195\uB196\uB197"+
+            "\uEDF9\uEDFA\uB198\uB199\uB19A\uB19B\uB19C\uB19D"+
+            "\uB19E\uB19F\uEDFD\uBEA6\uB1A0\uB240\uB241\uB242"+
+            "\uB243\uCBAF\uEEA1\uB6BD\uB244\uEEA2\uC4C0\uB245"+
+            "\uEDFE\uB246\uB247\uBDDE\uB2C7\uB248\uB249\uB24A"+
+            "\uB24B\uB24C\uB24D\uB24E\uB24F\uB250\uB251\uB252"+
+            "\uB253\uB6C3\uB254\uB255\uB256\uEEA5\uD8BA\uEEA3"+
+            "\uEEA6\uB257\uB258\uB259\uC3E9\uB3F2\uB25A\uB25B"+
+            "\uB25C\uB25D\uB25E\uB25F\uEEA7\uEEA4\uCFB9\uB260"+
+            "\uB261\uEEA8\uC2F7\uB262\uB263\uB264\uB265\uB266"+
+            "\uB267\uB268\uB269\uB26A\uB26B\uB26C\uB26D\uEEA9"+
+            "\uEEAA\uB26E\uDEAB\uB26F\uB270\uC6B3\uB271\uC7C6"+
+            "\uB272\uD6F5\uB5C9\uB273\uCBB2\uB274\uB275\uB276"+
+            "\uEEAB\uB277\uB278\uCDAB\uB279\uEEAC\uB27A\uB27B"+
+            "\uB27C\uB27D\uB27E\uD5B0\uB280\uEEAD\uB281\uF6C4"+
+            "\uB282\uB283\uB284\uB285\uB286\uB287\uB288\uB289"+
+            "\uB28A\uB28B\uB28C\uB28D\uB28E\uDBC7\uB28F\uB290"+
+            "\uB291\uB292\uB293\uB294\uB295\uB296\uB297\uB4A3"+
+            "\uB298\uB299\uB29A\uC3AC\uF1E6\uB29B\uB29C\uB29D"+
+            "\uB29E\uB29F\uCAB8\uD2D3\uB2A0\uD6AA\uB340\uEFF2"+
+            "\uB341\uBED8\uB342\uBDC3\uEFF3\uB6CC\uB0AB\uB343"+
+            "\uB344\uB345\uB346\uCAAF\uB347\uB348\uEDB6\uB349"+
+            "\uEDB7\uB34A\uB34B\uB34C\uB34D\uCEF9\uB7AF\uBFF3"+
+            "\uEDB8\uC2EB\uC9B0\uB34E\uB34F\uB350\uB351\uB352"+
+            "\uB353\uEDB9\uB354\uB355\uC6F6\uBFB3\uB356\uB357"+
+            "\uB358\uEDBC\uC5F8\uB359\uD1D0\uB35A\uD7A9\uEDBA"+
+            "\uEDBB\uB35B\uD1E2\uB35C\uEDBF\uEDC0\uB35D\uEDC4"+
+            "\uB35E\uB35F\uB360\uEDC8\uB361\uEDC6\uEDCE\uD5E8"+
+            "\uB362\uEDC9\uB363\uB364\uEDC7\uEDBE\uB365\uB366"+
+            "\uC5E9\uB367\uB368\uB369\uC6C6\uB36A\uB36B\uC9E9"+
+            "\uD4D2\uEDC1\uEDC2\uEDC3\uEDC5\uB36C\uC0F9\uB36D"+
+            "\uB4A1\uB36E\uB36F\uB370\uB371\uB9E8\uB372\uEDD0"+
+            "\uB373\uB374\uB375\uB376\uEDD1\uB377\uEDCA\uB378"+
+            "\uEDCF\uB379\uCEF8\uB37A\uB37B\uCBB6\uEDCC\uEDCD"+
+            "\uB37C\uB37D\uB37E\uB380\uB381\uCFF5\uB382\uB383"+
+            "\uB384\uB385\uB386\uB387\uB388\uB389\uB38A\uB38B"+
+            "\uB38C\uB38D\uEDD2\uC1F2\uD3B2\uEDCB\uC8B7\uB38E"+
+            "\uB38F\uB390\uB391\uB392\uB393\uB394\uB395\uBCEF"+
+            "\uB396\uB397\uB398\uB399\uC5F0\uB39A\uB39B\uB39C"+
+            "\uB39D\uB39E\uB39F\uB3A0\uB440\uB441\uB442\uEDD6"+
+            "\uB443\uB5EF\uB444\uB445\uC2B5\uB0AD\uCBE9\uB446"+
+            "\uB447\uB1AE\uB448\uEDD4\uB449\uB44A\uB44B\uCDEB"+
+            "\uB5E2\uB44C\uEDD5\uEDD3\uEDD7\uB44D\uB44E\uB5FA"+
+            "\uB44F\uEDD8\uB450\uEDD9\uB451\uEDDC\uB452\uB1CC"+
+            "\uB453\uB454\uB455\uB456\uB457\uB458\uB459\uB45A"+
+            "\uC5F6\uBCEE\uEDDA\uCCBC\uB2EA\uB45B\uB45C\uB45D"+
+            "\uB45E\uEDDB\uB45F\uB460\uB461\uB462\uC4EB\uB463"+
+            "\uB464\uB4C5\uB465\uB466\uB467\uB0F5\uB468\uB469"+
+            "\uB46A\uEDDF\uC0DA\uB4E8\uB46B\uB46C\uB46D\uB46E"+
+            "\uC5CD\uB46F\uB470\uB471\uEDDD\uBFC4\uB472\uB473"+
+            "\uB474\uEDDE\uB475\uB476\uB477\uB478\uB479\uB47A"+
+            "\uB47B\uB47C\uB47D\uB47E\uB480\uB481\uB482\uB483"+
+            "\uC4A5\uB484\uB485\uB486\uEDE0\uB487\uB488\uB489"+
+            "\uB48A\uB48B\uEDE1\uB48C\uEDE3\uB48D\uB48E\uC1D7"+
+            "\uB48F\uB490\uBBC7\uB491\uB492\uB493\uB494\uB495"+
+            "\uB496\uBDB8\uB497\uB498\uB499\uEDE2\uB49A\uB49B"+
+            "\uB49C\uB49D\uB49E\uB49F\uB4A0\uB540\uB541\uB542"+
+            "\uB543\uB544\uB545\uEDE4\uB546\uB547\uB548\uB549"+
+            "\uB54A\uB54B\uB54C\uB54D\uB54E\uB54F\uEDE6\uB550"+
+            "\uB551\uB552\uB553\uB554\uEDE5\uB555\uB556\uB557"+
+            "\uB558\uB559\uB55A\uB55B\uB55C\uB55D\uB55E\uB55F"+
+            "\uB560\uB561\uB562\uB563\uEDE7\uB564\uB565\uB566"+
+            "\uB567\uB568\uCABE\uECEA\uC0F1\uB569\uC9E7\uB56A"+
+            "\uECEB\uC6EE\uB56B\uB56C\uB56D\uB56E\uECEC\uB56F"+
+            "\uC6ED\uECED\uB570\uB571\uB572\uB573\uB574\uB575"+
+            "\uB576\uB577\uB578\uECF0\uB579\uB57A\uD7E6\uECF3"+
+            "\uB57B\uB57C\uECF1\uECEE\uECEF\uD7A3\uC9F1\uCBEE"+
+            "\uECF4\uB57D\uECF2\uB57E\uB580\uCFE9\uB581\uECF6"+
+            "\uC6B1\uB582\uB583\uB584\uB585\uBCC0\uB586\uECF5"+
+            "\uB587\uB588\uB589\uB58A\uB58B\uB58C\uB58D\uB5BB"+
+            "\uBBF6\uB58E\uECF7\uB58F\uB590\uB591\uB592\uB593"+
+            "\uD9F7\uBDFB\uB594\uB595\uC2BB\uECF8\uB596\uB597"+
+            "\uB598\uB599\uECF9\uB59A\uB59B\uB59C\uB59D\uB8A3"+
+            "\uB59E\uB59F\uB5A0\uB640\uB641\uB642\uB643\uB644"+
+            "\uB645\uB646\uECFA\uB647\uB648\uB649\uB64A\uB64B"+
+            "\uB64C\uB64D\uB64E\uB64F\uB650\uB651\uB652\uECFB"+
+            "\uB653\uB654\uB655\uB656\uB657\uB658\uB659\uB65A"+
+            "\uB65B\uB65C\uB65D\uECFC\uB65E\uB65F\uB660\uB661"+
+            "\uB662\uD3ED\uD8AE\uC0EB\uB663\uC7DD\uBACC\uB664"+
+            "\uD0E3\uCBBD\uB665\uCDBA\uB666\uB667\uB8D1\uB668"+
+            "\uB669\uB1FC\uB66A\uC7EF\uB66B\uD6D6\uB66C\uB66D"+
+            "\uB66E\uBFC6\uC3EB\uB66F\uB670\uEFF5\uB671\uB672"+
+            "\uC3D8\uB673\uB674\uB675\uB676\uB677\uB678\uD7E2"+
+            "\uB679\uB67A\uB67B\uEFF7\uB3D3\uB67C\uC7D8\uD1ED"+
+            "\uB67D\uD6C8\uB67E\uEFF8\uB680\uEFF6\uB681\uBBFD"+
+            "\uB3C6\uB682\uB683\uB684\uB685\uB686\uB687\uB688"+
+            "\uBDD5\uB689\uB68A\uD2C6\uB68B\uBBE0\uB68C\uB68D"+
+            "\uCFA1\uB68E\uEFFC\uEFFB\uB68F\uB690\uEFF9\uB691"+
+            "\uB692\uB693\uB694\uB3CC\uB695\uC9D4\uCBB0\uB696"+
+            "\uB697\uB698\uB699\uB69A\uEFFE\uB69B\uB69C\uB0DE"+
+            "\uB69D\uB69E\uD6C9\uB69F\uB6A0\uB740\uEFFD\uB741"+
+            "\uB3ED\uB742\uB743\uF6D5\uB744\uB745\uB746\uB747"+
+            "\uB748\uB749\uB74A\uB74B\uB74C\uB74D\uB74E\uB74F"+
+            "\uB750\uB751\uB752\uCEC8\uB753\uB754\uB755\uF0A2"+
+            "\uB756\uF0A1\uB757\uB5BE\uBCDA\uBBFC\uB758\uB8E5"+
+            "\uB759\uB75A\uB75B\uB75C\uB75D\uB75E\uC4C2\uB75F"+
+            "\uB760\uB761\uB762\uB763\uB764\uB765\uB766\uB767"+
+            "\uB768\uF0A3\uB769\uB76A\uB76B\uB76C\uB76D\uCBEB"+
+            "\uB76E\uB76F\uB770\uB771\uB772\uB773\uB774\uB775"+
+            "\uB776\uB777\uB778\uB779\uB77A\uB77B\uB77C\uB77D"+
+            "\uB77E\uB780\uB781\uB782\uB783\uB784\uB785\uB786"+
+            "\uF0A6\uB787\uB788\uB789\uD1A8\uB78A\uBEBF\uC7EE"+
+            "\uF1B6\uF1B7\uBFD5\uB78B\uB78C\uB78D\uB78E\uB4A9"+
+            "\uF1B8\uCDBB\uB78F\uC7D4\uD5AD\uB790\uF1B9\uB791"+
+            "\uF1BA\uB792\uB793\uB794\uB795\uC7CF\uB796\uB797"+
+            "\uB798\uD2A4\uD6CF\uB799\uB79A\uF1BB\uBDD1\uB4B0"+
+            "\uBEBD\uB79B\uB79C\uB79D\uB4DC\uCED1\uB79E\uBFDF"+
+            "\uF1BD\uB79F\uB7A0\uB840\uB841\uBFFA\uF1BC\uB842"+
+            "\uF1BF\uB843\uB844\uB845\uF1BE\uF1C0\uB846\uB847"+
+            "\uB848\uB849\uB84A\uF1C1\uB84B\uB84C\uB84D\uB84E"+
+            "\uB84F\uB850\uB851\uB852\uB853\uB854\uB855\uC1FE"+
+            "\uB856\uB857\uB858\uB859\uB85A\uB85B\uB85C\uB85D"+
+            "\uB85E\uB85F\uB860\uC1A2\uB861\uB862\uB863\uB864"+
+            "\uB865\uB866\uB867\uB868\uB869\uB86A\uCAFA\uB86B"+
+            "\uB86C\uD5BE\uB86D\uB86E\uB86F\uB870\uBEBA\uBEB9"+
+            "\uD5C2\uB871\uB872\uBFA2\uB873\uCDAF\uF1B5\uB874"+
+            "\uB875\uB876\uB877\uB878\uB879\uBDDF\uB87A\uB6CB"+
+            "\uB87B\uB87C\uB87D\uB87E\uB880\uB881\uB882\uB883"+
+            "\uB884\uD6F1\uF3C3\uB885\uB886\uF3C4\uB887\uB8CD";
+
+        private final static String innerIndex5=
+            "\uB888\uB889\uB88A\uF3C6\uF3C7\uB88B\uB0CA\uB88C"+
+            "\uF3C5\uB88D\uF3C9\uCBF1\uB88E\uB88F\uB890\uF3CB"+
+            "\uB891\uD0A6\uB892\uB893\uB1CA\uF3C8\uB894\uB895"+
+            "\uB896\uF3CF\uB897\uB5D1\uB898\uB899\uF3D7\uB89A"+
+            "\uF3D2\uB89B\uB89C\uB89D\uF3D4\uF3D3\uB7FB\uB89E"+
+            "\uB1BF\uB89F\uF3CE\uF3CA\uB5DA\uB8A0\uF3D0\uB940"+
+            "\uB941\uF3D1\uB942\uF3D5\uB943\uB944\uB945\uB946"+
+            "\uF3CD\uB947\uBCE3\uB948\uC1FD\uB949\uF3D6\uB94A"+
+            "\uB94B\uB94C\uB94D\uB94E\uB94F\uF3DA\uB950\uF3CC"+
+            "\uB951\uB5C8\uB952\uBDEE\uF3DC\uB953\uB954\uB7A4"+
+            "\uBFF0\uD6FE\uCDB2\uB955\uB4F0\uB956\uB2DF\uB957"+
+            "\uF3D8\uB958\uF3D9\uC9B8\uB959\uF3DD\uB95A\uB95B"+
+            "\uF3DE\uB95C\uF3E1\uB95D\uB95E\uB95F\uB960\uB961"+
+            "\uB962\uB963\uB964\uB965\uB966\uB967\uF3DF\uB968"+
+            "\uB969\uF3E3\uF3E2\uB96A\uB96B\uF3DB\uB96C\uBFEA"+
+            "\uB96D\uB3EF\uB96E\uF3E0\uB96F\uB970\uC7A9\uB971"+
+            "\uBCF2\uB972\uB973\uB974\uB975\uF3EB\uB976\uB977"+
+            "\uB978\uB979\uB97A\uB97B\uB97C\uB9BF\uB97D\uB97E"+
+            "\uF3E4\uB980\uB981\uB982\uB2AD\uBBFE\uB983\uCBE3"+
+            "\uB984\uB985\uB986\uB987\uF3ED\uF3E9\uB988\uB989"+
+            "\uB98A\uB9DC\uF3EE\uB98B\uB98C\uB98D\uF3E5\uF3E6"+
+            "\uF3EA\uC2E1\uF3EC\uF3EF\uF3E8\uBCFD\uB98E\uB98F"+
+            "\uB990\uCFE4\uB991\uB992\uF3F0\uB993\uB994\uB995"+
+            "\uF3E7\uB996\uB997\uB998\uB999\uB99A\uB99B\uB99C"+
+            "\uB99D\uF3F2\uB99E\uB99F\uB9A0\uBA40\uD7AD\uC6AA"+
+            "\uBA41\uBA42\uBA43\uBA44\uF3F3\uBA45\uBA46\uBA47"+
+            "\uBA48\uF3F1\uBA49\uC2A8\uBA4A\uBA4B\uBA4C\uBA4D"+
+            "\uBA4E\uB8DD\uF3F5\uBA4F\uBA50\uF3F4\uBA51\uBA52"+
+            "\uBA53\uB4DB\uBA54\uBA55\uBA56\uF3F6\uF3F7\uBA57"+
+            "\uBA58\uBA59\uF3F8\uBA5A\uBA5B\uBA5C\uC0BA\uBA5D"+
+            "\uBA5E\uC0E9\uBA5F\uBA60\uBA61\uBA62\uBA63\uC5F1"+
+            "\uBA64\uBA65\uBA66\uBA67\uF3FB\uBA68\uF3FA\uBA69"+
+            "\uBA6A\uBA6B\uBA6C\uBA6D\uBA6E\uBA6F\uBA70\uB4D8"+
+            "\uBA71\uBA72\uBA73\uF3FE\uF3F9\uBA74\uBA75\uF3FC"+
+            "\uBA76\uBA77\uBA78\uBA79\uBA7A\uBA7B\uF3FD\uBA7C"+
+            "\uBA7D\uBA7E\uBA80\uBA81\uBA82\uBA83\uBA84\uF4A1"+
+            "\uBA85\uBA86\uBA87\uBA88\uBA89\uBA8A\uF4A3\uBBC9"+
+            "\uBA8B\uBA8C\uF4A2\uBA8D\uBA8E\uBA8F\uBA90\uBA91"+
+            "\uBA92\uBA93\uBA94\uBA95\uBA96\uBA97\uBA98\uBA99"+
+            "\uF4A4\uBA9A\uBA9B\uBA9C\uBA9D\uBA9E\uBA9F\uB2BE"+
+            "\uF4A6\uF4A5\uBAA0\uBB40\uBB41\uBB42\uBB43\uBB44"+
+            "\uBB45\uBB46\uBB47\uBB48\uBB49\uBCAE\uBB4A\uBB4B"+
+            "\uBB4C\uBB4D\uBB4E\uBB4F\uBB50\uBB51\uBB52\uBB53"+
+            "\uBB54\uBB55\uBB56\uBB57\uBB58\uBB59\uBB5A\uBB5B"+
+            "\uBB5C\uBB5D\uBB5E\uBB5F\uBB60\uBB61\uBB62\uBB63"+
+            "\uBB64\uBB65\uBB66\uBB67\uBB68\uBB69\uBB6A\uBB6B"+
+            "\uBB6C\uBB6D\uBB6E\uC3D7\uD9E1\uBB6F\uBB70\uBB71"+
+            "\uBB72\uBB73\uBB74\uC0E0\uF4CC\uD7D1\uBB75\uBB76"+
+            "\uBB77\uBB78\uBB79\uBB7A\uBB7B\uBB7C\uBB7D\uBB7E"+
+            "\uBB80\uB7DB\uBB81\uBB82\uBB83\uBB84\uBB85\uBB86"+
+            "\uBB87\uF4CE\uC1A3\uBB88\uBB89\uC6C9\uBB8A\uB4D6"+
+            "\uD5B3\uBB8B\uBB8C\uBB8D\uF4D0\uF4CF\uF4D1\uCBDA"+
+            "\uBB8E\uBB8F\uF4D2\uBB90\uD4C1\uD6E0\uBB91\uBB92"+
+            "\uBB93\uBB94\uB7E0\uBB95\uBB96\uBB97\uC1B8\uBB98"+
+            "\uBB99\uC1BB\uF4D3\uBEAC\uBB9A\uBB9B\uBB9C\uBB9D"+
+            "\uBB9E\uB4E2\uBB9F\uBBA0\uF4D4\uF4D5\uBEAB\uBC40"+
+            "\uBC41\uF4D6\uBC42\uBC43\uBC44\uF4DB\uBC45\uF4D7"+
+            "\uF4DA\uBC46\uBAFD\uBC47\uF4D8\uF4D9\uBC48\uBC49"+
+            "\uBC4A\uBC4B\uBC4C\uBC4D\uBC4E\uB8E2\uCCC7\uF4DC"+
+            "\uBC4F\uB2DA\uBC50\uBC51\uC3D3\uBC52\uBC53\uD4E3"+
+            "\uBFB7\uBC54\uBC55\uBC56\uBC57\uBC58\uBC59\uBC5A"+
+            "\uF4DD\uBC5B\uBC5C\uBC5D\uBC5E\uBC5F\uBC60\uC5B4"+
+            "\uBC61\uBC62\uBC63\uBC64\uBC65\uBC66\uBC67\uBC68"+
+            "\uF4E9\uBC69\uBC6A\uCFB5\uBC6B\uBC6C\uBC6D\uBC6E"+
+            "\uBC6F\uBC70\uBC71\uBC72\uBC73\uBC74\uBC75\uBC76"+
+            "\uBC77\uBC78\uCEC9\uBC79\uBC7A\uBC7B\uBC7C\uBC7D"+
+            "\uBC7E\uBC80\uBC81\uBC82\uBC83\uBC84\uBC85\uBC86"+
+            "\uBC87\uBC88\uBC89\uBC8A\uBC8B\uBC8C\uBC8D\uBC8E"+
+            "\uCBD8\uBC8F\uCBF7\uBC90\uBC91\uBC92\uBC93\uBDF4"+
+            "\uBC94\uBC95\uBC96\uD7CF\uBC97\uBC98\uBC99\uC0DB"+
+            "\uBC9A\uBC9B\uBC9C\uBC9D\uBC9E\uBC9F\uBCA0\uBD40"+
+            "\uBD41\uBD42\uBD43\uBD44\uBD45\uBD46\uBD47\uBD48"+
+            "\uBD49\uBD4A\uBD4B\uBD4C\uBD4D\uBD4E\uBD4F\uBD50"+
+            "\uBD51\uBD52\uBD53\uBD54\uBD55\uBD56\uBD57\uBD58"+
+            "\uBD59\uBD5A\uBD5B\uBD5C\uBD5D\uBD5E\uBD5F\uBD60"+
+            "\uBD61\uBD62\uBD63\uBD64\uBD65\uBD66\uBD67\uBD68"+
+            "\uBD69\uBD6A\uBD6B\uBD6C\uBD6D\uBD6E\uBD6F\uBD70"+
+            "\uBD71\uBD72\uBD73\uBD74\uBD75\uBD76\uD0F5\uBD77"+
+            "\uBD78\uBD79\uBD7A\uBD7B\uBD7C\uBD7D\uBD7E\uF4EA"+
+            "\uBD80\uBD81\uBD82\uBD83\uBD84\uBD85\uBD86\uBD87"+
+            "\uBD88\uBD89\uBD8A\uBD8B\uBD8C\uBD8D\uBD8E\uBD8F"+
+            "\uBD90\uBD91\uBD92\uBD93\uBD94\uBD95\uBD96\uBD97"+
+            "\uBD98\uBD99\uBD9A\uBD9B\uBD9C\uBD9D\uBD9E\uBD9F"+
+            "\uBDA0\uBE40\uBE41\uBE42\uBE43\uBE44\uBE45\uBE46"+
+            "\uBE47\uBE48\uBE49\uBE4A\uBE4B\uBE4C\uF4EB\uBE4D"+
+            "\uBE4E\uBE4F\uBE50\uBE51\uBE52\uBE53\uF4EC\uBE54"+
+            "\uBE55\uBE56\uBE57\uBE58\uBE59\uBE5A\uBE5B\uBE5C"+
+            "\uBE5D\uBE5E\uBE5F\uBE60\uBE61\uBE62\uBE63\uBE64"+
+            "\uBE65\uBE66\uBE67\uBE68\uBE69\uBE6A\uBE6B\uBE6C"+
+            "\uBE6D\uBE6E\uBE6F\uBE70\uBE71\uBE72\uBE73\uBE74"+
+            "\uBE75\uBE76\uBE77\uBE78\uBE79\uBE7A\uBE7B\uBE7C"+
+            "\uBE7D\uBE7E\uBE80\uBE81\uBE82\uBE83\uBE84\uBE85"+
+            "\uBE86\uBE87\uBE88\uBE89\uBE8A\uBE8B\uBE8C\uBE8D"+
+            "\uBE8E\uBE8F\uBE90\uBE91\uBE92\uBE93\uBE94\uBE95"+
+            "\uBE96\uBE97\uBE98\uBE99\uBE9A\uBE9B\uBE9C\uBE9D"+
+            "\uBE9E\uBE9F\uBEA0\uBF40\uBF41\uBF42\uBF43\uBF44"+
+            "\uBF45\uBF46\uBF47\uBF48\uBF49\uBF4A\uBF4B\uBF4C"+
+            "\uBF4D\uBF4E\uBF4F\uBF50\uBF51\uBF52\uBF53\uBF54"+
+            "\uBF55\uBF56\uBF57\uBF58\uBF59\uBF5A\uBF5B\uBF5C"+
+            "\uBF5D\uBF5E\uBF5F\uBF60\uBF61\uBF62\uBF63\uBF64"+
+            "\uBF65\uBF66\uBF67\uBF68\uBF69\uBF6A\uBF6B\uBF6C"+
+            "\uBF6D\uBF6E\uBF6F\uBF70\uBF71\uBF72\uBF73\uBF74"+
+            "\uBF75\uBF76\uBF77\uBF78\uBF79\uBF7A\uBF7B\uBF7C"+
+            "\uBF7D\uBF7E\uBF80\uF7E3\uBF81\uBF82\uBF83\uBF84"+
+            "\uBF85\uB7B1\uBF86\uBF87\uBF88\uBF89\uBF8A\uF4ED"+
+            "\uBF8B\uBF8C\uBF8D\uBF8E\uBF8F\uBF90\uBF91\uBF92"+
+            "\uBF93\uBF94\uBF95\uBF96\uBF97\uBF98\uBF99\uBF9A"+
+            "\uBF9B\uBF9C\uBF9D\uBF9E\uBF9F\uBFA0\uC040\uC041"+
+            "\uC042\uC043\uC044\uC045\uC046\uC047\uC048\uC049"+
+            "\uC04A\uC04B\uC04C\uC04D\uC04E\uC04F\uC050\uC051"+
+            "\uC052\uC053\uC054\uC055\uC056\uC057\uC058\uC059"+
+            "\uC05A\uC05B\uC05C\uC05D\uC05E\uC05F\uC060\uC061"+
+            "\uC062\uC063\uD7EB\uC064\uC065\uC066\uC067\uC068"+
+            "\uC069\uC06A\uC06B\uC06C\uC06D\uC06E\uC06F\uC070"+
+            "\uC071\uC072\uC073\uC074\uC075\uC076\uC077\uC078"+
+            "\uC079\uC07A\uC07B\uF4EE\uC07C\uC07D\uC07E\uE6F9"+
+            "\uBEC0\uE6FA\uBAEC\uE6FB\uCFCB\uE6FC\uD4BC\uBCB6"+
+            "\uE6FD\uE6FE\uBCCD\uC8D2\uCEB3\uE7A1\uC080\uB4BF"+
+            "\uE7A2\uC9B4\uB8D9\uC4C9\uC081\uD7DD\uC2DA\uB7D7"+
+            "\uD6BD\uCEC6\uB7C4\uC082\uC083\uC5A6\uE7A3\uCFDF"+
+            "\uE7A4\uE7A5\uE7A6\uC1B7\uD7E9\uC9F0\uCFB8\uD6AF"+
+            "\uD6D5\uE7A7\uB0ED\uE7A8\uE7A9\uC9DC\uD2EF\uBEAD"+
+            "\uE7AA\uB0F3\uC8DE\uBDE1\uE7AB\uC8C6\uC084\uE7AC"+
+            "\uBBE6\uB8F8\uD1A4\uE7AD\uC2E7\uBEF8\uBDCA\uCDB3"+
+            "\uE7AE\uE7AF\uBEEE\uD0E5\uC085\uCBE7\uCCD0\uBCCC"+
+            "\uE7B0\uBCA8\uD0F7\uE7B1\uC086\uD0F8\uE7B2\uE7B3"+
+            "\uB4C2\uE7B4\uE7B5\uC9FE\uCEAC\uC3E0\uE7B7\uB1C1"+
+            "\uB3F1\uC087\uE7B8\uE7B9\uD7DB\uD5C0\uE7BA\uC2CC"+
+            "\uD7BA\uE7BB\uE7BC\uE7BD\uBCEA\uC3E5\uC0C2\uE7BE"+
+            "\uE7BF\uBCA9\uC088\uE7C0\uE7C1\uE7B6\uB6D0\uE7C2"+
+            "\uC089\uE7C3\uE7C4\uBBBA\uB5DE\uC2C6\uB1E0\uE7C5"+
+            "\uD4B5\uE7C6\uB8BF\uE7C8\uE7C7\uB7EC\uC08A\uE7C9"+
+            "\uB2F8\uE7CA\uE7CB\uE7CC\uE7CD\uE7CE\uE7CF\uE7D0"+
+            "\uD3A7\uCBF5\uE7D1\uE7D2\uE7D3\uE7D4\uC9C9\uE7D5"+
+            "\uE7D6\uE7D7\uE7D8\uE7D9\uBDC9\uE7DA\uF3BE\uC08B"+
+            "\uB8D7\uC08C\uC8B1\uC08D\uC08E\uC08F\uC090\uC091"+
+            "\uC092\uC093\uF3BF\uC094\uF3C0\uF3C1\uC095\uC096"+
+            "\uC097\uC098\uC099\uC09A\uC09B\uC09C\uC09D\uC09E"+
+            "\uB9DE\uCDF8\uC09F\uC0A0\uD8E8\uBAB1\uC140\uC2DE"+
+            "\uEEB7\uC141\uB7A3\uC142\uC143\uC144\uC145\uEEB9"+
+            "\uC146\uEEB8\uB0D5\uC147\uC148\uC149\uC14A\uC14B"+
+            "\uEEBB\uD5D6\uD7EF\uC14C\uC14D\uC14E\uD6C3\uC14F"+
+            "\uC150\uEEBD\uCAF0\uC151\uEEBC\uC152\uC153\uC154"+
+            "\uC155\uEEBE\uC156\uC157\uC158\uC159\uEEC0\uC15A"+
+            "\uC15B\uEEBF\uC15C\uC15D\uC15E\uC15F\uC160\uC161"+
+            "\uC162\uC163\uD1F2\uC164\uC7BC\uC165\uC3C0\uC166"+
+            "\uC167\uC168\uC169\uC16A\uB8E1\uC16B\uC16C\uC16D"+
+            "\uC16E\uC16F\uC1E7\uC170\uC171\uF4C6\uD0DF\uF4C7"+
+            "\uC172\uCFDB\uC173\uC174\uC8BA\uC175\uC176\uF4C8"+
+            "\uC177\uC178\uC179\uC17A\uC17B\uC17C\uC17D\uF4C9"+
+            "\uF4CA\uC17E\uF4CB\uC180\uC181\uC182\uC183\uC184"+
+            "\uD9FA\uB8FE\uC185\uC186\uE5F1\uD3F0\uC187\uF4E0"+
+            "\uC188\uCECC\uC189\uC18A\uC18B\uB3E1\uC18C\uC18D"+
+            "\uC18E\uC18F\uF1B4\uC190\uD2EE\uC191\uF4E1\uC192"+
+            "\uC193\uC194\uC195\uC196\uCFE8\uF4E2\uC197\uC198"+
+            "\uC7CC\uC199\uC19A\uC19B\uC19C\uC19D\uC19E\uB5D4"+
+            "\uB4E4\uF4E4\uC19F\uC1A0\uC240\uF4E3\uF4E5\uC241"+
+            "\uC242\uF4E6\uC243\uC244\uC245\uC246\uF4E7\uC247"+
+            "\uBAB2\uB0BF\uC248\uF4E8\uC249\uC24A\uC24B\uC24C"+
+            "\uC24D\uC24E\uC24F\uB7AD\uD2ED\uC250\uC251\uC252"+
+            "\uD2AB\uC0CF\uC253\uBFBC\uEBA3\uD5DF\uEAC8\uC254"+
+            "\uC255\uC256\uC257\uF1F3\uB6F8\uCBA3\uC258\uC259"+
+            "\uC4CD\uC25A\uF1E7\uC25B\uF1E8\uB8FB\uF1E9\uBAC4"+
+            "\uD4C5\uB0D2\uC25C\uC25D\uF1EA\uC25E\uC25F\uC260"+
+            "\uF1EB\uC261\uF1EC\uC262\uC263\uF1ED\uF1EE\uF1EF"+
+            "\uF1F1\uF1F0\uC5D5\uC264\uC265\uC266\uC267\uC268"+
+            "\uC269\uF1F2\uC26A\uB6FA\uC26B\uF1F4\uD2AE\uDEC7"+
+            "\uCBCA\uC26C\uC26D\uB3DC\uC26E\uB5A2\uC26F\uB9A2"+
+            "\uC270\uC271\uC4F4\uF1F5\uC272\uC273\uF1F6\uC274"+
+            "\uC275\uC276\uC1C4\uC1FB\uD6B0\uF1F7\uC277\uC278"+
+            "\uC279\uC27A\uF1F8\uC27B\uC1AA\uC27C\uC27D\uC27E"+
+            "\uC6B8\uC280\uBEDB\uC281\uC282\uC283\uC284\uC285"+
+            "\uC286\uC287\uC288\uC289\uC28A\uC28B\uC28C\uC28D"+
+            "\uC28E\uF1F9\uB4CF\uC28F\uC290\uC291\uC292\uC293"+
+            "\uC294\uF1FA\uC295\uC296\uC297\uC298\uC299\uC29A"+
+            "\uC29B\uC29C\uC29D\uC29E\uC29F\uC2A0\uC340\uEDB2"+
+            "\uEDB1\uC341\uC342\uCBE0\uD2DE\uC343\uCBC1\uD5D8"+
+            "\uC344\uC8E2\uC345\uC0DF\uBCA1\uC346\uC347\uC348"+
+            "\uC349\uC34A\uC34B\uEBC1\uC34C\uC34D\uD0A4\uC34E"+
+            "\uD6E2\uC34F\uB6C7\uB8D8\uEBC0\uB8CE\uC350\uEBBF"+
+            "\uB3A6\uB9C9\uD6AB\uC351\uB7F4\uB7CA\uC352\uC353"+
+            "\uC354\uBCE7\uB7BE\uEBC6\uC355\uEBC7\uB0B9\uBFCF"+
+            "\uC356\uEBC5\uD3FD\uC357\uEBC8\uC358\uC359\uEBC9"+
+            "\uC35A\uC35B\uB7CE\uC35C\uEBC2\uEBC4\uC9F6\uD6D7"+
+            "\uD5CD\uD0B2\uEBCF\uCEB8\uEBD0\uC35D\uB5A8\uC35E"+
+            "\uC35F\uC360\uC361\uC362\uB1B3\uEBD2\uCCA5\uC363"+
+            "\uC364\uC365\uC366\uC367\uC368\uC369\uC5D6\uEBD3"+
+            "\uC36A\uEBD1\uC5DF\uEBCE\uCAA4\uEBD5\uB0FB\uC36B"+
+            "\uC36C\uBAFA\uC36D\uC36E\uD8B7\uF1E3\uC36F\uEBCA"+
+            "\uEBCB\uEBCC\uEBCD\uEBD6\uE6C0\uEBD9\uC370\uBFE8"+
+            "\uD2C8\uEBD7\uEBDC\uB8EC\uEBD8\uC371\uBDBA\uC372"+
+            "\uD0D8\uC373\uB0B7\uC374\uEBDD\uC4DC\uC375\uC376"+
+            "\uC377\uC378\uD6AC\uC379\uC37A\uC37B\uB4E0\uC37C"+
+            "\uC37D\uC2F6\uBCB9\uC37E\uC380\uEBDA\uEBDB\uD4E0"+
+            "\uC6EA\uC4D4\uEBDF\uC5A7\uD9F5\uC381\uB2B1\uC382"+
+            "\uEBE4\uC383\uBDC5\uC384\uC385\uC386\uEBE2\uC387"+
+            "\uC388\uC389\uC38A\uC38B\uC38C\uC38D\uC38E\uC38F"+
+            "\uC390\uC391\uC392\uC393\uEBE3\uC394\uC395\uB8AC"+
+            "\uC396\uCDD1\uEBE5\uC397\uC398\uC399\uEBE1\uC39A"+
+            "\uC1B3\uC39B\uC39C\uC39D\uC39E\uC39F\uC6A2\uC3A0"+
+            "\uC440\uC441\uC442\uC443\uC444\uC445\uCCF3\uC446"+
+            "\uEBE6\uC447\uC0B0\uD2B8\uEBE7\uC448\uC449\uC44A"+
+            "\uB8AF\uB8AD\uC44B\uEBE8\uC7BB\uCDF3\uC44C\uC44D"+
+            "\uC44E\uEBEA\uEBEB\uC44F\uC450\uC451\uC452\uC453"+
+            "\uEBED\uC454\uC455\uC456\uC457\uD0C8\uC458\uEBF2"+
+            "\uC459\uEBEE\uC45A\uC45B\uC45C\uEBF1\uC8F9\uC45D"+
+            "\uD1FC\uEBEC\uC45E\uC45F\uEBE9\uC460\uC461\uC462"+
+            "\uC463\uB8B9\uCFD9\uC4E5\uEBEF\uEBF0\uCCDA\uCDC8"+
+            "\uB0F2\uC464\uEBF6\uC465\uC466\uC467\uC468\uC469"+
+            "\uEBF5\uC46A\uB2B2\uC46B\uC46C\uC46D\uC46E\uB8E0"+
+            "\uC46F\uEBF7\uC470\uC471\uC472\uC473\uC474\uC475"+
+            "\uB1EC\uC476\uC477\uCCC5\uC4A4\uCFA5\uC478\uC479"+
+            "\uC47A\uC47B\uC47C\uEBF9\uC47D\uC47E\uECA2\uC480"+
+            "\uC5F2\uC481\uEBFA\uC482\uC483\uC484\uC485\uC486"+
+            "\uC487\uC488\uC489\uC9C5\uC48A\uC48B\uC48C\uC48D"+
+            "\uC48E\uC48F\uE2DF\uEBFE\uC490\uC491\uC492\uC493"+
+            "\uCDCE\uECA1\uB1DB\uD3B7\uC494\uC495\uD2DC\uC496"+
+            "\uC497\uC498\uEBFD\uC499\uEBFB\uC49A\uC49B\uC49C"+
+            "\uC49D\uC49E\uC49F\uC4A0\uC540\uC541\uC542\uC543"+
+            "\uC544\uC545\uC546\uC547\uC548\uC549\uC54A\uC54B"+
+            "\uC54C\uC54D\uC54E\uB3BC\uC54F\uC550\uC551\uEAB0"+
+            "\uC552\uC553\uD7D4\uC554\uF4AB\uB3F4\uC555\uC556"+
+            "\uC557\uC558\uC559\uD6C1\uD6C2\uC55A\uC55B\uC55C"+
+            "\uC55D\uC55E\uC55F\uD5E9\uBECA\uC560\uF4A7\uC561"+
+            "\uD2A8\uF4A8\uF4A9\uC562\uF4AA\uBECB\uD3DF\uC563"+
+            "\uC564\uC565\uC566\uC567\uC9E0\uC9E1\uC568\uC569"+
+            "\uF3C2\uC56A\uCAE6\uC56B\uCCF2\uC56C\uC56D\uC56E"+
+            "\uC56F\uC570\uC571\uE2B6\uCBB4\uC572\uCEE8\uD6DB"+
+            "\uC573\uF4AD\uF4AE\uF4AF\uC574\uC575\uC576\uC577"+
+            "\uF4B2\uC578\uBABD\uF4B3\uB0E3\uF4B0\uC579\uF4B1"+
+            "\uBDA2\uB2D5\uC57A\uF4B6\uF4B7\uB6E6\uB2B0\uCFCF"+
+            "\uF4B4\uB4AC\uC57B\uF4B5\uC57C\uC57D\uF4B8\uC57E"+
+            "\uC580\uC581\uC582\uC583\uF4B9\uC584\uC585\uCDA7"+
+            "\uC586\uF4BA\uC587\uF4BB\uC588\uC589\uC58A\uF4BC"+
+            "\uC58B\uC58C\uC58D\uC58E\uC58F\uC590\uC591\uC592"+
+            "\uCBD2\uC593\uF4BD\uC594\uC595\uC596\uC597\uF4BE"+
+            "\uC598\uC599\uC59A\uC59B\uC59C\uC59D\uC59E\uC59F"+
+            "\uF4BF\uC5A0\uC640\uC641\uC642\uC643\uF4DE\uC1BC"+
+            "\uBCE8\uC644\uC9AB\uD1DE\uE5F5\uC645\uC646\uC647"+
+            "\uC648\uDCB3\uD2D5\uC649\uC64A\uDCB4\uB0AC\uDCB5"+
+            "\uC64B\uC64C\uBDDA\uC64D\uDCB9\uC64E\uC64F\uC650"+
+            "\uD8C2\uC651\uDCB7\uD3F3\uC652\uC9D6\uDCBA\uDCB6"+
+            "\uC653\uDCBB\uC3A2\uC654\uC655\uC656\uC657\uDCBC"+
+            "\uDCC5\uDCBD\uC658\uC659\uCEDF\uD6A5\uC65A\uDCCF"+
+            "\uC65B\uDCCD\uC65C\uC65D\uDCD2\uBDE6\uC2AB\uC65E"+
+            "\uDCB8\uDCCB\uDCCE\uDCBE\uB7D2\uB0C5\uDCC7\uD0BE"+
+            "\uDCC1\uBBA8\uC65F\uB7BC\uDCCC\uC660\uC661\uDCC6"+
+            "\uDCBF\uC7DB\uC662\uC663\uC664\uD1BF\uDCC0\uC665"+
+            "\uC666\uDCCA\uC667\uC668\uDCD0\uC669\uC66A\uCEAD"+
+            "\uDCC2\uC66B\uDCC3\uDCC8\uDCC9\uB2D4\uDCD1\uCBD5"+
+            "\uC66C\uD4B7\uDCDB\uDCDF\uCCA6\uDCE6\uC66D\uC3E7"+
+            "\uDCDC\uC66E\uC66F\uBFC1\uDCD9\uC670\uB0FA\uB9B6"+
+            "\uDCE5\uDCD3\uC671\uDCC4\uDCD6\uC8F4\uBFE0\uC672"+
+            "\uC673\uC674\uC675\uC9BB\uC676\uC677\uC678\uB1BD"+
+            "\uC679\uD3A2\uC67A\uC67B\uDCDA\uC67C\uC67D\uDCD5"+
+            "\uC67E\uC6BB\uC680\uDCDE\uC681\uC682\uC683\uC684"+
+            "\uC685\uD7C2\uC3AF\uB7B6\uC7D1\uC3A9\uDCE2\uDCD8"+
+            "\uDCEB\uDCD4\uC686\uC687\uDCDD\uC688\uBEA5\uDCD7"+
+            "\uC689\uDCE0\uC68A\uC68B\uDCE3\uDCE4\uC68C\uDCF8"+
+            "\uC68D\uC68E\uDCE1\uDDA2\uDCE7\uC68F\uC690\uC691"+
+            "\uC692\uC693\uC694\uC695\uC696\uC697\uC698\uBCEB"+
+            "\uB4C4\uC699\uC69A\uC3A3\uB2E7\uDCFA\uC69B\uDCF2"+
+            "\uC69C\uDCEF\uC69D\uDCFC\uDCEE\uD2F0\uB2E8\uC69E"+
+            "\uC8D7\uC8E3\uDCFB\uC69F\uDCED\uC6A0\uC740\uC741"+
+            "\uDCF7\uC742\uC743\uDCF5\uC744\uC745\uBEA3\uDCF4"+
+            "\uC746\uB2DD\uC747\uC748\uC749\uC74A\uC74B\uDCF3"+
+            "\uBCF6\uDCE8\uBBC4\uC74C\uC0F3\uC74D\uC74E\uC74F"+
+            "\uC750\uC751\uBCD4\uDCE9\uDCEA\uC752\uDCF1\uDCF6"+
+            "\uDCF9\uB5B4\uC753\uC8D9\uBBE7\uDCFE\uDCFD\uD3AB"+
+            "\uDDA1\uDDA3\uDDA5\uD2F1\uDDA4\uDDA6\uDDA7\uD2A9"+
+            "\uC754\uC755\uC756\uC757\uC758\uC759\uC75A\uBAC9"+
+            "\uDDA9\uC75B\uC75C\uDDB6\uDDB1\uDDB4\uC75D\uC75E"+
+            "\uC75F\uC760\uC761\uC762\uC763\uDDB0\uC6CE\uC764"+
+            "\uC765\uC0F2\uC766\uC767\uC768\uC769\uC9AF\uC76A"+
+            "\uC76B\uC76C\uDCEC\uDDAE\uC76D\uC76E\uC76F\uC770"+
+            "\uDDB7\uC771\uC772\uDCF0\uDDAF\uC773\uDDB8\uC774"+
+            "\uDDAC\uC775\uC776\uC777\uC778\uC779\uC77A\uC77B"+
+            "\uDDB9\uDDB3\uDDAD\uC4AA\uC77C\uC77D\uC77E\uC780"+
+            "\uDDA8\uC0B3\uC1AB\uDDAA\uDDAB\uC781\uDDB2\uBBF1"+
+            "\uDDB5\uD3A8\uDDBA\uC782\uDDBB\uC3A7\uC783\uC784"+
+            "\uDDD2\uDDBC\uC785\uC786\uC787\uDDD1\uC788\uB9BD"+
+            "\uC789\uC78A\uBED5\uC78B\uBEFA\uC78C\uC78D\uBACA"+
+            "\uC78E\uC78F\uC790\uC791\uDDCA\uC792\uDDC5\uC793"+
+            "\uDDBF\uC794\uC795\uC796\uB2CB\uDDC3\uC797\uDDCB"+
+            "\uB2A4\uDDD5\uC798\uC799\uC79A\uDDBE\uC79B\uC79C"+
+            "\uC79D\uC6D0\uDDD0\uC79E\uC79F\uC7A0\uC840\uC841"+
+            "\uDDD4\uC1E2\uB7C6\uC842\uC843\uC844\uC845\uC846"+
+            "\uDDCE\uDDCF\uC847\uC848\uC849\uDDC4\uC84A\uC84B"+
+            "\uC84C\uDDBD\uC84D\uDDCD\uCCD1\uC84E\uDDC9\uC84F"+
+            "\uC850\uC851\uC852\uDDC2\uC3C8\uC6BC\uCEAE\uDDCC"+
+            "\uC853\uDDC8\uC854\uC855\uC856\uC857\uC858\uC859"+
+            "\uDDC1\uC85A\uC85B\uC85C\uDDC6\uC2DC\uC85D\uC85E"+
+            "\uC85F\uC860\uC861\uC862\uD3A9\uD3AA\uDDD3\uCFF4"+
+            "\uC8F8\uC863\uC864\uC865\uC866\uC867\uC868\uC869"+
+            "\uC86A\uDDE6\uC86B\uC86C\uC86D\uC86E\uC86F\uC870"+
+            "\uDDC7\uC871\uC872\uC873\uDDE0\uC2E4\uC874\uC875"+
+            "\uC876\uC877\uC878\uC879\uC87A\uC87B\uDDE1\uC87C"+
+            "\uC87D\uC87E\uC880\uC881\uC882\uC883\uC884\uC885"+
+            "\uC886\uDDD7\uC887\uC888\uC889\uC88A\uC88B\uD6F8"+
+            "\uC88C\uDDD9\uDDD8\uB8F0\uDDD6\uC88D\uC88E\uC88F"+
+            "\uC890\uC6CF\uC891\uB6AD\uC892\uC893\uC894\uC895"+
+            "\uC896\uDDE2\uC897\uBAF9\uD4E1\uDDE7\uC898\uC899"+
+            "\uC89A\uB4D0\uC89B\uDDDA\uC89C\uBFFB\uDDE3\uC89D"+
+            "\uDDDF\uC89E\uDDDD\uC89F\uC8A0\uC940\uC941\uC942"+
+            "\uC943\uC944\uB5D9\uC945\uC946\uC947\uC948\uDDDB"+
+            "\uDDDC\uDDDE\uC949\uBDAF\uDDE4\uC94A\uDDE5\uC94B"+
+            "\uC94C\uC94D\uC94E\uC94F\uC950\uC951\uC952\uDDF5"+
+            "\uC953\uC3C9\uC954\uC955\uCBE2\uC956\uC957\uC958"+
+            "\uC959\uDDF2\uC95A\uC95B\uC95C\uC95D\uC95E\uC95F"+
+            "\uC960\uC961\uC962\uC963\uC964\uC965\uC966\uD8E1"+
+            "\uC967\uC968\uC6D1\uC969\uDDF4\uC96A\uC96B\uC96C"+
+            "\uD5F4\uDDF3\uDDF0\uC96D\uC96E\uDDEC\uC96F\uDDEF"+
+            "\uC970\uDDE8\uC971\uC972\uD0EE\uC973\uC974\uC975"+
+            "\uC976\uC8D8\uDDEE\uC977\uC978\uDDE9\uC979\uC97A"+
+            "\uDDEA\uCBF2\uC97B\uDDED\uC97C\uC97D\uB1CD\uC97E"+
+            "\uC980\uC981\uC982\uC983\uC984\uC0B6\uC985\uBCBB"+
+            "\uDDF1\uC986\uC987\uDDF7\uC988\uDDF6\uDDEB\uC989"+
+            "\uC98A\uC98B\uC98C\uC98D\uC5EE\uC98E\uC98F\uC990"+
+            "\uDDFB\uC991\uC992\uC993\uC994\uC995\uC996\uC997"+
+            "\uC998\uC999\uC99A\uC99B\uDEA4\uC99C\uC99D\uDEA3"+
+            "\uC99E\uC99F\uC9A0\uCA40\uCA41\uCA42\uCA43\uCA44"+
+            "\uCA45\uCA46\uCA47\uCA48\uDDF8\uCA49\uCA4A\uCA4B"+
+            "\uCA4C\uC3EF\uCA4D\uC2FB\uCA4E\uCA4F\uCA50\uD5E1"+
+            "\uCA51\uCA52\uCEB5\uCA53\uCA54\uCA55\uCA56\uDDFD"+
+            "\uCA57\uB2CC\uCA58\uCA59\uCA5A\uCA5B\uCA5C\uCA5D"+
+            "\uCA5E\uCA5F\uCA60\uC4E8\uCADF\uCA61\uCA62\uCA63"+
+            "\uCA64\uCA65\uCA66\uCA67\uCA68\uCA69\uCA6A\uC7BE"+
+            "\uDDFA\uDDFC\uDDFE\uDEA2\uB0AA\uB1CE\uCA6B\uCA6C"+
+            "\uCA6D\uCA6E\uCA6F\uDEAC\uCA70\uCA71\uCA72\uCA73"+
+            "\uDEA6\uBDB6\uC8EF\uCA74\uCA75\uCA76\uCA77\uCA78"+
+            "\uCA79\uCA7A\uCA7B\uCA7C\uCA7D\uCA7E\uDEA1\uCA80"+
+            "\uCA81\uDEA5\uCA82\uCA83\uCA84\uCA85\uDEA9\uCA86"+
+            "\uCA87\uCA88\uCA89\uCA8A\uDEA8\uCA8B\uCA8C\uCA8D"+
+            "\uDEA7\uCA8E\uCA8F\uCA90\uCA91\uCA92\uCA93\uCA94"+
+            "\uCA95\uCA96\uDEAD\uCA97\uD4CC\uCA98\uCA99\uCA9A"+
+            "\uCA9B\uDEB3\uDEAA\uDEAE\uCA9C\uCA9D\uC0D9\uCA9E"+
+            "\uCA9F\uCAA0\uCB40\uCB41\uB1A1\uDEB6\uCB42\uDEB1"+
+            "\uCB43\uCB44\uCB45\uCB46\uCB47\uCB48\uCB49\uDEB2"+
+            "\uCB4A\uCB4B\uCB4C\uCB4D\uCB4E\uCB4F\uCB50\uCB51"+
+            "\uCB52\uCB53\uCB54\uD1A6\uDEB5\uCB55\uCB56\uCB57"+
+            "\uCB58\uCB59\uCB5A\uCB5B\uDEAF\uCB5C\uCB5D\uCB5E"+
+            "\uDEB0\uCB5F\uD0BD\uCB60\uCB61\uCB62\uDEB4\uCAED"+
+            "\uDEB9\uCB63\uCB64\uCB65\uCB66\uCB67\uCB68\uDEB8"+
+            "\uCB69\uDEB7\uCB6A\uCB6B\uCB6C\uCB6D\uCB6E\uCB6F"+
+            "\uCB70\uDEBB\uCB71\uCB72\uCB73\uCB74\uCB75\uCB76"+
+            "\uCB77\uBDE5\uCB78\uCB79\uCB7A\uCB7B\uCB7C\uB2D8"+
+            "\uC3EA\uCB7D\uCB7E\uDEBA\uCB80\uC5BA\uCB81\uCB82"+
+            "\uCB83\uCB84\uCB85\uCB86\uDEBC\uCB87\uCB88\uCB89"+
+            "\uCB8A\uCB8B\uCB8C\uCB8D\uCCD9\uCB8E\uCB8F\uCB90"+
+            "\uCB91\uB7AA\uCB92\uCB93\uCB94\uCB95\uCB96\uCB97"+
+            "\uCB98\uCB99\uCB9A\uCB9B\uCB9C\uCB9D\uCB9E\uCB9F"+
+            "\uCBA0\uCC40\uCC41\uD4E5\uCC42\uCC43\uCC44\uDEBD"+
+            "\uCC45\uCC46\uCC47\uCC48\uCC49\uDEBF\uCC4A\uCC4B"+
+            "\uCC4C\uCC4D\uCC4E\uCC4F\uCC50\uCC51\uCC52\uCC53"+
+            "\uCC54\uC4A2\uCC55\uCC56\uCC57\uCC58\uDEC1\uCC59"+
+            "\uCC5A\uCC5B\uCC5C\uCC5D\uCC5E\uCC5F\uCC60\uCC61"+
+            "\uCC62\uCC63\uCC64\uCC65\uCC66\uCC67\uCC68\uDEBE"+
+            "\uCC69\uDEC0\uCC6A\uCC6B\uCC6C\uCC6D\uCC6E\uCC6F"+
+            "\uCC70\uCC71\uCC72\uCC73\uCC74\uCC75\uCC76\uCC77"+
+            "\uD5BA\uCC78\uCC79\uCC7A\uDEC2\uCC7B\uCC7C\uCC7D"+
+            "\uCC7E\uCC80\uCC81\uCC82\uCC83\uCC84\uCC85\uCC86"+
+            "\uCC87\uCC88\uCC89\uCC8A\uCC8B\uF2AE\uBBA2\uC2B2"+
+            "\uC5B0\uC2C7\uCC8C\uCC8D\uF2AF\uCC8E\uCC8F\uCC90"+
+            "\uCC91\uCC92\uD0E9\uCC93\uCC94\uCC95\uD3DD\uCC96"+
+            "\uCC97\uCC98\uEBBD\uCC99\uCC9A\uCC9B\uCC9C\uCC9D"+
+            "\uCC9E\uCC9F\uCCA0\uB3E6\uF2B0\uCD40\uF2B1\uCD41"+
+            "\uCD42\uCAAD\uCD43\uCD44\uCD45\uCD46\uCD47\uCD48"+
+            "\uCD49\uBAE7\uF2B3\uF2B5\uF2B4\uCBE4\uCFBA\uF2B2"+
+            "\uCAB4\uD2CF\uC2EC\uCD4A\uCD4B\uCD4C\uCD4D\uCD4E"+
+            "\uCD4F\uCD50\uCEC3\uF2B8\uB0F6\uF2B7\uCD51\uCD52"+
+            "\uCD53\uCD54\uCD55\uF2BE\uCD56\uB2CF\uCD57\uCD58"+
+            "\uCD59\uCD5A\uCD5B\uCD5C\uD1C1\uF2BA\uCD5D\uCD5E"+
+            "\uCD5F\uCD60\uCD61\uF2BC\uD4E9\uCD62\uCD63\uF2BB"+
+            "\uF2B6\uF2BF\uF2BD\uCD64\uF2B9\uCD65\uCD66\uF2C7"+
+            "\uF2C4\uF2C6\uCD67\uCD68\uF2CA\uF2C2\uF2C0\uCD69"+
+            "\uCD6A\uCD6B\uF2C5\uCD6C\uCD6D\uCD6E\uCD6F\uCD70"+
+            "\uD6FB\uCD71\uCD72\uCD73\uF2C1\uCD74\uC7F9\uC9DF"+
+            "\uCD75\uF2C8\uB9C6\uB5B0\uCD76\uCD77\uF2C3\uF2C9"+
+            "\uF2D0\uF2D6\uCD78\uCD79\uBBD7\uCD7A\uCD7B\uCD7C"+
+            "\uF2D5\uCDDC\uCD7D\uD6EB\uCD7E\uCD80\uF2D2\uF2D4"+
+            "\uCD81\uCD82\uCD83\uCD84\uB8F2\uCD85\uCD86\uCD87"+
+            "\uCD88\uF2CB\uCD89\uCD8A\uCD8B\uF2CE\uC2F9\uCD8C"+
+            "\uD5DD\uF2CC\uF2CD\uF2CF\uF2D3\uCD8D\uCD8E\uCD8F"+
+            "\uF2D9\uD3BC\uCD90\uCD91\uCD92\uCD93\uB6EA\uCD94"+
+            "\uCAF1\uCD95\uB7E4\uF2D7\uCD96\uCD97\uCD98\uF2D8"+
+            "\uF2DA\uF2DD\uF2DB\uCD99\uCD9A\uF2DC\uCD9B\uCD9C"+
+            "\uCD9D\uCD9E\uD1D1\uF2D1\uCD9F\uCDC9\uCDA0\uCECF"+
+            "\uD6A9\uCE40\uF2E3\uCE41\uC3DB\uCE42\uF2E0\uCE43"+
+            "\uCE44\uC0AF\uF2EC\uF2DE\uCE45\uF2E1\uCE46\uCE47"+
+            "\uCE48\uF2E8\uCE49\uCE4A\uCE4B\uCE4C\uF2E2\uCE4D"+
+            "\uCE4E\uF2E7\uCE4F\uCE50\uF2E6\uCE51\uCE52\uF2E9"+
+            "\uCE53\uCE54\uCE55\uF2DF\uCE56\uCE57\uF2E4\uF2EA"+
+            "\uCE58\uCE59\uCE5A\uCE5B\uCE5C\uCE5D\uCE5E\uD3AC"+
+            "\uF2E5\uB2F5\uCE5F\uCE60\uF2F2\uCE61\uD0AB\uCE62"+
+            "\uCE63\uCE64\uCE65\uF2F5\uCE66\uCE67\uCE68\uBBC8"+
+            "\uCE69\uF2F9\uCE6A\uCE6B\uCE6C\uCE6D\uCE6E\uCE6F"+
+            "\uF2F0\uCE70\uCE71\uF2F6\uF2F8\uF2FA\uCE72\uCE73"+
+            "\uCE74\uCE75\uCE76\uCE77\uCE78\uCE79\uF2F3\uCE7A"+
+            "\uF2F1\uCE7B\uCE7C\uCE7D\uBAFB\uCE7E\uB5FB\uCE80"+
+            "\uCE81\uCE82\uCE83\uF2EF\uF2F7\uF2ED\uF2EE\uCE84"+
+            "\uCE85\uCE86\uF2EB\uF3A6\uCE87\uF3A3\uCE88\uCE89"+
+            "\uF3A2\uCE8A\uCE8B\uF2F4\uCE8C\uC8DA\uCE8D\uCE8E"+
+            "\uCE8F\uCE90\uCE91\uF2FB\uCE92\uCE93\uCE94\uF3A5"+
+            "\uCE95\uCE96\uCE97\uCE98\uCE99\uCE9A\uCE9B\uC3F8"+
+            "\uCE9C\uCE9D\uCE9E\uCE9F\uCEA0\uCF40\uCF41\uCF42"+
+            "\uF2FD\uCF43\uCF44\uF3A7\uF3A9\uF3A4\uCF45\uF2FC"+
+            "\uCF46\uCF47\uCF48\uF3AB\uCF49\uF3AA\uCF4A\uCF4B"+
+            "\uCF4C\uCF4D\uC2DD\uCF4E\uCF4F\uF3AE\uCF50\uCF51"+
+            "\uF3B0\uCF52\uCF53\uCF54\uCF55\uCF56\uF3A1\uCF57"+
+            "\uCF58\uCF59\uF3B1\uF3AC\uCF5A\uCF5B\uCF5C\uCF5D"+
+            "\uCF5E\uF3AF\uF2FE\uF3AD\uCF5F\uCF60\uCF61\uCF62"+
+            "\uCF63\uCF64\uCF65\uF3B2\uCF66\uCF67\uCF68\uCF69"+
+            "\uF3B4\uCF6A\uCF6B\uCF6C\uCF6D\uF3A8\uCF6E\uCF6F"+
+            "\uCF70\uCF71\uF3B3\uCF72\uCF73\uCF74\uF3B5\uCF75"+
+            "\uCF76\uCF77\uCF78\uCF79\uCF7A\uCF7B\uCF7C\uCF7D"+
+            "\uCF7E\uD0B7\uCF80\uCF81\uCF82\uCF83\uF3B8\uCF84"+
+            "\uCF85\uCF86\uCF87\uD9F9\uCF88\uCF89\uCF8A\uCF8B"+
+            "\uCF8C\uCF8D\uF3B9\uCF8E\uCF8F\uCF90\uCF91\uCF92"+
+            "\uCF93\uCF94\uCF95\uF3B7\uCF96\uC8E4\uF3B6\uCF97"+
+            "\uCF98\uCF99\uCF9A\uF3BA\uCF9B\uCF9C\uCF9D\uCF9E"+
+            "\uCF9F\uF3BB\uB4C0\uCFA0\uD040\uD041\uD042\uD043"+
+            "\uD044\uD045\uD046\uD047\uD048\uD049\uD04A\uD04B"+
+            "\uD04C\uD04D\uEEC3\uD04E\uD04F\uD050\uD051\uD052"+
+            "\uD053\uF3BC\uD054\uD055\uF3BD\uD056\uD057\uD058"+
+            "\uD1AA\uD059\uD05A\uD05B\uF4AC\uD0C6\uD05C\uD05D"+
+            "\uD05E\uD05F\uD060\uD061\uD0D0\uD1DC\uD062\uD063"+
+            "\uD064\uD065\uD066\uD067\uCFCE\uD068\uD069\uBDD6"+
+            "\uD06A\uD1C3\uD06B\uD06C\uD06D\uD06E\uD06F\uD070"+
+            "\uD071\uBAE2\uE1E9\uD2C2\uF1C2\uB2B9\uD072\uD073"+
+            "\uB1ED\uF1C3\uD074\uC9C0\uB3C4\uD075\uD9F2\uD076"+
+            "\uCBA5\uD077\uF1C4\uD078\uD079\uD07A\uD07B\uD6D4"+
+            "\uD07C\uD07D\uD07E\uD080\uD081\uF1C5\uF4C0\uF1C6"+
+            "\uD082\uD4AC\uF1C7\uD083\uB0C0\uF4C1\uD084\uD085"+
+            "\uF4C2\uD086\uD087\uB4FC\uD088\uC5DB\uD089\uD08A"+
+            "\uD08B\uD08C\uCCBB\uD08D\uD08E\uD08F\uD0E4\uD090"+
+            "\uD091\uD092\uD093\uD094\uCDE0\uD095\uD096\uD097"+
+            "\uD098\uD099\uF1C8\uD09A\uD9F3\uD09B\uD09C\uD09D"+
+            "\uD09E\uD09F\uD0A0\uB1BB\uD140\uCFAE\uD141\uD142"+
+            "\uD143\uB8A4\uD144\uD145\uD146\uD147\uD148\uF1CA"+
+            "\uD149\uD14A\uD14B\uD14C\uF1CB\uD14D\uD14E\uD14F"+
+            "\uD150\uB2C3\uC1D1\uD151\uD152\uD7B0\uF1C9\uD153"+
+            "\uD154\uF1CC\uD155\uD156\uD157\uD158\uF1CE\uD159"+
+            "\uD15A\uD15B\uD9F6\uD15C\uD2E1\uD4A3\uD15D\uD15E"+
+            "\uF4C3\uC8B9\uD15F\uD160\uD161\uD162\uD163\uF4C4"+
+            "\uD164\uD165\uF1CD\uF1CF\uBFE3\uF1D0\uD166\uD167"+
+            "\uF1D4\uD168\uD169\uD16A\uD16B\uD16C\uD16D\uD16E"+
+            "\uF1D6\uF1D1\uD16F\uC9D1\uC5E1\uD170\uD171\uD172"+
+            "\uC2E3\uB9FC\uD173\uD174\uF1D3\uD175\uF1D5\uD176"+
+            "\uD177\uD178\uB9D3\uD179\uD17A\uD17B\uD17C\uD17D"+
+            "\uD17E\uD180\uF1DB\uD181\uD182\uD183\uD184\uD185"+
+            "\uBAD6\uD186\uB0FD\uF1D9\uD187\uD188\uD189\uD18A"+
+            "\uD18B\uF1D8\uF1D2\uF1DA\uD18C\uD18D\uD18E\uD18F"+
+            "\uD190\uF1D7\uD191\uD192\uD193\uC8EC\uD194\uD195"+
+            "\uD196\uD197\uCDCA\uF1DD\uD198\uD199\uD19A\uD19B"+
+            "\uE5BD\uD19C\uD19D\uD19E\uF1DC\uD19F\uF1DE\uD1A0"+
+            "\uD240\uD241\uD242\uD243\uD244\uD245\uD246\uD247"+
+            "\uD248\uF1DF\uD249\uD24A\uCFE5\uD24B\uD24C\uD24D"+
+            "\uD24E\uD24F\uD250\uD251\uD252\uD253\uD254\uD255"+
+            "\uD256\uD257\uD258\uD259\uD25A\uD25B\uD25C\uD25D"+
+            "\uD25E\uD25F\uD260\uD261\uD262\uD263\uF4C5\uBDF3"+
+            "\uD264\uD265\uD266\uD267\uD268\uD269\uF1E0\uD26A"+
+            "\uD26B\uD26C\uD26D\uD26E\uD26F\uD270\uD271\uD272"+
+            "\uD273\uD274\uD275\uD276\uD277\uD278\uD279\uD27A"+
+            "\uD27B\uD27C\uD27D\uF1E1\uD27E\uD280\uD281\uCEF7"+
+            "\uD282\uD2AA\uD283\uF1FB\uD284\uD285\uB8B2\uD286"+
+            "\uD287\uD288\uD289\uD28A\uD28B\uD28C\uD28D\uD28E"+
+            "\uD28F\uD290\uD291\uD292\uD293\uD294\uD295\uD296"+
+            "\uD297\uD298\uD299\uD29A\uD29B\uD29C\uD29D\uD29E"+
+            "\uD29F\uD2A0\uD340\uD341\uD342\uD343\uD344\uD345"+
+            "\uD346\uD347\uD348\uD349\uD34A\uD34B\uD34C\uD34D"+
+            "\uD34E\uD34F\uD350\uD351\uD352\uD353\uD354\uD355"+
+            "\uD356\uD357\uD358\uD359\uD35A\uD35B\uD35C\uD35D"+
+            "\uD35E\uBCFB\uB9DB\uD35F\uB9E6\uC3D9\uCAD3\uEAE8"+
+            "\uC0C0\uBEF5\uEAE9\uEAEA\uEAEB\uD360\uEAEC\uEAED"+
+            "\uEAEE\uEAEF\uBDC7\uD361\uD362\uD363\uF5FB\uD364"+
+            "\uD365\uD366\uF5FD\uD367\uF5FE\uD368\uF5FC\uD369"+
+            "\uD36A\uD36B\uD36C\uBDE2\uD36D\uF6A1\uB4A5\uD36E"+
+            "\uD36F\uD370\uD371\uF6A2\uD372\uD373\uD374\uF6A3"+
+            "\uD375\uD376\uD377\uECB2\uD378\uD379\uD37A\uD37B"+
+            "\uD37C\uD37D\uD37E\uD380\uD381\uD382\uD383\uD384"+
+            "\uD1D4\uD385\uD386\uD387\uD388\uD389\uD38A\uD9EA"+
+            "\uD38B\uD38C\uD38D\uD38E\uD38F\uD390\uD391\uD392"+
+            "\uD393\uD394\uD395\uD396\uD397\uD398\uD399\uD39A"+
+            "\uD39B\uD39C\uD39D\uD39E\uD39F\uD3A0\uD440\uD441"+
+            "\uD442\uD443\uD444\uD445\uD446\uD447\uD448\uD449"+
+            "\uD44A\uD44B\uD44C\uD44D\uD44E\uD44F\uD450\uD451"+
+            "\uD452\uD453\uD454\uD455\uD456\uD457\uD458\uD459"+
+            "\uD45A\uD45B\uD45C\uD45D\uD45E\uD45F\uF6A4\uD460"+
+            "\uD461\uD462\uD463\uD464\uD465\uD466\uD467\uD468"+
+            "\uEEBA\uD469\uD46A\uD46B\uD46C\uD46D\uD46E\uD46F"+
+            "\uD470\uD471\uD472\uD473\uD474\uD475\uD476\uD477"+
+            "\uD478\uD479\uD47A\uD47B\uD47C\uD47D\uD47E\uD480"+
+            "\uD481\uD482\uD483\uD484\uD485\uD486\uD487\uD488"+
+            "\uD489\uD48A\uD48B\uD48C\uD48D\uD48E\uD48F\uD490"+
+            "\uD491\uD492\uD493\uD494\uD495\uD496\uD497\uD498"+
+            "\uD499\uD5B2\uD49A\uD49B\uD49C\uD49D\uD49E\uD49F"+
+            "\uD4A0\uD540\uD541\uD542\uD543\uD544\uD545\uD546"+
+            "\uD547\uD3FE\uCCDC\uD548\uD549\uD54A\uD54B\uD54C"+
+            "\uD54D\uD54E\uD54F\uCAC4\uD550\uD551\uD552\uD553"+
+            "\uD554\uD555\uD556\uD557\uD558\uD559\uD55A\uD55B"+
+            "\uD55C\uD55D\uD55E\uD55F\uD560\uD561\uD562\uD563"+
+            "\uD564\uD565\uD566\uD567\uD568\uD569\uD56A\uD56B"+
+            "\uD56C\uD56D\uD56E\uD56F\uD570\uD571\uD572\uD573"+
+            "\uD574\uD575\uD576\uD577\uD578\uD579\uD57A\uD57B"+
+            "\uD57C\uD57D\uD57E\uD580\uD581\uD582\uD583\uD584"+
+            "\uD585\uD586\uD587\uD588\uD589\uD58A\uD58B\uD58C"+
+            "\uD58D\uD58E\uD58F\uD590\uD591\uD592\uD593\uD594"+
+            "\uD595\uD596\uD597\uD598\uD599\uD59A\uD59B\uD59C"+
+            "\uD59D\uD59E\uD59F\uD5A0\uD640\uD641\uD642\uD643"+
+            "\uD644\uD645\uD646\uD647\uD648\uD649\uD64A\uD64B"+
+            "\uD64C\uD64D\uD64E\uD64F\uD650\uD651\uD652\uD653"+
+            "\uD654\uD655\uD656\uD657\uD658\uD659\uD65A\uD65B";
+
+        private final static String innerIndex6=
+            "\uD65C\uD65D\uD65E\uD65F\uD660\uD661\uD662\uE5C0"+
+            "\uD663\uD664\uD665\uD666\uD667\uD668\uD669\uD66A"+
+            "\uD66B\uD66C\uD66D\uD66E\uD66F\uD670\uD671\uD672"+
+            "\uD673\uD674\uD675\uD676\uD677\uD678\uD679\uD67A"+
+            "\uD67B\uD67C\uD67D\uD67E\uD680\uD681\uF6A5\uD682"+
+            "\uD683\uD684\uD685\uD686\uD687\uD688\uD689\uD68A"+
+            "\uD68B\uD68C\uD68D\uD68E\uD68F\uD690\uD691\uD692"+
+            "\uD693\uD694\uD695\uD696\uD697\uD698\uD699\uD69A"+
+            "\uD69B\uD69C\uD69D\uD69E\uD69F\uD6A0\uD740\uD741"+
+            "\uD742\uD743\uD744\uD745\uD746\uD747\uD748\uD749"+
+            "\uD74A\uD74B\uD74C\uD74D\uD74E\uD74F\uD750\uD751"+
+            "\uD752\uD753\uD754\uD755\uD756\uD757\uD758\uD759"+
+            "\uD75A\uD75B\uD75C\uD75D\uD75E\uD75F\uBEAF\uD760"+
+            "\uD761\uD762\uD763\uD764\uC6A9\uD765\uD766\uD767"+
+            "\uD768\uD769\uD76A\uD76B\uD76C\uD76D\uD76E\uD76F"+
+            "\uD770\uD771\uD772\uD773\uD774\uD775\uD776\uD777"+
+            "\uD778\uD779\uD77A\uD77B\uD77C\uD77D\uD77E\uD780"+
+            "\uD781\uD782\uD783\uD784\uD785\uD786\uD787\uD788"+
+            "\uD789\uD78A\uD78B\uD78C\uD78D\uD78E\uD78F\uD790"+
+            "\uD791\uD792\uD793\uD794\uD795\uD796\uD797\uD798"+
+            "\uDAA5\uBCC6\uB6A9\uB8BC\uC8CF\uBCA5\uDAA6\uDAA7"+
+            "\uCCD6\uC8C3\uDAA8\uC6FD\uD799\uD1B5\uD2E9\uD1B6"+
+            "\uBCC7\uD79A\uBDB2\uBBE4\uDAA9\uDAAA\uD1C8\uDAAB"+
+            "\uD0ED\uB6EF\uC2DB\uD79B\uCBCF\uB7ED\uC9E8\uB7C3"+
+            "\uBEF7\uD6A4\uDAAC\uDAAD\uC6C0\uD7E7\uCAB6\uD79C"+
+            "\uD5A9\uCBDF\uD5EF\uDAAE\uD6DF\uB4CA\uDAB0\uDAAF"+
+            "\uD79D\uD2EB\uDAB1\uDAB2\uDAB3\uCAD4\uDAB4\uCAAB"+
+            "\uDAB5\uDAB6\uB3CF\uD6EF\uDAB7\uBBB0\uB5AE\uDAB8"+
+            "\uDAB9\uB9EE\uD1AF\uD2E8\uDABA\uB8C3\uCFEA\uB2EF"+
+            "\uDABB\uDABC\uD79E\uBDEB\uCEDC\uD3EF\uDABD\uCEF3"+
+            "\uDABE\uD3D5\uBBE5\uDABF\uCBB5\uCBD0\uDAC0\uC7EB"+
+            "\uD6EE\uDAC1\uC5B5\uB6C1\uDAC2\uB7CC\uBFCE\uDAC3"+
+            "\uDAC4\uCBAD\uDAC5\uB5F7\uDAC6\uC1C2\uD7BB\uDAC7"+
+            "\uCCB8\uD79F\uD2EA\uC4B1\uDAC8\uB5FD\uBBD1\uDAC9"+
+            "\uD0B3\uDACA\uDACB\uCEBD\uDACC\uDACD\uDACE\uB2F7"+
+            "\uDAD1\uDACF\uD1E8\uDAD0\uC3D5\uDAD2\uD7A0\uDAD3"+
+            "\uDAD4\uDAD5\uD0BB\uD2A5\uB0F9\uDAD6\uC7AB\uDAD7"+
+            "\uBDF7\uC3A1\uDAD8\uDAD9\uC3FD\uCCB7\uDADA\uDADB"+
+            "\uC0BE\uC6D7\uDADC\uDADD\uC7B4\uDADE\uDADF\uB9C8"+
+            "\uD840\uD841\uD842\uD843\uD844\uD845\uD846\uD847"+
+            "\uD848\uBBED\uD849\uD84A\uD84B\uD84C\uB6B9\uF4F8"+
+            "\uD84D\uF4F9\uD84E\uD84F\uCDE3\uD850\uD851\uD852"+
+            "\uD853\uD854\uD855\uD856\uD857\uF5B9\uD858\uD859"+
+            "\uD85A\uD85B\uEBE0\uD85C\uD85D\uD85E\uD85F\uD860"+
+            "\uD861\uCFF3\uBBBF\uD862\uD863\uD864\uD865\uD866"+
+            "\uD867\uD868\uBAC0\uD4A5\uD869\uD86A\uD86B\uD86C"+
+            "\uD86D\uD86E\uD86F\uE1D9\uD870\uD871\uD872\uD873"+
+            "\uF5F4\uB1AA\uB2F2\uD874\uD875\uD876\uD877\uD878"+
+            "\uD879\uD87A\uF5F5\uD87B\uD87C\uF5F7\uD87D\uD87E"+
+            "\uD880\uBAD1\uF5F6\uD881\uC3B2\uD882\uD883\uD884"+
+            "\uD885\uD886\uD887\uD888\uF5F9\uD889\uD88A\uD88B"+
+            "\uF5F8\uD88C\uD88D\uD88E\uD88F\uD890\uD891\uD892"+
+            "\uD893\uD894\uD895\uD896\uD897\uD898\uD899\uD89A"+
+            "\uD89B\uD89C\uD89D\uD89E\uD89F\uD8A0\uD940\uD941"+
+            "\uD942\uD943\uD944\uD945\uD946\uD947\uD948\uD949"+
+            "\uD94A\uD94B\uD94C\uD94D\uD94E\uD94F\uD950\uD951"+
+            "\uD952\uD953\uD954\uD955\uD956\uD957\uD958\uD959"+
+            "\uD95A\uD95B\uD95C\uD95D\uD95E\uD95F\uD960\uD961"+
+            "\uD962\uD963\uD964\uD965\uD966\uD967\uD968\uD969"+
+            "\uD96A\uD96B\uD96C\uD96D\uD96E\uD96F\uD970\uD971"+
+            "\uD972\uD973\uD974\uD975\uD976\uD977\uD978\uD979"+
+            "\uD97A\uD97B\uD97C\uD97D\uD97E\uD980\uD981\uD982"+
+            "\uD983\uD984\uD985\uD986\uD987\uD988\uD989\uD98A"+
+            "\uD98B\uD98C\uD98D\uD98E\uD98F\uD990\uD991\uD992"+
+            "\uD993\uD994\uD995\uD996\uD997\uD998\uD999\uD99A"+
+            "\uD99B\uD99C\uD99D\uD99E\uD99F\uD9A0\uDA40\uDA41"+
+            "\uDA42\uDA43\uDA44\uDA45\uDA46\uDA47\uDA48\uDA49"+
+            "\uDA4A\uDA4B\uDA4C\uDA4D\uDA4E\uB1B4\uD5EA\uB8BA"+
+            "\uDA4F\uB9B1\uB2C6\uD4F0\uCFCD\uB0DC\uD5CB\uBBF5"+
+            "\uD6CA\uB7B7\uCCB0\uC6B6\uB1E1\uB9BA\uD6FC\uB9E1"+
+            "\uB7A1\uBCFA\uEADA\uEADB\uCCF9\uB9F3\uEADC\uB4FB"+
+            "\uC3B3\uB7D1\uBAD8\uEADD\uD4F4\uEADE\uBCD6\uBBDF"+
+            "\uEADF\uC1DE\uC2B8\uD4DF\uD7CA\uEAE0\uEAE1\uEAE4"+
+            "\uEAE2\uEAE3\uC9DE\uB8B3\uB6C4\uEAE5\uCAEA\uC9CD"+
+            "\uB4CD\uDA50\uDA51\uE2D9\uC5E2\uEAE6\uC0B5\uDA52"+
+            "\uD7B8\uEAE7\uD7AC\uC8FC\uD8D3\uD8CD\uD4DE\uDA53"+
+            "\uD4F9\uC9C4\uD3AE\uB8D3\uB3E0\uDA54\uC9E2\uF4F6"+
+            "\uDA55\uDA56\uDA57\uBAD5\uDA58\uF4F7\uDA59\uDA5A"+
+            "\uD7DF\uDA5B\uDA5C\uF4F1\uB8B0\uD5D4\uB8CF\uC6F0"+
+            "\uDA5D\uDA5E\uDA5F\uDA60\uDA61\uDA62\uDA63\uDA64"+
+            "\uDA65\uB3C3\uDA66\uDA67\uF4F2\uB3AC\uDA68\uDA69"+
+            "\uDA6A\uDA6B\uD4BD\uC7F7\uDA6C\uDA6D\uDA6E\uDA6F"+
+            "\uDA70\uF4F4\uDA71\uDA72\uF4F3\uDA73\uDA74\uDA75"+
+            "\uDA76\uDA77\uDA78\uDA79\uDA7A\uDA7B\uDA7C\uCCCB"+
+            "\uDA7D\uDA7E\uDA80\uC8A4\uDA81\uDA82\uDA83\uDA84"+
+            "\uDA85\uDA86\uDA87\uDA88\uDA89\uDA8A\uDA8B\uDA8C"+
+            "\uDA8D\uF4F5\uDA8E\uD7E3\uC5BF\uF5C0\uDA8F\uDA90"+
+            "\uF5BB\uDA91\uF5C3\uDA92\uF5C2\uDA93\uD6BA\uF5C1"+
+            "\uDA94\uDA95\uDA96\uD4BE\uF5C4\uDA97\uF5CC\uDA98"+
+            "\uDA99\uDA9A\uDA9B\uB0CF\uB5F8\uDA9C\uF5C9\uF5CA"+
+            "\uDA9D\uC5DC\uDA9E\uDA9F\uDAA0\uDB40\uF5C5\uF5C6"+
+            "\uDB41\uDB42\uF5C7\uF5CB\uDB43\uBEE0\uF5C8\uB8FA"+
+            "\uDB44\uDB45\uDB46\uF5D0\uF5D3\uDB47\uDB48\uDB49"+
+            "\uBFE7\uDB4A\uB9F2\uF5BC\uF5CD\uDB4B\uDB4C\uC2B7"+
+            "\uDB4D\uDB4E\uDB4F\uCCF8\uDB50\uBCF9\uDB51\uF5CE"+
+            "\uF5CF\uF5D1\uB6E5\uF5D2\uDB52\uF5D5\uDB53\uDB54"+
+            "\uDB55\uDB56\uDB57\uDB58\uDB59\uF5BD\uDB5A\uDB5B"+
+            "\uDB5C\uF5D4\uD3BB\uDB5D\uB3EC\uDB5E\uDB5F\uCCA4"+
+            "\uDB60\uDB61\uDB62\uDB63\uF5D6\uDB64\uDB65\uDB66"+
+            "\uDB67\uDB68\uDB69\uDB6A\uDB6B\uF5D7\uBEE1\uF5D8"+
+            "\uDB6C\uDB6D\uCCDF\uF5DB\uDB6E\uDB6F\uDB70\uDB71"+
+            "\uDB72\uB2C8\uD7D9\uDB73\uF5D9\uDB74\uF5DA\uF5DC"+
+            "\uDB75\uF5E2\uDB76\uDB77\uDB78\uF5E0\uDB79\uDB7A"+
+            "\uDB7B\uF5DF\uF5DD\uDB7C\uDB7D\uF5E1\uDB7E\uDB80"+
+            "\uF5DE\uF5E4\uF5E5\uDB81\uCCE3\uDB82\uDB83\uE5BF"+
+            "\uB5B8\uF5E3\uF5E8\uCCA3\uDB84\uDB85\uDB86\uDB87"+
+            "\uDB88\uF5E6\uF5E7\uDB89\uDB8A\uDB8B\uDB8C\uDB8D"+
+            "\uDB8E\uF5BE\uDB8F\uDB90\uDB91\uDB92\uDB93\uDB94"+
+            "\uDB95\uDB96\uDB97\uDB98\uDB99\uDB9A\uB1C4\uDB9B"+
+            "\uDB9C\uF5BF\uDB9D\uDB9E\uB5C5\uB2E4\uDB9F\uF5EC"+
+            "\uF5E9\uDBA0\uB6D7\uDC40\uF5ED\uDC41\uF5EA\uDC42"+
+            "\uDC43\uDC44\uDC45\uDC46\uF5EB\uDC47\uDC48\uB4DA"+
+            "\uDC49\uD4EA\uDC4A\uDC4B\uDC4C\uF5EE\uDC4D\uB3F9"+
+            "\uDC4E\uDC4F\uDC50\uDC51\uDC52\uDC53\uDC54\uF5EF"+
+            "\uF5F1\uDC55\uDC56\uDC57\uF5F0\uDC58\uDC59\uDC5A"+
+            "\uDC5B\uDC5C\uDC5D\uDC5E\uF5F2\uDC5F\uF5F3\uDC60"+
+            "\uDC61\uDC62\uDC63\uDC64\uDC65\uDC66\uDC67\uDC68"+
+            "\uDC69\uDC6A\uDC6B\uC9ED\uB9AA\uDC6C\uDC6D\uC7FB"+
+            "\uDC6E\uDC6F\uB6E3\uDC70\uDC71\uDC72\uDC73\uDC74"+
+            "\uDC75\uDC76\uCCC9\uDC77\uDC78\uDC79\uDC7A\uDC7B"+
+            "\uDC7C\uDC7D\uDC7E\uDC80\uDC81\uDC82\uDC83\uDC84"+
+            "\uDC85\uDC86\uDC87\uDC88\uDC89\uDC8A\uEAA6\uDC8B"+
+            "\uDC8C\uDC8D\uDC8E\uDC8F\uDC90\uDC91\uDC92\uDC93"+
+            "\uDC94\uDC95\uDC96\uDC97\uDC98\uDC99\uDC9A\uDC9B"+
+            "\uDC9C\uDC9D\uDC9E\uDC9F\uDCA0\uDD40\uDD41\uDD42"+
+            "\uDD43\uDD44\uDD45\uDD46\uDD47\uDD48\uDD49\uDD4A"+
+            "\uDD4B\uDD4C\uDD4D\uDD4E\uDD4F\uDD50\uDD51\uDD52"+
+            "\uDD53\uDD54\uDD55\uDD56\uDD57\uDD58\uDD59\uDD5A"+
+            "\uDD5B\uDD5C\uDD5D\uDD5E\uDD5F\uDD60\uDD61\uDD62"+
+            "\uDD63\uDD64\uDD65\uDD66\uDD67\uDD68\uDD69\uDD6A"+
+            "\uDD6B\uDD6C\uDD6D\uDD6E\uDD6F\uDD70\uDD71\uDD72"+
+            "\uDD73\uDD74\uDD75\uDD76\uDD77\uDD78\uDD79\uDD7A"+
+            "\uDD7B\uDD7C\uDD7D\uDD7E\uDD80\uDD81\uDD82\uDD83"+
+            "\uDD84\uDD85\uDD86\uDD87\uDD88\uDD89\uDD8A\uDD8B"+
+            "\uDD8C\uDD8D\uDD8E\uDD8F\uDD90\uDD91\uDD92\uDD93"+
+            "\uDD94\uDD95\uDD96\uDD97\uDD98\uDD99\uDD9A\uDD9B"+
+            "\uDD9C\uDD9D\uDD9E\uDD9F\uDDA0\uDE40\uDE41\uDE42"+
+            "\uDE43\uDE44\uDE45\uDE46\uDE47\uDE48\uDE49\uDE4A"+
+            "\uDE4B\uDE4C\uDE4D\uDE4E\uDE4F\uDE50\uDE51\uDE52"+
+            "\uDE53\uDE54\uDE55\uDE56\uDE57\uDE58\uDE59\uDE5A"+
+            "\uDE5B\uDE5C\uDE5D\uDE5E\uDE5F\uDE60\uB3B5\uD4FE"+
+            "\uB9EC\uD0F9\uDE61\uE9ED\uD7AA\uE9EE\uC2D6\uC8ED"+
+            "\uBAE4\uE9EF\uE9F0\uE9F1\uD6E1\uE9F2\uE9F3\uE9F5"+
+            "\uE9F4\uE9F6\uE9F7\uC7E1\uE9F8\uD4D8\uE9F9\uBDCE"+
+            "\uDE62\uE9FA\uE9FB\uBDCF\uE9FC\uB8A8\uC1BE\uE9FD"+
+            "\uB1B2\uBBD4\uB9F5\uE9FE\uDE63\uEAA1\uEAA2\uEAA3"+
+            "\uB7F8\uBCAD\uDE64\uCAE4\uE0CE\uD4AF\uCFBD\uD5B7"+
+            "\uEAA4\uD5DE\uEAA5\uD0C1\uB9BC\uDE65\uB4C7\uB1D9"+
+            "\uDE66\uDE67\uDE68\uC0B1\uDE69\uDE6A\uDE6B\uDE6C"+
+            "\uB1E6\uB1E7\uDE6D\uB1E8\uDE6E\uDE6F\uDE70\uDE71"+
+            "\uB3BD\uC8E8\uDE72\uDE73\uDE74\uDE75\uE5C1\uDE76"+
+            "\uDE77\uB1DF\uDE78\uDE79\uDE7A\uC1C9\uB4EF\uDE7B"+
+            "\uDE7C\uC7A8\uD3D8\uDE7D\uC6F9\uD1B8\uDE7E\uB9FD"+
+            "\uC2F5\uDE80\uDE81\uDE82\uDE83\uDE84\uD3AD\uDE85"+
+            "\uD4CB\uBDFC\uDE86\uE5C2\uB7B5\uE5C3\uDE87\uDE88"+
+            "\uBBB9\uD5E2\uDE89\uBDF8\uD4B6\uCEA5\uC1AC\uB3D9"+
+            "\uDE8A\uDE8B\uCCF6\uDE8C\uE5C6\uE5C4\uE5C8\uDE8D"+
+            "\uE5CA\uE5C7\uB5CF\uC6C8\uDE8E\uB5FC\uE5C5\uDE8F"+
+            "\uCAF6\uDE90\uDE91\uE5C9\uDE92\uDE93\uDE94\uC3D4"+
+            "\uB1C5\uBCA3\uDE95\uDE96\uDE97\uD7B7\uDE98\uDE99"+
+            "\uCDCB\uCBCD\uCACA\uCCD3\uE5CC\uE5CB\uC4E6\uDE9A"+
+            "\uDE9B\uD1A1\uD1B7\uE5CD\uDE9C\uE5D0\uDE9D\uCDB8"+
+            "\uD6F0\uE5CF\uB5DD\uDE9E\uCDBE\uDE9F\uE5D1\uB6BA"+
+            "\uDEA0\uDF40\uCDA8\uB9E4\uDF41\uCAC5\uB3D1\uCBD9"+
+            "\uD4EC\uE5D2\uB7EA\uDF42\uDF43\uDF44\uE5CE\uDF45"+
+            "\uDF46\uDF47\uDF48\uDF49\uDF4A\uE5D5\uB4FE\uE5D6"+
+            "\uDF4B\uDF4C\uDF4D\uDF4E\uDF4F\uE5D3\uE5D4\uDF50"+
+            "\uD2DD\uDF51\uDF52\uC2DF\uB1C6\uDF53\uD3E2\uDF54"+
+            "\uDF55\uB6DD\uCBEC\uDF56\uE5D7\uDF57\uDF58\uD3F6"+
+            "\uDF59\uDF5A\uDF5B\uDF5C\uDF5D\uB1E9\uDF5E\uB6F4"+
+            "\uE5DA\uE5D8\uE5D9\uB5C0\uDF5F\uDF60\uDF61\uD2C5"+
+            "\uE5DC\uDF62\uDF63\uE5DE\uDF64\uDF65\uDF66\uDF67"+
+            "\uDF68\uDF69\uE5DD\uC7B2\uDF6A\uD2A3\uDF6B\uDF6C"+
+            "\uE5DB\uDF6D\uDF6E\uDF6F\uDF70\uD4E2\uD5DA\uDF71"+
+            "\uDF72\uDF73\uDF74\uDF75\uE5E0\uD7F1\uDF76\uDF77"+
+            "\uDF78\uDF79\uDF7A\uDF7B\uDF7C\uE5E1\uDF7D\uB1DC"+
+            "\uD1FB\uDF7E\uE5E2\uE5E4\uDF80\uDF81\uDF82\uDF83"+
+            "\uE5E3\uDF84\uDF85\uE5E5\uDF86\uDF87\uDF88\uDF89"+
+            "\uDF8A\uD2D8\uDF8B\uB5CB\uDF8C\uE7DF\uDF8D\uDAF5"+
+            "\uDF8E\uDAF8\uDF8F\uDAF6\uDF90\uDAF7\uDF91\uDF92"+
+            "\uDF93\uDAFA\uD0CF\uC4C7\uDF94\uDF95\uB0EE\uDF96"+
+            "\uDF97\uDF98\uD0B0\uDF99\uDAF9\uDF9A\uD3CA\uBAAA"+
+            "\uDBA2\uC7F1\uDF9B\uDAFC\uDAFB\uC9DB\uDAFD\uDF9C"+
+            "\uDBA1\uD7DE\uDAFE\uC1DA\uDF9D\uDF9E\uDBA5\uDF9F"+
+            "\uDFA0\uD3F4\uE040\uE041\uDBA7\uDBA4\uE042\uDBA8"+
+            "\uE043\uE044\uBDBC\uE045\uE046\uE047\uC0C9\uDBA3"+
+            "\uDBA6\uD6A3\uE048\uDBA9\uE049\uE04A\uE04B\uDBAD"+
+            "\uE04C\uE04D\uE04E\uDBAE\uDBAC\uBAC2\uE04F\uE050"+
+            "\uE051\uBFA4\uDBAB\uE052\uE053\uE054\uDBAA\uD4C7"+
+            "\uB2BF\uE055\uE056\uDBAF\uE057\uB9F9\uE058\uDBB0"+
+            "\uE059\uE05A\uE05B\uE05C\uB3BB\uE05D\uE05E\uE05F"+
+            "\uB5A6\uE060\uE061\uE062\uE063\uB6BC\uDBB1\uE064"+
+            "\uE065\uE066\uB6F5\uE067\uDBB2\uE068\uE069\uE06A"+
+            "\uE06B\uE06C\uE06D\uE06E\uE06F\uE070\uE071\uE072"+
+            "\uE073\uE074\uE075\uE076\uE077\uE078\uE079\uE07A"+
+            "\uE07B\uB1C9\uE07C\uE07D\uE07E\uE080\uDBB4\uE081"+
+            "\uE082\uE083\uDBB3\uDBB5\uE084\uE085\uE086\uE087"+
+            "\uE088\uE089\uE08A\uE08B\uE08C\uE08D\uE08E\uDBB7"+
+            "\uE08F\uDBB6\uE090\uE091\uE092\uE093\uE094\uE095"+
+            "\uE096\uDBB8\uE097\uE098\uE099\uE09A\uE09B\uE09C"+
+            "\uE09D\uE09E\uE09F\uDBB9\uE0A0\uE140\uDBBA\uE141"+
+            "\uE142\uD3CF\uF4FA\uC7F5\uD7C3\uC5E4\uF4FC\uF4FD"+
+            "\uF4FB\uE143\uBEC6\uE144\uE145\uE146\uE147\uD0EF"+
+            "\uE148\uE149\uB7D3\uE14A\uE14B\uD4CD\uCCAA\uE14C"+
+            "\uE14D\uF5A2\uF5A1\uBAA8\uF4FE\uCBD6\uE14E\uE14F"+
+            "\uE150\uF5A4\uC0D2\uE151\uB3EA\uE152\uCDAA\uF5A5"+
+            "\uF5A3\uBDB4\uF5A8\uE153\uF5A9\uBDCD\uC3B8\uBFE1"+
+            "\uCBE1\uF5AA\uE154\uE155\uE156\uF5A6\uF5A7\uC4F0"+
+            "\uE157\uE158\uE159\uE15A\uE15B\uF5AC\uE15C\uB4BC"+
+            "\uE15D\uD7ED\uE15E\uB4D7\uF5AB\uF5AE\uE15F\uE160"+
+            "\uF5AD\uF5AF\uD0D1\uE161\uE162\uE163\uE164\uE165"+
+            "\uE166\uE167\uC3D1\uC8A9\uE168\uE169\uE16A\uE16B"+
+            "\uE16C\uE16D\uF5B0\uF5B1\uE16E\uE16F\uE170\uE171"+
+            "\uE172\uE173\uF5B2\uE174\uE175\uF5B3\uF5B4\uF5B5"+
+            "\uE176\uE177\uE178\uE179\uF5B7\uF5B6\uE17A\uE17B"+
+            "\uE17C\uE17D\uF5B8\uE17E\uE180\uE181\uE182\uE183"+
+            "\uE184\uE185\uE186\uE187\uE188\uE189\uE18A\uB2C9"+
+            "\uE18B\uD3D4\uCACD\uE18C\uC0EF\uD6D8\uD2B0\uC1BF"+
+            "\uE18D\uBDF0\uE18E\uE18F\uE190\uE191\uE192\uE193"+
+            "\uE194\uE195\uE196\uE197\uB8AA\uE198\uE199\uE19A"+
+            "\uE19B\uE19C\uE19D\uE19E\uE19F\uE1A0\uE240\uE241"+
+            "\uE242\uE243\uE244\uE245\uE246\uE247\uE248\uE249"+
+            "\uE24A\uE24B\uE24C\uE24D\uE24E\uE24F\uE250\uE251"+
+            "\uE252\uE253\uE254\uE255\uE256\uE257\uE258\uE259"+
+            "\uE25A\uE25B\uE25C\uE25D\uE25E\uE25F\uE260\uE261"+
+            "\uE262\uE263\uE264\uE265\uE266\uE267\uE268\uE269"+
+            "\uE26A\uE26B\uE26C\uE26D\uE26E\uE26F\uE270\uE271"+
+            "\uE272\uE273\uE274\uE275\uE276\uE277\uE278\uE279"+
+            "\uE27A\uE27B\uE27C\uE27D\uE27E\uE280\uE281\uE282"+
+            "\uE283\uE284\uE285\uE286\uE287\uE288\uE289\uE28A"+
+            "\uE28B\uE28C\uE28D\uE28E\uE28F\uE290\uE291\uE292"+
+            "\uE293\uE294\uE295\uE296\uE297\uE298\uE299\uE29A"+
+            "\uE29B\uE29C\uE29D\uE29E\uE29F\uE2A0\uE340\uE341"+
+            "\uE342\uE343\uE344\uE345\uE346\uE347\uE348\uE349"+
+            "\uE34A\uE34B\uE34C\uE34D\uE34E\uE34F\uE350\uE351"+
+            "\uE352\uE353\uE354\uE355\uE356\uE357\uE358\uE359"+
+            "\uE35A\uE35B\uE35C\uE35D\uE35E\uE35F\uE360\uE361"+
+            "\uE362\uE363\uE364\uE365\uE366\uE367\uE368\uE369"+
+            "\uE36A\uE36B\uE36C\uE36D\uBCF8\uE36E\uE36F\uE370"+
+            "\uE371\uE372\uE373\uE374\uE375\uE376\uE377\uE378"+
+            "\uE379\uE37A\uE37B\uE37C\uE37D\uE37E\uE380\uE381"+
+            "\uE382\uE383\uE384\uE385\uE386\uE387\uF6C6\uE388"+
+            "\uE389\uE38A\uE38B\uE38C\uE38D\uE38E\uE38F\uE390"+
+            "\uE391\uE392\uE393\uE394\uE395\uE396\uE397\uE398"+
+            "\uE399\uE39A\uE39B\uE39C\uE39D\uE39E\uE39F\uE3A0"+
+            "\uE440\uE441\uE442\uE443\uE444\uE445\uF6C7\uE446"+
+            "\uE447\uE448\uE449\uE44A\uE44B\uE44C\uE44D\uE44E"+
+            "\uE44F\uE450\uE451\uE452\uE453\uE454\uE455\uE456"+
+            "\uE457\uE458\uE459\uE45A\uE45B\uE45C\uE45D\uE45E"+
+            "\uF6C8\uE45F\uE460\uE461\uE462\uE463\uE464\uE465"+
+            "\uE466\uE467\uE468\uE469\uE46A\uE46B\uE46C\uE46D"+
+            "\uE46E\uE46F\uE470\uE471\uE472\uE473\uE474\uE475"+
+            "\uE476\uE477\uE478\uE479\uE47A\uE47B\uE47C\uE47D"+
+            "\uE47E\uE480\uE481\uE482\uE483\uE484\uE485\uE486"+
+            "\uE487\uE488\uE489\uE48A\uE48B\uE48C\uE48D\uE48E"+
+            "\uE48F\uE490\uE491\uE492\uE493\uE494\uE495\uE496"+
+            "\uE497\uE498\uE499\uE49A\uE49B\uE49C\uE49D\uE49E"+
+            "\uE49F\uE4A0\uE540\uE541\uE542\uE543\uE544\uE545"+
+            "\uE546\uE547\uE548\uE549\uE54A\uE54B\uE54C\uE54D"+
+            "\uE54E\uE54F\uE550\uE551\uE552\uE553\uE554\uE555"+
+            "\uE556\uE557\uE558\uE559\uE55A\uE55B\uE55C\uE55D"+
+            "\uE55E\uE55F\uE560\uE561\uE562\uE563\uE564\uE565"+
+            "\uE566\uE567\uE568\uE569\uE56A\uE56B\uE56C\uE56D"+
+            "\uE56E\uE56F\uE570\uE571\uE572\uE573\uF6C9\uE574"+
+            "\uE575\uE576\uE577\uE578\uE579\uE57A\uE57B\uE57C"+
+            "\uE57D\uE57E\uE580\uE581\uE582\uE583\uE584\uE585"+
+            "\uE586\uE587\uE588\uE589\uE58A\uE58B\uE58C\uE58D"+
+            "\uE58E\uE58F\uE590\uE591\uE592\uE593\uE594\uE595"+
+            "\uE596\uE597\uE598\uE599\uE59A\uE59B\uE59C\uE59D"+
+            "\uE59E\uE59F\uF6CA\uE5A0\uE640\uE641\uE642\uE643"+
+            "\uE644\uE645\uE646\uE647\uE648\uE649\uE64A\uE64B"+
+            "\uE64C\uE64D\uE64E\uE64F\uE650\uE651\uE652\uE653"+
+            "\uE654\uE655\uE656\uE657\uE658\uE659\uE65A\uE65B"+
+            "\uE65C\uE65D\uE65E\uE65F\uE660\uE661\uE662\uF6CC"+
+            "\uE663\uE664\uE665\uE666\uE667\uE668\uE669\uE66A"+
+            "\uE66B\uE66C\uE66D\uE66E\uE66F\uE670\uE671\uE672"+
+            "\uE673\uE674\uE675\uE676\uE677\uE678\uE679\uE67A"+
+            "\uE67B\uE67C\uE67D\uE67E\uE680\uE681\uE682\uE683"+
+            "\uE684\uE685\uE686\uE687\uE688\uE689\uE68A\uE68B"+
+            "\uE68C\uE68D\uE68E\uE68F\uE690\uE691\uE692\uE693"+
+            "\uE694\uE695\uE696\uE697\uE698\uE699\uE69A\uE69B"+
+            "\uE69C\uE69D\uF6CB\uE69E\uE69F\uE6A0\uE740\uE741"+
+            "\uE742\uE743\uE744\uE745\uE746\uE747\uF7E9\uE748"+
+            "\uE749\uE74A\uE74B\uE74C\uE74D\uE74E\uE74F\uE750"+
+            "\uE751\uE752\uE753\uE754\uE755\uE756\uE757\uE758"+
+            "\uE759\uE75A\uE75B\uE75C\uE75D\uE75E\uE75F\uE760"+
+            "\uE761\uE762\uE763\uE764\uE765\uE766\uE767\uE768"+
+            "\uE769\uE76A\uE76B\uE76C\uE76D\uE76E\uE76F\uE770"+
+            "\uE771\uE772\uE773\uE774\uE775\uE776\uE777\uE778"+
+            "\uE779\uE77A\uE77B\uE77C\uE77D\uE77E\uE780\uE781"+
+            "\uE782\uE783\uE784\uE785\uE786\uE787\uE788\uE789"+
+            "\uE78A\uE78B\uE78C\uE78D\uE78E\uE78F\uE790\uE791"+
+            "\uE792\uE793\uE794\uE795\uE796\uE797\uE798\uE799"+
+            "\uE79A\uE79B\uE79C\uE79D\uE79E\uE79F\uE7A0\uE840"+
+            "\uE841\uE842\uE843\uE844\uE845\uE846\uE847\uE848"+
+            "\uE849\uE84A\uE84B\uE84C\uE84D\uE84E\uF6CD\uE84F"+
+            "\uE850\uE851\uE852\uE853\uE854\uE855\uE856\uE857"+
+            "\uE858\uE859\uE85A\uE85B\uE85C\uE85D\uE85E\uE85F"+
+            "\uE860\uE861\uE862\uE863\uE864\uE865\uE866\uE867"+
+            "\uE868\uE869\uE86A\uE86B\uE86C\uE86D\uE86E\uE86F"+
+            "\uE870\uE871\uE872\uE873\uE874\uE875\uE876\uE877"+
+            "\uE878\uE879\uE87A\uF6CE\uE87B\uE87C\uE87D\uE87E"+
+            "\uE880\uE881\uE882\uE883\uE884\uE885\uE886\uE887"+
+            "\uE888\uE889\uE88A\uE88B\uE88C\uE88D\uE88E\uE88F"+
+            "\uE890\uE891\uE892\uE893\uE894\uEEC4\uEEC5\uEEC6"+
+            "\uD5EB\uB6A4\uEEC8\uEEC7\uEEC9\uEECA\uC7A5\uEECB"+
+            "\uEECC\uE895\uB7B0\uB5F6\uEECD\uEECF\uE896\uEECE"+
+            "\uE897\uB8C6\uEED0\uEED1\uEED2\uB6DB\uB3AE\uD6D3"+
+            "\uC4C6\uB1B5\uB8D6\uEED3\uEED4\uD4BF\uC7D5\uBEFB"+
+            "\uCED9\uB9B3\uEED6\uEED5\uEED8\uEED7\uC5A5\uEED9"+
+            "\uEEDA\uC7AE\uEEDB\uC7AF\uEEDC\uB2A7\uEEDD\uEEDE"+
+            "\uEEDF\uEEE0\uEEE1\uD7EA\uEEE2\uEEE3\uBCD8\uEEE4"+
+            "\uD3CB\uCCFA\uB2AC\uC1E5\uEEE5\uC7A6\uC3AD\uE898"+
+            "\uEEE6\uEEE7\uEEE8\uEEE9\uEEEA\uEEEB\uEEEC\uE899"+
+            "\uEEED\uEEEE\uEEEF\uE89A\uE89B\uEEF0\uEEF1\uEEF2"+
+            "\uEEF4\uEEF3\uE89C\uEEF5\uCDAD\uC2C1\uEEF6\uEEF7"+
+            "\uEEF8\uD5A1\uEEF9\uCFB3\uEEFA\uEEFB\uE89D\uEEFC"+
+            "\uEEFD\uEFA1\uEEFE\uEFA2\uB8F5\uC3FA\uEFA3\uEFA4"+
+            "\uBDC2\uD2BF\uB2F9\uEFA5\uEFA6\uEFA7\uD2F8\uEFA8"+
+            "\uD6FD\uEFA9\uC6CC\uE89E\uEFAA\uEFAB\uC1B4\uEFAC"+
+            "\uCFFA\uCBF8\uEFAE\uEFAD\uB3FA\uB9F8\uEFAF\uEFB0"+
+            "\uD0E2\uEFB1\uEFB2\uB7E6\uD0BF\uEFB3\uEFB4\uEFB5"+
+            "\uC8F1\uCCE0\uEFB6\uEFB7\uEFB8\uEFB9\uEFBA\uD5E0"+
+            "\uEFBB\uB4ED\uC3AA\uEFBC\uE89F\uEFBD\uEFBE\uEFBF"+
+            "\uE8A0\uCEFD\uEFC0\uC2E0\uB4B8\uD7B6\uBDF5\uE940"+
+            "\uCFC7\uEFC3\uEFC1\uEFC2\uEFC4\uB6A7\uBCFC\uBEE2"+
+            "\uC3CC\uEFC5\uEFC6\uE941\uEFC7\uEFCF\uEFC8\uEFC9"+
+            "\uEFCA\uC7C2\uEFF1\uB6CD\uEFCB\uE942\uEFCC\uEFCD"+
+            "\uB6C6\uC3BE\uEFCE\uE943\uEFD0\uEFD1\uEFD2\uD5F2"+
+            "\uE944\uEFD3\uC4F7\uE945\uEFD4\uC4F8\uEFD5\uEFD6"+
+            "\uB8E4\uB0F7\uEFD7\uEFD8\uEFD9\uE946\uEFDA\uEFDB"+
+            "\uEFDC\uEFDD\uE947\uEFDE\uBEB5\uEFE1\uEFDF\uEFE0"+
+            "\uE948\uEFE2\uEFE3\uC1CD\uEFE4\uEFE5\uEFE6\uEFE7"+
+            "\uEFE8\uEFE9\uEFEA\uEFEB\uEFEC\uC0D8\uE949\uEFED"+
+            "\uC1AD\uEFEE\uEFEF\uEFF0\uE94A\uE94B\uCFE2\uE94C"+
+            "\uE94D\uE94E\uE94F\uE950\uE951\uE952\uE953\uB3A4"+
+            "\uE954\uE955\uE956\uE957\uE958\uE959\uE95A\uE95B"+
+            "\uE95C\uE95D\uE95E\uE95F\uE960\uE961\uE962\uE963"+
+            "\uE964\uE965\uE966\uE967\uE968\uE969\uE96A\uE96B"+
+            "\uE96C\uE96D\uE96E\uE96F\uE970\uE971\uE972\uE973"+
+            "\uE974\uE975\uE976\uE977\uE978\uE979\uE97A\uE97B"+
+            "\uE97C\uE97D\uE97E\uE980\uE981\uE982\uE983\uE984"+
+            "\uE985\uE986\uE987\uE988\uE989\uE98A\uE98B\uE98C"+
+            "\uE98D\uE98E\uE98F\uE990\uE991\uE992\uE993\uE994"+
+            "\uE995\uE996\uE997\uE998\uE999\uE99A\uE99B\uE99C"+
+            "\uE99D\uE99E\uE99F\uE9A0\uEA40\uEA41\uEA42\uEA43"+
+            "\uEA44\uEA45\uEA46\uEA47\uEA48\uEA49\uEA4A\uEA4B"+
+            "\uEA4C\uEA4D\uEA4E\uEA4F\uEA50\uEA51\uEA52\uEA53"+
+            "\uEA54\uEA55\uEA56\uEA57\uEA58\uEA59\uEA5A\uEA5B"+
+            "\uC3C5\uE3C5\uC9C1\uE3C6\uEA5C\uB1D5\uCECA\uB4B3"+
+            "\uC8F2\uE3C7\uCFD0\uE3C8\uBCE4\uE3C9\uE3CA\uC3C6"+
+            "\uD5A2\uC4D6\uB9EB\uCEC5\uE3CB\uC3F6\uE3CC\uEA5D"+
+            "\uB7A7\uB8F3\uBAD2\uE3CD\uE3CE\uD4C4\uE3CF\uEA5E"+
+            "\uE3D0\uD1CB\uE3D1\uE3D2\uE3D3\uE3D4\uD1D6\uE3D5"+
+            "\uB2FB\uC0BB\uE3D6\uEA5F\uC0AB\uE3D7\uE3D8\uE3D9"+
+            "\uEA60\uE3DA\uE3DB\uEA61\uB8B7\uDAE2\uEA62\uB6D3"+
+            "\uEA63\uDAE4\uDAE3\uEA64\uEA65\uEA66\uEA67\uEA68"+
+            "\uEA69\uEA6A\uDAE6\uEA6B\uEA6C\uEA6D\uC8EE\uEA6E"+
+            "\uEA6F\uDAE5\uB7C0\uD1F4\uD2F5\uD5F3\uBDD7\uEA70"+
+            "\uEA71\uEA72\uEA73\uD7E8\uDAE8\uDAE7\uEA74\uB0A2"+
+            "\uCDD3\uEA75\uDAE9\uEA76\uB8BD\uBCCA\uC2BD\uC2A4"+
+            "\uB3C2\uDAEA\uEA77\uC2AA\uC4B0\uBDB5\uEA78\uEA79"+
+            "\uCFDE\uEA7A\uEA7B\uEA7C\uDAEB\uC9C2\uEA7D\uEA7E"+
+            "\uEA80\uEA81\uEA82\uB1DD\uEA83\uEA84\uEA85\uDAEC"+
+            "\uEA86\uB6B8\uD4BA\uEA87\uB3FD\uEA88\uEA89\uDAED"+
+            "\uD4C9\uCFD5\uC5E3\uEA8A\uDAEE\uEA8B\uEA8C\uEA8D"+
+            "\uEA8E\uEA8F\uDAEF\uEA90\uDAF0\uC1EA\uCCD5\uCFDD"+
+            "\uEA91\uEA92\uEA93\uEA94\uEA95\uEA96\uEA97\uEA98"+
+            "\uEA99\uEA9A\uEA9B\uEA9C\uEA9D\uD3E7\uC2A1\uEA9E"+
+            "\uDAF1\uEA9F\uEAA0\uCBE5\uEB40\uDAF2\uEB41\uCBE6"+
+            "\uD2FE\uEB42\uEB43\uEB44\uB8F4\uEB45\uEB46\uDAF3"+
+            "\uB0AF\uCFB6\uEB47\uEB48\uD5CF\uEB49\uEB4A\uEB4B"+
+            "\uEB4C\uEB4D\uEB4E\uEB4F\uEB50\uEB51\uEB52\uCBED"+
+            "\uEB53\uEB54\uEB55\uEB56\uEB57\uEB58\uEB59\uEB5A"+
+            "\uDAF4\uEB5B\uEB5C\uE3C4\uEB5D\uEB5E\uC1A5\uEB5F"+
+            "\uEB60\uF6BF\uEB61\uEB62\uF6C0\uF6C1\uC4D1\uEB63"+
+            "\uC8B8\uD1E3\uEB64\uEB65\uD0DB\uD1C5\uBCAF\uB9CD"+
+            "\uEB66\uEFF4\uEB67\uEB68\uB4C6\uD3BA\uF6C2\uB3FB"+
+            "\uEB69\uEB6A\uF6C3\uEB6B\uEB6C\uB5F1\uEB6D\uEB6E"+
+            "\uEB6F\uEB70\uEB71\uEB72\uEB73\uEB74\uEB75\uEB76"+
+            "\uF6C5\uEB77\uEB78\uEB79\uEB7A\uEB7B\uEB7C\uEB7D"+
+            "\uD3EA\uF6A7\uD1A9\uEB7E\uEB80\uEB81\uEB82\uF6A9"+
+            "\uEB83\uEB84\uEB85\uF6A8\uEB86\uEB87\uC1E3\uC0D7"+
+            "\uEB88\uB1A2\uEB89\uEB8A\uEB8B\uEB8C\uCEED\uEB8D"+
+            "\uD0E8\uF6AB\uEB8E\uEB8F\uCFF6\uEB90\uF6AA\uD5F0"+
+            "\uF6AC\uC3B9\uEB91\uEB92\uEB93\uBBF4\uF6AE\uF6AD"+
+            "\uEB94\uEB95\uEB96\uC4DE\uEB97\uEB98\uC1D8\uEB99"+
+            "\uEB9A\uEB9B\uEB9C\uEB9D\uCBAA\uEB9E\uCFBC\uEB9F"+
+            "\uEBA0\uEC40\uEC41\uEC42\uEC43\uEC44\uEC45\uEC46"+
+            "\uEC47\uEC48\uF6AF\uEC49\uEC4A\uF6B0\uEC4B\uEC4C"+
+            "\uF6B1\uEC4D\uC2B6\uEC4E\uEC4F\uEC50\uEC51\uEC52"+
+            "\uB0D4\uC5F9\uEC53\uEC54\uEC55\uEC56\uF6B2\uEC57"+
+            "\uEC58\uEC59\uEC5A\uEC5B\uEC5C\uEC5D\uEC5E\uEC5F"+
+            "\uEC60\uEC61\uEC62\uEC63\uEC64\uEC65\uEC66\uEC67"+
+            "\uEC68\uEC69\uC7E0\uF6A6\uEC6A\uEC6B\uBEB8\uEC6C"+
+            "\uEC6D\uBEB2\uEC6E\uB5E5\uEC6F\uEC70\uB7C7\uEC71"+
+            "\uBFBF\uC3D2\uC3E6\uEC72\uEC73\uD8CC\uEC74\uEC75"+
+            "\uEC76\uB8EF\uEC77\uEC78\uEC79\uEC7A\uEC7B\uEC7C"+
+            "\uEC7D\uEC7E\uEC80\uBDF9\uD1A5\uEC81\uB0D0\uEC82"+
+            "\uEC83\uEC84\uEC85\uEC86\uF7B0\uEC87\uEC88\uEC89"+
+            "\uEC8A\uEC8B\uEC8C\uEC8D\uEC8E\uF7B1\uEC8F\uEC90"+
+            "\uEC91\uEC92\uEC93\uD0AC\uEC94\uB0B0\uEC95\uEC96"+
+            "\uEC97\uF7B2\uF7B3\uEC98\uF7B4\uEC99\uEC9A\uEC9B"+
+            "\uC7CA\uEC9C\uEC9D\uEC9E\uEC9F\uECA0\uED40\uED41"+
+            "\uBECF\uED42\uED43\uF7B7\uED44\uED45\uED46\uED47"+
+            "\uED48\uED49\uED4A\uF7B6\uED4B\uB1DE\uED4C\uF7B5"+
+            "\uED4D\uED4E\uF7B8\uED4F\uF7B9\uED50\uED51\uED52"+
+            "\uED53\uED54\uED55\uED56\uED57\uED58\uED59\uED5A"+
+            "\uED5B\uED5C\uED5D\uED5E\uED5F\uED60\uED61\uED62"+
+            "\uED63\uED64\uED65\uED66\uED67\uED68\uED69\uED6A"+
+            "\uED6B\uED6C\uED6D\uED6E\uED6F\uED70\uED71\uED72"+
+            "\uED73\uED74\uED75\uED76\uED77\uED78\uED79\uED7A"+
+            "\uED7B\uED7C\uED7D\uED7E\uED80\uED81\uCEA4\uC8CD"+
+            "\uED82\uBAAB\uE8B8\uE8B9\uE8BA\uBEC2\uED83\uED84"+
+            "\uED85\uED86\uED87\uD2F4\uED88\uD4CF\uC9D8\uED89"+
+            "\uED8A\uED8B\uED8C\uED8D\uED8E\uED8F\uED90\uED91"+
+            "\uED92\uED93\uED94\uED95\uED96\uED97\uED98\uED99"+
+            "\uED9A\uED9B\uED9C\uED9D\uED9E\uED9F\uEDA0\uEE40"+
+            "\uEE41\uEE42\uEE43\uEE44\uEE45\uEE46\uEE47\uEE48"+
+            "\uEE49\uEE4A\uEE4B\uEE4C\uEE4D\uEE4E\uEE4F\uEE50"+
+            "\uEE51\uEE52\uEE53\uEE54\uEE55\uEE56\uEE57\uEE58"+
+            "\uEE59\uEE5A\uEE5B\uEE5C\uEE5D\uEE5E\uEE5F\uEE60"+
+            "\uEE61\uEE62\uEE63\uEE64\uEE65\uEE66\uEE67\uEE68"+
+            "\uEE69\uEE6A\uEE6B\uEE6C\uEE6D\uEE6E\uEE6F\uEE70"+
+            "\uEE71\uEE72\uEE73\uEE74\uEE75\uEE76\uEE77\uEE78"+
+            "\uEE79\uEE7A\uEE7B\uEE7C\uEE7D\uEE7E\uEE80\uEE81"+
+            "\uEE82\uEE83\uEE84\uEE85\uEE86\uEE87\uEE88\uEE89"+
+            "\uEE8A\uEE8B\uEE8C\uEE8D\uEE8E\uEE8F\uEE90\uEE91"+
+            "\uEE92\uEE93\uEE94\uEE95\uEE96\uEE97\uEE98\uEE99"+
+            "\uEE9A\uEE9B\uEE9C\uEE9D\uEE9E\uEE9F\uEEA0\uEF40"+
+            "\uEF41\uEF42\uEF43\uEF44\uEF45\uD2B3\uB6A5\uC7EA"+
+            "\uF1FC\uCFEE\uCBB3\uD0EB\uE7EF\uCDE7\uB9CB\uB6D9"+
+            "\uF1FD\uB0E4\uCBCC\uF1FE\uD4A4\uC2AD\uC1EC\uC6C4"+
+            "\uBEB1\uF2A1\uBCD5\uEF46\uF2A2\uF2A3\uEF47\uF2A4"+
+            "\uD2C3\uC6B5\uEF48\uCDC7\uF2A5\uEF49\uD3B1\uBFC5"+
+            "\uCCE2\uEF4A\uF2A6\uF2A7\uD1D5\uB6EE\uF2A8\uF2A9"+
+            "\uB5DF\uF2AA\uF2AB\uEF4B\uB2FC\uF2AC\uF2AD\uC8A7"+
+            "\uEF4C\uEF4D\uEF4E\uEF4F\uEF50\uEF51\uEF52\uEF53"+
+            "\uEF54\uEF55\uEF56\uEF57\uEF58\uEF59\uEF5A\uEF5B"+
+            "\uEF5C\uEF5D\uEF5E\uEF5F\uEF60\uEF61\uEF62\uEF63"+
+            "\uEF64\uEF65\uEF66\uEF67\uEF68\uEF69\uEF6A\uEF6B"+
+            "\uEF6C\uEF6D\uEF6E\uEF6F\uEF70\uEF71\uB7E7\uEF72"+
+            "\uEF73\uECA9\uECAA\uECAB\uEF74\uECAC\uEF75\uEF76"+
+            "\uC6AE\uECAD\uECAE\uEF77\uEF78\uEF79\uB7C9\uCAB3"+
+            "\uEF7A\uEF7B\uEF7C\uEF7D\uEF7E\uEF80\uEF81\uE2B8"+
+            "\uF7CF\uEF82\uEF83\uEF84\uEF85\uEF86\uEF87\uEF88"+
+            "\uEF89\uEF8A\uEF8B\uEF8C\uEF8D\uEF8E\uEF8F\uEF90"+
+            "\uEF91\uEF92\uEF93\uEF94\uEF95\uEF96\uEF97\uEF98"+
+            "\uEF99\uEF9A\uEF9B\uEF9C\uEF9D\uEF9E\uEF9F\uEFA0"+
+            "\uF040\uF041\uF042\uF043\uF044\uF7D0\uF045\uF046"+
+            "\uB2CD\uF047\uF048\uF049\uF04A\uF04B\uF04C\uF04D"+
+            "\uF04E\uF04F\uF050\uF051\uF052\uF053\uF054\uF055"+
+            "\uF056\uF057\uF058\uF059\uF05A\uF05B\uF05C\uF05D"+
+            "\uF05E\uF05F\uF060\uF061\uF062\uF063\uF7D1\uF064"+
+            "\uF065\uF066\uF067\uF068\uF069\uF06A\uF06B\uF06C"+
+            "\uF06D\uF06E\uF06F\uF070\uF071\uF072\uF073\uF074"+
+            "\uF075\uF076\uF077\uF078\uF079\uF07A\uF07B\uF07C"+
+            "\uF07D\uF07E\uF080\uF081\uF082\uF083\uF084\uF085"+
+            "\uF086\uF087\uF088\uF089\uF7D3\uF7D2\uF08A\uF08B"+
+            "\uF08C\uF08D\uF08E\uF08F\uF090\uF091\uF092\uF093"+
+            "\uF094\uF095\uF096\uE2BB\uF097\uBCA2\uF098\uE2BC"+
+            "\uE2BD\uE2BE\uE2BF\uE2C0\uE2C1\uB7B9\uD2FB\uBDA4"+
+            "\uCACE\uB1A5\uCBC7\uF099\uE2C2\uB6FC\uC8C4\uE2C3"+
+            "\uF09A\uF09B\uBDC8\uF09C\uB1FD\uE2C4\uF09D\uB6F6"+
+            "\uE2C5\uC4D9\uF09E\uF09F\uE2C6\uCFDA\uB9DD\uE2C7"+
+            "\uC0A1\uF0A0\uE2C8\uB2F6\uF140\uE2C9\uF141\uC1F3"+
+            "\uE2CA\uE2CB\uC2F8\uE2CC\uE2CD\uE2CE\uCAD7\uD8B8"+
+            "\uD9E5\uCFE3\uF142\uF143\uF144\uF145\uF146\uF147"+
+            "\uF148\uF149\uF14A\uF14B\uF14C\uF0A5\uF14D\uF14E"+
+            "\uDCB0\uF14F\uF150\uF151\uF152\uF153\uF154\uF155"+
+            "\uF156\uF157\uF158\uF159\uF15A\uF15B\uF15C\uF15D"+
+            "\uF15E\uF15F\uF160\uF161\uF162\uF163\uF164\uF165"+
+            "\uF166\uF167\uF168\uF169\uF16A\uF16B\uF16C\uF16D"+
+            "\uF16E\uF16F\uF170\uF171\uF172\uF173\uF174\uF175"+
+            "\uF176\uF177\uF178\uF179\uF17A\uF17B\uF17C\uF17D"+
+            "\uF17E\uF180\uF181\uF182\uF183\uF184\uF185\uF186"+
+            "\uF187\uF188\uF189\uF18A\uF18B\uF18C\uF18D\uF18E"+
+            "\uF18F\uF190\uF191\uF192\uF193\uF194\uF195\uF196"+
+            "\uF197\uF198\uF199\uF19A\uF19B\uF19C\uF19D\uF19E"+
+            "\uF19F\uF1A0\uF240\uF241\uF242\uF243\uF244\uF245"+
+            "\uF246\uF247\uF248\uF249\uF24A\uF24B\uF24C\uF24D"+
+            "\uF24E\uF24F\uF250\uF251\uF252\uF253\uF254\uF255"+
+            "\uF256\uF257\uF258\uF259\uF25A\uF25B\uF25C\uF25D"+
+            "\uF25E\uF25F\uF260\uF261\uF262\uF263\uF264\uF265"+
+            "\uF266\uF267\uF268\uF269\uF26A\uF26B\uF26C\uF26D"+
+            "\uF26E\uF26F\uF270\uF271\uF272\uF273\uF274\uF275"+
+            "\uF276\uF277\uF278\uF279\uF27A\uF27B\uF27C\uF27D"+
+            "\uF27E\uF280\uF281\uF282\uF283\uF284\uF285\uF286"+
+            "\uF287\uF288\uF289\uF28A\uF28B\uF28C\uF28D\uF28E"+
+            "\uF28F\uF290\uF291\uF292\uF293\uF294\uF295\uF296"+
+            "\uF297\uF298\uF299\uF29A\uF29B\uF29C\uF29D\uF29E"+
+            "\uF29F\uF2A0\uF340\uF341\uF342\uF343\uF344\uF345"+
+            "\uF346\uF347\uF348\uF349\uF34A\uF34B\uF34C\uF34D"+
+            "\uF34E\uF34F\uF350\uF351\uC2ED\uD4A6\uCDD4\uD1B1"+
+            "\uB3DB\uC7FD\uF352\uB2B5\uC2BF\uE6E0\uCABB\uE6E1"+
+            "\uE6E2\uBED4\uE6E3\uD7A4\uCDD5\uE6E5\uBCDD\uE6E4"+
+            "\uE6E6\uE6E7\uC2EE\uF353\uBDBE\uE6E8\uC2E6\uBAA7"+
+            "\uE6E9\uF354\uE6EA\uB3D2\uD1E9\uF355\uF356\uBFA5"+
+            "\uE6EB\uC6EF\uE6EC\uE6ED\uF357\uF358\uE6EE\uC6AD"+
+            "\uE6EF\uF359\uC9A7\uE6F0\uE6F1\uE6F2\uE5B9\uE6F3"+
+            "\uE6F4\uC2E2\uE6F5\uE6F6\uD6E8\uE6F7\uF35A\uE6F8"+
+            "\uB9C7\uF35B\uF35C\uF35D\uF35E\uF35F\uF360\uF361"+
+            "\uF7BB\uF7BA\uF362\uF363\uF364\uF365\uF7BE\uF7BC"+
+            "\uBAA1\uF366\uF7BF\uF367\uF7C0\uF368\uF369\uF36A"+
+            "\uF7C2\uF7C1\uF7C4\uF36B\uF36C\uF7C3\uF36D\uF36E"+
+            "\uF36F\uF370\uF371\uF7C5\uF7C6\uF372\uF373\uF374"+
+            "\uF375\uF7C7\uF376\uCBE8\uF377\uF378\uF379\uF37A"+
+            "\uB8DF\uF37B\uF37C\uF37D\uF37E\uF380\uF381\uF7D4"+
+            "\uF382\uF7D5\uF383\uF384\uF385\uF386\uF7D6\uF387"+
+            "\uF388\uF389\uF38A\uF7D8\uF38B\uF7DA\uF38C\uF7D7"+
+            "\uF38D\uF38E\uF38F\uF390\uF391\uF392\uF393\uF394"+
+            "\uF395\uF7DB\uF396\uF7D9\uF397\uF398\uF399\uF39A";
+
+        private final static String innerIndex7=
+            "\uF39B\uF39C\uF39D\uD7D7\uF39E\uF39F\uF3A0\uF440"+
+            "\uF7DC\uF441\uF442\uF443\uF444\uF445\uF446\uF7DD"+
+            "\uF447\uF448\uF449\uF7DE\uF44A\uF44B\uF44C\uF44D"+
+            "\uF44E\uF44F\uF450\uF451\uF452\uF453\uF454\uF7DF"+
+            "\uF455\uF456\uF457\uF7E0\uF458\uF459\uF45A\uF45B"+
+            "\uF45C\uF45D\uF45E\uF45F\uF460\uF461\uF462\uDBCB"+
+            "\uF463\uF464\uD8AA\uF465\uF466\uF467\uF468\uF469"+
+            "\uF46A\uF46B\uF46C\uE5F7\uB9ED\uF46D\uF46E\uF46F"+
+            "\uF470\uBFFD\uBBEA\uF7C9\uC6C7\uF7C8\uF471\uF7CA"+
+            "\uF7CC\uF7CB\uF472\uF473\uF474\uF7CD\uF475\uCEBA"+
+            "\uF476\uF7CE\uF477\uF478\uC4A7\uF479\uF47A\uF47B"+
+            "\uF47C\uF47D\uF47E\uF480\uF481\uF482\uF483\uF484"+
+            "\uF485\uF486\uF487\uF488\uF489\uF48A\uF48B\uF48C"+
+            "\uF48D\uF48E\uF48F\uF490\uF491\uF492\uF493\uF494"+
+            "\uF495\uF496\uF497\uF498\uF499\uF49A\uF49B\uF49C"+
+            "\uF49D\uF49E\uF49F\uF4A0\uF540\uF541\uF542\uF543"+
+            "\uF544\uF545\uF546\uF547\uF548\uF549\uF54A\uF54B"+
+            "\uF54C\uF54D\uF54E\uF54F\uF550\uF551\uF552\uF553"+
+            "\uF554\uF555\uF556\uF557\uF558\uF559\uF55A\uF55B"+
+            "\uF55C\uF55D\uF55E\uF55F\uF560\uF561\uF562\uF563"+
+            "\uF564\uF565\uF566\uF567\uF568\uF569\uF56A\uF56B"+
+            "\uF56C\uF56D\uF56E\uF56F\uF570\uF571\uF572\uF573"+
+            "\uF574\uF575\uF576\uF577\uF578\uF579\uF57A\uF57B"+
+            "\uF57C\uF57D\uF57E\uF580\uF581\uF582\uF583\uF584"+
+            "\uF585\uF586\uF587\uF588\uF589\uF58A\uF58B\uF58C"+
+            "\uF58D\uF58E\uF58F\uF590\uF591\uF592\uF593\uF594"+
+            "\uF595\uF596\uF597\uF598\uF599\uF59A\uF59B\uF59C"+
+            "\uF59D\uF59E\uF59F\uF5A0\uF640\uF641\uF642\uF643"+
+            "\uF644\uF645\uF646\uF647\uF648\uF649\uF64A\uF64B"+
+            "\uF64C\uF64D\uF64E\uF64F\uF650\uF651\uF652\uF653"+
+            "\uF654\uF655\uF656\uF657\uF658\uF659\uF65A\uF65B"+
+            "\uF65C\uF65D\uF65E\uF65F\uF660\uF661\uF662\uF663"+
+            "\uF664\uF665\uF666\uF667\uF668\uF669\uF66A\uF66B"+
+            "\uF66C\uF66D\uF66E\uF66F\uF670\uF671\uF672\uF673"+
+            "\uF674\uF675\uF676\uF677\uF678\uF679\uF67A\uF67B"+
+            "\uF67C\uF67D\uF67E\uF680\uF681\uF682\uF683\uF684"+
+            "\uF685\uF686\uF687\uF688\uF689\uF68A\uF68B\uF68C"+
+            "\uF68D\uF68E\uF68F\uF690\uF691\uF692\uF693\uF694"+
+            "\uF695\uF696\uF697\uF698\uF699\uF69A\uF69B\uF69C"+
+            "\uF69D\uF69E\uF69F\uF6A0\uF740\uF741\uF742\uF743"+
+            "\uF744\uF745\uF746\uF747\uF748\uF749\uF74A\uF74B"+
+            "\uF74C\uF74D\uF74E\uF74F\uF750\uF751\uF752\uF753"+
+            "\uF754\uF755\uF756\uF757\uF758\uF759\uF75A\uF75B"+
+            "\uF75C\uF75D\uF75E\uF75F\uF760\uF761\uF762\uF763"+
+            "\uF764\uF765\uF766\uF767\uF768\uF769\uF76A\uF76B"+
+            "\uF76C\uF76D\uF76E\uF76F\uF770\uF771\uF772\uF773"+
+            "\uF774\uF775\uF776\uF777\uF778\uF779\uF77A\uF77B"+
+            "\uF77C\uF77D\uF77E\uF780\uD3E3\uF781\uF782\uF6CF"+
+            "\uF783\uC2B3\uF6D0\uF784\uF785\uF6D1\uF6D2\uF6D3"+
+            "\uF6D4\uF786\uF787\uF6D6\uF788\uB1AB\uF6D7\uF789"+
+            "\uF6D8\uF6D9\uF6DA\uF78A\uF6DB\uF6DC\uF78B\uF78C"+
+            "\uF78D\uF78E\uF6DD\uF6DE\uCFCA\uF78F\uF6DF\uF6E0"+
+            "\uF6E1\uF6E2\uF6E3\uF6E4\uC0F0\uF6E5\uF6E6\uF6E7"+
+            "\uF6E8\uF6E9\uF790\uF6EA\uF791\uF6EB\uF6EC\uF792"+
+            "\uF6ED\uF6EE\uF6EF\uF6F0\uF6F1\uF6F2\uF6F3\uF6F4"+
+            "\uBEA8\uF793\uF6F5\uF6F6\uF6F7\uF6F8\uF794\uF795"+
+            "\uF796\uF797\uF798\uC8FA\uF6F9\uF6FA\uF6FB\uF6FC"+
+            "\uF799\uF79A\uF6FD\uF6FE\uF7A1\uF7A2\uF7A3\uF7A4"+
+            "\uF7A5\uF79B\uF79C\uF7A6\uF7A7\uF7A8\uB1EE\uF7A9"+
+            "\uF7AA\uF7AB\uF79D\uF79E\uF7AC\uF7AD\uC1DB\uF7AE"+
+            "\uF79F\uF7A0\uF7AF\uF840\uF841\uF842\uF843\uF844"+
+            "\uF845\uF846\uF847\uF848\uF849\uF84A\uF84B\uF84C"+
+            "\uF84D\uF84E\uF84F\uF850\uF851\uF852\uF853\uF854"+
+            "\uF855\uF856\uF857\uF858\uF859\uF85A\uF85B\uF85C"+
+            "\uF85D\uF85E\uF85F\uF860\uF861\uF862\uF863\uF864"+
+            "\uF865\uF866\uF867\uF868\uF869\uF86A\uF86B\uF86C"+
+            "\uF86D\uF86E\uF86F\uF870\uF871\uF872\uF873\uF874"+
+            "\uF875\uF876\uF877\uF878\uF879\uF87A\uF87B\uF87C"+
+            "\uF87D\uF87E\uF880\uF881\uF882\uF883\uF884\uF885"+
+            "\uF886\uF887\uF888\uF889\uF88A\uF88B\uF88C\uF88D"+
+            "\uF88E\uF88F\uF890\uF891\uF892\uF893\uF894\uF895"+
+            "\uF896\uF897\uF898\uF899\uF89A\uF89B\uF89C\uF89D"+
+            "\uF89E\uF89F\uF8A0\uF940\uF941\uF942\uF943\uF944"+
+            "\uF945\uF946\uF947\uF948\uF949\uF94A\uF94B\uF94C"+
+            "\uF94D\uF94E\uF94F\uF950\uF951\uF952\uF953\uF954"+
+            "\uF955\uF956\uF957\uF958\uF959\uF95A\uF95B\uF95C"+
+            "\uF95D\uF95E\uF95F\uF960\uF961\uF962\uF963\uF964"+
+            "\uF965\uF966\uF967\uF968\uF969\uF96A\uF96B\uF96C"+
+            "\uF96D\uF96E\uF96F\uF970\uF971\uF972\uF973\uF974"+
+            "\uF975\uF976\uF977\uF978\uF979\uF97A\uF97B\uF97C"+
+            "\uF97D\uF97E\uF980\uF981\uF982\uF983\uF984\uF985"+
+            "\uF986\uF987\uF988\uF989\uF98A\uF98B\uF98C\uF98D"+
+            "\uF98E\uF98F\uF990\uF991\uF992\uF993\uF994\uF995"+
+            "\uF996\uF997\uF998\uF999\uF99A\uF99B\uF99C\uF99D"+
+            "\uF99E\uF99F\uF9A0\uFA40\uFA41\uFA42\uFA43\uFA44"+
+            "\uFA45\uFA46\uFA47\uFA48\uFA49\uFA4A\uFA4B\uFA4C"+
+            "\uFA4D\uFA4E\uFA4F\uFA50\uFA51\uFA52\uFA53\uFA54"+
+            "\uFA55\uFA56\uFA57\uFA58\uFA59\uFA5A\uFA5B\uFA5C"+
+            "\uFA5D\uFA5E\uFA5F\uFA60\uFA61\uFA62\uFA63\uFA64"+
+            "\uFA65\uFA66\uFA67\uFA68\uFA69\uFA6A\uFA6B\uFA6C"+
+            "\uFA6D\uFA6E\uFA6F\uFA70\uFA71\uFA72\uFA73\uFA74"+
+            "\uFA75\uFA76\uFA77\uFA78\uFA79\uFA7A\uFA7B\uFA7C"+
+            "\uFA7D\uFA7E\uFA80\uFA81\uFA82\uFA83\uFA84\uFA85"+
+            "\uFA86\uFA87\uFA88\uFA89\uFA8A\uFA8B\uFA8C\uFA8D"+
+            "\uFA8E\uFA8F\uFA90\uFA91\uFA92\uFA93\uFA94\uFA95"+
+            "\uFA96\uFA97\uFA98\uFA99\uFA9A\uFA9B\uFA9C\uFA9D"+
+            "\uFA9E\uFA9F\uFAA0\uFB40\uFB41\uFB42\uFB43\uFB44"+
+            "\uFB45\uFB46\uFB47\uFB48\uFB49\uFB4A\uFB4B\uFB4C"+
+            "\uFB4D\uFB4E\uFB4F\uFB50\uFB51\uFB52\uFB53\uFB54"+
+            "\uFB55\uFB56\uFB57\uFB58\uFB59\uFB5A\uFB5B\uC4F1"+
+            "\uF0AF\uBCA6\uF0B0\uC3F9\uFB5C\uC5B8\uD1BB\uFB5D"+
+            "\uF0B1\uF0B2\uF0B3\uF0B4\uF0B5\uD1BC\uFB5E\uD1EC"+
+            "\uFB5F\uF0B7\uF0B6\uD4A7\uFB60\uCDD2\uF0B8\uF0BA"+
+            "\uF0B9\uF0BB\uF0BC\uFB61\uFB62\uB8EB\uF0BD\uBAE8"+
+            "\uFB63\uF0BE\uF0BF\uBEE9\uF0C0\uB6EC\uF0C1\uF0C2"+
+            "\uF0C3\uF0C4\uC8B5\uF0C5\uF0C6\uFB64\uF0C7\uC5F4"+
+            "\uFB65\uF0C8\uFB66\uFB67\uFB68\uF0C9\uFB69\uF0CA"+
+            "\uF7BD\uFB6A\uF0CB\uF0CC\uF0CD\uFB6B\uF0CE\uFB6C"+
+            "\uFB6D\uFB6E\uFB6F\uF0CF\uBAD7\uFB70\uF0D0\uF0D1"+
+            "\uF0D2\uF0D3\uF0D4\uF0D5\uF0D6\uF0D8\uFB71\uFB72"+
+            "\uD3A5\uF0D7\uFB73\uF0D9\uFB74\uFB75\uFB76\uFB77"+
+            "\uFB78\uFB79\uFB7A\uFB7B\uFB7C\uFB7D\uF5BA\uC2B9"+
+            "\uFB7E\uFB80\uF7E4\uFB81\uFB82\uFB83\uFB84\uF7E5"+
+            "\uF7E6\uFB85\uFB86\uF7E7\uFB87\uFB88\uFB89\uFB8A"+
+            "\uFB8B\uFB8C\uF7E8\uC2B4\uFB8D\uFB8E\uFB8F\uFB90"+
+            "\uFB91\uFB92\uFB93\uFB94\uFB95\uF7EA\uFB96\uF7EB"+
+            "\uFB97\uFB98\uFB99\uFB9A\uFB9B\uFB9C\uC2F3\uFB9D"+
+            "\uFB9E\uFB9F\uFBA0\uFC40\uFC41\uFC42\uFC43\uFC44"+
+            "\uFC45\uFC46\uFC47\uFC48\uF4F0\uFC49\uFC4A\uFC4B"+
+            "\uF4EF\uFC4C\uFC4D\uC2E9\uFC4E\uF7E1\uF7E2\uFC4F"+
+            "\uFC50\uFC51\uFC52\uFC53\uBBC6\uFC54\uFC55\uFC56"+
+            "\uFC57\uD9E4\uFC58\uFC59\uFC5A\uCAF2\uC0E8\uF0A4"+
+            "\uFC5B\uBADA\uFC5C\uFC5D\uC7AD\uFC5E\uFC5F\uFC60"+
+            "\uC4AC\uFC61\uFC62\uF7EC\uF7ED\uF7EE\uFC63\uF7F0"+
+            "\uF7EF\uFC64\uF7F1\uFC65\uFC66\uF7F4\uFC67\uF7F3"+
+            "\uFC68\uF7F2\uF7F5\uFC69\uFC6A\uFC6B\uFC6C\uF7F6"+
+            "\uFC6D\uFC6E\uFC6F\uFC70\uFC71\uFC72\uFC73\uFC74"+
+            "\uFC75\uEDE9\uFC76\uEDEA\uEDEB\uFC77\uF6BC\uFC78"+
+            "\uFC79\uFC7A\uFC7B\uFC7C\uFC7D\uFC7E\uFC80\uFC81"+
+            "\uFC82\uFC83\uFC84\uF6BD\uFC85\uF6BE\uB6A6\uFC86"+
+            "\uD8BE\uFC87\uFC88\uB9C4\uFC89\uFC8A\uFC8B\uD8BB"+
+            "\uFC8C\uDCB1\uFC8D\uFC8E\uFC8F\uFC90\uFC91\uFC92"+
+            "\uCAF3\uFC93\uF7F7\uFC94\uFC95\uFC96\uFC97\uFC98"+
+            "\uFC99\uFC9A\uFC9B\uFC9C\uF7F8\uFC9D\uFC9E\uF7F9"+
+            "\uFC9F\uFCA0\uFD40\uFD41\uFD42\uFD43\uFD44\uF7FB"+
+            "\uFD45\uF7FA\uFD46\uB1C7\uFD47\uF7FC\uF7FD\uFD48"+
+            "\uFD49\uFD4A\uFD4B\uFD4C\uF7FE\uFD4D\uFD4E\uFD4F"+
+            "\uFD50\uFD51\uFD52\uFD53\uFD54\uFD55\uFD56\uFD57"+
+            "\uC6EB\uECB4\uFD58\uFD59\uFD5A\uFD5B\uFD5C\uFD5D"+
+            "\uFD5E\uFD5F\uFD60\uFD61\uFD62\uFD63\uFD64\uFD65"+
+            "\uFD66\uFD67\uFD68\uFD69\uFD6A\uFD6B\uFD6C\uFD6D"+
+            "\uFD6E\uFD6F\uFD70\uFD71\uFD72\uFD73\uFD74\uFD75"+
+            "\uFD76\uFD77\uFD78\uFD79\uFD7A\uFD7B\uFD7C\uFD7D"+
+            "\uFD7E\uFD80\uFD81\uFD82\uFD83\uFD84\uFD85\uB3DD"+
+            "\uF6B3\uFD86\uFD87\uF6B4\uC1E4\uF6B5\uF6B6\uF6B7"+
+            "\uF6B8\uF6B9\uF6BA\uC8A3\uF6BB\uFD88\uFD89\uFD8A"+
+            "\uFD8B\uFD8C\uFD8D\uFD8E\uFD8F\uFD90\uFD91\uFD92"+
+            "\uFD93\uC1FA\uB9A8\uEDE8\uFD94\uFD95\uFD96\uB9EA"+
+            "\uD9DF\uFD97\uFD98\uFD99\uFD9A\uFD9B\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uAAA1\uAAA2\uAAA3\uAAA4\uAAA5\uAAA6\uAAA7\uAAA8"+
+            "\uAAA9\uAAAA\uAAAB\uAAAC\uAAAD\uAAAE\uAAAF\uAAB0"+
+            "\uAAB1\uAAB2\uAAB3\uAAB4\uAAB5\uAAB6\uAAB7\uAAB8"+
+            "\uAAB9\uAABA\uAABB\uAABC\uAABD\uAABE\uAABF\uAAC0"+
+            "\uAAC1\uAAC2\uAAC3\uAAC4\uAAC5\uAAC6\uAAC7\uAAC8"+
+            "\uAAC9\uAACA\uAACB\uAACC\uAACD\uAACE\uAACF\uAAD0"+
+            "\uAAD1\uAAD2\uAAD3\uAAD4\uAAD5\uAAD6\uAAD7\uAAD8"+
+            "\uAAD9\uAADA\uAADB\uAADC\uAADD\uAADE\uAADF\uAAE0"+
+            "\uAAE1\uAAE2\uAAE3\uAAE4\uAAE5\uAAE6\uAAE7\uAAE8"+
+            "\uAAE9\uAAEA\uAAEB\uAAEC\uAAED\uAAEE\uAAEF\uAAF0"+
+            "\uAAF1\uAAF2\uAAF3\uAAF4\uAAF5\uAAF6\uAAF7\uAAF8"+
+            "\uAAF9\uAAFA\uAAFB\uAAFC\uAAFD\uAAFE\uABA1\uABA2"+
+            "\uABA3\uABA4\uABA5\uABA6\uABA7\uABA8\uABA9\uABAA"+
+            "\uABAB\uABAC\uABAD\uABAE\uABAF\uABB0\uABB1\uABB2"+
+            "\uABB3\uABB4\uABB5\uABB6\uABB7\uABB8\uABB9\uABBA"+
+            "\uABBB\uABBC\uABBD\uABBE\uABBF\uABC0\uABC1\uABC2"+
+            "\uABC3\uABC4\uABC5\uABC6\uABC7\uABC8\uABC9\uABCA"+
+            "\uABCB\uABCC\uABCD\uABCE\uABCF\uABD0\uABD1\uABD2"+
+            "\uABD3\uABD4\uABD5\uABD6\uABD7\uABD8\uABD9\uABDA"+
+            "\uABDB\uABDC\uABDD\uABDE\uABDF\uABE0\uABE1\uABE2"+
+            "\uABE3\uABE4\uABE5\uABE6\uABE7\uABE8\uABE9\uABEA"+
+            "\uABEB\uABEC\uABED\uABEE\uABEF\uABF0\uABF1\uABF2"+
+            "\uABF3\uABF4\uABF5\uABF6\uABF7\uABF8\uABF9\uABFA"+
+            "\uABFB\uABFC\uABFD\uABFE\uACA1\uACA2\uACA3\uACA4"+
+            "\uACA5\uACA6\uACA7\uACA8\uACA9\uACAA\uACAB\uACAC"+
+            "\uACAD\uACAE\uACAF\uACB0\uACB1\uACB2\uACB3\uACB4"+
+            "\uACB5\uACB6\uACB7\uACB8\uACB9\uACBA\uACBB\uACBC"+
+            "\uACBD\uACBE\uACBF\uACC0\uACC1\uACC2\uACC3\uACC4"+
+            "\uACC5\uACC6\uACC7\uACC8\uACC9\uACCA\uACCB\uACCC"+
+            "\uACCD\uACCE\uACCF\uACD0\uACD1\uACD2\uACD3\uACD4"+
+            "\uACD5\uACD6\uACD7\uACD8\uACD9\uACDA\uACDB\uACDC"+
+            "\uACDD\uACDE\uACDF\uACE0\uACE1\uACE2\uACE3\uACE4"+
+            "\uACE5\uACE6\uACE7\uACE8\uACE9\uACEA\uACEB\uACEC"+
+            "\uACED\uACEE\uACEF\uACF0\uACF1\uACF2\uACF3\uACF4"+
+            "\uACF5\uACF6\uACF7\uACF8\uACF9\uACFA\uACFB\uACFC"+
+            "\uACFD\uACFE\uADA1\uADA2\uADA3\uADA4\uADA5\uADA6"+
+            "\uADA7\uADA8\uADA9\uADAA\uADAB\uADAC\uADAD\uADAE"+
+            "\uADAF\uADB0\uADB1\uADB2\uADB3\uADB4\uADB5\uADB6"+
+            "\uADB7\uADB8\uADB9\uADBA\uADBB\uADBC\uADBD\uADBE"+
+            "\uADBF\uADC0\uADC1\uADC2\uADC3\uADC4\uADC5\uADC6"+
+            "\uADC7\uADC8\uADC9\uADCA\uADCB\uADCC\uADCD\uADCE"+
+            "\uADCF\uADD0\uADD1\uADD2\uADD3\uADD4\uADD5\uADD6"+
+            "\uADD7\uADD8\uADD9\uADDA\uADDB\uADDC\uADDD\uADDE"+
+            "\uADDF\uADE0\uADE1\uADE2\uADE3\uADE4\uADE5\uADE6"+
+            "\uADE7\uADE8\uADE9\uADEA\uADEB\uADEC\uADED\uADEE"+
+            "\uADEF\uADF0\uADF1\uADF2\uADF3\uADF4\uADF5\uADF6"+
+            "\uADF7\uADF8\uADF9\uADFA\uADFB\uADFC\uADFD\uADFE"+
+            "\uAEA1\uAEA2\uAEA3\uAEA4\uAEA5\uAEA6\uAEA7\uAEA8"+
+            "\uAEA9\uAEAA\uAEAB\uAEAC\uAEAD\uAEAE\uAEAF\uAEB0"+
+            "\uAEB1\uAEB2\uAEB3\uAEB4\uAEB5\uAEB6\uAEB7\uAEB8"+
+            "\uAEB9\uAEBA\uAEBB\uAEBC\uAEBD\uAEBE\uAEBF\uAEC0"+
+            "\uAEC1\uAEC2\uAEC3\uAEC4\uAEC5\uAEC6\uAEC7\uAEC8"+
+            "\uAEC9\uAECA\uAECB\uAECC\uAECD\uAECE\uAECF\uAED0"+
+            "\uAED1\uAED2\uAED3\uAED4\uAED5\uAED6\uAED7\uAED8"+
+            "\uAED9\uAEDA\uAEDB\uAEDC\uAEDD\uAEDE\uAEDF\uAEE0"+
+            "\uAEE1\uAEE2\uAEE3\uAEE4\uAEE5\uAEE6\uAEE7\uAEE8"+
+            "\uAEE9\uAEEA\uAEEB\uAEEC\uAEED\uAEEE\uAEEF\uAEF0"+
+            "\uAEF1\uAEF2\uAEF3\uAEF4\uAEF5\uAEF6\uAEF7\uAEF8"+
+            "\uAEF9\uAEFA\uAEFB\uAEFC\uAEFD\uAEFE\uAFA1\uAFA2"+
+            "\uAFA3\uAFA4\uAFA5\uAFA6\uAFA7\uAFA8\uAFA9\uAFAA"+
+            "\uAFAB\uAFAC\uAFAD\uAFAE\uAFAF\uAFB0\uAFB1\uAFB2"+
+            "\uAFB3\uAFB4\uAFB5\uAFB6\uAFB7\uAFB8\uAFB9\uAFBA"+
+            "\uAFBB\uAFBC\uAFBD\uAFBE\uAFBF\uAFC0\uAFC1\uAFC2"+
+            "\uAFC3\uAFC4\uAFC5\uAFC6\uAFC7\uAFC8\uAFC9\uAFCA"+
+            "\uAFCB\uAFCC\uAFCD\uAFCE\uAFCF\uAFD0\uAFD1\uAFD2"+
+            "\uAFD3\uAFD4\uAFD5\uAFD6\uAFD7\uAFD8\uAFD9\uAFDA"+
+            "\uAFDB\uAFDC\uAFDD\uAFDE\uAFDF\uAFE0\uAFE1\uAFE2"+
+            "\uAFE3\uAFE4\uAFE5\uAFE6\uAFE7\uAFE8\uAFE9\uAFEA"+
+            "\uAFEB\uAFEC\uAFED\uAFEE\uAFEF\uAFF0\uAFF1\uAFF2"+
+            "\uAFF3\uAFF4\uAFF5\uAFF6\uAFF7\uAFF8\uAFF9\uAFFA"+
+            "\uAFFB\uAFFC\uAFFD\uAFFE\uF8A1\uF8A2\uF8A3\uF8A4"+
+            "\uF8A5\uF8A6\uF8A7\uF8A8\uF8A9\uF8AA\uF8AB\uF8AC"+
+            "\uF8AD\uF8AE\uF8AF\uF8B0\uF8B1\uF8B2\uF8B3\uF8B4"+
+            "\uF8B5\uF8B6\uF8B7\uF8B8\uF8B9\uF8BA\uF8BB\uF8BC"+
+            "\uF8BD\uF8BE\uF8BF\uF8C0\uF8C1\uF8C2\uF8C3\uF8C4"+
+            "\uF8C5\uF8C6\uF8C7\uF8C8\uF8C9\uF8CA\uF8CB\uF8CC"+
+            "\uF8CD\uF8CE\uF8CF\uF8D0\uF8D1\uF8D2\uF8D3\uF8D4"+
+            "\uF8D5\uF8D6\uF8D7\uF8D8\uF8D9\uF8DA\uF8DB\uF8DC"+
+            "\uF8DD\uF8DE\uF8DF\uF8E0\uF8E1\uF8E2\uF8E3\uF8E4"+
+            "\uF8E5\uF8E6\uF8E7\uF8E8\uF8E9\uF8EA\uF8EB\uF8EC"+
+            "\uF8ED\uF8EE\uF8EF\uF8F0\uF8F1\uF8F2\uF8F3\uF8F4"+
+            "\uF8F5\uF8F6\uF8F7\uF8F8\uF8F9\uF8FA\uF8FB\uF8FC"+
+            "\uF8FD\uF8FE\uF9A1\uF9A2\uF9A3\uF9A4\uF9A5\uF9A6"+
+            "\uF9A7\uF9A8\uF9A9\uF9AA\uF9AB\uF9AC\uF9AD\uF9AE"+
+            "\uF9AF\uF9B0\uF9B1\uF9B2\uF9B3\uF9B4\uF9B5\uF9B6"+
+            "\uF9B7\uF9B8\uF9B9\uF9BA\uF9BB\uF9BC\uF9BD\uF9BE"+
+            "\uF9BF\uF9C0\uF9C1\uF9C2\uF9C3\uF9C4\uF9C5\uF9C6"+
+            "\uF9C7\uF9C8\uF9C9\uF9CA\uF9CB\uF9CC\uF9CD\uF9CE"+
+            "\uF9CF\uF9D0\uF9D1\uF9D2\uF9D3\uF9D4\uF9D5\uF9D6"+
+            "\uF9D7\uF9D8\uF9D9\uF9DA\uF9DB\uF9DC\uF9DD\uF9DE"+
+            "\uF9DF\uF9E0\uF9E1\uF9E2\uF9E3\uF9E4\uF9E5\uF9E6"+
+            "\uF9E7\uF9E8\uF9E9\uF9EA\uF9EB\uF9EC\uF9ED\uF9EE"+
+            "\uF9EF\uF9F0\uF9F1\uF9F2\uF9F3\uF9F4\uF9F5\uF9F6"+
+            "\uF9F7\uF9F8\uF9F9\uF9FA\uF9FB\uF9FC\uF9FD\uF9FE"+
+            "\uFAA1\uFAA2\uFAA3\uFAA4\uFAA5\uFAA6\uFAA7\uFAA8"+
+            "\uFAA9\uFAAA\uFAAB\uFAAC\uFAAD\uFAAE\uFAAF\uFAB0"+
+            "\uFAB1\uFAB2\uFAB3\uFAB4\uFAB5\uFAB6\uFAB7\uFAB8"+
+            "\uFAB9\uFABA\uFABB\uFABC\uFABD\uFABE\uFABF\uFAC0"+
+            "\uFAC1\uFAC2\uFAC3\uFAC4\uFAC5\uFAC6\uFAC7\uFAC8"+
+            "\uFAC9\uFACA\uFACB\uFACC\uFACD\uFACE\uFACF\uFAD0"+
+            "\uFAD1\uFAD2\uFAD3\uFAD4\uFAD5\uFAD6\uFAD7\uFAD8"+
+            "\uFAD9\uFADA\uFADB\uFADC\uFADD\uFADE\uFADF\uFAE0"+
+            "\uFAE1\uFAE2\uFAE3\uFAE4\uFAE5\uFAE6\uFAE7\uFAE8"+
+            "\uFAE9\uFAEA\uFAEB\uFAEC\uFAED\uFAEE\uFAEF\uFAF0"+
+            "\uFAF1\uFAF2\uFAF3\uFAF4\uFAF5\uFAF6\uFAF7\uFAF8"+
+            "\uFAF9\uFAFA\uFAFB\uFAFC\uFAFD\uFAFE\uFBA1\uFBA2"+
+            "\uFBA3\uFBA4\uFBA5\uFBA6\uFBA7\uFBA8\uFBA9\uFBAA"+
+            "\uFBAB\uFBAC\uFBAD\uFBAE\uFBAF\uFBB0\uFBB1\uFBB2"+
+            "\uFBB3\uFBB4\uFBB5\uFBB6\uFBB7\uFBB8\uFBB9\uFBBA"+
+            "\uFBBB\uFBBC\uFBBD\uFBBE\uFBBF\uFBC0\uFBC1\uFBC2"+
+            "\uFBC3\uFBC4\uFBC5\uFBC6\uFBC7\uFBC8\uFBC9\uFBCA"+
+            "\uFBCB\uFBCC\uFBCD\uFBCE\uFBCF\uFBD0\uFBD1\uFBD2"+
+            "\uFBD3\uFBD4\uFBD5\uFBD6\uFBD7\uFBD8\uFBD9\uFBDA"+
+            "\uFBDB\uFBDC\uFBDD\uFBDE\uFBDF\uFBE0\uFBE1\uFBE2"+
+            "\uFBE3\uFBE4\uFBE5\uFBE6\uFBE7\uFBE8\uFBE9\uFBEA"+
+            "\uFBEB\uFBEC\uFBED\uFBEE\uFBEF\uFBF0\uFBF1\uFBF2"+
+            "\uFBF3\uFBF4\uFBF5\uFBF6\uFBF7\uFBF8\uFBF9\uFBFA"+
+            "\uFBFB\uFBFC\uFBFD\uFBFE\uFCA1\uFCA2\uFCA3\uFCA4"+
+            "\uFCA5\uFCA6\uFCA7\uFCA8\uFCA9\uFCAA\uFCAB\uFCAC"+
+            "\uFCAD\uFCAE\uFCAF\uFCB0\uFCB1\uFCB2\uFCB3\uFCB4"+
+            "\uFCB5\uFCB6\uFCB7\uFCB8\uFCB9\uFCBA\uFCBB\uFCBC"+
+            "\uFCBD\uFCBE\uFCBF\uFCC0\uFCC1\uFCC2\uFCC3\uFCC4"+
+            "\uFCC5\uFCC6\uFCC7\uFCC8\uFCC9\uFCCA\uFCCB\uFCCC"+
+            "\uFCCD\uFCCE\uFCCF\uFCD0\uFCD1\uFCD2\uFCD3\uFCD4"+
+            "\uFCD5\uFCD6\uFCD7\uFCD8\uFCD9\uFCDA\uFCDB\uFCDC"+
+            "\uFCDD\uFCDE\uFCDF\uFCE0\uFCE1\uFCE2\uFCE3\uFCE4"+
+            "\uFCE5\uFCE6\uFCE7\uFCE8\uFCE9\uFCEA\uFCEB\uFCEC"+
+            "\uFCED\uFCEE\uFCEF\uFCF0\uFCF1\uFCF2\uFCF3\uFCF4"+
+            "\uFCF5\uFCF6\uFCF7\uFCF8\uFCF9\uFCFA\uFCFB\uFCFC"+
+            "\uFCFD\uFCFE\uFDA1\uFDA2\uFDA3\uFDA4\uFDA5\uFDA6"+
+            "\uFDA7\uFDA8\uFDA9\uFDAA\uFDAB\uFDAC\uFDAD\uFDAE"+
+            "\uFDAF\uFDB0\uFDB1\uFDB2\uFDB3\uFDB4\uFDB5\uFDB6"+
+            "\uFDB7\uFDB8\uFDB9\uFDBA\uFDBB\uFDBC\uFDBD\uFDBE"+
+            "\uFDBF\uFDC0\uFDC1\uFDC2\uFDC3\uFDC4\uFDC5\uFDC6"+
+            "\uFDC7\uFDC8\uFDC9\uFDCA\uFDCB\uFDCC\uFDCD\uFDCE"+
+            "\uFDCF\uFDD0\uFDD1\uFDD2\uFDD3\uFDD4\uFDD5\uFDD6"+
+            "\uFDD7\uFDD8\uFDD9\uFDDA\uFDDB\uFDDC\uFDDD\uFDDE"+
+            "\uFDDF\uFDE0\uFDE1\uFDE2\uFDE3\uFDE4\uFDE5\uFDE6"+
+            "\uFDE7\uFDE8\uFDE9\uFDEA\uFDEB\uFDEC\uFDED\uFDEE"+
+            "\uFDEF\uFDF0\uFDF1\uFDF2\uFDF3\uFDF4\uFDF5\uFDF6"+
+            "\uFDF7\uFDF8\uFDF9\uFDFA\uFDFB\uFDFC\uFDFD\uFDFE"+
+            "\uFEA1\uFEA2\uFEA3\uFEA4\uFEA5\uFEA6\uFEA7\uFEA8"+
+            "\uFEA9\uFEAA\uFEAB\uFEAC\uFEAD\uFEAE\uFEAF\uFEB0"+
+            "\uFEB1\uFEB2\uFEB3\uFEB4\uFEB5\uFEB6\uFEB7\uFEB8"+
+            "\uFEB9\uFEBA\uFEBB\uFEBC\uFEBD\uFEBE\uFEBF\uFEC0"+
+            "\uFEC1\uFEC2\uFEC3\uFEC4\uFEC5\uFEC6\uFEC7\uFEC8"+
+            "\uFEC9\uFECA\uFECB\uFECC\uFECD\uFECE\uFECF\uFED0"+
+            "\uFED1\uFED2\uFED3\uFED4\uFED5\uFED6\uFED7\uFED8"+
+            "\uFED9\uFEDA\uFEDB\uFEDC\uFEDD\uFEDE\uFEDF\uFEE0"+
+            "\uFEE1\uFEE2\uFEE3\uFEE4\uFEE5\uFEE6\uFEE7\uFEE8"+
+            "\uFEE9\uFEEA\uFEEB\uFEEC\uFEED\uFEEE\uFEEF\uFEF0"+
+            "\uFEF1\uFEF2\uFEF3\uFEF4\uFEF5\uFEF6\uFEF7\uFEF8"+
+            "\uFEF9\uFEFA\uFEFB\uFEFC\uFEFD\uFEFE\uA140\uA141"+
+            "\uA142\uA143\uA144\uA145\uA146\uA147\uA148\uA149"+
+            "\uA14A\uA14B\uA14C\uA14D\uA14E\uA14F\uA150\uA151"+
+            "\uA152\uA153\uA154\uA155\uA156\uA157\uA158\uA159"+
+            "\uA15A\uA15B\uA15C\uA15D\uA15E\uA15F\uA160\uA161"+
+            "\uA162\uA163\uA164\uA165\uA166\uA167\uA168\uA169"+
+            "\uA16A\uA16B\uA16C\uA16D\uA16E\uA16F\uA170\uA171"+
+            "\uA172\uA173\uA174\uA175\uA176\uA177\uA178\uA179"+
+            "\uA17A\uA17B\uA17C\uA17D\uA17E\uA180\uA181\uA182"+
+            "\uA183\uA184\uA185\uA186\uA187\uA188\uA189\uA18A"+
+            "\uA18B\uA18C\uA18D\uA18E\uA18F\uA190\uA191\uA192"+
+            "\uA193\uA194\uA195\uA196\uA197\uA198\uA199\uA19A"+
+            "\uA19B\uA19C\uA19D\uA19E\uA19F\uA1A0\uA240\uA241"+
+            "\uA242\uA243\uA244\uA245\uA246\uA247\uA248\uA249"+
+            "\uA24A\uA24B\uA24C\uA24D\uA24E\uA24F\uA250\uA251"+
+            "\uA252\uA253\uA254\uA255\uA256\uA257\uA258\uA259"+
+            "\uA25A\uA25B\uA25C\uA25D\uA25E\uA25F\uA260\uA261"+
+            "\uA262\uA263\uA264\uA265\uA266\uA267\uA268\uA269"+
+            "\uA26A\uA26B\uA26C\uA26D\uA26E\uA26F\uA270\uA271"+
+            "\uA272\uA273\uA274\uA275\uA276\uA277\uA278\uA279"+
+            "\uA27A\uA27B\uA27C\uA27D\uA27E\uA280\uA281\uA282"+
+            "\uA283\uA284\uA285\uA286\uA287\uA288\uA289\uA28A"+
+            "\uA28B\uA28C\uA28D\uA28E\uA28F\uA290\uA291\uA292"+
+            "\uA293\uA294\uA295\uA296\uA297\uA298\uA299\uA29A"+
+            "\uA29B\uA29C\uA29D\uA29E\uA29F\uA2A0\uA340\uA341"+
+            "\uA342\uA343\uA344\uA345\uA346\uA347\uA348\uA349"+
+            "\uA34A\uA34B\uA34C\uA34D\uA34E\uA34F\uA350\uA351"+
+            "\uA352\uA353\uA354\uA355\uA356\uA357\uA358\uA359"+
+            "\uA35A\uA35B\uA35C\uA35D\uA35E\uA35F\uA360\uA361"+
+            "\uA362\uA363\uA364\uA365\uA366\uA367\uA368\uA369"+
+            "\uA36A\uA36B\uA36C\uA36D\uA36E\uA36F\uA370\uA371"+
+            "\uA372\uA373\uA374\uA375\uA376\uA377\uA378\uA379"+
+            "\uA37A\uA37B\uA37C\uA37D\uA37E\uA380\uA381\uA382"+
+            "\uA383\uA384\uA385\uA386\uA387\uA388\uA389\uA38A"+
+            "\uA38B\uA38C\uA38D\uA38E\uA38F\uA390\uA391\uA392"+
+            "\uA393\uA394\uA395\uA396\uA397\uA398\uA399\uA39A"+
+            "\uA39B\uA39C\uA39D\uA39E\uA39F\uA3A0\uA440\uA441"+
+            "\uA442\uA443\uA444\uA445\uA446\uA447\uA448\uA449"+
+            "\uA44A\uA44B\uA44C\uA44D\uA44E\uA44F\uA450\uA451"+
+            "\uA452\uA453\uA454\uA455\uA456\uA457\uA458\uA459"+
+            "\uA45A\uA45B\uA45C\uA45D\uA45E\uA45F\uA460\uA461"+
+            "\uA462\uA463\uA464\uA465\uA466\uA467\uA468\uA469"+
+            "\uA46A\uA46B\uA46C\uA46D\uA46E\uA46F\uA470\uA471"+
+            "\uA472\uA473\uA474\uA475\uA476\uA477\uA478\uA479"+
+            "\uA47A\uA47B\uA47C\uA47D\uA47E\uA480\uA481\uA482"+
+            "\uA483\uA484\uA485\uA486\uA487\uA488\uA489\uA48A"+
+            "\uA48B\uA48C\uA48D\uA48E\uA48F\uA490\uA491\uA492"+
+            "\uA493\uA494\uA495\uA496\uA497\uA498\uA499\uA49A"+
+            "\uA49B\uA49C\uA49D\uA49E\uA49F\uA4A0\uA540\uA541"+
+            "\uA542\uA543\uA544\uA545\uA546\uA547\uA548\uA549"+
+            "\uA54A\uA54B\uA54C\uA54D\uA54E\uA54F\uA550\uA551"+
+            "\uA552\uA553\uA554\uA555\uA556\uA557\uA558\uA559"+
+            "\uA55A\uA55B\uA55C\uA55D\uA55E\uA55F\uA560\uA561"+
+            "\uA562\uA563\uA564\uA565\uA566\uA567\uA568\uA569"+
+            "\uA56A\uA56B\uA56C\uA56D\uA56E\uA56F\uA570\uA571"+
+            "\uA572\uA573\uA574\uA575\uA576\uA577\uA578\uA579"+
+            "\uA57A\uA57B\uA57C\uA57D\uA57E\uA580\uA581\uA582"+
+            "\uA583\uA584\uA585\uA586\uA587\uA588\uA589\uA58A"+
+            "\uA58B\uA58C\uA58D\uA58E\uA58F\uA590\uA591\uA592"+
+            "\uA593\uA594\uA595\uA596\uA597\uA598\uA599\uA59A"+
+            "\uA59B\uA59C\uA59D\uA59E\uA59F\uA5A0\uA640\uA641"+
+            "\uA642\uA643\uA644\uA645\uA646\uA647\uA648\uA649"+
+            "\uA64A\uA64B\uA64C\uA64D\uA64E\uA64F\uA650\uA651"+
+            "\uA652\uA653\uA654\uA655\uA656\uA657\uA658\uA659"+
+            "\uA65A\uA65B\uA65C\uA65D\uA65E\uA65F\uA660\uA661"+
+            "\uA662\uA663\uA664\uA665\uA666\uA667\uA668\uA669"+
+            "\uA66A\uA66B\uA66C\uA66D\uA66E\uA66F\uA670\uA671"+
+            "\uA672\uA673\uA674\uA675\uA676\uA677\uA678\uA679"+
+            "\uA67A\uA67B\uA67C\uA67D\uA67E\uA680\uA681\uA682"+
+            "\uA683\uA684\uA685\uA686\uA687\uA688\uA689\uA68A"+
+            "\uA68B\uA68C\uA68D\uA68E\uA68F\uA690\uA691\uA692"+
+            "\uA693\uA694\uA695\uA696\uA697\uA698\uA699\uA69A"+
+            "\uA69B\uA69C\uA69D\uA69E\uA69F\uA6A0\uA740\uA741"+
+            "\uA742\uA743\uA744\uA745\uA746\uA747\uA748\uA749"+
+            "\uA74A\uA74B\uA74C\uA74D\uA74E\uA74F\uA750\uA751"+
+            "\uA752\uA753\uA754\uA755\uA756\uA757\uA758\uA759"+
+            "\uA75A\uA75B\uA75C\uA75D\uA75E\uA75F\uA760\uA761"+
+            "\uA762\uA763\uA764\uA765\uA766\uA767\uA768\uA769"+
+            "\uA76A\uA76B\uA76C\uA76D\uA76E\uA76F\uA770\uA771"+
+            "\uA772\uA773\uA774\uA775\uA776\uA777\uA778\uA779"+
+            "\uA77A\uA77B\uA77C\uA77D\uA77E\uA780\uA781\uA782"+
+            "\uA783\uA784\uA785\uA786\uA787\uA788\uA789\uA78A"+
+            "\uA78B\uA78C\uA78D\uA78E\uA78F\uA790\uA791\uA792"+
+            "\uA793\uA794\uA795\uA796\uA797\uA798\uA799\uA79A"+
+            "\uA79B\uA79C\uA79D\uA79E\uA79F\uA7A0\uA2AB\uA2AC"+
+            "\uA2AD\uA2AE\uA2AF\uA2B0\u0000\uA2E4\uA2EF\uA2F0"+
+            "\uA2FD\uA2FE\uA4F4\uA4F5\uA4F6\uA4F7\uA4F8\uA4F9"+
+            "\uA4FA\uA4FB\uA4FC\uA4FD\uA4FE\uA5F7\uA5F8\uA5F9"+
+            "\uA5FA\uA5FB\uA5FC\uA5FD\uA5FE\uA6B9\uA6BA\uA6BB"+
+            "\uA6BC\uA6BD\uA6BE\uA6BF\uA6C0\uA6D9\uA6DA\uA6DB"+
+            "\uA6DC\uA6DD\uA6DE\uA6DF\uA6EC\uA6ED\uA6F3\uA6F6"+
+            "\uA6F7\uA6F8\uA6F9\uA6FA\uA6FB\uA6FC\uA6FD\uA6FE"+
+            "\uA7C2\uA7C3\uA7C4\uA7C5\uA7C6\uA7C7\uA7C8\uA7C9"+
+            "\uA7CA\uA7CB\uA7CC\uA7CD\uA7CE\uA7CF\uA7D0\uA7F2"+
+            "\uA7F3\uA7F4\uA7F5\uA7F6\uA7F7\uA7F8\uA7F9\uA7FA"+
+            "\uA7FB\uA7FC\uA7FD\uA7FE\uA896\uA897\uA898\uA899"+
+            "\uA89A\uA89B\uA89C\uA89D\uA89E\uA89F\uA8A0\uA8BC"+
+            "\u0000\uA8C1\uA8C2\uA8C3\uA8C4\uA8EA\uA8EB\uA8EC"+
+            "\uA8ED\uA8EE\uA8EF\uA8F0\uA8F1\uA8F2\uA8F3\uA8F4"+
+            "\uA8F5\uA8F6\uA8F7\uA8F8\uA8F9\uA8FA\uA8FB\uA8FC"+
+            "\uA8FD\uA8FE\uA958\uA95B\uA95D\uA95E\uA95F\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uA997\uA998\uA999\uA99A"+
+            "\uA99B\uA99C\uA99D\uA99E\uA99F\uA9A0\uA9A1\uA9A2"+
+            "\uA9A3\uA9F0\uA9F1\uA9F2\uA9F3\uA9F4\uA9F5\uA9F6"+
+            "\uA9F7\uA9F8\uA9F9\uA9FA\uA9FB\uA9FC\uA9FD\uA9FE"+
+            "\uD7FA\uD7FB\uD7FC\uD7FD\uD7FE\u0000\uFE51\uFE52"+
+            "\uFE53\u0000\u0000\u0000\u0000\u0000\uFE59\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uFE61\u0000"+
+            "\u0000\u0000\u0000\uFE66\uFE67\u0000\u0000\u0000"+
+            "\u0000\uFE6C\uFE6D\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uFE76\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uFE7E\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uFE90\uFE91\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uFEA0\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uFD9C\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uFD9D\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uFD9E\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uFD9F"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uFDA0\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uFE40\uFE41\uFE42\uFE43"+
+            "\u0000\uFE44\u0000\uFE45\uFE46\u0000\u0000\u0000"+
+            "\uFE47\u0000\u0000\u0000\u0000\u0000\u0000\uFE48"+
+            "\uFE49\uFE4A\u0000\uFE4B\uFE4C\u0000\u0000\uFE4D"+
+            "\uFE4E\uFE4F\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000";
+
+        private final static String innerIndex8=
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uA955\uA6F2\u0000\uA6F4\uA6F5\uA6E0\uA6E1\uA6F0"+
+            "\uA6F1\uA6E2\uA6E3\uA6EE\uA6EF\uA6E6\uA6E7\uA6E4"+
+            "\uA6E5\uA6E8\uA6E9\uA6EA\uA6EB\u0000\u0000\u0000"+
+            "\u0000\uA968\uA969\uA96A\uA96B\uA96C\uA96D\uA96E"+
+            "\uA96F\uA970\uA971\u0000\uA972\uA973\uA974\uA975"+
+            "\u0000\uA976\uA977\uA978\uA979\uA97A\uA97B\uA97C"+
+            "\uA97D\uA97E\uA980\uA981\uA982\uA983\uA984\u0000"+
+            "\uA985\uA986\uA987\uA988\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uA3A1\uA3A2\uA3A3\uA1E7\uA3A5\uA3A6\uA3A7"+
+            "\uA3A8\uA3A9\uA3AA\uA3AB\uA3AC\uA3AD\uA3AE\uA3AF"+
+            "\uA3B0\uA3B1\uA3B2\uA3B3\uA3B4\uA3B5\uA3B6\uA3B7"+
+            "\uA3B8\uA3B9\uA3BA\uA3BB\uA3BC\uA3BD\uA3BE\uA3BF"+
+            "\uA3C0\uA3C1\uA3C2\uA3C3\uA3C4\uA3C5\uA3C6\uA3C7"+
+            "\uA3C8\uA3C9\uA3CA\uA3CB\uA3CC\uA3CD\uA3CE\uA3CF"+
+            "\uA3D0\uA3D1\uA3D2\uA3D3\uA3D4\uA3D5\uA3D6\uA3D7"+
+            "\uA3D8\uA3D9\uA3DA\uA3DB\uA3DC\uA3DD\uA3DE\uA3DF"+
+            "\uA3E0\uA3E1\uA3E2\uA3E3\uA3E4\uA3E5\uA3E6\uA3E7"+
+            "\uA3E8\uA3E9\uA3EA\uA3EB\uA3EC\uA3ED\uA3EE\uA3EF"+
+            "\uA3F0\uA3F1\uA3F2\uA3F3\uA3F4\uA3F5\uA3F6\uA3F7"+
+            "\uA3F8\uA3F9\uA3FA\uA3FB\uA3FC\uA3FD\uA1AB\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uA1E9\uA1EA\uA956\uA3FE\uA957\uA3A4\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000";
+
+        private final static short index1[] = {
+            1, 2, 3, 4, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+            6, 7, 8, 9, 10, 11, 12, 0, 0, 0, 0, 0, 0, 0, 13, 14,
+            15, 16, 17, 18, 19, 20, 21, 0, 0, 22, 23, 24, 25, 0, 0, 0,
+            26, 27, 0, 28, 29, 0, 30, 31, 0, 32, 0, 0, 33, 34, 35, 36,
+            37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
+            53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68,
+            69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
+            85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100,
+            101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116,
+            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+            117, 118, 119, 120, 121, 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, 0,
+            0, 0, 0, 0, 0, 0, 0, 0, 0, 126, 127, 0, 0, 0, 128, 129
+        };
+
+        private final static String index2[] = {
+            innerIndex0,
+            innerIndex1,
+            innerIndex2,
+            innerIndex3,
+            innerIndex4,
+            innerIndex5,
+            innerIndex6,
+            innerIndex7,
+            innerIndex8
+        };
+
+        /* The default implementation creates a decoder and we don't have one */
+        public boolean isLegalReplacement(byte[] repl) {
+            return true;
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.desktop/unix/classes/sun/font/X11GB18030_1.java	Wed Jul 05 20:33:35 2017 +0200
@@ -0,0 +1,5270 @@
+/*
+ * Copyright (c) 2001, 2005, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package sun.font;
+
+import java.nio.charset.Charset;
+import java.nio.charset.CharsetEncoder;
+import java.nio.charset.CharsetDecoder;
+
+public class X11GB18030_1 extends Charset {
+    public X11GB18030_1 () {
+        super("X11GB18030_1", null);
+    }
+
+    public CharsetEncoder newEncoder() {
+        return new Encoder(this);
+    }
+
+    /* Seems like supporting a decoder is required, but we aren't going
+     * to be publically exposing this class, so no need to waste work
+     */
+    public CharsetDecoder newDecoder() {
+        throw new Error("Decoder is not implemented for X11GB18030_1 Charset");
+    }
+
+    public boolean contains(Charset cs) {
+        return cs instanceof X11GB18030_1;
+    }
+    private static class Encoder extends DoubleByteEncoder {
+        public Encoder(Charset cs) {
+            super(cs, index1, index2);
+        }
+        protected int encodeSingle(char inputChar) {
+            return -1;
+        }
+        private final static String innerIndex0=
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007"+
+            "\b\t\n\u000B\f\r\u000E\u000F"+
+            "\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017"+
+            "\u0018\u0019\u001A\u001B\u001C\u001D\u001E\u001F"+
+            "\u0020\u0021\"\u0023\u0000\u0024\u0025\u0000"+
+            "\u0000\u0026\'\u0028\u0029\u002A\u002B\u002C"+
+            "\u0000\u0000\u002D\u002E\u002F\u0030\u0031\u0000"+
+            "\u0032\u0033\u0034\u0035\u0036\u0037\u0038\u0039"+
+            "\u003A\u003B\u003C\u003D\u003E\u003F\u0040\u0041"+
+            "\u0042\u0043\u0044\u0045\u0046\u0047\u0048\u0049"+
+            "\u004A\u004B\u004C\u004D\u004E\u004F\u0050\u0000"+
+            "\u0051\u0052\u0053\u0054\u0055\u0056\u0057\u0058"+
+            "\u0000\u0000\u0059\u005A\u005B\\\u005D\u005E"+
+            "\u0000\u0000\u0000\u005F\u0000\u0000\u0060\u0061"+
+            "\u0062\u0063\u0000\u0000\u0064\u0065\u0066\u0000"+
+            "\u0067\u0000\u0000\u0068\u0000\u0069\u006A\u006B"+
+            "\u006C\u0000\u006D\u006E\u006F\u0070\u0071\u0072"+
+            "\u0073\u0074\u0075\u0076\u0077\u0078\u0079\u007A"+
+            "\u007B\u007C\u007D\u0000\u007E\u007F\u0080\u0081"+
+            "\u0082\u0083\u0084\u0000\u0085\u0086\u0087\u0088"+
+            "\u0089\u008A\u008B\u008C\u008D\u008E\u008F\u0090"+
+            "\u0091\u0092\u0093\u0000\u0094\u0095\u0096\u0097"+
+            "\u0098\u0099\u009A\u009B\u009C\u009D\u009E\u009F"+
+            "\u00A0\u00A1\u00A2\u00A3\u00A4\u00A5\u00A6\u00A7"+
+            "\u00A8\u00A9\u00AA\u00AB\u0000\u00AC\u00AD\u00AE"+
+            "\u0000\u00AF\u00B0\u00B1\u00B2\u0000\u00B3\u00B4"+
+            "\u00B5\u00B6\u00B7\u00B8\u00B9\u00BA\u00BB\u00BC"+
+            "\u00BD\u00BE\u00BF\u00C0\u00C1\u00C2\u00C3\u00C4"+
+            "\u00C5\u00C6\u00C7\u00C8\u00C9\u00CA\u00CB\u00CC"+
+            "\u00CD\u00CE\u00CF\u0000\u00D0\u00D1\u00D2\u00D3"+
+            "\u00D4\u00D5\u00D6\u00D7\u00D8\u00D9\u00DA\u00DB"+
+            "\u00DC\u00DD\u00DE\u00DF\u00E0\u00E1\u00E2\u00E3"+
+            "\u00E4\u00E5\u00E6\u00E7\u00E8\u00E9\u00EA\u00EB"+
+            "\u00EC\u00ED\u00EE\u00EF\u00F0\u00F1\u00F2\u00F3"+
+            "\u00F4\u00F5\u00F6\u00F7\u00F8\u00F9\u00FA\u00FB"+
+            "\u00FC\u00FD\u00FE\u00FF\u0100\u0101\u0102\u0103"+
+            "\u0104\u0105\u0106\u0107\u0108\u0109\u010A\u010B"+
+            "\u010C\u010D\u010E\u010F\u0110\u0111\u0112\u0113"+
+            "\u0114\u0115\u0116\u0117\u0118\u0119\u011A\u011B"+
+            "\u011C\u011D\u011E\u011F\u0120\u0121\u0122\u0123"+
+            "\u0124\u0125\u0126\u0127\u0128\u0129\u012A\u012B"+
+            "\u012C\u012D\u012E\u012F\u0130\u0131\u0000\u0132"+
+            "\u0000\u0133\u0000\u0134\u0000\u0135\u0000\u0136"+
+            "\u0000\u0137\u0000\u0138\u0000\u0139\u013A\u013B"+
+            "\u013C\u013D\u013E\u013F\u0140\u0141\u0142\u0143"+
+            "\u0144\u0145\u0146\u0147\u0148\u0149\u014A\u014B"+
+            "\u014C\u014D\u014E\u014F\u0150\u0151\u0152\u0153"+
+            "\u0154\u0000\u0155\u0156\u0157\u0158\u0159\u015A"+
+            "\u015B\u015C\u015D\u015E\u015F\u0160\u0161\u0162"+
+            "\u0163\u0164\u0165\u0166\u0167\u0168\u0169\u016A"+
+            "\u016B\u016C\u016D\u016E\u016F\u0170\u0171\u0172"+
+            "\u0173\u0174\u0175\u0176\u0177\u0178\u0179\u017A"+
+            "\u017B\u017C\u017D\u017E\u017F\u0180\u0181\u0182"+
+            "\u0183\u0184\u0185\u0186\u0187\u0188\u0189\u018A"+
+            "\u018B\u018C\u018D\u018E\u018F\u0190\u0191\u0192"+
+            "\u0193\u0194\u0195\u0196\u0197\u0198\u0199\u019A"+
+            "\u019B\u019C\u019D\u019E\u019F\u01A0\u01A1\u01A2"+
+            "\u01A3\u01A4\u01A5\u01A6\u01A7\u01A8\u01A9\u01AA"+
+            "\u01AB\u0000\u01AC\u01AD\u01AE\u01AF\u01B0\u01B1"+
+            "\u01B2\u01B3\u01B4\u01B5\u01B6\u01B7\u01B8\u01B9"+
+            "\u01BA\u0000\u01BB\u01BC\u01BD\u01BE\u01BF\u01C0"+
+            "\u01C1\u01C2\u01C3\u01C4\u01C5\u01C6\u01C7\u01C8"+
+            "\u01C9\u01CA\u01CB\u01CC\u01CD\u01CE\u01CF\u01D0"+
+            "\u01D1\u01D2\u01D3\u01D4\u01D5\u01D6\u01D7\u01D8"+
+            "\u01D9\u01DA\u01DB\u01DC\u01DD\u01DE\u01DF\u01E0"+
+            "\u01E1\u01E2\u01E3\u01E4\u01E5\u01E6\u01E7\u01E8"+
+            "\u01E9\u01EA\u01EB\u01EC\u01ED\u01EE\u01EF\u01F0"+
+            "\u01F1\u01F2\u01F3\u01F4\u01F5\u01F6\u01F7\u01F8"+
+            "\u01F9\u01FA\u01FB\u01FC\u01FD\u01FE\u01FF\u0200"+
+            "\u0201\u0202\u0203\u0204\u0205\u0206\u0207\u0208"+
+            "\u0209\u020A\u020B\u020C\u020D\u020E\u020F\u0210"+
+            "\u0211\u0212\u0213\u0214\u0215\u0216\u0217\u0218"+
+            "\u0219\u021A\u021B\u021C\u021D\u021E\u021F\u0000"+
+            "\u0220\u0000\u0000\u0000\u0221\u0222\u0223\u0224"+
+            "\u0225\u0226\u0227\u0228\u0229\u022A\u022B\u022C"+
+            "\u022D\u0000\u022E\u022F\u0230\u0231\u0232\u0233"+
+            "\u0234\u0235\u0236\u0237\u0238\u0239\u023A\u023B"+
+            "\u023C\u023D\u023E\u023F\u0240\u0241\u0242\u0243"+
+            "\u0244\u0245\u0246\u0247\u0248\u0249\u024A\u024B"+
+            "\u024C\u024D\u024E\u024F\u0250\u0251\u0252\u0253"+
+            "\u0254\u0255\u0256\u0257\u0258\u0259\u025A\u025B"+
+            "\u025C\u025D\u025E\u025F\u0260\u0261\u0262\u0263"+
+            "\u0264\u0265\u0266\u0267\u0268\u0269\u026A\u026B"+
+            "\u026C\u026D\u026E\u026F\u0270\u0271\u0272\u0273"+
+            "\u0274\u0275\u0276\u0277\u0278\u0279\u027A\u027B"+
+            "\u027C\u027D\u027E\u027F\u0280\u0281\u0282\u0283"+
+            "\u0284\u0285\u0286\u0287\u0288\u0289\u028A\u028B"+
+            "\u028C\u028D\u028E\u028F\u0290\u0291\u0292\u0293"+
+            "\u0294\u0295\u0296\u0297\u0298\u0299\u029A\u029B"+
+            "\u029C\u029D\u029E\u029F\u02A0\u02A1\u02A2\u02A3"+
+            "\u02A4\u02A5\u02A6\u02A7\u02A8\u02A9\u02AA\u02AB"+
+            "\u02AC\u02AD\u02AE\u02AF\u02B0\u02B1\u02B2\u02B3"+
+            "\u02B4\u02B5\u02B6\u02B7\u02B8\u02B9\u02BA\u02BB"+
+            "\u02BC\u02BD\u02BE\u02BF\u02C0\u02C1\u02C2\u02C3"+
+            "\u02C4\u02C5\u02C6\u02C7\u02C8\u02C9\u02CA\u02CB"+
+            "\u02CC\u02CD\u02CE\u02CF\u02D0\u02D1\u02D2\u02D3"+
+            "\u02D4\u02D5\u02D6\u02D7\u02D8\u02D9\u02DA\u02DB"+
+            "\u02DC\u02DD\u02DE\u02DF\u02E0\u02E1\u02E2\u02E3"+
+            "\u02E4\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u02E5\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u02E6\u02E7\u02E8\u02E9\u02EA\u02EB"+
+            "\u02EC\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u02ED\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u02EE\u02EF\u02F0\u02F1\u02F2\u02F3"+
+            "\u02F4\u02F5\u02F6\u02F7\u02F8\u02F9\u02FA\u02FB"+
+            "\u02FC\u02FD\u02FE\u02FF\u0300\u0301\u0302\u0303"+
+            "\u0304\u0305\u0306\u0307\u0308\u0309\u030A\u030B"+
+            "\u030C\u030D\u030E\u030F\u0310\u0311\u0312\u0313"+
+            "\u0314\u0315\u0316\u0317\u0318\u0319\u031A\u031B"+
+            "\u031C\u031D\u031E\u031F\u0320\u0321\u0322\u0323"+
+            "\u0324\u0000\u0325\u0326\u0327\u0328\u0329\u032A"+
+            "\u032B\u032C\u032D\u032E\u032F\u0330\u0331\u0332"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0333\u0000\u0334\u0335\u0336\u0337\u0338\u0339"+
+            "\u033A\u033B\u033C\u033D\u033E\u033F\u0340\u0341"+
+            "\u0342\u0343\u0344\u0345\u0346\u0347\u0348\u0349"+
+            "\u034A\u034B\u034C\u034D\u034E\u034F\u0350\u0351"+
+            "\u0352\u0353\u0354\u0355\u0356\u0357\u0358\u0359"+
+            "\u035A\u035B\u035C\u035D\u035E\u035F\u0360\u0361"+
+            "\u0362\u0363\u0364\u0365\u0366\u0367\u0368\u0369"+
+            "\u036A\u036B\u036C\u036D\u036E\u036F\u0370\u0371"+
+            "\u0372\u0373\u0374\u0375\u0376\u0377\u0378\u0379"+
+            "\u037A\u037B\u037C\u037D\u037E\u037F\u0380\u0381"+
+            "\u0382\u0383\u0384\u0385\u0386\u0387\u0388\u0389"+
+            "\u038A\u038B\u038C\u038D\u038E\u038F\u0390\u0391"+
+            "\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399"+
+            "\u039A\u039B\u039C\u039D\u039E\u039F\u03A0\u03A1"+
+            "\u03A2\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9"+
+            "\u03AA\u03AB\u03AC\u03AD\u03AE\u03AF\u03B0\u03B1"+
+            "\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9"+
+            "\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1"+
+            "\u03C2\u03C3\u03C4\u03C5\u03C6\u03C7\u03C8\u03C9"+
+            "\u03CA\u03CB\u03CC\u03CD\u03CE\u03CF\u03D0\u03D1"+
+            "\u03D2\u03D3\u03D4\u03D5\u03D6\u03D7\u03D8\u03D9"+
+            "\u03DA\u03DB\u03DC\u03DD\u03DE\u03DF\u03E0\u03E1"+
+            "\u03E2\u03E3\u03E4\u03E5\u03E6\u03E7\u03E8\u03E9"+
+            "\u03EA\u03EB\u03EC\u03ED\u03EE\u03EF\u03F0\u03F1"+
+            "\u03F2\u03F3\u03F4\u03F5\u03F6\u03F7\u03F8\u03F9"+
+            "\u03FA\u03FB\u03FC\u03FD\u03FE\u03FF\u0400\u0401"+
+            "\u0402\u0403\u0404\u0405\u0406\u0407\u0408\u0409"+
+            "\u040A\u040B\u040C\u040D\u040E\u040F\u0410\u0411"+
+            "\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419"+
+            "\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421"+
+            "\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429"+
+            "\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431"+
+            "\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439"+
+            "\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441"+
+            "\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449"+
+            "\u044A\u044B\u044C\u044D\u044E\u044F\u0450\u0451"+
+            "\u0452\u0453\u0454\u0455\u0456\u0457\u0458\u0459"+
+            "\u045A\u045B\u045C\u045D\u045E\u045F\u0460\u0461"+
+            "\u0462\u0463\u0464\u0465\u0466\u0467\u0468\u0469"+
+            "\u046A\u046B\u046C\u046D\u046E\u046F\u0470\u0471"+
+            "\u0472\u0473\u0474\u0475\u0476\u0477\u0478\u0479"+
+            "\u047A\u047B\u047C\u047D\u047E\u047F\u0480\u0481"+
+            "\u0482\u0483\u0484\u0485\u0486\u0487\u0488\u0489"+
+            "\u048A\u048B\u048C\u048D\u048E\u048F\u0490\u0491"+
+            "\u0492\u0493\u0494\u0495\u0496\u0497\u0498\u0499"+
+            "\u049A\u049B\u049C\u049D\u049E\u049F\u04A0\u04A1"+
+            "\u04A2\u04A3\u04A4\u04A5\u04A6\u04A7\u04A8\u04A9"+
+            "\u04AA\u04AB\u04AC\u04AD\u04AE\u04AF\u04B0\u04B1"+
+            "\u04B2\u04B3\u04B4\u04B5\u04B6\u04B7\u04B8\u04B9"+
+            "\u04BA\u04BB\u04BC\u04BD\u04BE\u04BF\u04C0\u04C1"+
+            "\u04C2\u04C3\u04C4\u04C5\u04C6\u04C7\u04C8\u04C9"+
+            "\u04CA\u04CB\u04CC\u04CD\u04CE\u04CF\u04D0\u04D1"+
+            "\u04D2\u04D3\u04D4\u04D5\u04D6\u04D7\u04D8\u04D9"+
+            "\u04DA\u04DB\u04DC\u04DD\u04DE\u04DF\u04E0\u04E1"+
+            "\u04E2\u04E3\u04E4\u04E5\u04E6\u04E7\u04E8\u04E9"+
+            "\u04EA\u04EB\u04EC\u04ED\u04EE\u04EF\u04F0\u04F1"+
+            "\u04F2\u04F3\u04F4\u04F5\u04F6\u04F7\u04F8\u04F9"+
+            "\u04FA\u04FB\u04FC\u04FD\u04FE\u04FF\u0500\u0501"+
+            "\u0502\u0503\u0504\u0505\u0506\u0507\u0508\u0509"+
+            "\u050A\u050B\u050C\u050D\u050E\u050F\u0510\u0511"+
+            "\u0512\u0513\u0514\u0515\u0516\u0517\u0518\u0519"+
+            "\u051A\u051B\u051C\u051D\u051E\u051F\u0520\u0521"+
+            "\u0522\u0523\u0524\u0525\u0526\u0527\u0528\u0529"+
+            "\u052A\u052B\u052C\u052D\u052E\u052F\u0530\u0531"+
+            "\u0532\u0533\u0534\u0535\u0536\u0537\u0538\u0539"+
+            "\u053A\u053B\u053C\u053D\u053E\u053F\u0540\u0541"+
+            "\u0542\u0543\u0544\u0545\u0546\u0547\u0548\u0549"+
+            "\u054A\u054B\u054C\u054D\u054E\u054F\u0550\u0551"+
+            "\u0552\u0553\u0554\u0555\u0556\u0557\u0558\u0559"+
+            "\u055A\u055B\u055C\u055D\u055E\u055F\u0560\u0561"+
+            "\u0562\u0563\u0564\u0565\u0566\u0567\u0568\u0569"+
+            "\u056A\u056B\u056C\u056D\u056E\u056F\u0570\u0571"+
+            "\u0572\u0573\u0574\u0575\u0576\u0577\u0578\u0579"+
+            "\u057A\u057B\u057C\u057D\u057E\u057F\u0580\u0581"+
+            "\u0582\u0583\u0584\u0585\u0586\u0587\u0588\u0589"+
+            "\u058A\u058B\u058C\u058D\u058E\u058F\u0590\u0591"+
+            "\u0592\u0593\u0594\u0595\u0596\u0597\u0598\u0599"+
+            "\u059A\u059B\u059C\u059D\u059E\u059F\u05A0\u05A1"+
+            "\u05A2\u05A3\u05A4\u05A5\u05A6\u05A7\u05A8\u05A9"+
+            "\u05AA\u05AB\u05AC\u05AD\u05AE\u05AF\u05B0\u05B1"+
+            "\u05B2\u05B3\u05B4\u05B5\u05B6\u05B7\u05B8\u05B9"+
+            "\u05BA\u05BB\u05BC\u05BD\u05BE\u05BF\u05C0\u05C1"+
+            "\u05C2\u05C3\u05C4\u05C5\u05C6\u05C7\u05C8\u05C9"+
+            "\u05CA\u05CB\u05CC\u05CD\u05CE\u05CF\u05D0\u05D1"+
+            "\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9"+
+            "\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1"+
+            "\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9"+
+            "\u05EA\u05EB\u05EC\u05ED\u05EE\u05EF\u05F0\u05F1"+
+            "\u05F2\u05F3\u05F4\u05F5\u05F6\u05F7\u05F8\u05F9"+
+            "\u05FA\u05FB\u05FC\u05FD\u05FE\u05FF\u0600\u0601"+
+            "\u0602\u0603\u0604\u0605\u0606\u0607\u0608\u0609"+
+            "\u060A\u060B\u060C\u060D\u060E\u060F\u0610\u0611"+
+            "\u0612\u0613\u0614\u0615\u0616\u0617\u0618\u0619"+
+            "\u061A\u061B\u061C\u061D\u061E\u061F\u0620\u0621"+
+            "\u0622\u0623\u0624\u0625\u0626\u0627\u0628\u0629"+
+            "\u062A\u062B\u062C\u062D\u062E\u062F\u0630\u0631"+
+            "\u0632\u0633\u0634\u0635\u0636\u0637\u0638\u0639"+
+            "\u063A\u063B\u063C\u063D\u063E\u063F\u0640\u0641"+
+            "\u0642\u0643\u0644\u0645\u0646\u0647\u0648\u0649"+
+            "\u064A\u064B\u064C\u064D\u064E\u064F\u0650\u0651"+
+            "\u0652\u0653\u0654\u0655\u0656\u0657\u0658\u0659"+
+            "\u065A\u065B\u065C\u065D\u065E\u065F\u0660\u0661"+
+            "\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669"+
+            "\u066A\u066B\u066C\u066D\u066E\u066F\u0670\u0671"+
+            "\u0672\u0673\u0674\u0675\u0676\u0677\u0678\u0679"+
+            "\u067A\u067B\u067C\u067D\u067E\u067F\u0680\u0681"+
+            "\u0682\u0683\u0684\u0685\u0686\u0687\u0688\u0689"+
+            "\u068A\u068B\u068C\u068D\u068E\u068F\u0690\u0691"+
+            "\u0692\u0693\u0694\u0695\u0696\u0697\u0698\u0699"+
+            "\u069A\u069B\u069C\u069D\u069E\u069F\u06A0\u06A1"+
+            "\u06A2\u06A3\u06A4\u06A5\u06A6\u06A7\u06A8\u06A9"+
+            "\u06AA\u06AB\u06AC\u06AD\u06AE\u06AF\u06B0\u06B1"+
+            "\u06B2\u06B3\u06B4\u06B5\u06B6\u06B7\u06B8\u06B9"+
+            "\u06BA\u06BB\u06BC\u06BD\u06BE\u06BF\u06C0\u06C1"+
+            "\u06C2\u06C3\u06C4\u06C5\u06C6\u06C7\u06C8\u06C9"+
+            "\u06CA\u06CB\u06CC\u06CD\u06CE\u06CF\u06D0\u06D1"+
+            "\u06D2\u06D3\u06D4\u06D5\u06D6\u06D7\u06D8\u06D9"+
+            "\u06DA\u06DB\u06DC\u06DD\u06DE\u06DF\u06E0\u06E1"+
+            "\u06E2\u06E3\u06E4\u06E5\u06E6\u06E7\u06E8\u06E9"+
+            "\u06EA\u06EB\u06EC\u06ED\u06EE\u06EF\u06F0\u06F1"+
+            "\u06F2\u06F3\u06F4\u06F5\u06F6\u06F7\u06F8\u06F9"+
+            "\u06FA\u06FB\u06FC\u06FD\u06FE\u06FF\u0700\u0701"+
+            "\u0702\u0703\u0704\u0705\u0706\u0707\u0708\u0709"+
+            "\u070A\u070B\u070C\u070D\u070E\u070F\u0710\u0711"+
+            "\u0712\u0713\u0714\u0715\u0716\u0717\u0718\u0719"+
+            "\u071A\u071B\u071C\u071D\u071E\u071F\u0720\u0721"+
+            "\u0722\u0723\u0724\u0725\u0726\u0727\u0728\u0729"+
+            "\u072A\u072B\u072C\u072D\u072E\u072F\u0730\u0731"+
+            "\u0732\u0733\u0734\u0735\u0736\u0737\u0738\u0739"+
+            "\u073A\u073B\u073C\u073D\u073E\u073F\u0740\u0741"+
+            "\u0742\u0743\u0744\u0745\u0746\u0747\u0748\u0749"+
+            "\u074A\u074B\u074C\u074D\u074E\u074F\u0750\u0751"+
+            "\u0752\u0753\u0754\u0755\u0756\u0757\u0758\u0759"+
+            "\u075A\u075B\u075C\u075D\u075E\u075F\u0760\u0761"+
+            "\u0762\u0763\u0764\u0765\u0766\u0767\u0768\u0769"+
+            "\u076A\u076B\u076C\u076D\u076E\u076F\u0770\u0771"+
+            "\u0772\u0773\u0774\u0775\u0776\u0777\u0778\u0779"+
+            "\u077A\u077B\u077C\u077D\u077E\u077F\u0780\u0781"+
+            "\u0782\u0783\u0784\u0785\u0786\u0787\u0788\u0789"+
+            "\u078A\u078B\u078C\u078D\u078E\u078F\u0790\u0791"+
+            "\u0792\u0793\u0794\u0795\u0796\u0797\u0798\u0799"+
+            "\u079A\u079B\u079C\u079D\u079E\u079F\u07A0\u07A1"+
+            "\u07A2\u07A3\u07A4\u07A5\u07A6\u07A7\u07A8\u07A9"+
+            "\u07AA\u07AB\u07AC\u07AD\u07AE\u07AF\u07B0\u07B1"+
+            "\u07B2\u07B3\u07B4\u07B5\u07B6\u07B7\u07B8\u07B9"+
+            "\u07BA\u07BB\u07BC\u07BD\u07BE\u07BF\u07C0\u07C1"+
+            "\u07C2\u07C3\u07C4\u07C5\u07C6\u07C7\u07C8\u07C9"+
+            "\u07CA\u07CB\u07CC\u07CD\u07CE\u07CF\u07D0\u07D1"+
+            "\u07D2\u07D3\u07D4\u07D5\u07D6\u07D7\u07D8\u07D9"+
+            "\u07DA\u07DB\u07DC\u07DD\u07DE\u07DF\u07E0\u07E1"+
+            "\u07E2\u07E3\u07E4\u07E5\u07E6\u07E7\u07E8\u07E9"+
+            "\u07EA\u07EB\u07EC\u07ED\u07EE\u07EF\u07F0\u07F1"+
+            "\u07F2\u07F3\u07F4\u07F5\u07F6\u07F7\u07F8\u07F9"+
+            "\u07FA\u07FB\u07FC\u07FD\u07FE\u07FF\u0800\u0801"+
+            "\u0802\u0803\u0804\u0805\u0806\u0807\u0808\u0809"+
+            "\u080A\u080B\u080C\u080D\u080E\u080F\u0810\u0811"+
+            "\u0812\u0813\u0814\u0815\u0816\u0817\u0818\u0819"+
+            "\u081A\u081B\u081C\u081D\u081E\u081F\u0820\u0821"+
+            "\u0822\u0823\u0824\u0825\u0826\u0827\u0828\u0829"+
+            "\u082A\u082B\u082C\u082D\u082E\u082F\u0830\u0831"+
+            "\u0832\u0833\u0834\u0835\u0836\u0837\u0838\u0839"+
+            "\u083A\u083B\u083C\u083D\u083E\u083F\u0840\u0841"+
+            "\u0842\u0843\u0844\u0845\u0846\u0847\u0848\u0849"+
+            "\u084A\u084B\u084C\u084D\u084E\u084F\u0850\u0851"+
+            "\u0852\u0853\u0854\u0855\u0856\u0857\u0858\u0859"+
+            "\u085A\u085B\u085C\u085D\u085E\u085F\u0860\u0861"+
+            "\u0862\u0863\u0864\u0865\u0866\u0867\u0868\u0869"+
+            "\u086A\u086B\u086C\u086D\u086E\u086F\u0870\u0871"+
+            "\u0872\u0873\u0874\u0875\u0876\u0877\u0878\u0879"+
+            "\u087A\u087B\u087C\u087D\u087E\u087F\u0880\u0881"+
+            "\u0882\u0883\u0884\u0885\u0886\u0887\u0888\u0889"+
+            "\u088A\u088B\u088C\u088D\u088E\u088F\u0890\u0891"+
+            "\u0892\u0893\u0894\u0895\u0896\u0897\u0898\u0899"+
+            "\u089A\u089B\u089C\u089D\u089E\u089F\u08A0\u08A1"+
+            "\u08A2\u08A3\u08A4\u08A5\u08A6\u08A7\u08A8\u08A9"+
+            "\u08AA\u08AB\u08AC\u08AD\u08AE\u08AF\u08B0\u08B1"+
+            "\u08B2\u08B3\u08B4\u08B5\u08B6\u08B7\u08B8\u08B9"+
+            "\u08BA\u08BB\u08BC\u08BD\u08BE\u08BF\u08C0\u08C1"+
+            "\u08C2\u08C3\u08C4\u08C5\u08C6\u08C7\u08C8\u08C9"+
+            "\u08CA\u08CB\u08CC\u08CD\u08CE\u08CF\u08D0\u08D1"+
+            "\u08D2\u08D3\u08D4\u08D5\u08D6\u08D7\u08D8\u08D9"+
+            "\u08DA\u08DB\u08DC\u08DD\u08DE\u08DF\u08E0\u08E1"+
+            "\u08E2\u08E3\u08E4\u08E5\u08E6\u08E7\u08E8\u08E9"+
+            "\u08EA\u08EB\u08EC\u08ED\u08EE\u08EF\u08F0\u08F1"+
+            "\u08F2\u08F3\u08F4\u08F5\u08F6\u08F7\u08F8\u08F9"+
+            "\u08FA\u08FB\u08FC\u08FD\u08FE\u08FF\u0900\u0901"+
+            "\u0902\u0903\u0904\u0905\u0906\u0907\u0908\u0909"+
+            "\u090A\u090B\u090C\u090D\u090E\u090F\u0910\u0911"+
+            "\u0912\u0913\u0914\u0915\u0916\u0917\u0918\u0919"+
+            "\u091A\u091B\u091C\u091D\u091E\u091F\u0920\u0921"+
+            "\u0922\u0923\u0924\u0925\u0926\u0927\u0928\u0929"+
+            "\u092A\u092B\u092C\u092D\u092E\u092F\u0930\u0931"+
+            "\u0932\u0933\u0934\u0935\u0936\u0937\u0938\u0939"+
+            "\u093A\u093B\u093C\u093D\u093E\u093F\u0940\u0941"+
+            "\u0942\u0943\u0944\u0945\u0946\u0947\u0948\u0949"+
+            "\u094A\u094B\u094C\u094D\u094E\u094F\u0950\u0951"+
+            "\u0952\u0953\u0954\u0955\u0956\u0957\u0958\u0959"+
+            "\u095A\u095B\u095C\u095D\u095E\u095F\u0960\u0961"+
+            "\u0962\u0963\u0964\u0965\u0966\u0967\u0968\u0969"+
+            "\u096A\u096B\u096C\u096D\u096E\u096F\u0970\u0971"+
+            "\u0972\u0973\u0974\u0975\u0976\u0977\u0978\u0979"+
+            "\u097A\u097B\u097C\u097D\u097E\u097F\u0980\u0981"+
+            "\u0982\u0983\u0984\u0985\u0986\u0987\u0988\u0989"+
+            "\u098A\u098B\u098C\u098D\u098E\u098F\u0990\u0991"+
+            "\u0992\u0993\u0994\u0995\u0996\u0997\u0998\u0999"+
+            "\u099A\u099B\u099C\u099D\u099E\u099F\u09A0\u09A1"+
+            "\u09A2\u09A3\u09A4\u09A5\u09A6\u09A7\u09A8\u09A9"+
+            "\u09AA\u09AB\u09AC\u09AD\u09AE\u09AF\u09B0\u09B1"+
+            "\u09B2\u09B3\u09B4\u09B5\u09B6\u09B7\u09B8\u09B9"+
+            "\u09BA\u09BB\u09BC\u09BD\u09BE\u09BF\u09C0\u09C1"+
+            "\u09C2\u09C3\u09C4\u09C5\u09C6\u09C7\u09C8\u09C9"+
+            "\u09CA\u09CB\u09CC\u09CD\u09CE\u09CF\u09D0\u09D1"+
+            "\u09D2\u09D3\u09D4\u09D5\u09D6\u09D7\u09D8\u09D9"+
+            "\u09DA\u09DB\u09DC\u09DD\u09DE\u09DF\u09E0\u09E1"+
+            "\u09E2\u09E3\u09E4\u09E5\u09E6\u09E7\u09E8\u09E9"+
+            "\u09EA\u09EB\u09EC\u09ED\u09EE\u09EF\u09F0\u09F1"+
+            "\u09F2\u09F3\u09F4\u09F5\u09F6\u09F7\u09F8\u09F9"+
+            "\u09FA\u09FB\u09FC\u09FD\u09FE\u09FF\u0A00\u0A01"+
+            "\u0A02\u0A03\u0A04\u0A05\u0A06\u0A07\u0A08\u0A09"+
+            "\u0A0A\u0A0B\u0A0C\u0A0D\u0A0E\u0A0F\u0A10\u0A11"+
+            "\u0A12\u0A13\u0A14\u0A15\u0A16\u0A17\u0A18\u0A19"+
+            "\u0A1A\u0A1B\u0A1C\u0A1D\u0A1E\u0A1F\u0A20\u0A21"+
+            "\u0A22\u0A23\u0A24\u0A25\u0A26\u0A27\u0A28\u0A29"+
+            "\u0A2A\u0A2B\u0A2C\u0A2D\u0A2E\u0A2F\u0A30\u0A31"+
+            "\u0A32\u0A33\u0A34\u0A35\u0A36\u0A37\u0A38\u0A39"+
+            "\u0A3A\u0A3B\u0A3C\u0A3D\u0A3E\u0A3F\u0A40\u0A41"+
+            "\u0A42\u0A43\u0A44\u0A45\u0A46\u0A47\u0A48\u0A49"+
+            "\u0A4A\u0A4B\u0A4C\u0A4D\u0A4E\u0A4F\u0A50\u0A51"+
+            "\u0A52\u0A53\u0A54\u0A55\u0A56\u0A57\u0A58\u0A59"+
+            "\u0A5A\u0A5B\u0A5C\u0A5D\u0A5E\u0A5F\u0A60\u0A61"+
+            "\u0A62\u0A63\u0A64\u0A65\u0A66\u0A67\u0A68\u0A69"+
+            "\u0A6A\u0A6B\u0A6C\u0A6D\u0A6E\u0A6F\u0A70\u0A71"+
+            "\u0A72\u0A73\u0A74\u0A75\u0A76\u0A77\u0A78\u0A79"+
+            "\u0A7A\u0A7B\u0A7C\u0A7D\u0A7E\u0A7F\u0A80\u0A81"+
+            "\u0A82\u0A83\u0A84\u0A85\u0A86\u0A87\u0A88\u0A89"+
+            "\u0A8A\u0A8B\u0A8C\u0A8D\u0A8E\u0A8F\u0A90\u0A91"+
+            "\u0A92\u0A93\u0A94\u0A95\u0A96\u0A97\u0A98\u0A99"+
+            "\u0A9A\u0A9B\u0A9C\u0A9D\u0A9E\u0A9F\u0AA0\u0AA1"+
+            "\u0AA2\u0AA3\u0AA4\u0AA5\u0AA6\u0AA7\u0AA8\u0AA9"+
+            "\u0AAA\u0AAB\u0AAC\u0AAD\u0AAE\u0AAF\u0AB0\u0AB1"+
+            "\u0AB2\u0AB3\u0AB4\u0AB5\u0AB6\u0AB7\u0AB8\u0AB9"+
+            "\u0ABA\u0ABB\u0ABC\u0ABD\u0ABE\u0ABF\u0AC0\u0AC1"+
+            "\u0AC2\u0AC3\u0AC4\u0AC5\u0AC6\u0AC7\u0AC8\u0AC9"+
+            "\u0ACA\u0ACB\u0ACC\u0ACD\u0ACE\u0ACF\u0AD0\u0AD1"+
+            "\u0AD2\u0AD3\u0AD4\u0AD5\u0AD6\u0AD7\u0AD8\u0AD9"+
+            "\u0ADA\u0ADB\u0ADC\u0ADD\u0ADE\u0ADF\u0AE0\u0AE1"+
+            "\u0AE2\u0AE3\u0AE4\u0AE5\u0AE6\u0AE7\u0AE8\u0AE9"+
+            "\u0AEA\u0AEB\u0AEC\u0AED\u0AEE\u0AEF\u0AF0\u0AF1"+
+            "\u0AF2\u0AF3\u0AF4\u0AF5\u0AF6\u0AF7\u0AF8\u0AF9"+
+            "\u0AFA\u0AFB\u0AFC\u0AFD\u0AFE\u0AFF\u0B00\u0B01"+
+            "\u0B02\u0B03\u0B04\u0B05\u0B06\u0B07\u0B08\u0B09"+
+            "\u0B0A\u0B0B\u0B0C\u0B0D\u0B0E\u0B0F\u0B10\u0B11"+
+            "\u0B12\u0B13\u0B14\u0B15\u0B16\u0B17\u0B18\u0B19"+
+            "\u0B1A\u0B1B\u0B1C\u0B1D\u0B1E\u0B1F\u0B20\u0B21"+
+            "\u0B22\u0B23\u0B24\u0B25\u0B26\u0B27\u0B28\u0B29"+
+            "\u0B2A\u0B2B\u0B2C\u0B2D\u0B2E\u0B2F\u0B30\u0B31"+
+            "\u0B32\u0B33\u0B34\u0B35\u0B36\u0B37\u0B38\u0B39"+
+            "\u0B3A\u0B3B\u0B3C\u0B3D\u0B3E\u0B3F\u0B40\u0B41"+
+            "\u0B42\u0B43\u0B44\u0B45\u0B46\u0B47\u0B48\u0B49"+
+            "\u0B4A\u0B4B\u0B4C\u0B4D\u0B4E\u0B4F\u0B50\u0B51"+
+            "\u0B52\u0B53\u0B54\u0B55\u0B56\u0B57\u0B58\u0B59"+
+            "\u0B5A\u0B5B\u0B5C\u0B5D\u0B5E\u0B5F\u0B60\u0B61"+
+            "\u0B62\u0B63\u0B64\u0B65\u0B66\u0B67\u0B68\u0B69"+
+            "\u0B6A\u0B6B\u0B6C\u0B6D\u0B6E\u0B6F\u0B70\u0B71"+
+            "\u0B72\u0B73\u0B74\u0B75\u0B76\u0B77\u0B78\u0B79"+
+            "\u0B7A\u0B7B\u0B7C\u0B7D\u0B7E\u0B7F\u0B80\u0B81"+
+            "\u0B82\u0B83\u0B84\u0B85\u0B86\u0B87\u0B88\u0B89"+
+            "\u0B8A\u0B8B\u0B8C\u0B8D\u0B8E\u0B8F\u0B90\u0B91"+
+            "\u0B92\u0B93\u0B94\u0B95\u0B96\u0B97\u0B98\u0B99"+
+            "\u0B9A\u0B9B\u0B9C\u0B9D\u0B9E\u0B9F\u0BA0\u0BA1"+
+            "\u0BA2\u0BA3\u0BA4\u0BA5\u0BA6\u0BA7\u0BA8\u0BA9"+
+            "\u0BAA\u0BAB\u0BAC\u0BAD\u0BAE\u0BAF\u0BB0\u0BB1"+
+            "\u0BB2\u0BB3\u0BB4\u0BB5\u0BB6\u0BB7\u0BB8\u0BB9"+
+            "\u0BBA\u0BBB\u0BBC\u0BBD\u0BBE\u0BBF\u0BC0\u0BC1"+
+            "\u0BC2\u0BC3\u0BC4\u0BC5\u0BC6\u0BC7\u0BC8\u0BC9"+
+            "\u0BCA\u0BCB\u0BCC\u0BCD\u0BCE\u0BCF\u0BD0\u0BD1"+
+            "\u0BD2\u0BD3\u0BD4\u0BD5\u0BD6\u0BD7\u0BD8\u0BD9"+
+            "\u0BDA\u0BDB\u0BDC\u0BDD\u0BDE\u0BDF\u0BE0\u0BE1"+
+            "\u0BE2\u0BE3\u0BE4\u0BE5\u0BE6\u0BE7\u0BE8\u0BE9"+
+            "\u0BEA\u0BEB\u0BEC\u0BED\u0BEE\u0BEF\u0BF0\u0BF1"+
+            "\u0BF2\u0BF3\u0BF4\u0BF5\u0BF6\u0BF7\u0BF8\u0BF9"+
+            "\u0BFA\u0BFB\u0BFC\u0BFD\u0BFE\u0BFF\u0C00\u0C01"+
+            "\u0C02\u0C03\u0C04\u0C05\u0C06\u0C07\u0C08\u0C09"+
+            "\u0C0A\u0C0B\u0C0C\u0C0D\u0C0E\u0C0F\u0C10\u0C11"+
+            "\u0C12\u0C13\u0C14\u0C15\u0C16\u0C17\u0C18\u0C19"+
+            "\u0C1A\u0C1B\u0C1C\u0C1D\u0C1E\u0C1F\u0C20\u0C21"+
+            "\u0C22\u0C23\u0C24\u0C25\u0C26\u0C27\u0C28\u0C29"+
+            "\u0C2A\u0C2B\u0C2C\u0C2D\u0C2E\u0C2F\u0C30\u0C31"+
+            "\u0C32\u0C33\u0C34\u0C35\u0C36\u0C37\u0C38\u0C39"+
+            "\u0C3A\u0C3B\u0C3C\u0C3D\u0C3E\u0C3F\u0C40\u0C41"+
+            "\u0C42\u0C43\u0C44\u0C45\u0C46\u0C47\u0C48\u0C49"+
+            "\u0C4A\u0C4B\u0C4C\u0C4D\u0C4E\u0C4F\u0C50\u0C51"+
+            "\u0C52\u0C53\u0C54\u0C55\u0C56\u0C57\u0C58\u0C59"+
+            "\u0C5A\u0C5B\u0C5C\u0C5D\u0C5E\u0C5F\u0C60\u0C61"+
+            "\u0C62\u0C63\u0C64\u0C65\u0C66\u0C67\u0C68\u0C69"+
+            "\u0C6A\u0C6B\u0C6C\u0C6D\u0C6E\u0C6F\u0C70\u0C71"+
+            "\u0C72\u0C73\u0C74\u0C75\u0C76\u0C77\u0C78\u0C79"+
+            "\u0C7A\u0C7B\u0C7C\u0C7D\u0C7E\u0C7F\u0C80\u0C81"+
+            "\u0C82\u0C83\u0C84\u0C85\u0C86\u0C87\u0C88\u0C89"+
+            "\u0C8A\u0C8B\u0C8C\u0C8D\u0C8E\u0C8F\u0C90\u0C91"+
+            "\u0C92\u0C93\u0C94\u0C95\u0C96\u0C97\u0C98\u0C99"+
+            "\u0C9A\u0C9B\u0C9C\u0C9D\u0C9E\u0C9F\u0CA0\u0CA1"+
+            "\u0CA2\u0CA3\u0CA4\u0CA5\u0CA6\u0CA7\u0CA8\u0CA9"+
+            "\u0CAA\u0CAB\u0CAC\u0CAD\u0CAE\u0CAF\u0CB0\u0CB1"+
+            "\u0CB2\u0CB3\u0CB4\u0CB5\u0CB6\u0CB7\u0CB8\u0CB9"+
+            "\u0CBA\u0CBB\u0CBC\u0CBD\u0CBE\u0CBF\u0CC0\u0CC1"+
+            "\u0CC2\u0CC3\u0CC4\u0CC5\u0CC6\u0CC7\u0CC8\u0CC9"+
+            "\u0CCA\u0CCB\u0CCC\u0CCD\u0CCE\u0CCF\u0CD0\u0CD1"+
+            "\u0CD2\u0CD3\u0CD4\u0CD5\u0CD6\u0CD7\u0CD8\u0CD9"+
+            "\u0CDA\u0CDB\u0CDC\u0CDD\u0CDE\u0CDF\u0CE0\u0CE1"+
+            "\u0CE2\u0CE3\u0CE4\u0CE5\u0CE6\u0CE7\u0CE8\u0CE9"+
+            "\u0CEA\u0CEB\u0CEC\u0CED\u0CEE\u0CEF\u0CF0\u0CF1"+
+            "\u0CF2\u0CF3\u0CF4\u0CF5\u0CF6\u0CF7\u0CF8\u0CF9"+
+            "\u0CFA\u0CFB\u0CFC\u0CFD\u0CFE\u0CFF\u0D00\u0D01"+
+            "\u0D02\u0D03\u0D04\u0D05\u0D06\u0D07\u0D08\u0D09"+
+            "\u0D0A\u0D0B\u0D0C\u0D0D\u0D0E\u0D0F\u0D10\u0D11"+
+            "\u0D12\u0D13\u0D14\u0D15\u0D16\u0D17\u0D18\u0D19"+
+            "\u0D1A\u0D1B\u0D1C\u0D1D\u0D1E\u0D1F\u0D20\u0D21"+
+            "\u0D22\u0D23\u0D24\u0D25\u0D26\u0D27\u0D28\u0D29"+
+            "\u0D2A\u0D2B\u0D2C\u0D2D\u0D2E\u0D2F\u0D30\u0D31"+
+            "\u0D32\u0D33\u0D34\u0D35\u0D36\u0D37\u0D38\u0D39"+
+            "\u0D3A\u0D3B\u0D3C\u0D3D\u0D3E\u0D3F\u0D40\u0D41"+
+            "\u0D42\u0D43\u0D44\u0D45\u0D46\u0D47\u0D48\u0D49"+
+            "\u0D4A\u0D4B\u0D4C\u0D4D\u0D4E\u0D4F\u0D50\u0D51"+
+            "\u0D52\u0D53\u0D54\u0D55\u0D56\u0D57\u0D58\u0D59"+
+            "\u0D5A\u0D5B\u0D5C\u0D5D\u0D5E\u0D5F\u0D60\u0D61"+
+            "\u0D62\u0D63\u0D64\u0D65\u0D66\u0D67\u0D68\u0D69"+
+            "\u0D6A\u0D6B\u0D6C\u0D6D\u0D6E\u0D6F\u0D70\u0D71"+
+            "\u0D72\u0D73\u0D74\u0D75\u0D76\u0D77\u0D78\u0D79"+
+            "\u0D7A\u0D7B\u0D7C\u0D7D\u0D7E\u0D7F\u0D80\u0D81"+
+            "\u0D82\u0D83\u0D84\u0D85\u0D86\u0D87\u0D88\u0D89"+
+            "\u0D8A\u0D8B\u0D8C\u0D8D\u0D8E\u0D8F\u0D90\u0D91"+
+            "\u0D92\u0D93\u0D94\u0D95\u0D96\u0D97\u0D98\u0D99"+
+            "\u0D9A\u0D9B\u0D9C\u0D9D\u0D9E\u0D9F\u0DA0\u0DA1"+
+            "\u0DA2\u0DA3\u0DA4\u0DA5\u0DA6\u0DA7\u0DA8\u0DA9"+
+            "\u0DAA\u0DAB\u0DAC\u0DAD\u0DAE\u0DAF\u0DB0\u0DB1"+
+            "\u0DB2\u0DB3\u0DB4\u0DB5\u0DB6\u0DB7\u0DB8\u0DB9"+
+            "\u0DBA\u0DBB\u0DBC\u0DBD\u0DBE\u0DBF\u0DC0\u0DC1"+
+            "\u0DC2\u0DC3\u0DC4\u0DC5\u0DC6\u0DC7\u0DC8\u0DC9"+
+            "\u0DCA\u0DCB\u0DCC\u0DCD\u0DCE\u0DCF\u0DD0\u0DD1"+
+            "\u0DD2\u0DD3\u0DD4\u0DD5\u0DD6\u0DD7\u0DD8\u0DD9"+
+            "\u0DDA\u0DDB\u0DDC\u0DDD\u0DDE\u0DDF\u0DE0\u0DE1";
+
+        private final static String innerIndex1=
+            "\u0DE2\u0DE3\u0DE4\u0DE5\u0DE6\u0DE7\u0DE8\u0DE9"+
+            "\u0DEA\u0DEB\u0DEC\u0DED\u0DEE\u0DEF\u0DF0\u0DF1"+
+            "\u0DF2\u0DF3\u0DF4\u0DF5\u0DF6\u0DF7\u0DF8\u0DF9"+
+            "\u0DFA\u0DFB\u0DFC\u0DFD\u0DFE\u0DFF\u0E00\u0E01"+
+            "\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09"+
+            "\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11"+
+            "\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19"+
+            "\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21"+
+            "\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29"+
+            "\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31"+
+            "\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39"+
+            "\u0E3A\u0E3B\u0E3C\u0E3D\u0E3E\u0E3F\u0E40\u0E41"+
+            "\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49"+
+            "\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51"+
+            "\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59"+
+            "\u0E5A\u0E5B\u0E5C\u0E5D\u0E5E\u0E5F\u0E60\u0E61"+
+            "\u0E62\u0E63\u0E64\u0E65\u0E66\u0E67\u0E68\u0E69"+
+            "\u0E6A\u0E6B\u0E6C\u0E6D\u0E6E\u0E6F\u0E70\u0E71"+
+            "\u0E72\u0E73\u0E74\u0E75\u0E76\u0E77\u0E78\u0E79"+
+            "\u0E7A\u0E7B\u0E7C\u0E7D\u0E7E\u0E7F\u0E80\u0E81"+
+            "\u0E82\u0E83\u0E84\u0E85\u0E86\u0E87\u0E88\u0E89"+
+            "\u0E8A\u0E8B\u0E8C\u0E8D\u0E8E\u0E8F\u0E90\u0E91"+
+            "\u0E92\u0E93\u0E94\u0E95\u0E96\u0E97\u0E98\u0E99"+
+            "\u0E9A\u0E9B\u0E9C\u0E9D\u0E9E\u0E9F\u0EA0\u0EA1"+
+            "\u0EA2\u0EA3\u0EA4\u0EA5\u0EA6\u0EA7\u0EA8\u0EA9"+
+            "\u0EAA\u0EAB\u0EAC\u0EAD\u0EAE\u0EAF\u0EB0\u0EB1"+
+            "\u0EB2\u0EB3\u0EB4\u0EB5\u0EB6\u0EB7\u0EB8\u0EB9"+
+            "\u0EBA\u0EBB\u0EBC\u0EBD\u0EBE\u0EBF\u0EC0\u0EC1"+
+            "\u0EC2\u0EC3\u0EC4\u0EC5\u0EC6\u0EC7\u0EC8\u0EC9"+
+            "\u0ECA\u0ECB\u0ECC\u0ECD\u0ECE\u0ECF\u0ED0\u0ED1"+
+            "\u0ED2\u0ED3\u0ED4\u0ED5\u0ED6\u0ED7\u0ED8\u0ED9"+
+            "\u0EDA\u0EDB\u0EDC\u0EDD\u0EDE\u0EDF\u0EE0\u0EE1"+
+            "\u0EE2\u0EE3\u0EE4\u0EE5\u0EE6\u0EE7\u0EE8\u0EE9"+
+            "\u0EEA\u0EEB\u0EEC\u0EED\u0EEE\u0EEF\u0EF0\u0EF1"+
+            "\u0EF2\u0EF3\u0EF4\u0EF5\u0EF6\u0EF7\u0EF8\u0EF9"+
+            "\u0EFA\u0EFB\u0EFC\u0EFD\u0EFE\u0EFF\u0F00\u0F01"+
+            "\u0F02\u0F03\u0F04\u0F05\u0F06\u0F07\u0F08\u0F09"+
+            "\u0F0A\u0F0B\u0F0C\u0F0D\u0F0E\u0F0F\u0F10\u0F11"+
+            "\u0F12\u0F13\u0F14\u0F15\u0F16\u0F17\u0F18\u0F19"+
+            "\u0F1A\u0F1B\u0F1C\u0F1D\u0F1E\u0F1F\u0F20\u0F21"+
+            "\u0F22\u0F23\u0F24\u0F25\u0F26\u0F27\u0F28\u0F29"+
+            "\u0F2A\u0F2B\u0F2C\u0F2D\u0F2E\u0F2F\u0F30\u0F31"+
+            "\u0F32\u0F33\u0F34\u0F35\u0F36\u0F37\u0F38\u0F39"+
+            "\u0F3A\u0F3B\u0F3C\u0F3D\u0F3E\u0F3F\u0F40\u0F41"+
+            "\u0F42\u0F43\u0F44\u0F45\u0F46\u0F47\u0F48\u0F49"+
+            "\u0F4A\u0F4B\u0F4C\u0F4D\u0F4E\u0F4F\u0F50\u0F51"+
+            "\u0F52\u0F53\u0F54\u0F55\u0F56\u0F57\u0F58\u0F59"+
+            "\u0F5A\u0F5B\u0F5C\u0F5D\u0F5E\u0F5F\u0F60\u0F61"+
+            "\u0F62\u0F63\u0F64\u0F65\u0F66\u0F67\u0F68\u0F69"+
+            "\u0F6A\u0F6B\u0F6C\u0F6D\u0F6E\u0F6F\u0F70\u0F71"+
+            "\u0F72\u0F73\u0F74\u0F75\u0F76\u0F77\u0F78\u0F79"+
+            "\u0F7A\u0F7B\u0F7C\u0F7D\u0F7E\u0F7F\u0F80\u0F81"+
+            "\u0F82\u0F83\u0F84\u0F85\u0F86\u0F87\u0F88\u0F89"+
+            "\u0F8A\u0F8B\u0F8C\u0F8D\u0F8E\u0F8F\u0F90\u0F91"+
+            "\u0F92\u0F93\u0F94\u0F95\u0F96\u0F97\u0F98\u0F99"+
+            "\u0F9A\u0F9B\u0F9C\u0F9D\u0F9E\u0F9F\u0FA0\u0FA1"+
+            "\u0FA2\u0FA3\u0FA4\u0FA5\u0FA6\u0FA7\u0FA8\u0FA9"+
+            "\u0FAA\u0FAB\u0FAC\u0FAD\u0FAE\u0FAF\u0FB0\u0FB1"+
+            "\u0FB2\u0FB3\u0FB4\u0FB5\u0FB6\u0FB7\u0FB8\u0FB9"+
+            "\u0FBA\u0FBB\u0FBC\u0FBD\u0FBE\u0FBF\u0FC0\u0FC1"+
+            "\u0FC2\u0FC3\u0FC4\u0FC5\u0FC6\u0FC7\u0FC8\u0FC9"+
+            "\u0FCA\u0FCB\u0FCC\u0FCD\u0FCE\u0FCF\u0FD0\u0FD1"+
+            "\u0FD2\u0FD3\u0FD4\u0FD5\u0FD6\u0FD7\u0FD8\u0FD9"+
+            "\u0FDA\u0FDB\u0FDC\u0FDD\u0FDE\u0FDF\u0FE0\u0FE1"+
+            "\u0FE2\u0FE3\u0FE4\u0FE5\u0FE6\u0FE7\u0FE8\u0FE9"+
+            "\u0FEA\u0FEB\u0FEC\u0FED\u0FEE\u0FEF\u0FF0\u0FF1"+
+            "\u0FF2\u0FF3\u0FF4\u0FF5\u0FF6\u0FF7\u0FF8\u0FF9"+
+            "\u0FFA\u0FFB\u0FFC\u0FFD\u0FFE\u0FFF\u1000\u1001"+
+            "\u1002\u1003\u1004\u1005\u1006\u1007\u1008\u1009"+
+            "\u100A\u100B\u100C\u100D\u100E\u100F\u1010\u1011"+
+            "\u1012\u1013\u1014\u1015\u1016\u1017\u1018\u1019"+
+            "\u101A\u101B\u101C\u101D\u101E\u101F\u1020\u1021"+
+            "\u1022\u1023\u1024\u1025\u1026\u1027\u1028\u1029"+
+            "\u102A\u102B\u102C\u102D\u102E\u102F\u1030\u1031"+
+            "\u1032\u1033\u1034\u1035\u1036\u1037\u1038\u1039"+
+            "\u103A\u103B\u103C\u103D\u103E\u103F\u1040\u1041"+
+            "\u1042\u1043\u1044\u1045\u1046\u1047\u1048\u1049"+
+            "\u104A\u104B\u104C\u104D\u104E\u104F\u1050\u1051"+
+            "\u1052\u1053\u1054\u1055\u1056\u1057\u1058\u1059"+
+            "\u105A\u105B\u105C\u105D\u105E\u105F\u1060\u1061"+
+            "\u1062\u1063\u1064\u1065\u1066\u1067\u1068\u1069"+
+            "\u106A\u106B\u106C\u106D\u106E\u106F\u1070\u1071"+
+            "\u1072\u1073\u1074\u1075\u1076\u1077\u1078\u1079"+
+            "\u107A\u107B\u107C\u107D\u107E\u107F\u1080\u1081"+
+            "\u1082\u1083\u1084\u1085\u1086\u1087\u1088\u1089"+
+            "\u108A\u108B\u108C\u108D\u108E\u108F\u1090\u1091"+
+            "\u1092\u1093\u1094\u1095\u1096\u1097\u1098\u1099"+
+            "\u109A\u109B\u109C\u109D\u109E\u109F\u10A0\u10A1"+
+            "\u10A2\u10A3\u10A4\u10A5\u10A6\u10A7\u10A8\u10A9"+
+            "\u10AA\u10AB\u10AC\u10AD\u10AE\u10AF\u10B0\u10B1"+
+            "\u10B2\u10B3\u10B4\u10B5\u10B6\u10B7\u10B8\u10B9"+
+            "\u10BA\u10BB\u10BC\u10BD\u10BE\u10BF\u10C0\u10C1"+
+            "\u10C2\u10C3\u10C4\u10C5\u10C6\u10C7\u10C8\u10C9"+
+            "\u10CA\u10CB\u10CC\u10CD\u10CE\u10CF\u10D0\u10D1"+
+            "\u10D2\u10D3\u10D4\u10D5\u10D6\u10D7\u10D8\u10D9"+
+            "\u10DA\u10DB\u10DC\u10DD\u10DE\u10DF\u10E0\u10E1"+
+            "\u10E2\u10E3\u10E4\u10E5\u10E6\u10E7\u10E8\u10E9"+
+            "\u10EA\u10EB\u10EC\u10ED\u10EE\u10EF\u10F0\u10F1"+
+            "\u10F2\u10F3\u10F4\u10F5\u10F6\u10F7\u10F8\u10F9"+
+            "\u10FA\u10FB\u10FC\u10FD\u10FE\u10FF\u1100\u1101"+
+            "\u1102\u1103\u1104\u1105\u1106\u1107\u1108\u1109"+
+            "\u110A\u110B\u110C\u110D\u110E\u110F\u1110\u1111"+
+            "\u1112\u1113\u1114\u1115\u1116\u1117\u1118\u1119"+
+            "\u111A\u111B\u111C\u111D\u111E\u111F\u1120\u1121"+
+            "\u1122\u1123\u1124\u1125\u1126\u1127\u1128\u1129"+
+            "\u112A\u112B\u112C\u112D\u112E\u112F\u1130\u1131"+
+            "\u1132\u1133\u1134\u1135\u1136\u1137\u1138\u1139"+
+            "\u113A\u113B\u113C\u113D\u113E\u113F\u1140\u1141"+
+            "\u1142\u1143\u1144\u1145\u1146\u1147\u1148\u1149"+
+            "\u114A\u114B\u114C\u114D\u114E\u114F\u1150\u1151"+
+            "\u1152\u1153\u1154\u1155\u1156\u1157\u1158\u1159"+
+            "\u115A\u115B\u115C\u115D\u115E\u115F\u1160\u1161"+
+            "\u1162\u1163\u1164\u1165\u1166\u1167\u1168\u1169"+
+            "\u116A\u116B\u116C\u116D\u116E\u116F\u1170\u1171"+
+            "\u1172\u1173\u1174\u1175\u1176\u1177\u1178\u1179"+
+            "\u117A\u117B\u117C\u117D\u117E\u117F\u1180\u1181"+
+            "\u1182\u1183\u1184\u1185\u1186\u1187\u1188\u1189"+
+            "\u118A\u118B\u118C\u118D\u118E\u118F\u1190\u1191"+
+            "\u1192\u1193\u1194\u1195\u1196\u1197\u1198\u1199"+
+            "\u119A\u119B\u119C\u119D\u119E\u119F\u11A0\u11A1"+
+            "\u11A2\u11A3\u11A4\u11A5\u11A6\u11A7\u11A8\u11A9"+
+            "\u11AA\u11AB\u11AC\u11AD\u11AE\u11AF\u11B0\u11B1"+
+            "\u11B2\u11B3\u11B4\u11B5\u11B6\u11B7\u11B8\u11B9"+
+            "\u11BA\u11BB\u11BC\u11BD\u11BE\u11BF\u11C0\u11C1"+
+            "\u11C2\u11C3\u11C4\u11C5\u11C6\u11C7\u11C8\u11C9"+
+            "\u11CA\u11CB\u11CC\u11CD\u11CE\u11CF\u11D0\u11D1"+
+            "\u11D2\u11D3\u11D4\u11D5\u11D6\u11D7\u11D8\u11D9"+
+            "\u11DA\u11DB\u11DC\u11DD\u11DE\u11DF\u11E0\u11E1"+
+            "\u11E2\u11E3\u11E4\u11E5\u11E6\u11E7\u11E8\u11E9"+
+            "\u11EA\u11EB\u11EC\u11ED\u11EE\u11EF\u11F0\u11F1"+
+            "\u11F2\u11F3\u11F4\u11F5\u11F6\u11F7\u11F8\u11F9"+
+            "\u11FA\u11FB\u11FC\u11FD\u11FE\u11FF\u1200\u1201"+
+            "\u1202\u1203\u1204\u1205\u1206\u1207\u1208\u1209"+
+            "\u120A\u120B\u120C\u120D\u120E\u120F\u1210\u1211"+
+            "\u1212\u1213\u1214\u1215\u1216\u1217\u1218\u1219"+
+            "\u121A\u121B\u121C\u121D\u121E\u121F\u1220\u1221"+
+            "\u1222\u1223\u1224\u1225\u1226\u1227\u1228\u1229"+
+            "\u122A\u122B\u122C\u122D\u122E\u122F\u1230\u1231"+
+            "\u1232\u1233\u1234\u1235\u1236\u1237\u1238\u1239"+
+            "\u123A\u123B\u123C\u123D\u123E\u123F\u1240\u1241"+
+            "\u1242\u1243\u1244\u1245\u1246\u1247\u1248\u1249"+
+            "\u124A\u124B\u124C\u124D\u124E\u124F\u1250\u1251"+
+            "\u1252\u1253\u1254\u1255\u1256\u1257\u1258\u1259"+
+            "\u125A\u125B\u125C\u125D\u125E\u125F\u1260\u1261"+
+            "\u1262\u1263\u1264\u1265\u1266\u1267\u1268\u1269"+
+            "\u126A\u126B\u126C\u126D\u126E\u126F\u1270\u1271"+
+            "\u1272\u1273\u1274\u1275\u1276\u1277\u1278\u1279"+
+            "\u127A\u127B\u127C\u127D\u127E\u127F\u1280\u1281"+
+            "\u1282\u1283\u1284\u1285\u1286\u1287\u1288\u1289"+
+            "\u128A\u128B\u128C\u128D\u128E\u128F\u1290\u1291"+
+            "\u1292\u1293\u1294\u1295\u1296\u1297\u1298\u1299"+
+            "\u129A\u129B\u129C\u129D\u129E\u129F\u12A0\u12A1"+
+            "\u12A2\u12A3\u12A4\u12A5\u12A6\u12A7\u12A8\u12A9"+
+            "\u12AA\u12AB\u12AC\u12AD\u12AE\u12AF\u12B0\u12B1"+
+            "\u12B2\u12B3\u12B4\u12B5\u12B6\u12B7\u12B8\u12B9"+
+            "\u12BA\u12BB\u12BC\u12BD\u12BE\u12BF\u12C0\u12C1"+
+            "\u12C2\u12C3\u12C4\u12C5\u12C6\u12C7\u12C8\u12C9"+
+            "\u12CA\u12CB\u12CC\u12CD\u12CE\u12CF\u12D0\u12D1"+
+            "\u12D2\u12D3\u12D4\u12D5\u12D6\u12D7\u12D8\u12D9"+
+            "\u12DA\u12DB\u12DC\u12DD\u12DE\u12DF\u12E0\u12E1"+
+            "\u12E2\u12E3\u12E4\u12E5\u12E6\u12E7\u12E8\u12E9"+
+            "\u12EA\u12EB\u12EC\u12ED\u12EE\u12EF\u12F0\u12F1"+
+            "\u12F2\u12F3\u12F4\u12F5\u12F6\u12F7\u12F8\u12F9"+
+            "\u12FA\u12FB\u12FC\u12FD\u12FE\u12FF\u1300\u1301"+
+            "\u1302\u1303\u1304\u1305\u1306\u1307\u1308\u1309"+
+            "\u130A\u130B\u130C\u130D\u130E\u130F\u1310\u1311"+
+            "\u1312\u1313\u1314\u1315\u1316\u1317\u1318\u1319"+
+            "\u131A\u131B\u131C\u131D\u131E\u131F\u1320\u1321"+
+            "\u1322\u1323\u1324\u1325\u1326\u1327\u1328\u1329"+
+            "\u132A\u132B\u132C\u132D\u132E\u132F\u1330\u1331"+
+            "\u1332\u1333\u1334\u1335\u1336\u1337\u1338\u1339"+
+            "\u133A\u133B\u133C\u133D\u133E\u133F\u1340\u1341"+
+            "\u1342\u1343\u1344\u1345\u1346\u1347\u1348\u1349"+
+            "\u134A\u134B\u134C\u134D\u134E\u134F\u1350\u1351"+
+            "\u1352\u1353\u1354\u1355\u1356\u1357\u1358\u1359"+
+            "\u135A\u135B\u135C\u135D\u135E\u135F\u1360\u1361"+
+            "\u1362\u1363\u1364\u1365\u1366\u1367\u1368\u1369"+
+            "\u136A\u136B\u136C\u136D\u136E\u136F\u1370\u1371"+
+            "\u1372\u1373\u1374\u1375\u1376\u1377\u1378\u1379"+
+            "\u137A\u137B\u137C\u137D\u137E\u137F\u1380\u1381"+
+            "\u1382\u1383\u1384\u1385\u1386\u1387\u1388\u1389"+
+            "\u138A\u138B\u138C\u138D\u138E\u138F\u1390\u1391"+
+            "\u1392\u1393\u1394\u1395\u1396\u1397\u1398\u1399"+
+            "\u139A\u139B\u139C\u139D\u139E\u139F\u13A0\u13A1"+
+            "\u13A2\u13A3\u13A4\u13A5\u13A6\u13A7\u13A8\u13A9"+
+            "\u13AA\u13AB\u13AC\u13AD\u13AE\u13AF\u13B0\u13B1"+
+            "\u13B2\u13B3\u13B4\u13B5\u13B6\u13B7\u13B8\u13B9"+
+            "\u13BA\u13BB\u13BC\u13BD\u13BE\u13BF\u13C0\u13C1"+
+            "\u13C2\u13C3\u13C4\u13C5\u13C6\u13C7\u13C8\u13C9"+
+            "\u13CA\u13CB\u13CC\u13CD\u13CE\u13CF\u13D0\u13D1"+
+            "\u13D2\u13D3\u13D4\u13D5\u13D6\u13D7\u13D8\u13D9"+
+            "\u13DA\u13DB\u13DC\u13DD\u13DE\u13DF\u13E0\u13E1"+
+            "\u13E2\u13E3\u13E4\u13E5\u13E6\u13E7\u13E8\u13E9"+
+            "\u13EA\u13EB\u13EC\u13ED\u13EE\u13EF\u13F0\u13F1"+
+            "\u13F2\u13F3\u13F4\u13F5\u13F6\u13F7\u13F8\u13F9"+
+            "\u13FA\u13FB\u13FC\u13FD\u13FE\u13FF\u1400\u1401"+
+            "\u1402\u1403\u1404\u1405\u1406\u1407\u1408\u1409"+
+            "\u140A\u140B\u140C\u140D\u140E\u140F\u1410\u1411"+
+            "\u1412\u1413\u1414\u1415\u1416\u1417\u1418\u1419"+
+            "\u141A\u141B\u141C\u141D\u141E\u141F\u1420\u1421"+
+            "\u1422\u1423\u1424\u1425\u1426\u1427\u1428\u1429"+
+            "\u142A\u142B\u142C\u142D\u142E\u142F\u1430\u1431"+
+            "\u1432\u1433\u1434\u1435\u1436\u1437\u1438\u1439"+
+            "\u143A\u143B\u143C\u143D\u143E\u143F\u1440\u1441"+
+            "\u1442\u1443\u1444\u1445\u1446\u1447\u1448\u1449"+
+            "\u144A\u144B\u144C\u144D\u144E\u144F\u1450\u1451"+
+            "\u1452\u1453\u1454\u1455\u1456\u1457\u1458\u1459"+
+            "\u145A\u145B\u145C\u145D\u145E\u145F\u1460\u1461"+
+            "\u1462\u1463\u1464\u1465\u1466\u1467\u1468\u1469"+
+            "\u146A\u146B\u146C\u146D\u146E\u146F\u1470\u1471"+
+            "\u1472\u1473\u1474\u1475\u1476\u1477\u1478\u1479"+
+            "\u147A\u147B\u147C\u147D\u147E\u147F\u1480\u1481"+
+            "\u1482\u1483\u1484\u1485\u1486\u1487\u1488\u1489"+
+            "\u148A\u148B\u148C\u148D\u148E\u148F\u1490\u1491"+
+            "\u1492\u1493\u1494\u1495\u1496\u1497\u1498\u1499"+
+            "\u149A\u149B\u149C\u149D\u149E\u149F\u14A0\u14A1"+
+            "\u14A2\u14A3\u14A4\u14A5\u14A6\u14A7\u14A8\u14A9"+
+            "\u14AA\u14AB\u14AC\u14AD\u14AE\u14AF\u14B0\u14B1"+
+            "\u14B2\u14B3\u14B4\u14B5\u14B6\u14B7\u14B8\u14B9"+
+            "\u14BA\u14BB\u14BC\u14BD\u14BE\u14BF\u14C0\u14C1"+
+            "\u14C2\u14C3\u14C4\u14C5\u14C6\u14C7\u14C8\u14C9"+
+            "\u14CA\u14CB\u14CC\u14CD\u14CE\u14CF\u14D0\u14D1"+
+            "\u14D2\u14D3\u14D4\u14D5\u14D6\u14D7\u14D8\u14D9"+
+            "\u14DA\u14DB\u14DC\u14DD\u14DE\u14DF\u14E0\u14E1"+
+            "\u14E2\u14E3\u14E4\u14E5\u14E6\u14E7\u14E8\u14E9"+
+            "\u14EA\u14EB\u14EC\u14ED\u14EE\u14EF\u14F0\u14F1"+
+            "\u14F2\u14F3\u14F4\u14F5\u14F6\u14F7\u14F8\u14F9"+
+            "\u14FA\u14FB\u14FC\u14FD\u14FE\u14FF\u1500\u1501"+
+            "\u1502\u1503\u1504\u1505\u1506\u1507\u1508\u1509"+
+            "\u150A\u150B\u150C\u150D\u150E\u150F\u1510\u1511"+
+            "\u1512\u1513\u1514\u1515\u1516\u1517\u1518\u1519"+
+            "\u151A\u151B\u151C\u151D\u151E\u151F\u1520\u1521"+
+            "\u1522\u1523\u1524\u1525\u1526\u1527\u1528\u1529"+
+            "\u152A\u152B\u152C\u152D\u152E\u152F\u1530\u1531"+
+            "\u1532\u1533\u1534\u1535\u1536\u1537\u1538\u1539"+
+            "\u153A\u153B\u153C\u153D\u153E\u153F\u1540\u1541"+
+            "\u1542\u1543\u1544\u1545\u1546\u1547\u1548\u1549"+
+            "\u154A\u154B\u154C\u154D\u154E\u154F\u1550\u1551"+
+            "\u1552\u1553\u1554\u1555\u1556\u1557\u1558\u1559"+
+            "\u155A\u155B\u155C\u155D\u155E\u155F\u1560\u1561"+
+            "\u1562\u1563\u1564\u1565\u1566\u1567\u1568\u1569"+
+            "\u156A\u156B\u156C\u156D\u156E\u156F\u1570\u1571"+
+            "\u1572\u1573\u1574\u1575\u1576\u1577\u1578\u1579"+
+            "\u157A\u157B\u157C\u157D\u157E\u157F\u1580\u1581"+
+            "\u1582\u1583\u1584\u1585\u1586\u1587\u1588\u1589"+
+            "\u158A\u158B\u158C\u158D\u158E\u158F\u1590\u1591"+
+            "\u1592\u1593\u1594\u1595\u1596\u1597\u1598\u1599"+
+            "\u159A\u159B\u159C\u159D\u159E\u159F\u15A0\u15A1"+
+            "\u15A2\u15A3\u15A4\u15A5\u15A6\u15A7\u15A8\u15A9"+
+            "\u15AA\u15AB\u15AC\u15AD\u15AE\u15AF\u15B0\u15B1"+
+            "\u15B2\u15B3\u15B4\u15B5\u15B6\u15B7\u15B8\u15B9"+
+            "\u15BA\u15BB\u15BC\u15BD\u15BE\u15BF\u15C0\u15C1"+
+            "\u15C2\u15C3\u15C4\u15C5\u15C6\u15C7\u15C8\u15C9"+
+            "\u15CA\u15CB\u15CC\u15CD\u15CE\u15CF\u15D0\u15D1"+
+            "\u15D2\u15D3\u15D4\u15D5\u15D6\u15D7\u15D8\u15D9"+
+            "\u15DA\u15DB\u15DC\u15DD\u15DE\u15DF\u15E0\u15E1"+
+            "\u15E2\u15E3\u15E4\u15E5\u15E6\u15E7\u15E8\u15E9"+
+            "\u15EA\u15EB\u15EC\u15ED\u15EE\u15EF\u15F0\u15F1"+
+            "\u15F2\u15F3\u15F4\u15F5\u15F6\u15F7\u15F8\u15F9"+
+            "\u15FA\u15FB\u15FC\u15FD\u15FE\u15FF\u1600\u1601"+
+            "\u1602\u1603\u1604\u1605\u1606\u1607\u1608\u1609"+
+            "\u160A\u160B\u160C\u160D\u160E\u160F\u1610\u1611"+
+            "\u1612\u1613\u1614\u1615\u1616\u1617\u1618\u1619"+
+            "\u161A\u161B\u161C\u161D\u161E\u161F\u1620\u1621"+
+            "\u1622\u1623\u1624\u1625\u1626\u1627\u1628\u1629"+
+            "\u162A\u162B\u162C\u162D\u162E\u162F\u1630\u1631"+
+            "\u1632\u1633\u1634\u1635\u1636\u1637\u1638\u1639"+
+            "\u163A\u163B\u163C\u163D\u163E\u163F\u1640\u1641"+
+            "\u1642\u1643\u1644\u1645\u1646\u1647\u1648\u1649"+
+            "\u164A\u164B\u164C\u164D\u164E\u164F\u1650\u1651"+
+            "\u1652\u1653\u1654\u1655\u1656\u1657\u1658\u1659"+
+            "\u165A\u165B\u165C\u165D\u165E\u165F\u1660\u1661"+
+            "\u1662\u1663\u1664\u1665\u1666\u1667\u1668\u1669"+
+            "\u166A\u166B\u166C\u166D\u166E\u166F\u1670\u1671"+
+            "\u1672\u1673\u1674\u1675\u1676\u1677\u1678\u1679"+
+            "\u167A\u167B\u167C\u167D\u167E\u167F\u1680\u1681"+
+            "\u1682\u1683\u1684\u1685\u1686\u1687\u1688\u1689"+
+            "\u168A\u168B\u168C\u168D\u168E\u168F\u1690\u1691"+
+            "\u1692\u1693\u1694\u1695\u1696\u1697\u1698\u1699"+
+            "\u169A\u169B\u169C\u169D\u169E\u169F\u16A0\u16A1"+
+            "\u16A2\u16A3\u16A4\u16A5\u16A6\u16A7\u16A8\u16A9"+
+            "\u16AA\u16AB\u16AC\u16AD\u16AE\u16AF\u16B0\u16B1"+
+            "\u16B2\u16B3\u16B4\u16B5\u16B6\u16B7\u16B8\u16B9"+
+            "\u16BA\u16BB\u16BC\u16BD\u16BE\u16BF\u16C0\u16C1"+
+            "\u16C2\u16C3\u16C4\u16C5\u16C6\u16C7\u16C8\u16C9"+
+            "\u16CA\u16CB\u16CC\u16CD\u16CE\u16CF\u16D0\u16D1"+
+            "\u16D2\u16D3\u16D4\u16D5\u16D6\u16D7\u16D8\u16D9"+
+            "\u16DA\u16DB\u16DC\u16DD\u16DE\u16DF\u16E0\u16E1"+
+            "\u16E2\u16E3\u16E4\u16E5\u16E6\u16E7\u16E8\u16E9"+
+            "\u16EA\u16EB\u16EC\u16ED\u16EE\u16EF\u16F0\u16F1"+
+            "\u16F2\u16F3\u16F4\u16F5\u16F6\u16F7\u16F8\u16F9"+
+            "\u16FA\u16FB\u16FC\u16FD\u16FE\u16FF\u1700\u1701"+
+            "\u1702\u1703\u1704\u1705\u1706\u1707\u1708\u1709"+
+            "\u170A\u170B\u170C\u170D\u170E\u170F\u1710\u1711"+
+            "\u1712\u1713\u1714\u1715\u1716\u1717\u1718\u1719"+
+            "\u171A\u171B\u171C\u171D\u171E\u171F\u1720\u1721"+
+            "\u1722\u1723\u1724\u1725\u1726\u1727\u1728\u1729"+
+            "\u172A\u172B\u172C\u172D\u172E\u172F\u1730\u1731"+
+            "\u1732\u1733\u1734\u1735\u1736\u1737\u1738\u1739"+
+            "\u173A\u173B\u173C\u173D\u173E\u173F\u1740\u1741"+
+            "\u1742\u1743\u1744\u1745\u1746\u1747\u1748\u1749"+
+            "\u174A\u174B\u174C\u174D\u174E\u174F\u1750\u1751"+
+            "\u1752\u1753\u1754\u1755\u1756\u1757\u1758\u1759"+
+            "\u175A\u175B\u175C\u175D\u175E\u175F\u1760\u1761"+
+            "\u1762\u1763\u1764\u1765\u1766\u1767\u1768\u1769"+
+            "\u176A\u176B\u176C\u176D\u176E\u176F\u1770\u1771"+
+            "\u1772\u1773\u1774\u1775\u1776\u1777\u1778\u1779"+
+            "\u177A\u177B\u177C\u177D\u177E\u177F\u1780\u1781"+
+            "\u1782\u1783\u1784\u1785\u1786\u1787\u1788\u1789"+
+            "\u178A\u178B\u178C\u178D\u178E\u178F\u1790\u1791"+
+            "\u1792\u1793\u1794\u1795\u1796\u1797\u1798\u1799"+
+            "\u179A\u179B\u179C\u179D\u179E\u179F\u17A0\u17A1"+
+            "\u17A2\u17A3\u17A4\u17A5\u17A6\u17A7\u17A8\u17A9"+
+            "\u17AA\u17AB\u17AC\u17AD\u17AE\u17AF\u17B0\u17B1"+
+            "\u17B2\u17B3\u17B4\u17B5\u17B6\u17B7\u17B8\u17B9"+
+            "\u17BA\u17BB\u17BC\u17BD\u17BE\u17BF\u17C0\u17C1"+
+            "\u17C2\u17C3\u17C4\u17C5\u17C6\u17C7\u17C8\u17C9"+
+            "\u17CA\u17CB\u17CC\u17CD\u17CE\u17CF\u17D0\u17D1"+
+            "\u17D2\u17D3\u17D4\u17D5\u17D6\u17D7\u17D8\u17D9"+
+            "\u17DA\u17DB\u17DC\u17DD\u17DE\u17DF\u17E0\u17E1"+
+            "\u17E2\u17E3\u17E4\u17E5\u17E6\u17E7\u17E8\u17E9"+
+            "\u17EA\u17EB\u17EC\u17ED\u17EE\u17EF\u17F0\u17F1"+
+            "\u17F2\u17F3\u17F4\u17F5\u17F6\u17F7\u17F8\u17F9"+
+            "\u17FA\u17FB\u17FC\u17FD\u17FE\u17FF\u1800\u1801"+
+            "\u1802\u1803\u1804\u1805\u1806\u1807\u1808\u1809"+
+            "\u180A\u180B\u180C\u180D\u180E\u180F\u1810\u1811"+
+            "\u1812\u1813\u1814\u1815\u1816\u1817\u1818\u1819"+
+            "\u181A\u181B\u181C\u181D\u181E\u181F\u1820\u1821"+
+            "\u1822\u1823\u1824\u1825\u1826\u1827\u1828\u1829"+
+            "\u182A\u182B\u182C\u182D\u182E\u182F\u1830\u1831"+
+            "\u1832\u1833\u1834\u1835\u1836\u1837\u1838\u1839"+
+            "\u183A\u183B\u183C\u183D\u183E\u183F\u1840\u1841"+
+            "\u1842\u1843\u1844\u1845\u1846\u1847\u1848\u1849"+
+            "\u184A\u184B\u184C\u184D\u184E\u184F\u1850\u1851"+
+            "\u1852\u1853\u1854\u1855\u1856\u1857\u1858\u1859"+
+            "\u185A\u185B\u185C\u185D\u185E\u185F\u1860\u1861"+
+            "\u1862\u1863\u1864\u1865\u1866\u1867\u1868\u1869"+
+            "\u186A\u186B\u186C\u186D\u186E\u186F\u1870\u1871"+
+            "\u1872\u1873\u1874\u1875\u1876\u1877\u1878\u1879"+
+            "\u187A\u187B\u187C\u187D\u187E\u187F\u1880\u1881"+
+            "\u1882\u1883\u1884\u1885\u1886\u1887\u1888\u1889"+
+            "\u188A\u188B\u188C\u188D\u188E\u188F\u1890\u1891"+
+            "\u1892\u1893\u1894\u1895\u1896\u1897\u1898\u1899"+
+            "\u189A\u189B\u189C\u189D\u189E\u189F\u18A0\u18A1"+
+            "\u18A2\u18A3\u18A4\u18A5\u18A6\u18A7\u18A8\u18A9"+
+            "\u18AA\u18AB\u18AC\u18AD\u18AE\u18AF\u18B0\u18B1"+
+            "\u18B2\u18B3\u18B4\u18B5\u18B6\u18B7\u18B8\u18B9"+
+            "\u18BA\u18BB\u18BC\u18BD\u18BE\u18BF\u18C0\u18C1"+
+            "\u18C2\u18C3\u18C4\u18C5\u18C6\u18C7\u18C8\u18C9"+
+            "\u18CA\u18CB\u18CC\u18CD\u18CE\u18CF\u18D0\u18D1"+
+            "\u18D2\u18D3\u18D4\u18D5\u18D6\u18D7\u18D8\u18D9"+
+            "\u18DA\u18DB\u18DC\u18DD\u18DE\u18DF\u18E0\u18E1"+
+            "\u18E2\u18E3\u18E4\u18E5\u18E6\u18E7\u18E8\u18E9"+
+            "\u18EA\u18EB\u18EC\u18ED\u18EE\u18EF\u18F0\u18F1"+
+            "\u18F2\u18F3\u18F4\u18F5\u18F6\u18F7\u18F8\u18F9"+
+            "\u18FA\u18FB\u18FC\u18FD\u18FE\u18FF\u1900\u1901"+
+            "\u1902\u1903\u1904\u1905\u1906\u1907\u1908\u1909"+
+            "\u190A\u190B\u190C\u190D\u190E\u190F\u1910\u1911"+
+            "\u1912\u1913\u1914\u1915\u1916\u1917\u1918\u1919"+
+            "\u191A\u191B\u191C\u191D\u191E\u191F\u1920\u1921"+
+            "\u1922\u1923\u1924\u1925\u1926\u1927\u1928\u1929"+
+            "\u192A\u192B\u192C\u192D\u192E\u192F\u1930\u1931"+
+            "\u1932\u1933\u1934\u1935\u1936\u1937\u1938\u1939"+
+            "\u193A\u193B\u193C\u193D\u193E\u193F\u1940\u1941"+
+            "\u1942\u1943\u1944\u1945\u1946\u1947\u1948\u1949"+
+            "\u194A\u194B\u194C\u194D\u194E\u194F\u1950\u1951"+
+            "\u1952\u1953\u1954\u1955\u1956\u1957\u1958\u1959"+
+            "\u195A\u195B\u195C\u195D\u195E\u195F\u1960\u1961"+
+            "\u1962\u1963\u1964\u1965\u1966\u1967\u1968\u1969"+
+            "\u196A\u196B\u196C\u196D\u196E\u196F\u1970\u1971"+
+            "\u1972\u1973\u1974\u1975\u1976\u1977\u1978\u1979"+
+            "\u197A\u197B\u197C\u197D\u197E\u197F\u1980\u1981"+
+            "\u1982\u1983\u1984\u1985\u1986\u1987\u1988\u1989"+
+            "\u198A\u198B\u198C\u198D\u198E\u198F\u1990\u1991"+
+            "\u1992\u1993\u1994\u1995\u1996\u1997\u1998\u1999"+
+            "\u199A\u199B\u199C\u199D\u199E\u199F\u19A0\u19A1"+
+            "\u19A2\u19A3\u19A4\u19A5\u19A6\u19A7\u19A8\u19A9"+
+            "\u19AA\u19AB\u19AC\u19AD\u19AE\u19AF\u19B0\u19B1"+
+            "\u19B2\u19B3\u19B4\u19B5\u19B6\u19B7\u19B8\u19B9"+
+            "\u19BA\u19BB\u19BC\u19BD\u19BE\u19BF\u19C0\u19C1"+
+            "\u19C2\u19C3\u19C4\u19C5\u19C6\u19C7\u19C8\u19C9"+
+            "\u19CA\u19CB\u19CC\u19CD\u19CE\u19CF\u19D0\u19D1"+
+            "\u19D2\u19D3\u19D4\u19D5\u19D6\u19D7\u19D8\u19D9"+
+            "\u19DA\u19DB\u19DC\u19DD\u19DE\u19DF\u19E0\u19E1"+
+            "\u19E2\u19E3\u19E4\u19E5\u19E6\u19E7\u19E8\u19E9"+
+            "\u19EA\u19EB\u19EC\u19ED\u19EE\u19EF\u19F0\u19F1"+
+            "\u19F2\u19F3\u19F4\u19F5\u19F6\u19F7\u19F8\u19F9"+
+            "\u19FA\u19FB\u19FC\u19FD\u19FE\u19FF\u1A00\u1A01"+
+            "\u1A02\u1A03\u1A04\u1A05\u1A06\u1A07\u1A08\u1A09"+
+            "\u1A0A\u1A0B\u1A0C\u1A0D\u1A0E\u1A0F\u1A10\u1A11"+
+            "\u1A12\u1A13\u1A14\u1A15\u1A16\u1A17\u1A18\u1A19"+
+            "\u1A1A\u1A1B\u1A1C\u1A1D\u1A1E\u1A1F\u1A20\u1A21"+
+            "\u1A22\u1A23\u1A24\u1A25\u1A26\u1A27\u1A28\u1A29"+
+            "\u1A2A\u1A2B\u1A2C\u1A2D\u1A2E\u1A2F\u1A30\u1A31"+
+            "\u1A32\u1A33\u1A34\u1A35\u1A36\u1A37\u1A38\u1A39"+
+            "\u1A3A\u1A3B\u1A3C\u1A3D\u1A3E\u1A3F\u1A40\u1A41"+
+            "\u1A42\u1A43\u1A44\u1A45\u1A46\u1A47\u1A48\u1A49"+
+            "\u1A4A\u1A4B\u1A4C\u1A4D\u1A4E\u1A4F\u1A50\u1A51"+
+            "\u1A52\u1A53\u1A54\u1A55\u1A56\u1A57\u1A58\u1A59"+
+            "\u1A5A\u1A5B\u1A5C\u1A5D\u1A5E\u1A5F\u1A60\u1A61"+
+            "\u1A62\u1A63\u1A64\u1A65\u1A66\u1A67\u1A68\u1A69"+
+            "\u1A6A\u1A6B\u1A6C\u1A6D\u1A6E\u1A6F\u1A70\u1A71"+
+            "\u1A72\u1A73\u1A74\u1A75\u1A76\u1A77\u1A78\u1A79"+
+            "\u1A7A\u1A7B\u1A7C\u1A7D\u1A7E\u1A7F\u1A80\u1A81"+
+            "\u1A82\u1A83\u1A84\u1A85\u1A86\u1A87\u1A88\u1A89"+
+            "\u1A8A\u1A8B\u1A8C\u1A8D\u1A8E\u1A8F\u1A90\u1A91"+
+            "\u1A92\u1A93\u1A94\u1A95\u1A96\u1A97\u1A98\u1A99"+
+            "\u1A9A\u1A9B\u1A9C\u1A9D\u1A9E\u1A9F\u1AA0\u1AA1"+
+            "\u1AA2\u1AA3\u1AA4\u1AA5\u1AA6\u1AA7\u1AA8\u1AA9"+
+            "\u1AAA\u1AAB\u1AAC\u1AAD\u1AAE\u1AAF\u1AB0\u1AB1"+
+            "\u1AB2\u1AB3\u1AB4\u1AB5\u1AB6\u1AB7\u1AB8\u1AB9"+
+            "\u1ABA\u1ABB\u1ABC\u1ABD\u1ABE\u1ABF\u1AC0\u1AC1"+
+            "\u1AC2\u1AC3\u1AC4\u1AC5\u1AC6\u1AC7\u1AC8\u1AC9"+
+            "\u1ACA\u1ACB\u1ACC\u1ACD\u1ACE\u1ACF\u1AD0\u1AD1"+
+            "\u1AD2\u1AD3\u1AD4\u1AD5\u1AD6\u1AD7\u1AD8\u1AD9"+
+            "\u1ADA\u1ADB\u1ADC\u1ADD\u1ADE\u1ADF\u1AE0\u1AE1"+
+            "\u1AE2\u1AE3\u1AE4\u1AE5\u1AE6\u1AE7\u1AE8\u1AE9"+
+            "\u1AEA\u1AEB\u1AEC\u1AED\u1AEE\u1AEF\u1AF0\u1AF1"+
+            "\u1AF2\u1AF3\u1AF4\u1AF5\u1AF6\u1AF7\u1AF8\u1AF9"+
+            "\u1AFA\u1AFB\u1AFC\u1AFD\u1AFE\u1AFF\u1B00\u1B01"+
+            "\u1B02\u1B03\u1B04\u1B05\u1B06\u1B07\u1B08\u1B09"+
+            "\u1B0A\u1B0B\u1B0C\u1B0D\u1B0E\u1B0F\u1B10\u1B11"+
+            "\u1B12\u1B13\u1B14\u1B15\u1B16\u1B17\u1B18\u1B19"+
+            "\u1B1A\u1B1B\u1B1C\u1B1D\u1B1E\u1B1F\u1B20\u1B21"+
+            "\u1B22\u1B23\u1B24\u1B25\u1B26\u1B27\u1B28\u1B29"+
+            "\u1B2A\u1B2B\u1B2C\u1B2D\u1B2E\u1B2F\u1B30\u1B31"+
+            "\u1B32\u1B33\u1B34\u1B35\u1B36\u1B37\u1B38\u1B39"+
+            "\u1B3A\u1B3B\u1B3C\u1B3D\u1B3E\u1B3F\u1B40\u1B41"+
+            "\u1B42\u1B43\u1B44\u1B45\u1B46\u1B47\u1B48\u1B49"+
+            "\u1B4A\u1B4B\u1B4C\u1B4D\u1B4E\u1B4F\u1B50\u1B51"+
+            "\u1B52\u1B53\u1B54\u1B55\u1B56\u1B57\u1B58\u1B59"+
+            "\u1B5A\u1B5B\u1B5C\u1B5D\u1B5E\u1B5F\u1B60\u1B61"+
+            "\u1B62\u1B63\u1B64\u1B65\u1B66\u1B67\u1B68\u1B69"+
+            "\u1B6A\u1B6B\u1B6C\u1B6D\u1B6E\u1B6F\u1B70\u1B71"+
+            "\u1B72\u1B73\u1B74\u1B75\u1B76\u1B77\u1B78\u1B79"+
+            "\u1B7A\u1B7B\u1B7C\u1B7D\u1B7E\u1B7F\u1B80\u1B81"+
+            "\u1B82\u1B83\u1B84\u1B85\u1B86\u1B87\u1B88\u1B89"+
+            "\u1B8A\u1B8B\u1B8C\u1B8D\u1B8E\u1B8F\u1B90\u1B91"+
+            "\u1B92\u1B93\u1B94\u1B95\u1B96\u1B97\u1B98\u1B99"+
+            "\u1B9A\u1B9B\u1B9C\u1B9D\u1B9E\u1B9F\u1BA0\u1BA1"+
+            "\u1BA2\u1BA3\u1BA4\u1BA5\u1BA6\u1BA7\u1BA8\u1BA9"+
+            "\u1BAA\u1BAB\u1BAC\u1BAD\u1BAE\u1BAF\u1BB0\u1BB1"+
+            "\u1BB2\u1BB3\u1BB4\u1BB5\u1BB6\u1BB7\u1BB8\u1BB9"+
+            "\u1BBA\u1BBB\u1BBC\u1BBD\u1BBE\u1BBF\u1BC0\u1BC1"+
+            "\u1BC2\u1BC3\u1BC4\u1BC5\u1BC6\u1BC7\u1BC8\u1BC9"+
+            "\u1BCA\u1BCB\u1BCC\u1BCD\u1BCE\u1BCF\u1BD0\u1BD1"+
+            "\u1BD2\u1BD3\u1BD4\u1BD5\u1BD6\u1BD7\u1BD8\u1BD9"+
+            "\u1BDA\u1BDB\u1BDC\u1BDD\u1BDE\u1BDF\u1BE0\u1BE1"+
+            "\u1BE2\u1BE3\u1BE4\u1BE5\u1BE6\u1BE7\u1BE8\u1BE9"+
+            "\u1BEA\u1BEB\u1BEC\u1BED\u1BEE\u1BEF\u1BF0\u1BF1"+
+            "\u1BF2\u1BF3\u1BF4\u1BF5\u1BF6\u1BF7\u1BF8\u1BF9"+
+            "\u1BFA\u1BFB\u1BFC\u1BFD\u1BFE\u1BFF\u1C00\u1C01"+
+            "\u1C02\u1C03\u1C04\u1C05\u1C06\u1C07\u1C08\u1C09"+
+            "\u1C0A\u1C0B\u1C0C\u1C0D\u1C0E\u1C0F\u1C10\u1C11"+
+            "\u1C12\u1C13\u1C14\u1C15\u1C16\u1C17\u1C18\u1C19"+
+            "\u1C1A\u1C1B\u1C1C\u1C1D\u1C1E\u1C1F\u1C20\u1C21"+
+            "\u1C22\u1C23\u1C24\u1C25\u1C26\u1C27\u1C28\u1C29"+
+            "\u1C2A\u1C2B\u1C2C\u1C2D\u1C2E\u1C2F\u1C30\u1C31"+
+            "\u1C32\u1C33\u1C34\u1C35\u1C36\u1C37\u1C38\u1C39"+
+            "\u1C3A\u1C3B\u1C3C\u1C3D\u1C3E\u1C3F\u1C40\u1C41"+
+            "\u1C42\u1C43\u1C44\u1C45\u1C46\u1C47\u1C48\u1C49"+
+            "\u1C4A\u1C4B\u1C4C\u1C4D\u1C4E\u1C4F\u1C50\u1C51"+
+            "\u1C52\u1C53\u1C54\u1C55\u1C56\u1C57\u1C58\u1C59"+
+            "\u1C5A\u1C5B\u1C5C\u1C5D\u1C5E\u1C5F\u1C60\u1C61"+
+            "\u1C62\u1C63\u1C64\u1C65\u1C66\u1C67\u1C68\u1C69"+
+            "\u1C6A\u1C6B\u1C6C\u1C6D\u1C6E\u1C6F\u1C70\u1C71"+
+            "\u1C72\u1C73\u1C74\u1C75\u1C76\u1C77\u1C78\u1C79"+
+            "\u1C7A\u1C7B\u1C7C\u1C7D\u1C7E\u1C7F\u1C80\u1C81"+
+            "\u1C82\u1C83\u1C84\u1C85\u1C86\u1C87\u1C88\u1C89"+
+            "\u1C8A\u1C8B\u1C8C\u1C8D\u1C8E\u1C8F\u1C90\u1C91"+
+            "\u1C92\u1C93\u1C94\u1C95\u1C96\u1C97\u1C98\u1C99"+
+            "\u1C9A\u1C9B\u1C9C\u1C9D\u1C9E\u1C9F\u1CA0\u1CA1"+
+            "\u1CA2\u1CA3\u1CA4\u1CA5\u1CA6\u1CA7\u1CA8\u1CA9"+
+            "\u1CAA\u1CAB\u1CAC\u1CAD\u1CAE\u1CAF\u1CB0\u1CB1"+
+            "\u1CB2\u1CB3\u1CB4\u1CB5\u1CB6\u1CB7\u1CB8\u1CB9"+
+            "\u1CBA\u1CBB\u1CBC\u1CBD\u1CBE\u1CBF\u1CC0\u1CC1"+
+            "\u1CC2\u1CC3\u1CC4\u1CC5\u1CC6\u1CC7\u1CC8\u1CC9"+
+            "\u1CCA\u1CCB\u1CCC\u1CCD\u1CCE\u1CCF\u1CD0\u1CD1"+
+            "\u1CD2\u1CD3\u1CD4\u1CD5\u1CD6\u1CD7\u1CD8\u1CD9"+
+            "\u1CDA\u1CDB\u1CDC\u1CDD\u1CDE\u1CDF\u1CE0\u1CE1"+
+            "\u1CE2\u1CE3\u1CE4\u1CE5\u1CE6\u1CE7\u1CE8\u1CE9"+
+            "\u1CEA\u1CEB\u1CEC\u1CED\u1CEE\u1CEF\u1CF0\u1CF1"+
+            "\u1CF2\u1CF3\u1CF4\u1CF5\u1CF6\u1CF7\u1CF8\u1CF9"+
+            "\u1CFA\u1CFB\u1CFC\u1CFD\u1CFE\u1CFF\u1D00\u1D01"+
+            "\u1D02\u1D03\u1D04\u1D05\u1D06\u1D07\u1D08\u1D09"+
+            "\u1D0A\u1D0B\u1D0C\u1D0D\u1D0E\u1D0F\u1D10\u1D11"+
+            "\u1D12\u1D13\u1D14\u1D15\u1D16\u1D17\u1D18\u1D19"+
+            "\u1D1A\u1D1B\u1D1C\u1D1D\u1D1E\u1D1F\u1D20\u1D21"+
+            "\u1D22\u1D23\u1D24\u1D25\u1D26\u1D27\u1D28\u1D29"+
+            "\u1D2A\u1D2B\u1D2C\u1D2D\u1D2E\u1D2F\u1D30\u1D31"+
+            "\u1D32\u1D33\u1D34\u1D35\u1D36\u1D37\u1D38\u1D39"+
+            "\u1D3A\u1D3B\u1D3C\u1D3D\u1D3E\u1D3F\u1D40\u1D41"+
+            "\u1D42\u1D43\u1D44\u1D45\u1D46\u1D47\u1D48\u1D49"+
+            "\u1D4A\u1D4B\u1D4C\u1D4D\u1D4E\u1D4F\u1D50\u1D51"+
+            "\u1D52\u1D53\u1D54\u1D55\u1D56\u1D57\u1D58\u1D59"+
+            "\u1D5A\u1D5B\u1D5C\u1D5D\u1D5E\u1D5F\u1D60\u1D61"+
+            "\u1D62\u1D63\u1D64\u1D65\u1D66\u1D67\u1D68\u1D69"+
+            "\u1D6A\u1D6B\u1D6C\u1D6D\u1D6E\u1D6F\u1D70\u1D71"+
+            "\u1D72\u1D73\u1D74\u1D75\u1D76\u1D77\u1D78\u1D79"+
+            "\u1D7A\u1D7B\u1D7C\u1D7D\u1D7E\u1D7F\u1D80\u1D81"+
+            "\u1D82\u1D83\u1D84\u1D85\u1D86\u1D87\u1D88\u1D89"+
+            "\u1D8A\u1D8B\u1D8C\u1D8D\u1D8E\u1D8F\u1D90\u1D91"+
+            "\u1D92\u1D93\u1D94\u1D95\u1D96\u1D97\u1D98\u1D99"+
+            "\u1D9A\u1D9B\u1D9C\u1D9D\u1D9E\u1D9F\u1DA0\u1DA1"+
+            "\u1DA2\u1DA3\u1DA4\u1DA5\u1DA6\u1DA7\u1DA8\u1DA9"+
+            "\u1DAA\u1DAB\u1DAC\u1DAD\u1DAE\u1DAF\u1DB0\u1DB1"+
+            "\u1DB2\u1DB3\u1DB4\u1DB5\u1DB6\u1DB7\u1DB8\u1DB9"+
+            "\u1DBA\u1DBB\u1DBC\u1DBD\u1DBE\u1DBF\u1DC0\u1DC1"+
+            "\u1DC2\u1DC3\u1DC4\u1DC5\u1DC6\u1DC7\u1DC8\u1DC9"+
+            "\u1DCA\u1DCB\u1DCC\u1DCD\u1DCE\u1DCF\u1DD0\u1DD1"+
+            "\u1DD2\u1DD3\u1DD4\u1DD5\u1DD6\u1DD7\u1DD8\u1DD9"+
+            "\u1DDA\u1DDB\u1DDC\u1DDD\u1DDE\u1DDF\u1DE0\u1DE1";
+
+        private final static String innerIndex2=
+            "\u1DE2\u1DE3\u1DE4\u1DE5\u1DE6\u1DE7\u1DE8\u1DE9"+
+            "\u1DEA\u1DEB\u1DEC\u1DED\u1DEE\u1DEF\u1DF0\u1DF1"+
+            "\u1DF2\u1DF3\u1DF4\u1DF5\u1DF6\u1DF7\u1DF8\u1DF9"+
+            "\u1DFA\u1DFB\u1DFC\u1DFD\u1DFE\u1DFF\u1E00\u1E01"+
+            "\u1E02\u1E03\u1E04\u1E05\u1E06\u1E07\u1E08\u1E09"+
+            "\u1E0A\u1E0B\u1E0C\u1E0D\u1E0E\u1E0F\u1E10\u1E11"+
+            "\u1E12\u1E13\u1E14\u1E15\u1E16\u1E17\u1E18\u1E19"+
+            "\u1E1A\u1E1B\u1E1C\u1E1D\u1E1E\u1E1F\u1E20\u1E21"+
+            "\u1E22\u1E23\u1E24\u1E25\u1E26\u1E27\u1E28\u1E29"+
+            "\u1E2A\u1E2B\u1E2C\u1E2D\u1E2E\u1E2F\u1E30\u1E31"+
+            "\u1E32\u1E33\u1E34\u1E35\u1E36\u1E37\u1E38\u1E39"+
+            "\u1E3A\u1E3B\u1E3C\u1E3D\u1E3E\u1E3F\u1E40\u1E41"+
+            "\u1E42\u1E43\u1E44\u1E45\u1E46\u1E47\u1E48\u1E49"+
+            "\u1E4A\u1E4B\u1E4C\u1E4D\u1E4E\u1E4F\u1E50\u1E51"+
+            "\u1E52\u1E53\u1E54\u1E55\u1E56\u1E57\u1E58\u1E59"+
+            "\u1E5A\u1E5B\u1E5C\u1E5D\u1E5E\u1E5F\u1E60\u1E61"+
+            "\u1E62\u1E63\u1E64\u1E65\u1E66\u1E67\u1E68\u1E69"+
+            "\u1E6A\u1E6B\u1E6C\u1E6D\u1E6E\u1E6F\u1E70\u1E71"+
+            "\u1E72\u1E73\u1E74\u1E75\u1E76\u1E77\u1E78\u1E79"+
+            "\u1E7A\u1E7B\u1E7C\u1E7D\u1E7E\u1E7F\u1E80\u1E81"+
+            "\u1E82\u1E83\u1E84\u1E85\u1E86\u1E87\u1E88\u1E89"+
+            "\u1E8A\u1E8B\u1E8C\u1E8D\u1E8E\u1E8F\u1E90\u1E91"+
+            "\u1E92\u1E93\u1E94\u1E95\u1E96\u1E97\u1E98\u1E99"+
+            "\u1E9A\u1E9B\u1E9C\u1E9D\u1E9E\u1E9F\u1EA0\u1EA1"+
+            "\u1EA2\u1EA3\u1EA4\u1EA5\u1EA6\u1EA7\u1EA8\u1EA9"+
+            "\u1EAA\u1EAB\u1EAC\u1EAD\u1EAE\u1EAF\u1EB0\u1EB1"+
+            "\u1EB2\u1EB3\u1EB4\u1EB5\u1EB6\u1EB7\u1EB8\u1EB9"+
+            "\u1EBA\u1EBB\u1EBC\u1EBD\u1EBE\u1EBF\u1EC0\u1EC1"+
+            "\u1EC2\u1EC3\u1EC4\u1EC5\u1EC6\u1EC7\u1EC8\u1EC9"+
+            "\u1ECA\u1ECB\u1ECC\u1ECD\u1ECE\u1ECF\u1ED0\u1ED1"+
+            "\u1ED2\u1ED3\u1ED4\u1ED5\u1ED6\u1ED7\u1ED8\u1ED9"+
+            "\u1EDA\u1EDB\u1EDC\u1EDD\u1EDE\u1EDF\u1EE0\u1EE1"+
+            "\u1EE2\u1EE3\u1EE4\u1EE5\u1EE6\u1EE7\u1EE8\u1EE9"+
+            "\u1EEA\u1EEB\u1EEC\u1EED\u1EEE\u1EEF\u1EF0\u1EF1"+
+            "\u0000\u1EF2\u1EF3\u0000\u0000\u0000\u0000\u1EF4"+
+            "\u0000\u0000\u1EF5\u1EF6\u0000\u0000\u1EF7\u1EF8"+
+            "\u1EF9\u1EFA\u1EFB\u1EFC\u1EFD\u0000\u0000\u1EFE"+
+            "\u1EFF\u1F00\u1F01\u1F02\u1F03\u1F04\u1F05\u1F06"+
+            "\u0000\u1F07\u0000\u0000\u1F08\u0000\u1F09\u1F0A"+
+            "\u1F0B\u1F0C\u1F0D\u0000\u1F0E\u1F0F\u1F10\u1F11"+
+            "\u1F12\u1F13\u1F14\u1F15\u1F16\u1F17\u1F18\u1F19"+
+            "\u1F1A\u1F1B\u1F1C\u1F1D\u1F1E\u1F1F\u1F20\u1F21"+
+            "\u1F22\u1F23\u1F24\u1F25\u1F26\u1F27\u1F28\u1F29"+
+            "\u1F2A\u1F2B\u1F2C\u1F2D\u1F2E\u1F2F\u1F30\u1F31"+
+            "\u1F32\u1F33\u1F34\u1F35\u1F36\u1F37\u1F38\u1F39"+
+            "\u1F3A\u1F3B\u1F3C\u1F3D\u1F3E\u1F3F\u1F40\u1F41"+
+            "\u1F42\u1F43\u1F44\u1F45\u1F46\u1F47\u1F48\u1F49"+
+            "\u1F4A\u1F4B\u1F4C\u1F4D\u1F4E\u1F4F\u1F50\u1F51"+
+            "\u1F52\u1F53\u1F54\u1F55\u1F56\u1F57\u1F58\u1F59"+
+            "\u1F5A\u1F5B\u1F5C\u1F5D\u1F5E\u1F5F\u1F60\u1F61"+
+            "\u1F62\u1F63\u1F64\u1F65\u1F66\u1F67\u1F68\u1F69"+
+            "\u1F6A\u1F6B\u1F6C\u1F6D\u1F6E\u1F6F\u1F70\u1F71"+
+            "\u1F72\u1F73\u1F74\u1F75\u1F76\u1F77\u1F78\u1F79"+
+            "\u1F7A\u1F7B\u1F7C\u1F7D\u0000\u1F7E\u1F7F\u1F80"+
+            "\u1F81\u1F82\u1F83\u1F84\u1F85\u1F86\u1F87\u1F88"+
+            "\u1F89\u1F8A\u1F8B\u1F8C\u1F8D\u1F8E\u1F8F\u1F90"+
+            "\u1F91\u1F92\u1F93\u1F94\u1F95\u1F96\u1F97\u1F98"+
+            "\u1F99\u1F9A\u1F9B\u1F9C\u1F9D\u1F9E\u1F9F\u1FA0"+
+            "\u1FA1\u1FA2\u1FA3\u1FA4\u1FA5\u1FA6\u1FA7\u1FA8"+
+            "\u1FA9\u1FAA\u1FAB\u1FAC\u1FAD\u1FAE\u1FAF\u1FB0"+
+            "\u1FB1\u1FB2\u1FB3\u1FB4\u1FB5\u1FB6\u1FB7\u1FB8"+
+            "\u1FB9\u1FBA\u1FBB\u1FBC\u1FBD\u1FBE\u1FBF\u1FC0"+
+            "\u1FC1\u1FC2\u1FC3\u1FC4\u1FC5\u1FC6\u1FC7\u1FC8"+
+            "\u1FC9\u1FCA\u1FCB\u1FCC\u1FCD\u1FCE\u1FCF\u1FD0"+
+            "\u1FD1\u1FD2\u1FD3\u0000\u1FD4\u0000\u1FD5\u1FD6"+
+            "\u1FD7\u0000\u1FD8\u1FD9\u1FDA\u1FDB\u1FDC\u1FDD"+
+            "\u1FDE\u1FDF\u1FE0\u1FE1\u1FE2\u1FE3\u0000\u1FE4"+
+            "\u1FE5\u1FE6\u1FE7\u1FE8\u1FE9\u1FEA\u1FEB\u1FEC"+
+            "\u1FED\u0000\u1FEE\u1FEF\u1FF0\u1FF1\u1FF2\u1FF3"+
+            "\u1FF4\u1FF5\u1FF6\u1FF7\u1FF8\u1FF9\u1FFA\u1FFB"+
+            "\u1FFC\u1FFD\u1FFE\u1FFF\u2000\u2001\u2002\u2003"+
+            "\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u200B"+
+            "\u200C\u200D\u200E\u200F\u2010\u2011\u2012\u2013"+
+            "\u2014\u2015\u2016\u2017\u2018\u2019\u201A\u201B"+
+            "\u201C\u201D\u201E\u201F\u2020\u2021\u2022\u2023"+
+            "\u2024\u2025\u2026\u2027\u2028\u2029\u202A\u202B"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u202C\u202D\u202E\u202F"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u2030\u2031\u2032\u2033\u2034\u2035"+
+            "\u2036\u2037\u2038\u2039\u203A\u203B\u203C\u203D"+
+            "\u203E\u203F\u2040\u2041\u2042\u2043\u2044\u2045"+
+            "\u0000\u0000\u0000\u0000\u2046\u2047\u0000\u0000"+
+            "\u0000\u0000\u2048\u2049\u204A\u204B\u204C\u204D"+
+            "\u204E\u204F\u2050\u2051\u2052\u2053\u2054\u2055"+
+            "\u2056\u2057\u2058\u2059\u205A\u205B\u205C\u205D"+
+            "\u205E\u205F\u2060\u2061\u2062\u2063\u2064\u2065"+
+            "\u2066\u2067\u2068\u2069\u206A\u206B\u206C\u206D"+
+            "\u206E\u206F\u2070\u2071\u2072\u2073\u2074\u2075"+
+            "\u2076\u2077\u2078\u2079\u207A\u207B\u207C\u207D"+
+            "\u207E\u207F\u2080\u2081\u2082\u2083\u2084\u2085"+
+            "\u2086\u2087\u2088\u2089\u208A\u208B\u208C\u208D"+
+            "\u208E\u208F\u2090\u2091\u2092\u2093\u2094\u2095"+
+            "\u2096\u2097\u2098\u2099\u209A\u209B\u209C\u209D"+
+            "\u209E\u209F\u20A0\u20A1\u20A2\u20A3\u20A4\u20A5"+
+            "\u20A6\u20A7\u20A8\u20A9\u20AA\u20AB\u20AC\u20AD"+
+            "\u20AE\u20AF\u20B0\u20B1\u20B2\u20B3\u20B4\u20B5"+
+            "\u0000\u20B6\u20B7\u20B8\u20B9\u20BA\u20BB\u0000"+
+            "\u20BC\u0000\u20BD\u20BE\u20BF\u0000\u20C0\u20C1"+
+            "\u20C2\u20C3\u0000\u20C4\u20C5\u0000\u0000\u0000"+
+            "\u0000\u20C6\u20C7\u0000\u20C8\u0000\u20C9\u0000"+
+            "\u0000\u0000\u0000\u0000\u20CA\u20CB\u0000\u20CC"+
+            "\u20CD\u20CE\u20CF\u20D0\u0000\u0000\u0000\u0000"+
+            "\u20D1\u20D2\u20D3\u20D4\u20D5\u0000\u20D6\u20D7"+
+            "\u20D8\u20D9\u20DA\u20DB\u20DC\u20DD\u20DE\u20DF"+
+            "\u0000\u20E0\u20E1\u20E2\u0000\u20E3\u20E4\u20E5"+
+            "\u20E6\u20E7\u0000\u20E8\u20E9\u20EA\u20EB\u20EC"+
+            "\u20ED\u20EE\u20EF\u20F0\u20F1\u20F2\u20F3\u20F4"+
+            "\u0000\u0000\u20F5\u20F6\u0000\u0000\u0000\u0000"+
+            "\u20F7\u20F8\u20F9\u20FA\u20FB\u20FC\u0000\u0000"+
+            "\u20FD\u20FE\u20FF\u2100\u2101\u2102\u2103\u2104"+
+            "\u2105\u2106\u2107\u2108\u2109\u210A\u210B\u210C"+
+            "\u210D\u210E\u210F\u2110\u2111\u2112\u2113\u2114"+
+            "\u2115\u2116\u2117\u2118\u2119\u211A\u211B\u211C"+
+            "\u211D\u211E\u211F\u2120\u2121\u0000\u2122\u2123"+
+            "\u2124\u0000\u2125\u2126\u2127\u2128\u2129\u212A"+
+            "\u212B\u212C\u212D\u212E\u212F\u0000\u2130\u2131"+
+            "\u2132\u2133\u2134\u2135\u2136\u2137\u2138\u2139"+
+            "\u213A\u213B\u213C\u213D\u213E\u213F\u2140\u2141"+
+            "\u2142\u2143\u2144\u2145\u2146\u2147\u2148\u0000"+
+            "\u2149\u214A\u214B\u214C\u214D\u214E\u214F\u2150"+
+            "\u2151\u2152\u2153\u2154\u2155\u2156\u2157\u2158"+
+            "\u2159\u215A\u215B\u215C\u215D\u215E\u215F\u2160"+
+            "\u2161\u2162\u2163\u2164\u2165\u2166\u2167\u2168"+
+            "\u2169\u216A\u216B\u216C\u216D\u216E\u216F\u2170"+
+            "\u2171\u2172\u2173\u2174\u2175\u2176\u2177\u2178"+
+            "\u2179\u217A\u217B\u217C\u217D\u217E\u217F\u2180"+
+            "\u2181\u2182\u2183\u2184\u2185\u2186\u2187\u2188"+
+            "\u2189\u218A\u218B\u218C\u218D\u218E\u218F\u2190"+
+            "\u2191\u2192\u2193\u2194\u2195\u2196\u2197\u2198"+
+            "\u2199\u219A\u0000\u219B\u219C\u219D\u219E\u219F"+
+            "\u21A0\u21A1\u21A2\u21A3\u21A4\u21A5\u21A6\u21A7"+
+            "\u21A8\u21A9\u21AA\u21AB\u21AC\u21AD\u21AE\u21AF"+
+            "\u21B0\u21B1\u21B2\u21B3\u21B4\u21B5\u21B6\u21B7"+
+            "\u21B8\u21B9\u21BA\u21BB\u21BC\u21BD\u21BE\u21BF"+
+            "\u21C0\u21C1\u21C2\u21C3\u21C4\u21C5\u21C6\u21C7"+
+            "\u21C8\u21C9\u21CA\u21CB\u21CC\u21CD\u21CE\u21CF"+
+            "\u21D0\u21D1\u21D2\u21D3\u21D4\u21D5\u21D6\u21D7"+
+            "\u21D8\u21D9\u21DA\u21DB\u21DC\u21DD\u21DE\u21DF"+
+            "\u21E0\u21E1\u21E2\u21E3\u21E4\u21E5\u21E6\u21E7"+
+            "\u21E8\u21E9\u21EA\u21EB\u21EC\u21ED\u21EE\u21EF"+
+            "\u21F0\u21F1\u21F2\u21F3\u21F4\u21F5\u21F6\u21F7"+
+            "\u21F8\u21F9\u21FA\u21FB\u21FC\u21FD\u21FE\u21FF"+
+            "\u2200\u2201\u2202\u2203\u2204\u2205\u2206\u2207"+
+            "\u2208\u2209\u220A\u220B\u220C\u220D\u220E\u220F"+
+            "\u2210\u2211\u2212\u2213\u2214\u2215\u2216\u2217"+
+            "\u2218\u2219\u221A\u221B\u221C\u221D\u221E\u221F"+
+            "\u2220\u2221\u2222\u2223\u2224\u2225\u2226\u2227"+
+            "\u2228\u2229\u222A\u222B\u222C\u222D\u222E\u222F"+
+            "\u2230\u2231\u2232\u2233\u2234\u2235\u2236\u2237"+
+            "\u2238\u2239\u223A\u223B\u223C\u223D\u223E\u223F"+
+            "\u2240\u2241\u2242\u2243\u2244\u2245\u2246\u2247"+
+            "\u2248\u2249\u224A\u224B\u224C\u224D\u224E\u224F"+
+            "\u2250\u2251\u2252\u2253\u2254\u2255\u2256\u2257"+
+            "\u2258\u2259\u225A\u225B\u225C\u225D\u225E\u225F"+
+            "\u2260\u2261\u2262\u2263\u2264\u2265\u2266\u2267"+
+            "\u2268\u2269\u226A\u226B\u226C\u226D\u226E\u226F"+
+            "\u2270\u2271\u2272\u2273\u2274\u2275\u2276\u2277"+
+            "\u2278\u2279\u227A\u227B\u227C\u227D\u227E\u227F"+
+            "\u2280\u2281\u2282\u2283\u2284\u2285\u2286\u2287"+
+            "\u2288\u2289\u228A\u228B\u228C\u228D\u228E\u228F"+
+            "\u2290\u2291\u2292\u2293\u2294\u2295\u2296\u2297"+
+            "\u2298\u2299\u229A\u229B\u229C\u229D\u229E\u229F"+
+            "\u22A0\u22A1\u22A2\u22A3\u22A4\u22A5\u22A6\u22A7"+
+            "\u22A8\u22A9\u22AA\u22AB\u22AC\u22AD\u22AE\u22AF"+
+            "\u22B0\u22B1\u22B2\u22B3\u22B4\u22B5\u22B6\u22B7"+
+            "\u22B8\u22B9\u22BA\u22BB\u22BC\u22BD\u22BE\u22BF"+
+            "\u22C0\u22C1\u22C2\u22C3\u22C4\u22C5\u22C6\u22C7"+
+            "\u22C8\u22C9\u22CA\u22CB\u22CC\u22CD\u22CE\u22CF"+
+            "\u22D0\u22D1\u22D2\u22D3\u22D4\u22D5\u22D6\u22D7"+
+            "\u22D8\u22D9\u22DA\u22DB\u22DC\u22DD\u22DE\u22DF"+
+            "\u22E0\u22E1\u22E2\u22E3\u22E4\u22E5\u22E6\u22E7"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u22E8\u22E9\u22EA\u22EB\u22EC\u22ED"+
+            "\u22EE\u22EF\u22F0\u22F1\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u22F2\u22F3\u22F4\u22F5"+
+            "\u22F6\u22F7\u22F8\u22F9\u22FA\u22FB\u22FC\u22FD"+
+            "\u22FE\u22FF\u2300\u2301\u2302\u2303\u2304\u2305"+
+            "\u2306\u2307\u2308\u2309\u230A\u230B\u230C\u230D"+
+            "\u230E\u230F\u2310\u2311\u2312\u2313\u2314\u2315"+
+            "\u2316\u2317\u2318\u2319\u231A\u231B\u231C\u231D"+
+            "\u231E\u231F\u2320\u2321\u2322\u2323\u2324\u2325"+
+            "\u2326\u2327\u2328\u2329\u232A\u232B\u232C\u232D"+
+            "\u232E\u232F\u2330\u2331\u2332\u2333\u2334\u2335"+
+            "\u2336\u2337\u2338\u2339\u233A\u233B\u233C\u233D"+
+            "\u233E\u233F\u2340\u2341\u2342\u2343\u2344\u2345"+
+            "\u2346\u2347\u2348\u2349\u234A\u234B\u234C\u234D"+
+            "\u234E\u234F\u2350\u2351\u2352\u2353\u2354\u2355"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u2356\u2357\u2358\u2359"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u235A\u235B\u235C\u235D"+
+            "\u235E\u235F\u2360\u2361\u2362\u2363\u2364\u2365"+
+            "\u2366\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u2367\u2368\u2369\u0000\u0000\u0000\u236A\u236B"+
+            "\u236C\u236D\u236E\u236F\u2370\u2371\u2372\u2373"+
+            "\u0000\u0000\u2374\u2375\u2376\u2377\u2378\u2379"+
+            "\u237A\u237B\u237C\u237D\u237E\u237F\u2380\u2381"+
+            "\u2382\u2383\u0000\u0000\u2384\u2385\u2386\u2387"+
+            "\u2388\u2389\u238A\u238B\u0000\u0000\u238C\u238D"+
+            "\u238E\u238F\u2390\u2391\u2392\u2393\u0000\u0000"+
+            "\u2394\u2395\u2396\u0000\u2397\u2398\u0000\u0000"+
+            "\u2399\u239A\u239B\u239C\u239D\u239E\u239F\u23A0"+
+            "\u23A1\u23A2\u23A3\u23A4\u23A5\u23A6\u23A7\u23A8"+
+            "\u23A9\u23AA\u0000\u0000\u0000\u0000\u23AB\u23AC"+
+            "\u23AD\u23AE\u23AF\u23B0\u23B1\u23B2\u23B3\u23B4"+
+            "\u23B5\u23B6\u23B7\u23B8\u23B9\u23BA\u23BB\u23BC"+
+            "\u23BD\u23BE\u23BF\u23C0\u23C1\u23C2\u23C3\u23C4"+
+            "\u23C5\u23C6\u23C7\u23C8\u23C9\u0000\u0000\u23CA"+
+            "\u23CB\u0000\u23CC\u23CD\u23CE\u23CF\u23D0\u23D1"+
+            "\u23D2\u23D3\u23D4\u23D5\u23D6\u23D7\u23D8\u23D9"+
+            "\u23DA\u23DB\u23DC\u23DD\u23DE\u23DF\u23E0\u23E1"+
+            "\u23E2\u23E3\u23E4\u23E5\u23E6\u23E7\u23E8\u23E9"+
+            "\u23EA\u23EB\u23EC\u23ED\u23EE\u23EF\u23F0\u23F1"+
+            "\u23F2\u23F3\u23F4\u23F5\u23F6\u23F7\u23F8\u23F9"+
+            "\u23FA\u23FB\u23FC\u23FD\u23FE\u23FF\u2400\u2401"+
+            "\u0000\u2402\u0000\u2403\u2404\u2405\u2406\u2407"+
+            "\u2408\u2409\u240A\u240B\u240C\u240D\u240E\u240F"+
+            "\u2410\u2411\u2412\u2413\u2414\u2415\u2416\u2417"+
+            "\u2418\u2419\u241A\u241B\u241C\u241D\u241E\u241F"+
+            "\u2420\u2421\u2422\u2423\u2424\u2425\u2426\u2427"+
+            "\u2428\u2429\u242A\u242B\u242C\u242D\u242E\u242F"+
+            "\u2430\u2431\u2432\u2433\u2434\u2435\u2436\u2437"+
+            "\u2438\u2439\u243A\u243B\u243C\u243D\u243E\u243F"+
+            "\u2440\u2441\u2442\u2443\u2444\u2445\u2446\u2447"+
+            "\u2448\u2449\u244A\u244B\u244C\u244D\u244E\u244F"+
+            "\u2450\u2451\u2452\u2453\u2454\u2455\u2456\u2457"+
+            "\u2458\u2459\u245A\u245B\u245C\u245D\u245E\u245F"+
+            "\u2460\u2461\u2462\u2463\u2464\u2465\u2466\u2467"+
+            "\u2468\u2469\u246A\u246B\u246C\u246D\u246E\u246F"+
+            "\u2470\u2471\u2472\u2473\u2474\u2475\u2476\u2477"+
+            "\u2478\u2479\u247A\u247B\u247C\u247D\u247E\u247F"+
+            "\u2480\u2481\u2482\u2483\u2484\u2485\u2486\u2487"+
+            "\u2488\u2489\u248A\u248B\u248C\u248D\u248E\u248F"+
+            "\u2490\u2491\u2492\u2493\u2494\u2495\u2496\u2497"+
+            "\u2498\u2499\u249A\u249B\u249C\u249D\u249E\u249F"+
+            "\u24A0\u24A1\u24A2\u24A3\u24A4\u24A5\u24A6\u24A7"+
+            "\u24A8\u24A9\u24AA\u24AB\u24AC\u24AD\u24AE\u24AF"+
+            "\u24B0\u24B1\u24B2\u24B3\u24B4\u24B5\u24B6\u24B7"+
+            "\u24B8\u24B9\u24BA\u24BB\u24BC\u24BD\u24BE\u24BF"+
+            "\u24C0\u24C1\u24C2\u24C3\u24C4\u24C5\u24C6\u24C7"+
+            "\u24C8\u24C9\u24CA\u24CB\u24CC\u24CD\u24CE\u24CF"+
+            "\u24D0\u24D1\u24D2\u24D3\u24D4\u24D5\u24D6\u24D7"+
+            "\u24D8\u24D9\u24DA\u24DB\u24DC\u24DD\u24DE\u24DF"+
+            "\u24E0\u24E1\u24E2\u24E3\u24E4\u24E5\u24E6\u24E7"+
+            "\u24E8\u24E9\u24EA\u24EB\u24EC\u24ED\u24EE\u24EF"+
+            "\u24F0\u24F1\u24F2\u24F3\u24F4\u24F5\u24F6\u24F7"+
+            "\u24F8\u24F9\u24FA\u24FB\u24FC\u24FD\u24FE\u24FF"+
+            "\u2500\u2501\u2502\u2503\u2504\u2505\u2506\u2507"+
+            "\u2508\u2509\u250A\u250B\u250C\u250D\u250E\u250F"+
+            "\u2510\u2511\u2512\u2513\u2514\u2515\u2516\u2517"+
+            "\u2518\u2519\u251A\u251B\u251C\u251D\u251E\u251F"+
+            "\u2520\u2521\u2522\u2523\u2524\u2525\u2526\u2527"+
+            "\u2528\u2529\u252A\u252B\u252C\u252D\u252E\u252F"+
+            "\u2530\u2531\u2532\u2533\u2534\u2535\u2536\u2537"+
+            "\u2538\u2539\u253A\u253B\u253C\u253D\u253E\u253F"+
+            "\u2540\u2541\u2542\u2543\u2544\u2545\u2546\u2547"+
+            "\u2548\u2549\u254A\u254B\u254C\u254D\u254E\u254F"+
+            "\u2550\u2551\u2552\u2553\u2554\u2555\u2556\u2557"+
+            "\u2558\u2559\u255A\u255B\u255C\u255D\u255E\u255F"+
+            "\u2560\u2561\u2562\u2563\u2564\u2565\u2566\u2567"+
+            "\u2568\u2569\u256A\u256B\u256C\u256D\u256E\u256F"+
+            "\u2570\u2571\u2572\u2573\u2574\u2575\u2576\u2577"+
+            "\u2578\u2579\u257A\u257B\u257C\u257D\u257E\u257F"+
+            "\u2580\u2581\u2582\u2583\u2584\u2585\u2586\u2587"+
+            "\u2588\u2589\u258A\u258B\u258C\u258D\u258E\u258F"+
+            "\u2590\u2591\u2592\u2593\u2594\u2595\u2596\u2597"+
+            "\u2598\u2599\u259A\u259B\u259C\u259D\u259E\u259F"+
+            "\u25A0\u25A1\u25A2\u25A3\u25A4\u25A5\u25A6\u25A7"+
+            "\u25A8\u25A9\u25AA\u25AB\u25AC\u25AD\u25AE\u25AF"+
+            "\u25B0\u25B1\u25B2\u25B3\u25B4\u25B5\u25B6\u25B7"+
+            "\u25B8\u25B9\u25BA\u25BB\u25BC\u25BD\u25BE\u25BF"+
+            "\u25C0\u25C1\u25C2\u25C3\u25C4\u25C5\u25C6\u25C7"+
+            "\u25C8\u25C9\u25CA\u25CB\u25CC\u25CD\u25CE\u25CF"+
+            "\u25D0\u25D1\u25D2\u25D3\u25D4\u25D5\u25D6\u25D7"+
+            "\u25D8\u25D9\u25DA\u25DB\u25DC\u25DD\u25DE\u25DF"+
+            "\u25E0\u25E1\u25E2\u25E3\u25E4\u25E5\u25E6\u25E7"+
+            "\u25E8\u25E9\u25EA\u25EB\u25EC\u25ED\u25EE\u25EF"+
+            "\u25F0\u25F1\u25F2\u25F3\u25F4\u25F5\u25F6\u25F7"+
+            "\u25F8\u25F9\u25FA\u25FB\u25FC\u25FD\u25FE\u25FF"+
+            "\u2600\u2601\u2602\u2603\u2604\u2605\u2606\u2607"+
+            "\u2608\u2609\u260A\u260B\u260C\u260D\u260E\u260F"+
+            "\u2610\u2611\u2612\u2613\u2614\u2615\u2616\u2617"+
+            "\u2618\u2619\u261A\u261B\u261C\u261D\u261E\u261F"+
+            "\u2620\u2621\u2622\u2623\u2624\u2625\u2626\u2627"+
+            "\u2628\u2629\u262A\u262B\u262C\u262D\u262E\u262F"+
+            "\u2630\u2631\u2632\u2633\u2634\u2635\u2636\u2637"+
+            "\u2638\u2639\u263A\u263B\u263C\u263D\u263E\u263F"+
+            "\u2640\u2641\u2642\u2643\u2644\u2645\u2646\u2647"+
+            "\u2648\u2649\u264A\u264B\u264C\u264D\u264E\u264F"+
+            "\u2650\u2651\u2652\u2653\u2654\u2655\u2656\u2657"+
+            "\u2658\u2659\u265A\u265B\u265C\u265D\u265E\u265F"+
+            "\u2660\u2661\u2662\u2663\u2664\u2665\u2666\u2667"+
+            "\u2668\u2669\u266A\u266B\u266C\u266D\u266E\u266F"+
+            "\u2670\u2671\u2672\u2673\u2674\u2675\u2676\u2677"+
+            "\u2678\u2679\u267A\u267B\u267C\u267D\u267E\u267F"+
+            "\u2680\u2681\u2682\u2683\u2684\u2685\u2686\u2687"+
+            "\u2688\u2689\u268A\u268B\u268C\u268D\u268E\u268F"+
+            "\u2690\u2691\u2692\u2693\u2694\u2695\u2696\u2697"+
+            "\u2698\u2699\u269A\u269B\u269C\u269D\u269E\u269F"+
+            "\u26A0\u26A1\u26A2\u26A3\u26A4\u26A5\u26A6\u26A7"+
+            "\u26A8\u26A9\u26AA\u26AB\u26AC\u26AD\u26AE\u26AF"+
+            "\u26B0\u26B1\u26B2\u26B3\u26B4\u26B5\u26B6\u26B7"+
+            "\u26B8\u26B9\u26BA\u26BB\u26BC\u26BD\u26BE\u26BF"+
+            "\u26C0\u26C1\u26C2\u26C3\u26C4\u26C5\u26C6\u26C7"+
+            "\u26C8\u26C9\u26CA\u26CB\u26CC\u26CD\u26CE\u26CF"+
+            "\u26D0\u26D1\u26D2\u26D3\u26D4\u26D5\u26D6\u26D7"+
+            "\u26D8\u26D9\u26DA\u26DB\u26DC\u26DD\u26DE\u26DF"+
+            "\u26E0\u26E1\u26E2\u26E3\u26E4\u26E5\u26E6\u26E7"+
+            "\u26E8\u26E9\u26EA\u26EB\u26EC\u26ED\u26EE\u26EF"+
+            "\u26F0\u26F1\u26F2\u26F3\u26F4\u26F5\u26F6\u26F7"+
+            "\u26F8\u26F9\u26FA\u26FB\u26FC\u26FD\u26FE\u26FF"+
+            "\u2700\u2701\u2702\u2703\u2704\u2705\u2706\u2707"+
+            "\u2708\u2709\u270A\u270B\u270C\u270D\u270E\u270F"+
+            "\u2710\u2711\u2712\u2713\u2714\u2715\u2716\u2717"+
+            "\u2718\u2719\u271A\u271B\u271C\u271D\u271E\u271F"+
+            "\u2720\u2721\u2722\u2723\u2724\u2725\u2726\u2727"+
+            "\u2728\u2729\u272A\u272B\u272C\u272D\u272E\u272F"+
+            "\u2730\u2731\u2732\u2733\u2734\u2735\u2736\u2737"+
+            "\u2738\u2739\u273A\u273B\u273C\u273D\u273E\u273F"+
+            "\u2740\u2741\u2742\u2743\u2744\u2745\u2746\u2747"+
+            "\u2748\u2749\u274A\u274B\u274C\u274D\u274E\u274F"+
+            "\u2750\u2751\u2752\u2753\u2754\u2755\u2756\u2757"+
+            "\u2758\u2759\u275A\u275B\u275C\u275D\u275E\u275F"+
+            "\u2760\u2761\u2762\u2763\u2764\u2765\u2766\u2767"+
+            "\u2768\u2769\u276A\u276B\u276C\u276D\u276E\u276F"+
+            "\u2770\u2771\u2772\u2773\u2774\u2775\u2776\u2777"+
+            "\u2778\u2779\u277A\u277B\u277C\u277D\u277E\u277F"+
+            "\u2780\u2781\u2782\u2783\u2784\u2785\u2786\u2787"+
+            "\u2788\u2789\u278A\u278B\u278C\u278D\u278E\u278F"+
+            "\u2790\u2791\u2792\u2793\u2794\u2795\u2796\u2797"+
+            "\u2798\u2799\u279A\u279B\u279C\u279D\u279E\u279F"+
+            "\u27A0\u27A1\u27A2\u27A3\u27A4\u27A5\u27A6\u27A7"+
+            "\u27A8\u27A9\u27AA\u27AB\u27AC\u27AD\u27AE\u27AF"+
+            "\u27B0\u27B1\u27B2\u27B3\u27B4\u27B5\u27B6\u27B7"+
+            "\u27B8\u27B9\u27BA\u27BB\u27BC\u27BD\u27BE\u27BF"+
+            "\u27C0\u27C1\u27C2\u27C3\u27C4\u27C5\u27C6\u27C7"+
+            "\u27C8\u27C9\u27CA\u27CB\u27CC\u27CD\u27CE\u27CF"+
+            "\u27D0\u27D1\u27D2\u27D3\u27D4\u27D5\u27D6\u27D7"+
+            "\u27D8\u27D9\u27DA\u27DB\u27DC\u27DD\u27DE\u27DF"+
+            "\u27E0\u27E1\u27E2\u27E3\u27E4\u27E5\u27E6\u27E7"+
+            "\u27E8\u27E9\u27EA\u27EB\u27EC\u27ED\u27EE\u27EF"+
+            "\u27F0\u27F1\u27F2\u27F3\u27F4\u27F5\u27F6\u27F7"+
+            "\u27F8\u27F9\u27FA\u27FB\u27FC\u27FD\u27FE\u27FF"+
+            "\u2800\u2801\u2802\u2803\u2804\u2805\u2806\u2807"+
+            "\u2808\u2809\u280A\u280B\u280C\u280D\u280E\u280F"+
+            "\u2810\u2811\u2812\u2813\u2814\u2815\u2816\u2817"+
+            "\u2818\u2819\u281A\u281B\u281C\u281D\u281E\u281F"+
+            "\u2820\u2821\u2822\u2823\u2824\u2825\u2826\u2827"+
+            "\u2828\u2829\u282A\u282B\u282C\u282D\u282E\u282F"+
+            "\u2830\u2831\u2832\u2833\u2834\u2835\u2836\u2837"+
+            "\u2838\u2839\u283A\u283B\u283C\u283D\u283E\u283F"+
+            "\u2840\u2841\u2842\u2843\u2844\u2845\u2846\u2847"+
+            "\u2848\u2849\u284A\u284B\u284C\u284D\u284E\u284F"+
+            "\u2850\u2851\u2852\u2853\u2854\u2855\u2856\u2857"+
+            "\u2858\u2859\u285A\u285B\u285C\u285D\u285E\u285F"+
+            "\u2860\u2861\u2862\u2863\u2864\u2865\u2866\u2867"+
+            "\u2868\u2869\u286A\u286B\u286C\u286D\u286E\u286F"+
+            "\u2870\u2871\u2872\u2873\u2874\u2875\u2876\u2877"+
+            "\u2878\u2879\u287A\u287B\u287C\u287D\u287E\u287F"+
+            "\u2880\u2881\u2882\u2883\u2884\u2885\u2886\u2887"+
+            "\u2888\u2889\u288A\u288B\u288C\u288D\u288E\u288F"+
+            "\u2890\u2891\u2892\u2893\u2894\u2895\u2896\u2897"+
+            "\u2898\u2899\u289A\u289B\u289C\u289D\u289E\u289F"+
+            "\u28A0\u28A1\u28A2\u28A3\u28A4\u28A5\u28A6\u28A7"+
+            "\u28A8\u28A9\u28AA\u28AB\u28AC\u28AD\u28AE\u28AF"+
+            "\u28B0\u28B1\u28B2\u28B3\u28B4\u28B5\u28B6\u28B7"+
+            "\u28B8\u28B9\u28BA\u28BB\u28BC\u28BD\u28BE\u28BF"+
+            "\u28C0\u28C1\u28C2\u28C3\u28C4\u28C5\u28C6\u28C7"+
+            "\u28C8\u28C9\u28CA\u28CB\u28CC\u28CD\u28CE\u28CF"+
+            "\u28D0\u28D1\u28D2\u28D3\u28D4\u28D5\u28D6\u28D7"+
+            "\u28D8\u28D9\u28DA\u28DB\u28DC\u28DD\u28DE\u28DF"+
+            "\u28E0\u28E1\u28E2\u28E3\u28E4\u28E5\u28E6\u28E7"+
+            "\u28E8\u28E9\u28EA\u28EB\u28EC\u28ED\u28EE\u28EF"+
+            "\u28F0\u28F1\u28F2\u28F3\u28F4\u28F5\u28F6\u28F7"+
+            "\u28F8\u28F9\u28FA\u28FB\u28FC\u28FD\u28FE\u28FF"+
+            "\u2900\u2901\u2902\u2903\u2904\u2905\u2906\u2907"+
+            "\u2908\u2909\u290A\u290B\u290C\u290D\u290E\u290F"+
+            "\u2910\u2911\u2912\u2913\u2914\u2915\u2916\u2917"+
+            "\u2918\u2919\u291A\u291B\u291C\u291D\u291E\u291F"+
+            "\u2920\u2921\u2922\u2923\u2924\u2925\u2926\u2927"+
+            "\u2928\u2929\u292A\u292B\u292C\u292D\u292E\u292F"+
+            "\u2930\u2931\u2932\u2933\u2934\u2935\u2936\u2937"+
+            "\u2938\u2939\u293A\u293B\u293C\u293D\u293E\u293F"+
+            "\u2940\u2941\u2942\u2943\u2944\u2945\u2946\u2947"+
+            "\u2948\u2949\u294A\u294B\u294C\u294D\u294E\u294F"+
+            "\u2950\u2951\u2952\u2953\u2954\u2955\u2956\u2957"+
+            "\u2958\u2959\u295A\u295B\u295C\u295D\u295E\u295F"+
+            "\u2960\u2961\u2962\u2963\u2964\u2965\u2966\u2967"+
+            "\u2968\u2969\u296A\u296B\u296C\u296D\u296E\u296F"+
+            "\u2970\u2971\u2972\u2973\u2974\u2975\u2976\u2977"+
+            "\u2978\u2979\u297A\u297B\u297C\u297D\u297E\u297F"+
+            "\u2980\u2981\u2982\u2983\u2984\u2985\u2986\u2987"+
+            "\u2988\u2989\u298A\u298B\u298C\u298D\u298E\u298F"+
+            "\u2990\u2991\u2992\u2993\u2994\u2995\u2996\u2997"+
+            "\u2998\u2999\u299A\u299B\u299C\u299D\u299E\u299F"+
+            "\u29A0\u29A1\u29A2\u29A3\u29A4\u29A5\u29A6\u29A7"+
+            "\u29A8\u29A9\u29AA\u29AB\u29AC\u29AD\u29AE\u29AF"+
+            "\u29B0\u29B1\u29B2\u29B3\u29B4\u29B5\u29B6\u29B7"+
+            "\u29B8\u29B9\u29BA\u29BB\u29BC\u29BD\u29BE\u29BF"+
+            "\u29C0\u29C1\u29C2\u29C3\u29C4\u29C5\u29C6\u29C7"+
+            "\u29C8\u29C9\u29CA\u29CB\u29CC\u29CD\u29CE\u29CF"+
+            "\u29D0\u29D1\u29D2\u29D3\u29D4\u29D5\u29D6\u29D7"+
+            "\u29D8\u29D9\u29DA\u29DB\u29DC\u29DD\u29DE\u29DF"+
+            "\u29E0\u29E1\u29E2\u29E3\u29E4\u29E5\u29E6\u29E7"+
+            "\u29E8\u29E9\u29EA\u29EB\u29EC\u29ED\u29EE\u29EF"+
+            "\u29F0\u29F1\u29F2\u29F3\u29F4\u29F5\u29F6\u29F7"+
+            "\u29F8\u29F9\u29FA\u29FB\u29FC\u29FD\u29FE\u29FF"+
+            "\u2A00\u2A01\u2A02\u2A03\u2A04\u2A05\u2A06\u2A07"+
+            "\u2A08\u2A09\u2A0A\u2A0B\u2A0C\u2A0D\u2A0E\u2A0F"+
+            "\u2A10\u2A11\u2A12\u2A13\u2A14\u2A15\u2A16\u2A17"+
+            "\u2A18\u2A19\u2A1A\u2A1B\u2A1C\u2A1D\u2A1E\u2A1F"+
+            "\u2A20\u2A21\u2A22\u2A23\u2A24\u2A25\u2A26\u2A27"+
+            "\u2A28\u2A29\u2A2A\u2A2B\u2A2C\u2A2D\u2A2E\u2A2F"+
+            "\u2A30\u2A31\u2A32\u2A33\u2A34\u2A35\u2A36\u2A37"+
+            "\u2A38\u2A39\u2A3A\u2A3B\u2A3C\u2A3D\u2A3E\u2A3F"+
+            "\u2A40\u2A41\u2A42\u2A43\u2A44\u2A45\u2A46\u2A47"+
+            "\u2A48\u2A49\u2A4A\u2A4B\u2A4C\u2A4D\u2A4E\u2A4F"+
+            "\u2A50\u2A51\u2A52\u2A53\u2A54\u2A55\u2A56\u2A57"+
+            "\u2A58\u2A59\u2A5A\u2A5B\u2A5C\u2A5D\u2A5E\u2A5F"+
+            "\u2A60\u2A61\u2A62\u2A63\u2A64\u2A65\u2A66\u2A67"+
+            "\u2A68\u2A69\u2A6A\u2A6B\u2A6C\u2A6D\u2A6E\u2A6F"+
+            "\u2A70\u2A71\u2A72\u2A73\u2A74\u2A75\u2A76\u2A77"+
+            "\u2A78\u2A79\u2A7A\u2A7B\u2A7C\u2A7D\u2A7E\u2A7F"+
+            "\u2A80\u2A81\u2A82\u2A83\u2A84\u2A85\u2A86\u2A87"+
+            "\u2A88\u2A89\u2A8A\u2A8B\u2A8C\u2A8D\u2A8E\u2A8F"+
+            "\u2A90\u2A91\u2A92\u2A93\u2A94\u2A95\u2A96\u2A97"+
+            "\u2A98\u2A99\u2A9A\u2A9B\u2A9C\u2A9D\u2A9E\u2A9F"+
+            "\u2AA0\u2AA1\u2AA2\u2AA3\u2AA4\u2AA5\u2AA6\u2AA7"+
+            "\u2AA8\u2AA9\u2AAA\u2AAB\u2AAC\u2AAD\u2AAE\u2AAF"+
+            "\u2AB0\u2AB1\u2AB2\u2AB3\u2AB4\u2AB5\u2AB6\u2AB7"+
+            "\u2AB8\u2AB9\u2ABA\u2ABB\u2ABC\u2ABD\u2ABE\u2ABF"+
+            "\u2AC0\u2AC1\u2AC2\u2AC3\u2AC4\u2AC5\u2AC6\u2AC7"+
+            "\u2AC8\u2AC9\u2ACA\u2ACB\u2ACC\u2ACD\u2ACE\u2ACF"+
+            "\u2AD0\u2AD1\u2AD2\u2AD3\u2AD4\u2AD5\u2AD6\u2AD7"+
+            "\u2AD8\u2AD9\u2ADA\u2ADB\u2ADC\u2ADD\u2ADE\u2ADF"+
+            "\u2AE0\u2AE1\u2AE2\u2AE3\u2AE4\u2AE5\u2AE6\u2AE7"+
+            "\u2AE8\u2AE9\u2AEA\u2AEB\u2AEC\u2AED\u2AEE\u2AEF"+
+            "\u2AF0\u2AF1\u2AF2\u2AF3\u2AF4\u2AF5\u2AF6\u2AF7"+
+            "\u2AF8\u2AF9\u2AFA\u2AFB\u2AFC\u2AFD\u2AFE\u2AFF"+
+            "\u2B00\u2B01\u2B02\u2B03\u2B04\u2B05\u2B06\u2B07"+
+            "\u2B08\u2B09\u2B0A\u2B0B\u2B0C\u2B0D\u2B0E\u2B0F"+
+            "\u2B10\u2B11\u2B12\u2B13\u2B14\u2B15\u2B16\u2B17"+
+            "\u2B18\u2B19\u2B1A\u2B1B\u2B1C\u2B1D\u2B1E\u2B1F"+
+            "\u2B20\u2B21\u2B22\u2B23\u2B24\u2B25\u2B26\u2B27"+
+            "\u2B28\u2B29\u2B2A\u2B2B\u2B2C\u2B2D\u2B2E\u2B2F"+
+            "\u2B30\u2B31\u2B32\u2B33\u2B34\u2B35\u2B36\u2B37"+
+            "\u2B38\u2B39\u2B3A\u2B3B\u2B3C\u2B3D\u2B3E\u2B3F"+
+            "\u2B40\u2B41\u2B42\u2B43\u2B44\u2B45\u2B46\u2B47"+
+            "\u2B48\u2B49\u2B4A\u2B4B\u2B4C\u2B4D\u2B4E\u2B4F"+
+            "\u2B50\u2B51\u2B52\u2B53\u2B54\u2B55\u2B56\u2B57"+
+            "\u2B58\u2B59\u2B5A\u2B5B\u2B5C\u2B5D\u2B5E\u2B5F"+
+            "\u2B60\u2B61\u2B62\u2B63\u2B64\u2B65\u2B66\u2B67"+
+            "\u2B68\u2B69\u2B6A\u2B6B\u2B6C\u2B6D\u2B6E\u2B6F"+
+            "\u2B70\u2B71\u2B72\u2B73\u2B74\u2B75\u2B76\u2B77"+
+            "\u2B78\u2B79\u2B7A\u2B7B\u2B7C\u2B7D\u2B7E\u2B7F"+
+            "\u2B80\u2B81\u2B82\u2B83\u2B84\u2B85\u2B86\u2B87"+
+            "\u2B88\u2B89\u2B8A\u2B8B\u2B8C\u2B8D\u2B8E\u2B8F"+
+            "\u2B90\u2B91\u2B92\u2B93\u2B94\u2B95\u2B96\u2B97"+
+            "\u2B98\u2B99\u2B9A\u2B9B\u2B9C\u2B9D\u2B9E\u2B9F"+
+            "\u2BA0\u2BA1\u2BA2\u2BA3\u2BA4\u2BA5\u2BA6\u2BA7"+
+            "\u2BA8\u2BA9\u2BAA\u2BAB\u2BAC\u2BAD\u2BAE\u2BAF"+
+            "\u2BB0\u2BB1\u2BB2\u2BB3\u2BB4\u2BB5\u2BB6\u2BB7"+
+            "\u2BB8\u2BB9\u2BBA\u2BBB\u2BBC\u2BBD\u2BBE\u2BBF"+
+            "\u2BC0\u2BC1\u2BC2\u2BC3\u2BC4\u2BC5\u2BC6\u2BC7"+
+            "\u2BC8\u2BC9\u2BCA\u2BCB\u2BCC\u2BCD\u2BCE\u2BCF"+
+            "\u2BD0\u2BD1\u2BD2\u2BD3\u2BD4\u2BD5\u2BD6\u2BD7"+
+            "\u2BD8\u2BD9\u2BDA\u2BDB\u2BDC\u2BDD\u2BDE\u2BDF"+
+            "\u2BE0\u2BE1\u2BE2\u2BE3\u2BE4\u2BE5\u2BE6\u2BE7"+
+            "\u2BE8\u2BE9\u2BEA\u2BEB\u2BEC\u2BED\u2BEE\u2BEF"+
+            "\u2BF0\u2BF1\u2BF2\u2BF3\u2BF4\u2BF5\u2BF6\u2BF7"+
+            "\u2BF8\u2BF9\u2BFA\u2BFB\u2BFC\u2BFD\u2BFE\u2BFF"+
+            "\u2C00\u2C01\u2C02\u2C03\u2C04\u2C05\u2C06\u2C07"+
+            "\u2C08\u2C09\u2C0A\u2C0B\u2C0C\u2C0D\u2C0E\u2C0F"+
+            "\u2C10\u2C11\u2C12\u2C13\u2C14\u2C15\u2C16\u2C17"+
+            "\u2C18\u2C19\u2C1A\u2C1B\u2C1C\u2C1D\u2C1E\u2C1F"+
+            "\u2C20\u2C21\u2C22\u2C23\u2C24\u2C25\u2C26\u2C27"+
+            "\u2C28\u2C29\u2C2A\u2C2B\u2C2C\u2C2D\u2C2E\u2C2F"+
+            "\u2C30\u2C31\u2C32\u2C33\u2C34\u2C35\u2C36\u2C37"+
+            "\u2C38\u2C39\u2C3A\u2C3B\u2C3C\u2C3D\u2C3E\u2C3F"+
+            "\u2C40\u0000\u2C41\u2C42\u0000\u2C43\u2C44\u2C45"+
+            "\u0000\u2C46\u2C47\u0000\u0000\u2C48\u2C49\u2C4A"+
+            "\u2C4B\u2C4C\u2C4D\u2C4E\u2C4F\u2C50\u2C51\u0000"+
+            "\u2C52\u2C53\u2C54\u2C55\u2C56\u2C57\u2C58\u2C59"+
+            "\u2C5A\u2C5B\u2C5C\u2C5D\u2C5E\u2C5F\u2C60\u0000"+
+            "\u2C61\u2C62\u0000\u2C63\u2C64\u2C65\u0000\u2C66"+
+            "\u2C67\u2C68\u2C69\u0000\u2C6A\u2C6B\u0000\u0000"+
+            "\u2C6C\u2C6D\u2C6E\u0000\u2C6F\u2C70\u2C71\u2C72"+
+            "\u2C73\u2C74\u2C75\u2C76\u2C77\u2C78\u2C79\u2C7A"+
+            "\u2C7B\u2C7C\u0000\u2C7D\u2C7E\u2C7F\u2C80\u2C81"+
+            "\u2C82\u2C83\u2C84\u2C85\u2C86\u2C87\u2C88\u2C89"+
+            "\u2C8A\u2C8B\u2C8C\u2C8D\u2C8E\u2C8F\u2C90\u2C91"+
+            "\u2C92\u2C93\u2C94\u2C95\u2C96\u2C97\u2C98\u2C99"+
+            "\u2C9A\u2C9B\u2C9C\u2C9D\u2C9E\u2C9F\u2CA0\u2CA1"+
+            "\u2CA2\u2CA3\u2CA4\u2CA5\u2CA6\u2CA7\u2CA8\u2CA9"+
+            "\u2CAA\u2CAB\u2CAC\u2CAD\u2CAE\u2CAF\u2CB0\u2CB1";
+
+        private final static String innerIndex3=
+            "\u2CB2\u2CB3\u2CB4\u2CB5\u2CB6\u2CB7\u2CB8\u2CB9"+
+            "\u2CBA\u2CBB\u2CBC\u2CBD\u2CBE\u2CBF\u2CC0\u2CC1"+
+            "\u2CC2\u2CC3\u2CC4\u2CC5\u2CC6\u2CC7\u2CC8\u2CC9"+
+            "\u2CCA\u2CCB\u2CCC\u2CCD\u2CCE\u2CCF\u2CD0\u2CD1"+
+            "\u2CD2\u2CD3\u2CD4\u2CD5\u2CD6\u2CD7\u2CD8\u2CD9"+
+            "\u2CDA\u2CDB\u2CDC\u2CDD\u2CDE\u2CDF\u2CE0\u2CE1"+
+            "\u2CE2\u2CE3\u2CE4\u2CE5\u2CE6\u2CE7\u2CE8\u2CE9"+
+            "\u2CEA\u2CEB\u2CEC\u2CED\u2CEE\u2CEF\u2CF0\u2CF1"+
+            "\u2CF2\u2CF3\u2CF4\u2CF5\u2CF6\u2CF7\u2CF8\u2CF9"+
+            "\u2CFA\u2CFB\u2CFC\u2CFD\u2CFE\u2CFF\u2D00\u2D01"+
+            "\u2D02\u2D03\u2D04\u2D05\u2D06\u2D07\u2D08\u2D09"+
+            "\u2D0A\u2D0B\u2D0C\u2D0D\u2D0E\u2D0F\u2D10\u2D11"+
+            "\u2D12\u2D13\u2D14\u2D15\u2D16\u2D17\u2D18\u2D19"+
+            "\u2D1A\u2D1B\u2D1C\u2D1D\u2D1E\u2D1F\u2D20\u2D21"+
+            "\u2D22\u2D23\u2D24\u2D25\u2D26\u2D27\u2D28\u2D29"+
+            "\u2D2A\u2D2B\u2D2C\u2D2D\u2D2E\u2D2F\u2D30\u2D31"+
+            "\u2D32\u2D33\u2D34\u2D35\u2D36\u2D37\u2D38\u2D39"+
+            "\u2D3A\u2D3B\u2D3C\u2D3D\u2D3E\u2D3F\u2D40\u2D41"+
+            "\u2D42\u2D43\u2D44\u2D45\u2D46\u2D47\u2D48\u2D49"+
+            "\u2D4A\u2D4B\u2D4C\u2D4D\u2D4E\u2D4F\u2D50\u2D51"+
+            "\u2D52\u2D53\u2D54\u2D55\u2D56\u2D57\u2D58\u2D59"+
+            "\u2D5A\u2D5B\u2D5C\u2D5D\u2D5E\u2D5F\u2D60\u2D61"+
+            "\u2D62\u2D63\u2D64\u2D65\u2D66\u2D67\u2D68\u2D69"+
+            "\u2D6A\u2D6B\u2D6C\u2D6D\u2D6E\u2D6F\u2D70\u2D71"+
+            "\u2D72\u2D73\u2D74\u2D75\u2D76\u2D77\u2D78\u2D79"+
+            "\u2D7A\u2D7B\u2D7C\u2D7D\u2D7E\u2D7F\u2D80\u2D81"+
+            "\u2D82\u2D83\u2D84\u2D85\u2D86\u2D87\u2D88\u2D89"+
+            "\u2D8A\u2D8B\u2D8C\u2D8D\u2D8E\u2D8F\u2D90\u2D91"+
+            "\u2D92\u2D93\u2D94\u2D95\u2D96\u2D97\u2D98\u2D99"+
+            "\u2D9A\u2D9B\u2D9C\u2D9D\u2D9E\u2D9F\u2DA0\u2DA1"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u2DA2\u2DA3\u2DA4\u2DA5"+
+            "\u0000\u0000\u0000\u0000\u2DA6\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u2DA7\u2DA8\u2DA9\u2DAA\u2DAB\u0000\u0000\u2DAC"+
+            "\u2DAD\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u2DAE\u2DAF\u2DB0\u2DB1\u2DB2\u2DB3"+
+            "\u2DB4\u2DB5\u2DB6\u2DB7\u2DB8\u2DB9\u2DBA\u2DBB"+
+            "\u2DBC\u2DBD\u2DBE\u2DBF\u2DC0\u2DC1\u0000\u2DC2"+
+            "\u2DC3\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u2DC4\u2DC5\u2DC6\u2DC7"+
+            "\u2DC8\u2DC9\u2DCA\u0000\u0000\u0000\u0000\u2DCB"+
+            "\u2DCC\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u2DCD"+
+            "\u2DCE\u2DCF\u2DD0\u2DD1\u0000\u0000\u0000\u2DD2"+
+            "\u2DD3\u2DD4\u2DD5\u2DD6\u2DD7\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u2DD8\u2DD9\u2DDA\u2DDB\u2DDC\u2DDD"+
+            "\u2DDE\u2DDF\u2DE0\u2DE1\u2DE2\u2DE3\u2DE4\u2DE5"+
+            "\u2DE6\u2DE7\u2DE8\u2DE9\u2DEA\u2DEB\u2DEC\u2DED"+
+            "\u2DEE\u2DEF\u2DF0\u2DF1\u2DF2\u2DF3\u2DF4\u2DF5"+
+            "\u2DF6\u2DF7\u2DF8\u2DF9\u2DFA\u2DFB\u2DFC\u2DFD"+
+            "\u2DFE\u2DFF\u2E00\u2E01\u2E02\u2E03\u2E04\u2E05"+
+            "\u2E06\u2E07\u2E08\u2E09\u2E0A\u2E0B\u2E0C\u2E0D"+
+            "\u2E0E\u2E0F\u2E10\u2E11\u2E12\u2E13\u2E14\u2E15"+
+            "\u2E16\u2E17\u2E18\u2E19\u2E1A\u2E1B\u2E1C\u2E1D"+
+            "\u2E1E\u2E1F\u2E20\u2E21\u2E22\u2E23\u2E24\u2E25"+
+            "\u2E26\u2E27\u2E28\u2E29\u2E2A\u2E2B\u2E2C\u2E2D"+
+            "\u2E2E\u2E2F\u2E30\u2E31\u2E32\u2E33\u2E34\u2E35"+
+            "\u2E36\u2E37\u2E38\u2E39\u2E3A\u2E3B\u2E3C\u2E3D"+
+            "\u2E3E\u2E3F\u2E40\u2E41\u2E42\u2E43\u2E44\u2E45"+
+            "\u2E46\u2E47\u2E48\u2E49\u2E4A\u2E4B\u2E4C\u2E4D"+
+            "\u2E4E\u2E4F\u2E50\u2E51\u2E52\u2E53\u2E54\u2E55"+
+            "\u2E56\u2E57\u2E58\u2E59\u2E5A\u2E5B\u2E5C\u2E5D"+
+            "\u2E5E\u2E5F\u2E60\u2E61\u2E62\u2E63\u2E64\u2E65"+
+            "\u2E66\u2E67\u2E68\u2E69\u2E6A\u2E6B\u2E6C\u2E6D"+
+            "\u2E6E\u2E6F\u2E70\u2E71\u2E72\u2E73\u2E74\u2E75"+
+            "\u2E76\u2E77\u2E78\u2E79\u2E7A\u2E7B\u2E7C\u2E7D"+
+            "\u2E7E\u2E7F\u2E80\u2E81\u2E82\u2E83\u2E84\u2E85"+
+            "\u2E86\u2E87\u2E88\u2E89\u2E8A\u2E8B\u2E8C\u2E8D"+
+            "\u2E8E\u2E8F\u2E90\u2E91\u2E92\u2E93\u2E94\u2E95"+
+            "\u2E96\u2E97\u2E98\u2E99\u2E9A\u2E9B\u2E9C\u2E9D"+
+            "\u2E9E\u2E9F\u2EA0\u2EA1\u2EA2\u2EA3\u2EA4\u2EA5"+
+            "\u2EA6\u2EA7\u2EA8\u2EA9\u2EAA\u2EAB\u2EAC\u2EAD"+
+            "\u2EAE\u2EAF\u2EB0\u2EB1\u2EB2\u2EB3\u2EB4\u2EB5"+
+            "\u2EB6\u2EB7\u2EB8\u2EB9\u2EBA\u2EBB\u2EBC\u2EBD"+
+            "\u2EBE\u2EBF\u2EC0\u2EC1\u2EC2\u2EC3\u2EC4\u2EC5"+
+            "\u2EC6\u2EC7\u2EC8\u2EC9\u2ECA\u2ECB\u2ECC\u2ECD"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u2ECE\u2ECF\u2ED0\u2ED1\u2ED2\u2ED3"+
+            "\u2ED4\u0000\u2ED5\u2ED6\u2ED7\u2ED8\u2ED9\u2EDA"+
+            "\u2EDB\u2EDC\u2EDD\u2EDE\u2EDF\u2EE0\u2EE1\u2EE2"+
+            "\u2EE3\u2EE4\u2EE5\u2EE6\u2EE7\u2EE8\u2EE9\u2EEA"+
+            "\u2EEB\u2EEC\u2EED\u2EEE\u2EEF\u2EF0\u2EF1\u2EF2"+
+            "\u2EF3\u2EF4\u2EF5\u2EF6\u2EF7\u2EF8\u2EF9\u2EFA"+
+            "\u2EFB\u2EFC\u2EFD\u2EFE\u2EFF\u2F00\u2F01\u2F02"+
+            "\u2F03\u2F04\u2F05\u2F06\u2F07\u2F08\u2F09\u2F0A"+
+            "\u2F0B\u2F0C\u2F0D\u2F0E\u2F0F\u2F10\u2F11\u2F12"+
+            "\u2F13\u2F14\u2F15\u2F16\u2F17\u2F18\u2F19\u2F1A"+
+            "\u2F1B\u2F1C\u2F1D\u2F1E\u2F1F\u2F20\u2F21\u2F22"+
+            "\u2F23\u2F24\u2F25\u2F26\u2F27\u2F28\u2F29\u2F2A"+
+            "\u2F2B\u2F2C\u2F2D\u2F2E\u2F2F\u2F30\u2F31\u2F32"+
+            "\u2F33\u2F34\u2F35\u2F36\u2F37\u2F38\u2F39\u2F3A"+
+            "\u2F3B\u2F3C\u2F3D\u2F3E\u2F3F\u2F40\u2F41\u2F42"+
+            "\u2F43\u2F44\u2F45\u0000\u2F46\u2F47\u2F48\u2F49"+
+            "\u2F4A\u2F4B\u2F4C\u2F4D\u2F4E\u2F4F\u2F50\u2F51"+
+            "\u2F52\u2F53\u2F54\u2F55\u2F56\u2F57\u2F58\u2F59"+
+            "\u2F5A\u2F5B\u2F5C\u2F5D\u2F5E\u2F5F\u2F60\u2F61"+
+            "\u2F62\u2F63\u2F64\u2F65\u2F66\u2F67\u2F68\u2F69"+
+            "\u2F6A\u2F6B\u2F6C\u2F6D\u2F6E\u2F6F\u2F70\u2F71"+
+            "\u2F72\u2F73\u2F74\u2F75\u2F76\u2F77\u2F78\u2F79"+
+            "\u2F7A\u2F7B\u2F7C\u2F7D\u2F7E\u2F7F\u2F80\u2F81"+
+            "\u2F82\u2F83\u2F84\u2F85\u2F86\u2F87\u2F88\u2F89"+
+            "\u2F8A\u2F8B\u2F8C\u2F8D\u2F8E\u2F8F\u2F90\u2F91"+
+            "\u2F92\u2F93\u2F94\u2F95\u2F96\u2F97\u2F98\u2F99"+
+            "\u2F9A\u2F9B\u2F9C\u2F9D\u2F9E\u2F9F\u2FA0\u2FA1"+
+            "\u2FA2\u2FA3\u2FA4\u2FA5\u2FA6\u2FA7\u2FA8\u2FA9"+
+            "\u2FAA\u2FAB\u2FAC\u2FAD\u2FAE\u2FAF\u2FB0\u2FB1"+
+            "\u2FB2\u2FB3\u2FB4\u2FB5\u2FB6\u2FB7\u2FB8\u2FB9"+
+            "\u2FBA\u2FBB\u2FBC\u2FBD\u2FBE\u2FBF\u2FC0\u2FC1"+
+            "\u2FC2\u2FC3\u2FC4\u2FC5\u2FC6\u2FC7\u2FC8\u2FC9"+
+            "\u2FCA\u2FCB\u2FCC\u2FCD\u2FCE\u2FCF\u2FD0\u2FD1"+
+            "\u2FD2\u2FD3\u2FD4\u2FD5\u2FD6\u2FD7\u2FD8\u2FD9"+
+            "\u2FDA\u2FDB\u2FDC\u2FDD\u2FDE\u2FDF\u2FE0\u2FE1"+
+            "\u2FE2\u2FE3\u2FE4\u2FE5\u2FE6\u2FE7\u2FE8\u2FE9"+
+            "\u2FEA\u2FEB\u2FEC\u2FED\u2FEE\u2FEF\u2FF0\u2FF1"+
+            "\u2FF2\u2FF3\u2FF4\u2FF5\u2FF6\u2FF7\u2FF8\u2FF9"+
+            "\u2FFA\u2FFB\u2FFC\u2FFD\u2FFE\u2FFF\u3000\u3001"+
+            "\u3002\u3003\u3004\u3005\u3006\u3007\u3008\u3009"+
+            "\u300A\u300B\u300C\u300D\u300E\u300F\u3010\u3011"+
+            "\u3012\u3013\u3014\u3015\u3016\u3017\u3018\u3019"+
+            "\u301A\u301B\u301C\u301D\u301E\u301F\u3020\u3021"+
+            "\u3022\u3023\u3024\u3025\u3026\u3027\u3028\u3029"+
+            "\u302A\u302B\u302C\u302D\u302E\u302F\u0000\u0000"+
+            "\u3030\u3031\u3032\u3033\u3034\u3035\u3036\u3037"+
+            "\u3038\u3039\u303A\u303B\u0000\u0000\u0000\u303C"+
+            "\u303D\u0000\u303E\u303F\u3040\u3041\u3042\u3043"+
+            "\u3044\u3045\u3046\u3047\u3048\u3049\u304A\u304B"+
+            "\u304C\u304D\u304E\u304F\u3050\u3051\u3052\u3053"+
+            "\u3054\u3055\u3056\u3057\u3058\u3059\u305A\u305B"+
+            "\u305C\u305D\u305E\u305F\u0000\u3060\u3061\u3062"+
+            "\u3063\u3064\u3065\u3066\u3067\u3068\u0000\u3069"+
+            "\u306A\u0000\u0000\u306B\u306C\u0000\u306D\u306E"+
+            "\u306F\u3070\u3071\u3072\u3073\u3074\u3075\u3076"+
+            "\u3077\u3078\u3079\u307A\u307B\u307C\u307D\u307E"+
+            "\u307F\u3080\u3081\u3082\u3083\u3084\u3085\u3086"+
+            "\u3087\u3088\u3089\u308A\u308B\u308C\u308D\u308E"+
+            "\u308F\u3090\u3091\u3092\u3093\u3094\u3095\u3096"+
+            "\u3097\u3098\u3099\u309A\u309B\u309C\u309D\u309E"+
+            "\u309F\u30A0\u30A1\u30A2\u30A3\u30A4\u30A5\u30A6"+
+            "\u30A7\u30A8\u30A9\u30AA\u30AB\u30AC\u30AD\u30AE"+
+            "\u30AF\u30B0\u30B1\u30B2\u30B3\u30B4\u30B5\u30B6"+
+            "\u30B7\u30B8\u30B9\u30BA\u30BB\u30BC\u30BD\u30BE"+
+            "\u30BF\u30C0\u30C1\u30C2\u30C3\u30C4\u30C5\u30C6"+
+            "\u30C7\u30C8\u30C9\u30CA\u30CB\u30CC\u30CD\u30CE"+
+            "\u30CF\u30D0\u30D1\u30D2\u30D3\u30D4\u30D5\u30D6"+
+            "\u30D7\u30D8\u30D9\u30DA\u30DB\u30DC\u30DD\u0000"+
+            "\u30DE\u30DF\u30E0\u30E1\u30E2\u30E3\u30E4\u30E5"+
+            "\u30E6\u30E7\u30E8\u30E9\u30EA\u30EB\u30EC\u30ED"+
+            "\u30EE\u30EF\u30F0\u30F1\u30F2\u30F3\u30F4\u30F5"+
+            "\u30F6\u30F7\u30F8\u30F9\u30FA\u30FB\u30FC\u30FD"+
+            "\u30FE\u30FF\u3100\u3101\u3102\u3103\u3104\u3105"+
+            "\u3106\u3107\u3108\u0000\u3109\u310A\u310B\u310C"+
+            "\u310D\u310E\u310F\u3110\u3111\u3112\u3113\u3114"+
+            "\u3115\u3116\u3117\u3118\u3119\u311A\u311B\u311C"+
+            "\u311D\u311E\u311F\u3120\u3121\u3122\u3123\u3124"+
+            "\u3125\u3126\u3127\u3128\u3129\u312A\u312B\u312C"+
+            "\u312D\u312E\u312F\u3130\u3131\u3132\u3133\u3134"+
+            "\u3135\u3136\u3137\u3138\u3139\u313A\u313B\u313C"+
+            "\u313D\u313E\u313F\u3140\u3141\u3142\u3143\u3144"+
+            "\u3145\u3146\u3147\u3148\u3149\u314A\u314B\u314C"+
+            "\u314D\u314E\u314F\u3150\u3151\u3152\u3153\u3154"+
+            "\u3155\u3156\u3157\u3158\u3159\u315A\u315B\u315C"+
+            "\u315D\u315E\u315F\u3160\u3161\u3162\u3163\u3164"+
+            "\u3165\u3166\u3167\u3168\u3169\u316A\u316B\u316C"+
+            "\u316D\u316E\u316F\u3170\u3171\u3172\u3173\u3174"+
+            "\u3175\u3176\u3177\u3178\u3179\u317A\u317B\u317C"+
+            "\u317D\u317E\u317F\u3180\u3181\u3182\u3183\u3184"+
+            "\u3185\u3186\u3187\u3188\u3189\u318A\u318B\u318C"+
+            "\u318D\u318E\u318F\u3190\u3191\u3192\u3193\u3194"+
+            "\u3195\u3196\u3197\u3198\u3199\u319A\u319B\u319C"+
+            "\u319D\u319E\u319F\u31A0\u31A1\u31A2\u31A3\u31A4"+
+            "\u31A5\u31A6\u31A7\u31A8\u31A9\u31AA\u31AB\u31AC"+
+            "\u31AD\u31AE\u31AF\u31B0\u31B1\u31B2\u31B3\u31B4"+
+            "\u31B5\u31B6\u31B7\u31B8\u31B9\u31BA\u31BB\u31BC"+
+            "\u31BD\u31BE\u31BF\u31C0\u31C1\u31C2\u31C3\u31C4"+
+            "\u31C5\u31C6\u31C7\u31C8\u31C9\u31CA\u31CB\u31CC"+
+            "\u31CD\u31CE\u31CF\u31D0\u31D1\u31D2\u31D3\u31D4"+
+            "\u31D5\u31D6\u31D7\u31D8\u31D9\u31DA\u31DB\u31DC"+
+            "\u31DD\u31DE\u31DF\u31E0\u31E1\u31E2\u31E3\u31E4"+
+            "\u31E5\u31E6\u31E7\u31E8\u31E9\u31EA\u31EB\u31EC"+
+            "\u31ED\u31EE\u31EF\u31F0\u31F1\u31F2\u31F3\u31F4"+
+            "\u31F5\u31F6\u31F7\u31F8\u31F9\u31FA\u31FB\u31FC"+
+            "\u31FD\u31FE\u31FF\u3200\u3201\u3202\u3203\u3204"+
+            "\u3205\u3206\u3207\u3208\u3209\u320A\u320B\u320C"+
+            "\u320D\u320E\u320F\u3210\u3211\u3212\u3213\u3214"+
+            "\u3215\u3216\u3217\u3218\u3219\u321A\u321B\u321C"+
+            "\u321D\u321E\u321F\u3220\u3221\u3222\u3223\u3224"+
+            "\u3225\u3226\u3227\u3228\u3229\u322A\u322B\u322C"+
+            "\u322D\u322E\u322F\u3230\u3231\u3232\u0000\u3233"+
+            "\u3234\u3235\u3236\u3237\u3238\u3239\u323A\u323B"+
+            "\u323C\u323D\u323E\u323F\u3240\u3241\u3242\u3243"+
+            "\u3244\u3245\u3246\u3247\u3248\u3249\u324A\u324B"+
+            "\u324C\u324D\u324E\u324F\u3250\u3251\u3252\u3253"+
+            "\u3254\u3255\u3256\u3257\u3258\u3259\u325A\u325B"+
+            "\u325C\u325D\u325E\u325F\u3260\u3261\u3262\u3263"+
+            "\u3264\u3265\u3266\u3267\u3268\u3269\u326A\u326B"+
+            "\u326C\u326D\u326E\u326F\u3270\u3271\u3272\u3273"+
+            "\u3274\u3275\u3276\u3277\u3278\u3279\u327A\u327B"+
+            "\u327C\u327D\u327E\u327F\u3280\u3281\u3282\u3283"+
+            "\u3284\u3285\u3286\u3287\u3288\u3289\u328A\u328B"+
+            "\u328C\u328D\u328E\u328F\u3290\u3291\u3292\u3293"+
+            "\u3294\u3295\u3296\u3297\u3298\u3299\u329A\u329B"+
+            "\u329C\u329D\u329E\u329F\u32A0\u32A1\u0000\u32A2"+
+            "\u32A3\u32A4\u32A5\u32A6\u32A7\u32A8\u32A9\u32AA"+
+            "\u32AB\u32AC\u0000\u32AD\u32AE\u32AF\u32B0\u32B1"+
+            "\u32B2\u32B3\u32B4\u32B5\u32B6\u32B7\u32B8\u32B9"+
+            "\u32BA\u32BB\u32BC\u32BD\u32BE\u32BF\u32C0\u32C1"+
+            "\u32C2\u32C3\u32C4\u32C5\u32C6\u32C7\u32C8\u32C9"+
+            "\u32CA\u32CB\u32CC\u32CD\u32CE\u32CF\u32D0\u32D1"+
+            "\u32D2\u32D3\u32D4\u32D5\u32D6\u32D7\u32D8\u32D9"+
+            "\u32DA\u32DB\u32DC\u32DD\u32DE\u32DF\u32E0\u32E1"+
+            "\u32E2\u32E3\u32E4\u32E5\u32E6\u32E7\u32E8\u32E9"+
+            "\u32EA\u32EB\u32EC\u32ED\u32EE\u32EF\u32F0\u32F1"+
+            "\u32F2\u32F3\u32F4\u32F5\u32F6\u32F7\u32F8\u32F9"+
+            "\u32FA\u32FB\u32FC\u32FD\u32FE\u32FF\u3300\u3301"+
+            "\u3302\u3303\u3304\u3305\u3306\u3307\u3308\u3309"+
+            "\u330A\u330B\u330C\u330D\u330E\u330F\u3310\u3311"+
+            "\u3312\u3313\u3314\u3315\u3316\u3317\u3318\u3319"+
+            "\u331A\u331B\u331C\u331D\u331E\u331F\u3320\u3321"+
+            "\u3322\u3323\u3324\u3325\u3326\u3327\u3328\u3329"+
+            "\u332A\u332B\u332C\u332D\u332E\u332F\u3330\u3331"+
+            "\u3332\u3333\u3334\u3335\u3336\u3337\u3338\u3339"+
+            "\u333A\u333B\u333C\u333D\u333E\u333F\u3340\u3341"+
+            "\u3342\u3343\u3344\u3345\u3346\u3347\u3348\u3349"+
+            "\u334A\u334B\u334C\u334D\u334E\u334F\u3350\u3351"+
+            "\u3352\u3353\u3354\u3355\u3356\u3357\u3358\u3359"+
+            "\u335A\u335B\u335C\u335D\u335E\u335F\u3360\u3361"+
+            "\u3362\u3363\u3364\u3365\u3366\u3367\u3368\u3369"+
+            "\u336A\u336B\u336C\u336D\u336E\u336F\u3370\u3371"+
+            "\u3372\u3373\u3374\u3375\u3376\u3377\u3378\u3379"+
+            "\u337A\u337B\u337C\u337D\u337E\u337F\u3380\u3381"+
+            "\u3382\u3383\u3384\u3385\u3386\u3387\u3388\u3389"+
+            "\u338A\u338B\u338C\u338D\u338E\u338F\u3390\u3391"+
+            "\u3392\u3393\u3394\u3395\u3396\u3397\u3398\u3399"+
+            "\u339A\u339B\u339C\u339D\u339E\u339F\u33A0\u33A1"+
+            "\u33A2\u33A3\u33A4\u33A5\u33A6\u33A7\u33A8\u33A9"+
+            "\u33AA\u33AB\u33AC\u33AD\u33AE\u33AF\u33B0\u33B1"+
+            "\u33B2\u33B3\u33B4\u33B5\u33B6\u33B7\u33B8\u33B9"+
+            "\u33BA\u33BB\u33BC\u33BD\u33BE\u33BF\u33C0\u33C1"+
+            "\u33C2\u33C3\u33C4\u33C5\u33C6\u33C7\u33C8\u33C9"+
+            "\u33CA\u33CB\u33CC\u33CD\u33CE\u33CF\u33D0\u33D1"+
+            "\u33D2\u33D3\u33D4\u33D5\u33D6\u33D7\u33D8\u33D9"+
+            "\u33DA\u33DB\u33DC\u33DD\u33DE\u33DF\u33E0\u33E1"+
+            "\u33E2\u33E3\u33E4\u33E5\u33E6\u33E7\u33E8\u33E9"+
+            "\u33EA\u33EB\u33EC\u33ED\u33EE\u33EF\u33F0\u33F1"+
+            "\u33F2\u33F3\u33F4\u33F5\u33F6\u33F7\u33F8\u33F9"+
+            "\u33FA\u33FB\u33FC\u33FD\u33FE\u33FF\u3400\u3401"+
+            "\u3402\u3403\u3404\u3405\u3406\u3407\u3408\u3409"+
+            "\u340A\u340B\u340C\u340D\u340E\u340F\u3410\u3411"+
+            "\u3412\u3413\u3414\u3415\u3416\u3417\u3418\u3419"+
+            "\u341A\u341B\u341C\u341D\u341E\u341F\u3420\u3421"+
+            "\u3422\u3423\u3424\u3425\u3426\u3427\u3428\u3429"+
+            "\u342A\u342B\u342C\u342D\u342E\u342F\u3430\u3431"+
+            "\u3432\u3433\u3434\u3435\u3436\u3437\u3438\u3439"+
+            "\u343A\u343B\u343C\u343D\u343E\u343F\u3440\u3441"+
+            "\u3442\u3443\u3444\u3445\u3446\u3447\u3448\u3449"+
+            "\u344A\u344B\u344C\u344D\u344E\u344F\u3450\u3451"+
+            "\u3452\u3453\u3454\u3455\u3456\u3457\u3458\u3459"+
+            "\u345A\u345B\u345C\u345D\u345E\u345F\u3460\u3461"+
+            "\u3462\u3463\u3464\u3465\u3466\u3467\u3468\u3469"+
+            "\u346A\u346B\u346C\u346D\u346E\u346F\u3470\u3471"+
+            "\u3472\u3473\u3474\u3475\u3476\u3477\u3478\u3479"+
+            "\u347A\u347B\u347C\u347D\u347E\u347F\u3480\u3481"+
+            "\u3482\u3483\u3484\u3485\u3486\u3487\u3488\u3489"+
+            "\u348A\u348B\u348C\u348D\u348E\u348F\u3490\u3491"+
+            "\u3492\u3493\u3494\u3495\u3496\u3497\u3498\u3499"+
+            "\u349A\u349B\u349C\u349D\u349E\u349F\u34A0\u34A1"+
+            "\u34A2\u34A3\u34A4\u34A5\u34A6\u34A7\u34A8\u34A9"+
+            "\u34AA\u34AB\u34AC\u34AD\u34AE\u34AF\u34B0\u34B1"+
+            "\u34B2\u34B3\u34B4\u34B5\u34B6\u34B7\u34B8\u34B9"+
+            "\u34BA\u34BB\u34BC\u34BD\u34BE\u34BF\u34C0\u34C1"+
+            "\u34C2\u34C3\u34C4\u34C5\u34C6\u34C7\u34C8\u34C9"+
+            "\u34CA\u34CB\u34CC\u34CD\u34CE\u34CF\u34D0\u34D1"+
+            "\u34D2\u34D3\u34D4\u34D5\u34D6\u34D7\u34D8\u34D9"+
+            "\u34DA\u34DB\u34DC\u34DD\u34DE\u34DF\u34E0\u34E1"+
+            "\u34E2\u34E3\u34E4\u34E5\u34E6\u34E7\u34E8\u34E9"+
+            "\u34EA\u34EB\u34EC\u34ED\u34EE\u34EF\u34F0\u34F1"+
+            "\u34F2\u34F3\u34F4\u34F5\u34F6\u34F7\u34F8\u34F9"+
+            "\u34FA\u34FB\u34FC\u34FD\u34FE\u34FF\u3500\u3501"+
+            "\u3502\u3503\u3504\u3505\u3506\u3507\u3508\u3509"+
+            "\u350A\u350B\u350C\u350D\u350E\u350F\u3510\u3511"+
+            "\u3512\u3513\u3514\u3515\u3516\u3517\u3518\u3519"+
+            "\u351A\u351B\u351C\u351D\u351E\u351F\u3520\u3521"+
+            "\u3522\u3523\u3524\u3525\u3526\u3527\u3528\u3529"+
+            "\u352A\u352B\u352C\u352D\u352E\u352F\u3530\u3531"+
+            "\u3532\u3533\u3534\u3535\u3536\u3537\u3538\u3539"+
+            "\u353A\u353B\u353C\u353D\u353E\u353F\u3540\u3541"+
+            "\u3542\u3543\u3544\u3545\u3546\u3547\u3548\u3549"+
+            "\u354A\u354B\u354C\u354D\u354E\u354F\u3550\u3551"+
+            "\u3552\u3553\u3554\u3555\u3556\u3557\u3558\u3559"+
+            "\u355A\u355B\u355C\u355D\u355E\u355F\u3560\u3561"+
+            "\u3562\u3563\u3564\u3565\u3566\u3567\u3568\u3569"+
+            "\u356A\u356B\u356C\u356D\u356E\u356F\u3570\u3571"+
+            "\u3572\u3573\u3574\u3575\u3576\u3577\u3578\u3579"+
+            "\u357A\u357B\u357C\u357D\u357E\u357F\u3580\u3581"+
+            "\u3582\u3583\u3584\u3585\u3586\u3587\u3588\u3589"+
+            "\u358A\u358B\u358C\u358D\u358E\u358F\u3590\u3591"+
+            "\u3592\u3593\u3594\u3595\u3596\u3597\u3598\u3599"+
+            "\u359A\u359B\u359C\u359D\u359E\u359F\u35A0\u35A1"+
+            "\u35A2\u35A3\u35A4\u35A5\u35A6\u35A7\u35A8\u35A9"+
+            "\u0000\u35AA\u35AB\u35AC\u35AD\u35AE\u35AF\u35B0"+
+            "\u35B1\u35B2\u35B3\u35B4\u35B5\u35B6\u35B7\u35B8"+
+            "\u35B9\u35BA\u35BB\u35BC\u35BD\u35BE\u35BF\u35C0"+
+            "\u35C1\u35C2\u35C3\u35C4\u35C5\u35C6\u35C7\u35C8"+
+            "\u35C9\u35CA\u35CB\u35CC\u35CD\u35CE\u35CF\u35D0"+
+            "\u35D1\u35D2\u35D3\u35D4\u35D5\u35D6\u35D7\u35D8"+
+            "\u35D9\u35DA\u35DB\u35DC\u35DD\u35DE\u35DF\u35E0"+
+            "\u35E1\u35E2\u35E3\u35E4\u35E5\u35E6\u35E7\u35E8"+
+            "\u35E9\u35EA\u35EB\u35EC\u35ED\u35EE\u35EF\u35F0"+
+            "\u35F1\u35F2\u35F3\u35F4\u35F5\u35F6\u35F7\u35F8"+
+            "\u35F9\u35FA\u35FB\u35FC\u35FD\u35FE\u0000\u35FF"+
+            "\u3600\u3601\u3602\u3603\u3604\u3605\u3606\u3607"+
+            "\u3608\u3609\u360A\u360B\u360C\u360D\u360E\u360F"+
+            "\u3610\u3611\u3612\u3613\u3614\u3615\u3616\u3617"+
+            "\u3618\u3619\u361A\u361B\u361C\u361D\u361E\u361F"+
+            "\u3620\u3621\u3622\u3623\u3624\u3625\u3626\u3627"+
+            "\u3628\u3629\u362A\u362B\u362C\u362D\u362E\u362F"+
+            "\u3630\u3631\u3632\u3633\u3634\u3635\u3636\u3637"+
+            "\u3638\u3639\u363A\u363B\u363C\u363D\u363E\u363F"+
+            "\u3640\u3641\u3642\u3643\u3644\u3645\u3646\u3647"+
+            "\u3648\u3649\u364A\u364B\u364C\u364D\u364E\u364F"+
+            "\u3650\u3651\u3652\u3653\u3654\u3655\u3656\u3657"+
+            "\u3658\u3659\u365A\u365B\u365C\u365D\u365E\u0000"+
+            "\u0000\u365F\u3660\u3661\u3662\u3663\u3664\u3665"+
+            "\u3666\u3667\u3668\u3669\u366A\u366B\u366C\u0000"+
+            "\u366D\u366E\u366F\u3670\u3671\u3672\u3673\u3674"+
+            "\u3675\u3676\u3677\u3678\u3679\u367A\u367B\u367C"+
+            "\u367D\u367E\u367F\u3680\u3681\u3682\u3683\u3684"+
+            "\u3685\u3686\u3687\u3688\u3689\u368A\u368B\u368C"+
+            "\u368D\u368E\u368F\u3690\u3691\u3692\u3693\u3694"+
+            "\u3695\u3696\u3697\u3698\u3699\u369A\u369B\u369C"+
+            "\u369D\u369E\u369F\u36A0\u36A1\u36A2\u36A3\u36A4"+
+            "\u36A5\u36A6\u36A7\u36A8\u36A9\u36AA\u36AB\u36AC"+
+            "\u36AD\u36AE\u36AF\u36B0\u36B1\u36B2\u36B3\u36B4"+
+            "\u36B5\u36B6\u36B7\u36B8\u36B9\u36BA\u36BB\u36BC"+
+            "\u36BD\u36BE\u36BF\u36C0\u36C1\u36C2\u36C3\u36C4"+
+            "\u36C5\u36C6\u36C7\u36C8\u36C9\u36CA\u36CB\u36CC"+
+            "\u36CD\u36CE\u36CF\u36D0\u36D1\u36D2\u36D3\u36D4"+
+            "\u36D5\u36D6\u36D7\u36D8\u36D9\u36DA\u36DB\u36DC"+
+            "\u36DD\u36DE\u36DF\u36E0\u36E1\u36E2\u36E3\u36E4"+
+            "\u36E5\u36E6\u36E7\u36E8\u36E9\u36EA\u36EB\u36EC"+
+            "\u36ED\u36EE\u36EF\u36F0\u36F1\u36F2\u36F3\u36F4"+
+            "\u36F5\u36F6\u36F7\u36F8\u36F9\u36FA\u36FB\u36FC"+
+            "\u36FD\u36FE\u36FF\u0000\u3700\u3701\u3702\u3703"+
+            "\u3704\u3705\u3706\u3707\u3708\u3709\u370A\u370B"+
+            "\u370C\u370D\u370E\u370F\u3710\u3711\u3712\u3713"+
+            "\u3714\u3715\u3716\u3717\u3718\u3719\u371A\u371B"+
+            "\u371C\u371D\u371E\u371F\u3720\u3721\u3722\u3723"+
+            "\u3724\u3725\u3726\u3727\u3728\u3729\u372A\u372B"+
+            "\u372C\u372D\u372E\u372F\u3730\u3731\u3732\u3733"+
+            "\u3734\u3735\u3736\u3737\u3738\u3739\u373A\u373B"+
+            "\u373C\u373D\u373E\u373F\u3740\u3741\u3742\u3743"+
+            "\u3744\u3745\u3746\u3747\u3748\u3749\u374A\u374B"+
+            "\u374C\u374D\u374E\u374F\u3750\u3751\u3752\u3753"+
+            "\u3754\u3755\u3756\u3757\u3758\u3759\u375A\u375B"+
+            "\u375C\u375D\u375E\u375F\u3760\u3761\u3762\u3763"+
+            "\u3764\u3765\u3766\u3767\u3768\u3769\u376A\u376B"+
+            "\u376C\u376D\u376E\u376F\u3770\u3771\u3772\u3773"+
+            "\u3774\u3775\u3776\u3777\u3778\u3779\u377A\u377B"+
+            "\u377C\u377D\u377E\u377F\u3780\u3781\u3782\u3783"+
+            "\u3784\u3785\u3786\u3787\u3788\u3789\u378A\u378B"+
+            "\u378C\u378D\u378E\u378F\u3790\u3791\u3792\u3793"+
+            "\u3794\u3795\u3796\u3797\u3798\u3799\u379A\u379B"+
+            "\u379C\u379D\u379E\u379F\u37A0\u37A1\u37A2\u37A3"+
+            "\u37A4\u37A5\u37A6\u37A7\u37A8\u37A9\u37AA\u37AB"+
+            "\u37AC\u37AD\u37AE\u37AF\u37B0\u37B1\u37B2\u37B3"+
+            "\u37B4\u37B5\u37B6\u37B7\u37B8\u37B9\u37BA\u37BB"+
+            "\u37BC\u37BD\u37BE\u37BF\u37C0\u37C1\u37C2\u37C3"+
+            "\u37C4\u37C5\u37C6\u37C7\u37C8\u37C9\u37CA\u37CB"+
+            "\u37CC\u37CD\u37CE\u37CF\u37D0\u37D1\u37D2\u37D3"+
+            "\u37D4\u37D5\u37D6\u37D7\u37D8\u37D9\u0000\u37DA"+
+            "\u37DB\u37DC\u37DD\u37DE\u37DF\u37E0\u37E1\u37E2"+
+            "\u37E3\u37E4\u37E5\u37E6\u37E7\u37E8\u37E9\u37EA"+
+            "\u37EB\u37EC\u37ED\u37EE\u37EF\u37F0\u37F1\u37F2"+
+            "\u37F3\u37F4\u37F5\u37F6\u37F7\u37F8\u37F9\u37FA"+
+            "\u37FB\u37FC\u37FD\u37FE\u37FF\u3800\u3801\u3802"+
+            "\u3803\u3804\u3805\u3806\u3807\u3808\u3809\u380A"+
+            "\u380B\u380C\u380D\u380E\u380F\u3810\u3811\u3812"+
+            "\u3813\u3814\u3815\u3816\u3817\u3818\u3819\u381A"+
+            "\u381B\u381C\u381D\u381E\u381F\u3820\u3821\u3822"+
+            "\u3823\u3824\u3825\u3826\u3827\u3828\u3829\u382A"+
+            "\u382B\u382C\u382D\u382E\u382F\u3830\u3831\u3832"+
+            "\u3833\u3834\u3835\u3836\u3837\u3838\u3839\u383A"+
+            "\u383B\u383C\u383D\u383E\u383F\u3840\u3841\u3842"+
+            "\u3843\u3844\u3845\u3846\u3847\u3848\u3849\u384A"+
+            "\u384B\u384C\u384D\u384E\u384F\u3850\u3851\u3852"+
+            "\u3853\u3854\u3855\u3856\u3857\u3858\u3859\u385A"+
+            "\u385B\u385C\u385D\u385E\u385F\u3860\u3861\u3862"+
+            "\u3863\u3864\u3865\u3866\u3867\u3868\u3869\u386A"+
+            "\u386B\u386C\u386D\u386E\u386F\u3870\u3871\u3872"+
+            "\u3873\u3874\u3875\u3876\u3877\u3878\u3879\u387A"+
+            "\u387B\u387C\u387D\u387E\u387F\u3880\u3881\u3882"+
+            "\u3883\u3884\u3885\u3886\u3887\u3888\u3889\u388A"+
+            "\u388B\u388C\u388D\u388E\u388F\u3890\u3891\u3892"+
+            "\u3893\u3894\u3895\u3896\u3897\u3898\u3899\u389A"+
+            "\u389B\u389C\u389D\u389E\u389F\u38A0\u38A1\u38A2"+
+            "\u38A3\u38A4\u38A5\u38A6\u38A7\u38A8\u38A9\u38AA"+
+            "\u38AB\u38AC\u38AD\u38AE\u38AF\u38B0\u38B1\u38B2"+
+            "\u38B3\u38B4\u38B5\u38B6\u38B7\u38B8\u38B9\u38BA"+
+            "\u38BB\u38BC\u38BD\u38BE\u38BF\u38C0\u38C1\u38C2"+
+            "\u38C3\u38C4\u38C5\u38C6\u38C7\u38C8\u38C9\u38CA"+
+            "\u38CB\u38CC\u38CD\u38CE\u38CF\u38D0\u38D1\u38D2"+
+            "\u38D3\u38D4\u38D5\u38D6\u38D7\u38D8\u38D9\u38DA"+
+            "\u38DB\u38DC\u38DD\u38DE\u38DF\u38E0\u38E1\u38E2"+
+            "\u38E3\u38E4\u38E5\u38E6\u38E7\u38E8\u38E9\u38EA"+
+            "\u38EB\u38EC\u38ED\u38EE\u38EF\u38F0\u38F1\u38F2"+
+            "\u38F3\u38F4\u38F5\u38F6\u38F7\u38F8\u0000\u38F9"+
+            "\u38FA\u38FB\u38FC\u38FD\u38FE\u38FF\u3900\u3901"+
+            "\u3902\u3903\u3904\u3905\u3906\u3907\u3908\u3909"+
+            "\u390A\u390B\u390C\u390D\u390E\u390F\u3910\u3911"+
+            "\u3912\u3913\u3914\u3915\u3916\u3917\u3918\u3919"+
+            "\u391A\u391B\u391C\u391D\u391E\u391F\u3920\u3921"+
+            "\u3922\u3923\u3924\u3925\u3926\u3927\u3928\u3929"+
+            "\u392A\u392B\u392C\u392D\u392E\u392F\u3930\u3931"+
+            "\u3932\u3933\u3934\u3935\u3936\u3937\u3938\u3939"+
+            "\u393A\u393B\u393C\u393D\u393E\u393F\u3940\u3941"+
+            "\u3942\u3943\u3944\u3945\u3946\u3947\u3948\u3949"+
+            "\u394A\u394B\u394C\u394D\u394E\u394F\u3950\u3951"+
+            "\u3952\u3953\u3954\u3955\u3956\u3957\u3958\u3959"+
+            "\u395A\u395B\u395C\u395D\u395E\u395F\u3960\u3961"+
+            "\u3962\u3963\u3964\u3965\u3966\u3967\u3968\u3969"+
+            "\u0000\u396A\u396B\u396C\u396D\u396E\u396F\u3970"+
+            "\u3971\u3972\u3973\u3974\u3975\u3976\u3977\u3978"+
+            "\u3979\u397A\u397B\u397C\u397D\u397E\u397F\u3980"+
+            "\u3981\u3982\u3983\u3984\u3985\u3986\u3987\u3988"+
+            "\u3989\u398A\u398B\u398C\u398D\u398E\u398F\u3990"+
+            "\u3991\u3992\u3993\u3994\u3995\u3996\u3997\u3998"+
+            "\u3999\u399A\u399B\u399C\u399D\u399E\u399F\u39A0"+
+            "\u39A1\u39A2\u39A3\u39A4\u39A5\u39A6\u39A7\u39A8"+
+            "\u39A9\u39AA\u39AB\u39AC\u39AD\u39AE\u39AF\u39B0"+
+            "\u39B1\u39B2\u39B3\u39B4\u39B5\u39B6\u39B7\u39B8"+
+            "\u39B9\u39BA\u39BB\u39BC\u39BD\u39BE\u39BF\u39C0"+
+            "\u39C1\u39C2\u39C3\u39C4\u39C5\u39C6\u39C7\u39C8"+
+            "\u39C9\u39CA\u39CB\u39CC\u39CD\u39CE\u39CF\u39D0"+
+            "\u39D1\u39D2\u39D3\u39D4\u39D5\u39D6\u39D7\u39D8"+
+            "\u39D9\u39DA\u39DB\u39DC\u39DD\u39DE\u39DF\u39E0"+
+            "\u39E1\u39E2\u39E3\u39E4\u39E5\u39E6\u39E7\u39E8"+
+            "\u39E9\u39EA\u39EB\u39EC\u39ED\u39EE\u39EF\u39F0"+
+            "\u39F1\u39F2\u39F3\u39F4\u39F5\u39F6\u39F7\u39F8"+
+            "\u39F9\u39FA\u39FB\u39FC\u39FD\u39FE\u39FF\u3A00"+
+            "\u3A01\u3A02\u3A03\u3A04\u3A05\u3A06\u3A07\u3A08"+
+            "\u3A09\u3A0A\u3A0B\u3A0C\u3A0D\u3A0E\u3A0F\u3A10"+
+            "\u3A11\u3A12\u3A13\u3A14\u3A15\u3A16\u3A17\u3A18"+
+            "\u3A19\u3A1A\u3A1B\u3A1C\u3A1D\u3A1E\u3A1F\u3A20"+
+            "\u3A21\u3A22\u3A23\u3A24\u3A25\u3A26\u3A27\u3A28"+
+            "\u3A29\u3A2A\u3A2B\u3A2C\u3A2D\u3A2E\u3A2F\u3A30"+
+            "\u3A31\u3A32\u3A33\u3A34\u3A35\u3A36\u3A37\u3A38"+
+            "\u3A39\u3A3A\u3A3B\u3A3C\u3A3D\u3A3E\u3A3F\u3A40"+
+            "\u3A41\u3A42\u3A43\u3A44\u3A45\u3A46\u3A47\u3A48"+
+            "\u3A49\u3A4A\u3A4B\u3A4C\u3A4D\u3A4E\u3A4F\u3A50"+
+            "\u3A51\u3A52\u3A53\u3A54\u3A55\u3A56\u3A57\u3A58"+
+            "\u3A59\u3A5A\u3A5B\u3A5C\u3A5D\u3A5E\u3A5F\u3A60"+
+            "\u3A61\u3A62\u3A63\u3A64\u3A65\u3A66\u3A67\u3A68"+
+            "\u3A69\u3A6A\u3A6B\u3A6C\u3A6D\u3A6E\u3A6F\u3A70"+
+            "\u3A71\u3A72\u3A73\u3A74\u3A75\u3A76\u3A77\u3A78"+
+            "\u3A79\u3A7A\u3A7B\u3A7C\u3A7D\u3A7E\u3A7F\u3A80"+
+            "\u3A81\u3A82\u3A83\u3A84\u3A85\u3A86\u3A87\u3A88"+
+            "\u3A89\u3A8A\u3A8B\u3A8C\u3A8D\u3A8E\u3A8F\u3A90"+
+            "\u3A91\u3A92\u3A93\u3A94\u3A95\u3A96\u3A97\u3A98"+
+            "\u3A99\u3A9A\u3A9B\u3A9C\u3A9D\u3A9E\u3A9F\u3AA0"+
+            "\u3AA1\u3AA2\u3AA3\u3AA4\u3AA5\u3AA6\u3AA7\u3AA8"+
+            "\u3AA9\u3AAA\u3AAB\u3AAC\u3AAD\u3AAE\u3AAF\u3AB0"+
+            "\u3AB1\u3AB2\u3AB3\u3AB4\u3AB5\u3AB6\u3AB7\u3AB8"+
+            "\u3AB9\u3ABA\u3ABB\u3ABC\u3ABD\u3ABE\u3ABF\u3AC0"+
+            "\u3AC1\u3AC2\u3AC3\u3AC4\u3AC5\u3AC6\u3AC7\u3AC8"+
+            "\u3AC9\u3ACA\u3ACB\u3ACC\u3ACD\u3ACE\u3ACF\u3AD0"+
+            "\u3AD1\u3AD2\u3AD3\u3AD4\u3AD5\u3AD6\u3AD7\u3AD8"+
+            "\u3AD9\u3ADA\u3ADB\u3ADC\u3ADD\u3ADE\u3ADF\u3AE0"+
+            "\u3AE1\u3AE2\u3AE3\u3AE4\u3AE5\u3AE6\u3AE7\u3AE8"+
+            "\u3AE9\u3AEA\u3AEB\u3AEC\u3AED\u3AEE\u3AEF\u3AF0"+
+            "\u3AF1\u3AF2\u3AF3\u3AF4\u3AF5\u3AF6\u3AF7\u3AF8"+
+            "\u3AF9\u3AFA\u3AFB\u3AFC\u3AFD\u3AFE\u3AFF\u3B00"+
+            "\u3B01\u3B02\u3B03\u3B04\u3B05\u3B06\u3B07\u3B08"+
+            "\u3B09\u3B0A\u3B0B\u3B0C\u3B0D\u3B0E\u3B0F\u3B10"+
+            "\u3B11\u3B12\u3B13\u3B14\u3B15\u3B16\u3B17\u3B18"+
+            "\u3B19\u3B1A\u3B1B\u3B1C\u3B1D\u3B1E\u3B1F\u3B20"+
+            "\u3B21\u3B22\u3B23\u3B24\u3B25\u3B26\u3B27\u3B28"+
+            "\u3B29\u3B2A\u3B2B\u3B2C\u3B2D\u3B2E\u3B2F\u3B30"+
+            "\u3B31\u3B32\u3B33\u3B34\u3B35\u3B36\u3B37\u3B38"+
+            "\u3B39\u3B3A\u3B3B\u3B3C\u3B3D\u3B3E\u3B3F\u3B40"+
+            "\u3B41\u3B42\u3B43\u3B44\u3B45\u3B46\u3B47\u3B48"+
+            "\u3B49\u3B4A\u3B4B\u3B4C\u3B4D\u3B4E\u3B4F\u3B50"+
+            "\u3B51\u3B52\u3B53\u3B54\u3B55\u3B56\u3B57\u3B58"+
+            "\u3B59\u3B5A\u3B5B\u3B5C\u3B5D\u3B5E\u3B5F\u3B60"+
+            "\u3B61\u3B62\u3B63\u3B64\u3B65\u3B66\u3B67\u3B68"+
+            "\u3B69\u3B6A\u3B6B\u3B6C\u3B6D\u3B6E\u3B6F\u3B70"+
+            "\u3B71\u3B72\u3B73\u3B74\u3B75\u3B76\u3B77\u3B78"+
+            "\u3B79\u3B7A\u3B7B\u3B7C\u3B7D\u3B7E\u3B7F\u3B80"+
+            "\u3B81\u3B82\u3B83\u3B84\u3B85\u3B86\u3B87\u3B88";
+
+        private final static String innerIndex4=
+            "\u3B89\u3B8A\u3B8B\u3B8C\u3B8D\u3B8E\u3B8F\u3B90"+
+            "\u3B91\u3B92\u3B93\u3B94\u3B95\u3B96\u3B97\u3B98"+
+            "\u3B99\u3B9A\u3B9B\u3B9C\u3B9D\u3B9E\u3B9F\u3BA0"+
+            "\u3BA1\u3BA2\u3BA3\u3BA4\u3BA5\u3BA6\u3BA7\u3BA8"+
+            "\u3BA9\u3BAA\u3BAB\u3BAC\u3BAD\u3BAE\u3BAF\u3BB0"+
+            "\u3BB1\u3BB2\u3BB3\u3BB4\u3BB5\u3BB6\u3BB7\u3BB8"+
+            "\u3BB9\u3BBA\u3BBB\u3BBC\u3BBD\u3BBE\u3BBF\u3BC0"+
+            "\u3BC1\u3BC2\u3BC3\u3BC4\u3BC5\u3BC6\u3BC7\u3BC8"+
+            "\u3BC9\u3BCA\u3BCB\u3BCC\u3BCD\u3BCE\u3BCF\u3BD0"+
+            "\u3BD1\u3BD2\u3BD3\u3BD4\u3BD5\u3BD6\u3BD7\u3BD8"+
+            "\u3BD9\u3BDA\u3BDB\u3BDC\u3BDD\u3BDE\u3BDF\u3BE0"+
+            "\u3BE1\u3BE2\u3BE3\u3BE4\u3BE5\u3BE6\u3BE7\u3BE8"+
+            "\u3BE9\u3BEA\u3BEB\u3BEC\u3BED\u3BEE\u3BEF\u3BF0"+
+            "\u3BF1\u3BF2\u3BF3\u3BF4\u3BF5\u3BF6\u3BF7\u3BF8"+
+            "\u3BF9\u3BFA\u3BFB\u3BFC\u3BFD\u3BFE\u3BFF\u3C00"+
+            "\u3C01\u3C02\u3C03\u3C04\u3C05\u3C06\u3C07\u3C08"+
+            "\u3C09\u3C0A\u3C0B\u3C0C\u3C0D\u3C0E\u3C0F\u3C10"+
+            "\u3C11\u3C12\u3C13\u3C14\u3C15\u3C16\u3C17\u3C18"+
+            "\u3C19\u3C1A\u3C1B\u3C1C\u3C1D\u3C1E\u3C1F\u3C20"+
+            "\u3C21\u3C22\u3C23\u3C24\u3C25\u3C26\u3C27\u3C28"+
+            "\u3C29\u3C2A\u3C2B\u3C2C\u3C2D\u3C2E\u3C2F\u3C30"+
+            "\u3C31\u3C32\u3C33\u3C34\u3C35\u3C36\u3C37\u3C38"+
+            "\u3C39\u3C3A\u3C3B\u3C3C\u3C3D\u3C3E\u3C3F\u3C40"+
+            "\u3C41\u3C42\u3C43\u3C44\u3C45\u3C46\u3C47\u3C48"+
+            "\u3C49\u3C4A\u3C4B\u3C4C\u3C4D\u3C4E\u3C4F\u3C50"+
+            "\u3C51\u3C52\u3C53\u3C54\u3C55\u3C56\u3C57\u3C58"+
+            "\u3C59\u3C5A\u3C5B\u3C5C\u3C5D\u3C5E\u3C5F\u3C60"+
+            "\u3C61\u3C62\u3C63\u3C64\u3C65\u3C66\u3C67\u3C68"+
+            "\u3C69\u3C6A\u3C6B\u3C6C\u3C6D\u3C6E\u3C6F\u3C70"+
+            "\u3C71\u3C72\u3C73\u3C74\u3C75\u3C76\u3C77\u3C78"+
+            "\u3C79\u3C7A\u3C7B\u3C7C\u3C7D\u3C7E\u3C7F\u3C80"+
+            "\u3C81\u3C82\u3C83\u3C84\u3C85\u3C86\u3C87\u3C88"+
+            "\u3C89\u3C8A\u3C8B\u3C8C\u3C8D\u3C8E\u3C8F\u3C90"+
+            "\u3C91\u3C92\u3C93\u3C94\u3C95\u3C96\u3C97\u3C98"+
+            "\u3C99\u3C9A\u3C9B\u3C9C\u3C9D\u3C9E\u3C9F\u3CA0"+
+            "\u3CA1\u3CA2\u3CA3\u3CA4\u3CA5\u3CA6\u3CA7\u3CA8"+
+            "\u3CA9\u3CAA\u3CAB\u3CAC\u3CAD\u3CAE\u3CAF\u3CB0"+
+            "\u3CB1\u3CB2\u3CB3\u3CB4\u3CB5\u3CB6\u3CB7\u3CB8"+
+            "\u3CB9\u3CBA\u3CBB\u3CBC\u3CBD\u3CBE\u3CBF\u3CC0"+
+            "\u3CC1\u3CC2\u3CC3\u3CC4\u3CC5\u3CC6\u3CC7\u3CC8"+
+            "\u3CC9\u3CCA\u3CCB\u3CCC\u3CCD\u3CCE\u3CCF\u3CD0"+
+            "\u3CD1\u3CD2\u3CD3\u3CD4\u3CD5\u3CD6\u3CD7\u3CD8"+
+            "\u3CD9\u3CDA\u3CDB\u3CDC\u3CDD\u3CDE\u0000\u3CDF"+
+            "\u3CE0\u3CE1\u3CE2\u3CE3\u3CE4\u3CE5\u3CE6\u3CE7"+
+            "\u3CE8\u3CE9\u3CEA\u3CEB\u3CEC\u3CED\u3CEE\u3CEF"+
+            "\u3CF0\u3CF1\u3CF2\u3CF3\u3CF4\u3CF5\u3CF6\u3CF7"+
+            "\u3CF8\u3CF9\u3CFA\u3CFB\u3CFC\u3CFD\u3CFE\u3CFF"+
+            "\u3D00\u3D01\u3D02\u3D03\u3D04\u3D05\u3D06\u3D07"+
+            "\u3D08\u3D09\u3D0A\u3D0B\u3D0C\u3D0D\u3D0E\u3D0F"+
+            "\u3D10\u3D11\u3D12\u3D13\u3D14\u3D15\u3D16\u3D17"+
+            "\u3D18\u3D19\u3D1A\u3D1B\u3D1C\u3D1D\u3D1E\u3D1F"+
+            "\u3D20\u3D21\u3D22\u3D23\u3D24\u3D25\u3D26\u3D27"+
+            "\u3D28\u3D29\u3D2A\u3D2B\u3D2C\u3D2D\u3D2E\u3D2F"+
+            "\u3D30\u3D31\u3D32\u3D33\u3D34\u3D35\u3D36\u3D37"+
+            "\u3D38\u3D39\u3D3A\u3D3B\u3D3C\u3D3D\u3D3E\u3D3F"+
+            "\u3D40\u3D41\u3D42\u3D43\u3D44\u3D45\u3D46\u3D47"+
+            "\u3D48\u3D49\u3D4A\u3D4B\u3D4C\u3D4D\u3D4E\u3D4F"+
+            "\u3D50\u3D51\u3D52\u3D53\u3D54\u3D55\u3D56\u3D57"+
+            "\u3D58\u3D59\u3D5A\u3D5B\u3D5C\u3D5D\u3D5E\u3D5F"+
+            "\u3D60\u3D61\u3D62\u3D63\u3D64\u3D65\u3D66\u3D67"+
+            "\u3D68\u3D69\u3D6A\u3D6B\u3D6C\u3D6D\u3D6E\u3D6F"+
+            "\u3D70\u3D71\u3D72\u3D73\u3D74\u3D75\u3D76\u3D77"+
+            "\u3D78\u3D79\u3D7A\u3D7B\u3D7C\u3D7D\u3D7E\u3D7F"+
+            "\u3D80\u3D81\u3D82\u3D83\u3D84\u3D85\u3D86\u3D87"+
+            "\u3D88\u3D89\u3D8A\u3D8B\u3D8C\u3D8D\u3D8E\u3D8F"+
+            "\u3D90\u3D91\u3D92\u3D93\u3D94\u3D95\u3D96\u3D97"+
+            "\u3D98\u3D99\u3D9A\u3D9B\u3D9C\u3D9D\u3D9E\u3D9F"+
+            "\u3DA0\u3DA1\u3DA2\u3DA3\u3DA4\u3DA5\u3DA6\u3DA7"+
+            "\u3DA8\u3DA9\u3DAA\u3DAB\u3DAC\u3DAD\u3DAE\u3DAF"+
+            "\u3DB0\u3DB1\u3DB2\u3DB3\u3DB4\u3DB5\u3DB6\u3DB7"+
+            "\u3DB8\u3DB9\u3DBA\u3DBB\u3DBC\u3DBD\u3DBE\u3DBF"+
+            "\u3DC0\u3DC1\u3DC2\u3DC3\u3DC4\u3DC5\u3DC6\u3DC7"+
+            "\u3DC8\u3DC9\u3DCA\u3DCB\u3DCC\u3DCD\u3DCE\u3DCF"+
+            "\u3DD0\u3DD1\u3DD2\u3DD3\u3DD4\u3DD5\u3DD6\u3DD7"+
+            "\u3DD8\u3DD9\u3DDA\u3DDB\u3DDC\u3DDD\u3DDE\u3DDF"+
+            "\u3DE0\u3DE1\u3DE2\u3DE3\u3DE4\u3DE5\u3DE6\u0000"+
+            "\u3DE7\u3DE8\u3DE9\u3DEA\u3DEB\u3DEC\u3DED\u3DEE"+
+            "\u3DEF\u3DF0\u3DF1\u3DF2\u3DF3\u3DF4\u3DF5\u3DF6"+
+            "\u3DF7\u3DF8\u3DF9\u3DFA\u3DFB\u3DFC\u3DFD\u3DFE"+
+            "\u3DFF\u3E00\u3E01\u3E02\u3E03\u3E04\u3E05\u3E06"+
+            "\u3E07\u3E08\u3E09\u3E0A\u3E0B\u3E0C\u3E0D\u3E0E"+
+            "\u3E0F\u3E10\u3E11\u3E12\u3E13\u3E14\u3E15\u3E16"+
+            "\u3E17\u3E18\u3E19\u3E1A\u3E1B\u3E1C\u3E1D\u3E1E"+
+            "\u3E1F\u3E20\u3E21\u3E22\u3E23\u3E24\u3E25\u3E26"+
+            "\u3E27\u3E28\u3E29\u3E2A\u3E2B\u3E2C\u3E2D\u3E2E"+
+            "\u3E2F\u3E30\u3E31\u3E32\u3E33\u3E34\u3E35\u3E36"+
+            "\u3E37\u3E38\u3E39\u3E3A\u3E3B\u3E3C\u3E3D\u3E3E"+
+            "\u3E3F\u3E40\u3E41\u3E42\u3E43\u3E44\u3E45\u3E46"+
+            "\u3E47\u3E48\u3E49\u3E4A\u3E4B\u3E4C\u3E4D\u3E4E"+
+            "\u3E4F\u3E50\u3E51\u3E52\u3E53\u3E54\u3E55\u3E56"+
+            "\u3E57\u3E58\u3E59\u3E5A\u3E5B\u3E5C\u3E5D\u3E5E"+
+            "\u3E5F\u3E60\u3E61\u3E62\u3E63\u3E64\u3E65\u3E66"+
+            "\u3E67\u3E68\u3E69\u3E6A\u3E6B\u3E6C\u3E6D\u3E6E"+
+            "\u3E6F\u3E70\u3E71\u3E72\u3E73\u3E74\u3E75\u3E76"+
+            "\u3E77\u3E78\u3E79\u3E7A\u3E7B\u3E7C\u3E7D\u3E7E"+
+            "\u3E7F\u3E80\u3E81\u3E82\u3E83\u3E84\u3E85\u3E86"+
+            "\u3E87\u3E88\u3E89\u3E8A\u3E8B\u3E8C\u3E8D\u3E8E"+
+            "\u3E8F\u3E90\u3E91\u3E92\u3E93\u3E94\u3E95\u3E96"+
+            "\u3E97\u3E98\u3E99\u3E9A\u3E9B\u3E9C\u3E9D\u3E9E"+
+            "\u3E9F\u3EA0\u3EA1\u3EA2\u3EA3\u3EA4\u3EA5\u3EA6"+
+            "\u3EA7\u3EA8\u3EA9\u3EAA\u3EAB\u3EAC\u3EAD\u3EAE"+
+            "\u3EAF\u3EB0\u3EB1\u3EB2\u3EB3\u3EB4\u3EB5\u3EB6"+
+            "\u3EB7\u3EB8\u3EB9\u3EBA\u3EBB\u3EBC\u3EBD\u3EBE"+
+            "\u3EBF\u3EC0\u3EC1\u3EC2\u3EC3\u3EC4\u3EC5\u3EC6"+
+            "\u3EC7\u3EC8\u3EC9\u3ECA\u3ECB\u3ECC\u3ECD\u3ECE"+
+            "\u3ECF\u3ED0\u3ED1\u3ED2\u3ED3\u3ED4\u3ED5\u3ED6"+
+            "\u3ED7\u3ED8\u3ED9\u3EDA\u3EDB\u3EDC\u3EDD\u3EDE"+
+            "\u3EDF\u3EE0\u3EE1\u3EE2\u3EE3\u3EE4\u3EE5\u3EE6"+
+            "\u3EE7\u3EE8\u3EE9\u3EEA\u3EEB\u3EEC\u3EED\u3EEE"+
+            "\u3EEF\u3EF0\u3EF1\u3EF2\u3EF3\u3EF4\u3EF5\u3EF6"+
+            "\u3EF7\u3EF8\u3EF9\u3EFA\u3EFB\u3EFC\u3EFD\u3EFE"+
+            "\u3EFF\u3F00\u3F01\u3F02\u3F03\u3F04\u3F05\u3F06"+
+            "\u3F07\u3F08\u3F09\u3F0A\u3F0B\u3F0C\u3F0D\u3F0E"+
+            "\u3F0F\u3F10\u3F11\u3F12\u3F13\u3F14\u3F15\u3F16"+
+            "\u3F17\u3F18\u3F19\u3F1A\u3F1B\u3F1C\u3F1D\u3F1E"+
+            "\u3F1F\u3F20\u3F21\u3F22\u3F23\u3F24\u3F25\u3F26"+
+            "\u3F27\u3F28\u3F29\u3F2A\u3F2B\u3F2C\u3F2D\u3F2E"+
+            "\u3F2F\u3F30\u3F31\u3F32\u3F33\u3F34\u3F35\u3F36"+
+            "\u3F37\u3F38\u3F39\u3F3A\u3F3B\u3F3C\u3F3D\u3F3E"+
+            "\u3F3F\u3F40\u3F41\u3F42\u3F43\u3F44\u3F45\u3F46"+
+            "\u3F47\u3F48\u3F49\u3F4A\u3F4B\u3F4C\u3F4D\u3F4E"+
+            "\u3F4F\u3F50\u3F51\u3F52\u3F53\u3F54\u3F55\u3F56"+
+            "\u3F57\u3F58\u3F59\u3F5A\u3F5B\u3F5C\u3F5D\u3F5E"+
+            "\u3F5F\u3F60\u3F61\u3F62\u3F63\u3F64\u3F65\u3F66"+
+            "\u3F67\u3F68\u3F69\u3F6A\u3F6B\u3F6C\u3F6D\u3F6E"+
+            "\u3F6F\u3F70\u3F71\u3F72\u3F73\u3F74\u3F75\u3F76"+
+            "\u3F77\u3F78\u3F79\u3F7A\u3F7B\u3F7C\u3F7D\u3F7E"+
+            "\u3F7F\u3F80\u3F81\u3F82\u3F83\u3F84\u3F85\u3F86"+
+            "\u3F87\u3F88\u3F89\u3F8A\u3F8B\u3F8C\u3F8D\u3F8E"+
+            "\u3F8F\u3F90\u3F91\u3F92\u3F93\u3F94\u3F95\u3F96"+
+            "\u3F97\u3F98\u3F99\u3F9A\u3F9B\u3F9C\u3F9D\u3F9E"+
+            "\u3F9F\u3FA0\u3FA1\u3FA2\u3FA3\u3FA4\u3FA5\u3FA6"+
+            "\u3FA7\u3FA8\u3FA9\u3FAA\u3FAB\u3FAC\u3FAD\u3FAE"+
+            "\u3FAF\u3FB0\u3FB1\u3FB2\u3FB3\u3FB4\u3FB5\u3FB6"+
+            "\u3FB7\u3FB8\u3FB9\u3FBA\u3FBB\u3FBC\u3FBD\u0000"+
+            "\u3FBE\u3FBF\u3FC0\u3FC1\u3FC2\u3FC3\u3FC4\u3FC5"+
+            "\u3FC6\u3FC7\u3FC8\u3FC9\u3FCA\u3FCB\u3FCC\u3FCD"+
+            "\u3FCE\u3FCF\u3FD0\u3FD1\u3FD2\u3FD3\u3FD4\u3FD5"+
+            "\u3FD6\u3FD7\u3FD8\u3FD9\u3FDA\u3FDB\u3FDC\u3FDD"+
+            "\u3FDE\u3FDF\u3FE0\u3FE1\u3FE2\u3FE3\u3FE4\u3FE5"+
+            "\u3FE6\u3FE7\u3FE8\u3FE9\u3FEA\u3FEB\u3FEC\u3FED"+
+            "\u3FEE\u3FEF\u3FF0\u3FF1\u3FF2\u3FF3\u3FF4\u3FF5"+
+            "\u3FF6\u3FF7\u3FF8\u3FF9\u3FFA\u3FFB\u3FFC\u3FFD"+
+            "\u3FFE\u3FFF\u4000\u4001\u4002\u4003\u4004\u4005"+
+            "\u4006\u4007\u4008\u4009\u400A\u400B\u400C\u400D"+
+            "\u400E\u400F\u4010\u4011\u4012\u4013\u4014\u4015"+
+            "\u4016\u4017\u4018\u4019\u401A\u401B\u401C\u401D"+
+            "\u401E\u401F\u4020\u4021\u4022\u4023\u4024\u4025"+
+            "\u4026\u4027\u4028\u4029\u402A\u402B\u402C\u402D"+
+            "\u402E\u402F\u4030\u4031\u0000\u4032\u4033\u4034"+
+            "\u4035\u0000\u4036\u4037\u4038\u4039\u403A\u403B"+
+            "\u403C\u403D\u403E\u403F\u4040\u4041\u4042\u4043"+
+            "\u4044\u4045\u4046\u4047\u4048\u4049\u404A\u404B"+
+            "\u404C\u404D\u404E\u404F\u4050\u4051\u4052\u4053"+
+            "\u4054\u4055\u4056\u4057\u4058\u4059\u405A\u405B"+
+            "\u405C\u405D\u405E\u405F\u4060\u0000\u4061\u4062"+
+            "\u4063\u4064\u4065\u4066\u4067\u4068\u4069\u406A"+
+            "\u406B\u406C\u406D\u406E\u406F\u4070\u4071\u4072"+
+            "\u4073\u4074\u4075\u4076\u4077\u4078\u4079\u407A"+
+            "\u407B\u407C\u407D\u407E\u407F\u4080\u4081\u4082"+
+            "\u4083\u4084\u4085\u4086\u4087\u4088\u4089\u408A"+
+            "\u408B\u408C\u408D\u408E\u408F\u4090\u4091\u4092"+
+            "\u4093\u4094\u4095\u4096\u4097\u4098\u4099\u409A"+
+            "\u409B\u409C\u409D\u409E\u409F\u40A0\u40A1\u40A2"+
+            "\u40A3\u40A4\u40A5\u40A6\u40A7\u40A8\u40A9\u40AA"+
+            "\u40AB\u40AC\u40AD\u40AE\u40AF\u40B0\u40B1\u40B2"+
+            "\u40B3\u40B4\u40B5\u40B6\u40B7\u40B8\u40B9\u40BA"+
+            "\u40BB\u40BC\u40BD\u40BE\u40BF\u40C0\u40C1\u40C2"+
+            "\u40C3\u40C4\u40C5\u40C6\u40C7\u40C8\u40C9\u40CA"+
+            "\u40CB\u40CC\u40CD\u40CE\u40CF\u40D0\u40D1\u40D2"+
+            "\u40D3\u40D4\u40D5\u40D6\u40D7\u40D8\u40D9\u40DA"+
+            "\u40DB\u40DC\u40DD\u40DE\u40DF\u40E0\u40E1\u40E2"+
+            "\u40E3\u40E4\u40E5\u40E6\u40E7\u40E8\u40E9\u40EA"+
+            "\u40EB\u40EC\u40ED\u40EE\u40EF\u40F0\u40F1\u40F2"+
+            "\u40F3\u40F4\u40F5\u40F6\u40F7\u40F8\u40F9\u40FA"+
+            "\u40FB\u40FC\u40FD\u40FE\u40FF\u4100\u4101\u4102"+
+            "\u4103\u4104\u4105\u4106\u4107\u4108\u4109\u410A"+
+            "\u410B\u410C\u410D\u410E\u410F\u4110\u4111\u4112"+
+            "\u4113\u4114\u4115\u4116\u4117\u4118\u4119\u411A"+
+            "\u411B\u411C\u411D\u411E\u411F\u4120\u4121\u4122"+
+            "\u4123\u4124\u4125\u4126\u4127\u4128\u4129\u412A"+
+            "\u412B\u412C\u412D\u412E\u412F\u4130\u4131\u4132"+
+            "\u4133\u4134\u4135\u4136\u4137\u4138\u4139\u413A"+
+            "\u413B\u413C\u413D\u413E\u413F\u4140\u4141\u4142"+
+            "\u4143\u4144\u4145\u4146\u4147\u4148\u4149\u414A"+
+            "\u414B\u414C\u414D\u414E\u414F\u4150\u4151\u4152"+
+            "\u4153\u4154\u4155\u4156\u4157\u4158\u0000\u4159"+
+            "\u415A\u415B\u415C\u415D\u415E\u415F\u4160\u4161"+
+            "\u4162\u4163\u4164\u4165\u4166\u4167\u4168\u4169"+
+            "\u416A\u416B\u416C\u416D\u416E\u416F\u4170\u4171"+
+            "\u4172\u4173\u4174\u4175\u4176\u4177\u4178\u4179"+
+            "\u417A\u417B\u417C\u417D\u417E\u417F\u4180\u4181"+
+            "\u4182\u4183\u4184\u4185\u4186\u4187\u4188\u4189"+
+            "\u418A\u418B\u418C\u418D\u418E\u418F\u4190\u4191"+
+            "\u4192\u4193\u4194\u4195\u4196\u4197\u4198\u4199"+
+            "\u419A\u419B\u419C\u419D\u419E\u419F\u41A0\u41A1"+
+            "\u41A2\u41A3\u41A4\u41A5\u41A6\u41A7\u41A8\u41A9"+
+            "\u41AA\u41AB\u41AC\u41AD\u41AE\u41AF\u41B0\u41B1"+
+            "\u41B2\u41B3\u41B4\u41B5\u41B6\u41B7\u41B8\u41B9"+
+            "\u41BA\u41BB\u41BC\u41BD\u41BE\u41BF\u41C0\u41C1"+
+            "\u41C2\u41C3\u41C4\u41C5\u41C6\u41C7\u41C8\u41C9"+
+            "\u41CA\u41CB\u41CC\u41CD\u41CE\u41CF\u41D0\u41D1"+
+            "\u41D2\u41D3\u41D4\u41D5\u41D6\u41D7\u41D8\u41D9"+
+            "\u41DA\u41DB\u41DC\u41DD\u41DE\u41DF\u41E0\u41E1"+
+            "\u41E2\u41E3\u41E4\u41E5\u41E6\u41E7\u41E8\u41E9"+
+            "\u41EA\u41EB\u41EC\u41ED\u41EE\u41EF\u41F0\u41F1"+
+            "\u41F2\u41F3\u41F4\u41F5\u41F6\u41F7\u41F8\u41F9"+
+            "\u41FA\u41FB\u41FC\u41FD\u41FE\u41FF\u4200\u4201"+
+            "\u4202\u4203\u4204\u4205\u4206\u4207\u4208\u4209"+
+            "\u420A\u420B\u420C\u420D\u420E\u420F\u4210\u4211"+
+            "\u4212\u4213\u4214\u4215\u4216\u4217\u4218\u4219"+
+            "\u421A\u421B\u421C\u421D\u421E\u421F\u4220\u4221"+
+            "\u4222\u4223\u4224\u4225\u4226\u4227\u4228\u4229"+
+            "\u422A\u422B\u422C\u422D\u422E\u422F\u4230\u4231"+
+            "\u4232\u4233\u4234\u4235\u4236\u4237\u4238\u4239"+
+            "\u423A\u423B\u423C\u423D\u423E\u423F\u4240\u4241"+
+            "\u4242\u4243\u4244\u4245\u4246\u4247\u4248\u4249"+
+            "\u424A\u424B\u424C\u424D\u424E\u424F\u4250\u4251"+
+            "\u4252\u4253\u4254\u4255\u4256\u4257\u4258\u4259"+
+            "\u425A\u425B\u425C\u425D\u425E\u425F\u4260\u4261"+
+            "\u4262\u4263\u4264\u4265\u4266\u4267\u4268\u4269"+
+            "\u426A\u426B\u426C\u426D\u426E\u426F\u4270\u4271"+
+            "\u4272\u4273\u4274\u4275\u4276\u4277\u4278\u4279"+
+            "\u427A\u427B\u427C\u427D\u427E\u427F\u4280\u4281"+
+            "\u4282\u4283\u4284\u4285\u4286\u4287\u4288\u4289"+
+            "\u428A\u428B\u428C\u428D\u428E\u428F\u4290\u4291"+
+            "\u4292\u4293\u4294\u4295\u4296\u4297\u4298\u4299"+
+            "\u429A\u429B\u429C\u429D\u429E\u429F\u42A0\u42A1"+
+            "\u42A2\u42A3\u42A4\u42A5\u42A6\u42A7\u42A8\u42A9"+
+            "\u42AA\u42AB\u42AC\u42AD\u42AE\u42AF\u42B0\u42B1"+
+            "\u42B2\u42B3\u42B4\u42B5\u42B6\u42B7\u42B8\u42B9"+
+            "\u42BA\u42BB\u42BC\u42BD\u42BE\u42BF\u42C0\u42C1"+
+            "\u42C2\u42C3\u42C4\u42C5\u42C6\u42C7\u42C8\u42C9"+
+            "\u42CA\u42CB\u42CC\u42CD\u0000\u42CE\u42CF\u42D0"+
+            "\u42D1\u42D2\u42D3\u42D4\u42D5\u42D6\u42D7\u42D8"+
+            "\u42D9\u42DA\u42DB\u42DC\u42DD\u42DE\u42DF\u42E0"+
+            "\u42E1\u0000\u42E2\u42E3\u42E4\u42E5\u42E6\u42E7"+
+            "\u42E8\u42E9\u42EA\u42EB\u42EC\u42ED\u42EE\u42EF"+
+            "\u42F0\u42F1\u42F2\u42F3\u42F4\u42F5\u42F6\u42F7"+
+            "\u42F8\u42F9\u42FA\u42FB\u42FC\u42FD\u42FE\u42FF"+
+            "\u4300\u4301\u4302\u4303\u4304\u4305\u4306\u4307"+
+            "\u4308\u4309\u430A\u430B\u430C\u430D\u430E\u430F"+
+            "\u4310\u4311\u4312\u4313\u4314\u4315\u4316\u4317"+
+            "\u4318\u4319\u431A\u431B\u431C\u431D\u431E\u431F"+
+            "\u4320\u4321\u4322\u4323\u4324\u4325\u4326\u4327"+
+            "\u4328\u4329\u432A\u432B\u432C\u432D\u432E\u432F"+
+            "\u4330\u4331\u4332\u4333\u4334\u4335\u4336\u4337"+
+            "\u4338\u4339\u433A\u433B\u433C\u433D\u433E\u433F"+
+            "\u4340\u4341\u4342\u4343\u4344\u4345\u4346\u4347"+
+            "\u4348\u4349\u434A\u434B\u434C\u434D\u434E\u434F"+
+            "\u4350\u4351\u4352\u4353\u4354\u4355\u4356\u4357"+
+            "\u4358\u4359\u435A\u435B\u435C\u435D\u435E\u435F"+
+            "\u4360\u4361\u4362\u4363\u4364\u4365\u4366\u4367"+
+            "\u4368\u4369\u436A\u436B\u436C\u436D\u436E\u436F"+
+            "\u4370\u4371\u4372\u4373\u4374\u4375\u4376\u4377"+
+            "\u4378\u4379\u437A\u437B\u437C\u437D\u437E\u437F"+
+            "\u4380\u4381\u4382\u4383\u4384\u4385\u4386\u4387"+
+            "\u4388\u4389\u438A\u438B\u438C\u438D\u438E\u438F"+
+            "\u4390\u4391\u4392\u4393\u4394\u4395\u4396\u4397"+
+            "\u4398\u4399\u439A\u439B\u439C\u439D\u439E\u439F"+
+            "\u43A0\u43A1\u43A2\u0000\u43A3\u43A4\u43A5\u43A6"+
+            "\u43A7\u0000\u43A8\u43A9\u43AA\u43AB\u43AC\u43AD"+
+            "\u43AE\u43AF\u43B0\u43B1\u43B2\u43B3\u43B4\u43B5"+
+            "\u43B6\u43B7\u43B8\u43B9\u43BA\u43BB\u43BC\u43BD"+
+            "\u43BE\u43BF\u43C0\u43C1\u43C2\u43C3\u43C4\u43C5"+
+            "\u43C6\u43C7\u43C8\u43C9\u43CA\u43CB\u43CC\u43CD"+
+            "\u43CE\u43CF\u43D0\u43D1\u43D2\u43D3\u43D4\u43D5"+
+            "\u43D6\u43D7\u43D8\u43D9\u43DA\u43DB\u43DC\u43DD"+
+            "\u43DE\u43DF\u43E0\u43E1\u43E2\u43E3\u43E4\u43E5"+
+            "\u43E6\u43E7\u43E8\u43E9\u43EA\u43EB\u43EC\u43ED"+
+            "\u43EE\u43EF\u43F0\u43F1\u43F2\u43F3\u43F4\u43F5"+
+            "\u43F6\u43F7\u43F8\u43F9\u0000\u43FA\u43FB\u43FC"+
+            "\u43FD\u43FE\u43FF\u4400\u4401\u4402\u4403\u4404"+
+            "\u4405\u4406\u4407\u4408\u4409\u0000\u440A\u440B"+
+            "\u440C\u440D\u440E\u440F\u4410\u4411\u4412\u4413"+
+            "\u4414\u4415\u4416\u4417\u4418\u4419\u441A\u441B"+
+            "\u441C\u441D\u441E\u441F\u4420\u4421\u4422\u4423"+
+            "\u4424\u4425\u4426\u4427\u4428\u4429\u442A\u442B"+
+            "\u442C\u442D\u442E\u442F\u4430\u4431\u4432\u4433"+
+            "\u4434\u4435\u4436\u4437\u4438\u4439\u443A\u443B"+
+            "\u443C\u443D\u443E\u443F\u4440\u4441\u4442\u4443"+
+            "\u4444\u4445\u4446\u4447\u4448\u4449\u444A\u444B"+
+            "\u444C\u444D\u444E\u444F\u4450\u4451\u4452\u4453"+
+            "\u4454\u4455\u4456\u4457\u4458\u4459\u445A\u445B"+
+            "\u445C\u445D\u445E\u445F\u4460\u4461\u4462\u4463"+
+            "\u4464\u4465\u4466\u4467\u4468\u4469\u446A\u446B"+
+            "\u446C\u446D\u446E\u446F\u4470\u4471\u4472\u4473"+
+            "\u4474\u4475\u4476\u4477\u4478\u4479\u447A\u447B"+
+            "\u447C\u447D\u447E\u447F\u4480\u4481\u4482\u4483"+
+            "\u4484\u4485\u4486\u4487\u4488\u4489\u448A\u448B"+
+            "\u448C\u448D\u448E\u448F\u4490\u4491\u4492\u4493"+
+            "\u4494\u4495\u4496\u4497\u4498\u4499\u449A\u449B"+
+            "\u449C\u449D\u449E\u449F\u44A0\u44A1\u44A2\u44A3"+
+            "\u44A4\u44A5\u44A6\u44A7\u44A8\u44A9\u44AA\u44AB"+
+            "\u44AC\u44AD\u44AE\u44AF\u44B0\u44B1\u44B2\u44B3"+
+            "\u44B4\u44B5\u44B6\u44B7\u44B8\u44B9\u44BA\u44BB"+
+            "\u44BC\u44BD\u44BE\u44BF\u44C0\u44C1\u44C2\u44C3"+
+            "\u44C4\u44C5\u44C6\u44C7\u44C8\u44C9\u44CA\u44CB"+
+            "\u44CC\u44CD\u44CE\u44CF\u44D0\u44D1\u44D2\u44D3"+
+            "\u44D4\u44D5\u44D6\u44D7\u44D8\u44D9\u44DA\u44DB"+
+            "\u44DC\u44DD\u44DE\u44DF\u44E0\u44E1\u44E2\u44E3"+
+            "\u44E4\u44E5\u44E6\u44E7\u44E8\u44E9\u44EA\u44EB"+
+            "\u44EC\u44ED\u44EE\u44EF\u44F0\u44F1\u44F2\u44F3"+
+            "\u44F4\u44F5\u44F6\u44F7\u44F8\u44F9\u44FA\u44FB"+
+            "\u44FC\u44FD\u44FE\u44FF\u4500\u4501\u4502\u4503"+
+            "\u4504\u4505\u4506\u4507\u4508\u4509\u450A\u450B"+
+            "\u450C\u450D\u450E\u450F\u4510\u4511\u4512\u4513"+
+            "\u4514\u4515\u4516\u4517\u4518\u4519\u451A\u451B"+
+            "\u451C\u451D\u451E\u451F\u4520\u4521\u4522\u4523"+
+            "\u4524\u4525\u4526\u4527\u4528\u4529\u452A\u452B"+
+            "\u452C\u452D\u452E\u452F\u4530\u4531\u4532\u4533"+
+            "\u4534\u4535\u4536\u4537\u4538\u4539\u453A\u453B"+
+            "\u453C\u453D\u453E\u453F\u4540\u4541\u4542\u4543"+
+            "\u4544\u4545\u4546\u4547\u4548\u4549\u454A\u454B"+
+            "\u454C\u454D\u454E\u454F\u4550\u4551\u4552\u4553"+
+            "\u4554\u4555\u4556\u4557\u4558\u4559\u455A\u455B"+
+            "\u455C\u455D\u455E\u455F\u4560\u4561\u4562\u4563"+
+            "\u4564\u4565\u4566\u4567\u4568\u4569\u456A\u456B"+
+            "\u456C\u456D\u456E\u456F\u4570\u4571\u4572\u4573"+
+            "\u4574\u4575\u4576\u4577\u4578\u4579\u457A\u457B"+
+            "\u457C\u457D\u457E\u457F\u4580\u4581\u4582\u4583"+
+            "\u4584\u4585\u4586\u4587\u4588\u4589\u458A\u458B"+
+            "\u458C\u458D\u458E\u458F\u4590\u4591\u4592\u4593"+
+            "\u4594\u4595\u4596\u4597\u4598\u4599\u459A\u459B"+
+            "\u459C\u459D\u459E\u459F\u45A0\u45A1\u45A2\u45A3"+
+            "\u45A4\u45A5\u45A6\u45A7\u45A8\u45A9\u45AA\u45AB"+
+            "\u45AC\u45AD\u45AE\u45AF\u45B0\u45B1\u45B2\u45B3"+
+            "\u45B4\u45B5\u45B6\u45B7\u45B8\u45B9\u45BA\u45BB"+
+            "\u45BC\u45BD\u45BE\u45BF\u45C0\u45C1\u45C2\u0000"+
+            "\u45C3\u45C4\u45C5\u45C6\u45C7\u45C8\u45C9\u45CA"+
+            "\u45CB\u45CC\u45CD\u45CE\u45CF\u45D0\u45D1\u45D2"+
+            "\u45D3\u45D4\u45D5\u45D6\u45D7\u45D8\u45D9\u45DA"+
+            "\u45DB\u45DC\u45DD\u45DE\u45DF\u45E0\u45E1\u45E2"+
+            "\u45E3\u45E4\u45E5\u45E6\u45E7\u45E8\u45E9\u45EA"+
+            "\u45EB\u45EC\u45ED\u45EE\u45EF\u45F0\u45F1\u45F2"+
+            "\u45F3\u45F4\u0000\u45F5\u45F6\u0000\u45F7\u45F8"+
+            "\u45F9\u45FA\u0000\u0000\u45FB\u0000\u0000\u45FC"+
+            "\u45FD\u45FE\u45FF\u4600\u4601\u4602\u4603\u4604"+
+            "\u4605\u4606\u4607\u4608\u4609\u460A\u460B\u460C"+
+            "\u460D\u460E\u460F\u0000\u4610\u4611\u4612\u0000"+
+            "\u4613\u4614\u4615\u4616\u4617\u4618\u4619\u461A"+
+            "\u461B\u461C\u461D\u461E\u461F\u4620\u4621\u4622"+
+            "\u4623\u4624\u4625\u4626\u4627\u4628\u0000\u0000"+
+            "\u4629\u462A\u462B\u462C\u462D\u462E\u462F\u4630"+
+            "\u4631\u4632\u4633\u4634\u4635\u4636\u4637\u4638"+
+            "\u4639\u463A\u463B\u463C\u463D\u463E\u463F\u4640"+
+            "\u4641\u4642\u4643\u4644\u4645\u4646\u4647\u4648"+
+            "\u4649\u464A\u464B\u464C\u464D\u464E\u464F\u4650"+
+            "\u4651\u4652\u4653\u4654\u4655\u4656\u4657\u4658"+
+            "\u4659\u465A\u465B\u465C\u465D\u465E\u465F\u4660"+
+            "\u4661\u4662\u4663\u4664\u4665\u4666\u4667\u4668"+
+            "\u4669\u466A\u466B\u466C\u466D\u466E\u466F\u4670"+
+            "\u4671\u4672\u4673\u4674\u4675\u4676\u4677\u4678"+
+            "\u4679\u467A\u467B\u467C\u467D\u467E\u467F\u4680"+
+            "\u4681\u4682\u4683\u4684\u4685\u4686\u4687\u4688"+
+            "\u4689\u468A\u468B\u468C\u468D\u468E\u468F\u4690"+
+            "\u4691\u4692\u4693\u4694\u4695\u4696\u4697\u4698"+
+            "\u4699\u469A\u469B\u469C\u469D\u469E\u469F\u46A0"+
+            "\u46A1\u46A2\u46A3\u46A4\u46A5\u46A6\u46A7\u46A8"+
+            "\u46A9\u46AA\u46AB\u46AC\u46AD\u46AE\u46AF\u46B0"+
+            "\u46B1\u46B2\u46B3\u46B4\u46B5\u46B6\u46B7\u46B8"+
+            "\u46B9\u46BA\u46BB\u46BC\u46BD\u46BE\u46BF\u46C0"+
+            "\u46C1\u46C2\u46C3\u46C4\u46C5\u46C6\u46C7\u46C8"+
+            "\u46C9\u46CA\u46CB\u46CC\u46CD\u46CE\u46CF\u46D0"+
+            "\u46D1\u46D2\u46D3\u46D4\u46D5\u46D6\u46D7\u46D8"+
+            "\u46D9\u46DA\u46DB\u46DC\u46DD\u46DE\u46DF\u46E0"+
+            "\u46E1\u46E2\u46E3\u46E4\u46E5\u46E6\u46E7\u46E8"+
+            "\u46E9\u46EA\u46EB\u46EC\u46ED\u46EE\u46EF\u46F0"+
+            "\u46F1\u46F2\u46F3\u46F4\u46F5\u46F6\u46F7\u46F8"+
+            "\u46F9\u46FA\u46FB\u46FC\u46FD\u46FE\u46FF\u4700"+
+            "\u4701\u4702\u4703\u4704\u4705\u4706\u4707\u4708"+
+            "\u4709\u470A\u470B\u470C\u470D\u470E\u470F\u4710"+
+            "\u4711\u4712\u4713\u4714\u4715\u4716\u4717\u4718"+
+            "\u4719\u471A\u471B\u471C\u471D\u471E\u471F\u4720"+
+            "\u4721\u4722\u4723\u4724\u4725\u4726\u4727\u4728"+
+            "\u4729\u472A\u472B\u472C\u472D\u472E\u472F\u4730"+
+            "\u4731\u4732\u4733\u4734\u4735\u4736\u4737\u4738"+
+            "\u4739\u473A\u473B\u473C\u473D\u473E\u473F\u4740"+
+            "\u4741\u4742\u4743\u4744\u4745\u4746\u4747\u4748"+
+            "\u4749\u474A\u474B\u474C\u474D\u474E\u474F\u4750"+
+            "\u4751\u4752\u4753\u4754\u4755\u4756\u4757\u4758"+
+            "\u4759\u475A\u475B\u475C\u475D\u475E\u475F\u4760"+
+            "\u4761\u4762\u4763\u4764\u4765\u4766\u4767\u4768"+
+            "\u4769\u476A\u476B\u476C\u476D\u476E\u476F\u4770"+
+            "\u4771\u4772\u4773\u4774\u4775\u4776\u4777\u4778"+
+            "\u4779\u477A\u477B\u477C\u477D\u477E\u477F\u4780"+
+            "\u4781\u4782\u4783\u4784\u4785\u4786\u4787\u4788"+
+            "\u4789\u478A\u478B\u478C\u478D\u478E\u478F\u4790"+
+            "\u4791\u4792\u4793\u4794\u4795\u4796\u4797\u4798"+
+            "\u4799\u479A\u479B\u479C\u479D\u479E\u479F\u47A0"+
+            "\u47A1\u47A2\u47A3\u47A4\u47A5\u47A6\u47A7\u47A8"+
+            "\u47A9\u47AA\u47AB\u47AC\u47AD\u47AE\u47AF\u47B0"+
+            "\u47B1\u47B2\u47B3\u47B4\u47B5\u47B6\u47B7\u47B8"+
+            "\u47B9\u47BA\u47BB\u47BC\u47BD\u47BE\u47BF\u47C0"+
+            "\u47C1\u47C2\u47C3\u47C4\u47C5\u47C6\u47C7\u47C8"+
+            "\u47C9\u47CA\u47CB\u47CC\u47CD\u47CE\u47CF\u47D0"+
+            "\u47D1\u47D2\u47D3\u47D4\u47D5\u47D6\u47D7\u47D8"+
+            "\u47D9\u47DA\u47DB\u47DC\u47DD\u47DE\u47DF\u47E0"+
+            "\u47E1\u47E2\u47E3\u47E4\u47E5\u47E6\u47E7\u47E8"+
+            "\u47E9\u47EA\u47EB\u47EC\u47ED\u47EE\u47EF\u47F0"+
+            "\u47F1\u47F2\u47F3\u47F4\u47F5\u47F6\u47F7\u47F8"+
+            "\u47F9\u47FA\u47FB\u47FC\u47FD\u47FE\u47FF\u4800"+
+            "\u4801\u4802\u4803\u4804\u4805\u4806\u4807\u4808"+
+            "\u4809\u480A\u480B\u480C\u480D\u480E\u480F\u4810"+
+            "\u4811\u4812\u4813\u4814\u4815\u4816\u4817\u4818"+
+            "\u4819\u481A\u481B\u481C\u481D\u481E\u481F\u4820"+
+            "\u4821\u4822\u4823\u4824\u4825\u4826\u4827\u4828"+
+            "\u4829\u482A\u482B\u482C\u482D\u482E\u482F\u4830"+
+            "\u4831\u4832\u4833\u4834\u4835\u4836\u4837\u4838"+
+            "\u4839\u483A\u483B\u483C\u483D\u483E\u483F\u4840"+
+            "\u4841\u4842\u4843\u4844\u4845\u4846\u4847\u4848"+
+            "\u4849\u484A\u484B\u484C\u484D\u484E\u484F\u4850"+
+            "\u4851\u4852\u4853\u4854\u4855\u4856\u4857\u4858"+
+            "\u4859\u485A\u485B\u485C\u485D\u485E\u485F\u4860"+
+            "\u4861\u4862\u4863\u4864\u4865\u4866\u4867\u4868"+
+            "\u4869\u486A\u486B\u486C\u486D\u486E\u486F\u4870"+
+            "\u4871\u4872\u4873\u4874\u4875\u4876\u4877\u4878"+
+            "\u4879\u487A\u487B\u487C\u487D\u487E\u487F\u4880"+
+            "\u4881\u4882\u4883\u4884\u4885\u4886\u4887\u4888"+
+            "\u4889\u488A\u488B\u488C\u488D\u488E\u488F\u4890"+
+            "\u4891\u4892\u4893\u4894\u4895\u4896\u4897\u4898"+
+            "\u4899\u489A\u489B\u489C\u489D\u489E\u489F\u48A0"+
+            "\u48A1\u48A2\u48A3\u48A4\u48A5\u48A6\u48A7\u48A8"+
+            "\u48A9\u48AA\u48AB\u48AC\u48AD\u48AE\u48AF\u48B0"+
+            "\u48B1\u48B2\u48B3\u48B4\u48B5\u48B6\u48B7\u48B8"+
+            "\u48B9\u48BA\u48BB\u48BC\u48BD\u48BE\u48BF\u48C0"+
+            "\u48C1\u48C2\u48C3\u48C4\u48C5\u48C6\u48C7\u48C8"+
+            "\u48C9\u48CA\u48CB\u48CC\u48CD\u48CE\u48CF\u48D0"+
+            "\u48D1\u48D2\u48D3\u48D4\u48D5\u48D6\u48D7\u48D8"+
+            "\u48D9\u48DA\u48DB\u48DC\u48DD\u48DE\u48DF\u48E0"+
+            "\u48E1\u48E2\u48E3\u48E4\u48E5\u48E6\u48E7\u0000"+
+            "\u48E8\u48E9\u48EA\u48EB\u48EC\u48ED\u48EE\u48EF"+
+            "\u48F0\u48F1\u48F2\u48F3\u48F4\u48F5\u48F6\u48F7"+
+            "\u48F8\u48F9\u48FA\u48FB\u48FC\u48FD\u48FE\u48FF"+
+            "\u4900\u4901\u4902\u4903\u4904\u4905\u4906\u4907"+
+            "\u4908\u4909\u490A\u490B\u490C\u490D\u490E\u0000"+
+            "\u0000\u0000\u0000\u0000\u490F\u4910\u4911\u4912"+
+            "\u4913\u4914\u4915\u4916\u4917\u4918\u4919\u491A"+
+            "\u491B\u491C\u491D\u491E\u491F\u4920\u4921\u4922"+
+            "\u4923\u4924\u4925\u4926\u4927\u4928\u4929\u492A"+
+            "\u492B\u492C\u492D\u492E\u492F\u4930\u4931\u4932"+
+            "\u4933\u4934\u4935\u4936\u4937\u4938\u4939\u493A"+
+            "\u493B\u493C\u493D\u493E\u493F\u4940\u4941\u4942"+
+            "\u4943\u4944\u4945\u4946\u4947\u4948\u4949\u494A"+
+            "\u494B\u494C\u494D\u494E\u494F\u4950\u4951\u4952"+
+            "\u4953\u4954\u4955\u4956\u4957\u4958\u4959\u495A"+
+            "\u495B\u495C\u495D\u495E\u495F\u4960\u4961\u4962"+
+            "\u4963\u4964\u4965\u4966\u4967\u4968\u4969\u496A"+
+            "\u496B\u496C\u496D\u496E\u496F\u4970\u4971\u4972"+
+            "\u4973\u4974\u4975\u4976\u4977\u4978\u4979\u497A"+
+            "\u497B\u497C\u497D\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u497E\u497F\u4980\u4981\u4982\u4983"+
+            "\u4984\u4985\u4986\u4987\u4988\u4989\u498A\u498B"+
+            "\u498C\u498D\u498E\u498F\u4990\u4991\u4992\u4993"+
+            "\u4994\u4995\u4996\u4997\u4998\u4999\u499A\u499B"+
+            "\u499C\u499D\u499E\u499F\u49A0\u49A1\u49A2\u49A3"+
+            "\u49A4\u49A5\u49A6\u49A7\u49A8\u49A9\u49AA\u49AB"+
+            "\u49AC\u49AD\u49AE\u49AF\u49B0\u49B1\u49B2\u49B3"+
+            "\u49B4\u49B5\u49B6\u49B7\u49B8\u49B9\u49BA\u49BB"+
+            "\u49BC\u49BD\u49BE\u49BF\u49C0\u49C1\u49C2\u49C3"+
+            "\u49C4\u49C5\u49C6\u49C7\u49C8\u49C9\u49CA\u49CB"+
+            "\u49CC\u49CD\u49CE\u49CF\u49D0\u49D1\u49D2\u49D3"+
+            "\u49D4\u49D5\u49D6\u49D7\u49D8\u49D9\u49DA\u49DB"+
+            "\u49DC\u49DD\u49DE\u49DF\u49E0\u49E1\u49E2\u49E3"+
+            "\u49E4\u49E5\u49E6\u49E7\u49E8\u49E9\u49EA\u49EB"+
+            "\u49EC\u49ED\u49EE\u49EF\u49F0\u49F1\u49F2\u49F3"+
+            "\u49F4\u49F5\u49F6\u49F7\u49F8\u49F9\u49FA\u49FB"+
+            "\u49FC\u49FD\u49FE\u49FF\u4A00\u4A01\u4A02\u4A03"+
+            "\u4A04\u4A05\u4A06\u4A07\u4A08\u4A09\u4A0A\u4A0B"+
+            "\u4A0C\u4A0D\u4A0E\u4A0F\u4A10\u4A11\u0000\u4A12"+
+            "\u4A13\u4A14\u4A15\u4A16\u4A17\u4A18\u4A19\u4A1A"+
+            "\u4A1B\u4A1C\u4A1D\u4A1E\u4A1F\u4A20\u4A21\u4A22"+
+            "\u4A23\u4A24\u4A25\u4A26\u4A27\u4A28\u4A29\u4A2A"+
+            "\u4A2B\u4A2C\u4A2D\u4A2E\u4A2F\u4A30\u4A31\u4A32"+
+            "\u4A33\u4A34\u4A35\u4A36\u4A37\u4A38\u4A39\u4A3A"+
+            "\u4A3B\u4A3C\u4A3D\u4A3E\u4A3F\u4A40\u4A41\u4A42"+
+            "\u4A43\u4A44\u4A45\u4A46\u4A47\u4A48\u4A49\u4A4A"+
+            "\u4A4B\u4A4C\u4A4D\u4A4E\u4A4F\u4A50\u4A51\u4A52"+
+            "\u4A53\u4A54\u4A55\u4A56\u4A57\u4A58\u4A59\u4A5A"+
+            "\u4A5B\u4A5C\u4A5D\u4A5E\u4A5F\u4A60\u4A61\u4A62"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u4A63\u4A64"+
+            "\u4A65\u4A66\u4A67\u4A68\u4A69\u4A6A\u4A6B\u4A6C"+
+            "\u4A6D\u4A6E\u4A6F\u4A70\u4A71\u4A72\u4A73\u4A74"+
+            "\u4A75\u4A76\u4A77\u4A78\u4A79\u4A7A\u4A7B\u4A7C"+
+            "\u4A7D\u4A7E\u4A7F\u4A80\u4A81\u4A82\u4A83\u4A84"+
+            "\u4A85\u4A86\u4A87\u4A88\u4A89\u4A8A\u4A8B\u4A8C"+
+            "\u4A8D\u4A8E\u4A8F\u4A90\u4A91\u4A92\u4A93\u4A94"+
+            "\u4A95\u4A96\u4A97\u4A98\u4A99\u4A9A\u4A9B\u4A9C"+
+            "\u4A9D\u4A9E\u4A9F\u4AA0\u4AA1\u4AA2\u4AA3\u4AA4"+
+            "\u4AA5\u4AA6\u4AA7\u4AA8\u4AA9\u4AAA\u4AAB\u4AAC"+
+            "\u4AAD\u4AAE\u4AAF\u4AB0\u4AB1\u4AB2\u4AB3\u4AB4"+
+            "\u4AB5\u4AB6\u4AB7\u4AB8\u4AB9\u4ABA\u4ABB\u4ABC";
+
+        private final static String innerIndex5=
+            "\u4ABD\u4ABE\u4ABF\u4AC0\u4AC1\u4AC2\u4AC3\u4AC4"+
+            "\u4AC5\u4AC6\u4AC7\u4AC8\u4AC9\u4ACA\u4ACB\u4ACC"+
+            "\u4ACD\u4ACE\u4ACF\u4AD0\u4AD1\u4AD2\u4AD3\u4AD4"+
+            "\u4AD5\u4AD6\u4AD7\u4AD8\u4AD9\u4ADA\u4ADB\u4ADC"+
+            "\u4ADD\u4ADE\u4ADF\u4AE0\u4AE1\u4AE2\u4AE3\u4AE4"+
+            "\u4AE5\u4AE6\u4AE7\u4AE8\u4AE9\u4AEA\u4AEB\u4AEC"+
+            "\u4AED\u4AEE\u4AEF\u4AF0\u4AF1\u4AF2\u4AF3\u4AF4"+
+            "\u4AF5\u4AF6\u4AF7\u4AF8\u4AF9\u4AFA\u4AFB\u4AFC"+
+            "\u4AFD\u4AFE\u4AFF\u4B00\u4B01\u4B02\u4B03\u4B04"+
+            "\u4B05\u4B06\u4B07\u4B08\u4B09\u4B0A\u4B0B\u4B0C"+
+            "\u4B0D\u4B0E\u4B0F\u4B10\u4B11\u4B12\u4B13\u4B14"+
+            "\u4B15\u4B16\u4B17\u4B18\u4B19\u4B1A\u4B1B\u4B1C"+
+            "\u4B1D\u4B1E\u4B1F\u4B20\u4B21\u4B22\u4B23\u4B24"+
+            "\u4B25\u4B26\u4B27\u4B28\u4B29\u4B2A\u4B2B\u4B2C"+
+            "\u4B2D\u4B2E\u4B2F\u4B30\u4B31\u4B32\u4B33\u4B34"+
+            "\u4B35\u4B36\u4B37\u4B38\u4B39\u4B3A\u4B3B\u4B3C"+
+            "\u4B3D\u4B3E\u4B3F\u4B40\u4B41\u4B42\u4B43\u4B44"+
+            "\u4B45\u4B46\u4B47\u4B48\u4B49\u4B4A\u4B4B\u4B4C"+
+            "\u4B4D\u4B4E\u4B4F\u4B50\u4B51\u4B52\u4B53\u4B54"+
+            "\u4B55\u4B56\u4B57\u4B58\u4B59\u4B5A\u4B5B\u4B5C"+
+            "\u4B5D\u4B5E\u4B5F\u4B60\u4B61\u4B62\u4B63\u4B64"+
+            "\u4B65\u4B66\u4B67\u4B68\u4B69\u4B6A\u4B6B\u4B6C"+
+            "\u4B6D\u4B6E\u4B6F\u4B70\u4B71\u4B72\u4B73\u4B74"+
+            "\u4B75\u4B76\u4B77\u4B78\u4B79\u4B7A\u4B7B\u4B7C"+
+            "\u4B7D\u4B7E\u4B7F\u4B80\u4B81\u4B82\u4B83\u4B84"+
+            "\u4B85\u4B86\u4B87\u4B88\u4B89\u4B8A\u4B8B\u4B8C"+
+            "\u4B8D\u4B8E\u4B8F\u4B90\u4B91\u4B92\u4B93\u4B94"+
+            "\u4B95\u4B96\u4B97\u4B98\u4B99\u4B9A\u4B9B\u4B9C"+
+            "\u4B9D\u4B9E\u4B9F\u4BA0\u4BA1\u4BA2\u4BA3\u4BA4"+
+            "\u4BA5\u4BA6\u4BA7\u4BA8\u4BA9\u4BAA\u4BAB\u4BAC"+
+            "\u4BAD\u4BAE\u4BAF\u4BB0\u4BB1\u4BB2\u4BB3\u4BB4"+
+            "\u4BB5\u4BB6\u4BB7\u4BB8\u4BB9\u4BBA\u4BBB\u4BBC"+
+            "\u4BBD\u4BBE\u4BBF\u4BC0\u4BC1\u4BC2\u4BC3\u4BC4"+
+            "\u4BC5\u4BC6\u4BC7\u4BC8\u4BC9\u4BCA\u4BCB\u4BCC"+
+            "\u4BCD\u4BCE\u4BCF\u4BD0\u4BD1\u4BD2\u4BD3\u4BD4"+
+            "\u4BD5\u4BD6\u4BD7\u4BD8\u4BD9\u4BDA\u4BDB\u4BDC"+
+            "\u4BDD\u4BDE\u4BDF\u4BE0\u4BE1\u4BE2\u4BE3\u4BE4"+
+            "\u4BE5\u4BE6\u4BE7\u4BE8\u4BE9\u4BEA\u4BEB\u4BEC"+
+            "\u4BED\u4BEE\u4BEF\u4BF0\u4BF1\u4BF2\u4BF3\u4BF4"+
+            "\u4BF5\u4BF6\u4BF7\u4BF8\u4BF9\u4BFA\u4BFB\u4BFC"+
+            "\u4BFD\u4BFE\u4BFF\u4C00\u4C01\u4C02\u4C03\u4C04"+
+            "\u4C05\u4C06\u4C07\u4C08\u4C09\u4C0A\u4C0B\u4C0C"+
+            "\u4C0D\u4C0E\u4C0F\u4C10\u4C11\u4C12\u4C13\u4C14"+
+            "\u4C15\u4C16\u4C17\u4C18\u4C19\u4C1A\u4C1B\u4C1C"+
+            "\u4C1D\u4C1E\u4C1F\u4C20\u4C21\u4C22\u4C23\u4C24"+
+            "\u4C25\u4C26\u4C27\u4C28\u4C29\u4C2A\u4C2B\u4C2C"+
+            "\u4C2D\u4C2E\u4C2F\u4C30\u4C31\u4C32\u4C33\u4C34"+
+            "\u4C35\u4C36\u4C37\u4C38\u4C39\u4C3A\u4C3B\u4C3C"+
+            "\u4C3D\u4C3E\u4C3F\u4C40\u4C41\u4C42\u4C43\u4C44"+
+            "\u4C45\u4C46\u4C47\u4C48\u4C49\u4C4A\u4C4B\u4C4C"+
+            "\u4C4D\u4C4E\u4C4F\u4C50\u4C51\u4C52\u4C53\u4C54"+
+            "\u4C55\u4C56\u4C57\u4C58\u4C59\u4C5A\u4C5B\u4C5C"+
+            "\u4C5D\u4C5E\u4C5F\u4C60\u4C61\u4C62\u4C63\u4C64"+
+            "\u4C65\u4C66\u4C67\u4C68\u4C69\u4C6A\u4C6B\u4C6C"+
+            "\u4C6D\u4C6E\u4C6F\u4C70\u4C71\u4C72\u4C73\u4C74"+
+            "\u4C75\u4C76\u4C77\u4C78\u4C79\u4C7A\u4C7B\u4C7C"+
+            "\u4C7D\u4C7E\u4C7F\u4C80\u4C81\u4C82\u4C83\u4C84"+
+            "\u4C85\u4C86\u4C87\u4C88\u4C89\u4C8A\u4C8B\u4C8C"+
+            "\u4C8D\u4C8E\u4C8F\u4C90\u4C91\u4C92\u4C93\u4C94"+
+            "\u4C95\u4C96\u4C97\u4C98\u4C99\u4C9A\u4C9B\u4C9C"+
+            "\u4C9D\u4C9E\u4C9F\u4CA0\u4CA1\u4CA2\u4CA3\u4CA4"+
+            "\u4CA5\u4CA6\u4CA7\u4CA8\u4CA9\u4CAA\u4CAB\u4CAC"+
+            "\u4CAD\u4CAE\u4CAF\u4CB0\u4CB1\u4CB2\u4CB3\u4CB4"+
+            "\u4CB5\u4CB6\u4CB7\u4CB8\u4CB9\u4CBA\u4CBB\u4CBC"+
+            "\u4CBD\u4CBE\u4CBF\u4CC0\u4CC1\u4CC2\u4CC3\u4CC4"+
+            "\u4CC5\u4CC6\u4CC7\u4CC8\u4CC9\u4CCA\u4CCB\u4CCC"+
+            "\u4CCD\u4CCE\u4CCF\u4CD0\u4CD1\u4CD2\u4CD3\u4CD4"+
+            "\u4CD5\u4CD6\u4CD7\u4CD8\u4CD9\u4CDA\u4CDB\u4CDC"+
+            "\u4CDD\u4CDE\u4CDF\u4CE0\u4CE1\u4CE2\u4CE3\u4CE4"+
+            "\u4CE5\u4CE6\u4CE7\u4CE8\u4CE9\u4CEA\u4CEB\u4CEC"+
+            "\u4CED\u4CEE\u4CEF\u4CF0\u4CF1\u4CF2\u4CF3\u4CF4"+
+            "\u4CF5\u4CF6\u4CF7\u4CF8\u4CF9\u4CFA\u4CFB\u4CFC"+
+            "\u4CFD\u4CFE\u4CFF\u4D00\u4D01\u4D02\u4D03\u4D04"+
+            "\u4D05\u4D06\u4D07\u4D08\u4D09\u4D0A\u4D0B\u4D0C"+
+            "\u4D0D\u4D0E\u4D0F\u4D10\u4D11\u4D12\u4D13\u4D14"+
+            "\u4D15\u4D16\u4D17\u4D18\u4D19\u4D1A\u4D1B\u4D1C"+
+            "\u4D1D\u4D1E\u4D1F\u4D20\u4D21\u4D22\u4D23\u4D24"+
+            "\u4D25\u4D26\u4D27\u4D28\u4D29\u4D2A\u4D2B\u4D2C"+
+            "\u4D2D\u4D2E\u4D2F\u4D30\u4D31\u4D32\u4D33\u4D34"+
+            "\u4D35\u4D36\u4D37\u4D38\u4D39\u4D3A\u4D3B\u4D3C"+
+            "\u4D3D\u4D3E\u4D3F\u4D40\u4D41\u4D42\u4D43\u4D44"+
+            "\u4D45\u4D46\u4D47\u4D48\u4D49\u4D4A\u4D4B\u4D4C"+
+            "\u4D4D\u4D4E\u4D4F\u4D50\u4D51\u4D52\u4D53\u4D54"+
+            "\u4D55\u4D56\u4D57\u4D58\u4D59\u4D5A\u4D5B\u4D5C"+
+            "\u4D5D\u4D5E\u4D5F\u4D60\u4D61\u4D62\u4D63\u4D64"+
+            "\u4D65\u4D66\u4D67\u4D68\u4D69\u4D6A\u4D6B\u4D6C"+
+            "\u4D6D\u4D6E\u4D6F\u4D70\u4D71\u4D72\u4D73\u4D74"+
+            "\u4D75\u4D76\u4D77\u4D78\u4D79\u4D7A\u4D7B\u4D7C"+
+            "\u4D7D\u4D7E\u4D7F\u4D80\u4D81\u4D82\u4D83\u4D84"+
+            "\u4D85\u4D86\u4D87\u4D88\u4D89\u4D8A\u4D8B\u4D8C"+
+            "\u4D8D\u4D8E\u4D8F\u4D90\u4D91\u4D92\u4D93\u4D94"+
+            "\u4D95\u4D96\u4D97\u4D98\u4D99\u4D9A\u4D9B\u4D9C"+
+            "\u4D9D\u4D9E\u4D9F\u4DA0\u4DA1\u4DA2\u4DA3\u4DA4"+
+            "\u4DA5\u4DA6\u4DA7\u4DA8\u4DA9\u4DAA\u4DAB\u4DAC"+
+            "\u4DAD\u4DAE\u4DAF\u4DB0\u4DB1\u4DB2\u4DB3\u4DB4"+
+            "\u4DB5\u4DB6\u4DB7\u4DB8\u4DB9\u4DBA\u4DBB\u4DBC"+
+            "\u4DBD\u4DBE\u4DBF\u4DC0\u4DC1\u4DC2\u4DC3\u4DC4"+
+            "\u4DC5\u4DC6\u4DC7\u4DC8\u4DC9\u4DCA\u4DCB\u4DCC"+
+            "\u4DCD\u4DCE\u4DCF\u4DD0\u4DD1\u4DD2\u4DD3\u4DD4"+
+            "\u4DD5\u4DD6\u4DD7\u4DD8\u4DD9\u4DDA\u4DDB\u4DDC"+
+            "\u4DDD\u4DDE\u4DDF\u4DE0\u4DE1\u4DE2\u4DE3\u4DE4"+
+            "\u4DE5\u4DE6\u4DE7\u4DE8\u4DE9\u4DEA\u4DEB\u4DEC"+
+            "\u4DED\u4DEE\u4DEF\u4DF0\u4DF1\u4DF2\u4DF3\u4DF4"+
+            "\u4DF5\u4DF6\u4DF7\u4DF8\u4DF9\u4DFA\u4DFB\u4DFC"+
+            "\u4DFD\u4DFE\u4DFF\u4E00\u4E01\u4E02\u4E03\u4E04"+
+            "\u4E05\u4E06\u4E07\u4E08\u4E09\u4E0A\u4E0B\u4E0C"+
+            "\u4E0D\u4E0E\u4E0F\u4E10\u4E11\u4E12\u4E13\u4E14"+
+            "\u4E15\u4E16\u4E17\u4E18\u4E19\u4E1A\u4E1B\u4E1C"+
+            "\u4E1D\u4E1E\u4E1F\u4E20\u4E21\u4E22\u4E23\u4E24"+
+            "\u4E25\u4E26\u4E27\u4E28\u4E29\u4E2A\u4E2B\u4E2C"+
+            "\u4E2D\u4E2E\u4E2F\u4E30\u4E31\u4E32\u4E33\u4E34"+
+            "\u4E35\u4E36\u4E37\u4E38\u4E39\u4E3A\u4E3B\u4E3C"+
+            "\u4E3D\u4E3E\u4E3F\u4E40\u4E41\u4E42\u4E43\u4E44"+
+            "\u4E45\u4E46\u4E47\u4E48\u4E49\u4E4A\u4E4B\u4E4C"+
+            "\u4E4D\u4E4E\u4E4F\u4E50\u4E51\u4E52\u4E53\u4E54"+
+            "\u4E55\u4E56\u4E57\u4E58\u4E59\u4E5A\u4E5B\u4E5C"+
+            "\u4E5D\u4E5E\u4E5F\u4E60\u4E61\u4E62\u4E63\u4E64"+
+            "\u4E65\u4E66\u4E67\u4E68\u4E69\u4E6A\u4E6B\u4E6C"+
+            "\u4E6D\u4E6E\u4E6F\u4E70\u4E71\u4E72\u4E73\u4E74"+
+            "\u4E75\u4E76\u4E77\u4E78\u4E79\u4E7A\u4E7B\u4E7C"+
+            "\u4E7D\u4E7E\u4E7F\u4E80\u4E81\u4E82\u4E83\u4E84"+
+            "\u4E85\u4E86\u4E87\u4E88\u4E89\u4E8A\u4E8B\u4E8C"+
+            "\u4E8D\u4E8E\u4E8F\u4E90\u4E91\u4E92\u4E93\u4E94"+
+            "\u4E95\u4E96\u4E97\u4E98\u4E99\u4E9A\u4E9B\u4E9C"+
+            "\u4E9D\u4E9E\u4E9F\u4EA0\u4EA1\u4EA2\u4EA3\u4EA4"+
+            "\u4EA5\u4EA6\u4EA7\u4EA8\u4EA9\u4EAA\u4EAB\u4EAC"+
+            "\u4EAD\u4EAE\u4EAF\u4EB0\u4EB1\u4EB2\u4EB3\u4EB4"+
+            "\u4EB5\u4EB6\u4EB7\u4EB8\u4EB9\u4EBA\u4EBB\u4EBC"+
+            "\u4EBD\u4EBE\u4EBF\u4EC0\u4EC1\u4EC2\u4EC3\u4EC4"+
+            "\u4EC5\u4EC6\u4EC7\u4EC8\u4EC9\u4ECA\u4ECB\u4ECC"+
+            "\u4ECD\u4ECE\u4ECF\u4ED0\u4ED1\u4ED2\u4ED3\u4ED4"+
+            "\u4ED5\u4ED6\u4ED7\u4ED8\u4ED9\u4EDA\u4EDB\u4EDC"+
+            "\u4EDD\u4EDE\u4EDF\u4EE0\u4EE1\u4EE2\u4EE3\u4EE4"+
+            "\u4EE5\u4EE6\u4EE7\u4EE8\u4EE9\u4EEA\u4EEB\u4EEC"+
+            "\u4EED\u4EEE\u4EEF\u4EF0\u4EF1\u4EF2\u4EF3\u4EF4"+
+            "\u4EF5\u4EF6\u4EF7\u4EF8\u4EF9\u4EFA\u4EFB\u4EFC"+
+            "\u4EFD\u4EFE\u4EFF\u4F00\u4F01\u4F02\u4F03\u4F04"+
+            "\u4F05\u4F06\u4F07\u4F08\u4F09\u4F0A\u4F0B\u4F0C"+
+            "\u4F0D\u4F0E\u4F0F\u4F10\u4F11\u4F12\u4F13\u4F14"+
+            "\u4F15\u4F16\u4F17\u4F18\u4F19\u4F1A\u4F1B\u4F1C"+
+            "\u4F1D\u4F1E\u4F1F\u4F20\u4F21\u4F22\u4F23\u4F24"+
+            "\u4F25\u4F26\u4F27\u4F28\u4F29\u4F2A\u4F2B\u4F2C"+
+            "\u4F2D\u4F2E\u4F2F\u4F30\u4F31\u4F32\u4F33\u4F34"+
+            "\u4F35\u4F36\u4F37\u4F38\u4F39\u4F3A\u4F3B\u4F3C"+
+            "\u4F3D\u4F3E\u4F3F\u4F40\u4F41\u4F42\u4F43\u4F44"+
+            "\u4F45\u4F46\u4F47\u4F48\u4F49\u4F4A\u4F4B\u4F4C"+
+            "\u4F4D\u4F4E\u4F4F\u4F50\u4F51\u4F52\u4F53\u4F54"+
+            "\u4F55\u4F56\u4F57\u4F58\u4F59\u4F5A\u4F5B\u4F5C"+
+            "\u4F5D\u4F5E\u4F5F\u4F60\u4F61\u4F62\u4F63\u4F64"+
+            "\u4F65\u4F66\u4F67\u4F68\u4F69\u4F6A\u4F6B\u4F6C"+
+            "\u4F6D\u4F6E\u4F6F\u4F70\u4F71\u4F72\u4F73\u4F74"+
+            "\u4F75\u4F76\u4F77\u4F78\u4F79\u4F7A\u4F7B\u4F7C"+
+            "\u4F7D\u4F7E\u4F7F\u4F80\u4F81\u4F82\u4F83\u4F84"+
+            "\u4F85\u4F86\u4F87\u4F88\u4F89\u4F8A\u4F8B\u4F8C"+
+            "\u4F8D\u4F8E\u4F8F\u4F90\u4F91\u4F92\u4F93\u4F94"+
+            "\u4F95\u4F96\u4F97\u4F98\u4F99\u4F9A\u4F9B\u4F9C"+
+            "\u4F9D\u4F9E\u4F9F\u4FA0\u4FA1\u4FA2\u4FA3\u4FA4"+
+            "\u4FA5\u4FA6\u4FA7\u4FA8\u4FA9\u4FAA\u4FAB\u4FAC"+
+            "\u4FAD\u4FAE\u4FAF\u4FB0\u4FB1\u4FB2\u4FB3\u4FB4"+
+            "\u4FB5\u4FB6\u4FB7\u4FB8\u4FB9\u4FBA\u4FBB\u4FBC"+
+            "\u4FBD\u4FBE\u4FBF\u4FC0\u4FC1\u4FC2\u4FC3\u4FC4"+
+            "\u4FC5\u4FC6\u4FC7\u4FC8\u4FC9\u4FCA\u4FCB\u4FCC"+
+            "\u4FCD\u4FCE\u4FCF\u4FD0\u4FD1\u4FD2\u4FD3\u4FD4"+
+            "\u4FD5\u4FD6\u4FD7\u4FD8\u4FD9\u4FDA\u4FDB\u4FDC"+
+            "\u4FDD\u4FDE\u4FDF\u4FE0\u4FE1\u4FE2\u4FE3\u4FE4"+
+            "\u4FE5\u4FE6\u4FE7\u4FE8\u4FE9\u4FEA\u4FEB\u4FEC"+
+            "\u4FED\u4FEE\u4FEF\u4FF0\u4FF1\u4FF2\u4FF3\u4FF4"+
+            "\u4FF5\u4FF6\u4FF7\u4FF8\u4FF9\u4FFA\u4FFB\u4FFC"+
+            "\u4FFD\u4FFE\u4FFF\u5000\u5001\u5002\u5003\u5004"+
+            "\u5005\u5006\u5007\u5008\u5009\u500A\u500B\u500C"+
+            "\u500D\u500E\u500F\u5010\u5011\u5012\u5013\u5014"+
+            "\u5015\u5016\u5017\u5018\u5019\u501A\u501B\u501C"+
+            "\u501D\u501E\u501F\u5020\u5021\u5022\u5023\u5024"+
+            "\u5025\u5026\u5027\u5028\u5029\u502A\u502B\u502C"+
+            "\u502D\u502E\u502F\u5030\u5031\u5032\u5033\u5034"+
+            "\u5035\u5036\u5037\u5038\u5039\u503A\u503B\u503C"+
+            "\u503D\u503E\u503F\u5040\u5041\u5042\u5043\u5044"+
+            "\u5045\u5046\u5047\u5048\u5049\u504A\u504B\u504C"+
+            "\u504D\u504E\u504F\u5050\u5051\u5052\u5053\u5054"+
+            "\u5055\u5056\u5057\u5058\u5059\u505A\u505B\u505C"+
+            "\u505D\u505E\u505F\u5060\u5061\u5062\u5063\u5064"+
+            "\u5065\u5066\u5067\u5068\u5069\u506A\u506B\u506C"+
+            "\u506D\u506E\u506F\u5070\u5071\u5072\u5073\u5074"+
+            "\u5075\u5076\u5077\u5078\u5079\u507A\u507B\u507C"+
+            "\u507D\u507E\u507F\u5080\u5081\u5082\u5083\u5084"+
+            "\u5085\u5086\u5087\u5088\u5089\u508A\u508B\u508C"+
+            "\u508D\u508E\u508F\u5090\u5091\u5092\u5093\u5094"+
+            "\u5095\u5096\u5097\u5098\u5099\u509A\u509B\u509C"+
+            "\u509D\u509E\u509F\u50A0\u50A1\u50A2\u50A3\u50A4"+
+            "\u50A5\u50A6\u50A7\u50A8\u50A9\u50AA\u50AB\u50AC"+
+            "\u50AD\u50AE\u50AF\u50B0\u50B1\u50B2\u50B3\u50B4"+
+            "\u50B5\u50B6\u50B7\u50B8\u50B9\u50BA\u50BB\u50BC"+
+            "\u50BD\u50BE\u50BF\u50C0\u50C1\u50C2\u50C3\u50C4"+
+            "\u50C5\u50C6\u50C7\u50C8\u50C9\u50CA\u50CB\u50CC"+
+            "\u50CD\u50CE\u50CF\u50D0\u50D1\u50D2\u50D3\u50D4"+
+            "\u50D5\u50D6\u50D7\u50D8\u50D9\u50DA\u50DB\u50DC"+
+            "\u50DD\u50DE\u50DF\u50E0\u50E1\u50E2\u50E3\u50E4"+
+            "\u50E5\u50E6\u50E7\u50E8\u50E9\u50EA\u50EB\u50EC"+
+            "\u50ED\u50EE\u50EF\u50F0\u50F1\u50F2\u50F3\u50F4"+
+            "\u50F5\u50F6\u50F7\u50F8\u50F9\u50FA\u50FB\u50FC"+
+            "\u50FD\u50FE\u50FF\u5100\u5101\u5102\u5103\u5104"+
+            "\u5105\u5106\u5107\u5108\u5109\u510A\u510B\u510C"+
+            "\u510D\u510E\u510F\u5110\u5111\u5112\u5113\u5114"+
+            "\u5115\u5116\u5117\u5118\u5119\u511A\u511B\u511C"+
+            "\u511D\u511E\u511F\u5120\u5121\u5122\u5123\u5124"+
+            "\u5125\u5126\u5127\u5128\u5129\u512A\u512B\u512C"+
+            "\u512D\u512E\u512F\u5130\u5131\u5132\u5133\u5134"+
+            "\u5135\u5136\u5137\u5138\u5139\u513A\u513B\u513C"+
+            "\u513D\u513E\u513F\u5140\u5141\u5142\u5143\u5144"+
+            "\u5145\u5146\u5147\u5148\u5149\u514A\u514B\u514C"+
+            "\u514D\u514E\u514F\u5150\u5151\u5152\u5153\u5154"+
+            "\u5155\u5156\u5157\u5158\u5159\u515A\u515B\u515C"+
+            "\u515D\u515E\u515F\u5160\u5161\u5162\u5163\u5164"+
+            "\u5165\u5166\u5167\u5168\u5169\u516A\u516B\u516C"+
+            "\u516D\u516E\u516F\u5170\u5171\u5172\u5173\u5174"+
+            "\u5175\u5176\u5177\u5178\u5179\u517A\u517B\u517C"+
+            "\u517D\u517E\u517F\u5180\u5181\u5182\u5183\u5184"+
+            "\u5185\u5186\u5187\u5188\u5189\u518A\u518B\u518C"+
+            "\u518D\u518E\u518F\u5190\u5191\u5192\u5193\u5194"+
+            "\u5195\u5196\u5197\u5198\u5199\u519A\u519B\u519C"+
+            "\u519D\u519E\u519F\u51A0\u51A1\u51A2\u51A3\u51A4"+
+            "\u51A5\u51A6\u51A7\u51A8\u51A9\u51AA\u51AB\u51AC"+
+            "\u51AD\u51AE\u51AF\u51B0\u51B1\u51B2\u51B3\u51B4"+
+            "\u51B5\u51B6\u51B7\u51B8\u51B9\u51BA\u51BB\u51BC"+
+            "\u51BD\u51BE\u51BF\u51C0\u51C1\u51C2\u51C3\u51C4"+
+            "\u51C5\u51C6\u51C7\u51C8\u51C9\u51CA\u51CB\u51CC"+
+            "\u51CD\u51CE\u51CF\u51D0\u51D1\u51D2\u51D3\u51D4"+
+            "\u51D5\u51D6\u51D7\u51D8\u51D9\u51DA\u51DB\u51DC"+
+            "\u51DD\u51DE\u51DF\u51E0\u51E1\u51E2\u51E3\u51E4"+
+            "\u51E5\u51E6\u51E7\u51E8\u51E9\u51EA\u51EB\u51EC"+
+            "\u51ED\u51EE\u51EF\u51F0\u51F1\u51F2\u51F3\u51F4"+
+            "\u51F5\u51F6\u51F7\u51F8\u51F9\u51FA\u51FB\u51FC"+
+            "\u51FD\u51FE\u51FF\u5200\u5201\u5202\u5203\u5204"+
+            "\u5205\u5206\u5207\u5208\u5209\u520A\u520B\u520C"+
+            "\u520D\u520E\u520F\u5210\u5211\u5212\u5213\u5214"+
+            "\u5215\u5216\u5217\u5218\u5219\u521A\u521B\u521C"+
+            "\u521D\u521E\u521F\u5220\u5221\u5222\u5223\u5224"+
+            "\u5225\u5226\u5227\u5228\u5229\u522A\u522B\u522C"+
+            "\u522D\u522E\u522F\u5230\u5231\u5232\u5233\u5234"+
+            "\u5235\u5236\u5237\u5238\u5239\u523A\u523B\u523C"+
+            "\u523D\u523E\u523F\u5240\u5241\u5242\u5243\u5244"+
+            "\u5245\u5246\u5247\u5248\u5249\u524A\u524B\u524C"+
+            "\u524D\u524E\u524F\u5250\u5251\u5252\u5253\u5254"+
+            "\u5255\u5256\u5257\u5258\u5259\u525A\u525B\u525C"+
+            "\u525D\u525E\u525F\u5260\u5261\u5262\u5263\u5264"+
+            "\u5265\u5266\u5267\u5268\u5269\u526A\u526B\u526C"+
+            "\u526D\u526E\u526F\u5270\u5271\u5272\u5273\u5274"+
+            "\u5275\u5276\u5277\u5278\u5279\u527A\u527B\u527C"+
+            "\u527D\u527E\u527F\u5280\u5281\u5282\u5283\u5284"+
+            "\u5285\u5286\u5287\u5288\u5289\u528A\u528B\u528C"+
+            "\u528D\u528E\u528F\u5290\u5291\u5292\u5293\u5294"+
+            "\u5295\u5296\u5297\u5298\u5299\u529A\u529B\u529C"+
+            "\u529D\u529E\u529F\u52A0\u52A1\u52A2\u52A3\u52A4"+
+            "\u52A5\u52A6\u52A7\u52A8\u52A9\u52AA\u52AB\u52AC"+
+            "\u52AD\u52AE\u52AF\u52B0\u52B1\u52B2\u52B3\u52B4"+
+            "\u52B5\u52B6\u52B7\u52B8\u52B9\u52BA\u52BB\u52BC"+
+            "\u52BD\u52BE\u52BF\u52C0\u52C1\u52C2\u52C3\u52C4"+
+            "\u52C5\u52C6\u52C7\u52C8\u52C9\u52CA\u52CB\u52CC"+
+            "\u52CD\u52CE\u52CF\u52D0\u52D1\u52D2\u52D3\u52D4"+
+            "\u52D5\u52D6\u52D7\u52D8\u52D9\u52DA\u52DB\u52DC"+
+            "\u52DD\u52DE\u52DF\u52E0\u52E1\u52E2\u52E3\u52E4"+
+            "\u52E5\u52E6\u52E7\u52E8\u52E9\u52EA\u52EB\u52EC"+
+            "\u52ED\u52EE\u52EF\u52F0\u52F1\u52F2\u52F3\u52F4"+
+            "\u52F5\u52F6\u52F7\u52F8\u52F9\u52FA\u52FB\u52FC"+
+            "\u52FD\u52FE\u52FF\u5300\u5301\u5302\u5303\u5304"+
+            "\u5305\u5306\u5307\u5308\u5309\u530A\u530B\u530C"+
+            "\u530D\u530E\u530F\u5310\u5311\u5312\u5313\u5314"+
+            "\u5315\u5316\u5317\u5318\u5319\u531A\u531B\u531C"+
+            "\u531D\u531E\u531F\u5320\u5321\u5322\u5323\u5324"+
+            "\u5325\u5326\u5327\u5328\u5329\u532A\u532B\u532C"+
+            "\u532D\u532E\u532F\u5330\u5331\u5332\u5333\u5334"+
+            "\u5335\u5336\u5337\u5338\u5339\u533A\u533B\u533C"+
+            "\u533D\u533E\u533F\u5340\u5341\u5342\u5343\u5344"+
+            "\u5345\u5346\u5347\u5348\u5349\u534A\u534B\u534C"+
+            "\u534D\u534E\u534F\u5350\u5351\u5352\u5353\u5354"+
+            "\u5355\u5356\u5357\u5358\u5359\u535A\u535B\u535C"+
+            "\u535D\u535E\u535F\u5360\u5361\u5362\u5363\u5364"+
+            "\u5365\u5366\u5367\u5368\u5369\u536A\u536B\u536C"+
+            "\u536D\u536E\u536F\u5370\u5371\u5372\u5373\u5374"+
+            "\u5375\u5376\u5377\u5378\u5379\u537A\u537B\u537C"+
+            "\u537D\u537E\u537F\u5380\u5381\u5382\u5383\u5384"+
+            "\u5385\u5386\u5387\u5388\u5389\u538A\u538B\u538C"+
+            "\u538D\u538E\u538F\u5390\u5391\u5392\u5393\u5394"+
+            "\u5395\u5396\u5397\u5398\u5399\u539A\u539B\u539C"+
+            "\u539D\u539E\u539F\u53A0\u53A1\u53A2\u53A3\u53A4"+
+            "\u53A5\u53A6\u53A7\u53A8\u53A9\u53AA\u53AB\u53AC"+
+            "\u53AD\u53AE\u53AF\u53B0\u53B1\u53B2\u53B3\u53B4"+
+            "\u53B5\u53B6\u53B7\u53B8\u53B9\u53BA\u53BB\u53BC"+
+            "\u53BD\u53BE\u53BF\u53C0\u53C1\u53C2\u53C3\u53C4"+
+            "\u53C5\u53C6\u53C7\u53C8\u53C9\u53CA\u53CB\u53CC"+
+            "\u53CD\u53CE\u53CF\u53D0\u53D1\u53D2\u53D3\u53D4"+
+            "\u53D5\u53D6\u53D7\u53D8\u53D9\u53DA\u53DB\u53DC"+
+            "\u53DD\u53DE\u53DF\u53E0\u53E1\u53E2\u53E3\u53E4"+
+            "\u53E5\u53E6\u53E7\u53E8\u53E9\u53EA\u53EB\u53EC"+
+            "\u53ED\u53EE\u53EF\u53F0\u53F1\u53F2\u53F3\u53F4"+
+            "\u53F5\u53F6\u53F7\u53F8\u53F9\u53FA\u53FB\u53FC"+
+            "\u53FD\u53FE\u53FF\u5400\u5401\u5402\u5403\u5404"+
+            "\u5405\u5406\u5407\u5408\u5409\u540A\u540B\u540C"+
+            "\u540D\u540E\u540F\u5410\u5411\u5412\u5413\u5414"+
+            "\u5415\u5416\u5417\u5418\u5419\u541A\u541B\u541C"+
+            "\u541D\u541E\u541F\u5420\u5421\u5422\u5423\u5424"+
+            "\u5425\u5426\u5427\u5428\u5429\u542A\u542B\u542C"+
+            "\u542D\u542E\u542F\u5430\u5431\u5432\u5433\u5434"+
+            "\u5435\u5436\u5437\u5438\u5439\u543A\u543B\u543C"+
+            "\u543D\u543E\u543F\u5440\u5441\u5442\u5443\u5444"+
+            "\u5445\u5446\u5447\u5448\u5449\u544A\u544B\u544C"+
+            "\u544D\u544E\u544F\u5450\u5451\u5452\u5453\u5454"+
+            "\u5455\u5456\u5457\u5458\u5459\u545A\u545B\u545C"+
+            "\u545D\u545E\u545F\u5460\u5461\u5462\u5463\u5464"+
+            "\u5465\u5466\u5467\u5468\u5469\u546A\u546B\u546C"+
+            "\u546D\u546E\u546F\u5470\u5471\u5472\u5473\u5474"+
+            "\u5475\u5476\u5477\u5478\u5479\u547A\u547B\u547C"+
+            "\u547D\u547E\u547F\u5480\u5481\u5482\u5483\u5484"+
+            "\u5485\u5486\u5487\u5488\u5489\u548A\u548B\u548C"+
+            "\u548D\u548E\u548F\u5490\u5491\u5492\u5493\u5494"+
+            "\u5495\u5496\u5497\u5498\u5499\u549A\u549B\u549C"+
+            "\u549D\u549E\u549F\u54A0\u54A1\u54A2\u54A3\u54A4"+
+            "\u54A5\u54A6\u54A7\u54A8\u54A9\u54AA\u54AB\u54AC"+
+            "\u54AD\u54AE\u54AF\u54B0\u54B1\u54B2\u54B3\u54B4"+
+            "\u54B5\u54B6\u54B7\u54B8\u54B9\u54BA\u54BB\u54BC"+
+            "\u54BD\u54BE\u54BF\u54C0\u54C1\u54C2\u54C3\u54C4"+
+            "\u54C5\u54C6\u54C7\u54C8\u54C9\u54CA\u54CB\u54CC"+
+            "\u54CD\u54CE\u54CF\u54D0\u54D1\u54D2\u54D3\u54D4"+
+            "\u54D5\u54D6\u54D7\u54D8\u54D9\u54DA\u54DB\u54DC"+
+            "\u54DD\u54DE\u54DF\u54E0\u54E1\u54E2\u54E3\u54E4"+
+            "\u54E5\u54E6\u54E7\u54E8\u54E9\u54EA\u54EB\u54EC"+
+            "\u54ED\u54EE\u54EF\u54F0\u54F1\u54F2\u54F3\u54F4"+
+            "\u54F5\u54F6\u54F7\u54F8\u54F9\u54FA\u54FB\u54FC"+
+            "\u54FD\u54FE\u54FF\u5500\u5501\u5502\u5503\u5504"+
+            "\u5505\u5506\u5507\u5508\u5509\u550A\u550B\u550C"+
+            "\u550D\u550E\u550F\u5510\u5511\u5512\u5513\u5514"+
+            "\u5515\u5516\u5517\u5518\u5519\u551A\u551B\u551C"+
+            "\u551D\u551E\u551F\u5520\u5521\u5522\u5523\u5524"+
+            "\u5525\u5526\u5527\u5528\u5529\u552A\u552B\u552C"+
+            "\u552D\u552E\u552F\u5530\u5531\u5532\u5533\u5534"+
+            "\u5535\u5536\u5537\u5538\u5539\u553A\u553B\u553C"+
+            "\u553D\u553E\u553F\u5540\u5541\u5542\u5543\u5544"+
+            "\u5545\u5546\u5547\u5548\u5549\u554A\u554B\u554C"+
+            "\u554D\u554E\u554F\u5550\u5551\u5552\u5553\u5554"+
+            "\u5555\u5556\u5557\u5558\u5559\u555A\u555B\u555C"+
+            "\u555D\u555E\u555F\u5560\u5561\u5562\u5563\u5564"+
+            "\u5565\u5566\u5567\u5568\u5569\u556A\u556B\u556C"+
+            "\u556D\u556E\u556F\u5570\u5571\u5572\u5573\u5574"+
+            "\u5575\u5576\u5577\u5578\u5579\u557A\u557B\u557C"+
+            "\u557D\u557E\u557F\u5580\u5581\u5582\u5583\u5584"+
+            "\u5585\u5586\u5587\u5588\u5589\u558A\u558B\u558C"+
+            "\u558D\u558E\u558F\u5590\u5591\u5592\u5593\u5594"+
+            "\u5595\u5596\u5597\u5598\u5599\u559A\u559B\u559C"+
+            "\u559D\u559E\u559F\u55A0\u55A1\u55A2\u55A3\u55A4"+
+            "\u55A5\u55A6\u55A7\u55A8\u55A9\u55AA\u55AB\u55AC"+
+            "\u55AD\u55AE\u55AF\u55B0\u55B1\u55B2\u55B3\u55B4"+
+            "\u55B5\u55B6\u55B7\u55B8\u55B9\u55BA\u55BB\u55BC"+
+            "\u55BD\u55BE\u55BF\u55C0\u55C1\u55C2\u55C3\u55C4"+
+            "\u55C5\u55C6\u55C7\u55C8\u55C9\u55CA\u55CB\u55CC"+
+            "\u55CD\u55CE\u55CF\u55D0\u55D1\u55D2\u55D3\u55D4"+
+            "\u55D5\u55D6\u55D7\u55D8\u55D9\u55DA\u55DB\u55DC"+
+            "\u55DD\u55DE\u55DF\u55E0\u55E1\u55E2\u55E3\u55E4"+
+            "\u55E5\u55E6\u55E7\u55E8\u55E9\u55EA\u55EB\u55EC"+
+            "\u55ED\u55EE\u55EF\u55F0\u55F1\u55F2\u55F3\u55F4"+
+            "\u55F5\u55F6\u55F7\u55F8\u55F9\u55FA\u55FB\u55FC"+
+            "\u55FD\u55FE\u55FF\u5600\u5601\u5602\u5603\u5604"+
+            "\u5605\u5606\u5607\u5608\u5609\u560A\u560B\u560C"+
+            "\u560D\u560E\u560F\u5610\u5611\u5612\u5613\u5614"+
+            "\u5615\u5616\u5617\u5618\u5619\u561A\u561B\u561C"+
+            "\u561D\u561E\u561F\u5620\u5621\u5622\u5623\u5624"+
+            "\u5625\u5626\u5627\u5628\u5629\u562A\u562B\u562C"+
+            "\u562D\u562E\u562F\u5630\u5631\u5632\u5633\u5634"+
+            "\u5635\u5636\u5637\u5638\u5639\u563A\u563B\u563C"+
+            "\u563D\u563E\u563F\u5640\u5641\u5642\u5643\u5644"+
+            "\u5645\u5646\u5647\u5648\u5649\u564A\u564B\u564C"+
+            "\u564D\u564E\u564F\u5650\u5651\u5652\u5653\u5654"+
+            "\u5655\u5656\u5657\u5658\u5659\u565A\u565B\u565C"+
+            "\u565D\u565E\u565F\u5660\u5661\u5662\u5663\u5664"+
+            "\u5665\u5666\u5667\u5668\u5669\u566A\u566B\u566C"+
+            "\u566D\u566E\u566F\u5670\u5671\u5672\u5673\u5674"+
+            "\u5675\u5676\u5677\u5678\u5679\u567A\u567B\u567C"+
+            "\u567D\u567E\u567F\u5680\u5681\u5682\u5683\u5684"+
+            "\u5685\u5686\u5687\u5688\u5689\u568A\u568B\u568C"+
+            "\u568D\u568E\u568F\u5690\u5691\u5692\u5693\u5694"+
+            "\u5695\u5696\u5697\u5698\u5699\u569A\u569B\u569C"+
+            "\u569D\u569E\u569F\u56A0\u56A1\u56A2\u56A3\u56A4"+
+            "\u56A5\u56A6\u56A7\u56A8\u56A9\u56AA\u56AB\u56AC"+
+            "\u56AD\u56AE\u56AF\u56B0\u56B1\u56B2\u56B3\u56B4"+
+            "\u56B5\u56B6\u56B7\u56B8\u56B9\u56BA\u56BB\u56BC"+
+            "\u56BD\u56BE\u56BF\u56C0\u56C1\u56C2\u56C3\u56C4"+
+            "\u56C5\u56C6\u56C7\u56C8\u56C9\u56CA\u56CB\u56CC"+
+            "\u56CD\u56CE\u56CF\u56D0\u56D1\u56D2\u56D3\u56D4"+
+            "\u56D5\u56D6\u56D7\u56D8\u56D9\u56DA\u56DB\u56DC"+
+            "\u56DD\u56DE\u56DF\u56E0\u56E1\u56E2\u56E3\u56E4"+
+            "\u56E5\u56E6\u56E7\u56E8\u56E9\u56EA\u56EB\u56EC"+
+            "\u56ED\u56EE\u56EF\u56F0\u56F1\u56F2\u56F3\u56F4"+
+            "\u56F5\u56F6\u56F7\u56F8\u56F9\u56FA\u56FB\u56FC"+
+            "\u56FD\u56FE\u56FF\u5700\u5701\u5702\u5703\u5704"+
+            "\u5705\u5706\u5707\u5708\u5709\u570A\u570B\u570C"+
+            "\u570D\u570E\u570F\u5710\u5711\u5712\u5713\u5714"+
+            "\u5715\u5716\u5717\u5718\u5719\u571A\u571B\u571C"+
+            "\u571D\u571E\u571F\u5720\u5721\u5722\u5723\u5724"+
+            "\u5725\u5726\u5727\u5728\u5729\u572A\u572B\u572C"+
+            "\u572D\u572E\u572F\u5730\u5731\u5732\u5733\u5734"+
+            "\u5735\u5736\u5737\u5738\u5739\u573A\u573B\u573C"+
+            "\u573D\u573E\u573F\u5740\u5741\u5742\u5743\u5744"+
+            "\u5745\u5746\u5747\u5748\u5749\u574A\u574B\u574C"+
+            "\u574D\u574E\u574F\u5750\u5751\u5752\u5753\u5754"+
+            "\u5755\u5756\u5757\u5758\u5759\u575A\u575B\u575C"+
+            "\u575D\u575E\u575F\u5760\u5761\u5762\u5763\u5764"+
+            "\u5765\u5766\u5767\u5768\u5769\u576A\u576B\u576C"+
+            "\u576D\u576E\u576F\u5770\u5771\u5772\u5773\u5774"+
+            "\u5775\u5776\u5777\u5778\u5779\u577A\u577B\u577C"+
+            "\u577D\u577E\u577F\u5780\u5781\u5782\u5783\u5784"+
+            "\u5785\u5786\u5787\u5788\u5789\u578A\u578B\u578C"+
+            "\u578D\u578E\u578F\u5790\u5791\u5792\u5793\u5794"+
+            "\u5795\u5796\u5797\u5798\u5799\u579A\u579B\u579C"+
+            "\u579D\u579E\u579F\u57A0\u57A1\u57A2\u57A3\u57A4"+
+            "\u57A5\u57A6\u57A7\u57A8\u57A9\u57AA\u57AB\u57AC"+
+            "\u57AD\u57AE\u57AF\u57B0\u57B1\u57B2\u57B3\u57B4"+
+            "\u57B5\u57B6\u57B7\u57B8\u57B9\u57BA\u57BB\u57BC"+
+            "\u57BD\u57BE\u57BF\u57C0\u57C1\u57C2\u57C3\u57C4"+
+            "\u57C5\u57C6\u57C7\u57C8\u57C9\u57CA\u57CB\u57CC"+
+            "\u57CD\u57CE\u57CF\u57D0\u57D1\u57D2\u57D3\u57D4"+
+            "\u57D5\u57D6\u57D7\u57D8\u57D9\u57DA\u57DB\u57DC"+
+            "\u57DD\u57DE\u57DF\u57E0\u57E1\u57E2\u57E3\u57E4"+
+            "\u57E5\u57E6\u57E7\u57E8\u57E9\u57EA\u57EB\u57EC"+
+            "\u57ED\u57EE\u57EF\u57F0\u57F1\u57F2\u57F3\u57F4"+
+            "\u57F5\u57F6\u57F7\u57F8\u57F9\u57FA\u57FB\u57FC"+
+            "\u57FD\u57FE\u57FF\u5800\u5801\u5802\u5803\u5804"+
+            "\u5805\u5806\u5807\u5808\u5809\u580A\u580B\u580C"+
+            "\u580D\u580E\u580F\u5810\u5811\u5812\u5813\u5814"+
+            "\u5815\u5816\u5817\u5818\u5819\u581A\u581B\u581C"+
+            "\u581D\u581E\u581F\u5820\u5821\u5822\u5823\u5824"+
+            "\u5825\u5826\u5827\u5828\u5829\u582A\u582B\u582C"+
+            "\u582D\u582E\u582F\u5830\u5831\u5832\u5833\u5834"+
+            "\u5835\u5836\u5837\u5838\u5839\u583A\u583B\u583C"+
+            "\u583D\u583E\u583F\u5840\u5841\u5842\u5843\u5844"+
+            "\u5845\u5846\u5847\u5848\u5849\u584A\u584B\u584C"+
+            "\u584D\u584E\u584F\u5850\u5851\u5852\u5853\u5854"+
+            "\u5855\u5856\u5857\u5858\u5859\u585A\u585B\u585C"+
+            "\u585D\u585E\u585F\u5860\u5861\u5862\u5863\u5864"+
+            "\u5865\u5866\u5867\u5868\u5869\u586A\u586B\u586C"+
+            "\u586D\u586E\u586F\u5870\u5871\u5872\u5873\u5874"+
+            "\u5875\u5876\u5877\u5878\u5879\u587A\u587B\u587C"+
+            "\u587D\u587E\u587F\u5880\u5881\u5882\u5883\u5884"+
+            "\u5885\u5886\u5887\u5888\u5889\u588A\u588B\u588C"+
+            "\u588D\u588E\u588F\u5890\u5891\u5892\u5893\u5894"+
+            "\u5895\u5896\u5897\u5898\u5899\u589A\u589B\u589C"+
+            "\u589D\u589E\u589F\u58A0\u58A1\u58A2\u58A3\u58A4"+
+            "\u58A5\u58A6\u58A7\u58A8\u58A9\u58AA\u58AB\u58AC"+
+            "\u58AD\u58AE\u58AF\u58B0\u58B1\u58B2\u58B3\u58B4"+
+            "\u58B5\u58B6\u58B7\u58B8\u58B9\u58BA\u58BB\u58BC"+
+            "\u58BD\u58BE\u58BF\u58C0\u58C1\u58C2\u58C3\u58C4"+
+            "\u58C5\u58C6\u58C7\u58C8\u58C9\u58CA\u58CB\u58CC"+
+            "\u58CD\u58CE\u58CF\u58D0\u58D1\u58D2\u58D3\u58D4"+
+            "\u58D5\u58D6\u58D7\u58D8\u58D9\u58DA\u58DB\u58DC"+
+            "\u58DD\u58DE\u58DF\u58E0\u58E1\u58E2\u58E3\u58E4"+
+            "\u58E5\u58E6\u58E7\u58E8\u58E9\u58EA\u58EB\u58EC"+
+            "\u58ED\u58EE\u58EF\u58F0\u58F1\u58F2\u58F3\u58F4"+
+            "\u58F5\u58F6\u58F7\u58F8\u58F9\u58FA\u58FB\u58FC"+
+            "\u58FD\u58FE\u58FF\u5900\u5901\u5902\u5903\u5904"+
+            "\u5905\u5906\u5907\u5908\u5909\u590A\u590B\u590C"+
+            "\u590D\u590E\u590F\u5910\u5911\u5912\u5913\u5914"+
+            "\u5915\u5916\u5917\u5918\u5919\u591A\u591B\u591C"+
+            "\u591D\u591E\u591F\u5920\u5921\u5922\u5923\u5924"+
+            "\u5925\u5926\u5927\u5928\u5929\u592A\u592B\u592C"+
+            "\u592D\u592E\u592F\u5930\u5931\u5932\u5933\u5934"+
+            "\u5935\u5936\u5937\u5938\u5939\u593A\u593B\u593C"+
+            "\u593D\u593E\u593F\u5940\u5941\u5942\u5943\u5944"+
+            "\u5945\u5946\u5947\u5948\u5949\u594A\u594B\u594C"+
+            "\u594D\u594E\u594F\u5950\u5951\u5952\u5953\u5954"+
+            "\u5955\u5956\u5957\u5958\u5959\u595A\u595B\u595C"+
+            "\u595D\u595E\u595F\u5960\u5961\u5962\u5963\u5964"+
+            "\u5965\u5966\u5967\u5968\u5969\u596A\u596B\u596C"+
+            "\u596D\u596E\u596F\u5970\u5971\u5972\u5973\u5974"+
+            "\u5975\u5976\u5977\u5978\u5979\u597A\u597B\u597C"+
+            "\u597D\u597E\u597F\u5980\u5981\u5982\u5983\u5984"+
+            "\u5985\u5986\u5987\u5988\u5989\u598A\u598B\u598C"+
+            "\u598D\u598E\u598F\u5990\u5991\u5992\u5993\u5994"+
+            "\u5995\u5996\u5997\u5998\u5999\u599A\u599B\u599C"+
+            "\u599D\u599E\u599F\u59A0\u59A1\u59A2\u59A3\u59A4"+
+            "\u59A5\u59A6\u59A7\u59A8\u59A9\u59AA\u59AB\u59AC"+
+            "\u59AD\u59AE\u59AF\u59B0\u59B1\u59B2\u59B3\u59B4"+
+            "\u59B5\u59B6\u59B7\u59B8\u59B9\u59BA\u59BB\u59BC"+
+            "\u59BD\u59BE\u59BF\u59C0\u59C1\u59C2\u59C3\u59C4"+
+            "\u59C5\u59C6\u59C7\u59C8\u59C9\u59CA\u59CB\u59CC"+
+            "\u59CD\u59CE\u59CF\u59D0\u59D1\u59D2\u59D3\u59D4"+
+            "\u59D5\u59D6\u59D7\u59D8\u59D9\u59DA\u59DB\u59DC"+
+            "\u59DD\u59DE\u59DF\u59E0\u59E1\u59E2\u59E3\u59E4"+
+            "\u59E5\u59E6\u59E7\u59E8\u59E9\u59EA\u59EB\u59EC"+
+            "\u59ED\u59EE\u59EF\u59F0\u59F1\u59F2\u59F3\u59F4"+
+            "\u59F5\u59F6\u59F7\u59F8\u59F9\u59FA\u59FB\u59FC"+
+            "\u59FD\u59FE\u59FF\u5A00\u5A01\u5A02\u5A03\u5A04"+
+            "\u5A05\u5A06\u5A07\u5A08\u5A09\u5A0A\u5A0B\u5A0C"+
+            "\u5A0D\u5A0E\u5A0F\u5A10\u5A11\u5A12\u5A13\u5A14"+
+            "\u5A15\u5A16\u5A17\u5A18\u5A19\u5A1A\u5A1B\u5A1C"+
+            "\u5A1D\u5A1E\u5A1F\u5A20\u5A21\u5A22\u5A23\u5A24"+
+            "\u5A25\u5A26\u5A27\u5A28\u5A29\u5A2A\u5A2B\u5A2C"+
+            "\u5A2D\u5A2E\u5A2F\u5A30\u5A31\u5A32\u5A33\u5A34"+
+            "\u5A35\u5A36\u5A37\u5A38\u5A39\u5A3A\u5A3B\u5A3C"+
+            "\u5A3D\u5A3E\u5A3F\u5A40\u5A41\u5A42\u5A43\u5A44"+
+            "\u5A45\u5A46\u5A47\u5A48\u5A49\u5A4A\u5A4B\u5A4C"+
+            "\u5A4D\u5A4E\u5A4F\u5A50\u5A51\u5A52\u5A53\u5A54"+
+            "\u5A55\u5A56\u5A57\u5A58\u5A59\u5A5A\u5A5B\u5A5C"+
+            "\u5A5D\u5A5E\u5A5F\u5A60\u5A61\u5A62\u5A63\u5A64"+
+            "\u5A65\u5A66\u5A67\u5A68\u5A69\u5A6A\u5A6B\u5A6C"+
+            "\u5A6D\u5A6E\u5A6F\u5A70\u5A71\u5A72\u5A73\u5A74"+
+            "\u5A75\u5A76\u5A77\u5A78\u5A79\u5A7A\u5A7B\u5A7C"+
+            "\u5A7D\u5A7E\u5A7F\u5A80\u5A81\u5A82\u5A83\u5A84"+
+            "\u5A85\u5A86\u5A87\u5A88\u5A89\u5A8A\u5A8B\u5A8C"+
+            "\u5A8D\u5A8E\u5A8F\u5A90\u5A91\u5A92\u5A93\u5A94"+
+            "\u5A95\u5A96\u5A97\u5A98\u5A99\u5A9A\u5A9B\u5A9C"+
+            "\u5A9D\u5A9E\u5A9F\u5AA0\u5AA1\u5AA2\u5AA3\u5AA4"+
+            "\u5AA5\u5AA6\u5AA7\u5AA8\u5AA9\u5AAA\u5AAB\u5AAC"+
+            "\u5AAD\u5AAE\u5AAF\u5AB0\u5AB1\u5AB2\u5AB3\u5AB4"+
+            "\u5AB5\u5AB6\u5AB7\u5AB8\u5AB9\u5ABA\u5ABB\u5ABC";
+
+        private final static String innerIndex6=
+            "\u5ABD\u5ABE\u5ABF\u5AC0\u5AC1\u5AC2\u5AC3\u5AC4"+
+            "\u5AC5\u5AC6\u5AC7\u5AC8\u5AC9\u5ACA\u5ACB\u5ACC"+
+            "\u5ACD\u5ACE\u5ACF\u5AD0\u5AD1\u5AD2\u5AD3\u5AD4"+
+            "\u5AD5\u5AD6\u5AD7\u5AD8\u5AD9\u5ADA\u5ADB\u5ADC"+
+            "\u5ADD\u5ADE\u5ADF\u5AE0\u5AE1\u5AE2\u5AE3\u5AE4"+
+            "\u5AE5\u5AE6\u5AE7\u5AE8\u5AE9\u5AEA\u5AEB\u5AEC"+
+            "\u5AED\u5AEE\u5AEF\u5AF0\u5AF1\u5AF2\u5AF3\u5AF4"+
+            "\u5AF5\u5AF6\u5AF7\u5AF8\u5AF9\u5AFA\u5AFB\u5AFC"+
+            "\u5AFD\u5AFE\u5AFF\u5B00\u5B01\u5B02\u5B03\u5B04"+
+            "\u5B05\u5B06\u5B07\u5B08\u5B09\u5B0A\u5B0B\u5B0C"+
+            "\u5B0D\u5B0E\u5B0F\u5B10\u5B11\u5B12\u5B13\u5B14"+
+            "\u5B15\u5B16\u5B17\u5B18\u5B19\u5B1A\u5B1B\u5B1C"+
+            "\u5B1D\u5B1E\u5B1F\u5B20\u5B21\u5B22\u5B23\u5B24"+
+            "\u5B25\u5B26\u5B27\u5B28\u5B29\u5B2A\u5B2B\u5B2C"+
+            "\u5B2D\u5B2E\u5B2F\u5B30\u5B31\u5B32\u5B33\u5B34"+
+            "\u5B35\u5B36\u5B37\u5B38\u5B39\u5B3A\u5B3B\u5B3C"+
+            "\u5B3D\u5B3E\u5B3F\u5B40\u5B41\u5B42\u5B43\u5B44"+
+            "\u5B45\u5B46\u5B47\u5B48\u5B49\u5B4A\u5B4B\u5B4C"+
+            "\u5B4D\u5B4E\u5B4F\u5B50\u5B51\u5B52\u5B53\u5B54"+
+            "\u5B55\u5B56\u5B57\u5B58\u5B59\u5B5A\u5B5B\u5B5C"+
+            "\u5B5D\u5B5E\u5B5F\u5B60\u5B61\u5B62\u5B63\u5B64"+
+            "\u5B65\u5B66\u5B67\u5B68\u5B69\u5B6A\u5B6B\u5B6C"+
+            "\u5B6D\u5B6E\u5B6F\u5B70\u5B71\u5B72\u5B73\u5B74"+
+            "\u5B75\u5B76\u5B77\u5B78\u5B79\u5B7A\u5B7B\u5B7C"+
+            "\u5B7D\u5B7E\u5B7F\u5B80\u5B81\u5B82\u5B83\u5B84"+
+            "\u5B85\u5B86\u5B87\u5B88\u5B89\u5B8A\u5B8B\u5B8C"+
+            "\u5B8D\u5B8E\u5B8F\u5B90\u5B91\u5B92\u5B93\u5B94"+
+            "\u5B95\u5B96\u5B97\u5B98\u5B99\u5B9A\u5B9B\u5B9C"+
+            "\u5B9D\u5B9E\u5B9F\u5BA0\u5BA1\u5BA2\u5BA3\u5BA4"+
+            "\u5BA5\u5BA6\u5BA7\u5BA8\u5BA9\u5BAA\u5BAB\u5BAC"+
+            "\u5BAD\u5BAE\u5BAF\u5BB0\u5BB1\u5BB2\u5BB3\u5BB4"+
+            "\u5BB5\u5BB6\u5BB7\u5BB8\u5BB9\u5BBA\u5BBB\u5BBC"+
+            "\u5BBD\u5BBE\u5BBF\u5BC0\u5BC1\u5BC2\u5BC3\u5BC4"+
+            "\u5BC5\u5BC6\u5BC7\u5BC8\u5BC9\u5BCA\u5BCB\u5BCC"+
+            "\u5BCD\u5BCE\u5BCF\u5BD0\u5BD1\u5BD2\u5BD3\u5BD4"+
+            "\u5BD5\u5BD6\u5BD7\u5BD8\u5BD9\u5BDA\u5BDB\u5BDC"+
+            "\u5BDD\u5BDE\u5BDF\u5BE0\u5BE1\u5BE2\u5BE3\u5BE4"+
+            "\u5BE5\u5BE6\u5BE7\u5BE8\u5BE9\u5BEA\u5BEB\u5BEC"+
+            "\u5BED\u5BEE\u5BEF\u5BF0\u5BF1\u5BF2\u5BF3\u5BF4"+
+            "\u5BF5\u5BF6\u5BF7\u5BF8\u5BF9\u5BFA\u5BFB\u5BFC"+
+            "\u5BFD\u5BFE\u5BFF\u5C00\u5C01\u5C02\u5C03\u5C04"+
+            "\u5C05\u5C06\u5C07\u5C08\u5C09\u5C0A\u5C0B\u5C0C"+
+            "\u5C0D\u5C0E\u5C0F\u5C10\u5C11\u5C12\u5C13\u5C14"+
+            "\u5C15\u5C16\u5C17\u5C18\u5C19\u5C1A\u5C1B\u5C1C"+
+            "\u5C1D\u5C1E\u5C1F\u5C20\u5C21\u5C22\u5C23\u5C24"+
+            "\u5C25\u5C26\u5C27\u5C28\u5C29\u5C2A\u5C2B\u5C2C"+
+            "\u5C2D\u5C2E\u5C2F\u5C30\u5C31\u5C32\u5C33\u5C34"+
+            "\u5C35\u5C36\u5C37\u5C38\u5C39\u5C3A\u5C3B\u5C3C"+
+            "\u5C3D\u5C3E\u5C3F\u5C40\u5C41\u5C42\u5C43\u5C44"+
+            "\u5C45\u5C46\u5C47\u5C48\u5C49\u5C4A\u5C4B\u5C4C"+
+            "\u5C4D\u5C4E\u5C4F\u5C50\u5C51\u5C52\u5C53\u5C54"+
+            "\u5C55\u5C56\u5C57\u5C58\u5C59\u5C5A\u5C5B\u5C5C"+
+            "\u5C5D\u5C5E\u5C5F\u5C60\u5C61\u5C62\u5C63\u5C64"+
+            "\u5C65\u5C66\u5C67\u5C68\u5C69\u5C6A\u5C6B\u5C6C"+
+            "\u5C6D\u5C6E\u5C6F\u5C70\u5C71\u5C72\u5C73\u5C74"+
+            "\u5C75\u5C76\u5C77\u5C78\u5C79\u5C7A\u5C7B\u5C7C"+
+            "\u5C7D\u5C7E\u5C7F\u5C80\u5C81\u5C82\u5C83\u5C84"+
+            "\u5C85\u5C86\u5C87\u5C88\u5C89\u5C8A\u5C8B\u5C8C"+
+            "\u5C8D\u5C8E\u5C8F\u5C90\u5C91\u5C92\u5C93\u5C94"+
+            "\u5C95\u5C96\u5C97\u5C98\u5C99\u5C9A\u5C9B\u5C9C"+
+            "\u5C9D\u5C9E\u5C9F\u5CA0\u5CA1\u5CA2\u5CA3\u5CA4"+
+            "\u5CA5\u5CA6\u5CA7\u5CA8\u5CA9\u5CAA\u5CAB\u5CAC"+
+            "\u5CAD\u5CAE\u5CAF\u5CB0\u5CB1\u5CB2\u5CB3\u5CB4"+
+            "\u5CB5\u5CB6\u5CB7\u5CB8\u5CB9\u5CBA\u5CBB\u5CBC"+
+            "\u5CBD\u5CBE\u5CBF\u5CC0\u5CC1\u5CC2\u5CC3\u5CC4"+
+            "\u5CC5\u5CC6\u5CC7\u5CC8\u5CC9\u5CCA\u5CCB\u5CCC"+
+            "\u5CCD\u5CCE\u5CCF\u5CD0\u5CD1\u5CD2\u5CD3\u5CD4"+
+            "\u5CD5\u5CD6\u5CD7\u5CD8\u5CD9\u5CDA\u5CDB\u5CDC"+
+            "\u5CDD\u5CDE\u5CDF\u5CE0\u5CE1\u5CE2\u5CE3\u5CE4"+
+            "\u5CE5\u5CE6\u5CE7\u5CE8\u5CE9\u5CEA\u5CEB\u5CEC"+
+            "\u5CED\u5CEE\u5CEF\u5CF0\u5CF1\u5CF2\u5CF3\u5CF4"+
+            "\u5CF5\u5CF6\u5CF7\u5CF8\u5CF9\u5CFA\u5CFB\u5CFC"+
+            "\u5CFD\u5CFE\u5CFF\u5D00\u5D01\u5D02\u5D03\u5D04"+
+            "\u5D05\u5D06\u5D07\u5D08\u5D09\u5D0A\u5D0B\u5D0C"+
+            "\u5D0D\u5D0E\u5D0F\u5D10\u5D11\u5D12\u5D13\u5D14"+
+            "\u5D15\u5D16\u5D17\u5D18\u5D19\u5D1A\u5D1B\u5D1C"+
+            "\u5D1D\u5D1E\u5D1F\u5D20\u5D21\u5D22\u5D23\u5D24"+
+            "\u5D25\u5D26\u5D27\u5D28\u5D29\u5D2A\u5D2B\u5D2C"+
+            "\u5D2D\u5D2E\u5D2F\u5D30\u5D31\u5D32\u5D33\u5D34"+
+            "\u5D35\u5D36\u5D37\u5D38\u5D39\u5D3A\u5D3B\u5D3C"+
+            "\u5D3D\u5D3E\u5D3F\u5D40\u5D41\u5D42\u5D43\u5D44"+
+            "\u5D45\u5D46\u5D47\u5D48\u5D49\u5D4A\u5D4B\u5D4C"+
+            "\u5D4D\u5D4E\u5D4F\u5D50\u5D51\u5D52\u5D53\u5D54"+
+            "\u5D55\u5D56\u5D57\u5D58\u5D59\u5D5A\u5D5B\u5D5C"+
+            "\u5D5D\u5D5E\u5D5F\u5D60\u5D61\u5D62\u5D63\u5D64"+
+            "\u5D65\u5D66\u5D67\u5D68\u5D69\u5D6A\u5D6B\u5D6C"+
+            "\u5D6D\u5D6E\u5D6F\u5D70\u5D71\u5D72\u5D73\u5D74"+
+            "\u5D75\u5D76\u5D77\u5D78\u5D79\u5D7A\u5D7B\u5D7C"+
+            "\u5D7D\u5D7E\u5D7F\u5D80\u5D81\u5D82\u5D83\u5D84"+
+            "\u5D85\u5D86\u5D87\u5D88\u5D89\u5D8A\u5D8B\u5D8C"+
+            "\u5D8D\u5D8E\u5D8F\u5D90\u5D91\u5D92\u5D93\u5D94"+
+            "\u5D95\u5D96\u5D97\u5D98\u5D99\u5D9A\u5D9B\u5D9C"+
+            "\u5D9D\u5D9E\u5D9F\u5DA0\u5DA1\u5DA2\u5DA3\u5DA4"+
+            "\u5DA5\u5DA6\u5DA7\u5DA8\u5DA9\u5DAA\u5DAB\u5DAC"+
+            "\u5DAD\u5DAE\u5DAF\u5DB0\u5DB1\u5DB2\u5DB3\u5DB4"+
+            "\u5DB5\u5DB6\u5DB7\u5DB8\u5DB9\u5DBA\u5DBB\u5DBC"+
+            "\u5DBD\u5DBE\u5DBF\u5DC0\u5DC1\u5DC2\u5DC3\u5DC4"+
+            "\u5DC5\u5DC6\u5DC7\u5DC8\u5DC9\u5DCA\u5DCB\u5DCC"+
+            "\u5DCD\u5DCE\u5DCF\u5DD0\u5DD1\u5DD2\u5DD3\u5DD4"+
+            "\u5DD5\u5DD6\u5DD7\u5DD8\u5DD9\u5DDA\u5DDB\u5DDC"+
+            "\u5DDD\u5DDE\u5DDF\u5DE0\u5DE1\u5DE2\u5DE3\u5DE4"+
+            "\u5DE5\u5DE6\u5DE7\u5DE8\u5DE9\u5DEA\u5DEB\u5DEC"+
+            "\u5DED\u5DEE\u5DEF\u5DF0\u5DF1\u5DF2\u5DF3\u5DF4"+
+            "\u5DF5\u5DF6\u5DF7\u5DF8\u5DF9\u5DFA\u5DFB\u5DFC"+
+            "\u5DFD\u5DFE\u5DFF\u5E00\u5E01\u5E02\u5E03\u5E04"+
+            "\u5E05\u5E06\u5E07\u5E08\u5E09\u5E0A\u5E0B\u5E0C"+
+            "\u5E0D\u5E0E\u5E0F\u5E10\u5E11\u5E12\u5E13\u5E14"+
+            "\u5E15\u5E16\u5E17\u5E18\u5E19\u5E1A\u5E1B\u5E1C"+
+            "\u5E1D\u5E1E\u5E1F\u5E20\u5E21\u5E22\u5E23\u5E24"+
+            "\u5E25\u5E26\u5E27\u5E28\u5E29\u5E2A\u5E2B\u5E2C"+
+            "\u5E2D\u5E2E\u5E2F\u5E30\u5E31\u5E32\u5E33\u5E34"+
+            "\u5E35\u5E36\u5E37\u5E38\u5E39\u5E3A\u5E3B\u5E3C"+
+            "\u5E3D\u5E3E\u5E3F\u5E40\u5E41\u5E42\u5E43\u5E44"+
+            "\u5E45\u5E46\u5E47\u5E48\u5E49\u5E4A\u5E4B\u5E4C"+
+            "\u5E4D\u5E4E\u5E4F\u5E50\u5E51\u5E52\u5E53\u5E54"+
+            "\u5E55\u5E56\u5E57\u5E58\u5E59\u5E5A\u5E5B\u5E5C"+
+            "\u5E5D\u5E5E\u5E5F\u5E60\u5E61\u5E62\u5E63\u5E64"+
+            "\u5E65\u5E66\u5E67\u5E68\u5E69\u5E6A\u5E6B\u5E6C"+
+            "\u5E6D\u5E6E\u5E6F\u5E70\u5E71\u5E72\u5E73\u5E74"+
+            "\u5E75\u5E76\u5E77\u5E78\u5E79\u5E7A\u5E7B\u5E7C"+
+            "\u5E7D\u5E7E\u5E7F\u5E80\u5E81\u5E82\u5E83\u5E84"+
+            "\u5E85\u5E86\u5E87\u5E88\u5E89\u5E8A\u5E8B\u5E8C"+
+            "\u5E8D\u5E8E\u5E8F\u5E90\u5E91\u5E92\u5E93\u5E94"+
+            "\u5E95\u5E96\u5E97\u5E98\u5E99\u5E9A\u5E9B\u5E9C"+
+            "\u5E9D\u5E9E\u5E9F\u5EA0\u5EA1\u5EA2\u5EA3\u5EA4"+
+            "\u5EA5\u5EA6\u5EA7\u5EA8\u5EA9\u5EAA\u5EAB\u5EAC"+
+            "\u5EAD\u5EAE\u5EAF\u5EB0\u5EB1\u5EB2\u5EB3\u5EB4"+
+            "\u5EB5\u5EB6\u5EB7\u5EB8\u5EB9\u5EBA\u5EBB\u5EBC"+
+            "\u5EBD\u5EBE\u5EBF\u5EC0\u5EC1\u5EC2\u5EC3\u5EC4"+
+            "\u5EC5\u5EC6\u5EC7\u5EC8\u5EC9\u5ECA\u5ECB\u5ECC"+
+            "\u5ECD\u5ECE\u5ECF\u5ED0\u5ED1\u5ED2\u5ED3\u5ED4"+
+            "\u5ED5\u5ED6\u5ED7\u5ED8\u5ED9\u5EDA\u5EDB\u5EDC"+
+            "\u5EDD\u5EDE\u5EDF\u5EE0\u5EE1\u5EE2\u5EE3\u5EE4"+
+            "\u5EE5\u5EE6\u5EE7\u5EE8\u5EE9\u5EEA\u5EEB\u5EEC"+
+            "\u5EED\u5EEE\u5EEF\u5EF0\u5EF1\u5EF2\u5EF3\u5EF4"+
+            "\u5EF5\u5EF6\u5EF7\u5EF8\u5EF9\u5EFA\u5EFB\u5EFC"+
+            "\u5EFD\u5EFE\u5EFF\u5F00\u5F01\u5F02\u5F03\u5F04"+
+            "\u5F05\u5F06\u5F07\u5F08\u5F09\u5F0A\u5F0B\u5F0C"+
+            "\u5F0D\u5F0E\u5F0F\u5F10\u5F11\u5F12\u5F13\u5F14"+
+            "\u5F15\u5F16\u5F17\u5F18\u5F19\u5F1A\u5F1B\u5F1C"+
+            "\u5F1D\u5F1E\u5F1F\u5F20\u5F21\u5F22\u5F23\u5F24"+
+            "\u5F25\u5F26\u5F27\u5F28\u5F29\u5F2A\u5F2B\u5F2C"+
+            "\u5F2D\u5F2E\u5F2F\u5F30\u5F31\u5F32\u5F33\u5F34"+
+            "\u5F35\u5F36\u5F37\u5F38\u5F39\u5F3A\u5F3B\u5F3C"+
+            "\u5F3D\u5F3E\u5F3F\u5F40\u5F41\u5F42\u5F43\u5F44"+
+            "\u5F45\u5F46\u5F47\u5F48\u5F49\u5F4A\u5F4B\u5F4C"+
+            "\u5F4D\u5F4E\u5F4F\u5F50\u5F51\u5F52\u5F53\u5F54"+
+            "\u5F55\u5F56\u5F57\u5F58\u5F59\u5F5A\u5F5B\u5F5C"+
+            "\u5F5D\u5F5E\u5F5F\u5F60\u5F61\u5F62\u5F63\u5F64"+
+            "\u5F65\u5F66\u5F67\u5F68\u5F69\u5F6A\u5F6B\u5F6C"+
+            "\u5F6D\u5F6E\u5F6F\u5F70\u5F71\u5F72\u5F73\u5F74"+
+            "\u5F75\u5F76\u5F77\u5F78\u5F79\u5F7A\u5F7B\u5F7C"+
+            "\u5F7D\u5F7E\u5F7F\u5F80\u5F81\u5F82\u5F83\u5F84"+
+            "\u5F85\u5F86\u5F87\u5F88\u5F89\u5F8A\u5F8B\u5F8C"+
+            "\u5F8D\u5F8E\u5F8F\u5F90\u5F91\u5F92\u5F93\u5F94"+
+            "\u5F95\u5F96\u5F97\u5F98\u5F99\u5F9A\u5F9B\u5F9C"+
+            "\u5F9D\u5F9E\u5F9F\u5FA0\u5FA1\u5FA2\u5FA3\u5FA4"+
+            "\u5FA5\u5FA6\u5FA7\u5FA8\u5FA9\u5FAA\u5FAB\u5FAC"+
+            "\u5FAD\u5FAE\u5FAF\u5FB0\u5FB1\u5FB2\u5FB3\u5FB4"+
+            "\u5FB5\u5FB6\u5FB7\u5FB8\u5FB9\u5FBA\u5FBB\u5FBC"+
+            "\u5FBD\u5FBE\u5FBF\u5FC0\u5FC1\u5FC2\u5FC3\u5FC4"+
+            "\u5FC5\u5FC6\u5FC7\u5FC8\u5FC9\u5FCA\u5FCB\u5FCC"+
+            "\u5FCD\u5FCE\u5FCF\u5FD0\u5FD1\u5FD2\u5FD3\u5FD4"+
+            "\u5FD5\u5FD6\u5FD7\u5FD8\u5FD9\u5FDA\u5FDB\u5FDC"+
+            "\u5FDD\u5FDE\u5FDF\u5FE0\u5FE1\u5FE2\u5FE3\u5FE4"+
+            "\u5FE5\u5FE6\u5FE7\u5FE8\u5FE9\u5FEA\u5FEB\u5FEC"+
+            "\u5FED\u5FEE\u5FEF\u5FF0\u5FF1\u5FF2\u5FF3\u5FF4"+
+            "\u5FF5\u5FF6\u5FF7\u5FF8\u5FF9\u5FFA\u5FFB\u5FFC"+
+            "\u5FFD\u5FFE\u5FFF\u6000\u6001\u6002\u6003\u6004"+
+            "\u6005\u6006\u6007\u6008\u6009\u600A\u600B\u600C"+
+            "\u600D\u600E\u600F\u6010\u6011\u6012\u6013\u6014"+
+            "\u6015\u6016\u6017\u6018\u6019\u601A\u601B\u601C"+
+            "\u601D\u601E\u601F\u6020\u6021\u6022\u6023\u6024"+
+            "\u6025\u6026\u6027\u6028\u6029\u602A\u602B\u602C"+
+            "\u602D\u602E\u602F\u6030\u6031\u6032\u6033\u6034"+
+            "\u6035\u6036\u6037\u6038\u6039\u603A\u603B\u603C"+
+            "\u603D\u603E\u603F\u6040\u6041\u6042\u6043\u6044"+
+            "\u6045\u6046\u6047\u6048\u6049\u604A\u604B\u604C"+
+            "\u604D\u604E\u604F\u6050\u6051\u6052\u6053\u6054"+
+            "\u6055\u6056\u6057\u6058\u6059\u605A\u605B\u605C"+
+            "\u605D\u605E\u605F\u6060\u6061\u6062\u6063\u6064"+
+            "\u6065\u6066\u6067\u6068\u6069\u606A\u606B\u606C"+
+            "\u606D\u606E\u606F\u6070\u6071\u6072\u6073\u6074"+
+            "\u6075\u6076\u6077\u6078\u6079\u607A\u607B\u607C"+
+            "\u607D\u607E\u607F\u6080\u6081\u6082\u6083\u6084"+
+            "\u6085\u6086\u6087\u6088\u6089\u608A\u608B\u608C"+
+            "\u608D\u608E\u608F\u6090\u6091\u6092\u6093\u6094"+
+            "\u6095\u6096\u6097\u6098\u6099\u609A\u609B\u609C"+
+            "\u609D\u609E\u609F\u60A0\u60A1\u60A2\u60A3\u60A4"+
+            "\u60A5\u60A6\u60A7\u60A8\u60A9\u60AA\u60AB\u60AC"+
+            "\u60AD\u60AE\u60AF\u60B0\u60B1\u60B2\u60B3\u60B4"+
+            "\u60B5\u60B6\u60B7\u60B8\u60B9\u60BA\u60BB\u60BC"+
+            "\u60BD\u60BE\u60BF\u60C0\u60C1\u60C2\u60C3\u60C4"+
+            "\u60C5\u60C6\u60C7\u60C8\u60C9\u60CA\u60CB\u60CC"+
+            "\u60CD\u60CE\u60CF\u60D0\u60D1\u60D2\u60D3\u60D4"+
+            "\u60D5\u60D6\u60D7\u60D8\u60D9\u60DA\u60DB\u60DC"+
+            "\u60DD\u60DE\u60DF\u60E0\u60E1\u60E2\u60E3\u60E4"+
+            "\u60E5\u60E6\u60E7\u60E8\u60E9\u60EA\u60EB\u60EC"+
+            "\u60ED\u60EE\u60EF\u60F0\u60F1\u60F2\u60F3\u60F4"+
+            "\u60F5\u60F6\u60F7\u60F8\u60F9\u60FA\u60FB\u60FC"+
+            "\u60FD\u60FE\u60FF\u6100\u6101\u6102\u6103\u6104"+
+            "\u6105\u6106\u6107\u6108\u6109\u610A\u610B\u610C"+
+            "\u610D\u610E\u610F\u6110\u6111\u6112\u6113\u6114"+
+            "\u6115\u6116\u6117\u6118\u6119\u611A\u611B\u611C"+
+            "\u611D\u611E\u611F\u6120\u6121\u6122\u6123\u6124"+
+            "\u6125\u6126\u6127\u6128\u6129\u612A\u612B\u612C"+
+            "\u612D\u612E\u612F\u6130\u6131\u6132\u6133\u6134"+
+            "\u6135\u6136\u6137\u6138\u6139\u613A\u613B\u613C"+
+            "\u613D\u613E\u613F\u6140\u6141\u6142\u6143\u6144"+
+            "\u6145\u6146\u6147\u6148\u6149\u614A\u614B\u614C"+
+            "\u614D\u614E\u614F\u6150\u6151\u6152\u6153\u6154"+
+            "\u6155\u6156\u6157\u6158\u6159\u615A\u615B\u615C"+
+            "\u615D\u615E\u615F\u6160\u6161\u6162\u6163\u6164"+
+            "\u6165\u6166\u6167\u6168\u6169\u616A\u616B\u616C"+
+            "\u616D\u616E\u616F\u6170\u6171\u6172\u6173\u6174"+
+            "\u6175\u6176\u6177\u6178\u6179\u617A\u617B\u617C"+
+            "\u617D\u617E\u617F\u6180\u6181\u6182\u6183\u6184"+
+            "\u6185\u6186\u6187\u6188\u6189\u618A\u618B\u618C"+
+            "\u618D\u618E\u618F\u6190\u6191\u6192\u6193\u6194"+
+            "\u6195\u6196\u6197\u6198\u6199\u619A\u619B\u619C"+
+            "\u619D\u619E\u619F\u61A0\u61A1\u61A2\u61A3\u61A4"+
+            "\u61A5\u61A6\u61A7\u61A8\u61A9\u61AA\u61AB\u61AC"+
+            "\u61AD\u61AE\u61AF\u61B0\u61B1\u61B2\u61B3\u61B4"+
+            "\u61B5\u61B6\u61B7\u61B8\u61B9\u61BA\u61BB\u61BC"+
+            "\u61BD\u61BE\u61BF\u61C0\u61C1\u61C2\u61C3\u61C4"+
+            "\u61C5\u61C6\u61C7\u61C8\u61C9\u61CA\u61CB\u61CC"+
+            "\u61CD\u61CE\u61CF\u61D0\u61D1\u61D2\u61D3\u61D4"+
+            "\u61D5\u61D6\u61D7\u61D8\u61D9\u61DA\u61DB\u61DC"+
+            "\u61DD\u61DE\u61DF\u61E0\u61E1\u61E2\u61E3\u61E4"+
+            "\u61E5\u61E6\u61E7\u61E8\u61E9\u61EA\u61EB\u61EC"+
+            "\u61ED\u61EE\u61EF\u61F0\u61F1\u61F2\u61F3\u61F4"+
+            "\u61F5\u61F6\u61F7\u61F8\u61F9\u61FA\u61FB\u61FC"+
+            "\u61FD\u61FE\u61FF\u6200\u6201\u6202\u6203\u6204"+
+            "\u6205\u6206\u6207\u6208\u6209\u620A\u620B\u620C"+
+            "\u620D\u620E\u620F\u6210\u6211\u6212\u6213\u6214"+
+            "\u6215\u6216\u6217\u6218\u6219\u621A\u621B\u621C"+
+            "\u621D\u621E\u621F\u6220\u6221\u6222\u6223\u6224"+
+            "\u6225\u6226\u6227\u6228\u6229\u622A\u622B\u622C"+
+            "\u622D\u622E\u622F\u6230\u6231\u6232\u6233\u6234"+
+            "\u6235\u6236\u6237\u6238\u6239\u623A\u623B\u623C"+
+            "\u623D\u623E\u623F\u6240\u6241\u6242\u6243\u6244"+
+            "\u6245\u6246\u6247\u6248\u6249\u624A\u624B\u624C"+
+            "\u624D\u624E\u624F\u6250\u6251\u6252\u6253\u6254"+
+            "\u6255\u6256\u6257\u6258\u6259\u625A\u625B\u625C"+
+            "\u625D\u625E\u625F\u6260\u6261\u6262\u6263\u6264"+
+            "\u6265\u6266\u6267\u6268\u6269\u626A\u626B\u626C"+
+            "\u626D\u626E\u626F\u6270\u6271\u6272\u6273\u6274"+
+            "\u6275\u6276\u6277\u6278\u6279\u627A\u627B\u627C"+
+            "\u627D\u627E\u627F\u6280\u6281\u6282\u6283\u6284"+
+            "\u6285\u6286\u6287\u6288\u6289\u628A\u628B\u628C"+
+            "\u628D\u628E\u628F\u6290\u6291\u6292\u6293\u6294"+
+            "\u6295\u6296\u6297\u6298\u6299\u629A\u629B\u629C"+
+            "\u629D\u629E\u629F\u62A0\u62A1\u62A2\u62A3\u62A4"+
+            "\u62A5\u62A6\u62A7\u62A8\u62A9\u62AA\u62AB\u62AC"+
+            "\u62AD\u62AE\u62AF\u62B0\u62B1\u62B2\u62B3\u62B4"+
+            "\u62B5\u62B6\u62B7\u62B8\u62B9\u62BA\u62BB\u62BC"+
+            "\u62BD\u62BE\u62BF\u62C0\u62C1\u62C2\u62C3\u62C4"+
+            "\u62C5\u62C6\u62C7\u62C8\u62C9\u62CA\u62CB\u62CC"+
+            "\u62CD\u62CE\u62CF\u62D0\u62D1\u62D2\u62D3\u62D4"+
+            "\u62D5\u62D6\u62D7\u62D8\u62D9\u62DA\u62DB\u62DC"+
+            "\u62DD\u62DE\u62DF\u62E0\u62E1\u62E2\u62E3\u62E4"+
+            "\u62E5\u62E6\u62E7\u62E8\u62E9\u62EA\u62EB\u62EC"+
+            "\u62ED\u62EE\u62EF\u62F0\u62F1\u62F2\u62F3\u62F4"+
+            "\u62F5\u62F6\u62F7\u62F8\u62F9\u62FA\u62FB\u62FC"+
+            "\u62FD\u62FE\u62FF\u6300\u6301\u6302\u6303\u6304"+
+            "\u6305\u6306\u6307\u6308\u6309\u630A\u630B\u630C"+
+            "\u630D\u630E\u630F\u6310\u6311\u6312\u6313\u6314"+
+            "\u6315\u6316\u6317\u6318\u6319\u631A\u631B\u631C"+
+            "\u631D\u631E\u631F\u6320\u6321\u6322\u6323\u6324"+
+            "\u6325\u6326\u6327\u6328\u6329\u632A\u632B\u632C"+
+            "\u632D\u632E\u632F\u6330\u6331\u6332\u6333\u6334"+
+            "\u6335\u6336\u6337\u6338\u6339\u633A\u633B\u633C"+
+            "\u633D\u633E\u633F\u6340\u6341\u6342\u6343\u6344"+
+            "\u6345\u6346\u6347\u6348\u6349\u634A\u634B\u634C"+
+            "\u634D\u634E\u634F\u6350\u6351\u6352\u6353\u6354"+
+            "\u6355\u6356\u6357\u6358\u6359\u635A\u635B\u635C"+
+            "\u635D\u635E\u635F\u6360\u6361\u6362\u6363\u6364"+
+            "\u6365\u6366\u6367\u6368\u6369\u636A\u636B\u636C"+
+            "\u636D\u636E\u636F\u6370\u6371\u6372\u6373\u6374"+
+            "\u6375\u6376\u6377\u6378\u6379\u637A\u637B\u637C"+
+            "\u637D\u637E\u637F\u6380\u6381\u6382\u6383\u6384"+
+            "\u6385\u6386\u6387\u6388\u6389\u638A\u638B\u638C"+
+            "\u638D\u638E\u638F\u6390\u6391\u6392\u6393\u6394"+
+            "\u6395\u6396\u6397\u6398\u6399\u639A\u639B\u639C"+
+            "\u639D\u639E\u639F\u63A0\u63A1\u63A2\u63A3\u63A4"+
+            "\u63A5\u63A6\u63A7\u63A8\u63A9\u63AA\u63AB\u63AC"+
+            "\u63AD\u63AE\u63AF\u63B0\u63B1\u63B2\u63B3\u63B4"+
+            "\u63B5\u63B6\u63B7\u63B8\u63B9\u63BA\u63BB\u63BC"+
+            "\u63BD\u63BE\u63BF\u63C0\u63C1\u63C2\u63C3\u63C4"+
+            "\u63C5\u63C6\u63C7\u63C8\u63C9\u63CA\u63CB\u63CC"+
+            "\u63CD\u63CE\u63CF\u63D0\u63D1\u63D2\u63D3\u63D4"+
+            "\u63D5\u63D6\u63D7\u63D8\u63D9\u63DA\u63DB\u63DC"+
+            "\u63DD\u63DE\u63DF\u63E0\u63E1\u63E2\u63E3\u63E4"+
+            "\u63E5\u63E6\u63E7\u63E8\u63E9\u63EA\u63EB\u63EC"+
+            "\u63ED\u63EE\u63EF\u63F0\u63F1\u63F2\u63F3\u63F4"+
+            "\u63F5\u63F6\u63F7\u63F8\u63F9\u63FA\u63FB\u63FC"+
+            "\u63FD\u63FE\u63FF\u6400\u6401\u6402\u6403\u6404"+
+            "\u6405\u6406\u6407\u6408\u6409\u640A\u640B\u640C"+
+            "\u640D\u640E\u640F\u6410\u6411\u6412\u6413\u6414"+
+            "\u6415\u6416\u6417\u6418\u6419\u641A\u641B\u641C"+
+            "\u641D\u641E\u641F\u6420\u6421\u6422\u6423\u6424"+
+            "\u6425\u6426\u6427\u6428\u6429\u642A\u642B\u642C"+
+            "\u642D\u642E\u642F\u6430\u6431\u6432\u6433\u6434"+
+            "\u6435\u6436\u6437\u6438\u6439\u643A\u643B\u643C"+
+            "\u643D\u643E\u643F\u6440\u6441\u6442\u6443\u6444"+
+            "\u6445\u6446\u6447\u6448\u6449\u644A\u644B\u644C"+
+            "\u644D\u644E\u644F\u6450\u6451\u6452\u6453\u6454"+
+            "\u6455\u6456\u6457\u6458\u6459\u645A\u645B\u645C"+
+            "\u645D\u645E\u645F\u6460\u6461\u6462\u6463\u6464"+
+            "\u6465\u6466\u6467\u6468\u6469\u646A\u646B\u646C"+
+            "\u646D\u646E\u646F\u6470\u6471\u6472\u6473\u6474"+
+            "\u6475\u6476\u6477\u6478\u6479\u647A\u647B\u647C"+
+            "\u647D\u647E\u647F\u6480\u6481\u6482\u6483\u6484"+
+            "\u6485\u6486\u6487\u6488\u6489\u648A\u648B\u648C"+
+            "\u648D\u648E\u648F\u6490\u6491\u6492\u6493\u6494"+
+            "\u6495\u6496\u6497\u6498\u6499\u649A\u649B\u649C"+
+            "\u649D\u649E\u649F\u64A0\u64A1\u64A2\u64A3\u64A4"+
+            "\u64A5\u64A6\u64A7\u64A8\u64A9\u64AA\u64AB\u64AC"+
+            "\u64AD\u64AE\u64AF\u64B0\u64B1\u64B2\u64B3\u64B4"+
+            "\u64B5\u64B6\u64B7\u64B8\u64B9\u64BA\u64BB\u64BC"+
+            "\u64BD\u64BE\u64BF\u64C0\u64C1\u64C2\u64C3\u64C4"+
+            "\u64C5\u64C6\u64C7\u64C8\u64C9\u64CA\u64CB\u64CC"+
+            "\u64CD\u64CE\u64CF\u64D0\u64D1\u64D2\u64D3\u64D4"+
+            "\u64D5\u64D6\u64D7\u64D8\u64D9\u64DA\u64DB\u64DC"+
+            "\u64DD\u64DE\u64DF\u64E0\u64E1\u64E2\u64E3\u64E4"+
+            "\u64E5\u64E6\u64E7\u64E8\u64E9\u64EA\u64EB\u64EC"+
+            "\u64ED\u64EE\u64EF\u64F0\u64F1\u64F2\u64F3\u64F4"+
+            "\u64F5\u64F6\u64F7\u64F8\u64F9\u64FA\u64FB\u64FC"+
+            "\u64FD\u64FE\u64FF\u6500\u6501\u6502\u6503\u6504"+
+            "\u6505\u6506\u6507\u6508\u6509\u650A\u650B\u650C"+
+            "\u650D\u650E\u650F\u6510\u6511\u6512\u6513\u6514"+
+            "\u6515\u6516\u6517\u6518\u6519\u651A\u651B\u651C"+
+            "\u651D\u651E\u651F\u6520\u6521\u6522\u6523\u6524"+
+            "\u6525\u6526\u6527\u6528\u6529\u652A\u652B\u652C"+
+            "\u652D\u652E\u652F\u6530\u6531\u6532\u6533\u6534"+
+            "\u6535\u6536\u6537\u6538\u6539\u653A\u653B\u653C"+
+            "\u653D\u653E\u653F\u6540\u6541\u6542\u6543\u6544"+
+            "\u6545\u6546\u6547\u6548\u6549\u654A\u654B\u654C"+
+            "\u654D\u654E\u654F\u6550\u6551\u6552\u6553\u6554"+
+            "\u6555\u6556\u6557\u6558\u6559\u655A\u655B\u655C"+
+            "\u655D\u655E\u655F\u6560\u6561\u6562\u6563\u6564"+
+            "\u6565\u6566\u6567\u6568\u6569\u656A\u656B\u656C"+
+            "\u656D\u656E\u656F\u6570\u6571\u6572\u6573\u6574"+
+            "\u6575\u6576\u6577\u6578\u6579\u657A\u657B\u657C"+
+            "\u657D\u657E\u657F\u6580\u6581\u6582\u6583\u6584"+
+            "\u6585\u6586\u6587\u6588\u6589\u658A\u658B\u658C"+
+            "\u658D\u658E\u658F\u6590\u6591\u6592\u6593\u6594"+
+            "\u6595\u6596\u6597\u6598\u6599\u659A\u659B\u659C"+
+            "\u659D\u659E\u659F\u65A0\u65A1\u65A2\u65A3\u65A4"+
+            "\u65A5\u65A6\u65A7\u65A8\u65A9\u65AA\u65AB\u65AC"+
+            "\u65AD\u65AE\u65AF\u65B0\u65B1\u65B2\u65B3\u65B4"+
+            "\u65B5\u65B6\u65B7\u65B8\u65B9\u65BA\u65BB\u65BC"+
+            "\u65BD\u65BE\u65BF\u65C0\u65C1\u65C2\u65C3\u65C4"+
+            "\u65C5\u65C6\u65C7\u65C8\u65C9\u65CA\u65CB\u65CC"+
+            "\u65CD\u65CE\u65CF\u65D0\u65D1\u65D2\u65D3\u65D4"+
+            "\u65D5\u65D6\u65D7\u65D8\u65D9\u65DA\u65DB\u65DC"+
+            "\u65DD\u65DE\u65DF\u65E0\u65E1\u65E2\u65E3\u65E4"+
+            "\u65E5\u65E6\u65E7\u65E8\u65E9\u65EA\u65EB\u65EC"+
+            "\u65ED\u65EE\u65EF\u65F0\u65F1\u65F2\u65F3\u65F4"+
+            "\u65F5\u65F6\u65F7\u65F8\u65F9\u65FA\u65FB\u65FC"+
+            "\u65FD\u65FE\u65FF\u6600\u6601\u6602\u6603\u6604"+
+            "\u6605\u6606\u6607\u6608\u6609\u660A\u660B\u660C"+
+            "\u660D\u660E\u660F\u6610\u6611\u6612\u6613\u6614"+
+            "\u6615\u6616\u6617\u6618\u6619\u661A\u661B\u661C"+
+            "\u661D\u661E\u661F\u6620\u6621\u6622\u6623\u6624"+
+            "\u6625\u6626\u6627\u6628\u6629\u662A\u662B\u662C"+
+            "\u662D\u662E\u662F\u6630\u6631\u6632\u6633\u6634"+
+            "\u6635\u6636\u6637\u6638\u6639\u663A\u663B\u663C"+
+            "\u663D\u663E\u663F\u6640\u6641\u6642\u6643\u6644"+
+            "\u6645\u6646\u6647\u6648\u6649\u664A\u664B\u664C"+
+            "\u664D\u664E\u664F\u6650\u6651\u6652\u6653\u6654"+
+            "\u6655\u6656\u6657\u6658\u6659\u665A\u665B\u665C"+
+            "\u665D\u665E\u665F\u6660\u6661\u6662\u6663\u6664"+
+            "\u6665\u6666\u6667\u6668\u6669\u666A\u666B\u666C"+
+            "\u666D\u666E\u666F\u6670\u6671\u6672\u6673\u6674"+
+            "\u6675\u6676\u6677\u6678\u6679\u667A\u667B\u667C"+
+            "\u667D\u667E\u667F\u6680\u6681\u6682\u6683\u6684"+
+            "\u6685\u6686\u6687\u6688\u6689\u668A\u668B\u668C"+
+            "\u668D\u668E\u668F\u6690\u6691\u6692\u6693\u6694"+
+            "\u6695\u6696\u6697\u6698\u6699\u669A\u669B\u669C"+
+            "\u669D\u669E\u669F\u66A0\u66A1\u66A2\u66A3\u66A4"+
+            "\u66A5\u66A6\u66A7\u66A8\u66A9\u66AA\u66AB\u66AC"+
+            "\u66AD\u66AE\u66AF\u66B0\u66B1\u66B2\u66B3\u66B4"+
+            "\u66B5\u66B6\u66B7\u66B8\u66B9\u66BA\u66BB\u66BC"+
+            "\u66BD\u66BE\u66BF\u66C0\u66C1\u66C2\u66C3\u66C4"+
+            "\u66C5\u66C6\u66C7\u66C8\u66C9\u66CA\u66CB\u66CC"+
+            "\u66CD\u66CE\u66CF\u66D0\u66D1\u66D2\u66D3\u66D4"+
+            "\u66D5\u66D6\u66D7\u66D8\u66D9\u66DA\u66DB\u66DC"+
+            "\u66DD\u66DE\u66DF\u66E0\u66E1\u66E2\u66E3\u66E4"+
+            "\u66E5\u66E6\u66E7\u66E8\u66E9\u66EA\u66EB\u66EC"+
+            "\u66ED\u66EE\u66EF\u66F0\u66F1\u66F2\u66F3\u66F4"+
+            "\u66F5\u66F6\u66F7\u66F8\u66F9\u66FA\u66FB\u66FC"+
+            "\u66FD\u66FE\u66FF\u6700\u6701\u6702\u6703\u6704"+
+            "\u6705\u6706\u6707\u6708\u6709\u670A\u670B\u670C"+
+            "\u670D\u670E\u670F\u6710\u6711\u6712\u6713\u6714"+
+            "\u6715\u6716\u6717\u6718\u6719\u671A\u671B\u671C"+
+            "\u671D\u671E\u671F\u6720\u6721\u6722\u6723\u6724"+
+            "\u6725\u6726\u6727\u6728\u6729\u672A\u672B\u672C"+
+            "\u672D\u672E\u672F\u6730\u6731\u6732\u6733\u6734"+
+            "\u6735\u6736\u6737\u6738\u6739\u673A\u673B\u673C"+
+            "\u673D\u673E\u673F\u6740\u6741\u6742\u6743\u6744"+
+            "\u6745\u6746\u6747\u6748\u6749\u674A\u674B\u674C"+
+            "\u674D\u674E\u674F\u6750\u6751\u6752\u6753\u6754"+
+            "\u6755\u6756\u6757\u6758\u6759\u675A\u675B\u675C"+
+            "\u675D\u675E\u675F\u6760\u6761\u6762\u6763\u6764"+
+            "\u6765\u6766\u6767\u6768\u6769\u676A\u676B\u676C"+
+            "\u676D\u676E\u676F\u6770\u6771\u6772\u6773\u6774"+
+            "\u6775\u6776\u6777\u6778\u6779\u677A\u677B\u677C"+
+            "\u677D\u677E\u677F\u6780\u6781\u6782\u6783\u6784"+
+            "\u6785\u6786\u6787\u6788\u6789\u678A\u678B\u678C"+
+            "\u678D\u678E\u678F\u6790\u6791\u6792\u6793\u6794"+
+            "\u6795\u6796\u6797\u6798\u6799\u679A\u679B\u679C"+
+            "\u679D\u679E\u679F\u67A0\u67A1\u67A2\u67A3\u67A4"+
+            "\u67A5\u67A6\u67A7\u67A8\u67A9\u67AA\u67AB\u67AC"+
+            "\u67AD\u67AE\u67AF\u67B0\u67B1\u67B2\u67B3\u67B4"+
+            "\u67B5\u67B6\u67B7\u67B8\u67B9\u67BA\u67BB\u67BC"+
+            "\u67BD\u67BE\u67BF\u67C0\u67C1\u67C2\u67C3\u67C4"+
+            "\u67C5\u67C6\u67C7\u67C8\u67C9\u67CA\u67CB\u67CC"+
+            "\u67CD\u67CE\u67CF\u67D0\u67D1\u67D2\u67D3\u67D4"+
+            "\u67D5\u67D6\u67D7\u67D8\u67D9\u67DA\u67DB\u67DC"+
+            "\u67DD\u67DE\u67DF\u67E0\u67E1\u67E2\u67E3\u67E4"+
+            "\u67E5\u67E6\u67E7\u67E8\u67E9\u67EA\u67EB\u67EC"+
+            "\u67ED\u67EE\u67EF\u67F0\u67F1\u67F2\u67F3\u67F4"+
+            "\u67F5\u67F6\u67F7\u67F8\u67F9\u67FA\u67FB\u67FC"+
+            "\u67FD\u67FE\u67FF\u6800\u6801\u6802\u6803\u6804"+
+            "\u6805\u6806\u6807\u6808\u6809\u680A\u680B\u680C"+
+            "\u680D\u680E\u680F\u6810\u6811\u6812\u6813\u6814"+
+            "\u6815\u6816\u6817\u6818\u6819\u681A\u681B\u681C"+
+            "\u681D\u681E\u681F\u6820\u6821\u6822\u6823\u6824"+
+            "\u6825\u6826\u6827\u6828\u6829\u682A\u682B\u682C"+
+            "\u682D\u682E\u682F\u6830\u6831\u6832\u6833\u6834"+
+            "\u6835\u6836\u6837\u6838\u6839\u683A\u683B\u683C"+
+            "\u683D\u683E\u683F\u6840\u6841\u6842\u6843\u6844"+
+            "\u6845\u6846\u6847\u6848\u6849\u684A\u684B\u684C"+
+            "\u684D\u684E\u684F\u6850\u6851\u6852\u6853\u6854"+
+            "\u6855\u6856\u6857\u6858\u6859\u685A\u685B\u685C"+
+            "\u685D\u685E\u685F\u6860\u6861\u6862\u6863\u6864"+
+            "\u6865\u6866\u6867\u6868\u6869\u686A\u686B\u686C"+
+            "\u686D\u686E\u686F\u6870\u6871\u6872\u6873\u6874"+
+            "\u6875\u6876\u6877\u6878\u6879\u687A\u687B\u687C"+
+            "\u687D\u687E\u687F\u6880\u6881\u6882\u6883\u6884"+
+            "\u6885\u6886\u6887\u6888\u6889\u688A\u688B\u688C"+
+            "\u688D\u688E\u688F\u6890\u6891\u6892\u6893\u6894"+
+            "\u6895\u6896\u6897\u6898\u6899\u689A\u689B\u689C"+
+            "\u689D\u689E\u689F\u68A0\u68A1\u68A2\u68A3\u68A4"+
+            "\u68A5\u68A6\u68A7\u68A8\u68A9\u68AA\u68AB\u68AC"+
+            "\u68AD\u68AE\u68AF\u68B0\u68B1\u68B2\u68B3\u68B4"+
+            "\u68B5\u68B6\u68B7\u68B8\u68B9\u68BA\u68BB\u68BC"+
+            "\u68BD\u68BE\u68BF\u68C0\u68C1\u68C2\u68C3\u68C4"+
+            "\u68C5\u68C6\u68C7\u68C8\u68C9\u68CA\u68CB\u68CC"+
+            "\u68CD\u68CE\u68CF\u68D0\u68D1\u68D2\u68D3\u68D4"+
+            "\u68D5\u68D6\u68D7\u68D8\u68D9\u68DA\u68DB\u68DC"+
+            "\u68DD\u68DE\u68DF\u68E0\u68E1\u68E2\u68E3\u68E4"+
+            "\u68E5\u68E6\u68E7\u68E8\u68E9\u68EA\u68EB\u68EC"+
+            "\u68ED\u68EE\u68EF\u68F0\u68F1\u68F2\u68F3\u68F4"+
+            "\u68F5\u68F6\u68F7\u68F8\u68F9\u68FA\u68FB\u68FC"+
+            "\u68FD\u68FE\u68FF\u6900\u6901\u6902\u6903\u6904"+
+            "\u6905\u6906\u6907\u6908\u6909\u690A\u690B\u690C"+
+            "\u690D\u690E\u690F\u6910\u6911\u6912\u6913\u6914"+
+            "\u6915\u6916\u6917\u6918\u6919\u691A\u691B\u691C"+
+            "\u691D\u691E\u691F\u6920\u6921\u6922\u6923\u6924"+
+            "\u6925\u6926\u6927\u6928\u6929\u692A\u692B\u692C"+
+            "\u692D\u692E\u692F\u6930\u6931\u6932\u6933\u6934"+
+            "\u6935\u6936\u6937\u6938\u6939\u693A\u693B\u693C"+
+            "\u693D\u693E\u693F\u6940\u6941\u6942\u6943\u6944"+
+            "\u6945\u6946\u6947\u6948\u6949\u694A\u694B\u694C"+
+            "\u694D\u694E\u694F\u6950\u6951\u6952\u6953\u6954"+
+            "\u6955\u6956\u6957\u6958\u6959\u695A\u695B\u695C"+
+            "\u695D\u695E\u695F\u6960\u6961\u6962\u6963\u6964"+
+            "\u6965\u6966\u6967\u6968\u6969\u696A\u696B\u696C"+
+            "\u696D\u696E\u696F\u6970\u6971\u6972\u6973\u6974"+
+            "\u6975\u6976\u6977\u6978\u6979\u697A\u697B\u697C"+
+            "\u697D\u697E\u697F\u6980\u6981\u6982\u6983\u6984"+
+            "\u6985\u6986\u6987\u6988\u6989\u698A\u698B\u698C"+
+            "\u698D\u698E\u698F\u6990\u6991\u6992\u6993\u6994"+
+            "\u6995\u6996\u6997\u6998\u6999\u699A\u699B\u699C"+
+            "\u699D\u699E\u699F\u69A0\u69A1\u69A2\u69A3\u69A4"+
+            "\u69A5\u69A6\u69A7\u69A8\u69A9\u69AA\u69AB\u69AC"+
+            "\u69AD\u69AE\u69AF\u69B0\u69B1\u69B2\u69B3\u69B4"+
+            "\u69B5\u69B6\u69B7\u69B8\u69B9\u69BA\u69BB\u69BC"+
+            "\u69BD\u69BE\u69BF\u69C0\u69C1\u69C2\u69C3\u69C4"+
+            "\u69C5\u69C6\u69C7\u69C8\u69C9\u69CA\u69CB\u69CC"+
+            "\u69CD\u69CE\u69CF\u69D0\u69D1\u69D2\u69D3\u69D4"+
+            "\u69D5\u69D6\u69D7\u69D8\u69D9\u69DA\u69DB\u69DC"+
+            "\u69DD\u69DE\u69DF\u69E0\u69E1\u69E2\u69E3\u69E4"+
+            "\u69E5\u69E6\u69E7\u69E8\u69E9\u69EA\u69EB\u69EC"+
+            "\u69ED\u69EE\u69EF\u69F0\u69F1\u69F2\u69F3\u69F4"+
+            "\u69F5\u69F6\u69F7\u69F8\u69F9\u69FA\u69FB\u69FC"+
+            "\u69FD\u69FE\u69FF\u6A00\u6A01\u6A02\u6A03\u6A04"+
+            "\u6A05\u6A06\u6A07\u6A08\u6A09\u6A0A\u6A0B\u6A0C"+
+            "\u6A0D\u6A0E\u6A0F\u6A10\u6A11\u6A12\u6A13\u6A14"+
+            "\u6A15\u6A16\u6A17\u6A18\u6A19\u6A1A\u6A1B\u6A1C"+
+            "\u6A1D\u6A1E\u6A1F\u6A20\u6A21\u6A22\u6A23\u6A24"+
+            "\u6A25\u6A26\u6A27\u6A28\u6A29\u6A2A\u6A2B\u6A2C"+
+            "\u6A2D\u6A2E\u6A2F\u6A30\u6A31\u6A32\u6A33\u6A34"+
+            "\u6A35\u6A36\u6A37\u6A38\u6A39\u6A3A\u6A3B\u6A3C"+
+            "\u6A3D\u6A3E\u6A3F\u6A40\u6A41\u6A42\u6A43\u6A44"+
+            "\u6A45\u6A46\u6A47\u6A48\u6A49\u6A4A\u6A4B\u6A4C"+
+            "\u6A4D\u6A4E\u6A4F\u6A50\u6A51\u6A52\u6A53\u6A54"+
+            "\u6A55\u6A56\u6A57\u6A58\u6A59\u6A5A\u6A5B\u6A5C"+
+            "\u6A5D\u6A5E\u6A5F\u6A60\u6A61\u6A62\u6A63\u6A64"+
+            "\u6A65\u6A66\u6A67\u6A68\u6A69\u6A6A\u6A6B\u6A6C"+
+            "\u6A6D\u6A6E\u6A6F\u6A70\u6A71\u6A72\u6A73\u6A74"+
+            "\u6A75\u6A76\u6A77\u6A78\u6A79\u6A7A\u6A7B\u6A7C"+
+            "\u6A7D\u6A7E\u6A7F\u6A80\u6A81\u6A82\u6A83\u6A84"+
+            "\u6A85\u6A86\u6A87\u6A88\u6A89\u6A8A\u6A8B\u6A8C"+
+            "\u6A8D\u6A8E\u6A8F\u6A90\u6A91\u6A92\u6A93\u6A94"+
+            "\u6A95\u6A96\u6A97\u6A98\u6A99\u6A9A\u6A9B\u6A9C"+
+            "\u6A9D\u6A9E\u6A9F\u6AA0\u6AA1\u6AA2\u6AA3\u6AA4"+
+            "\u6AA5\u6AA6\u6AA7\u6AA8\u6AA9\u6AAA\u6AAB\u6AAC"+
+            "\u6AAD\u6AAE\u6AAF\u6AB0\u6AB1\u6AB2\u6AB3\u6AB4"+
+            "\u6AB5\u6AB6\u6AB7\u6AB8\u6AB9\u6ABA\u6ABB\u6ABC";
+
+        private final static String innerIndex7=
+            "\u6ABD\u6ABE\u6ABF\u6AC0\u6AC1\u6AC2\u6AC3\u6AC4"+
+            "\u6AC5\u6AC6\u6AC7\u6AC8\u6AC9\u6ACA\u6ACB\u6ACC"+
+            "\u6ACD\u6ACE\u6ACF\u6AD0\u6AD1\u6AD2\u6AD3\u6AD4"+
+            "\u6AD5\u6AD6\u6AD7\u6AD8\u6AD9\u6ADA\u6ADB\u6ADC"+
+            "\u6ADD\u6ADE\u6ADF\u6AE0\u6AE1\u6AE2\u6AE3\u6AE4"+
+            "\u6AE5\u6AE6\u6AE7\u6AE8\u6AE9\u6AEA\u6AEB\u6AEC"+
+            "\u6AED\u6AEE\u6AEF\u6AF0\u6AF1\u6AF2\u6AF3\u6AF4"+
+            "\u6AF5\u6AF6\u6AF7\u6AF8\u6AF9\u6AFA\u6AFB\u6AFC"+
+            "\u6AFD\u6AFE\u6AFF\u6B00\u6B01\u6B02\u6B03\u6B04"+
+            "\u6B05\u6B06\u6B07\u6B08\u6B09\u6B0A\u6B0B\u6B0C"+
+            "\u6B0D\u6B0E\u6B0F\u6B10\u6B11\u6B12\u6B13\u6B14"+
+            "\u6B15\u6B16\u6B17\u6B18\u6B19\u6B1A\u6B1B\u6B1C"+
+            "\u6B1D\u6B1E\u6B1F\u6B20\u6B21\u6B22\u6B23\u6B24"+
+            "\u6B25\u6B26\u6B27\u6B28\u6B29\u6B2A\u6B2B\u6B2C"+
+            "\u6B2D\u6B2E\u6B2F\u6B30\u6B31\u6B32\u6B33\u6B34"+
+            "\u6B35\u6B36\u6B37\u6B38\u6B39\u6B3A\u6B3B\u6B3C"+
+            "\u6B3D\u6B3E\u6B3F\u6B40\u6B41\u6B42\u6B43\u6B44"+
+            "\u6B45\u6B46\u6B47\u6B48\u6B49\u6B4A\u6B4B\u6B4C"+
+            "\u6B4D\u6B4E\u6B4F\u6B50\u6B51\u6B52\u6B53\u6B54"+
+            "\u6B55\u6B56\u6B57\u6B58\u6B59\u6B5A\u6B5B\u6B5C"+
+            "\u6B5D\u6B5E\u6B5F\u6B60\u6B61\u6B62\u6B63\u6B64"+
+            "\u6B65\u6B66\u6B67\u6B68\u6B69\u6B6A\u6B6B\u6B6C"+
+            "\u6B6D\u6B6E\u6B6F\u6B70\u6B71\u6B72\u6B73\u6B74"+
+            "\u6B75\u6B76\u6B77\u6B78\u6B79\u6B7A\u6B7B\u6B7C"+
+            "\u6B7D\u6B7E\u6B7F\u6B80\u6B81\u6B82\u6B83\u6B84"+
+            "\u6B85\u6B86\u6B87\u6B88\u6B89\u6B8A\u6B8B\u6B8C"+
+            "\u6B8D\u6B8E\u6B8F\u6B90\u6B91\u6B92\u6B93\u6B94"+
+            "\u6B95\u6B96\u6B97\u6B98\u6B99\u6B9A\u6B9B\u6B9C"+
+            "\u6B9D\u6B9E\u6B9F\u6BA0\u6BA1\u6BA2\u6BA3\u6BA4"+
+            "\u6BA5\u6BA6\u6BA7\u6BA8\u6BA9\u6BAA\u6BAB\u6BAC"+
+            "\u6BAD\u6BAE\u6BAF\u6BB0\u6BB1\u6BB2\u6BB3\u6BB4"+
+            "\u6BB5\u6BB6\u6BB7\u6BB8\u6BB9\u6BBA\u6BBB\u6BBC"+
+            "\u6BBD\u6BBE\u6BBF\u6BC0\u6BC1\u6BC2\u6BC3\u6BC4"+
+            "\u6BC5\u6BC6\u6BC7\u6BC8\u6BC9\u6BCA\u6BCB\u6BCC"+
+            "\u6BCD\u6BCE\u6BCF\u6BD0\u6BD1\u6BD2\u6BD3\u6BD4"+
+            "\u6BD5\u6BD6\u6BD7\u6BD8\u6BD9\u6BDA\u6BDB\u6BDC"+
+            "\u6BDD\u6BDE\u6BDF\u6BE0\u6BE1\u6BE2\u6BE3\u6BE4"+
+            "\u6BE5\u6BE6\u6BE7\u6BE8\u6BE9\u6BEA\u6BEB\u6BEC"+
+            "\u6BED\u6BEE\u6BEF\u6BF0\u6BF1\u6BF2\u6BF3\u6BF4"+
+            "\u6BF5\u6BF6\u6BF7\u6BF8\u6BF9\u6BFA\u6BFB\u6BFC"+
+            "\u6BFD\u6BFE\u6BFF\u6C00\u6C01\u6C02\u6C03\u6C04"+
+            "\u6C05\u6C06\u6C07\u6C08\u6C09\u6C0A\u6C0B\u6C0C"+
+            "\u6C0D\u6C0E\u6C0F\u6C10\u6C11\u6C12\u6C13\u6C14"+
+            "\u6C15\u6C16\u6C17\u6C18\u6C19\u6C1A\u6C1B\u6C1C"+
+            "\u6C1D\u6C1E\u6C1F\u6C20\u6C21\u6C22\u6C23\u6C24"+
+            "\u6C25\u6C26\u6C27\u6C28\u6C29\u6C2A\u6C2B\u6C2C"+
+            "\u6C2D\u6C2E\u6C2F\u6C30\u6C31\u6C32\u6C33\u6C34"+
+            "\u6C35\u6C36\u6C37\u6C38\u6C39\u6C3A\u6C3B\u6C3C"+
+            "\u6C3D\u6C3E\u6C3F\u6C40\u6C41\u6C42\u6C43\u6C44"+
+            "\u6C45\u6C46\u6C47\u6C48\u6C49\u6C4A\u6C4B\u6C4C"+
+            "\u6C4D\u6C4E\u6C4F\u6C50\u6C51\u6C52\u6C53\u6C54"+
+            "\u6C55\u6C56\u6C57\u6C58\u6C59\u6C5A\u6C5B\u6C5C"+
+            "\u6C5D\u6C5E\u6C5F\u6C60\u6C61\u6C62\u6C63\u6C64"+
+            "\u6C65\u6C66\u6C67\u6C68\u6C69\u6C6A\u6C6B\u6C6C"+
+            "\u6C6D\u6C6E\u6C6F\u6C70\u6C71\u6C72\u6C73\u6C74"+
+            "\u6C75\u6C76\u6C77\u6C78\u6C79\u6C7A\u6C7B\u6C7C"+
+            "\u6C7D\u6C7E\u6C7F\u6C80\u6C81\u6C82\u6C83\u6C84"+
+            "\u6C85\u6C86\u6C87\u6C88\u6C89\u6C8A\u6C8B\u6C8C"+
+            "\u6C8D\u6C8E\u6C8F\u6C90\u6C91\u6C92\u6C93\u6C94"+
+            "\u6C95\u6C96\u6C97\u6C98\u6C99\u6C9A\u6C9B\u6C9C"+
+            "\u6C9D\u6C9E\u6C9F\u6CA0\u6CA1\u6CA2\u6CA3\u6CA4"+
+            "\u6CA5\u6CA6\u6CA7\u6CA8\u6CA9\u6CAA\u6CAB\u6CAC"+
+            "\u6CAD\u6CAE\u6CAF\u6CB0\u6CB1\u6CB2\u6CB3\u6CB4"+
+            "\u6CB5\u6CB6\u6CB7\u6CB8\u6CB9\u6CBA\u6CBB\u6CBC"+
+            "\u6CBD\u6CBE\u6CBF\u6CC0\u6CC1\u6CC2\u6CC3\u6CC4"+
+            "\u6CC5\u6CC6\u6CC7\u6CC8\u6CC9\u6CCA\u6CCB\u6CCC"+
+            "\u6CCD\u6CCE\u6CCF\u6CD0\u6CD1\u6CD2\u6CD3\u6CD4"+
+            "\u6CD5\u6CD6\u6CD7\u6CD8\u6CD9\u6CDA\u6CDB\u6CDC"+
+            "\u6CDD\u6CDE\u6CDF\u6CE0\u6CE1\u6CE2\u6CE3\u6CE4"+
+            "\u6CE5\u6CE6\u6CE7\u6CE8\u6CE9\u6CEA\u6CEB\u6CEC"+
+            "\u6CED\u6CEE\u6CEF\u6CF0\u6CF1\u6CF2\u6CF3\u6CF4"+
+            "\u6CF5\u6CF6\u6CF7\u6CF8\u6CF9\u6CFA\u6CFB\u6CFC"+
+            "\u6CFD\u6CFE\u6CFF\u6D00\u6D01\u6D02\u6D03\u6D04"+
+            "\u6D05\u6D06\u6D07\u6D08\u6D09\u6D0A\u6D0B\u6D0C"+
+            "\u6D0D\u6D0E\u6D0F\u6D10\u6D11\u6D12\u6D13\u6D14"+
+            "\u6D15\u6D16\u6D17\u6D18\u6D19\u6D1A\u6D1B\u6D1C"+
+            "\u6D1D\u6D1E\u6D1F\u6D20\u6D21\u6D22\u6D23\u6D24"+
+            "\u6D25\u6D26\u6D27\u6D28\u6D29\u6D2A\u6D2B\u6D2C"+
+            "\u6D2D\u6D2E\u6D2F\u6D30\u6D31\u6D32\u6D33\u6D34"+
+            "\u6D35\u6D36\u6D37\u6D38\u6D39\u6D3A\u6D3B\u6D3C"+
+            "\u6D3D\u6D3E\u6D3F\u6D40\u6D41\u6D42\u6D43\u6D44"+
+            "\u6D45\u6D46\u6D47\u6D48\u6D49\u6D4A\u6D4B\u6D4C"+
+            "\u6D4D\u6D4E\u6D4F\u6D50\u6D51\u6D52\u6D53\u6D54"+
+            "\u6D55\u6D56\u6D57\u6D58\u6D59\u6D5A\u6D5B\u6D5C"+
+            "\u6D5D\u6D5E\u6D5F\u6D60\u6D61\u6D62\u6D63\u6D64"+
+            "\u6D65\u6D66\u6D67\u6D68\u6D69\u6D6A\u6D6B\u6D6C"+
+            "\u6D6D\u6D6E\u6D6F\u6D70\u6D71\u6D72\u6D73\u6D74"+
+            "\u6D75\u6D76\u6D77\u6D78\u6D79\u6D7A\u6D7B\u6D7C"+
+            "\u6D7D\u6D7E\u6D7F\u6D80\u6D81\u6D82\u6D83\u6D84"+
+            "\u6D85\u6D86\u6D87\u6D88\u6D89\u6D8A\u6D8B\u6D8C"+
+            "\u6D8D\u6D8E\u6D8F\u6D90\u6D91\u6D92\u6D93\u6D94"+
+            "\u6D95\u6D96\u6D97\u6D98\u6D99\u6D9A\u6D9B\u6D9C"+
+            "\u6D9D\u6D9E\u6D9F\u6DA0\u6DA1\u6DA2\u6DA3\u6DA4"+
+            "\u6DA5\u6DA6\u6DA7\u6DA8\u6DA9\u6DAA\u6DAB\u6DAC"+
+            "\u6DAD\u6DAE\u6DAF\u6DB0\u6DB1\u6DB2\u6DB3\u6DB4"+
+            "\u6DB5\u6DB6\u6DB7\u6DB8\u6DB9\u6DBA\u6DBB\u6DBC"+
+            "\u6DBD\u6DBE\u6DBF\u6DC0\u6DC1\u6DC2\u6DC3\u6DC4"+
+            "\u6DC5\u6DC6\u6DC7\u6DC8\u6DC9\u6DCA\u6DCB\u6DCC"+
+            "\u6DCD\u6DCE\u6DCF\u6DD0\u6DD1\u6DD2\u6DD3\u6DD4"+
+            "\u6DD5\u6DD6\u6DD7\u6DD8\u6DD9\u6DDA\u6DDB\u6DDC"+
+            "\u6DDD\u6DDE\u6DDF\u6DE0\u6DE1\u6DE2\u6DE3\u6DE4"+
+            "\u6DE5\u6DE6\u6DE7\u6DE8\u6DE9\u6DEA\u6DEB\u6DEC"+
+            "\u6DED\u6DEE\u6DEF\u6DF0\u6DF1\u6DF2\u6DF3\u6DF4"+
+            "\u6DF5\u6DF6\u6DF7\u6DF8\u6DF9\u6DFA\u6DFB\u6DFC"+
+            "\u6DFD\u6DFE\u6DFF\u6E00\u6E01\u6E02\u6E03\u6E04"+
+            "\u6E05\u6E06\u6E07\u6E08\u6E09\u6E0A\u6E0B\u6E0C"+
+            "\u6E0D\u6E0E\u6E0F\u6E10\u6E11\u6E12\u6E13\u6E14"+
+            "\u6E15\u6E16\u6E17\u6E18\u6E19\u6E1A\u6E1B\u6E1C"+
+            "\u6E1D\u6E1E\u6E1F\u6E20\u6E21\u6E22\u6E23\u6E24"+
+            "\u6E25\u6E26\u6E27\u6E28\u6E29\u6E2A\u6E2B\u6E2C"+
+            "\u6E2D\u6E2E\u6E2F\u6E30\u6E31\u6E32\u6E33\u6E34"+
+            "\u6E35\u6E36\u6E37\u6E38\u6E39\u6E3A\u6E3B\u6E3C"+
+            "\u6E3D\u6E3E\u6E3F\u6E40\u6E41\u6E42\u6E43\u6E44"+
+            "\u6E45\u6E46\u6E47\u6E48\u6E49\u6E4A\u6E4B\u6E4C"+
+            "\u6E4D\u6E4E\u6E4F\u6E50\u6E51\u6E52\u6E53\u6E54"+
+            "\u6E55\u6E56\u6E57\u6E58\u6E59\u6E5A\u6E5B\u6E5C"+
+            "\u6E5D\u6E5E\u6E5F\u6E60\u6E61\u6E62\u6E63\u6E64"+
+            "\u6E65\u6E66\u6E67\u6E68\u6E69\u6E6A\u6E6B\u6E6C"+
+            "\u6E6D\u6E6E\u6E6F\u6E70\u6E71\u6E72\u6E73\u6E74"+
+            "\u6E75\u6E76\u6E77\u6E78\u6E79\u6E7A\u6E7B\u6E7C"+
+            "\u6E7D\u6E7E\u6E7F\u6E80\u6E81\u6E82\u6E83\u6E84"+
+            "\u6E85\u6E86\u6E87\u6E88\u6E89\u6E8A\u6E8B\u6E8C"+
+            "\u6E8D\u6E8E\u6E8F\u6E90\u6E91\u6E92\u6E93\u6E94"+
+            "\u6E95\u6E96\u6E97\u6E98\u6E99\u6E9A\u6E9B\u6E9C"+
+            "\u6E9D\u6E9E\u6E9F\u6EA0\u6EA1\u6EA2\u6EA3\u6EA4"+
+            "\u6EA5\u6EA6\u6EA7\u6EA8\u6EA9\u6EAA\u6EAB\u6EAC"+
+            "\u6EAD\u6EAE\u6EAF\u6EB0\u6EB1\u6EB2\u6EB3\u6EB4"+
+            "\u6EB5\u6EB6\u6EB7\u6EB8\u6EB9\u6EBA\u6EBB\u6EBC"+
+            "\u6EBD\u6EBE\u6EBF\u6EC0\u6EC1\u6EC2\u6EC3\u6EC4"+
+            "\u6EC5\u6EC6\u6EC7\u6EC8\u6EC9\u6ECA\u6ECB\u6ECC"+
+            "\u6ECD\u6ECE\u6ECF\u6ED0\u6ED1\u6ED2\u6ED3\u6ED4"+
+            "\u6ED5\u6ED6\u6ED7\u6ED8\u6ED9\u6EDA\u6EDB\u6EDC"+
+            "\u6EDD\u6EDE\u6EDF\u6EE0\u6EE1\u6EE2\u6EE3\u6EE4"+
+            "\u6EE5\u6EE6\u6EE7\u6EE8\u6EE9\u6EEA\u6EEB\u6EEC"+
+            "\u6EED\u6EEE\u6EEF\u6EF0\u6EF1\u6EF2\u6EF3\u6EF4"+
+            "\u6EF5\u6EF6\u6EF7\u6EF8\u6EF9\u6EFA\u6EFB\u6EFC"+
+            "\u6EFD\u6EFE\u6EFF\u6F00\u6F01\u6F02\u6F03\u6F04"+
+            "\u6F05\u6F06\u6F07\u6F08\u6F09\u6F0A\u6F0B\u6F0C"+
+            "\u6F0D\u6F0E\u6F0F\u6F10\u6F11\u6F12\u6F13\u6F14"+
+            "\u6F15\u6F16\u6F17\u6F18\u6F19\u6F1A\u6F1B\u6F1C"+
+            "\u6F1D\u6F1E\u6F1F\u6F20\u6F21\u6F22\u6F23\u6F24"+
+            "\u6F25\u6F26\u6F27\u6F28\u6F29\u6F2A\u6F2B\u6F2C"+
+            "\u6F2D\u6F2E\u6F2F\u6F30\u6F31\u6F32\u6F33\u6F34"+
+            "\u6F35\u6F36\u6F37\u6F38\u6F39\u6F3A\u6F3B\u6F3C"+
+            "\u6F3D\u6F3E\u6F3F\u6F40\u6F41\u6F42\u6F43\u6F44"+
+            "\u6F45\u6F46\u6F47\u6F48\u6F49\u6F4A\u6F4B\u6F4C"+
+            "\u6F4D\u6F4E\u6F4F\u6F50\u6F51\u6F52\u6F53\u6F54"+
+            "\u6F55\u6F56\u6F57\u6F58\u6F59\u6F5A\u6F5B\u6F5C"+
+            "\u6F5D\u6F5E\u6F5F\u6F60\u6F61\u6F62\u6F63\u6F64"+
+            "\u6F65\u6F66\u6F67\u6F68\u6F69\u6F6A\u6F6B\u6F6C"+
+            "\u6F6D\u6F6E\u6F6F\u6F70\u6F71\u6F72\u6F73\u6F74"+
+            "\u6F75\u6F76\u6F77\u6F78\u6F79\u6F7A\u6F7B\u6F7C"+
+            "\u6F7D\u6F7E\u6F7F\u6F80\u6F81\u6F82\u6F83\u6F84"+
+            "\u6F85\u6F86\u6F87\u6F88\u6F89\u6F8A\u6F8B\u6F8C"+
+            "\u6F8D\u6F8E\u6F8F\u6F90\u6F91\u6F92\u6F93\u6F94"+
+            "\u6F95\u6F96\u6F97\u6F98\u6F99\u6F9A\u6F9B\u6F9C"+
+            "\u6F9D\u6F9E\u6F9F\u6FA0\u6FA1\u6FA2\u6FA3\u6FA4"+
+            "\u6FA5\u6FA6\u6FA7\u6FA8\u6FA9\u6FAA\u6FAB\u6FAC"+
+            "\u6FAD\u6FAE\u6FAF\u6FB0\u6FB1\u6FB2\u6FB3\u6FB4"+
+            "\u6FB5\u6FB6\u6FB7\u6FB8\u6FB9\u6FBA\u6FBB\u6FBC"+
+            "\u6FBD\u6FBE\u6FBF\u6FC0\u6FC1\u6FC2\u6FC3\u6FC4"+
+            "\u6FC5\u6FC6\u6FC7\u6FC8\u6FC9\u6FCA\u6FCB\u6FCC"+
+            "\u6FCD\u6FCE\u6FCF\u6FD0\u6FD1\u6FD2\u6FD3\u6FD4"+
+            "\u6FD5\u6FD6\u6FD7\u6FD8\u6FD9\u6FDA\u6FDB\u6FDC"+
+            "\u6FDD\u6FDE\u6FDF\u6FE0\u6FE1\u6FE2\u6FE3\u6FE4"+
+            "\u6FE5\u6FE6\u6FE7\u6FE8\u6FE9\u6FEA\u6FEB\u6FEC"+
+            "\u6FED\u6FEE\u6FEF\u6FF0\u6FF1\u6FF2\u6FF3\u6FF4"+
+            "\u6FF5\u6FF6\u6FF7\u6FF8\u6FF9\u6FFA\u6FFB\u6FFC"+
+            "\u6FFD\u6FFE\u6FFF\u7000\u7001\u7002\u7003\u7004"+
+            "\u7005\u7006\u7007\u7008\u7009\u700A\u700B\u700C"+
+            "\u700D\u700E\u700F\u7010\u7011\u7012\u7013\u7014"+
+            "\u7015\u7016\u7017\u7018\u7019\u701A\u701B\u701C"+
+            "\u701D\u701E\u701F\u7020\u7021\u7022\u7023\u7024"+
+            "\u7025\u7026\u7027\u7028\u7029\u702A\u702B\u702C"+
+            "\u702D\u702E\u702F\u7030\u7031\u7032\u7033\u7034"+
+            "\u7035\u7036\u7037\u7038\u7039\u703A\u703B\u703C"+
+            "\u703D\u703E\u703F\u7040\u7041\u7042\u7043\u7044"+
+            "\u7045\u7046\u7047\u7048\u7049\u704A\u704B\u704C"+
+            "\u704D\u704E\u704F\u7050\u7051\u7052\u7053\u7054"+
+            "\u7055\u7056\u7057\u7058\u7059\u705A\u705B\u705C"+
+            "\u705D\u705E\u705F\u7060\u7061\u7062\u7063\u7064"+
+            "\u7065\u7066\u7067\u7068\u7069\u706A\u706B\u706C"+
+            "\u706D\u706E\u706F\u7070\u7071\u7072\u7073\u7074"+
+            "\u7075\u7076\u7077\u7078\u7079\u707A\u707B\u707C"+
+            "\u707D\u707E\u707F\u7080\u7081\u7082\u7083\u7084"+
+            "\u7085\u7086\u7087\u7088\u7089\u708A\u708B\u708C"+
+            "\u708D\u708E\u708F\u7090\u7091\u7092\u7093\u7094"+
+            "\u7095\u7096\u7097\u7098\u7099\u709A\u709B\u709C"+
+            "\u709D\u709E\u709F\u70A0\u70A1\u70A2\u70A3\u70A4"+
+            "\u70A5\u70A6\u70A7\u70A8\u70A9\u70AA\u70AB\u70AC"+
+            "\u70AD\u70AE\u70AF\u70B0\u70B1\u70B2\u70B3\u70B4"+
+            "\u70B5\u70B6\u70B7\u70B8\u70B9\u70BA\u70BB\u70BC"+
+            "\u70BD\u70BE\u70BF\u70C0\u70C1\u70C2\u70C3\u70C4"+
+            "\u70C5\u70C6\u70C7\u70C8\u70C9\u70CA\u70CB\u70CC"+
+            "\u70CD\u70CE\u70CF\u70D0\u70D1\u70D2\u70D3\u70D4"+
+            "\u70D5\u70D6\u70D7\u70D8\u70D9\u70DA\u70DB\u70DC"+
+            "\u70DD\u70DE\u70DF\u70E0\u70E1\u70E2\u70E3\u70E4"+
+            "\u70E5\u70E6\u70E7\u70E8\u70E9\u70EA\u70EB\u70EC"+
+            "\u70ED\u70EE\u70EF\u70F0\u70F1\u70F2\u70F3\u70F4"+
+            "\u70F5\u70F6\u70F7\u70F8\u70F9\u70FA\u70FB\u70FC"+
+            "\u70FD\u70FE\u70FF\u7100\u7101\u7102\u7103\u7104"+
+            "\u7105\u7106\u7107\u7108\u7109\u710A\u710B\u710C"+
+            "\u710D\u710E\u710F\u7110\u7111\u7112\u7113\u7114"+
+            "\u7115\u7116\u7117\u7118\u7119\u711A\u711B\u711C"+
+            "\u711D\u711E\u711F\u7120\u7121\u7122\u7123\u7124"+
+            "\u7125\u7126\u7127\u7128\u7129\u712A\u712B\u712C"+
+            "\u712D\u712E\u712F\u7130\u7131\u7132\u7133\u7134"+
+            "\u7135\u7136\u7137\u7138\u7139\u713A\u713B\u713C"+
+            "\u713D\u713E\u713F\u7140\u7141\u7142\u7143\u7144"+
+            "\u7145\u7146\u7147\u7148\u7149\u714A\u714B\u714C"+
+            "\u714D\u714E\u714F\u7150\u7151\u7152\u7153\u7154"+
+            "\u7155\u7156\u7157\u7158\u7159\u715A\u715B\u715C"+
+            "\u715D\u715E\u715F\u7160\u7161\u7162\u7163\u7164"+
+            "\u7165\u7166\u7167\u7168\u7169\u716A\u716B\u716C"+
+            "\u716D\u716E\u716F\u7170\u7171\u7172\u7173\u7174"+
+            "\u7175\u7176\u7177\u7178\u7179\u717A\u717B\u717C"+
+            "\u717D\u717E\u717F\u7180\u7181\u7182\u7183\u7184"+
+            "\u7185\u7186\u7187\u7188\u7189\u718A\u718B\u718C"+
+            "\u718D\u718E\u718F\u7190\u7191\u7192\u7193\u7194"+
+            "\u7195\u7196\u7197\u7198\u7199\u719A\u719B\u719C"+
+            "\u719D\u719E\u719F\u71A0\u71A1\u71A2\u71A3\u71A4"+
+            "\u71A5\u71A6\u71A7\u71A8\u71A9\u71AA\u71AB\u71AC"+
+            "\u71AD\u71AE\u71AF\u71B0\u71B1\u71B2\u71B3\u71B4"+
+            "\u71B5\u71B6\u71B7\u71B8\u71B9\u71BA\u71BB\u71BC"+
+            "\u71BD\u71BE\u71BF\u71C0\u71C1\u71C2\u71C3\u71C4"+
+            "\u71C5\u71C6\u71C7\u71C8\u71C9\u71CA\u71CB\u71CC"+
+            "\u71CD\u71CE\u71CF\u71D0\u71D1\u71D2\u71D3\u71D4"+
+            "\u71D5\u71D6\u71D7\u71D8\u71D9\u71DA\u71DB\u71DC"+
+            "\u71DD\u71DE\u71DF\u71E0\u71E1\u71E2\u71E3\u71E4"+
+            "\u71E5\u71E6\u71E7\u71E8\u71E9\u71EA\u71EB\u71EC"+
+            "\u71ED\u71EE\u71EF\u71F0\u71F1\u71F2\u71F3\u71F4"+
+            "\u71F5\u71F6\u71F7\u71F8\u71F9\u71FA\u71FB\u71FC"+
+            "\u71FD\u71FE\u71FF\u7200\u7201\u7202\u7203\u7204"+
+            "\u7205\u7206\u7207\u7208\u7209\u720A\u720B\u720C"+
+            "\u720D\u720E\u720F\u7210\u7211\u7212\u7213\u7214"+
+            "\u7215\u7216\u7217\u7218\u7219\u721A\u721B\u721C"+
+            "\u721D\u721E\u721F\u7220\u7221\u7222\u7223\u7224"+
+            "\u7225\u7226\u7227\u7228\u7229\u722A\u722B\u722C"+
+            "\u722D\u722E\u722F\u7230\u7231\u7232\u7233\u7234"+
+            "\u7235\u7236\u7237\u7238\u7239\u723A\u723B\u723C"+
+            "\u723D\u723E\u723F\u7240\u7241\u7242\u7243\u7244"+
+            "\u7245\u7246\u7247\u7248\u7249\u724A\u724B\u724C"+
+            "\u724D\u724E\u724F\u7250\u7251\u7252\u7253\u7254"+
+            "\u7255\u7256\u7257\u7258\u7259\u725A\u725B\u725C"+
+            "\u725D\u725E\u725F\u7260\u7261\u7262\u7263\u7264"+
+            "\u7265\u7266\u7267\u7268\u7269\u726A\u726B\u726C"+
+            "\u726D\u726E\u726F\u7270\u7271\u7272\u7273\u7274"+
+            "\u7275\u7276\u7277\u7278\u7279\u727A\u727B\u727C"+
+            "\u727D\u727E\u727F\u7280\u7281\u7282\u7283\u7284"+
+            "\u7285\u7286\u7287\u7288\u7289\u728A\u728B\u728C"+
+            "\u728D\u728E\u728F\u7290\u7291\u7292\u7293\u7294"+
+            "\u7295\u7296\u7297\u7298\u7299\u729A\u729B\u729C"+
+            "\u729D\u729E\u729F\u72A0\u72A1\u72A2\u72A3\u72A4"+
+            "\u72A5\u72A6\u72A7\u72A8\u72A9\u72AA\u72AB\u72AC"+
+            "\u72AD\u72AE\u72AF\u72B0\u72B1\u72B2\u72B3\u72B4"+
+            "\u72B5\u72B6\u72B7\u72B8\u72B9\u72BA\u72BB\u72BC"+
+            "\u72BD\u72BE\u72BF\u72C0\u72C1\u72C2\u72C3\u72C4"+
+            "\u72C5\u72C6\u72C7\u72C8\u72C9\u72CA\u72CB\u72CC"+
+            "\u72CD\u72CE\u72CF\u72D0\u72D1\u72D2\u72D3\u72D4"+
+            "\u72D5\u72D6\u72D7\u72D8\u72D9\u72DA\u72DB\u72DC"+
+            "\u72DD\u72DE\u72DF\u72E0\u72E1\u72E2\u72E3\u72E4"+
+            "\u72E5\u72E6\u72E7\u72E8\u72E9\u72EA\u72EB\u72EC"+
+            "\u72ED\u72EE\u72EF\u72F0\u72F1\u72F2\u72F3\u72F4"+
+            "\u72F5\u72F6\u72F7\u72F8\u72F9\u72FA\u72FB\u72FC"+
+            "\u72FD\u72FE\u72FF\u7300\u7301\u7302\u7303\u7304"+
+            "\u7305\u7306\u7307\u7308\u7309\u730A\u730B\u730C"+
+            "\u730D\u730E\u730F\u7310\u7311\u7312\u7313\u7314"+
+            "\u7315\u7316\u7317\u7318\u7319\u731A\u731B\u731C"+
+            "\u731D\u731E\u731F\u7320\u7321\u7322\u7323\u7324"+
+            "\u7325\u7326\u7327\u7328\u7329\u732A\u732B\u732C"+
+            "\u732D\u732E\u732F\u7330\u7331\u7332\u7333\u7334"+
+            "\u7335\u7336\u7337\u7338\u7339\u733A\u733B\u733C"+
+            "\u733D\u733E\u733F\u7340\u7341\u7342\u7343\u7344"+
+            "\u7345\u7346\u7347\u7348\u7349\u734A\u734B\u734C"+
+            "\u734D\u734E\u734F\u7350\u7351\u7352\u7353\u7354"+
+            "\u7355\u7356\u7357\u7358\u7359\u735A\u735B\u735C"+
+            "\u735D\u735E\u735F\u7360\u7361\u7362\u7363\u7364"+
+            "\u7365\u7366\u7367\u7368\u7369\u736A\u736B\u736C"+
+            "\u736D\u736E\u736F\u7370\u7371\u7372\u7373\u7374"+
+            "\u7375\u7376\u7377\u7378\u7379\u737A\u737B\u737C"+
+            "\u737D\u737E\u737F\u7380\u7381\u7382\u7383\u7384"+
+            "\u7385\u7386\u7387\u7388\u7389\u738A\u738B\u738C"+
+            "\u738D\u738E\u738F\u7390\u7391\u7392\u7393\u7394"+
+            "\u7395\u7396\u7397\u7398\u7399\u739A\u739B\u739C"+
+            "\u739D\u739E\u739F\u73A0\u73A1\u73A2\u73A3\u73A4"+
+            "\u73A5\u73A6\u73A7\u73A8\u73A9\u73AA\u73AB\u73AC"+
+            "\u73AD\u73AE\u73AF\u73B0\u73B1\u73B2\u73B3\u73B4"+
+            "\u73B5\u73B6\u73B7\u73B8\u73B9\u73BA\u73BB\u73BC"+
+            "\u73BD\u73BE\u73BF\u73C0\u73C1\u73C2\u73C3\u73C4"+
+            "\u73C5\u73C6\u73C7\u73C8\u73C9\u73CA\u73CB\u73CC"+
+            "\u73CD\u73CE\u73CF\u73D0\u73D1\u73D2\u73D3\u73D4"+
+            "\u73D5\u73D6\u73D7\u73D8\u73D9\u73DA\u73DB\u73DC"+
+            "\u73DD\u73DE\u73DF\u73E0\u73E1\u73E2\u73E3\u73E4"+
+            "\u73E5\u73E6\u73E7\u73E8\u73E9\u73EA\u73EB\u73EC"+
+            "\u73ED\u73EE\u73EF\u73F0\u73F1\u73F2\u73F3\u73F4"+
+            "\u73F5\u73F6\u73F7\u73F8\u73F9\u73FA\u73FB\u73FC"+
+            "\u73FD\u73FE\u73FF\u7400\u7401\u7402\u7403\u7404"+
+            "\u7405\u7406\u7407\u7408\u7409\u740A\u740B\u740C"+
+            "\u740D\u740E\u740F\u7410\u7411\u7412\u7413\u7414"+
+            "\u7415\u7416\u7417\u7418\u7419\u741A\u741B\u741C"+
+            "\u741D\u741E\u741F\u7420\u7421\u7422\u7423\u7424"+
+            "\u7425\u7426\u7427\u7428\u7429\u742A\u742B\u742C"+
+            "\u742D\u742E\u742F\u7430\u7431\u7432\u7433\u7434"+
+            "\u7435\u7436\u7437\u7438\u7439\u743A\u743B\u743C"+
+            "\u743D\u743E\u743F\u7440\u7441\u7442\u7443\u7444"+
+            "\u7445\u7446\u7447\u7448\u7449\u744A\u744B\u744C"+
+            "\u744D\u744E\u744F\u7450\u7451\u7452\u7453\u7454"+
+            "\u7455\u7456\u7457\u7458\u7459\u745A\u745B\u745C"+
+            "\u745D\u745E\u745F\u7460\u7461\u7462\u7463\u7464"+
+            "\u7465\u7466\u7467\u7468\u7469\u746A\u746B\u746C"+
+            "\u746D\u746E\u746F\u7470\u7471\u7472\u7473\u7474"+
+            "\u7475\u7476\u7477\u7478\u7479\u747A\u747B\u747C"+
+            "\u747D\u747E\u747F\u7480\u7481\u7482\u7483\u7484"+
+            "\u7485\u7486\u7487\u7488\u7489\u748A\u748B\u748C"+
+            "\u748D\u748E\u748F\u7490\u7491\u7492\u7493\u7494"+
+            "\u7495\u7496\u7497\u7498\u7499\u749A\u749B\u749C"+
+            "\u749D\u749E\u749F\u74A0\u74A1\u74A2\u74A3\u74A4"+
+            "\u74A5\u74A6\u74A7\u74A8\u74A9\u74AA\u74AB\u74AC"+
+            "\u74AD\u74AE\u74AF\u74B0\u74B1\u74B2\u74B3\u74B4"+
+            "\u74B5\u74B6\u74B7\u74B8\u74B9\u74BA\u74BB\u74BC"+
+            "\u74BD\u74BE\u74BF\u74C0\u74C1\u74C2\u74C3\u74C4"+
+            "\u74C5\u74C6\u74C7\u74C8\u74C9\u74CA\u74CB\u74CC"+
+            "\u74CD\u74CE\u74CF\u74D0\u74D1\u74D2\u74D3\u74D4"+
+            "\u74D5\u74D6\u74D7\u74D8\u74D9\u74DA\u74DB\u74DC"+
+            "\u74DD\u74DE\u74DF\u74E0\u74E1\u74E2\u74E3\u74E4"+
+            "\u74E5\u74E6\u74E7\u74E8\u74E9\u74EA\u74EB\u74EC"+
+            "\u74ED\u74EE\u74EF\u74F0\u74F1\u74F2\u74F3\u74F4"+
+            "\u74F5\u74F6\u74F7\u74F8\u74F9\u74FA\u74FB\u74FC"+
+            "\u74FD\u74FE\u74FF\u7500\u7501\u7502\u7503\u7504"+
+            "\u7505\u7506\u7507\u7508\u7509\u750A\u750B\u750C"+
+            "\u750D\u750E\u750F\u7510\u7511\u7512\u7513\u7514"+
+            "\u7515\u7516\u7517\u7518\u7519\u751A\u751B\u751C"+
+            "\u751D\u751E\u751F\u7520\u7521\u7522\u7523\u7524"+
+            "\u7525\u7526\u7527\u7528\u7529\u752A\u752B\u752C"+
+            "\u752D\u752E\u752F\u7530\u7531\u7532\u7533\u7534"+
+            "\u7535\u7536\u7537\u7538\u7539\u753A\u753B\u753C"+
+            "\u753D\u753E\u753F\u7540\u7541\u7542\u7543\u7544"+
+            "\u7545\u7546\u7547\u7548\u7549\u754A\u754B\u754C"+
+            "\u754D\u754E\u754F\u7550\u7551\u7552\u7553\u7554"+
+            "\u7555\u7556\u7557\u7558\u7559\u755A\u755B\u755C"+
+            "\u755D\u755E\u755F\u7560\u7561\u7562\u7563\u7564"+
+            "\u7565\u7566\u7567\u7568\u7569\u756A\u756B\u756C"+
+            "\u756D\u756E\u756F\u7570\u7571\u7572\u7573\u7574"+
+            "\u7575\u7576\u7577\u7578\u7579\u757A\u757B\u757C"+
+            "\u757D\u757E\u757F\u7580\u7581\u7582\u7583\u7584"+
+            "\u7585\u7586\u7587\u7588\u7589\u758A\u758B\u758C"+
+            "\u758D\u758E\u758F\u7590\u7591\u7592\u7593\u7594"+
+            "\u7595\u7596\u7597\u7598\u7599\u759A\u759B\u759C"+
+            "\u759D\u759E\u759F\u75A0\u75A1\u75A2\u75A3\u75A4"+
+            "\u75A5\u75A6\u75A7\u75A8\u75A9\u75AA\u75AB\u75AC"+
+            "\u75AD\u75AE\u75AF\u75B0\u75B1\u75B2\u75B3\u75B4"+
+            "\u75B5\u75B6\u75B7\u75B8\u75B9\u75BA\u75BB\u75BC"+
+            "\u75BD\u75BE\u75BF\u75C0\u75C1\u75C2\u75C3\u75C4"+
+            "\u75C5\u75C6\u75C7\u75C8\u75C9\u75CA\u75CB\u75CC"+
+            "\u75CD\u75CE\u75CF\u75D0\u75D1\u75D2\u75D3\u75D4"+
+            "\u75D5\u75D6\u75D7\u75D8\u75D9\u75DA\u75DB\u75DC"+
+            "\u75DD\u75DE\u75DF\u75E0\u75E1\u75E2\u75E3\u75E4"+
+            "\u75E5\u75E6\u75E7\u75E8\u75E9\u75EA\u75EB\u75EC"+
+            "\u75ED\u75EE\u75EF\u75F0\u75F1\u75F2\u75F3\u75F4"+
+            "\u75F5\u75F6\u75F7\u75F8\u75F9\u75FA\u75FB\u75FC"+
+            "\u75FD\u75FE\u75FF\u7600\u7601\u7602\u7603\u7604"+
+            "\u7605\u7606\u7607\u7608\u7609\u760A\u760B\u760C"+
+            "\u760D\u760E\u760F\u7610\u7611\u7612\u7613\u7614"+
+            "\u7615\u7616\u7617\u7618\u7619\u761A\u761B\u761C"+
+            "\u761D\u761E\u761F\u7620\u7621\u7622\u7623\u7624"+
+            "\u7625\u7626\u7627\u7628\u7629\u762A\u762B\u762C"+
+            "\u762D\u762E\u762F\u7630\u7631\u7632\u7633\u7634"+
+            "\u7635\u7636\u7637\u7638\u7639\u763A\u763B\u763C"+
+            "\u763D\u763E\u763F\u7640\u7641\u7642\u7643\u7644"+
+            "\u7645\u7646\u7647\u7648\u7649\u764A\u764B\u764C"+
+            "\u764D\u764E\u764F\u7650\u7651\u7652\u7653\u7654"+
+            "\u7655\u7656\u7657\u7658\u7659\u765A\u765B\u765C"+
+            "\u765D\u765E\u765F\u7660\u7661\u7662\u7663\u7664"+
+            "\u7665\u7666\u7667\u7668\u7669\u766A\u766B\u766C"+
+            "\u766D\u766E\u766F\u7670\u7671\u7672\u7673\u7674"+
+            "\u7675\u7676\u7677\u7678\u7679\u767A\u767B\u767C"+
+            "\u767D\u767E\u767F\u7680\u7681\u7682\u7683\u7684"+
+            "\u7685\u7686\u7687\u7688\u7689\u768A\u768B\u768C"+
+            "\u768D\u768E\u768F\u7690\u7691\u7692\u7693\u7694"+
+            "\u7695\u7696\u7697\u7698\u7699\u769A\u769B\u769C"+
+            "\u769D\u769E\u769F\u76A0\u76A1\u76A2\u76A3\u76A4"+
+            "\u76A5\u76A6\u76A7\u76A8\u76A9\u76AA\u76AB\u76AC"+
+            "\u76AD\u76AE\u76AF\u76B0\u76B1\u76B2\u76B3\u76B4"+
+            "\u76B5\u76B6\u76B7\u76B8\u76B9\u76BA\u76BB\u76BC"+
+            "\u76BD\u76BE\u76BF\u76C0\u76C1\u76C2\u76C3\u76C4"+
+            "\u76C5\u76C6\u76C7\u76C8\u76C9\u76CA\u76CB\u76CC"+
+            "\u76CD\u76CE\u76CF\u76D0\u76D1\u76D2\u76D3\u76D4"+
+            "\u76D5\u76D6\u76D7\u76D8\u76D9\u76DA\u76DB\u76DC"+
+            "\u76DD\u76DE\u76DF\u76E0\u76E1\u76E2\u76E3\u76E4"+
+            "\u76E5\u76E6\u76E7\u76E8\u76E9\u76EA\u76EB\u76EC"+
+            "\u76ED\u76EE\u76EF\u76F0\u76F1\u76F2\u76F3\u76F4"+
+            "\u76F5\u76F6\u76F7\u76F8\u76F9\u76FA\u76FB\u76FC"+
+            "\u76FD\u76FE\u76FF\u7700\u7701\u7702\u7703\u7704"+
+            "\u7705\u7706\u7707\u7708\u7709\u770A\u770B\u770C"+
+            "\u770D\u770E\u770F\u7710\u7711\u7712\u7713\u7714"+
+            "\u7715\u7716\u7717\u7718\u7719\u771A\u771B\u771C"+
+            "\u771D\u771E\u771F\u7720\u7721\u7722\u7723\u7724"+
+            "\u7725\u7726\u7727\u7728\u7729\u772A\u772B\u772C"+
+            "\u772D\u772E\u772F\u7730\u7731\u7732\u7733\u7734"+
+            "\u7735\u7736\u7737\u7738\u7739\u773A\u773B\u773C"+
+            "\u773D\u773E\u773F\u7740\u7741\u7742\u7743\u7744"+
+            "\u7745\u7746\u7747\u7748\u7749\u774A\u774B\u774C"+
+            "\u774D\u774E\u774F\u7750\u7751\u7752\u7753\u7754"+
+            "\u7755\u7756\u7757\u7758\u7759\u775A\u775B\u775C"+
+            "\u775D\u775E\u775F\u7760\u7761\u7762\u7763\u7764"+
+            "\u7765\u7766\u7767\u7768\u7769\u776A\u776B\u776C"+
+            "\u776D\u776E\u776F\u7770\u7771\u7772\u7773\u7774"+
+            "\u7775\u7776\u7777\u7778\u7779\u777A\u777B\u777C"+
+            "\u777D\u777E\u777F\u7780\u7781\u7782\u7783\u7784"+
+            "\u7785\u7786\u7787\u7788\u7789\u778A\u778B\u778C"+
+            "\u778D\u778E\u778F\u7790\u7791\u7792\u7793\u7794"+
+            "\u7795\u7796\u7797\u7798\u7799\u779A\u779B\u779C"+
+            "\u779D\u779E\u779F\u77A0\u77A1\u77A2\u77A3\u77A4"+
+            "\u77A5\u77A6\u77A7\u77A8\u77A9\u77AA\u77AB\u77AC"+
+            "\u77AD\u77AE\u77AF\u77B0\u77B1\u77B2\u77B3\u77B4"+
+            "\u77B5\u77B6\u77B7\u77B8\u77B9\u77BA\u77BB\u77BC"+
+            "\u77BD\u77BE\u77BF\u77C0\u77C1\u77C2\u77C3\u77C4"+
+            "\u77C5\u77C6\u77C7\u77C8\u77C9\u77CA\u77CB\u77CC"+
+            "\u77CD\u77CE\u77CF\u77D0\u77D1\u77D2\u77D3\u77D4"+
+            "\u77D5\u77D6\u77D7\u77D8\u77D9\u77DA\u77DB\u77DC"+
+            "\u77DD\u77DE\u77DF\u77E0\u77E1\u77E2\u77E3\u77E4"+
+            "\u77E5\u77E6\u77E7\u77E8\u77E9\u77EA\u77EB\u77EC"+
+            "\u77ED\u77EE\u77EF\u77F0\u77F1\u77F2\u77F3\u77F4"+
+            "\u77F5\u77F6\u77F7\u77F8\u77F9\u77FA\u77FB\u77FC"+
+            "\u77FD\u77FE\u77FF\u7800\u7801\u7802\u7803\u7804"+
+            "\u7805\u7806\u7807\u7808\u7809\u780A\u780B\u780C"+
+            "\u780D\u780E\u780F\u7810\u7811\u7812\u7813\u7814"+
+            "\u7815\u7816\u7817\u7818\u7819\u781A\u781B\u781C"+
+            "\u781D\u781E\u781F\u7820\u7821\u7822\u7823\u7824"+
+            "\u7825\u7826\u7827\u7828\u7829\u782A\u782B\u782C"+
+            "\u782D\u782E\u782F\u7830\u7831\u7832\u7833\u7834"+
+            "\u7835\u7836\u7837\u7838\u7839\u783A\u783B\u783C"+
+            "\u783D\u783E\u783F\u7840\u7841\u7842\u7843\u7844"+
+            "\u7845\u7846\u7847\u7848\u7849\u784A\u784B\u784C"+
+            "\u784D\u784E\u784F\u7850\u7851\u7852\u7853\u7854"+
+            "\u7855\u7856\u7857\u7858\u7859\u785A\u785B\u785C"+
+            "\u785D\u785E\u785F\u7860\u7861\u7862\u7863\u7864"+
+            "\u7865\u7866\u7867\u7868\u7869\u786A\u786B\u786C"+
+            "\u786D\u786E\u786F\u7870\u7871\u7872\u7873\u7874"+
+            "\u7875\u7876\u7877\u7878\u7879\u787A\u787B\u787C"+
+            "\u787D\u787E\u787F\u7880\u7881\u7882\u7883\u7884"+
+            "\u7885\u7886\u7887\u7888\u7889\u788A\u788B\u788C"+
+            "\u788D\u788E\u788F\u7890\u7891\u7892\u7893\u7894"+
+            "\u7895\u7896\u7897\u7898\u7899\u789A\u789B\u789C"+
+            "\u789D\u789E\u789F\u78A0\u78A1\u78A2\u78A3\u78A4"+
+            "\u78A5\u78A6\u78A7\u78A8\u78A9\u78AA\u78AB\u78AC"+
+            "\u78AD\u78AE\u78AF\u78B0\u78B1\u78B2\u78B3\u78B4"+
+            "\u78B5\u78B6\u78B7\u78B8\u78B9\u78BA\u78BB\u78BC"+
+            "\u78BD\u78BE\u78BF\u78C0\u78C1\u78C2\u78C3\u78C4"+
+            "\u78C5\u78C6\u78C7\u78C8\u78C9\u78CA\u78CB\u78CC"+
+            "\u78CD\u78CE\u78CF\u78D0\u78D1\u78D2\u78D3\u78D4"+
+            "\u78D5\u78D6\u78D7\u78D8\u78D9\u78DA\u78DB\u78DC"+
+            "\u78DD\u78DE\u78DF\u78E0\u78E1\u78E2\u78E3\u78E4"+
+            "\u78E5\u78E6\u78E7\u78E8\u78E9\u78EA\u78EB\u78EC"+
+            "\u78ED\u78EE\u78EF\u78F0\u78F1\u78F2\u78F3\u78F4"+
+            "\u78F5\u78F6\u78F7\u78F8\u78F9\u78FA\u78FB\u78FC"+
+            "\u78FD\u78FE\u78FF\u7900\u7901\u7902\u7903\u7904"+
+            "\u7905\u7906\u7907\u7908\u7909\u790A\u790B\u790C"+
+            "\u790D\u790E\u790F\u7910\u7911\u7912\u7913\u7914"+
+            "\u7915\u7916\u7917\u7918\u7919\u791A\u791B\u791C"+
+            "\u791D\u791E\u791F\u7920\u7921\u7922\u7923\u7924"+
+            "\u7925\u7926\u7927\u7928\u7929\u792A\u792B\u792C"+
+            "\u792D\u792E\u792F\u7930\u7931\u7932\u7933\u7934"+
+            "\u7935\u7936\u7937\u7938\u7939\u793A\u793B\u793C"+
+            "\u793D\u793E\u793F\u7940\u7941\u7942\u7943\u7944"+
+            "\u7945\u7946\u7947\u7948\u7949\u794A\u794B\u794C"+
+            "\u794D\u794E\u794F\u7950\u7951\u7952\u7953\u7954"+
+            "\u7955\u7956\u7957\u7958\u7959\u795A\u795B\u795C"+
+            "\u795D\u795E\u795F\u7960\u7961\u7962\u7963\u7964"+
+            "\u7965\u7966\u7967\u7968\u7969\u796A\u796B\u796C"+
+            "\u796D\u796E\u796F\u7970\u7971\u7972\u7973\u7974"+
+            "\u7975\u7976\u7977\u7978\u7979\u797A\u797B\u797C"+
+            "\u797D\u797E\u797F\u7980\u7981\u7982\u7983\u7984"+
+            "\u7985\u7986\u7987\u7988\u7989\u798A\u798B\u798C"+
+            "\u798D\u798E\u798F\u7990\u7991\u7992\u7993\u7994"+
+            "\u7995\u7996\u7997\u7998\u7999\u799A\u799B\u799C"+
+            "\u799D\u799E\u799F\u79A0\u79A1\u79A2\u79A3\u79A4"+
+            "\u79A5\u79A6\u79A7\u79A8\u79A9\u79AA\u79AB\u79AC"+
+            "\u79AD\u79AE\u79AF\u79B0\u79B1\u79B2\u79B3\u79B4"+
+            "\u79B5\u79B6\u79B7\u79B8\u79B9\u79BA\u79BB\u79BC"+
+            "\u79BD\u79BE\u79BF\u79C0\u79C1\u79C2\u79C3\u79C4"+
+            "\u79C5\u79C6\u79C7\u79C8\u79C9\u79CA\u79CB\u79CC"+
+            "\u79CD\u79CE\u79CF\u79D0\u79D1\u79D2\u79D3\u79D4"+
+            "\u79D5\u79D6\u79D7\u79D8\u79D9\u79DA\u79DB\u79DC"+
+            "\u79DD\u79DE\u79DF\u79E0\u79E1\u79E2\u79E3\u79E4"+
+            "\u79E5\u79E6\u79E7\u79E8\u79E9\u79EA\u79EB\u79EC"+
+            "\u79ED\u79EE\u79EF\u79F0\u79F1\u79F2\u79F3\u79F4"+
+            "\u79F5\u79F6\u79F7\u79F8\u79F9\u79FA\u79FB\u79FC"+
+            "\u79FD\u79FE\u79FF\u7A00\u7A01\u7A02\u7A03\u7A04"+
+            "\u7A05\u7A06\u7A07\u7A08\u7A09\u7A0A\u7A0B\u7A0C"+
+            "\u7A0D\u7A0E\u7A0F\u7A10\u7A11\u7A12\u7A13\u7A14"+
+            "\u7A15\u7A16\u7A17\u7A18\u7A19\u7A1A\u7A1B\u7A1C"+
+            "\u7A1D\u7A1E\u7A1F\u7A20\u7A21\u7A22\u7A23\u7A24"+
+            "\u7A25\u7A26\u7A27\u7A28\u7A29\u7A2A\u7A2B\u7A2C"+
+            "\u7A2D\u7A2E\u7A2F\u7A30\u7A31\u7A32\u7A33\u7A34"+
+            "\u7A35\u7A36\u7A37\u7A38\u7A39\u7A3A\u7A3B\u7A3C"+
+            "\u7A3D\u7A3E\u7A3F\u7A40\u7A41\u7A42\u7A43\u7A44"+
+            "\u7A45\u7A46\u7A47\u7A48\u7A49\u7A4A\u7A4B\u7A4C"+
+            "\u7A4D\u7A4E\u7A4F\u7A50\u7A51\u7A52\u7A53\u7A54"+
+            "\u7A55\u7A56\u7A57\u7A58\u7A59\u7A5A\u7A5B\u7A5C"+
+            "\u7A5D\u7A5E\u7A5F\u7A60\u7A61\u7A62\u7A63\u7A64"+
+            "\u7A65\u7A66\u7A67\u7A68\u7A69\u7A6A\u7A6B\u7A6C"+
+            "\u7A6D\u7A6E\u7A6F\u7A70\u7A71\u7A72\u7A73\u7A74"+
+            "\u7A75\u7A76\u7A77\u7A78\u7A79\u7A7A\u7A7B\u7A7C"+
+            "\u7A7D\u7A7E\u7A7F\u7A80\u7A81\u7A82\u7A83\u7A84"+
+            "\u7A85\u7A86\u7A87\u7A88\u7A89\u7A8A\u7A8B\u7A8C"+
+            "\u7A8D\u7A8E\u7A8F\u7A90\u7A91\u7A92\u7A93\u7A94"+
+            "\u7A95\u7A96\u7A97\u7A98\u7A99\u7A9A\u7A9B\u7A9C"+
+            "\u7A9D\u7A9E\u7A9F\u7AA0\u7AA1\u7AA2\u7AA3\u7AA4"+
+            "\u7AA5\u7AA6\u7AA7\u7AA8\u7AA9\u7AAA\u7AAB\u7AAC"+
+            "\u7AAD\u7AAE\u7AAF\u7AB0\u7AB1\u7AB2\u7AB3\u7AB4"+
+            "\u7AB5\u7AB6\u7AB7\u7AB8\u7AB9\u7ABA\u7ABB\u7ABC";
+
+        private final static String innerIndex8=
+            "\u7ABD\u7ABE\u7ABF\u7AC0\u7AC1\u7AC2\u7AC3\u7AC4"+
+            "\u7AC5\u7AC6\u7AC7\u7AC8\u7AC9\u7ACA\u7ACB\u7ACC"+
+            "\u7ACD\u7ACE\u7ACF\u7AD0\u7AD1\u7AD2\u7AD3\u7AD4"+
+            "\u7AD5\u7AD6\u7AD7\u7AD8\u7AD9\u7ADA\u7ADB\u7ADC"+
+            "\u7ADD\u7ADE\u7ADF\u7AE0\u7AE1\u7AE2\u7AE3\u7AE4"+
+            "\u7AE5\u7AE6\u7AE7\u7AE8\u7AE9\u7AEA\u7AEB\u7AEC"+
+            "\u7AED\u7AEE\u7AEF\u7AF0\u7AF1\u7AF2\u7AF3\u7AF4"+
+            "\u7AF5\u7AF6\u7AF7\u7AF8\u7AF9\u7AFA\u7AFB\u7AFC"+
+            "\u7AFD\u7AFE\u7AFF\u7B00\u7B01\u7B02\u7B03\u7B04"+
+            "\u7B05\u7B06\u7B07\u7B08\u7B09\u7B0A\u7B0B\u7B0C"+
+            "\u7B0D\u7B0E\u7B0F\u7B10\u7B11\u7B12\u7B13\u7B14"+
+            "\u7B15\u7B16\u7B17\u7B18\u7B19\u7B1A\u7B1B\u7B1C"+
+            "\u7B1D\u7B1E\u7B1F\u7B20\u7B21\u7B22\u7B23\u7B24"+
+            "\u7B25\u7B26\u7B27\u7B28\u7B29\u7B2A\u7B2B\u7B2C"+
+            "\u7B2D\u7B2E\u7B2F\u7B30\u7B31\u7B32\u7B33\u7B34"+
+            "\u7B35\u7B36\u7B37\u7B38\u7B39\u7B3A\u7B3B\u7B3C"+
+            "\u7B3D\u7B3E\u7B3F\u7B40\u7B41\u7B42\u7B43\u7B44"+
+            "\u7B45\u7B46\u7B47\u7B48\u7B49\u7B4A\u7B4B\u7B4C"+
+            "\u7B4D\u7B4E\u7B4F\u7B50\u7B51\u7B52\u7B53\u7B54"+
+            "\u7B55\u7B56\u7B57\u7B58\u7B59\u7B5A\u7B5B\u7B5C"+
+            "\u7B5D\u7B5E\u7B5F\u7B60\u7B61\u7B62\u7B63\u7B64"+
+            "\u7B65\u7B66\u7B67\u7B68\u7B69\u7B6A\u7B6B\u7B6C"+
+            "\u7B6D\u7B6E\u7B6F\u7B70\u7B71\u7B72\u7B73\u7B74"+
+            "\u7B75\u7B76\u7B77\u7B78\u7B79\u7B7A\u7B7B\u7B7C"+
+            "\u7B7D\u7B7E\u7B7F\u7B80\u7B81\u7B82\u7B83\u7B84"+
+            "\u7B85\u7B86\u7B87\u7B88\u7B89\u7B8A\u7B8B\u7B8C"+
+            "\u7B8D\u7B8E\u7B8F\u7B90\u7B91\u7B92\u7B93\u7B94"+
+            "\u7B95\u7B96\u7B97\u7B98\u7B99\u7B9A\u7B9B\u7B9C"+
+            "\u7B9D\u7B9E\u7B9F\u7BA0\u7BA1\u7BA2\u7BA3\u7BA4"+
+            "\u7BA5\u7BA6\u7BA7\u7BA8\u7BA9\u7BAA\u7BAB\u7BAC"+
+            "\u7BAD\u7BAE\u7BAF\u7BB0\u7BB1\u7BB2\u7BB3\u7BB4"+
+            "\u7BB5\u7BB6\u7BB7\u7BB8\u7BB9\u7BBA\u7BBB\u7BBC"+
+            "\u7BBD\u7BBE\u7BBF\u7BC0\u7BC1\u7BC2\u7BC3\u7BC4"+
+            "\u7BC5\u7BC6\u7BC7\u7BC8\u7BC9\u7BCA\u7BCB\u7BCC"+
+            "\u7BCD\u7BCE\u7BCF\u7BD0\u7BD1\u7BD2\u7BD3\u7BD4"+
+            "\u7BD5\u7BD6\u7BD7\u7BD8\u7BD9\u7BDA\u7BDB\u7BDC"+
+            "\u7BDD\u7BDE\u7BDF\u7BE0\u7BE1\u7BE2\u7BE3\u7BE4"+
+            "\u7BE5\u7BE6\u7BE7\u7BE8\u7BE9\u7BEA\u7BEB\u7BEC"+
+            "\u7BED\u7BEE\u7BEF\u7BF0\u7BF1\u7BF2\u7BF3\u7BF4"+
+            "\u7BF5\u7BF6\u7BF7\u7BF8\u7BF9\u7BFA\u7BFB\u7BFC"+
+            "\u7BFD\u7BFE\u7BFF\u7C00\u7C01\u7C02\u7C03\u7C04"+
+            "\u7C05\u7C06\u7C07\u7C08\u7C09\u7C0A\u7C0B\u7C0C"+
+            "\u7C0D\u7C0E\u7C0F\u7C10\u7C11\u7C12\u7C13\u7C14"+
+            "\u7C15\u7C16\u7C17\u7C18\u7C19\u7C1A\u7C1B\u7C1C"+
+            "\u7C1D\u7C1E\u7C1F\u7C20\u7C21\u7C22\u7C23\u7C24"+
+            "\u7C25\u7C26\u7C27\u7C28\u7C29\u7C2A\u7C2B\u7C2C"+
+            "\u7C2D\u7C2E\u7C2F\u7C30\u7C31\u7C32\u7C33\u7C34"+
+            "\u7C35\u7C36\u7C37\u7C38\u7C39\u7C3A\u7C3B\u7C3C"+
+            "\u7C3D\u7C3E\u7C3F\u7C40\u7C41\u7C42\u7C43\u7C44"+
+            "\u7C45\u7C46\u7C47\u7C48\u7C49\u7C4A\u7C4B\u7C4C"+
+            "\u7C4D\u7C4E\u7C4F\u7C50\u7C51\u7C52\u7C53\u7C54"+
+            "\u7C55\u7C56\u7C57\u7C58\u7C59\u7C5A\u7C5B\u7C5C"+
+            "\u7C5D\u7C5E\u7C5F\u7C60\u7C61\u7C62\u7C63\u7C64"+
+            "\u7C65\u7C66\u7C67\u7C68\u7C69\u7C6A\u7C6B\u7C6C"+
+            "\u7C6D\u7C6E\u7C6F\u7C70\u7C71\u7C72\u7C73\u7C74"+
+            "\u7C75\u7C76\u7C77\u7C78\u7C79\u7C7A\u7C7B\u7C7C"+
+            "\u7C7D\u7C7E\u7C7F\u7C80\u7C81\u7C82\u7C83\u7C84"+
+            "\u7C85\u7C86\u7C87\u7C88\u7C89\u7C8A\u7C8B\u7C8C"+
+            "\u7C8D\u7C8E\u7C8F\u7C90\u7C91\u7C92\u7C93\u7C94"+
+            "\u7C95\u7C96\u7C97\u7C98\u7C99\u7C9A\u7C9B\u7C9C"+
+            "\u7C9D\u7C9E\u7C9F\u7CA0\u7CA1\u7CA2\u7CA3\u7CA4"+
+            "\u7CA5\u7CA6\u7CA7\u7CA8\u7CA9\u7CAA\u7CAB\u7CAC"+
+            "\u7CAD\u7CAE\u7CAF\u7CB0\u7CB1\u7CB2\u7CB3\u7CB4"+
+            "\u7CB5\u7CB6\u7CB7\u7CB8\u7CB9\u7CBA\u7CBB\u7CBC"+
+            "\u7CBD\u7CBE\u7CBF\u7CC0\u7CC1\u7CC2\u7CC3\u7CC4"+
+            "\u7CC5\u7CC6\u7CC7\u7CC8\u7CC9\u7CCA\u7CCB\u7CCC"+
+            "\u7CCD\u7CCE\u7CCF\u7CD0\u7CD1\u7CD2\u7CD3\u7CD4"+
+            "\u7CD5\u7CD6\u7CD7\u7CD8\u7CD9\u7CDA\u7CDB\u7CDC"+
+            "\u7CDD\u7CDE\u7CDF\u7CE0\u7CE1\u7CE2\u7CE3\u7CE4"+
+            "\u7CE5\u7CE6\u7CE7\u7CE8\u7CE9\u7CEA\u7CEB\u7CEC"+
+            "\u7CED\u7CEE\u7CEF\u7CF0\u7CF1\u7CF2\u7CF3\u7CF4"+
+            "\u7CF5\u7CF6\u7CF7\u7CF8\u7CF9\u7CFA\u7CFB\u7CFC"+
+            "\u7CFD\u7CFE\u7CFF\u7D00\u7D01\u7D02\u7D03\u7D04"+
+            "\u7D05\u7D06\u7D07\u7D08\u7D09\u7D0A\u7D0B\u7D0C"+
+            "\u7D0D\u7D0E\u7D0F\u7D10\u7D11\u7D12\u7D13\u7D14"+
+            "\u7D15\u7D16\u7D17\u7D18\u7D19\u7D1A\u7D1B\u7D1C"+
+            "\u7D1D\u7D1E\u7D1F\u7D20\u7D21\u7D22\u7D23\u7D24"+
+            "\u7D25\u7D26\u7D27\u7D28\u7D29\u7D2A\u7D2B\u7D2C"+
+            "\u7D2D\u7D2E\u7D2F\u7D30\u7D31\u7D32\u7D33\u7D34"+
+            "\u7D35\u7D36\u7D37\u7D38\u7D39\u7D3A\u7D3B\u7D3C"+
+            "\u7D3D\u7D3E\u7D3F\u7D40\u7D41\u7D42\u7D43\u7D44"+
+            "\u7D45\u7D46\u7D47\u7D48\u7D49\u7D4A\u7D4B\u7D4C"+
+            "\u7D4D\u7D4E\u7D4F\u7D50\u7D51\u7D52\u7D53\u7D54"+
+            "\u7D55\u7D56\u7D57\u7D58\u7D59\u7D5A\u7D5B\u7D5C"+
+            "\u7D5D\u7D5E\u7D5F\u7D60\u7D61\u7D62\u7D63\u7D64"+
+            "\u7D65\u7D66\u7D67\u7D68\u7D69\u7D6A\u7D6B\u7D6C"+
+            "\u7D6D\u7D6E\u7D6F\u7D70\u7D71\u7D72\u7D73\u7D74"+
+            "\u7D75\u7D76\u7D77\u7D78\u7D79\u7D7A\u7D7B\u7D7C"+
+            "\u7D7D\u7D7E\u7D7F\u7D80\u7D81\u7D82\u7D83\u7D84"+
+            "\u7D85\u7D86\u7D87\u7D88\u7D89\u7D8A\u7D8B\u7D8C"+
+            "\u7D8D\u7D8E\u7D8F\u7D90\u7D91\u7D92\u7D93\u7D94"+
+            "\u7D95\u7D96\u7D97\u7D98\u7D99\u7D9A\u7D9B\u7D9C"+
+            "\u7D9D\u7D9E\u7D9F\u7DA0\u7DA1\u7DA2\u7DA3\u7DA4"+
+            "\u7DA5\u7DA6\u7DA7\u7DA8\u7DA9\u7DAA\u7DAB\u7DAC"+
+            "\u7DAD\u7DAE\u7DAF\u7DB0\u7DB1\u7DB2\u7DB3\u7DB4"+
+            "\u7DB5\u7DB6\u7DB7\u7DB8\u7DB9\u7DBA\u7DBB\u7DBC"+
+            "\u7DBD\u7DBE\u7DBF\u7DC0\u7DC1\u7DC2\u7DC3\u7DC4"+
+            "\u7DC5\u7DC6\u7DC7\u7DC8\u7DC9\u7DCA\u7DCB\u7DCC"+
+            "\u7DCD\u7DCE\u7DCF\u7DD0\u7DD1\u7DD2\u7DD3\u7DD4"+
+            "\u7DD5\u7DD6\u7DD7\u7DD8\u7DD9\u7DDA\u7DDB\u7DDC"+
+            "\u7DDD\u7DDE\u7DDF\u7DE0\u7DE1\u7DE2\u7DE3\u7DE4"+
+            "\u7DE5\u7DE6\u7DE7\u7DE8\u7DE9\u7DEA\u7DEB\u7DEC"+
+            "\u7DED\u7DEE\u7DEF\u7DF0\u7DF1\u7DF2\u7DF3\u7DF4"+
+            "\u7DF5\u7DF6\u7DF7\u7DF8\u7DF9\u7DFA\u7DFB\u7DFC"+
+            "\u7DFD\u7DFE\u7DFF\u7E00\u7E01\u7E02\u7E03\u7E04"+
+            "\u7E05\u7E06\u7E07\u7E08\u7E09\u7E0A\u7E0B\u7E0C"+
+            "\u7E0D\u7E0E\u7E0F\u7E10\u7E11\u7E12\u7E13\u7E14"+
+            "\u7E15\u7E16\u7E17\u7E18\u7E19\u7E1A\u7E1B\u7E1C"+
+            "\u7E1D\u7E1E\u7E1F\u7E20\u7E21\u7E22\u7E23\u7E24"+
+            "\u7E25\u7E26\u7E27\u7E28\u7E29\u7E2A\u7E2B\u7E2C"+
+            "\u7E2D\u7E2E\u7E2F\u7E30\u7E31\u7E32\u7E33\u7E34"+
+            "\u7E35\u7E36\u7E37\u7E38\u7E39\u7E3A\u7E3B\u7E3C"+
+            "\u7E3D\u7E3E\u7E3F\u7E40\u7E41\u7E42\u7E43\u7E44"+
+            "\u7E45\u7E46\u7E47\u7E48\u7E49\u7E4A\u7E4B\u7E4C"+
+            "\u7E4D\u7E4E\u7E4F\u7E50\u7E51\u7E52\u7E53\u7E54"+
+            "\u7E55\u7E56\u7E57\u7E58\u7E59\u7E5A\u7E5B\u7E5C"+
+            "\u7E5D\u7E5E\u7E5F\u7E60\u7E61\u7E62\u7E63\u7E64"+
+            "\u7E65\u7E66\u7E67\u7E68\u7E69\u7E6A\u7E6B\u7E6C"+
+            "\u7E6D\u7E6E\u7E6F\u7E70\u7E71\u7E72\u7E73\u7E74"+
+            "\u7E75\u7E76\u7E77\u7E78\u7E79\u7E7A\u7E7B\u7E7C"+
+            "\u7E7D\u7E7E\u7E7F\u7E80\u7E81\u7E82\u7E83\u7E84"+
+            "\u7E85\u7E86\u7E87\u7E88\u7E89\u7E8A\u7E8B\u7E8C"+
+            "\u7E8D\u7E8E\u7E8F\u7E90\u7E91\u7E92\u7E93\u7E94"+
+            "\u7E95\u7E96\u7E97\u7E98\u7E99\u7E9A\u7E9B\u7E9C"+
+            "\u7E9D\u7E9E\u7E9F\u7EA0\u7EA1\u7EA2\u7EA3\u7EA4"+
+            "\u7EA5\u7EA6\u7EA7\u7EA8\u7EA9\u7EAA\u7EAB\u7EAC"+
+            "\u7EAD\u7EAE\u7EAF\u7EB0\u7EB1\u7EB2\u7EB3\u7EB4"+
+            "\u7EB5\u7EB6\u7EB7\u7EB8\u7EB9\u7EBA\u7EBB\u7EBC"+
+            "\u7EBD\u7EBE\u7EBF\u7EC0\u7EC1\u7EC2\u7EC3\u7EC4"+
+            "\u7EC5\u7EC6\u7EC7\u7EC8\u7EC9\u7ECA\u7ECB\u7ECC"+
+            "\u7ECD\u7ECE\u7ECF\u7ED0\u7ED1\u7ED2\u7ED3\u7ED4"+
+            "\u7ED5\u7ED6\u7ED7\u7ED8\u7ED9\u7EDA\u7EDB\u7EDC"+
+            "\u7EDD\u7EDE\u7EDF\u7EE0\u7EE1\u7EE2\u7EE3\u7EE4"+
+            "\u7EE5\u7EE6\u7EE7\u7EE8\u7EE9\u7EEA\u7EEB\u7EEC"+
+            "\u7EED\u7EEE\u7EEF\u7EF0\u7EF1\u7EF2\u7EF3\u7EF4"+
+            "\u7EF5\u7EF6\u7EF7\u7EF8\u7EF9\u7EFA\u7EFB\u7EFC"+
+            "\u7EFD\u7EFE\u7EFF\u7F00\u7F01\u7F02\u7F03\u7F04"+
+            "\u7F05\u7F06\u7F07\u7F08\u7F09\u7F0A\u7F0B\u7F0C"+
+            "\u7F0D\u7F0E\u7F0F\u7F10\u7F11\u7F12\u7F13\u7F14"+
+            "\u7F15\u7F16\u7F17\u7F18\u7F19\u7F1A\u7F1B\u7F1C"+
+            "\u7F1D\u7F1E\u7F1F\u7F20\u7F21\u7F22\u7F23\u7F24"+
+            "\u7F25\u7F26\u7F27\u7F28\u7F29\u7F2A\u7F2B\u7F2C"+
+            "\u7F2D\u7F2E\u7F2F\u7F30\u7F31\u7F32\u7F33\u7F34"+
+            "\u7F35\u7F36\u7F37\u7F38\u7F39\u7F3A\u7F3B\u7F3C"+
+            "\u7F3D\u7F3E\u7F3F\u7F40\u7F41\u7F42\u7F43\u7F44"+
+            "\u7F45\u7F46\u7F47\u7F48\u7F49\u7F4A\u7F4B\u7F4C"+
+            "\u7F4D\u7F4E\u7F4F\u7F50\u7F51\u7F52\u7F53\u7F54"+
+            "\u7F55\u7F56\u7F57\u7F58\u7F59\u7F5A\u7F5B\u7F5C"+
+            "\u7F5D\u7F5E\u7F5F\u7F60\u7F61\u7F62\u7F63\u7F64"+
+            "\u7F65\u7F66\u7F67\u7F68\u7F69\u7F6A\u7F6B\u7F6C"+
+            "\u7F6D\u7F6E\u7F6F\u7F70\u7F71\u7F72\u7F73\u7F74"+
+            "\u7F75\u7F76\u7F77\u7F78\u7F79\u7F7A\u7F7B\u7F7C"+
+            "\u7F7D\u7F7E\u7F7F\u7F80\u7F81\u7F82\u7F83\u7F84"+
+            "\u7F85\u7F86\u7F87\u7F88\u7F89\u7F8A\u7F8B\u7F8C"+
+            "\u7F8D\u7F8E\u7F8F\u7F90\u7F91\u7F92\u7F93\u7F94"+
+            "\u7F95\u7F96\u7F97\u7F98\u7F99\u7F9A\u7F9B\u7F9C"+
+            "\u7F9D\u7F9E\u7F9F\u7FA0\u7FA1\u7FA2\u7FA3\u7FA4"+
+            "\u7FA5\u7FA6\u7FA7\u7FA8\u7FA9\u7FAA\u7FAB\u7FAC"+
+            "\u7FAD\u7FAE\u7FAF\u7FB0\u7FB1\u7FB2\u7FB3\u7FB4"+
+            "\u7FB5\u7FB6\u7FB7\u7FB8\u7FB9\u7FBA\u7FBB\u7FBC"+
+            "\u7FBD\u7FBE\u7FBF\u7FC0\u7FC1\u7FC2\u7FC3\u7FC4"+
+            "\u7FC5\u7FC6\u7FC7\u7FC8\u7FC9\u7FCA\u7FCB\u7FCC"+
+            "\u7FCD\u7FCE\u7FCF\u7FD0\u7FD1\u7FD2\u7FD3\u7FD4"+
+            "\u7FD5\u7FD6\u7FD7\u7FD8\u7FD9\u7FDA\u7FDB\u7FDC"+
+            "\u7FDD\u7FDE\u7FDF\u7FE0\u7FE1\u7FE2\u7FE3\u7FE4"+
+            "\u7FE5\u7FE6\u7FE7\u7FE8\u7FE9\u7FEA\u7FEB\u7FEC"+
+            "\u7FED\u7FEE\u7FEF\u7FF0\u7FF1\u7FF2\u7FF3\u7FF4"+
+            "\u7FF5\u7FF6\u7FF7\u7FF8\u7FF9\u7FFA\u7FFB\u7FFC"+
+            "\u7FFD\u7FFE\u7FFF\u8000\u8001\u8002\u8003\u8004"+
+            "\u8005\u8006\u8007\u8008\u8009\u800A\u800B\u800C"+
+            "\u800D\u800E\u800F\u8010\u8011\u8012\u8013\u8014"+
+            "\u8015\u8016\u8017\u8018\u8019\u801A\u801B\u801C"+
+            "\u801D\u801E\u801F\u8020\u8021\u8022\u8023\u8024"+
+            "\u8025\u8026\u8027\u8028\u8029\u802A\u802B\u802C"+
+            "\u802D\u802E\u802F\u8030\u8031\u8032\u8033\u8034"+
+            "\u8035\u8036\u8037\u8038\u8039\u803A\u803B\u803C"+
+            "\u803D\u803E\u803F\u8040\u8041\u8042\u8043\u8044"+
+            "\u8045\u8046\u8047\u8048\u8049\u804A\u804B\u804C"+
+            "\u804D\u804E\u804F\u8050\u8051\u8052\u8053\u8054"+
+            "\u8055\u8056\u8057\u8058\u8059\u805A\u805B\u805C"+
+            "\u805D\u805E\u805F\u8060\u8061\u8062\u8063\u8064"+
+            "\u8065\u8066\u8067\u8068\u8069\u806A\u806B\u806C"+
+            "\u806D\u806E\u806F\u8070\u8071\u8072\u8073\u8074"+
+            "\u8075\u8076\u8077\u8078\u8079\u807A\u807B\u807C"+
+            "\u807D\u807E\u807F\u8080\u8081\u8082\u8083\u8084"+
+            "\u8085\u8086\u8087\u8088\u8089\u808A\u808B\u808C"+
+            "\u808D\u808E\u808F\u8090\u8091\u8092\u8093\u8094"+
+            "\u8095\u8096\u8097\u8098\u8099\u809A\u809B\u809C"+
+            "\u809D\u809E\u809F\u80A0\u80A1\u80A2\u80A3\u80A4"+
+            "\u80A5\u80A6\u80A7\u80A8\u80A9\u80AA\u80AB\u80AC"+
+            "\u80AD\u80AE\u80AF\u80B0\u80B1\u80B2\u80B3\u80B4"+
+            "\u80B5\u80B6\u80B7\u80B8\u80B9\u80BA\u80BB\u80BC"+
+            "\u80BD\u80BE\u80BF\u80C0\u80C1\u80C2\u80C3\u80C4"+
+            "\u80C5\u80C6\u80C7\u80C8\u80C9\u80CA\u80CB\u80CC"+
+            "\u80CD\u80CE\u80CF\u80D0\u80D1\u80D2\u80D3\u80D4"+
+            "\u80D5\u80D6\u80D7\u80D8\u80D9\u80DA\u80DB\u80DC"+
+            "\u80DD\u80DE\u80DF\u80E0\u80E1\u80E2\u80E3\u80E4"+
+            "\u80E5\u80E6\u80E7\u80E8\u80E9\u80EA\u80EB\u80EC"+
+            "\u80ED\u80EE\u80EF\u80F0\u80F1\u80F2\u80F3\u80F4"+
+            "\u80F5\u80F6\u80F7\u80F8\u80F9\u80FA\u80FB\u80FC"+
+            "\u80FD\u80FE\u80FF\u8100\u8101\u8102\u8103\u8104"+
+            "\u8105\u8106\u8107\u8108\u8109\u810A\u810B\u810C"+
+            "\u810D\u810E\u810F\u8110\u8111\u8112\u8113\u8114"+
+            "\u8115\u8116\u8117\u8118\u8119\u811A\u811B\u811C"+
+            "\u811D\u811E\u811F\u8120\u8121\u8122\u8123\u8124"+
+            "\u8125\u8126\u8127\u8128\u8129\u812A\u812B\u812C"+
+            "\u812D\u812E\u812F\u8130\u8131\u8132\u8133\u8134"+
+            "\u8135\u8136\u8137\u8138\u8139\u813A\u813B\u813C"+
+            "\u813D\u813E\u813F\u8140\u8141\u8142\u8143\u8144"+
+            "\u8145\u8146\u8147\u8148\u8149\u814A\u814B\u814C"+
+            "\u814D\u814E\u814F\u8150\u8151\u8152\u8153\u8154"+
+            "\u8155\u8156\u8157\u8158\u8159\u815A\u815B\u815C"+
+            "\u815D\u815E\u815F\u8160\u8161\u8162\u8163\u8164"+
+            "\u8165\u8166\u8167\u8168\u8169\u816A\u816B\u816C"+
+            "\u816D\u816E\u816F\u8170\u8171\u8172\u8173\u8174"+
+            "\u8175\u8176\u8177\u8178\u8179\u817A\u817B\u817C"+
+            "\u817D\u817E\u817F\u8180\u8181\u8182\u8183\u8184"+
+            "\u8185\u8186\u8187\u8188\u8189\u818A\u818B\u818C"+
+            "\u818D\u818E\u818F\u8190\u8191\u8192\u8193\u8194"+
+            "\u8195\u8196\u8197\u8198\u8199\u819A\u819B\u819C"+
+            "\u819D\u819E\u819F\u81A0\u81A1\u81A2\u81A3\u81A4"+
+            "\u81A5\u81A6\u81A7\u81A8\u81A9\u81AA\u81AB\u81AC"+
+            "\u81AD\u81AE\u81AF\u81B0\u81B1\u81B2\u81B3\u81B4"+
+            "\u81B5\u81B6\u81B7\u81B8\u81B9\u81BA\u81BB\u81BC"+
+            "\u81BD\u81BE\u81BF\u81C0\u81C1\u81C2\u81C3\u81C4"+
+            "\u81C5\u81C6\u81C7\u81C8\u81C9\u81CA\u81CB\u81CC"+
+            "\u81CD\u81CE\u81CF\u81D0\u81D1\u81D2\u81D3\u81D4"+
+            "\u81D5\u81D6\u81D7\u81D8\u81D9\u81DA\u81DB\u81DC"+
+            "\u81DD\u81DE\u81DF\u81E0\u81E1\u81E2\u81E3\u81E4"+
+            "\u81E5\u81E6\u81E7\u81E8\u81E9\u81EA\u81EB\u81EC"+
+            "\u81ED\u81EE\u81EF\u81F0\u81F1\u81F2\u81F3\u81F4"+
+            "\u81F5\u81F6\u81F7\u81F8\u81F9\u81FA\u81FB\u81FC"+
+            "\u81FD\u81FE\u81FF\u8200\u8201\u8202\u8203\u8204"+
+            "\u8205\u8206\u8207\u8208\u8209\u820A\u820B\u820C"+
+            "\u820D\u820E\u820F\u8210\u8211\u8212\u8213\u8214"+
+            "\u8215\u8216\u8217\u8218\u8219\u821A\u821B\u821C"+
+            "\u821D\u821E\u821F\u8220\u8221\u8222\u8223\u8224"+
+            "\u8225\u8226\u8227\u8228\u8229\u822A\u822B\u822C"+
+            "\u822D\u822E\u822F\u8230\u8231\u8232\u8233\u8234"+
+            "\u8235\u8236\u8237\u8238\u8239\u823A\u823B\u823C"+
+            "\u823D\u823E\u823F\u8240\u8241\u8242\u8243\u8244"+
+            "\u8245\u8246\u8247\u8248\u8249\u824A\u824B\u824C"+
+            "\u824D\u824E\u824F\u8250\u8251\u8252\u8253\u8254"+
+            "\u8255\u8256\u8257\u8258\u8259\u825A\u825B\u825C"+
+            "\u825D\u825E\u825F\u8260\u8261\u8262\u8263\u8264"+
+            "\u8265\u8266\u8267\u8268\u8269\u826A\u826B\u826C"+
+            "\u826D\u826E\u826F\u8270\u8271\u8272\u8273\u8274"+
+            "\u8275\u8276\u8277\u8278\u8279\u827A\u827B\u827C"+
+            "\u827D\u827E\u827F\u8280\u8281\u8282\u8283\u8284"+
+            "\u8285\u8286\u8287\u8288\u8289\u828A\u828B\u828C"+
+            "\u828D\u828E\u828F\u8290\u8291\u8292\u8293\u8294"+
+            "\u8295\u8296\u8297\u8298\u8299\u829A\u829B\u829C"+
+            "\u829D\u829E\u829F\u82A0\u82A1\u82A2\u82A3\u82A4"+
+            "\u82A5\u82A6\u82A7\u82A8\u82A9\u82AA\u82AB\u82AC"+
+            "\u82AD\u82AE\u82AF\u82B0\u82B1\u82B2\u82B3\u82B4"+
+            "\u82B5\u82B6\u82B7\u82B8\u82B9\u82BA\u82BB\u82BC"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u82BD\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u82BE\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u82BF"+
+            "\u82C0\u82C1\u82C2\u82C3\u82C4\u82C5\u82C6\u82C7"+
+            "\u82C8\u82C9\u82CA\u82CB\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u82CC\u0000\u0000"+
+            "\u0000\u82CD\u82CE\u82CF\u82D0\u82D1\u0000\u82D2"+
+            "\u82D3\u82D4\u82D5\u82D6\u82D7\u82D8\u0000\u82D9"+
+            "\u82DA\u82DB\u82DC\u0000\u0000\u82DD\u82DE\u82DF"+
+            "\u82E0\u0000\u0000\u82E1\u82E2\u82E3\u82E4\u82E5"+
+            "\u82E6\u82E7\u82E8\u0000\u82E9\u82EA\u82EB\u82EC"+
+            "\u82ED\u82EE\u82EF\u0000\u82F0\u82F1\u82F2\u82F3"+
+            "\u82F4\u82F5\u82F6\u82F7\u82F8\u82F9\u82FA\u82FB"+
+            "\u82FC\u82FD\u82FE\u82FF\u0000\u0000\u8300\u8301"+
+            "\u8302\u8303\u8304\u8305\u8306\u8307\u8308\u8309"+
+            "\u830A\u830B\u830C\u830D\u0000\u830E\u830F\u8310"+
+            "\u8311\u8312\u8313\u8314\u8315\u8316\u8317\u8318"+
+            "\u8319\u831A\u831B\u831C\u831D\u831E\u831F\u8320"+
+            "\u8321\u8322\u8323\u8324\u8325\u8326\u8327\u8328"+
+            "\u8329\u832A\u832B\u832C\u832D\u832E\u832F\u8330"+
+            "\u8331\u8332\u8333\u8334\u8335\u8336\u8337\u8338"+
+            "\u8339\u833A\u833B\u833C\u833D\u833E\u833F\u8340"+
+            "\u8341\u8342\u8343\u8344\u8345\u8346\u8347\u8348"+
+            "\u8349\u834A\u834B\u834C\u834D\u834E\u834F\u8350"+
+            "\u8351\u8352\u8353\u8354\u8355\u8356\u8357\u8358"+
+            "\u8359\u835A\u835B\u835C\u835D\u835E\u835F\u8360"+
+            "\u8361\u8362\u8363\u8364\u8365\u8366\u8367\u8368"+
+            "\u8369\u836A\u836B\u836C\u836D\u836E\u836F\u8370"+
+            "\u8371\u8372\u8373\u8374\u8375\u8376\u8377\u8378"+
+            "\u8379\u837A\u837B\u837C\u837D\u837E\u837F\u8380"+
+            "\u8381\u8382\u8383\u8384\u8385\u8386\u8387\u8388"+
+            "\u8389\u838A\u838B\u838C\u838D\u838E\u838F\u8390"+
+            "\u8391\u8392\u8393\u8394\u8395\u8396\u8397\u8398"+
+            "\u8399\u839A\u839B\u839C\u839D\u839E\u839F\u83A0"+
+            "\u83A1\u83A2\u83A3\u83A4\u83A5\u83A6\u83A7\u83A8"+
+            "\u83A9\u83AA\u83AB\u83AC\u83AD\u83AE\u83AF\u83B0"+
+            "\u83B1\u83B2\u83B3\u83B4\u83B5\u83B6\u83B7\u83B8"+
+            "\u83B9\u83BA\u83BB\u83BC\u83BD\u83BE\u83BF\u83C0"+
+            "\u83C1\u83C2\u83C3\u83C4\u83C5\u83C6\u83C7\u83C8"+
+            "\u83C9\u83CA\u83CB\u83CC\u83CD\u83CE\u83CF\u83D0"+
+            "\u83D1\u83D2\u83D3\u83D4\u83D5\u83D6\u83D7\u83D8"+
+            "\u83D9\u83DA\u83DB\u83DC\u83DD\u83DE\u83DF\u83E0"+
+            "\u83E1\u83E2\u83E3\u83E4\u83E5\u83E6\u83E7\u83E8"+
+            "\u83E9\u83EA\u83EB\u83EC\u83ED\u83EE\u83EF\u83F0"+
+            "\u83F1\u83F2\u83F3\u83F4\u83F5\u83F6\u83F7\u83F8"+
+            "\u83F9\u83FA\u83FB\u83FC\u83FD\u83FE\u83FF\u8400"+
+            "\u8401\u8402\u8403\u8404\u8405\u8406\u8407\u8408"+
+            "\u8409\u840A\u840B\u840C\u840D\u840E\u840F\u8410"+
+            "\u8411\u8412\u8413\u8414\u8415\u8416\u8417\u8418"+
+            "\u8419\u841A\u841B\u841C\u841D\u841E\u841F\u8420"+
+            "\u8421\u8422\u8423\u8424\u8425\u8426\u8427\u8428"+
+            "\u8429\u842A\u842B\u842C\u842D\u842E\u842F\u8430"+
+            "\u8431\u8432\u8433\u8434\u8435\u8436\u8437\u8438"+
+            "\u8439\u843A\u843B\u843C\u843D\u843E\u843F\u8440"+
+            "\u8441\u8442\u8443\u8444\u8445\u8446\u8447\u8448"+
+            "\u8449\u844A\u844B\u844C\u844D\u844E\u844F\u8450"+
+            "\u8451\u8452\u8453\u8454\u8455\u8456\u8457\u8458"+
+            "\u8459\u845A\u845B\u845C\u845D\u845E\u845F\u8460"+
+            "\u8461\u8462\u8463\u8464\u8465\u8466\u8467\u8468"+
+            "\u8469\u846A\u846B\u846C\u846D\u846E\u846F\u8470"+
+            "\u8471\u8472\u8473\u8474\u8475\u8476\u8477\u8478"+
+            "\u8479\u847A\u847B\u847C\u847D\u847E\u847F\u8480"+
+            "\u8481\u8482\u8483\u8484\u8485\u8486\u8487\u8488"+
+            "\u8489\u848A\u848B\u848C\u848D\u848E\u848F\u8490"+
+            "\u8491\u8492\u8493\u8494\u8495\u8496\u8497\u8498"+
+            "\u8499\u849A\u849B\u849C\u849D\u849E\u849F\u84A0"+
+            "\u84A1\u84A2\u84A3\u84A4\u84A5\u84A6\u84A7\u84A8"+
+            "\u84A9\u84AA\u84AB\u84AC\u84AD\u84AE\u84AF\u84B0"+
+            "\u84B1\u84B2\u84B3\u84B4\u84B5\u84B6\u84B7\u84B8"+
+            "\u84B9\u84BA\u84BB\u84BC\u84BD\u84BE\u84BF\u84C0"+
+            "\u84C1\u84C2\u84C3\u84C4\u84C5\u84C6\u84C7\u84C8"+
+            "\u84C9\u84CA\u84CB\u84CC\u84CD\u84CE\u84CF\u84D0"+
+            "\u84D1\u84D2\u84D3\u84D4\u84D5\u84D6\u84D7\u84D8"+
+            "\u84D9\u84DA\u84DB\u84DC\u84DD\u84DE\u84DF\u84E0"+
+            "\u84E1\u84E2\u84E3\u84E4\u84E5\u84E6\u84E7\u84E8"+
+            "\u84E9\u84EA\u84EB\u84EC\u84ED\u84EE\u84EF\u84F0"+
+            "\u84F1\u84F2\u84F3\u84F4\u84F5\u84F6\u84F7\u84F8"+
+            "\u84F9\u84FA\u84FB\u84FC\u84FD\u84FE\u84FF\u8500"+
+            "\u8501\u8502\u8503\u8504\u8505\u8506\u8507\u8508"+
+            "\u8509\u850A\u850B\u850C\u850D\u850E\u850F\u8510"+
+            "\u8511\u8512\u8513\u8514\u8515\u8516\u8517\u8518"+
+            "\u8519\u851A\u851B\u851C\u851D\u851E\u851F\u8520"+
+            "\u8521\u8522\u8523\u8524\u8525\u8526\u8527\u8528"+
+            "\u8529\u852A\u852B\u852C\u852D\u852E\u852F\u8530"+
+            "\u8531\u8532\u8533\u8534\u8535\u8536\u8537\u8538"+
+            "\u8539\u853A\u853B\u853C\u853D\u853E\u853F\u8540"+
+            "\u8541\u8542\u8543\u8544\u8545\u8546\u8547\u8548"+
+            "\u8549\u854A\u854B\u854C\u854D\u854E\u854F\u8550"+
+            "\u8551\u8552\u8553\u8554\u8555\u8556\u8557\u8558"+
+            "\u8559\u855A\u855B\u855C\u855D\u855E\u855F\u8560"+
+            "\u8561\u8562\u8563\u8564\u8565\u8566\u8567\u8568"+
+            "\u8569\u856A\u856B\u856C\u856D\u856E\u856F\u8570"+
+            "\u8571\u8572\u8573\u8574\u8575\u8576\u8577\u8578"+
+            "\u8579\u857A\u857B\u857C\u857D\u857E\u857F\u8580"+
+            "\u8581\u8582\u8583\u8584\u8585\u8586\u8587\u8588"+
+            "\u8589\u858A\u858B\u858C\u858D\u858E\u858F\u8590"+
+            "\u8591\u8592\u8593\u8594\u8595\u8596\u8597\u8598"+
+            "\u8599\u859A\u859B\u859C\u859D\u859E\u859F\u85A0"+
+            "\u85A1\u85A2\u85A3\u85A4\u85A5\u85A6\u85A7\u85A8"+
+            "\u85A9\u85AA\u85AB\u85AC\u85AD\u85AE\u85AF\u85B0"+
+            "\u85B1\u85B2\u85B3\u85B4\u85B5\u85B6\u85B7\u85B8"+
+            "\u85B9\u85BA\u85BB\u85BC\u85BD\u85BE\u85BF\u85C0"+
+            "\u85C1\u85C2\u85C3\u85C4\u85C5\u85C6\u85C7\u85C8"+
+            "\u85C9\u85CA\u85CB\u85CC\u85CD\u85CE\u85CF\u85D0"+
+            "\u85D1\u85D2\u85D3\u85D4\u85D5\u85D6\u85D7\u85D8"+
+            "\u85D9\u85DA\u85DB\u85DC\u85DD\u85DE\u85DF\u85E0"+
+            "\u85E1\u85E2\u85E3\u85E4\u85E5\u85E6\u85E7\u85E8"+
+            "\u85E9\u85EA\u85EB\u85EC\u85ED\u85EE\u85EF\u85F0"+
+            "\u85F1\u85F2\u85F3\u85F4\u85F5\u85F6\u85F7\u85F8"+
+            "\u85F9\u85FA\u85FB\u85FC\u85FD\u85FE\u85FF\u8600"+
+            "\u8601\u8602\u8603\u8604\u8605\u8606\u8607\u8608"+
+            "\u8609\u860A\u860B\u860C\u860D\u860E\u860F\u8610"+
+            "\u8611\u8612\u8613\u8614\u8615\u8616\u8617\u8618"+
+            "\u8619\u861A\u861B\u861C\u861D\u861E\u861F\u8620"+
+            "\u8621\u8622\u8623\u8624\u8625\u8626\u8627\u8628"+
+            "\u8629\u862A\u862B\u862C\u862D\u862E\u862F\u8630"+
+            "\u8631\u8632\u8633\u8634\u8635\u8636\u8637\u8638"+
+            "\u8639\u863A\u863B\u863C\u863D\u863E\u863F\u8640"+
+            "\u8641\u8642\u8643\u8644\u8645\u8646\u8647\u8648"+
+            "\u8649\u864A\u864B\u864C\u864D\u864E\u864F\u8650"+
+            "\u8651\u8652\u8653\u8654\u8655\u8656\u8657\u8658"+
+            "\u8659\u865A\u865B\u865C\u865D\u865E\u865F\u8660"+
+            "\u8661\u8662\u8663\u8664\u8665\u8666\u8667\u8668"+
+            "\u8669\u866A\u866B\u866C\u866D\u866E\u866F\u8670"+
+            "\u8671\u8672\u8673\u8674\u8675\u8676\u8677\u8678"+
+            "\u8679\u867A\u867B\u867C\u867D\u867E\u867F\u8680"+
+            "\u8681\u8682\u8683\u8684\u8685\u8686\u8687\u8688"+
+            "\u8689\u868A\u868B\u868C\u868D\u868E\u868F\u8690"+
+            "\u8691\u8692\u8693\u8694\u8695\u8696\u8697\u8698"+
+            "\u8699\u869A\u869B\u869C\u869D\u869E\u869F\u86A0"+
+            "\u86A1\u86A2\u86A3\u86A4\u86A5\u86A6\u86A7\u86A8"+
+            "\u86A9\u86AA\u86AB\u86AC\u86AD\u86AE\u86AF\u86B0"+
+            "\u86B1\u86B2\u86B3\u86B4\u86B5\u86B6\u86B7\u86B8"+
+            "\u86B9\u86BA\u86BB\u86BC\u86BD\u86BE\u86BF\u86C0"+
+            "\u86C1\u86C2\u86C3\u86C4\u86C5\u86C6\u86C7\u86C8"+
+            "\u86C9\u86CA\u86CB\u86CC\u86CD\u86CE\u86CF\u86D0"+
+            "\u86D1\u86D2\u86D3\u86D4\u86D5\u86D6\u86D7\u86D8"+
+            "\u86D9\u86DA\u86DB\u86DC\u86DD\u86DE\u86DF\u86E0"+
+            "\u86E1\u86E2\u86E3\u86E4\u86E5\u86E6\u86E7\u86E8"+
+            "\u86E9\u86EA\u86EB\u86EC\u86ED\u86EE\u86EF\u86F0"+
+            "\u86F1\u86F2\u86F3\u86F4\u86F5\u86F6\u86F7\u86F8"+
+            "\u86F9\u86FA\u86FB\u86FC\u86FD\u86FE\u86FF\u8700"+
+            "\u8701\u8702\u8703\u8704\u8705\u8706\u8707\u8708"+
+            "\u8709\u870A\u870B\u870C\u870D\u870E\u870F\u8710"+
+            "\u8711\u8712\u8713\u8714\u8715\u8716\u8717\u8718"+
+            "\u8719\u871A\u871B\u871C\u871D\u871E\u871F\u8720"+
+            "\u8721\u8722\u8723\u8724\u8725\u8726\u8727\u8728"+
+            "\u8729\u872A\u872B\u872C\u872D\u872E\u872F\u8730"+
+            "\u8731\u8732\u8733\u8734\u8735\u8736\u8737\u8738"+
+            "\u8739\u873A\u873B\u873C\u873D\u873E\u873F\u8740"+
+            "\u8741\u8742\u8743\u8744\u8745\u8746\u8747\u8748"+
+            "\u8749\u874A\u874B\u874C\u874D\u874E\u874F\u8750"+
+            "\u8751\u8752\u8753\u8754\u8755\u8756\u8757\u8758"+
+            "\u8759\u875A\u875B\u875C\u875D\u875E\u875F\u8760"+
+            "\u8761\u8762\u8763\u8764\u8765\u8766\u8767\u8768"+
+            "\u8769\u876A\u876B\u876C\u876D\u876E\u876F\u8770"+
+            "\u8771\u8772\u8773\u8774\u8775\u8776\u8777\u8778"+
+            "\u8779\u877A\u877B\u877C\u877D\u877E\u877F\u8780"+
+            "\u8781\u8782\u8783\u8784\u8785\u8786\u8787\u8788"+
+            "\u8789\u878A\u878B\u878C\u878D\u878E\u878F\u8790"+
+            "\u8791\u8792\u8793\u8794\u8795\u8796\u8797\u8798"+
+            "\u8799\u879A\u879B\u879C\u879D\u879E\u879F\u87A0"+
+            "\u87A1\u87A2\u87A3\u87A4\u87A5\u87A6\u87A7\u87A8"+
+            "\u87A9\u87AA\u87AB\u87AC\u87AD\u87AE\u87AF\u87B0"+
+            "\u87B1\u87B2\u87B3\u87B4\u87B5\u87B6\u87B7\u87B8"+
+            "\u87B9\u87BA\u87BB\u87BC\u87BD\u87BE\u87BF\u87C0"+
+            "\u87C1\u87C2\u87C3\u87C4\u87C5\u87C6\u87C7\u87C8"+
+            "\u87C9\u87CA\u87CB\u87CC\u87CD\u87CE\u87CF\u87D0"+
+            "\u87D1\u87D2\u87D3\u87D4\u87D5\u87D6\u87D7\u87D8"+
+            "\u87D9\u87DA\u87DB\u87DC\u87DD\u87DE\u87DF\u87E0"+
+            "\u87E1\u87E2\u87E3\u87E4\u87E5\u87E6\u87E7\u87E8"+
+            "\u87E9\u87EA\u87EB\u87EC\u87ED\u87EE\u87EF\u87F0"+
+            "\u87F1\u87F2\u87F3\u87F4\u87F5\u87F6\u87F7\u87F8"+
+            "\u87F9\u87FA\u87FB\u87FC\u87FD\u87FE\u87FF\u8800"+
+            "\u8801\u8802\u8803\u8804\u8805\u8806\u8807\u8808"+
+            "\u8809\u880A\u880B\u880C\u880D\u880E\u880F\u8810"+
+            "\u8811\u8812\u8813\u8814\u8815\u8816\u8817\u8818"+
+            "\u8819\u881A\u881B\u881C\u881D\u881E\u881F\u8820"+
+            "\u8821\u8822\u8823\u8824\u8825\u8826\u8827\u8828"+
+            "\u8829\u882A\u882B\u882C\u882D\u882E\u882F\u8830"+
+            "\u8831\u8832\u8833\u8834\u8835\u8836\u8837\u8838"+
+            "\u8839\u883A\u883B\u883C\u883D\u883E\u883F\u8840"+
+            "\u8841\u8842\u8843\u8844\u8845\u8846\u8847\u8848"+
+            "\u8849\u884A\u884B\u884C\u884D\u884E\u884F\u8850"+
+            "\u8851\u8852\u8853\u8854\u8855\u8856\u8857\u8858"+
+            "\u8859\u885A\u885B\u885C\u885D\u885E\u885F\u8860"+
+            "\u8861\u8862\u8863\u8864\u8865\u8866\u8867\u8868"+
+            "\u8869\u886A\u886B\u886C\u886D\u886E\u886F\u8870"+
+            "\u8871\u8872\u8873\u8874\u8875\u8876\u8877\u8878"+
+            "\u8879\u887A\u887B\u887C\u887D\u887E\u887F\u8880"+
+            "\u8881\u8882\u8883\u8884\u8885\u8886\u8887\u8888"+
+            "\u8889\u888A\u888B\u888C\u888D\u888E\u888F\u8890"+
+            "\u8891\u8892\u8893\u8894\u8895\u8896\u8897\u8898"+
+            "\u8899\u889A\u889B\u889C\u889D\u889E\u889F\u88A0"+
+            "\u88A1\u88A2\u88A3\u88A4\u88A5\u88A6\u88A7\u88A8"+
+            "\u88A9\u88AA\u88AB\u88AC\u88AD\u88AE\u88AF\u88B0"+
+            "\u88B1\u88B2\u88B3\u88B4\u88B5\u88B6\u88B7\u88B8"+
+            "\u88B9\u88BA\u88BB\u88BC\u88BD\u88BE\u88BF\u88C0"+
+            "\u88C1\u88C2\u88C3\u88C4\u88C5\u88C6\u88C7\u88C8"+
+            "\u88C9\u88CA\u88CB\u88CC\u88CD\u88CE\u88CF\u88D0"+
+            "\u88D1\u88D2\u88D3\u88D4\u88D5\u88D6\u88D7\u88D8"+
+            "\u88D9\u88DA\u88DB\u88DC\u88DD\u88DE\u88DF\u88E0"+
+            "\u88E1\u88E2\u88E3\u88E4\u88E5\u88E6\u88E7\u88E8"+
+            "\u88E9\u88EA\u88EB\u88EC\u88ED\u88EE\u88EF\u88F0"+
+            "\u88F1\u88F2\u88F3\u88F4\u88F5\u88F6\u88F7\u88F8"+
+            "\u88F9\u88FA\u88FB\u88FC\u88FD\u88FE\u88FF\u8900"+
+            "\u8901\u8902\u8903\u8904\u8905\u8906\u8907\u8908"+
+            "\u8909\u890A\u890B\u890C\u890D\u890E\u890F\u8910"+
+            "\u8911\u8912\u8913\u8914\u8915\u8916\u8917\u8918"+
+            "\u8919\u891A\u891B\u891C\u891D\u891E\u891F\u8920"+
+            "\u8921\u8922\u8923\u8924\u8925\u8926\u8927\u8928"+
+            "\u8929\u892A\u892B\u892C\u892D\u892E\u892F\u8930"+
+            "\u8931\u8932\u8933\u8934\u8935\u8936\u8937\u8938"+
+            "\u8939\u893A\u893B\u893C\u893D\u893E\u893F\u8940"+
+            "\u8941\u8942\u8943\u8944\u8945\u8946\u8947\u8948"+
+            "\u8949\u894A\u894B\u894C\u894D\u894E\u894F\u8950"+
+            "\u8951\u8952\u8953\u8954\u8955\u8956\u8957\u8958"+
+            "\u8959\u895A\u895B\u895C\u895D\u895E\u895F\u8960"+
+            "\u8961\u8962\u8963\u8964\u8965\u8966\u8967\u8968"+
+            "\u8969\u896A\u896B\u896C\u896D\u896E\u896F\u8970"+
+            "\u8971\u8972\u8973\u8974\u8975\u8976\u8977\u8978"+
+            "\u8979\u897A\u897B\u897C\u897D\u897E\u897F\u8980"+
+            "\u8981\u8982\u8983\u8984\u8985\u8986\u8987\u8988"+
+            "\u8989\u898A\u898B\u898C\u898D\u898E\u898F\u8990"+
+            "\u8991\u8992\u8993\u8994\u8995\u8996\u8997\u8998"+
+            "\u8999\u899A\u899B\u899C\u899D\u899E\u899F\u89A0"+
+            "\u89A1\u89A2\u89A3\u89A4\u89A5\u89A6\u89A7\u89A8";
+
+        private final static String innerIndex9=
+            "\u89A9\u89AA\u89AB\u89AC\u89AD\u89AE\u89AF\u89B0"+
+            "\u89B1\u89B2\u89B3\u89B4\u89B5\u89B6\u89B7\u89B8"+
+            "\u89B9\u89BA\u89BB\u89BC\u89BD\u89BE\u89BF\u89C0"+
+            "\u89C1\u89C2\u89C3\u89C4\u89C5\u89C6\u89C7\u89C8"+
+            "\u89C9\u89CA\u89CB\u89CC\u89CD\u89CE\u89CF\u89D0"+
+            "\u89D1\u89D2\u89D3\u89D4\u89D5\u89D6\u89D7\u89D8"+
+            "\u89D9\u89DA\u89DB\u89DC\u89DD\u89DE\u89DF\u89E0"+
+            "\u89E1\u89E2\u89E3\u89E4\u89E5\u89E6\u89E7\u89E8"+
+            "\u89E9\u89EA\u89EB\u89EC\u89ED\u89EE\u89EF\u89F0"+
+            "\u89F1\u89F2\u89F3\u89F4\u89F5\u89F6\u89F7\u89F8"+
+            "\u89F9\u89FA\u89FB\u89FC\u89FD\u89FE\u89FF\u8A00"+
+            "\u8A01\u8A02\u8A03\u8A04\u8A05\u8A06\u8A07\u8A08"+
+            "\u8A09\u8A0A\u8A0B\u8A0C\u8A0D\u8A0E\u8A0F\u8A10"+
+            "\u8A11\u8A12\u8A13\u8A14\u8A15\u8A16\u8A17\u8A18"+
+            "\u8A19\u8A1A\u8A1B\u8A1C\u8A1D\u8A1E\u8A1F\u8A20"+
+            "\u8A21\u8A22\u8A23\u8A24\u8A25\u8A26\u8A27\u8A28"+
+            "\u8A29\u8A2A\u8A2B\u8A2C\u8A2D\u8A2E\u8A2F\u8A30"+
+            "\u8A31\u8A32\u8A33\u8A34\u8A35\u8A36\u8A37\u8A38"+
+            "\u8A39\u8A3A\u8A3B\u8A3C\u8A3D\u8A3E\u8A3F\u8A40"+
+            "\u8A41\u8A42\u8A43\u8A44\u8A45\u8A46\u8A47\u8A48"+
+            "\u8A49\u8A4A\u8A4B\u8A4C\u8A4D\u8A4E\u8A4F\u8A50"+
+            "\u8A51\u8A52\u8A53\u8A54\u8A55\u8A56\u8A57\u8A58"+
+            "\u8A59\u8A5A\u8A5B\u8A5C\u8A5D\u8A5E\u8A5F\u8A60"+
+            "\u8A61\u8A62\u8A63\u8A64\u8A65\u8A66\u8A67\u8A68"+
+            "\u8A69\u8A6A\u8A6B\u8A6C\u8A6D\u8A6E\u8A6F\u8A70"+
+            "\u8A71\u8A72\u8A73\u8A74\u8A75\u8A76\u8A77\u8A78"+
+            "\u8A79\u8A7A\u8A7B\u8A7C\u8A7D\u8A7E\u8A7F\u8A80"+
+            "\u8A81\u8A82\u8A83\u8A84\u8A85\u8A86\u8A87\u8A88"+
+            "\u8A89\u8A8A\u8A8B\u8A8C\u8A8D\u8A8E\u8A8F\u8A90"+
+            "\u8A91\u8A92\u8A93\u8A94\u8A95\u8A96\u8A97\u8A98"+
+            "\u8A99\u8A9A\u8A9B\u8A9C\u8A9D\u8A9E\u8A9F\u8AA0"+
+            "\u8AA1\u8AA2\u8AA3\u8AA4\u8AA5\u8AA6\u8AA7\u8AA8"+
+            "\u8AA9\u8AAA\u8AAB\u8AAC\u8AAD\u8AAE\u8AAF\u8AB0"+
+            "\u8AB1\u8AB2\u8AB3\u8AB4\u8AB5\u8AB6\u8AB7\u8AB8"+
+            "\u8AB9\u8ABA\u8ABB\u8ABC\u8ABD\u8ABE\u8ABF\u8AC0"+
+            "\u8AC1\u8AC2\u8AC3\u8AC4\u8AC5\u8AC6\u8AC7\u8AC8"+
+            "\u8AC9\u8ACA\u8ACB\u8ACC\u8ACD\u8ACE\u8ACF\u8AD0"+
+            "\u8AD1\u8AD2\u8AD3\u8AD4\u8AD5\u8AD6\u8AD7\u8AD8"+
+            "\u8AD9\u8ADA\u8ADB\u8ADC\u8ADD\u8ADE\u8ADF\u8AE0"+
+            "\u8AE1\u8AE2\u8AE3\u8AE4\u8AE5\u8AE6\u8AE7\u8AE8"+
+            "\u8AE9\u8AEA\u8AEB\u8AEC\u8AED\u8AEE\u8AEF\u8AF0"+
+            "\u8AF1\u8AF2\u8AF3\u8AF4\u8AF5\u8AF6\u8AF7\u8AF8"+
+            "\u8AF9\u8AFA\u8AFB\u8AFC\u8AFD\u8AFE\u8AFF\u8B00"+
+            "\u8B01\u8B02\u8B03\u8B04\u8B05\u8B06\u8B07\u8B08"+
+            "\u8B09\u8B0A\u8B0B\u8B0C\u8B0D\u8B0E\u8B0F\u8B10"+
+            "\u8B11\u8B12\u8B13\u8B14\u8B15\u8B16\u8B17\u8B18"+
+            "\u8B19\u8B1A\u8B1B\u8B1C\u8B1D\u8B1E\u8B1F\u8B20"+
+            "\u8B21\u8B22\u8B23\u8B24\u8B25\u8B26\u8B27\u8B28"+
+            "\u8B29\u8B2A\u8B2B\u8B2C\u8B2D\u8B2E\u8B2F\u8B30"+
+            "\u8B31\u8B32\u8B33\u8B34\u8B35\u8B36\u8B37\u8B38"+
+            "\u8B39\u8B3A\u8B3B\u8B3C\u8B3D\u8B3E\u8B3F\u8B40"+
+            "\u8B41\u8B42\u8B43\u8B44\u8B45\u8B46\u8B47\u8B48"+
+            "\u8B49\u8B4A\u8B4B\u8B4C\u8B4D\u8B4E\u8B4F\u8B50"+
+            "\u8B51\u8B52\u8B53\u8B54\u8B55\u8B56\u8B57\u8B58"+
+            "\u8B59\u8B5A\u8B5B\u8B5C\u8B5D\u8B5E\u8B5F\u8B60"+
+            "\u8B61\u8B62\u8B63\u8B64\u8B65\u8B66\u8B67\u8B68"+
+            "\u8B69\u8B6A\u8B6B\u8B6C\u8B6D\u8B6E\u8B6F\u8B70"+
+            "\u8B71\u8B72\u8B73\u8B74\u8B75\u8B76\u8B77\u8B78"+
+            "\u8B79\u8B7A\u8B7B\u8B7C\u8B7D\u8B7E\u8B7F\u8B80"+
+            "\u8B81\u8B82\u8B83\u8B84\u8B85\u8B86\u8B87\u8B88"+
+            "\u8B89\u8B8A\u8B8B\u8B8C\u8B8D\u8B8E\u8B8F\u8B90"+
+            "\u8B91\u8B92\u8B93\u8B94\u8B95\u8B96\u8B97\u8B98"+
+            "\u8B99\u8B9A\u8B9B\u8B9C\u8B9D\u8B9E\u8B9F\u8BA0"+
+            "\u8BA1\u8BA2\u8BA3\u8BA4\u8BA5\u8BA6\u8BA7\u8BA8"+
+            "\u8BA9\u8BAA\u8BAB\u8BAC\u8BAD\u8BAE\u8BAF\u8BB0"+
+            "\u8BB1\u8BB2\u8BB3\u8BB4\u8BB5\u8BB6\u8BB7\u8BB8"+
+            "\u8BB9\u8BBA\u8BBB\u8BBC\u8BBD\u8BBE\u8BBF\u8BC0"+
+            "\u8BC1\u8BC2\u8BC3\u8BC4\u8BC5\u8BC6\u8BC7\u8BC8"+
+            "\u8BC9\u8BCA\u8BCB\u8BCC\u8BCD\u8BCE\u8BCF\u8BD0"+
+            "\u8BD1\u8BD2\u8BD3\u8BD4\u8BD5\u8BD6\u8BD7\u8BD8"+
+            "\u8BD9\u8BDA\u8BDB\u8BDC\u8BDD\u8BDE\u8BDF\u8BE0"+
+            "\u8BE1\u8BE2\u8BE3\u8BE4\u8BE5\u8BE6\u8BE7\u8BE8"+
+            "\u8BE9\u8BEA\u8BEB\u8BEC\u8BED\u8BEE\u8BEF\u8BF0"+
+            "\u8BF1\u8BF2\u8BF3\u8BF4\u8BF5\u8BF6\u8BF7\u8BF8"+
+            "\u8BF9\u8BFA\u8BFB\u8BFC\u8BFD\u8BFE\u8BFF\u8C00"+
+            "\u8C01\u8C02\u8C03\u8C04\u8C05\u8C06\u8C07\u8C08"+
+            "\u8C09\u8C0A\u8C0B\u8C0C\u8C0D\u8C0E\u8C0F\u8C10"+
+            "\u8C11\u8C12\u8C13\u8C14\u8C15\u8C16\u8C17\u8C18"+
+            "\u8C19\u8C1A\u8C1B\u8C1C\u8C1D\u8C1E\u8C1F\u8C20"+
+            "\u8C21\u8C22\u8C23\u8C24\u8C25\u8C26\u8C27\u8C28"+
+            "\u8C29\u8C2A\u8C2B\u8C2C\u8C2D\u8C2E\u8C2F\u8C30"+
+            "\u8C31\u8C32\u8C33\u8C34\u8C35\u8C36\u8C37\u8C38"+
+            "\u8C39\u8C3A\u8C3B\u8C3C\u8C3D\u8C3E\u8C3F\u8C40"+
+            "\u8C41\u8C42\u8C43\u8C44\u8C45\u8C46\u8C47\u8C48"+
+            "\u8C49\u8C4A\u8C4B\u8C4C\u8C4D\u8C4E\u8C4F\u8C50"+
+            "\u8C51\u8C52\u8C53\u8C54\u8C55\u8C56\u8C57\u8C58"+
+            "\u8C59\u8C5A\u8C5B\u8C5C\u8C5D\u8C5E\u8C5F\u8C60"+
+            "\u8C61\u8C62\u8C63\u8C64\u8C65\u8C66\u8C67\u8C68"+
+            "\u8C69\u8C6A\u8C6B\u8C6C\u8C6D\u8C6E\u8C6F\u8C70"+
+            "\u8C71\u8C72\u8C73\u8C74\u8C75\u8C76\u8C77\u8C78"+
+            "\u8C79\u8C7A\u8C7B\u8C7C\u8C7D\u8C7E\u8C7F\u8C80"+
+            "\u8C81\u8C82\u8C83\u8C84\u8C85\u8C86\u8C87\u8C88"+
+            "\u8C89\u8C8A\u8C8B\u8C8C\u8C8D\u8C8E\u8C8F\u8C90"+
+            "\u8C91\u8C92\u8C93\u8C94\u8C95\u8C96\u8C97\u8C98"+
+            "\u8C99\u8C9A\u8C9B\u8C9C\u8C9D\u8C9E\u8C9F\u8CA0"+
+            "\u8CA1\u8CA2\u8CA3\u8CA4\u8CA5\u8CA6\u8CA7\u8CA8"+
+            "\u8CA9\u8CAA\u8CAB\u8CAC\u8CAD\u8CAE\u8CAF\u8CB0"+
+            "\u8CB1\u8CB2\u8CB3\u8CB4\u8CB5\u8CB6\u8CB7\u8CB8"+
+            "\u8CB9\u8CBA\u8CBB\u8CBC\u8CBD\u8CBE\u8CBF\u8CC0"+
+            "\u8CC1\u8CC2\u8CC3\u8CC4\u8CC5\u8CC6\u8CC7\u8CC8"+
+            "\u8CC9\u8CCA\u8CCB\u8CCC\u8CCD\u8CCE\u8CCF\u8CD0"+
+            "\u8CD1\u8CD2\u8CD3\u8CD4\u8CD5\u8CD6\u8CD7\u8CD8"+
+            "\u8CD9\u8CDA\u8CDB\u8CDC\u8CDD\u8CDE\u8CDF\u8CE0"+
+            "\u8CE1\u8CE2\u8CE3\u8CE4\u8CE5\u8CE6\u8CE7\u8CE8"+
+            "\u8CE9\u8CEA\u8CEB\u8CEC\u8CED\u8CEE\u8CEF\u8CF0"+
+            "\u8CF1\u8CF2\u8CF3\u8CF4\u8CF5\u8CF6\u8CF7\u8CF8"+
+            "\u8CF9\u8CFA\u8CFB\u8CFC\u8CFD\u8CFE\u8CFF\u8D00"+
+            "\u8D01\u8D02\u8D03\u8D04\u8D05\u8D06\u8D07\u8D08"+
+            "\u8D09\u8D0A\u8D0B\u8D0C\u8D0D\u8D0E\u8D0F\u8D10"+
+            "\u8D11\u8D12\u8D13\u8D14\u8D15\u8D16\u8D17\u8D18"+
+            "\u8D19\u8D1A\u8D1B\u8D1C\u8D1D\u8D1E\u8D1F\u8D20"+
+            "\u8D21\u8D22\u8D23\u8D24\u8D25\u8D26\u8D27\u8D28"+
+            "\u8D29\u8D2A\u8D2B\u8D2C\u8D2D\u8D2E\u8D2F\u8D30"+
+            "\u8D31\u8D32\u8D33\u8D34\u8D35\u8D36\u8D37\u8D38"+
+            "\u8D39\u8D3A\u8D3B\u8D3C\u8D3D\u8D3E\u8D3F\u8D40"+
+            "\u8D41\u8D42\u8D43\u8D44\u8D45\u8D46\u8D47\u8D48"+
+            "\u8D49\u8D4A\u8D4B\u8D4C\u8D4D\u8D4E\u8D4F\u8D50"+
+            "\u8D51\u8D52\u8D53\u8D54\u8D55\u8D56\u8D57\u8D58"+
+            "\u8D59\u8D5A\u8D5B\u8D5C\u8D5D\u8D5E\u8D5F\u8D60"+
+            "\u8D61\u8D62\u8D63\u8D64\u8D65\u8D66\u8D67\u8D68"+
+            "\u8D69\u8D6A\u8D6B\u8D6C\u8D6D\u8D6E\u8D6F\u8D70"+
+            "\u8D71\u8D72\u8D73\u8D74\u8D75\u8D76\u8D77\u8D78"+
+            "\u8D79\u8D7A\u8D7B\u8D7C\u8D7D\u8D7E\u8D7F\u8D80"+
+            "\u8D81\u8D82\u8D83\u8D84\u8D85\u8D86\u8D87\u8D88"+
+            "\u8D89\u8D8A\u8D8B\u8D8C\u8D8D\u8D8E\u8D8F\u8D90"+
+            "\u8D91\u8D92\u8D93\u8D94\u8D95\u8D96\u8D97\u8D98"+
+            "\u8D99\u8D9A\u8D9B\u8D9C\u8D9D\u8D9E\u8D9F\u8DA0"+
+            "\u8DA1\u8DA2\u8DA3\u8DA4\u8DA5\u8DA6\u8DA7\u8DA8"+
+            "\u8DA9\u8DAA\u8DAB\u8DAC\u8DAD\u8DAE\u8DAF\u8DB0"+
+            "\u8DB1\u8DB2\u8DB3\u8DB4\u8DB5\u8DB6\u8DB7\u8DB8"+
+            "\u8DB9\u8DBA\u8DBB\u8DBC\u8DBD\u8DBE\u8DBF\u8DC0"+
+            "\u8DC1\u8DC2\u8DC3\u8DC4\u8DC5\u8DC6\u8DC7\u8DC8"+
+            "\u8DC9\u8DCA\u8DCB\u8DCC\u8DCD\u8DCE\u8DCF\u8DD0"+
+            "\u8DD1\u8DD2\u8DD3\u8DD4\u8DD5\u8DD6\u8DD7\u8DD8"+
+            "\u8DD9\u8DDA\u8DDB\u8DDC\u8DDD\u8DDE\u8DDF\u8DE0"+
+            "\u8DE1\u8DE2\u8DE3\u8DE4\u8DE5\u8DE6\u8DE7\u8DE8"+
+            "\u8DE9\u8DEA\u8DEB\u8DEC\u8DED\u8DEE\u8DEF\u8DF0"+
+            "\u8DF1\u8DF2\u8DF3\u8DF4\u8DF5\u8DF6\u8DF7\u8DF8"+
+            "\u8DF9\u8DFA\u8DFB\u8DFC\u8DFD\u8DFE\u8DFF\u8E00"+
+            "\u8E01\u8E02\u8E03\u8E04\u8E05\u8E06\u8E07\u8E08"+
+            "\u8E09\u8E0A\u8E0B\u8E0C\u8E0D\u8E0E\u8E0F\u8E10"+
+            "\u8E11\u8E12\u8E13\u8E14\u8E15\u8E16\u8E17\u8E18"+
+            "\u8E19\u8E1A\u8E1B\u8E1C\u8E1D\u8E1E\u8E1F\u8E20"+
+            "\u8E21\u8E22\u8E23\u8E24\u8E25\u8E26\u8E27\u8E28"+
+            "\u8E29\u8E2A\u8E2B\u8E2C\u8E2D\u8E2E\u8E2F\u8E30"+
+            "\u8E31\u8E32\u8E33\u8E34\u8E35\u8E36\u8E37\u8E38"+
+            "\u8E39\u8E3A\u8E3B\u8E3C\u8E3D\u8E3E\u8E3F\u8E40"+
+            "\u8E41\u8E42\u8E43\u8E44\u8E45\u8E46\u8E47\u8E48"+
+            "\u8E49\u8E4A\u8E4B\u8E4C\u8E4D\u8E4E\u8E4F\u8E50"+
+            "\u8E51\u8E52\u8E53\u8E54\u8E55\u8E56\u8E57\u8E58"+
+            "\u8E59\u8E5A\u8E5B\u8E5C\u8E5D\u8E5E\u8E5F\u8E60"+
+            "\u8E61\u8E62\u8E63\u8E64\u8E65\u8E66\u8E67\u8E68"+
+            "\u8E69\u8E6A\u8E6B\u8E6C\u8E6D\u8E6E\u8E6F\u8E70"+
+            "\u8E71\u8E72\u8E73\u8E74\u8E75\u8E76\u8E77\u8E78"+
+            "\u8E79\u8E7A\u8E7B\u8E7C\u8E7D\u8E7E\u8E7F\u8E80"+
+            "\u8E81\u8E82\u8E83\u8E84\u8E85\u8E86\u8E87\u8E88"+
+            "\u8E89\u8E8A\u8E8B\u8E8C\u8E8D\u8E8E\u8E8F\u8E90"+
+            "\u8E91\u8E92\u8E93\u8E94\u8E95\u8E96\u8E97\u8E98"+
+            "\u8E99\u8E9A\u8E9B\u8E9C\u8E9D\u8E9E\u8E9F\u8EA0"+
+            "\u8EA1\u8EA2\u8EA3\u8EA4\u8EA5\u8EA6\u8EA7\u8EA8"+
+            "\u8EA9\u8EAA\u8EAB\u8EAC\u8EAD\u8EAE\u8EAF\u8EB0"+
+            "\u8EB1\u8EB2\u8EB3\u8EB4\u8EB5\u8EB6\u8EB7\u8EB8"+
+            "\u8EB9\u8EBA\u8EBB\u8EBC\u8EBD\u8EBE\u8EBF\u8EC0"+
+            "\u8EC1\u8EC2\u8EC3\u8EC4\u8EC5\u8EC6\u8EC7\u8EC8"+
+            "\u8EC9\u8ECA\u8ECB\u8ECC\u8ECD\u8ECE\u8ECF\u8ED0"+
+            "\u8ED1\u8ED2\u8ED3\u8ED4\u8ED5\u8ED6\u8ED7\u8ED8"+
+            "\u8ED9\u8EDA\u8EDB\u8EDC\u8EDD\u8EDE\u8EDF\u8EE0"+
+            "\u8EE1\u8EE2\u8EE3\u8EE4\u8EE5\u8EE6\u8EE7\u8EE8"+
+            "\u8EE9\u8EEA\u8EEB\u8EEC\u8EED\u8EEE\u8EEF\u8EF0"+
+            "\u8EF1\u8EF2\u8EF3\u8EF4\u8EF5\u8EF6\u8EF7\u8EF8"+
+            "\u8EF9\u8EFA\u8EFB\u8EFC\u8EFD\u8EFE\u8EFF\u8F00"+
+            "\u8F01\u8F02\u8F03\u8F04\u8F05\u8F06\u8F07\u8F08"+
+            "\u8F09\u8F0A\u8F0B\u8F0C\u8F0D\u8F0E\u8F0F\u8F10"+
+            "\u8F11\u8F12\u8F13\u8F14\u8F15\u8F16\u8F17\u8F18"+
+            "\u8F19\u8F1A\u8F1B\u8F1C\u8F1D\u8F1E\u8F1F\u8F20"+
+            "\u8F21\u8F22\u8F23\u8F24\u8F25\u8F26\u8F27\u8F28"+
+            "\u8F29\u8F2A\u8F2B\u8F2C\u8F2D\u8F2E\u8F2F\u8F30"+
+            "\u8F31\u8F32\u8F33\u8F34\u8F35\u8F36\u8F37\u8F38"+
+            "\u8F39\u8F3A\u8F3B\u8F3C\u8F3D\u8F3E\u8F3F\u8F40"+
+            "\u8F41\u8F42\u8F43\u8F44\u8F45\u8F46\u8F47\u8F48"+
+            "\u8F49\u8F4A\u8F4B\u8F4C\u8F4D\u8F4E\u8F4F\u8F50"+
+            "\u8F51\u8F52\u8F53\u8F54\u8F55\u8F56\u8F57\u8F58"+
+            "\u8F59\u8F5A\u8F5B\u8F5C\u8F5D\u8F5E\u8F5F\u8F60"+
+            "\u8F61\u8F62\u8F63\u8F64\u8F65\u8F66\u8F67\u8F68"+
+            "\u8F69\u8F6A\u8F6B\u8F6C\u8F6D\u8F6E\u8F6F\u8F70"+
+            "\u8F71\u8F72\u8F73\u8F74\u8F75\u8F76\u8F77\u8F78"+
+            "\u8F79\u8F7A\u8F7B\u8F7C\u8F7D\u8F7E\u8F7F\u8F80"+
+            "\u8F81\u8F82\u8F83\u8F84\u8F85\u8F86\u8F87\u8F88"+
+            "\u8F89\u8F8A\u8F8B\u8F8C\u8F8D\u8F8E\u8F8F\u8F90"+
+            "\u8F91\u8F92\u8F93\u8F94\u8F95\u8F96\u8F97\u8F98"+
+            "\u8F99\u8F9A\u8F9B\u8F9C\u8F9D\u8F9E\u8F9F\u8FA0"+
+            "\u8FA1\u8FA2\u8FA3\u8FA4\u8FA5\u8FA6\u8FA7\u8FA8"+
+            "\u8FA9\u8FAA\u8FAB\u8FAC\u8FAD\u8FAE\u8FAF\u8FB0"+
+            "\u8FB1\u8FB2\u8FB3\u8FB4\u8FB5\u8FB6\u8FB7\u8FB8"+
+            "\u8FB9\u8FBA\u8FBB\u8FBC\u8FBD\u8FBE\u8FBF\u8FC0"+
+            "\u8FC1\u8FC2\u8FC3\u8FC4\u8FC5\u8FC6\u8FC7\u8FC8"+
+            "\u8FC9\u8FCA\u8FCB\u8FCC\u8FCD\u8FCE\u8FCF\u8FD0"+
+            "\u8FD1\u8FD2\u8FD3\u8FD4\u8FD5\u8FD6\u8FD7\u8FD8"+
+            "\u8FD9\u8FDA\u8FDB\u8FDC\u8FDD\u8FDE\u8FDF\u8FE0"+
+            "\u8FE1\u8FE2\u8FE3\u8FE4\u8FE5\u8FE6\u8FE7\u8FE8"+
+            "\u8FE9\u8FEA\u8FEB\u8FEC\u8FED\u8FEE\u8FEF\u8FF0"+
+            "\u8FF1\u8FF2\u8FF3\u8FF4\u8FF5\u8FF6\u8FF7\u8FF8"+
+            "\u8FF9\u8FFA\u8FFB\u8FFC\u8FFD\u8FFE\u8FFF\u9000"+
+            "\u9001\u9002\u9003\u9004\u9005\u9006\u9007\u9008"+
+            "\u9009\u900A\u900B\u900C\u900D\u900E\u900F\u9010"+
+            "\u9011\u9012\u9013\u9014\u9015\u9016\u9017\u9018"+
+            "\u9019\u901A\u901B\u901C\u901D\u901E\u901F\u9020"+
+            "\u9021\u9022\u9023\u9024\u9025\u9026\u9027\u9028"+
+            "\u9029\u902A\u902B\u902C\u902D\u902E\u902F\u9030"+
+            "\u9031\u9032\u9033\u9034\u9035\u9036\u9037\u9038"+
+            "\u9039\u903A\u903B\u903C\u903D\u903E\u903F\u9040"+
+            "\u9041\u9042\u9043\u9044\u9045\u9046\u9047\u9048"+
+            "\u9049\u904A\u904B\u904C\u904D\u904E\u904F\u9050"+
+            "\u9051\u9052\u9053\u9054\u9055\u9056\u9057\u9058"+
+            "\u9059\u905A\u905B\u905C\u905D\u905E\u905F\u9060"+
+            "\u9061\u9062\u9063\u9064\u9065\u9066\u9067\u9068"+
+            "\u9069\u906A\u906B\u906C\u906D\u906E\u906F\u9070"+
+            "\u9071\u9072\u9073\u9074\u9075\u9076\u9077\u9078"+
+            "\u9079\u907A\u907B\u907C\u907D\u907E\u907F\u9080"+
+            "\u9081\u9082\u9083\u9084\u9085\u9086\u9087\u9088"+
+            "\u9089\u908A\u908B\u908C\u908D\u908E\u908F\u9090"+
+            "\u9091\u9092\u9093\u9094\u9095\u9096\u9097\u9098"+
+            "\u9099\u909A\u909B\u909C\u909D\u909E\u909F\u90A0"+
+            "\u90A1\u90A2\u90A3\u90A4\u90A5\u90A6\u90A7\u90A8"+
+            "\u90A9\u90AA\u90AB\u90AC\u90AD\u90AE\u90AF\u90B0"+
+            "\u90B1\u90B2\u90B3\u90B4\u90B5\u90B6\u90B7\u90B8"+
+            "\u90B9\u90BA\u90BB\u90BC\u90BD\u90BE\u90BF\u90C0"+
+            "\u90C1\u90C2\u90C3\u90C4\u90C5\u90C6\u90C7\u90C8"+
+            "\u90C9\u90CA\u90CB\u90CC\u90CD\u90CE\u90CF\u90D0"+
+            "\u90D1\u90D2\u90D3\u90D4\u90D5\u90D6\u90D7\u90D8"+
+            "\u90D9\u90DA\u90DB\u90DC\u90DD\u90DE\u90DF\u90E0"+
+            "\u90E1\u90E2\u90E3\u90E4\u90E5\u90E6\u90E7\u90E8"+
+            "\u90E9\u90EA\u90EB\u90EC\u90ED\u90EE\u90EF\u90F0"+
+            "\u90F1\u90F2\u90F3\u90F4\u90F5\u90F6\u90F7\u90F8"+
+            "\u90F9\u90FA\u90FB\u90FC\u90FD\u90FE\u90FF\u9100"+
+            "\u9101\u9102\u9103\u9104\u9105\u9106\u9107\u9108"+
+            "\u9109\u910A\u910B\u910C\u910D\u910E\u910F\u9110"+
+            "\u9111\u9112\u9113\u9114\u9115\u9116\u9117\u9118"+
+            "\u9119\u911A\u911B\u911C\u911D\u911E\u911F\u9120"+
+            "\u9121\u9122\u9123\u9124\u9125\u9126\u9127\u9128"+
+            "\u9129\u912A\u912B\u912C\u912D\u912E\u912F\u9130"+
+            "\u9131\u9132\u9133\u9134\u9135\u9136\u9137\u9138"+
+            "\u9139\u913A\u913B\u913C\u913D\u913E\u913F\u9140"+
+            "\u9141\u9142\u9143\u9144\u9145\u9146\u9147\u9148"+
+            "\u9149\u914A\u914B\u914C\u914D\u914E\u914F\u9150"+
+            "\u9151\u9152\u9153\u9154\u9155\u9156\u9157\u9158"+
+            "\u9159\u915A\u915B\u915C\u915D\u915E\u915F\u9160"+
+            "\u9161\u9162\u9163\u9164\u9165\u9166\u9167\u9168"+
+            "\u9169\u916A\u916B\u916C\u916D\u916E\u916F\u9170"+
+            "\u9171\u9172\u9173\u9174\u9175\u9176\u9177\u9178"+
+            "\u9179\u917A\u917B\u917C\u917D\u917E\u917F\u9180"+
+            "\u9181\u9182\u9183\u9184\u9185\u9186\u9187\u9188"+
+            "\u9189\u918A\u918B\u918C\u918D\u918E\u918F\u9190"+
+            "\u9191\u9192\u9193\u9194\u9195\u9196\u9197\u9198"+
+            "\u9199\u919A\u919B\u919C\u919D\u919E\u919F\u91A0"+
+            "\u91A1\u91A2\u91A3\u91A4\u91A5\u91A6\u91A7\u91A8"+
+            "\u91A9\u91AA\u91AB\u91AC\u91AD\u91AE\u91AF\u91B0"+
+            "\u91B1\u91B2\u91B3\u91B4\u91B5\u91B6\u91B7\u91B8"+
+            "\u91B9\u91BA\u91BB\u91BC\u91BD\u91BE\u91BF\u91C0"+
+            "\u91C1\u91C2\u91C3\u91C4\u91C5\u91C6\u91C7\u91C8"+
+            "\u91C9\u91CA\u91CB\u91CC\u91CD\u91CE\u91CF\u91D0"+
+            "\u91D1\u91D2\u91D3\u91D4\u91D5\u91D6\u91D7\u91D8"+
+            "\u91D9\u91DA\u91DB\u91DC\u91DD\u91DE\u91DF\u91E0"+
+            "\u91E1\u91E2\u91E3\u91E4\u91E5\u91E6\u91E7\u91E8"+
+            "\u91E9\u91EA\u91EB\u91EC\u91ED\u91EE\u91EF\u91F0"+
+            "\u91F1\u91F2\u91F3\u91F4\u91F5\u91F6\u91F7\u91F8"+
+            "\u91F9\u91FA\u91FB\u91FC\u91FD\u91FE\u91FF\u9200"+
+            "\u9201\u9202\u9203\u9204\u9205\u9206\u9207\u9208"+
+            "\u9209\u920A\u920B\u920C\u920D\u920E\u920F\u9210"+
+            "\u9211\u9212\u9213\u9214\u9215\u9216\u9217\u9218"+
+            "\u9219\u921A\u921B\u921C\u921D\u921E\u921F\u9220"+
+            "\u9221\u9222\u9223\u9224\u9225\u9226\u9227\u9228"+
+            "\u9229\u922A\u922B\u922C\u922D\u922E\u922F\u9230"+
+            "\u9231\u9232\u9233\u9234\u9235\u9236\u9237\u9238"+
+            "\u9239\u923A\u923B\u923C\u923D\u923E\u923F\u9240"+
+            "\u9241\u9242\u9243\u9244\u9245\u9246\u9247\u9248"+
+            "\u9249\u924A\u924B\u924C\u924D\u924E\u924F\u9250"+
+            "\u9251\u9252\u9253\u9254\u9255\u9256\u9257\u9258"+
+            "\u9259\u925A\u925B\u925C\u925D\u925E\u925F\u9260"+
+            "\u9261\u9262\u9263\u9264\u9265\u9266\u9267\u9268"+
+            "\u9269\u926A\u926B\u926C\u926D\u926E\u926F\u9270"+
+            "\u9271\u9272\u9273\u9274\u9275\u9276\u9277\u9278"+
+            "\u9279\u927A\u927B\u927C\u927D\u927E\u927F\u9280"+
+            "\u9281\u9282\u9283\u9284\u9285\u9286\u9287\u9288"+
+            "\u9289\u928A\u928B\u928C\u928D\u928E\u928F\u9290"+
+            "\u9291\u9292\u9293\u9294\u9295\u9296\u9297\u9298"+
+            "\u9299\u929A\u929B\u929C\u929D\u929E\u929F\u92A0"+
+            "\u92A1\u92A2\u92A3\u92A4\u92A5\u92A6\u92A7\u92A8"+
+            "\u92A9\u92AA\u92AB\u92AC\u92AD\u92AE\u92AF\u92B0"+
+            "\u92B1\u92B2\u92B3\u92B4\u92B5\u92B6\u92B7\u92B8"+
+            "\u92B9\u92BA\u92BB\u92BC\u92BD\u92BE\u92BF\u92C0"+
+            "\u92C1\u92C2\u92C3\u92C4\u92C5\u92C6\u92C7\u92C8"+
+            "\u92C9\u92CA\u92CB\u92CC\u92CD\u92CE\u92CF\u92D0"+
+            "\u92D1\u92D2\u92D3\u92D4\u92D5\u92D6\u92D7\u92D8"+
+            "\u92D9\u92DA\u92DB\u92DC\u92DD\u92DE\u92DF\u92E0"+
+            "\u92E1\u92E2\u92E3\u92E4\u92E5\u92E6\u92E7\u92E8"+
+            "\u92E9\u92EA\u92EB\u92EC\u92ED\u92EE\u92EF\u92F0"+
+            "\u92F1\u92F2\u92F3\u92F4\u92F5\u92F6\u92F7\u92F8"+
+            "\u92F9\u92FA\u92FB\u92FC\u92FD\u92FE\u92FF\u9300"+
+            "\u9301\u9302\u9303\u9304\u9305\u9306\u9307\u9308"+
+            "\u9309\u930A\u930B\u930C\u930D\u930E\u930F\u9310"+
+            "\u9311\u9312\u9313\u9314\u9315\u9316\u9317\u9318"+
+            "\u9319\u931A\u931B\u931C\u931D\u931E\u931F\u9320"+
+            "\u9321\u9322\u9323\u9324\u9325\u9326\u9327\u9328"+
+            "\u9329\u932A\u932B\u932C\u932D\u932E\u932F\u9330"+
+            "\u9331\u9332\u9333\u9334\u9335\u9336\u9337\u9338"+
+            "\u9339\u933A\u933B\u933C\u933D\u933E\u933F\u9340"+
+            "\u9341\u9342\u9343\u9344\u9345\u9346\u9347\u9348"+
+            "\u9349\u934A\u934B\u934C\u934D\u934E\u934F\u9350"+
+            "\u9351\u9352\u9353\u9354\u9355\u9356\u9357\u9358"+
+            "\u9359\u935A\u935B\u935C\u935D\u935E\u935F\u9360"+
+            "\u9361\u9362\u9363\u9364\u9365\u9366\u9367\u9368"+
+            "\u9369\u936A\u936B\u936C\u936D\u936E\u936F\u9370"+
+            "\u9371\u9372\u9373\u9374\u9375\u9376\u9377\u9378"+
+            "\u9379\u937A\u937B\u937C\u937D\u937E\u937F\u9380"+
+            "\u9381\u9382\u9383\u9384\u9385\u9386\u9387\u9388"+
+            "\u9389\u938A\u938B\u938C\u938D\u938E\u938F\u9390"+
+            "\u9391\u9392\u9393\u9394\u9395\u9396\u9397\u9398"+
+            "\u9399\u939A\u939B\u939C\u939D\u939E\u939F\u93A0"+
+            "\u93A1\u93A2\u93A3\u93A4\u93A5\u93A6\u93A7\u93A8"+
+            "\u93A9\u93AA\u93AB\u93AC\u93AD\u93AE\u93AF\u93B0"+
+            "\u93B1\u93B2\u93B3\u93B4\u93B5\u93B6\u93B7\u93B8"+
+            "\u93B9\u93BA\u93BB\u93BC\u93BD\u93BE\u93BF\u93C0"+
+            "\u93C1\u93C2\u93C3\u93C4\u93C5\u93C6\u93C7\u93C8"+
+            "\u93C9\u93CA\u93CB\u93CC\u93CD\u93CE\u93CF\u93D0"+
+            "\u93D1\u93D2\u93D3\u93D4\u0000\u93D5\u93D6\u93D7"+
+            "\u93D8\u93D9\u93DA\u93DB\u93DC\u93DD\u93DE\u93DF"+
+            "\u93E0\u93E1\u93E2\u93E3\u93E4\u93E5\u93E6\u93E7"+
+            "\u93E8\u93E9\u93EA\u93EB\u93EC\u93ED\u93EE\u93EF"+
+            "\u93F0\u93F1\u93F2\u93F3\u93F4\u93F5\u93F6\u93F7"+
+            "\u93F8\u93F9\u93FA\u93FB\u93FC\u93FD\u93FE\u93FF"+
+            "\u9400\u9401\u9402\u9403\u9404\u9405\u9406\u9407"+
+            "\u9408\u9409\u940A\u940B\u940C\u940D\u940E\u940F"+
+            "\u9410\u9411\u9412\u9413\u9414\u9415\u9416\u9417"+
+            "\u9418\u9419\u941A\u941B\u941C\u941D\u941E\u941F"+
+            "\u9420\u0000\u9421\u9422\u9423\u9424\u9425\u9426"+
+            "\u9427\u9428\u9429\u942A\u942B\u942C\u942D\u942E"+
+            "\u942F\u9430\u9431\u9432\u9433\u9434\u9435\u9436"+
+            "\u9437\u9438\u9439\u943A\u943B\u0000\u943C\u943D"+
+            "\u943E\u943F\u9440\u9441\u9442\u9443\u9444\u9445"+
+            "\u9446\u9447\u9448\u9449\u944A\u944B\u944C\u944D"+
+            "\u944E\u944F\u9450\u9451\u9452\u9453\u9454\u9455"+
+            "\u9456\u9457\u9458\u9459\u945A\u945B\u945C\u945D"+
+            "\u945E\u945F\u9460\u9461\u9462\u9463\u9464\u9465"+
+            "\u9466\u9467\u9468\u9469\u946A\u946B\u946C\u946D"+
+            "\u946E\u946F\u9470\u9471\u9472\u9473\u9474\u9475"+
+            "\u9476\u9477\u9478\u9479\u947A\u947B\u947C\u947D"+
+            "\u947E\u947F\u9480\u9481\u9482\u9483\u9484\u9485"+
+            "\u9486\u9487\u9488\u9489\u948A\u948B\u948C\u0000"+
+            "\u948D\u948E\u948F\u9490\u9491\u9492\u9493\u9494"+
+            "\u9495\u0000\u9496\u9497\u9498\u9499\u949A\u949B"+
+            "\u949C\u949D\u949E\u949F\u94A0\u94A1\u94A2\u94A3"+
+            "\u94A4\u94A5\u94A6\u94A7\u94A8\u94A9\u94AA\u94AB"+
+            "\u94AC\u94AD\u94AE\u94AF\u0000\u0000\u0000\u0000"+
+            "\u94B0\u0000\u94B1\u0000\u0000\u94B2\u94B3\u94B4"+
+            "\u0000\u94B5\u94B6\u94B7\u94B8\u94B9\u94BA\u0000"+
+            "\u0000\u0000\u94BB\u0000\u0000\u94BC\u94BD\u0000"+
+            "\u0000\u0000\u94BE\u94BF\u94C0\u94C1\u94C2\u94C3"+
+            "\u94C4\u94C5\u94C6\u94C7\u94C8\u94C9\u94CA\u94CB"+
+            "\u94CC\u94CD\u94CE\u94CF\u94D0\u94D1\u94D2\u94D3"+
+            "\u94D4\u94D5\u94D6\u94D7\u94D8\u94D9\u94DA\u94DB"+
+            "\u94DC\u94DD\u94DE\u94DF\u94E0\u94E1\u94E2\u94E3"+
+            "\u94E4\u94E5\u94E6\u94E7\u94E8\u94E9\u94EA\u94EB"+
+            "\u94EC\u94ED\u94EE\u94EF\u94F0\u94F1\u94F2\u94F3"+
+            "\u94F4\u94F5\u94F6\u94F7\u94F8\u94F9\u94FA\u94FB"+
+            "\u94FC\u94FD\u94FE\u94FF\u9500\u9501\u9502\u9503"+
+            "\u9504\u9505\u9506\u9507\u9508\u9509\u950A\u950B"+
+            "\u950C\u950D\u950E\u950F\u9510\u9511\u9512\u9513"+
+            "\u9514\u9515\u9516\u9517\u9518\u9519\u951A\u951B"+
+            "\u951C\u951D\u951E\u951F\u9520\u9521\u9522\u9523"+
+            "\u9524\u9525\u9526\u9527\u9528\u9529\u952A\u952B"+
+            "\u952C\u952D\u952E\u952F\u9530\u9531\u9532\u9533"+
+            "\u9534\u9535\u9536\u9537\u9538\u9539\u953A\u953B"+
+            "\u953C\u953D\u953E\u953F\u9540\u9541\u9542\u9543"+
+            "\u9544\u9545\u9546\u9547\u9548\u9549\u954A\u954B"+
+            "\u954C\u954D\u954E\u954F\u9550\u9551\u9552\u9553"+
+            "\u9554\u9555\u9556\u9557\u9558\u9559\u955A\u955B"+
+            "\u955C\u955D\u955E\u955F\u9560\u9561\u9562\u9563"+
+            "\u9564\u9565\u9566\u9567\u9568\u9569\u956A\u956B"+
+            "\u956C\u956D\u956E\u956F\u9570\u9571\u9572\u9573"+
+            "\u9574\u9575\u9576\u9577\u9578\u9579\u957A\u957B"+
+            "\u957C\u957D\u957E\u957F\u9580\u9581\u9582\u9583"+
+            "\u9584\u9585\u9586\u9587\u9588\u9589\u958A\u958B"+
+            "\u958C\u958D\u958E\u958F\u9590\u9591\u9592\u9593"+
+            "\u9594\u9595\u9596\u9597\u9598\u9599\u959A\u959B"+
+            "\u959C\u959D\u959E\u959F\u95A0\u95A1\u95A2\u95A3"+
+            "\u95A4\u95A5\u95A6\u95A7\u95A8\u95A9\u95AA\u95AB"+
+            "\u95AC\u95AD\u95AE\u95AF\u95B0\u95B1\u95B2\u95B3"+
+            "\u95B4\u95B5\u95B6\u95B7\u95B8\u95B9\u95BA\u95BB"+
+            "\u95BC\u95BD\u95BE\u95BF\u95C0\u95C1\u95C2\u95C3"+
+            "\u95C4\u95C5\u95C6\u95C7\u95C8\u95C9\u95CA\u95CB"+
+            "\u95CC\u95CD\u95CE\u95CF\u95D0\u95D1\u95D2\u95D3"+
+            "\u95D4\u95D5\u95D6\u95D7\u95D8\u95D9\u95DA\u95DB"+
+            "\u95DC\u95DD\u95DE\u95DF\u95E0\u95E1\u95E2\u95E3"+
+            "\u95E4\u95E5\u95E6\u95E7\u95E8\u95E9\u95EA\u95EB"+
+            "\u95EC\u95ED\u95EE\u95EF\u95F0\u95F1\u95F2\u95F3"+
+            "\u95F4\u95F5\u95F6\u95F7\u95F8\u95F9\u95FA\u95FB"+
+            "\u95FC\u95FD\u95FE\u95FF\u9600\u9601\u9602\u9603"+
+            "\u9604\u9605\u9606\u9607\u9608\u9609\u960A\u960B"+
+            "\u960C\u960D\u960E\u960F\u9610\u9611\u9612\u9613"+
+            "\u9614\u9615\u9616\u9617\u9618\u9619\u961A\u961B"+
+            "\u961C\u961D\u961E\u961F\u9620\u9621\u9622\u9623"+
+            "\u9624\u9625\u9626\u9627\u9628\u9629\u962A\u962B"+
+            "\u962C\u962D\u962E\u962F\u9630\u9631\u9632\u9633"+
+            "\u9634\u9635\u9636\u9637\u9638\u9639\u963A\u963B"+
+            "\u963C\u963D\u963E\u963F\u9640\u9641\u9642\u9643"+
+            "\u9644\u9645\u9646\u9647\u9648\u9649\u964A\u964B"+
+            "\u964C\u964D\u964E\u964F\u9650\u9651\u9652\u9653"+
+            "\u9654\u9655\u9656\u9657\u9658\u9659\u965A\u965B"+
+            "\u965C\u965D\u965E\u965F\u9660\u9661\u9662\u9663"+
+            "\u9664\u9665\u9666\u9667\u9668\u9669\u966A\u966B"+
+            "\u966C\u966D\u966E\u966F\u9670\u9671\u9672\u9673"+
+            "\u9674\u9675\u9676\u9677\u9678\u9679\u967A\u967B"+
+            "\u967C\u967D\u967E\u967F\u9680\u9681\u9682\u9683"+
+            "\u9684\u9685\u9686\u9687\u9688\u9689\u968A\u968B"+
+            "\u968C\u968D\u968E\u968F\u9690\u9691\u9692\u9693"+
+            "\u9694\u9695\u9696\u9697\u9698\u9699\u969A\u969B"+
+            "\u969C\u969D\u969E\u969F\u96A0\u96A1\u96A2\u96A3"+
+            "\u96A4\u96A5\u96A6\u96A7\u96A8\u96A9\u96AA\u96AB"+
+            "\u96AC\u96AD\u96AE\u96AF\u96B0\u96B1\u96B2\u96B3"+
+            "\u96B4\u96B5\u96B6\u96B7\u96B8\u96B9\u96BA\u96BB"+
+            "\u96BC\u96BD\u96BE\u96BF\u96C0\u96C1\u96C2\u96C3"+
+            "\u96C4\u96C5\u96C6\u96C7\u96C8\u96C9\u96CA\u96CB"+
+            "\u96CC\u96CD\u96CE\u96CF\u96D0\u96D1\u96D2\u96D3"+
+            "\u96D4\u96D5\u96D6\u96D7\u96D8\u96D9\u96DA\u96DB"+
+            "\u96DC\u96DD\u96DE\u96DF\u96E0\u96E1\u96E2\u96E3"+
+            "\u96E4\u96E5\u96E6\u96E7\u96E8\u96E9\u96EA\u96EB"+
+            "\u96EC\u96ED\u96EE\u96EF\u96F0\u96F1\u96F2\u96F3"+
+            "\u96F4\u96F5\u96F6\u96F7\u96F8\u96F9\u96FA\u96FB"+
+            "\u96FC\u96FD\u96FE\u96FF\u9700\u9701\u9702\u9703"+
+            "\u9704\u9705\u9706\u9707\u9708\u9709\u970A\u970B"+
+            "\u970C\u970D\u970E\u970F\u9710\u9711\u9712\u9713"+
+            "\u9714\u9715\u9716\u9717\u9718\u9719\u971A\u971B"+
+            "\u971C\u971D\u971E\u971F\u9720\u9721\u9722\u9723"+
+            "\u9724\u9725\u9726\u9727\u9728\u9729\u972A\u972B"+
+            "\u972C\u972D\u972E\u972F\u9730\u9731\u9732\u9733"+
+            "\u9734\u9735\u9736\u9737\u9738\u9739\u973A\u973B"+
+            "\u973C\u973D\u973E\u973F\u9740\u9741\u9742\u9743"+
+            "\u9744\u9745\u9746\u9747\u9748\u9749\u974A\u974B"+
+            "\u974C\u974D\u974E\u974F\u9750\u9751\u9752\u9753"+
+            "\u9754\u9755\u9756\u9757\u9758\u9759\u975A\u975B"+
+            "\u975C\u975D\u975E\u975F\u9760\u9761\u9762\u9763"+
+            "\u9764\u9765\u9766\u9767\u9768\u9769\u976A\u976B"+
+            "\u976C\u976D\u976E\u976F\u9770\u9771\u9772\u9773"+
+            "\u9774\u9775\u9776\u9777\u9778\u9779\u977A\u977B"+
+            "\u977C\u977D\u977E\u977F\u9780\u9781\u9782\u9783"+
+            "\u9784\u9785\u9786\u9787\u9788\u9789\u978A\u978B"+
+            "\u978C\u978D\u978E\u978F\u9790\u9791\u9792\u9793"+
+            "\u9794\u9795\u9796\u9797\u9798\u9799\u979A\u979B"+
+            "\u979C\u979D\u979E\u979F\u97A0\u97A1\u97A2\u97A3"+
+            "\u97A4\u97A5\u97A6\u97A7\u97A8\u97A9\u97AA\u97AB"+
+            "\u97AC\u97AD\u97AE\u97AF\u97B0\u97B1\u97B2\u97B3"+
+            "\u97B4\u97B5\u97B6\u97B7\u97B8\u97B9\u97BA\u97BB"+
+            "\u97BC\u97BD\u97BE\u97BF\u97C0\u97C1\u97C2\u97C3"+
+            "\u97C4\u97C5\u97C6\u97C7\u97C8\u97C9\u97CA\u97CB"+
+            "\u97CC\u97CD\u97CE\u97CF\u97D0\u97D1\u97D2\u97D3"+
+            "\u97D4\u97D5\u97D6\u97D7\u97D8\u97D9\u97DA\u97DB"+
+            "\u97DC\u97DD\u97DE\u97DF\u97E0\u97E1\u97E2\u97E3"+
+            "\u97E4\u97E5\u97E6\u97E7\u97E8\u97E9\u97EA\u97EB"+
+            "\u97EC\u97ED\u97EE\u97EF\u97F0\u97F1\u97F2\u97F3"+
+            "\u97F4\u97F5\u97F6\u97F7\u97F8\u97F9\u97FA\u97FB"+
+            "\u97FC\u97FD\u97FE\u97FF\u9800\u9801\u9802\u9803"+
+            "\u9804\u9805\u9806\u9807\u9808\u9809\u980A\u980B"+
+            "\u980C\u980D\u980E\u980F\u9810\u9811\u9812\u9813"+
+            "\u9814\u9815\u9816\u9817\u9818\u9819\u981A\u981B"+
+            "\u981C\u981D\u981E\u981F\u9820\u9821\u9822\u9823"+
+            "\u9824\u9825\u9826\u9827\u9828\u9829\u982A\u982B"+
+            "\u982C\u982D\u982E\u982F\u9830\u9831\u9832\u9833"+
+            "\u9834\u9835\u9836\u9837\u9838\u9839\u983A\u983B"+
+            "\u983C\u983D\u983E\u983F\u9840\u9841\u9842\u9843"+
+            "\u9844\u9845\u9846\u9847\u9848\u9849\u984A\u984B"+
+            "\u984C\u984D\u984E\u984F\u9850\u9851\u9852\u9853"+
+            "\u9854\u9855\u9856\u9857\u9858\u9859\u985A\u985B"+
+            "\u985C\u985D\u985E\u985F\u9860\u9861\u9862\u9863"+
+            "\u9864\u9865\u9866\u9867\u9868\u9869\u986A\u986B"+
+            "\u986C\u986D\u986E\u986F\u9870\u9871\u9872\u9873"+
+            "\u9874\u9875\u9876\u9877\u9878\u9879\u987A\u987B"+
+            "\u987C\u987D\u987E\u987F\u9880\u9881\u9882\u9883"+
+            "\u9884\u9885\u9886\u9887\u9888\u9889\u988A\u988B"+
+            "\u988C\u988D\u988E\u988F\u9890\u9891\u9892\u9893"+
+            "\u9894\u9895\u9896\u9897\u9898\u9899\u989A\u989B"+
+            "\u989C\u989D\u989E\u989F\u98A0\u98A1\u98A2\u98A3"+
+            "\u98A4\u98A5\u98A6\u98A7\u98A8\u98A9\u98AA\u98AB"+
+            "\u98AC\u98AD\u98AE\u98AF\u98B0\u98B1\u98B2\u98B3"+
+            "\u98B4\u98B5\u98B6\u98B7\u98B8\u98B9\u98BA\u98BB"+
+            "\u98BC\u98BD\u98BE\u98BF\u98C0\u98C1\u98C2\u98C3"+
+            "\u0000\u0000\u98C4\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u98C5\u98C6\u98C7"+
+            "\u98C8\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u98C9\u0000\u0000\u0000\u0000"+
+            "\u98CA\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u98CB"+
+            "\u0000\u0000\u0000\u0000\u98CC\u98CD\u98CE\u98CF"+
+            "\u98D0\u98D1\u98D2\u98D3\u98D4\u98D5\u98D6\u98D7"+
+            "\u98D8\u98D9\u98DA\u98DB\u98DC\u98DD\u98DE\u98DF"+
+            "\u98E0\u98E1\u98E2\u98E3\u98E4\u98E5\u98E6\u98E7"+
+            "\u98E8\u98E9\u98EA\u98EB\u98EC\u98ED\u98EE\u98EF"+
+            "\u98F0\u98F1\u98F2\u98F3\u98F4\u98F5\u98F6\u98F7"+
+            "\u98F8\u98F9\u98FA\u98FB\u98FC\u98FD\u98FE\u98FF"+
+            "\u9900\u9901\u9902\u9903\u9904\u9905\u9906\u9907"+
+            "\u9908\u9909\u990A\u990B\u990C\u990D\u990E\u990F"+
+            "\u9910\u9911\u9912\u9913\u9914\u9915\u9916\u9917"+
+            "\u9918\u9919\u991A\u991B\u991C\u991D\u991E\u991F"+
+            "\u9920\u9921\u9922\u9923\u9924\u9925\u9926\u9927"+
+            "\u9928\u9929\u992A\u992B\u992C\u992D\u992E\u992F"+
+            "\u9930\u9931\u9932\u9933\u9934\u9935\u9936\u9937"+
+            "\u9938\u9939\u993A\u993B\u993C\u993D\u993E\u993F"+
+            "\u9940\u9941\u9942\u9943\u9944\u9945\u9946\u9947"+
+            "\u9948\u9949\u994A\u994B\u994C\u994D\u994E\u994F"+
+            "\u9950\u9951\u9952\u9953\u9954\u9955\u9956\u9957"+
+            "\u9958\u9959\u995A\u995B\u995C\u995D\u995E\u995F";
+
+        private final static String innerIndex10=
+            "\u9960\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u9961"+
+            "\u9962\u9963\u9964\u9965\u9966\u9967\u9968\u9969"+
+            "\u996A\u996B\u996C\u996D\u996E\u996F\u9970\u9971"+
+            "\u9972\u9973\u9974\u9975\u9976\u9977\u9978\u9979"+
+            "\u997A\u997B\u997C\u997D\u997E\u997F\u9980\u9981"+
+            "\u9982\u9983\u9984\u9985\u9986\u9987\u9988\u9989"+
+            "\u998A\u998B\u998C\u998D\u998E\u998F\u9990\u9991"+
+            "\u9992\u9993\u9994\u9995\u9996\u9997\u9998\u9999"+
+            "\u999A\u999B\u999C\u999D\u999E\u999F\u99A0\u99A1"+
+            "\u99A2\u99A3\u99A4\u99A5\u99A6\u99A7\u99A8\u99A9"+
+            "\u99AA\u99AB\u99AC\u99AD\u99AE\u99AF\u99B0\u99B1"+
+            "\u99B2\u99B3\u99B4\u99B5\u99B6\u99B7\u99B8\u99B9"+
+            "\u99BA\u99BB\u99BC\u99BD\u99BE\u99BF\u99C0\u99C1"+
+            "\u99C2\u99C3\u99C4\u99C5\u99C6\u99C7\u99C8\u99C9"+
+            "\u99CA\u99CB\u99CC\u99CD\u99CE\u99CF\u99D0\u99D1"+
+            "\u99D2\u99D3\u99D4\u99D5\u99D6\u99D7\u99D8\u99D9"+
+            "\u99DA\u99DB\u99DC\u99DD\u99DE\u99DF\u99E0\u99E1"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u99E2\u99E3"+
+            "\u99E4\u99E5\u99E6\u99E7\u99E8\u99E9\u99EA\u99EB"+
+            "\u99EC\u99ED\u99EE\u99EF\u99F0\u99F1\u99F2\u99F3"+
+            "\u99F4\u99F5\u99F6\u99F7\u99F8\u0000\u99FA\u99FB";
+
+        private final static short index1[] = {
+            1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
+            17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
+            33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
+            49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
+            65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 0, 0,
+            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79,
+            80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
+            96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
+            112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127,
+            128, 129, 130, 131, 132, 133, 134, 135, 0, 0, 0, 0, 0, 0, 0, 0,
+            0, 0, 0, 0, 0, 0, 0, 136, 137, 138, 139, 140, 141, 142, 143, 144,
+            145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160
+        };
+
+        private final static String index2[] = {
+            innerIndex0,
+            innerIndex1,
+            innerIndex2,
+            innerIndex3,
+            innerIndex4,
+            innerIndex5,
+            innerIndex6,
+            innerIndex7,
+            innerIndex8,
+            innerIndex9,
+            innerIndex10
+        };
+
+        /* The default implementation creates a decoder and we don't have one */
+        public boolean isLegalReplacement(byte[] repl) {
+            return true;
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.desktop/unix/classes/sun/font/X11GB2312.java	Wed Jul 05 20:33:35 2017 +0200
@@ -0,0 +1,149 @@
+/*
+ * Copyright (c) 1996, 2005, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package sun.font;
+
+import java.nio.CharBuffer;
+import java.nio.ByteBuffer;
+import java.nio.charset.*;
+import sun.nio.cs.*;
+import static sun.nio.cs.CharsetMapping.*;
+
+public class X11GB2312 extends Charset {
+    public X11GB2312 () {
+        super("X11GB2312", null);
+    }
+    public CharsetEncoder newEncoder() {
+        return new Encoder(this);
+    }
+    public CharsetDecoder newDecoder() {
+        return new Decoder(this);
+    }
+
+    public boolean contains(Charset cs) {
+        return cs instanceof X11GB2312;
+    }
+
+    private class Encoder extends CharsetEncoder {
+        private DoubleByte.Encoder enc = (DoubleByte.Encoder)new EUC_CN().newEncoder();
+
+        public Encoder(Charset cs) {
+            super(cs, 2.0f, 2.0f);
+        }
+
+        public boolean canEncode(char c) {
+            if (c <= 0x7F) {
+                return false;
+            }
+            return enc.canEncode(c);
+        }
+
+        protected int encodeDouble(char c) {
+            return enc.encodeChar(c);
+        }
+
+        protected CoderResult encodeLoop(CharBuffer src, ByteBuffer dst) {
+            char[] sa = src.array();
+            int sp = src.arrayOffset() + src.position();
+            int sl = src.arrayOffset() + src.limit();
+
+            byte[] da = dst.array();
+            int dp = dst.arrayOffset() + dst.position();
+            int dl = dst.arrayOffset() + dst.limit();
+
+            try {
+                while (sp < sl) {
+                    char c = sa[sp];
+                    if (c <= '\u007f')
+                        return CoderResult.unmappableForLength(1);
+                    int ncode = encodeDouble(c);
+                    if (ncode != 0 && c != '\u0000' ) {
+                        da[dp++] = (byte) ((ncode  >> 8) & 0x7f);
+                        da[dp++] = (byte) (ncode & 0x7f);
+                        sp++;
+                        continue;
+                    }
+                    return CoderResult.unmappableForLength(1);
+                }
+                return CoderResult.UNDERFLOW;
+            } finally {
+                src.position(sp - src.arrayOffset());
+                dst.position(dp - dst.arrayOffset());
+            }
+        }
+        public boolean isLegalReplacement(byte[] repl) {
+            return true;
+        }
+    }
+
+    private class Decoder extends  CharsetDecoder {
+        private DoubleByte.Decoder dec = (DoubleByte.Decoder)new EUC_CN().newDecoder();
+
+        public Decoder(Charset cs) {
+            super(cs, 0.5f, 1.0f);
+        }
+
+        protected char decodeDouble(int b1, int b2) {
+            return dec.decodeDouble(b1, b2);
+        }
+
+        protected CoderResult decodeLoop(ByteBuffer src, CharBuffer dst) {
+            byte[] sa = src.array();
+            int sp = src.arrayOffset() + src.position();
+            int sl = src.arrayOffset() + src.limit();
+            assert (sp <= sl);
+            sp = (sp <= sl ? sp : sl);
+            char[] da = dst.array();
+            int dp = dst.arrayOffset() + dst.position();
+            int dl = dst.arrayOffset() + dst.limit();
+            assert (dp <= dl);
+            dp = (dp <= dl ? dp : dl);
+
+            try {
+                while (sp < sl) {
+                    if ( sl - sp < 2) {
+                        return CoderResult.UNDERFLOW;
+                    }
+                    int b1 = sa[sp] & 0xFF | 0x80;
+                    int b2 = sa[sp + 1] & 0xFF | 0x80;
+                    char c = decodeDouble(b1, b2);
+                    if (c == UNMAPPABLE_DECODING) {
+                        return CoderResult.unmappableForLength(2);
+                    }
+                    if (dl - dp < 1)
+                        return CoderResult.OVERFLOW;
+                    da[dp++] = c;
+                    sp +=2;
+                }
+                return CoderResult.UNDERFLOW;
+            } finally {
+                src.position(sp - src.arrayOffset());
+                dst.position(dp - dst.arrayOffset());
+            }
+
+        }
+    }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.desktop/unix/classes/sun/font/X11GBK.java	Wed Jul 05 20:33:35 2017 +0200
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 1999, 2005, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package sun.font;
+
+import java.nio.charset.*;
+import sun.nio.cs.*;
+import static sun.nio.cs.CharsetMapping.*;
+
+public class X11GBK extends Charset {
+    public X11GBK () {
+        super("X11GBK", null);
+    }
+    public CharsetEncoder newEncoder() {
+        return new Encoder(this);
+    }
+    public CharsetDecoder newDecoder() {
+        return new GBK().newDecoder();
+    }
+
+    public boolean contains(Charset cs) {
+        return cs instanceof X11GBK;
+    }
+
+    private class Encoder extends DoubleByte.Encoder {
+
+        private DoubleByte.Encoder enc = (DoubleByte.Encoder)new GBK().newEncoder();
+
+        Encoder(Charset cs) {
+            super(cs, (char[])null, (char[])null);
+        }
+
+        public boolean canEncode(char ch){
+            if (ch < 0x80) return false;
+            return enc.canEncode(ch);
+        }
+
+        public int encodeChar(char ch) {
+            if (ch < 0x80)
+                return UNMAPPABLE_ENCODING;
+            return enc.encodeChar(ch);
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.desktop/unix/classes/sun/font/X11Johab.java	Wed Jul 05 20:33:35 2017 +0200
@@ -0,0 +1,4782 @@
+/*
+ * Copyright (c) 2002, 2005, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package sun.font;
+
+import java.nio.charset.Charset;
+import java.nio.charset.CharsetEncoder;
+import java.nio.charset.CharsetDecoder;
+
+public class X11Johab extends Charset {
+    public X11Johab () {
+        super("X11Johab", null);
+    }
+
+    public CharsetEncoder newEncoder() {
+        return new Encoder(this);
+    }
+
+    public CharsetDecoder newDecoder() {
+        throw new Error("Decoder is not supported by X11Johab Charset");
+    }
+
+    public boolean contains(Charset cs) {
+        return cs instanceof X11GB18030_1;
+    }
+
+    private static class Encoder extends DoubleByteEncoder {
+        public Encoder(Charset cs) {
+            super(cs, index1, index2);
+        }
+
+        public boolean isLegalReplacement(byte[] repl) {
+            return true;
+        }
+
+        private final static String innerIndex0=
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uD9AE\u0000\u0000\uD9B4\u0000\u0000\uD967"+
+            "\uD937\u0000\uDCA3\uD97C\u0000\u0000\u0000\u0000"+
+            "\uD956\uD94E\uDD99\uDD9A\uD9A5\u0000\uD9D2\u0000"+
+            "\uD9AC\uDD98\uDCAC\uD97D\uDCF9\uDCF6\uDCFA\uD9AF"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uDCA1\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uDCA2\u0000\u0000\u0000\u0000\u0000\u0000\uD94F"+
+            "\uDCAA\u0000\u0000\u0000\u0000\u0000\uDCAD\uDD3C"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uDD31\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uDD33\u0000\u0000\u0000\u0000\u0000\u0000\uD950"+
+            "\uDD3A\u0000\u0000\u0000\u0000\u0000\uDD3D\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uDD32\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uDCA4\uDD34"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uDD35\uDCA6\uDD36\u0000\u0000\u0000\u0000"+
+            "\uDD37\u0000\u0000\u0000\u0000\u0000\u0000\uDCA8"+
+            "\uDD38\uDCA9\uDD39\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uDD40\uDCAF\uDD3F\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uDCAB\uDD3B\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uDCAE\uDD3E"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uD9A7"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uD9A8\uD9AB\uD9AA\uD9AD\uD9A6\uD9A9\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uDB51\uDB52\uDB53\uDB54\uDB55\uDB56\uDB57"+
+            "\uDB58\uDB59\uDB5A\uDB5B\uDB5C\uDB5D\uDB5E\uDB5F"+
+            "\uDB60\uDB61\u0000\uDB62\uDB63\uDB64\uDB65\uDB66"+
+            "\uDB67\uDB68\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uDB71\uDB72\uDB73\uDB74\uDB75\uDB76\uDB77"+
+            "\uDB78\uDB79\uDB7A\uDB7B\uDB7C\uDB7D\uDB7E\uDB91"+
+            "\uDB92\uDB93\u0000\uDB94\uDB95\uDB96\uDB97\uDB98"+
+            "\uDB99\uDB9A\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uDEA7\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uDEA1\uDEA2\uDEA3\uDEA4\uDEA5\uDEA6\uDEA8\uDEA9"+
+            "\uDEAA\uDEAB\uDEAC\uDEAD\uDEAE\uDEAF\uDEB0\uDEB1"+
+            "\uDEB2\uDEB3\uDEB4\uDEB5\uDEB6\uDEB7\uDEB8\uDEB9"+
+            "\uDEBA\uDEBB\uDEBC\uDEBD\uDEBE\uDEBF\uDEC0\uDEC1"+
+            "\uDED1\uDED2\uDED3\uDED4\uDED5\uDED6\uDED8\uDED9"+
+            "\uDEDA\uDEDB\uDEDC\uDEDD\uDEDE\uDEDF\uDEE0\uDEE1"+
+            "\uDEE2\uDEE3\uDEE4\uDEE5\uDEE6\uDEE7\uDEE8\uDEE9"+
+            "\uDEEA\uDEEB\uDEEC\uDEED\uDEEE\uDEEF\uDEF0\uDEF1"+
+            "\u0000\uDED7\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uD939\uD93A\u0000\uD93B\u0000"+
+            "\uD93E\uD93F\u0000\u0000\uD940\uD941\u0000\u0000"+
+            "\uD9D3\uD9D4\u0000\u0000\u0000\uD935\uD936\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uD9B6\u0000\uD957\uD958\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uD968\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uDD9B\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uDD9C"+
+            "\u0000\uDD9D\uDD9E\uDD9F\uDDA0\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uD959\u0000\u0000\u0000\u0000"+
+            "\u0000\uD9B5\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uDC34\u0000\u0000\uD9E0\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uD9E5\uD9E2\u0000\u0000\u0000\uDC69\u0000"+
+            "\u0000\u0000\u0000\uD95A\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uDCF7\uDCF8\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uDCFB\uDCFC\uDCFD\uDCFE\u0000"+
+            "\uDB40\uDB41\uDB42\uDB43\uDB44\uDB45\uDB46\uDB47"+
+            "\uDB48\uDB49\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uDB31\uDB32\uDB33\uDB34\uDB35\uDB36\uDB37\uDB38"+
+            "\uDB39\uDB3A\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uD977\uD978\uD976\uD979\uD97A\uD9D5\uD9D8\uD9D6"+
+            "\uD9D9\uD9D7\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uD9A1\u0000\uD9A2\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uD9A3\u0000\uD963\uD9A4\u0000\u0000\u0000\uD964"+
+            "\uD996\u0000\u0000\uD997\u0000\u0000\u0000\uD9B3"+
+            "\u0000\uD9B2\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uD97E\u0000\u0000\uD992\uD954\u0000"+
+            "\uD960\u0000\u0000\u0000\u0000\u0000\u0000\uD99E"+
+            "\uD99F\uD99D\uD99C\uD994\uD995\u0000\uD9B1\u0000"+
+            "\u0000\u0000\u0000\u0000\uD955\uD993\uD9B0\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uD991\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uD966\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uD951\uD965\u0000\u0000\uD952\uD953\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uD99A\uD99B\u0000\u0000\uD998\uD999"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uD961\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uD962\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uDCE7\uDCE8\uDCE9\uDCEA\uDCEB\uDCEC\uDCED\uDCEE"+
+            "\uDCEF\uDCF0\uDCF1\uDCF2\uDCF3\uDCF4\uDCF5\u0000"+
+            "\u0000\u0000\u0000\u0000\uDD77\uDD78\uDD79\uDD7A"+
+            "\uDD7B\uDD7C\uDD7D\uDD7E\uDD91\uDD92\uDD93\uDD94"+
+            "\uDD95\uDD96\uDD97\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uDD5D\uDD5E\uDD5F\uDD60"+
+            "\uDD61\uDD62\uDD63\uDD64\uDD65\uDD66\uDD67\uDD68"+
+            "\uDD69\uDD6A\uDD6B\uDD6C\uDD6D\uDD6E\uDD6F\uDD70"+
+            "\uDD71\uDD72\uDD73\uDD74\uDD75\uDD76\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uDCCD\uDCCE\uDCCF\uDCD0\uDCD1\uDCD2\uDCD3\uDCD4"+
+            "\uDCD5\uDCD6\uDCD7\uDCD8\uDCD9\uDCDA\uDCDB\uDCDC"+
+            "\uDCDD\uDCDE\uDCDF\uDCE0\uDCE1\uDCE2\uDCE3\uDCE4"+
+            "\uDCE5\uDCE6\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uDBA1\uDBAC\uDBA2\uDBAD\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uDBA3\uDBC8\uDBC7\uDBAE"+
+            "\uDBA4\uDBC2\uDBC1\uDBAF\uDBA6\uDBC6\uDBC5\uDBB1"+
+            "\uDBA5\uDBC4\uDBC3\uDBB0\uDBA7\uDBBC\uDBC9\uDBCA"+
+            "\uDBB7\uDBCB\uDBCC\uDBB2\uDBA9\uDBBE\uDBCD\uDBCE"+
+            "\uDBB9\uDBCF\uDBD0\uDBB4\uDBA8\uDBD1\uDBD2\uDBB8"+
+            "\uDBBD\uDBD3\uDBD4\uDBB3\uDBAA\uDBD5\uDBD6\uDBBA"+
+            "\uDBBF\uDBD7\uDBD8\uDBB5\uDBAB\uDBD9\uDBDA\uDBBB"+
+            "\uDBDB\uDBDC\uDBC0\uDBDD\uDBDE\uDBDF\uDBE0\uDBE1"+
+            "\uDBE2\uDBE3\uDBE4\uDBB6\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uD9C6\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uD971\uD970\u0000\uD9C3\uD9C7\uD9C8\uD9CB\uD9CA"+
+            "\uD9C9\uD9CC\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uD973\uD972\u0000\u0000\uD9BA\uD9B9"+
+            "\u0000\u0000\u0000\u0000\uD975\uD974\u0000\u0000"+
+            "\uD9B8\uD9B7\u0000\u0000\u0000\u0000\uD96F\uD96E"+
+            "\uD9C2\uD9C1\u0000\uD96B\u0000\u0000\uD96D\uD96C"+
+            "\uD9C4\uD9C5\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uD96A\uD969\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uD9CF\uD9CE"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uD9D0\u0000\uD9D1\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uD95F\u0000\uD95E\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uD9BC\uD9BD\u0000\uD9C0\uD9BB\uD9BE\u0000\uD9BF"+
+            "\uD9CD\uD9DB\uD9DC\u0000\uD9DD\uD9DA\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uD931\uD932\uD933\uD938\u0000\u0000\u0000\u0000"+
+            "\uD944\uD945\uD946\uD947\uD948\uD949\uD94A\uD94B"+
+            "\uD94C\uD94D\u0000\uD97B\uD942\uD943\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uDDA1\uDDA2\uDDA3\uDDA4\uDDA5\uDDA6\uDDA7"+
+            "\uDDA8\uDDA9\uDDAA\uDDAB\uDDAC\uDDAD\uDDAE\uDDAF"+
+            "\uDDB0\uDDB1\uDDB2\uDDB3\uDDB4\uDDB5\uDDB6\uDDB7"+
+            "\uDDB8\uDDB9\uDDBA\uDDBB\uDDBC\uDDBD\uDDBE\uDDBF"+
+            "\uDDC0\uDDC1\uDDC2\uDDC3\uDDC4\uDDC5\uDDC6\uDDC7"+
+            "\uDDC8\uDDC9\uDDCA\uDDCB\uDDCC\uDDCD\uDDCE\uDDCF"+
+            "\uDDD0\uDDD1\uDDD2\uDDD3\uDDD4\uDDD5\uDDD6\uDDD7"+
+            "\uDDD8\uDDD9\uDDDA\uDDDB\uDDDC\uDDDD\uDDDE\uDDDF"+
+            "\uDDE0\uDDE1\uDDE2\uDDE3\uDDE4\uDDE5\uDDE6\uDDE7"+
+            "\uDDE8\uDDE9\uDDEA\uDDEB\uDDEC\uDDED\uDDEE\uDDEF"+
+            "\uDDF0\uDDF1\uDDF2\uDDF3\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uDE31\uDE32\uDE33\uDE34\uDE35\uDE36\uDE37"+
+            "\uDE38\uDE39\uDE3A\uDE3B\uDE3C\uDE3D\uDE3E\uDE3F"+
+            "\uDE40\uDE41\uDE42\uDE43\uDE44\uDE45\uDE46\uDE47"+
+            "\uDE48\uDE49\uDE4A\uDE4B\uDE4C\uDE4D\uDE4E\uDE4F"+
+            "\uDE50\uDE51\uDE52\uDE53\uDE54\uDE55\uDE56\uDE57"+
+            "\uDE58\uDE59\uDE5A\uDE5B\uDE5C\uDE5D\uDE5E\uDE5F"+
+            "\uDE60\uDE61\uDE62\uDE63\uDE64\uDE65\uDE66\uDE67"+
+            "\uDE68\uDE69\uDE6A\uDE6B\uDE6C\uDE6D\uDE6E\uDE6F"+
+            "\uDE70\uDE71\uDE72\uDE73\uDE74\uDE75\uDE76\uDE77"+
+            "\uDE78\uDE79\uDE7A\uDE7B\uDE7C\uDE7D\uDE7E\uDE91"+
+            "\uDE92\uDE93\uDE94\uDE95\uDE96\uDE97\uDE98\u0000"+
+            "\u0000\u0000\u0000\uD934\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uDAA1\uDAA2\uDAA3\uDAA4\uDAA5\uDAA6\uDAA7"+
+            "\uDAA8\uDAA9\uDAAA\uDAAB\uDAAC\uDAAD\uDAAE\uDAAF"+
+            "\uDAB0\uDAB1\uDAB2\uDAB3\uDAB4\uDAB5\uDAB6\uDAB7"+
+            "\uDAB8\uDAB9\uDABA\uDABB\uDABC\uDABD\uDABE\uDABF"+
+            "\uDAC0\uDAC1\uDAC2\uDAC3\uDAC4\uDAC5\uDAC6\uDAC7"+
+            "\uDAC8\uDAC9\uDACA\uDACB\uDACC\uDACD\uDACE\uDACF"+
+            "\uDAD0\uDAD1\uDAD2\uDAD3\uDAD4\uDAD5\uDAD6\uDAD7"+
+            "\uDAD8\uDAD9\uDADA\uDADB\uDADC\uDADD\uDADE\uDADF"+
+            "\uDAE0\uDAE1\uDAE2\uDAE3\uDAE4\uDAE5\uDAE6\uDAE7"+
+            "\uDAE8\uDAE9\uDAEA\uDAEB\uDAEC\uDAED\uDAEE\uDAEF"+
+            "\uDAF0\uDAF1\uDAF2\uDAF3\uDAF4\uDAF5\uDAF6\uDAF7"+
+            "\uDAF8\uDAF9\uDAFA\uDAFB\uDAFC\uDAFD\uDAFE\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uDD41\uDD42\uDD43\uDD44\uDD45\uDD46\uDD47\uDD48"+
+            "\uDD49\uDD4A\uDD4B\uDD4C\uDD4D\uDD4E\uDD4F\uDD50"+
+            "\uDD51\uDD52\uDD53\uDD54\uDD55\uDD56\uDD57\uDD58"+
+            "\uDD59\uDD5A\uDD5B\uDD5C\uD9DF\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uDCB1\uDCB2\uDCB3\uDCB4\uDCB5\uDCB6\uDCB7\uDCB8"+
+            "\uDCB9\uDCBA\uDCBB\uDCBC\uDCBD\uDCBE\uDCBF\uDCC0"+
+            "\uDCC1\uDCC2\uDCC3\uDCC4\uDCC5\uDCC6\uDCC7\uDCC8"+
+            "\uDCC9\uDCCA\uDCCB\uDCCC\u0000\u0000\u0000\uD9DE"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000";
+
+        private final static String innerIndex1=
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uDC59\uDC5A\uDC5B\uDC5C\uDC5D\u0000\u0000\u0000"+
+            "\uDC4A\uDC4B\uDC6C\uDC6D\uDC6E\uDC46\uDC47\uDC48"+
+            "\uDC64\uDC65\uDC66\uDC67\uDC68\uDC31\uDC32\uDC33"+
+            "\uDC35\uDC3B\uDC3C\uDC3D\uDC3E\uDC3F\uDC40\uDC41"+
+            "\uDC42\uDC43\uDC44\uDC37\uDC38\uDC39\uDC3A\uDC4D"+
+            "\uDC4E\uDC75\uDC76\uDC77\uDC78\uDC71\uDC72\uDC73"+
+            "\uDC4F\uDC50\uDC51\uDC52\uDC53\uDC54\uDC55\uDC56"+
+            "\uDC57\uDC58\uDC5E\uDC5F\uDC60\uDC61\uDC62\uDC63"+
+            "\uDC6A\uDC6B\uD9E3\uDC7C\uDC36\uDC70\uDC91\uD9E1"+
+            "\uDC4C\uDC7D\uDC45\u0000\u0000\u0000\u0000\uDC49"+
+            "\uDC7A\u0000\u0000\uDC7B\u0000\u0000\uDC6F\u0000"+
+            "\uD9E4\u0000\u0000\uDC74\uDC7E\uDC79\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF179\uF2CB\u0000\uF662\u0000\u0000\u0000\uE742"+
+            "\uF1DB\uEAB2\uEABE\uF7BB\u0000\uE996\u0000\u0000"+
+            "\u0000\uF5E4\u0000\u0000\uF4A6\uE9E0\uEBA6\u0000"+
+            "\uE29A\uE940\u0000\u0000\u0000\u0000\uECAA\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF3E9\u0000\u0000"+
+            "\u0000\u0000\uE1FA\u0000\u0000\u0000\u0000\u0000"+
+            "\uF93F\uE4A1\u0000\uF3AB\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uEED1\uE43C\u0000\uE29B\u0000\u0000"+
+            "\u0000\u0000\u0000\uF3FD\u0000\uEA4F\uF8BA\uF7B9"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE262\u0000"+
+            "\uECAB\uF0E0\u0000\u0000\u0000\uE29C\uE0F7\uEDA5"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE071\u0000\uE55C\u0000\u0000"+
+            "\u0000\u0000\u0000\uF071\u0000\u0000\uE973\uEAAD"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE0EB\u0000"+
+            "\u0000\u0000\uE5AF\u0000\u0000\u0000\uE697\u0000"+
+            "\uEDF8\u0000\u0000\uEA50\uF133\u0000\uEFCD\u0000"+
+            "\uF037\uEFF6\uF8BB\u0000\uEEE9\uF2CC\u0000\u0000"+
+            "\uE376\u0000\u0000\uEA51\u0000\u0000\uED3C\u0000"+
+            "\u0000\uE75C\uF7F1\u0000\uE26F\uF834\uEE42\u0000"+
+            "\uF89D\u0000\u0000\uF84D\uE158\uF2CD\uE5D5\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE4A2\u0000"+
+            "\u0000\u0000\uF161\u0000\u0000\u0000\u0000\u0000"+
+            "\uED37\uF162\u0000\u0000\uF641\u0000\u0000\uE29D"+
+            "\u0000\u0000\uE361\uE0BF\u0000\uF1A4\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uF1A8\uEA52\uF672\uF1DC"+
+            "\uE997\uEB49\u0000\u0000\u0000\uE55E\u0000\uF545"+
+            "\u0000\u0000\u0000\uE4DB\uE645\uF134\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uED76\u0000\uF3EA\u0000\u0000\u0000\uE0EC\uE0C0"+
+            "\u0000\u0000\u0000\uF194\u0000\u0000\u0000\u0000"+
+            "\u0000\uE37A\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF7F2\uF135\uE36F\u0000\uEEEA\uE37B\uE961"+
+            "\uE8E9\uF9CC\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE8D7"+
+            "\u0000\u0000\u0000\u0000\uE871\u0000\uE646\u0000"+
+            "\uECDF\u0000\uEA53\u0000\uEA54\uE031\u0000\u0000"+
+            "\u0000\u0000\u0000\uF27C\u0000\u0000\uE4A3\uF247"+
+            "\uF75F\u0000\u0000\u0000\u0000\uF058\uF248\uF3AC"+
+            "\uF3A5\uEFCE\u0000\u0000\u0000\uF7BC\u0000\u0000"+
+            "\u0000\uEDF9\uF17A\uE9D6\uF1C2\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF735\u0000\u0000\u0000\u0000\u0000\uEDBA"+
+            "\uE8D8\u0000\u0000\uE032\u0000\u0000\uE3CD\u0000"+
+            "\u0000\u0000\uF27D\u0000\u0000\u0000\uF17B\uEA55"+
+            "\u0000\uECE0\u0000\uE059\uF479\u0000\uE5CE\u0000"+
+            "\uF646\u0000\uE252\uE657\u0000\uECB4\u0000\uF3AD"+
+            "\u0000\uF072\u0000\u0000\u0000\u0000\uE6C2\u0000"+
+            "\uF4A7\u0000\u0000\uE1EA\u0000\uF0EE\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE7B2\uF9A5"+
+            "\u0000\u0000\u0000\u0000\u0000\uF665\uE5E2\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF745"+
+            "\u0000\u0000\uE197\uF5B5\uED3D\u0000\u0000\u0000"+
+            "\u0000\uEEEB\uF3D5\u0000\u0000\u0000\uF34B\u0000"+
+            "\u0000\uEFB5\u0000\uE159\uF865\u0000\u0000\uEBD4"+
+            "\u0000\u0000\uE6D6\u0000\u0000\uE951\u0000\uEA56"+
+            "\uF891\uECE1\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uEBF3\uE998"+
+            "\u0000\uE29E\u0000\uE8C4\u0000\uF793\u0000\u0000"+
+            "\uE974\u0000\uEDEF\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE941\u0000\u0000\u0000\uE5D6\u0000"+
+            "\u0000\uF4DA\u0000\uE0C1\u0000\uE8C3\u0000\u0000"+
+            "\u0000\uE7FA\uE4EE\u0000\u0000\u0000\uF848\u0000"+
+            "\u0000\uF9A6\uF0EF\u0000\uF536\u0000\uE15A\uF4A8"+
+            "\u0000\uF4DB\u0000\uE8A7\uF647\u0000\uE2E6\uF394"+
+            "\uE0DA\u0000\uEED2\uE6C3\uF692\uEF6E\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uEDA6\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uEDE7\u0000\u0000\u0000\uE033"+
+            "\uE137\uF059\u0000\u0000\u0000\u0000\u0000\uF746"+
+            "\u0000\u0000\u0000\u0000\u0000\uF835\u0000\u0000"+
+            "\u0000\u0000\uF3AE\u0000\uF2CE\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uE0ED\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uF640\uF2CF\uEFCF\u0000"+
+            "\uF6DE\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE263\u0000\u0000\u0000\u0000\uE999\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uE8A8\u0000\u0000"+
+            "\u0000\uE0F8\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uEAA1\uE9E1\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uF5CA\uEFB6\u0000\u0000"+
+            "\u0000\u0000\uEEEC\uF27E\u0000\uF4F0\u0000\uEABF"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE15B\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uE351\u0000\u0000"+
+            "\u0000\uF562\uEB4A\u0000\u0000\u0000\u0000\uEAC0"+
+            "\u0000\uE270\u0000\u0000\u0000\uE962\uF9EA\u0000"+
+            "\u0000\u0000\uE698\u0000\u0000\u0000\uF05A\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uEF79\u0000\uECAC"+
+            "\u0000\u0000\u0000\u0000\u0000\uF4D0\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE034\u0000\uE8F8\u0000\u0000\u0000\uEA57"+
+            "\uF0F0\uF3D6\u0000\u0000\uEDE2\u0000\uE15C\u0000"+
+            "\u0000\uE0FB\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF073\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEAC1"+
+            "\u0000\uE67D\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uEFD0\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF249\u0000\u0000\u0000\u0000\uE5E3"+
+            "\u0000\u0000\uE3D3\u0000\uEDF0\u0000\u0000\u0000"+
+            "\uEF44\uF0C3\u0000\uF03A\uF89E\uF5F6\uF34C\uF9D4"+
+            "\uEB4B\uE253\u0000\uE34A\uF6BA\uE795\uF6CD\u0000"+
+            "\u0000\u0000\uED3E\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uE56F\u0000\u0000\u0000"+
+            "\u0000\u0000\uE377\u0000\u0000\uF19F\u0000\uE43E"+
+            "\uF291\uE5D7\uF074\uF732\uE1EB\uE6BF\uF8B1\u0000"+
+            "\u0000\uE1EC\u0000\u0000\u0000\uE942\uE37C\uE29F"+
+            "\uF292\u0000\u0000\u0000\uE152\u0000\u0000\u0000"+
+            "\uE37D\u0000\u0000\u0000\u0000\u0000\uEDF7\u0000"+
+            "\u0000\u0000\uF4FC\u0000\u0000\uF232\u0000\u0000"+
+            "\u0000\u0000\uE7B3\u0000\u0000\uE796\u0000\uEFB7"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE23E\u0000\u0000\u0000\u0000\uE7A2\u0000\u0000"+
+            "\u0000\u0000\uE793\u0000\uE55F\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uEDA7\uE5D2"+
+            "\u0000\u0000\u0000\u0000\u0000\uE639\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uF532\u0000\uF3D7\u0000"+
+            "\u0000\uE5D8\u0000\uF34D\uE6D0\uE560\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uE6CF\uF0EA\uF9EB\u0000"+
+            "\u0000\uE8ED\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF955\uE0C2\u0000\u0000\u0000\u0000\uF9D5\u0000"+
+            "\uF558\uEF7A\uF5F3\u0000\u0000\uF7DE\u0000\u0000"+
+            "\uE4EF\u0000\u0000\uF163\u0000\u0000\uE9C2\uF2B7"+
+            "\uEED4\u0000\uE05A\u0000\u0000\u0000\uE7FB\u0000"+
+            "\u0000\uF89F\u0000\u0000\u0000\u0000\u0000\uE63A"+
+            "\u0000\u0000\u0000\u0000\u0000\uF59A\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uF6F7\uE93C\u0000\u0000"+
+            "\u0000\uE6D7\uEAA2\u0000\u0000\u0000\uE24E\u0000"+
+            "\uE4F0\u0000\u0000\u0000\u0000\u0000\uF334\uEBEC"+
+            "\uE2E7\uF4CB\uF1A9\uE04E\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF591\u0000\u0000\u0000\uF65E"+
+            "\u0000\u0000\uEA9D\uE34B\uE5B7\uF293\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uF538\u0000\uE99A\u0000"+
+            "\u0000\u0000\u0000\uE0A7\u0000\uE85E\u0000\u0000"+
+            "\u0000\uEB76\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF1A5\uF294\u0000\u0000\u0000\u0000\uE99B"+
+            "\u0000\u0000\uF7DC\u0000\u0000\uF4DC\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF794\u0000\uF59B"+
+            "\u0000\u0000\u0000\uF993\u0000\u0000\u0000\uE34C"+
+            "\uE8F9\uE6B1\u0000\u0000\u0000\uE0FC\u0000\u0000"+
+            "\u0000\uF335\uE0FD\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE5F4\u0000\u0000\u0000\uE1ED"+
+            "\uE035\u0000\u0000\uE63B\uE352\u0000\u0000\u0000"+
+            "\u0000\uF34E\uE44D\uE134\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF846\u0000"+
+            "\u0000\uE15D\u0000\uE89C\u0000\uF65F\u0000\uEFB8"+
+            "\u0000\uE797\u0000\u0000\u0000\uE15E\u0000\u0000"+
+            "\u0000\u0000\uE6CD\u0000\u0000\uE561\uEFED\u0000"+
+            "\uE07B\uE7E2\u0000\uF9B2\u0000\uECAD\uE65C\uE7B4"+
+            "\u0000\u0000\uEBA7\uF263\uE353\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF9B3\u0000\uE5E4\u0000\u0000"+
+            "\uE2E8\u0000\uF1C3\uE342\u0000\u0000\uE2A0\uE838"+
+            "\u0000\u0000\u0000\u0000\u0000\uF760\u0000\u0000"+
+            "\uF9D6\u0000\u0000\u0000\u0000\uF761\u0000\uF762"+
+            "\uE963\u0000\u0000\u0000\u0000\uE9E2\uF8F9\uE9C1"+
+            "\u0000\uECB5\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF1DD\uE254\u0000\uE0A1\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE9E3\u0000\u0000\u0000\u0000\uF96D"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF7AF\u0000\u0000\u0000\u0000\u0000\uE49D"+
+            "\uE2A1\uED38\u0000\uF546\uF1A0\u0000\u0000\uECAE"+
+            "\uEEED\uF9C1\uE872\u0000\u0000\uE743\u0000\u0000"+
+            "\u0000\uE9E4\uF391\uF693\uF892\u0000\u0000\uE3F5"+
+            "\u0000\u0000\uE85F\u0000\uE964\u0000\uE936\u0000"+
+            "\uF2BF\u0000\u0000\u0000\u0000\u0000\uE25F\u0000"+
+            "\uEB69\u0000\u0000\u0000\u0000\u0000\u0000\uE7D6"+
+            "\uF164\uF05B\u0000\u0000\uE04F\uE5B0\u0000\uE2E9"+
+            "\u0000\u0000\u0000\u0000\u0000\uF3ED\u0000\uE15F"+
+            "\u0000\u0000\u0000\u0000\uED9A\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uED7D\u0000\u0000\u0000\u0000"+
+            "\uE6D8\u0000\uF9A7\u0000\u0000\u0000\u0000\uF03B"+
+            "\uF642\u0000\u0000\u0000\u0000\uE2F0\uF7BD\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uEE96\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE0DB\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF4D1\u0000\u0000\u0000\u0000"+
+            "\uEFD1\uF4A9\uE370\uEFD2\u0000\uE873\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uEC62\u0000\uF632\uEBF4"+
+            "\u0000\u0000\u0000\uE874\u0000\u0000\u0000\u0000"+
+            "\u0000\uEED5\uF5BF\uE2A2\uE1AF\uE2A3\u0000\u0000"+
+            "\u0000\uE1B0\uF3FE\uE333\uEBAF\uF733\u0000\uE036"+
+            "\uF6BB\uF47A\uEA58\uEFD3\u0000\u0000\u0000\u0000"+
+            "\uEA59\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF9DE\uE050\u0000\u0000\u0000"+
+            "\uF7EA\uE3CE\uF264\u0000\uE562\uE7A3\uF9A8\uE6D9"+
+            "\uF6CE\uF84E\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE2D6\u0000\uE6F0\u0000\uF0E1"+
+            "\uF755\u0000\u0000\u0000\u0000\u0000\uE99C\u0000"+
+            "\u0000\uE9C3\u0000\uF7DF\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uEEEF\u0000\u0000\u0000\u0000"+
+            "\uF9E5\uF633\u0000\uE7FC\uF9A9\u0000\uEEEE\u0000"+
+            "\u0000\u0000\uE5E5\u0000\u0000\u0000\u0000\u0000"+
+            "\uF2D0\u0000\uE1B1\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF6A2\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF3B2\u0000\uF3B1\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE1B2\u0000\uE83B\u0000\uE037\u0000\u0000"+
+            "\u0000\u0000\u0000\uECE2\uF8BC\uE7A4\u0000\u0000"+
+            "\uF24A\u0000\u0000\u0000\u0000\u0000\uF763\u0000"+
+            "\u0000\u0000\u0000\u0000\uF8FA\u0000\uE2A4\u0000"+
+            "\uE99D\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uF673\u0000\u0000\u0000"+
+            "\uF1AA\u0000\u0000\uF431\uE271\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF836\u0000\u0000\u0000\u0000"+
+            "\uF7E0\u0000\u0000\u0000\u0000\uF166\u0000\u0000"+
+            "\uED7E\uF7A1\u0000\u0000\uF8EF\u0000\u0000\u0000"+
+            "\uF7EB\uF233\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF03C\u0000\u0000\u0000\uE038\u0000\u0000"+
+            "\uF59C\u0000\u0000\u0000\u0000\uE1D6\uF998\u0000"+
+            "\u0000\u0000\uF559\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF764\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uF736\u0000\uEA5A\uF456"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE6DA\u0000"+
+            "\uE4D0\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uE755\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF076"+
+            "\u0000\uF4DD\u0000\u0000\u0000\uED6A\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF674\u0000"+
+            "\u0000\u0000\u0000\u0000\uF694\u0000\uEAC2\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE7FD"+
+            "\u0000\u0000\u0000\uE198\u0000\u0000\uE4BA\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uED3F\u0000"+
+            "\u0000\u0000\u0000\uF7E1\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uF336\u0000\u0000\u0000"+
+            "\uE0D3\u0000\u0000\u0000\uEB4C\u0000\uF55A\uE59C"+
+            "\u0000\uF9AA\uF7E2\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF547\uF9C2\uF940\u0000\uF9EC\uE072\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF9BD"+
+            "\u0000\uF077\uEAC3\uE3D2\uE272\u0000\uE4A4\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF9AB\u0000\uEAE0"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uF457\u0000\u0000\u0000"+
+            "\u0000\u0000\uEEF0\u0000\uE37E\u0000\u0000\uF4AA"+
+            "\u0000\u0000\u0000\uEA5B\uF648\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uEBF5\uF3B3\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF6A3\u0000"+
+            "\u0000\uE039\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uE2A5\u0000\u0000\uEAC4"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEBB0"+
+            "\u0000\u0000\uF34F\u0000\uF634\u0000\uECB6\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF856\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE391\u0000\u0000\uF9ED\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uE9C4\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF999\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uEE4F\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uEA3D\u0000\uF84F\u0000"+
+            "\u0000\u0000\u0000\u0000\uEDF1\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uF1C4\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE435\u0000\u0000\uF9EE\u0000\u0000"+
+            "\u0000\uF5B6\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uEBF6\uEA5C\u0000\u0000\uF96E\u0000"+
+            "\uF167\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE1DD\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE647\uE1B3\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF765\uEDD8\u0000\u0000\u0000"+
+            "\uE2EA\u0000\u0000\uE2D0\u0000\uF05C\u0000\u0000"+
+            "\u0000\u0000\uF03E\uF03D\u0000\u0000\uE4F1\u0000"+
+            "\uE4A5\u0000\u0000\u0000\u0000\u0000\u0000\uF6CF"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF234\u0000\u0000\u0000\u0000\uE334\u0000\u0000"+
+            "\uF432\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE392\u0000\u0000\u0000\u0000"+
+            "\uF433\u0000\uF6F8\u0000\u0000\u0000\u0000\uE343"+
+            "\u0000\u0000\uE8A9\u0000\u0000\uE4BB\uE07C\u0000"+
+            "\uF3A6\uE0D5\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF6E7\u0000\u0000\uE1DE\u0000\uF6A4\u0000"+
+            "\u0000\u0000\uF750\u0000\u0000\u0000\uE4DD\u0000"+
+            "\uE160\u0000\u0000\u0000\u0000\uE2A6\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uF695\u0000\u0000\u0000"+
+            "\u0000\u0000\uEBF7\u0000\u0000\u0000\u0000\u0000"+
+            "\uE4DC\u0000\u0000\uF8A0\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF837\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF0D9\u0000\uE2A7\uF03F\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uED91\u0000\u0000\u0000\uEFB9"+
+            "\uF3D8\u0000\u0000\uE768\u0000\u0000\uEB94\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEE44"+
+            "\uE99E\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF4F1\u0000\u0000\u0000\uECD0\u0000\u0000\uF49D"+
+            "\u0000\uE8C6\uE393\u0000\uE394\u0000\u0000\u0000"+
+            "\uE2DC\u0000\uE4D1\u0000\u0000\uE141\uF6D8\u0000"+
+            "\uE0A8\uF0BC\uED4E\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF56C\u0000"+
+            "\u0000\uE952\u0000\u0000\uF337\u0000\u0000\uEE50"+
+            "\u0000\u0000\uE07D\u0000\u0000\u0000\u0000\uEF7B"+
+            "\uEDE8\uE953\u0000\u0000\uF1DE\uE4F2\u0000\u0000"+
+            "\u0000\u0000\uE199\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE264\uEEAB\u0000\u0000\u0000\uE0C3"+
+            "\u0000\uEBB1\u0000\u0000\uF6B2\u0000\u0000\uE4F3"+
+            "\uE4D2\u0000\uF5C0\u0000\u0000\u0000\uEADD\u0000"+
+            "\u0000\uF295\uEEF1\u0000\uF9B4\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF458\u0000\u0000"+
+            "\u0000\uF4D2\u0000\u0000\uF296\u0000\uEC63\u0000"+
+            "\u0000\u0000\u0000\uE161\u0000\uEAEA\u0000\u0000"+
+            "\u0000\uEFBA\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE7D7\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uF5CD\u0000\uF3F2\uF857"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE7F8\uE552\u0000\u0000\u0000\u0000\uF675\u0000"+
+            "\u0000\u0000\u0000\uE9C5\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uEEF2\uF1DF\u0000\u0000\uE05B\u0000"+
+            "\u0000\uE8FA\u0000\u0000\u0000\uEF45\u0000\uE4A6"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF9B5\u0000"+
+            "\u0000\uF7C9\u0000\uED72\u0000\uF8BD\u0000\u0000"+
+            "\uE6A4\uE255\u0000\u0000\u0000\u0000\uE265\uE676"+
+            "\u0000\u0000\u0000\u0000\uEDBD\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uEA5D\uF195\u0000\u0000\uF1E0"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF17C\uF8BE\uEAEB\u0000\uEBF8\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF7BE"+
+            "\u0000\u0000\u0000\u0000\uE395\uEB3A\uEF72\u0000"+
+            "\u0000\uEC64\uE49F\u0000\uEDA8\u0000\u0000\u0000"+
+            "\u0000\u0000\uE7D3\u0000\u0000\u0000\u0000\uE4DE"+
+            "\u0000\uF548\uF6BC\uE99F\u0000\uEF7C\uED77\u0000"+
+            "\u0000\uECF7\u0000\u0000\u0000\u0000\u0000\uF138"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF893\u0000"+
+            "\u0000\u0000\u0000\u0000\uEDF2\u0000\u0000\uE396"+
+            "\uE43F\uE975\u0000\u0000\u0000\u0000\uE335\uF3B4"+
+            "\uF941\uE19A\u0000\u0000\uE9C6\uF861\u0000\uF6DF"+
+            "\u0000\u0000\uF838\u0000\u0000\u0000\u0000\u0000"+
+            "\uF297\u0000\uEA5E\u0000\u0000\u0000\u0000\uEEF3"+
+            "\u0000\u0000\uF6AC\uF0C4\uF1E1\uEB3B\uE9C7\u0000"+
+            "\u0000\u0000\u0000\uE443\uE44F\u0000\u0000\u0000"+
+            "\uE05C\u0000\u0000\u0000\u0000\uF8BF\u0000\u0000"+
+            "\u0000\u0000\uEDFD\uE9E5\uE75D\u0000\u0000\u0000"+
+            "\u0000\u0000\uF196\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE397\u0000\u0000\uEF7D\uE362"+
+            "\u0000\uE7D8\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF676\u0000\u0000"+
+            "\uE8AA\u0000\u0000\u0000\uF6E0\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE769\u0000\uF533\u0000\u0000\uF56D\u0000"+
+            "\u0000\u0000\u0000\uF2D1\u0000\u0000\uE7B5\u0000"+
+            "\u0000\uF1AB\u0000\uECB7\u0000\u0000\u0000\u0000"+
+            "\uF24B\uE1B4\u0000\uEB95\uF05D\u0000\u0000\u0000"+
+            "\u0000\uF197\uEF7E\u0000\uE0A9\uF3AF\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE05D\u0000"+
+            "\uF139\u0000\uF47B\u0000\uF9EF\u0000\uF7F3\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uEE51\u0000\u0000\uF168\u0000\u0000\u0000\uF1AC"+
+            "\u0000\uF05E\u0000\uEF6F\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uEA5F\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE436\u0000\u0000\uEEF4\uE3D6\u0000\u0000\uEE52"+
+            "\uECE3\u0000\u0000\u0000\u0000\uED40\u0000\u0000"+
+            "\u0000\uE744\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF635\u0000"+
+            "\u0000\u0000\u0000\u0000\uF4DE\u0000\u0000\u0000"+
+            "\u0000\uE6A5\u0000\u0000\u0000\u0000\uF6E8\u0000"+
+            "\u0000\uEF56\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF8E6\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE9E6\u0000\u0000\u0000\uE9A0\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE76A\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE83C\uF040\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uECB8\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE03A\uEBF9\u0000\uF041\u0000\u0000\u0000"+
+            "\u0000\uF47C\u0000\u0000\uF87E\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF265\u0000\u0000\u0000\u0000\uF7F4\u0000"+
+            "\u0000\uE47C\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF8FB\u0000\u0000"+
+            "\u0000\uF9F0\u0000\uEB4D\uE273\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF756\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uEA3E\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uEAC5\u0000\u0000\uEDBE\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF1AD\uF87A\u0000\u0000\uE1EE\uF1A6\u0000\uF1AE"+
+            "\uF37D\u0000\uE9A1\u0000\uF1AF\uF99A\u0000\uE77B"+
+            "\u0000\u0000\u0000\uE19B\uE1B5\u0000\u0000\u0000"+
+            "\u0000\uF839\u0000\uEBDD\u0000\u0000\u0000\u0000"+
+            "\uEC65\uF1CF\u0000\u0000\u0000\uE9A2\u0000\u0000"+
+            "\uF7CA\u0000\uF078\u0000\uEDED\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uE4EB\u0000\uEFD4"+
+            "\uEBFA\uED5C\u0000\uEBE4\uEF57\u0000\u0000\uE26B"+
+            "\u0000\u0000\u0000\uE965\u0000\uF6B5\uF995\uF395"+
+            "\uE23F\uF3B5\uF2D2\uEF58\uF0F1\u0000\u0000\u0000"+
+            "\u0000\u0000\uE0D4\uEB4E\uECF8\uF079\uF942\u0000"+
+            "\u0000\u0000\u0000\u0000\uEB96\u0000\uE2E0\u0000"+
+            "\uF235\u0000\u0000\uF83A\uEE53\uEBB2\uE03B\u0000"+
+            "\uECE4\uEFBB\u0000\u0000\u0000\u0000\u0000\uEC66"+
+            "\uF4F2\u0000\uF266\uF042\uE398\uF169\uE85B\uE2A8"+
+            "\u0000\u0000\u0000\u0000\uE9A3\u0000\u0000\u0000"+
+            "\uE76B\u0000\uF7CE\uEFD5\uECD1\u0000\u0000\uE44C"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE73C\uF4CC"+
+            "\u0000\uE1FB\uF666\u0000\uEEF5\uEF91\uECF9\uE44B"+
+            "\uF4F3\uECFB\u0000\uEA60\uE240\u0000\uE699\uF3D9"+
+            "\u0000\u0000\u0000\u0000\u0000\uF5C1\uE954\u0000"+
+            "\uF5BB\u0000\uEA61\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE976\u0000\u0000\uEA62\u0000\u0000\uF1E2"+
+            "\uF298\uF05F\uF37E\uECFC\u0000\uE4DF\uE4F4\uEBB3"+
+            "\u0000\uEBB4\u0000\u0000\u0000\u0000\uF563\u0000"+
+            "\u0000\uEAC6\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uEFD6\u0000\u0000\u0000"+
+            "\uE8AB\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF636\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uECB9\uF0C5\uF539\uE1B6\uE49B\u0000\uE83D\uE473"+
+            "\uE2D1\u0000\u0000\u0000\u0000\uE0DC\uE19C\u0000"+
+            "\uE2DD\u0000\u0000\uEF39\u0000\uECBB\uECBA\u0000"+
+            "\u0000\uEB6A\u0000\u0000\u0000\uF299\u0000\u0000"+
+            "\u0000\u0000\u0000\uE943\u0000\u0000\u0000\u0000"+
+            "\uE4F5\u0000\uE6A6\u0000\uF645\uE6DB\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uEBD5\u0000\u0000\uE57A"+
+            "\u0000\uEAA3\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF9DF\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE399\uF1D4\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE0AA\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uED6B\u0000\uEBFB\uE0A2\u0000\u0000\u0000"+
+            "\u0000\uE4E0\u0000\uED4F\u0000\uF8C0\u0000\uE84E"+
+            "\uED5D\u0000\uE649\u0000\u0000\u0000\uF2C0\u0000"+
+            "\uEBFC\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF649\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uEAC7\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uED41\u0000\u0000\u0000\u0000\u0000\u0000\uE977"+
+            "\uE978\u0000\u0000\u0000\uF866\u0000\uE4F6\u0000"+
+            "\u0000\u0000\u0000\uF3DA\u0000\uF894\u0000\u0000";
+
+        private final static String innerIndex2=
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEC9F"+
+            "\u0000\u0000\u0000\u0000\u0000\uE5CF\uE39A\u0000"+
+            "\u0000\uE1DF\u0000\u0000\uF5CB\u0000\uED92\uE0AB"+
+            "\u0000\uE6C4\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uECA0"+
+            "\u0000\uE9DA\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE83E\uE07E\u0000\u0000\u0000"+
+            "\uE5B9\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uECA1\u0000\u0000\uEF73\u0000\u0000\uF4AB"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE2A9"+
+            "\u0000\u0000\u0000\uE4F7\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uE593\u0000\u0000"+
+            "\uE274\u0000\uEF94\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uEDF5\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uEEAE\u0000\uE64A\u0000\uEAEC\uED50\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uEF74\u0000\u0000"+
+            "\u0000\u0000\uE745\u0000\u0000\u0000\uED6C\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF549\uF3B6\u0000"+
+            "\u0000\uEC6E\uEBB5\u0000\u0000\uE1EF\uF3A7\uE275"+
+            "\uE0DD\u0000\u0000\uE7E3\u0000\u0000\uF4AC\u0000"+
+            "\u0000\uE39B\uF13B\uEA63\uF6E9\u0000\u0000\uF7F5"+
+            "\u0000\u0000\u0000\u0000\u0000\uEBDE\uE0EE\u0000"+
+            "\u0000\u0000\uECBC\uF766\u0000\u0000\uE8EE\u0000"+
+            "\u0000\u0000\u0000\u0000\uF9F1\u0000\u0000\u0000"+
+            "\u0000\uF6B6\u0000\u0000\u0000\u0000\uF56E\u0000"+
+            "\u0000\uF47D\u0000\uE8D9\u0000\uF338\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uEBFD\u0000\u0000"+
+            "\u0000\u0000\u0000\uEA64\u0000\uEB3C\u0000\u0000"+
+            "\u0000\u0000\u0000\uF1E3\u0000\u0000\uE4E1\u0000"+
+            "\uEAC8\u0000\u0000\u0000\u0000\uE7B6\u0000\uF9AC"+
+            "\uF2D3\u0000\u0000\u0000\uED51\uF77B\u0000\uE8AC"+
+            "\u0000\u0000\u0000\u0000\uF956\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uE73D\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF64A"+
+            "\u0000\uE8DF\uE4D3\uF757\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE05E\uF751\uE444\u0000\u0000\uE944"+
+            "\uF849\uE05F\u0000\uF943\uF07A\uF07B\uE39C\u0000"+
+            "\u0000\u0000\u0000\u0000\uF1E4\u0000\u0000\uE9E7"+
+            "\u0000\u0000\uEAC9\u0000\u0000\u0000\u0000\uEAED"+
+            "\u0000\u0000\u0000\u0000\u0000\uF24C\u0000\uF2C1"+
+            "\u0000\u0000\uE162\u0000\uE9A4\u0000\u0000\u0000"+
+            "\uEACA\u0000\u0000\u0000\u0000\u0000\uE4F8\uF3A8"+
+            "\u0000\u0000\u0000\uE1B7\u0000\uF2D4\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uED6D\uEAEE\uE0AC"+
+            "\uEFBC\u0000\u0000\u0000\u0000\u0000\uF07C\u0000"+
+            "\u0000\u0000\uEACB\u0000\u0000\u0000\u0000\u0000"+
+            "\uF7BF\uE63F\uE5C6\u0000\u0000\u0000\u0000\u0000"+
+            "\uE2AA\u0000\u0000\uE239\u0000\u0000\uE69A\u0000"+
+            "\u0000\u0000\uF3B7\uF29A\u0000\u0000\u0000\uE7D9"+
+            "\uF4DF\u0000\uF758\uE256\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uE5E6\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF576\u0000\u0000\uEE55\uF2D5"+
+            "\u0000\u0000\uE0EF\uF96F\u0000\u0000\u0000\u0000"+
+            "\u0000\uE937\u0000\u0000\uE677\u0000\u0000\u0000"+
+            "\u0000\u0000\uF759\u0000\u0000\u0000\u0000\uECD2"+
+            "\u0000\uECBD\u0000\uE2E1\uF350\uF16A\u0000\uE9D7"+
+            "\uF8F0\u0000\u0000\uF13C\u0000\u0000\u0000\uF339"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF867\uF8C1"+
+            "\u0000\uE450\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uEDB0\u0000\u0000\u0000\uF1E5\u0000\u0000"+
+            "\u0000\u0000\uE0AD\u0000\uF7B0\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF6A5\u0000\uE0AE\u0000\uE83F\u0000\uE746\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE4A7\uF8B2"+
+            "\u0000\uF9C4\u0000\uF13D\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF8A1\u0000\u0000\u0000\uEDE9\uEFEE"+
+            "\u0000\uF4F4\uF795\uF351\uEA3F\uF740\u0000\u0000"+
+            "\uF4E0\uEEAF\u0000\u0000\u0000\u0000\u0000\uE8AD"+
+            "\u0000\uEE45\u0000\u0000\uF7A8\u0000\u0000\uE9D8"+
+            "\uEF69\uF2D6\u0000\u0000\u0000\uE4E2\u0000\uEC6F"+
+            "\u0000\u0000\uF970\uE6C8\uF9AD\u0000\u0000\u0000"+
+            "\uEAEF\uE163\uE4F9\u0000\u0000\u0000\u0000\uE592"+
+            "\uE8C7\uEA65\u0000\u0000\u0000\u0000\uF396\u0000"+
+            "\uE5D0\uEDD9\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF957\uE966\uEC70\u0000\u0000\u0000\uE840\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF4A3\u0000\uE4EC"+
+            "\u0000\uF55B\u0000\u0000\u0000\uF9C5\u0000\u0000"+
+            "\u0000\u0000\u0000\uECFD\u0000\uF7B1\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uE39D\uF16B\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF5BC\uF434"+
+            "\uE75E\uE75F\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF5F7\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF671\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uE447\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF8EC\u0000\uE9C8"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uED78"+
+            "\u0000\u0000\uE451\u0000\u0000\u0000\uF767\u0000"+
+            "\u0000\u0000\u0000\u0000\uE64B\uEA66\u0000\u0000"+
+            "\uF6BD\uF13E\u0000\u0000\u0000\uE371\u0000\uEB97"+
+            "\uF043\u0000\uE266\u0000\u0000\u0000\u0000\uE135"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF198\uEC71\uECBE\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF958\u0000\u0000"+
+            "\uE1F0\u0000\uF7F6\u0000\u0000\uEAF0\u0000\u0000"+
+            "\u0000\uEDBF\u0000\u0000\u0000\uE24F\u0000\u0000"+
+            "\u0000\u0000\uF971\uF1B0\uF9D1\uF64B\u0000\u0000"+
+            "\uF7CF\uF0DA\uE051\u0000\uE448\uE1F1\u0000\uECD3"+
+            "\uF9E6\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uEE7D\u0000\u0000"+
+            "\u0000\uECFA\u0000\u0000\uF33A\uF7D0\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uF972\u0000\uF737\u0000"+
+            "\u0000\u0000\uEBE5\uF29B\u0000\u0000\u0000\uEEF6"+
+            "\uF07D\u0000\u0000\uF944\uF5C2\u0000\u0000\uE6DC"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF397\u0000\uE9E8\uE4ED\uF5FC\u0000\uE84F\u0000"+
+            "\uE19D\u0000\u0000\u0000\uE4FA\uF534\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF2D7\u0000\uE553"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF8E3\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF8ED\u0000\uEB3D\u0000\u0000\uF07E"+
+            "\uF8B3\uED52\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF677\uE46D\u0000\uEACC\u0000\u0000\uF959\u0000"+
+            "\u0000\uEDA9\uEB98\uF643\u0000\u0000\u0000\u0000"+
+            "\u0000\uEBFE\u0000\u0000\u0000\u0000\uE0F0\u0000"+
+            "\uF091\uF092\u0000\u0000\u0000\uE850\uF744\uF0F2"+
+            "\u0000\u0000\u0000\u0000\u0000\uED53\u0000\u0000"+
+            "\u0000\u0000\uEFD7\uED93\u0000\u0000\u0000\uE091"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE267"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF95A\u0000\u0000\u0000\uF4E1\u0000\u0000\uE0C4"+
+            "\u0000\u0000\u0000\u0000\uECE5\u0000\uE0C5\uF044"+
+            "\u0000\u0000\uEFBD\u0000\uE6C9\u0000\u0000\uF0DB"+
+            "\uF1B1\u0000\uE153\uF6BE\uF95B\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF796\u0000\uE7B7\u0000\u0000"+
+            "\uF4D3\uF4D4\u0000\u0000\u0000\uF6E4\u0000\uF6D1"+
+            "\u0000\u0000\uE747\uE241\uE052\u0000\u0000\uF8B4"+
+            "\uE0C6\u0000\u0000\uF398\u0000\u0000\uE5E7\u0000"+
+            "\uF060\u0000\u0000\u0000\u0000\u0000\uE164\uE0AF"+
+            "\u0000\u0000\u0000\u0000\u0000\uF53A\uEFAF\u0000"+
+            "\u0000\uF5C3\uEFD8\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE9E9\u0000\u0000\u0000\uF3F3\u0000"+
+            "\uE5FB\uEA4B\u0000\u0000\uF59D\u0000\u0000\u0000"+
+            "\uF9F3\uF9F2\uF6A6\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uE9C9\u0000\u0000\uE563"+
+            "\u0000\uE138\u0000\uE851\uE165\u0000\uE7E4\u0000"+
+            "\u0000\u0000\uF85A\u0000\u0000\u0000\uEDE3\u0000"+
+            "\u0000\u0000\uE4BC\u0000\u0000\u0000\uE092\u0000"+
+            "\u0000\u0000\u0000\uE354\u0000\u0000\u0000\uE060"+
+            "\uF83B\uF0EB\uEEF8\uE7E5\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE3D7\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF4A4\u0000\u0000\u0000\uE59D\uF973"+
+            "\uF868\u0000\uF4D5\u0000\uE2AB\u0000\u0000\uF0F3"+
+            "\uE5FC\u0000\u0000\u0000\u0000\u0000\u0000\uE4D4"+
+            "\uE1FC\u0000\uE7E6\u0000\uEC9B\uEC31\uF0D4\u0000"+
+            "\uEB99\uED42\uE19E\u0000\u0000\u0000\uF8E4\u0000"+
+            "\u0000\u0000\uF53B\u0000\u0000\u0000\u0000\uE34D"+
+            "\u0000\uE093\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF2B8\u0000\u0000\u0000\uE6C0\u0000"+
+            "\uF29C\uF9F4\u0000\u0000\uE4E3\u0000\uF8C2\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE5E8\uE8AE"+
+            "\uEBB6\uF747\u0000\u0000\u0000\u0000\u0000\uEB4F"+
+            "\uF8C3\uE9EA\u0000\uEC32\u0000\uF236\u0000\u0000"+
+            "\u0000\u0000\u0000\uF678\u0000\u0000\u0000\u0000"+
+            "\uF697\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE9CA\u0000"+
+            "\u0000\uE372\u0000\u0000\u0000\u0000\uE9A6\u0000"+
+            "\u0000\uE9EB\u0000\u0000\uED9B\u0000\u0000\uECAF"+
+            "\uE39E\u0000\u0000\u0000\uF59E\u0000\u0000\u0000"+
+            "\u0000\uE14C\uF6EA\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uEDE4\uEAF1\u0000\u0000\uF6E1\u0000\uF7F7"+
+            "\uF2B9\u0000\u0000\uF768\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF7A9\u0000\u0000\u0000\u0000"+
+            "\u0000\uF769\u0000\u0000\u0000\uF24D\u0000\u0000"+
+            "\u0000\uE756\u0000\u0000\uED73\uF5CE\u0000\u0000"+
+            "\u0000\u0000\uE9D9\u0000\u0000\u0000\u0000\uE7E7"+
+            "\uE449\uE5C3\u0000\u0000\uE875\uE860\u0000\uE3D9"+
+            "\uE268\u0000\uE0DE\uF53C\uE89D\u0000\uF679\uEF95"+
+            "\uE2AC\uF392\u0000\uF59F\uE8C8\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uE250\uECD4\uE3CF\uF3F5"+
+            "\u0000\uE1F2\u0000\uE2EB\u0000\u0000\u0000\uE1B8"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uECA6\uE3DA"+
+            "\u0000\uF435\u0000\u0000\u0000\u0000\u0000\uF436"+
+            "\u0000\uED5E\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE4FB\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF3A9\u0000\u0000\u0000\uF459"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF2D8\uEE59\u0000\uE748\uF895\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF4B5\u0000\u0000\uF734\u0000\u0000\uE3F3"+
+            "\uEE58\u0000\u0000\u0000\u0000\uF76A\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE979"+
+            "\uEA67\u0000\u0000\u0000\u0000\u0000\uE0DF\u0000"+
+            "\u0000\u0000\uE2EC\u0000\u0000\u0000\u0000\uF56F"+
+            "\u0000\u0000\uE3F4\uE44A\u0000\u0000\u0000\uEAF2"+
+            "\u0000\u0000\u0000\uEBB7\u0000\u0000\u0000\u0000"+
+            "\uEC33\uE4FC\u0000\u0000\uF1E6\u0000\u0000\u0000"+
+            "\u0000\u0000\uE8C9\u0000\u0000\u0000\uED9C\u0000"+
+            "\uE2DE\u0000\u0000\uE260\u0000\u0000\u0000\u0000"+
+            "\uE5D3\uF4F5\uF6AE\u0000\u0000\uF2C8\u0000\uE1F3"+
+            "\uF5CF\uEDF3\uF352\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE061\u0000\u0000\u0000\uF093\u0000\uE336\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE7DA"+
+            "\uF33B\u0000\u0000\u0000\u0000\u0000\uF0E7\u0000"+
+            "\u0000\u0000\uEDC0\uF945\u0000\u0000\u0000\u0000"+
+            "\u0000\uED54\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uE139\uF9C6\u0000"+
+            "\u0000\u0000\u0000\u0000\uF045\u0000\uEDAA\uEABA"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uEBDF\u0000\uE861"+
+            "\u0000\u0000\u0000\u0000\uEBB8\u0000\uEF96\uE4FD"+
+            "\u0000\u0000\u0000\u0000\uEC34\u0000\u0000\u0000"+
+            "\u0000\u0000\uF45A\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uE876\uF6B3\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF9CD\u0000\u0000\u0000\uF4B6\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF267\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF5C4\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE734\u0000\u0000\u0000\u0000\u0000\uF437"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE7B8\uE7B9\uF2C9\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE65E\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF6CB\uEAAE\uEF97\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE445\u0000\u0000\u0000\uE4D5\u0000"+
+            "\u0000\u0000\u0000\u0000\uF55C\uE89E\u0000\u0000"+
+            "\u0000\u0000\u0000\uE7E8\u0000\uF6EB\uF5C9\u0000"+
+            "\uF4BC\u0000\uE862\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE4B5\u0000\u0000\u0000\u0000"+
+            "\u0000\uEF46\u0000\u0000\uE65F\uF54A\u0000\uF6C9"+
+            "\u0000\u0000\uE13A\u0000\u0000\uF353\uE166\u0000"+
+            "\u0000\u0000\uE363\u0000\uE4BD\u0000\u0000\u0000"+
+            "\uE8FB\u0000\uE0E0\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE4E4\uF699\u0000\u0000\uE5BA\uF4CD\uE0E1"+
+            "\u0000\u0000\u0000\u0000\uF0F4\u0000\u0000\u0000"+
+            "\u0000\u0000\uF53D\u0000\uF93A\u0000\u0000\u0000"+
+            "\u0000\u0000\uF6EC\u0000\u0000\u0000\uEF98\u0000"+
+            "\uE877\u0000\u0000\u0000\uF6CC\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uEDC1\u0000\u0000\u0000\u0000\uEB7E\u0000\u0000"+
+            "\u0000\u0000\u0000\uE5FD\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE276\uF93B\uE5BB\u0000\u0000\uF438"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uEC35\uE1B9"+
+            "\uF094\uE0C7\u0000\uE1F4\u0000\u0000\uE8AF\uF2D9"+
+            "\u0000\u0000\u0000\u0000\u0000\uE1BA\u0000\u0000"+
+            "\uF99B\u0000\u0000\u0000\u0000\uEAF3\uE277\uE852"+
+            "\u0000\uE2AD\u0000\u0000\u0000\u0000\uEEF9\uF738"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF4E2\u0000"+
+            "\u0000\u0000\uE094\uEAA4\u0000\u0000\uE554\u0000"+
+            "\u0000\u0000\u0000\u0000\uE167\uEDC2\u0000\u0000"+
+            "\u0000\u0000\uE1BB\u0000\uF2DA\uF268\u0000\uE9A7"+
+            "\uEC36\u0000\u0000\u0000\u0000\u0000\uEB50\u0000"+
+            "\u0000\u0000\uE640\uF75A\u0000\uF99C\u0000\uE7FE"+
+            "\u0000\u0000\u0000\u0000\uEA40\u0000\u0000\u0000"+
+            "\uE9EC\uE878\u0000\u0000\u0000\u0000\u0000\uE570"+
+            "\u0000\uE69B\u0000\uE1D7\uEA68\u0000\u0000\uF49A"+
+            "\u0000\uED66\u0000\u0000\uE355\uF53E\u0000\uE9A8"+
+            "\u0000\u0000\u0000\uF1C5\uF4D6\u0000\u0000\uEA69"+
+            "\uECE6\u0000\u0000\u0000\u0000\u0000\u0000\uE4A8"+
+            "\u0000\uE8B0\u0000\u0000\uEDDA\uECBF\u0000\u0000"+
+            "\u0000\uE8B1\u0000\u0000\u0000\uE5E9\u0000\u0000"+
+            "\u0000\u0000\u0000\uEB51\uF2DB\u0000\u0000\uF379"+
+            "\u0000\u0000\uE6B2\u0000\u0000\u0000\u0000\uE39F"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE7E9\u0000\u0000\uE3A0\u0000\uF17D\uE4A9\u0000"+
+            "\uF439\uF354\u0000\u0000\uEC72\uEFEF\u0000\u0000"+
+            "\u0000\uF7D1\u0000\u0000\uEFD9\u0000\u0000\u0000"+
+            "\u0000\u0000\uEF6A\uE853\uE854\uE555\u0000\uEEFA"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE1E0\uECB0"+
+            "\u0000\uE8B2\uF8C4\u0000\uF4E3\u0000\uE7A5\uF8E7"+
+            "\uE9CB\uE364\u0000\uEE46\uEB3E\uF9DA\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE945\uEB9A"+
+            "\uEEB1\u0000\u0000\u0000\u0000\uF5F0\u0000\uE76C"+
+            "\uF1C6\u0000\u0000\u0000\u0000\uEBB9\u0000\uECC0"+
+            "\uF7C0\uEFF0\u0000\u0000\uE7DB\u0000\uF4E4\u0000"+
+            "\u0000\u0000\uE946\uED79\u0000\u0000\u0000\u0000"+
+            "\u0000\uF355\uECC1\uF95C\uF95D\u0000\u0000\u0000"+
+            "\u0000\uF45B\u0000\uF45C\u0000\u0000\u0000\uED5F"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF3DB\u0000\uF869\u0000\uF3B8\uF9F5\uEB9B"+
+            "\u0000\u0000\u0000\u0000\uEEFB\uF947\uF974\uF8C5"+
+            "\uECE7\uE749\u0000\uF69A\u0000\u0000\uE955\uE168"+
+            "\u0000\u0000\u0000\uEB3F\uF577\u0000\uF2DC\uE2FC"+
+            "\uF2DD\u0000\uF43A\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uF9BE\u0000\u0000\uE03C"+
+            "\uF9BB\uF9C7\u0000\u0000\u0000\u0000\uEEB2\u0000"+
+            "\uF061\uEAF4\u0000\u0000\u0000\u0000\uE3EC\uED6E"+
+            "\uEDC3\u0000\u0000\u0000\u0000\uE7A6\u0000\u0000"+
+            "\uE1BC\u0000\uF4E5\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF1D5\u0000\u0000\uE7BA\u0000"+
+            "\u0000\u0000\uF1E7\uF8B5\uF77C\u0000\u0000\u0000"+
+            "\u0000\uEB77\u0000\uE169\u0000\u0000\uE556\u0000"+
+            "\u0000\u0000\u0000\u0000\uEEA5\u0000\uE5F5\uE4BE"+
+            "\u0000\uF99D\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uED94\u0000"+
+            "\u0000\uEAF5\u0000\u0000\uEF9A\uF77D\u0000\u0000"+
+            "\uE257\u0000\u0000\u0000\u0000\u0000\uF9F6\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uEF68\u0000\uE1D8\uEED6\uE16A\u0000\u0000\uE073"+
+            "\uEAF6\uF357\uF356\u0000\uE74A\u0000\uF3F4\uF592"+
+            "\uF5CC\u0000\u0000\uF975\u0000\u0000\u0000\u0000"+
+            "\uF055\uF095\u0000\uE9DB\u0000\uE967\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uEA9F\uF49B\u0000\uE5C7"+
+            "\u0000\u0000\u0000\uE760\u0000\uF358\uE3A1\uE3A2"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE7D4\uE678"+
+            "\uE7CA\u0000\uE841\uE757\uE972\uF4CE\uF5F4\u0000"+
+            "\u0000\uF3B9\u0000\u0000\uE863\u0000\uF67A\u0000"+
+            "\u0000\u0000\uE2F5\u0000\u0000\uF9AE\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE062\u0000"+
+            "\u0000\uEAB4\u0000\u0000\u0000\u0000\uE6DD\uF84A"+
+            "\uF237\uF5BD\u0000\uF797\u0000\u0000\uF1E8\u0000"+
+            "\u0000\u0000\u0000\u0000\uE571\u0000\uE3A3\uEBD6"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF7F8\u0000\uE8CA"+
+            "\uE0F9\uE564\u0000\uE7DC\u0000\uF24E\u0000\uF6ED"+
+            "\u0000\u0000\u0000\uE47E\u0000\u0000\uEBE6\uF6F9"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE9ED"+
+            "\u0000\uEF6B\u0000\uE8B3\u0000\u0000\u0000\uE3F7"+
+            "\uEB40\u0000\u0000\uE572\u0000\uF667\u0000\uE6F9"+
+            "\u0000\u0000\uE76D\u0000\uE1FD\uF43B\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE1BD"+
+            "\uF752\u0000\u0000\uF43C\u0000\u0000\uE03D\uE03E"+
+            "\uE2AE\u0000\u0000\u0000\u0000\u0000\uECC2\u0000"+
+            "\u0000\u0000\u0000\u0000\uE947\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE8DA"+
+            "\uE7BB\uE095\uF663\uEE9A\uF097\u0000\u0000\u0000"+
+            "\u0000\u0000\uF098\u0000\u0000\uF69B\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE2AF\u0000\u0000\uE063\u0000\u0000\uE03F"+
+            "\uE440\uF3BA\u0000\uE6B3\uECC3\uF4FD\uEA6A\u0000"+
+            "\u0000\u0000\u0000\uEA6B\u0000\u0000\uF2DE\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uEC73\uF29D\u0000\u0000\uEAF7\uE6CA"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE278\uE8DB\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF3BB\u0000\u0000\u0000\u0000\uEFF1"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF847\uE356\u0000\u0000\uE13B\uF238\u0000\u0000"+
+            "\uE0FA\uF7F9\uE19F\uE4FE\u0000\u0000\u0000\u0000"+
+            "\uED60\u0000\u0000\u0000\u0000\u0000\uF47E\u0000"+
+            "\uE565\uEACD\u0000\uF948\uE3D0\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF45D\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF6D2\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE064"+
+            "\u0000\uE5D9\u0000\u0000\u0000\uE76E\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE1D9"+
+            "\u0000\u0000\u0000\uF239\uF64C\u0000\u0000\uE16B"+
+            "\u0000\u0000\u0000\u0000\u0000\uF359\u0000\uF99E"+
+            "\u0000\uEF59\uF5A0\u0000\u0000\u0000\u0000\uEEFC"+
+            "\uE6DE\u0000\u0000\u0000\u0000\uEA6C\u0000\uF33C"+
+            "\uE1A0\uE1E1\u0000\uEBBA\u0000\uE8EF\uE842\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uE3A5\uE948\u0000\u0000"+
+            "\u0000\uE798\u0000\uE3A4\u0000\uE1E2\u0000\u0000"+
+            "\u0000\u0000\uE97A\u0000\u0000\uF399\u0000\uF35A"+
+            "\uE34E\u0000\uE9DC\u0000\u0000\u0000\u0000\uE566"+
+            "\uE4D6\u0000\u0000\u0000\u0000\u0000\u0000\uF1D0"+
+            "\uE1A1\u0000\u0000\u0000\u0000\u0000\uEAB5\u0000"+
+            "\u0000\u0000\uEAF8\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE531\uE242\u0000\u0000\u0000\u0000\u0000"+
+            "\uEF5A\u0000\u0000\u0000\u0000\uF0F5\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uECD5\uF5D0\u0000"+
+            "\u0000\u0000\uF5A1\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE7A7"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uEDAB\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uEE5B\u0000\uF5F1"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uEDC5\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF7A3\uEB6B\uF67B\u0000\uE0F1"+
+            "\u0000\uE7EA\uF5A2\u0000\u0000\u0000\uE6D1\u0000"+
+            "\uE3F8\uF09A\uF09B\uE843\u0000\u0000\u0000\u0000"+
+            "\uF2DF\u0000\u0000\uF3EF\u0000\uEDF6\uF24F\uEC74"+
+            "\u0000\u0000\u0000\u0000\u0000\uE34F\u0000\uF83C"+
+            "\uF5D1\uEEB3\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uEFBE\u0000\u0000"+
+            "\u0000\u0000\u0000\uF45E\uE8B4\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF95E\u0000\uE9EE"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uEEB4\u0000"+
+            "\u0000\u0000\u0000\u0000\uE6B4\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF6B4\u0000\u0000\u0000\u0000"+
+            "\u0000\uE1BE\u0000\uE879\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE2B0\uF6D9\uF4E6\u0000\u0000"+
+            "\uE269\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE23A\u0000\uE0C8\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE337\u0000\uF35B\u0000\uE357"+
+            "\u0000\u0000\uED55\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE8E0\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE5DA\u0000\uE6A7\u0000\u0000\u0000\uF250"+
+            "\u0000\uF798\u0000\u0000\u0000\u0000\uF5D2\uF1E9"+
+            "\u0000\uE7BC\u0000\uEDC6\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF5A3\u0000\u0000"+
+            "\uE864\uEC37\uF8FC\u0000\u0000\uF3DC\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uE096\u0000\u0000\u0000"+
+            "\uEF9C\u0000\u0000\uE279\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uEFF8\uEC75\u0000\u0000\u0000\u0000"+
+            "\uE349\uE594\u0000\u0000\u0000\u0000\u0000\uE3A6"+
+            "\u0000\uEACE\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF996\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE4AA\u0000\u0000\u0000\uE13C\u0000\u0000\u0000"+
+            "\u0000\uF2E0\u0000\u0000\u0000\uEDE5\uE365\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE8FC"+
+            "\u0000\u0000\u0000\u0000\uF976\u0000\u0000\u0000"+
+            "\u0000\u0000\uE0FE\uF1EA\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uEA41\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF7E3\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE532\uE2F6\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE660\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE5EA\uF3EE\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF85B\u0000"+
+            "\u0000\u0000\u0000\uEDA1\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uE5B1\u0000\u0000\u0000"+
+            "\u0000\u0000\uE2ED\u0000\uF1EB\u0000\u0000\u0000"+
+            "\u0000\u0000\uE5B2\u0000\u0000\u0000\uE5BC\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF9E2\uF4AD\u0000\uF9DB\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uEFB0\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE3A7\u0000\u0000\uF9E3\uE243\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF9E4\uF85E"+
+            "\u0000\u0000\u0000\u0000\uE040\u0000\uF6A7\u0000"+
+            "\uE2B1\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEE32"+
+            "\u0000\uF946\uF43D\uF2E1\uF4AE\uE956\uE7EB\u0000"+
+            "\u0000\u0000\uEF70\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uEBA8\u0000\u0000\u0000\u0000\uE5F6"+
+            "\uE2FD\u0000\u0000\uEA6D\u0000\u0000\u0000\uE7D1"+
+            "\u0000\u0000\u0000\uED7A\uF45F\u0000\uF6BF\u0000"+
+            "\u0000\uEC76\uEC38\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uECD6\u0000"+
+            "\uF1D1\u0000\u0000\u0000\u0000\u0000\uEFF9\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE641\uEA42"+
+            "\u0000\u0000\uEB78\u0000\u0000\uE4AB\u0000\uF0DC"+
+            "\u0000\u0000\uEAAF\u0000\uE053\u0000\u0000\uF29E"+
+            "\u0000\uF9C3\u0000\u0000\u0000\uF0F6\uE2B2\u0000"+
+            "\u0000\u0000\u0000\uE7EC\u0000\uE7BD\u0000\uE76F"+
+            "\u0000\u0000\uE548\uF0BE\uE9EF\u0000\uE9F0\uE9F1"+
+            "\uE9F2\u0000\u0000\uE7BE\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF8C6\uE2B3\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF29F\u0000\u0000\u0000\u0000\u0000\u0000\uED3B"+
+            "\u0000\uE855\u0000\uE77C\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE3A8\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uEC39\u0000\u0000\uEA4C"+
+            "\uEEB5\u0000\u0000\u0000\u0000\u0000\uE8F0\u0000"+
+            "\uF2E2\uF3F0\uE2B4\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE8F1\u0000"+
+            "\uEB41\u0000\u0000\u0000\u0000\uEAA5\u0000\uF7D2"+
+            "\u0000\u0000\uEEFD\u0000\u0000\uEE33\uF8F1\uE0B0"+
+            "\uF43E\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE1E7\u0000\uEF6C\u0000\u0000\uEED7\u0000\u0000"+
+            "\uF6C0\u0000\uE373\u0000\u0000\u0000\uE831\u0000"+
+            "\u0000\u0000\uE14D\u0000\u0000\uE3A9\uE9CC\u0000"+
+            "\u0000\uECFE\uE3AA\uEF3A\u0000\uF046\uF7FA\uEE5C"+
+            "\uF668\u0000\u0000\u0000\uE557\u0000\u0000\u0000"+
+            "\uE7CB\u0000\uE7D2\uE4CB\uE799\uE839\uF5F8\u0000"+
+            "\u0000\uEA6E\uF43F\uF739\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE758\u0000\u0000\uF251\u0000"+
+            "\u0000\u0000\u0000\uF7C1\u0000\u0000\u0000\u0000"+
+            "\uE9F3\uF09C\u0000\uF64D\uEBBB\uE1BF\uF564\uEE5D"+
+            "\u0000\uF95F\uF8A2\u0000\uEB6C\u0000\u0000\u0000"+
+            "\u0000\uF54B\uE865\u0000\uF7B2\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF8F2\u0000\uE8F6\u0000\uEA6F"+
+            "\u0000\u0000\u0000\uE8F2\u0000\u0000\u0000\u0000"+
+            "\u0000\uF76C\uF6EE\uF0E8\u0000\uE49C\u0000\u0000"+
+            "\uF3BC\u0000\u0000\uF86A\u0000\u0000\uE87A\uE856"+
+            "\uF6C1\u0000\u0000\uEEB6\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000";
+
+        private final static String innerIndex3=
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uEDC7\uE63C\u0000\u0000\u0000"+
+            "\u0000\uE957\u0000\u0000\u0000\u0000\u0000\uEBA9"+
+            "\u0000\uEC3A\u0000\uE5A6\u0000\u0000\uE567\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF460\u0000\uF09D"+
+            "\u0000\uEB6D\uF8F3\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF3BD\u0000\u0000\uEC77\uF9D7\u0000"+
+            "\uE258\uF047\u0000\uF950\u0000\uF9E7\uF6EF\u0000"+
+            "\u0000\uE6B5\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF2BA\uF3DD\u0000\uEA43\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uEF5B\u0000\u0000\uF76D\u0000"+
+            "\u0000\uF8C7\uE5C8\u0000\uE6DF\u0000\uE9A9\u0000"+
+            "\u0000\u0000\u0000\u0000\uEFB1\u0000\u0000\uF83D"+
+            "\uF669\uF896\u0000\u0000\u0000\u0000\u0000\uF73A"+
+            "\u0000\u0000\u0000\u0000\u0000\uEE7E\u0000\uE16C"+
+            "\uEBBC\uEB91\u0000\u0000\uEFBF\uF99F\uEE5E\u0000"+
+            "\u0000\uEBD7\u0000\uEE5F\u0000\uF593\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uED95"+
+            "\u0000\u0000\uED9D\u0000\u0000\uF7E4\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF2E3\u0000\u0000\uE2EE\uF64E\uEB42\uF9A0\uE3AB"+
+            "\u0000\u0000\u0000\uE6FA\u0000\u0000\u0000\uF8C8"+
+            "\u0000\uEC67\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE533\uF39A\uE6A8\u0000\u0000\u0000\uEBE7\u0000"+
+            "\u0000\uE4BF\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF2E4\u0000\uE6C5\uF0E2\u0000\u0000\uF977\u0000"+
+            "\u0000\uED32\u0000\uEC78\u0000\uEE60\u0000\uF8E8"+
+            "\uF578\uEDF4\uF54C\uF565\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEAB6"+
+            "\u0000\uF949\uF252\uE097\u0000\u0000\u0000\uF2E5"+
+            "\uE0E2\uE534\u0000\uEA70\uE89F\uED56\uEF4E\u0000"+
+            "\u0000\u0000\u0000\uEB6E\uF644\uF062\u0000\uF7FB"+
+            "\u0000\u0000\uEB52\u0000\uE074\u0000\uEEB7\u0000"+
+            "\uF09F\u0000\uE7DD\u0000\uE844\uF23A\uF8E9\u0000"+
+            "\u0000\u0000\u0000\uE8CB\uE845\u0000\u0000\u0000"+
+            "\u0000\u0000\uF3BE\u0000\u0000\uE4AC\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF8C9\u0000"+
+            "\uEACF\u0000\u0000\uE4C0\uECD7\u0000\uF2E6\uF960"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEFC0"+
+            "\u0000\u0000\u0000\uF5D3\u0000\u0000\uF16C\uF6B7"+
+            "\u0000\u0000\uF048\uE3F9\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE958\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF049\u0000\u0000\u0000\u0000\u0000\uF3DE\u0000"+
+            "\u0000\u0000\u0000\u0000\uE6B6\uE2B5\u0000\uE7A8"+
+            "\u0000\u0000\uF17E\u0000\u0000\uE9AA\u0000\u0000"+
+            "\u0000\u0000\uE1A2\uEF3E\u0000\u0000\u0000\uEBBD"+
+            "\u0000\uF461\u0000\u0000\u0000\u0000\uEFC1\u0000"+
+            "\u0000\u0000\uE49E\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE8B5\u0000\uF4E7\uE7A0\u0000\u0000"+
+            "\u0000\uF961\u0000\uF1B2\uF53F\u0000\uF8A3\u0000"+
+            "\u0000\uF951\u0000\uF23B\uE535\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF594"+
+            "\u0000\u0000\u0000\u0000\uF269\u0000\u0000\u0000"+
+            "\uF8CA\u0000\u0000\u0000\u0000\u0000\uE1E3\uE74B"+
+            "\u0000\uEDDB\uF799\u0000\u0000\u0000\uF664\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE6A9"+
+            "\u0000\uE0C9\u0000\u0000\uEE61\uF35C\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE73E\u0000\uF7D3\uE5FE\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE74C\uF440\u0000\u0000\u0000"+
+            "\u0000\uEC3B\uF4E8\u0000\u0000\u0000\u0000\u0000"+
+            "\uF2C2\u0000\u0000\u0000\u0000\u0000\u0000\uF1EC"+
+            "\u0000\uEEB8\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE8A0\u0000\u0000\uE14E\u0000\u0000\uF49E"+
+            "\uE87B\u0000\uEC68\uF1D6\u0000\u0000\uE661\uEB43"+
+            "\u0000\u0000\uF962\u0000\uF0C8\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uE4C1\uF35D\u0000"+
+            "\uE2F7\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF1D2\u0000\uE568\uE959\uE6F1\u0000"+
+            "\u0000\uEABB\u0000\u0000\uF4A5\u0000\u0000\u0000"+
+            "\uF55D\u0000\u0000\u0000\u0000\uF3BF\uF741\u0000"+
+            "\uEFFA\u0000\u0000\u0000\uF8CB\u0000\u0000\uE065"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF7D4\uF6CA\u0000\u0000\uE658"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF978\uF4BD"+
+            "\u0000\uF2A0\u0000\uEEFE\u0000\u0000\u0000\u0000"+
+            "\u0000\uE4C2\u0000\u0000\u0000\u0000\uE4B6\u0000"+
+            "\uE13D\uF69C\uE642\uE468\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uEED8\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uECA5\u0000\u0000"+
+            "\u0000\u0000\uEEB9\u0000\u0000\u0000\u0000\uF33D"+
+            "\uF8CC\uF0A1\u0000\u0000\uE536\u0000\u0000\u0000"+
+            "\u0000\uF8CD\u0000\uE5BD\uF3DF\u0000\u0000\uF69D"+
+            "\u0000\uEA44\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE5EB\u0000"+
+            "\u0000\uEDC8\u0000\u0000\u0000\uF8A4\uE549\u0000"+
+            "\u0000\uEA71\u0000\uED33\u0000\u0000\u0000\uE6B7"+
+            "\u0000\uF77E\u0000\u0000\u0000\uEA45\u0000\u0000"+
+            "\uE662\u0000\uF7D5\uEEBA\uF0D5\uE5F7\uF2E7\uEBBE"+
+            "\u0000\u0000\u0000\uF83E\u0000\u0000\u0000\uE679"+
+            "\uE67E\u0000\u0000\u0000\u0000\u0000\u0000\uEEBB"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF15B"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE5B3\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uE244\u0000\u0000\u0000"+
+            "\uF8A5\uEBEE\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF6A8\u0000\u0000\u0000\u0000\uF8CE\u0000\u0000"+
+            "\u0000\u0000\u0000\uE74D\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF8FD\u0000\u0000\u0000\u0000"+
+            "\uF979\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE2B6\u0000\u0000\u0000\uF1C7\uF23C\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uE16D\u0000\u0000"+
+            "\u0000\u0000\uF637\u0000\u0000\u0000\uEE9C\u0000"+
+            "\u0000\u0000\uF5A4\u0000\u0000\u0000\u0000\u0000"+
+            "\uF9DC\uF1B3\uE259\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF2E8\u0000\u0000\uEBBF\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF86B\uE0E3\uF6A9\u0000\uF8A6"+
+            "\u0000\u0000\u0000\uE949\u0000\u0000\u0000\uF3C0"+
+            "\uF1C8\uF2C3\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE63D\u0000\u0000\uF9CE\u0000\u0000\u0000\uEF31"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF8F4\uE5A7\u0000\u0000\u0000\uF3F6\u0000\uEE63"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE16E\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF742\u0000\u0000\u0000\uE97B\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uF9B6\u0000\u0000\u0000"+
+            "\u0000\uEDEA\u0000\u0000\uF3E0\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE8CC\uE9CD\u0000\u0000\u0000\uE558\u0000"+
+            "\u0000\uE7ED\u0000\u0000\u0000\u0000\uF5A5\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uEE9D\u0000\u0000\u0000\u0000\u0000\uEE64\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF9C8"+
+            "\u0000\uE631\uF9BF\u0000\uF963\u0000\uF2A1\u0000"+
+            "\uEEBC\u0000\u0000\u0000\u0000\u0000\uE3EE\u0000"+
+            "\u0000\uEE65\u0000\u0000\uEFF2\u0000\uEAB0\u0000"+
+            "\u0000\u0000\u0000\u0000\uE770\uF94A\uF9AF\uF35E"+
+            "\u0000\uE8E1\u0000\u0000\uEDC9\u0000\uF1B4\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uEB53\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uECD8\u0000\u0000\u0000"+
+            "\u0000\uEFFB\uF038\u0000\u0000\u0000\u0000\uF9B7"+
+            "\u0000\u0000\uF8A7\u0000\uEFC2\u0000\u0000\u0000"+
+            "\u0000\uF9F7\u0000\u0000\u0000\u0000\u0000\uEC69"+
+            "\u0000\u0000\uE97C\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uEF32\u0000\u0000\u0000"+
+            "\u0000\uEE92\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF9F8\uF9F9\u0000\u0000\u0000\uF64F\u0000"+
+            "\u0000\uEEA7\u0000\uEE67\u0000\u0000\u0000\u0000"+
+            "\uE595\uE559\u0000\u0000\u0000\u0000\uE69C\u0000"+
+            "\uE6F2\u0000\uEBC0\u0000\uE8E2\uEE68\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEEBD"+
+            "\u0000\u0000\u0000\u0000\u0000\uF35F\uF4BE\uEC3C"+
+            "\u0000\u0000\u0000\u0000\u0000\uF5B7\uEB92\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF9B8\uECE8\u0000\uE537\uEF9E"+
+            "\uF862\u0000\u0000\u0000\u0000\u0000\uF791\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE663\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE5B4\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF360\u0000\uF6F0\uF243\u0000\u0000"+
+            "\uF04A\u0000\uF063\u0000\u0000\uF1C9\uE9AB\u0000"+
+            "\u0000\u0000\uEDAC\uF9A1\u0000\uEAD0\uF143\u0000"+
+            "\uEAD1\u0000\u0000\u0000\u0000\u0000\uF1ED\uF748"+
+            "\uF6FA\u0000\u0000\u0000\uF73B\u0000\u0000\u0000"+
+            "\u0000\u0000\uF570\u0000\u0000\u0000\u0000\u0000"+
+            "\uE54A\uED43\u0000\uEFDA\u0000\uEA46\u0000\uE7BF"+
+            "\u0000\uE7C0\uE691\u0000\u0000\u0000\u0000\uE7CC"+
+            "\u0000\uE83A\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uEAE5\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF6E5\u0000\u0000\u0000\uE142\u0000\u0000"+
+            "\uEAF9\uE6E0\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE54B\u0000\u0000\u0000\u0000\uF9FA"+
+            "\u0000\u0000\u0000\u0000\uE143\u0000\u0000\uE8F3"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uEAD2\u0000\uE25A\u0000\uF26A\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uED74\u0000"+
+            "\uF8CF\u0000\u0000\u0000\u0000\u0000\u0000\uE2B7"+
+            "\u0000\uF253\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE27A\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uEC3D\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE6E1\uF897\u0000\u0000\uE5C9\uF73C\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uEED9\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF4E9\u0000"+
+            "\u0000\u0000\u0000\uE77D\uECC4\uF393\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uEF75\u0000\u0000"+
+            "\u0000\uEB9C\uF254\uE7DE\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF0A2\uF0A3"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF952\uF04B"+
+            "\u0000\u0000\u0000\u0000\uEF3B\uEA72\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF1EF\u0000\uEF33\u0000\u0000\u0000\u0000\uE2F1"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE54C\u0000\uF97A\u0000\u0000\u0000\u0000\u0000"+
+            "\uEEBE\u0000\uF994\u0000\u0000\uE644\u0000\u0000"+
+            "\uEC3E\u0000\uE4B7\uF85C\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uF86C\u0000\uF1B5\uEBE3"+
+            "\u0000\uEF3C\u0000\uEF6D\u0000\u0000\uF2E9\u0000"+
+            "\u0000\u0000\u0000\u0000\uF54D\u0000\uE2B8\uEFDB"+
+            "\uE3AC\u0000\u0000\u0000\u0000\u0000\u0000\uE857"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF0C9"+
+            "\u0000\uEF5C\u0000\u0000\u0000\uEA47\u0000\u0000"+
+            "\u0000\u0000\uE64C\uE4E5\u0000\u0000\u0000\u0000"+
+            "\u0000\uF86D\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE866\u0000\uE041\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE858\uEAA6\u0000\uF7B3\uF462\u0000\uE054"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE25B\u0000"+
+            "\u0000\uE1F5\u0000\u0000\u0000\uF9B0\uE5A8\u0000"+
+            "\uF3C1\u0000\u0000\uEC79\uE95A\uF144\uF850\u0000"+
+            "\u0000\uF8A8\uE338\u0000\u0000\uE87C\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE7EE"+
+            "\u0000\uEB9D\u0000\u0000\u0000\uF2EA\uF86E\u0000"+
+            "\u0000\uEB54\u0000\uE2B9\u0000\uE5CA\uE6E2\uEC3F"+
+            "\u0000\uE6B8\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uEF5D\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF66A\u0000\u0000\u0000\u0000"+
+            "\uF2A2\uEC6A\uF69E\u0000\u0000\uF8D0\uE3AD\u0000"+
+            "\uE1E4\u0000\uE3AE\uE97D\uEF5E\u0000\uF39B\uE245"+
+            "\uEE9E\u0000\u0000\uE6FB\uE366\uE9F5\uF6F1\u0000"+
+            "\uF69F\u0000\uE8F7\u0000\u0000\u0000\u0000\uF8EA"+
+            "\uEFDC\uE7C1\u0000\uF5F2\uEB55\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF064\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF7C2\u0000\uF04C"+
+            "\u0000\uE455\uF8D1\uEEC0\uF0A5\u0000\uEAFA\uECA2"+
+            "\uE6B9\u0000\uEFC3\u0000\uEF9F\uEF3F\u0000\u0000"+
+            "\uF463\uF8A9\uE735\u0000\u0000\u0000\u0000\uE5CB"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE358\u0000"+
+            "\u0000\u0000\uE3AF\uE6E3\u0000\u0000\u0000\uEB56"+
+            "\u0000\uE632\u0000\uF1F0\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE6F3\u0000\u0000\u0000\uF964\u0000\uE867\uE16F"+
+            "\u0000\uF464\u0000\uE3B0\u0000\uE170\u0000\uE8FD"+
+            "\uF4BF\u0000\uF361\u0000\u0000\u0000\u0000\u0000"+
+            "\uF94B\u0000\uEC40\u0000\u0000\uEE35\u0000\u0000"+
+            "\u0000\uEC6B\u0000\u0000\u0000\uEADE\u0000\uEB57"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF491\u0000"+
+            "\u0000\u0000\uE171\u0000\u0000\u0000\u0000\uE67A"+
+            "\u0000\u0000\u0000\u0000\uEEC2\u0000\u0000\u0000"+
+            "\uE246\u0000\uF4C0\u0000\uE1FE\u0000\u0000\u0000"+
+            "\uF8D2\u0000\uF79A\uF6FB\u0000\u0000\uEF4F\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uEF47\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF1B6"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE94A\u0000\u0000\uE144\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF3F7\u0000\u0000\u0000\uEF48\u0000\u0000"+
+            "\uE098\u0000\uED34\uF566\u0000\u0000\u0000\uEAE6"+
+            "\u0000\u0000\u0000\uEAA7\u0000\uEAE7\uEBC1\u0000"+
+            "\uEFC4\u0000\u0000\uE95B\uEFC5\u0000\u0000\u0000"+
+            "\uF2A3\uF0A6\uE0A3\uECE9\u0000\u0000\u0000\uE3FB"+
+            "\uF2A4\u0000\uF2EB\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE344"+
+            "\u0000\u0000\u0000\u0000\uE1A3\u0000\u0000\uEF76"+
+            "\u0000\uF2A5\u0000\uE4CC\uE87D\u0000\u0000\u0000"+
+            "\u0000\uE6BA\u0000\uF465\uF5E5\uE7EF\u0000\u0000"+
+            "\u0000\u0000\uF7B4\u0000\u0000\uE5D4\uF9CF\u0000"+
+            "\u0000\u0000\uE8E3\u0000\u0000\u0000\u0000\uF3E1"+
+            "\uF146\u0000\u0000\u0000\u0000\uF8FE\uE4D7\u0000"+
+            "\uE3B1\u0000\uE0B1\u0000\u0000\u0000\u0000\uE3B2"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE0B2\uF3C2"+
+            "\u0000\u0000\uF571\uF7B5\u0000\u0000\uEBC3\uEBC2"+
+            "\u0000\uF0F7\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uEAA8\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uE0CA\u0000\u0000"+
+            "\u0000\u0000\u0000\uEE49\u0000\u0000\u0000\u0000"+
+            "\u0000\uF76E\uF7AA\uE099\u0000\uF1B7\u0000\u0000"+
+            "\uE4B8\uF466\u0000\u0000\uE569\uF255\uF492\u0000"+
+            "\u0000\u0000\uE042\u0000\u0000\uE94B\u0000\uF3F8"+
+            "\u0000\u0000\u0000\u0000\u0000\uF147\u0000\u0000"+
+            "\u0000\u0000\uEDCA\u0000\uF650\uF9DD\u0000\u0000"+
+            "\uE573\uE172\u0000\uF6D4\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE6E5\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE4C3\u0000\uE736\u0000\uF651\u0000\u0000\u0000"+
+            "\u0000\u0000\uE9F6\u0000\uE1C0\u0000\u0000\u0000"+
+            "\uEDDC\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uEDCB\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uEBC4\u0000\u0000\u0000\u0000\u0000\uEF40"+
+            "\uF540\uF4EA\uE87E\u0000\uE6BB\u0000\uEC41\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE6AA\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE69D\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uED6F\u0000\uE066\u0000"+
+            "\u0000\u0000\uF0A8\u0000\u0000\u0000\uE8FE\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF652\u0000\u0000\uF2BB\u0000\u0000\u0000"+
+            "\u0000\uE59F\u0000\u0000\uEB58\u0000\u0000\u0000"+
+            "\uEF49\u0000\uF2A6\u0000\u0000\u0000\u0000\u0000"+
+            "\uE1A4\u0000\u0000\uE596\uE8A1\uE8DC\uE8DD\u0000"+
+            "\u0000\u0000\u0000\u0000\uF26C\u0000\uE0CB\uF965"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE27B\u0000"+
+            "\uE1C1\u0000\u0000\uF8D3\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF7AB\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF5D4\u0000\u0000\u0000\u0000\uE7A9"+
+            "\u0000\u0000\uEFDD\uE8CD\u0000\u0000\uE9CE\u0000"+
+            "\uEEC3\u0000\uF15C\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF7EC\u0000\u0000\u0000\uE0CC\u0000"+
+            "\u0000\u0000\u0000\uEB9E\uE538\u0000\uF1D3\uE791"+
+            "\u0000\uF467\u0000\uE09A\uE891\u0000\u0000\uE664"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE7CD\u0000"+
+            "\u0000\u0000\uE77E\u0000\uF451\u0000\u0000\u0000"+
+            "\uEAD3\u0000\u0000\u0000\uE892\u0000\uEC7A\u0000"+
+            "\u0000\uEB9F\u0000\u0000\uE79A\u0000\u0000\u0000"+
+            "\uF6AF\uE846\u0000\uE067\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF468\u0000"+
+            "\uE79B\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF86F\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE2EF"+
+            "\uE7C2\u0000\uF362\u0000\uED61\u0000\u0000\u0000"+
+            "\uF4B7\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF870\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF2EC\u0000\u0000\u0000\u0000"+
+            "\u0000\uEC42\u0000\uE54D\u0000\u0000\uE7CE\u0000"+
+            "\u0000\u0000\u0000\uF572\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE539\u0000\u0000\u0000\u0000\uE1C2\uEEDA"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF469\u0000\u0000\u0000\u0000"+
+            "\u0000\uE7AA\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE74E\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uE93D\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uEC7B\uE69E\u0000\u0000"+
+            "\uE09B\u0000\u0000\uE56A\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF567\uE131\u0000\u0000\uE2BA"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF5B8"+
+            "\u0000\u0000\u0000\uE7C3\uE378\u0000\u0000\u0000"+
+            "\u0000\u0000\uECC5\uF0F8\u0000\uF441\u0000\u0000"+
+            "\u0000\uE2BB\u0000\u0000\u0000\uE4AD\uEF71\uE27C"+
+            "\u0000\u0000\u0000\uEB44\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uEA73\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE9F7\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF442\uF4F6\uF66B"+
+            "\u0000\u0000\u0000\u0000\uE6FE\u0000\u0000\u0000"+
+            "\u0000\u0000\uF76F\u0000\uF6F2\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uE339\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEE6A"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF5A6\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE6BC\uE173\u0000\u0000\uEE6B"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uE9DD\u0000\u0000\u0000"+
+            "\u0000\uE3B3\u0000\u0000\u0000\u0000\u0000\uF2ED"+
+            "\u0000\u0000\u0000\u0000\uE66E\uED96\uEBEF\u0000"+
+            "\u0000\uE9F8\u0000\u0000\u0000\u0000\u0000\uEF5F"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE075\u0000\u0000\u0000\uE931"+
+            "\u0000\uEB45\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF93C\uF93D\uE737\u0000\u0000\u0000"+
+            "\u0000\uF1B8\u0000\u0000\u0000\uE8B6\u0000\u0000"+
+            "\u0000\u0000\uE692\uF4AF\u0000\u0000\uE1A5\u0000"+
+            "\uE893\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE738\u0000\u0000\u0000\uE174\u0000\u0000\uE3B4"+
+            "\u0000\u0000\u0000\u0000\u0000\uE068\u0000\u0000"+
+            "\u0000\u0000\u0000\uE894\u0000\u0000\u0000\u0000"+
+            "\u0000\uF5A7\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF5A8\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uEE36\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE5EC\uE5F8\uE895\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uECC6\u0000\u0000\u0000\uEA74\u0000"+
+            "\uEA75\uE3B5\u0000\u0000\u0000\u0000\u0000\uE3B6"+
+            "\uE3B7\uF443\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uEFDE\u0000\u0000\u0000\u0000\u0000\uF363\uF444"+
+            "\u0000\u0000\uF364\uE0E4\uF8D4\uF5E6\uECEA\u0000"+
+            "\uEA76\u0000\u0000\u0000\u0000\uEAD4\u0000\u0000"+
+            "\uF79B\u0000\u0000\u0000\u0000\uF33E\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE3B8\u0000\u0000\u0000\u0000\uE66F"+
+            "\u0000\uE367\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF931\uF2EE\uE968"+
+            "\u0000\uEFDF\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uEDDD\uF9FB"+
+            "\u0000\u0000\uEB59\u0000\u0000\u0000\uE659\u0000"+
+            "\u0000\uE53A\u0000\uEDCC\u0000\u0000\u0000\u0000"+
+            "\u0000\uEFE0\u0000\u0000\u0000\uE368\uF932\uE54E"+
+            "\uEC43\uEA77\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE94C\uE446\uF5D5\u0000\u0000\u0000\u0000"+
+            "\u0000\uE231\uF5A9\u0000\u0000\uE9F9\u0000\u0000"+
+            "\uE9FA\u0000\u0000\u0000\u0000\u0000\u0000\uF365"+
+            "\u0000\u0000\u0000\u0000\uF66F\u0000\uF46A\uED7B"+
+            "\u0000\uF493\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF149\u0000\u0000\u0000\u0000"+
+            "\uF9FC\u0000\u0000\u0000\u0000\uEBAA\u0000\u0000"+
+            "\uE069\u0000\u0000\uF2EF\u0000\uF5AA\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uF19B\u0000\u0000\uF73D"+
+            "\u0000\uF452\uF653\u0000\uE6D2\u0000\u0000\uF7A2"+
+            "\uF366\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF39C\u0000"+
+            "\u0000\uF670\u0000\u0000\u0000\u0000\uEFF3\uF453"+
+            "\u0000\u0000\u0000\uE53B\uE043\uE1A6\u0000\uE1C3"+
+            "\uE1DA\u0000\u0000\u0000\u0000\u0000\uE7CF\u0000"+
+            "\u0000\uF654\u0000\u0000\u0000\uF26D\uEEC4\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEC44"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uEAE2\uEEDB\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uEF41\u0000\uF93E\u0000\u0000\u0000\u0000"+
+            "\uEDCD\u0000\u0000\u0000\uF87B\u0000\uE2BC\u0000"+
+            "\u0000\uE2E2\uE1F6\u0000\u0000\uF2F0\u0000\uF54E"+
+            "\u0000\uE55D\u0000\u0000\uF4B8\u0000\u0000\u0000"+
+            "\uEFA1\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF494\uF4EB\u0000\uF367\u0000\u0000"+
+            "\uE2D7\u0000\u0000\u0000\u0000\u0000\u0000\uE2DF"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uEF50\uEF51\u0000\u0000\u0000\uE2E3\uEFA2"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE33A\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uF4C1\uE33B\u0000\uE574"+
+            "\u0000\u0000\uF2BC\uE731\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE7DF"+
+            "\u0000\uF4D7\u0000\u0000\u0000\uE94D\u0000\uE175"+
+            "\uF1F1\u0000\u0000\uF3E2\u0000\uE56B\u0000\u0000"+
+            "\u0000\u0000\uEC45\u0000\u0000\uE076\u0000\uE4AE"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE176\u0000"+
+            "\u0000\uF3D3\uF5E7\u0000\u0000\u0000\u0000\uE06A"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF8EE"+
+            "\u0000\uEBC5\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uEAE9\u0000\uF26E\u0000\u0000\uF6C2\u0000"+
+            "\uE732\u0000\u0000\u0000\u0000\u0000\uE9AC\u0000"+
+            "\u0000\u0000\u0000\u0000\uF33F\uE64D\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uEBAB\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF7B6\u0000"+
+            "\u0000\uE597\u0000\uE359\uF2A7\uEC7C\u0000\uE8EA"+
+            "\uE25C\uF5E8\uF6D5\u0000\uE4CD\u0000\uF4FE\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE345\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uEBA0\u0000\uEAFB\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uEE6D\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uEF34\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE0CD"+
+            "\u0000\u0000\u0000\uF2A8\u0000\u0000\u0000\uF244"+
+            "\u0000\u0000\u0000\u0000\uE868\uE3B9\u0000\uEAA9"+
+            "\u0000\u0000\uF4B0\u0000\u0000\uE154\u0000\u0000"+
+            "\u0000\uE247\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF2A9\u0000\u0000"+
+            "\u0000\uEAD5\u0000\u0000\uF1D7\u0000\u0000\u0000"+
+            "\uF256\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF2BD\uF966\u0000\u0000\uE8F4\u0000\uF2AA\uF749"+
+            "\u0000\uF5E9\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uECD9\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uEBC6\u0000\u0000\u0000\uE54F\u0000\u0000\u0000"+
+            "\u0000\uEA78\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF37A"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF4C2\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE4AF\u0000"+
+            "\u0000\uE06B\u0000\u0000\u0000\u0000\u0000\uF967"+
+            "\u0000\u0000\uF1D8\uEBC7\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF568\uE643\uE9AD"+
+            "\u0000\u0000\u0000\uE5BE\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uF3C3\uF26F\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE67B\u0000\u0000\u0000\uF569\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uE6E6\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE847\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE9FB\u0000\u0000\u0000\u0000"+
+            "\u0000\uE9CF\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE733\u0000\u0000\uE869\u0000\uF368"+
+            "\uF2C4\u0000\u0000\u0000\u0000\u0000\u0000\uEBD8"+
+            "\u0000\u0000\u0000\u0000\u0000\uF3D4\u0000\uF1F2"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE5DB\u0000"+
+            "\u0000\uE5DC\uF4C4\uE0D7\u0000\u0000\u0000\u0000"+
+            "\u0000\uEC46\u0000\u0000\u0000\u0000\uF2F1\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF8D5\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE4D8\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE9D0\uF369"+
+            "\uE0B3\u0000\u0000\u0000\u0000\u0000\u0000\uE5DD"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE1A7\u0000\u0000\uE33C\u0000";
+
+        private final static String innerIndex4=
+            "\uE3BA\u0000\uF3C4\u0000\uEDB3\uF8F5\uEFE1\uF9E0"+
+            "\uF94C\u0000\uE832\uE833\u0000\uE431\u0000\u0000"+
+            "\uE491\u0000\u0000\u0000\uEC7D\u0000\u0000\uEA79"+
+            "\uE26C\uF445\uE374\uE9D1\u0000\u0000\u0000\u0000"+
+            "\uEBC8\uE8B7\uEAE3\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF1B9\uF3C5\u0000\uF4CF\uE6AB"+
+            "\uEBAC\u0000\u0000\uECEB\u0000\uF257\u0000\u0000"+
+            "\u0000\uEBC9\uE09C\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF39D\uF871\uF36A\uE177\uE896\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE14F\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE27D\u0000"+
+            "\u0000\uE5A9\uF872\u0000\u0000\u0000\uE375\u0000"+
+            "\uF0D6\u0000\uF16F\u0000\u0000\u0000\uEAFC\u0000"+
+            "\u0000\uF6D6\uEA7A\uE0B4\u0000\u0000\uF2BE\u0000"+
+            "\u0000\uE145\u0000\u0000\u0000\u0000\u0000\uE2BD"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF2F2\uEC47"+
+            "\u0000\u0000\u0000\uE178\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uF39E\u0000\u0000\u0000"+
+            "\uE670\u0000\uF3C6\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uEC48\uF0AB\u0000\u0000"+
+            "\u0000\uE0B5\uE761\u0000\uF55E\uF4F7\u0000\u0000"+
+            "\uE6C6\u0000\uE3BB\uF6AA\u0000\uF1CA\uE6D3\uE79C"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF655"+
+            "\u0000\u0000\uE3CC\uE9FC\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uEAFD\u0000"+
+            "\uF7E5\u0000\uEB5A\u0000\u0000\uF49F\uE4B0\u0000"+
+            "\uF595\uE859\u0000\uEE6E\u0000\u0000\u0000\u0000"+
+            "\uF74A\uEF60\u0000\u0000\uE79D\u0000\u0000\uF065"+
+            "\u0000\u0000\u0000\u0000\uE633\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF656\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF46B\uED9E\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uEF42\u0000\u0000"+
+            "\u0000\u0000\u0000\uE86A\u0000\uF46C\uF8D6\uEFB2"+
+            "\u0000\uF23D\u0000\uF873\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE97E\u0000\u0000\uF5EA\uEE70"+
+            "\u0000\uF39F\u0000\u0000\u0000\u0000\u0000\uE6AC"+
+            "\u0000\u0000\u0000\u0000\u0000\uF5C5\uF270\u0000"+
+            "\u0000\uE8E5\u0000\uE9DE\u0000\u0000\uE7F0\uEFA3"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF3F9\u0000\uF454\uEB5B\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uEFA4\u0000"+
+            "\u0000\uEC49\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uECB1\uF97B\uE1A8\u0000\uE146\u0000\u0000"+
+            "\uF36B\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uEE4A\u0000\u0000\uE1A9\u0000\u0000\u0000"+
+            "\u0000\u0000\uF4C3\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uEBD9\u0000\u0000\uF2AB"+
+            "\u0000\u0000\u0000\uEEC5\u0000\u0000\uEB79\u0000"+
+            "\uF4C5\u0000\u0000\uE550\uE5BF\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE9AE\u0000"+
+            "\uF7FC\u0000\uE150\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uEDA2\u0000\u0000\u0000"+
+            "\uE248\u0000\u0000\u0000\uE762\uF7D6\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF3AA\uE261\u0000\u0000\uF657\u0000"+
+            "\uE8EB\u0000\uEAFE\u0000\u0000\uE771\u0000\uF6F3"+
+            "\u0000\uE6E7\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uE5A0\u0000\u0000"+
+            "\uE3BC\u0000\uEDCF\u0000\uE0B6\u0000\uE848\u0000"+
+            "\u0000\u0000\u0000\u0000\uE1C4\u0000\u0000\u0000"+
+            "\u0000\u0000\uE64E\u0000\u0000\u0000\uEC4A\u0000"+
+            "\u0000\u0000\u0000\u0000\uE2D8\u0000\u0000\u0000"+
+            "\uEB5C\uF0F9\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF9FD\u0000\u0000\u0000\u0000\u0000"+
+            "\uE6E8\uE0D8\u0000\u0000\u0000\uEFE2\u0000\u0000"+
+            "\u0000\uEF4A\u0000\u0000\u0000\uECC7\u0000\u0000"+
+            "\u0000\u0000\uF15D\u0000\uF15E\u0000\uE64F\u0000"+
+            "\u0000\u0000\uECA7\u0000\uEAD6\uF9E8\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF271"+
+            "\uF638\uE9FD\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF74B\u0000\uEF61\u0000\u0000\u0000\u0000"+
+            "\uF7D7\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE27E\u0000\u0000\uF15F\u0000\u0000\u0000"+
+            "\uEFA5\uE665\u0000\uE1C5\u0000\uF1BA\uE3BD\u0000"+
+            "\u0000\uE2BE\u0000\u0000\uF14B\u0000\u0000\u0000"+
+            "\uE441\u0000\u0000\u0000\u0000\uE179\u0000\uE7C4"+
+            "\uEFFC\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uE3BE\u0000\u0000"+
+            "\u0000\u0000\u0000\uF14C\u0000\u0000\uEDAD\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF6B0\u0000\uE17A"+
+            "\u0000\u0000\u0000\uE4C4\u0000\u0000\uE650\u0000"+
+            "\u0000\u0000\uE69F\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uEBA1\u0000"+
+            "\uEA4D\u0000\uF639\u0000\u0000\u0000\uE834\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE634"+
+            "\uF5C6\u0000\uEBA2\uEFC6\u0000\u0000\u0000\uF455"+
+            "\u0000\u0000\u0000\u0000\u0000\uF579\uE67C\uF0D3"+
+            "\u0000\u0000\u0000\u0000\uF14D\uEC6C\uEA7B\uF36C"+
+            "\u0000\uF0BF\u0000\uE6CE\uE3BF\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF5AB\u0000"+
+            "\u0000\u0000\u0000\uF7FD\u0000\uE06C\u0000\u0000"+
+            "\u0000\uE1C6\uF446\u0000\u0000\uE9FE\u0000\u0000"+
+            "\u0000\uE147\uE8B8\u0000\u0000\u0000\u0000\uE379"+
+            "\u0000\uE26D\uF0C0\u0000\uF9A2\u0000\u0000\u0000"+
+            "\u0000\u0000\uF75B\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF066\uF3B0\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uE8CE\u0000\uF6C3\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE8CF\uE0A4\u0000\u0000\uF770\u0000"+
+            "\u0000\uF8D7\u0000\u0000\uF0CA\uEB31\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE25D\u0000\u0000\uE56C\u0000\u0000\u0000"+
+            "\uF9D8\u0000\u0000\u0000\u0000\uE498\u0000\u0000"+
+            "\u0000\u0000\uF447\u0000\u0000\uF898\uF63A\uF899"+
+            "\uE776\u0000\uF541\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uEF62\u0000\uE055\uE17B\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uEC7E\u0000\u0000\u0000\u0000"+
+            "\u0000\uEC4B\u0000\uF6AD\u0000\u0000\u0000\uF771"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF4EC\u0000\u0000\u0000\u0000\uEA31\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uED9F\u0000\u0000\uECEC\u0000"+
+            "\uE9AF\uE9B0\u0000\u0000\uE0B7\uEF63\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uEBA3\uE470\u0000"+
+            "\u0000\u0000\u0000\uF3A0\u0000\u0000\u0000\u0000"+
+            "\uEFA6\uE0F2\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF1F3\uE969\uEB5D\u0000\u0000\u0000\u0000\uF6DA"+
+            "\uE8B9\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE13E\u0000\uE86B\u0000\u0000\u0000\u0000\uE1C7"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE9B1\u0000\uE73F\uECA3\u0000\u0000"+
+            "\uE291\u0000\u0000\uF495\u0000\u0000\u0000\u0000"+
+            "\uF743\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uEB5E\u0000\uF5FD\u0000\u0000"+
+            "\u0000\u0000\uF0EC\u0000\u0000\uE4C5\uF97C\uE46B"+
+            "\uE57B\u0000\uEA32\u0000\u0000\u0000\uEDE6\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF340\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE5C4\u0000\u0000\u0000\u0000\u0000\u0000\uF1F4"+
+            "\u0000\u0000\u0000\uECED\u0000\uEF52\u0000\uF1F5"+
+            "\uE6FC\u0000\uF1BB\u0000\u0000\uF63B\u0000\u0000"+
+            "\u0000\u0000\u0000\uF448\uF658\u0000\u0000\u0000"+
+            "\u0000\u0000\uE4E6\uF46D\uE2BF\u0000\uF0AC\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uE2C0\u0000\uEE38"+
+            "\uF9E9\u0000\uE2C1\u0000\uEB6F\uEA7C\u0000\u0000"+
+            "\u0000\u0000\uEB32\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF54F\uEC91\u0000\uE7F1\uF3C7"+
+            "\u0000\uE0B8\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF7FE\uE8BA\uE897\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF67C\uE86C\uF874"+
+            "\u0000\uEB5F\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE9B2\u0000\u0000\u0000\u0000\uEE39\u0000\uF2F3"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF4ED\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uF0FA\u0000\uF7E6\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE06D\uE5DE"+
+            "\u0000\uE06E\uEAE4\u0000\u0000\u0000\uEE9F\u0000"+
+            "\uF5AC\u0000\u0000\u0000\u0000\u0000\uED97\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uEFE3\u0000\uF1CB\uE2E4\u0000"+
+            "\u0000\u0000\uE763\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE9B3\uE57C\u0000\u0000\uF449\u0000\uEAB7"+
+            "\u0000\u0000\u0000\u0000\u0000\uE0CE\uF8D8\u0000"+
+            "\u0000\uE369\u0000\u0000\uE9D2\uF6F4\uEEDC\uED35"+
+            "\u0000\uF933\u0000\uE8BB\u0000\u0000\u0000\uF44A"+
+            "\uEFFD\uE35A\u0000\uF5D6\uE7C5\uED44\u0000\uF1A7"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF04D\uEEA0\u0000\uF6C4\uF5AD\u0000\uE7E0"+
+            "\u0000\u0000\u0000\uE044\u0000\u0000\uF772\uE2C2"+
+            "\u0000\uF14E\u0000\u0000\u0000\uEDB4\uE1C8\uF258"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uEEC8\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uE1C9\uF7B7\u0000"+
+            "\u0000\uF3E8\uE7F2\uE8F5\uE045\uE7C6\u0000\u0000"+
+            "\u0000\uE759\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE7AB"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF1BC\u0000\u0000\uE764\u0000\u0000\u0000\uE96A"+
+            "\u0000\uEC4C\u0000\u0000\uF97D\uF170\uE4A0\u0000"+
+            "\uEFC7\uEE3A\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uEC92\u0000\u0000\u0000\u0000\u0000\u0000\uF84B"+
+            "\u0000\uF5AE\uF8AA\u0000\u0000\u0000\u0000\uF19D"+
+            "\u0000\uF14F\uF968\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE575\u0000\u0000\u0000\uF7C3"+
+            "\u0000\u0000\u0000\uF272\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE6E9\uF1F6\u0000\u0000\u0000\uEA7D\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE17C\u0000"+
+            "\uECEE\u0000\u0000\u0000\u0000\u0000\uEF64\u0000"+
+            "\u0000\u0000\uF89A\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE9B4\uED45\uE740\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uE765\u0000\u0000"+
+            "\u0000\uF57A\u0000\u0000\u0000\uE249\u0000\u0000"+
+            "\u0000\uE671\uE2D2\u0000\uE346\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE232\u0000\u0000\uF4EE\u0000"+
+            "\u0000\u0000\u0000\u0000\uF4F8\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE95C\u0000\uE35B\u0000\u0000\u0000\uF934"+
+            "\uE1CA\uE6D4\uEA33\u0000\uED70\u0000\u0000\u0000"+
+            "\u0000\uF259\u0000\u0000\u0000\uEC6D\u0000\u0000"+
+            "\u0000\u0000\u0000\uF5FE\uE53C\u0000\u0000\u0000"+
+            "\u0000\u0000\uE5D1\u0000\uE792\uF753\uF067\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF5D7\u0000\u0000\uE74F\u0000\u0000\u0000"+
+            "\u0000\uF9C0\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF0AD\u0000\u0000\u0000\u0000\uE5AA\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uEEA8\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF25A"+
+            "\u0000\u0000\u0000\uE077\u0000\u0000\u0000\u0000"+
+            "\u0000\uF773\u0000\uE56D\u0000\u0000\uF068\u0000"+
+            "\u0000\u0000\u0000\uF8D9\uF1F7\u0000\u0000\uEDB5"+
+            "\u0000\u0000\u0000\u0000\u0000\uE33D\u0000\u0000"+
+            "\u0000\u0000\uF3F1\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uEC4D\u0000\u0000\u0000\uECC8\u0000\u0000\u0000"+
+            "\u0000\uE7D5\u0000\u0000\uEAAA\u0000\u0000\u0000"+
+            "\u0000\uE8BC\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF774\u0000\u0000\u0000\u0000\u0000"+
+            "\uF3FA\u0000\u0000\uEDB6\uF4EF\u0000\u0000\uF8DA"+
+            "\uEBE0\u0000\uE7AC\u0000\uF5EB\u0000\uEB46\u0000"+
+            "\u0000\uEFC8\u0000\uE0CF\u0000\uECC9\u0000\u0000"+
+            "\u0000\uEA7E\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uEC4E\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uE991\u0000\uE635\u0000"+
+            "\u0000\u0000\u0000\u0000\uEC93\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uE6A0\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE7A1\u0000\uE750\uE96B\u0000\u0000\uF1BD"+
+            "\uEAB8\u0000\uF035\u0000\u0000\u0000\uE6AD\u0000"+
+            "\u0000\uF4F9\u0000\uF1F8\u0000\uF5C7\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uEBCA\uF0E3\u0000\uF46E"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF75C\u0000\uF069"+
+            "\u0000\uE4C6\u0000\uE8E6\u0000\u0000\u0000\u0000"+
+            "\u0000\uF5AF\u0000\u0000\u0000\u0000\uE292\u0000"+
+            "\u0000\u0000\u0000\uEFFE\u0000\u0000\u0000\u0000"+
+            "\u0000\uF8B6\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uEC94\u0000\u0000\u0000\u0000"+
+            "\uE2F2\uF6B9\uE7F3\u0000\u0000\uEBCB\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uE86D\u0000\u0000\uE849"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF0FB"+
+            "\u0000\uE0B9\u0000\u0000\uF1F9\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uEB70\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF550\u0000"+
+            "\uF9BC\uEAB1\uECEF\u0000\u0000\u0000\u0000\uEB33"+
+            "\uF9B9\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF341\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE1CB\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF1BE\u0000\u0000\u0000\uE5C0\uECF0\uF1FA"+
+            "\u0000\u0000\u0000\u0000\u0000\uEFE4\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uE5ED\uEEDD\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uE598\uEDB7\u0000\u0000"+
+            "\u0000\uE8E7\uEC4F\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF25B"+
+            "\u0000\u0000\uE6F4\uF36D\u0000\u0000\u0000\uE23B"+
+            "\u0000\u0000\uEEDE\u0000\u0000\u0000\uE666\uEBCC"+
+            "\u0000\u0000\uEF43\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uEDEE\uE932"+
+            "\u0000\u0000\uEB60\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uE5B5\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE5A1"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF8DB\u0000"+
+            "\uF7CB\u0000\u0000\u0000\uE0F3\uF535\u0000\u0000"+
+            "\u0000\u0000\u0000\uF858\uE667\u0000\uEFE5\uF8DC"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF9D0"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF8F6\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE835\u0000\uE8BD\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF172\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE1F7\uF36E\u0000\u0000\u0000"+
+            "\u0000\uF659\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEA91"+
+            "\u0000\u0000\u0000\uE4B1\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uF97E\u0000\u0000\u0000"+
+            "\u0000\uEF53\u0000\uF3C8\u0000\u0000\u0000\uE293"+
+            "\u0000\u0000\u0000\u0000\uF7ED\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF496\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uED46\u0000"+
+            "\uF5B9\u0000\uE992\uECF1\u0000\u0000\u0000\u0000"+
+            "\uEF35\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF44B\u0000\uEA34\u0000\uE85C\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE079\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uECDA\u0000\uF969"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF06A"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF7C4\u0000"+
+            "\uECA4\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uF8DD\u0000\uF2CA\u0000"+
+            "\uEF54\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE5CC\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF0D7\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE7AD"+
+            "\u0000\u0000\uF8AB\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE4D9\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE5A2\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uF66E\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE898\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uEB61\u0000\u0000\uEFA8"+
+            "\u0000\u0000\uF5F9\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF83F\u0000\uF0FC\u0000\u0000\uEB7A\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uECB2\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE5C5"+
+            "\u0000\u0000\uF3E3\uE5EE\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE1CC\u0000\u0000\u0000\u0000\uF1D9\u0000"+
+            "\u0000\u0000\u0000\uE751\u0000\u0000\u0000\u0000"+
+            "\uF87C\u0000\u0000\u0000\u0000\u0000\uF3EB\u0000"+
+            "\u0000\u0000\u0000\u0000\uF84C\uEE72\u0000\u0000"+
+            "\u0000\u0000\uF875\uEC9C\u0000\u0000\u0000\uE046"+
+            "\u0000\uED47\u0000\uF06B\u0000\uF5FA\u0000\u0000"+
+            "\u0000\uF8AC\uE2C3\uF0FD\u0000\u0000\u0000\u0000"+
+            "\uF79C\u0000\u0000\uEAB9\u0000\u0000\u0000\u0000"+
+            "\uEBF1\u0000\uE434\u0000\u0000\u0000\u0000\uF5FB"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE36A\uE36B"+
+            "\u0000\uF04E\uE7B1\u0000\u0000\u0000\u0000\u0000"+
+            "\uE047\u0000\u0000\uE4E7\u0000\uF775\u0000\u0000"+
+            "\u0000\u0000\uE4B2\u0000\u0000\u0000\uEC50\uF46F"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE1E5\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF7AC\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uE1CD\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF23E\uE63E\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE6EA"+
+            "\u0000\u0000\u0000\u0000\uEEE0\uF0AE\u0000\u0000"+
+            "\u0000\uE2D9\u0000\u0000\uE95D\uF1FB\u0000\uEA92"+
+            "\u0000\uE6EB\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uEA35\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uEAD7\uE8D0\uE8D1\u0000\u0000"+
+            "\uE5A3\u0000\u0000\u0000\u0000\uF342\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE96C"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE078\u0000\uF776\uE95E\u0000\u0000\u0000\u0000"+
+            "\uF06C\uE8D2\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uEFB3\u0000\u0000"+
+            "\u0000\u0000\uF6DB\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uECA8\u0000"+
+            "\uE6AE\u0000\u0000\uEB71\u0000\u0000\u0000\u0000"+
+            "\u0000\uE0BA\u0000\u0000\uEDD1\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE36C"+
+            "\u0000\u0000\u0000\u0000\uE5C1\u0000\u0000\u0000"+
+            "\u0000\u0000\uE75A\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uECA9\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEB34"+
+            "\u0000\uEFA9\u0000\uE4C7\u0000\u0000\uE96D\uF73E"+
+            "\u0000\u0000\u0000\uE148\u0000\u0000\u0000\uE33E"+
+            "\u0000\u0000\u0000\uE794\u0000\u0000\uECCA\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE13F\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE53D\uF661\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE35C\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE056\u0000\u0000\uE5C2\u0000\u0000"+
+            "\uE24A\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE057\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF840\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uEAD8\u0000\u0000\u0000"+
+            "\uF5BA\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uEDEB\u0000\uF2F4\uE9B5\u0000\u0000\u0000\u0000"+
+            "\uE1AA\u0000\uECF2\u0000\uF8F7\u0000\uF6D0\u0000"+
+            "\u0000\u0000\u0000\uF9BA\u0000\u0000\uF9E1\uF6A0"+
+            "\uE3C0\u0000\u0000\uEF55\u0000\uED48\u0000\uEBE8"+
+            "\u0000\u0000\u0000\uE151\u0000\uE47D\u0000\u0000"+
+            "\u0000\u0000\uE8BE\u0000\u0000\uEB72\u0000\u0000"+
+            "\u0000\uF859\u0000\u0000\uEBCD\u0000\uE048\u0000"+
+            "\u0000\u0000\uF470\uF3C9\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uEA93\u0000\u0000\u0000\uF36F\uF754\u0000\u0000"+
+            "\u0000\u0000\u0000\uF25C\u0000\u0000\uEA94\u0000"+
+            "\uEEC9\u0000\uEC95\uEEE1\u0000\u0000\uECCB\u0000"+
+            "\u0000\uECCC\u0000\u0000\u0000\uE2F8\uF2AC\u0000"+
+            "\uF9FE\uF935\uF841\uEAD9\u0000\uEB62\u0000\u0000"+
+            "\u0000\uF56A\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF3CA\u0000\uE233"+
+            "\u0000\u0000\u0000\u0000\uF44C\uF173\u0000\u0000"+
+            "\u0000\u0000\u0000\uEB35\u0000\uF6AB\u0000\u0000"+
+            "\uF0AF\u0000\u0000\u0000\u0000\u0000\uEDDE\u0000"+
+            "\uEBA4\uE1AB\u0000\uE7F4\uEF36\uE1CE\uEBE9\u0000"+
+            "\uF991\u0000\uEB73\u0000\u0000\u0000\u0000\u0000"+
+            "\uEC51\u0000\uE234\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uEA36\u0000\u0000\uF0FE\u0000\uF0DD\uF370"+
+            "\u0000\u0000\uF56B\u0000\uEC96\u0000\u0000\uE4C8"+
+            "\u0000\u0000\u0000\uF57B\u0000\uF245\u0000\uF5D8"+
+            "\u0000\u0000\uE5DF\u0000\u0000\u0000\uE675\u0000"+
+            "\u0000\u0000\u0000\uF0B0\uF573\u0000\u0000\u0000"+
+            "\u0000\uECCD\u0000\u0000\u0000\u0000\uF596\uF842"+
+            "\u0000\u0000\uF2F5\uE06F\u0000\uF0B1\uF1BF\u0000"+
+            "\u0000\uF9C9\u0000\u0000\u0000\u0000\uED36\uF7A4"+
+            "\uF343\u0000\uEDEC\u0000\u0000\u0000\uE3E7\u0000"+
+            "\uE7C7\uED67\uF06D\u0000\uE599\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE84A\u0000"+
+            "\uE85D\u0000\u0000\u0000\uF7CC\u0000\uEBDA\uE8BF"+
+            "\u0000\uE155\uF160\uE0BB\u0000\uEA95\u0000\u0000"+
+            "\uEFAA\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE7C8\u0000\u0000\uF273\uE6BD\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE2C4\u0000\u0000\u0000\u0000"+
+            "\u0000\uE35D\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF936\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF3FB\u0000\u0000\u0000\u0000\uF9D2\uE3C1"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uECDB\u0000\uE4C9\u0000\uE95F\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE17D\u0000"+
+            "\u0000\u0000\u0000\u0000\uEA37\u0000\u0000\uEE4B"+
+            "\uF131\u0000\u0000\u0000\uE149\u0000\u0000\uF8DE"+
+            "\u0000\u0000\u0000\u0000\u0000\uEEE2\u0000\u0000"+
+            "\uE551\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE938\u0000\u0000\u0000\u0000\u0000"+
+            "\uEC52\u0000\uF4D8\uEDD3\u0000\u0000\uF4D9\u0000"+
+            "\u0000\u0000\uF4C6\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE1DB"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE1AC"+
+            "\u0000\uF953\u0000\u0000\u0000\u0000\uE577\u0000"+
+            "\uE3C2\u0000\uF7A5\u0000\uEF65\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uECCE\u0000\u0000"+
+            "\u0000\u0000\uE55A\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uEADA\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF8DF\uEEE3\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF79D\uECCF\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF5B0\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE777\u0000\uE7C9\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF73F\uF2F6\u0000"+
+            "\uE9B6\uF23F\uE1F8\u0000\u0000\u0000\u0000\uEA48"+
+            "\uF937\uF6FC\uF6B1\uE24B\uF531\u0000\u0000\uF25D"+
+            "\uEBAE\u0000\u0000\uF153\uE2FE\u0000\uF74F\uE772"+
+            "\uE4E8\u0000\u0000\uEA38\uF574\uF152\u0000\uE7F5"+
+            "\uF7C5\uE9D3\uE693\uF19E\uF992\u0000\u0000\uF1C0"+
+            "\uE049\u0000\uF274\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF471\u0000\uEA49\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE694\u0000\uEA96\u0000\uEADB\u0000"+
+            "\uE8D3\u0000\uF877\uE773\uF551\u0000\uE9B7\u0000"+
+            "\u0000\u0000\uF497\u0000\u0000\uE53E\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uE695\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE9B8\uE2C5\uEADF\u0000\u0000";
+
+        private final static String innerIndex5=
+            "\u0000\u0000\u0000\u0000\uF44E\uF631\u0000\uF0CB"+
+            "\uF3FC\u0000\uF4C7\u0000\u0000\uEB7B\u0000\u0000"+
+            "\u0000\u0000\u0000\uF1FC\u0000\u0000\uEBDB\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uF275\u0000\uEA97\u0000"+
+            "\u0000\u0000\u0000\uF863\u0000\u0000\u0000\u0000"+
+            "\uF3CB\u0000\u0000\uE33F\uE9B9\u0000\u0000\uE3C3"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF5B1\u0000\u0000"+
+            "\u0000\u0000\uF056\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF371\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF63C\u0000\u0000\u0000\u0000"+
+            "\uF5D9\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF37B\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE9BA\u0000\u0000\u0000\uF44F\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF6C5\u0000"+
+            "\u0000\u0000\u0000\uE8A2\uF498\u0000\u0000\uE04A"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF6F5\u0000\uE0E5\u0000\u0000"+
+            "\u0000\uF276\u0000\uEB63\u0000\u0000\u0000\u0000"+
+            "\uE235\u0000\u0000\u0000\u0000\u0000\u0000\uE668"+
+            "\u0000\u0000\u0000\uE53F\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uEFC9\u0000\u0000\u0000\u0000\uE4CE"+
+            "\uF552\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE0E6\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF3A1\u0000\u0000\u0000\u0000\u0000"+
+            "\uF0B2\u0000\u0000\u0000\u0000\uF3A2\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF0B3\u0000\uF344\u0000\u0000\uE0F4"+
+            "\uE540\uF4B2\uF8B7\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF5EC\u0000\u0000\u0000\u0000\u0000\uF277"+
+            "\uF542\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uF5ED\u0000\uE2F3\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF372\u0000\u0000\u0000\u0000\u0000\uF25E"+
+            "\u0000\u0000\uF3CC\u0000\u0000\uEDB8\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE6F5\uECF3\uE2E5\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE2C6\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF4B3\uED68\uE2F9\uE2DA\u0000\u0000"+
+            "\u0000\u0000\uF85D\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEE73"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF472\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF5EE\u0000\u0000\uE04B\u0000\u0000\uECDC\u0000"+
+            "\u0000\u0000\u0000\uE294\u0000\uE669\u0000\u0000"+
+            "\u0000\uF240\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF575\uE752\uE960\uE17E\u0000\u0000"+
+            "\u0000\u0000\u0000\uE5E0\uF65A\uF9CA\uE766\uF55F"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE636\uE94E"+
+            "\u0000\uE8D4\uE6C7\u0000\u0000\u0000\u0000\uF4A0"+
+            "\u0000\u0000\u0000\uF3CD\u0000\u0000\u0000\u0000"+
+            "\uEC53\uE96E\u0000\uE96F\u0000\u0000\uF2AD\uEE3B"+
+            "\u0000\u0000\u0000\u0000\uF7DD\uF04F\u0000\u0000"+
+            "\u0000\uF2AE\u0000\u0000\u0000\uF560\uE295\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uEE3C\u0000\uE26E"+
+            "\u0000\u0000\uE5F9\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uECF4\uE1D0\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE5B8\u0000\u0000\uF6FD\u0000"+
+            "\uE939\u0000\u0000\u0000\u0000\uEA98\u0000\uE93A"+
+            "\uF473\uEFB4\uE46C\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uEFE6\u0000\u0000\uECF6\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uEECA\u0000"+
+            "\u0000\uE35E\u0000\u0000\uE899\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE04C\u0000"+
+            "\u0000\u0000\uF278\uE86E\u0000\uF499\u0000\u0000"+
+            "\uEC9D\u0000\uE136\u0000\u0000\u0000\u0000\uE84B"+
+            "\u0000\uF279\u0000\u0000\u0000\uF5DA\u0000\u0000"+
+            "\uF6DC\uEBEA\uE251\uE541\u0000\uF9B1\uEE4D\u0000"+
+            "\uF8AD\u0000\u0000\uF777\u0000\uEBCE\u0000\uF6E2"+
+            "\uF5EF\uE2C7\u0000\u0000\uE542\uE191\u0000\uE578"+
+            "\u0000\uF25F\uF6D7\u0000\u0000\uEB36\uE651\uEBDC"+
+            "\uF373\uF3E4\uE993\uE637\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF597\u0000"+
+            "\u0000\uF3CE\uF474\u0000\u0000\uE340\u0000\u0000"+
+            "\uF191\u0000\u0000\u0000\uF7BA\u0000\uF0B5\u0000"+
+            "\u0000\uE57D\uEC54\u0000\u0000\u0000\u0000\uEFE7"+
+            "\u0000\u0000\uF0B4\uF031\u0000\uF74C\uE236\u0000"+
+            "\uF7C6\uF96A\u0000\uE543\uE4B9\uF06E\u0000\u0000"+
+            "\u0000\uEFAB\u0000\u0000\uEBE1\uE4CF\uF598\u0000"+
+            "\uF050\uEBCF\u0000\uE14A\u0000\u0000\u0000\u0000"+
+            "\u0000\uF27A\u0000\u0000\u0000\uF374\uF4B4\uE57E"+
+            "\u0000\u0000\uF450\u0000\u0000\uF3E5\u0000\uF553"+
+            "\uEB64\u0000\uF0B6\u0000\uE6A1\uE0E8\u0000\uF7AD"+
+            "\uEFAD\uE774\uF843\uEC55\uF94D\u0000\u0000\uF154"+
+            "\uE741\u0000\uE93B\u0000\u0000\u0000\u0000\uE5A4"+
+            "\u0000\uF0E9\u0000\u0000\u0000\uEF4B\u0000\u0000"+
+            "\u0000\uE767\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF8AE\uE3E1\u0000\u0000\uE8C0\u0000"+
+            "\uF5BE\u0000\uEA99\u0000\u0000\u0000\u0000\uE09D"+
+            "\uF6C6\uE2C8\u0000\u0000\u0000\uEBD0\u0000\u0000"+
+            "\uF260\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uEFF4\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE296\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE5CD\u0000"+
+            "\u0000\uE2DB\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE9BB\u0000\u0000\u0000\u0000\uE23C\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uEFE8\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uE544\u0000\u0000"+
+            "\u0000\u0000\uED57\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF5DB\u0000\u0000\uF851\u0000\u0000"+
+            "\u0000\uEA39\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE59A"+
+            "\u0000\u0000\u0000\u0000\u0000\uF2F7\u0000\u0000"+
+            "\u0000\u0000\uE4B3\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF0B7\uF2F8\uF5DC\uF1CC\uE8D5\uF3CF\u0000"+
+            "\u0000\u0000\uF3D0\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF5B2\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE7AE\uE5AC\u0000\uEC56\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF9A3\u0000\uF8E5"+
+            "\uEAAB\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEC97"+
+            "\u0000\uF63D\u0000\uF5B3\u0000\uF345\u0000\u0000"+
+            "\u0000\u0000\uEBA5\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uF5DD\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF132\uF1FD\u0000\uF5B4\uF8B8"+
+            "\u0000\uE8A3\u0000\u0000\uE65A\uE0D9\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uEDD4\u0000\u0000\u0000\u0000\u0000\u0000\uF4FA"+
+            "\u0000\uF0B8\u0000\uEB47\uE6EC\uF3EC\uEDAF\uE5E1"+
+            "\uE6ED\uE3D1\u0000\u0000\u0000\u0000\u0000\uEBF2"+
+            "\uF2F9\u0000\u0000\u0000\uE9BC\uF66C\u0000\u0000"+
+            "\u0000\u0000\u0000\uF375\u0000\u0000\u0000\uF554"+
+            "\u0000\u0000\uEFE9\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF4FB\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uE591\u0000\u0000"+
+            "\uE132\uF6FE\uEABC\u0000\u0000\u0000\u0000\uF0CD"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE347\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uE652\u0000\u0000\u0000"+
+            "\u0000\u0000\uEF3D\u0000\u0000\u0000\u0000\uF2AF"+
+            "\uE0A5\u0000\u0000\u0000\u0000\uE0E9\u0000\u0000"+
+            "\u0000\uF878\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE156"+
+            "\u0000\u0000\u0000\uEE77\u0000\u0000\uF057\u0000"+
+            "\u0000\u0000\uE8A4\u0000\uE2C9\uEC9E\uF2FA\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF0DE\u0000\u0000\uF5C8\u0000\uE56E\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uEB65\u0000\uF2B0\u0000\u0000\uEC57\u0000"+
+            "\uE7AF\u0000\u0000\u0000\uF7E7\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uEEE5\u0000\u0000\uE2CA\uEBD1"+
+            "\u0000\uEC58\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uF2FB\u0000\u0000\uF89B"+
+            "\u0000\u0000\uE994\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uEB37\u0000\u0000\u0000"+
+            "\u0000\u0000\uF778\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE0EA\u0000\u0000\u0000\uE0BC\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uE672\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF5DE\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF5DF\u0000\uF246\u0000\u0000\u0000\uEC98\uE4CA"+
+            "\uF2FC\uE3C4\uF2B1\u0000\uE3C5\u0000\uE36E\u0000"+
+            "\uE7E1\u0000\u0000\uEB48\u0000\u0000\uE1D1\uF4B9"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uEECC\u0000\uE638\uE237\u0000\uE545\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uED58\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE4B4\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF0B9\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uE0F5\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uF66D\u0000\uF3A3\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uE157\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uEFCA\u0000\uEBF0\u0000"+
+            "\u0000\u0000\uF5E0\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF8AF\u0000\u0000\u0000\uE0D1"+
+            "\u0000\u0000\u0000\u0000\uF8E0\uF475\u0000\u0000"+
+            "\uF192\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF37C\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF27B\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uEFCB\u0000"+
+            "\u0000\uE192\u0000\u0000\uE6AF\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF4A1\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uF997\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF3A4\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uEB66\u0000\u0000"+
+            "\u0000\u0000\u0000\uF2B2\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF561\u0000\u0000"+
+            "\uF6A1\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uF3D1\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE09E\uE09F\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE25E\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF4C8\u0000\uF4BA"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF1FE"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE836\u0000\u0000\uEB7C\u0000\u0000\u0000\u0000"+
+            "\u0000\uF75D\u0000\uE0D2\u0000\u0000\u0000\uF0CE"+
+            "\u0000\uF7D8\uF7D9\uE070\uE85A\u0000\u0000\u0000"+
+            "\uE0A6\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE058\uF7EE\uE8EC\u0000\u0000"+
+            "\uE341\u0000\u0000\u0000\u0000\uE5EF\u0000\u0000"+
+            "\u0000\uEE95\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uEEA2\uED69\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uED71"+
+            "\u0000\u0000\uF954\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uF7EF\uE2F4\uF6E6\u0000"+
+            "\u0000\u0000\u0000\u0000\uE24C\u0000\u0000\u0000"+
+            "\u0000\uF555\uE933\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uE9BD\u0000\u0000\u0000"+
+            "\u0000\uF556\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF731\u0000\u0000\u0000\uEF66\u0000"+
+            "\u0000\u0000\uE8C1\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF376\u0000\u0000\u0000\uED49"+
+            "\uF67D\u0000\uF7AE\u0000\uE9BE\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE6B0\uE778\uE0BD\u0000\u0000"+
+            "\uF7DA\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF75E\uF7F0\uEB7D\uECB3\uF543"+
+            "\u0000\u0000\uF052\uF476\uF346\u0000\u0000\u0000"+
+            "\u0000\u0000\uE8D6\u0000\u0000\u0000\u0000\u0000"+
+            "\uF0E4\u0000\u0000\uF477\u0000\uE6D5\uE546\uF7E8"+
+            "\uE6C1\u0000\u0000\u0000\u0000\uEDD5\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uEFEA\uE6CC\u0000"+
+            "\u0000\u0000\uE4E9\uEC59\u0000\uF96B\uE1AD\u0000"+
+            "\u0000\u0000\u0000\u0000\uE140\uF032\u0000\u0000"+
+            "\uED98\uE350\u0000\uF347\uF231\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE6F6\u0000\u0000\u0000\uEC5A"+
+            "\uEC5B\u0000\uF85F\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF0DF\u0000\u0000\u0000\u0000\u0000\uE65B"+
+            "\u0000\u0000\u0000\uF544\u0000\u0000\u0000\u0000"+
+            "\uF1CD\uED62\u0000\u0000\uF039\uED4A\uF4A2\uE1D2"+
+            "\u0000\uF65B\u0000\uF3E6\uF1C1\uEF4C\uF261\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF377\uEC5C\u0000"+
+            "\u0000\uED3A\u0000\uF5E1\uF1DA\u0000\u0000\u0000"+
+            "\u0000\u0000\uE6EE\uE3F1\u0000\u0000\u0000\u0000"+
+            "\uEFEB\uEFEC\uEB74\u0000\u0000\u0000\u0000\uE837"+
+            "\uE9D4\u0000\uF033\u0000\u0000\u0000\uE653\uE696"+
+            "\u0000\uE86F\u0000\uF2B3\u0000\u0000\u0000\u0000"+
+            "\uEC5D\u0000\u0000\u0000\u0000\u0000\uF2FD\uF478"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF2C5\u0000\uEEE7\u0000\u0000\uE6FD\u0000"+
+            "\u0000\uEECE\u0000\u0000\uEADC\u0000\uF7C7\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE7F6"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uEAAC\u0000\uE66A\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE934\u0000\u0000\u0000\uF348\u0000\u0000"+
+            "\u0000\u0000\uE5FA\u0000\uED99\u0000\u0000\u0000"+
+            "\uE654\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF57C\u0000\u0000\u0000\u0000\uF2FE\u0000"+
+            "\u0000\u0000\u0000\u0000\uF331\u0000\uEA3A\u0000"+
+            "\u0000\uE84C\uE79E\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF864\u0000\u0000\u0000\uF175\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uF938\u0000\u0000\uF176"+
+            "\u0000\u0000\uE75B\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF8B9\u0000\uED63\u0000\uE1F9"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE2D3\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE07A\u0000\u0000\uE2D4\u0000\uF74D\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF557\u0000"+
+            "\u0000\u0000\u0000\uF06F\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF7DB\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uE547\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF0E5\u0000\u0000\uEBD2\u0000"+
+            "\u0000\u0000\u0000\uF034\u0000\u0000\u0000\uF852"+
+            "\uF8E1\uF87D\uF332\uE193\u0000\uF833\uEC99\u0000"+
+            "\uEC5E\u0000\uEFF5\u0000\uEBEB\u0000\u0000\u0000"+
+            "\uEEE8\uEF67\uE89A\uE55B\u0000\u0000\u0000\uF6F6"+
+            "\uE655\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uE579\u0000\u0000"+
+            "\uF89C\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE194\uF6DD\u0000\uEA4A\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE238\u0000"+
+            "\u0000\u0000\u0000\u0000\uF349\uEDA0\uED59\u0000"+
+            "\u0000\u0000\u0000\u0000\uED64\u0000\u0000\u0000"+
+            "\uF053\u0000\uF2B4\u0000\u0000\u0000\uE6BE\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF8E2\u0000\uE1D3"+
+            "\u0000\u0000\u0000\uF2B5\u0000\u0000\u0000\uF879"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF7A6\u0000\u0000\u0000\u0000\u0000\u0000\uEABD"+
+            "\u0000\uF6C7\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uF79F\u0000\u0000\uF79E"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uEA3B\uE8E8\u0000\u0000\uECDD"+
+            "\u0000\uEBE2\uE3C6\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF660\uF0E6\uE89B"+
+            "\u0000\u0000\u0000\u0000\uF157\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uEA9A\uF779\uECDE\u0000"+
+            "\u0000\u0000\u0000\uE297\u0000\u0000\u0000\u0000"+
+            "\u0000\uF853\uEDD7\u0000\uF158\u0000\u0000\u0000"+
+            "\uF4C9\u0000\u0000\uED4B\u0000\u0000\u0000\u0000"+
+            "\uEE3E\u0000\u0000\u0000\u0000\u0000\uF2B6\u0000"+
+            "\uE94F\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE24D\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uE753\u0000\u0000"+
+            "\u0000\uE35F\u0000\uE2FA\uF4CA\uEB67\u0000\u0000"+
+            "\u0000\uE3C7\uEFAE\u0000\uEF4D\u0000\u0000\uF854"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uEC5F\u0000"+
+            "\u0000\uF855\u0000\u0000\u0000\uF7B8\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uE970\u0000\u0000"+
+            "\uF8B0\u0000\u0000\u0000\uE739\uEDDF\uF7A7\u0000"+
+            "\u0000\uF67E\u0000\uF65C\uEC9A\u0000\u0000\u0000"+
+            "\u0000\uF193\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE870\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF3D2\uE45C\uE2CB\u0000\u0000\uE04D\u0000\u0000"+
+            "\u0000\uE9BF\u0000\u0000\u0000\uF691\u0000\uEA9B"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF844\u0000\u0000"+
+            "\u0000\uE5AD\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF3E7"+
+            "\u0000\uEA4E\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE950\u0000\u0000\u0000\u0000\u0000\uE3C8\uE3C9"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF74E\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE0F6\u0000\u0000\u0000\u0000"+
+            "\uE59B\u0000\u0000\u0000\u0000\u0000\uF5E2\uEBD3"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE779\u0000\u0000\uF7A0\u0000\uE2CC\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF9A4\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uE298\u0000\uF860"+
+            "\u0000\u0000\uE195\uEE4E\u0000\u0000\u0000\uF63E"+
+            "\u0000\u0000\uE5F0\u0000\u0000\uE3CA\u0000\u0000"+
+            "\u0000\uF94E\uE5F1\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE1E9\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uF845\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uEC60\uF599\u0000\u0000\u0000"+
+            "\uE1D4\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uEEA3\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uE8A5\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uEC61\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE6A2"+
+            "\u0000\u0000\uF6E3\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uF036\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uE331\u0000\u0000\u0000"+
+            "\u0000\uE26A\uF8EB\uE8A6\uE8DE\uE775\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF070"+
+            "\u0000\u0000\u0000\u0000\uE73A\u0000\u0000\u0000"+
+            "\u0000\u0000\uEDE0\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE66B"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF2C6\u0000"+
+            "\u0000\uF77A\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uED65"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE299\u0000\u0000\uEB68\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE6EF\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uF57D\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uE1E6\u0000\u0000\u0000"+
+            "\uE196\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF5E3\u0000\u0000"+
+            "\uED5A\u0000\uE971\u0000\u0000\uF7C8\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF94F\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uEF37\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE754\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE0BE"+
+            "\u0000\uE93E\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE6F7"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uF378\u0000\uE9C0"+
+            "\u0000\uE2CD\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uE995\uE7B0\u0000\uEE79\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000";
+
+        private final static String innerIndex6=
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uED4C\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF054\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\uED7C\u0000"+
+            "\uED75\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uF8F8\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE14B\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uED4D\u0000\u0000"+
+            "\uE1DC\uE7F7\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uE9DF\u0000\u0000\u0000"+
+            "\u0000\u0000\uF1CE\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uE7D0\u0000\u0000\u0000\u0000\u0000\uEDA3"+
+            "\u0000\u0000\u0000\u0000\uF7CD\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uE1AE\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uE2CE"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF63F\u0000\u0000\u0000\u0000\u0000"+
+            "\uF9D3\uF0ED\uE66C\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uEDA4\u0000\u0000\u0000\uE5B6\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uE66D\u0000\u0000"+
+            "\u0000\uF7E9\u0000\u0000\u0000\uEEA4\u0000\uE673"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uE3CB\uE674\u0000\u0000\u0000\uE5F2"+
+            "\u0000\u0000\u0000\u0000\u0000\uEA9C\u0000\uE6F8"+
+            "\u0000\u0000\u0000\u0000\u0000\uE77A\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uE2D5\uE79F\u0000\u0000"+
+            "\u0000\u0000\u0000\uE73B\u0000\u0000\uF9CB\u0000"+
+            "\u0000\u0000\u0000\uF96C\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uEB38\uE5F3\u0000"+
+            "\u0000\uF9D9\u0000\u0000\uE133\u0000\u0000\u0000"+
+            "\uE7F9\u0000\u0000\uE4EA\uF5F5\u0000\uF2C7\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE4DA\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uE84D\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uEF38"+
+            "\uE93F\u0000\u0000\u0000\u0000\u0000\uF333\u0000"+
+            "\u0000\u0000\u0000\uE1D5\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uEB39\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\uEA3C\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\uF34A\uF241\u0000\u0000\uF242\u0000"+
+            "\u0000\u0000\uF65D\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uF262"+
+            "\u0000\uE656\u0000\u0000\u0000\u0000\u0000\uEB75"+
+            "\u0000\u0000\uF4BB\u0000\uEDE1\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\uED5B"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\uE6A3\u0000\u0000"+
+            "\uE8C2\u0000\u0000\u0000\u0000\uE0A0\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\uE2CF\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u8861\u8862\u8863\u8864\u8865\u8866\u8867\u8868"+
+            "\u8869\u886A\u886B\u886C\u886D\u886E\u886F\u8870"+
+            "\u8871\u8873\u8874\u8875\u8876\u8877\u8878\u8879"+
+            "\u887A\u887B\u887C\u887D\u8881\u8882\u8883\u8884"+
+            "\u8885\u8886\u8887\u8888\u8889\u888A\u888B\u888C"+
+            "\u888D\u888E\u888F\u8890\u8891\u8893\u8894\u8895"+
+            "\u8896\u8897\u8898\u8899\u889A\u889B\u889C\u889D"+
+            "\u88A1\u88A2\u88A3\u88A4\u88A5\u88A6\u88A7\u88A8"+
+            "\u88A9\u88AA\u88AB\u88AC\u88AD\u88AE\u88AF\u88B0"+
+            "\u88B1\u88B3\u88B4\u88B5\u88B6\u88B7\u88B8\u88B9"+
+            "\u88BA\u88BB\u88BC\u88BD\u88C1\u88C2\u88C3\u88C4"+
+            "\u88C5\u88C6\u88C7\u88C8\u88C9\u88CA\u88CB\u88CC"+
+            "\u88CD\u88CE\u88CF\u88D0\u88D1\u88D3\u88D4\u88D5"+
+            "\u88D6\u88D7\u88D8\u88D9\u88DA\u88DB\u88DC\u88DD"+
+            "\u88E1\u88E2\u88E3\u88E4\u88E5\u88E6\u88E7\u88E8"+
+            "\u88E9\u88EA\u88EB\u88EC\u88ED\u88EE\u88EF\u88F0"+
+            "\u88F1\u88F3\u88F4\u88F5\u88F6\u88F7\u88F8\u88F9"+
+            "\u88FA\u88FB\u88FC\u88FD\u8941\u8942\u8943\u8944"+
+            "\u8945\u8946\u8947\u8948\u8949\u894A\u894B\u894C"+
+            "\u894D\u894E\u894F\u8950\u8951\u8953\u8954\u8955"+
+            "\u8956\u8957\u8958\u8959\u895A\u895B\u895C\u895D"+
+            "\u8961\u8962\u8963\u8964\u8965\u8966\u8967\u8968"+
+            "\u8969\u896A\u896B\u896C\u896D\u896E\u896F\u8970"+
+            "\u8971\u8973\u8974\u8975\u8976\u8977\u8978\u8979"+
+            "\u897A\u897B\u897C\u897D\u8981\u8982\u8983\u8984"+
+            "\u8985\u8986\u8987\u8988\u8989\u898A\u898B\u898C"+
+            "\u898D\u898E\u898F\u8990\u8991\u8993\u8994\u8995"+
+            "\u8996\u8997\u8998\u8999\u899A\u899B\u899C\u899D"+
+            "\u89A1\u89A2\u89A3\u89A4\u89A5\u89A6\u89A7\u89A8"+
+            "\u89A9\u89AA\u89AB\u89AC\u89AD\u89AE\u89AF\u89B0"+
+            "\u89B1\u89B3\u89B4\u89B5\u89B6\u89B7\u89B8\u89B9"+
+            "\u89BA\u89BB\u89BC\u89BD\u89C1\u89C2\u89C3\u89C4"+
+            "\u89C5\u89C6\u89C7\u89C8\u89C9\u89CA\u89CB\u89CC"+
+            "\u89CD\u89CE\u89CF\u89D0\u89D1\u89D3\u89D4\u89D5"+
+            "\u89D6\u89D7\u89D8\u89D9\u89DA\u89DB\u89DC\u89DD"+
+            "\u89E1\u89E2\u89E3\u89E4\u89E5\u89E6\u89E7\u89E8"+
+            "\u89E9\u89EA\u89EB\u89EC\u89ED\u89EE\u89EF\u89F0"+
+            "\u89F1\u89F3\u89F4\u89F5\u89F6\u89F7\u89F8\u89F9"+
+            "\u89FA\u89FB\u89FC\u89FD\u8A41\u8A42\u8A43\u8A44"+
+            "\u8A45\u8A46\u8A47\u8A48\u8A49\u8A4A\u8A4B\u8A4C"+
+            "\u8A4D\u8A4E\u8A4F\u8A50\u8A51\u8A53\u8A54\u8A55"+
+            "\u8A56\u8A57\u8A58\u8A59\u8A5A\u8A5B\u8A5C\u8A5D"+
+            "\u8A61\u8A62\u8A63\u8A64\u8A65\u8A66\u8A67\u8A68"+
+            "\u8A69\u8A6A\u8A6B\u8A6C\u8A6D\u8A6E\u8A6F\u8A70"+
+            "\u8A71\u8A73\u8A74\u8A75\u8A76\u8A77\u8A78\u8A79"+
+            "\u8A7A\u8A7B\u8A7C\u8A7D\u8A81\u8A82\u8A83\u8A84"+
+            "\u8A85\u8A86\u8A87\u8A88\u8A89\u8A8A\u8A8B\u8A8C"+
+            "\u8A8D\u8A8E\u8A8F\u8A90\u8A91\u8A93\u8A94\u8A95"+
+            "\u8A96\u8A97\u8A98\u8A99\u8A9A\u8A9B\u8A9C\u8A9D"+
+            "\u8AA1\u8AA2\u8AA3\u8AA4\u8AA5\u8AA6\u8AA7\u8AA8"+
+            "\u8AA9\u8AAA\u8AAB\u8AAC\u8AAD\u8AAE\u8AAF\u8AB0"+
+            "\u8AB1\u8AB3\u8AB4\u8AB5\u8AB6\u8AB7\u8AB8\u8AB9"+
+            "\u8ABA\u8ABB\u8ABC\u8ABD\u8AC1\u8AC2\u8AC3\u8AC4"+
+            "\u8AC5\u8AC6\u8AC7\u8AC8\u8AC9\u8ACA\u8ACB\u8ACC"+
+            "\u8ACD\u8ACE\u8ACF\u8AD0\u8AD1\u8AD3\u8AD4\u8AD5"+
+            "\u8AD6\u8AD7\u8AD8\u8AD9\u8ADA\u8ADB\u8ADC\u8ADD"+
+            "\u8AE1\u8AE2\u8AE3\u8AE4\u8AE5\u8AE6\u8AE7\u8AE8"+
+            "\u8AE9\u8AEA\u8AEB\u8AEC\u8AED\u8AEE\u8AEF\u8AF0"+
+            "\u8AF1\u8AF3\u8AF4\u8AF5\u8AF6\u8AF7\u8AF8\u8AF9"+
+            "\u8AFA\u8AFB\u8AFC\u8AFD\u8B41\u8B42\u8B43\u8B44"+
+            "\u8B45\u8B46\u8B47\u8B48\u8B49\u8B4A\u8B4B\u8B4C"+
+            "\u8B4D\u8B4E\u8B4F\u8B50\u8B51\u8B53\u8B54\u8B55"+
+            "\u8B56\u8B57\u8B58\u8B59\u8B5A\u8B5B\u8B5C\u8B5D"+
+            "\u8B61\u8B62\u8B63\u8B64\u8B65\u8B66\u8B67\u8B68"+
+            "\u8B69\u8B6A\u8B6B\u8B6C\u8B6D\u8B6E\u8B6F\u8B70"+
+            "\u8B71\u8B73\u8B74\u8B75\u8B76\u8B77\u8B78\u8B79"+
+            "\u8B7A\u8B7B\u8B7C\u8B7D\u8B81\u8B82\u8B83\u8B84"+
+            "\u8B85\u8B86\u8B87\u8B88\u8B89\u8B8A\u8B8B\u8B8C"+
+            "\u8B8D\u8B8E\u8B8F\u8B90\u8B91\u8B93\u8B94\u8B95"+
+            "\u8B96\u8B97\u8B98\u8B99\u8B9A\u8B9B\u8B9C\u8B9D"+
+            "\u8BA1\u8BA2\u8BA3\u8BA4\u8BA5\u8BA6\u8BA7\u8BA8"+
+            "\u8BA9\u8BAA\u8BAB\u8BAC\u8BAD\u8BAE\u8BAF\u8BB0"+
+            "\u8BB1\u8BB3\u8BB4\u8BB5\u8BB6\u8BB7\u8BB8\u8BB9"+
+            "\u8BBA\u8BBB\u8BBC\u8BBD\u8C61\u8C62\u8C63\u8C64"+
+            "\u8C65\u8C66\u8C67\u8C68\u8C69\u8C6A\u8C6B\u8C6C"+
+            "\u8C6D\u8C6E\u8C6F\u8C70\u8C71\u8C73\u8C74\u8C75"+
+            "\u8C76\u8C77\u8C78\u8C79\u8C7A\u8C7B\u8C7C\u8C7D"+
+            "\u8C81\u8C82\u8C83\u8C84\u8C85\u8C86\u8C87\u8C88"+
+            "\u8C89\u8C8A\u8C8B\u8C8C\u8C8D\u8C8E\u8C8F\u8C90"+
+            "\u8C91\u8C93\u8C94\u8C95\u8C96\u8C97\u8C98\u8C99"+
+            "\u8C9A\u8C9B\u8C9C\u8C9D\u8CA1\u8CA2\u8CA3\u8CA4"+
+            "\u8CA5\u8CA6\u8CA7\u8CA8\u8CA9\u8CAA\u8CAB\u8CAC"+
+            "\u8CAD\u8CAE\u8CAF\u8CB0\u8CB1\u8CB3\u8CB4\u8CB5"+
+            "\u8CB6\u8CB7\u8CB8\u8CB9\u8CBA\u8CBB\u8CBC\u8CBD"+
+            "\u8CC1\u8CC2\u8CC3\u8CC4\u8CC5\u8CC6\u8CC7\u8CC8"+
+            "\u8CC9\u8CCA\u8CCB\u8CCC\u8CCD\u8CCE\u8CCF\u8CD0"+
+            "\u8CD1\u8CD3\u8CD4\u8CD5\u8CD6\u8CD7\u8CD8\u8CD9"+
+            "\u8CDA\u8CDB\u8CDC\u8CDD\u8CE1\u8CE2\u8CE3\u8CE4"+
+            "\u8CE5\u8CE6\u8CE7\u8CE8\u8CE9\u8CEA\u8CEB\u8CEC"+
+            "\u8CED\u8CEE\u8CEF\u8CF0\u8CF1\u8CF3\u8CF4\u8CF5"+
+            "\u8CF6\u8CF7\u8CF8\u8CF9\u8CFA\u8CFB\u8CFC\u8CFD"+
+            "\u8D41\u8D42\u8D43\u8D44\u8D45\u8D46\u8D47\u8D48"+
+            "\u8D49\u8D4A\u8D4B\u8D4C\u8D4D\u8D4E\u8D4F\u8D50"+
+            "\u8D51\u8D53\u8D54\u8D55\u8D56\u8D57\u8D58\u8D59"+
+            "\u8D5A\u8D5B\u8D5C\u8D5D\u8D61\u8D62\u8D63\u8D64"+
+            "\u8D65\u8D66\u8D67\u8D68\u8D69\u8D6A\u8D6B\u8D6C"+
+            "\u8D6D\u8D6E\u8D6F\u8D70\u8D71\u8D73\u8D74\u8D75"+
+            "\u8D76\u8D77\u8D78\u8D79\u8D7A\u8D7B\u8D7C\u8D7D"+
+            "\u8D81\u8D82\u8D83\u8D84\u8D85\u8D86\u8D87\u8D88"+
+            "\u8D89\u8D8A\u8D8B\u8D8C\u8D8D\u8D8E\u8D8F\u8D90"+
+            "\u8D91\u8D93\u8D94\u8D95\u8D96\u8D97\u8D98\u8D99"+
+            "\u8D9A\u8D9B\u8D9C\u8D9D\u8DA1\u8DA2\u8DA3\u8DA4"+
+            "\u8DA5\u8DA6\u8DA7\u8DA8\u8DA9\u8DAA\u8DAB\u8DAC"+
+            "\u8DAD\u8DAE\u8DAF\u8DB0\u8DB1\u8DB3\u8DB4\u8DB5"+
+            "\u8DB6\u8DB7\u8DB8\u8DB9\u8DBA\u8DBB\u8DBC\u8DBD"+
+            "\u8DC1\u8DC2\u8DC3\u8DC4\u8DC5\u8DC6\u8DC7\u8DC8"+
+            "\u8DC9\u8DCA\u8DCB\u8DCC\u8DCD\u8DCE\u8DCF\u8DD0"+
+            "\u8DD1\u8DD3\u8DD4\u8DD5\u8DD6\u8DD7\u8DD8\u8DD9"+
+            "\u8DDA\u8DDB\u8DDC\u8DDD\u8DE1\u8DE2\u8DE3\u8DE4"+
+            "\u8DE5\u8DE6\u8DE7\u8DE8\u8DE9\u8DEA\u8DEB\u8DEC"+
+            "\u8DED\u8DEE\u8DEF\u8DF0\u8DF1\u8DF3\u8DF4\u8DF5"+
+            "\u8DF6\u8DF7\u8DF8\u8DF9\u8DFA\u8DFB\u8DFC\u8DFD"+
+            "\u8E41\u8E42\u8E43\u8E44\u8E45\u8E46\u8E47\u8E48"+
+            "\u8E49\u8E4A\u8E4B\u8E4C\u8E4D\u8E4E\u8E4F\u8E50"+
+            "\u8E51\u8E53\u8E54\u8E55\u8E56\u8E57\u8E58\u8E59"+
+            "\u8E5A\u8E5B\u8E5C\u8E5D\u8E61\u8E62\u8E63\u8E64"+
+            "\u8E65\u8E66\u8E67\u8E68\u8E69\u8E6A\u8E6B\u8E6C"+
+            "\u8E6D\u8E6E\u8E6F\u8E70\u8E71\u8E73\u8E74\u8E75"+
+            "\u8E76\u8E77\u8E78\u8E79\u8E7A\u8E7B\u8E7C\u8E7D"+
+            "\u8E81\u8E82\u8E83\u8E84\u8E85\u8E86\u8E87\u8E88"+
+            "\u8E89\u8E8A\u8E8B\u8E8C\u8E8D\u8E8E\u8E8F\u8E90"+
+            "\u8E91\u8E93\u8E94\u8E95\u8E96\u8E97\u8E98\u8E99"+
+            "\u8E9A\u8E9B\u8E9C\u8E9D\u8EA1\u8EA2\u8EA3\u8EA4"+
+            "\u8EA5\u8EA6\u8EA7\u8EA8\u8EA9\u8EAA\u8EAB\u8EAC"+
+            "\u8EAD\u8EAE\u8EAF\u8EB0\u8EB1\u8EB3\u8EB4\u8EB5"+
+            "\u8EB6\u8EB7\u8EB8\u8EB9\u8EBA\u8EBB\u8EBC\u8EBD"+
+            "\u8EC1\u8EC2\u8EC3\u8EC4\u8EC5\u8EC6\u8EC7\u8EC8"+
+            "\u8EC9\u8ECA\u8ECB\u8ECC\u8ECD\u8ECE\u8ECF\u8ED0"+
+            "\u8ED1\u8ED3\u8ED4\u8ED5\u8ED6\u8ED7\u8ED8\u8ED9"+
+            "\u8EDA\u8EDB\u8EDC\u8EDD\u8EE1\u8EE2\u8EE3\u8EE4"+
+            "\u8EE5\u8EE6\u8EE7\u8EE8\u8EE9\u8EEA\u8EEB\u8EEC"+
+            "\u8EED\u8EEE\u8EEF\u8EF0\u8EF1\u8EF3\u8EF4\u8EF5"+
+            "\u8EF6\u8EF7\u8EF8\u8EF9\u8EFA\u8EFB\u8EFC\u8EFD"+
+            "\u8F41\u8F42\u8F43\u8F44\u8F45\u8F46\u8F47\u8F48"+
+            "\u8F49\u8F4A\u8F4B\u8F4C\u8F4D\u8F4E\u8F4F\u8F50"+
+            "\u8F51\u8F53\u8F54\u8F55\u8F56\u8F57\u8F58\u8F59"+
+            "\u8F5A\u8F5B\u8F5C\u8F5D\u8F61\u8F62\u8F63\u8F64"+
+            "\u8F65\u8F66\u8F67\u8F68\u8F69\u8F6A\u8F6B\u8F6C"+
+            "\u8F6D\u8F6E\u8F6F\u8F70\u8F71\u8F73\u8F74\u8F75"+
+            "\u8F76\u8F77\u8F78\u8F79\u8F7A\u8F7B\u8F7C\u8F7D"+
+            "\u8F81\u8F82\u8F83\u8F84\u8F85\u8F86\u8F87\u8F88"+
+            "\u8F89\u8F8A\u8F8B\u8F8C\u8F8D\u8F8E\u8F8F\u8F90"+
+            "\u8F91\u8F93\u8F94\u8F95\u8F96\u8F97\u8F98\u8F99"+
+            "\u8F9A\u8F9B\u8F9C\u8F9D\u8FA1\u8FA2\u8FA3\u8FA4"+
+            "\u8FA5\u8FA6\u8FA7\u8FA8\u8FA9\u8FAA\u8FAB\u8FAC"+
+            "\u8FAD\u8FAE\u8FAF\u8FB0\u8FB1\u8FB3\u8FB4\u8FB5"+
+            "\u8FB6\u8FB7\u8FB8\u8FB9\u8FBA\u8FBB\u8FBC\u8FBD"+
+            "\u9061\u9062\u9063\u9064\u9065\u9066\u9067\u9068"+
+            "\u9069\u906A\u906B\u906C\u906D\u906E\u906F\u9070"+
+            "\u9071\u9073\u9074\u9075\u9076\u9077\u9078\u9079"+
+            "\u907A\u907B\u907C\u907D\u9081\u9082\u9083\u9084"+
+            "\u9085\u9086\u9087\u9088\u9089\u908A\u908B\u908C"+
+            "\u908D\u908E\u908F\u9090\u9091\u9093\u9094\u9095"+
+            "\u9096\u9097\u9098\u9099\u909A\u909B\u909C\u909D"+
+            "\u90A1\u90A2\u90A3\u90A4\u90A5\u90A6\u90A7\u90A8"+
+            "\u90A9\u90AA\u90AB\u90AC\u90AD\u90AE\u90AF\u90B0"+
+            "\u90B1\u90B3\u90B4\u90B5\u90B6\u90B7\u90B8\u90B9"+
+            "\u90BA\u90BB\u90BC\u90BD\u90C1\u90C2\u90C3\u90C4"+
+            "\u90C5\u90C6\u90C7\u90C8\u90C9\u90CA\u90CB\u90CC"+
+            "\u90CD\u90CE\u90CF\u90D0\u90D1\u90D3\u90D4\u90D5"+
+            "\u90D6\u90D7\u90D8\u90D9\u90DA\u90DB\u90DC\u90DD"+
+            "\u90E1\u90E2\u90E3\u90E4\u90E5\u90E6\u90E7\u90E8"+
+            "\u90E9\u90EA\u90EB\u90EC\u90ED\u90EE\u90EF\u90F0"+
+            "\u90F1\u90F3\u90F4\u90F5\u90F6\u90F7\u90F8\u90F9"+
+            "\u90FA\u90FB\u90FC\u90FD\u9141\u9142\u9143\u9144"+
+            "\u9145\u9146\u9147\u9148\u9149\u914A\u914B\u914C"+
+            "\u914D\u914E\u914F\u9150\u9151\u9153\u9154\u9155"+
+            "\u9156\u9157\u9158\u9159\u915A\u915B\u915C\u915D"+
+            "\u9161\u9162\u9163\u9164\u9165\u9166\u9167\u9168"+
+            "\u9169\u916A\u916B\u916C\u916D\u916E\u916F\u9170"+
+            "\u9171\u9173\u9174\u9175\u9176\u9177\u9178\u9179"+
+            "\u917A\u917B\u917C\u917D\u9181\u9182\u9183\u9184"+
+            "\u9185\u9186\u9187\u9188\u9189\u918A\u918B\u918C"+
+            "\u918D\u918E\u918F\u9190\u9191\u9193\u9194\u9195"+
+            "\u9196\u9197\u9198\u9199\u919A\u919B\u919C\u919D"+
+            "\u91A1\u91A2\u91A3\u91A4\u91A5\u91A6\u91A7\u91A8"+
+            "\u91A9\u91AA\u91AB\u91AC\u91AD\u91AE\u91AF\u91B0"+
+            "\u91B1\u91B3\u91B4\u91B5\u91B6\u91B7\u91B8\u91B9"+
+            "\u91BA\u91BB\u91BC\u91BD\u91C1\u91C2\u91C3\u91C4"+
+            "\u91C5\u91C6\u91C7\u91C8\u91C9\u91CA\u91CB\u91CC"+
+            "\u91CD\u91CE\u91CF\u91D0\u91D1\u91D3\u91D4\u91D5"+
+            "\u91D6\u91D7\u91D8\u91D9\u91DA\u91DB\u91DC\u91DD"+
+            "\u91E1\u91E2\u91E3\u91E4\u91E5\u91E6\u91E7\u91E8"+
+            "\u91E9\u91EA\u91EB\u91EC\u91ED\u91EE\u91EF\u91F0"+
+            "\u91F1\u91F3\u91F4\u91F5\u91F6\u91F7\u91F8\u91F9"+
+            "\u91FA\u91FB\u91FC\u91FD\u9241\u9242\u9243\u9244"+
+            "\u9245\u9246\u9247\u9248\u9249\u924A\u924B\u924C"+
+            "\u924D\u924E\u924F\u9250\u9251\u9253\u9254\u9255"+
+            "\u9256\u9257\u9258\u9259\u925A\u925B\u925C\u925D"+
+            "\u9261\u9262\u9263\u9264\u9265\u9266\u9267\u9268"+
+            "\u9269\u926A\u926B\u926C\u926D\u926E\u926F\u9270"+
+            "\u9271\u9273\u9274\u9275\u9276\u9277\u9278\u9279"+
+            "\u927A\u927B\u927C\u927D\u9281\u9282\u9283\u9284"+
+            "\u9285\u9286\u9287\u9288\u9289\u928A\u928B\u928C"+
+            "\u928D\u928E\u928F\u9290\u9291\u9293\u9294\u9295"+
+            "\u9296\u9297\u9298\u9299\u929A\u929B\u929C\u929D"+
+            "\u92A1\u92A2\u92A3\u92A4\u92A5\u92A6\u92A7\u92A8"+
+            "\u92A9\u92AA\u92AB\u92AC\u92AD\u92AE\u92AF\u92B0"+
+            "\u92B1\u92B3\u92B4\u92B5\u92B6\u92B7\u92B8\u92B9"+
+            "\u92BA\u92BB\u92BC\u92BD\u92C1\u92C2\u92C3\u92C4"+
+            "\u92C5\u92C6\u92C7\u92C8\u92C9\u92CA\u92CB\u92CC"+
+            "\u92CD\u92CE\u92CF\u92D0\u92D1\u92D3\u92D4\u92D5"+
+            "\u92D6\u92D7\u92D8\u92D9\u92DA\u92DB\u92DC\u92DD"+
+            "\u92E1\u92E2\u92E3\u92E4\u92E5\u92E6\u92E7\u92E8"+
+            "\u92E9\u92EA\u92EB\u92EC\u92ED\u92EE\u92EF\u92F0"+
+            "\u92F1\u92F3\u92F4\u92F5\u92F6\u92F7\u92F8\u92F9"+
+            "\u92FA\u92FB\u92FC\u92FD\u9341\u9342\u9343\u9344"+
+            "\u9345\u9346\u9347\u9348\u9349\u934A\u934B\u934C"+
+            "\u934D\u934E\u934F\u9350\u9351\u9353\u9354\u9355"+
+            "\u9356\u9357\u9358\u9359\u935A\u935B\u935C\u935D"+
+            "\u9361\u9362\u9363\u9364\u9365\u9366\u9367\u9368"+
+            "\u9369\u936A\u936B\u936C\u936D\u936E\u936F\u9370"+
+            "\u9371\u9373\u9374\u9375\u9376\u9377\u9378\u9379"+
+            "\u937A\u937B\u937C\u937D\u9381\u9382\u9383\u9384"+
+            "\u9385\u9386\u9387\u9388\u9389\u938A\u938B\u938C"+
+            "\u938D\u938E\u938F\u9390\u9391\u9393\u9394\u9395"+
+            "\u9396\u9397\u9398\u9399\u939A\u939B\u939C\u939D"+
+            "\u93A1\u93A2\u93A3\u93A4\u93A5\u93A6\u93A7\u93A8"+
+            "\u93A9\u93AA\u93AB\u93AC\u93AD\u93AE\u93AF\u93B0"+
+            "\u93B1\u93B3\u93B4\u93B5\u93B6\u93B7\u93B8\u93B9"+
+            "\u93BA\u93BB\u93BC\u93BD\u9461\u9462\u9463\u9464"+
+            "\u9465\u9466\u9467\u9468\u9469\u946A\u946B\u946C"+
+            "\u946D\u946E\u946F\u9470\u9471\u9473\u9474\u9475"+
+            "\u9476\u9477\u9478\u9479\u947A\u947B\u947C\u947D"+
+            "\u9481\u9482\u9483\u9484\u9485\u9486\u9487\u9488"+
+            "\u9489\u948A\u948B\u948C\u948D\u948E\u948F\u9490"+
+            "\u9491\u9493\u9494\u9495\u9496\u9497\u9498\u9499"+
+            "\u949A\u949B\u949C\u949D\u94A1\u94A2\u94A3\u94A4"+
+            "\u94A5\u94A6\u94A7\u94A8\u94A9\u94AA\u94AB\u94AC"+
+            "\u94AD\u94AE\u94AF\u94B0\u94B1\u94B3\u94B4\u94B5"+
+            "\u94B6\u94B7\u94B8\u94B9\u94BA\u94BB\u94BC\u94BD"+
+            "\u94C1\u94C2\u94C3\u94C4\u94C5\u94C6\u94C7\u94C8"+
+            "\u94C9\u94CA\u94CB\u94CC\u94CD\u94CE\u94CF\u94D0"+
+            "\u94D1\u94D3\u94D4\u94D5\u94D6\u94D7\u94D8\u94D9"+
+            "\u94DA\u94DB\u94DC\u94DD\u94E1\u94E2\u94E3\u94E4"+
+            "\u94E5\u94E6\u94E7\u94E8\u94E9\u94EA\u94EB\u94EC"+
+            "\u94ED\u94EE\u94EF\u94F0\u94F1\u94F3\u94F4\u94F5"+
+            "\u94F6\u94F7\u94F8\u94F9\u94FA\u94FB\u94FC\u94FD"+
+            "\u9541\u9542\u9543\u9544\u9545\u9546\u9547\u9548"+
+            "\u9549\u954A\u954B\u954C\u954D\u954E\u954F\u9550"+
+            "\u9551\u9553\u9554\u9555\u9556\u9557\u9558\u9559"+
+            "\u955A\u955B\u955C\u955D\u9561\u9562\u9563\u9564"+
+            "\u9565\u9566\u9567\u9568\u9569\u956A\u956B\u956C"+
+            "\u956D\u956E\u956F\u9570\u9571\u9573\u9574\u9575"+
+            "\u9576\u9577\u9578\u9579\u957A\u957B\u957C\u957D"+
+            "\u9581\u9582\u9583\u9584\u9585\u9586\u9587\u9588"+
+            "\u9589\u958A\u958B\u958C\u958D\u958E\u958F\u9590"+
+            "\u9591\u9593\u9594\u9595\u9596\u9597\u9598\u9599"+
+            "\u959A\u959B\u959C\u959D\u95A1\u95A2\u95A3\u95A4"+
+            "\u95A5\u95A6\u95A7\u95A8\u95A9\u95AA\u95AB\u95AC"+
+            "\u95AD\u95AE\u95AF\u95B0\u95B1\u95B3\u95B4\u95B5"+
+            "\u95B6\u95B7\u95B8\u95B9\u95BA\u95BB\u95BC\u95BD"+
+            "\u95C1\u95C2\u95C3\u95C4\u95C5\u95C6\u95C7\u95C8"+
+            "\u95C9\u95CA\u95CB\u95CC\u95CD\u95CE\u95CF\u95D0"+
+            "\u95D1\u95D3\u95D4\u95D5\u95D6\u95D7\u95D8\u95D9"+
+            "\u95DA\u95DB\u95DC\u95DD\u95E1\u95E2\u95E3\u95E4"+
+            "\u95E5\u95E6\u95E7\u95E8\u95E9\u95EA\u95EB\u95EC"+
+            "\u95ED\u95EE\u95EF\u95F0\u95F1\u95F3\u95F4\u95F5"+
+            "\u95F6\u95F7\u95F8\u95F9\u95FA\u95FB\u95FC\u95FD"+
+            "\u9641\u9642\u9643\u9644\u9645\u9646\u9647\u9648"+
+            "\u9649\u964A\u964B\u964C\u964D\u964E\u964F\u9650"+
+            "\u9651\u9653\u9654\u9655\u9656\u9657\u9658\u9659"+
+            "\u965A\u965B\u965C\u965D\u9661\u9662\u9663\u9664"+
+            "\u9665\u9666\u9667\u9668\u9669\u966A\u966B\u966C"+
+            "\u966D\u966E\u966F\u9670\u9671\u9673\u9674\u9675"+
+            "\u9676\u9677\u9678\u9679\u967A\u967B\u967C\u967D"+
+            "\u9681\u9682\u9683\u9684\u9685\u9686\u9687\u9688"+
+            "\u9689\u968A\u968B\u968C\u968D\u968E\u968F\u9690"+
+            "\u9691\u9693\u9694\u9695\u9696\u9697\u9698\u9699"+
+            "\u969A\u969B\u969C\u969D\u96A1\u96A2\u96A3\u96A4"+
+            "\u96A5\u96A6\u96A7\u96A8\u96A9\u96AA\u96AB\u96AC"+
+            "\u96AD\u96AE\u96AF\u96B0\u96B1\u96B3\u96B4\u96B5"+
+            "\u96B6\u96B7\u96B8\u96B9\u96BA\u96BB\u96BC\u96BD"+
+            "\u96C1\u96C2\u96C3\u96C4\u96C5\u96C6\u96C7\u96C8"+
+            "\u96C9\u96CA\u96CB\u96CC\u96CD\u96CE\u96CF\u96D0"+
+            "\u96D1\u96D3\u96D4\u96D5\u96D6\u96D7\u96D8\u96D9"+
+            "\u96DA\u96DB\u96DC\u96DD\u96E1\u96E2\u96E3\u96E4"+
+            "\u96E5\u96E6\u96E7\u96E8\u96E9\u96EA\u96EB\u96EC"+
+            "\u96ED\u96EE\u96EF\u96F0\u96F1\u96F3\u96F4\u96F5"+
+            "\u96F6\u96F7\u96F8\u96F9\u96FA\u96FB\u96FC\u96FD"+
+            "\u9741\u9742\u9743\u9744\u9745\u9746\u9747\u9748"+
+            "\u9749\u974A\u974B\u974C\u974D\u974E\u974F\u9750"+
+            "\u9751\u9753\u9754\u9755\u9756\u9757\u9758\u9759"+
+            "\u975A\u975B\u975C\u975D\u9761\u9762\u9763\u9764"+
+            "\u9765\u9766\u9767\u9768\u9769\u976A\u976B\u976C"+
+            "\u976D\u976E\u976F\u9770\u9771\u9773\u9774\u9775"+
+            "\u9776\u9777\u9778\u9779\u977A\u977B\u977C\u977D"+
+            "\u9781\u9782\u9783\u9784\u9785\u9786\u9787\u9788"+
+            "\u9789\u978A\u978B\u978C\u978D\u978E\u978F\u9790"+
+            "\u9791\u9793\u9794\u9795\u9796\u9797\u9798\u9799"+
+            "\u979A\u979B\u979C\u979D\u97A1\u97A2\u97A3\u97A4"+
+            "\u97A5\u97A6\u97A7\u97A8\u97A9\u97AA\u97AB\u97AC"+
+            "\u97AD\u97AE\u97AF\u97B0\u97B1\u97B3\u97B4\u97B5"+
+            "\u97B6\u97B7\u97B8\u97B9\u97BA\u97BB\u97BC\u97BD"+
+            "\u9861\u9862\u9863\u9864\u9865\u9866\u9867\u9868"+
+            "\u9869\u986A\u986B\u986C\u986D\u986E\u986F\u9870"+
+            "\u9871\u9873\u9874\u9875\u9876\u9877\u9878\u9879"+
+            "\u987A\u987B\u987C\u987D\u9881\u9882\u9883\u9884"+
+            "\u9885\u9886\u9887\u9888\u9889\u988A\u988B\u988C"+
+            "\u988D\u988E\u988F\u9890\u9891\u9893\u9894\u9895"+
+            "\u9896\u9897\u9898\u9899\u989A\u989B\u989C\u989D"+
+            "\u98A1\u98A2\u98A3\u98A4\u98A5\u98A6\u98A7\u98A8"+
+            "\u98A9\u98AA\u98AB\u98AC\u98AD\u98AE\u98AF\u98B0"+
+            "\u98B1\u98B3\u98B4\u98B5\u98B6\u98B7\u98B8\u98B9"+
+            "\u98BA\u98BB\u98BC\u98BD\u98C1\u98C2\u98C3\u98C4"+
+            "\u98C5\u98C6\u98C7\u98C8\u98C9\u98CA\u98CB\u98CC"+
+            "\u98CD\u98CE\u98CF\u98D0\u98D1\u98D3\u98D4\u98D5"+
+            "\u98D6\u98D7\u98D8\u98D9\u98DA\u98DB\u98DC\u98DD"+
+            "\u98E1\u98E2\u98E3\u98E4\u98E5\u98E6\u98E7\u98E8"+
+            "\u98E9\u98EA\u98EB\u98EC\u98ED\u98EE\u98EF\u98F0"+
+            "\u98F1\u98F3\u98F4\u98F5\u98F6\u98F7\u98F8\u98F9"+
+            "\u98FA\u98FB\u98FC\u98FD\u9941\u9942\u9943\u9944"+
+            "\u9945\u9946\u9947\u9948\u9949\u994A\u994B\u994C"+
+            "\u994D\u994E\u994F\u9950\u9951\u9953\u9954\u9955"+
+            "\u9956\u9957\u9958\u9959\u995A\u995B\u995C\u995D"+
+            "\u9961\u9962\u9963\u9964\u9965\u9966\u9967\u9968"+
+            "\u9969\u996A\u996B\u996C\u996D\u996E\u996F\u9970"+
+            "\u9971\u9973\u9974\u9975\u9976\u9977\u9978\u9979"+
+            "\u997A\u997B\u997C\u997D\u9981\u9982\u9983\u9984"+
+            "\u9985\u9986\u9987\u9988\u9989\u998A\u998B\u998C"+
+            "\u998D\u998E\u998F\u9990\u9991\u9993\u9994\u9995"+
+            "\u9996\u9997\u9998\u9999\u999A\u999B\u999C\u999D"+
+            "\u99A1\u99A2\u99A3\u99A4\u99A5\u99A6\u99A7\u99A8"+
+            "\u99A9\u99AA\u99AB\u99AC\u99AD\u99AE\u99AF\u99B0"+
+            "\u99B1\u99B3\u99B4\u99B5\u99B6\u99B7\u99B8\u99B9"+
+            "\u99BA\u99BB\u99BC\u99BD\u99C1\u99C2\u99C3\u99C4"+
+            "\u99C5\u99C6\u99C7\u99C8\u99C9\u99CA\u99CB\u99CC"+
+            "\u99CD\u99CE\u99CF\u99D0\u99D1\u99D3\u99D4\u99D5"+
+            "\u99D6\u99D7\u99D8\u99D9\u99DA\u99DB\u99DC\u99DD"+
+            "\u99E1\u99E2\u99E3\u99E4\u99E5\u99E6\u99E7\u99E8"+
+            "\u99E9\u99EA\u99EB\u99EC\u99ED\u99EE\u99EF\u99F0"+
+            "\u99F1\u99F3\u99F4\u99F5\u99F6\u99F7\u99F8\u99F9"+
+            "\u99FA\u99FB\u99FC\u99FD\u9A41\u9A42\u9A43\u9A44"+
+            "\u9A45\u9A46\u9A47\u9A48\u9A49\u9A4A\u9A4B\u9A4C"+
+            "\u9A4D\u9A4E\u9A4F\u9A50\u9A51\u9A53\u9A54\u9A55"+
+            "\u9A56\u9A57\u9A58\u9A59\u9A5A\u9A5B\u9A5C\u9A5D"+
+            "\u9A61\u9A62\u9A63\u9A64\u9A65\u9A66\u9A67\u9A68"+
+            "\u9A69\u9A6A\u9A6B\u9A6C\u9A6D\u9A6E\u9A6F\u9A70"+
+            "\u9A71\u9A73\u9A74\u9A75\u9A76\u9A77\u9A78\u9A79"+
+            "\u9A7A\u9A7B\u9A7C\u9A7D\u9A81\u9A82\u9A83\u9A84"+
+            "\u9A85\u9A86\u9A87\u9A88\u9A89\u9A8A\u9A8B\u9A8C"+
+            "\u9A8D\u9A8E\u9A8F\u9A90\u9A91\u9A93\u9A94\u9A95"+
+            "\u9A96\u9A97\u9A98\u9A99\u9A9A\u9A9B\u9A9C\u9A9D"+
+            "\u9AA1\u9AA2\u9AA3\u9AA4\u9AA5\u9AA6\u9AA7\u9AA8"+
+            "\u9AA9\u9AAA\u9AAB\u9AAC\u9AAD\u9AAE\u9AAF\u9AB0"+
+            "\u9AB1\u9AB3\u9AB4\u9AB5\u9AB6\u9AB7\u9AB8\u9AB9"+
+            "\u9ABA\u9ABB\u9ABC\u9ABD\u9AC1\u9AC2\u9AC3\u9AC4"+
+            "\u9AC5\u9AC6\u9AC7\u9AC8\u9AC9\u9ACA\u9ACB\u9ACC"+
+            "\u9ACD\u9ACE\u9ACF\u9AD0\u9AD1\u9AD3\u9AD4\u9AD5"+
+            "\u9AD6\u9AD7\u9AD8\u9AD9\u9ADA\u9ADB\u9ADC\u9ADD"+
+            "\u9AE1\u9AE2\u9AE3\u9AE4\u9AE5\u9AE6\u9AE7\u9AE8"+
+            "\u9AE9\u9AEA\u9AEB\u9AEC\u9AED\u9AEE\u9AEF\u9AF0"+
+            "\u9AF1\u9AF3\u9AF4\u9AF5\u9AF6\u9AF7\u9AF8\u9AF9"+
+            "\u9AFA\u9AFB\u9AFC\u9AFD\u9B41\u9B42\u9B43\u9B44"+
+            "\u9B45\u9B46\u9B47\u9B48\u9B49\u9B4A\u9B4B\u9B4C"+
+            "\u9B4D\u9B4E\u9B4F\u9B50\u9B51\u9B53\u9B54\u9B55"+
+            "\u9B56\u9B57\u9B58\u9B59\u9B5A\u9B5B\u9B5C\u9B5D"+
+            "\u9B61\u9B62\u9B63\u9B64\u9B65\u9B66\u9B67\u9B68"+
+            "\u9B69\u9B6A\u9B6B\u9B6C\u9B6D\u9B6E\u9B6F\u9B70"+
+            "\u9B71\u9B73\u9B74\u9B75\u9B76\u9B77\u9B78\u9B79"+
+            "\u9B7A\u9B7B\u9B7C\u9B7D\u9B81\u9B82\u9B83\u9B84"+
+            "\u9B85\u9B86\u9B87\u9B88\u9B89\u9B8A\u9B8B\u9B8C"+
+            "\u9B8D\u9B8E\u9B8F\u9B90\u9B91\u9B93\u9B94\u9B95"+
+            "\u9B96\u9B97\u9B98\u9B99\u9B9A\u9B9B\u9B9C\u9B9D"+
+            "\u9BA1\u9BA2\u9BA3\u9BA4\u9BA5\u9BA6\u9BA7\u9BA8"+
+            "\u9BA9\u9BAA\u9BAB\u9BAC\u9BAD\u9BAE\u9BAF\u9BB0"+
+            "\u9BB1\u9BB3\u9BB4\u9BB5\u9BB6\u9BB7\u9BB8\u9BB9"+
+            "\u9BBA\u9BBB\u9BBC\u9BBD\u9C61\u9C62\u9C63\u9C64"+
+            "\u9C65\u9C66\u9C67\u9C68\u9C69\u9C6A\u9C6B\u9C6C"+
+            "\u9C6D\u9C6E\u9C6F\u9C70\u9C71\u9C73\u9C74\u9C75"+
+            "\u9C76\u9C77\u9C78\u9C79\u9C7A\u9C7B\u9C7C\u9C7D"+
+            "\u9C81\u9C82\u9C83\u9C84\u9C85\u9C86\u9C87\u9C88"+
+            "\u9C89\u9C8A\u9C8B\u9C8C\u9C8D\u9C8E\u9C8F\u9C90"+
+            "\u9C91\u9C93\u9C94\u9C95\u9C96\u9C97\u9C98\u9C99"+
+            "\u9C9A\u9C9B\u9C9C\u9C9D\u9CA1\u9CA2\u9CA3\u9CA4"+
+            "\u9CA5\u9CA6\u9CA7\u9CA8\u9CA9\u9CAA\u9CAB\u9CAC"+
+            "\u9CAD\u9CAE\u9CAF\u9CB0\u9CB1\u9CB3\u9CB4\u9CB5"+
+            "\u9CB6\u9CB7\u9CB8\u9CB9\u9CBA\u9CBB\u9CBC\u9CBD"+
+            "\u9CC1\u9CC2\u9CC3\u9CC4\u9CC5\u9CC6\u9CC7\u9CC8"+
+            "\u9CC9\u9CCA\u9CCB\u9CCC\u9CCD\u9CCE\u9CCF\u9CD0"+
+            "\u9CD1\u9CD3\u9CD4\u9CD5\u9CD6\u9CD7\u9CD8\u9CD9"+
+            "\u9CDA\u9CDB\u9CDC\u9CDD\u9CE1\u9CE2\u9CE3\u9CE4"+
+            "\u9CE5\u9CE6\u9CE7\u9CE8\u9CE9\u9CEA\u9CEB\u9CEC"+
+            "\u9CED\u9CEE\u9CEF\u9CF0\u9CF1\u9CF3\u9CF4\u9CF5"+
+            "\u9CF6\u9CF7\u9CF8\u9CF9\u9CFA\u9CFB\u9CFC\u9CFD"+
+            "\u9D41\u9D42\u9D43\u9D44\u9D45\u9D46\u9D47\u9D48"+
+            "\u9D49\u9D4A\u9D4B\u9D4C\u9D4D\u9D4E\u9D4F\u9D50"+
+            "\u9D51\u9D53\u9D54\u9D55\u9D56\u9D57\u9D58\u9D59"+
+            "\u9D5A\u9D5B\u9D5C\u9D5D\u9D61\u9D62\u9D63\u9D64"+
+            "\u9D65\u9D66\u9D67\u9D68\u9D69\u9D6A\u9D6B\u9D6C"+
+            "\u9D6D\u9D6E\u9D6F\u9D70\u9D71\u9D73\u9D74\u9D75"+
+            "\u9D76\u9D77\u9D78\u9D79\u9D7A\u9D7B\u9D7C\u9D7D"+
+            "\u9D81\u9D82\u9D83\u9D84\u9D85\u9D86\u9D87\u9D88"+
+            "\u9D89\u9D8A\u9D8B\u9D8C\u9D8D\u9D8E\u9D8F\u9D90"+
+            "\u9D91\u9D93\u9D94\u9D95\u9D96\u9D97\u9D98\u9D99"+
+            "\u9D9A\u9D9B\u9D9C\u9D9D\u9DA1\u9DA2\u9DA3\u9DA4"+
+            "\u9DA5\u9DA6\u9DA7\u9DA8\u9DA9\u9DAA\u9DAB\u9DAC"+
+            "\u9DAD\u9DAE\u9DAF\u9DB0\u9DB1\u9DB3\u9DB4\u9DB5"+
+            "\u9DB6\u9DB7\u9DB8\u9DB9\u9DBA\u9DBB\u9DBC\u9DBD"+
+            "\u9DC1\u9DC2\u9DC3\u9DC4\u9DC5\u9DC6\u9DC7\u9DC8"+
+            "\u9DC9\u9DCA\u9DCB\u9DCC\u9DCD\u9DCE\u9DCF\u9DD0"+
+            "\u9DD1\u9DD3\u9DD4\u9DD5\u9DD6\u9DD7\u9DD8\u9DD9"+
+            "\u9DDA\u9DDB\u9DDC\u9DDD\u9DE1\u9DE2\u9DE3\u9DE4"+
+            "\u9DE5\u9DE6\u9DE7\u9DE8\u9DE9\u9DEA\u9DEB\u9DEC"+
+            "\u9DED\u9DEE\u9DEF\u9DF0\u9DF1\u9DF3\u9DF4\u9DF5"+
+            "\u9DF6\u9DF7\u9DF8\u9DF9\u9DFA\u9DFB\u9DFC\u9DFD"+
+            "\u9E41\u9E42\u9E43\u9E44\u9E45\u9E46\u9E47\u9E48"+
+            "\u9E49\u9E4A\u9E4B\u9E4C\u9E4D\u9E4E\u9E4F\u9E50"+
+            "\u9E51\u9E53\u9E54\u9E55\u9E56\u9E57\u9E58\u9E59"+
+            "\u9E5A\u9E5B\u9E5C\u9E5D\u9E61\u9E62\u9E63\u9E64"+
+            "\u9E65\u9E66\u9E67\u9E68\u9E69\u9E6A\u9E6B\u9E6C"+
+            "\u9E6D\u9E6E\u9E6F\u9E70\u9E71\u9E73\u9E74\u9E75"+
+            "\u9E76\u9E77\u9E78\u9E79\u9E7A\u9E7B\u9E7C\u9E7D"+
+            "\u9E81\u9E82\u9E83\u9E84\u9E85\u9E86\u9E87\u9E88"+
+            "\u9E89\u9E8A\u9E8B\u9E8C\u9E8D\u9E8E\u9E8F\u9E90"+
+            "\u9E91\u9E93\u9E94\u9E95\u9E96\u9E97\u9E98\u9E99";
+
+        private final static String innerIndex7=
+            "\u9E9A\u9E9B\u9E9C\u9E9D\u9EA1\u9EA2\u9EA3\u9EA4"+
+            "\u9EA5\u9EA6\u9EA7\u9EA8\u9EA9\u9EAA\u9EAB\u9EAC"+
+            "\u9EAD\u9EAE\u9EAF\u9EB0\u9EB1\u9EB3\u9EB4\u9EB5"+
+            "\u9EB6\u9EB7\u9EB8\u9EB9\u9EBA\u9EBB\u9EBC\u9EBD"+
+            "\u9EC1\u9EC2\u9EC3\u9EC4\u9EC5\u9EC6\u9EC7\u9EC8"+
+            "\u9EC9\u9ECA\u9ECB\u9ECC\u9ECD\u9ECE\u9ECF\u9ED0"+
+            "\u9ED1\u9ED3\u9ED4\u9ED5\u9ED6\u9ED7\u9ED8\u9ED9"+
+            "\u9EDA\u9EDB\u9EDC\u9EDD\u9EE1\u9EE2\u9EE3\u9EE4"+
+            "\u9EE5\u9EE6\u9EE7\u9EE8\u9EE9\u9EEA\u9EEB\u9EEC"+
+            "\u9EED\u9EEE\u9EEF\u9EF0\u9EF1\u9EF3\u9EF4\u9EF5"+
+            "\u9EF6\u9EF7\u9EF8\u9EF9\u9EFA\u9EFB\u9EFC\u9EFD"+
+            "\u9F41\u9F42\u9F43\u9F44\u9F45\u9F46\u9F47\u9F48"+
+            "\u9F49\u9F4A\u9F4B\u9F4C\u9F4D\u9F4E\u9F4F\u9F50"+
+            "\u9F51\u9F53\u9F54\u9F55\u9F56\u9F57\u9F58\u9F59"+
+            "\u9F5A\u9F5B\u9F5C\u9F5D\u9F61\u9F62\u9F63\u9F64"+
+            "\u9F65\u9F66\u9F67\u9F68\u9F69\u9F6A\u9F6B\u9F6C"+
+            "\u9F6D\u9F6E\u9F6F\u9F70\u9F71\u9F73\u9F74\u9F75"+
+            "\u9F76\u9F77\u9F78\u9F79\u9F7A\u9F7B\u9F7C\u9F7D"+
+            "\u9F81\u9F82\u9F83\u9F84\u9F85\u9F86\u9F87\u9F88"+
+            "\u9F89\u9F8A\u9F8B\u9F8C\u9F8D\u9F8E\u9F8F\u9F90"+
+            "\u9F91\u9F93\u9F94\u9F95\u9F96\u9F97\u9F98\u9F99"+
+            "\u9F9A\u9F9B\u9F9C\u9F9D\u9FA1\u9FA2\u9FA3\u9FA4"+
+            "\u9FA5\u9FA6\u9FA7\u9FA8\u9FA9\u9FAA\u9FAB\u9FAC"+
+            "\u9FAD\u9FAE\u9FAF\u9FB0\u9FB1\u9FB3\u9FB4\u9FB5"+
+            "\u9FB6\u9FB7\u9FB8\u9FB9\u9FBA\u9FBB\u9FBC\u9FBD"+
+            "\uA061\uA062\uA063\uA064\uA065\uA066\uA067\uA068"+
+            "\uA069\uA06A\uA06B\uA06C\uA06D\uA06E\uA06F\uA070"+
+            "\uA071\uA073\uA074\uA075\uA076\uA077\uA078\uA079"+
+            "\uA07A\uA07B\uA07C\uA07D\uA081\uA082\uA083\uA084"+
+            "\uA085\uA086\uA087\uA088\uA089\uA08A\uA08B\uA08C"+
+            "\uA08D\uA08E\uA08F\uA090\uA091\uA093\uA094\uA095"+
+            "\uA096\uA097\uA098\uA099\uA09A\uA09B\uA09C\uA09D"+
+            "\uA0A1\uA0A2\uA0A3\uA0A4\uA0A5\uA0A6\uA0A7\uA0A8"+
+            "\uA0A9\uA0AA\uA0AB\uA0AC\uA0AD\uA0AE\uA0AF\uA0B0"+
+            "\uA0B1\uA0B3\uA0B4\uA0B5\uA0B6\uA0B7\uA0B8\uA0B9"+
+            "\uA0BA\uA0BB\uA0BC\uA0BD\uA0C1\uA0C2\uA0C3\uA0C4"+
+            "\uA0C5\uA0C6\uA0C7\uA0C8\uA0C9\uA0CA\uA0CB\uA0CC"+
+            "\uA0CD\uA0CE\uA0CF\uA0D0\uA0D1\uA0D3\uA0D4\uA0D5"+
+            "\uA0D6\uA0D7\uA0D8\uA0D9\uA0DA\uA0DB\uA0DC\uA0DD"+
+            "\uA0E1\uA0E2\uA0E3\uA0E4\uA0E5\uA0E6\uA0E7\uA0E8"+
+            "\uA0E9\uA0EA\uA0EB\uA0EC\uA0ED\uA0EE\uA0EF\uA0F0"+
+            "\uA0F1\uA0F3\uA0F4\uA0F5\uA0F6\uA0F7\uA0F8\uA0F9"+
+            "\uA0FA\uA0FB\uA0FC\uA0FD\uA141\uA142\uA143\uA144"+
+            "\uA145\uA146\uA147\uA148\uA149\uA14A\uA14B\uA14C"+
+            "\uA14D\uA14E\uA14F\uA150\uA151\uA153\uA154\uA155"+
+            "\uA156\uA157\uA158\uA159\uA15A\uA15B\uA15C\uA15D"+
+            "\uA161\uA162\uA163\uA164\uA165\uA166\uA167\uA168"+
+            "\uA169\uA16A\uA16B\uA16C\uA16D\uA16E\uA16F\uA170"+
+            "\uA171\uA173\uA174\uA175\uA176\uA177\uA178\uA179"+
+            "\uA17A\uA17B\uA17C\uA17D\uA181\uA182\uA183\uA184"+
+            "\uA185\uA186\uA187\uA188\uA189\uA18A\uA18B\uA18C"+
+            "\uA18D\uA18E\uA18F\uA190\uA191\uA193\uA194\uA195"+
+            "\uA196\uA197\uA198\uA199\uA19A\uA19B\uA19C\uA19D"+
+            "\uA1A1\uA1A2\uA1A3\uA1A4\uA1A5\uA1A6\uA1A7\uA1A8"+
+            "\uA1A9\uA1AA\uA1AB\uA1AC\uA1AD\uA1AE\uA1AF\uA1B0"+
+            "\uA1B1\uA1B3\uA1B4\uA1B5\uA1B6\uA1B7\uA1B8\uA1B9"+
+            "\uA1BA\uA1BB\uA1BC\uA1BD\uA1C1\uA1C2\uA1C3\uA1C4"+
+            "\uA1C5\uA1C6\uA1C7\uA1C8\uA1C9\uA1CA\uA1CB\uA1CC"+
+            "\uA1CD\uA1CE\uA1CF\uA1D0\uA1D1\uA1D3\uA1D4\uA1D5"+
+            "\uA1D6\uA1D7\uA1D8\uA1D9\uA1DA\uA1DB\uA1DC\uA1DD"+
+            "\uA1E1\uA1E2\uA1E3\uA1E4\uA1E5\uA1E6\uA1E7\uA1E8"+
+            "\uA1E9\uA1EA\uA1EB\uA1EC\uA1ED\uA1EE\uA1EF\uA1F0"+
+            "\uA1F1\uA1F3\uA1F4\uA1F5\uA1F6\uA1F7\uA1F8\uA1F9"+
+            "\uA1FA\uA1FB\uA1FC\uA1FD\uA241\uA242\uA243\uA244"+
+            "\uA245\uA246\uA247\uA248\uA249\uA24A\uA24B\uA24C"+
+            "\uA24D\uA24E\uA24F\uA250\uA251\uA253\uA254\uA255"+
+            "\uA256\uA257\uA258\uA259\uA25A\uA25B\uA25C\uA25D"+
+            "\uA261\uA262\uA263\uA264\uA265\uA266\uA267\uA268"+
+            "\uA269\uA26A\uA26B\uA26C\uA26D\uA26E\uA26F\uA270"+
+            "\uA271\uA273\uA274\uA275\uA276\uA277\uA278\uA279"+
+            "\uA27A\uA27B\uA27C\uA27D\uA281\uA282\uA283\uA284"+
+            "\uA285\uA286\uA287\uA288\uA289\uA28A\uA28B\uA28C"+
+            "\uA28D\uA28E\uA28F\uA290\uA291\uA293\uA294\uA295"+
+            "\uA296\uA297\uA298\uA299\uA29A\uA29B\uA29C\uA29D"+
+            "\uA2A1\uA2A2\uA2A3\uA2A4\uA2A5\uA2A6\uA2A7\uA2A8"+
+            "\uA2A9\uA2AA\uA2AB\uA2AC\uA2AD\uA2AE\uA2AF\uA2B0"+
+            "\uA2B1\uA2B3\uA2B4\uA2B5\uA2B6\uA2B7\uA2B8\uA2B9"+
+            "\uA2BA\uA2BB\uA2BC\uA2BD\uA2C1\uA2C2\uA2C3\uA2C4"+
+            "\uA2C5\uA2C6\uA2C7\uA2C8\uA2C9\uA2CA\uA2CB\uA2CC"+
+            "\uA2CD\uA2CE\uA2CF\uA2D0\uA2D1\uA2D3\uA2D4\uA2D5"+
+            "\uA2D6\uA2D7\uA2D8\uA2D9\uA2DA\uA2DB\uA2DC\uA2DD"+
+            "\uA2E1\uA2E2\uA2E3\uA2E4\uA2E5\uA2E6\uA2E7\uA2E8"+
+            "\uA2E9\uA2EA\uA2EB\uA2EC\uA2ED\uA2EE\uA2EF\uA2F0"+
+            "\uA2F1\uA2F3\uA2F4\uA2F5\uA2F6\uA2F7\uA2F8\uA2F9"+
+            "\uA2FA\uA2FB\uA2FC\uA2FD\uA341\uA342\uA343\uA344"+
+            "\uA345\uA346\uA347\uA348\uA349\uA34A\uA34B\uA34C"+
+            "\uA34D\uA34E\uA34F\uA350\uA351\uA353\uA354\uA355"+
+            "\uA356\uA357\uA358\uA359\uA35A\uA35B\uA35C\uA35D"+
+            "\uA361\uA362\uA363\uA364\uA365\uA366\uA367\uA368"+
+            "\uA369\uA36A\uA36B\uA36C\uA36D\uA36E\uA36F\uA370"+
+            "\uA371\uA373\uA374\uA375\uA376\uA377\uA378\uA379"+
+            "\uA37A\uA37B\uA37C\uA37D\uA381\uA382\uA383\uA384"+
+            "\uA385\uA386\uA387\uA388\uA389\uA38A\uA38B\uA38C"+
+            "\uA38D\uA38E\uA38F\uA390\uA391\uA393\uA394\uA395"+
+            "\uA396\uA397\uA398\uA399\uA39A\uA39B\uA39C\uA39D"+
+            "\uA3A1\uA3A2\uA3A3\uA3A4\uA3A5\uA3A6\uA3A7\uA3A8"+
+            "\uA3A9\uA3AA\uA3AB\uA3AC\uA3AD\uA3AE\uA3AF\uA3B0"+
+            "\uA3B1\uA3B3\uA3B4\uA3B5\uA3B6\uA3B7\uA3B8\uA3B9"+
+            "\uA3BA\uA3BB\uA3BC\uA3BD\uA461\uA462\uA463\uA464"+
+            "\uA465\uA466\uA467\uA468\uA469\uA46A\uA46B\uA46C"+
+            "\uA46D\uA46E\uA46F\uA470\uA471\uA473\uA474\uA475"+
+            "\uA476\uA477\uA478\uA479\uA47A\uA47B\uA47C\uA47D"+
+            "\uA481\uA482\uA483\uA484\uA485\uA486\uA487\uA488"+
+            "\uA489\uA48A\uA48B\uA48C\uA48D\uA48E\uA48F\uA490"+
+            "\uA491\uA493\uA494\uA495\uA496\uA497\uA498\uA499"+
+            "\uA49A\uA49B\uA49C\uA49D\uA4A1\uA4A2\uA4A3\uA4A4"+
+            "\uA4A5\uA4A6\uA4A7\uA4A8\uA4A9\uA4AA\uA4AB\uA4AC"+
+            "\uA4AD\uA4AE\uA4AF\uA4B0\uA4B1\uA4B3\uA4B4\uA4B5"+
+            "\uA4B6\uA4B7\uA4B8\uA4B9\uA4BA\uA4BB\uA4BC\uA4BD"+
+            "\uA4C1\uA4C2\uA4C3\uA4C4\uA4C5\uA4C6\uA4C7\uA4C8"+
+            "\uA4C9\uA4CA\uA4CB\uA4CC\uA4CD\uA4CE\uA4CF\uA4D0"+
+            "\uA4D1\uA4D3\uA4D4\uA4D5\uA4D6\uA4D7\uA4D8\uA4D9"+
+            "\uA4DA\uA4DB\uA4DC\uA4DD\uA4E1\uA4E2\uA4E3\uA4E4"+
+            "\uA4E5\uA4E6\uA4E7\uA4E8\uA4E9\uA4EA\uA4EB\uA4EC"+
+            "\uA4ED\uA4EE\uA4EF\uA4F0\uA4F1\uA4F3\uA4F4\uA4F5"+
+            "\uA4F6\uA4F7\uA4F8\uA4F9\uA4FA\uA4FB\uA4FC\uA4FD"+
+            "\uA541\uA542\uA543\uA544\uA545\uA546\uA547\uA548"+
+            "\uA549\uA54A\uA54B\uA54C\uA54D\uA54E\uA54F\uA550"+
+            "\uA551\uA553\uA554\uA555\uA556\uA557\uA558\uA559"+
+            "\uA55A\uA55B\uA55C\uA55D\uA561\uA562\uA563\uA564"+
+            "\uA565\uA566\uA567\uA568\uA569\uA56A\uA56B\uA56C"+
+            "\uA56D\uA56E\uA56F\uA570\uA571\uA573\uA574\uA575"+
+            "\uA576\uA577\uA578\uA579\uA57A\uA57B\uA57C\uA57D"+
+            "\uA581\uA582\uA583\uA584\uA585\uA586\uA587\uA588"+
+            "\uA589\uA58A\uA58B\uA58C\uA58D\uA58E\uA58F\uA590"+
+            "\uA591\uA593\uA594\uA595\uA596\uA597\uA598\uA599"+
+            "\uA59A\uA59B\uA59C\uA59D\uA5A1\uA5A2\uA5A3\uA5A4"+
+            "\uA5A5\uA5A6\uA5A7\uA5A8\uA5A9\uA5AA\uA5AB\uA5AC"+
+            "\uA5AD\uA5AE\uA5AF\uA5B0\uA5B1\uA5B3\uA5B4\uA5B5"+
+            "\uA5B6\uA5B7\uA5B8\uA5B9\uA5BA\uA5BB\uA5BC\uA5BD"+
+            "\uA5C1\uA5C2\uA5C3\uA5C4\uA5C5\uA5C6\uA5C7\uA5C8"+
+            "\uA5C9\uA5CA\uA5CB\uA5CC\uA5CD\uA5CE\uA5CF\uA5D0"+
+            "\uA5D1\uA5D3\uA5D4\uA5D5\uA5D6\uA5D7\uA5D8\uA5D9"+
+            "\uA5DA\uA5DB\uA5DC\uA5DD\uA5E1\uA5E2\uA5E3\uA5E4"+
+            "\uA5E5\uA5E6\uA5E7\uA5E8\uA5E9\uA5EA\uA5EB\uA5EC"+
+            "\uA5ED\uA5EE\uA5EF\uA5F0\uA5F1\uA5F3\uA5F4\uA5F5"+
+            "\uA5F6\uA5F7\uA5F8\uA5F9\uA5FA\uA5FB\uA5FC\uA5FD"+
+            "\uA641\uA642\uA643\uA644\uA645\uA646\uA647\uA648"+
+            "\uA649\uA64A\uA64B\uA64C\uA64D\uA64E\uA64F\uA650"+
+            "\uA651\uA653\uA654\uA655\uA656\uA657\uA658\uA659"+
+            "\uA65A\uA65B\uA65C\uA65D\uA661\uA662\uA663\uA664"+
+            "\uA665\uA666\uA667\uA668\uA669\uA66A\uA66B\uA66C"+
+            "\uA66D\uA66E\uA66F\uA670\uA671\uA673\uA674\uA675"+
+            "\uA676\uA677\uA678\uA679\uA67A\uA67B\uA67C\uA67D"+
+            "\uA681\uA682\uA683\uA684\uA685\uA686\uA687\uA688"+
+            "\uA689\uA68A\uA68B\uA68C\uA68D\uA68E\uA68F\uA690"+
+            "\uA691\uA693\uA694\uA695\uA696\uA697\uA698\uA699"+
+            "\uA69A\uA69B\uA69C\uA69D\uA6A1\uA6A2\uA6A3\uA6A4"+
+            "\uA6A5\uA6A6\uA6A7\uA6A8\uA6A9\uA6AA\uA6AB\uA6AC"+
+            "\uA6AD\uA6AE\uA6AF\uA6B0\uA6B1\uA6B3\uA6B4\uA6B5"+
+            "\uA6B6\uA6B7\uA6B8\uA6B9\uA6BA\uA6BB\uA6BC\uA6BD"+
+            "\uA6C1\uA6C2\uA6C3\uA6C4\uA6C5\uA6C6\uA6C7\uA6C8"+
+            "\uA6C9\uA6CA\uA6CB\uA6CC\uA6CD\uA6CE\uA6CF\uA6D0"+
+            "\uA6D1\uA6D3\uA6D4\uA6D5\uA6D6\uA6D7\uA6D8\uA6D9"+
+            "\uA6DA\uA6DB\uA6DC\uA6DD\uA6E1\uA6E2\uA6E3\uA6E4"+
+            "\uA6E5\uA6E6\uA6E7\uA6E8\uA6E9\uA6EA\uA6EB\uA6EC"+
+            "\uA6ED\uA6EE\uA6EF\uA6F0\uA6F1\uA6F3\uA6F4\uA6F5"+
+            "\uA6F6\uA6F7\uA6F8\uA6F9\uA6FA\uA6FB\uA6FC\uA6FD"+
+            "\uA741\uA742\uA743\uA744\uA745\uA746\uA747\uA748"+
+            "\uA749\uA74A\uA74B\uA74C\uA74D\uA74E\uA74F\uA750"+
+            "\uA751\uA753\uA754\uA755\uA756\uA757\uA758\uA759"+
+            "\uA75A\uA75B\uA75C\uA75D\uA761\uA762\uA763\uA764"+
+            "\uA765\uA766\uA767\uA768\uA769\uA76A\uA76B\uA76C"+
+            "\uA76D\uA76E\uA76F\uA770\uA771\uA773\uA774\uA775"+
+            "\uA776\uA777\uA778\uA779\uA77A\uA77B\uA77C\uA77D"+
+            "\uA781\uA782\uA783\uA784\uA785\uA786\uA787\uA788"+
+            "\uA789\uA78A\uA78B\uA78C\uA78D\uA78E\uA78F\uA790"+
+            "\uA791\uA793\uA794\uA795\uA796\uA797\uA798\uA799"+
+            "\uA79A\uA79B\uA79C\uA79D\uA7A1\uA7A2\uA7A3\uA7A4"+
+            "\uA7A5\uA7A6\uA7A7\uA7A8\uA7A9\uA7AA\uA7AB\uA7AC"+
+            "\uA7AD\uA7AE\uA7AF\uA7B0\uA7B1\uA7B3\uA7B4\uA7B5"+
+            "\uA7B6\uA7B7\uA7B8\uA7B9\uA7BA\uA7BB\uA7BC\uA7BD"+
+            "\uA861\uA862\uA863\uA864\uA865\uA866\uA867\uA868"+
+            "\uA869\uA86A\uA86B\uA86C\uA86D\uA86E\uA86F\uA870"+
+            "\uA871\uA873\uA874\uA875\uA876\uA877\uA878\uA879"+
+            "\uA87A\uA87B\uA87C\uA87D\uA881\uA882\uA883\uA884"+
+            "\uA885\uA886\uA887\uA888\uA889\uA88A\uA88B\uA88C"+
+            "\uA88D\uA88E\uA88F\uA890\uA891\uA893\uA894\uA895"+
+            "\uA896\uA897\uA898\uA899\uA89A\uA89B\uA89C\uA89D"+
+            "\uA8A1\uA8A2\uA8A3\uA8A4\uA8A5\uA8A6\uA8A7\uA8A8"+
+            "\uA8A9\uA8AA\uA8AB\uA8AC\uA8AD\uA8AE\uA8AF\uA8B0"+
+            "\uA8B1\uA8B3\uA8B4\uA8B5\uA8B6\uA8B7\uA8B8\uA8B9"+
+            "\uA8BA\uA8BB\uA8BC\uA8BD\uA8C1\uA8C2\uA8C3\uA8C4"+
+            "\uA8C5\uA8C6\uA8C7\uA8C8\uA8C9\uA8CA\uA8CB\uA8CC"+
+            "\uA8CD\uA8CE\uA8CF\uA8D0\uA8D1\uA8D3\uA8D4\uA8D5"+
+            "\uA8D6\uA8D7\uA8D8\uA8D9\uA8DA\uA8DB\uA8DC\uA8DD"+
+            "\uA8E1\uA8E2\uA8E3\uA8E4\uA8E5\uA8E6\uA8E7\uA8E8"+
+            "\uA8E9\uA8EA\uA8EB\uA8EC\uA8ED\uA8EE\uA8EF\uA8F0"+
+            "\uA8F1\uA8F3\uA8F4\uA8F5\uA8F6\uA8F7\uA8F8\uA8F9"+
+            "\uA8FA\uA8FB\uA8FC\uA8FD\uA941\uA942\uA943\uA944"+
+            "\uA945\uA946\uA947\uA948\uA949\uA94A\uA94B\uA94C"+
+            "\uA94D\uA94E\uA94F\uA950\uA951\uA953\uA954\uA955"+
+            "\uA956\uA957\uA958\uA959\uA95A\uA95B\uA95C\uA95D"+
+            "\uA961\uA962\uA963\uA964\uA965\uA966\uA967\uA968"+
+            "\uA969\uA96A\uA96B\uA96C\uA96D\uA96E\uA96F\uA970"+
+            "\uA971\uA973\uA974\uA975\uA976\uA977\uA978\uA979"+
+            "\uA97A\uA97B\uA97C\uA97D\uA981\uA982\uA983\uA984"+
+            "\uA985\uA986\uA987\uA988\uA989\uA98A\uA98B\uA98C"+
+            "\uA98D\uA98E\uA98F\uA990\uA991\uA993\uA994\uA995"+
+            "\uA996\uA997\uA998\uA999\uA99A\uA99B\uA99C\uA99D"+
+            "\uA9A1\uA9A2\uA9A3\uA9A4\uA9A5\uA9A6\uA9A7\uA9A8"+
+            "\uA9A9\uA9AA\uA9AB\uA9AC\uA9AD\uA9AE\uA9AF\uA9B0"+
+            "\uA9B1\uA9B3\uA9B4\uA9B5\uA9B6\uA9B7\uA9B8\uA9B9"+
+            "\uA9BA\uA9BB\uA9BC\uA9BD\uA9C1\uA9C2\uA9C3\uA9C4"+
+            "\uA9C5\uA9C6\uA9C7\uA9C8\uA9C9\uA9CA\uA9CB\uA9CC"+
+            "\uA9CD\uA9CE\uA9CF\uA9D0\uA9D1\uA9D3\uA9D4\uA9D5"+
+            "\uA9D6\uA9D7\uA9D8\uA9D9\uA9DA\uA9DB\uA9DC\uA9DD"+
+            "\uA9E1\uA9E2\uA9E3\uA9E4\uA9E5\uA9E6\uA9E7\uA9E8"+
+            "\uA9E9\uA9EA\uA9EB\uA9EC\uA9ED\uA9EE\uA9EF\uA9F0"+
+            "\uA9F1\uA9F3\uA9F4\uA9F5\uA9F6\uA9F7\uA9F8\uA9F9"+
+            "\uA9FA\uA9FB\uA9FC\uA9FD\uAA41\uAA42\uAA43\uAA44"+
+            "\uAA45\uAA46\uAA47\uAA48\uAA49\uAA4A\uAA4B\uAA4C"+
+            "\uAA4D\uAA4E\uAA4F\uAA50\uAA51\uAA53\uAA54\uAA55"+
+            "\uAA56\uAA57\uAA58\uAA59\uAA5A\uAA5B\uAA5C\uAA5D"+
+            "\uAA61\uAA62\uAA63\uAA64\uAA65\uAA66\uAA67\uAA68"+
+            "\uAA69\uAA6A\uAA6B\uAA6C\uAA6D\uAA6E\uAA6F\uAA70"+
+            "\uAA71\uAA73\uAA74\uAA75\uAA76\uAA77\uAA78\uAA79"+
+            "\uAA7A\uAA7B\uAA7C\uAA7D\uAA81\uAA82\uAA83\uAA84"+
+            "\uAA85\uAA86\uAA87\uAA88\uAA89\uAA8A\uAA8B\uAA8C"+
+            "\uAA8D\uAA8E\uAA8F\uAA90\uAA91\uAA93\uAA94\uAA95"+
+            "\uAA96\uAA97\uAA98\uAA99\uAA9A\uAA9B\uAA9C\uAA9D"+
+            "\uAAA1\uAAA2\uAAA3\uAAA4\uAAA5\uAAA6\uAAA7\uAAA8"+
+            "\uAAA9\uAAAA\uAAAB\uAAAC\uAAAD\uAAAE\uAAAF\uAAB0"+
+            "\uAAB1\uAAB3\uAAB4\uAAB5\uAAB6\uAAB7\uAAB8\uAAB9"+
+            "\uAABA\uAABB\uAABC\uAABD\uAAC1\uAAC2\uAAC3\uAAC4"+
+            "\uAAC5\uAAC6\uAAC7\uAAC8\uAAC9\uAACA\uAACB\uAACC"+
+            "\uAACD\uAACE\uAACF\uAAD0\uAAD1\uAAD3\uAAD4\uAAD5"+
+            "\uAAD6\uAAD7\uAAD8\uAAD9\uAADA\uAADB\uAADC\uAADD"+
+            "\uAAE1\uAAE2\uAAE3\uAAE4\uAAE5\uAAE6\uAAE7\uAAE8"+
+            "\uAAE9\uAAEA\uAAEB\uAAEC\uAAED\uAAEE\uAAEF\uAAF0"+
+            "\uAAF1\uAAF3\uAAF4\uAAF5\uAAF6\uAAF7\uAAF8\uAAF9"+
+            "\uAAFA\uAAFB\uAAFC\uAAFD\uAB41\uAB42\uAB43\uAB44"+
+            "\uAB45\uAB46\uAB47\uAB48\uAB49\uAB4A\uAB4B\uAB4C"+
+            "\uAB4D\uAB4E\uAB4F\uAB50\uAB51\uAB53\uAB54\uAB55"+
+            "\uAB56\uAB57\uAB58\uAB59\uAB5A\uAB5B\uAB5C\uAB5D"+
+            "\uAB61\uAB62\uAB63\uAB64\uAB65\uAB66\uAB67\uAB68"+
+            "\uAB69\uAB6A\uAB6B\uAB6C\uAB6D\uAB6E\uAB6F\uAB70"+
+            "\uAB71\uAB73\uAB74\uAB75\uAB76\uAB77\uAB78\uAB79"+
+            "\uAB7A\uAB7B\uAB7C\uAB7D\uAB81\uAB82\uAB83\uAB84"+
+            "\uAB85\uAB86\uAB87\uAB88\uAB89\uAB8A\uAB8B\uAB8C"+
+            "\uAB8D\uAB8E\uAB8F\uAB90\uAB91\uAB93\uAB94\uAB95"+
+            "\uAB96\uAB97\uAB98\uAB99\uAB9A\uAB9B\uAB9C\uAB9D"+
+            "\uABA1\uABA2\uABA3\uABA4\uABA5\uABA6\uABA7\uABA8"+
+            "\uABA9\uABAA\uABAB\uABAC\uABAD\uABAE\uABAF\uABB0"+
+            "\uABB1\uABB3\uABB4\uABB5\uABB6\uABB7\uABB8\uABB9"+
+            "\uABBA\uABBB\uABBC\uABBD\uAC61\uAC62\uAC63\uAC64"+
+            "\uAC65\uAC66\uAC67\uAC68\uAC69\uAC6A\uAC6B\uAC6C"+
+            "\uAC6D\uAC6E\uAC6F\uAC70\uAC71\uAC73\uAC74\uAC75"+
+            "\uAC76\uAC77\uAC78\uAC79\uAC7A\uAC7B\uAC7C\uAC7D"+
+            "\uAC81\uAC82\uAC83\uAC84\uAC85\uAC86\uAC87\uAC88"+
+            "\uAC89\uAC8A\uAC8B\uAC8C\uAC8D\uAC8E\uAC8F\uAC90"+
+            "\uAC91\uAC93\uAC94\uAC95\uAC96\uAC97\uAC98\uAC99"+
+            "\uAC9A\uAC9B\uAC9C\uAC9D\uACA1\uACA2\uACA3\uACA4"+
+            "\uACA5\uACA6\uACA7\uACA8\uACA9\uACAA\uACAB\uACAC"+
+            "\uACAD\uACAE\uACAF\uACB0\uACB1\uACB3\uACB4\uACB5"+
+            "\uACB6\uACB7\uACB8\uACB9\uACBA\uACBB\uACBC\uACBD"+
+            "\uACC1\uACC2\uACC3\uACC4\uACC5\uACC6\uACC7\uACC8"+
+            "\uACC9\uACCA\uACCB\uACCC\uACCD\uACCE\uACCF\uACD0"+
+            "\uACD1\uACD3\uACD4\uACD5\uACD6\uACD7\uACD8\uACD9"+
+            "\uACDA\uACDB\uACDC\uACDD\uACE1\uACE2\uACE3\uACE4"+
+            "\uACE5\uACE6\uACE7\uACE8\uACE9\uACEA\uACEB\uACEC"+
+            "\uACED\uACEE\uACEF\uACF0\uACF1\uACF3\uACF4\uACF5"+
+            "\uACF6\uACF7\uACF8\uACF9\uACFA\uACFB\uACFC\uACFD"+
+            "\uAD41\uAD42\uAD43\uAD44\uAD45\uAD46\uAD47\uAD48"+
+            "\uAD49\uAD4A\uAD4B\uAD4C\uAD4D\uAD4E\uAD4F\uAD50"+
+            "\uAD51\uAD53\uAD54\uAD55\uAD56\uAD57\uAD58\uAD59"+
+            "\uAD5A\uAD5B\uAD5C\uAD5D\uAD61\uAD62\uAD63\uAD64"+
+            "\uAD65\uAD66\uAD67\uAD68\uAD69\uAD6A\uAD6B\uAD6C"+
+            "\uAD6D\uAD6E\uAD6F\uAD70\uAD71\uAD73\uAD74\uAD75"+
+            "\uAD76\uAD77\uAD78\uAD79\uAD7A\uAD7B\uAD7C\uAD7D"+
+            "\uAD81\uAD82\uAD83\uAD84\uAD85\uAD86\uAD87\uAD88"+
+            "\uAD89\uAD8A\uAD8B\uAD8C\uAD8D\uAD8E\uAD8F\uAD90"+
+            "\uAD91\uAD93\uAD94\uAD95\uAD96\uAD97\uAD98\uAD99"+
+            "\uAD9A\uAD9B\uAD9C\uAD9D\uADA1\uADA2\uADA3\uADA4"+
+            "\uADA5\uADA6\uADA7\uADA8\uADA9\uADAA\uADAB\uADAC"+
+            "\uADAD\uADAE\uADAF\uADB0\uADB1\uADB3\uADB4\uADB5"+
+            "\uADB6\uADB7\uADB8\uADB9\uADBA\uADBB\uADBC\uADBD"+
+            "\uADC1\uADC2\uADC3\uADC4\uADC5\uADC6\uADC7\uADC8"+
+            "\uADC9\uADCA\uADCB\uADCC\uADCD\uADCE\uADCF\uADD0"+
+            "\uADD1\uADD3\uADD4\uADD5\uADD6\uADD7\uADD8\uADD9"+
+            "\uADDA\uADDB\uADDC\uADDD\uADE1\uADE2\uADE3\uADE4"+
+            "\uADE5\uADE6\uADE7\uADE8\uADE9\uADEA\uADEB\uADEC"+
+            "\uADED\uADEE\uADEF\uADF0\uADF1\uADF3\uADF4\uADF5"+
+            "\uADF6\uADF7\uADF8\uADF9\uADFA\uADFB\uADFC\uADFD"+
+            "\uAE41\uAE42\uAE43\uAE44\uAE45\uAE46\uAE47\uAE48"+
+            "\uAE49\uAE4A\uAE4B\uAE4C\uAE4D\uAE4E\uAE4F\uAE50"+
+            "\uAE51\uAE53\uAE54\uAE55\uAE56\uAE57\uAE58\uAE59"+
+            "\uAE5A\uAE5B\uAE5C\uAE5D\uAE61\uAE62\uAE63\uAE64"+
+            "\uAE65\uAE66\uAE67\uAE68\uAE69\uAE6A\uAE6B\uAE6C"+
+            "\uAE6D\uAE6E\uAE6F\uAE70\uAE71\uAE73\uAE74\uAE75"+
+            "\uAE76\uAE77\uAE78\uAE79\uAE7A\uAE7B\uAE7C\uAE7D"+
+            "\uAE81\uAE82\uAE83\uAE84\uAE85\uAE86\uAE87\uAE88"+
+            "\uAE89\uAE8A\uAE8B\uAE8C\uAE8D\uAE8E\uAE8F\uAE90"+
+            "\uAE91\uAE93\uAE94\uAE95\uAE96\uAE97\uAE98\uAE99"+
+            "\uAE9A\uAE9B\uAE9C\uAE9D\uAEA1\uAEA2\uAEA3\uAEA4"+
+            "\uAEA5\uAEA6\uAEA7\uAEA8\uAEA9\uAEAA\uAEAB\uAEAC"+
+            "\uAEAD\uAEAE\uAEAF\uAEB0\uAEB1\uAEB3\uAEB4\uAEB5"+
+            "\uAEB6\uAEB7\uAEB8\uAEB9\uAEBA\uAEBB\uAEBC\uAEBD"+
+            "\uAEC1\uAEC2\uAEC3\uAEC4\uAEC5\uAEC6\uAEC7\uAEC8"+
+            "\uAEC9\uAECA\uAECB\uAECC\uAECD\uAECE\uAECF\uAED0"+
+            "\uAED1\uAED3\uAED4\uAED5\uAED6\uAED7\uAED8\uAED9"+
+            "\uAEDA\uAEDB\uAEDC\uAEDD\uAEE1\uAEE2\uAEE3\uAEE4"+
+            "\uAEE5\uAEE6\uAEE7\uAEE8\uAEE9\uAEEA\uAEEB\uAEEC"+
+            "\uAEED\uAEEE\uAEEF\uAEF0\uAEF1\uAEF3\uAEF4\uAEF5"+
+            "\uAEF6\uAEF7\uAEF8\uAEF9\uAEFA\uAEFB\uAEFC\uAEFD"+
+            "\uAF41\uAF42\uAF43\uAF44\uAF45\uAF46\uAF47\uAF48"+
+            "\uAF49\uAF4A\uAF4B\uAF4C\uAF4D\uAF4E\uAF4F\uAF50"+
+            "\uAF51\uAF53\uAF54\uAF55\uAF56\uAF57\uAF58\uAF59"+
+            "\uAF5A\uAF5B\uAF5C\uAF5D\uAF61\uAF62\uAF63\uAF64"+
+            "\uAF65\uAF66\uAF67\uAF68\uAF69\uAF6A\uAF6B\uAF6C"+
+            "\uAF6D\uAF6E\uAF6F\uAF70\uAF71\uAF73\uAF74\uAF75"+
+            "\uAF76\uAF77\uAF78\uAF79\uAF7A\uAF7B\uAF7C\uAF7D"+
+            "\uAF81\uAF82\uAF83\uAF84\uAF85\uAF86\uAF87\uAF88"+
+            "\uAF89\uAF8A\uAF8B\uAF8C\uAF8D\uAF8E\uAF8F\uAF90"+
+            "\uAF91\uAF93\uAF94\uAF95\uAF96\uAF97\uAF98\uAF99"+
+            "\uAF9A\uAF9B\uAF9C\uAF9D\uAFA1\uAFA2\uAFA3\uAFA4"+
+            "\uAFA5\uAFA6\uAFA7\uAFA8\uAFA9\uAFAA\uAFAB\uAFAC"+
+            "\uAFAD\uAFAE\uAFAF\uAFB0\uAFB1\uAFB3\uAFB4\uAFB5"+
+            "\uAFB6\uAFB7\uAFB8\uAFB9\uAFBA\uAFBB\uAFBC\uAFBD"+
+            "\uB061\uB062\uB063\uB064\uB065\uB066\uB067\uB068"+
+            "\uB069\uB06A\uB06B\uB06C\uB06D\uB06E\uB06F\uB070"+
+            "\uB071\uB073\uB074\uB075\uB076\uB077\uB078\uB079"+
+            "\uB07A\uB07B\uB07C\uB07D\uB081\uB082\uB083\uB084"+
+            "\uB085\uB086\uB087\uB088\uB089\uB08A\uB08B\uB08C"+
+            "\uB08D\uB08E\uB08F\uB090\uB091\uB093\uB094\uB095"+
+            "\uB096\uB097\uB098\uB099\uB09A\uB09B\uB09C\uB09D"+
+            "\uB0A1\uB0A2\uB0A3\uB0A4\uB0A5\uB0A6\uB0A7\uB0A8"+
+            "\uB0A9\uB0AA\uB0AB\uB0AC\uB0AD\uB0AE\uB0AF\uB0B0"+
+            "\uB0B1\uB0B3\uB0B4\uB0B5\uB0B6\uB0B7\uB0B8\uB0B9"+
+            "\uB0BA\uB0BB\uB0BC\uB0BD\uB0C1\uB0C2\uB0C3\uB0C4"+
+            "\uB0C5\uB0C6\uB0C7\uB0C8\uB0C9\uB0CA\uB0CB\uB0CC"+
+            "\uB0CD\uB0CE\uB0CF\uB0D0\uB0D1\uB0D3\uB0D4\uB0D5"+
+            "\uB0D6\uB0D7\uB0D8\uB0D9\uB0DA\uB0DB\uB0DC\uB0DD"+
+            "\uB0E1\uB0E2\uB0E3\uB0E4\uB0E5\uB0E6\uB0E7\uB0E8"+
+            "\uB0E9\uB0EA\uB0EB\uB0EC\uB0ED\uB0EE\uB0EF\uB0F0"+
+            "\uB0F1\uB0F3\uB0F4\uB0F5\uB0F6\uB0F7\uB0F8\uB0F9"+
+            "\uB0FA\uB0FB\uB0FC\uB0FD\uB141\uB142\uB143\uB144"+
+            "\uB145\uB146\uB147\uB148\uB149\uB14A\uB14B\uB14C"+
+            "\uB14D\uB14E\uB14F\uB150\uB151\uB153\uB154\uB155"+
+            "\uB156\uB157\uB158\uB159\uB15A\uB15B\uB15C\uB15D"+
+            "\uB161\uB162\uB163\uB164\uB165\uB166\uB167\uB168"+
+            "\uB169\uB16A\uB16B\uB16C\uB16D\uB16E\uB16F\uB170"+
+            "\uB171\uB173\uB174\uB175\uB176\uB177\uB178\uB179"+
+            "\uB17A\uB17B\uB17C\uB17D\uB181\uB182\uB183\uB184"+
+            "\uB185\uB186\uB187\uB188\uB189\uB18A\uB18B\uB18C"+
+            "\uB18D\uB18E\uB18F\uB190\uB191\uB193\uB194\uB195"+
+            "\uB196\uB197\uB198\uB199\uB19A\uB19B\uB19C\uB19D"+
+            "\uB1A1\uB1A2\uB1A3\uB1A4\uB1A5\uB1A6\uB1A7\uB1A8"+
+            "\uB1A9\uB1AA\uB1AB\uB1AC\uB1AD\uB1AE\uB1AF\uB1B0"+
+            "\uB1B1\uB1B3\uB1B4\uB1B5\uB1B6\uB1B7\uB1B8\uB1B9"+
+            "\uB1BA\uB1BB\uB1BC\uB1BD\uB1C1\uB1C2\uB1C3\uB1C4"+
+            "\uB1C5\uB1C6\uB1C7\uB1C8\uB1C9\uB1CA\uB1CB\uB1CC"+
+            "\uB1CD\uB1CE\uB1CF\uB1D0\uB1D1\uB1D3\uB1D4\uB1D5"+
+            "\uB1D6\uB1D7\uB1D8\uB1D9\uB1DA\uB1DB\uB1DC\uB1DD"+
+            "\uB1E1\uB1E2\uB1E3\uB1E4\uB1E5\uB1E6\uB1E7\uB1E8"+
+            "\uB1E9\uB1EA\uB1EB\uB1EC\uB1ED\uB1EE\uB1EF\uB1F0"+
+            "\uB1F1\uB1F3\uB1F4\uB1F5\uB1F6\uB1F7\uB1F8\uB1F9"+
+            "\uB1FA\uB1FB\uB1FC\uB1FD\uB241\uB242\uB243\uB244"+
+            "\uB245\uB246\uB247\uB248\uB249\uB24A\uB24B\uB24C"+
+            "\uB24D\uB24E\uB24F\uB250\uB251\uB253\uB254\uB255"+
+            "\uB256\uB257\uB258\uB259\uB25A\uB25B\uB25C\uB25D"+
+            "\uB261\uB262\uB263\uB264\uB265\uB266\uB267\uB268"+
+            "\uB269\uB26A\uB26B\uB26C\uB26D\uB26E\uB26F\uB270"+
+            "\uB271\uB273\uB274\uB275\uB276\uB277\uB278\uB279"+
+            "\uB27A\uB27B\uB27C\uB27D\uB281\uB282\uB283\uB284"+
+            "\uB285\uB286\uB287\uB288\uB289\uB28A\uB28B\uB28C"+
+            "\uB28D\uB28E\uB28F\uB290\uB291\uB293\uB294\uB295"+
+            "\uB296\uB297\uB298\uB299\uB29A\uB29B\uB29C\uB29D"+
+            "\uB2A1\uB2A2\uB2A3\uB2A4\uB2A5\uB2A6\uB2A7\uB2A8"+
+            "\uB2A9\uB2AA\uB2AB\uB2AC\uB2AD\uB2AE\uB2AF\uB2B0"+
+            "\uB2B1\uB2B3\uB2B4\uB2B5\uB2B6\uB2B7\uB2B8\uB2B9"+
+            "\uB2BA\uB2BB\uB2BC\uB2BD\uB2C1\uB2C2\uB2C3\uB2C4"+
+            "\uB2C5\uB2C6\uB2C7\uB2C8\uB2C9\uB2CA\uB2CB\uB2CC"+
+            "\uB2CD\uB2CE\uB2CF\uB2D0\uB2D1\uB2D3\uB2D4\uB2D5"+
+            "\uB2D6\uB2D7\uB2D8\uB2D9\uB2DA\uB2DB\uB2DC\uB2DD"+
+            "\uB2E1\uB2E2\uB2E3\uB2E4\uB2E5\uB2E6\uB2E7\uB2E8"+
+            "\uB2E9\uB2EA\uB2EB\uB2EC\uB2ED\uB2EE\uB2EF\uB2F0"+
+            "\uB2F1\uB2F3\uB2F4\uB2F5\uB2F6\uB2F7\uB2F8\uB2F9"+
+            "\uB2FA\uB2FB\uB2FC\uB2FD\uB341\uB342\uB343\uB344"+
+            "\uB345\uB346\uB347\uB348\uB349\uB34A\uB34B\uB34C"+
+            "\uB34D\uB34E\uB34F\uB350\uB351\uB353\uB354\uB355"+
+            "\uB356\uB357\uB358\uB359\uB35A\uB35B\uB35C\uB35D"+
+            "\uB361\uB362\uB363\uB364\uB365\uB366\uB367\uB368"+
+            "\uB369\uB36A\uB36B\uB36C\uB36D\uB36E\uB36F\uB370"+
+            "\uB371\uB373\uB374\uB375\uB376\uB377\uB378\uB379"+
+            "\uB37A\uB37B\uB37C\uB37D\uB381\uB382\uB383\uB384"+
+            "\uB385\uB386\uB387\uB388\uB389\uB38A\uB38B\uB38C"+
+            "\uB38D\uB38E\uB38F\uB390\uB391\uB393\uB394\uB395"+
+            "\uB396\uB397\uB398\uB399\uB39A\uB39B\uB39C\uB39D"+
+            "\uB3A1\uB3A2\uB3A3\uB3A4\uB3A5\uB3A6\uB3A7\uB3A8"+
+            "\uB3A9\uB3AA\uB3AB\uB3AC\uB3AD\uB3AE\uB3AF\uB3B0"+
+            "\uB3B1\uB3B3\uB3B4\uB3B5\uB3B6\uB3B7\uB3B8\uB3B9"+
+            "\uB3BA\uB3BB\uB3BC\uB3BD\uB461\uB462\uB463\uB464"+
+            "\uB465\uB466\uB467\uB468\uB469\uB46A\uB46B\uB46C"+
+            "\uB46D\uB46E\uB46F\uB470\uB471\uB473\uB474\uB475"+
+            "\uB476\uB477\uB478\uB479\uB47A\uB47B\uB47C\uB47D"+
+            "\uB481\uB482\uB483\uB484\uB485\uB486\uB487\uB488"+
+            "\uB489\uB48A\uB48B\uB48C\uB48D\uB48E\uB48F\uB490"+
+            "\uB491\uB493\uB494\uB495\uB496\uB497\uB498\uB499"+
+            "\uB49A\uB49B\uB49C\uB49D\uB4A1\uB4A2\uB4A3\uB4A4"+
+            "\uB4A5\uB4A6\uB4A7\uB4A8\uB4A9\uB4AA\uB4AB\uB4AC"+
+            "\uB4AD\uB4AE\uB4AF\uB4B0\uB4B1\uB4B3\uB4B4\uB4B5"+
+            "\uB4B6\uB4B7\uB4B8\uB4B9\uB4BA\uB4BB\uB4BC\uB4BD"+
+            "\uB4C1\uB4C2\uB4C3\uB4C4\uB4C5\uB4C6\uB4C7\uB4C8"+
+            "\uB4C9\uB4CA\uB4CB\uB4CC\uB4CD\uB4CE\uB4CF\uB4D0"+
+            "\uB4D1\uB4D3\uB4D4\uB4D5\uB4D6\uB4D7\uB4D8\uB4D9"+
+            "\uB4DA\uB4DB\uB4DC\uB4DD\uB4E1\uB4E2\uB4E3\uB4E4"+
+            "\uB4E5\uB4E6\uB4E7\uB4E8\uB4E9\uB4EA\uB4EB\uB4EC"+
+            "\uB4ED\uB4EE\uB4EF\uB4F0\uB4F1\uB4F3\uB4F4\uB4F5"+
+            "\uB4F6\uB4F7\uB4F8\uB4F9\uB4FA\uB4FB\uB4FC\uB4FD"+
+            "\uB541\uB542\uB543\uB544\uB545\uB546\uB547\uB548"+
+            "\uB549\uB54A\uB54B\uB54C\uB54D\uB54E\uB54F\uB550"+
+            "\uB551\uB553\uB554\uB555\uB556\uB557\uB558\uB559"+
+            "\uB55A\uB55B\uB55C\uB55D\uB561\uB562\uB563\uB564"+
+            "\uB565\uB566\uB567\uB568\uB569\uB56A\uB56B\uB56C"+
+            "\uB56D\uB56E\uB56F\uB570\uB571\uB573\uB574\uB575"+
+            "\uB576\uB577\uB578\uB579\uB57A\uB57B\uB57C\uB57D"+
+            "\uB581\uB582\uB583\uB584\uB585\uB586\uB587\uB588"+
+            "\uB589\uB58A\uB58B\uB58C\uB58D\uB58E\uB58F\uB590"+
+            "\uB591\uB593\uB594\uB595\uB596\uB597\uB598\uB599"+
+            "\uB59A\uB59B\uB59C\uB59D\uB5A1\uB5A2\uB5A3\uB5A4"+
+            "\uB5A5\uB5A6\uB5A7\uB5A8\uB5A9\uB5AA\uB5AB\uB5AC"+
+            "\uB5AD\uB5AE\uB5AF\uB5B0\uB5B1\uB5B3\uB5B4\uB5B5"+
+            "\uB5B6\uB5B7\uB5B8\uB5B9\uB5BA\uB5BB\uB5BC\uB5BD"+
+            "\uB5C1\uB5C2\uB5C3\uB5C4\uB5C5\uB5C6\uB5C7\uB5C8"+
+            "\uB5C9\uB5CA\uB5CB\uB5CC\uB5CD\uB5CE\uB5CF\uB5D0"+
+            "\uB5D1\uB5D3\uB5D4\uB5D5\uB5D6\uB5D7\uB5D8\uB5D9"+
+            "\uB5DA\uB5DB\uB5DC\uB5DD\uB5E1\uB5E2\uB5E3\uB5E4"+
+            "\uB5E5\uB5E6\uB5E7\uB5E8\uB5E9\uB5EA\uB5EB\uB5EC"+
+            "\uB5ED\uB5EE\uB5EF\uB5F0\uB5F1\uB5F3\uB5F4\uB5F5"+
+            "\uB5F6\uB5F7\uB5F8\uB5F9\uB5FA\uB5FB\uB5FC\uB5FD"+
+            "\uB641\uB642\uB643\uB644\uB645\uB646\uB647\uB648"+
+            "\uB649\uB64A\uB64B\uB64C\uB64D\uB64E\uB64F\uB650"+
+            "\uB651\uB653\uB654\uB655\uB656\uB657\uB658\uB659"+
+            "\uB65A\uB65B\uB65C\uB65D\uB661\uB662\uB663\uB664"+
+            "\uB665\uB666\uB667\uB668\uB669\uB66A\uB66B\uB66C"+
+            "\uB66D\uB66E\uB66F\uB670\uB671\uB673\uB674\uB675"+
+            "\uB676\uB677\uB678\uB679\uB67A\uB67B\uB67C\uB67D"+
+            "\uB681\uB682\uB683\uB684\uB685\uB686\uB687\uB688"+
+            "\uB689\uB68A\uB68B\uB68C\uB68D\uB68E\uB68F\uB690"+
+            "\uB691\uB693\uB694\uB695\uB696\uB697\uB698\uB699"+
+            "\uB69A\uB69B\uB69C\uB69D\uB6A1\uB6A2\uB6A3\uB6A4"+
+            "\uB6A5\uB6A6\uB6A7\uB6A8\uB6A9\uB6AA\uB6AB\uB6AC"+
+            "\uB6AD\uB6AE\uB6AF\uB6B0\uB6B1\uB6B3\uB6B4\uB6B5"+
+            "\uB6B6\uB6B7\uB6B8\uB6B9\uB6BA\uB6BB\uB6BC\uB6BD"+
+            "\uB6C1\uB6C2\uB6C3\uB6C4\uB6C5\uB6C6\uB6C7\uB6C8"+
+            "\uB6C9\uB6CA\uB6CB\uB6CC\uB6CD\uB6CE\uB6CF\uB6D0"+
+            "\uB6D1\uB6D3\uB6D4\uB6D5\uB6D6\uB6D7\uB6D8\uB6D9"+
+            "\uB6DA\uB6DB\uB6DC\uB6DD\uB6E1\uB6E2\uB6E3\uB6E4"+
+            "\uB6E5\uB6E6\uB6E7\uB6E8\uB6E9\uB6EA\uB6EB\uB6EC"+
+            "\uB6ED\uB6EE\uB6EF\uB6F0\uB6F1\uB6F3\uB6F4\uB6F5"+
+            "\uB6F6\uB6F7\uB6F8\uB6F9\uB6FA\uB6FB\uB6FC\uB6FD"+
+            "\uB741\uB742\uB743\uB744\uB745\uB746\uB747\uB748"+
+            "\uB749\uB74A\uB74B\uB74C\uB74D\uB74E\uB74F\uB750"+
+            "\uB751\uB753\uB754\uB755\uB756\uB757\uB758\uB759"+
+            "\uB75A\uB75B\uB75C\uB75D\uB761\uB762\uB763\uB764"+
+            "\uB765\uB766\uB767\uB768\uB769\uB76A\uB76B\uB76C"+
+            "\uB76D\uB76E\uB76F\uB770\uB771\uB773\uB774\uB775"+
+            "\uB776\uB777\uB778\uB779\uB77A\uB77B\uB77C\uB77D"+
+            "\uB781\uB782\uB783\uB784\uB785\uB786\uB787\uB788"+
+            "\uB789\uB78A\uB78B\uB78C\uB78D\uB78E\uB78F\uB790"+
+            "\uB791\uB793\uB794\uB795\uB796\uB797\uB798\uB799"+
+            "\uB79A\uB79B\uB79C\uB79D\uB7A1\uB7A2\uB7A3\uB7A4"+
+            "\uB7A5\uB7A6\uB7A7\uB7A8\uB7A9\uB7AA\uB7AB\uB7AC"+
+            "\uB7AD\uB7AE\uB7AF\uB7B0\uB7B1\uB7B3\uB7B4\uB7B5"+
+            "\uB7B6\uB7B7\uB7B8\uB7B9\uB7BA\uB7BB\uB7BC\uB7BD"+
+            "\uB861\uB862\uB863\uB864\uB865\uB866\uB867\uB868"+
+            "\uB869\uB86A\uB86B\uB86C\uB86D\uB86E\uB86F\uB870"+
+            "\uB871\uB873\uB874\uB875\uB876\uB877\uB878\uB879"+
+            "\uB87A\uB87B\uB87C\uB87D\uB881\uB882\uB883\uB884"+
+            "\uB885\uB886\uB887\uB888\uB889\uB88A\uB88B\uB88C"+
+            "\uB88D\uB88E\uB88F\uB890\uB891\uB893\uB894\uB895"+
+            "\uB896\uB897\uB898\uB899\uB89A\uB89B\uB89C\uB89D"+
+            "\uB8A1\uB8A2\uB8A3\uB8A4\uB8A5\uB8A6\uB8A7\uB8A8"+
+            "\uB8A9\uB8AA\uB8AB\uB8AC\uB8AD\uB8AE\uB8AF\uB8B0"+
+            "\uB8B1\uB8B3\uB8B4\uB8B5\uB8B6\uB8B7\uB8B8\uB8B9"+
+            "\uB8BA\uB8BB\uB8BC\uB8BD\uB8C1\uB8C2\uB8C3\uB8C4"+
+            "\uB8C5\uB8C6\uB8C7\uB8C8\uB8C9\uB8CA\uB8CB\uB8CC"+
+            "\uB8CD\uB8CE\uB8CF\uB8D0\uB8D1\uB8D3\uB8D4\uB8D5"+
+            "\uB8D6\uB8D7\uB8D8\uB8D9\uB8DA\uB8DB\uB8DC\uB8DD"+
+            "\uB8E1\uB8E2\uB8E3\uB8E4\uB8E5\uB8E6\uB8E7\uB8E8"+
+            "\uB8E9\uB8EA\uB8EB\uB8EC\uB8ED\uB8EE\uB8EF\uB8F0"+
+            "\uB8F1\uB8F3\uB8F4\uB8F5\uB8F6\uB8F7\uB8F8\uB8F9"+
+            "\uB8FA\uB8FB\uB8FC\uB8FD\uB941\uB942\uB943\uB944"+
+            "\uB945\uB946\uB947\uB948\uB949\uB94A\uB94B\uB94C"+
+            "\uB94D\uB94E\uB94F\uB950\uB951\uB953\uB954\uB955"+
+            "\uB956\uB957\uB958\uB959\uB95A\uB95B\uB95C\uB95D"+
+            "\uB961\uB962\uB963\uB964\uB965\uB966\uB967\uB968"+
+            "\uB969\uB96A\uB96B\uB96C\uB96D\uB96E\uB96F\uB970"+
+            "\uB971\uB973\uB974\uB975\uB976\uB977\uB978\uB979"+
+            "\uB97A\uB97B\uB97C\uB97D\uB981\uB982\uB983\uB984"+
+            "\uB985\uB986\uB987\uB988\uB989\uB98A\uB98B\uB98C"+
+            "\uB98D\uB98E\uB98F\uB990\uB991\uB993\uB994\uB995"+
+            "\uB996\uB997\uB998\uB999\uB99A\uB99B\uB99C\uB99D"+
+            "\uB9A1\uB9A2\uB9A3\uB9A4\uB9A5\uB9A6\uB9A7\uB9A8"+
+            "\uB9A9\uB9AA\uB9AB\uB9AC\uB9AD\uB9AE\uB9AF\uB9B0"+
+            "\uB9B1\uB9B3\uB9B4\uB9B5\uB9B6\uB9B7\uB9B8\uB9B9"+
+            "\uB9BA\uB9BB\uB9BC\uB9BD\uB9C1\uB9C2\uB9C3\uB9C4"+
+            "\uB9C5\uB9C6\uB9C7\uB9C8\uB9C9\uB9CA\uB9CB\uB9CC"+
+            "\uB9CD\uB9CE\uB9CF\uB9D0\uB9D1\uB9D3\uB9D4\uB9D5"+
+            "\uB9D6\uB9D7\uB9D8\uB9D9\uB9DA\uB9DB\uB9DC\uB9DD"+
+            "\uB9E1\uB9E2\uB9E3\uB9E4\uB9E5\uB9E6\uB9E7\uB9E8"+
+            "\uB9E9\uB9EA\uB9EB\uB9EC\uB9ED\uB9EE\uB9EF\uB9F0"+
+            "\uB9F1\uB9F3\uB9F4\uB9F5\uB9F6\uB9F7\uB9F8\uB9F9"+
+            "\uB9FA\uB9FB\uB9FC\uB9FD\uBA41\uBA42\uBA43\uBA44"+
+            "\uBA45\uBA46\uBA47\uBA48\uBA49\uBA4A\uBA4B\uBA4C"+
+            "\uBA4D\uBA4E\uBA4F\uBA50\uBA51\uBA53\uBA54\uBA55"+
+            "\uBA56\uBA57\uBA58\uBA59\uBA5A\uBA5B\uBA5C\uBA5D"+
+            "\uBA61\uBA62\uBA63\uBA64\uBA65\uBA66\uBA67\uBA68"+
+            "\uBA69\uBA6A\uBA6B\uBA6C\uBA6D\uBA6E\uBA6F\uBA70"+
+            "\uBA71\uBA73\uBA74\uBA75\uBA76\uBA77\uBA78\uBA79"+
+            "\uBA7A\uBA7B\uBA7C\uBA7D\uBA81\uBA82\uBA83\uBA84";
+
+        private final static String innerIndex8=
+            "\uBA85\uBA86\uBA87\uBA88\uBA89\uBA8A\uBA8B\uBA8C"+
+            "\uBA8D\uBA8E\uBA8F\uBA90\uBA91\uBA93\uBA94\uBA95"+
+            "\uBA96\uBA97\uBA98\uBA99\uBA9A\uBA9B\uBA9C\uBA9D"+
+            "\uBAA1\uBAA2\uBAA3\uBAA4\uBAA5\uBAA6\uBAA7\uBAA8"+
+            "\uBAA9\uBAAA\uBAAB\uBAAC\uBAAD\uBAAE\uBAAF\uBAB0"+
+            "\uBAB1\uBAB3\uBAB4\uBAB5\uBAB6\uBAB7\uBAB8\uBAB9"+
+            "\uBABA\uBABB\uBABC\uBABD\uBAC1\uBAC2\uBAC3\uBAC4"+
+            "\uBAC5\uBAC6\uBAC7\uBAC8\uBAC9\uBACA\uBACB\uBACC"+
+            "\uBACD\uBACE\uBACF\uBAD0\uBAD1\uBAD3\uBAD4\uBAD5"+
+            "\uBAD6\uBAD7\uBAD8\uBAD9\uBADA\uBADB\uBADC\uBADD"+
+            "\uBAE1\uBAE2\uBAE3\uBAE4\uBAE5\uBAE6\uBAE7\uBAE8"+
+            "\uBAE9\uBAEA\uBAEB\uBAEC\uBAED\uBAEE\uBAEF\uBAF0"+
+            "\uBAF1\uBAF3\uBAF4\uBAF5\uBAF6\uBAF7\uBAF8\uBAF9"+
+            "\uBAFA\uBAFB\uBAFC\uBAFD\uBB41\uBB42\uBB43\uBB44"+
+            "\uBB45\uBB46\uBB47\uBB48\uBB49\uBB4A\uBB4B\uBB4C"+
+            "\uBB4D\uBB4E\uBB4F\uBB50\uBB51\uBB53\uBB54\uBB55"+
+            "\uBB56\uBB57\uBB58\uBB59\uBB5A\uBB5B\uBB5C\uBB5D"+
+            "\uBB61\uBB62\uBB63\uBB64\uBB65\uBB66\uBB67\uBB68"+
+            "\uBB69\uBB6A\uBB6B\uBB6C\uBB6D\uBB6E\uBB6F\uBB70"+
+            "\uBB71\uBB73\uBB74\uBB75\uBB76\uBB77\uBB78\uBB79"+
+            "\uBB7A\uBB7B\uBB7C\uBB7D\uBB81\uBB82\uBB83\uBB84"+
+            "\uBB85\uBB86\uBB87\uBB88\uBB89\uBB8A\uBB8B\uBB8C"+
+            "\uBB8D\uBB8E\uBB8F\uBB90\uBB91\uBB93\uBB94\uBB95"+
+            "\uBB96\uBB97\uBB98\uBB99\uBB9A\uBB9B\uBB9C\uBB9D"+
+            "\uBBA1\uBBA2\uBBA3\uBBA4\uBBA5\uBBA6\uBBA7\uBBA8"+
+            "\uBBA9\uBBAA\uBBAB\uBBAC\uBBAD\uBBAE\uBBAF\uBBB0"+
+            "\uBBB1\uBBB3\uBBB4\uBBB5\uBBB6\uBBB7\uBBB8\uBBB9"+
+            "\uBBBA\uBBBB\uBBBC\uBBBD\uBC61\uBC62\uBC63\uBC64"+
+            "\uBC65\uBC66\uBC67\uBC68\uBC69\uBC6A\uBC6B\uBC6C"+
+            "\uBC6D\uBC6E\uBC6F\uBC70\uBC71\uBC73\uBC74\uBC75"+
+            "\uBC76\uBC77\uBC78\uBC79\uBC7A\uBC7B\uBC7C\uBC7D"+
+            "\uBC81\uBC82\uBC83\uBC84\uBC85\uBC86\uBC87\uBC88"+
+            "\uBC89\uBC8A\uBC8B\uBC8C\uBC8D\uBC8E\uBC8F\uBC90"+
+            "\uBC91\uBC93\uBC94\uBC95\uBC96\uBC97\uBC98\uBC99"+
+            "\uBC9A\uBC9B\uBC9C\uBC9D\uBCA1\uBCA2\uBCA3\uBCA4"+
+            "\uBCA5\uBCA6\uBCA7\uBCA8\uBCA9\uBCAA\uBCAB\uBCAC"+
+            "\uBCAD\uBCAE\uBCAF\uBCB0\uBCB1\uBCB3\uBCB4\uBCB5"+
+            "\uBCB6\uBCB7\uBCB8\uBCB9\uBCBA\uBCBB\uBCBC\uBCBD"+
+            "\uBCC1\uBCC2\uBCC3\uBCC4\uBCC5\uBCC6\uBCC7\uBCC8"+
+            "\uBCC9\uBCCA\uBCCB\uBCCC\uBCCD\uBCCE\uBCCF\uBCD0"+
+            "\uBCD1\uBCD3\uBCD4\uBCD5\uBCD6\uBCD7\uBCD8\uBCD9"+
+            "\uBCDA\uBCDB\uBCDC\uBCDD\uBCE1\uBCE2\uBCE3\uBCE4"+
+            "\uBCE5\uBCE6\uBCE7\uBCE8\uBCE9\uBCEA\uBCEB\uBCEC"+
+            "\uBCED\uBCEE\uBCEF\uBCF0\uBCF1\uBCF3\uBCF4\uBCF5"+
+            "\uBCF6\uBCF7\uBCF8\uBCF9\uBCFA\uBCFB\uBCFC\uBCFD"+
+            "\uBD41\uBD42\uBD43\uBD44\uBD45\uBD46\uBD47\uBD48"+
+            "\uBD49\uBD4A\uBD4B\uBD4C\uBD4D\uBD4E\uBD4F\uBD50"+
+            "\uBD51\uBD53\uBD54\uBD55\uBD56\uBD57\uBD58\uBD59"+
+            "\uBD5A\uBD5B\uBD5C\uBD5D\uBD61\uBD62\uBD63\uBD64"+
+            "\uBD65\uBD66\uBD67\uBD68\uBD69\uBD6A\uBD6B\uBD6C"+
+            "\uBD6D\uBD6E\uBD6F\uBD70\uBD71\uBD73\uBD74\uBD75"+
+            "\uBD76\uBD77\uBD78\uBD79\uBD7A\uBD7B\uBD7C\uBD7D"+
+            "\uBD81\uBD82\uBD83\uBD84\uBD85\uBD86\uBD87\uBD88"+
+            "\uBD89\uBD8A\uBD8B\uBD8C\uBD8D\uBD8E\uBD8F\uBD90"+
+            "\uBD91\uBD93\uBD94\uBD95\uBD96\uBD97\uBD98\uBD99"+
+            "\uBD9A\uBD9B\uBD9C\uBD9D\uBDA1\uBDA2\uBDA3\uBDA4"+
+            "\uBDA5\uBDA6\uBDA7\uBDA8\uBDA9\uBDAA\uBDAB\uBDAC"+
+            "\uBDAD\uBDAE\uBDAF\uBDB0\uBDB1\uBDB3\uBDB4\uBDB5"+
+            "\uBDB6\uBDB7\uBDB8\uBDB9\uBDBA\uBDBB\uBDBC\uBDBD"+
+            "\uBDC1\uBDC2\uBDC3\uBDC4\uBDC5\uBDC6\uBDC7\uBDC8"+
+            "\uBDC9\uBDCA\uBDCB\uBDCC\uBDCD\uBDCE\uBDCF\uBDD0"+
+            "\uBDD1\uBDD3\uBDD4\uBDD5\uBDD6\uBDD7\uBDD8\uBDD9"+
+            "\uBDDA\uBDDB\uBDDC\uBDDD\uBDE1\uBDE2\uBDE3\uBDE4"+
+            "\uBDE5\uBDE6\uBDE7\uBDE8\uBDE9\uBDEA\uBDEB\uBDEC"+
+            "\uBDED\uBDEE\uBDEF\uBDF0\uBDF1\uBDF3\uBDF4\uBDF5"+
+            "\uBDF6\uBDF7\uBDF8\uBDF9\uBDFA\uBDFB\uBDFC\uBDFD"+
+            "\uBE41\uBE42\uBE43\uBE44\uBE45\uBE46\uBE47\uBE48"+
+            "\uBE49\uBE4A\uBE4B\uBE4C\uBE4D\uBE4E\uBE4F\uBE50"+
+            "\uBE51\uBE53\uBE54\uBE55\uBE56\uBE57\uBE58\uBE59"+
+            "\uBE5A\uBE5B\uBE5C\uBE5D\uBE61\uBE62\uBE63\uBE64"+
+            "\uBE65\uBE66\uBE67\uBE68\uBE69\uBE6A\uBE6B\uBE6C"+
+            "\uBE6D\uBE6E\uBE6F\uBE70\uBE71\uBE73\uBE74\uBE75"+
+            "\uBE76\uBE77\uBE78\uBE79\uBE7A\uBE7B\uBE7C\uBE7D"+
+            "\uBE81\uBE82\uBE83\uBE84\uBE85\uBE86\uBE87\uBE88"+
+            "\uBE89\uBE8A\uBE8B\uBE8C\uBE8D\uBE8E\uBE8F\uBE90"+
+            "\uBE91\uBE93\uBE94\uBE95\uBE96\uBE97\uBE98\uBE99"+
+            "\uBE9A\uBE9B\uBE9C\uBE9D\uBEA1\uBEA2\uBEA3\uBEA4"+
+            "\uBEA5\uBEA6\uBEA7\uBEA8\uBEA9\uBEAA\uBEAB\uBEAC"+
+            "\uBEAD\uBEAE\uBEAF\uBEB0\uBEB1\uBEB3\uBEB4\uBEB5"+
+            "\uBEB6\uBEB7\uBEB8\uBEB9\uBEBA\uBEBB\uBEBC\uBEBD"+
+            "\uBEC1\uBEC2\uBEC3\uBEC4\uBEC5\uBEC6\uBEC7\uBEC8"+
+            "\uBEC9\uBECA\uBECB\uBECC\uBECD\uBECE\uBECF\uBED0"+
+            "\uBED1\uBED3\uBED4\uBED5\uBED6\uBED7\uBED8\uBED9"+
+            "\uBEDA\uBEDB\uBEDC\uBEDD\uBEE1\uBEE2\uBEE3\uBEE4"+
+            "\uBEE5\uBEE6\uBEE7\uBEE8\uBEE9\uBEEA\uBEEB\uBEEC"+
+            "\uBEED\uBEEE\uBEEF\uBEF0\uBEF1\uBEF3\uBEF4\uBEF5"+
+            "\uBEF6\uBEF7\uBEF8\uBEF9\uBEFA\uBEFB\uBEFC\uBEFD"+
+            "\uBF41\uBF42\uBF43\uBF44\uBF45\uBF46\uBF47\uBF48"+
+            "\uBF49\uBF4A\uBF4B\uBF4C\uBF4D\uBF4E\uBF4F\uBF50"+
+            "\uBF51\uBF53\uBF54\uBF55\uBF56\uBF57\uBF58\uBF59"+
+            "\uBF5A\uBF5B\uBF5C\uBF5D\uBF61\uBF62\uBF63\uBF64"+
+            "\uBF65\uBF66\uBF67\uBF68\uBF69\uBF6A\uBF6B\uBF6C"+
+            "\uBF6D\uBF6E\uBF6F\uBF70\uBF71\uBF73\uBF74\uBF75"+
+            "\uBF76\uBF77\uBF78\uBF79\uBF7A\uBF7B\uBF7C\uBF7D"+
+            "\uBF81\uBF82\uBF83\uBF84\uBF85\uBF86\uBF87\uBF88"+
+            "\uBF89\uBF8A\uBF8B\uBF8C\uBF8D\uBF8E\uBF8F\uBF90"+
+            "\uBF91\uBF93\uBF94\uBF95\uBF96\uBF97\uBF98\uBF99"+
+            "\uBF9A\uBF9B\uBF9C\uBF9D\uBFA1\uBFA2\uBFA3\uBFA4"+
+            "\uBFA5\uBFA6\uBFA7\uBFA8\uBFA9\uBFAA\uBFAB\uBFAC"+
+            "\uBFAD\uBFAE\uBFAF\uBFB0\uBFB1\uBFB3\uBFB4\uBFB5"+
+            "\uBFB6\uBFB7\uBFB8\uBFB9\uBFBA\uBFBB\uBFBC\uBFBD"+
+            "\uC061\uC062\uC063\uC064\uC065\uC066\uC067\uC068"+
+            "\uC069\uC06A\uC06B\uC06C\uC06D\uC06E\uC06F\uC070"+
+            "\uC071\uC073\uC074\uC075\uC076\uC077\uC078\uC079"+
+            "\uC07A\uC07B\uC07C\uC07D\uC081\uC082\uC083\uC084"+
+            "\uC085\uC086\uC087\uC088\uC089\uC08A\uC08B\uC08C"+
+            "\uC08D\uC08E\uC08F\uC090\uC091\uC093\uC094\uC095"+
+            "\uC096\uC097\uC098\uC099\uC09A\uC09B\uC09C\uC09D"+
+            "\uC0A1\uC0A2\uC0A3\uC0A4\uC0A5\uC0A6\uC0A7\uC0A8"+
+            "\uC0A9\uC0AA\uC0AB\uC0AC\uC0AD\uC0AE\uC0AF\uC0B0"+
+            "\uC0B1\uC0B3\uC0B4\uC0B5\uC0B6\uC0B7\uC0B8\uC0B9"+
+            "\uC0BA\uC0BB\uC0BC\uC0BD\uC0C1\uC0C2\uC0C3\uC0C4"+
+            "\uC0C5\uC0C6\uC0C7\uC0C8\uC0C9\uC0CA\uC0CB\uC0CC"+
+            "\uC0CD\uC0CE\uC0CF\uC0D0\uC0D1\uC0D3\uC0D4\uC0D5"+
+            "\uC0D6\uC0D7\uC0D8\uC0D9\uC0DA\uC0DB\uC0DC\uC0DD"+
+            "\uC0E1\uC0E2\uC0E3\uC0E4\uC0E5\uC0E6\uC0E7\uC0E8"+
+            "\uC0E9\uC0EA\uC0EB\uC0EC\uC0ED\uC0EE\uC0EF\uC0F0"+
+            "\uC0F1\uC0F3\uC0F4\uC0F5\uC0F6\uC0F7\uC0F8\uC0F9"+
+            "\uC0FA\uC0FB\uC0FC\uC0FD\uC141\uC142\uC143\uC144"+
+            "\uC145\uC146\uC147\uC148\uC149\uC14A\uC14B\uC14C"+
+            "\uC14D\uC14E\uC14F\uC150\uC151\uC153\uC154\uC155"+
+            "\uC156\uC157\uC158\uC159\uC15A\uC15B\uC15C\uC15D"+
+            "\uC161\uC162\uC163\uC164\uC165\uC166\uC167\uC168"+
+            "\uC169\uC16A\uC16B\uC16C\uC16D\uC16E\uC16F\uC170"+
+            "\uC171\uC173\uC174\uC175\uC176\uC177\uC178\uC179"+
+            "\uC17A\uC17B\uC17C\uC17D\uC181\uC182\uC183\uC184"+
+            "\uC185\uC186\uC187\uC188\uC189\uC18A\uC18B\uC18C"+
+            "\uC18D\uC18E\uC18F\uC190\uC191\uC193\uC194\uC195"+
+            "\uC196\uC197\uC198\uC199\uC19A\uC19B\uC19C\uC19D"+
+            "\uC1A1\uC1A2\uC1A3\uC1A4\uC1A5\uC1A6\uC1A7\uC1A8"+
+            "\uC1A9\uC1AA\uC1AB\uC1AC\uC1AD\uC1AE\uC1AF\uC1B0"+
+            "\uC1B1\uC1B3\uC1B4\uC1B5\uC1B6\uC1B7\uC1B8\uC1B9"+
+            "\uC1BA\uC1BB\uC1BC\uC1BD\uC1C1\uC1C2\uC1C3\uC1C4"+
+            "\uC1C5\uC1C6\uC1C7\uC1C8\uC1C9\uC1CA\uC1CB\uC1CC"+
+            "\uC1CD\uC1CE\uC1CF\uC1D0\uC1D1\uC1D3\uC1D4\uC1D5"+
+            "\uC1D6\uC1D7\uC1D8\uC1D9\uC1DA\uC1DB\uC1DC\uC1DD"+
+            "\uC1E1\uC1E2\uC1E3\uC1E4\uC1E5\uC1E6\uC1E7\uC1E8"+
+            "\uC1E9\uC1EA\uC1EB\uC1EC\uC1ED\uC1EE\uC1EF\uC1F0"+
+            "\uC1F1\uC1F3\uC1F4\uC1F5\uC1F6\uC1F7\uC1F8\uC1F9"+
+            "\uC1FA\uC1FB\uC1FC\uC1FD\uC241\uC242\uC243\uC244"+
+            "\uC245\uC246\uC247\uC248\uC249\uC24A\uC24B\uC24C"+
+            "\uC24D\uC24E\uC24F\uC250\uC251\uC253\uC254\uC255"+
+            "\uC256\uC257\uC258\uC259\uC25A\uC25B\uC25C\uC25D"+
+            "\uC261\uC262\uC263\uC264\uC265\uC266\uC267\uC268"+
+            "\uC269\uC26A\uC26B\uC26C\uC26D\uC26E\uC26F\uC270"+
+            "\uC271\uC273\uC274\uC275\uC276\uC277\uC278\uC279"+
+            "\uC27A\uC27B\uC27C\uC27D\uC281\uC282\uC283\uC284"+
+            "\uC285\uC286\uC287\uC288\uC289\uC28A\uC28B\uC28C"+
+            "\uC28D\uC28E\uC28F\uC290\uC291\uC293\uC294\uC295"+
+            "\uC296\uC297\uC298\uC299\uC29A\uC29B\uC29C\uC29D"+
+            "\uC2A1\uC2A2\uC2A3\uC2A4\uC2A5\uC2A6\uC2A7\uC2A8"+
+            "\uC2A9\uC2AA\uC2AB\uC2AC\uC2AD\uC2AE\uC2AF\uC2B0"+
+            "\uC2B1\uC2B3\uC2B4\uC2B5\uC2B6\uC2B7\uC2B8\uC2B9"+
+            "\uC2BA\uC2BB\uC2BC\uC2BD\uC2C1\uC2C2\uC2C3\uC2C4"+
+            "\uC2C5\uC2C6\uC2C7\uC2C8\uC2C9\uC2CA\uC2CB\uC2CC"+
+            "\uC2CD\uC2CE\uC2CF\uC2D0\uC2D1\uC2D3\uC2D4\uC2D5"+
+            "\uC2D6\uC2D7\uC2D8\uC2D9\uC2DA\uC2DB\uC2DC\uC2DD"+
+            "\uC2E1\uC2E2\uC2E3\uC2E4\uC2E5\uC2E6\uC2E7\uC2E8"+
+            "\uC2E9\uC2EA\uC2EB\uC2EC\uC2ED\uC2EE\uC2EF\uC2F0"+
+            "\uC2F1\uC2F3\uC2F4\uC2F5\uC2F6\uC2F7\uC2F8\uC2F9"+
+            "\uC2FA\uC2FB\uC2FC\uC2FD\uC341\uC342\uC343\uC344"+
+            "\uC345\uC346\uC347\uC348\uC349\uC34A\uC34B\uC34C"+
+            "\uC34D\uC34E\uC34F\uC350\uC351\uC353\uC354\uC355"+
+            "\uC356\uC357\uC358\uC359\uC35A\uC35B\uC35C\uC35D"+
+            "\uC361\uC362\uC363\uC364\uC365\uC366\uC367\uC368"+
+            "\uC369\uC36A\uC36B\uC36C\uC36D\uC36E\uC36F\uC370"+
+            "\uC371\uC373\uC374\uC375\uC376\uC377\uC378\uC379"+
+            "\uC37A\uC37B\uC37C\uC37D\uC381\uC382\uC383\uC384"+
+            "\uC385\uC386\uC387\uC388\uC389\uC38A\uC38B\uC38C"+
+            "\uC38D\uC38E\uC38F\uC390\uC391\uC393\uC394\uC395"+
+            "\uC396\uC397\uC398\uC399\uC39A\uC39B\uC39C\uC39D"+
+            "\uC3A1\uC3A2\uC3A3\uC3A4\uC3A5\uC3A6\uC3A7\uC3A8"+
+            "\uC3A9\uC3AA\uC3AB\uC3AC\uC3AD\uC3AE\uC3AF\uC3B0"+
+            "\uC3B1\uC3B3\uC3B4\uC3B5\uC3B6\uC3B7\uC3B8\uC3B9"+
+            "\uC3BA\uC3BB\uC3BC\uC3BD\uC461\uC462\uC463\uC464"+
+            "\uC465\uC466\uC467\uC468\uC469\uC46A\uC46B\uC46C"+
+            "\uC46D\uC46E\uC46F\uC470\uC471\uC473\uC474\uC475"+
+            "\uC476\uC477\uC478\uC479\uC47A\uC47B\uC47C\uC47D"+
+            "\uC481\uC482\uC483\uC484\uC485\uC486\uC487\uC488"+
+            "\uC489\uC48A\uC48B\uC48C\uC48D\uC48E\uC48F\uC490"+
+            "\uC491\uC493\uC494\uC495\uC496\uC497\uC498\uC499"+
+            "\uC49A\uC49B\uC49C\uC49D\uC4A1\uC4A2\uC4A3\uC4A4"+
+            "\uC4A5\uC4A6\uC4A7\uC4A8\uC4A9\uC4AA\uC4AB\uC4AC"+
+            "\uC4AD\uC4AE\uC4AF\uC4B0\uC4B1\uC4B3\uC4B4\uC4B5"+
+            "\uC4B6\uC4B7\uC4B8\uC4B9\uC4BA\uC4BB\uC4BC\uC4BD"+
+            "\uC4C1\uC4C2\uC4C3\uC4C4\uC4C5\uC4C6\uC4C7\uC4C8"+
+            "\uC4C9\uC4CA\uC4CB\uC4CC\uC4CD\uC4CE\uC4CF\uC4D0"+
+            "\uC4D1\uC4D3\uC4D4\uC4D5\uC4D6\uC4D7\uC4D8\uC4D9"+
+            "\uC4DA\uC4DB\uC4DC\uC4DD\uC4E1\uC4E2\uC4E3\uC4E4"+
+            "\uC4E5\uC4E6\uC4E7\uC4E8\uC4E9\uC4EA\uC4EB\uC4EC"+
+            "\uC4ED\uC4EE\uC4EF\uC4F0\uC4F1\uC4F3\uC4F4\uC4F5"+
+            "\uC4F6\uC4F7\uC4F8\uC4F9\uC4FA\uC4FB\uC4FC\uC4FD"+
+            "\uC541\uC542\uC543\uC544\uC545\uC546\uC547\uC548"+
+            "\uC549\uC54A\uC54B\uC54C\uC54D\uC54E\uC54F\uC550"+
+            "\uC551\uC553\uC554\uC555\uC556\uC557\uC558\uC559"+
+            "\uC55A\uC55B\uC55C\uC55D\uC561\uC562\uC563\uC564"+
+            "\uC565\uC566\uC567\uC568\uC569\uC56A\uC56B\uC56C"+
+            "\uC56D\uC56E\uC56F\uC570\uC571\uC573\uC574\uC575"+
+            "\uC576\uC577\uC578\uC579\uC57A\uC57B\uC57C\uC57D"+
+            "\uC581\uC582\uC583\uC584\uC585\uC586\uC587\uC588"+
+            "\uC589\uC58A\uC58B\uC58C\uC58D\uC58E\uC58F\uC590"+
+            "\uC591\uC593\uC594\uC595\uC596\uC597\uC598\uC599"+
+            "\uC59A\uC59B\uC59C\uC59D\uC5A1\uC5A2\uC5A3\uC5A4"+
+            "\uC5A5\uC5A6\uC5A7\uC5A8\uC5A9\uC5AA\uC5AB\uC5AC"+
+            "\uC5AD\uC5AE\uC5AF\uC5B0\uC5B1\uC5B3\uC5B4\uC5B5"+
+            "\uC5B6\uC5B7\uC5B8\uC5B9\uC5BA\uC5BB\uC5BC\uC5BD"+
+            "\uC5C1\uC5C2\uC5C3\uC5C4\uC5C5\uC5C6\uC5C7\uC5C8"+
+            "\uC5C9\uC5CA\uC5CB\uC5CC\uC5CD\uC5CE\uC5CF\uC5D0"+
+            "\uC5D1\uC5D3\uC5D4\uC5D5\uC5D6\uC5D7\uC5D8\uC5D9"+
+            "\uC5DA\uC5DB\uC5DC\uC5DD\uC5E1\uC5E2\uC5E3\uC5E4"+
+            "\uC5E5\uC5E6\uC5E7\uC5E8\uC5E9\uC5EA\uC5EB\uC5EC"+
+            "\uC5ED\uC5EE\uC5EF\uC5F0\uC5F1\uC5F3\uC5F4\uC5F5"+
+            "\uC5F6\uC5F7\uC5F8\uC5F9\uC5FA\uC5FB\uC5FC\uC5FD"+
+            "\uC641\uC642\uC643\uC644\uC645\uC646\uC647\uC648"+
+            "\uC649\uC64A\uC64B\uC64C\uC64D\uC64E\uC64F\uC650"+
+            "\uC651\uC653\uC654\uC655\uC656\uC657\uC658\uC659"+
+            "\uC65A\uC65B\uC65C\uC65D\uC661\uC662\uC663\uC664"+
+            "\uC665\uC666\uC667\uC668\uC669\uC66A\uC66B\uC66C"+
+            "\uC66D\uC66E\uC66F\uC670\uC671\uC673\uC674\uC675"+
+            "\uC676\uC677\uC678\uC679\uC67A\uC67B\uC67C\uC67D"+
+            "\uC681\uC682\uC683\uC684\uC685\uC686\uC687\uC688"+
+            "\uC689\uC68A\uC68B\uC68C\uC68D\uC68E\uC68F\uC690"+
+            "\uC691\uC693\uC694\uC695\uC696\uC697\uC698\uC699"+
+            "\uC69A\uC69B\uC69C\uC69D\uC6A1\uC6A2\uC6A3\uC6A4"+
+            "\uC6A5\uC6A6\uC6A7\uC6A8\uC6A9\uC6AA\uC6AB\uC6AC"+
+            "\uC6AD\uC6AE\uC6AF\uC6B0\uC6B1\uC6B3\uC6B4\uC6B5"+
+            "\uC6B6\uC6B7\uC6B8\uC6B9\uC6BA\uC6BB\uC6BC\uC6BD"+
+            "\uC6C1\uC6C2\uC6C3\uC6C4\uC6C5\uC6C6\uC6C7\uC6C8"+
+            "\uC6C9\uC6CA\uC6CB\uC6CC\uC6CD\uC6CE\uC6CF\uC6D0"+
+            "\uC6D1\uC6D3\uC6D4\uC6D5\uC6D6\uC6D7\uC6D8\uC6D9"+
+            "\uC6DA\uC6DB\uC6DC\uC6DD\uC6E1\uC6E2\uC6E3\uC6E4"+
+            "\uC6E5\uC6E6\uC6E7\uC6E8\uC6E9\uC6EA\uC6EB\uC6EC"+
+            "\uC6ED\uC6EE\uC6EF\uC6F0\uC6F1\uC6F3\uC6F4\uC6F5"+
+            "\uC6F6\uC6F7\uC6F8\uC6F9\uC6FA\uC6FB\uC6FC\uC6FD"+
+            "\uC741\uC742\uC743\uC744\uC745\uC746\uC747\uC748"+
+            "\uC749\uC74A\uC74B\uC74C\uC74D\uC74E\uC74F\uC750"+
+            "\uC751\uC753\uC754\uC755\uC756\uC757\uC758\uC759"+
+            "\uC75A\uC75B\uC75C\uC75D\uC761\uC762\uC763\uC764"+
+            "\uC765\uC766\uC767\uC768\uC769\uC76A\uC76B\uC76C"+
+            "\uC76D\uC76E\uC76F\uC770\uC771\uC773\uC774\uC775"+
+            "\uC776\uC777\uC778\uC779\uC77A\uC77B\uC77C\uC77D"+
+            "\uC781\uC782\uC783\uC784\uC785\uC786\uC787\uC788"+
+            "\uC789\uC78A\uC78B\uC78C\uC78D\uC78E\uC78F\uC790"+
+            "\uC791\uC793\uC794\uC795\uC796\uC797\uC798\uC799"+
+            "\uC79A\uC79B\uC79C\uC79D\uC7A1\uC7A2\uC7A3\uC7A4"+
+            "\uC7A5\uC7A6\uC7A7\uC7A8\uC7A9\uC7AA\uC7AB\uC7AC"+
+            "\uC7AD\uC7AE\uC7AF\uC7B0\uC7B1\uC7B3\uC7B4\uC7B5"+
+            "\uC7B6\uC7B7\uC7B8\uC7B9\uC7BA\uC7BB\uC7BC\uC7BD"+
+            "\uC861\uC862\uC863\uC864\uC865\uC866\uC867\uC868"+
+            "\uC869\uC86A\uC86B\uC86C\uC86D\uC86E\uC86F\uC870"+
+            "\uC871\uC873\uC874\uC875\uC876\uC877\uC878\uC879"+
+            "\uC87A\uC87B\uC87C\uC87D\uC881\uC882\uC883\uC884"+
+            "\uC885\uC886\uC887\uC888\uC889\uC88A\uC88B\uC88C"+
+            "\uC88D\uC88E\uC88F\uC890\uC891\uC893\uC894\uC895"+
+            "\uC896\uC897\uC898\uC899\uC89A\uC89B\uC89C\uC89D"+
+            "\uC8A1\uC8A2\uC8A3\uC8A4\uC8A5\uC8A6\uC8A7\uC8A8"+
+            "\uC8A9\uC8AA\uC8AB\uC8AC\uC8AD\uC8AE\uC8AF\uC8B0"+
+            "\uC8B1\uC8B3\uC8B4\uC8B5\uC8B6\uC8B7\uC8B8\uC8B9"+
+            "\uC8BA\uC8BB\uC8BC\uC8BD\uC8C1\uC8C2\uC8C3\uC8C4"+
+            "\uC8C5\uC8C6\uC8C7\uC8C8\uC8C9\uC8CA\uC8CB\uC8CC"+
+            "\uC8CD\uC8CE\uC8CF\uC8D0\uC8D1\uC8D3\uC8D4\uC8D5"+
+            "\uC8D6\uC8D7\uC8D8\uC8D9\uC8DA\uC8DB\uC8DC\uC8DD"+
+            "\uC8E1\uC8E2\uC8E3\uC8E4\uC8E5\uC8E6\uC8E7\uC8E8"+
+            "\uC8E9\uC8EA\uC8EB\uC8EC\uC8ED\uC8EE\uC8EF\uC8F0"+
+            "\uC8F1\uC8F3\uC8F4\uC8F5\uC8F6\uC8F7\uC8F8\uC8F9"+
+            "\uC8FA\uC8FB\uC8FC\uC8FD\uC941\uC942\uC943\uC944"+
+            "\uC945\uC946\uC947\uC948\uC949\uC94A\uC94B\uC94C"+
+            "\uC94D\uC94E\uC94F\uC950\uC951\uC953\uC954\uC955"+
+            "\uC956\uC957\uC958\uC959\uC95A\uC95B\uC95C\uC95D"+
+            "\uC961\uC962\uC963\uC964\uC965\uC966\uC967\uC968"+
+            "\uC969\uC96A\uC96B\uC96C\uC96D\uC96E\uC96F\uC970"+
+            "\uC971\uC973\uC974\uC975\uC976\uC977\uC978\uC979"+
+            "\uC97A\uC97B\uC97C\uC97D\uC981\uC982\uC983\uC984"+
+            "\uC985\uC986\uC987\uC988\uC989\uC98A\uC98B\uC98C"+
+            "\uC98D\uC98E\uC98F\uC990\uC991\uC993\uC994\uC995"+
+            "\uC996\uC997\uC998\uC999\uC99A\uC99B\uC99C\uC99D"+
+            "\uC9A1\uC9A2\uC9A3\uC9A4\uC9A5\uC9A6\uC9A7\uC9A8"+
+            "\uC9A9\uC9AA\uC9AB\uC9AC\uC9AD\uC9AE\uC9AF\uC9B0"+
+            "\uC9B1\uC9B3\uC9B4\uC9B5\uC9B6\uC9B7\uC9B8\uC9B9"+
+            "\uC9BA\uC9BB\uC9BC\uC9BD\uC9C1\uC9C2\uC9C3\uC9C4"+
+            "\uC9C5\uC9C6\uC9C7\uC9C8\uC9C9\uC9CA\uC9CB\uC9CC"+
+            "\uC9CD\uC9CE\uC9CF\uC9D0\uC9D1\uC9D3\uC9D4\uC9D5"+
+            "\uC9D6\uC9D7\uC9D8\uC9D9\uC9DA\uC9DB\uC9DC\uC9DD"+
+            "\uC9E1\uC9E2\uC9E3\uC9E4\uC9E5\uC9E6\uC9E7\uC9E8"+
+            "\uC9E9\uC9EA\uC9EB\uC9EC\uC9ED\uC9EE\uC9EF\uC9F0"+
+            "\uC9F1\uC9F3\uC9F4\uC9F5\uC9F6\uC9F7\uC9F8\uC9F9"+
+            "\uC9FA\uC9FB\uC9FC\uC9FD\uCA41\uCA42\uCA43\uCA44"+
+            "\uCA45\uCA46\uCA47\uCA48\uCA49\uCA4A\uCA4B\uCA4C"+
+            "\uCA4D\uCA4E\uCA4F\uCA50\uCA51\uCA53\uCA54\uCA55"+
+            "\uCA56\uCA57\uCA58\uCA59\uCA5A\uCA5B\uCA5C\uCA5D"+
+            "\uCA61\uCA62\uCA63\uCA64\uCA65\uCA66\uCA67\uCA68"+
+            "\uCA69\uCA6A\uCA6B\uCA6C\uCA6D\uCA6E\uCA6F\uCA70"+
+            "\uCA71\uCA73\uCA74\uCA75\uCA76\uCA77\uCA78\uCA79"+
+            "\uCA7A\uCA7B\uCA7C\uCA7D\uCA81\uCA82\uCA83\uCA84"+
+            "\uCA85\uCA86\uCA87\uCA88\uCA89\uCA8A\uCA8B\uCA8C"+
+            "\uCA8D\uCA8E\uCA8F\uCA90\uCA91\uCA93\uCA94\uCA95"+
+            "\uCA96\uCA97\uCA98\uCA99\uCA9A\uCA9B\uCA9C\uCA9D"+
+            "\uCAA1\uCAA2\uCAA3\uCAA4\uCAA5\uCAA6\uCAA7\uCAA8"+
+            "\uCAA9\uCAAA\uCAAB\uCAAC\uCAAD\uCAAE\uCAAF\uCAB0"+
+            "\uCAB1\uCAB3\uCAB4\uCAB5\uCAB6\uCAB7\uCAB8\uCAB9"+
+            "\uCABA\uCABB\uCABC\uCABD\uCAC1\uCAC2\uCAC3\uCAC4"+
+            "\uCAC5\uCAC6\uCAC7\uCAC8\uCAC9\uCACA\uCACB\uCACC"+
+            "\uCACD\uCACE\uCACF\uCAD0\uCAD1\uCAD3\uCAD4\uCAD5"+
+            "\uCAD6\uCAD7\uCAD8\uCAD9\uCADA\uCADB\uCADC\uCADD"+
+            "\uCAE1\uCAE2\uCAE3\uCAE4\uCAE5\uCAE6\uCAE7\uCAE8"+
+            "\uCAE9\uCAEA\uCAEB\uCAEC\uCAED\uCAEE\uCAEF\uCAF0"+
+            "\uCAF1\uCAF3\uCAF4\uCAF5\uCAF6\uCAF7\uCAF8\uCAF9"+
+            "\uCAFA\uCAFB\uCAFC\uCAFD\uCB41\uCB42\uCB43\uCB44"+
+            "\uCB45\uCB46\uCB47\uCB48\uCB49\uCB4A\uCB4B\uCB4C"+
+            "\uCB4D\uCB4E\uCB4F\uCB50\uCB51\uCB53\uCB54\uCB55"+
+            "\uCB56\uCB57\uCB58\uCB59\uCB5A\uCB5B\uCB5C\uCB5D"+
+            "\uCB61\uCB62\uCB63\uCB64\uCB65\uCB66\uCB67\uCB68"+
+            "\uCB69\uCB6A\uCB6B\uCB6C\uCB6D\uCB6E\uCB6F\uCB70"+
+            "\uCB71\uCB73\uCB74\uCB75\uCB76\uCB77\uCB78\uCB79"+
+            "\uCB7A\uCB7B\uCB7C\uCB7D\uCB81\uCB82\uCB83\uCB84"+
+            "\uCB85\uCB86\uCB87\uCB88\uCB89\uCB8A\uCB8B\uCB8C"+
+            "\uCB8D\uCB8E\uCB8F\uCB90\uCB91\uCB93\uCB94\uCB95"+
+            "\uCB96\uCB97\uCB98\uCB99\uCB9A\uCB9B\uCB9C\uCB9D"+
+            "\uCBA1\uCBA2\uCBA3\uCBA4\uCBA5\uCBA6\uCBA7\uCBA8"+
+            "\uCBA9\uCBAA\uCBAB\uCBAC\uCBAD\uCBAE\uCBAF\uCBB0"+
+            "\uCBB1\uCBB3\uCBB4\uCBB5\uCBB6\uCBB7\uCBB8\uCBB9"+
+            "\uCBBA\uCBBB\uCBBC\uCBBD\uCC61\uCC62\uCC63\uCC64"+
+            "\uCC65\uCC66\uCC67\uCC68\uCC69\uCC6A\uCC6B\uCC6C"+
+            "\uCC6D\uCC6E\uCC6F\uCC70\uCC71\uCC73\uCC74\uCC75"+
+            "\uCC76\uCC77\uCC78\uCC79\uCC7A\uCC7B\uCC7C\uCC7D"+
+            "\uCC81\uCC82\uCC83\uCC84\uCC85\uCC86\uCC87\uCC88"+
+            "\uCC89\uCC8A\uCC8B\uCC8C\uCC8D\uCC8E\uCC8F\uCC90"+
+            "\uCC91\uCC93\uCC94\uCC95\uCC96\uCC97\uCC98\uCC99"+
+            "\uCC9A\uCC9B\uCC9C\uCC9D\uCCA1\uCCA2\uCCA3\uCCA4"+
+            "\uCCA5\uCCA6\uCCA7\uCCA8\uCCA9\uCCAA\uCCAB\uCCAC"+
+            "\uCCAD\uCCAE\uCCAF\uCCB0\uCCB1\uCCB3\uCCB4\uCCB5"+
+            "\uCCB6\uCCB7\uCCB8\uCCB9\uCCBA\uCCBB\uCCBC\uCCBD"+
+            "\uCCC1\uCCC2\uCCC3\uCCC4\uCCC5\uCCC6\uCCC7\uCCC8"+
+            "\uCCC9\uCCCA\uCCCB\uCCCC\uCCCD\uCCCE\uCCCF\uCCD0"+
+            "\uCCD1\uCCD3\uCCD4\uCCD5\uCCD6\uCCD7\uCCD8\uCCD9"+
+            "\uCCDA\uCCDB\uCCDC\uCCDD\uCCE1\uCCE2\uCCE3\uCCE4"+
+            "\uCCE5\uCCE6\uCCE7\uCCE8\uCCE9\uCCEA\uCCEB\uCCEC"+
+            "\uCCED\uCCEE\uCCEF\uCCF0\uCCF1\uCCF3\uCCF4\uCCF5"+
+            "\uCCF6\uCCF7\uCCF8\uCCF9\uCCFA\uCCFB\uCCFC\uCCFD"+
+            "\uCD41\uCD42\uCD43\uCD44\uCD45\uCD46\uCD47\uCD48"+
+            "\uCD49\uCD4A\uCD4B\uCD4C\uCD4D\uCD4E\uCD4F\uCD50"+
+            "\uCD51\uCD53\uCD54\uCD55\uCD56\uCD57\uCD58\uCD59"+
+            "\uCD5A\uCD5B\uCD5C\uCD5D\uCD61\uCD62\uCD63\uCD64"+
+            "\uCD65\uCD66\uCD67\uCD68\uCD69\uCD6A\uCD6B\uCD6C"+
+            "\uCD6D\uCD6E\uCD6F\uCD70\uCD71\uCD73\uCD74\uCD75"+
+            "\uCD76\uCD77\uCD78\uCD79\uCD7A\uCD7B\uCD7C\uCD7D"+
+            "\uCD81\uCD82\uCD83\uCD84\uCD85\uCD86\uCD87\uCD88"+
+            "\uCD89\uCD8A\uCD8B\uCD8C\uCD8D\uCD8E\uCD8F\uCD90"+
+            "\uCD91\uCD93\uCD94\uCD95\uCD96\uCD97\uCD98\uCD99"+
+            "\uCD9A\uCD9B\uCD9C\uCD9D\uCDA1\uCDA2\uCDA3\uCDA4"+
+            "\uCDA5\uCDA6\uCDA7\uCDA8\uCDA9\uCDAA\uCDAB\uCDAC"+
+            "\uCDAD\uCDAE\uCDAF\uCDB0\uCDB1\uCDB3\uCDB4\uCDB5"+
+            "\uCDB6\uCDB7\uCDB8\uCDB9\uCDBA\uCDBB\uCDBC\uCDBD"+
+            "\uCDC1\uCDC2\uCDC3\uCDC4\uCDC5\uCDC6\uCDC7\uCDC8"+
+            "\uCDC9\uCDCA\uCDCB\uCDCC\uCDCD\uCDCE\uCDCF\uCDD0"+
+            "\uCDD1\uCDD3\uCDD4\uCDD5\uCDD6\uCDD7\uCDD8\uCDD9"+
+            "\uCDDA\uCDDB\uCDDC\uCDDD\uCDE1\uCDE2\uCDE3\uCDE4"+
+            "\uCDE5\uCDE6\uCDE7\uCDE8\uCDE9\uCDEA\uCDEB\uCDEC"+
+            "\uCDED\uCDEE\uCDEF\uCDF0\uCDF1\uCDF3\uCDF4\uCDF5"+
+            "\uCDF6\uCDF7\uCDF8\uCDF9\uCDFA\uCDFB\uCDFC\uCDFD"+
+            "\uCE41\uCE42\uCE43\uCE44\uCE45\uCE46\uCE47\uCE48"+
+            "\uCE49\uCE4A\uCE4B\uCE4C\uCE4D\uCE4E\uCE4F\uCE50"+
+            "\uCE51\uCE53\uCE54\uCE55\uCE56\uCE57\uCE58\uCE59"+
+            "\uCE5A\uCE5B\uCE5C\uCE5D\uCE61\uCE62\uCE63\uCE64"+
+            "\uCE65\uCE66\uCE67\uCE68\uCE69\uCE6A\uCE6B\uCE6C"+
+            "\uCE6D\uCE6E\uCE6F\uCE70\uCE71\uCE73\uCE74\uCE75"+
+            "\uCE76\uCE77\uCE78\uCE79\uCE7A\uCE7B\uCE7C\uCE7D"+
+            "\uCE81\uCE82\uCE83\uCE84\uCE85\uCE86\uCE87\uCE88"+
+            "\uCE89\uCE8A\uCE8B\uCE8C\uCE8D\uCE8E\uCE8F\uCE90"+
+            "\uCE91\uCE93\uCE94\uCE95\uCE96\uCE97\uCE98\uCE99"+
+            "\uCE9A\uCE9B\uCE9C\uCE9D\uCEA1\uCEA2\uCEA3\uCEA4"+
+            "\uCEA5\uCEA6\uCEA7\uCEA8\uCEA9\uCEAA\uCEAB\uCEAC"+
+            "\uCEAD\uCEAE\uCEAF\uCEB0\uCEB1\uCEB3\uCEB4\uCEB5"+
+            "\uCEB6\uCEB7\uCEB8\uCEB9\uCEBA\uCEBB\uCEBC\uCEBD"+
+            "\uCEC1\uCEC2\uCEC3\uCEC4\uCEC5\uCEC6\uCEC7\uCEC8"+
+            "\uCEC9\uCECA\uCECB\uCECC\uCECD\uCECE\uCECF\uCED0"+
+            "\uCED1\uCED3\uCED4\uCED5\uCED6\uCED7\uCED8\uCED9"+
+            "\uCEDA\uCEDB\uCEDC\uCEDD\uCEE1\uCEE2\uCEE3\uCEE4"+
+            "\uCEE5\uCEE6\uCEE7\uCEE8\uCEE9\uCEEA\uCEEB\uCEEC"+
+            "\uCEED\uCEEE\uCEEF\uCEF0\uCEF1\uCEF3\uCEF4\uCEF5"+
+            "\uCEF6\uCEF7\uCEF8\uCEF9\uCEFA\uCEFB\uCEFC\uCEFD"+
+            "\uCF41\uCF42\uCF43\uCF44\uCF45\uCF46\uCF47\uCF48"+
+            "\uCF49\uCF4A\uCF4B\uCF4C\uCF4D\uCF4E\uCF4F\uCF50"+
+            "\uCF51\uCF53\uCF54\uCF55\uCF56\uCF57\uCF58\uCF59"+
+            "\uCF5A\uCF5B\uCF5C\uCF5D\uCF61\uCF62\uCF63\uCF64"+
+            "\uCF65\uCF66\uCF67\uCF68\uCF69\uCF6A\uCF6B\uCF6C"+
+            "\uCF6D\uCF6E\uCF6F\uCF70\uCF71\uCF73\uCF74\uCF75"+
+            "\uCF76\uCF77\uCF78\uCF79\uCF7A\uCF7B\uCF7C\uCF7D"+
+            "\uCF81\uCF82\uCF83\uCF84\uCF85\uCF86\uCF87\uCF88"+
+            "\uCF89\uCF8A\uCF8B\uCF8C\uCF8D\uCF8E\uCF8F\uCF90"+
+            "\uCF91\uCF93\uCF94\uCF95\uCF96\uCF97\uCF98\uCF99"+
+            "\uCF9A\uCF9B\uCF9C\uCF9D\uCFA1\uCFA2\uCFA3\uCFA4"+
+            "\uCFA5\uCFA6\uCFA7\uCFA8\uCFA9\uCFAA\uCFAB\uCFAC"+
+            "\uCFAD\uCFAE\uCFAF\uCFB0\uCFB1\uCFB3\uCFB4\uCFB5"+
+            "\uCFB6\uCFB7\uCFB8\uCFB9\uCFBA\uCFBB\uCFBC\uCFBD"+
+            "\uD061\uD062\uD063\uD064\uD065\uD066\uD067\uD068"+
+            "\uD069\uD06A\uD06B\uD06C\uD06D\uD06E\uD06F\uD070"+
+            "\uD071\uD073\uD074\uD075\uD076\uD077\uD078\uD079"+
+            "\uD07A\uD07B\uD07C\uD07D\uD081\uD082\uD083\uD084"+
+            "\uD085\uD086\uD087\uD088\uD089\uD08A\uD08B\uD08C"+
+            "\uD08D\uD08E\uD08F\uD090\uD091\uD093\uD094\uD095"+
+            "\uD096\uD097\uD098\uD099\uD09A\uD09B\uD09C\uD09D"+
+            "\uD0A1\uD0A2\uD0A3\uD0A4\uD0A5\uD0A6\uD0A7\uD0A8"+
+            "\uD0A9\uD0AA\uD0AB\uD0AC\uD0AD\uD0AE\uD0AF\uD0B0"+
+            "\uD0B1\uD0B3\uD0B4\uD0B5\uD0B6\uD0B7\uD0B8\uD0B9"+
+            "\uD0BA\uD0BB\uD0BC\uD0BD\uD0C1\uD0C2\uD0C3\uD0C4"+
+            "\uD0C5\uD0C6\uD0C7\uD0C8\uD0C9\uD0CA\uD0CB\uD0CC"+
+            "\uD0CD\uD0CE\uD0CF\uD0D0\uD0D1\uD0D3\uD0D4\uD0D5"+
+            "\uD0D6\uD0D7\uD0D8\uD0D9\uD0DA\uD0DB\uD0DC\uD0DD"+
+            "\uD0E1\uD0E2\uD0E3\uD0E4\uD0E5\uD0E6\uD0E7\uD0E8"+
+            "\uD0E9\uD0EA\uD0EB\uD0EC\uD0ED\uD0EE\uD0EF\uD0F0"+
+            "\uD0F1\uD0F3\uD0F4\uD0F5\uD0F6\uD0F7\uD0F8\uD0F9"+
+            "\uD0FA\uD0FB\uD0FC\uD0FD\uD141\uD142\uD143\uD144"+
+            "\uD145\uD146\uD147\uD148\uD149\uD14A\uD14B\uD14C"+
+            "\uD14D\uD14E\uD14F\uD150\uD151\uD153\uD154\uD155"+
+            "\uD156\uD157\uD158\uD159\uD15A\uD15B\uD15C\uD15D"+
+            "\uD161\uD162\uD163\uD164\uD165\uD166\uD167\uD168"+
+            "\uD169\uD16A\uD16B\uD16C\uD16D\uD16E\uD16F\uD170"+
+            "\uD171\uD173\uD174\uD175\uD176\uD177\uD178\uD179"+
+            "\uD17A\uD17B\uD17C\uD17D\uD181\uD182\uD183\uD184"+
+            "\uD185\uD186\uD187\uD188\uD189\uD18A\uD18B\uD18C"+
+            "\uD18D\uD18E\uD18F\uD190\uD191\uD193\uD194\uD195"+
+            "\uD196\uD197\uD198\uD199\uD19A\uD19B\uD19C\uD19D"+
+            "\uD1A1\uD1A2\uD1A3\uD1A4\uD1A5\uD1A6\uD1A7\uD1A8"+
+            "\uD1A9\uD1AA\uD1AB\uD1AC\uD1AD\uD1AE\uD1AF\uD1B0"+
+            "\uD1B1\uD1B3\uD1B4\uD1B5\uD1B6\uD1B7\uD1B8\uD1B9"+
+            "\uD1BA\uD1BB\uD1BC\uD1BD\uD1C1\uD1C2\uD1C3\uD1C4"+
+            "\uD1C5\uD1C6\uD1C7\uD1C8\uD1C9\uD1CA\uD1CB\uD1CC"+
+            "\uD1CD\uD1CE\uD1CF\uD1D0\uD1D1\uD1D3\uD1D4\uD1D5"+
+            "\uD1D6\uD1D7\uD1D8\uD1D9\uD1DA\uD1DB\uD1DC\uD1DD"+
+            "\uD1E1\uD1E2\uD1E3\uD1E4\uD1E5\uD1E6\uD1E7\uD1E8"+
+            "\uD1E9\uD1EA\uD1EB\uD1EC\uD1ED\uD1EE\uD1EF\uD1F0"+
+            "\uD1F1\uD1F3\uD1F4\uD1F5\uD1F6\uD1F7\uD1F8\uD1F9"+
+            "\uD1FA\uD1FB\uD1FC\uD1FD\uD241\uD242\uD243\uD244"+
+            "\uD245\uD246\uD247\uD248\uD249\uD24A\uD24B\uD24C"+
+            "\uD24D\uD24E\uD24F\uD250\uD251\uD253\uD254\uD255"+
+            "\uD256\uD257\uD258\uD259\uD25A\uD25B\uD25C\uD25D"+
+            "\uD261\uD262\uD263\uD264\uD265\uD266\uD267\uD268"+
+            "\uD269\uD26A\uD26B\uD26C\uD26D\uD26E\uD26F\uD270"+
+            "\uD271\uD273\uD274\uD275\uD276\uD277\uD278\uD279"+
+            "\uD27A\uD27B\uD27C\uD27D\uD281\uD282\uD283\uD284"+
+            "\uD285\uD286\uD287\uD288\uD289\uD28A\uD28B\uD28C"+
+            "\uD28D\uD28E\uD28F\uD290\uD291\uD293\uD294\uD295"+
+            "\uD296\uD297\uD298\uD299\uD29A\uD29B\uD29C\uD29D"+
+            "\uD2A1\uD2A2\uD2A3\uD2A4\uD2A5\uD2A6\uD2A7\uD2A8"+
+            "\uD2A9\uD2AA\uD2AB\uD2AC\uD2AD\uD2AE\uD2AF\uD2B0"+
+            "\uD2B1\uD2B3\uD2B4\uD2B5\uD2B6\uD2B7\uD2B8\uD2B9"+
+            "\uD2BA\uD2BB\uD2BC\uD2BD\uD2C1\uD2C2\uD2C3\uD2C4"+
+            "\uD2C5\uD2C6\uD2C7\uD2C8\uD2C9\uD2CA\uD2CB\uD2CC"+
+            "\uD2CD\uD2CE\uD2CF\uD2D0\uD2D1\uD2D3\uD2D4\uD2D5"+
+            "\uD2D6\uD2D7\uD2D8\uD2D9\uD2DA\uD2DB\uD2DC\uD2DD"+
+            "\uD2E1\uD2E2\uD2E3\uD2E4\uD2E5\uD2E6\uD2E7\uD2E8"+
+            "\uD2E9\uD2EA\uD2EB\uD2EC\uD2ED\uD2EE\uD2EF\uD2F0"+
+            "\uD2F1\uD2F3\uD2F4\uD2F5\uD2F6\uD2F7\uD2F8\uD2F9"+
+            "\uD2FA\uD2FB\uD2FC\uD2FD\uD341\uD342\uD343\uD344"+
+            "\uD345\uD346\uD347\uD348\uD349\uD34A\uD34B\uD34C"+
+            "\uD34D\uD34E\uD34F\uD350\uD351\uD353\uD354\uD355"+
+            "\uD356\uD357\uD358\uD359\uD35A\uD35B\uD35C\uD35D"+
+            "\uD361\uD362\uD363\uD364\uD365\uD366\uD367\uD368"+
+            "\uD369\uD36A\uD36B\uD36C\uD36D\uD36E\uD36F\uD370"+
+            "\uD371\uD373\uD374\uD375\uD376\uD377\uD378\uD379"+
+            "\uD37A\uD37B\uD37C\uD37D\uD381\uD382\uD383\uD384"+
+            "\uD385\uD386\uD387\uD388\uD389\uD38A\uD38B\uD38C"+
+            "\uD38D\uD38E\uD38F\uD390\uD391\uD393\uD394\uD395"+
+            "\uD396\uD397\uD398\uD399\uD39A\uD39B\uD39C\uD39D"+
+            "\uD3A1\uD3A2\uD3A3\uD3A4\uD3A5\uD3A6\uD3A7\uD3A8"+
+            "\uD3A9\uD3AA\uD3AB\uD3AC\uD3AD\uD3AE\uD3AF\uD3B0"+
+            "\uD3B1\uD3B3\uD3B4\uD3B5\uD3B6\uD3B7\uD3B8\uD3B9"+
+            "\uD3BA\uD3BB\uD3BC\uD3BD\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uE0D0\uE0D6\uE0E7\uE1CF\uE1E8\uE23D\uE2FB\uE332"+
+            "\uE348\uE360\uE36D\uE3D4\uE3D5\uE3D8\uE3DB\uE3DC"+
+            "\uE3DD\uE3DE\uE3DF\uE3E0\uE3E2\uE3E3\uE3E4\uE3E5"+
+            "\uE3E6\uE3E8\uE3E9\uE3EA\uE3EB\uE3ED\uE3EF\uE3F0"+
+            "\uE3F2\uE3F6\uE3FA\uE3FC\uE3FD\uE3FE\uE432\uE433"+
+            "\uE437\uE438\uE439\uE43A\uE43B\uE43D\uE442\uE44E"+
+            "\uE452\uE453\uE454\uE456\uE457\uE458\uE459\uE45A"+
+            "\uE45B\uE45D\uE45E\uE45F\uE460\uE461\uE462\uE463"+
+            "\uE464\uE465\uE466\uE467\uE469\uE46A\uE46E\uE46F"+
+            "\uE471\uE472\uE474\uE475\uE476\uE477\uE478\uE479"+
+            "\uE47A\uE47B\uE492\uE493\uE494\uE495\uE496\uE497"+
+            "\uE499\uE49A\uE576\uE59E\uE5A5\uE5AB\uE5AE\uE648"+
+            "\uE65D\uE6CB\uE6E4\uE8C5\uE8E4\uE935\uE9A5\uE9D5"+
+            "\uE9F4\uEA9E\uEAA0\uEAB3\uEAE1\uEAE8\uEB93\uEBAD"+
+            "\uEBED\uECF5\uED31\uED39\uEDAE\uEDB1\uEDB2\uEDB9"+
+            "\uEDBB\uEDBC\uEDC4\uEDCE\uEDD0\uEDD2\uEDD6\uEDFA"+
+            "\uEDFB\uEDFC\uEDFE\uEE31\uEE34\uEE37\uEE3D\uEE3F"+
+            "\uEE40\uEE41\uEE43\uEE47\uEE48\uEE4C\uEE54\uEE56"+
+            "\uEE57\uEE5A\uEE62\uEE66\uEE69\uEE6C\uEE6F\uEE71"+
+            "\uEE74\uEE75\uEE76\uEE78\uEE7A\uEE7B\uEE7C\uEE91"+
+            "\uEE93\uEE94\uEE97\uEE98\uEE99\uEE9B\uEEA1\uEEA6"+
+            "\uEEA9\uEEAA\uEEAC\uEEAD\uEEB0\uEEBF\uEEC1\uEEC6"+
+            "\uEEC7\uEECB\uEECD\uEECF\uEED0\uEED3\uEEDF\uEEE4"+
+            "\uEEE6\uEEF7\uEF77\uEF78\uEF92\uEF93\uEF99\uEF9B"+
+            "\uEF9D\uEFA0\uEFA7\uEFAC\uEFCC\uEFF7\uF051\uF075"+
+            "\uF096\uF099\uF09E\uF0A0\uF0A4\uF0A7\uF0A9\uF0AA"+
+            "\uF0BA\uF0BB\uF0BD\uF0C1\uF0C2\uF0C6\uF0C7\uF0CC"+
+            "\uF0CF\uF0D0\uF0D1\uF0D2\uF0D8\uF136\uF137\uF13A"+
+            "\uF13F\uF140\uF141\uF142\uF145\uF148\uF14A\uF150"+
+            "\uF151\uF155\uF156\uF159\uF15A\uF165\uF16D\uF16E"+
+            "\uF171\uF174\uF177\uF178\uF199\uF19A\uF19C\uF1A1"+
+            "\uF1A2\uF1A3\uF1EE\uF26B\uF44D\uF49C\uF4B1\uF537";
+
+        private final static String innerIndex9=
+            "\uF57E\uF696\uF698\uF6B8\uF6C8\uF6D3\uF76B\uF792"+
+            "\uF831\uF832\uF876\uF939\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\uDA31\uDA32\uDA33\uDA34\uDA35\uDA36\uDA37"+
+            "\uDA38\uDA39\uDA3A\uDA3B\uDA3C\uDA3D\uDA3E\uDA3F"+
+            "\uDA40\uDA41\uDA42\uDA43\uDA44\uDA45\uDA46\uDA47"+
+            "\uDA48\uDA49\uDA4A\uDA4B\uDA4C\uDA4D\uDA4E\uDA4F"+
+            "\uDA50\uDA51\uDA52\uDA53\uDA54\uDA55\uDA56\uDA57"+
+            "\uDA58\uDA59\uDA5A\uDA5B\uDA5C\uDA5D\uDA5E\uDA5F"+
+            "\uDA60\uDA61\uDA62\uDA63\uDA64\uDA65\uDA66\uDA67"+
+            "\uDA68\uDA69\uDA6A\uDA6B\uD93C\uDA6D\uDA6E\uDA6F"+
+            "\uDA70\uDA71\uDA72\uDA73\uDA74\uDA75\uDA76\uDA77"+
+            "\uDA78\uDA79\uDA7A\uDA7B\uDA7C\uDA7D\uDA7E\uDA91"+
+            "\uDA92\uDA93\uDA94\uDA95\uDA96\uDA97\uDA98\uDA99"+
+            "\uDA9A\uDA9B\uDA9C\uDA9D\uDA9E\uDA9F\uD93D\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\uD95B\uD95C\uD9A0\uDAA0\u0000\uD95D\uDA6C\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000";
+
+        private final static short index1[] = {
+            1, 2, 3, 4, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+            6, 7, 8, 9, 10, 11, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+            13, 14, 15, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 18,
+            19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
+            35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
+            51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
+            67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
+            83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98,
+            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 100, 101, 102,
+            103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118,
+            119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
+            135, 136, 137, 138, 139, 140, 141, 142, 0, 0, 0, 0, 0, 0, 0, 0,
+            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+            0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 144, 0, 0, 0, 0, 145
+        };
+
+        private static String index2[] = {
+            innerIndex0,
+            innerIndex1,
+            innerIndex2,
+            innerIndex3,
+            innerIndex4,
+            innerIndex5,
+            innerIndex6,
+            innerIndex7,
+            innerIndex8,
+            innerIndex9
+        };
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.desktop/unix/classes/sun/font/X11KSC5601.java	Wed Jul 05 20:33:35 2017 +0200
@@ -0,0 +1,148 @@
+/*
+ * Copyright (c) 1996, 2005, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package sun.font;
+
+import java.nio.CharBuffer;
+import java.nio.ByteBuffer;
+import java.nio.charset.*;
+import sun.nio.cs.*;
+import static sun.nio.cs.CharsetMapping.*;
+
+public class X11KSC5601 extends Charset {
+    public X11KSC5601 () {
+        super("X11KSC5601", null);
+    }
+    public CharsetEncoder newEncoder() {
+        return new Encoder(this);
+    }
+    public CharsetDecoder newDecoder() {
+        return new Decoder(this);
+    }
+
+    public boolean contains(Charset cs) {
+        return cs instanceof X11KSC5601;
+    }
+
+    private class Encoder extends CharsetEncoder {
+        private DoubleByte.Encoder enc = (DoubleByte.Encoder)new EUC_KR().newEncoder();
+
+        public Encoder(Charset cs) {
+            super(cs, 2.0f, 2.0f);
+        }
+
+        public boolean canEncode(char c) {
+            if (c <= 0x7F) {
+                return false;
+            }
+            return enc.canEncode(c);
+        }
+
+        protected int encodeDouble(char c) {
+            return enc.encodeChar(c);
+        }
+
+        protected CoderResult encodeLoop(CharBuffer src, ByteBuffer dst) {
+            char[] sa = src.array();
+            int sp = src.arrayOffset() + src.position();
+            int sl = src.arrayOffset() + src.limit();
+            byte[] da = dst.array();
+            int dp = dst.arrayOffset() + dst.position();
+            int dl = dst.arrayOffset() + dst.limit();
+
+            try {
+                while (sp < sl) {
+                    char c = sa[sp];
+                    if (c <= '\u007f')
+                        return CoderResult.unmappableForLength(1);
+                    int ncode = encodeDouble(c);
+                    if (ncode != 0 && c != '\u0000' ) {
+                        da[dp++] = (byte) ((ncode  >> 8) & 0x7f);
+                        da[dp++] = (byte) (ncode & 0x7f);
+                        sp++;
+                        continue;
+                    }
+                    return CoderResult.unmappableForLength(1);
+                }
+                return CoderResult.UNDERFLOW;
+            } finally {
+                src.position(sp - src.arrayOffset());
+                dst.position(dp - dst.arrayOffset());
+            }
+        }
+        public boolean isLegalReplacement(byte[] repl) {
+            return true;
+        }
+    }
+
+    private class Decoder extends  CharsetDecoder {
+        private DoubleByte.Decoder dec = (DoubleByte.Decoder)new EUC_KR().newDecoder();
+
+        public Decoder(Charset cs) {
+            super(cs, 0.5f, 1.0f);
+        }
+
+        protected char decodeDouble(int b1, int b2) {
+            return dec.decodeDouble(b1, b2);
+        }
+
+        protected CoderResult decodeLoop(ByteBuffer src, CharBuffer dst) {
+            byte[] sa = src.array();
+            int sp = src.arrayOffset() + src.position();
+            int sl = src.arrayOffset() + src.limit();
+            assert (sp <= sl);
+            sp = (sp <= sl ? sp : sl);
+            char[] da = dst.array();
+            int dp = dst.arrayOffset() + dst.position();
+            int dl = dst.arrayOffset() + dst.limit();
+            assert (dp <= dl);
+            dp = (dp <= dl ? dp : dl);
+
+
+            try {
+                while (sp < sl) {
+                    if ( sl - sp < 2) {
+                        return CoderResult.UNDERFLOW;
+                    }
+                    int b1 = sa[sp] & 0xFF | 0x80;
+                    int b2 = sa[sp + 1] & 0xFF | 0x80;
+                    char c = decodeDouble(b1, b2);
+                    if (c == UNMAPPABLE_DECODING) {
+                        return CoderResult.unmappableForLength(2);
+                    }
+                    if (dl - dp < 1)
+                        return CoderResult.OVERFLOW;
+                    da[dp++] = c;
+                    sp +=2;
+                }
+                return CoderResult.UNDERFLOW;
+            } finally {
+                src.position(sp - src.arrayOffset());
+                dst.position(dp - dst.arrayOffset());
+            }
+
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.desktop/unix/classes/sun/font/X11SunUnicode_0.java	Wed Jul 05 20:33:35 2017 +0200
@@ -0,0 +1,152 @@
+/*
+ * Copyright (c) 2001, 2005, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+package sun.font;
+
+import java.nio.charset.Charset;
+import java.nio.charset.CharsetEncoder;
+import java.nio.charset.CharsetDecoder;
+
+public class X11SunUnicode_0 extends Charset {
+    public X11SunUnicode_0 () {
+        super("X11SunUnicode_0", null);
+    }
+
+    public CharsetEncoder newEncoder() {
+        return new Encoder(this);
+    }
+
+    /* Seems like supporting a decoder is required, but we aren't going
+     * to be publically exposing this class, so no need to waste work
+     */
+    public CharsetDecoder newDecoder() {
+        throw new Error("Decoder is not implemented for X11SunUnicode_0 Charset");
+    }
+
+    public boolean contains(Charset cs) {
+        return cs instanceof X11SunUnicode_0;
+    }
+
+    private static class Encoder extends DoubleByteEncoder {
+        public Encoder(Charset cs) {
+            super(cs, index1, index2);
+        }
+
+        private final static String innerIndex0=
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0120\u0121\u0122\u0000\u0123\u0124\u0125"+
+            "\u0126\u0127\u0128\u0129\u012A\u012B\u012C\u012D"+
+            "\u012E\u012F\u0130\u0131\u0132\u0133\u0134\u0135"+
+            "\u0136\u0137\u0138\u0139\u013A\u013B\u013C\u013D"+
+            "\u013E\u013F\u0140\u0141\u0142\u0143\u0144\u0145"+
+            "\u0146\u0147\u0148\u0149\u014A\u014B\u014C\u014D"+
+            "\u014E\u014F\u0150\u0151\u0152\u0153\u0154\u0155"+
+            "\u0156\u0157\u0000\u0000\u0158\u0159\u015A\u015B"+
+            "\u015C\u015D\u015E\u015F\u0160\u0161\u0162\u0163"+
+            "\u0164\u0165\u0166\u0167\u0168\u0169\u0000\u0000"+
+            "\u016A\u016B\u016C\u016D\u016E\u0000\u0000\u0000"+
+            "\u016F\u0170\u0171\u0172\u0173\u0174\u0175\u0176"+
+            "\u0177\u0178\u0179\u017A\u017B\u017C\u017D\u017E"+
+            "\u017F\u0180\u0181\u0182\u0183\u0184\u0185\u0186"+
+            "\u0187\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"+
+            "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000";
+
+        private final static short index1[] = {
+            0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+        };
+
+        private final static String index2[] = {
+            innerIndex0
+        };
+
+        /* The default implementation creates a decoder and we don't have one */
+        public boolean isLegalReplacement(byte[] repl) {
+            return true;
+        }
+    }
+}
--- a/jdk/src/java.desktop/unix/classes/sun/font/XMap.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/unix/classes/sun/font/XMap.java	Wed Jul 05 20:33:35 2017 +0200
@@ -69,7 +69,7 @@
         boolean addAscii = false;
         boolean lowPartOnly = false;
         if (encoding.equals("dingbats")) {
-            jclass = "sun.awt.motif.X11Dingbats";
+            jclass = "sun.font.X11Dingbats";
             minU = 0x2701;
             maxU = 0x27be;
         } else if (encoding.equals("symbol")){
@@ -81,10 +81,10 @@
         } else if (encoding.equals("iso8859-2")) {
             jclass = "ISO8859_2";
         } else if (encoding.equals("jisx0208.1983-0")) {
-            jclass = "sun.awt.motif.X11JIS0208";
+            jclass = "JIS0208";
             nBytes = DOUBLE_BYTE;
         } else if (encoding.equals("jisx0201.1976-0")) {
-            jclass = "sun.awt.motif.X11JIS0201";
+            jclass = "JIS0201";
             // this is mapping the latin supplement range 128->255 which
             // doesn't exist in JIS0201. This needs examination.
             // it was also overwriting a couple of the mappings of
@@ -94,7 +94,7 @@
             addAscii = true;
             lowPartOnly = true;
         } else if (encoding.equals("jisx0212.1990-0")) {
-            jclass = "sun.awt.motif.X11JIS0212";
+            jclass = "JIS0212";
             nBytes = DOUBLE_BYTE;
         } else if (encoding.equals("iso8859-4")) {
             jclass = "ISO8859_4";
@@ -117,25 +117,25 @@
         } else if (encoding.equals("iso8859-15")) {
             jclass = "ISO8859_15";
         } else if (encoding.equals("ksc5601.1987-0")) {
-            jclass ="sun.awt.motif.X11KSC5601";
+            jclass ="sun.font.X11KSC5601";
             nBytes = DOUBLE_BYTE;
         } else if (encoding.equals( "ksc5601.1992-3")) {
-            jclass ="sun.awt.motif.X11Johab";
+            jclass ="sun.font.X11Johab";
             nBytes = DOUBLE_BYTE;
         } else if (encoding.equals( "ksc5601.1987-1")) {
             jclass ="EUC_KR";
             nBytes = DOUBLE_BYTE;
         } else if (encoding.equals( "cns11643-1")) {
-            jclass = "sun.awt.motif.X11CNS11643P1";
+            jclass = "sun.font.X11CNS11643P1";
             nBytes = DOUBLE_BYTE;
         } else if (encoding.equals("cns11643-2")) {
-            jclass = "sun.awt.motif.X11CNS11643P2";
+            jclass = "sun.font.X11CNS11643P2";
             nBytes = DOUBLE_BYTE;
         } else if (encoding.equals("cns11643-3")) {
-            jclass = "sun.awt.motif.X11CNS11643P3";
+            jclass = "sun.font.X11CNS11643P3";
             nBytes = DOUBLE_BYTE;
         } else if (encoding.equals("gb2312.1980-0")) {
-            jclass = "sun.awt.motif.X11GB2312";
+            jclass = "sun.font.X11GB2312";
             nBytes = DOUBLE_BYTE;
         } else if (encoding.indexOf("big5") >= 0) {
             jclass = "Big5";
@@ -144,19 +144,19 @@
         } else if (encoding.equals("tis620.2533-0")) {
             jclass = "TIS620";
         } else if (encoding.equals("gbk-0")) {
-            jclass = "sun.awt.motif.X11GBK";
+            jclass = "sun.font.X11GBK";
             nBytes = DOUBLE_BYTE;
         } else if (encoding.indexOf("sun.unicode-0") >= 0) {
-            jclass = "sun.awt.motif.X11SunUnicode_0";
+            jclass = "sun.font.X11SunUnicode_0";
             nBytes = DOUBLE_BYTE;
         } else if (encoding.indexOf("gb18030.2000-1") >= 0) {
-            jclass = "sun.awt.motif.X11GB18030_1";
+            jclass = "sun.font.X11GB18030_1";
             nBytes = DOUBLE_BYTE;
         } else if (encoding.indexOf( "gb18030.2000-0") >= 0) {
-            jclass = "sun.awt.motif.X11GB18030_0";
+            jclass = "sun.font.X11GB18030_0";
             nBytes = DOUBLE_BYTE;
         } else if (encoding.indexOf("hkscs") >= 0) {
-            jclass = "sun.awt.HKSCS";
+            jclass = "MS950_HKSCS_XP";
             nBytes = DOUBLE_BYTE;
         }
         return new XMap(jclass, minU, maxU, nBytes, addAscii, lowPartOnly);
--- a/jdk/src/java.desktop/unix/classes/sun/java2d/opengl/GLXVolatileSurfaceManager.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/unix/classes/sun/java2d/opengl/GLXVolatileSurfaceManager.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -31,6 +31,9 @@
 import java.awt.GraphicsConfiguration;
 import java.awt.Transparency;
 import java.awt.image.ColorModel;
+
+import sun.awt.AWTAccessor;
+import sun.awt.AWTAccessor.ComponentAccessor;
 import sun.awt.X11ComponentPeer;
 import sun.awt.image.SunVolatileImage;
 import sun.awt.image.VolatileSurfaceManager;
@@ -73,12 +76,11 @@
      * Create a pbuffer-based SurfaceData object (or init the backbuffer
      * of an existing window if this is a double buffered GraphicsConfig)
      */
-    @SuppressWarnings("deprecation")
     protected SurfaceData initAcceleratedSurface() {
         SurfaceData sData;
         Component comp = vImg.getComponent();
-        X11ComponentPeer peer =
-            (comp != null) ? (X11ComponentPeer)comp.getPeer() : null;
+        final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
+        X11ComponentPeer peer = (comp != null) ? acc.getPeer(comp) : null;
 
         try {
             boolean createVSynced = false;
--- a/jdk/src/java.desktop/unix/classes/sun/java2d/xr/XRSolidSrcPict.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/unix/classes/sun/java2d/xr/XRSolidSrcPict.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,6 +1,5 @@
 /*
- * Copyright (c) 2013, 2014 Oracle and/or its affiliates. All rights reserved.
-
+ * Copyright (c) 2013, 2014, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
--- a/jdk/src/java.desktop/unix/native/common/awt/awt_Font.c	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/unix/native/common/awt/awt_Font.c	Wed Jul 05 20:33:35 2017 +0200
@@ -84,12 +84,10 @@
   (JNIEnv *env, jclass cls)
 {
 #ifndef HEADLESS
-    /** We call "NoClientCode" methods because they won't invoke client
-        code on the privileged toolkit thread **/
     CHECK_NULL(fontIDs.pData = (*env)->GetFieldID(env, cls, "pData", "J"));
     CHECK_NULL(fontIDs.style = (*env)->GetFieldID(env, cls, "style", "I"));
     CHECK_NULL(fontIDs.size = (*env)->GetFieldID(env, cls, "size", "I"));
-    CHECK_NULL(fontIDs.getPeer = (*env)->GetMethodID(env, cls, "getPeer_NoClientCode",
+    CHECK_NULL(fontIDs.getPeer = (*env)->GetMethodID(env, cls, "getFontPeer",
                                                      "()Ljava/awt/peer/FontPeer;"));
     CHECK_NULL(fontIDs.getFamily = (*env)->GetMethodID(env, cls, "getFamily_NoClientCode",
                                                        "()Ljava/lang/String;"));
--- a/jdk/src/java.desktop/unix/native/libawt_xawt/awt/awt_GraphicsEnv.c	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/unix/native/libawt_xawt/awt/awt_GraphicsEnv.c	Wed Jul 05 20:33:35 2017 +0200
@@ -1716,9 +1716,9 @@
 
         /*
          * REMIND: Fullscreen mode doesn't work quite right with multi-monitor
-         * setups and RANDR 1.2. So for now we also require a single screen.
+         * setups and RANDR 1.2.
          */
-        if (awt_numScreens > 1 ) {
+        if ((rr_maj_ver == 1 && rr_min_ver <= 2) && awt_numScreens > 1) {
             J2dRlsTraceLn(J2D_TRACE_INFO, "X11GD_InitXrandrFuncs: Can't use Xrandr. "
                           "Multiple screens in use");
             dlclose(pLibRandR);
@@ -1806,40 +1806,14 @@
     Atom wmState = XInternAtom(awt_display, "_NET_WM_STATE", False);
     Atom wmStateFs = XInternAtom(awt_display,
                                  "_NET_WM_STATE_FULLSCREEN", False);
-    Window root, parent, *children = NULL;
-    unsigned int numchildren;
+    XWindowAttributes attr;
     XEvent event;
-    Status status;
 
-    if (wmState == None || wmStateFs == None) {
+    if (wmState == None || wmStateFs == None
+            || !XGetWindowAttributes(awt_display, win, &attr)) {
         return;
     }
 
-    /*
-     * Note: the Window passed to this method is typically the "content
-     * window" of the top-level, but we need the actual shell window for
-     * the purposes of constructing the XEvent.  Therefore, we walk up the
-     * window hierarchy here to find the true top-level.
-     */
-    do {
-        if (!XQueryTree(awt_display, win,
-                        &root, &parent,
-                        &children, &numchildren))
-        {
-            return;
-        }
-
-        if (children != NULL) {
-            XFree(children);
-        }
-
-        if (parent == root) {
-            break;
-        }
-
-        win = parent;
-    } while (root != parent);
-
     memset(&event, 0, sizeof(event));
     event.xclient.type = ClientMessage;
     event.xclient.message_type = wmState;
@@ -1849,7 +1823,7 @@
     event.xclient.data.l[0] = enabled ? 1 : 0; // 1==add, 0==remove
     event.xclient.data.l[1] = wmStateFs;
 
-    XSendEvent(awt_display, root, False,
+    XSendEvent(awt_display, attr.root, False,
                SubstructureRedirectMask | SubstructureNotifyMask,
                &event);
     XSync(awt_display, False);
--- a/jdk/src/java.desktop/unix/native/libfontmanager/X11FontScaler.c	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/unix/native/libfontmanager/X11FontScaler.c	Wed Jul 05 20:33:35 2017 +0200
@@ -234,7 +234,7 @@
 
     NativeScalerContext *context = (NativeScalerContext*)pScalerContext;
     AWTFont xFont = (AWTFont)context->xFont;
-    AWTChar xcs;
+    AWTChar xcs = NULL;
     jfloat advance = 0.0f;
 
     if (xFont == NULL || context->ptSize == NO_POINTSIZE) {
--- a/jdk/src/java.desktop/windows/classes/sun/awt/Win32GraphicsDevice.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/windows/classes/sun/awt/Win32GraphicsDevice.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -329,7 +329,6 @@
     }
 
     @Override
-    @SuppressWarnings("deprecation")
     public synchronized void setFullScreenWindow(Window w) {
         Window old = getFullScreenWindow();
         if (w == old) {
@@ -353,7 +352,7 @@
                 // entering the fullscreen mode.
                 defaultDisplayMode = null;
             }
-            WWindowPeer peer = (WWindowPeer)old.getPeer();
+            WWindowPeer peer = AWTAccessor.getComponentAccessor().getPeer(old);
             if (peer != null) {
                 peer.setFullScreenExclusiveModeState(false);
                 // we used to destroy the buffers on exiting fs mode, this
@@ -372,7 +371,7 @@
             defaultDisplayMode = getDisplayMode();
             addFSWindowListener(w);
             // Enter full screen exclusive mode.
-            WWindowPeer peer = (WWindowPeer)w.getPeer();
+            WWindowPeer peer = AWTAccessor.getComponentAccessor().getPeer(w);
             if (peer != null) {
                 synchronized(peer) {
                     enterFullScreenExclusive(screen, peer);
@@ -405,7 +404,6 @@
     }
 
     @Override
-    @SuppressWarnings("deprecation")
     public synchronized void setDisplayMode(DisplayMode dm) {
         if (!isDisplayChangeSupported()) {
             super.setDisplayMode(dm);
@@ -419,7 +417,7 @@
         }
         Window w = getFullScreenWindow();
         if (w != null) {
-            WWindowPeer peer = (WWindowPeer)w.getPeer();
+            WWindowPeer peer = AWTAccessor.getComponentAccessor().getPeer(w);
             configDisplayMode(screen, peer, dm.getWidth(), dm.getHeight(),
                 dm.getBitDepth(), dm.getRefreshRate());
             // resize the fullscreen window to the dimensions of the new
--- a/jdk/src/java.desktop/windows/classes/sun/awt/windows/WChoicePeer.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/windows/classes/sun/awt/windows/WChoicePeer.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1996, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -30,6 +30,8 @@
 import java.awt.event.WindowEvent;
 import java.awt.event.WindowListener;
 import java.awt.event.WindowAdapter;
+
+import sun.awt.AWTAccessor;
 import sun.awt.SunToolkit;
 
 final class WChoicePeer extends WComponentPeer implements ChoicePeer {
@@ -94,7 +96,6 @@
     native void create(WComponentPeer parent);
 
     @Override
-    @SuppressWarnings("deprecation")
     void initialize() {
         Choice opt = (Choice)target;
         int itemCount = opt.getItemCount();
@@ -111,7 +112,8 @@
 
         Window parentWindow = SunToolkit.getContainingWindow((Component)target);
         if (parentWindow != null) {
-            WWindowPeer wpeer = (WWindowPeer)parentWindow.getPeer();
+            final WWindowPeer wpeer = AWTAccessor.getComponentAccessor()
+                                                 .getPeer(parentWindow);
             if (wpeer != null) {
                 windowListener = new WindowAdapter() {
                         @Override
@@ -130,13 +132,13 @@
     }
 
     @Override
-    @SuppressWarnings("deprecation")
     protected void disposeImpl() {
         // TODO: we should somehow reset the listener when the choice
         // is moved to another toplevel without destroying its peer.
         Window parentWindow = SunToolkit.getContainingWindow((Component)target);
         if (parentWindow != null) {
-            WWindowPeer wpeer = (WWindowPeer)parentWindow.getPeer();
+            final WWindowPeer wpeer = AWTAccessor.getComponentAccessor()
+                                                .getPeer(parentWindow);
             if (wpeer != null) {
                 wpeer.removeWindowListener(windowListener);
             }
--- a/jdk/src/java.desktop/windows/classes/sun/awt/windows/WComponentPeer.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/windows/classes/sun/awt/windows/WComponentPeer.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1996, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -569,7 +569,6 @@
     final static Font defaultFont = new Font(Font.DIALOG, Font.PLAIN, 12);
 
     @Override
-    @SuppressWarnings("deprecation")
     public Graphics getGraphics() {
         if (isDisposed()) {
             return null;
@@ -578,8 +577,9 @@
         Component target = (Component)getTarget();
         Window window = SunToolkit.getContainingWindow(target);
         if (window != null) {
-            Graphics g =
-                ((WWindowPeer)window.getPeer()).getTranslucentGraphics();
+            final WWindowPeer wpeer = AWTAccessor.getComponentAccessor()
+                                                 .getPeer(window);
+            Graphics g = wpeer.getTranslucentGraphics();
             // getTranslucentGraphics() returns non-null value for non-opaque windows only
             if (g != null) {
                 // Non-opaque windows do not support heavyweight children.
@@ -685,7 +685,6 @@
 
     // TODO: consider moving it to KeyboardFocusManagerPeerImpl
     @Override
-    @SuppressWarnings("deprecation")
     public boolean requestFocus(Component lightweightChild, boolean temporary,
                                 boolean focusedWindowChangeAllowed, long time,
                                 CausedFocusEvent.Cause cause)
@@ -713,7 +712,8 @@
               if (parentWindow == null) {
                   return rejectFocusRequestHelper("WARNING: Parent window is null");
               }
-              WWindowPeer wpeer = (WWindowPeer)parentWindow.getPeer();
+              final WWindowPeer wpeer = AWTAccessor.getComponentAccessor()
+                                                   .getPeer(parentWindow);
               if (wpeer == null) {
                   return rejectFocusRequestHelper("WARNING: Parent window's peer is null");
               }
@@ -1104,7 +1104,6 @@
     // in the browser on Vista when DWM is enabled.
     // @return true if the toplevel container is not an EmbeddedFrame or
     // if this EmbeddedFrame is acceleration capable, false otherwise
-    @SuppressWarnings("deprecation")
     private static final boolean isContainingTopLevelAccelCapable(Component c) {
         while (c != null && !(c instanceof WEmbeddedFrame)) {
             c = c.getParent();
@@ -1112,7 +1111,9 @@
         if (c == null) {
             return true;
         }
-        return ((WEmbeddedFramePeer)c.getPeer()).isAccelCapable();
+        final WEmbeddedFramePeer peer = AWTAccessor.getComponentAccessor()
+                                                   .getPeer(c);
+        return peer.isAccelCapable();
     }
 
     /**
@@ -1120,7 +1121,6 @@
      * @since 1.7
      */
     @Override
-    @SuppressWarnings("deprecation")
     public void applyShape(Region shape) {
         if (shapeLog.isLoggable(PlatformLogger.Level.FINER)) {
             shapeLog.finer("*** INFO: Setting shape: PEER: " + this
--- a/jdk/src/java.desktop/windows/classes/sun/awt/windows/WDialogPeer.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/windows/classes/sun/awt/windows/WDialogPeer.java	Wed Jul 05 20:33:35 2017 +0200
@@ -103,7 +103,7 @@
     @Override
     public void blockWindows(java.util.List<Window> toBlock) {
         for (Window w : toBlock) {
-            WWindowPeer wp = (WWindowPeer)AWTAccessor.getComponentAccessor().getPeer(w);
+            WWindowPeer wp = AWTAccessor.getComponentAccessor().getPeer(w);
             if (wp != null) {
                 wp.setModalBlocked((Dialog)target, true);
             }
--- a/jdk/src/java.desktop/windows/classes/sun/awt/windows/WEmbeddedFrame.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/windows/classes/sun/awt/windows/WEmbeddedFrame.java	Wed Jul 05 20:33:35 2017 +0200
@@ -30,8 +30,11 @@
 import java.awt.event.InvocationEvent;
 import java.awt.peer.ComponentPeer;
 import java.awt.image.*;
+
 import sun.awt.image.ByteInterleavedRaster;
 import sun.security.action.GetPropertyAction;
+
+import java.awt.peer.FramePeer;
 import java.security.PrivilegedAction;
 import  java.security.AccessController;
 
@@ -80,9 +83,8 @@
         }
     }
 
-    @SuppressWarnings("deprecation")
     public void addNotify() {
-        if (getPeer() == null) {
+        if (!isDisplayable()) {
             WToolkit toolkit = (WToolkit)Toolkit.getDefaultToolkit();
             setPeer(toolkit.createEmbeddedFrame(this));
         }
@@ -232,16 +234,16 @@
     public void activateEmbeddingTopLevel() {
     }
 
-    @SuppressWarnings("deprecation")
     public void synthesizeWindowActivation(final boolean activate) {
+        final FramePeer peer = AWTAccessor.getComponentAccessor().getPeer(this);
         if (!activate || EventQueue.isDispatchThread()) {
-            ((WFramePeer)getPeer()).emulateActivation(activate);
+            peer.emulateActivation(activate);
         } else {
             // To avoid focus concurrence b/w IE and EmbeddedFrame
             // activation is postponed by means of posting it to EDT.
             Runnable r = new Runnable() {
                 public void run() {
-                    ((WFramePeer)getPeer()).emulateActivation(true);
+                    peer.emulateActivation(true);
                 }
             };
             WToolkit.postEvent(WToolkit.targetToAppContext(this),
@@ -249,10 +251,11 @@
         }
     }
 
-    @SuppressWarnings("deprecation")
     public boolean requestFocusToEmbedder() {
         if (isEmbeddedInIE) {
-            return ((WEmbeddedFramePeer) getPeer()).requestFocusToEmbedder();
+            final WEmbeddedFramePeer peer = AWTAccessor.getComponentAccessor()
+                                                       .getPeer(this);
+            return peer.requestFocusToEmbedder();
         }
         return false;
     }
--- a/jdk/src/java.desktop/windows/classes/sun/awt/windows/WFileDialogPeer.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/windows/classes/sun/awt/windows/WFileDialogPeer.java	Wed Jul 05 20:33:35 2017 +0200
@@ -237,7 +237,7 @@
     @Override
     public void blockWindows(java.util.List<Window> toBlock) {
         for (Window w : toBlock) {
-            WWindowPeer wp = (WWindowPeer)AWTAccessor.getComponentAccessor().getPeer(w);
+            WWindowPeer wp = AWTAccessor.getComponentAccessor().getPeer(w);
             if (wp != null) {
                 blockWindow(wp);
             }
--- a/jdk/src/java.desktop/windows/classes/sun/awt/windows/WInputMethod.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/windows/classes/sun/awt/windows/WInputMethod.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -40,6 +40,9 @@
 import java.util.HashMap;
 import java.util.Locale;
 import java.util.Map;
+
+import sun.awt.AWTAccessor;
+import sun.awt.AWTAccessor.ComponentAccessor;
 import sun.awt.im.InputMethodAdapter;
 
 final class WInputMethod extends InputMethodAdapter
@@ -606,18 +609,17 @@
 
     // java.awt.Toolkit#getNativeContainer() is not available
     //  from this package
-    @SuppressWarnings("deprecation")
     private WComponentPeer getNearestNativePeer(Component comp)
     {
         if (comp==null)     return null;
-
-        ComponentPeer peer = comp.getPeer();
+        final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
+        ComponentPeer peer = acc.getPeer(comp);
         if (peer==null)     return null;
 
         while (peer instanceof java.awt.peer.LightweightPeer) {
             comp = comp.getParent();
             if (comp==null) return null;
-            peer = comp.getPeer();
+            peer = acc.getPeer(comp);
             if (peer==null) return null;
         }
 
--- a/jdk/src/java.desktop/windows/classes/sun/awt/windows/WKeyboardFocusManagerPeer.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/windows/classes/sun/awt/windows/WKeyboardFocusManagerPeer.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -28,6 +28,9 @@
 import java.awt.Window;
 import java.awt.Component;
 import java.awt.peer.ComponentPeer;
+
+import sun.awt.AWTAccessor;
+import sun.awt.AWTAccessor.ComponentAccessor;
 import sun.awt.KeyboardFocusManagerPeerImpl;
 import sun.awt.CausedFocusEvent;
 
@@ -46,9 +49,9 @@
     }
 
     @Override
-    @SuppressWarnings("deprecation")
     public void setCurrentFocusOwner(Component comp) {
-        setNativeFocusOwner(comp != null ? comp.getPeer() : null);
+        final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
+        setNativeFocusOwner(comp != null ? acc.getPeer(comp) : null);
     }
 
     @Override
--- a/jdk/src/java.desktop/windows/classes/sun/awt/windows/WPageDialog.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/windows/classes/sun/awt/windows/WPageDialog.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -57,15 +57,13 @@
     }
 
     @Override
-    @SuppressWarnings("deprecation")
     public void addNotify() {
         synchronized(getTreeLock()) {
             Container parent = getParent();
-            if (parent != null && parent.getPeer() == null) {
+            if (parent != null && !parent.isDisplayable()) {
                 parent.addNotify();
             }
-
-            if (getPeer() == null) {
+            if (!isDisplayable()) {
                 ComponentPeer peer = ((WToolkit)Toolkit.getDefaultToolkit()).
                     createWPageDialog(this);
                 setPeer(peer);
--- a/jdk/src/java.desktop/windows/classes/sun/awt/windows/WPrintDialog.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/windows/classes/sun/awt/windows/WPrintDialog.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -58,15 +58,14 @@
     }
 
     @Override
-    @SuppressWarnings("deprecation")
     public void addNotify() {
         synchronized(getTreeLock()) {
             Container parent = getParent();
-            if (parent != null && parent.getPeer() == null) {
+            if (parent != null && !parent.isDisplayable()) {
                 parent.addNotify();
             }
 
-            if (getPeer() == null) {
+            if (!isDisplayable()) {
                 ComponentPeer peer = ((WToolkit)Toolkit.getDefaultToolkit()).
                     createWPrintDialog(this);
                 setPeer(peer);
--- a/jdk/src/java.desktop/windows/classes/sun/awt/windows/WPrintDialogPeer.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/windows/classes/sun/awt/windows/WPrintDialogPeer.java	Wed Jul 05 20:33:35 2017 +0200
@@ -112,7 +112,7 @@
     @Override
     public void blockWindows(java.util.List<Window> toBlock) {
         for (Window w : toBlock) {
-            WWindowPeer wp = (WWindowPeer)AWTAccessor.getComponentAccessor().getPeer(w);
+            WWindowPeer wp = AWTAccessor.getComponentAccessor().getPeer(w);
             if (wp != null) {
                 blockWindow(wp);
             }
--- a/jdk/src/java.desktop/windows/classes/sun/awt/windows/WPrinterJob.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/windows/classes/sun/awt/windows/WPrinterJob.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -30,13 +30,11 @@
 import java.awt.Graphics2D;
 import java.awt.GraphicsEnvironment;
 import java.awt.HeadlessException;
-import java.awt.KeyboardFocusManager;
 import java.awt.Toolkit;
 import java.awt.BasicStroke;
 import java.awt.Button;
 import java.awt.Component;
 import java.awt.Dimension;
-import java.awt.Event;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.awt.FileDialog;
@@ -62,6 +60,8 @@
 import java.util.MissingResourceException;
 import java.util.ResourceBundle;
 
+import sun.awt.AWTAccessor;
+import sun.awt.AWTAccessor.ComponentAccessor;
 import sun.print.PeekGraphics;
 import sun.print.PeekMetrics;
 
@@ -2117,7 +2117,6 @@
                                              short xres_quality,
                                              short yres);
 
-    @SuppressWarnings("deprecation")
     public PrintRequestAttributeSet
         showDocumentProperties(Window owner,
                                PrintService service,
@@ -2127,7 +2126,8 @@
             setNativePrintServiceIfNeeded(service.getName());
         } catch (PrinterException e) {
         }
-        long hWnd = ((WWindowPeer)(owner.getPeer())).getHWnd();
+        final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
+        long hWnd = acc.<WComponentPeer>getPeer(owner).getHWnd();
         DevModeValues info = new DevModeValues();
         getDevModeValues(aset, info);
         boolean ok =
--- a/jdk/src/java.desktop/windows/classes/sun/awt/windows/WScrollPanePeer.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/windows/classes/sun/awt/windows/WScrollPanePeer.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1996, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -29,6 +29,7 @@
 import java.awt.peer.ScrollPanePeer;
 
 import sun.awt.AWTAccessor;
+import sun.awt.AWTAccessor.ComponentAccessor;
 import sun.awt.PeerEvent;
 
 import sun.util.logging.PlatformLogger;
@@ -199,7 +200,6 @@
         }
 
         @Override
-        @SuppressWarnings("deprecation")
         public void run() {
             if (getScrollChild() == null) {
                 return;
@@ -267,8 +267,9 @@
             // Paint the exposed area right away.  To do this - find
             // the heavyweight ancestor of the scroll child.
             Component hwAncestor = getScrollChild();
+            final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
             while (hwAncestor != null
-                   && !(hwAncestor.getPeer() instanceof WComponentPeer))
+                   && !(acc.getPeer(hwAncestor) instanceof WComponentPeer))
             {
                 hwAncestor = hwAncestor.getParent();
             }
@@ -278,7 +279,7 @@
                              "couldn't find heavyweight ancestor of scroll pane child");
                 }
             }
-            WComponentPeer hwPeer = (WComponentPeer)hwAncestor.getPeer();
+            WComponentPeer hwPeer = acc.getPeer(hwAncestor);
             hwPeer.paintDamagedAreaImmediately();
         }
     }
--- a/jdk/src/java.desktop/windows/classes/sun/awt/windows/WToolkit.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/windows/classes/sun/awt/windows/WToolkit.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1996, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -36,6 +36,8 @@
 import java.beans.PropertyChangeListener;
 import java.security.AccessController;
 import java.security.PrivilegedAction;
+
+import sun.awt.AWTAccessor;
 import sun.awt.AppContext;
 import sun.awt.AWTAutoShutdown;
 import sun.awt.AWTPermissions;
@@ -301,9 +303,10 @@
     public void run() {
         AccessController.doPrivileged((PrivilegedAction<Void>) () -> {
             Thread.currentThread().setContextClassLoader(null);
+            Thread.currentThread().setPriority(Thread.NORM_PRIORITY + 1);
             return null;
         });
-        Thread.currentThread().setPriority(Thread.NORM_PRIORITY + 1);
+
         boolean startPump = init();
 
         if (startPump) {
@@ -438,9 +441,8 @@
     }
 
     @Override
-    @SuppressWarnings("deprecation")
     public void disableBackgroundErase(Canvas canvas) {
-        WCanvasPeer peer = (WCanvasPeer)canvas.getPeer();
+        WCanvasPeer peer = AWTAccessor.getComponentAccessor().getPeer(canvas);
         if (peer == null) {
             throw new IllegalStateException("Canvas must have a valid peer");
         }
@@ -1100,18 +1102,18 @@
     }
 
     @Override
-    @SuppressWarnings("deprecation")
     public void grab(Window w) {
-        if (w.getPeer() != null) {
-            ((WWindowPeer)w.getPeer()).grab();
+        final Object peer = AWTAccessor.getComponentAccessor().getPeer(w);
+        if (peer != null) {
+            ((WWindowPeer) peer).grab();
         }
     }
 
     @Override
-    @SuppressWarnings("deprecation")
     public void ungrab(Window w) {
-        if (w.getPeer() != null) {
-           ((WWindowPeer)w.getPeer()).ungrab();
+        final Object peer = AWTAccessor.getComponentAccessor().getPeer(w);
+        if (peer != null) {
+            ((WWindowPeer) peer).ungrab();
         }
     }
 
--- a/jdk/src/java.desktop/windows/classes/sun/awt/windows/WTrayIconPeer.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/windows/classes/sun/awt/windows/WTrayIconPeer.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -34,6 +34,8 @@
 import java.awt.Image;
 import java.awt.peer.TrayIconPeer;
 import java.awt.image.*;
+
+import sun.awt.AWTAccessor;
 import sun.awt.SunToolkit;
 import sun.awt.image.IntegerComponentRaster;
 
@@ -80,25 +82,23 @@
         if (isDisposed())
             return;
 
-        SunToolkit.executeOnEventHandlerThread(target, new Runnable() {
-                @Override
-                @SuppressWarnings("deprecation")
-                public void run() {
-                    PopupMenu newPopup = ((TrayIcon)target).getPopupMenu();
-                    if (popup != newPopup) {
-                        if (popup != null) {
-                            popupParent.remove(popup);
-                        }
-                        if (newPopup != null) {
-                            popupParent.add(newPopup);
-                        }
-                        popup = newPopup;
-                    }
-                    if (popup != null) {
-                        ((WPopupMenuPeer)popup.getPeer()).show(popupParent, new Point(x, y));
-                    }
+        SunToolkit.executeOnEventHandlerThread(target, () -> {
+            PopupMenu newPopup = ((TrayIcon)target).getPopupMenu();
+            if (popup != newPopup) {
+                if (popup != null) {
+                    popupParent.remove(popup);
+                }
+                if (newPopup != null) {
+                    popupParent.add(newPopup);
                 }
-            });
+                popup = newPopup;
+            }
+            if (popup != null) {
+                WPopupMenuPeer peer = AWTAccessor.getMenuComponentAccessor()
+                                                 .getPeer(popup);
+                peer.show(popupParent, new Point(x, y));
+            }
+        });
     }
 
     @Override
--- a/jdk/src/java.desktop/windows/classes/sun/awt/windows/WWindowPeer.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/windows/classes/sun/awt/windows/WWindowPeer.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1996, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -409,12 +409,12 @@
     }
 
      @Override
-     @SuppressWarnings("deprecation")
     public void setModalBlocked(Dialog dialog, boolean blocked) {
         synchronized (((Component)getTarget()).getTreeLock()) // State lock should always be after awtLock
         {
             // use WWindowPeer instead of WDialogPeer because of FileDialogs and PrintDialogs
-            WWindowPeer blockerPeer = (WWindowPeer)dialog.getPeer();
+            WWindowPeer blockerPeer = AWTAccessor.getComponentAccessor()
+                                                 .getPeer(dialog);
             if (blocked)
             {
                 modalBlocker = blockerPeer;
@@ -609,14 +609,13 @@
         super.print(g);
     }
 
-    @SuppressWarnings("deprecation")
     private void replaceSurfaceDataRecursively(Component c) {
         if (c instanceof Container) {
             for (Component child : ((Container)c).getComponents()) {
                 replaceSurfaceDataRecursively(child);
             }
         }
-        ComponentPeer cp = c.getPeer();
+        final Object cp = AWTAccessor.getComponentAccessor().getPeer(c);
         if (cp instanceof WComponentPeer) {
             ((WComponentPeer)cp).replaceSurfaceDataLater();
         }
@@ -818,7 +817,7 @@
      * updates the list of active windows per AppContext, so the latest active
      * window is always at the end of the list. The list is stored in AppContext.
      */
-    @SuppressWarnings( value = {"deprecation", "unchecked"})
+    @SuppressWarnings("unchecked")
     private static class ActiveWindowListener implements PropertyChangeListener {
         @Override
         public void propertyChange(PropertyChangeEvent e) {
@@ -828,7 +827,7 @@
             }
             AppContext appContext = SunToolkit.targetToAppContext(w);
             synchronized (appContext) {
-                WWindowPeer wp = (WWindowPeer)w.getPeer();
+                WWindowPeer wp = AWTAccessor.getComponentAccessor().getPeer(w);
                 // add/move wp to the end of the list
                 List<WWindowPeer> l = (List<WWindowPeer>)appContext.get(ACTIVE_WINDOWS_KEY);
                 if (l != null) {
--- a/jdk/src/java.desktop/windows/classes/sun/java2d/d3d/D3DGraphicsDevice.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/windows/classes/sun/java2d/d3d/D3DGraphicsDevice.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -37,6 +37,9 @@
 import java.awt.event.WindowListener;
 import java.awt.peer.WindowPeer;
 import java.util.ArrayList;
+
+import sun.awt.AWTAccessor;
+import sun.awt.AWTAccessor.ComponentAccessor;
 import sun.awt.Win32GraphicsDevice;
 import sun.awt.windows.WWindowPeer;
 import sun.java2d.pipe.hw.ContextCapabilities;
@@ -176,11 +179,10 @@
                                                                  long hwnd);
 
     @Override
-    @SuppressWarnings("deprecation")
     protected void enterFullScreenExclusive(final int screen, WindowPeer wp)
     {
-        final WWindowPeer wpeer = (WWindowPeer)realFSWindow.getPeer();
-
+        final WWindowPeer wpeer = AWTAccessor.getComponentAccessor()
+                                             .getPeer(realFSWindow);
         D3DRenderQueue rq = D3DRenderQueue.getInstance();
         rq.lock();
         try {
@@ -247,16 +249,15 @@
     }
 
     @Override
-    @SuppressWarnings("deprecation")
     protected void addFSWindowListener(Window w) {
         // if the window is not a toplevel (has an owner) we have to use the
         // real toplevel to enter the full-screen mode with (4933099).
+        final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
         if (!(w instanceof Frame) && !(w instanceof Dialog) &&
             (realFSWindow = getToplevelOwner(w)) != null)
         {
             ownerOrigBounds = realFSWindow.getBounds();
-            WWindowPeer fp = (WWindowPeer)realFSWindow.getPeer();
-
+            WWindowPeer fp = acc.getPeer(realFSWindow);
             ownerWasVisible = realFSWindow.isVisible();
             Rectangle r = w.getBounds();
             // we use operations on peer instead of component because calling
@@ -268,14 +269,13 @@
         }
 
         fsWindowWasAlwaysOnTop = realFSWindow.isAlwaysOnTop();
-        ((WWindowPeer)realFSWindow.getPeer()).setAlwaysOnTop(true);
+        ((WWindowPeer) acc.getPeer(realFSWindow)).setAlwaysOnTop(true);
 
         fsWindowListener = new D3DFSWindowAdapter();
         realFSWindow.addWindowListener(fsWindowListener);
     }
 
     @Override
-    @SuppressWarnings("deprecation")
     protected void removeFSWindowListener(Window w) {
         realFSWindow.removeWindowListener(fsWindowListener);
         fsWindowListener = null;
@@ -290,7 +290,8 @@
          * its original size (just like the Window is being resized
          * to its original size in GraphicsDevice).
          */
-        WWindowPeer wpeer = (WWindowPeer)realFSWindow.getPeer();
+        final WWindowPeer wpeer = AWTAccessor.getComponentAccessor()
+                                             .getPeer(realFSWindow);
         if (wpeer != null) {
             if (ownerOrigBounds != null) {
                 // if the window went into fs mode before it was realized it
@@ -340,7 +341,6 @@
                                                        int bitDepth,
                                                        int refreshRate);
     @Override
-    @SuppressWarnings("deprecation")
     protected void configDisplayMode(final int screen, final WindowPeer w,
                                      final int width, final int height,
                                      final int bitDepth, final int refreshRate)
@@ -351,8 +351,8 @@
                                     refreshRate);
             return;
         }
-
-        final WWindowPeer wpeer = (WWindowPeer)realFSWindow.getPeer();
+        final WWindowPeer wpeer = AWTAccessor.getComponentAccessor()
+                                             .getPeer(realFSWindow);
 
         // REMIND: we do this before we switch the display mode, so
         // the dimensions may be exceeding the dimensions of the screen,
--- a/jdk/src/java.desktop/windows/classes/sun/java2d/d3d/D3DScreenUpdateManager.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/windows/classes/sun/java2d/d3d/D3DScreenUpdateManager.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -38,6 +38,7 @@
 import java.util.HashMap;
 
 import sun.awt.AWTAccessor;
+import sun.awt.AWTAccessor.ComponentAccessor;
 import sun.awt.util.ThreadGroupUtils;
 import sun.awt.Win32GraphicsConfig;
 import sun.awt.windows.WComponentPeer;
@@ -531,11 +532,11 @@
      * @param comp component to check for hw children
      * @return true if Component has heavyweight children
      */
-    @SuppressWarnings("deprecation")
     private static boolean hasHWChildren(Component comp) {
+        final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
         if (comp instanceof Container) {
             for (Component c : ((Container)comp).getComponents()) {
-                if (c.getPeer() instanceof WComponentPeer || hasHWChildren(c)) {
+                if (acc.getPeer(c) instanceof WComponentPeer || hasHWChildren(c)) {
                     return true;
                 }
             }
--- a/jdk/src/java.desktop/windows/classes/sun/java2d/d3d/D3DVolatileSurfaceManager.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/windows/classes/sun/java2d/d3d/D3DVolatileSurfaceManager.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -30,6 +30,9 @@
 import java.awt.Image;
 import java.awt.Transparency;
 import java.awt.image.ColorModel;
+
+import sun.awt.AWTAccessor;
+import sun.awt.AWTAccessor.ComponentAccessor;
 import sun.awt.Win32GraphicsConfig;
 import sun.awt.image.SunVolatileImage;
 import sun.awt.image.SurfaceManager;
@@ -79,12 +82,11 @@
      * Create a pbuffer-based SurfaceData object (or init the backbuffer
      * of an existing window if this is a double buffered GraphicsConfig).
      */
-    @SuppressWarnings("deprecation")
     protected SurfaceData initAcceleratedSurface() {
         SurfaceData sData;
         Component comp = vImg.getComponent();
-        WComponentPeer peer =
-            (comp != null) ? (WComponentPeer)comp.getPeer() : null;
+        final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
+        WComponentPeer peer = (comp != null) ? acc.getPeer(comp) : null;
 
         try {
             boolean forceback = false;
--- a/jdk/src/java.desktop/windows/classes/sun/java2d/opengl/WGLVolatileSurfaceManager.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/windows/classes/sun/java2d/opengl/WGLVolatileSurfaceManager.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2004, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2004, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -31,6 +31,9 @@
 import java.awt.GraphicsConfiguration;
 import java.awt.Transparency;
 import java.awt.image.ColorModel;
+
+import sun.awt.AWTAccessor;
+import sun.awt.AWTAccessor.ComponentAccessor;
 import sun.awt.image.SunVolatileImage;
 import sun.awt.image.VolatileSurfaceManager;
 import sun.awt.windows.WComponentPeer;
@@ -73,12 +76,11 @@
      * Create a pbuffer-based SurfaceData object (or init the backbuffer
      * of an existing window if this is a double buffered GraphicsConfig).
      */
-    @SuppressWarnings("deprecation")
     protected SurfaceData initAcceleratedSurface() {
         SurfaceData sData;
         Component comp = vImg.getComponent();
-        WComponentPeer peer =
-            (comp != null) ? (WComponentPeer)comp.getPeer() : null;
+        final ComponentAccessor acc = AWTAccessor.getComponentAccessor();
+        WComponentPeer peer = (comp != null) ? acc.getPeer(comp) : null;
 
         try {
             boolean createVSynced = false;
--- a/jdk/src/java.desktop/windows/classes/sun/java2d/windows/WindowsFlags.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/windows/classes/sun/java2d/windows/WindowsFlags.java	Wed Jul 05 20:33:35 2017 +0200
@@ -126,7 +126,6 @@
     private static boolean disableRegistry;
     private static boolean magPresent;
     private static boolean setHighDPIAware;
-    private static String javaVersion;
     // TODO: other flags, including nopixfmt
 
     static {
@@ -240,17 +239,6 @@
                     getBooleanProp("sun.java2d.checkRegistry", false);
                 disableRegistry =
                     getBooleanProp("sun.java2d.disableRegistry", false);
-                javaVersion = System.getProperty("java.version");
-                if (javaVersion == null) {
-                    // Cannot be true, nonetheless...
-                    javaVersion = "default";
-                } else {
-                    int dashIndex = javaVersion.indexOf('-');
-                    if (dashIndex >= 0) {
-                        // an interim release; use only the part preceding the -
-                        javaVersion = javaVersion.substring(0, dashIndex);
-                    }
-                }
                 String dpiOverride = System.getProperty("sun.java2d.dpiaware");
                 if (dpiOverride != null) {
                     setHighDPIAware = dpiOverride.equalsIgnoreCase("true");
--- a/jdk/src/java.desktop/windows/native/libawt/windows/awt_Button.cpp	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/windows/native/libawt/windows/awt_Button.cpp	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1996, 2011, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -242,7 +242,8 @@
         RECT focusRect;
         VERIFY(::CopyRect(&focusRect, &rect));
         VERIFY(::InflateRect(&focusRect,-inf,-inf));
-        VERIFY(::DrawFocusRect(hDC, &focusRect));
+        if(::DrawFocusRect(hDC, &focusRect) == 0)
+            VERIFY(::GetLastError() == 0);
     }
 
     /* Notify any subclasses */
--- a/jdk/src/java.desktop/windows/native/libawt/windows/awt_Checkbox.cpp	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/windows/native/libawt/windows/awt_Checkbox.cpp	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1996, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -290,12 +290,14 @@
     if ((drawInfo.itemState & ODS_FOCUS) &&
         ((drawInfo.itemAction & ODA_FOCUS)||
          (drawInfo.itemAction &ODA_DRAWENTIRE))) {
-        VERIFY(::DrawFocusRect(hDC, &focusRect));
+        if(::DrawFocusRect(hDC, &focusRect) == 0)
+            VERIFY(::GetLastError() == 0);
     }
     /*  erase focus rect */
     else if (!(drawInfo.itemState & ODS_FOCUS) &&
              (drawInfo.itemAction & ODA_FOCUS)) {
-        VERIFY(::DrawFocusRect(hDC, &focusRect));
+        if(::DrawFocusRect(hDC, &focusRect) == 0)
+            VERIFY(::GetLastError() == 0);
     }
 
     /*  Notify any subclasses */
--- a/jdk/src/java.desktop/windows/native/libawt/windows/awt_Component.cpp	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/windows/native/libawt/windows/awt_Component.cpp	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1996, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1996, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -3742,12 +3742,14 @@
 void AwtComponent::OpenCandidateWindow(int x, int y)
 {
     UINT bits = 1;
-    RECT rc;
-    GetWindowRect(GetHWnd(), &rc);
+    POINT p = {0, 0}; // upper left corner of the client area
+    HWND hWnd = GetHWnd();
+    HWND hTop = GetTopLevelParentForWindow(hWnd);
+    ::ClientToScreen(hTop, &p);
 
     for (int iCandType=0; iCandType<32; iCandType++, bits<<=1) {
         if ( m_bitsCandType & bits )
-            SetCandidateWindow(iCandType, x-rc.left, y-rc.top);
+            SetCandidateWindow(iCandType, x - p.x, y - p.y);
     }
     if (m_bitsCandType != 0) {
         // REMIND: is there any chance GetProxyFocusOwner() returns NULL here?
@@ -4322,7 +4324,8 @@
     if ((drawInfo.itemState & ODS_FOCUS)  &&
         (drawInfo.itemAction & (ODA_FOCUS | ODA_DRAWENTIRE))) {
       if (!unfocusableChoice){
-          VERIFY(::DrawFocusRect(hDC, &rect));
+          if(::DrawFocusRect(hDC, &rect) == 0)
+              VERIFY(::GetLastError() == 0);
       }
     }
     env->DeleteLocalRef(target);
--- a/jdk/src/java.desktop/windows/native/libawt/windows/awt_Font.cpp	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.desktop/windows/native/libawt/windows/awt_Font.cpp	Wed Jul 05 20:33:35 2017 +0200
@@ -985,7 +985,7 @@
 JNIEXPORT void JNICALL
 Java_java_awt_Font_initIDs(JNIEnv *env, jclass cls)
 {
-    CHECK_NULL(AwtFont::peerMID = env->GetMethodID(cls, "getPeer",
+    CHECK_NULL(AwtFont::peerMID = env->GetMethodID(cls, "getFontPeer",
          "()Ljava/awt/peer/FontPeer;"));
     CHECK_NULL(AwtFont::pDataID = env->GetFieldID(cls, "pData", "J"));
     CHECK_NULL(AwtFont::nameID =
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.naming/share/classes/sun/security/provider/certpath/ldap/JdkLDAP.java	Wed Jul 05 20:33:35 2017 +0200
@@ -0,0 +1,90 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package sun.security.provider.certpath.ldap;
+
+import java.util.HashMap;
+import java.util.List;
+import java.security.Provider;
+import java.security.NoSuchAlgorithmException;
+import java.security.InvalidParameterException;
+import java.security.InvalidAlgorithmParameterException;
+import java.security.ProviderException;
+import java.security.cert.CertStoreParameters;
+
+/**
+ * Provider class for the JdkLDAP provider.
+ * Supports LDAP cert store.
+ *
+ * @since   1.9
+ */
+public final class JdkLDAP extends Provider {
+
+    private static final long serialVersionUID = -2279741232933606418L;
+
+    private static final class ProviderService extends Provider.Service {
+        ProviderService(Provider p, String type, String algo, String cn,
+            List<String> aliases, HashMap<String, String> attrs) {
+            super(p, type, algo, cn, aliases, attrs);
+        }
+
+        @Override
+        public Object newInstance(Object ctrParamObj)
+            throws NoSuchAlgorithmException {
+            String type = getType();
+            String algo = getAlgorithm();
+            if (type.equals("CertStore") && algo.equals("LDAP")) {
+                if (ctrParamObj != null &&
+                    !(ctrParamObj instanceof CertStoreParameters)) {
+                    throw new InvalidParameterException
+                    ("constructorParameter must be instanceof CertStoreParameters");
+                }
+                try {
+                    return new LDAPCertStore((CertStoreParameters) ctrParamObj);
+                } catch (Exception ex) {
+                    throw new NoSuchAlgorithmException("Error constructing " +
+                        type + " for " + algo + " using JdkLDAP", ex);
+                }
+            }
+            throw new ProviderException("No impl for " + algo + " " + type);
+        }
+    }
+
+    public JdkLDAP() {
+        super("JdkLDAP", 1.9d, "JdkLDAP Provider (implements LDAP CertStore)");
+
+        HashMap<String, String> attrs = new HashMap<>(2);
+        attrs.put("LDAPSchema", "RFC2587");
+        attrs.put("ImplementedIn", "Software");
+
+        /*
+         * CertStore
+         * attrs: LDAPSchema, ImplementedIn
+         */
+        putService(new ProviderService(this, "CertStore",
+            "LDAP", "sun.security.provider.certpath.ldap.LDAPCertStore",
+            null, attrs));
+    }
+}
--- a/jdk/src/java.naming/share/classes/sun/security/provider/certpath/ldap/LDAPCertStore.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.naming/share/classes/sun/security/provider/certpath/ldap/LDAPCertStore.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,29 +25,15 @@
 
 package sun.security.provider.certpath.ldap;
 
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
 import java.math.BigInteger;
 import java.net.URI;
 import java.util.*;
-import javax.naming.Context;
-import javax.naming.NamingEnumeration;
-import javax.naming.NamingException;
-import javax.naming.NameNotFoundException;
-import javax.naming.directory.Attribute;
-import javax.naming.directory.Attributes;
-import javax.naming.directory.BasicAttributes;
 
 import java.security.*;
 import java.security.cert.Certificate;
 import java.security.cert.*;
-import javax.naming.CommunicationException;
-import javax.naming.ldap.InitialLdapContext;
-import javax.naming.ldap.LdapContext;
 import javax.security.auth.x500.X500Principal;
 
-import sun.misc.HexDumpEncoder;
-import sun.security.provider.certpath.X509CertificatePair;
 import sun.security.util.Cache;
 import sun.security.util.Debug;
 import sun.security.x509.X500Name;
@@ -109,480 +95,124 @@
 
     private final static boolean DEBUG = false;
 
-    /**
-     * LDAP attribute identifiers.
-     */
-    private static final String USER_CERT = "userCertificate;binary";
-    private static final String CA_CERT = "cACertificate;binary";
-    private static final String CROSS_CERT = "crossCertificatePair;binary";
-    private static final String CRL = "certificateRevocationList;binary";
-    private static final String ARL = "authorityRevocationList;binary";
-    private static final String DELTA_CRL = "deltaRevocationList;binary";
+    private String ldapDN;
+
+    private LDAPCertStoreImpl impl;
+
+    public LDAPCertStore(CertStoreParameters params)
+        throws InvalidAlgorithmParameterException {
+        super(params);
 
-    // Constants for various empty values
-    private final static String[] STRING0 = new String[0];
-
-    private final static byte[][] BB0 = new byte[0][];
-
-    private final static Attributes EMPTY_ATTRIBUTES = new BasicAttributes();
-
-    // cache related constants
-    private final static int DEFAULT_CACHE_SIZE = 750;
-    private final static int DEFAULT_CACHE_LIFETIME = 30;
+        String serverName;
+        int port;
+        String dn = null;
+        if (params == null) {
+            throw new InvalidAlgorithmParameterException(
+                "parameters required for LDAP Certore");
+        }
+        if (params instanceof LDAPCertStoreParameters) {
+            LDAPCertStoreParameters p = (LDAPCertStoreParameters) params;
+            serverName = p.getServerName();
+            port = p.getPort();
+        } else if (params instanceof URICertStoreParameters) {
+            URICertStoreParameters p = (URICertStoreParameters) params;
+            URI u = p.getURI();
+            if (!u.getScheme().equalsIgnoreCase("ldap")) {
+                throw new InvalidAlgorithmParameterException(
+                "Only LDAP URIs are supported for LDAP Certore");
+            }
+            // Use the same default values as in LDAPCertStoreParameters
+            // if unspecified in URI
+            serverName = u.getHost();
+            if (serverName == null) {
+                serverName = "localhost";
+            }
+            port = u.getPort();
+            if (port == -1) {
+                port = 389;
+            }
+            dn = u.getPath();
+            if (dn != null && dn.charAt(0) == '/') {
+                dn = dn.substring(1);
+            }
+        } else {
+            throw new InvalidAlgorithmParameterException(
+                "parameters must be either LDAPCertStoreParameters or " +
+                "URICertStoreParameters");
+        }
 
-    private final static int LIFETIME;
+        Key k = new Key(serverName, port);
+        LDAPCertStoreImpl lci = certStoreCache.get(k);
+        if (lci == null) {
+            this.impl = new LDAPCertStoreImpl(serverName, port);
+            certStoreCache.put(k, impl);
+        } else {
+            this.impl = lci;
+            if (debug != null) {
+                debug.println("LDAPCertStore.getInstance: cache hit");
+            }
+        }
+        this.ldapDN = dn;
+    }
 
-    private final static String PROP_LIFETIME =
-                            "sun.security.certpath.ldap.cache.lifetime";
+    private static class Key {
+        volatile int hashCode;
+
+        String serverName;
+        int port;
 
-    /*
-     * Internal system property, that when set to "true", disables the
-     * JNDI application resource files lookup to prevent recursion issues
-     * when validating signed JARs with LDAP URLs in certificates.
-     */
-    private final static String PROP_DISABLE_APP_RESOURCE_FILES =
-        "sun.security.certpath.ldap.disable.app.resource.files";
+        Key(String serverName, int port) {
+            this.serverName = serverName;
+            this.port = port;
+        }
 
-    static {
-        String s = AccessController.doPrivileged(
-            (PrivilegedAction<String>) () -> System.getProperty(PROP_LIFETIME));
-        if (s != null) {
-            LIFETIME = Integer.parseInt(s); // throws NumberFormatException
-        } else {
-            LIFETIME = DEFAULT_CACHE_LIFETIME;
+        @Override
+        public boolean equals(Object obj) {
+            if (!(obj instanceof Key)) {
+                return false;
+            }
+            Key key = (Key) obj;
+            return (port == key.port &&
+                serverName.equalsIgnoreCase(key.serverName));
+        }
+
+        @Override
+        public int hashCode() {
+            if (hashCode == 0) {
+                int result = 17;
+                result = 37*result + port;
+                result = 37*result +
+                    serverName.toLowerCase(Locale.ENGLISH).hashCode();
+                hashCode = result;
+            }
+            return hashCode;
         }
     }
 
     /**
-     * The CertificateFactory used to decode certificates from
-     * their binary stored form.
-     */
-    private CertificateFactory cf;
-    /**
-     * The JNDI directory context.
-     */
-    private LdapContext ctx;
-
-    /**
-     * Flag indicating that communication error occurred.
-     */
-    private boolean communicationError = false;
-
-    /**
-     * Flag indicating whether we should prefetch CRLs.
-     */
-    private boolean prefetchCRLs = false;
-
-    private final Cache<String, byte[][]> valueCache;
-
-    private int cacheHits = 0;
-    private int cacheMisses = 0;
-    private int requests = 0;
-
-    /**
-     * Creates a <code>CertStore</code> with the specified parameters.
-     * For this class, the parameters object must be an instance of
-     * <code>LDAPCertStoreParameters</code>.
-     *
-     * @param params the algorithm parameters
-     * @exception InvalidAlgorithmParameterException if params is not an
-     *   instance of <code>LDAPCertStoreParameters</code>
+     * Returns an LDAPCertStoreImpl object. This method consults a cache of
+     * LDAPCertStoreImpl objects (shared per JVM) using the corresponding
+     * LDAP server name and port info as a key.
      */
-    public LDAPCertStore(CertStoreParameters params)
-            throws InvalidAlgorithmParameterException {
-        super(params);
-        if (!(params instanceof LDAPCertStoreParameters))
-          throw new InvalidAlgorithmParameterException(
-            "parameters must be LDAPCertStoreParameters");
-
-        LDAPCertStoreParameters lparams = (LDAPCertStoreParameters) params;
-
-        // Create InitialDirContext needed to communicate with the server
-        createInitialDirContext(lparams.getServerName(), lparams.getPort());
+    private static final Cache<Key, LDAPCertStoreImpl>
+        certStoreCache = Cache.newSoftMemoryCache(185);
 
-        // Create CertificateFactory for use later on
-        try {
-            cf = CertificateFactory.getInstance("X.509");
-        } catch (CertificateException e) {
-            throw new InvalidAlgorithmParameterException(
-                "unable to create CertificateFactory for X.509");
-        }
-        if (LIFETIME == 0) {
-            valueCache = Cache.newNullCache();
-        } else if (LIFETIME < 0) {
-            valueCache = Cache.newSoftMemoryCache(DEFAULT_CACHE_SIZE);
-        } else {
-            valueCache = Cache.newSoftMemoryCache(DEFAULT_CACHE_SIZE, LIFETIME);
-        }
-    }
-
-    /**
-     * Returns an LDAP CertStore. This method consults a cache of
-     * CertStores (shared per JVM) using the LDAP server/port as a key.
-     */
-    private static final Cache<LDAPCertStoreParameters, CertStore>
-        certStoreCache = Cache.newSoftMemoryCache(185);
-    static synchronized CertStore getInstance(LDAPCertStoreParameters params)
+    // Exist solely for regression test for ensuring that caching is done
+    static synchronized LDAPCertStoreImpl getInstance(LDAPCertStoreParameters params)
         throws NoSuchAlgorithmException, InvalidAlgorithmParameterException {
-        // if necessary, convert params to SunLDAPCertStoreParameters because
-        // LDAPCertStoreParameters does not override equals() and hashCode()
-        if (! (params instanceof SunLDAPCertStoreParameters)) {
-            params = new SunLDAPCertStoreParameters(params.getServerName(), params.getPort());
-        }
-        CertStore lcs = certStoreCache.get(params);
-        if (lcs == null) {
-            lcs = CertStore.getInstance("LDAP", params);
-            certStoreCache.put(params, lcs);
+        String serverName = params.getServerName();
+        int port = params.getPort();
+        Key k = new Key(serverName, port);
+        LDAPCertStoreImpl lci = certStoreCache.get(k);
+        if (lci == null) {
+            lci = new LDAPCertStoreImpl(serverName, port);
+            certStoreCache.put(k, lci);
         } else {
             if (debug != null) {
                 debug.println("LDAPCertStore.getInstance: cache hit");
             }
         }
-        return lcs;
-    }
-
-    /**
-     * Create InitialDirContext.
-     *
-     * @param server Server DNS name hosting LDAP service
-     * @param port   Port at which server listens for requests
-     * @throws InvalidAlgorithmParameterException if creation fails
-     */
-    private void createInitialDirContext(String server, int port)
-            throws InvalidAlgorithmParameterException {
-        String url = "ldap://" + server + ":" + port;
-        Hashtable<String,Object> env = new Hashtable<>();
-        env.put(Context.INITIAL_CONTEXT_FACTORY,
-                "com.sun.jndi.ldap.LdapCtxFactory");
-        env.put(Context.PROVIDER_URL, url);
-
-        // If property is set to true, disable application resource file lookup.
-        boolean disableAppResourceFiles = AccessController.doPrivileged(
-            (PrivilegedAction<Boolean>) () -> Boolean.getBoolean(PROP_DISABLE_APP_RESOURCE_FILES));
-        if (disableAppResourceFiles) {
-            if (debug != null) {
-                debug.println("LDAPCertStore disabling app resource files");
-            }
-            env.put("com.sun.naming.disable.app.resource.files", "true");
-        }
-
-        try {
-            ctx = new InitialLdapContext(env, null);
-            /*
-             * By default, follow referrals unless application has
-             * overridden property in an application resource file.
-             */
-            Hashtable<?,?> currentEnv = ctx.getEnvironment();
-            if (currentEnv.get(Context.REFERRAL) == null) {
-                ctx.addToEnvironment(Context.REFERRAL, "follow");
-            }
-        } catch (NamingException e) {
-            if (debug != null) {
-                debug.println("LDAPCertStore.engineInit about to throw "
-                    + "InvalidAlgorithmParameterException");
-                e.printStackTrace();
-            }
-            Exception ee = new InvalidAlgorithmParameterException
-                ("unable to create InitialDirContext using supplied parameters");
-            ee.initCause(e);
-            throw (InvalidAlgorithmParameterException)ee;
-        }
-    }
-
-    /**
-     * Private class encapsulating the actual LDAP operations and cache
-     * handling. Use:
-     *
-     *   LDAPRequest request = new LDAPRequest(dn);
-     *   request.addRequestedAttribute(CROSS_CERT);
-     *   request.addRequestedAttribute(CA_CERT);
-     *   byte[][] crossValues = request.getValues(CROSS_CERT);
-     *   byte[][] caValues = request.getValues(CA_CERT);
-     *
-     * At most one LDAP request is sent for each instance created. If all
-     * getValues() calls can be satisfied from the cache, no request
-     * is sent at all. If a request is sent, all requested attributes
-     * are always added to the cache irrespective of whether the getValues()
-     * method is called.
-     */
-    private class LDAPRequest {
-
-        private final String name;
-        private Map<String, byte[][]> valueMap;
-        private final List<String> requestedAttributes;
-
-        LDAPRequest(String name) {
-            this.name = name;
-            requestedAttributes = new ArrayList<>(5);
-        }
-
-        String getName() {
-            return name;
-        }
-
-        void addRequestedAttribute(String attrId) {
-            if (valueMap != null) {
-                throw new IllegalStateException("Request already sent");
-            }
-            requestedAttributes.add(attrId);
-        }
-
-        /**
-         * Gets one or more binary values from an attribute.
-         *
-         * @param name          the location holding the attribute
-         * @param attrId                the attribute identifier
-         * @return                      an array of binary values (byte arrays)
-         * @throws NamingException      if a naming exception occurs
-         */
-        byte[][] getValues(String attrId) throws NamingException {
-            if (DEBUG && ((cacheHits + cacheMisses) % 50 == 0)) {
-                System.out.println("Cache hits: " + cacheHits + "; misses: "
-                        + cacheMisses);
-            }
-            String cacheKey = name + "|" + attrId;
-            byte[][] values = valueCache.get(cacheKey);
-            if (values != null) {
-                cacheHits++;
-                return values;
-            }
-            cacheMisses++;
-            Map<String, byte[][]> attrs = getValueMap();
-            values = attrs.get(attrId);
-            return values;
-        }
-
-        /**
-         * Get a map containing the values for this request. The first time
-         * this method is called on an object, the LDAP request is sent,
-         * the results parsed and added to a private map and also to the
-         * cache of this LDAPCertStore. Subsequent calls return the private
-         * map immediately.
-         *
-         * The map contains an entry for each requested attribute. The
-         * attribute name is the key, values are byte[][]. If there are no
-         * values for that attribute, values are byte[0][].
-         *
-         * @return                      the value Map
-         * @throws NamingException      if a naming exception occurs
-         */
-        private Map<String, byte[][]> getValueMap() throws NamingException {
-            if (valueMap != null) {
-                return valueMap;
-            }
-            if (DEBUG) {
-                System.out.println("Request: " + name + ":" + requestedAttributes);
-                requests++;
-                if (requests % 5 == 0) {
-                    System.out.println("LDAP requests: " + requests);
-                }
-            }
-            valueMap = new HashMap<>(8);
-            String[] attrIds = requestedAttributes.toArray(STRING0);
-            Attributes attrs;
-
-            if (communicationError) {
-                ctx.reconnect(null);
-                communicationError = false;
-            }
-
-            try {
-                attrs = ctx.getAttributes(name, attrIds);
-            } catch (CommunicationException ce) {
-                communicationError = true;
-                throw ce;
-            } catch (NameNotFoundException e) {
-                // name does not exist on this LDAP server
-                // treat same as not attributes found
-                attrs = EMPTY_ATTRIBUTES;
-            }
-            for (String attrId : requestedAttributes) {
-                Attribute attr = attrs.get(attrId);
-                byte[][] values = getAttributeValues(attr);
-                cacheAttribute(attrId, values);
-                valueMap.put(attrId, values);
-            }
-            return valueMap;
-        }
-
-        /**
-         * Add the values to the cache.
-         */
-        private void cacheAttribute(String attrId, byte[][] values) {
-            String cacheKey = name + "|" + attrId;
-            valueCache.put(cacheKey, values);
-        }
-
-        /**
-         * Get the values for the given attribute. If the attribute is null
-         * or does not contain any values, a zero length byte array is
-         * returned. NOTE that it is assumed that all values are byte arrays.
-         */
-        private byte[][] getAttributeValues(Attribute attr)
-                throws NamingException {
-            byte[][] values;
-            if (attr == null) {
-                values = BB0;
-            } else {
-                values = new byte[attr.size()][];
-                int i = 0;
-                NamingEnumeration<?> enum_ = attr.getAll();
-                while (enum_.hasMore()) {
-                    Object obj = enum_.next();
-                    if (debug != null) {
-                        if (obj instanceof String) {
-                            debug.println("LDAPCertStore.getAttrValues() "
-                                + "enum.next is a string!: " + obj);
-                        }
-                    }
-                    byte[] value = (byte[])obj;
-                    values[i++] = value;
-                }
-            }
-            return values;
-        }
-
-    }
-
-    /*
-     * Gets certificates from an attribute id and location in the LDAP
-     * directory. Returns a Collection containing only the Certificates that
-     * match the specified CertSelector.
-     *
-     * @param name the location holding the attribute
-     * @param id the attribute identifier
-     * @param sel a CertSelector that the Certificates must match
-     * @return a Collection of Certificates found
-     * @throws CertStoreException       if an exception occurs
-     */
-    private Collection<X509Certificate> getCertificates(LDAPRequest request,
-        String id, X509CertSelector sel) throws CertStoreException {
-
-        /* fetch encoded certs from storage */
-        byte[][] encodedCert;
-        try {
-            encodedCert = request.getValues(id);
-        } catch (NamingException namingEx) {
-            throw new CertStoreException(namingEx);
-        }
-
-        int n = encodedCert.length;
-        if (n == 0) {
-            return Collections.emptySet();
-        }
-
-        List<X509Certificate> certs = new ArrayList<>(n);
-        /* decode certs and check if they satisfy selector */
-        for (int i = 0; i < n; i++) {
-            ByteArrayInputStream bais = new ByteArrayInputStream(encodedCert[i]);
-            try {
-                Certificate cert = cf.generateCertificate(bais);
-                if (sel.match(cert)) {
-                  certs.add((X509Certificate)cert);
-                }
-            } catch (CertificateException e) {
-                if (debug != null) {
-                    debug.println("LDAPCertStore.getCertificates() encountered "
-                        + "exception while parsing cert, skipping the bad data: ");
-                    HexDumpEncoder encoder = new HexDumpEncoder();
-                    debug.println(
-                        "[ " + encoder.encodeBuffer(encodedCert[i]) + " ]");
-                }
-            }
-        }
-
-        return certs;
-    }
-
-    /*
-     * Gets certificate pairs from an attribute id and location in the LDAP
-     * directory.
-     *
-     * @param name the location holding the attribute
-     * @param id the attribute identifier
-     * @return a Collection of X509CertificatePairs found
-     * @throws CertStoreException       if an exception occurs
-     */
-    private Collection<X509CertificatePair> getCertPairs(
-        LDAPRequest request, String id) throws CertStoreException {
-
-        /* fetch the encoded cert pairs from storage */
-        byte[][] encodedCertPair;
-        try {
-            encodedCertPair = request.getValues(id);
-        } catch (NamingException namingEx) {
-            throw new CertStoreException(namingEx);
-        }
-
-        int n = encodedCertPair.length;
-        if (n == 0) {
-            return Collections.emptySet();
-        }
-
-        List<X509CertificatePair> certPairs = new ArrayList<>(n);
-        /* decode each cert pair and add it to the Collection */
-        for (int i = 0; i < n; i++) {
-            try {
-                X509CertificatePair certPair =
-                    X509CertificatePair.generateCertificatePair(encodedCertPair[i]);
-                certPairs.add(certPair);
-            } catch (CertificateException e) {
-                if (debug != null) {
-                    debug.println(
-                        "LDAPCertStore.getCertPairs() encountered exception "
-                        + "while parsing cert, skipping the bad data: ");
-                    HexDumpEncoder encoder = new HexDumpEncoder();
-                    debug.println(
-                        "[ " + encoder.encodeBuffer(encodedCertPair[i]) + " ]");
-                }
-            }
-        }
-
-        return certPairs;
-    }
-
-    /*
-     * Looks at certificate pairs stored in the crossCertificatePair attribute
-     * at the specified location in the LDAP directory. Returns a Collection
-     * containing all Certificates stored in the forward component that match
-     * the forward CertSelector and all Certificates stored in the reverse
-     * component that match the reverse CertSelector.
-     * <p>
-     * If either forward or reverse is null, all certificates from the
-     * corresponding component will be rejected.
-     *
-     * @param name the location to look in
-     * @param forward the forward CertSelector (or null)
-     * @param reverse the reverse CertSelector (or null)
-     * @return a Collection of Certificates found
-     * @throws CertStoreException       if an exception occurs
-     */
-    private Collection<X509Certificate> getMatchingCrossCerts(
-            LDAPRequest request, X509CertSelector forward,
-            X509CertSelector reverse)
-            throws CertStoreException {
-        // Get the cert pairs
-        Collection<X509CertificatePair> certPairs =
-                                getCertPairs(request, CROSS_CERT);
-
-        // Find Certificates that match and put them in a list
-        ArrayList<X509Certificate> matchingCerts = new ArrayList<>();
-        for (X509CertificatePair certPair : certPairs) {
-            X509Certificate cert;
-            if (forward != null) {
-                cert = certPair.getForward();
-                if ((cert != null) && forward.match(cert)) {
-                    matchingCerts.add(cert);
-                }
-            }
-            if (reverse != null) {
-                cert = certPair.getReverse();
-                if ((cert != null) && reverse.match(cert)) {
-                    matchingCerts.add(cert);
-                }
-            }
-        }
-        return matchingCerts;
+        return lci;
     }
 
     /**
@@ -612,159 +242,12 @@
             debug.println("LDAPCertStore.engineGetCertificates() selector: "
                 + String.valueOf(selector));
         }
-
         if (selector == null) {
             selector = new X509CertSelector();
-        }
-        if (!(selector instanceof X509CertSelector)) {
-            throw new CertStoreException("LDAPCertStore needs an X509CertSelector " +
-                                         "to find certs");
-        }
-        X509CertSelector xsel = (X509CertSelector) selector;
-        int basicConstraints = xsel.getBasicConstraints();
-        String subject = xsel.getSubjectAsString();
-        String issuer = xsel.getIssuerAsString();
-        HashSet<X509Certificate> certs = new HashSet<>();
-        if (debug != null) {
-            debug.println("LDAPCertStore.engineGetCertificates() basicConstraints: "
-                + basicConstraints);
-        }
-
-        // basicConstraints:
-        // -2: only EE certs accepted
-        // -1: no check is done
-        //  0: any CA certificate accepted
-        // >1: certificate's basicConstraints extension pathlen must match
-        if (subject != null) {
-            if (debug != null) {
-                debug.println("LDAPCertStore.engineGetCertificates() "
-                    + "subject is not null");
-            }
-            LDAPRequest request = new LDAPRequest(subject);
-            if (basicConstraints > -2) {
-                request.addRequestedAttribute(CROSS_CERT);
-                request.addRequestedAttribute(CA_CERT);
-                request.addRequestedAttribute(ARL);
-                if (prefetchCRLs) {
-                    request.addRequestedAttribute(CRL);
-                }
-            }
-            if (basicConstraints < 0) {
-                request.addRequestedAttribute(USER_CERT);
-            }
-
-            if (basicConstraints > -2) {
-                certs.addAll(getMatchingCrossCerts(request, xsel, null));
-                if (debug != null) {
-                    debug.println("LDAPCertStore.engineGetCertificates() after "
-                        + "getMatchingCrossCerts(subject,xsel,null),certs.size(): "
-                        + certs.size());
-                }
-                certs.addAll(getCertificates(request, CA_CERT, xsel));
-                if (debug != null) {
-                    debug.println("LDAPCertStore.engineGetCertificates() after "
-                        + "getCertificates(subject,CA_CERT,xsel),certs.size(): "
-                        + certs.size());
-                }
-            }
-            if (basicConstraints < 0) {
-                certs.addAll(getCertificates(request, USER_CERT, xsel));
-                if (debug != null) {
-                    debug.println("LDAPCertStore.engineGetCertificates() after "
-                        + "getCertificates(subject,USER_CERT, xsel),certs.size(): "
-                        + certs.size());
-                }
-            }
-        } else {
-            if (debug != null) {
-                debug.println
-                    ("LDAPCertStore.engineGetCertificates() subject is null");
-            }
-            if (basicConstraints == -2) {
-                throw new CertStoreException("need subject to find EE certs");
-            }
-            if (issuer == null) {
-                throw new CertStoreException("need subject or issuer to find certs");
-            }
+        } else if (!(selector instanceof X509CertSelector)) {
+            throw new CertStoreException("need X509CertSelector to find certs");
         }
-        if (debug != null) {
-            debug.println("LDAPCertStore.engineGetCertificates() about to "
-                + "getMatchingCrossCerts...");
-        }
-        if ((issuer != null) && (basicConstraints > -2)) {
-            LDAPRequest request = new LDAPRequest(issuer);
-            request.addRequestedAttribute(CROSS_CERT);
-            request.addRequestedAttribute(CA_CERT);
-            request.addRequestedAttribute(ARL);
-            if (prefetchCRLs) {
-                request.addRequestedAttribute(CRL);
-            }
-
-            certs.addAll(getMatchingCrossCerts(request, null, xsel));
-            if (debug != null) {
-                debug.println("LDAPCertStore.engineGetCertificates() after "
-                    + "getMatchingCrossCerts(issuer,null,xsel),certs.size(): "
-                    + certs.size());
-            }
-            certs.addAll(getCertificates(request, CA_CERT, xsel));
-            if (debug != null) {
-                debug.println("LDAPCertStore.engineGetCertificates() after "
-                    + "getCertificates(issuer,CA_CERT,xsel),certs.size(): "
-                    + certs.size());
-            }
-        }
-        if (debug != null) {
-            debug.println("LDAPCertStore.engineGetCertificates() returning certs");
-        }
-        return certs;
-    }
-
-    /*
-     * Gets CRLs from an attribute id and location in the LDAP directory.
-     * Returns a Collection containing only the CRLs that match the
-     * specified CRLSelector.
-     *
-     * @param name the location holding the attribute
-     * @param id the attribute identifier
-     * @param sel a CRLSelector that the CRLs must match
-     * @return a Collection of CRLs found
-     * @throws CertStoreException       if an exception occurs
-     */
-    private Collection<X509CRL> getCRLs(LDAPRequest request, String id,
-            X509CRLSelector sel) throws CertStoreException {
-
-        /* fetch the encoded crls from storage */
-        byte[][] encodedCRL;
-        try {
-            encodedCRL = request.getValues(id);
-        } catch (NamingException namingEx) {
-            throw new CertStoreException(namingEx);
-        }
-
-        int n = encodedCRL.length;
-        if (n == 0) {
-            return Collections.emptySet();
-        }
-
-        List<X509CRL> crls = new ArrayList<>(n);
-        /* decode each crl and check if it matches selector */
-        for (int i = 0; i < n; i++) {
-            try {
-                CRL crl = cf.generateCRL(new ByteArrayInputStream(encodedCRL[i]));
-                if (sel.match(crl)) {
-                    crls.add((X509CRL)crl);
-                }
-            } catch (CRLException e) {
-                if (debug != null) {
-                    debug.println("LDAPCertStore.getCRLs() encountered exception"
-                        + " while parsing CRL, skipping the bad data: ");
-                    HexDumpEncoder encoder = new HexDumpEncoder();
-                    debug.println("[ " + encoder.encodeBuffer(encodedCRL[i]) + " ]");
-                }
-            }
-        }
-
-        return crls;
+        return impl.getCertificates((X509CertSelector) selector, ldapDN);
     }
 
     /**
@@ -797,314 +280,9 @@
         // Set up selector and collection to hold CRLs
         if (selector == null) {
             selector = new X509CRLSelector();
-        }
-        if (!(selector instanceof X509CRLSelector)) {
+        } else if (!(selector instanceof X509CRLSelector)) {
             throw new CertStoreException("need X509CRLSelector to find CRLs");
         }
-        X509CRLSelector xsel = (X509CRLSelector) selector;
-        HashSet<X509CRL> crls = new HashSet<>();
-
-        // Look in directory entry for issuer of cert we're checking.
-        Collection<Object> issuerNames;
-        X509Certificate certChecking = xsel.getCertificateChecking();
-        if (certChecking != null) {
-            issuerNames = new HashSet<>();
-            X500Principal issuer = certChecking.getIssuerX500Principal();
-            issuerNames.add(issuer.getName(X500Principal.RFC2253));
-        } else {
-            // But if we don't know which cert we're checking, try the directory
-            // entries of all acceptable CRL issuers
-            issuerNames = xsel.getIssuerNames();
-            if (issuerNames == null) {
-                throw new CertStoreException("need issuerNames or certChecking to "
-                    + "find CRLs");
-            }
-        }
-        for (Object nameObject : issuerNames) {
-            String issuerName;
-            if (nameObject instanceof byte[]) {
-                try {
-                    X500Principal issuer = new X500Principal((byte[])nameObject);
-                    issuerName = issuer.getName(X500Principal.RFC2253);
-                } catch (IllegalArgumentException e) {
-                    continue;
-                }
-            } else {
-                issuerName = (String)nameObject;
-            }
-            // If all we want is CA certs, try to get the (probably shorter) ARL
-            Collection<X509CRL> entryCRLs = Collections.emptySet();
-            if (certChecking == null || certChecking.getBasicConstraints() != -1) {
-                LDAPRequest request = new LDAPRequest(issuerName);
-                request.addRequestedAttribute(CROSS_CERT);
-                request.addRequestedAttribute(CA_CERT);
-                request.addRequestedAttribute(ARL);
-                if (prefetchCRLs) {
-                    request.addRequestedAttribute(CRL);
-                }
-                try {
-                    entryCRLs = getCRLs(request, ARL, xsel);
-                    if (entryCRLs.isEmpty()) {
-                        // no ARLs found. We assume that means that there are
-                        // no ARLs on this server at all and prefetch the CRLs.
-                        prefetchCRLs = true;
-                    } else {
-                        crls.addAll(entryCRLs);
-                    }
-                } catch (CertStoreException e) {
-                    if (debug != null) {
-                        debug.println("LDAPCertStore.engineGetCRLs non-fatal error "
-                            + "retrieving ARLs:" + e);
-                        e.printStackTrace();
-                    }
-                }
-            }
-            // Otherwise, get the CRL
-            // if certChecking is null, we don't know if we should look in ARL or CRL
-            // attribute, so check both for matching CRLs.
-            if (entryCRLs.isEmpty() || certChecking == null) {
-                LDAPRequest request = new LDAPRequest(issuerName);
-                request.addRequestedAttribute(CRL);
-                entryCRLs = getCRLs(request, CRL, xsel);
-                crls.addAll(entryCRLs);
-            }
-        }
-        return crls;
-    }
-
-    // converts an LDAP URI into LDAPCertStoreParameters
-    static LDAPCertStoreParameters getParameters(URI uri) {
-        String host = uri.getHost();
-        if (host == null) {
-            return new SunLDAPCertStoreParameters();
-        } else {
-            int port = uri.getPort();
-            return (port == -1
-                    ? new SunLDAPCertStoreParameters(host)
-                    : new SunLDAPCertStoreParameters(host, port));
-        }
-    }
-
-    /*
-     * Subclass of LDAPCertStoreParameters with overridden equals/hashCode
-     * methods. This is necessary because the parameters are used as
-     * keys in the LDAPCertStore cache.
-     */
-    private static class SunLDAPCertStoreParameters
-        extends LDAPCertStoreParameters {
-
-        private volatile int hashCode = 0;
-
-        SunLDAPCertStoreParameters(String serverName, int port) {
-            super(serverName, port);
-        }
-        SunLDAPCertStoreParameters(String serverName) {
-            super(serverName);
-        }
-        SunLDAPCertStoreParameters() {
-            super();
-        }
-        @Override
-        public boolean equals(Object obj) {
-            if (obj == null) {
-                return false;
-            }
-
-            if (!(obj instanceof LDAPCertStoreParameters)) {
-                return false;
-            }
-            LDAPCertStoreParameters params = (LDAPCertStoreParameters) obj;
-            return (getPort() == params.getPort() &&
-                    getServerName().equalsIgnoreCase(params.getServerName()));
-        }
-        @Override
-        public int hashCode() {
-            if (hashCode == 0) {
-                int result = 17;
-                result = 37*result + getPort();
-                result = 37*result +
-                    getServerName().toLowerCase(Locale.ENGLISH).hashCode();
-                hashCode = result;
-            }
-            return hashCode;
-        }
-    }
-
-    /*
-     * This inner class wraps an existing X509CertSelector and adds
-     * additional criteria to match on when the certificate's subject is
-     * different than the LDAP Distinguished Name entry. The LDAPCertStore
-     * implementation uses the subject DN as the directory entry for
-     * looking up certificates. This can be problematic if the certificates
-     * that you want to fetch have a different subject DN than the entry
-     * where they are stored. You could set the selector's subject to the
-     * LDAP DN entry, but then the resulting match would fail to find the
-     * desired certificates because the subject DNs would not match. This
-     * class avoids that problem by introducing a certSubject which should
-     * be set to the certificate's subject DN when it is different than
-     * the LDAP DN.
-     */
-    static class LDAPCertSelector extends X509CertSelector {
-
-        private X500Principal certSubject;
-        private X509CertSelector selector;
-        private X500Principal subject;
-
-        /**
-         * Creates an LDAPCertSelector.
-         *
-         * @param selector the X509CertSelector to wrap
-         * @param certSubject the subject DN of the certificate that you want
-         *      to retrieve via LDAP
-         * @param ldapDN the LDAP DN where the certificate is stored
-         */
-        LDAPCertSelector(X509CertSelector selector, X500Principal certSubject,
-            String ldapDN) throws IOException {
-            this.selector = selector == null ? new X509CertSelector() : selector;
-            this.certSubject = certSubject;
-            this.subject = new X500Name(ldapDN).asX500Principal();
-        }
-
-        // we only override the get (accessor methods) since the set methods
-        // will not be invoked by the code that uses this LDAPCertSelector.
-        public X509Certificate getCertificate() {
-            return selector.getCertificate();
-        }
-        public BigInteger getSerialNumber() {
-            return selector.getSerialNumber();
-        }
-        public X500Principal getIssuer() {
-            return selector.getIssuer();
-        }
-        public String getIssuerAsString() {
-            return selector.getIssuerAsString();
-        }
-        public byte[] getIssuerAsBytes() throws IOException {
-            return selector.getIssuerAsBytes();
-        }
-        public X500Principal getSubject() {
-            // return the ldap DN
-            return subject;
-        }
-        public String getSubjectAsString() {
-            // return the ldap DN
-            return subject.getName();
-        }
-        public byte[] getSubjectAsBytes() throws IOException {
-            // return the encoded ldap DN
-            return subject.getEncoded();
-        }
-        public byte[] getSubjectKeyIdentifier() {
-            return selector.getSubjectKeyIdentifier();
-        }
-        public byte[] getAuthorityKeyIdentifier() {
-            return selector.getAuthorityKeyIdentifier();
-        }
-        public Date getCertificateValid() {
-            return selector.getCertificateValid();
-        }
-        public Date getPrivateKeyValid() {
-            return selector.getPrivateKeyValid();
-        }
-        public String getSubjectPublicKeyAlgID() {
-            return selector.getSubjectPublicKeyAlgID();
-        }
-        public PublicKey getSubjectPublicKey() {
-            return selector.getSubjectPublicKey();
-        }
-        public boolean[] getKeyUsage() {
-            return selector.getKeyUsage();
-        }
-        public Set<String> getExtendedKeyUsage() {
-            return selector.getExtendedKeyUsage();
-        }
-        public boolean getMatchAllSubjectAltNames() {
-            return selector.getMatchAllSubjectAltNames();
-        }
-        public Collection<List<?>> getSubjectAlternativeNames() {
-            return selector.getSubjectAlternativeNames();
-        }
-        public byte[] getNameConstraints() {
-            return selector.getNameConstraints();
-        }
-        public int getBasicConstraints() {
-            return selector.getBasicConstraints();
-        }
-        public Set<String> getPolicy() {
-            return selector.getPolicy();
-        }
-        public Collection<List<?>> getPathToNames() {
-            return selector.getPathToNames();
-        }
-
-        public boolean match(Certificate cert) {
-            // temporarily set the subject criterion to the certSubject
-            // so that match will not reject the desired certificates
-            selector.setSubject(certSubject);
-            boolean match = selector.match(cert);
-            selector.setSubject(subject);
-            return match;
-        }
-    }
-
-    /**
-     * This class has the same purpose as LDAPCertSelector except it is for
-     * X.509 CRLs.
-     */
-    static class LDAPCRLSelector extends X509CRLSelector {
-
-        private X509CRLSelector selector;
-        private Collection<X500Principal> certIssuers;
-        private Collection<X500Principal> issuers;
-        private HashSet<Object> issuerNames;
-
-        /**
-         * Creates an LDAPCRLSelector.
-         *
-         * @param selector the X509CRLSelector to wrap
-         * @param certIssuers the issuer DNs of the CRLs that you want
-         *      to retrieve via LDAP
-         * @param ldapDN the LDAP DN where the CRL is stored
-         */
-        LDAPCRLSelector(X509CRLSelector selector,
-            Collection<X500Principal> certIssuers, String ldapDN)
-            throws IOException {
-            this.selector = selector == null ? new X509CRLSelector() : selector;
-            this.certIssuers = certIssuers;
-            issuerNames = new HashSet<>();
-            issuerNames.add(ldapDN);
-            issuers = new HashSet<>();
-            issuers.add(new X500Name(ldapDN).asX500Principal());
-        }
-        // we only override the get (accessor methods) since the set methods
-        // will not be invoked by the code that uses this LDAPCRLSelector.
-        public Collection<X500Principal> getIssuers() {
-            // return the ldap DN
-            return Collections.unmodifiableCollection(issuers);
-        }
-        public Collection<Object> getIssuerNames() {
-            // return the ldap DN
-            return Collections.unmodifiableCollection(issuerNames);
-        }
-        public BigInteger getMinCRL() {
-            return selector.getMinCRL();
-        }
-        public BigInteger getMaxCRL() {
-            return selector.getMaxCRL();
-        }
-        public Date getDateAndTime() {
-            return selector.getDateAndTime();
-        }
-        public X509Certificate getCertificateChecking() {
-            return selector.getCertificateChecking();
-        }
-        public boolean match(CRL crl) {
-            // temporarily set the issuer criterion to the certIssuers
-            // so that match will not reject the desired CRL
-            selector.setIssuers(certIssuers);
-            boolean match = selector.match(crl);
-            selector.setIssuers(issuers);
-            return match;
-        }
+        return impl.getCRLs((X509CRLSelector) selector, ldapDN);
     }
 }
--- a/jdk/src/java.naming/share/classes/sun/security/provider/certpath/ldap/LDAPCertStoreHelper.java	Thu May 14 20:14:44 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,81 +0,0 @@
-/*
- * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.security.provider.certpath.ldap;
-
-import java.io.IOException;
-import java.net.URI;
-import java.util.Collection;
-import java.security.NoSuchAlgorithmException;
-import java.security.InvalidAlgorithmParameterException;
-import java.security.cert.CertStore;
-import java.security.cert.CertStoreException;
-import java.security.cert.X509CertSelector;
-import java.security.cert.X509CRLSelector;
-import javax.naming.CommunicationException;
-import javax.naming.ServiceUnavailableException;
-import javax.security.auth.x500.X500Principal;
-
-import sun.security.provider.certpath.CertStoreHelper;
-
-/**
- * LDAP implementation of CertStoreHelper.
- */
-
-public final class LDAPCertStoreHelper
-    extends CertStoreHelper
-{
-    @Override
-    public CertStore getCertStore(URI uri)
-        throws NoSuchAlgorithmException, InvalidAlgorithmParameterException
-    {
-        return LDAPCertStore.getInstance(LDAPCertStore.getParameters(uri));
-    }
-
-    @Override
-    public X509CertSelector wrap(X509CertSelector selector,
-                                 X500Principal certSubject,
-                                 String ldapDN)
-        throws IOException
-    {
-        return new LDAPCertStore.LDAPCertSelector(selector, certSubject, ldapDN);
-    }
-
-    @Override
-    public X509CRLSelector wrap(X509CRLSelector selector,
-                                Collection<X500Principal> certIssuers,
-                                String ldapDN)
-        throws IOException
-    {
-        return new LDAPCertStore.LDAPCRLSelector(selector, certIssuers, ldapDN);
-    }
-
-    @Override
-    public boolean isCausedByNetworkIssue(CertStoreException e) {
-        Throwable t = e.getCause();
-        return (t != null && (t instanceof ServiceUnavailableException ||
-                              t instanceof CommunicationException));
-    }
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/src/java.naming/share/classes/sun/security/provider/certpath/ldap/LDAPCertStoreImpl.java	Wed Jul 05 20:33:35 2017 +0200
@@ -0,0 +1,772 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package sun.security.provider.certpath.ldap;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.util.*;
+import javax.naming.Context;
+import javax.naming.NamingEnumeration;
+import javax.naming.NamingException;
+import javax.naming.NameNotFoundException;
+import javax.naming.directory.Attribute;
+import javax.naming.directory.Attributes;
+import javax.naming.directory.BasicAttributes;
+
+import java.security.*;
+import java.security.cert.Certificate;
+import java.security.cert.*;
+import javax.naming.CommunicationException;
+import javax.naming.ldap.InitialLdapContext;
+import javax.naming.ldap.LdapContext;
+import javax.security.auth.x500.X500Principal;
+
+import sun.misc.HexDumpEncoder;
+import sun.security.provider.certpath.X509CertificatePair;
+import sun.security.util.Cache;
+import sun.security.util.Debug;
+import sun.security.x509.X500Name;
+
+/**
+ * Core implementation of a LDAP Cert Store.
+ * @see java.security.cert.CertStore
+ *
+ * @since       1.9
+ */
+final class LDAPCertStoreImpl {
+
+    private static final Debug debug = Debug.getInstance("certpath");
+
+    private final static boolean DEBUG = false;
+
+    /**
+     * LDAP attribute identifiers.
+     */
+    private static final String USER_CERT = "userCertificate;binary";
+    private static final String CA_CERT = "cACertificate;binary";
+    private static final String CROSS_CERT = "crossCertificatePair;binary";
+    private static final String CRL = "certificateRevocationList;binary";
+    private static final String ARL = "authorityRevocationList;binary";
+    private static final String DELTA_CRL = "deltaRevocationList;binary";
+
+    // Constants for various empty values
+    private final static String[] STRING0 = new String[0];
+
+    private final static byte[][] BB0 = new byte[0][];
+
+    private final static Attributes EMPTY_ATTRIBUTES = new BasicAttributes();
+
+    // cache related constants
+    private final static int DEFAULT_CACHE_SIZE = 750;
+    private final static int DEFAULT_CACHE_LIFETIME = 30;
+
+    private final static int LIFETIME;
+
+    private final static String PROP_LIFETIME =
+                            "sun.security.certpath.ldap.cache.lifetime";
+
+    /*
+     * Internal system property, that when set to "true", disables the
+     * JNDI application resource files lookup to prevent recursion issues
+     * when validating signed JARs with LDAP URLs in certificates.
+     */
+    private final static String PROP_DISABLE_APP_RESOURCE_FILES =
+        "sun.security.certpath.ldap.disable.app.resource.files";
+
+    static {
+        String s = AccessController.doPrivileged(
+            (PrivilegedAction<String>) () -> System.getProperty(PROP_LIFETIME));
+        if (s != null) {
+            LIFETIME = Integer.parseInt(s); // throws NumberFormatException
+        } else {
+            LIFETIME = DEFAULT_CACHE_LIFETIME;
+        }
+    }
+
+    /**
+     * The CertificateFactory used to decode certificates from
+     * their binary stored form.
+     */
+    private CertificateFactory cf;
+    /**
+     * The JNDI directory context.
+     */
+    private LdapContext ctx;
+
+    /**
+     * Flag indicating that communication error occurred.
+     */
+    private boolean communicationError = false;
+
+    /**
+     * Flag indicating whether we should prefetch CRLs.
+     */
+    private boolean prefetchCRLs = false;
+
+    private final Cache<String, byte[][]> valueCache;
+
+    private int cacheHits = 0;
+    private int cacheMisses = 0;
+    private int requests = 0;
+
+    /**
+     * Creates a <code>CertStore</code> with the specified parameters.
+     */
+    LDAPCertStoreImpl(String serverName, int port)
+        throws InvalidAlgorithmParameterException {
+        createInitialDirContext(serverName, port);
+        // Create CertificateFactory for use later on
+        try {
+            cf = CertificateFactory.getInstance("X.509");
+        } catch (CertificateException e) {
+            throw new InvalidAlgorithmParameterException(
+                "unable to create CertificateFactory for X.509");
+        }
+        if (LIFETIME == 0) {
+            valueCache = Cache.newNullCache();
+        } else if (LIFETIME < 0) {
+            valueCache = Cache.newSoftMemoryCache(DEFAULT_CACHE_SIZE);
+        } else {
+            valueCache = Cache.newSoftMemoryCache(DEFAULT_CACHE_SIZE, LIFETIME);
+        }
+    }
+
+    /**
+     * Create InitialDirContext.
+     *
+     * @param server Server DNS name hosting LDAP service
+     * @param port   Port at which server listens for requests
+     * @throws InvalidAlgorithmParameterException if creation fails
+     */
+    private void createInitialDirContext(String server, int port)
+            throws InvalidAlgorithmParameterException {
+        String url = "ldap://" + server + ":" + port;
+        Hashtable<String,Object> env = new Hashtable<>();
+        env.put(Context.INITIAL_CONTEXT_FACTORY,
+                "com.sun.jndi.ldap.LdapCtxFactory");
+        env.put(Context.PROVIDER_URL, url);
+
+        // If property is set to true, disable application resource file lookup.
+        boolean disableAppResourceFiles = AccessController.doPrivileged(
+            (PrivilegedAction<Boolean>) () -> Boolean.getBoolean(PROP_DISABLE_APP_RESOURCE_FILES));
+        if (disableAppResourceFiles) {
+            if (debug != null) {
+                debug.println("LDAPCertStore disabling app resource files");
+            }
+            env.put("com.sun.naming.disable.app.resource.files", "true");
+        }
+
+        try {
+            ctx = new InitialLdapContext(env, null);
+            /*
+             * By default, follow referrals unless application has
+             * overridden property in an application resource file.
+             */
+            Hashtable<?,?> currentEnv = ctx.getEnvironment();
+            if (currentEnv.get(Context.REFERRAL) == null) {
+                ctx.addToEnvironment(Context.REFERRAL, "follow");
+            }
+        } catch (NamingException e) {
+            if (debug != null) {
+                debug.println("LDAPCertStore.engineInit about to throw "
+                    + "InvalidAlgorithmParameterException");
+                e.printStackTrace();
+            }
+            Exception ee = new InvalidAlgorithmParameterException
+                ("unable to create InitialDirContext using supplied parameters");
+            ee.initCause(e);
+            throw (InvalidAlgorithmParameterException)ee;
+        }
+    }
+
+    /**
+     * Private class encapsulating the actual LDAP operations and cache
+     * handling. Use:
+     *
+     *   LDAPRequest request = new LDAPRequest(dn);
+     *   request.addRequestedAttribute(CROSS_CERT);
+     *   request.addRequestedAttribute(CA_CERT);
+     *   byte[][] crossValues = request.getValues(CROSS_CERT);
+     *   byte[][] caValues = request.getValues(CA_CERT);
+     *
+     * At most one LDAP request is sent for each instance created. If all
+     * getValues() calls can be satisfied from the cache, no request
+     * is sent at all. If a request is sent, all requested attributes
+     * are always added to the cache irrespective of whether the getValues()
+     * method is called.
+     */
+    private class LDAPRequest {
+
+        private final String name;
+        private Map<String, byte[][]> valueMap;
+        private final List<String> requestedAttributes;
+
+        LDAPRequest(String name) {
+            this.name = name;
+            requestedAttributes = new ArrayList<>(5);
+        }
+
+        String getName() {
+            return name;
+        }
+
+        void addRequestedAttribute(String attrId) {
+            if (valueMap != null) {
+                throw new IllegalStateException("Request already sent");
+            }
+            requestedAttributes.add(attrId);
+        }
+
+        /**
+         * Gets one or more binary values from an attribute.
+         *
+         * @param name          the location holding the attribute
+         * @param attrId                the attribute identifier
+         * @return                      an array of binary values (byte arrays)
+         * @throws NamingException      if a naming exception occurs
+         */
+        byte[][] getValues(String attrId) throws NamingException {
+            if (DEBUG && ((cacheHits + cacheMisses) % 50 == 0)) {
+                System.out.println("Cache hits: " + cacheHits + "; misses: "
+                        + cacheMisses);
+            }
+            String cacheKey = name + "|" + attrId;
+            byte[][] values = valueCache.get(cacheKey);
+            if (values != null) {
+                cacheHits++;
+                return values;
+            }
+            cacheMisses++;
+            Map<String, byte[][]> attrs = getValueMap();
+            values = attrs.get(attrId);
+            return values;
+        }
+
+        /**
+         * Get a map containing the values for this request. The first time
+         * this method is called on an object, the LDAP request is sent,
+         * the results parsed and added to a private map and also to the
+         * cache of this LDAPCertStore. Subsequent calls return the private
+         * map immediately.
+         *
+         * The map contains an entry for each requested attribute. The
+         * attribute name is the key, values are byte[][]. If there are no
+         * values for that attribute, values are byte[0][].
+         *
+         * @return                      the value Map
+         * @throws NamingException      if a naming exception occurs
+         */
+        private Map<String, byte[][]> getValueMap() throws NamingException {
+            if (valueMap != null) {
+                return valueMap;
+            }
+            if (DEBUG) {
+                System.out.println("Request: " + name + ":" + requestedAttributes);
+                requests++;
+                if (requests % 5 == 0) {
+                    System.out.println("LDAP requests: " + requests);
+                }
+            }
+            valueMap = new HashMap<>(8);
+            String[] attrIds = requestedAttributes.toArray(STRING0);
+            Attributes attrs;
+
+            if (communicationError) {
+                ctx.reconnect(null);
+                communicationError = false;
+            }
+
+            try {
+                attrs = ctx.getAttributes(name, attrIds);
+            } catch (CommunicationException ce) {
+                communicationError = true;
+                throw ce;
+            } catch (NameNotFoundException e) {
+                // name does not exist on this LDAP server
+                // treat same as not attributes found
+                attrs = EMPTY_ATTRIBUTES;
+            }
+            for (String attrId : requestedAttributes) {
+                Attribute attr = attrs.get(attrId);
+                byte[][] values = getAttributeValues(attr);
+                cacheAttribute(attrId, values);
+                valueMap.put(attrId, values);
+            }
+            return valueMap;
+        }
+
+        /**
+         * Add the values to the cache.
+         */
+        private void cacheAttribute(String attrId, byte[][] values) {
+            String cacheKey = name + "|" + attrId;
+            valueCache.put(cacheKey, values);
+        }
+
+        /**
+         * Get the values for the given attribute. If the attribute is null
+         * or does not contain any values, a zero length byte array is
+         * returned. NOTE that it is assumed that all values are byte arrays.
+         */
+        private byte[][] getAttributeValues(Attribute attr)
+                throws NamingException {
+            byte[][] values;
+            if (attr == null) {
+                values = BB0;
+            } else {
+                values = new byte[attr.size()][];
+                int i = 0;
+                NamingEnumeration<?> enum_ = attr.getAll();
+                while (enum_.hasMore()) {
+                    Object obj = enum_.next();
+                    if (debug != null) {
+                        if (obj instanceof String) {
+                            debug.println("LDAPCertStore.getAttrValues() "
+                                + "enum.next is a string!: " + obj);
+                        }
+                    }
+                    byte[] value = (byte[])obj;
+                    values[i++] = value;
+                }
+            }
+            return values;
+        }
+
+    }
+
+    /*
+     * Gets certificates from an attribute id and location in the LDAP
+     * directory. Returns a Collection containing only the Certificates that
+     * match the specified CertSelector.
+     *
+     * @param name the location holding the attribute
+     * @param id the attribute identifier
+     * @param sel a CertSelector that the Certificates must match
+     * @return a Collection of Certificates found
+     * @throws CertStoreException       if an exception occurs
+     */
+    private Collection<X509Certificate> getCertificates(LDAPRequest request,
+        String id, X509CertSelector sel) throws CertStoreException {
+
+        /* fetch encoded certs from storage */
+        byte[][] encodedCert;
+        try {
+            encodedCert = request.getValues(id);
+        } catch (NamingException namingEx) {
+            throw new CertStoreException(namingEx);
+        }
+
+        int n = encodedCert.length;
+        if (n == 0) {
+            return Collections.emptySet();
+        }
+
+        List<X509Certificate> certs = new ArrayList<>(n);
+        /* decode certs and check if they satisfy selector */
+        for (int i = 0; i < n; i++) {
+            ByteArrayInputStream bais = new ByteArrayInputStream(encodedCert[i]);
+            try {
+                Certificate cert = cf.generateCertificate(bais);
+                if (sel.match(cert)) {
+                  certs.add((X509Certificate)cert);
+                }
+            } catch (CertificateException e) {
+                if (debug != null) {
+                    debug.println("LDAPCertStore.getCertificates() encountered "
+                        + "exception while parsing cert, skipping the bad data: ");
+                    HexDumpEncoder encoder = new HexDumpEncoder();
+                    debug.println(
+                        "[ " + encoder.encodeBuffer(encodedCert[i]) + " ]");
+                }
+            }
+        }
+
+        return certs;
+    }
+
+    /*
+     * Gets certificate pairs from an attribute id and location in the LDAP
+     * directory.
+     *
+     * @param name the location holding the attribute
+     * @param id the attribute identifier
+     * @return a Collection of X509CertificatePairs found
+     * @throws CertStoreException       if an exception occurs
+     */
+    private Collection<X509CertificatePair> getCertPairs(
+        LDAPRequest request, String id) throws CertStoreException {
+
+        /* fetch the encoded cert pairs from storage */
+        byte[][] encodedCertPair;
+        try {
+            encodedCertPair = request.getValues(id);
+        } catch (NamingException namingEx) {
+            throw new CertStoreException(namingEx);
+        }
+
+        int n = encodedCertPair.length;
+        if (n == 0) {
+            return Collections.emptySet();
+        }
+
+        List<X509CertificatePair> certPairs = new ArrayList<>(n);
+        /* decode each cert pair and add it to the Collection */
+        for (int i = 0; i < n; i++) {
+            try {
+                X509CertificatePair certPair =
+                    X509CertificatePair.generateCertificatePair(encodedCertPair[i]);
+                certPairs.add(certPair);
+            } catch (CertificateException e) {
+                if (debug != null) {
+                    debug.println(
+                        "LDAPCertStore.getCertPairs() encountered exception "
+                        + "while parsing cert, skipping the bad data: ");
+                    HexDumpEncoder encoder = new HexDumpEncoder();
+                    debug.println(
+                        "[ " + encoder.encodeBuffer(encodedCertPair[i]) + " ]");
+                }
+            }
+        }
+
+        return certPairs;
+    }
+
+    /*
+     * Looks at certificate pairs stored in the crossCertificatePair attribute
+     * at the specified location in the LDAP directory. Returns a Collection
+     * containing all X509Certificates stored in the forward component that match
+     * the forward X509CertSelector and all Certificates stored in the reverse
+     * component that match the reverse X509CertSelector.
+     * <p>
+     * If either forward or reverse is null, all certificates from the
+     * corresponding component will be rejected.
+     *
+     * @param name the location to look in
+     * @param forward the forward X509CertSelector (or null)
+     * @param reverse the reverse X509CertSelector (or null)
+     * @return a Collection of X509Certificates found
+     * @throws CertStoreException       if an exception occurs
+     */
+    private Collection<X509Certificate> getMatchingCrossCerts(
+            LDAPRequest request, X509CertSelector forward,
+            X509CertSelector reverse)
+            throws CertStoreException {
+        // Get the cert pairs
+        Collection<X509CertificatePair> certPairs =
+                                getCertPairs(request, CROSS_CERT);
+
+        // Find Certificates that match and put them in a list
+        ArrayList<X509Certificate> matchingCerts = new ArrayList<>();
+        for (X509CertificatePair certPair : certPairs) {
+            X509Certificate cert;
+            if (forward != null) {
+                cert = certPair.getForward();
+                if ((cert != null) && forward.match(cert)) {
+                    matchingCerts.add(cert);
+                }
+            }
+            if (reverse != null) {
+                cert = certPair.getReverse();
+                if ((cert != null) && reverse.match(cert)) {
+                    matchingCerts.add(cert);
+                }
+            }
+        }
+        return matchingCerts;
+    }
+
+    /**
+     * Returns a <code>Collection</code> of <code>X509Certificate</code>s that
+     * match the specified selector. If no <code>X509Certificate</code>s
+     * match the selector, an empty <code>Collection</code> will be returned.
+     * <p>
+     * It is not practical to search every entry in the LDAP database for
+     * matching <code>X509Certificate</code>s. Instead, the
+     * <code>X509CertSelector</code> is examined in order to determine where
+     * matching <code>Certificate</code>s are likely to be found (according
+     * to the PKIX LDAPv2 schema, RFC 2587).
+     * If the subject is specified, its directory entry is searched. If the
+     * issuer is specified, its directory entry is searched. If neither the
+     * subject nor the issuer are specified (or the selector is not an
+     * <code>X509CertSelector</code>), a <code>CertStoreException</code> is
+     * thrown.
+     *
+     * @param selector a <code>X509CertSelector</code> used to select which
+     *  <code>Certificate</code>s should be returned.
+     * @return a <code>Collection</code> of <code>X509Certificate</code>s that
+     *         match the specified selector
+     * @throws CertStoreException if an exception occurs
+     */
+    synchronized Collection<X509Certificate> getCertificates
+        (X509CertSelector xsel, String ldapDN) throws CertStoreException {
+
+        if (ldapDN == null) {
+            ldapDN = xsel.getSubjectAsString();
+        }
+        int basicConstraints = xsel.getBasicConstraints();
+        String issuer = xsel.getIssuerAsString();
+        HashSet<X509Certificate> certs = new HashSet<>();
+        if (debug != null) {
+            debug.println("LDAPCertStore.engineGetCertificates() basicConstraints: "
+                + basicConstraints);
+        }
+
+        // basicConstraints:
+        // -2: only EE certs accepted
+        // -1: no check is done
+        //  0: any CA certificate accepted
+        // >1: certificate's basicConstraints extension pathlen must match
+        if (ldapDN != null) {
+            if (debug != null) {
+                debug.println("LDAPCertStore.engineGetCertificates() "
+                    + " subject is not null");
+            }
+            LDAPRequest request = new LDAPRequest(ldapDN);
+            if (basicConstraints > -2) {
+                request.addRequestedAttribute(CROSS_CERT);
+                request.addRequestedAttribute(CA_CERT);
+                request.addRequestedAttribute(ARL);
+                if (prefetchCRLs) {
+                    request.addRequestedAttribute(CRL);
+                }
+            }
+            if (basicConstraints < 0) {
+                request.addRequestedAttribute(USER_CERT);
+            }
+
+            if (basicConstraints > -2) {
+                certs.addAll(getMatchingCrossCerts(request, xsel, null));
+                if (debug != null) {
+                    debug.println("LDAPCertStore.engineGetCertificates() after "
+                        + "getMatchingCrossCerts(subject,xsel,null),certs.size(): "
+                        + certs.size());
+                }
+                certs.addAll(getCertificates(request, CA_CERT, xsel));
+                if (debug != null) {
+                    debug.println("LDAPCertStore.engineGetCertificates() after "
+                        + "getCertificates(subject,CA_CERT,xsel),certs.size(): "
+                        + certs.size());
+                }
+            }
+            if (basicConstraints < 0) {
+                certs.addAll(getCertificates(request, USER_CERT, xsel));
+                if (debug != null) {
+                    debug.println("LDAPCertStore.engineGetCertificates() after "
+                        + "getCertificates(subject,USER_CERT, xsel),certs.size(): "
+                        + certs.size());
+                }
+            }
+        } else {
+            if (debug != null) {
+                debug.println
+                    ("LDAPCertStore.engineGetCertificates() subject is null");
+            }
+            if (basicConstraints == -2) {
+                throw new CertStoreException("need subject to find EE certs");
+            }
+            if (issuer == null) {
+                throw new CertStoreException("need subject or issuer to find certs");
+            }
+        }
+        if (debug != null) {
+            debug.println("LDAPCertStore.engineGetCertificates() about to "
+                + "getMatchingCrossCerts...");
+        }
+        if ((issuer != null) && (basicConstraints > -2)) {
+            LDAPRequest request = new LDAPRequest(issuer);
+            request.addRequestedAttribute(CROSS_CERT);
+            request.addRequestedAttribute(CA_CERT);
+            request.addRequestedAttribute(ARL);
+            if (prefetchCRLs) {
+                request.addRequestedAttribute(CRL);
+            }
+
+            certs.addAll(getMatchingCrossCerts(request, null, xsel));
+            if (debug != null) {
+                debug.println("LDAPCertStore.engineGetCertificates() after "
+                    + "getMatchingCrossCerts(issuer,null,xsel),certs.size(): "
+                    + certs.size());
+            }
+            certs.addAll(getCertificates(request, CA_CERT, xsel));
+            if (debug != null) {
+                debug.println("LDAPCertStore.engineGetCertificates() after "
+                    + "getCertificates(issuer,CA_CERT,xsel),certs.size(): "
+                    + certs.size());
+            }
+        }
+        if (debug != null) {
+            debug.println("LDAPCertStore.engineGetCertificates() returning certs");
+        }
+        return certs;
+    }
+
+    /*
+     * Gets CRLs from an attribute id and location in the LDAP directory.
+     * Returns a Collection containing only the CRLs that match the
+     * specified X509CRLSelector.
+     *
+     * @param name the location holding the attribute
+     * @param id the attribute identifier
+     * @param sel a X509CRLSelector that the CRLs must match
+     * @return a Collection of CRLs found
+     * @throws CertStoreException       if an exception occurs
+     */
+    private Collection<X509CRL> getCRLs(LDAPRequest request, String id,
+            X509CRLSelector sel) throws CertStoreException {
+
+        /* fetch the encoded crls from storage */
+        byte[][] encodedCRL;
+        try {
+            encodedCRL = request.getValues(id);
+        } catch (NamingException namingEx) {
+            throw new CertStoreException(namingEx);
+        }
+
+        int n = encodedCRL.length;
+        if (n == 0) {
+            return Collections.emptySet();
+        }
+
+        List<X509CRL> crls = new ArrayList<>(n);
+        /* decode each crl and check if it matches selector */
+        for (int i = 0; i < n; i++) {
+            try {
+                CRL crl = cf.generateCRL(new ByteArrayInputStream(encodedCRL[i]));
+                if (sel.match(crl)) {
+                    crls.add((X509CRL)crl);
+                }
+            } catch (CRLException e) {
+                if (debug != null) {
+                    debug.println("LDAPCertStore.getCRLs() encountered exception"
+                        + " while parsing CRL, skipping the bad data: ");
+                    HexDumpEncoder encoder = new HexDumpEncoder();
+                    debug.println("[ " + encoder.encodeBuffer(encodedCRL[i]) + " ]");
+                }
+            }
+        }
+
+        return crls;
+    }
+
+    /**
+     * Returns a <code>Collection</code> of <code>X509CRL</code>s that
+     * match the specified selector. If no <code>X509CRL</code>s
+     * match the selector, an empty <code>Collection</code> will be returned.
+     * <p>
+     * It is not practical to search every entry in the LDAP database for
+     * matching <code>X509CRL</code>s. Instead, the <code>X509CRLSelector</code>
+     * is examined in order to determine where matching <code>X509CRL</code>s
+     * are likely to be found (according to the PKIX LDAPv2 schema, RFC 2587).
+     * If issuerNames or certChecking are specified, the issuer's directory
+     * entry is searched. If neither issuerNames or certChecking are specified
+     * (or the selector is not an <code>X509CRLSelector</code>), a
+     * <code>CertStoreException</code> is thrown.
+     *
+     * @param selector A <code>X509CRLSelector</code> used to select which
+     *  <code>CRL</code>s should be returned. Specify <code>null</code>
+     *  to return all <code>CRL</code>s.
+     * @return A <code>Collection</code> of <code>X509CRL</code>s that
+     *         match the specified selector
+     * @throws CertStoreException if an exception occurs
+     */
+    synchronized Collection<X509CRL> getCRLs(X509CRLSelector xsel,
+         String ldapDN) throws CertStoreException {
+
+        HashSet<X509CRL> crls = new HashSet<>();
+
+        // Look in directory entry for issuer of cert we're checking.
+        Collection<Object> issuerNames;
+        X509Certificate certChecking = xsel.getCertificateChecking();
+        if (certChecking != null) {
+            issuerNames = new HashSet<>();
+            X500Principal issuer = certChecking.getIssuerX500Principal();
+            issuerNames.add(issuer.getName(X500Principal.RFC2253));
+        } else {
+            // But if we don't know which cert we're checking, try the directory
+            // entries of all acceptable CRL issuers
+            if (ldapDN != null) {
+                issuerNames = new HashSet<>();
+                issuerNames.add(ldapDN);
+            } else {
+                issuerNames = xsel.getIssuerNames();
+                if (issuerNames == null) {
+                    throw new CertStoreException("need issuerNames or"
+                       + " certChecking to find CRLs");
+                }
+            }
+        }
+        for (Object nameObject : issuerNames) {
+            String issuerName;
+            if (nameObject instanceof byte[]) {
+                try {
+                    X500Principal issuer = new X500Principal((byte[])nameObject);
+                    issuerName = issuer.getName(X500Principal.RFC2253);
+                } catch (IllegalArgumentException e) {
+                    continue;
+                }
+            } else {
+                issuerName = (String)nameObject;
+            }
+            // If all we want is CA certs, try to get the (probably shorter) ARL
+            Collection<X509CRL> entryCRLs = Collections.emptySet();
+            if (certChecking == null || certChecking.getBasicConstraints() != -1) {
+                LDAPRequest request = new LDAPRequest(issuerName);
+                request.addRequestedAttribute(CROSS_CERT);
+                request.addRequestedAttribute(CA_CERT);
+                request.addRequestedAttribute(ARL);
+                if (prefetchCRLs) {
+                    request.addRequestedAttribute(CRL);
+                }
+                try {
+                    entryCRLs = getCRLs(request, ARL, xsel);
+                    if (entryCRLs.isEmpty()) {
+                        // no ARLs found. We assume that means that there are
+                        // no ARLs on this server at all and prefetch the CRLs.
+                        prefetchCRLs = true;
+                    } else {
+                        crls.addAll(entryCRLs);
+                    }
+                } catch (CertStoreException e) {
+                    if (debug != null) {
+                        debug.println("LDAPCertStore.engineGetCRLs non-fatal error "
+                            + "retrieving ARLs:" + e);
+                        e.printStackTrace();
+                    }
+                }
+            }
+            // Otherwise, get the CRL
+            // if certChecking is null, we don't know if we should look in ARL or CRL
+            // attribute, so check both for matching CRLs.
+            if (entryCRLs.isEmpty() || certChecking == null) {
+                LDAPRequest request = new LDAPRequest(issuerName);
+                request.addRequestedAttribute(CRL);
+                entryCRLs = getCRLs(request, CRL, xsel);
+                crls.addAll(entryCRLs);
+            }
+        }
+        return crls;
+    }
+}
--- a/jdk/src/java.smartcardio/share/classes/javax/smartcardio/CardTerminals.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/src/java.smartcardio/share/classes/javax/smartcardio/CardTerminals.java	Wed Jul 05 20:33:35 2017 +0200
@@ -94,9 +94,9 @@
      *
      * @param state the State
      * @return an unmodifiable list of all terminals matching the specified
-     *   attribute.
+     *   state.
      *
-     * @throws NullPointerException if attr is null
+     * @throws NullPointerException if state is null
      * @throws CardException if the card operation failed
      */
     public abstract List<CardTerminal> list(State state) throws CardException;
--- a/jdk/src/jdk.charsets/share/classes/sun/nio/cs/ext/DoubleByteEncoder.java	Thu May 14 20:14:44 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,241 +0,0 @@
-/*
- * Copyright (c) 2002, 2006, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- */
-
-package sun.nio.cs.ext;
-
-import java.nio.ByteBuffer;
-import java.nio.CharBuffer;
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetEncoder;
-import java.nio.charset.CoderResult;
-import sun.nio.cs.Surrogate;
-
-public abstract class DoubleByteEncoder
-    extends CharsetEncoder
-{
-
-    private short index1[];
-    private String index2[];
-
-    private final Surrogate.Parser sgp = new Surrogate.Parser();
-
-    protected DoubleByteEncoder(Charset cs,
-                                short[] index1, String[] index2)
-    {
-        super(cs, 2.0f, 2.0f);
-        this.index1 = index1;
-        this.index2 = index2;
-    }
-
-    protected DoubleByteEncoder(Charset cs,
-                                short[] index1, String[] index2,
-                                float avg, float max)
-    {
-        super(cs, avg, max);
-        this.index1 = index1;
-        this.index2 = index2;
-    }
-
-    protected DoubleByteEncoder(Charset cs,
-                                short[] index1, String[] index2, byte[] repl)
-    {
-        super(cs, 2.0f, 2.0f, repl);
-        this.index1 = index1;
-        this.index2 = index2;
-    }
-
-
-    protected DoubleByteEncoder(Charset cs,
-                                short[] index1, String[] index2,
-                                byte[] repl, float avg, float max)
-    {
-        super(cs, avg, max,repl);
-        this.index1 = index1;
-        this.index2 = index2;
-    }
-
-    public boolean canEncode(char c) {
-        return (encodeSingle(c) != -1 ||
-                encodeDouble(c) != 0);
-    }
-
-    private CoderResult encodeArrayLoop(CharBuffer src, ByteBuffer dst) {
-        char[] sa = src.array();
-        int sp = src.arrayOffset() + src.position();
-        int sl = src.arrayOffset() + src.limit();
-        byte[] da = dst.array();
-        int dp = dst.arrayOffset() + dst.position();
-        int dl = dst.arrayOffset() + dst.limit();
-
-        try {
-            while (sp < sl) {
-                char c = sa[sp];
-                if (Character.isSurrogate(c)) {
-                    if (sgp.parse(c, sa, sp, sl) < 0)
-                        return sgp.error();
-                    if (sl - sp < 2)
-                        return CoderResult.UNDERFLOW;
-                    char c2 = sa[sp + 1];
-
-                    byte[] outputBytes = new byte[2];
-                    outputBytes = encodeSurrogate(c, c2);
-
-                    if (outputBytes == null) {
-                        return sgp.unmappableResult();
-                    }
-                    else {
-                        if (dl - dp < 2)
-                            return CoderResult.OVERFLOW;
-                        da[dp++] = outputBytes[0];
-                        da[dp++] = outputBytes[1];
-                        sp += 2;
-                        continue;
-                    }
-                }
-                if (c >= '\uFFFE')
-                    return CoderResult.unmappableForLength(1);
-
-                int b = encodeSingle(c);
-                if (b != -1) { // Single Byte
-                    if (dl - dp < 1)
-                        return CoderResult.OVERFLOW;
-                    da[dp++] = (byte)b;
-                    sp++;
-                    continue;
-                }
-
-                int ncode  = encodeDouble(c);
-                if (ncode != 0 && c != '\u0000' ) {
-                    if (dl - dp < 2)
-                        return CoderResult.OVERFLOW;
-                    da[dp++] = (byte) ((ncode & 0xff00) >> 8);
-                    da[dp++] = (byte) (ncode & 0xff);
-                    sp++;
-                    continue;
-                }
-                return CoderResult.unmappableForLength(1);
-                }
-            return CoderResult.UNDERFLOW;
-        } finally {
-            src.position(sp - src.arrayOffset());
-            dst.position(dp - dst.arrayOffset());
-        }
-    }
-
-    private CoderResult encodeBufferLoop(CharBuffer src, ByteBuffer dst) {
-        int mark = src.position();
-
-        try {
-            while (src.hasRemaining()) {
-                char c = src.get();
-                if (Character.isSurrogate(c)) {
-                    int surr;
-                    if ((surr = sgp.parse(c, src)) < 0)
-                        return sgp.error();
-                    char c2 = Surrogate.low(surr);
-                    byte[] outputBytes = new byte[2];
-                    outputBytes = encodeSurrogate(c, c2);
-
-                    if (outputBytes == null) {
-                        return sgp.unmappableResult();
-                    } else {
-                        if (dst.remaining() < 2)
-                            return CoderResult.OVERFLOW;
-                        mark += 2;
-                        dst.put(outputBytes[0]);
-                        dst.put(outputBytes[1]);
-                        continue;
-                    }
-                }
-                if (c >= '\uFFFE')
-                    return CoderResult.unmappableForLength(1);
-                int b = encodeSingle(c);
-
-                if (b != -1) { // Single-byte character
-                    if (dst.remaining() < 1)
-                        return CoderResult.OVERFLOW;
-                    mark++;
-                    dst.put((byte)b);
-                    continue;
-                }
-                // Double Byte character
-
-                int ncode = encodeDouble(c);
-                if (ncode != 0 && c != '\u0000') {
-                    if (dst.remaining() < 2)
-                        return CoderResult.OVERFLOW;
-                    mark++;
-                    dst.put((byte) ((ncode & 0xff00) >> 8));
-                    dst.put((byte) ncode);
-                    continue;
-                }
-                return CoderResult.unmappableForLength(1);
-            }
-
-            return CoderResult.UNDERFLOW;
-        } finally {
-            src.position(mark);
-        }
-    }
-
-    protected CoderResult encodeLoop(CharBuffer src, ByteBuffer dst) {
-        if (true && src.hasArray() && dst.hasArray())
-            return encodeArrayLoop(src, dst);
-        else
-            return encodeBufferLoop(src, dst);
-    }
-
-    /*
-     * Can be changed by subclass
-     */
-    protected int encodeDouble(char ch) {
-        int offset = index1[((ch & 0xff00) >> 8 )] << 8;
-        return index2[offset >> 12].charAt((offset & 0xfff) + (ch & 0xff));
-    }
-
-    /*
-     * Can be changed by subclass
-     */
-    protected int encodeSingle(char inputChar) {
-        if (inputChar < 0x80)
-            return (byte)inputChar;
-        else
-            return -1;
-    }
-
-    /**
-     *  Protected method which should be overridden by concrete DBCS
-     *  CharsetEncoder classes which included supplementary characters
-     *  within their mapping coverage.
-     *  null return value indicates surrogate values could not be
-     *  handled or encoded.
-     */
-    protected byte[] encodeSurrogate(char highSurrogate, char lowSurrogate) {
-        return null;
-    }
-}
--- a/jdk/src/jdk.charsets/unix/classes/sun/nio/cs/ext/COMPOUND_TEXT.java	Thu May 14 20:14:44 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) 2005, 2007, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.nio.cs.ext;
-
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetEncoder;
-import java.nio.charset.CharsetDecoder;
-
-public class COMPOUND_TEXT extends Charset {
-    public COMPOUND_TEXT () {
-        super("x-COMPOUND_TEXT",
-              ExtendedCharsets.aliasesFor("x-COMPOUND_TEXT"));
-    }
-
-    public CharsetEncoder newEncoder() {
-        return new COMPOUND_TEXT_Encoder(this);
-    }
-
-    public CharsetDecoder newDecoder() {
-        return new COMPOUND_TEXT_Decoder(this);
-    }
-
-    public boolean contains(Charset cs) {
-        return cs instanceof COMPOUND_TEXT;
-    }
-}
--- a/jdk/src/jdk.charsets/unix/classes/sun/nio/cs/ext/COMPOUND_TEXT_Decoder.java	Thu May 14 20:14:44 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,714 +0,0 @@
-/*
- * Copyright (c) 2001, 2005, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.nio.cs.ext;
-import java.io.ByteArrayOutputStream;
-import java.nio.ByteBuffer;
-import java.nio.CharBuffer;
-import java.nio.charset.*;
-
-/**
- * An algorithmic conversion from COMPOUND_TEXT to Unicode.
- */
-
-public class COMPOUND_TEXT_Decoder extends CharsetDecoder {
-
-    private static final int NORMAL_BYTES             =  0;
-    private static final int NONSTANDARD_BYTES        =  1;
-    private static final int VERSION_SEQUENCE_V       =  2;
-    private static final int VERSION_SEQUENCE_TERM    =  3;
-    private static final int ESCAPE_SEQUENCE          =  4;
-    private static final int CHARSET_NGIIF            =  5;
-    private static final int CHARSET_NLIIF            =  6;
-    private static final int CHARSET_NLIF             =  7;
-    private static final int CHARSET_NRIIF            =  8;
-    private static final int CHARSET_NRIF             =  9;
-    private static final int CHARSET_NONSTANDARD_FOML = 10;
-    private static final int CHARSET_NONSTANDARD_OML  = 11;
-    private static final int CHARSET_NONSTANDARD_ML   = 12;
-    private static final int CHARSET_NONSTANDARD_L    = 13;
-    private static final int CHARSET_NONSTANDARD      = 14;
-    private static final int CHARSET_LIIF             = 15;
-    private static final int CHARSET_LIF              = 16;
-    private static final int CHARSET_RIIF             = 17;
-    private static final int CHARSET_RIF              = 18;
-    private static final int CONTROL_SEQUENCE_PIF     = 19;
-    private static final int CONTROL_SEQUENCE_IF      = 20;
-    private static final int EXTENSION_ML             = 21;
-    private static final int EXTENSION_L              = 22;
-    private static final int EXTENSION                = 23;
-    private static final int ESCAPE_SEQUENCE_OTHER    = 24;
-
-    private static final String ERR_LATIN1 = "ISO8859_1 unsupported";
-    private static final String ERR_ILLSTATE = "Illegal state";
-    private static final String ERR_ESCBYTE =
-        "Illegal byte in 0x1B escape sequence";
-    private static final String ERR_ENCODINGBYTE =
-        "Illegal byte in non-standard character set name";
-    private static final String ERR_CTRLBYTE =
-        "Illegal byte in 0x9B control sequence";
-    private static final String ERR_CTRLPI =
-        "P following I in 0x9B control sequence";
-    private static final String ERR_VERSTART =
-        "Versioning escape sequence can only appear at start of byte stream";
-    private static final String ERR_VERMANDATORY =
-        "Cannot parse mandatory extensions";
-    private static final String ERR_ENCODING = "Unknown encoding: ";
-    private static final String ERR_FLUSH =
-        "Escape sequence, control sequence, or ML extension not terminated";
-
-    private int state = NORMAL_BYTES ;
-    private int ext_count, ext_offset;
-    private boolean versionSequenceAllowed = true;
-    private byte[] byteBuf = new byte[1];
-    private ByteBuffer inBB = ByteBuffer.allocate(16);
-    private ByteArrayOutputStream queue = new ByteArrayOutputStream(),
-        encodingQueue = new ByteArrayOutputStream();
-
-    private CharsetDecoder glDecoder, grDecoder, nonStandardDecoder,
-        lastDecoder;
-    private boolean glHigh = false, grHigh = true;
-
-
-    public COMPOUND_TEXT_Decoder(Charset cs) {
-        super(cs, 1.0f, 1.0f);
-        try {
-            // Initial state in ISO 2022 designates Latin-1 charset.
-            glDecoder = Charset.forName("ASCII").newDecoder();
-            grDecoder = Charset.forName("ISO8859_1").newDecoder();
-        } catch (IllegalArgumentException e) {
-            error(ERR_LATIN1);
-        }
-        initDecoder(glDecoder);
-        initDecoder(grDecoder);
-    }
-
-    protected CoderResult decodeLoop(ByteBuffer src, CharBuffer des) {
-        CoderResult cr = CoderResult.UNDERFLOW;
-        byte[] input = src.array();
-        int inOff = src.arrayOffset() + src.position();
-        int inEnd = src.arrayOffset() + src.limit();
-
-        try {
-            while (inOff < inEnd && cr.isUnderflow()) {
-                // Byte parsing is done with shorts instead of bytes because
-                // Java bytes are signed, while COMPOUND_TEXT bytes are not. If
-                // we used the Java byte type, the > and < tests during parsing
-                // would not work correctly.
-                cr = handleByte((short)(input[inOff] & 0xFF), des);
-                inOff++;
-            }
-            return cr;
-        } finally {
-            src.position(inOff - src.arrayOffset());
-        }
-    }
-
-    private CoderResult handleByte(short newByte, CharBuffer cb) {
-        CoderResult cr = CoderResult.UNDERFLOW;
-        switch (state) {
-        case NORMAL_BYTES:
-            cr= normalBytes(newByte, cb);
-            break;
-        case NONSTANDARD_BYTES:
-            cr = nonStandardBytes(newByte, cb);
-            break;
-        case VERSION_SEQUENCE_V:
-        case VERSION_SEQUENCE_TERM:
-            cr = versionSequence(newByte);
-            break;
-        case ESCAPE_SEQUENCE:
-            cr = escapeSequence(newByte);
-            break;
-        case CHARSET_NGIIF:
-            cr = charset94N(newByte);
-            break;
-        case CHARSET_NLIIF:
-        case CHARSET_NLIF:
-            cr = charset94NL(newByte, cb);
-            break;
-        case CHARSET_NRIIF:
-        case CHARSET_NRIF:
-            cr = charset94NR(newByte, cb);
-            break;
-        case CHARSET_NONSTANDARD_FOML:
-        case CHARSET_NONSTANDARD_OML:
-        case CHARSET_NONSTANDARD_ML:
-        case CHARSET_NONSTANDARD_L:
-        case CHARSET_NONSTANDARD:
-            cr = charsetNonStandard(newByte, cb);
-            break;
-        case CHARSET_LIIF:
-        case CHARSET_LIF:
-            cr = charset9496L(newByte, cb);
-            break;
-        case CHARSET_RIIF:
-        case CHARSET_RIF:
-            cr = charset9496R(newByte, cb);
-            break;
-        case CONTROL_SEQUENCE_PIF:
-        case CONTROL_SEQUENCE_IF:
-            cr = controlSequence(newByte);
-            break;
-        case EXTENSION_ML:
-        case EXTENSION_L:
-        case EXTENSION:
-            cr = extension(newByte);
-            break;
-        case ESCAPE_SEQUENCE_OTHER:
-            cr = escapeSequenceOther(newByte);
-            break;
-        default:
-            error(ERR_ILLSTATE);
-        }
-        return cr;
-    }
-
-    private CoderResult normalBytes(short newByte, CharBuffer cb) {
-        CoderResult cr = CoderResult.UNDERFLOW;
-        if ((newByte >= 0x00 && newByte <= 0x1F) || // C0
-            (newByte >= 0x80 && newByte <= 0x9F)) { // C1
-            char newChar;
-
-            switch (newByte) {
-            case 0x1B:
-                state = ESCAPE_SEQUENCE;
-                queue.write(newByte);
-                return cr;
-            case 0x9B:
-                state = CONTROL_SEQUENCE_PIF;
-                versionSequenceAllowed = false;
-                queue.write(newByte);
-                return cr;
-            case 0x09:
-                versionSequenceAllowed = false;
-                newChar = '\t';
-                break;
-            case 0x0A:
-                versionSequenceAllowed = false;
-                newChar = '\n';
-                break;
-            default:
-                versionSequenceAllowed = false;
-                return cr;
-            }
-            if (!cb.hasRemaining())
-                return CoderResult.OVERFLOW;
-            else
-                cb.put(newChar);
-        } else {
-            CharsetDecoder decoder;
-            boolean high;
-            versionSequenceAllowed = false;
-
-            if (newByte >= 0x20 && newByte <= 0x7F) {
-                decoder = glDecoder;
-                high = glHigh;
-            } else /* if (newByte >= 0xA0 && newByte <= 0xFF) */ {
-                decoder = grDecoder;
-                high = grHigh;
-            }
-            if (lastDecoder != null && decoder != lastDecoder) {
-                cr = flushDecoder(lastDecoder, cb);
-            }
-            lastDecoder = decoder;
-
-            if (decoder != null) {
-                byte b = (byte)newByte;
-                if (high) {
-                    b |= 0x80;
-                } else {
-                    b &= 0x7F;
-                }
-                inBB.put(b);
-                inBB.flip();
-                cr = decoder.decode(inBB, cb, false);
-                if (!inBB.hasRemaining() || cr.isMalformed()) {
-                    inBB.clear();
-                } else {
-                  int pos = inBB.limit();
-                  inBB.clear();
-                  inBB.position(pos);
-                }
-            } else if (cb.remaining() < replacement().length()) {
-                cb.put(replacement());
-            } else {
-                return CoderResult.OVERFLOW;
-            }
-        }
-        return cr;
-    }
-
-    private CoderResult nonStandardBytes(short newByte, CharBuffer cb)
-    {
-        CoderResult cr = CoderResult.UNDERFLOW;
-        if (nonStandardDecoder != null) {
-            //byteBuf[0] = (byte)newByte;
-            inBB.put((byte)newByte);
-            inBB.flip();
-            cr = nonStandardDecoder.decode(inBB, cb, false);
-            if (!inBB.hasRemaining()) {
-                inBB.clear();
-            } else {
-                int pos = inBB.limit();
-                inBB.clear();
-                inBB.position(pos);
-            }
-        } else if (cb.remaining() < replacement().length()) {
-            cb.put(replacement());
-        } else {
-            return CoderResult.OVERFLOW;
-        }
-
-        ext_offset++;
-        if (ext_offset >= ext_count) {
-            ext_offset = ext_count = 0;
-            state = NORMAL_BYTES;
-            cr = flushDecoder(nonStandardDecoder, cb);
-            nonStandardDecoder = null;
-        }
-        return cr;
-    }
-
-    private CoderResult escapeSequence(short newByte) {
-        switch (newByte) {
-        case 0x23:
-            state = VERSION_SEQUENCE_V;
-            break;
-        case 0x24:
-            state = CHARSET_NGIIF;
-            versionSequenceAllowed = false;
-            break;
-        case 0x25:
-            state = CHARSET_NONSTANDARD_FOML;
-            versionSequenceAllowed = false;
-            break;
-        case 0x28:
-            state = CHARSET_LIIF;
-            versionSequenceAllowed = false;
-            break;
-        case 0x29:
-        case 0x2D:
-            state = CHARSET_RIIF;
-            versionSequenceAllowed = false;
-            break;
-        default:
-            // escapeSequenceOther will write to queue if appropriate
-            return escapeSequenceOther(newByte);
-        }
-
-        queue.write(newByte);
-        return CoderResult.UNDERFLOW;
-    }
-
-    /**
-     * Test for unknown, but valid, escape sequences.
-     */
-    private CoderResult escapeSequenceOther(short newByte) {
-        if (newByte >= 0x20 && newByte <= 0x2F) {
-            // {I}
-            state = ESCAPE_SEQUENCE_OTHER;
-            versionSequenceAllowed = false;
-            queue.write(newByte);
-        } else if (newByte >= 0x30 && newByte <= 0x7E) {
-            // F -- end of sequence
-            state = NORMAL_BYTES;
-            versionSequenceAllowed = false;
-            queue.reset();
-        } else {
-            return malformedInput(ERR_ESCBYTE);
-        }
-        return CoderResult.UNDERFLOW;
-    }
-
-    /**
-     * Parses directionality, as well as unknown, but valid, control sequences.
-     */
-    private CoderResult controlSequence(short newByte) {
-        if (newByte >= 0x30 && newByte <= 0x3F) {
-            // {P}
-            if (state == CONTROL_SEQUENCE_IF) {
-                // P no longer allowed
-                return malformedInput(ERR_CTRLPI);
-            }
-            queue.write(newByte);
-        } else if (newByte >= 0x20 && newByte <= 0x2F) {
-            // {I}
-            state = CONTROL_SEQUENCE_IF;
-            queue.write(newByte);
-        } else if (newByte >= 0x40 && newByte <= 0x7E) {
-            // F -- end of sequence
-            state = NORMAL_BYTES;
-            queue.reset();
-        } else {
-            return malformedInput(ERR_CTRLBYTE);
-        }
-        return CoderResult.UNDERFLOW;
-    }
-
-    private CoderResult versionSequence(short newByte) {
-        if (state == VERSION_SEQUENCE_V) {
-            if (newByte >= 0x20 && newByte <= 0x2F) {
-                state = VERSION_SEQUENCE_TERM;
-                queue.write(newByte);
-            } else {
-                return escapeSequenceOther(newByte);
-            }
-        } else /* if (state == VERSION_SEQUENCE_TERM) */ {
-            switch (newByte) {
-            case 0x30:
-                if (!versionSequenceAllowed) {
-                    return malformedInput(ERR_VERSTART);
-                }
-
-                // OK to ignore extensions
-                versionSequenceAllowed = false;
-                state = NORMAL_BYTES;
-                queue.reset();
-                break;
-            case 0x31:
-                return malformedInput((versionSequenceAllowed)
-                               ? ERR_VERMANDATORY : ERR_VERSTART);
-            default:
-                return escapeSequenceOther(newByte);
-            }
-        }
-        return CoderResult.UNDERFLOW;
-    }
-
-    private CoderResult charset94N(short newByte) {
-        switch (newByte) {
-        case 0x28:
-            state = CHARSET_NLIIF;
-            break;
-        case 0x29:
-            state = CHARSET_NRIIF;
-            break;
-        default:
-            // escapeSequenceOther will write byte if appropriate
-            return escapeSequenceOther(newByte);
-        }
-
-        queue.write(newByte);
-        return CoderResult.UNDERFLOW;
-    }
-
-    private CoderResult charset94NL(short newByte, CharBuffer cb) {
-        if (newByte >= 0x21 &&
-            newByte <= (state == CHARSET_NLIIF ? 0x23 : 0x2F)) {
-            // {I}
-            state = CHARSET_NLIF;
-            queue.write(newByte);
-        } else if (newByte >= 0x40 && newByte <= 0x7E) {
-            // F
-            return switchDecoder(newByte, cb);
-        } else {
-            return escapeSequenceOther(newByte);
-        }
-        return CoderResult.UNDERFLOW;
-    }
-
-    private CoderResult charset94NR(short newByte, CharBuffer cb)
-    {
-        if (newByte >= 0x21 &&
-            newByte <= (state == CHARSET_NRIIF ? 0x23 : 0x2F)) {
-            // {I}
-            state = CHARSET_NRIF;
-            queue.write(newByte);
-        } else if (newByte >= 0x40 && newByte <= 0x7E) {
-            // F
-            return switchDecoder(newByte, cb);
-        } else {
-            return escapeSequenceOther(newByte);
-        }
-        return CoderResult.UNDERFLOW;
-    }
-
-    private CoderResult charset9496L(short newByte, CharBuffer cb) {
-        if (newByte >= 0x21 &&
-            newByte <= (state == CHARSET_LIIF ? 0x23 : 0x2F)) {
-            // {I}
-            state = CHARSET_LIF;
-            queue.write(newByte);
-            return CoderResult.UNDERFLOW;
-        } else if (newByte >= 0x40 && newByte <= 0x7E) {
-            // F
-            return switchDecoder(newByte, cb);
-        } else {
-            return escapeSequenceOther(newByte);
-        }
-    }
-
-    private CoderResult charset9496R(short newByte, CharBuffer cb) {
-        if (newByte >= 0x21 &&
-            newByte <= (state == CHARSET_RIIF ? 0x23 : 0x2F)) {
-            // {I}
-            state = CHARSET_RIF;
-            queue.write(newByte);
-            return CoderResult.UNDERFLOW;
-        } else if (newByte >= 0x40 && newByte <= 0x7E) {
-            // F
-            return switchDecoder(newByte, cb);
-        } else {
-            return escapeSequenceOther(newByte);
-        }
-    }
-
-    private CoderResult charsetNonStandard(short newByte, CharBuffer cb) {
-        switch (state) {
-        case CHARSET_NONSTANDARD_FOML:
-            if (newByte == 0x2F) {
-                state = CHARSET_NONSTANDARD_OML;
-                queue.write(newByte);
-            } else {
-                return escapeSequenceOther(newByte);
-            }
-            break;
-        case CHARSET_NONSTANDARD_OML:
-            if (newByte >= 0x30 && newByte <= 0x34) {
-                state = CHARSET_NONSTANDARD_ML;
-                queue.write(newByte);
-            } else if (newByte >= 0x35 && newByte <= 0x3F) {
-                state = EXTENSION_ML;
-                queue.write(newByte);
-            } else {
-                return escapeSequenceOther(newByte);
-            }
-            break;
-        case CHARSET_NONSTANDARD_ML:
-            ext_count = (newByte & 0x7F) * 0x80;
-            state = CHARSET_NONSTANDARD_L;
-            break;
-        case CHARSET_NONSTANDARD_L:
-            ext_count = ext_count + (newByte & 0x7F);
-            state = (ext_count > 0) ? CHARSET_NONSTANDARD : NORMAL_BYTES;
-            break;
-        case CHARSET_NONSTANDARD:
-            if (newByte == 0x3F || newByte == 0x2A) {
-                queue.reset(); // In this case, only current byte is bad.
-                return malformedInput(ERR_ENCODINGBYTE);
-            }
-            ext_offset++;
-            if (ext_offset >= ext_count) {
-                ext_offset = ext_count = 0;
-                state = NORMAL_BYTES;
-                queue.reset();
-                encodingQueue.reset();
-            } else if (newByte == 0x02) {
-                // encoding name terminator
-                return switchDecoder((short)0, cb);
-            } else {
-                encodingQueue.write(newByte);
-            }
-            break;
-        default:
-            error(ERR_ILLSTATE);
-        }
-        return CoderResult.UNDERFLOW;
-    }
-
-    private CoderResult extension(short newByte) {
-        switch (state) {
-        case EXTENSION_ML:
-            ext_count = (newByte & 0x7F) * 0x80;
-            state = EXTENSION_L;
-            break;
-        case EXTENSION_L:
-            ext_count = ext_count + (newByte & 0x7F);
-            state = (ext_count > 0) ? EXTENSION : NORMAL_BYTES;
-            break;
-        case EXTENSION:
-            // Consume 'count' bytes. Don't bother putting them on the queue.
-            // There may be too many and we can't do anything with them anyway.
-            ext_offset++;
-            if (ext_offset >= ext_count) {
-                ext_offset = ext_count = 0;
-                state = NORMAL_BYTES;
-                queue.reset();
-            }
-            break;
-        default:
-            error(ERR_ILLSTATE);
-        }
-        return CoderResult.UNDERFLOW;
-    }
-
-    /**
-     * Preconditions:
-     *   1. 'queue' contains ControlSequence.escSequence
-     *   2. 'encodingQueue' contains ControlSequence.encoding
-     */
-    private CoderResult switchDecoder(short lastByte, CharBuffer cb) {
-        CoderResult cr = CoderResult.UNDERFLOW;
-        CharsetDecoder decoder = null;
-        boolean high = false;
-        byte[] escSequence;
-        byte[] encoding = null;
-
-        if (lastByte != 0) {
-            queue.write(lastByte);
-        }
-
-        escSequence = queue.toByteArray();
-        queue.reset();
-
-        if (state == CHARSET_NONSTANDARD) {
-            encoding = encodingQueue.toByteArray();
-            encodingQueue.reset();
-            decoder = CompoundTextSupport.
-                getNonStandardDecoder(escSequence, encoding);
-        } else {
-            decoder = CompoundTextSupport.getStandardDecoder(escSequence);
-            high = CompoundTextSupport.getHighBit(escSequence);
-        }
-        if (decoder != null) {
-            initDecoder(decoder);
-        } else if (unmappableCharacterAction() == CodingErrorAction.REPORT) {
-            int badInputLength = 1;
-            if (encoding != null) {
-                badInputLength = encoding.length;
-            } else if (escSequence.length > 0) {
-                badInputLength = escSequence.length;
-            }
-            return CoderResult.unmappableForLength(badInputLength);
-        }
-
-        if (state == CHARSET_NLIIF || state == CHARSET_NLIF ||
-            state == CHARSET_LIIF || state == CHARSET_LIF)
-        {
-            if (lastDecoder == glDecoder) {
-                cr = flushDecoder(glDecoder, cb);
-            }
-            glDecoder = lastDecoder = decoder;
-            glHigh = high;
-            state = NORMAL_BYTES;
-        } else if (state == CHARSET_NRIIF || state == CHARSET_NRIF ||
-                   state == CHARSET_RIIF || state == CHARSET_RIF) {
-            if (lastDecoder == grDecoder) {
-                cr = flushDecoder(grDecoder, cb);
-            }
-            grDecoder = lastDecoder = decoder;
-            grHigh = high;
-            state = NORMAL_BYTES;
-        } else if (state == CHARSET_NONSTANDARD) {
-            if (lastDecoder != null) {
-                cr = flushDecoder(lastDecoder, cb);
-                lastDecoder = null;
-            }
-            nonStandardDecoder = decoder;
-            state = NONSTANDARD_BYTES;
-        } else {
-            error(ERR_ILLSTATE);
-        }
-        return cr;
-    }
-
-    private ByteBuffer fbb= ByteBuffer.allocate(0);
-    private CoderResult flushDecoder(CharsetDecoder dec, CharBuffer cb) {
-        dec.decode(fbb, cb, true);
-        CoderResult cr = dec.flush(cb);
-        dec.reset();  //reuse
-        return cr;
-    }
-
-    private CoderResult malformedInput(String msg) {
-        int badInputLength = queue.size() + 1 /* current byte */ ;
-        queue.reset();
-        //TBD: nowhere to put the msg in CoderResult
-        return CoderResult.malformedForLength(badInputLength);
-    }
-
-    private void error(String msg) {
-        // For now, throw InternalError. Convert to 'assert' keyword later.
-        throw new InternalError(msg);
-    }
-
-    protected CoderResult implFlush(CharBuffer out) {
-        CoderResult cr = CoderResult.UNDERFLOW;
-        if (lastDecoder != null)
-          cr = flushDecoder(lastDecoder, out);
-        if (state != NORMAL_BYTES)
-            //TBD message ERR_FLUSH;
-            cr = CoderResult.malformedForLength(0);
-        reset();
-        return cr;
-    }
-
-    /**
-     * Resets the decoder.
-     * Call this method to reset the decoder to its initial state
-     */
-    protected void implReset() {
-        state = NORMAL_BYTES;
-        ext_count = ext_offset = 0;
-        versionSequenceAllowed = true;
-        queue.reset();
-        encodingQueue.reset();
-        nonStandardDecoder = lastDecoder = null;
-        glHigh = false;
-        grHigh = true;
-        try {
-            // Initial state in ISO 2022 designates Latin-1 charset.
-            glDecoder = Charset.forName("ASCII").newDecoder();
-            grDecoder = Charset.forName("ISO8859_1").newDecoder();
-        } catch (IllegalArgumentException e) {
-            error(ERR_LATIN1);
-        }
-        initDecoder(glDecoder);
-        initDecoder(grDecoder);
-    }
-
-    protected void implOnMalformedInput(CodingErrorAction newAction) {
-        if (glDecoder != null)
-            glDecoder.onMalformedInput(newAction);
-        if (grDecoder != null)
-            grDecoder.onMalformedInput(newAction);
-        if (nonStandardDecoder != null)
-            nonStandardDecoder.onMalformedInput(newAction);
-    }
-
-    protected void implOnUnmappableCharacter(CodingErrorAction newAction) {
-        if (glDecoder != null)
-            glDecoder.onUnmappableCharacter(newAction);
-        if (grDecoder != null)
-            grDecoder.onUnmappableCharacter(newAction);
-        if (nonStandardDecoder != null)
-            nonStandardDecoder.onUnmappableCharacter(newAction);
-    }
-
-    protected void implReplaceWith(String newReplacement) {
-        if (glDecoder != null)
-            glDecoder.replaceWith(newReplacement);
-        if (grDecoder != null)
-            grDecoder.replaceWith(newReplacement);
-        if (nonStandardDecoder != null)
-            nonStandardDecoder.replaceWith(newReplacement);
-    }
-
-    private void initDecoder(CharsetDecoder dec) {
-        dec.onUnmappableCharacter(CodingErrorAction.REPLACE)
-            .replaceWith(replacement());
-    }
-}
--- a/jdk/src/jdk.charsets/unix/classes/sun/nio/cs/ext/COMPOUND_TEXT_Encoder.java	Thu May 14 20:14:44 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,349 +0,0 @@
-/*
- * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package sun.nio.cs.ext;
-
-import java.io.ByteArrayOutputStream;
-import java.nio.ByteBuffer;
-import java.nio.CharBuffer;
-import java.nio.charset.*;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-public class COMPOUND_TEXT_Encoder extends CharsetEncoder {
-
-    /**
-     * NOTE: The following four static variables should be used *only* for
-     * testing whether a encoder can encode a specific character. They
-     * cannot be used for actual encoding because they are shared across all
-     * COMPOUND_TEXT encoders and may be stateful.
-     */
-    private static final Map<String,CharsetEncoder> encodingToEncoderMap =
-      Collections.synchronizedMap(new HashMap<String,CharsetEncoder>(21, 1.0f));
-    private static final CharsetEncoder latin1Encoder;
-    private static final CharsetEncoder defaultEncoder;
-    private static final boolean defaultEncodingSupported;
-
-    static {
-        CharsetEncoder encoder = Charset.defaultCharset().newEncoder();
-        String encoding = encoder.charset().name();
-        if ("ISO8859_1".equals(encoding)) {
-            latin1Encoder = encoder;
-            defaultEncoder = encoder;
-            defaultEncodingSupported = true;
-        } else {
-            try {
-                latin1Encoder =
-                    Charset.forName("ISO8859_1").newEncoder();
-            } catch (IllegalArgumentException e) {
-                throw new ExceptionInInitializerError
-                    ("ISO8859_1 unsupported");
-            }
-            defaultEncoder = encoder;
-            defaultEncodingSupported = CompoundTextSupport.getEncodings().
-                contains(defaultEncoder.charset().name());
-        }
-    }
-
-    private CharsetEncoder encoder;
-    private char[] charBuf = new char[1];
-    private CharBuffer charbuf = CharBuffer.wrap(charBuf);
-    private ByteArrayOutputStream nonStandardCharsetBuffer;
-    private byte[] byteBuf;
-    private ByteBuffer bytebuf;
-    private int numNonStandardChars, nonStandardEncodingLen;
-
-    public COMPOUND_TEXT_Encoder(Charset cs) {
-        super(cs,
-              (float)(CompoundTextSupport.MAX_CONTROL_SEQUENCE_LEN + 2),
-              (float)(CompoundTextSupport.MAX_CONTROL_SEQUENCE_LEN + 2));
-        try {
-            encoder = Charset.forName("ISO8859_1").newEncoder();
-        } catch (IllegalArgumentException cannotHappen) {}
-        initEncoder(encoder);
-    }
-
-    protected CoderResult encodeLoop(CharBuffer src, ByteBuffer des) {
-        CoderResult cr = CoderResult.UNDERFLOW;
-        char[] input = src.array();
-        int inOff = src.arrayOffset() + src.position();
-        int inEnd = src.arrayOffset() + src.limit();
-
-        try {
-            while (inOff < inEnd && cr.isUnderflow()) {
-                charBuf[0] = input[inOff];
-                if (charBuf[0] <= '\u0008' ||
-                    (charBuf[0] >= '\u000B' && charBuf[0] <= '\u001F') ||
-                    (charBuf[0] >= '\u0080' && charBuf[0] <= '\u009F')) {
-                    // The compound text specification only permits the octets
-                    // 0x09, 0x0A, 0x1B, and 0x9B in C0 and C1. Of these, 1B and
-                    // 9B must also be removed because they initiate control
-                    // sequences.
-                    charBuf[0] = '?';
-                }
-
-                CharsetEncoder enc = getEncoder(charBuf[0]);
-                //System.out.println("char=" + charBuf[0] + ", enc=" + enc);
-                if (enc == null) {
-                    if (unmappableCharacterAction()
-                        == CodingErrorAction.REPORT) {
-                        charBuf[0] = '?';
-                        enc = latin1Encoder;
-                    } else {
-                        return CoderResult.unmappableForLength(1);
-                    }
-                }
-                if (enc != encoder) {
-                    if (nonStandardCharsetBuffer != null) {
-                        cr = flushNonStandardCharsetBuffer(des);
-                    } else {
-                        //cr= encoder.flush(des);
-                        flushEncoder(encoder, des);
-                    }
-                    if (!cr.isUnderflow())
-                        return cr;
-                    byte[] escSequence = CompoundTextSupport.
-                        getEscapeSequence(enc.charset().name());
-                    if (escSequence == null) {
-                        throw new InternalError("Unknown encoding: " +
-                                                enc.charset().name());
-                    } else if (escSequence[1] == (byte)0x25 &&
-                               escSequence[2] == (byte)0x2F) {
-                        initNonStandardCharsetBuffer(enc, escSequence);
-                    } else if (des.remaining() >= escSequence.length) {
-                        des.put(escSequence, 0, escSequence.length);
-                    } else {
-                        return CoderResult.OVERFLOW;
-                    }
-                    encoder = enc;
-                    continue;
-                }
-                charbuf.rewind();
-                if (nonStandardCharsetBuffer == null) {
-                    cr = encoder.encode(charbuf, des, false);
-                } else {
-                    bytebuf.clear();
-                    cr = encoder.encode(charbuf, bytebuf, false);
-                    bytebuf.flip();
-                    nonStandardCharsetBuffer.write(byteBuf,
-                                                   0, bytebuf.limit());
-                    numNonStandardChars++;
-                }
-                inOff++;
-            }
-            return cr;
-        } finally {
-            src.position(inOff - src.arrayOffset());
-        }
-    }
-
-    protected CoderResult implFlush(ByteBuffer out) {
-        CoderResult cr = (nonStandardCharsetBuffer != null)
-            ? flushNonStandardCharsetBuffer(out)
-            //: encoder.flush(out);
-            : flushEncoder(encoder, out);
-        reset();
-        return cr;
-    }
-
-    private void initNonStandardCharsetBuffer(CharsetEncoder c,
-                                              byte[] escSequence)
-    {
-        nonStandardCharsetBuffer = new ByteArrayOutputStream();
-        byteBuf = new byte[(int)c.maxBytesPerChar()];
-        bytebuf = ByteBuffer.wrap(byteBuf);
-        nonStandardCharsetBuffer.write(escSequence, 0, escSequence.length);
-        nonStandardCharsetBuffer.write(0); // M placeholder
-        nonStandardCharsetBuffer.write(0); // L placeholder
-        byte[] encoding = CompoundTextSupport.
-            getEncoding(c.charset().name());
-        if (encoding == null) {
-            throw new InternalError
-                ("Unknown encoding: " + encoder.charset().name());
-        }
-        nonStandardCharsetBuffer.write(encoding, 0, encoding.length);
-        nonStandardCharsetBuffer.write(0x02); // divider
-        nonStandardEncodingLen = encoding.length + 1;
-    }
-
-    private CoderResult flushNonStandardCharsetBuffer(ByteBuffer out) {
-        if (numNonStandardChars > 0) {
-            byte[] flushBuf = new byte[(int)encoder.maxBytesPerChar() *
-                                       numNonStandardChars];
-            ByteBuffer bb = ByteBuffer.wrap(flushBuf);
-            flushEncoder(encoder, bb);
-            bb.flip();
-            nonStandardCharsetBuffer.write(flushBuf, 0, bb.limit());
-            numNonStandardChars = 0;
-        }
-
-        int numBytes = nonStandardCharsetBuffer.size();
-        int nonStandardBytesOff = 6 + nonStandardEncodingLen;
-
-        if (out.remaining() < (numBytes - nonStandardBytesOff) +
-            nonStandardBytesOff * (((numBytes - nonStandardBytesOff) /
-                                    ((1 << 14) - 1)) + 1))
-        {
-            return CoderResult.OVERFLOW;
-        }
-
-        byte[] nonStandardBytes =
-            nonStandardCharsetBuffer.toByteArray();
-
-        // The non-standard charset header only supports 2^14-1 bytes of data.
-        // If we have more than that, we have to repeat the header.
-        do {
-            out.put((byte)0x1B);
-            out.put((byte)0x25);
-            out.put((byte)0x2F);
-            out.put(nonStandardBytes[3]);
-
-            int toWrite = Math.min(numBytes - nonStandardBytesOff,
-                                   (1 << 14) - 1 - nonStandardEncodingLen);
-
-            out.put((byte)
-                (((toWrite + nonStandardEncodingLen) / 0x80) | 0x80)); // M
-            out.put((byte)
-                (((toWrite + nonStandardEncodingLen) % 0x80) | 0x80)); // L
-            out.put(nonStandardBytes, 6, nonStandardEncodingLen);
-            out.put(nonStandardBytes, nonStandardBytesOff, toWrite);
-            nonStandardBytesOff += toWrite;
-        } while (nonStandardBytesOff < numBytes);
-
-        nonStandardCharsetBuffer = null;
-        byteBuf = null;
-        nonStandardEncodingLen = 0;
-        return CoderResult.UNDERFLOW;
-    }
-
-    /**
-     * Resets the encoder.
-     * Call this method to reset the encoder to its initial state
-     */
-    protected void implReset() {
-        numNonStandardChars = nonStandardEncodingLen = 0;
-        nonStandardCharsetBuffer = null;
-        byteBuf = null;
-        try {
-            encoder = Charset.forName("ISO8859_1").newEncoder();
-        } catch (IllegalArgumentException cannotHappen) {
-        }
-        initEncoder(encoder);
-    }
-
-    /**
-     * Return whether a character is mappable or not
-     * @return true if a character is mappable
-     */
-    public boolean canEncode(char ch) {
-        return getEncoder(ch) != null;
-    }
-
-    protected void implOnMalformedInput(CodingErrorAction newAction) {
-        encoder.onUnmappableCharacter(newAction);
-    }
-
-    protected void implOnUnmappableCharacter(CodingErrorAction newAction) {
-        encoder.onUnmappableCharacter(newAction);
-    }
-
-    protected void implReplaceWith(byte[] newReplacement) {
-        if (encoder != null)
-            encoder.replaceWith(newReplacement);
-    }
-
-    /**
-     * Try to figure out which CharsetEncoder to use for conversion
-     * of the specified Unicode character. The target character encoding
-     * of the returned encoder is approved to be used with Compound Text.
-     *
-     * @param ch Unicode character
-     * @return CharsetEncoder to convert the given character
-     */
-    private CharsetEncoder getEncoder(char ch) {
-        // 1. Try the current encoder.
-        if (encoder.canEncode(ch)) {
-            return encoder;
-        }
-
-        // 2. Try the default encoder.
-        if (defaultEncodingSupported && defaultEncoder.canEncode(ch)) {
-            CharsetEncoder retval = null;
-            try {
-                retval = defaultEncoder.charset().newEncoder();
-            } catch (UnsupportedOperationException cannotHappen) {
-            }
-            initEncoder(retval);
-            return retval;
-        }
-
-        // 3. Try ISO8859-1.
-        if (latin1Encoder.canEncode(ch)) {
-            CharsetEncoder retval = null;
-            try {
-                retval = latin1Encoder.charset().newEncoder();
-            } catch (UnsupportedOperationException cannotHappen) {}
-            initEncoder(retval);
-            return retval;
-        }
-
-        // 4. Brute force search of all supported encodings.
-        for (String encoding : CompoundTextSupport.getEncodings())
-        {
-            CharsetEncoder enc = encodingToEncoderMap.get(encoding);
-            if (enc == null) {
-                enc = CompoundTextSupport.getEncoder(encoding);
-                if (enc == null) {
-                    throw new InternalError("Unsupported encoding: " +
-                                            encoding);
-                }
-                encodingToEncoderMap.put(encoding, enc);
-            }
-            if (enc.canEncode(ch)) {
-                CharsetEncoder retval = CompoundTextSupport.getEncoder(encoding);
-                initEncoder(retval);
-                return retval;
-            }
-        }
-
-        return null;
-    }
-
-    private void initEncoder(CharsetEncoder enc) {
-        try {
-            enc.onUnmappableCharacter(CodingErrorAction.REPLACE)
-                .replaceWith(replacement());
-        } catch (IllegalArgumentException x) {}
-    }
-
-    private CharBuffer fcb= CharBuffer.allocate(0);
-    private CoderResult flushEncoder(CharsetEncoder enc, ByteBuffer bb) {
-        enc.encode(fcb, bb, true);
-        return enc.flush(bb);
-    }
-}
--- a/jdk/src/jdk.charsets/unix/classes/sun/nio/cs/ext/CompoundTextSupport.java	Thu May 14 20:14:44 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,548 +0,0 @@
-/*
- * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-package sun.nio.cs.ext;
-
-import java.util.Collections;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.nio.charset.*;
-
-final class CompoundTextSupport {
-
-    private static final class ControlSequence {
-
-        final int hash;
-        final byte[] escSequence;
-        final byte[] encoding;
-
-        ControlSequence(byte[] escSequence) {
-            this(escSequence, null);
-        }
-        ControlSequence(byte[] escSequence, byte[] encoding) {
-            if (escSequence == null) {
-                throw new NullPointerException();
-            }
-
-            this.escSequence = escSequence;
-            this.encoding = encoding;
-
-            int hash = 0;
-            int length = escSequence.length;
-
-            for (int i = 0; i < escSequence.length; i++) {
-                hash += (((int)escSequence[i]) & 0xff) << (i % 4);
-            }
-            if (encoding != null) {
-                for (int i = 0; i < encoding.length; i++) {
-                    hash += (((int)encoding[i]) & 0xff) << (i % 4);
-                }
-                length += 2 /* M L */ + encoding.length + 1 /* 0x02 */;
-            }
-
-            this.hash = hash;
-
-            if (MAX_CONTROL_SEQUENCE_LEN < length) {
-                MAX_CONTROL_SEQUENCE_LEN = length;
-            }
-        }
-
-        public boolean equals(Object obj) {
-            if (this == obj) {
-                return true;
-            }
-            if (!(obj instanceof ControlSequence)) {
-                return false;
-            }
-            ControlSequence rhs = (ControlSequence)obj;
-            if (escSequence != rhs.escSequence) {
-                if (escSequence.length != rhs.escSequence.length) {
-                    return false;
-                }
-                for (int i = 0; i < escSequence.length; i++) {
-                    if (escSequence[i] != rhs.escSequence[i]) {
-                        return false;
-                    }
-                }
-            }
-            if (encoding != rhs.encoding) {
-                if (encoding == null || rhs.encoding == null ||
-                    encoding.length != rhs.encoding.length)
-                {
-                    return false;
-                }
-                for (int i = 0; i < encoding.length; i++) {
-                    if (encoding[i] != rhs.encoding[i]) {
-                        return false;
-                    }
-                }
-            }
-            return true;
-        }
-
-        public int hashCode() {
-            return hash;
-        }
-
-        ControlSequence concatenate(ControlSequence rhs) {
-            if (encoding != null) {
-                throw new IllegalArgumentException
-                    ("cannot concatenate to a non-standard charset escape " +
-                     "sequence");
-            }
-
-            int len = escSequence.length + rhs.escSequence.length;
-            byte[] newEscSequence = new byte[len];
-            System.arraycopy(escSequence, 0, newEscSequence, 0,
-                             escSequence.length);
-            System.arraycopy(rhs.escSequence, 0, newEscSequence,
-                             escSequence.length, rhs.escSequence.length);
-            return new ControlSequence(newEscSequence, rhs.encoding);
-        }
-    }
-
-    static int MAX_CONTROL_SEQUENCE_LEN;
-
-    /**
-     * Maps a GL or GR escape sequence to an encoding.
-     */
-    private static final Map<ControlSequence, String> sequenceToEncodingMap;
-
-    /**
-     * Indicates whether a particular encoding wants the high bit turned on
-     * or off.
-     */
-    private static final Map<ControlSequence, Boolean> highBitsMap;
-
-    /**
-     * Maps an encoding to an escape sequence. Rather than manage two
-     * converters in CharToByteCOMPOUND_TEXT, we output escape sequences which
-     * modify both GL and GR if necessary. This makes the output slightly less
-     * efficient, but our code much simpler.
-     */
-    private static final Map<String, ControlSequence> encodingToSequenceMap;
-
-    /**
-     * The keys of 'encodingToSequenceMap', sorted in preferential order.
-     */
-    private static final List<String> encodings;
-
-    static {
-        HashMap<ControlSequence, String> tSequenceToEncodingMap =
-            new HashMap<>(33, 1.0f);
-        HashMap<ControlSequence, Boolean> tHighBitsMap =
-            new HashMap<>(31, 1.0f);
-        HashMap<String, ControlSequence> tEncodingToSequenceMap =
-            new HashMap<>(21, 1.0f);
-        ArrayList<String> tEncodings = new ArrayList<>(21);
-
-        if (!(isEncodingSupported("US-ASCII") &&
-              isEncodingSupported("ISO-8859-1")))
-        {
-            throw new ExceptionInInitializerError
-                ("US-ASCII and ISO-8859-1 unsupported");
-        }
-
-        ControlSequence leftAscii = // high bit off, leave off
-            new ControlSequence(new byte[] { 0x1B, 0x28, 0x42 });
-        tSequenceToEncodingMap.put(leftAscii, "US-ASCII");
-        tHighBitsMap.put(leftAscii, Boolean.FALSE);
-
-        {
-            ControlSequence rightAscii = // high bit on, turn off
-                new ControlSequence(new byte[] { 0x1B, 0x29, 0x42 });
-            tSequenceToEncodingMap.put(rightAscii, "US-ASCII");
-            tHighBitsMap.put(rightAscii, Boolean.FALSE);
-        }
-
-        {
-            ControlSequence rightHalf = // high bit on, leave on
-                new ControlSequence(new byte[] { 0x1B, 0x2D, 0x41 });
-            tSequenceToEncodingMap.put(rightHalf, "ISO-8859-1");
-            tHighBitsMap.put(rightHalf, Boolean.TRUE);
-
-            ControlSequence fullSet = leftAscii.concatenate(rightHalf);
-            tEncodingToSequenceMap.put("ISO-8859-1", fullSet);
-            tEncodings.add("ISO-8859-1");
-        }
-        if (isEncodingSupported("ISO-8859-2")) {
-            ControlSequence rightHalf = // high bit on, leave on
-                new ControlSequence(new byte[] { 0x1B, 0x2D, 0x42 });
-            tSequenceToEncodingMap.put(rightHalf, "ISO-8859-2");
-            tHighBitsMap.put(rightHalf, Boolean.TRUE);
-
-            ControlSequence fullSet = leftAscii.concatenate(rightHalf);
-            tEncodingToSequenceMap.put("ISO-8859-2", fullSet);
-            tEncodings.add("ISO-8859-2");
-        }
-        if (isEncodingSupported("ISO-8859-3")) {
-            ControlSequence rightHalf = // high bit on, leave on
-                new ControlSequence(new byte[] { 0x1B, 0x2D, 0x43 });
-            tSequenceToEncodingMap.put(rightHalf, "ISO-8859-3");
-            tHighBitsMap.put(rightHalf, Boolean.TRUE);
-
-            ControlSequence fullSet = leftAscii.concatenate(rightHalf);
-            tEncodingToSequenceMap.put("ISO-8859-3", fullSet);
-            tEncodings.add("ISO-8859-3");
-        }
-        if (isEncodingSupported("ISO-8859-4")) {
-            ControlSequence rightHalf = // high bit on, leave on
-                new ControlSequence(new byte[] { 0x1B, 0x2D, 0x44 });
-            tSequenceToEncodingMap.put(rightHalf, "ISO-8859-4");
-            tHighBitsMap.put(rightHalf, Boolean.TRUE);
-
-            ControlSequence fullSet = leftAscii.concatenate(rightHalf);
-            tEncodingToSequenceMap.put("ISO-8859-4", fullSet);
-            tEncodings.add("ISO-8859-4");
-        }
-        if (isEncodingSupported("ISO-8859-5")) {
-            ControlSequence rightHalf = // high bit on, leave on
-                new ControlSequence(new byte[] { 0x1B, 0x2D, 0x4C });
-            tSequenceToEncodingMap.put(rightHalf, "ISO-8859-5");
-            tHighBitsMap.put(rightHalf, Boolean.TRUE);
-
-            ControlSequence fullSet = leftAscii.concatenate(rightHalf);
-            tEncodingToSequenceMap.put("ISO-8859-5", fullSet);
-            tEncodings.add("ISO-8859-5");
-        }
-        if (isEncodingSupported("ISO-8859-6")) {
-            ControlSequence rightHalf = // high bit on, leave on
-                new ControlSequence(new byte[] { 0x1B, 0x2D, 0x47 });
-            tSequenceToEncodingMap.put(rightHalf, "ISO-8859-6");
-            tHighBitsMap.put(rightHalf, Boolean.TRUE);
-
-            ControlSequence fullSet = leftAscii.concatenate(rightHalf);
-            tEncodingToSequenceMap.put("ISO-8859-6", fullSet);
-            tEncodings.add("ISO-8859-6");
-        }
-        if (isEncodingSupported("ISO-8859-7")) {
-            ControlSequence rightHalf = // high bit on, leave on
-                new ControlSequence(new byte[] { 0x1B, 0x2D, 0x46 });
-            tSequenceToEncodingMap.put(rightHalf, "ISO-8859-7");
-            tHighBitsMap.put(rightHalf, Boolean.TRUE);
-
-            ControlSequence fullSet = leftAscii.concatenate(rightHalf);
-            tEncodingToSequenceMap.put("ISO-8859-7", fullSet);
-            tEncodings.add("ISO-8859-7");
-        }
-        if (isEncodingSupported("ISO-8859-8")) {
-            ControlSequence rightHalf = // high bit on, leave on
-                new ControlSequence(new byte[] { 0x1B, 0x2D, 0x48 });
-            tSequenceToEncodingMap.put(rightHalf, "ISO-8859-8");
-            tHighBitsMap.put(rightHalf, Boolean.TRUE);
-
-            ControlSequence fullSet = leftAscii.concatenate(rightHalf);
-            tEncodingToSequenceMap.put("ISO-8859-8", fullSet);
-            tEncodings.add("ISO-8859-8");
-        }
-        if (isEncodingSupported("ISO-8859-9")) {
-            ControlSequence rightHalf = // high bit on, leave on
-                new ControlSequence(new byte[] { 0x1B, 0x2D, 0x4D });
-            tSequenceToEncodingMap.put(rightHalf, "ISO-8859-9");
-            tHighBitsMap.put(rightHalf, Boolean.TRUE);
-
-            ControlSequence fullSet = leftAscii.concatenate(rightHalf);
-            tEncodingToSequenceMap.put("ISO-8859-9", fullSet);
-            tEncodings.add("ISO-8859-9");
-        }
-        if (isEncodingSupported("JIS_X0201")) {
-            ControlSequence glLeft = // high bit off, leave off
-                new ControlSequence(new byte[] { 0x1B, 0x28, 0x4A });
-            ControlSequence glRight = // high bit off, turn on
-                new ControlSequence(new byte[] { 0x1B, 0x28, 0x49 });
-            ControlSequence grLeft = // high bit on, turn off
-                new ControlSequence(new byte[] { 0x1B, 0x29, 0x4A });
-            ControlSequence grRight = // high bit on, leave on
-                new ControlSequence(new byte[] { 0x1B, 0x29, 0x49 });
-            tSequenceToEncodingMap.put(glLeft, "JIS_X0201");
-            tSequenceToEncodingMap.put(glRight, "JIS_X0201");
-            tSequenceToEncodingMap.put(grLeft, "JIS_X0201");
-            tSequenceToEncodingMap.put(grRight, "JIS_X0201");
-            tHighBitsMap.put(glLeft, Boolean.FALSE);
-            tHighBitsMap.put(glRight, Boolean.TRUE);
-            tHighBitsMap.put(grLeft, Boolean.FALSE);
-            tHighBitsMap.put(grRight, Boolean.TRUE);
-
-            ControlSequence fullSet = glLeft.concatenate(grRight);
-            tEncodingToSequenceMap.put("JIS_X0201", fullSet);
-            tEncodings.add("JIS_X0201");
-        }
-        if (isEncodingSupported("X11GB2312")) {
-            ControlSequence leftHalf =  // high bit off, leave off
-                new ControlSequence(new byte[] { 0x1B, 0x24, 0x28, 0x41 });
-            ControlSequence rightHalf = // high bit on, turn off
-                new ControlSequence(new byte[] { 0x1B, 0x24, 0x29, 0x41 });
-            tSequenceToEncodingMap.put(leftHalf, "X11GB2312");
-            tSequenceToEncodingMap.put(rightHalf, "X11GB2312");
-            tHighBitsMap.put(leftHalf, Boolean.FALSE);
-            tHighBitsMap.put(rightHalf, Boolean.FALSE);
-
-            tEncodingToSequenceMap.put("X11GB2312", leftHalf);
-            tEncodings.add("X11GB2312");
-        }
-        if (isEncodingSupported("x-JIS0208")) {
-            ControlSequence leftHalf = // high bit off, leave off
-                new ControlSequence(new byte[] { 0x1B, 0x24, 0x28, 0x42 });
-            ControlSequence rightHalf = // high bit on, turn off
-                new ControlSequence(new byte[] { 0x1B, 0x24, 0x29, 0x42 });
-            tSequenceToEncodingMap.put(leftHalf, "x-JIS0208");
-            tSequenceToEncodingMap.put(rightHalf, "x-JIS0208");
-            tHighBitsMap.put(leftHalf, Boolean.FALSE);
-            tHighBitsMap.put(rightHalf, Boolean.FALSE);
-
-            tEncodingToSequenceMap.put("x-JIS0208", leftHalf);
-            tEncodings.add("x-JIS0208");
-        }
-        if (isEncodingSupported("X11KSC5601")) {
-            ControlSequence leftHalf = // high bit off, leave off
-                new ControlSequence(new byte[] { 0x1B, 0x24, 0x28, 0x43 });
-            ControlSequence rightHalf = // high bit on, turn off
-                new ControlSequence(new byte[] { 0x1B, 0x24, 0x29, 0x43 });
-            tSequenceToEncodingMap.put(leftHalf, "X11KSC5601");
-            tSequenceToEncodingMap.put(rightHalf, "X11KSC5601");
-            tHighBitsMap.put(leftHalf, Boolean.FALSE);
-            tHighBitsMap.put(rightHalf, Boolean.FALSE);
-
-            tEncodingToSequenceMap.put("X11KSC5601", leftHalf);
-            tEncodings.add("X11KSC5601");
-        }
-
-        // Encodings not listed in Compound Text Encoding spec
-
-        // Esc seq: -b
-        if (isEncodingSupported("ISO-8859-15")) {
-            ControlSequence rightHalf = // high bit on, leave on
-                new ControlSequence(new byte[] { 0x1B, 0x2D, 0x62 });
-            tSequenceToEncodingMap.put(rightHalf, "ISO-8859-15");
-            tHighBitsMap.put(rightHalf, Boolean.TRUE);
-
-            ControlSequence fullSet = leftAscii.concatenate(rightHalf);
-            tEncodingToSequenceMap.put("ISO-8859-15", fullSet);
-            tEncodings.add("ISO-8859-15");
-        }
-        // Esc seq: -T
-        if (isEncodingSupported("TIS-620")) {
-            ControlSequence rightHalf = // high bit on, leave on
-                new ControlSequence(new byte[] { 0x1B, 0x2D, 0x54 });
-            tSequenceToEncodingMap.put(rightHalf, "TIS-620");
-            tHighBitsMap.put(rightHalf, Boolean.TRUE);
-
-            ControlSequence fullSet = leftAscii.concatenate(rightHalf);
-            tEncodingToSequenceMap.put("TIS-620", fullSet);
-            tEncodings.add("TIS-620");
-        }
-        if (isEncodingSupported("JIS_X0212-1990")) {
-            ControlSequence leftHalf = // high bit off, leave off
-                new ControlSequence(new byte[] { 0x1B, 0x24, 0x28, 0x44 });
-            ControlSequence rightHalf = // high bit on, turn off
-                new ControlSequence(new byte[] { 0x1B, 0x24, 0x29, 0x44 });
-            tSequenceToEncodingMap.put(leftHalf, "JIS_X0212-1990");
-            tSequenceToEncodingMap.put(rightHalf, "JIS_X0212-1990");
-            tHighBitsMap.put(leftHalf, Boolean.FALSE);
-            tHighBitsMap.put(rightHalf, Boolean.FALSE);
-
-            tEncodingToSequenceMap.put("JIS_X0212-1990", leftHalf);
-            tEncodings.add("JIS_X0212-1990");
-        }
-        if (isEncodingSupported("X11CNS11643P1")) {
-            ControlSequence leftHalf = // high bit off, leave off
-                new ControlSequence(new byte[] { 0x1B, 0x24, 0x28, 0x47 });
-            ControlSequence rightHalf = // high bit on, turn off
-                new ControlSequence(new byte[] { 0x1B, 0x24, 0x29, 0x47 });
-            tSequenceToEncodingMap.put(leftHalf, "X11CNS11643P1");
-            tSequenceToEncodingMap.put(rightHalf, "X11CNS11643P1");
-            tHighBitsMap.put(leftHalf, Boolean.FALSE);
-            tHighBitsMap.put(rightHalf, Boolean.FALSE);
-
-            tEncodingToSequenceMap.put("X11CNS11643P1", leftHalf);
-            tEncodings.add("X11CNS11643P1");
-        }
-        if (isEncodingSupported("X11CNS11643P2")) {
-            ControlSequence leftHalf = // high bit off, leave off
-                new ControlSequence(new byte[] { 0x1B, 0x24, 0x28, 0x48 });
-            ControlSequence rightHalf = // high bit on, turn off
-                new ControlSequence(new byte[] { 0x1B, 0x24, 0x29, 0x48 });
-            tSequenceToEncodingMap.put(leftHalf, "X11CNS11643P2");
-            tSequenceToEncodingMap.put(rightHalf, "X11CNS11643P2");
-            tHighBitsMap.put(leftHalf, Boolean.FALSE);
-            tHighBitsMap.put(rightHalf, Boolean.FALSE);
-
-            tEncodingToSequenceMap.put("X11CNS11643P2", leftHalf);
-            tEncodings.add("X11CNS11643P2");
-        }
-        if (isEncodingSupported("X11CNS11643P3")) {
-            ControlSequence leftHalf = // high bit off, leave off
-                new ControlSequence(new byte[] { 0x1B, 0x24, 0x28, 0x49 });
-            ControlSequence rightHalf = // high bit on, turn off
-                new ControlSequence(new byte[] { 0x1B, 0x24, 0x29, 0x49 });
-            tSequenceToEncodingMap.put(leftHalf, "X11CNS11643P3");
-            tSequenceToEncodingMap.put(rightHalf, "X11CNS11643P3");
-            tHighBitsMap.put(leftHalf, Boolean.FALSE);
-            tHighBitsMap.put(rightHalf, Boolean.FALSE);
-
-            tEncodingToSequenceMap.put("X11CNS11643P3", leftHalf);
-            tEncodings.add("X11CNS11643P3");
-        }
-        // Esc seq: %/2??SUN-KSC5601.1992-3
-        if (isEncodingSupported("x-Johab")) {
-            // 0x32 looks wrong. It's copied from the Sun X11 Compound Text
-            // support code. It implies that all Johab characters comprise two
-            // octets, which isn't true. Johab supports the ASCII/KS-Roman
-            // characters from 0x21-0x7E with single-byte representations.
-            ControlSequence johab = new ControlSequence(
-                new byte[] { 0x1b, 0x25, 0x2f, 0x32 },
-                new byte[] { 0x53, 0x55, 0x4e, 0x2d, 0x4b, 0x53, 0x43, 0x35,
-                             0x36, 0x30, 0x31, 0x2e, 0x31, 0x39, 0x39, 0x32,
-                             0x2d, 0x33 });
-            tSequenceToEncodingMap.put(johab, "x-Johab");
-            tEncodingToSequenceMap.put("x-Johab", johab);
-            tEncodings.add("x-Johab");
-        }
-        // Esc seq: %/2??SUN-BIG5-1
-        if (isEncodingSupported("Big5")) {
-            // 0x32 looks wrong. It's copied from the Sun X11 Compound Text
-            // support code. It implies that all Big5 characters comprise two
-            // octets, which isn't true. Big5 supports the ASCII/CNS-Roman
-            // characters from 0x21-0x7E with single-byte representations.
-            ControlSequence big5 = new ControlSequence(
-                new byte[] { 0x1b, 0x25, 0x2f, 0x32 },
-                new byte[] { 0x53, 0x55, 0x4e, 0x2d, 0x42, 0x49, 0x47, 0x35,
-                             0x2d, 0x31 });
-            tSequenceToEncodingMap.put(big5, "Big5");
-            tEncodingToSequenceMap.put("Big5", big5);
-            tEncodings.add("Big5");
-        }
-
-        sequenceToEncodingMap =
-            Collections.unmodifiableMap(tSequenceToEncodingMap);
-        highBitsMap = Collections.unmodifiableMap(tHighBitsMap);
-        encodingToSequenceMap =
-            Collections.unmodifiableMap(tEncodingToSequenceMap);
-        encodings = Collections.unmodifiableList(tEncodings);
-    }
-
-    private static boolean isEncodingSupported(String encoding) {
-        try {
-            if (Charset.isSupported(encoding))
-                return true;
-        } catch (IllegalArgumentException x) { }
-        return (getDecoder(encoding) != null &&
-                getEncoder(encoding) != null);
-    }
-
-
-    // For Decoder
-    static CharsetDecoder getStandardDecoder(byte[] escSequence) {
-        return getNonStandardDecoder(escSequence, null);
-    }
-    static boolean getHighBit(byte[] escSequence) {
-        Boolean bool = highBitsMap.get(new ControlSequence(escSequence));
-        return (bool == Boolean.TRUE);
-    }
-    static CharsetDecoder getNonStandardDecoder(byte[] escSequence,
-                                                       byte[] encoding) {
-        return getDecoder(sequenceToEncodingMap.get
-            (new ControlSequence(escSequence, encoding)));
-    }
-    static CharsetDecoder getDecoder(String enc) {
-        if (enc == null) {
-            return null;
-        }
-        Charset cs = null;
-        try {
-            cs = Charset.forName(enc);
-        } catch (IllegalArgumentException e) {
-            Class<?> cls;
-            try {
-                cls = Class.forName("sun.awt.motif." + enc);
-            } catch (ClassNotFoundException ee) {
-                return null;
-            }
-            try {
-                cs = (Charset)cls.newInstance();
-            } catch (InstantiationException ee) {
-                return null;
-            } catch (IllegalAccessException ee) {
-                return null;
-            }
-        }
-        try {
-            return cs.newDecoder();
-        } catch (UnsupportedOperationException e) {}
-        return null;
-    }
-
-
-    // For Encoder
-    static byte[] getEscapeSequence(String encoding) {
-        ControlSequence seq = encodingToSequenceMap.get(encoding);
-        if (seq != null) {
-            return seq.escSequence;
-        }
-        return null;
-    }
-    static byte[] getEncoding(String encoding) {
-        ControlSequence seq = encodingToSequenceMap.get(encoding);
-        if (seq != null) {
-            return seq.encoding;
-        }
-        return null;
-    }
-    static List<String> getEncodings() {
-        return encodings;
-    }
-    static CharsetEncoder getEncoder(String enc) {
-        if (enc == null) {
-            return null;
-        }
-        Charset cs = null;
-        try {
-            cs = Charset.forName(enc);
-        } catch (IllegalArgumentException e) {
-            Class<?> cls;
-            try {
-                cls = Class.forName("sun.awt.motif." + enc);
-            } catch (ClassNotFoundException ee) {
-                return null;
-            }
-            try {
-                cs = (Charset)cls.newInstance();
-            } catch (InstantiationException ee) {
-                return null;
-            } catch (IllegalAccessException ee) {
-                return null;
-            }
-        }
-        try {
-            return cs.newEncoder();
-        } catch (Throwable e) {}
-        return null;
-    }
-
-    // Not an instantiable class
-    private CompoundTextSupport() {}
-}
--- a/jdk/test/ProblemList.txt	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/ProblemList.txt	Wed Jul 05 20:33:35 2017 +0200
@@ -225,12 +225,6 @@
 # 8058849
 sun/security/krb5/config/dns.sh                                 generic-all
 
-# 6988842: 4 tests failing on Solaris 5.10
-sun/security/pkcs11/Secmod/AddPrivateKey.java                   solaris-all
-sun/security/pkcs11/ec/ReadCertificates.java                    solaris-all
-sun/security/pkcs11/ec/ReadPKCS12.java                          solaris-all
-sun/security/pkcs11/sslecc/ClientJSSEServerJSSE.java            solaris-all
-
 # 7041639: Solaris DSA keypair generation bug
 java/security/KeyPairGenerator/SolarisShortDSA.java             solaris-all
 sun/security/tools/keytool/standard.sh                          solaris-all
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/BasicStroke/DashStrokeTest.java	Wed Jul 05 20:33:35 2017 +0200
@@ -0,0 +1,69 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ *
+ * @test
+ * @bug 8075942
+ * @summary test there is no exception rendering a dashed stroke
+ * @run DashStrokeTest
+ * @run -Dsun.java2d.renderer=sun.java2d.pisces.PiscesRenderingEngine
+ */
+
+import java.awt.BasicStroke;
+import java.awt.Color;
+import java.awt.Graphics2D;
+import java.awt.Stroke;
+import java.awt.geom.GeneralPath;
+import java.awt.image.BufferedImage;
+
+
+public class DashStrokeTest {
+
+    public static void main(String[] args) {
+
+        GeneralPath shape = new GeneralPath();
+        int[] pointTypes = {0, 0, 1, 1, 0, 1, 1, 0};
+        double[] xpoints = {428, 420, 400, 400, 400, 400, 420, 733};
+        double[] ypoints = {180, 180, 180, 160, 30, 10, 10, 10};
+        shape.moveTo(xpoints[0], ypoints[0]);
+        for (int i = 1; i < pointTypes.length; i++) {
+            if (pointTypes[i] == 1 && i < pointTypes.length - 1) {
+                shape.quadTo(xpoints[i], ypoints[i],
+                             xpoints[i + 1], ypoints[i + 1]);
+            } else {
+                shape.lineTo(xpoints[i], ypoints[i]);
+            }
+        }
+
+        BufferedImage image = new
+            BufferedImage(1000, 1000, BufferedImage.TYPE_INT_ARGB);
+        Graphics2D g2 = image.createGraphics();
+
+        Color color = new Color(124, 0, 124, 255);
+        g2.setColor(color);
+        Stroke stroke = new BasicStroke(1.0f,
+                                        BasicStroke.CAP_BUTT,
+                                        BasicStroke.JOIN_BEVEL,
+                                        10.0f, new float[] {9, 6}, 0.0f);
+        g2.setStroke(stroke);
+        g2.draw(shape);
+    }
+}
--- a/jdk/test/java/awt/Component/Headless/HeadlessComponent.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/java/awt/Component/Headless/HeadlessComponent.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -52,7 +52,6 @@
         comp.getName();
         comp.setName("goober");
         comp.getParent();
-        comp.getPeer();
         comp.getGraphicsConfiguration();
         comp.getTreeLock();
         comp.getToolkit();
--- a/jdk/test/java/awt/Component/Headless/HeadlessContainer.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/java/awt/Component/Headless/HeadlessContainer.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -87,7 +87,6 @@
         lw.setName("goober");
         lw.getName();
         lw.getParent();
-        lw.getPeer();
         lw.getGraphicsConfiguration();
         lw.getTreeLock();
         lw.getToolkit();
--- a/jdk/test/java/awt/Component/Headless/HeadlessPanel.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/java/awt/Component/Headless/HeadlessPanel.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -76,7 +76,6 @@
         p.setName("goober");
         p.getName();
         p.getParent();
-        p.getPeer();
         p.getGraphicsConfiguration();
         p.getTreeLock();
         p.getToolkit();
--- a/jdk/test/java/awt/Component/isLightweightCrash/StubPeerCrash.java	Thu May 14 20:14:44 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,188 +0,0 @@
-/*
- * Copyright (c) 2007, 2008, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
-  @test
-  @bug 6255653
-  @summary REGRESSION: Override isLightweight() causes access violation in awt.dll
-  @author Andrei Dmitriev: area=awt-component
-  @run main StubPeerCrash
-*/
-
-/*
- * The test may not crash for several times so iteratively continue up to some limit.
- */
-
-import java.awt.*;
-import java.awt.peer.*;
-import java.awt.event.PaintEvent;
-import java.awt.image.ImageProducer;
-import java.awt.image.ImageObserver;
-import java.awt.image.ColorModel;
-import java.awt.image.VolatileImage;
-import java.awt.GraphicsConfiguration;
-import sun.awt.CausedFocusEvent;
-import sun.java2d.pipe.Region;
-
-public class StubPeerCrash {
-    public static int ITERATIONS = 20;
-
-    public static void main(String []s)
-    {
-        for (int i = 0; i < ITERATIONS; i++){
-            showFrame(i);
-        }
-    }
-
-    private static void showFrame(int i){
-        System.out.println("iteration = "+i);
-        Frame f = new Frame();
-        f.add(new AHeavyweightComponent());
-        f.setVisible(true);
-        f.setVisible(false);
-    }
-}
-
-class AHeavyweightComponent extends Component {
-    private ComponentPeer peer = new StubComponentPeer();
-
-    public AHeavyweightComponent(){
-    }
-
-    public boolean isLightweight() {
-        return false;
-    }
-
-    public ComponentPeer getPeer(){
-        return peer;
-    }
-}
-
-class StubComponentPeer implements ComponentPeer {
-    public boolean isObscured(){return true;};
-    public boolean canDetermineObscurity(){return true;};
-    public void                setVisible(boolean b){};
-    public void                setEnabled(boolean b){};
-    public void                paint(Graphics g){};
-    public void                repaint(long tm, int x, int y, int width, int height){};
-    public void                print(Graphics g){};
-    public void                setBounds(int x, int y, int width, int height, int op){};
-    public void                handleEvent(AWTEvent e){};
-    public void                coalescePaintEvent(PaintEvent e){};
-    public Point               getLocationOnScreen(){return null;};
-    public Dimension           getPreferredSize(){return null;};
-    public Dimension           getMinimumSize(){return null;};
-    public ColorModel          getColorModel(){return null;};
-    public Toolkit             getToolkit(){return null;};
-    public Graphics            getGraphics(){return null;};
-    public FontMetrics         getFontMetrics(Font font){return null;};
-    public void                dispose(){};
-    public void                setForeground(Color c){};
-    public void                setBackground(Color c){};
-    public void                setFont(Font f){};
-    public void                updateCursorImmediately(){};
-    public boolean             requestFocus(Component lightweightChild,
-                                     boolean temporary,
-                                     boolean focusedWindowChangeAllowed,
-                                     long time, CausedFocusEvent.Cause cause){
-        return true;
-    };
-    public boolean             isFocusable(){return true;};
-
-    public Image               createImage(ImageProducer producer){return null;};
-    public Image               createImage(int width, int height){return null;};
-    public VolatileImage       createVolatileImage(int width, int height){return null;};
-    public boolean             prepareImage(Image img, int w, int h, ImageObserver o){return true;};
-    public int                 checkImage(Image img, int w, int h, ImageObserver o){return 0;};
-    public GraphicsConfiguration getGraphicsConfiguration(){return null;};
-    public boolean     handlesWheelScrolling(){return true;};
-    public void createBuffers(int numBuffers, BufferCapabilities caps) throws AWTException{};
-    public Image getBackBuffer(){return null;};
-    public void flip(int x1, int y1, int x2, int y2, BufferCapabilities.FlipContents flipAction){};
-    public void destroyBuffers(){};
-
-    /**
-     * Reparents this peer to the new parent referenced by <code>newContainer</code> peer
-     * Implementation depends on toolkit and container.
-     * @param newContainer peer of the new parent container
-     * @since 1.5
-     */
-    public void reparent(ContainerPeer newContainer){};
-    /**
-     * Returns whether this peer supports reparenting to another parent withour destroying the peer
-     * @return true if appropriate reparent is supported, false otherwise
-     * @since 1.5
-     */
-    public boolean isReparentSupported(){return true;};
-
-    /**
-     * Used by lightweight implementations to tell a ComponentPeer to layout
-     * its sub-elements.  For instance, a lightweight Checkbox needs to layout
-     * the box, as well as the text label.
-     */
-    public void        layout(){};
-
-
-     public    Rectangle getBounds(){return null;};
-
-    /**
-     * Applies the shape to the native component window.
-     * @since 1.7
-     */
-    public void applyShape(Region shape){};
-
-    /**
-     * DEPRECATED:  Replaced by getPreferredSize().
-     */
-    public Dimension           preferredSize(){return null;};
-
-    /**
-     * DEPRECATED:  Replaced by getMinimumSize().
-     */
-    public Dimension           minimumSize(){return null;};
-
-    /**
-     * DEPRECATED:  Replaced by setVisible(boolean).
-     */
-    public void                show(){};
-
-    /**
-     * DEPRECATED:  Replaced by setVisible(boolean).
-     */
-    public void                hide(){};
-
-    /**
-     * DEPRECATED:  Replaced by setEnabled(boolean).
-     */
-    public void                enable(){};
-
-    /**
-     * DEPRECATED:  Replaced by setEnabled(boolean).
-     */
-    public void                disable(){};
-
-    /**
-     * DEPRECATED:  Replaced by setBounds(int, int, int, int).
-     */
-    public void                reshape(int x, int y, int width, int height){};
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/Focus/8073453/AWTFocusTransitionTest.java	Wed Jul 05 20:33:35 2017 +0200
@@ -0,0 +1,115 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/* @test
+ * @bug 8073453
+ * @summary Focus doesn't move when pressing Shift + Tab keys
+ * @author Dmitry Markov
+ * @compile AWTFocusTransitionTest.java
+ * @run main/othervm AWTFocusTransitionTest
+ */
+import sun.awt.SunToolkit;
+
+import java.awt.*;
+import java.awt.event.KeyEvent;
+
+public class AWTFocusTransitionTest {
+    private static SunToolkit toolkit;
+    private static Robot robot;
+
+    private static Frame frame;
+    private static TextField textField;
+    private static Button button;
+
+    public static void main(String[] args) throws Exception {
+        toolkit = (SunToolkit)Toolkit.getDefaultToolkit();
+        robot = new Robot();
+        robot.setAutoDelay(50);
+
+        try {
+            createAndShowGUI();
+
+            toolkit.realSync();
+
+            checkFocusOwner(textField);
+
+            robot.keyPress(KeyEvent.VK_TAB);
+            robot.keyRelease(KeyEvent.VK_TAB);
+            toolkit.realSync();
+
+            checkFocusOwner(button);
+
+            robot.keyPress(KeyEvent.VK_SHIFT);
+            robot.keyPress(KeyEvent.VK_TAB);
+            robot.keyRelease(KeyEvent.VK_TAB);
+            robot.keyRelease(KeyEvent.VK_SHIFT);
+            toolkit.realSync();
+
+            checkFocusOwner(textField);
+
+            robot.keyPress(KeyEvent.VK_SHIFT);
+            robot.keyPress(KeyEvent.VK_TAB);
+            robot.keyRelease(KeyEvent.VK_TAB);
+            robot.keyRelease(KeyEvent.VK_SHIFT);
+            toolkit.realSync();
+
+            checkFocusOwner(button);
+        } finally {
+            if (frame != null) {
+                frame.dispose();
+            }
+        }
+        System.out.println("Test Passed!");
+    }
+
+    private static void createAndShowGUI() {
+        frame = new Frame("AWTFocusTransitionTest");
+        frame.setSize(300, 300);
+        frame.setFocusTraversalPolicyProvider(true);
+        frame.setFocusTraversalPolicy(new DefaultFocusTraversalPolicy());
+
+        textField = new TextField();
+        button = new Button();
+
+        Panel panel = new Panel();
+        panel.setFocusTraversalPolicyProvider(true);
+        panel.setFocusTraversalPolicy(new DefaultFocusTraversalPolicy());
+
+        Panel p = new Panel();
+        p.setLayout(new GridLayout(3, 1));
+        p.add(textField);
+        p.add(button);
+        p.add(panel);
+
+        frame.add(p);
+        frame.setVisible(true);
+    }
+
+    private static void checkFocusOwner(Component component) {
+        if (component != frame.getFocusOwner()) {
+            throw new RuntimeException("Test Failed! Incorrect focus owner: " + frame.getFocusOwner() +
+                    ", but expected: " + component);
+        }
+    }
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/Focus/8073453/SwingFocusTransitionTest.java	Wed Jul 05 20:33:35 2017 +0200
@@ -0,0 +1,131 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/* @test
+ * @bug 8073453
+ * @summary Focus doesn't move when pressing Shift + Tab keys
+ * @author Dmitry Markov
+ * @compile SwingFocusTransitionTest.java
+ * @run main/othervm SwingFocusTransitionTest
+ */
+import sun.awt.SunToolkit;
+
+import javax.swing.*;
+import java.awt.*;
+import java.awt.event.KeyEvent;
+
+public class SwingFocusTransitionTest {
+    private static SunToolkit toolkit;
+    private static Robot robot;
+
+    private static JFrame frame;
+    private static JTextField textField;
+    private static JButton button;
+
+    public static void main(String[] args) throws Exception {
+        toolkit = (SunToolkit)Toolkit.getDefaultToolkit();
+        robot = new Robot();
+        robot.setAutoDelay(50);
+
+        try {
+            SwingUtilities.invokeAndWait(new Runnable() {
+                @Override
+                public void run() {
+                    createAndShowGUI();
+                }
+            });
+
+            toolkit.realSync();
+
+            checkFocusOwner(textField);
+
+            robot.keyPress(KeyEvent.VK_TAB);
+            robot.keyRelease(KeyEvent.VK_TAB);
+            toolkit.realSync();
+
+            checkFocusOwner(button);
+
+            robot.keyPress(KeyEvent.VK_SHIFT);
+            robot.keyPress(KeyEvent.VK_TAB);
+            robot.keyRelease(KeyEvent.VK_TAB);
+            robot.keyRelease(KeyEvent.VK_SHIFT);
+            toolkit.realSync();
+
+            checkFocusOwner(textField);
+
+            robot.keyPress(KeyEvent.VK_SHIFT);
+            robot.keyPress(KeyEvent.VK_TAB);
+            robot.keyRelease(KeyEvent.VK_TAB);
+            robot.keyRelease(KeyEvent.VK_SHIFT);
+            toolkit.realSync();
+
+            checkFocusOwner(button);
+        } finally {
+            SwingUtilities.invokeLater(new Runnable() {
+                @Override
+                public void run() {
+                    if (frame != null) {
+                        frame.dispose();
+                    }
+                }
+            });
+        }
+        System.out.println("Test Passed!");
+    }
+
+    private static void createAndShowGUI() {
+        frame = new JFrame("SwingFocusTransitionTest");
+        frame.setSize(300, 300);
+        frame.setFocusTraversalPolicyProvider(true);
+        frame.setFocusTraversalPolicy(new LayoutFocusTraversalPolicy());
+
+        textField = new JTextField();
+        button = new JButton();
+
+        JPanel panel = new JPanel();
+        panel.setFocusTraversalPolicyProvider(true);
+        panel.setFocusTraversalPolicy(new DefaultFocusTraversalPolicy());
+
+        JPanel p = new JPanel();
+        p.setLayout(new GridLayout(3, 1));
+        p.add(textField);
+        p.add(button);
+        p.add(panel);
+
+        frame.add(p);
+        frame.setVisible(true);
+    }
+
+    private static void checkFocusOwner(final Component component) throws Exception {
+        SwingUtilities.invokeAndWait(new Runnable() {
+            @Override
+            public void run() {
+                if (component != frame.getFocusOwner()) {
+                    throw new RuntimeException("Test Failed! Incorrect focus owner: " + frame.getFocusOwner() +
+                            ", but expected: " + component);
+                }
+            }
+        });
+    }
+}
+
--- a/jdk/test/java/awt/FontClass/CreateFont/fileaccess/FontFile.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/java/awt/FontClass/CreateFont/fileaccess/FontFile.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,6 +25,16 @@
  * @test
  * @bug 6652929
  * @summary verify handling of File.getPath()
+ * @compile FontFile.java
+ * @run shell TestFontFile.sh
+ */
+
+/*
+ * When using jtreg this test needs to be run by shell script,
+ * since otherwise jtreg reflectively invokes the main method
+ * and the codebase for the purposes of the security manager
+ * is that of the jtreg harness, not the codebase (class file location)
+ * of this program, thus access to read to that location is not available.
  */
 
 import java.awt.*;
@@ -34,10 +44,21 @@
     public static void main(String[] args) throws Exception {
         String sep = System.getProperty("file.separator");
         String fname = ".." + sep + "A.ttf";
-        String dir = System.getProperty("test.src");
+        //String dir = System.getProperty("test.src");
+        String dir = System.getenv("TESTSRC");
         if (dir != null) {
             fname = dir + sep + fname;
         }
+        //String classesDir = System.getProperty("test.classes");
+        String classesDir = System.getenv("TESTCLASSES");
+        System.out.println("classesDir="+classesDir);
+        String testfile = "somefile";
+        if (classesDir != null) {
+            testfile = classesDir + sep + testfile;
+        }
+        final String somefile = testfile;
+        System.out.println("somefile="+somefile);
+        System.out.println("userdir="+System.getProperty("user.dir"));
         final String name = fname;
         System.out.println("Will try to access " + name);
         if (!(new File(name)).canRead()) {
@@ -66,7 +87,7 @@
                             return name;
                         } else {
                             read = true;
-                            return "somefile";
+                            return somefile;
                         }
                     }
                     @Override public boolean canRead() {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/FontClass/CreateFont/fileaccess/TestFontFile.sh	Wed Jul 05 20:33:35 2017 +0200
@@ -0,0 +1,84 @@
+#
+# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# This code is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 2 only, as
+# published by the Free Software Foundation.
+#
+# This code is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# version 2 for more details (a copy is included in the LICENSE file that
+# accompanied this code).
+#
+# You should have received a copy of the GNU General Public License version
+# 2 along with this work; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+# or visit www.oracle.com if you need additional information or have any
+# questions.
+#
+
+#!/bin/sh
+
+if [ "${TESTSRC}" = "" ]
+then TESTSRC=.
+fi
+
+if [ "${TESTJAVA}" = "" ]
+then
+  PARENT=`dirname \`which java\``
+  TESTJAVA=`dirname ${PARENT}`
+  echo "TESTJAVA not set, selecting " ${TESTJAVA}
+  echo "If this is incorrect, try setting the variable manually."
+fi
+
+if [ "${TESTCLASSES}" = "" ]
+then
+  echo "TESTCLASSES not set.  Test cannot execute.  Failed."
+  exit 1
+fi
+
+BIT_FLAG=""
+
+# set platform-dependent variables
+OS=`uname -s`
+case "$OS" in
+  SunOS | Linux | Darwin )
+    NULL=/dev/null
+    PS=":"
+    FS="/"
+    ## for solaris, linux it's HOME
+    FILE_LOCATION=$HOME
+    if [ -f ${FILE_LOCATION}${FS}JDK64BIT -a ${OS} = "SunOS" ]
+    then
+        BIT_FLAG=`cat ${FILE_LOCATION}${FS}JDK64BIT`
+    fi
+    ;;
+  Windows_* | CYGWIN* )
+    NULL=NUL
+    PS=";"
+    FS="\\"
+    ;;
+  * )
+    echo "Unrecognized system!"
+    exit 1;
+    ;;
+esac
+
+JEMMYPATH=${CPAPPEND}
+CLASSPATH=.${PS}${TESTCLASSES}${PS}${JEMMYPATH} ; export CLASSPATH
+
+THIS_DIR=`pwd`
+
+${TESTJAVA}${FS}bin${FS}java ${BIT_FLAG} -version
+
+${TESTJAVA}${FS}bin${FS}java ${BIT_FLAG} FontFile > test.out 2>&1
+
+STATUS=$?
+
+cat test.out
+
+exit $STATUS
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/FontClass/DebugFonts.java	Wed Jul 05 20:33:35 2017 +0200
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 4956241 80769790
+ * @summary NPE debugging fonts
+ * @run main/othervm DebugFonts
+ */
+
+import java.awt.Font;
+
+public class DebugFonts {
+
+   public static void main(String [] args) {
+      System.setProperty("sun.java2d.debugfonts", "true");
+      Font font = new Font("dialog", Font.PLAIN, 14);
+      System.out.println(font);
+      String s1 = font.getFamily();
+      String s2 = font.getFontName();
+   }
+}
--- a/jdk/test/java/awt/FontClass/HeadlessFont.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/java/awt/FontClass/HeadlessFont.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -224,11 +224,6 @@
                 f2.hasUniformLineMetrics();
                 f3.hasUniformLineMetrics();
                 f4.hasUniformLineMetrics();
-
-                f1.getPeer();
-                f2.getPeer();
-                f3.getPeer();
-                f4.getPeer();
             }
         }
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/Graphics2D/ScaledTransform/ScaledTransform.java	Wed Jul 05 20:33:35 2017 +0200
@@ -0,0 +1,90 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+import java.awt.Dialog;
+import java.awt.Frame;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.GraphicsConfiguration;
+import java.awt.GraphicsDevice;
+import java.awt.GraphicsEnvironment;
+import java.awt.Panel;
+import java.awt.geom.AffineTransform;
+
+/*
+ * @test
+ * @bug 8069361
+ * @summary SunGraphics2D.getDefaultTransform() does not include scale factor
+ * @author Alexander Scherbatiy
+ * @run main ScaledTransform
+ */
+public class ScaledTransform {
+
+    private static volatile boolean passed = false;
+
+    public static void main(String[] args) {
+        GraphicsEnvironment ge = GraphicsEnvironment.
+                getLocalGraphicsEnvironment();
+
+        if (ge.isHeadlessInstance()) {
+            return;
+        }
+
+        for (GraphicsDevice gd : ge.getScreenDevices()) {
+            for (GraphicsConfiguration gc : gd.getConfigurations()) {
+                testScaleFactor(gc);
+            }
+        }
+    }
+
+    private static void testScaleFactor(final GraphicsConfiguration gc) {
+        final Dialog dialog = new Dialog((Frame) null, "Test", true, gc);
+
+        try {
+            dialog.setSize(100, 100);
+            Panel panel = new Panel() {
+
+                @Override
+                public void paint(Graphics g) {
+                    if (g instanceof Graphics2D) {
+                        AffineTransform gcTx = gc.getDefaultTransform();
+                        AffineTransform gTx
+                                = ((Graphics2D) g).getTransform();
+                        passed = gcTx.getScaleX() == gTx.getScaleX()
+                                && gcTx.getScaleY() == gTx.getScaleY();
+                    } else {
+                        passed = true;
+                    }
+                    dialog.setVisible(false);
+                }
+            };
+            dialog.add(panel);
+            dialog.setVisible(true);
+
+            if (!passed) {
+                throw new RuntimeException("Transform is not scaled!");
+            }
+        } finally {
+            dialog.dispose();
+        }
+    }
+}
--- a/jdk/test/java/awt/Mixing/AWT_Mixing/OverlappingTestBase.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/java/awt/Mixing/AWT_Mixing/OverlappingTestBase.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -29,6 +29,8 @@
 import java.lang.reflect.Method;
 import java.util.ArrayList;
 import javax.swing.*;
+
+import sun.awt.AWTAccessor;
 import sun.awt.EmbeddedFrame;
 import java.io.*;
 import test.java.awt.regtesthelpers.Util;
@@ -243,8 +245,9 @@
                 if (Toolkit.getDefaultToolkit().getClass().getName().contains("XToolkit")) {
                     getWindowMethodName = "getWindow";
                 }
-                ComponentPeer peer = embedder.getPeer();
-//                System.err.println("Peer: " + peer);
+                ComponentPeer peer = AWTAccessor.getComponentAccessor()
+                                                .getPeer(embedder);
+                //  System.err.println("Peer: " + peer);
                 Method getWindowMethod = peer.getClass().getMethod(getWindowMethodName);
                 frameWindow = (Long) getWindowMethod.invoke(peer);
 //                System.err.println("frame peer ID: " + frameWindow);
--- a/jdk/test/java/awt/Paint/ButtonRepaint.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/java/awt/Paint/ButtonRepaint.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -23,7 +23,6 @@
 
 
 import java.awt.*;
-import java.awt.peer.ButtonPeer;
 
 /**
  * @test
@@ -66,23 +65,16 @@
         setLabel("");
         setLabel(null);
         setLabel(getLabel());
-        ((ButtonPeer) getPeer()).setLabel("");
-        ((ButtonPeer) getPeer()).setLabel(null);
-        ((ButtonPeer) getPeer()).setLabel(getLabel());
 
         setFont(null);
         setFont(getFont());
-        getPeer().setFont(getFont());
 
         setBackground(null);
         setBackground(getBackground());
-        getPeer().setBackground(getBackground());
 
         setForeground(null);
         setForeground(getForeground());
-        getPeer().setForeground(getForeground());
 
         setEnabled(isEnabled());
-        getPeer().setEnabled(isEnabled());
     }
 }
--- a/jdk/test/java/awt/Paint/CheckboxRepaint.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/java/awt/Paint/CheckboxRepaint.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -22,7 +22,6 @@
  */
 
 import java.awt.*;
-import java.awt.peer.CheckboxPeer;
 
 /**
  * @test
@@ -63,31 +62,21 @@
 
     void test() {
         setState(getState());
-        ((CheckboxPeer) getPeer()).setState(getState());
-
         setCheckboxGroup(getCheckboxGroup());
-        ((CheckboxPeer) getPeer()).setCheckboxGroup(getCheckboxGroup());
 
         setLabel("");
         setLabel(null);
         setLabel(getLabel());
-        ((CheckboxPeer) getPeer()).setLabel("");
-        ((CheckboxPeer) getPeer()).setLabel(null);
-        ((CheckboxPeer) getPeer()).setLabel(getLabel());
 
         setFont(null);
         setFont(getFont());
-        getPeer().setFont(getFont());
 
         setBackground(null);
         setBackground(getBackground());
-        getPeer().setBackground(getBackground());
 
         setForeground(null);
         setForeground(getForeground());
-        getPeer().setForeground(getForeground());
 
         setEnabled(isEnabled());
-        getPeer().setEnabled(isEnabled());
     }
 }
--- a/jdk/test/java/awt/Paint/LabelRepaint.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/java/awt/Paint/LabelRepaint.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,7 +25,6 @@
 import java.awt.Frame;
 import java.awt.Graphics;
 import java.awt.Label;
-import java.awt.peer.LabelPeer;
 
 /**
  * @test
@@ -66,28 +65,20 @@
 
     void test() {
         setAlignment(getAlignment());
-        ((LabelPeer) getPeer()).setAlignment(getAlignment());
 
         setText("");
         setText(null);
         setText(getText());
-        ((LabelPeer) getPeer()).setText("");
-        ((LabelPeer) getPeer()).setText(null);
-        ((LabelPeer) getPeer()).setText(getText());
 
         setFont(null);
         setFont(getFont());
-        getPeer().setFont(getFont());
 
         setBackground(null);
         setBackground(getBackground());
-        getPeer().setBackground(getBackground());
 
         setForeground(null);
         setForeground(getForeground());
-        getPeer().setForeground(getForeground());
 
         setEnabled(isEnabled());
-        getPeer().setEnabled(isEnabled());
     }
 }
--- a/jdk/test/java/awt/Paint/ListRepaint.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/java/awt/Paint/ListRepaint.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -25,7 +25,6 @@
 import java.awt.Frame;
 import java.awt.Graphics;
 import java.awt.List;
-import java.awt.peer.ListPeer;
 
 /**
  * @test
@@ -71,21 +70,16 @@
 
     void test() {
         select(0);
-        ((ListPeer) getPeer()).select(getSelectedIndex());
 
         setFont(null);
         setFont(getFont());
-        getPeer().setFont(getFont());
 
         setBackground(null);
         setBackground(getBackground());
-        getPeer().setBackground(getBackground());
 
         setForeground(null);
         setForeground(getForeground());
-        getPeer().setForeground(getForeground());
 
         setEnabled(isEnabled());
-        getPeer().setEnabled(isEnabled());
     }
 }
--- a/jdk/test/java/awt/SplashScreen/MultiResolutionSplash/MultiResolutionSplashTest.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/java/awt/SplashScreen/MultiResolutionSplash/MultiResolutionSplashTest.java	Wed Jul 05 20:33:35 2017 +0200
@@ -40,7 +40,7 @@
 
 /**
  * @test
- * @bug 8043869 8075244
+ * @bug 8043869 8075244 8078082
  * @author Alexander Scherbatiy
  * @summary [macosx] java -splash does not honor 2x hi dpi notation for retina
  * support
@@ -115,6 +115,7 @@
         frame.setSize(100, 100);
         String test = "123";
         TextField textField = new TextField(test);
+        textField.selectAll();
         frame.add(textField);
         frame.setVisible(true);
         robot.waitForIdle();
--- a/jdk/test/java/awt/TextArea/TextAreaCaretVisibilityTest/bug7129742.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/java/awt/TextArea/TextAreaCaretVisibilityTest/bug7129742.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -42,6 +42,9 @@
 import javax.swing.SwingUtilities;
 import javax.swing.text.DefaultCaret;
 
+import sun.awt.AWTAccessor;
+import sun.awt.AWTAccessor.ComponentAccessor;
+
 
 public class bug7129742 {
 
@@ -64,7 +67,8 @@
                 frame.setVisible(true);
 
                 try {
-                    Class XTextAreaPeerClzz  = textArea.getPeer().getClass();
+                    ComponentAccessor acc = AWTAccessor.getComponentAccessor();
+                    Class XTextAreaPeerClzz = acc.getPeer(textArea).getClass();
                     System.out.println(XTextAreaPeerClzz.getName());
                     if (!XTextAreaPeerClzz.getName().equals("sun.awt.X11.XTextAreaPeer")) {
                         fastreturn = true;
@@ -73,7 +77,7 @@
 
                     Field jtextField = XTextAreaPeerClzz.getDeclaredField("jtext");
                     jtextField.setAccessible(true);
-                    JTextArea jtext = (JTextArea)jtextField.get(textArea.getPeer());
+                    JTextArea jtext = (JTextArea)jtextField.get(acc.getPeer(textArea));
                     caret = (DefaultCaret) jtext.getCaret();
 
                     textArea.requestFocusInWindow();
--- a/jdk/test/java/awt/Toolkit/DynamicLayout/bug7172833.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/java/awt/Toolkit/DynamicLayout/bug7172833.java	Wed Jul 05 20:33:35 2017 +0200
@@ -23,16 +23,13 @@
 
 
 import java.awt.*;
+import java.awt.Frame;
 import java.awt.datatransfer.Clipboard;
-import java.awt.dnd.DragGestureEvent;
-import java.awt.dnd.InvalidDnDOperationException;
-import java.awt.dnd.peer.DragSourceContextPeer;
 import java.awt.font.TextAttribute;
 import java.awt.im.InputMethodHighlight;
 import java.awt.image.ColorModel;
 import java.awt.image.ImageObserver;
 import java.awt.image.ImageProducer;
-import java.awt.peer.*;
 import java.net.URL;
 import java.util.Map;
 import java.util.Properties;
@@ -67,130 +64,6 @@
             return super.isDynamicLayoutSet();
         }
 
-        @Override
-        protected DesktopPeer createDesktopPeer(final Desktop target)
-                throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected ButtonPeer createButton(final Button target)
-                throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected TextFieldPeer createTextField(final TextField target)
-                throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected LabelPeer createLabel(final Label target) throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected ListPeer createList(final List target) throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected CheckboxPeer createCheckbox(final Checkbox target)
-                throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected ScrollbarPeer createScrollbar(final Scrollbar target)
-                throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected ScrollPanePeer createScrollPane(final ScrollPane target)
-                throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected TextAreaPeer createTextArea(final TextArea target)
-                throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected ChoicePeer createChoice(final Choice target)
-                throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected FramePeer createFrame(final Frame target) throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected CanvasPeer createCanvas(final Canvas target) {
-            return null;
-        }
-
-        @Override
-        protected PanelPeer createPanel(final Panel target) {
-            return null;
-        }
-
-        @Override
-        protected WindowPeer createWindow(final Window target)
-                throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected DialogPeer createDialog(final Dialog target)
-                throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected MenuBarPeer createMenuBar(final MenuBar target)
-                throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected MenuPeer createMenu(final Menu target) throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected PopupMenuPeer createPopupMenu(final PopupMenu target)
-                throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected MenuItemPeer createMenuItem(final MenuItem target)
-                throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected FileDialogPeer createFileDialog(final FileDialog target)
-                throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected CheckboxMenuItemPeer createCheckboxMenuItem(
-                final CheckboxMenuItem target) throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected FontPeer getFontPeer(final String name, final int style) {
-            return null;
-        }
 
         @Override
         public Dimension getScreenSize() throws HeadlessException {
@@ -288,12 +161,6 @@
         }
 
         @Override
-        public DragSourceContextPeer createDragSourceContextPeer(
-                final DragGestureEvent dge) throws InvalidDnDOperationException {
-            return null;
-        }
-
-        @Override
         public boolean isModalityTypeSupported(
                 final Dialog.ModalityType modalityType) {
             return false;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/Toolkit/GetImage/bug8078165.java	Wed Jul 05 20:33:35 2017 +0200
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+
+import java.awt.*;
+import java.net.URL;
+import java.security.Permission;
+
+
+/**
+ * @test
+ * @bug 8078165
+ * @summary NPE when attempting to get image from toolkit
+ * @author Anton Nashatyrev
+ */
+public final class bug8078165 {
+
+    public static void main(final String[] args) throws Exception {
+        // Mac only
+        System.setSecurityManager(new SecurityManager() {
+            @Override
+            public void checkPermission(Permission permission) {
+                // Just allows everything
+            }
+        });
+        // The method shouldn't throw NPE
+        Toolkit.getDefaultToolkit().getImage(new URL("file://./dummyImage@2x.png"));
+        Toolkit.getDefaultToolkit().getImage("./dummyImage@2x.png");
+    }
+}
--- a/jdk/test/java/awt/Toolkit/Headless/ExceptionContract/ExceptionContract.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/java/awt/Toolkit/Headless/ExceptionContract/ExceptionContract.java	Wed Jul 05 20:33:35 2017 +0200
@@ -36,12 +36,9 @@
 import test.java.awt.regtesthelpers.Sysout;
 
 import java.awt.datatransfer.Clipboard;
-import java.awt.dnd.*;
-import java.awt.dnd.peer.DragSourceContextPeer;
 import java.awt.font.TextAttribute;
 import java.awt.im.InputMethodHighlight;
 import java.awt.image.*;
-import java.awt.peer.*;
 import java.net.URL;
 import java.util.Map;
 import java.util.Properties;
@@ -112,116 +109,6 @@
         }
 
         @Override
-        protected DesktopPeer createDesktopPeer(Desktop target) throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected ButtonPeer createButton(Button target) throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected TextFieldPeer createTextField(TextField target) throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected LabelPeer createLabel(Label target) throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected ListPeer createList(List target) throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected CheckboxPeer createCheckbox(Checkbox target) throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected ScrollbarPeer createScrollbar(Scrollbar target) throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected ScrollPanePeer createScrollPane(ScrollPane target) throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected TextAreaPeer createTextArea(TextArea target) throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected ChoicePeer createChoice(Choice target) throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected FramePeer createFrame(Frame target) throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected CanvasPeer createCanvas(Canvas target) {
-            return null;
-        }
-
-        @Override
-        protected PanelPeer createPanel(Panel target) {
-            return null;
-        }
-
-        @Override
-        protected WindowPeer createWindow(Window target) throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected DialogPeer createDialog(Dialog target) throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected MenuBarPeer createMenuBar(MenuBar target) throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected MenuPeer createMenu(Menu target) throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected PopupMenuPeer createPopupMenu(PopupMenu target) throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected MenuItemPeer createMenuItem(MenuItem target) throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected FileDialogPeer createFileDialog(FileDialog target) throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected CheckboxMenuItemPeer createCheckboxMenuItem(CheckboxMenuItem target) throws HeadlessException {
-            return null;
-        }
-
-        @Override
-        protected FontPeer getFontPeer(String name, int style) {
-            return null;
-        }
-
-        @Override
         public Dimension getScreenSize() throws HeadlessException {
             return null;
         }
@@ -312,11 +199,6 @@
         }
 
         @Override
-        public DragSourceContextPeer createDragSourceContextPeer(DragGestureEvent dge) throws InvalidDnDOperationException {
-            return null;
-        }
-
-        @Override
         public boolean isModalityTypeSupported(Dialog.ModalityType modalityType) {
             return false;
         }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/datatransfer/DragImage/MultiResolutionDragImageTest.java	Wed Jul 05 20:33:35 2017 +0200
@@ -0,0 +1,172 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import sun.awt.image.MultiResolutionToolkitImage;
+import sun.java2d.SunGraphics2D;
+
+import javax.swing.*;
+import java.awt.*;
+import java.awt.image.BufferedImage;
+
+import static java.awt.event.InputEvent.BUTTON1_DOWN_MASK;
+
+/**
+ * @test
+ * @bug 8076106
+ * @author Hendrik Schreiber
+ * @summary [macosx] Drag image of TransferHandler does not honor
+ * MultiResolutionImage
+ * @run main MultiResolutionDragImageTest TEST_DRAG
+ */
+public class MultiResolutionDragImageTest {
+
+    private static final Color COLOR_1X = Color.BLUE;
+    private static final Color COLOR_2X = Color.RED;
+    private static JFrame frame;
+    private static JTextField field;
+    private static Point p;
+
+    public static void main(String[] args) throws Exception {
+
+        final String test = args[0];
+
+        switch (test) {
+            case "TEST_DRAG":
+                testDrag();
+                break;
+            default:
+                throw new RuntimeException("Unknown test: " + test);
+        }
+    }
+
+    private static void testDrag() throws Exception {
+
+
+        SwingUtilities.invokeAndWait(() -> {
+
+            frame = new JFrame();
+            field = new JTextField("Drag Me");
+            setupFrame(frame, field);
+            frame.setVisible(true);
+        });
+
+        final Robot robot = new Robot();
+        robot.setAutoDelay(500);
+        robot.setAutoWaitForIdle(true);
+        robot.waitForIdle();
+
+        // get mouse into position
+        SwingUtilities.invokeAndWait(() -> {
+
+            p = new Point(field.getWidth() / 2, field.getHeight() / 2);
+            SwingUtilities.convertPointToScreen(p, field);
+        });
+
+        robot.mouseMove(p.x, p.y);
+        // simulate dragging
+        robot.mousePress(BUTTON1_DOWN_MASK);
+        p.translate(10, 10);
+        robot.mouseMove(p.x, p.y);
+
+        p.translate(5, 5);
+        final Color color = robot.getPixelColor(p.x, p.y);
+        robot.mouseRelease(BUTTON1_DOWN_MASK);
+
+        SwingUtilities.invokeAndWait(frame::dispose);
+
+        final float scaleFactor = getScaleFactor();
+        final Color testColor = (1 < scaleFactor) ? COLOR_2X : COLOR_1X;
+
+        if (!similar(testColor, color)) {
+            throw new RuntimeException(
+                    "TEST FAILED: Image with wrong resolution is used for drag image!");
+        }
+        System.out.println("TEST PASSED!");
+    }
+
+    private static void setupFrame(final JFrame frame, final JTextField field) {
+
+        frame.setBounds(0, 0, 50, 50);
+        frame.setLayout(new BorderLayout());
+        field.setDragEnabled(true);
+        final TransferHandler transferHandler = field.getTransferHandler();
+        transferHandler.setDragImage(createMultiResolutionImage());
+        frame.getContentPane().add(field, BorderLayout.CENTER);
+    }
+
+    private static boolean similar(Color c1, Color c2){
+        return similar(c1.getRed(), c2.getRed())
+                && similar(c1.getGreen(), c2.getGreen())
+                && similar(c1.getBlue(), c2.getBlue());
+    }
+
+    private static boolean similar(int n, int m){
+        return Math.abs(n - m) <= 50;
+    }
+
+    private static float getScaleFactor() {
+
+        final Dialog dialog = new Dialog((Window) null);
+        dialog.setSize(100, 100);
+        dialog.setModal(true);
+        final float[] scaleFactors = new float[1];
+        Panel panel = new Panel() {
+
+            @Override
+            public void paint(Graphics g) {
+                float scaleFactor = 1;
+                if (g instanceof SunGraphics2D) {
+                    scaleFactor = ((SunGraphics2D) g).surfaceData.getDefaultScale();
+                }
+                scaleFactors[0] = scaleFactor;
+                dialog.setVisible(false);
+            }
+        };
+
+        dialog.add(panel);
+        dialog.setVisible(true);
+        dialog.dispose();
+
+        return scaleFactors[0];
+    }
+
+    private static Image createMultiResolutionImage() {
+
+        return new MultiResolutionToolkitImage(
+                createImage(50, COLOR_1X),
+                createImage(100, COLOR_2X)
+        );
+
+    }
+
+    private static Image createImage(final int length, final Color color) {
+
+        final BufferedImage image = new BufferedImage(length, length,
+                BufferedImage.TYPE_INT_ARGB_PRE);
+        final Graphics graphics = image.getGraphics();
+        graphics.setColor(color);
+        graphics.fillRect(0, 0, length, length);
+        graphics.dispose();
+        return image;
+    }
+}
\ No newline at end of file
--- a/jdk/test/java/awt/dnd/DragSourceListenerSerializationTest/DragSourceListenerSerializationTest.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/java/awt/dnd/DragSourceListenerSerializationTest/DragSourceListenerSerializationTest.java	Wed Jul 05 20:33:35 2017 +0200
@@ -74,7 +74,6 @@
                 new Point(100, 100),
                 Arrays.asList(me));
         DragSourceContext dsc = new DragSourceContext(
-                Toolkit.getDefaultToolkit().createDragSourceContextPeer(dge),
                 dge,
                 new Cursor(Cursor.HAND_CURSOR),
                 null, null, new StringSelection("TEXT"), null);
--- a/jdk/test/java/awt/geom/Path2D/Path2DCopyConstructor.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/java/awt/geom/Path2D/Path2DCopyConstructor.java	Wed Jul 05 20:33:35 2017 +0200
@@ -37,7 +37,7 @@
  * @bug 8076419
  * @summary Check Path2D copy constructor (trims arrays)
  *          and constructor with zero capacity
- * @run main Path2DTrimCopy
+ * @run main Path2DCopyConstructor
  */
 public class Path2DCopyConstructor {
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/geom/Path2D/Path2DGrow.java	Wed Jul 05 20:33:35 2017 +0200
@@ -0,0 +1,188 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.awt.geom.GeneralPath;
+import java.awt.geom.Path2D;
+
+/**
+ * @test
+ * @bug 8078464
+ * @summary Check the growth algorithm (needRoom) in Path2D implementations
+ * @run main Path2DGrow
+ */
+public class Path2DGrow {
+
+    public static final int N = 1000 * 1000;
+
+    public static boolean verbose = false;
+    public static boolean force = false;
+
+    static void echo(String msg) {
+        System.out.println(msg);
+    }
+
+    static void log(String msg) {
+        if (verbose || force) {
+            echo(msg);
+        }
+    }
+
+    public static void main(String argv[]) {
+        verbose = (argv.length != 0);
+
+        testEmptyDoublePaths();
+        testDoublePaths();
+
+        testEmptyFloatPaths();
+        testFloatPaths();
+
+        testEmptyGeneralPath();
+        testGeneralPath();
+    }
+
+    static void testEmptyDoublePaths() {
+        echo("\n - Test(Path2D.Double[0]) ---");
+        test(() -> new Path2D.Double(Path2D.WIND_NON_ZERO, 0));
+    }
+
+    static void testDoublePaths() {
+        echo("\n - Test(Path2D.Double) ---");
+        test(() -> new Path2D.Double());
+    }
+
+    static void testEmptyFloatPaths() {
+        echo("\n - Test(Path2D.Float[0]) ---");
+        test(() -> new Path2D.Float(Path2D.WIND_NON_ZERO, 0));
+    }
+
+    static void testFloatPaths() {
+        echo("\n - Test(Path2D.Float) ---");
+        test(() -> new Path2D.Float());
+    }
+
+    static void testEmptyGeneralPath() {
+        echo("\n - Test(GeneralPath[0]) ---");
+        test(() -> new GeneralPath(Path2D.WIND_NON_ZERO, 0));
+    }
+
+    static void testGeneralPath() {
+        echo("\n - Test(GeneralPath) ---");
+        test(() -> new GeneralPath());
+    }
+
+    interface PathFactory {
+        Path2D makePath();
+    }
+
+    static void test(PathFactory pf) {
+        long start, end;
+
+        for (int n = 1; n <= N; n *= 10) {
+            force = (n == N);
+
+            start = System.nanoTime();
+            testAddMoves(pf.makePath(), n);
+            end = System.nanoTime();
+            log("testAddMoves[" + n + "] duration= "
+                + (1e-6 * (end - start)) + " ms.");
+
+            start = System.nanoTime();
+            testAddLines(pf.makePath(), n);
+            end = System.nanoTime();
+            log("testAddLines[" + n + "] duration= "
+                + (1e-6 * (end - start)) + " ms.");
+
+            start = System.nanoTime();
+            testAddQuads(pf.makePath(), n);
+            end = System.nanoTime();
+            log("testAddQuads[" + n + "] duration= "
+                + (1e-6 * (end - start)) + " ms.");
+
+            start = System.nanoTime();
+            testAddCubics(pf.makePath(), n);
+            end = System.nanoTime();
+            log("testAddCubics[" + n + "] duration= "
+                + (1e-6 * (end - start)) + " ms.");
+
+            start = System.nanoTime();
+            testAddMoveAndCloses(pf.makePath(), n);
+            end = System.nanoTime();
+            log("testAddMoveAndCloses[" + n + "] duration= "
+                + (1e-6 * (end - start)) + " ms.");
+        }
+    }
+
+    static void addMove(Path2D p2d, int i) {
+        p2d.moveTo(1.0 * i, 0.5 * i);
+    }
+
+    static void addLine(Path2D p2d, int i) {
+        p2d.lineTo(1.1 * i, 2.3 * i);
+    }
+
+    static void addCubic(Path2D p2d, int i) {
+        p2d.curveTo(1.1 * i, 1.2 * i, 1.3 * i, 1.4 * i, 1.5 * i, 1.6 * i);
+    }
+
+    static void addQuad(Path2D p2d, int i) {
+        p2d.quadTo(1.1 * i, 1.2 * i, 1.3 * i, 1.4 * i);
+    }
+
+    static void addClose(Path2D p2d) {
+        p2d.closePath();
+    }
+
+    static void testAddMoves(Path2D pathA, int n) {
+        for (int i = 0; i < n; i++) {
+            addMove(pathA, i);
+        }
+    }
+
+    static void testAddLines(Path2D pathA, int n) {
+        addMove(pathA, 0);
+        for (int i = 0; i < n; i++) {
+            addLine(pathA, i);
+        }
+    }
+
+    static void testAddQuads(Path2D pathA, int n) {
+        addMove(pathA, 0);
+        for (int i = 0; i < n; i++) {
+            addQuad(pathA, i);
+        }
+    }
+
+    static void testAddCubics(Path2D pathA, int n) {
+        addMove(pathA, 0);
+        for (int i = 0; i < n; i++) {
+            addCubic(pathA, i);
+        }
+    }
+
+    static void testAddMoveAndCloses(Path2D pathA, int n) {
+        for (int i = 0; i < n; i++) {
+            addMove(pathA, i);
+            addClose(pathA);
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/print/PageFormat/ImageableAreaTest.java	Wed Jul 05 20:33:35 2017 +0200
@@ -0,0 +1,264 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Dialog;
+import java.awt.FlowLayout;
+import java.awt.print.Printable;
+import java.awt.print.PrinterException;
+import java.awt.print.PrinterJob;
+import java.text.MessageFormat;
+import javax.print.attribute.HashPrintRequestAttributeSet;
+import javax.print.attribute.PrintRequestAttributeSet;
+import javax.print.attribute.standard.Copies;
+import javax.print.attribute.standard.DialogTypeSelection;
+import javax.print.attribute.standard.MediaPrintableArea;
+import javax.swing.JButton;
+import javax.swing.JDialog;
+import javax.swing.JFrame;
+import javax.swing.JPanel;
+import javax.swing.JTable;
+import javax.swing.JTextArea;
+import javax.swing.SwingUtilities;
+import javax.swing.table.AbstractTableModel;
+import javax.swing.table.TableModel;
+
+/**
+ * @test
+ * @bug 8044444
+ * @summary The output's 'Page-n' footer does not show completely
+ * @author Alexandr Scherbatiy
+ * @run main/manual ImageableAreaTest
+ */
+public class ImageableAreaTest {
+
+    public static void main(String[] args) throws Exception {
+        SwingUtilities.invokeAndWait(new Runnable() {
+
+            @Override
+            public void run() {
+
+                createAndShowTestDialog(
+                        "1. Press the Print Table button\n"
+                        + " Java print dialog should appear.\n"
+                        + "2. Press the Print button on the Java Print dialog.\n"
+                        + "2. Check that the page number is correctly printed.\n"
+                        + "If so, press PASS, else press FAIL.",
+                        "Page number is not correctly printed!",
+                        ImageableAreaTest::printWithJavaPrintDialog);
+
+                createAndShowTestDialog(
+                        "1. Press the Print Table button\n"
+                        + " The table should be printed without the print dialog.\n"
+                        + "2. Check that the page number is correctly printed.\n"
+                        + "If so, press PASS, else press FAIL.",
+                        "Page number is not correctly printed!",
+                        ImageableAreaTest::printWithoutPrintDialog);
+
+                createAndShowTestDialog(
+                        "1. Press the Print Table button\n"
+                        + " Java print dialog should appear.\n"
+                        + "2. Press the Print button on the Java Print dialog.\n"
+                        + "3. Check that the table has about half size of the printed page\n"
+                        + "If so, press PASS, else press FAIL.",
+                        "Custom imageable area is not correctly printed!",
+                        ImageableAreaTest::printWithCustomImageareaSize);
+            }
+        });
+    }
+
+    private static void printWithJavaPrintDialog() {
+        final JTable table = createAuthorTable(42);
+        Printable printable = table.getPrintable(
+                JTable.PrintMode.NORMAL,
+                new MessageFormat("Author Table"),
+                new MessageFormat("Page - {0}"));
+
+        PrinterJob job = PrinterJob.getPrinterJob();
+        job.setPrintable(printable);
+
+        boolean printAccepted = job.printDialog();
+        if (printAccepted) {
+            try {
+                job.print();
+                closeFrame();
+            } catch (PrinterException e) {
+                throw new RuntimeException(e);
+            }
+        }
+    }
+
+    private static void printWithoutPrintDialog() {
+
+        final JTable table = createAuthorTable(42);
+        PrintRequestAttributeSet pras
+                = new HashPrintRequestAttributeSet();
+        pras.add(new Copies(1));
+
+        try {
+
+            boolean printAccepted = table.print(JTable.PrintMode.FIT_WIDTH,
+                    new MessageFormat("Author Table"),
+                    new MessageFormat("Page - {0}"),
+                    false, pras, false);
+
+            closeFrame();
+            if (!printAccepted) {
+                throw new RuntimeException("User cancels the printer job!");
+            }
+
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    private static void printWithCustomImageareaSize() {
+        final JTable table = createAuthorTable(18);
+        PrintRequestAttributeSet printAttributes = new HashPrintRequestAttributeSet();
+        printAttributes.add(DialogTypeSelection.NATIVE);
+        printAttributes.add(new Copies(1));
+        printAttributes.add(new MediaPrintableArea(
+                0.25f, 0.25f, 8.0f, 5.0f, MediaPrintableArea.INCH));
+        Printable printable = table.getPrintable(
+                JTable.PrintMode.NORMAL,
+                new MessageFormat("Author Table"),
+                new MessageFormat("Page - {0}")
+        );
+
+        PrinterJob job = PrinterJob.getPrinterJob();
+        job.setPrintable(printable);
+
+        boolean printAccepted = job.printDialog(printAttributes);
+        if (printAccepted) {
+            try {
+                job.print(printAttributes);
+                closeFrame();
+            } catch (Exception e) {
+                throw new RuntimeException(e);
+            }
+        } else {
+            throw new RuntimeException("User cancels the printer job!");
+        }
+    }
+
+    private static JFrame frame;
+
+    private static void closeFrame() {
+        if (frame != null) {
+            frame.setVisible(false);
+            frame.dispose();
+        }
+    }
+
+    private static JTable createAuthorTable(int rows) {
+        final String[] headers = {"Book", "Title"};
+
+        final Object[][] data = new Object[rows][2];
+        for (int i = 0; i < rows; i++) {
+            int n = i + 1;
+            data[i] = new Object[]{"Book: " + n, "Title: " + n};
+        }
+
+        TableModel dataModel = new AbstractTableModel() {
+
+            public int getColumnCount() {
+                return headers.length;
+            }
+
+            public int getRowCount() {
+                return data.length;
+            }
+
+            public Object getValueAt(int row, int col) {
+                return data[row][col];
+            }
+
+            public String getColumnName(int column) {
+                return headers[column];
+            }
+
+            public Class getColumnClass(int col) {
+                return getValueAt(0, col).getClass();
+            }
+
+            public void setValueAt(Object aValue, int row, int column) {
+                data[row][column] = aValue;
+            }
+
+            public boolean isCellEditable(int row, int col) {
+                return false;
+            }
+        };
+
+        JTable table = new JTable(dataModel);
+        table.setGridColor(Color.BLUE);
+        table.setBackground(Color.WHITE);
+        table.setForeground(Color.BLACK);
+        table.setSize(600, 800);
+
+        frame = new JFrame();
+        frame.setSize(400, 600);
+        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+        frame.add(table);
+        frame.setVisible(true);
+        return table;
+    }
+
+    private static int testCount;
+
+    private static void createAndShowTestDialog(String description,
+            String failMessage, Runnable action) {
+        final JDialog dialog = new JDialog();
+        dialog.setTitle("Test: " + (++testCount));
+        dialog.setModalityType(Dialog.ModalityType.APPLICATION_MODAL);
+        JTextArea textArea = new JTextArea(description);
+        textArea.setEditable(false);
+        final JButton testButton = new JButton("Print Table");
+        final JButton passButton = new JButton("PASS");
+        passButton.setEnabled(false);
+        passButton.addActionListener((e) -> {
+            dialog.dispose();
+        });
+        final JButton failButton = new JButton("FAIL");
+        failButton.setEnabled(false);
+        failButton.addActionListener((e) -> {
+            throw new RuntimeException(failMessage);
+        });
+        testButton.addActionListener((e) -> {
+            testButton.setEnabled(false);
+            action.run();
+            passButton.setEnabled(true);
+            failButton.setEnabled(true);
+        });
+        JPanel mainPanel = new JPanel(new BorderLayout());
+        mainPanel.add(textArea, BorderLayout.CENTER);
+        JPanel buttonPanel = new JPanel(new FlowLayout());
+        buttonPanel.add(testButton);
+        buttonPanel.add(passButton);
+        buttonPanel.add(failButton);
+        mainPanel.add(buttonPanel, BorderLayout.SOUTH);
+        dialog.add(mainPanel);
+        dialog.pack();
+        dialog.setVisible(true);
+    }
+}
--- a/jdk/test/java/awt/regtesthelpers/UtilInternal.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/java/awt/regtesthelpers/UtilInternal.java	Wed Jul 05 20:33:35 2017 +0200
@@ -31,6 +31,7 @@
 import java.awt.Toolkit;
 import java.awt.Frame;
 
+import sun.awt.AWTAccessor;
 
 
 /**
@@ -45,7 +46,8 @@
                InstantiationException, InvocationTargetException
     {
         Toolkit tk = Toolkit.getDefaultToolkit();
-        FramePeer frame_peer = (FramePeer) embedder.getPeer();
+        FramePeer frame_peer = AWTAccessor.getComponentAccessor()
+                                          .getPeer(embedder);
         System.out.println("frame's peer = " + frame_peer);
         if ("sun.awt.windows.WToolkit".equals(tk.getClass().getName())) {
             Class comp_peer_class =
--- a/jdk/test/java/beans/Introspector/4058433/TestJavaBean.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/java/beans/Introspector/4058433/TestJavaBean.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -20,11 +20,13 @@
  * or visit www.oracle.com if you need additional information or have any
  * questions.
  */
+
 import java.awt.event.ActionListener;
 import java.beans.BeanDescriptor;
 import java.beans.BeanInfo;
 import java.beans.Introspector;
 import java.beans.JavaBean;
+
 /*
  * @test
  * @bug 4058433
@@ -32,53 +34,63 @@
  * @author Sergey Malenkov
  */
 public class TestJavaBean {
-    public static void main(String[] args) throws Exception {
-        test(X.class);
-        test(D.class);
-        test(DP.class);
-        test(DES.class);
+
+    static final String DSCR = "description";
+    static final String PRP = "value";
+    static final String ACT = "action";
+
+    public static void main(final String[] args) throws Exception {
+        test(X.class, "TestJavaBean$X", "TestJavaBean$X", null, null);
+        test(D.class, "TestJavaBean$D", DSCR, null, null);
+        test(DP.class, "TestJavaBean$DP", "TestJavaBean$DP", PRP, null);
+        test(DES.class, "TestJavaBean$DES", "TestJavaBean$DES", null, ACT);
+        test(DDP.class, "TestJavaBean$DDP", DSCR, PRP, null);
+        test(DDES.class, "TestJavaBean$DDES", DSCR, null, ACT);
+        test(DPDES.class, "TestJavaBean$DPDES", "TestJavaBean$DPDES", PRP, ACT);
+        test(DDPDES.class, "TestJavaBean$DDPDES", DSCR, PRP, ACT);
     }
 
-    private static void test(Class<?> type) throws Exception {
-        System.out.println(type);
+    private static void test(Class<?> type, String name, String descr,
+                             String prop, String event) throws Exception {
         BeanInfo info = Introspector.getBeanInfo(type);
         BeanDescriptor bd = info.getBeanDescriptor();
 
-        String description = bd.getShortDescription();
-        System.out.println("description = " + description);
+        if (!bd.getName().equals(name)) {
+            throw new Error("unexpected name of the bean");
+        }
+
+        if (!bd.getShortDescription().equals(descr)) {
+            throw new Error("unexpected description of the bean");
+        }
 
         int dp = info.getDefaultPropertyIndex();
-        System.out.println("property index = " + dp);
-        if (0 <= dp) {
-            String name = info.getPropertyDescriptors()[dp].getName();
-            System.out.println("property name = " + name);
+        if (dp < 0 && prop != null) {
+            throw new Error("unexpected index of the default property");
+        }
+        if (dp >= 0) {
+            if (!info.getPropertyDescriptors()[dp].getName().equals(prop)) {
+                throw new Error("unexpected default property");
+            }
         }
         int des = info.getDefaultEventIndex();
-        System.out.println("event set index = " + des);
-        if (0 <= des) {
-            String name = info.getPropertyDescriptors()[des].getName();
-            System.out.println("event set name = " + name);
+        if (des < 0 && event != null) {
+            throw new Error("unexpected index of the default event set");
         }
-
-        if ((D.class == type) == bd.getName().equals(description)) {
-            throw new Error("unexpected description of the bean");
-        }
-        if ((DP.class == type) == (dp < 0)) {
-            throw new Error("unexpected index of the default property");
-        }
-        if ((DES.class == type) == (des < 0)) {
-            throw new Error("unexpected index of the default event set");
+        if (des >= 0) {
+            if (!info.getEventSetDescriptors()[des].getName().equals(event)) {
+                throw new Error("unexpected default event set");
+            }
         }
     }
 
     public static class X {
     }
 
-    @JavaBean(description = "description")
+    @JavaBean(description = DSCR)
     public static class D {
     }
 
-    @JavaBean(defaultProperty = "value")
+    @JavaBean(defaultProperty = PRP)
     public static class DP {
         private int value;
 
@@ -91,7 +103,7 @@
         }
     }
 
-    @JavaBean(defaultEventSet = "action")
+    @JavaBean(defaultEventSet = ACT)
     public static class DES {
         public void addActionListener(ActionListener listener) {
         }
@@ -99,4 +111,64 @@
         public void removeActionListener(ActionListener listener) {
         }
     }
+
+    @JavaBean(description = DSCR, defaultProperty = PRP)
+    public static class DDP {
+        private int value;
+
+        public int getValue() {
+            return this.value;
+        }
+
+        public void setValue(int value) {
+            this.value = value;
+        }
+    }
+
+    @JavaBean(description = DSCR, defaultEventSet = ACT)
+    public static class DDES {
+        public void addActionListener(ActionListener listener) {
+        }
+
+        public void removeActionListener(ActionListener listener) {
+        }
+    }
+
+    @JavaBean(defaultProperty = PRP, defaultEventSet = ACT)
+    public static class DPDES {
+        private int value;
+
+        public int getValue() {
+            return this.value;
+        }
+
+        public void setValue(int value) {
+            this.value = value;
+        }
+
+        public void addActionListener(ActionListener listener) {
+        }
+
+        public void removeActionListener(ActionListener listener) {
+        }
+    }
+
+    @JavaBean(description = DSCR, defaultProperty = PRP, defaultEventSet = ACT)
+    public static class DDPDES {
+        private int value;
+
+        public int getValue() {
+            return this.value;
+        }
+
+        public void setValue(int value) {
+            this.value = value;
+        }
+
+        public void addActionListener(ActionListener listener) {
+        }
+
+        public void removeActionListener(ActionListener listener) {
+        }
+    }
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/io/Reader/ReaderBulkReadContract.java	Wed Jul 05 20:33:35 2017 +0200
@@ -0,0 +1,170 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.io.BufferedReader;
+import java.io.ByteArrayInputStream;
+import java.io.CharArrayReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.LineNumberReader;
+import java.io.PipedReader;
+import java.io.PipedWriter;
+import java.io.PushbackReader;
+import java.io.Reader;
+import java.io.StringReader;
+import java.io.UncheckedIOException;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.function.Function;
+
+import static java.lang.String.format;
+
+/*
+ * @test
+ * @bug 8029689
+ * @summary checks the bounds part of the contract of java.io.Reader.read(char[], int, int):
+ *
+ *              0 <= off <= off+len <= cbuf.length
+ *
+ *          for publicly exported subtypes of java.io.Reader
+ */
+public class ReaderBulkReadContract {
+
+    public static void main(String[] args) throws IOException {
+        ReaderBulkReadContract t = new ReaderBulkReadContract();
+        t.test();
+    }
+
+    private void test() throws IOException {
+        Iterator<Object[]> args = args();
+        while (args.hasNext()) {
+            Object[] a = args.next();
+            Reader r = (Reader) a[0];
+            int size = (int) a[1];
+            int off = (int) a[2];
+            int len = (int) a[3];
+            try {
+                read(r, size, off, len);
+            } finally {
+                r.close();
+            }
+        }
+    }
+
+    private Iterator<Object[]> args() {
+
+        Integer[] lens = {Integer.MIN_VALUE, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, Integer.MAX_VALUE};
+        Integer[] offs = {Integer.MIN_VALUE, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, Integer.MAX_VALUE};
+        Integer[] sizes = {0, 1, 2, 3, 4, 5};
+        String[] contents = {"", "a", "ab"};
+
+        List<Function<String, Reader>> fs = Arrays.asList(
+                (String s) -> new BufferedReader(new StringReader(s)),
+                (String s) -> new LineNumberReader(new StringReader(s)),
+                (String s) -> new CharArrayReader(s.toCharArray()),
+                (String s) -> new InputStreamReader(new ByteArrayInputStream(s.getBytes())),
+                (String s) -> newFileReader(s),
+                (String s) -> new PushbackReader(new StringReader(s)),
+                (String s) -> newPipedReader(s),
+                (String s) -> new StringReader(s)
+        );
+
+        // The easiest way to produce a cartesian product from a small fixed number of sets
+        List<Object[]> tuples = Collections.synchronizedList(new LinkedList<>());
+        for (Integer len : lens)
+            for (Integer off : offs)
+                for (String s : contents)
+                    for (Integer size : sizes)
+                        for (Function<String, Reader> f : fs)
+                            tuples.add(new Object[]{f.apply(s), size, off, len});
+
+        return tuples.iterator();
+    }
+
+    private void read(Reader r, int size, int off, int len) throws IOException {
+        IndexOutOfBoundsException ex = null;
+        try {
+            r.read(new char[size], off, len);
+        } catch (IndexOutOfBoundsException e) {
+            ex = e;
+        }
+
+        boolean incorrectBounds = off < 0 || len < 0 || len > size - off;
+        boolean exceptionThrown = ex != null;
+
+        if (incorrectBounds != exceptionThrown) { // incorrectBounds iff exceptionThrown
+            throw new AssertionError(format("r=%s, size=%s, off=%s, len=%s, incorrectBounds=%s, exceptionThrown=%s",
+                    r, size, off, len, incorrectBounds, exceptionThrown));
+        }
+    }
+
+    private static PipedReader newPipedReader(String contents) {
+        try (PipedWriter w = new PipedWriter()) {
+            PipedReader r = new PipedReader(w);
+            w.write(contents);
+            return r;
+        } catch (IOException e) {
+            throw new UncheckedIOException(e);
+        }
+    }
+
+    private FileReader newFileReader(String contents) {
+        try {
+            // To not create an enormous amount of files
+            File f = cache.computeIfAbsent(contents,
+                    ReaderBulkReadContract::createTempFileWithContents);
+            return new FileReader(f);
+        } catch (IOException e) {
+            throw new UncheckedIOException(e);
+        }
+    }
+
+    private static File createTempFileWithContents(String contents) {
+        try {
+            File file = File.createTempFile("ReaderContract", "");
+            try (FileWriter w = new FileWriter(file)) {
+                w.write(contents);
+            }
+            return file;
+        } catch (IOException e) {
+            throw new UncheckedIOException(e);
+        }
+    }
+
+    //
+    // To avoid myriads of tiny files a cache is used.
+    // ConcurrentHashMap.computeIfAbsent promises a crucial thing:
+    //
+    // ...The entire method invocation is performed atomically, so the
+    // function is applied at most once per key...
+    //  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    //
+    private final ConcurrentHashMap<String, File> cache = new ConcurrentHashMap<>();
+}
--- a/jdk/test/java/lang/Double/ParseHexFloatingPoint.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/java/lang/Double/ParseHexFloatingPoint.java	Wed Jul 05 20:33:35 2017 +0200
@@ -32,6 +32,8 @@
  * @key randomness
  */
 
+import jdk.testlibrary.RandomFactory;
+
 public class ParseHexFloatingPoint {
     private ParseHexFloatingPoint(){}
 
--- a/jdk/test/java/lang/Integer/BitTwiddle.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/java/lang/Integer/BitTwiddle.java	Wed Jul 05 20:33:35 2017 +0200
@@ -33,6 +33,7 @@
  */
 
 import java.util.Random;
+import jdk.testlibrary.RandomFactory;
 import static java.lang.Integer.*;
 
 public class BitTwiddle {
--- a/jdk/test/java/lang/Long/BitTwiddle.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/java/lang/Long/BitTwiddle.java	Wed Jul 05 20:33:35 2017 +0200
@@ -33,6 +33,7 @@
  */
 
 import java.util.Random;
+import jdk.testlibrary.RandomFactory;
 import static java.lang.Long.*;
 
 public class BitTwiddle {
--- a/jdk/test/java/lang/Math/CubeRootTests.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/java/lang/Math/CubeRootTests.java	Wed Jul 05 20:33:35 2017 +0200
@@ -32,6 +32,8 @@
  * @key randomness
  */
 
+import jdk.testlibrary.RandomFactory;
+
 public class CubeRootTests {
     private CubeRootTests(){}
 
--- a/jdk/test/java/lang/Math/HypotTests.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/java/lang/Math/HypotTests.java	Wed Jul 05 20:33:35 2017 +0200
@@ -32,6 +32,8 @@
  * @key randomness
  */
 
+import jdk.testlibrary.RandomFactory;
+
 public class HypotTests {
     private HypotTests(){}
 
--- a/jdk/test/java/lang/Math/IeeeRecommendedTests.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/java/lang/Math/IeeeRecommendedTests.java	Wed Jul 05 20:33:35 2017 +0200
@@ -32,6 +32,8 @@
  * @key randomness
  */
 
+import jdk.testlibrary.RandomFactory;
+
 public class IeeeRecommendedTests {
     private IeeeRecommendedTests(){}
 
--- a/jdk/test/java/lang/Math/Log1pTests.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/java/lang/Math/Log1pTests.java	Wed Jul 05 20:33:35 2017 +0200
@@ -32,6 +32,8 @@
  * @key randomness
  */
 
+import jdk.testlibrary.RandomFactory;
+
 public class Log1pTests {
     private Log1pTests(){}
 
--- a/jdk/test/java/lang/SecurityManager/CheckSecurityProvider.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/java/lang/SecurityManager/CheckSecurityProvider.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -67,6 +67,7 @@
         expected.add("com.sun.security.sasl.Provider");
         expected.add("org.jcp.xml.dsig.internal.dom.XMLDSigRI");
         expected.add("sun.security.smartcardio.SunPCSC");
+        expected.add("sun.security.provider.certpath.ldap.JdkLDAP");
         if (os.startsWith("Windows")) {
             expected.add("sun.security.mscapi.SunMSCAPI");
         }
--- a/jdk/test/java/math/BigDecimal/StringConstructor.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/java/math/BigDecimal/StringConstructor.java	Wed Jul 05 20:33:35 2017 +0200
@@ -33,6 +33,7 @@
 
 import java.math.*;
 import java.util.Random;
+import jdk.testlibrary.RandomFactory;
 
 public class StringConstructor {
 
--- a/jdk/test/java/math/BigInteger/BigIntegerTest.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/java/math/BigInteger/BigIntegerTest.java	Wed Jul 05 20:33:35 2017 +0200
@@ -40,6 +40,7 @@
 import java.io.ObjectOutputStream;
 import java.math.BigInteger;
 import java.util.Random;
+import jdk.testlibrary.RandomFactory;
 
 /**
  * This is a simple test class created to ensure that the results
--- a/jdk/test/java/math/BigInteger/ModPow65537.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/java/math/BigInteger/ModPow65537.java	Wed Jul 05 20:33:35 2017 +0200
@@ -37,6 +37,7 @@
 import java.security.*;
 import java.security.spec.*;
 import java.util.Random;
+import jdk.testlibrary.RandomFactory;
 
 public class ModPow65537 {
 
--- a/jdk/test/java/math/BigInteger/PrimeTest.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/java/math/BigInteger/PrimeTest.java	Wed Jul 05 20:33:35 2017 +0200
@@ -40,6 +40,7 @@
 import java.util.Set;
 import java.util.SplittableRandom;
 import java.util.TreeSet;
+import jdk.testlibrary.RandomFactory;
 import static java.util.stream.Collectors.toCollection;
 import static java.util.stream.Collectors.toList;
 
--- a/jdk/test/java/math/BigInteger/SymmetricRangeTests.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/java/math/BigInteger/SymmetricRangeTests.java	Wed Jul 05 20:33:35 2017 +0200
@@ -40,6 +40,7 @@
 import java.util.Arrays;
 import java.math.BigInteger;
 import java.util.Random;
+import jdk.testlibrary.RandomFactory;
 
 public class SymmetricRangeTests {
 
--- a/jdk/test/java/nio/channels/DatagramChannel/Promiscuous.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/java/nio/channels/DatagramChannel/Promiscuous.java	Wed Jul 05 20:33:35 2017 +0200
@@ -97,7 +97,7 @@
                 // no datagram received
                 if (sa == null) {
                     if (datagramExepcted) {
-                        throw new RuntimeException("Expected message not recieved");
+                        throw new RuntimeException("Expected message not received");
                     }
                     System.out.println("No message received (correct)");
                     return;
@@ -109,10 +109,15 @@
                 buf.flip();
                 byte[] bytes = new byte[buf.remaining()];
                 buf.get(bytes);
-                int receivedId = Integer.parseInt(new String(bytes));
-
-                System.out.format("Received message from %s (id=0x%x)\n",
-                    sender, receivedId);
+                String s = new String(bytes, "UTF-8");
+                int receivedId = -1;
+                try {
+                    receivedId = Integer.parseInt(s);
+                    System.out.format("Received message from %s (id=0x%x)\n",
+                            sender, receivedId);
+                } catch (NumberFormatException x) {
+                    System.out.format("Received message from %s (msg=%s)\n", sender, s);
+                }
 
                 if (!datagramExepcted) {
                     if (receivedId == id)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/security/Policy/PolicyProvider/CustomPolicy.java	Wed Jul 05 20:33:35 2017 +0200
@@ -0,0 +1,61 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.security.AccessController;
+import java.security.Permission;
+import java.security.Policy;
+import java.security.PrivilegedAction;
+import java.security.ProtectionDomain;
+
+public class CustomPolicy extends Policy {
+
+    // the ProtectionDomain of CustomPolicy
+    private final ProtectionDomain policyPd;
+
+    public CustomPolicy() {
+        policyPd = AccessController.doPrivileged(
+            (PrivilegedAction<ProtectionDomain>)
+                () -> this.getClass().getProtectionDomain());
+    }
+
+    @Override
+    public boolean implies(ProtectionDomain pd, Permission perm) {
+        System.out.println("CustomPolicy.implies");
+
+        // If the protection domain is the same as CustomPolicy, then
+        // we return true. This is to prevent recursive permission checks
+        // that lead to StackOverflow errors when the policy implementation
+        // performs a sensitive operation that triggers a permission check,
+        // for example, as below.
+        if (pd == policyPd) {
+            return true;
+        }
+
+        // Do something that triggers a permission check to make sure that
+        // we don't cause a StackOverflow error.
+        String home = AccessController.doPrivileged(
+            (PrivilegedAction<String>) () -> System.getProperty("user.home"));
+
+        return true;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/security/Policy/PolicyProvider/UseSystemClassLoader.java	Wed Jul 05 20:33:35 2017 +0200
@@ -0,0 +1,94 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.io.File;
+import java.net.URL;
+import java.security.Policy;
+import java.security.Security;
+
+/*
+ * @test
+ * @bug 8075706
+ * @summary Check that a custom policy provider can be loaded from the classpath
+ * @run main/othervm UseSystemClassLoader CUSTOM
+ * @run main/othervm UseSystemClassLoader DEFAULT
+ * @run main/othervm UseSystemClassLoader NOT_AVAIL
+ * @run main/othervm UseSystemClassLoader NOT_SET
+ */
+
+public class UseSystemClassLoader {
+
+    enum Type {
+        CUSTOM, DEFAULT, NOT_AVAIL, NOT_SET
+    };
+
+    public static void main(String[] args) throws Exception {
+
+        Type t = Type.valueOf(args[0]);
+
+        // We can't use the jtreg java.security.policy option to specify
+        // the policy file because that causes the default JDK policy provider
+        // to be set and once set, we cannot change it. So, instead we use the
+        // policy.url security property.
+        File file = new File(System.getProperty("test.src"), "test.policy");
+        URL policyURL = file.toURI().toURL();
+        Security.setProperty("policy.url.1", policyURL.toString());
+
+        switch (t) {
+            case CUSTOM:
+                // Set policy.provider to our custom policy provider
+                Security.setProperty("policy.provider", "CustomPolicy");
+                break;
+            case NOT_AVAIL:
+                // Set policy.provider to a non-existent policy provider
+                Security.setProperty("policy.provider", "NonExistentPolicy");
+                break;
+            case DEFAULT:
+                // Don't set policy.provider (leave default)
+                break;
+            case NOT_SET:
+                // Set policy.provider to empty string
+                Security.setProperty("policy.provider", "");
+                break;
+        }
+
+        System.setSecurityManager(new SecurityManager());
+        Policy p = Policy.getPolicy();
+        switch (t) {
+            case CUSTOM:
+                // check that the custom policy provider has been set
+                if (!(p instanceof CustomPolicy)) {
+                    throw new Exception("CustomPolicy was not set");
+                }
+                break;
+            case NOT_AVAIL:
+            case DEFAULT:
+            case NOT_SET:
+                // check that the default policy provider has been set
+                if (!(p instanceof sun.security.provider.PolicyFile)) {
+                    throw new Exception("default provider was not set");
+                }
+                break;
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/security/Policy/PolicyProvider/test.policy	Wed Jul 05 20:33:35 2017 +0200
@@ -0,0 +1,9 @@
+grant {
+  permission java.lang.RuntimePermission "createSecurityManager";
+  permission java.lang.RuntimePermission "setSecurityManager";
+  permission java.security.SecurityPermission "setProperty.policy.provider";
+  permission java.security.SecurityPermission "getPolicy";
+  permission java.util.PropertyPermission "user.home", "read";
+  permission java.lang.RuntimePermission "getProtectionDomain";
+  permission java.lang.RuntimePermission "accessClassInPackage.sun.security.provider";
+};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/security/cert/URICertStoreParameters/TestBasic.java	Wed Jul 05 20:33:35 2017 +0200
@@ -0,0 +1,71 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.security.cert.CertStore;
+import java.security.cert.URICertStoreParameters;
+import java.net.URI;
+
+/*
+ * @test
+ * @bug 8038084
+ * @summary Basic testing for URICertStoreParameters
+ * @run main TestBasic
+ */
+public class TestBasic {
+
+    public static void main(String[] args) throws Exception {
+        String str1 = "ldap://myownhost:5000/";
+        String str2 = "ldap://myownhost:5000/cn=foo";
+        test(str1, str2);
+        System.out.println("Test passed");
+    }
+
+    private static void test(String str1, String str2) throws Exception {
+        System.out.println("Testing clone");
+        URICertStoreParameters p1 = new URICertStoreParameters(new URI(str1));
+        URICertStoreParameters p1Too = p1.clone();
+        if (!(p1.getURI().equals(p1Too.getURI())) ||
+            !(p1.equals(p1Too))) {
+            throw new Exception("Error: problem with clone");
+        }
+        System.out.println("Testing equal and hashCode");
+        p1Too = new URICertStoreParameters(new URI(str1));
+        URICertStoreParameters p2 = new URICertStoreParameters(new URI(str2));
+
+        if (p1.equals(null)) {
+            throw new Exception("Error: p1 should NOT equal null");
+        }
+        if ((!p1.equals(p1)) || (p1.hashCode() != p1.hashCode())) {
+            throw new Exception("Error: p1 should equal p1");
+        }
+        if ((!p1.equals(p1Too)) || (p1.hashCode() != p1Too.hashCode())) {
+            throw new Exception("Error: p1 should equal p1Too");
+        }
+        if ((!p1Too.equals(p1)) || (p1Too.hashCode() != p1.hashCode())) {
+            throw new Exception("Error: p1Too should equal p1");
+        }
+        if (p1.equals(p2) || p1Too.equals(p2)) {
+            throw new Exception("Error: p1/p1Too should NOT equal p2");
+        }
+    }
+}
--- a/jdk/test/java/util/Map/Collisions.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/java/util/Map/Collisions.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -198,138 +198,125 @@
     }
 
     private static <T> void testInsertion(Map<T, T> map, String keys_desc, T[] keys) {
-        check("map empty", (map.size() == 0) && map.isEmpty());
+        check(map.size() == 0 && map.isEmpty(), "map empty");
 
         for (int i = 0; i < keys.length; i++) {
-            check(String.format("insertion: map expected size m%d != i%d", map.size(), i),
-                    map.size() == i);
-            check(String.format("insertion: put(%s[%d])", keys_desc, i), null == map.put(keys[i], keys[i]));
-            check(String.format("insertion: containsKey(%s[%d])", keys_desc, i), map.containsKey(keys[i]));
-            check(String.format("insertion: containsValue(%s[%d])", keys_desc, i), map.containsValue(keys[i]));
+            check(map.size() == i, "insertion: map expected size m%d != i%d", map.size(), i);
+            check(null == map.put(keys[i], keys[i]), "insertion: put(%s[%d])", keys_desc, i);
+            check(map.containsKey(keys[i]), "insertion: containsKey(%s[%d])", keys_desc, i);
+            check(map.containsValue(keys[i]), "insertion: containsValue(%s[%d])", keys_desc, i);
         }
 
-        check(String.format("map expected size m%d != k%d", map.size(), keys.length),
-                map.size() == keys.length);
+        check(map.size() == keys.length, "map expected size m%d != k%d", map.size(), keys.length);
     }
 
     private static void testIntegerIteration(Map<HashableInteger, HashableInteger> map, HashableInteger[] keys) {
-        check(String.format("map expected size m%d != k%d", map.size(), keys.length),
-                map.size() == keys.length);
+        check(map.size() == keys.length, "map expected size m%d != k%d", map.size(), keys.length);
 
         BitSet all = new BitSet(keys.length);
         for (Map.Entry<HashableInteger, HashableInteger> each : map.entrySet()) {
-            check("Iteration: key already seen", !all.get(each.getKey().value));
+            check(!all.get(each.getKey().value), "Iteration: key already seen");
             all.set(each.getKey().value);
         }
 
         all.flip(0, keys.length);
-        check("Iteration: some keys not visited", all.isEmpty());
+        check(all.isEmpty(), "Iteration: some keys not visited");
 
         for (HashableInteger each : map.keySet()) {
-            check("Iteration: key already seen", !all.get(each.value));
+            check(!all.get(each.value), "Iteration: key already seen");
             all.set(each.value);
         }
 
         all.flip(0, keys.length);
-        check("Iteration: some keys not visited", all.isEmpty());
+        check(all.isEmpty(), "Iteration: some keys not visited");
 
         int count = 0;
         for (HashableInteger each : map.values()) {
             count++;
         }
 
-        check(String.format("Iteration: value count matches size m%d != c%d", map.size(), count),
-                map.size() == count);
+        check(map.size() == count, "Iteration: value count matches size m%d != c%d", map.size(), count);
     }
 
     private static void testStringIteration(Map<String, String> map, String[] keys) {
-        check(String.format("map expected size m%d != k%d", map.size(), keys.length),
-                map.size() == keys.length);
+        check(map.size() == keys.length, "map expected size m%d != k%d", map.size(), keys.length);
 
         BitSet all = new BitSet(keys.length);
         for (Map.Entry<String, String> each : map.entrySet()) {
             String key = each.getKey();
             boolean longKey = key.length() > 5;
             int index = key.hashCode() + (longKey ? keys.length / 2 : 0);
-            check("key already seen", !all.get(index));
+            check(!all.get(index), "key already seen");
             all.set(index);
         }
 
         all.flip(0, keys.length);
-        check("some keys not visited", all.isEmpty());
+        check(all.isEmpty(), "some keys not visited");
 
         for (String each : map.keySet()) {
             boolean longKey = each.length() > 5;
             int index = each.hashCode() + (longKey ? keys.length / 2 : 0);
-            check("key already seen", !all.get(index));
+            check(!all.get(index), "key already seen");
             all.set(index);
         }
 
         all.flip(0, keys.length);
-        check("some keys not visited", all.isEmpty());
+        check(all.isEmpty(), "some keys not visited");
 
         int count = 0;
         for (String each : map.values()) {
             count++;
         }
 
-        check(String.format("value count matches size m%d != k%d", map.size(), keys.length),
-                map.size() == keys.length);
+        check(map.size() == keys.length, "value count matches size m%d != k%d", map.size(), keys.length);
     }
 
     private static <T> void testContainsKey(Map<T, T> map, String keys_desc, T[] keys) {
         for (int i = 0; i < keys.length; i++) {
             T each = keys[i];
-            check("containsKey: " + keys_desc + "[" + i + "]" + each, map.containsKey(each));
+            check(map.containsKey(each), "containsKey: %s[%d]%s", keys_desc, i, each);
         }
     }
 
     private static <T> void testRemove(Map<T, T> map, String keys_desc, T[] keys) {
-        check(String.format("remove: map expected size m%d != k%d", map.size(), keys.length),
-                map.size() == keys.length);
+        check(map.size() == keys.length, "remove: map expected size m%d != k%d", map.size(), keys.length);
 
         for (int i = 0; i < keys.length; i++) {
             T each = keys[i];
-            check("remove: " + keys_desc + "[" + i + "]" + each, null != map.remove(each));
+            check(null != map.remove(each), "remove: %s[%d]%s", keys_desc, i, each);
         }
 
-        check(String.format("remove: map empty. size=%d", map.size()),
-                (map.size() == 0) && map.isEmpty());
+        check(map.size() == 0 && map.isEmpty(), "remove: map empty. size=%d", map.size());
     }
 
     private static <T> void testKeysIteratorRemove(Map<T, T> map, String keys_desc, T[] keys) {
-        check(String.format("remove: map expected size m%d != k%d", map.size(), keys.length),
-                map.size() == keys.length);
+        check(map.size() == keys.length, "remove: map expected size m%d != k%d", map.size(), keys.length);
 
         Iterator<T> each = map.keySet().iterator();
         while (each.hasNext()) {
             T t = each.next();
             each.remove();
-            check("not removed: " + each, !map.containsKey(t) );
+            check(!map.containsKey(t), "not removed: %s", each);
         }
 
-        check(String.format("remove: map empty. size=%d", map.size()),
-                (map.size() == 0) && map.isEmpty());
+        check(map.size() == 0 && map.isEmpty(), "remove: map empty. size=%d", map.size());
     }
 
     private static <T> void testValuesIteratorRemove(Map<T, T> map, String keys_desc, T[] keys) {
-        check(String.format("remove: map expected size m%d != k%d", map.size(), keys.length),
-                map.size() == keys.length);
+        check(map.size() == keys.length, "remove: map expected size m%d != k%d", map.size(), keys.length);
 
         Iterator<T> each = map.values().iterator();
         while (each.hasNext()) {
             T t = each.next();
             each.remove();
-            check("not removed: " + each, !map.containsValue(t) );
+            check(!map.containsValue(t), "not removed: %s", each);
         }
 
-        check(String.format("remove: map empty. size=%d", map.size()),
-                (map.size() == 0) && map.isEmpty());
+        check(map.size() == 0 && map.isEmpty(), "remove: map empty. size=%d", map.size());
     }
 
     private static <T> void testEntriesIteratorRemove(Map<T, T> map, String keys_desc, T[] keys) {
-        check(String.format("remove: map expected size m%d != k%d", map.size(), keys.length),
-                map.size() == keys.length);
+        check(map.size() == keys.length, "remove: map expected size m%d != k%d", map.size(), keys.length);
 
         Iterator<Map.Entry<T,T>> each = map.entrySet().iterator();
         while (each.hasNext()) {
@@ -337,13 +324,12 @@
             T key = t.getKey();
             T value = t.getValue();
             each.remove();
-            check("not removed: " + each, (map instanceof IdentityHashMap) || !map.entrySet().contains(t) );
-            check("not removed: " + each, !map.containsKey(key) );
-            check("not removed: " + each, !map.containsValue(value));
+            check((map instanceof IdentityHashMap) || !map.entrySet().contains(t), "not removed: %s", each);
+            check(!map.containsKey(key),                                           "not removed: %s", each);
+            check(!map.containsValue(value),                                       "not removed: %s", each);
         }
 
-        check(String.format("remove: map empty. size=%d", map.size()),
-                (map.size() == 0) && map.isEmpty());
+        check(map.size() == 0 && map.isEmpty(), "remove: map empty. size=%d", map.size());
     }
 
     //--------------------- Infrastructure ---------------------------
@@ -391,7 +377,7 @@
         }
     }
 
-    static void check(String desc, boolean cond) {
+    static void check(boolean cond, String desc) {
         if (cond) {
             pass();
         } else {
@@ -399,6 +385,46 @@
         }
     }
 
+    static void check(boolean cond, String fmt, int i) {
+        if (cond) {
+            pass();
+        } else {
+            fail(String.format(fmt, i));
+        }
+    }
+
+    static void check(boolean cond, String fmt, Object o) {
+        if (cond) {
+            pass();
+        } else {
+            fail(String.format(fmt, o));
+        }
+    }
+
+    static void check(boolean cond, String fmt, int i1, int i2) {
+        if (cond) {
+            pass();
+        } else {
+            fail(String.format(fmt, i1, i2));
+        }
+    }
+
+    static void check(boolean cond, String fmt, String s, int i) {
+        if (cond) {
+            pass();
+        } else {
+            fail(String.format(fmt, s, i));
+        }
+    }
+
+    static void check(boolean cond, String fmt, String s, int i, Object o) {
+        if (cond) {
+            pass();
+        } else {
+            fail(String.format(fmt, s, i, o));
+        }
+    }
+
     static void equal(Object x, Object y) {
         if (Objects.equals(x, y)) {
             pass();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/util/concurrent/ConcurrentMap/ConcurrentRemoveIf.java	Wed Jul 05 20:33:35 2017 +0200
@@ -0,0 +1,176 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @run testng ConcurrentRemoveIf
+ * @bug 8078645
+ * @summary Test removeIf on views of concurrent maps
+ */
+
+import org.testng.Assert;
+import org.testng.annotations.AfterClass;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.ConcurrentNavigableMap;
+import java.util.concurrent.ConcurrentSkipListMap;
+import java.util.concurrent.CyclicBarrier;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.function.Consumer;
+import java.util.function.Supplier;
+
+@Test
+public class ConcurrentRemoveIf {
+    static final int K = 100;
+    static final int SIZE = 1000;
+    static final int HALF_SIZE = SIZE / 2;
+
+    @DataProvider(name = "String,Supplier<ConcurrentMap>,Runnable")
+    public static Object[][] spliteratorDataProvider() {
+        List<Object[]> rows = new ArrayList<>();
+
+        // ConcurrentMap classes to test
+        Map<String, Supplier<ConcurrentMap<Integer, Integer>>> maps = new HashMap<>();
+        maps.put("ConcurrentHashMap", ConcurrentHashMap::new);
+        maps.put("ConcurrentSkipListMap", ConcurrentSkipListMap::new);
+
+        // ConcurrentMap actions
+        Map<String, Consumer<ConcurrentMap<Integer, Integer>>> actions = new HashMap<>();
+        actions.put(".entrySet().removeIf()", m -> m.entrySet().removeIf(e -> e.getValue() == 0));
+        actions.put(".values().removeIf()", m -> m.values().removeIf(v -> v == 0));
+
+        // ConcurrentNavigableMap actions
+        Map<String, Consumer<ConcurrentNavigableMap<Integer, Integer>>> navActions = new HashMap<>();
+        navActions.put(".headMap()/tailMap().entrySet().removeIf()",
+                       m -> {
+                           ConcurrentMap<Integer, Integer> left = m.headMap(HALF_SIZE, false);
+                           ConcurrentMap<Integer, Integer> right = m.tailMap(HALF_SIZE, true);
+                           left.entrySet().removeIf(e -> e.getValue() == 0);
+                           right.entrySet().removeIf(e -> e.getValue() == 0);
+                       });
+        navActions.put(".headMap()/tailMap().values().removeIf()",
+                       m -> {
+                           ConcurrentMap<Integer, Integer> left = m.headMap(HALF_SIZE, false);
+                           ConcurrentMap<Integer, Integer> right = m.tailMap(HALF_SIZE, true);
+                           left.values().removeIf(v -> v == 0);
+                           right.values().removeIf(v -> v == 0);
+                       });
+        navActions.put(".descendingMap().entrySet().removeIf()",
+                       m -> {
+                           ConcurrentMap<Integer, Integer> dm = m.descendingMap();
+                           dm.entrySet().removeIf(e -> e.getValue() == 0);
+                       });
+        navActions.put(".descendingMap().values().removeIf()",
+                       m -> {
+                           ConcurrentMap<Integer, Integer> dm = m.descendingMap();
+                           dm.values().removeIf(v -> v == 0);
+                       });
+
+        for (Map.Entry<String, Supplier<ConcurrentMap<Integer, Integer>>> mapSupplier : maps.entrySet()) {
+            Supplier<ConcurrentMap<Integer, Integer>> sm = mapSupplier.getValue();
+            for (Map.Entry<String, Consumer<ConcurrentMap<Integer, Integer>>> action : actions.entrySet()) {
+                rows.add(new Object[]{
+                        mapSupplier.getKey() + action.getKey(),
+                        sm,
+                        action.getValue()});
+            }
+
+            if (sm.get() instanceof ConcurrentNavigableMap) {
+                for (Map.Entry<String, Consumer<ConcurrentNavigableMap<Integer, Integer>>> action : navActions.entrySet()) {
+                    rows.add(new Object[]{
+                            mapSupplier.getKey() + action.getKey(),
+                            sm,
+                            action.getValue()});
+                }
+            }
+        }
+
+        return rows.toArray(new Object[0][]);
+    }
+
+    ExecutorService executorService = Executors.newCachedThreadPool();
+
+    @AfterClass
+    public void after() {
+        executorService.shutdown();
+    }
+
+    @Test(dataProvider = "String,Supplier<ConcurrentMap>,Runnable")
+    public void testMap(String desc, Supplier<ConcurrentMap<Integer, Integer>> ms, Consumer<ConcurrentMap<Integer, Integer>> action)
+            throws InterruptedException {
+        for (int i = 0; i < K; i++) {
+            testMap(ms.get(), action);
+        }
+    }
+
+    private void testMap(ConcurrentMap<Integer, Integer> map, Consumer<ConcurrentMap<Integer, Integer>> action)
+            throws InterruptedException {
+        // put 0's
+        fillMap(map, 0);
+
+        // To start working simultaneously
+        CyclicBarrier threadStarted = new CyclicBarrier(2);
+
+        // This task put 1's into map
+        CompletableFuture<Void> putter = CompletableFuture.runAsync(
+                awaitOn(threadStarted, () -> fillMap(map, 1)),
+                executorService);
+
+        // This task performs the map action to remove all 0's from map
+        CompletableFuture<Void> remover = CompletableFuture.runAsync(
+                awaitOn(threadStarted, () -> action.accept(map)),
+                executorService);
+
+        // Wait for both tasks to complete
+        CompletableFuture.allOf(putter, remover).join();
+
+        Assert.assertEquals(map.size(), SIZE, "Map size incorrect");
+    }
+
+    static void fillMap(ConcurrentMap<Integer, Integer> map, int value) {
+        for (int i = 0; i < SIZE; i++) {
+            map.put(i, value);
+        }
+    }
+
+    static Runnable awaitOn(CyclicBarrier threadStarted, Runnable r) {
+        return () -> {
+            try {
+                threadStarted.await();
+            }
+            catch (Exception e) {
+                throw new RuntimeException(e);
+            }
+            r.run();
+        };
+    }
+}
--- a/jdk/test/java/util/logging/LogManager/TestLoggerNames.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/java/util/logging/LogManager/TestLoggerNames.java	Wed Jul 05 20:33:35 2017 +0200
@@ -20,6 +20,7 @@
  * or visit www.oracle.com if you need additional information or have any
  * questions.
  */
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Enumeration;
 import java.util.Iterator;
@@ -107,7 +108,11 @@
                     System.out.println("OK: Iterator doesn't support remove.");
                 }
             }
+            // We're not supposed to come here, but if we do then we
+            // need to rewind names...
+            names = LogManager.getLogManager().getLoggerNames();
         }
+
         List<String> loggerNames = Collections.list(names);
         if (!loggerNames.contains("")) {
             throw new RuntimeException("\"\"" +
@@ -147,7 +152,13 @@
         Thread loggerNamesThread = new Thread(() -> {
             try {
                 while (!stop) {
-                    checkLoggerNames(loggers);
+                    // Make a defensive copy of the list of loggers that we pass
+                    // to checkLoggerNames - in order to make sure that
+                    // we won't see new loggers that might appear after
+                    // checkLoggerNames has called LogManager.getLoggerNames().
+                    // ('loggers' is a live list and the main thread adds and
+                    //  and removes loggers from it concurrently to this thread).
+                    checkLoggerNames(new ArrayList<>(loggers));
                     Thread.sleep(10);
                     if (!stop) {
                         phaser.arriveAndAwaitAdvance();
@@ -156,6 +167,10 @@
             } catch (Throwable t) {
                 t.printStackTrace(System.err);
                 checkLoggerNamesFailed = t;
+                // makes sure the main thread isn't going to wait
+                // forever waiting for this dead thread to arrive at the
+                // phaser.
+                phaser.arrive();
             }
         }, "loggerNames");
 
@@ -197,14 +212,29 @@
                     loggers.remove(l);
                     l = Logger.getLogger(name.replace("replaceMe", "meReplaced"));
                     loggers.add(l);
+                    // Give some chance to the loggerNames thread to arrive at the
+                    // phaser first. We don't really care if the logger is actually
+                    // replaced this turn - or the next.
+                    Thread.sleep(100);
                     System.gc();
                     if (LogManager.getLogManager().getLogger(name) == null) {
-                        System.out.println("*** "+ name + " successfully replaced with " + l.getName());
+                        // The original logger may not have been gc'ed yet, since
+                        // it could still be referenced by the list being processed
+                        // by the loggerNamesThread, if that thread hasn't arrived
+                        // to the phaser yet...
+                        System.out.println("*** "+ name
+                                + " successfully replaced with " + l.getName());
                     }
                     i++;
                 } else {
                     System.out.println("Nothing to do for logger: " + name);
                 }
+                if (checkLoggerNamesFailed != null) {
+                    // The checkLoggerNames thread failed. No need to
+                    // continue.
+                    break;
+                }
+                // Waits for the checkLoggerNamesThread to arrive
                 phaser.arriveAndAwaitAdvance();
                 if (i >= 3 && i++ == 3) {
                     System.out.println("Loggers are now: " +
--- a/jdk/test/java/util/regex/RegExTest.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/java/util/regex/RegExTest.java	Wed Jul 05 20:33:35 2017 +0200
@@ -46,6 +46,7 @@
 import java.util.*;
 import java.nio.CharBuffer;
 import java.util.function.Predicate;
+import jdk.testlibrary.RandomFactory;
 
 /**
  * This is a test class created to check the operation of
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/security/auth/Subject/AddPrincipalSubclass.java	Wed Jul 05 20:33:35 2017 +0200
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8034820
+ * @summary Check that adding Principal subclasses to Subject works
+ */
+
+import java.security.Principal;
+import java.util.Collections;
+import java.util.Set;
+import javax.security.auth.Subject;
+
+public class AddPrincipalSubclass {
+
+    public static void main(String[] args) throws Exception {
+
+        // create Subject with no principals and then add TestPrincipal
+        Subject subject = new Subject();
+        Set<Principal> principals = subject.getPrincipals(Principal.class);
+        Principal principal = new TestPrincipal();
+        if (!principals.add(principal)) {
+            throw new Exception("add returned false instead of true");
+        }
+        if (!principals.contains(principal)) {
+            throw new Exception("set does not contain principal");
+        }
+
+        // pre-populate Subject with TestPrincipal
+        subject = new Subject(false,
+                              Collections.singleton(principal),
+                              Collections.emptySet(), Collections.emptySet());
+        principals = subject.getPrincipals(Principal.class);
+        if (!principals.contains(principal)) {
+            throw new Exception("set does not contain principal");
+        }
+    }
+
+    private static class TestPrincipal implements Principal {
+        @Override
+        public String getName() {
+            return "TestPrincipal";
+        }
+    }
+}
--- a/jdk/test/javax/swing/Headless/HeadlessBox.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/javax/swing/Headless/HeadlessBox.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -142,7 +142,6 @@
             b.setName("goober");
             b.getName();
             b.getParent();
-            b.getPeer();
             b.getGraphicsConfiguration();
             b.getTreeLock();
             b.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessBox_Filler.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/javax/swing/Headless/HeadlessBox_Filler.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -113,7 +113,6 @@
         bf.setName("goober");
         bf.getName();
         bf.getParent();
-        bf.getPeer();
         bf.getGraphicsConfiguration();
         bf.getTreeLock();
         bf.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessCellRendererPane.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/javax/swing/Headless/HeadlessCellRendererPane.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -91,7 +91,6 @@
         crp.setName("goober");
         crp.getName();
         crp.getParent();
-        crp.getPeer();
         crp.getGraphicsConfiguration();
         crp.getTreeLock();
         crp.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessDefaultListCellRenderer.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/javax/swing/Headless/HeadlessDefaultListCellRenderer.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -116,7 +116,6 @@
         dcr.setName("goober");
         dcr.getName();
         dcr.getParent();
-        dcr.getPeer();
         dcr.getGraphicsConfiguration();
         dcr.getTreeLock();
         dcr.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessDefaultListCellRenderer_UIResource.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/javax/swing/Headless/HeadlessDefaultListCellRenderer_UIResource.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -116,7 +116,6 @@
         dcr.setName("goober");
         dcr.getName();
         dcr.getParent();
-        dcr.getPeer();
         dcr.getGraphicsConfiguration();
         dcr.getTreeLock();
         dcr.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJButton.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/javax/swing/Headless/HeadlessJButton.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -113,7 +113,6 @@
         b.setName("goober");
         b.getName();
         b.getParent();
-        b.getPeer();
         b.getGraphicsConfiguration();
         b.getTreeLock();
         b.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJCheckBox.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/javax/swing/Headless/HeadlessJCheckBox.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -116,7 +116,6 @@
         ch.setName("goober");
         ch.getName();
         ch.getParent();
-        ch.getPeer();
         ch.getGraphicsConfiguration();
         ch.getTreeLock();
         ch.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJCheckBoxMenuItem.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/javax/swing/Headless/HeadlessJCheckBoxMenuItem.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -113,7 +113,6 @@
         ch.setName("goober");
         ch.getName();
         ch.getParent();
-        ch.getPeer();
         ch.getGraphicsConfiguration();
         ch.getTreeLock();
         ch.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJColorChooser.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/javax/swing/Headless/HeadlessJColorChooser.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -113,7 +113,6 @@
         cc.setName("goober");
         cc.getName();
         cc.getParent();
-        cc.getPeer();
         cc.getGraphicsConfiguration();
         cc.getTreeLock();
         cc.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJComboBox.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/javax/swing/Headless/HeadlessJComboBox.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -113,7 +113,6 @@
         ch.setName("goober");
         ch.getName();
         ch.getParent();
-        ch.getPeer();
         ch.getGraphicsConfiguration();
         ch.getTreeLock();
         ch.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJComponent.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/javax/swing/Headless/HeadlessJComponent.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -112,7 +112,6 @@
         ch.setName("goober");
         ch.getName();
         ch.getParent();
-        ch.getPeer();
         ch.getGraphicsConfiguration();
         ch.getTreeLock();
         ch.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJDesktopPane.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/javax/swing/Headless/HeadlessJDesktopPane.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -112,7 +112,6 @@
         ch.setName("goober");
         ch.getName();
         ch.getParent();
-        ch.getPeer();
         ch.getGraphicsConfiguration();
         ch.getTreeLock();
         ch.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJEditorPane.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/javax/swing/Headless/HeadlessJEditorPane.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -115,7 +115,6 @@
         b.setName("goober");
         b.getName();
         b.getParent();
-        b.getPeer();
         b.getGraphicsConfiguration();
         b.getTreeLock();
         b.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJFileChooser.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/javax/swing/Headless/HeadlessJFileChooser.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -112,7 +112,6 @@
         ch.setName("goober");
         ch.getName();
         ch.getParent();
-        ch.getPeer();
         ch.getGraphicsConfiguration();
         ch.getTreeLock();
         ch.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJInternalFrame.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/javax/swing/Headless/HeadlessJInternalFrame.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -135,7 +135,6 @@
         intf.setName("goober");
         intf.getName();
         intf.getParent();
-        intf.getPeer();
         intf.getGraphicsConfiguration();
         intf.getTreeLock();
         intf.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJInternalFrame_JDesktopIcon.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/javax/swing/Headless/HeadlessJInternalFrame_JDesktopIcon.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -112,7 +112,6 @@
         jdi.setName("goober");
         jdi.getName();
         jdi.getParent();
-        jdi.getPeer();
         jdi.getGraphicsConfiguration();
         jdi.getTreeLock();
         jdi.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJLabel.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/javax/swing/Headless/HeadlessJLabel.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -112,7 +112,6 @@
         l.setName("goober");
         l.getName();
         l.getParent();
-        l.getPeer();
         l.getGraphicsConfiguration();
         l.getTreeLock();
         l.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJLayeredPane.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/javax/swing/Headless/HeadlessJLayeredPane.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -112,7 +112,6 @@
         lp.setName("goober");
         lp.getName();
         lp.getParent();
-        lp.getPeer();
         lp.getGraphicsConfiguration();
         lp.getTreeLock();
         lp.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJList.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/javax/swing/Headless/HeadlessJList.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -112,7 +112,6 @@
         l.setName("goober");
         l.getName();
         l.getParent();
-        l.getPeer();
         l.getGraphicsConfiguration();
         l.getTreeLock();
         l.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJMenu.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/javax/swing/Headless/HeadlessJMenu.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -110,7 +110,6 @@
         m.setName("goober");
         m.getName();
         m.getParent();
-        m.getPeer();
         m.getGraphicsConfiguration();
         m.getTreeLock();
         m.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJMenuBar.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/javax/swing/Headless/HeadlessJMenuBar.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -112,7 +112,6 @@
         mb.setName("goober");
         mb.getName();
         mb.getParent();
-        mb.getPeer();
         mb.getGraphicsConfiguration();
         mb.getTreeLock();
         mb.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJMenuItem.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/javax/swing/Headless/HeadlessJMenuItem.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -112,7 +112,6 @@
         mi.setName("goober");
         mi.getName();
         mi.getParent();
-        mi.getPeer();
         mi.getGraphicsConfiguration();
         mi.getTreeLock();
         mi.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJOptionPane.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/javax/swing/Headless/HeadlessJOptionPane.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -112,7 +112,6 @@
         op.setName("goober");
         op.getName();
         op.getParent();
-        op.getPeer();
         op.getGraphicsConfiguration();
         op.getTreeLock();
         op.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJPanel.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/javax/swing/Headless/HeadlessJPanel.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -112,7 +112,6 @@
         p.setName("goober");
         p.getName();
         p.getParent();
-        p.getPeer();
         p.getGraphicsConfiguration();
         p.getTreeLock();
         p.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJPopupMenu.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/javax/swing/Headless/HeadlessJPopupMenu.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -110,7 +110,6 @@
         m.setName("goober");
         m.getName();
         m.getParent();
-        m.getPeer();
         m.getGraphicsConfiguration();
         m.getTreeLock();
         m.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJPopupMenu_Separator.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/javax/swing/Headless/HeadlessJPopupMenu_Separator.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -112,7 +112,6 @@
         s.setName("goober");
         s.getName();
         s.getParent();
-        s.getPeer();
         s.getGraphicsConfiguration();
         s.getTreeLock();
         s.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJProgressBar.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/javax/swing/Headless/HeadlessJProgressBar.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -112,7 +112,6 @@
         pb.setName("goober");
         pb.getName();
         pb.getParent();
-        pb.getPeer();
         pb.getGraphicsConfiguration();
         pb.getTreeLock();
         pb.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJRadioButton.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/javax/swing/Headless/HeadlessJRadioButton.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -112,7 +112,6 @@
         rb.setName("goober");
         rb.getName();
         rb.getParent();
-        rb.getPeer();
         rb.getGraphicsConfiguration();
         rb.getTreeLock();
         rb.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJRadioButtonMenuItem.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/javax/swing/Headless/HeadlessJRadioButtonMenuItem.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -112,7 +112,6 @@
         i.setName("goober");
         i.getName();
         i.getParent();
-        i.getPeer();
         i.getGraphicsConfiguration();
         i.getTreeLock();
         i.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJRootPane.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/javax/swing/Headless/HeadlessJRootPane.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -112,7 +112,6 @@
         rp.setName("goober");
         rp.getName();
         rp.getParent();
-        rp.getPeer();
         rp.getGraphicsConfiguration();
         rp.getTreeLock();
         rp.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJScrollBar.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/javax/swing/Headless/HeadlessJScrollBar.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -112,7 +112,6 @@
         sb.setName("goober");
         sb.getName();
         sb.getParent();
-        sb.getPeer();
         sb.getGraphicsConfiguration();
         sb.getTreeLock();
         sb.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJScrollPane.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/javax/swing/Headless/HeadlessJScrollPane.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -112,7 +112,6 @@
         sp.setName("goober");
         sp.getName();
         sp.getParent();
-        sp.getPeer();
         sp.getGraphicsConfiguration();
         sp.getTreeLock();
         sp.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJSeparator.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/javax/swing/Headless/HeadlessJSeparator.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -112,7 +112,6 @@
         sp.setName("goober");
         sp.getName();
         sp.getParent();
-        sp.getPeer();
         sp.getGraphicsConfiguration();
         sp.getTreeLock();
         sp.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJSlider.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/javax/swing/Headless/HeadlessJSlider.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -112,7 +112,6 @@
         s.setName("goober");
         s.getName();
         s.getParent();
-        s.getPeer();
         s.getGraphicsConfiguration();
         s.getTreeLock();
         s.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJSpinner.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/javax/swing/Headless/HeadlessJSpinner.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -112,7 +112,6 @@
         s.setName("goober");
         s.getName();
         s.getParent();
-        s.getPeer();
         s.getGraphicsConfiguration();
         s.getTreeLock();
         s.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJSplitPane.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/javax/swing/Headless/HeadlessJSplitPane.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -106,7 +106,6 @@
         s.setName("goober");
         s.getName();
         s.getParent();
-        s.getPeer();
         s.getGraphicsConfiguration();
         s.getTreeLock();
         s.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJTabbedPane.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/javax/swing/Headless/HeadlessJTabbedPane.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -112,7 +112,6 @@
         s.setName("goober");
         s.getName();
         s.getParent();
-        s.getPeer();
         s.getGraphicsConfiguration();
         s.getTreeLock();
         s.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJTable.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/javax/swing/Headless/HeadlessJTable.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -135,7 +135,6 @@
         t.setName("goober");
         t.getName();
         t.getParent();
-        t.getPeer();
         t.getGraphicsConfiguration();
         t.getTreeLock();
         t.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJTextArea.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/javax/swing/Headless/HeadlessJTextArea.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -116,7 +116,6 @@
         t.setName("goober");
         t.getName();
         t.getParent();
-        t.getPeer();
         t.getGraphicsConfiguration();
         t.getTreeLock();
         t.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJTextField.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/javax/swing/Headless/HeadlessJTextField.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -116,7 +116,6 @@
         t.setName("goober");
         t.getName();
         t.getParent();
-        t.getPeer();
         t.getGraphicsConfiguration();
         t.getTreeLock();
         t.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJToggleButton.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/javax/swing/Headless/HeadlessJToggleButton.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -112,7 +112,6 @@
         tb.setName("goober");
         tb.getName();
         tb.getParent();
-        tb.getPeer();
         tb.getGraphicsConfiguration();
         tb.getTreeLock();
         tb.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJToolBar.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/javax/swing/Headless/HeadlessJToolBar.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -112,7 +112,6 @@
         tb.setName("goober");
         tb.getName();
         tb.getParent();
-        tb.getPeer();
         tb.getGraphicsConfiguration();
         tb.getTreeLock();
         tb.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJToolBar_Separator.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/javax/swing/Headless/HeadlessJToolBar_Separator.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -112,7 +112,6 @@
         s.setName("goober");
         s.getName();
         s.getParent();
-        s.getPeer();
         s.getGraphicsConfiguration();
         s.getTreeLock();
         s.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJToolTip.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/javax/swing/Headless/HeadlessJToolTip.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -112,7 +112,6 @@
         tt.setName("goober");
         tt.getName();
         tt.getParent();
-        tt.getPeer();
         tt.getGraphicsConfiguration();
         tt.getTreeLock();
         tt.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJTree.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/javax/swing/Headless/HeadlessJTree.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -153,7 +153,6 @@
         t.setName("goober");
         t.getName();
         t.getParent();
-        t.getPeer();
         t.getGraphicsConfiguration();
         t.getTreeLock();
         t.getToolkit();
--- a/jdk/test/javax/swing/Headless/HeadlessJViewport.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/javax/swing/Headless/HeadlessJViewport.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2007, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -120,7 +120,6 @@
         v.setName("goober");
         v.getName();
         v.getParent();
-        v.getPeer();
         v.getGraphicsConfiguration();
         v.getTreeLock();
         v.getToolkit();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/JColorChooser/Test4319113.html	Wed Jul 05 20:33:35 2017 +0200
@@ -0,0 +1,39 @@
+<!--
+ Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ This code is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License version 2 only, as
+ published by the Free Software Foundation.
+
+ This code is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ version 2 for more details (a copy is included in the LICENSE file that
+ accompanied this code).
+
+ You should have received a copy of the GNU General Public License version
+ 2 along with this work; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+
+ Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ or visit www.oracle.com if you need additional information or have any
+ questions.
+-->
+
+<html>
+<body>
+1. Press button "Show ColorChooser" in the frame "frame" and
+   a color chooser dialog should appear.
+2. Without closing the color chooser, change Look And Feel
+   selecting it from the combobox in the frame "frame".
+   Dialog appearance will change.
+3. Resize the color chooser by mouse drag.
+
+   If you see some remnants of the previous color chooser,
+   press "Fail" else press "Pass".
+
+<applet width="500" height="400" code="Test4319113.class">
+</applet>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/JColorChooser/Test4319113.java	Wed Jul 05 20:33:35 2017 +0200
@@ -0,0 +1,128 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 4319113
+ * @summary Tests the open JColorChooser behavior on LaF change.
+ * @author yan
+ * @run applet/manual=yesno Test4319113.html
+ */
+
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Frame;
+import java.awt.GridLayout;
+import java.awt.LayoutManager;
+import java.awt.Window;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+import java.io.PrintStream;
+import javax.swing.JApplet;
+import javax.swing.JButton;
+import javax.swing.JColorChooser;
+import javax.swing.JComboBox;
+import javax.swing.JDialog;
+import javax.swing.JFrame;
+import javax.swing.SwingUtilities;
+import javax.swing.UIManager;
+
+public class Test4319113
+extends JApplet
+implements ActionListener {
+    private final JFrame frame = new JFrame("frame");
+    private JComboBox cbPlaf;
+
+    @Override
+    public void init() {
+        try {
+            java.awt.EventQueue.invokeLater( () -> {
+                Test4319113.this.frame.setLayout(new GridLayout(2, 1));
+                Test4319113.this.show(Test4319113.this.frame);
+            });
+        }catch(Exception ex) {
+            ex.printStackTrace();
+        }
+    }
+
+    @Override
+    public void actionPerformed(ActionEvent actionEvent) {
+        Object object = actionEvent.getSource();
+        Component component = object instanceof Component ? (Component)object : null;
+        JDialog jDialog = JColorChooser.createDialog(component, "ColorChooser", false, new JColorChooser(Color.BLUE), null, null);
+        jDialog.setVisible(true);
+    }
+
+    private void show(Window window) {
+        JButton jButton = new JButton("Show ColorChooser");
+        jButton.setActionCommand("Show ColorChooser");
+        jButton.addActionListener(this);
+        this.cbPlaf = new JComboBox<UIManager.LookAndFeelInfo>(UIManager.getInstalledLookAndFeels());
+        this.cbPlaf.addItemListener(new ItemListener(){
+
+            @Override
+            public void itemStateChanged(ItemEvent itemEvent) {
+                if (itemEvent.getStateChange() == 1) {
+                    SwingUtilities.invokeLater(new Runnable(){
+
+                        @Override
+                        public void run() {
+                            UIManager.LookAndFeelInfo lookAndFeelInfo = (UIManager.LookAndFeelInfo)Test4319113.this.cbPlaf.getSelectedItem();
+                            try {
+                                UIManager.setLookAndFeel(lookAndFeelInfo.getClassName());
+                                Frame[] arrframe = Frame.getFrames();
+                                int n = arrframe.length;
+                                while (--n >= 0) {
+                                    Test4319113.updateWindowTreeUI(arrframe[n]);
+                                }
+                            }
+                            catch (Exception var2_3) {
+                                System.err.println("Exception while changing L&F!");
+                            }
+                        }
+                    });
+                }
+            }
+
+        });
+        window.add(this.cbPlaf);
+        window.add(jButton);
+        window.pack();
+        window.setVisible(true);
+    }
+
+    private static void updateWindowTreeUI(Window window) {
+        SwingUtilities.updateComponentTreeUI(window);
+        Window[] arrwindow = window.getOwnedWindows();
+        int n = arrwindow.length;
+        while (--n >= 0) {
+            Window window2 = arrwindow[n];
+            if (!window2.isDisplayable()) continue;
+            Test4319113.updateWindowTreeUI(window2);
+        }
+    }
+
+}
--- a/jdk/test/javax/swing/JComboBox/6632953/bug6632953.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/javax/swing/JComboBox/6632953/bug6632953.java	Wed Jul 05 20:33:35 2017 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2015 Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -22,23 +22,39 @@
  */
 
 /* @test
- * @bug 6632953
+ * @bug 6632953 8078614
  * @summary MetalComboBoxUI.getBaseline(JComponent, int, int) throws IAE for valid width/height
  * @author Alexander Potochkin
  */
-
 import javax.swing.JComboBox;
+import javax.swing.SwingUtilities;
+import javax.swing.UIManager;
 import javax.swing.plaf.metal.MetalComboBoxUI;
 
 public class bug6632953 {
 
     public static void main(String... args) throws Exception {
-        MetalComboBoxUI ui = new MetalComboBoxUI();
-        ui.installUI(new JComboBox());
-        ui.getBaseline(new JComboBox(), 0, 0);
-        ui.getBaseline(new JComboBox(), 1, 1);
-        ui.getBaseline(new JComboBox(), 2, 2);
-        ui.getBaseline(new JComboBox(), 3, 3);
-        ui.getBaseline(new JComboBox(), 4, 4);
+        SwingUtilities.invokeAndWait(new Runnable() {
+
+            @Override
+            public void run() {
+
+                for (UIManager.LookAndFeelInfo lafInfo
+                        : UIManager.getInstalledLookAndFeels()) {
+                    try {
+                        UIManager.setLookAndFeel(lafInfo.getClassName());
+                    } catch (Exception e) {
+                        throw new RuntimeException(e);
+                    }
+                    MetalComboBoxUI ui = new MetalComboBoxUI();
+                    ui.installUI(new JComboBox());
+                    ui.getBaseline(new JComboBox(), 0, 0);
+                    ui.getBaseline(new JComboBox(), 1, 1);
+                    ui.getBaseline(new JComboBox(), 2, 2);
+                    ui.getBaseline(new JComboBox(), 3, 3);
+                    ui.getBaseline(new JComboBox(), 4, 4);
+                }
+            }
+        });
     }
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/JComboBox/8072767/bug8072767.java	Wed Jul 05 20:33:35 2017 +0200
@@ -0,0 +1,111 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ /*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.awt.Point;
+import java.awt.Rectangle;
+import java.awt.Robot;
+import java.awt.event.InputEvent;
+import java.awt.event.KeyEvent;
+import javax.swing.DefaultCellEditor;
+import javax.swing.JComboBox;
+import javax.swing.JFrame;
+import javax.swing.JTable;
+import javax.swing.SwingUtilities;
+
+/**
+ * @test
+ * @bug 8072767
+ * @author Alexander Scherbatiy
+ * @summary DefaultCellEditor for comboBox creates ActionEvent with wrong source
+ *          object
+ * @run main bug8072767
+ */
+
+public class bug8072767 {
+
+    private static final String TEST1 = "Test";
+    private static final String TEST2 = TEST1 + 1;
+
+    private static JFrame frame;
+    private static JTable table;
+    private static Point point;
+    private static boolean testPass;
+
+    public static void main(String[] args) throws Exception {
+        Robot robot = new Robot();
+        robot.setAutoDelay(50);
+        SwingUtilities.invokeAndWait(bug8072767::createAndShowGUI);
+        robot.waitForIdle();
+        SwingUtilities.invokeAndWait(() -> {
+            point = table.getLocationOnScreen();
+            Rectangle rect = table.getCellRect(0, 0, true);
+            point.translate(rect.width / 2, rect.height / 2);
+        });
+        robot.mouseMove(point.x, point.y);
+        robot.mousePress(InputEvent.BUTTON1_MASK);
+        robot.mouseRelease(InputEvent.BUTTON1_MASK);
+        robot.waitForIdle();
+
+        robot.keyPress(KeyEvent.VK_1);
+        robot.keyRelease(KeyEvent.VK_1);
+        robot.waitForIdle();
+
+        SwingUtilities.invokeAndWait(() -> {
+            point = frame.getLocationOnScreen();
+            point.translate(frame.getWidth() / 2, frame.getHeight() / 2);
+        });
+
+        robot.mouseMove(point.x, point.y);
+        robot.mousePress(InputEvent.BUTTON1_MASK);
+        robot.mouseRelease(InputEvent.BUTTON1_MASK);
+        robot.waitForIdle();
+
+        SwingUtilities.invokeAndWait(() -> {
+            testPass = TEST2.equals(table.getValueAt(0, 0));
+            frame.dispose();
+        });
+
+        if (!testPass) {
+            throw new RuntimeException("Table cell is not edited!");
+        }
+    }
+
+    private static void createAndShowGUI() {
+        frame = new JFrame();
+        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+        frame.setSize(200, 200);
+        frame.setLocation(100, 100);
+
+        table = new JTable(
+                new String[][]{{TEST1}}, new String[]{"Header"});
+        JComboBox<String> comboBox = new JComboBox<>();
+        comboBox.setEditable(true);
+        table.getColumnModel().getColumn(0).setCellEditor(
+                new DefaultCellEditor(comboBox));
+        frame.getContentPane().add(table);
+        frame.setVisible(true);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/JOptionPane/4174551/bug4174551.html	Wed Jul 05 20:33:35 2017 +0200
@@ -0,0 +1,36 @@
+<!--
+ Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved.
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ This code is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License version 2 only, as
+ published by the Free Software Foundation.
+
+ This code is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ version 2 for more details (a copy is included in the LICENSE file that
+ accompanied this code).
+
+ You should have received a copy of the GNU General Public License version
+ 2 along with this work; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+
+ Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ or visit www.oracle.com if you need additional information or have any
+ questions.
+-->
+
+<html>
+<body>
+   Message Dialog should pop up
+   with a button font size 10 
+   and message font size 24.
+    
+   It should be true even on OS X.
+   If it is not so press "Fail" else press "Pass".
+
+<applet width="500" height="400" code="bug4174551.class">
+</applet>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/JOptionPane/4174551/bug4174551.java	Wed Jul 05 20:33:35 2017 +0200
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 4174551
+ * @summary JOptionPane should allow custom buttons
+ * @author Xhipra Tyagi(xhipra.tyagi@india.sun.com) area=Swing
+ * @run applet/manual=yesno bug4174551.html
+ */
+import java.awt.Font;
+import javax.swing.JApplet;
+import javax.swing.UIManager;
+import javax.swing.JOptionPane;
+
+public class bug4174551 extends JApplet {
+
+    public void init() {
+        try {
+            java.awt.EventQueue.invokeLater( () -> {
+                UIManager.getDefaults().put("OptionPane.buttonFont", new Font("Dialog", Font.PLAIN, 10));
+                UIManager.getDefaults().put("OptionPane.messageFont", new Font("Dialog", Font.PLAIN, 24));
+                JOptionPane.showMessageDialog(null, "HI 24!");
+
+                System.out.println(UIManager.getDefaults().get("OptionPane.buttonFont"));
+                System.out.println(UIManager.getDefaults().get("OptionPane.messageFont"));
+            });
+        }catch(Exception ex) {
+            ex.printStackTrace();
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/JTabbedPane/4666224/bug4666224.html	Wed Jul 05 20:33:35 2017 +0200
@@ -0,0 +1,42 @@
+<!--
+ Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved.
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ This code is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License version 2 only, as
+ published by the Free Software Foundation.
+
+ This code is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ version 2 for more details (a copy is included in the LICENSE file that
+ accompanied this code).
+
+ You should have received a copy of the GNU General Public License version
+ 2 along with this work; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+
+ Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ or visit www.oracle.com if you need additional information or have any
+ questions.
+-->
+
+<html>
+<!--
+  @test
+  @summary   Test that focus indicator is painted properly in JTabbedPane
+  @author Xhipra Tyagi(xhipra.tyagi@india.sun.com) area=Swing
+  @run applet/manual=done bug4666224.html
+  -->
+<head>
+<title> bug4666224 </title>
+</head>
+<body>
+
+<h1>bug4666224<br>Bug ID: 4666224 </h1>
+
+<p> See the dialog box (usually in upper left corner) for instructions</p>
+
+<APPLET CODE="bug4666224.class" WIDTH=300 HEIGHT=300></APPLET>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/JTabbedPane/4666224/bug4666224.java	Wed Jul 05 20:33:35 2017 +0200
@@ -0,0 +1,554 @@
+/*
+ * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.awt.*;
+import java.awt.event.*;
+import javax.swing.*;
+/*
+ * test
+ * @bug 4666224
+*/
+
+public class bug4666224 extends JApplet {
+    final static int placements[] = { JTabbedPane.LEFT, JTabbedPane.RIGHT, JTabbedPane.TOP, JTabbedPane.BOTTOM };
+    private JTabbedPane tabPane;
+    private JPanel mainPanel;
+
+    public bug4666224() throws Exception {
+       java.awt.EventQueue.invokeAndWait( () -> {
+           tabPane = new JTabbedPane();
+           tabPane.addMouseListener(new MouseAdapter() {
+                public void mouseClicked(MouseEvent e) {
+                    Point pt = e.getPoint();
+                    System.out.println("Index at location: "
+                        + tabPane.indexAtLocation(pt.x, pt.y));
+                }
+            });
+            InputMap inputMap = createInputMap();
+            SwingUtilities.replaceUIInputMap(getRootPane(), JComponent.WHEN_IN_FOCUSED_WINDOW, inputMap);
+            ActionMap actionMap = createActionMap();
+            SwingUtilities.replaceUIActionMap(getRootPane(), actionMap);
+
+            //setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+            tabPane.setTabPlacement(JTabbedPane.TOP);
+            tabPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
+            JPanel panel = new JPanel();
+            panel.setPreferredSize(new Dimension(200, 300));
+            tabPane.addTab("Number Zero", panel);
+            panel = new JPanel();
+            //panel.requestFocus();
+            panel.setPreferredSize(new Dimension(200, 300));
+            tabPane.addTab("Number One", panel);
+            panel = new JPanel();
+            panel.setPreferredSize(new Dimension(200, 300));
+            tabPane.addTab("Number Two", panel);
+            panel = new JPanel();
+            panel.setPreferredSize(new Dimension(200, 300));
+            tabPane.addTab("Number Three", new JColorChooser());
+            panel = new JPanel();
+            panel.setPreferredSize(new Dimension(200, 300));
+            tabPane.addTab("Number Four", panel);
+            mainPanel = new JPanel();
+            mainPanel.add(tabPane);
+
+            getContentPane().add(mainPanel);
+                    tabPane.requestFocus();
+
+
+            //pack();
+            //setVisible(true);
+        });
+    }
+
+    public void init() {
+                String[][] instructionsSet =
+                {
+                        {
+                                " Note : Incase of Assertion failure,user can enter",
+                                " remarks by pressing 'Assertion Fail Remarks ' button",
+                                " ",
+                                " You would see an applet with JTabbedPane. Keep the size of applet variable.",
+                " ",
+                    " ON ALL PLATFORMS",
+                "1. Click on any of the tabs, focus indicator is visible",
+                    "2. Lose focus on the window by clicking on some other window ",
+                    "3. Focus indicator should disappear",
+                    "4. Regain focus on the window the focus indicator should reappear." ,
+                    " If focus doesn't behave as above, ",
+                    " press 'Assertion Fail' else press 'Assertion Pass'",
+                },
+
+                        {
+                                " Note : Incase of Assertion failure,user can enter",
+                                " remarks by pressing 'Assertion Fail Remarks ' button",
+                                " ",
+                                " You would see an applet with JTabbedPane. Keep the size of applet variable.",
+                " ",
+                    " ON ALL PLATFORMS",
+                    "1. type 'R' to align the tabs to the right side ",
+                    "2. Lose focus on the window by clicking on some other window ",
+                    "3. Focus indicator should disappear",
+                    "4. Regain focus on the window the focus indicator should reappear." ,
+                    " If focus doesn't behave as above, ",
+                    " press 'Assertion Fail' else press 'Assertion Pass'",
+                },
+
+                {
+                                " Note : Incase of Assertion failure,user can enter",
+                                " remarks by pressing 'Assertion Fail Remarks ' button",
+                                " ",
+                                " You would see an applet with JTabbedPane. Keep the size of applet variable.",
+                " ",
+                    " ON ALL PLATFORMS",
+                "1. type 'B' to align the tabs to the bottom side ",
+                    "2. Lose focus on the window by clicking on some other window ",
+                    "3. Focus indicator should disappear",
+                    "4. Regain focus on the window the focus indicator should reappear." ,
+                    " If focus doesn't behave as above, ",
+                    " press 'Assertion Fail' else press 'Assertion Pass'",
+                },
+
+                {
+                                " Note : Incase of Assertion failure,user can enter",
+                                " remarks by pressing 'Assertion Fail Remarks ' button",
+                                " ",
+                                " You would see an applet with JTabbedPane. Keep the size of applet variable.",
+                " ",
+                    " ON ALL PLATFORMS",
+                    "1. type 'L' to align the tabs to the left side ",
+                    "2. Lose focus on the window by clicking on some other window ",
+                    "3. Focus indicator should disappear",
+                    "4. Regain focus on the window the focus indicator should reappear." ,
+                    " If focus doesn't behave as above, ",
+                    " press 'Assertion Fail' else press 'Assertion Pass'",
+                },
+
+                {
+                                " Note : Incase of Assertion failure,user can enter",
+                                " remarks by pressing 'Assertion Fail Remarks ' button",
+                                " ",
+                                " You would see an applet with JTabbedPane. Keep the size of applet variable.",
+                " ",
+                    " ON ALL PLATFORMS",
+                    "1. type 'C' to change the tab layout to WRAP_TAB_LAYOUT ",
+                    "2. Lose focus on the window by clicking on some other window ",
+                    "3. Focus indicator should disappear",
+                    "4. Regain focus on the window the focus indicator should reappear." ,
+                    " If focus doesn't behave as above, ",
+                    " press 'Assertion Fail' else press 'Assertion Pass'",
+                },
+
+                {
+                                " Note : Incase of Assertion failure,user can enter",
+                                " remarks by pressing 'Assertion Fail Remarks ' button",
+                                " ",
+                                " You would see an applet with JTabbedPane. Keep the size of applet variable.",
+                        " ",
+                    " ON ALL PLATFORMS",
+                        "1. type 'T' to align the tabs to the top side ",
+                        "2. Lose focus on the window by clicking on some other window ",
+                    "3. Focus indicator should disappear",
+                    "4. Regain focus on the window the focus indicator should reappear." ,
+                    " If focus doesn't behave as above, ",
+                    " press 'Assertion Fail' else press 'Assertion Pass'",
+                },
+
+                {
+                                " Note : Incase of Assertion failure,user can enter",
+                                " remarks by pressing 'Assertion Fail Remarks ' button",
+                                " ",
+                                " You would see an applet with JTabbedPane. Keep the size of applet variable.",
+                " ",
+                    " ON ALL PLATFORMS",
+                        "1. type 'B' to align the tabs to the bottom side ",
+                        "2. Lose focus on the window by clicking on some other window ",
+                    "3. Focus indicator should disappear",
+                    "4. Regain focus on the window the focus indicator should reappear." ,
+                    " If focus doesn't behave as above, ",
+                    " press 'Assertion Fail' else press 'Assertion Pass'",
+                },
+
+                {
+                                " Note : Incase of Assertion failure,user can enter",
+                                " remarks by pressing 'Assertion Fail Remarks ' button",
+                                " ",
+                                " You would see an applet with JTabbedPane. Keep the size of applet variable.",
+                        " ",
+                    " ON ALL PLATFORMS",
+                    "1. type 'R' to align the tabs to the right side ",
+                    "2. Lose focus on the window by clicking on some other window ",
+                    "3. Focus indicator should disappear",
+                    "4. Regain focus on the window the focus indicator should reappear." ,
+                    " If focus doesn't behave as above, ",
+                    " press 'Assertion Fail' else press 'Assertion Pass'",
+                }
+                };
+
+                String[] exceptionsSet =
+                {
+                        "Focus painted incorrectly in tabbed pane(SCROLL_TAB_LAYOUT) when tabs aligned to the TOP of the window",
+                        "Focus painted incorrectly in tabbed pane(SCROLL_TAB_LAYOUT) when tabs aligned to the RIGHT of the window",
+                        "Focus painted incorrectly in tabbed pane(SCROLL_TAB_LAYOUT) when tabs aligned to the BOTTOM of the window",
+                        "Focus painted incorrectly in tabbed pane(SCROLL_TAB_LAYOUT) when tabs aligned to the LEFT of the window",
+                        "Focus painted incorrectly in tabbed pane(WRAP_TAB_LAYOUT) when tabs aligned to the LEFT of the window",
+                        "Focus painted incorrectly in tabbed pane(WRAP_TAB_LAYOUT) when tabs aligned to the TOP of the window",
+                        "Focus painted incorrectly in tabbed pane(WRAP_TAB_LAYOUT) when tabs aligned to the BOTTOM of the window",
+                        "Focus painted incorrectly in tabbed pane(WRAP_TAB_LAYOUT) when tabs aligned to the RIGHT of the window"
+                };
+
+                Sysout.setInstructionsWithExceptions(instructionsSet,exceptionsSet);
+
+        }
+
+        public void start (){}
+
+        public void destroy(){
+            if(Sysout.failStatus())    {
+                String failMsg = Sysout.getFailureMessages();
+                failMsg = failMsg.replace('\n',' ');
+                throw new RuntimeException(failMsg);
+            }// End destroy
+    }
+
+    protected InputMap createInputMap() {
+        return LookAndFeel.makeComponentInputMap(getRootPane(), new Object[] {
+            "R", "right",
+            "L", "left",
+            "T", "top",
+            "B", "bottom",
+            "C", "changeLayout",
+            "D", "dump"
+        });
+    }
+
+    protected ActionMap createActionMap() {
+        ActionMap map = new ActionMap();
+        map.put("right", new RotateAction(JTabbedPane.RIGHT));
+        map.put("left", new RotateAction(JTabbedPane.LEFT));
+        map.put("top", new RotateAction(JTabbedPane.TOP));
+        map.put("bottom", new RotateAction(JTabbedPane.BOTTOM));
+        map.put("changeLayout", new ChangeLayoutAction());
+        map.put("dump", new DumpAction());
+        return map;
+    }
+
+    private class RotateAction extends AbstractAction {
+        private int placement;
+        public RotateAction(int placement) {
+            this.placement = placement;
+        }
+
+        public void actionPerformed(ActionEvent e) {
+            tabPane.setTabPlacement(placement);
+        }
+    }
+
+    private class ChangeLayoutAction extends AbstractAction {
+        private boolean a = true;
+        public void actionPerformed(ActionEvent e) {
+            if (a) {
+                tabPane.setTabLayoutPolicy(JTabbedPane.WRAP_TAB_LAYOUT);
+                a = false;
+            } else {
+                tabPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
+                a = true;
+            }
+        }
+    }
+
+    private class DumpAction extends AbstractAction {
+        public void actionPerformed(ActionEvent e) {
+            for (int i = 0; i < tabPane.getTabCount(); i++) {
+                System.out.println("Tab: " + i + " "
+                    + tabPane.getUI().getTabBounds(tabPane, i));
+            }
+        }
+    }
+}
+
+
+/****************************************************
+ Standard Test Machinery
+ DO NOT modify anything below -- it's a standard
+  chunk of code whose purpose is to make user
+  interaction uniform, and thereby make it simpler
+  to read and understand someone else's test.
+ ****************************************************/
+
+/**
+ This is part of the standard test machinery.
+ It creates a dialog (with the instructions), and is the interface
+  for sending text messages to the user.
+ To print the instructions, send an array of strings to Sysout.createDialog
+  WithInstructions method.  Put one line of instructions per array entry.
+ To display a message for the tester to see, simply call Sysout.println
+  with the string to be displayed.
+ This mimics System.out.println but works within the test harness as well
+  as standalone.
+ */
+
+class Sysout
+ {
+   private static TestDialog dialog;
+
+   public static void createDialogWithInstructions( String[] instructions )
+    {
+      dialog = new TestDialog( new Frame(), "Instructions" );
+      dialog.printInstructions( instructions );
+      dialog.show();
+      println( "Any messages for the tester will display here." );
+    }
+
+   public static void createDialog( )
+    {
+      dialog = new TestDialog( new Frame(), "Instructions" );
+      String[] defInstr = { "Instructions will appear here. ", "" } ;
+      dialog.printInstructions( defInstr );
+      dialog.show();
+      println( "Any messages for the tester will display here." );
+    }
+
+
+   public static void printInstructions( String[] instructions )
+    {
+      dialog.printInstructions( instructions );
+    }
+
+
+   public static void println( String messageIn )
+    {
+      dialog.displayMessage( messageIn );
+    }
+
+   public static void setInstructionsWithExceptions(String instructionsSet[][],
+                                                    String exceptionsSet[]) {
+       createDialogWithInstructions(instructionsSet[0]);
+       dialog.setInstructions(instructionsSet);
+       dialog.setExceptionMessages(exceptionsSet);
+   }
+
+   public static String getFailureMessages()   {
+       return dialog.failureMessages;
+   }
+
+   public static boolean failStatus()  {
+       return dialog.failStatus;
+   }
+
+ }// Sysout  class
+
+/**
+  This is part of the standard test machinery.  It provides a place for the
+   test instructions to be displayed, and a place for interactive messages
+   to the user to be displayed.
+  To have the test instructions displayed, see Sysout.
+  To have a message to the user be displayed, see Sysout.
+  Do not call anything in this dialog directly.
+  */
+class TestDialog extends Dialog
+ {
+
+   TextArea instructionsText;
+   TextArea messageText;
+   int maxStringLength = 70;
+
+   Panel assertPanel;
+   Button assertPass,assertFail,remarks;
+   HandleAssert handleAssert;
+   boolean failStatus=false;
+   int instructionCounter=0;
+   String instructions[][];
+   int exceptionCounter=0;
+   String exceptionMessages[];
+   String failureMessages="<br>";
+   String remarksMessage=null;
+   RemarksDialog remarksDialog;
+
+   //DO NOT call this directly, go through Sysout
+   public TestDialog( Frame frame, String name )
+    {
+      super( frame, name );
+      int scrollBoth = TextArea.SCROLLBARS_BOTH;
+      instructionsText = new TextArea( "", 14, maxStringLength, scrollBoth );
+      add( "North", instructionsText );
+
+      messageText = new TextArea( "", 3, maxStringLength, scrollBoth );
+      add("Center", messageText);
+
+      assertPanel = new Panel(new FlowLayout());
+      assertPass=new Button("Assertion Pass");
+      assertPass.setName("Assertion Pass");
+      assertFail=new Button("Assertion Fail");
+      assertFail.setName("Assertion Fail");
+      remarks = new Button("Assertion Fail Remarks");
+      remarks.setEnabled(false);
+      remarks.setName("Assertion Remarks");
+      assertPanel.add(assertPass);
+      assertPanel.add(assertFail);
+      assertPanel.add(remarks);
+      handleAssert = new HandleAssert();
+      assertPass.addActionListener(handleAssert);
+      assertFail.addActionListener(handleAssert);
+      remarks.addActionListener(handleAssert);
+      add("South",assertPanel);
+      pack();
+
+      show();
+    }// TestDialog()
+
+   //DO NOT call this directly, go through Sysout
+   public void printInstructions( String[] instructions )
+    {
+      //Clear out any current instructions
+      instructionsText.setText( "" );
+
+      //Go down array of instruction strings
+
+      String printStr, remainingStr;
+      for( int i=0; i < instructions.length; i++ )
+       {
+     //chop up each into pieces maxSringLength long
+     remainingStr = instructions[ i ];
+     while( remainingStr.length() > 0 )
+      {
+        //if longer than max then chop off first max chars to print
+        if( remainingStr.length() >= maxStringLength )
+         {
+           //Try to chop on a word boundary
+           int posOfSpace = remainingStr.
+          lastIndexOf( ' ', maxStringLength - 1 );
+
+           if( posOfSpace <= 0 ) posOfSpace = maxStringLength - 1;
+
+           printStr = remainingStr.substring( 0, posOfSpace + 1 );
+           remainingStr = remainingStr.substring( posOfSpace + 1 );
+         }
+        //else just print
+        else
+         {
+           printStr = remainingStr;
+           remainingStr = "";
+         }
+
+            instructionsText.append( printStr + "\n" );
+
+      }// while
+
+       }// for
+
+    }//printInstructions()
+
+   //DO NOT call this directly, go through Sysout
+   public void displayMessage( String messageIn )
+    {
+      messageText.append( messageIn + "\n" );
+    }
+
+   public void emptyMessage()   {
+       messageText.setText("");
+   }
+
+   public void setInstructions(String insStr[][])    {
+       instructions=insStr;
+   }
+
+   public void setExceptionMessages(String exceptionMessages[])   {
+       this.exceptionMessages=exceptionMessages;
+   }
+
+   class HandleAssert implements ActionListener   {
+        public void actionPerformed(ActionEvent ae)    {
+           if(ae.getSource()==remarks)  {
+               remarksDialog = new RemarksDialog(TestDialog.this,
+                                        "Assertion Remarks Dialog",true);
+               remarks.setEnabled(false);
+               if(remarksMessage!=null)
+                    failureMessages+=". User Remarks : "+remarksMessage;
+           }
+           else {
+               if(instructionCounter<instructions.length-1) {
+                   emptyMessage();
+                   instructionCounter++;
+                   printInstructions(instructions[instructionCounter]);
+               }
+               else {
+                   emptyMessage();
+                   displayMessage("Testcase Completed");
+                   displayMessage("Press 'Done' button in the "+
+                                                    "BaseApplet to close");
+                   assertPass.setEnabled(false);
+                   assertFail.setEnabled(false);
+               }
+
+               if(ae.getSource()==assertPass)    {
+                   // anything to be done in future
+               }
+               else if(ae.getSource()==assertFail)   {
+                   remarks.setEnabled(true);
+                   if(!failStatus)
+                       failStatus=true;
+                   if(exceptionCounter<exceptionMessages.length)   {
+                        failureMessages = failureMessages + "<br>"+
+                                    exceptionMessages[exceptionCounter];
+                   }
+               }
+               exceptionCounter++;
+           }
+        }
+    }
+
+    class RemarksDialog extends Dialog  implements ActionListener{
+        Panel rootPanel,remarksPanel;
+        TextArea textarea;
+        Button addRemarks,cancelRemarks;
+        public RemarksDialog(Dialog owner,String title,boolean modal)  {
+            super(owner,title,modal);
+            rootPanel = new Panel(new BorderLayout());
+            remarksPanel = new Panel(new FlowLayout());
+            textarea = new TextArea(5,30);
+            addRemarks=new Button("Add Remarks");
+            addRemarks.addActionListener(this);
+            cancelRemarks = new Button("Cancel Remarks");
+            cancelRemarks.addActionListener(this);
+            remarksPanel.add(addRemarks);
+            remarksPanel.add(cancelRemarks);
+            rootPanel.add(textarea,"Center");
+            rootPanel.add(remarksPanel,"South");
+            add(rootPanel);
+            setBounds(150,150,400,200);
+            setVisible(true);
+        }
+
+        public void actionPerformed(ActionEvent ae) {
+            remarksMessage=null;
+            if(ae.getSource()==addRemarks)  {
+                String msg = textarea.getText().trim();
+                if (msg.length()>0)
+                    remarksMessage=msg;
+            }
+            dispose();
+        }
+
+    }
+
+}// TestDialog  class
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/JToolTip/4644444/bug4644444.html	Wed Jul 05 20:33:35 2017 +0200
@@ -0,0 +1,44 @@
+<!--
+ Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved.
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ This code is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License version 2 only, as
+ published by the Free Software Foundation.
+
+ This code is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ version 2 for more details (a copy is included in the LICENSE file that
+ accompanied this code).
+
+ You should have received a copy of the GNU General Public License version
+ 2 along with this work; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+
+ Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ or visit www.oracle.com if you need additional information or have any
+ questions.
+-->
+
+
+<html>
+<!--
+  @test
+  @summary   JToolTip is shown improperly when placed very close to screen boundaries
+  @bug 4644444 8076246
+  @author Xhipra Tyagi(xhipra.tyagi@india.sun.com) area=Swing
+  @run applet/manual=done bug4644444.html
+  -->
+<head>
+<title> bug4644444 </title>
+</head>
+<body>
+
+<h1>bug4644444<br>Bug ID: 4644444 </h1>
+
+<p> See the dialog box (usually in upper left corner) for instructions</p>
+
+<APPLET CODE="bug4644444.class" WIDTH=50 HEIGHT=40></APPLET>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/JToolTip/4644444/bug4644444.java	Wed Jul 05 20:33:35 2017 +0200
@@ -0,0 +1,354 @@
+/*
+ * Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.awt.*;
+import javax.swing.*;
+import java.awt.event.*;
+
+/*
+ * test
+ * @bug  4644444 8076246
+*/
+
+public class bug4644444 extends JApplet {
+
+        JPanel panel;
+        JButton button;
+
+        public bug4644444() throws Exception {
+            java.awt.EventQueue.invokeLater( () -> {
+                panel = new JPanel();
+                button = new JButton("whooo");
+                button.setToolTipText("Somthing really long 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890 1234567890");
+                panel.add(button);
+                getContentPane().add(panel);
+            });
+    }
+
+    public void init() {
+                String[][] instructionsSet =
+                {
+                        {
+                                " Note : Incase of Assertion failure,user can enter",
+                                " remarks by pressing 'Assertion Fail Remarks ' button",
+                                " ",
+                                " You would see a testframe with a Button",
+                        " ",
+                                " ON ALL PLATFORMS",
+                        "1. Move the mouse on the button, ",
+                        "   so that the tooltip attached to it comes up ",
+                        "2. Tool tip should get adjusted it-self to show ",
+                        "       its full length of text. ",
+                        "3. If tooltip  text gets cut, ",
+                        "   press 'Assertion Fail' else press 'Assertion Pass'",
+                        "4. Similarly, move the applet to different locations of the screen, ",
+                        "   & see if tooltip works properly everywhere. "
+                        }
+                };
+
+                String[] exceptionsSet =
+                {
+                        "JToolTip is shown partially when placed very close to screen boundaries",
+                };
+
+                Sysout.setInstructionsWithExceptions(instructionsSet,exceptionsSet);
+
+        }
+
+        public void start (){}
+
+        public void destroy(){
+            if(Sysout.failStatus())    {
+                String failMsg = Sysout.getFailureMessages();
+                failMsg = failMsg.replace('\n',' ');
+                throw new RuntimeException(failMsg);
+            }// End destroy
+        }
+}
+
+
+/****************************************************
+ Standard Test Machinery
+ DO NOT modify anything below -- it's a standard
+  chunk of code whose purpose is to make user
+  interaction uniform, and thereby make it simpler
+  to read and understand someone else's test.
+ ****************************************************/
+
+/**
+ This is part of the standard test machinery.
+ It creates a dialog (with the instructions), and is the interface
+  for sending text messages to the user.
+ To print the instructions, send an array of strings to Sysout.createDialog
+  WithInstructions method.  Put one line of instructions per array entry.
+ To display a message for the tester to see, simply call Sysout.println
+  with the string to be displayed.
+ This mimics System.out.println but works within the test harness as well
+  as standalone.
+ */
+
+class Sysout
+ {
+   private static TestDialog dialog;
+
+   public static void createDialogWithInstructions( String[] instructions )
+    {
+      dialog = new TestDialog( new Frame(), "Instructions" );
+      dialog.printInstructions( instructions );
+      dialog.show();
+      println( "Any messages for the tester will display here." );
+    }
+
+   public static void createDialog( )
+    {
+      dialog = new TestDialog( new Frame(), "Instructions" );
+      String[] defInstr = { "Instructions will appear here. ", "" } ;
+      dialog.printInstructions( defInstr );
+      dialog.show();
+      println( "Any messages for the tester will display here." );
+    }
+
+
+   public static void printInstructions( String[] instructions )
+    {
+      dialog.printInstructions( instructions );
+    }
+
+
+   public static void println( String messageIn )
+    {
+      dialog.displayMessage( messageIn );
+    }
+
+   public static void setInstructionsWithExceptions(String instructionsSet[][],
+                                                    String exceptionsSet[]) {
+       createDialogWithInstructions(instructionsSet[0]);
+       dialog.setInstructions(instructionsSet);
+       dialog.setExceptionMessages(exceptionsSet);
+   }
+
+   public static String getFailureMessages()   {
+       return dialog.failureMessages;
+   }
+
+   public static boolean failStatus()  {
+       return dialog.failStatus;
+   }
+
+ }// Sysout  class
+
+/**
+  This is part of the standard test machinery.  It provides a place for the
+   test instructions to be displayed, and a place for interactive messages
+   to the user to be displayed.
+  To have the test instructions displayed, see Sysout.
+  To have a message to the user be displayed, see Sysout.
+  Do not call anything in this dialog directly.
+  */
+class TestDialog extends Dialog
+ {
+
+   TextArea instructionsText;
+   TextArea messageText;
+   int maxStringLength = 70;
+
+   Panel assertPanel;
+   Button assertPass,assertFail,remarks;
+   HandleAssert handleAssert;
+   boolean failStatus=false;
+   int instructionCounter=0;
+   String instructions[][];
+   int exceptionCounter=0;
+   String exceptionMessages[];
+   String failureMessages="<br>";
+   String remarksMessage=null;
+   RemarksDialog remarksDialog;
+
+   //DO NOT call this directly, go through Sysout
+   public TestDialog( Frame frame, String name )
+    {
+      super( frame, name );
+      int scrollBoth = TextArea.SCROLLBARS_BOTH;
+      instructionsText = new TextArea( "", 14, maxStringLength, scrollBoth );
+      add( "North", instructionsText );
+
+      messageText = new TextArea( "", 3, maxStringLength, scrollBoth );
+      add("Center", messageText);
+
+      assertPanel = new Panel(new FlowLayout());
+      assertPass=new Button("Assertion Pass");
+      assertPass.setName("Assertion Pass");
+      assertFail=new Button("Assertion Fail");
+      assertFail.setName("Assertion Fail");
+      remarks = new Button("Assertion Fail Remarks");
+      remarks.setEnabled(false);
+      remarks.setName("Assertion Remarks");
+      assertPanel.add(assertPass);
+      assertPanel.add(assertFail);
+      assertPanel.add(remarks);
+      handleAssert = new HandleAssert();
+      assertPass.addActionListener(handleAssert);
+      assertFail.addActionListener(handleAssert);
+      remarks.addActionListener(handleAssert);
+      add("South",assertPanel);
+      pack();
+
+      show();
+    }// TestDialog()
+
+   //DO NOT call this directly, go through Sysout
+   public void printInstructions( String[] instructions )
+    {
+      //Clear out any current instructions
+      instructionsText.setText( "" );
+
+      //Go down array of instruction strings
+
+      String printStr, remainingStr;
+      for( int i=0; i < instructions.length; i++ )
+       {
+     //chop up each into pieces maxSringLength long
+     remainingStr = instructions[ i ];
+     while( remainingStr.length() > 0 )
+      {
+        //if longer than max then chop off first max chars to print
+        if( remainingStr.length() >= maxStringLength )
+         {
+           //Try to chop on a word boundary
+           int posOfSpace = remainingStr.
+          lastIndexOf( ' ', maxStringLength - 1 );
+
+           if( posOfSpace <= 0 ) posOfSpace = maxStringLength - 1;
+
+           printStr = remainingStr.substring( 0, posOfSpace + 1 );
+           remainingStr = remainingStr.substring( posOfSpace + 1 );
+         }
+        //else just print
+        else
+         {
+           printStr = remainingStr;
+           remainingStr = "";
+         }
+
+            instructionsText.append( printStr + "\n" );
+
+      }// while
+
+       }// for
+
+    }//printInstructions()
+
+   //DO NOT call this directly, go through Sysout
+   public void displayMessage( String messageIn )
+    {
+      messageText.append( messageIn + "\n" );
+    }
+
+   public void emptyMessage()   {
+       messageText.setText("");
+   }
+
+   public void setInstructions(String insStr[][])    {
+       instructions=insStr;
+   }
+
+   public void setExceptionMessages(String exceptionMessages[])   {
+       this.exceptionMessages=exceptionMessages;
+   }
+
+   class HandleAssert implements ActionListener   {
+        public void actionPerformed(ActionEvent ae)    {
+           if(ae.getSource()==remarks)  {
+               remarksDialog = new RemarksDialog(TestDialog.this,
+                                        "Assertion Remarks Dialog",true);
+               remarks.setEnabled(false);
+               if(remarksMessage!=null)
+                    failureMessages+=". User Remarks : "+remarksMessage;
+           }
+           else {
+               if(instructionCounter<instructions.length-1) {
+                   emptyMessage();
+                   instructionCounter++;
+                   printInstructions(instructions[instructionCounter]);
+               }
+               else {
+                   emptyMessage();
+                   displayMessage("Testcase Completed");
+                   displayMessage("Press 'Done' button in the "+
+                                                    "BaseApplet to close");
+                   assertPass.setEnabled(false);
+                   assertFail.setEnabled(false);
+               }
+
+               if(ae.getSource()==assertPass)    {
+                   // anything to be done in future
+               }
+               else if(ae.getSource()==assertFail)   {
+                   remarks.setEnabled(true);
+                   if(!failStatus)
+                       failStatus=true;
+                   if(exceptionCounter<exceptionMessages.length)   {
+                        failureMessages = failureMessages + "<br>"+
+                                    exceptionMessages[exceptionCounter];
+                   }
+               }
+               exceptionCounter++;
+           }
+        }
+    }
+
+    class RemarksDialog extends Dialog  implements ActionListener{
+        Panel rootPanel,remarksPanel;
+        TextArea textarea;
+        Button addRemarks,cancelRemarks;
+        public RemarksDialog(Dialog owner,String title,boolean modal)  {
+            super(owner,title,modal);
+            rootPanel = new Panel(new BorderLayout());
+            remarksPanel = new Panel(new FlowLayout());
+            textarea = new TextArea(5,30);
+            addRemarks=new Button("Add Remarks");
+            addRemarks.addActionListener(this);
+            cancelRemarks = new Button("Cancel Remarks");
+            cancelRemarks.addActionListener(this);
+            remarksPanel.add(addRemarks);
+            remarksPanel.add(cancelRemarks);
+            rootPanel.add(textarea,"Center");
+            rootPanel.add(remarksPanel,"South");
+            add(rootPanel);
+            setBounds(150,150,400,200);
+            setVisible(true);
+        }
+
+        public void actionPerformed(ActionEvent ae) {
+            remarksMessage=null;
+            if(ae.getSource()==addRemarks)  {
+                String msg = textarea.getText().trim();
+                if (msg.length()>0)
+                    remarksMessage=msg;
+            }
+            dispose();
+        }
+
+    }
+
+}// TestDialog  class
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/plaf/aqua/CustomComboBoxFocusTest.java	Wed Jul 05 20:33:35 2017 +0200
@@ -0,0 +1,327 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/* @test
+   @bug     8073001
+   @summary Test verifies that combo box with custom editor renders
+            focus ring around arrow button correctly.
+   @run     main CustomComboBoxFocusTest
+*/
+
+import java.awt.AWTException;
+import java.awt.Component;
+import java.awt.GridLayout;
+import java.awt.Point;
+import java.awt.Rectangle;
+import java.awt.Robot;
+import java.awt.event.ActionListener;
+import java.awt.event.FocusEvent;
+import java.awt.event.FocusListener;
+import java.awt.image.BufferedImage;
+import java.io.File;
+import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
+import java.util.concurrent.CountDownLatch;
+import javax.imageio.ImageIO;
+import javax.swing.ComboBoxEditor;
+import javax.swing.JComboBox;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JTextField;
+import javax.swing.SwingUtilities;
+
+public class CustomComboBoxFocusTest {
+
+    private static CustomComboBoxFocusTest test = null;
+
+    public static void main(String[] args) {
+
+        try {
+            SwingUtilities.invokeAndWait(new Runnable() {
+                public void run() {
+                    test = new CustomComboBoxFocusTest();
+                }
+            });
+        } catch (InterruptedException | InvocationTargetException e ) {
+            throw new RuntimeException("Test failed.", e);
+        }
+
+        SwingUtilities.invokeLater(test.init);
+
+        try {
+            System.out.println("Wait for screenshots...");
+            test.testDone.await();
+        } catch (InterruptedException e) {
+            throw new RuntimeException("Test failed.", e);
+        }
+        System.out.println("Compare screenshots...");
+        if (!test.match()) {
+            throw new RuntimeException("Test failed.");
+        }
+        System.out.println("Test passed.");
+    }
+
+    private final JComboBox<String> ref = new JComboBox<String>() {
+        public String toString() {
+            return "reference";
+        }
+    };
+
+    private final JComboBox<String> custom = new JComboBox<String>() {
+        public String toString() {
+            return "custom";
+        }
+    };
+
+    private final JFrame frame;
+
+    private CountDownLatch testDone = new CountDownLatch(1);
+
+    private Robot robot;
+
+    public CustomComboBoxFocusTest() {
+        frame = new JFrame(System.getProperty("java.version"));
+
+        try {
+            robot = new Robot(frame.getGraphicsConfiguration().getDevice());
+
+        } catch (AWTException e) {
+            throw new RuntimeException("Test failed.", e);
+        }
+    }
+
+    private boolean match() {
+        final BufferedImage a = captureRef.img;
+        final BufferedImage b = captureCustom.img;
+
+        final int w = Math.min(a.getWidth(), b.getWidth());
+        final int h = Math.min(a.getHeight(), b.getHeight());
+
+        for (int y = 0; y < h; y++) {
+            for (int x = 0; x < w; x++) {
+                if (a.getRGB(x, y) != b.getRGB(x, y)) {
+                    return false;
+                }
+            }
+        }
+        return true;
+    }
+
+    private JComboBox<String> getReference() {
+        return ref;
+    }
+
+    private JComboBox<String> getCustom() {
+        return custom;
+    }
+
+    private JFrame getFrame() {
+        return frame;
+    }
+
+    private static abstract class Step implements Runnable {
+        final public void run() {
+            doStep();
+
+            final Step next = nextStep();
+
+            if (next != null) {
+                SwingUtilities.invokeLater(next);
+            }
+        }
+
+        public abstract void doStep();
+
+        public abstract Step nextStep();
+    }
+
+    private final Step init = new Step() {
+        public void doStep() {
+            final JFrame f = getFrame();
+
+            final JPanel p = new JPanel(new GridLayout(4, 1, 20, 20));
+
+            JComboBox<String> r = getReference();
+            r.setEditable(true);
+            r.addItem("One");
+
+            JComboBox<String> c = getCustom();
+            c.setEditable(true);
+            c.addItem("One");
+            final ComboBoxEditor e = new ComboBoxEditor() {
+                private JTextField text = new JTextField();
+
+                @Override
+                public Component getEditorComponent() {
+                    return this.text;
+                }
+
+                @Override
+                public void setItem(Object o) {
+                    text.setText(o == null ? "" : o.toString());
+                }
+
+                @Override
+                public Object getItem() {
+                    return text.getText();
+                }
+
+                @Override
+                public void selectAll() {
+                    text.selectAll();
+                }
+
+                @Override
+                public void addActionListener(ActionListener actionListener) {
+                    text.addActionListener(actionListener);
+                }
+
+                @Override
+                public void removeActionListener(ActionListener actionListener) {
+                    text.removeActionListener(actionListener);
+                }
+            };
+            c.setEditor(e);
+
+            p.add(new JLabel("Reference"));
+            p.add(r);
+            p.add(c);
+            p.add(new JLabel("Custom"));
+
+            f.add(p);
+
+            f.pack();
+            f.setVisible(true);
+        }
+
+        public Step nextStep() {
+            return focusRef;
+        }
+    };
+
+    private class FocusStep extends Step {
+        private final JComboBox<String> target;
+        private final Step focusHandler;
+        private final Step next;
+
+        public FocusStep(JComboBox<String> t, Step h, Step n) {
+            target = t;
+            focusHandler = h;
+            next = n;
+        }
+
+        public void doStep() {
+            System.out.println("Request focus on " + target);
+            final Component c = target.getEditor().getEditorComponent();
+
+            c.addFocusListener(new FocusListener() {
+                @Override
+                public void focusGained(FocusEvent e) {
+                    SwingUtilities.invokeLater(focusHandler);
+                }
+
+                @Override
+                public void focusLost(FocusEvent e) {
+
+                }
+            });
+
+            c.requestFocus();
+
+        }
+
+        public Step nextStep() {
+            return next;
+        }
+    }
+
+
+    private class CaptureStep extends Step {
+        private final JComboBox<String> target;
+        private BufferedImage img;
+        private String fname;
+        private final Step next;
+
+        private final int timeout = 2000;
+
+        public CaptureStep(JComboBox<String> t, String name, Step n) {
+            target = t;
+            next = n;
+            fname = name;
+        }
+
+        public void doStep() {
+            try {
+                Thread.sleep(timeout);
+            } catch (InterruptedException e) {
+            }
+            System.out.println("Capture sceeenshot of " + target);
+
+            Rectangle bounds = target.getBounds();
+            Point p = target.getLocationOnScreen();
+            System.out.println("Target bounds: " + bounds);
+            System.out.println("Target location: " + p);
+
+            bounds.x = p.x;
+            bounds.y = p.y;
+
+            img = robot.createScreenCapture(bounds);
+
+            try {
+                ImageIO.write(img, "PNG", new File(fname + ".png"));
+            } catch (IOException ioe) {
+                ioe.printStackTrace();
+            }
+
+        }
+
+        public Step nextStep() {
+            return next;
+        }
+    }
+
+    private final Step done = new Step() {
+        public void doStep() {
+            JFrame f = getFrame();
+            if (f != null) {
+                f.dispose();
+            }
+            System.out.println("Done");
+
+            testDone.countDown();
+        }
+
+        public Step nextStep() {
+            return null;
+        }
+    };
+
+    private final CaptureStep captureCustom = new CaptureStep(getCustom(), "cb_custom", done);
+
+    private final FocusStep focusCustom = new FocusStep(getCustom(), captureCustom, null);
+
+    private final CaptureStep captureRef = new CaptureStep(getReference(), "cb_ref", focusCustom);
+
+    private final FocusStep focusRef = new FocusStep(getReference(), captureRef, null);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/plaf/basic/6866751/bug6866751.java	Wed Jul 05 20:33:35 2017 +0200
@@ -0,0 +1,97 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+/* @test
+   @bug 6866751
+   @summary J2SE_Swing_Reg: the caret disappears when moving to the end of the line.
+   @author Semyon Sadetsky
+  */
+import javax.swing.*;
+
+public class bug6866751 {
+    private static JFrame frame;
+    private static JTextArea area;
+
+    public static void main(String[] args) throws Exception {
+        try {
+            SwingUtilities.invokeAndWait(new Runnable() {
+                public void run() {
+                    frame = new JFrame();
+                    frame.setUndecorated(true);
+                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+                    setup(frame);
+                }
+            });
+            SwingUtilities.invokeAndWait(new Runnable() {
+                public void run() {
+                    int width = area.getWidth();
+                    double caretX =
+                            area.getCaret().getMagicCaretPosition().getX();
+                    if (width < caretX + 1) {
+                        throw new RuntimeException(
+                                "Width of the area (" + width +
+                                        ") is less than caret x-position " +
+                                        caretX + 1);
+                    }
+                    area.putClientProperty("caretWidth", 10);
+                }
+            });
+            SwingUtilities.invokeAndWait(new Runnable() {
+                public void run() {
+                    int width = area.getWidth();
+                    double caretX =
+                            area.getCaret().getMagicCaretPosition().getX();
+                    if (width < caretX + 10) {
+                        throw new RuntimeException(
+                                "Width of the area (" + width +
+                                        ") is less  than caret x-position " +
+                                        caretX + 10);
+                    }
+                }
+            });
+            System.out.println("ok");
+        } finally {
+            SwingUtilities.invokeAndWait(new Runnable() {
+                @Override
+                public void run() {
+                    frame.dispose();
+                }
+            });
+        }
+    }
+
+    static void setup(JFrame frame) {
+        area = new JTextArea();
+        frame.getContentPane().add(new JScrollPane(area));
+        area.setText(
+                "mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm");
+        area.getCaret().setDot(area.getText().length() + 1);
+
+        frame.setSize(300, 200);
+        frame.setVisible(true);
+
+        area.requestFocus();
+
+    }
+
+}
--- a/jdk/test/javax/swing/plaf/windows/6921687/bug6921687.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/javax/swing/plaf/windows/6921687/bug6921687.java	Wed Jul 05 20:33:35 2017 +0200
@@ -22,12 +22,13 @@
  */
 
 /* @test
-   @bug 6921687
+   @bug 6921687 8079428
    @summary Mnemonic disappears after repeated attempts to open menu items using
    mnemonics
    @author Semyon Sadetsky
    @library /lib/testlibrary
    @build jdk.testlibrary.OSInfo
+   @run main bug6921687
   */
 
 
@@ -109,4 +110,4 @@
         frame.setVisible(true);
 
     }
-}
\ No newline at end of file
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/text/html/8031109/bug8031109.java	Wed Jul 05 20:33:35 2017 +0200
@@ -0,0 +1,91 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.net.URL;
+import javax.swing.JEditorPane;
+import javax.swing.JFrame;
+import javax.swing.JScrollPane;
+import javax.swing.SwingUtilities;
+import javax.swing.text.EditorKit;
+/*
+ * @test
+ * @bug 8031109
+ * @author Victor Dyakov
+ * @summary  Rendering HTML code in JEditorPane throws NumberFormatException
+ * @run main bug8031109
+ */
+public class bug8031109 {
+
+    private static final String TEXT_HTML = "text/html";
+
+    public static void main(String[] args) throws Exception {
+        SwingUtilities.invokeAndWait(new Runnable() {
+
+            @Override
+            public void run() {
+                JEditorPane editorPane = new JEditorPane();
+                editorPane.setEditable(false);
+                EditorKit defaultHtmlEditor = JEditorPane
+                        .createEditorKitForContentType(TEXT_HTML);
+                editorPane.setEditorKitForContentType(TEXT_HTML, defaultHtmlEditor);
+                editorPane.setContentType(TEXT_HTML);
+                editorPane.getDocument().putProperty("IgnoreCharsetDirective",
+                        Boolean.TRUE);
+                URL url = generateHtmlFile();
+                String html = "<html>"
+                        + "<frameset rows=\"120px, 120 PX ,  * , 10 *\">\n"
+                        + "   <frame name=\"top\" src=\"" + url + "\" />\n"
+                        + "   <frame name=\"center\" src=\"" + url + "\" />\n"
+                        + "   <frame name=\"main\" src=\"" + url + "\" />\n"
+                        + "   <noframes>\n"
+                        + "   <body>\n"
+                        + "      Your browser does not support frames.\n"
+                        + "   </body>\n"
+                        + "   </noframes>\n"
+                        + "</frameset>";
+                editorPane.setText(html);
+                JScrollPane scrollPane = new JScrollPane(editorPane);
+
+                JFrame frame = new JFrame();
+                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+                frame.getContentPane().add(scrollPane);
+                frame.setSize(500, 500);
+                frame.setVisible(true);
+            }
+        });
+    }
+
+    private static URL generateHtmlFile() {
+        File file = new File("hello.html");
+        try (
+                FileWriter fw = new FileWriter(file.getAbsoluteFile());
+                BufferedWriter bw = new BufferedWriter(fw);) {
+            bw.write("<head></head><body>Hello World!</body>");
+            return file.toURI().toURL();
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/javax/swing/text/html/parser/8074956/bug8074956.java	Wed Jul 05 20:33:35 2017 +0200
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import javax.swing.text.html.parser.ContentModel;
+import javax.swing.text.html.parser.DTD;
+import javax.swing.text.html.parser.Element;
+
+/*
+ * @test
+ * @bug 8074956
+ * @author Alexey Ivanov
+ * @summary Tests correct handling of additional HTML elements in ContentModel
+ * @run main bug8074956
+ */
+public class bug8074956 {
+    public static void main(String[] args) throws Exception {
+        final DTD html32 = DTD.getDTD("html32");
+        ContentModel contentModel = new ContentModel('&', new ContentModel());
+
+        Element elem1 = html32.getElement("html-element");
+        contentModel.first(elem1);
+
+        Element elem2 = html32.getElement("test-element");
+        // Shouldn't throw ArrayIndexOutOfBoundsException
+        contentModel.first(elem2);
+    }
+}
--- a/jdk/test/lib/testlibrary/jdk/testlibrary/RandomFactory.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/lib/testlibrary/jdk/testlibrary/RandomFactory.java	Wed Jul 05 20:33:35 2017 +0200
@@ -21,6 +21,8 @@
  * questions.
  */
 
+package jdk.testlibrary;
+
 import java.util.Random;
 import java.util.SplittableRandom;
 
--- a/jdk/test/sun/nio/cs/OLD/X11GB2312_OLD.java	Thu May 14 20:14:44 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,134 +0,0 @@
-/*
- * Copyright (c) 1996, 2005, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-import java.nio.CharBuffer;
-import java.nio.ByteBuffer;
-import java.nio.charset.*;
-import sun.nio.cs.ext.EUC_CN;
-
-public class X11GB2312_OLD extends Charset {
-    public X11GB2312_OLD () {
-        super("X11GB2312-OLD", null);
-    }
-    public CharsetEncoder newEncoder() {
-        return new Encoder(this);
-    }
-    public CharsetDecoder newDecoder() {
-        return new Decoder(this);
-    }
-
-    public boolean contains(Charset cs) {
-        return cs instanceof X11GB2312_OLD;
-    }
-
-    private class Encoder extends EUC_CN_OLD.Encoder {
-        public Encoder(Charset cs) {
-            super(cs);
-        }
-
-        public boolean canEncode(char c) {
-            if (c <= 0x7F) {
-                return false;
-            }
-            return super.canEncode(c);
-        }
-
-        protected CoderResult encodeLoop(CharBuffer src, ByteBuffer dst) {
-            char[] sa = src.array();
-            int sp = src.arrayOffset() + src.position();
-            int sl = src.arrayOffset() + src.limit();
-
-            byte[] da = dst.array();
-            int dp = dst.arrayOffset() + dst.position();
-            int dl = dst.arrayOffset() + dst.limit();
-
-            try {
-                while (sp < sl) {
-                    char c = sa[sp];
-                    if (c <= '\u007f')
-                        return CoderResult.unmappableForLength(1);
-                    int ncode = encodeDouble(c);
-                    if (ncode != 0 && c != '\u0000' ) {
-                        da[dp++] = (byte) ((ncode  >> 8) & 0x7f);
-                        da[dp++] = (byte) (ncode & 0x7f);
-                        sp++;
-                        continue;
-                    }
-                    return CoderResult.unmappableForLength(1);
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(sp - src.arrayOffset());
-                dst.position(dp - dst.arrayOffset());
-            }
-        }
-        public boolean isLegalReplacement(byte[] repl) {
-            return true;
-        }
-    }
-
-    private class Decoder extends EUC_CN_OLD.Decoder {
-        public Decoder(Charset cs) {
-            super(cs);
-        }
-
-        protected CoderResult decodeLoop(ByteBuffer src, CharBuffer dst) {
-            byte[] sa = src.array();
-            int sp = src.arrayOffset() + src.position();
-            int sl = src.arrayOffset() + src.limit();
-            assert (sp <= sl);
-            sp = (sp <= sl ? sp : sl);
-            char[] da = dst.array();
-            int dp = dst.arrayOffset() + dst.position();
-            int dl = dst.arrayOffset() + dst.limit();
-            assert (dp <= dl);
-            dp = (dp <= dl ? dp : dl);
-
-            try {
-                while (sp < sl) {
-                    if ( sl - sp < 2) {
-                        return CoderResult.UNDERFLOW;
-                    }
-                    int b1 = sa[sp] & 0xFF | 0x80;
-                    int b2 = sa[sp + 1] & 0xFF | 0x80;
-                    char c = decodeDouble(b1, b2);
-                    if (c == replacement().charAt(0)) {
-                        return CoderResult.unmappableForLength(2);
-                    }
-                    if (dl - dp < 1)
-                        return CoderResult.OVERFLOW;
-                    da[dp++] = c;
-                    sp +=2;
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(sp - src.arrayOffset());
-                dst.position(dp - dst.arrayOffset());
-            }
-
-        }
-    }
-
-}
--- a/jdk/test/sun/nio/cs/OLD/X11GBK_OLD.java	Thu May 14 20:14:44 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,56 +0,0 @@
-/*
- * Copyright (c) 1999, 2005, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-
-import java.nio.charset.Charset;
-import java.nio.charset.CharsetEncoder;
-import java.nio.charset.CharsetDecoder;
-import sun.nio.cs.ext.GBK;
-
-public class X11GBK_OLD extends Charset {
-    public X11GBK_OLD () {
-        super("X11GBK-OLD", null);
-    }
-    public CharsetEncoder newEncoder() {
-        return new Encoder(this);
-    }
-    public CharsetDecoder newDecoder() {
-        return new GBK_OLD.Decoder(this);
-    }
-
-    public boolean contains(Charset cs) {
-        return cs instanceof X11GBK_OLD;
-    }
-
-    private class Encoder extends GBK_OLD.Encoder {
-        public Encoder(Charset cs) {
-            super(cs);
-        }
-        public boolean canEncode(char ch){
-            if (ch < 0x80) return false;
-            return super.canEncode(ch);
-        }
-    }
-}
--- a/jdk/test/sun/nio/cs/OLD/X11KSC5601_OLD.java	Thu May 14 20:14:44 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,133 +0,0 @@
-/*
- * Copyright (c) 1996, 2005, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.  Oracle designates this
- * particular file as subject to the "Classpath" exception as provided
- * by Oracle in the LICENSE file that accompanied this code.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-import java.nio.CharBuffer;
-import java.nio.ByteBuffer;
-import java.nio.charset.*;
-import sun.nio.cs.ext.EUC_KR;
-
-public class X11KSC5601_OLD extends Charset {
-    public X11KSC5601_OLD () {
-        super("X11KSC5601-OLD", null);
-    }
-    public CharsetEncoder newEncoder() {
-        return new Encoder(this);
-    }
-    public CharsetDecoder newDecoder() {
-        return new Decoder(this);
-    }
-
-    public boolean contains(Charset cs) {
-        return cs instanceof X11KSC5601_OLD;
-    }
-
-    private class Encoder extends EUC_KR_OLD.Encoder {
-        public Encoder(Charset cs) {
-            super(cs);
-        }
-
-        public boolean canEncode(char c) {
-            if (c <= 0x7F) {
-                return false;
-            }
-            return super.canEncode(c);
-        }
-
-        protected CoderResult encodeLoop(CharBuffer src, ByteBuffer dst) {
-            char[] sa = src.array();
-            int sp = src.arrayOffset() + src.position();
-            int sl = src.arrayOffset() + src.limit();
-            byte[] da = dst.array();
-            int dp = dst.arrayOffset() + dst.position();
-            int dl = dst.arrayOffset() + dst.limit();
-
-            try {
-                while (sp < sl) {
-                    char c = sa[sp];
-                    if (c <= '\u007f')
-                        return CoderResult.unmappableForLength(1);
-                    int ncode = encodeDouble(c);
-                    if (ncode != 0 && c != '\u0000' ) {
-                        da[dp++] = (byte) ((ncode  >> 8) & 0x7f);
-                        da[dp++] = (byte) (ncode & 0x7f);
-                        sp++;
-                        continue;
-                    }
-                    return CoderResult.unmappableForLength(1);
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(sp - src.arrayOffset());
-                dst.position(dp - dst.arrayOffset());
-            }
-        }
-        public boolean isLegalReplacement(byte[] repl) {
-            return true;
-        }
-    }
-
-    private class Decoder extends EUC_KR_OLD.Decoder {
-        public Decoder(Charset cs) {
-            super(cs);
-        }
-
-        protected CoderResult decodeLoop(ByteBuffer src, CharBuffer dst) {
-            byte[] sa = src.array();
-            int sp = src.arrayOffset() + src.position();
-            int sl = src.arrayOffset() + src.limit();
-            assert (sp <= sl);
-            sp = (sp <= sl ? sp : sl);
-            char[] da = dst.array();
-            int dp = dst.arrayOffset() + dst.position();
-            int dl = dst.arrayOffset() + dst.limit();
-            assert (dp <= dl);
-            dp = (dp <= dl ? dp : dl);
-
-
-            try {
-                while (sp < sl) {
-                    if ( sl - sp < 2) {
-                        return CoderResult.UNDERFLOW;
-                    }
-                    int b1 = sa[sp] & 0xFF | 0x80;
-                    int b2 = sa[sp + 1] & 0xFF | 0x80;
-                    char c = decodeDouble(b1, b2);
-                    if (c == replacement().charAt(0)) {
-                        return CoderResult.unmappableForLength(2);
-                    }
-                    if (dl - dp < 1)
-                        return CoderResult.OVERFLOW;
-                    da[dp++] = c;
-                    sp +=2;
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(sp - src.arrayOffset());
-                dst.position(dp - dst.arrayOffset());
-            }
-
-        }
-    }
-}
--- a/jdk/test/sun/nio/cs/TestCompoundTest.java	Thu May 14 20:14:44 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/* @test
- * @bug 6427981
- * @summary Check the Compound_Text's canonical name and its aliases
- */
-
-import java.nio.charset.*;
-import java.util.Set;
-
-public class TestCompoundTest {
-
-    public static void main(String args[]) throws Exception
-    {
-        if (System.getProperty("os.name").startsWith("Windows"))
-            return;
-        Charset cs = Charset.forName("COMPOUND_TEXT");
-        if (!cs.name().startsWith("x-"))
-            throw new RuntimeException("FAILED: name does not start with x-");
-        Set<String> aliases = cs.aliases();
-        if (!aliases.contains("COMPOUND_TEXT") ||
-            !aliases.contains("x-compound-text") ||
-            !aliases.contains("x11-compound_text"))
-            throw new RuntimeException("FAILED: alias name is missing");
-    }
-}
--- a/jdk/test/sun/nio/cs/TestX11CNS.java	Thu May 14 20:14:44 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,144 +0,0 @@
-/*
- * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/*
- * @test
- * @bug 6831794
- * @summary Test X11CNS charset
- */
-
-import java.nio.charset.*;
-import java.nio.*;
-import java.util.*;
-
-public class TestX11CNS {
-    static char[] decode(byte[] bb, Charset cs)
-        throws Exception {
-        CharsetDecoder dec = cs.newDecoder();
-        ByteBuffer bbf = ByteBuffer.wrap(bb);
-        CharBuffer cbf = CharBuffer.allocate(bb.length);
-        CoderResult cr = dec.decode(bbf, cbf, true);
-        if (cr != CoderResult.UNDERFLOW) {
-            System.out.println("DEC-----------------");
-            int pos = bbf.position();
-            System.out.printf("  cr=%s, bbf.pos=%d, bb[pos]=%x,%x,%x,%x%n",
-                              cr.toString(), pos,
-                              bb[pos++]&0xff, bb[pos++]&0xff,bb[pos++]&0xff, bb[pos++]&0xff);
-            throw new RuntimeException("Decoding err: " + cs.name());
-        }
-        char[] cc = new char[cbf.position()];
-        cbf.flip(); cbf.get(cc);
-        return cc;
-
-    }
-
-    static byte[] encode(char[] cc, Charset cs)
-        throws Exception {
-        ByteBuffer bbf = ByteBuffer.allocate(cc.length * 4);
-        CharBuffer cbf = CharBuffer.wrap(cc);
-        CharsetEncoder enc = cs.newEncoder();
-
-        CoderResult cr = enc.encode(cbf, bbf, true);
-        if (cr != CoderResult.UNDERFLOW) {
-            System.out.println("ENC-----------------");
-            int pos = cbf.position();
-            System.out.printf("  cr=%s, cbf.pos=%d, cc[pos]=%x%n",
-                              cr.toString(), pos, cc[pos]&0xffff);
-            throw new RuntimeException("Encoding err: " + cs.name());
-        }
-        byte[] bb = new byte[bbf.position()];
-        bbf.flip(); bbf.get(bb);
-        return bb;
-    }
-
-    static char[] getChars(Charset newCS, Charset oldCS) {
-        CharsetEncoder enc = oldCS.newEncoder();
-        CharsetEncoder encNew = newCS.newEncoder();
-        char[] cc = new char[0x10000];
-        int pos = 0;
-        int i = 0;
-        while (i < 0x10000) {
-            if (i == 0x4ea0 || i == 0x51ab || i == 0x52f9) {
-                i++;continue;
-            }
-            if (enc.canEncode((char)i) != encNew.canEncode((char)i)) {
-                System.out.printf("  Err i=%x%n", i);
-                //throw new RuntimeException("canEncode() err!");
-            }
-            if (enc.canEncode((char)i)) {
-                cc[pos++] = (char)i;
-            }
-            i++;
-        }
-        return Arrays.copyOf(cc, pos);
-    }
-
-    static void compare(Charset newCS, Charset oldCS) throws Exception {
-        if (newCS == null)
-            return;  // does not exist on this platform
-        char[] cc = getChars(newCS, oldCS);
-        System.out.printf("    Diff <%s> <%s>...%n", newCS.name(), oldCS.name());
-
-        byte[] bb1 = encode(cc, newCS);
-        byte[] bb2 = encode(cc, oldCS);
-
-        if (!Arrays.equals(bb1, bb2)) {
-            System.out.printf("        encoding failed!%n");
-        }
-        char[] cc1 = decode(bb1, newCS);
-        char[] cc2 = decode(bb1, oldCS);
-        if (!Arrays.equals(cc1, cc2)) {
-            for (int i = 0; i < cc1.length; i++) {
-                if (cc1[i] != cc2[i]) {
-                    System.out.printf("i=%d, cc1=%x cc2=%x,  bb=<%x%x>%n",
-                                      i,
-                                      cc1[i]&0xffff, cc2[i]&0xffff,
-                                      bb1[i*2]&0xff, bb1[i*2+1]&0xff);
-                }
-
-            }
-
-            System.out.printf("        decoding failed%n");
-        }
-    }
-
-    private static Charset getCharset(String czName)
-        throws Exception {
-        try {
-            return (Charset)Class.forName(czName).newInstance();
-        } catch (ClassNotFoundException e){}
-        return null;  // does not exist
-    }
-
-    public static void main(String[] args) throws Exception {
-        compare(getCharset("sun.awt.motif.X11CNS11643P1"),
-                new X11CNS11643P1());
-
-        compare(getCharset("sun.awt.motif.X11CNS11643P2"),
-                new X11CNS11643P2());
-
-        compare(getCharset("sun.awt.motif.X11CNS11643P3"),
-                new X11CNS11643P3());
-
-    }
-}
--- a/jdk/test/sun/nio/cs/TestX11JIS0201.java	Thu May 14 20:14:44 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,69 +0,0 @@
-/*
- * Copyright (c) 2008, 2012, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-/* @test
- * @bug 4195325
- * @summary name() should return "X11JIS0201"
- *
- */
-
-import java.nio.charset.*;
-
-public class TestX11JIS0201 {
-
-    public static void main(String args[])
-        throws Exception
-    {
-        test();
-    }
-
-    private static void test()
-        throws Exception
-    {
-        Class cl = null;
-        try {
-            cl = Class.forName("sun.awt.motif.X11JIS0201");
-        } catch (Exception e){
-            return;
-        }
-        Charset cs = (Charset)cl.newInstance();
-        if (! cs.name().equals("X11JIS0201")){
-            throw new Exception("X11JIS0201 does not work correctly");
-        }
-        CharsetEncoder enc = cs.newEncoder();
-        char[] cc = new char[0xffff];
-        for (char c = 0; c < 0xffff; c++) {
-            cc[c] = c;
-            if (enc.canEncode(c) !=
-                ((c >= 0xff61 && c <= 0xff9f) || c == 0x203e || c == 0xa5)) {
-                throw new RuntimeException("x11jis0201 canEncod() failed!");
-            }
-        }
-        String s = new String(cc);
-        byte[] bb_x11 = s.getBytes(cs);
-        byte[] bb = s.getBytes("jis0201");
-        if (!java.util.Arrays.equals(bb, bb_x11)) {
-            throw new RuntimeException("x11jis0201 encoding failed");
-        }
-    }
-}
--- a/jdk/test/sun/nio/cs/X11CNS11643.java	Thu May 14 20:14:44 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,188 +0,0 @@
-/*
- * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-import java.nio.CharBuffer;
-import java.nio.ByteBuffer;
-import java.nio.charset.*;
-import sun.nio.cs.*;
-import sun.nio.cs.ext.*;
-
-public abstract class X11CNS11643 extends Charset {
-    private final int plane;
-    public X11CNS11643 (int plane, String name) {
-        super(name, null);
-        switch (plane) {
-        case 1:
-            this.plane = 0; // CS1
-            break;
-        case 2:
-        case 3:
-            this.plane = plane;
-            break;
-        default:
-            throw new IllegalArgumentException
-                ("Only planes 1, 2, and 3 supported");
-        }
-    }
-
-    public CharsetEncoder newEncoder() {
-        return new Encoder(this, plane);
-    }
-
-    public CharsetDecoder newDecoder() {
-        return new Decoder(this, plane);
-    }
-
-    public boolean contains(Charset cs) {
-        return cs instanceof X11CNS11643;
-    }
-
-    private class Encoder extends EUC_TW_OLD.Encoder {
-        private int plane;
-        public Encoder(Charset cs, int plane) {
-            super(cs);
-            this.plane = plane;
-        }
-        public boolean canEncode(char c) {
-            if (c <= 0x7F) {
-                return false;
-            }
-            int p = getNative(c) >> 16;
-            if (p == 1 && plane == 0 ||
-                p == 2 && plane == 2 ||
-                p == 3 && plane == 3)
-                return true;
-            return false;
-        }
-
-        public boolean isLegalReplacement(byte[] repl) {
-            return true;
-        }
-
-        protected CoderResult encodeLoop(CharBuffer src, ByteBuffer dst) {
-            char[] sa = src.array();
-            int sp = src.arrayOffset() + src.position();
-            int sl = src.arrayOffset() + src.limit();
-            byte[] da = dst.array();
-            int dp = dst.arrayOffset() + dst.position();
-            int dl = dst.arrayOffset() + dst.limit();
-
-            try {
-                while (sp < sl) {
-                    char c = sa[sp];
-                    if (c >= '\uFFFE' || c <= '\u007f')
-                        return CoderResult.unmappableForLength(1);
-                    int cns = getNative(c);
-                    int p = cns >> 16;
-                    if (p == 1 && plane == 0 ||
-                        p == 2 && plane == 2 ||
-                        p == 3 && plane == 3) {
-                        if (dl - dp < 2)
-                            return CoderResult.OVERFLOW;
-                        da[dp++] = (byte) ((cns  >> 8) & 0x7f);
-                        da[dp++] = (byte) (cns & 0x7f);
-                        sp++;
-                        continue;
-                    }
-                    return CoderResult.unmappableForLength(1);
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(sp - src.arrayOffset());
-                dst.position(dp - dst.arrayOffset());
-            }
-        }
-    }
-
-    private class Decoder extends EUC_TW_OLD.Decoder {
-        private String table;
-        protected Decoder(Charset cs, int plane) {
-            super(cs);
-            switch (plane) {
-            case 0:
-                table = unicodeCNS1;
-                break;
-            case 2:
-                table = unicodeCNS2;
-                break;
-            case 3:
-                table = unicodeCNS3;
-                break;
-            default:
-                throw new IllegalArgumentException
-                    ("Only planes 1, 2, and 3 supported");
-            }
-        }
-
-        //we only work on array backed buffer.
-        protected CoderResult decodeLoop(ByteBuffer src, CharBuffer dst) {
-            byte[] sa = src.array();
-            int sp = src.arrayOffset() + src.position();
-            int sl = src.arrayOffset() + src.limit();
-            assert (sp <= sl);
-            sp = (sp <= sl ? sp : sl);
-
-            char[] da = dst.array();
-            int dp = dst.arrayOffset() + dst.position();
-            int dl = dst.arrayOffset() + dst.limit();
-            assert (dp <= dl);
-            dp = (dp <= dl ? dp : dl);
-
-            try {
-                while (sp < sl) {
-                    if ( sl - sp < 2) {
-                        return CoderResult.UNDERFLOW;
-                    }
-                    byte b1 = sa[sp];
-                    byte b2 = sa[sp + 1];
-                    char c = replacement().charAt(0);
-
-                    if (table == unicodeCNS3) {
-                        char[] cc = convToSurrogate((byte)(b1 | 0x80),
-                                                    (byte)(b2 | 0x80),
-                                                    table);
-                        if (cc != null && cc[0] == '\u0000')
-                            c = cc[1];
-                    } else {
-                        c = convToUnicode((byte)(b1 | 0x80),
-                                           (byte)(b2 | 0x80),
-                                           table);
-                    }
-                    if (c == replacement().charAt(0)
-                        //to keep the compatibility with b2cX11CNS11643
-                        /*|| c == '\u0000'*/) {
-                        return CoderResult.unmappableForLength(2);
-                    }
-                    if (dl - dp < 1)
-                        return CoderResult.OVERFLOW;
-                    da[dp++] = c;
-                    sp +=2;
-                }
-                return CoderResult.UNDERFLOW;
-            } finally {
-                src.position(sp - src.arrayOffset());
-                dst.position(dp - dst.arrayOffset());
-            }
-        }
-    }
-}
--- a/jdk/test/sun/nio/cs/X11CNS11643P1.java	Thu May 14 20:14:44 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,28 +0,0 @@
-/*
- * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-public class X11CNS11643P1 extends X11CNS11643 {
-    public X11CNS11643P1() {
-        super(1, "X11CNS11643P1");
-    }
-}
--- a/jdk/test/sun/nio/cs/X11CNS11643P2.java	Thu May 14 20:14:44 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,28 +0,0 @@
-/*
- * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-public class X11CNS11643P2 extends X11CNS11643 {
-    public X11CNS11643P2() {
-        super(2, "X11CNS11643P2");
-    }
-}
--- a/jdk/test/sun/nio/cs/X11CNS11643P3.java	Thu May 14 20:14:44 2015 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,28 +0,0 @@
-/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-
-public class X11CNS11643P3 extends X11CNS11643 {
-    public X11CNS11643P3() {
-        super(3, "X11CNS11643P3");
-    }
-}
--- a/jdk/test/sun/security/pkcs11/rsa/TestKeyPairGenerator.java	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/sun/security/pkcs11/rsa/TestKeyPairGenerator.java	Wed Jul 05 20:33:35 2017 +0200
@@ -40,6 +40,7 @@
 import java.security.*;
 import java.security.interfaces.*;
 import java.security.spec.*;
+import jdk.testlibrary.RandomFactory;
 
 public class TestKeyPairGenerator extends PKCS11Test {
 
--- a/jdk/test/sun/security/tools/keytool/i18n.sh	Thu May 14 20:14:44 2015 -0700
+++ b/jdk/test/sun/security/tools/keytool/i18n.sh	Wed Jul 05 20:33:35 2017 +0200
@@ -22,7 +22,7 @@
 #
 
 # @test
-# @bug 4348369
+# @bug 4348369 8076069
 # @summary keytool not i18n compliant
 # @author charlie lai
 # @run shell/manual i18n.sh
@@ -44,7 +44,7 @@
 # set platform-dependent variables
 OS=`uname -s`
 case "$OS" in
-  SunOS | Linux )
+  SunOS | Linux | Darwin )
     NULL=/dev/null
     PS=":"
     FS="/"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/tools/launcher/TestMainWithoutEnclosing.java	Wed Jul 05 20:33:35 2017 +0200
@@ -0,0 +1,73 @@
+/*
+ * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @test
+ * @bug 8076264
+ * @summary Launching app shouldn't require enclosing class for the main class.
+ * @compile TestMainWithoutEnclosing.java
+ * @run main TestMainWithoutEnclosing
+ */
+public final class TestMainWithoutEnclosing extends TestHelper {
+
+    static final String EnclosingName = "Enclosing";
+
+    static void createJarFile(File testJar) throws IOException {
+        List<String> scratch = new ArrayList<>();
+        scratch.add("public class Enclosing {");
+        scratch.add("    public static final class Main {");
+        scratch.add("        public static void main(String... args) {");
+        scratch.add("            System.out.println(\"Hello World\");");
+        scratch.add("        }");
+        scratch.add("    }");
+        scratch.add("}");
+        File enclosingFile = new File(EnclosingName + ".java");
+        createFile(enclosingFile, scratch);
+        compile(enclosingFile.getName());
+        // avoid side effects remove the Enclosing class
+        getClassFile(enclosingFile).delete();
+        createJar("cvfe", testJar.getName(), EnclosingName + "$Main",
+                EnclosingName + "$Main" + ".class");
+        // remove extraneous files in the current directory
+        new File(EnclosingName + "$Main" + ".class").delete();
+    }
+
+    public static void main(String... args) throws IOException {
+        File testJarFile = new File("test.jar");
+        createJarFile(testJarFile);
+        TestResult tr = doExec(javaCmd, "-jar", testJarFile.getName());
+        if (!tr.isOK()) {
+            System.out.println(tr);
+            throw new RuntimeException("test returned non-positive value");
+        }
+        if (!tr.contains("Hello World")) {
+            System.out.println(tr);
+            throw new RuntimeException("expected output not found");
+        }
+    }
+}
--- a/make/CompileJavaModules.gmk	Thu May 14 20:14:44 2015 -0700
+++ b/make/CompileJavaModules.gmk	Wed Jul 05 20:33:35 2017 +0200
@@ -89,7 +89,7 @@
 
 ################################################################################
 
-java.desktop_ADD_JAVAC_FLAGS := -Xdoclint:all/protected,-missing,-reference '-Xdoclint/package:java.*,javax.*'
+java.desktop_ADD_JAVAC_FLAGS := -Xdoclint:all/protected,-reference '-Xdoclint/package:java.*,javax.*'
 java.desktop_COPY := .gif .png .wav .txt .xml .css .pf
 java.desktop_CLEAN := iio-plugin.properties cursors.properties
 
@@ -152,7 +152,6 @@
       $(wildcard $(JDK_TOPDIR)/src/java.desktop/unix/classes/sun/java2d/*.java) \
       $(wildcard $(JDK_TOPDIR)/src/java.desktop/unix/classes/sun/java2d/opengl/*.java) \
       $(wildcard $(JDK_TOPDIR)/src/java.desktop/unix/classes/sun/awt/*.java) \
-      $(wildcard $(JDK_TOPDIR)/src/java.desktop/unix/classes/sun/awt/motif/*.java) \
       $(wildcard $(JDK_TOPDIR)/src/java.desktop/unix/classes/sun/font/*.java) \
       #
 else
--- a/make/Init.gmk	Thu May 14 20:14:44 2015 -0700
+++ b/make/Init.gmk	Wed Jul 05 20:33:35 2017 +0200
@@ -267,7 +267,9 @@
 	    ( cd $(TOPDIR) && \
 	        $(BUILD_LOG_WRAPPER) $(MAKE) $(MAKE_ARGS) $(OUTPUT_SYNC_FLAG) \
 	        -j $(JOBS) -f make/Main.gmk $(USER_MAKE_VARS) \
-	        $(PARALLEL_TARGETS) )
+	        $(PARALLEL_TARGETS) || \
+	        ( exitcode=$$? && $(BUILD_LOG_WRAPPER) $(PRINTF) "\nERROR: Build failed for $(TARGET_DESCRIPTION) (exit code $$exitcode) \n" && \
+	        $(PRINTF) "Hint: If caused by a warning, try configure --disable-warnings-as-errors \n\n" && exit $$exitcode ) )
 	    $(call CleanupSmartJavac)
 	    $(call StopGlobalTimer)
 	    $(call ReportBuildTimes)
--- a/make/Javadoc.gmk	Thu May 14 20:14:44 2015 -0700
+++ b/make/Javadoc.gmk	Wed Jul 05 20:33:35 2017 +0200
@@ -1141,7 +1141,7 @@
 NASHORNAPI_HEADER := <strong>Nashorn API</strong>
 NASHORNAPI_BOTTOM := $(call CommonBottom,$(NASHORNAPI_FIRST_COPYRIGHT_YEAR))
 NASHORNAPI_GROUPNAME := Packages
-NASHORNAPI_REGEXP := jdk.nashorn.api.scripting.*
+NASHORNAPI_REGEXP := jdk.nashorn.api.*
 # NASHORNAPI_PKGS is located in NON_CORE_PKGS.gmk
 
 NASHORNAPI_INDEX_HTML = $(NASHORNAPI_DOCDIR)/index.html
--- a/make/common/NON_CORE_PKGS.gmk	Thu May 14 20:14:44 2015 -0700
+++ b/make/common/NON_CORE_PKGS.gmk	Wed Jul 05 20:33:35 2017 +0200
@@ -82,7 +82,8 @@
     com.sun.source.util \
     jdk
 
-NASHORNAPI_PKGS = jdk.nashorn.api.scripting
+NASHORNAPI_PKGS = jdk.nashorn.api.scripting \
+    jdk.nashorn.api.tree
 
 SMARTCARDIO_PKGS = javax.smartcardio
 
--- a/make/common/NativeCompilation.gmk	Thu May 14 20:14:44 2015 -0700
+++ b/make/common/NativeCompilation.gmk	Wed Jul 05 20:33:35 2017 +0200
@@ -487,6 +487,21 @@
     $1_EXTRA_CXXFLAGS += $$(addprefix $(DISABLE_WARNING_PREFIX), $$($1_DISABLED_WARNINGS_$(TOOLCHAIN_TYPE)))
   endif
 
+  # Check if warnings should be considered errors.
+  # Pick first binary and toolchain specific, then binary specific, then general setting.
+  ifeq ($$($1_WARNINGS_AS_ERRORS_$(TOOLCHAIN_TYPE)),)
+    ifeq ($$($1_WARNINGS_AS_ERRORS),)
+      $1_WARNINGS_AS_ERRORS_$(TOOLCHAIN_TYPE) := $$(WARNINGS_AS_ERRORS)
+    else
+      $1_WARNINGS_AS_ERRORS_$(TOOLCHAIN_TYPE) := $$($1_WARNINGS_AS_ERRORS)
+    endif
+  endif
+
+  ifeq ($$($1_WARNINGS_AS_ERRORS_$(TOOLCHAIN_TYPE)), true)
+    $1_EXTRA_CFLAGS += $(CFLAGS_WARNINGS_ARE_ERRORS)
+    $1_EXTRA_CXXFLAGS += $(CFLAGS_WARNINGS_ARE_ERRORS)
+  endif
+
   ifeq (NONE, $$($1_OPTIMIZATION))
     $1_EXTRA_CFLAGS += $(C_O_FLAG_NONE)
     $1_EXTRA_CXXFLAGS += $(CXX_O_FLAG_NONE)
--- a/modules.xml	Thu May 14 20:14:44 2015 -0700
+++ b/modules.xml	Wed Jul 05 20:33:35 2017 +0200
@@ -616,7 +616,6 @@
     <depend>java.prefs</depend>
     <depend re-exports="true">java.xml</depend>
     <depend re-exports="true">java.datatransfer</depend>
-    <depend>jdk.charsets</depend>
     <export>
       <name>java.applet</name>
     </export>
@@ -1502,10 +1501,6 @@
   <module>
     <name>jdk.charsets</name>
     <depend>java.base</depend>
-    <export>
-      <name>sun.nio.cs.ext</name>
-      <to>java.desktop</to>
-    </export>
   </module>
   <module>
     <name>jdk.compiler</name>