Index: EcnlProtoTool/trunk/onigmo-6.1.3/.cproject
===================================================================
--- EcnlProtoTool/trunk/onigmo-5.15.0/.cproject	(revision 321)
+++ EcnlProtoTool/trunk/onigmo-6.1.3/.cproject	(revision 331)
@@ -20,5 +20,5 @@
 							<builder buildPath="${workspace_loc:/onigmo}/Debug" id="com.renesas.cdt.rz.library.project.debug.win32.builder.Id.648387239" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="com.renesas.cdt.rz.library.project.debug.win32.builder.Id"/>
 							<tool id="com.renesas.cdt.rz.libraryProject.debug.win32.tool.compiler.Id.1403906573" name="Compiler" superClass="com.renesas.cdt.rz.libraryProject.debug.win32.tool.compiler.Id">
-								<option defaultValue="true" id="com.renesas.cdt.core.Compiler.option.misc2.893295126" name="æ¨æºã·ã¹ãã ã»ãã£ã¬ã¯ããªã¼ã§ãããã¼ã»ãã¡ã¤ã«ãæ¤ç´¢ããªã (-nostdinc)" superClass="com.renesas.cdt.core.Compiler.option.misc2" value="false" valueType="boolean"/>
+								<option defaultValue="true" id="com.renesas.cdt.core.Compiler.option.misc2.893295126" name="æ¨æºã·ã¹ãã ã»ãã£ã¬ã¯ããªã¼ã§ãããã¼ã»ãã¡ã¤ã«ãæ¤ç´¢ããªã (-nostdinc)" superClass="com.renesas.cdt.core.Compiler.option.misc2" value="true" valueType="boolean"/>
 								<option id="com.renesas.cdt.rz.Debug.Compiler.option.library.dataEndian.830168116" name="ã¨ã³ãã£ã¢ã³" superClass="com.renesas.cdt.rz.Debug.Compiler.option.library.dataEndian" value="Little-endian" valueType="enumerated"/>
 								<option id="com.renesas.cdt.rz.Debug.Compiler.option.library.instructionset.181932475" name="å½ä»¤ã»ãã" superClass="com.renesas.cdt.rz.Debug.Compiler.option.library.instructionset" value="ARM" valueType="enumerated"/>
@@ -30,10 +30,12 @@
 								<option id="com.renesas.cdt.rz.Debug.Compiler.option.library.architecture.2113164712" name="ã¢ã¼ã­ãã¯ãã£ã¼" superClass="com.renesas.cdt.rz.Debug.Compiler.option.library.architecture" value="armv7-a" valueType="enumerated"/>
 								<option id="com.renesas.cdt.rz.Debug.Compiler.option.library.cpuType.1970460770" name="CPU ã¿ã¤ã" superClass="com.renesas.cdt.rz.Debug.Compiler.option.library.cpuType" value="cortex-a9" valueType="enumerated"/>
-								<option id="com.renesas.cdt.core.Compiler.option.stackSizeInDecimal.79407894" name="Decimal representation of '-Wsatck-usage'" superClass="com.renesas.cdt.core.Compiler.option.stackSizeInDecimal" value="256" valueType="string"/>
+								<option id="com.renesas.cdt.core.Compiler.option.stackSizeInDecimal.79407894" name="Decimal representation of '-Wstack-usage'" superClass="com.renesas.cdt.core.Compiler.option.stackSizeInDecimal" value="256" valueType="string"/>
 								<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.renesas.cdt.rz.Debug.Compiler.option.library.macroDefines.614908404" name="ãã¯ã­å®ç¾©" superClass="com.renesas.cdt.rz.Debug.Compiler.option.library.macroDefines" valueType="definedSymbols">
 									<listOptionValue builtIn="false" value="ONIG_EXTERN=extern"/>
 								</option>
 								<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.renesas.cdt.core.Compiler.option.includeFileDir.46425275" name="ã¤ã³ã¯ã«ã¼ãã»ãã¡ã¤ã«ã»ãã£ã¬ã¯ããªã¼" superClass="com.renesas.cdt.core.Compiler.option.includeFileDir" valueType="includePath">
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/musl-1.1.18/include}&quot;"/>
 									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/src}&quot;"/>
+									<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/src/enc/unicode}&quot;"/>
 								</option>
 								<inputType id="%Base.Compiler.C.InputType.Id.884982235" name="C å
Index: EcnlProtoTool/trunk/onigmo-6.1.3/.info
===================================================================
--- EcnlProtoTool/trunk/onigmo-5.15.0/.info	(revision 321)
+++ EcnlProtoTool/trunk/onigmo-6.1.3/.info	(revision 331)
@@ -4,4 +4,4 @@
 GCC_STRING=5.2-GNUARM-NONE_v16.01
 VERSION_IDE=
-E2STUDIO_VERSION=5.3.1.002
+E2STUDIO_VERSION=5.4.0.018
 ACTIVE_CONFIGURATION=Debug
Index: EcnlProtoTool/trunk/onigmo-6.1.3/.project
===================================================================
--- EcnlProtoTool/trunk/onigmo-5.15.0/.project	(revision 321)
+++ EcnlProtoTool/trunk/onigmo-6.1.3/.project	(revision 331)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <projectDescription>
-	<name>onigmo-5.15.0</name>
+	<name>onigmo-6.1.3</name>
 	<comment></comment>
 	<projects>
Index: EcnlProtoTool/trunk/onigmo-6.1.3/README
===================================================================
--- EcnlProtoTool/trunk/onigmo-5.15.0/README	(revision 321)
+++ EcnlProtoTool/trunk/onigmo-6.1.3/README	(revision 331)
@@ -1,3 +1,3 @@
-README  2014/07/18
+README  2016/11/30
 
 Onigmo (Oniguruma-mod)  --  (C) K.Takata <kentkt AT csc DOT jp>
@@ -6,7 +6,9 @@
 
 Onigmo is a regular expressions library forked from Oniguruma.
-Some of new features introduced in Perl 5.10+ can be used.
-
-Some patches are merged from Ruby 2.x.
+It focuses to support new expressions like `\K`, `\R`, `(?(cond)yes|no)`
+and etc. which are supported in Perl 5.10+.
+
+Since Onigmo is used as the default regexp library of Ruby 2.0 or later,
+many patches are backported from Ruby 2.x.
 
 See also the Wiki page:
@@ -24,5 +26,5 @@
 
   Encoding:
-    CP932
+    CP932, CP1250, CP1251, CP1252, CP1253, CP1254, CP1257
 
   Syntax:
@@ -31,11 +33,11 @@
 
 New Source Files:
-  enc/cp932.c                   CP932 encoding.
   enc/jis/props.h               JIS character properties data.
   enc/jis/props.kwd             JIS character properties data.
   enc/unicode/casefold.h        Unicode case folding data.
   enc/unicode/name2ctype.h      Unicode properties data.
-
-  onig.py                       onig.dll/libonig.so loader.
+  enc/windows_*.c               CP* encoding
+
+  onigmo.py                     onigmo.dll/libonigmo.so loader.
   testpy.py                     test program.
 
@@ -47,6 +49,6 @@
 
   win32/Makefile.mingw          Makefile for Win32 (MinGW)
-  win32/makedef.py              creates onig.def.
-  win32/onig.rc                 resource file for onig.dll.
+  win32/makedef.py              creates onigmo.def.
+  win32/onigmo.rc               resource file for onigmo.dll.
 
 
Index: EcnlProtoTool/trunk/onigmo-6.1.3/src/config.h
===================================================================
--- EcnlProtoTool/trunk/onigmo-5.15.0/src/config.h	(revision 321)
+++ EcnlProtoTool/trunk/onigmo-6.1.3/src/config.h	(revision 331)
@@ -1,3 +1,3 @@
-/* config.h.in.  Generated from configure.in by autoheader.  */
+/* config.h.in.  Generated from configure.ac by autoheader.  */
 
 /* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP
@@ -22,18 +22,6 @@
 #define HAVE_INTTYPES_H
 
-/* Define to 1 if you have the `pthread' library (-lpthread). */
-#define HAVE_LIBPTHREAD
-
 /* Define to 1 if you have the <memory.h> header file. */
 #define HAVE_MEMORY_H
-
-/* Define if compilerr supports prototypes */
-#define HAVE_PROTOTYPES
-
-/* Define to 1 if you have the <pthread.h> header file. */
-#define HAVE_PTHREAD_H
-
-/* Define if compiler supports stdarg prototypes */
-#define HAVE_STDARG_PROTOTYPES
 
 /* Define to 1 if you have the <stdint.h> header file. */
@@ -93,12 +81,17 @@
 /* The size of `int', as computed by sizeof. */
 #undef SIZEOF_INT
-#define SIZEOF_INT sizeof(int)
+#define SIZEOF_INT 4
 
 /* The size of `long', as computed by sizeof. */
 #undef SIZEOF_LONG
-#define SIZEOF_LONG sizeof(long)
+#define SIZEOF_LONG 4
 
 /* The size of `short', as computed by sizeof. */
 #undef SIZEOF_SHORT
+#define SIZEOF_SHORT 2
+
+/* The size of `void*', as computed by sizeof. */
+#undef SIZEOF_VOIDP
+#define SIZEOF_VOIDP 4
 
 /* If using the C implementation of alloca, define if you know the
@@ -122,10 +115,4 @@
 #undef USE_CRNL_AS_LINE_TERMINATOR
 
-/* Define if enable the default multithread system */
-#undef USE_DEFAULT_MULTI_THREAD_SYSTEM
-
-/* Define if enbale multithread support */
-#undef USE_MULTI_THREAD_SYSTEM
-
 /* Version number of package */
 #undef VERSION
Index: EcnlProtoTool/trunk/onigmo-6.1.3/src/enc/ascii.c
===================================================================
--- EcnlProtoTool/trunk/onigmo-5.15.0/src/enc/ascii.c	(revision 321)
+++ EcnlProtoTool/trunk/onigmo-6.1.3/src/enc/ascii.c	(revision 331)
@@ -30,8 +30,15 @@
 
 #include "regenc.h"
+#ifdef RUBY
+# include "encindex.h"
+#endif
 
-OnigEncodingType OnigEncodingASCII = {
+#ifndef ENCINDEX_ASCII
+# define ENCINDEX_ASCII 0
+#endif
+
+OnigEncodingDefine(ascii, ASCII) = {
   onigenc_single_byte_mbc_enc_len,
-  "US-ASCII",  /* name */
+  "ASCII-8BIT",/* name */
   1,           /* max byte length */
   1,           /* min byte length */
@@ -48,4 +55,50 @@
   onigenc_single_byte_left_adjust_char_head,
   onigenc_always_true_is_allowed_reverse_match,
+  onigenc_single_byte_ascii_only_case_map,
+  ENCINDEX_ASCII,
   ONIGENC_FLAG_NONE,
 };
+ENC_ALIAS("BINARY", "ASCII-8BIT")
+ENC_REPLICATE("IBM437", "ASCII-8BIT")
+ENC_ALIAS("CP437", "IBM437")
+ENC_REPLICATE("IBM737", "ASCII-8BIT")
+ENC_ALIAS("CP737", "IBM737")
+ENC_REPLICATE("IBM775", "ASCII-8BIT")
+ENC_ALIAS("CP775", "IBM775")
+ENC_REPLICATE("CP850", "ASCII-8BIT")
+ENC_ALIAS("IBM850", "CP850")
+ENC_REPLICATE("IBM852", "ASCII-8BIT")
+ENC_REPLICATE("CP852", "IBM852")
+ENC_REPLICATE("IBM855", "ASCII-8BIT")
+ENC_REPLICATE("CP855", "IBM855")
+ENC_REPLICATE("IBM857", "ASCII-8BIT")
+ENC_ALIAS("CP857", "IBM857")
+ENC_REPLICATE("IBM860", "ASCII-8BIT")
+ENC_ALIAS("CP860", "IBM860")
+ENC_REPLICATE("IBM861", "ASCII-8BIT")
+ENC_ALIAS("CP861", "IBM861")
+ENC_REPLICATE("IBM862", "ASCII-8BIT")
+ENC_ALIAS("CP862", "IBM862")
+ENC_REPLICATE("IBM863", "ASCII-8BIT")
+ENC_ALIAS("CP863", "IBM863")
+ENC_REPLICATE("IBM864", "ASCII-8BIT")
+ENC_ALIAS("CP864", "IBM864")
+ENC_REPLICATE("IBM865", "ASCII-8BIT")
+ENC_ALIAS("CP865", "IBM865")
+ENC_REPLICATE("IBM866", "ASCII-8BIT")
+ENC_ALIAS("CP866", "IBM866")
+ENC_REPLICATE("IBM869", "ASCII-8BIT")
+ENC_ALIAS("CP869", "IBM869")
+ENC_REPLICATE("Windows-1258", "ASCII-8BIT")
+ENC_ALIAS("CP1258", "Windows-1258")
+ENC_REPLICATE("GB1988", "ASCII-8BIT")
+ENC_REPLICATE("macCentEuro", "ASCII-8BIT")
+ENC_REPLICATE("macCroatian", "ASCII-8BIT")
+ENC_REPLICATE("macCyrillic", "ASCII-8BIT")
+ENC_REPLICATE("macGreek", "ASCII-8BIT")
+ENC_REPLICATE("macIceland", "ASCII-8BIT")
+ENC_REPLICATE("macRoman", "ASCII-8BIT")
+ENC_REPLICATE("macRomania", "ASCII-8BIT")
+ENC_REPLICATE("macThai", "ASCII-8BIT")
+ENC_REPLICATE("macTurkish", "ASCII-8BIT")
+ENC_REPLICATE("macUkraine", "ASCII-8BIT")
Index: EcnlProtoTool/trunk/onigmo-6.1.3/src/enc/unicode.c
===================================================================
--- EcnlProtoTool/trunk/onigmo-5.15.0/src/enc/unicode.c	(revision 321)
+++ EcnlProtoTool/trunk/onigmo-6.1.3/src/enc/unicode.c	(revision 331)
@@ -138,12 +138,47 @@
 }
 
-#include "enc/unicode/casefold.h"
-
-#include "enc/unicode/name2ctype.h"
+/* macros related to ONIGENC_CASE flags */
+/* defined here because not used in other files */
+#define ONIGENC_CASE_SPECIALS       (ONIGENC_CASE_TITLECASE | ONIGENC_CASE_IS_TITLECASE | ONIGENC_CASE_UP_SPECIAL | ONIGENC_CASE_DOWN_SPECIAL)
+
+/* macros for length in CaseMappingSpecials array in enc/unicode/casefold.h */
+#define SpecialsLengthOffset 25  /* needs to be higher than the 22 bits used for Unicode codepoints */
+#define SpecialsLengthExtract(n)    ((n) >> SpecialsLengthOffset)
+#define SpecialsCodepointExtract(n) ((n) & ((1 << SpecialsLengthOffset) - 1))
+#define SpecialsLengthEncode(n)     ((n) << SpecialsLengthOffset)
+
+#define OnigSpecialIndexMask        (((1 << OnigSpecialIndexWidth) - 1) << OnigSpecialIndexShift)
+#define OnigSpecialIndexEncode(n)   ((n) << OnigSpecialIndexShift)
+#define OnigSpecialIndexDecode(n)   (((n) & OnigSpecialIndexMask) >> OnigSpecialIndexShift)
+
+/* macros to shorten "enc/unicode/casefold.h", undefined immediately after including the file */
+#define U ONIGENC_CASE_UPCASE
+#define D ONIGENC_CASE_DOWNCASE
+#define F ONIGENC_CASE_FOLD
+#define ST ONIGENC_CASE_TITLECASE
+#define SU ONIGENC_CASE_UP_SPECIAL
+#define SL ONIGENC_CASE_DOWN_SPECIAL
+#define IT ONIGENC_CASE_IS_TITLECASE
+#define I(n) OnigSpecialIndexEncode(n)
+#define L(n) SpecialsLengthEncode(n)
+
+#include "casefold.h"
+
+#undef U
+#undef D
+#undef F
+#undef ST
+#undef SU
+#undef SL
+#undef IT
+#undef I
+#undef L
+
+#include "name2ctype.h"
 
 #define CODE_RANGES_NUM numberof(CodeRanges)
 
 extern int
-onigenc_unicode_is_code_ctype(OnigCodePoint code, unsigned int ctype)
+onigenc_unicode_is_code_ctype(OnigCodePoint code, unsigned int ctype, OnigEncoding enc ARG_UNUSED)
 {
   if (
@@ -177,5 +212,6 @@
 extern int
 onigenc_utf16_32_get_ctype_code_range(OnigCtype ctype, OnigCodePoint* sb_out,
-                                      const OnigCodePoint* ranges[])
+                                      const OnigCodePoint* ranges[],
+				      OnigEncoding enc ARG_UNUSED)
 {
   *sb_out = 0x00;
@@ -183,19 +219,17 @@
 }
 
-#include "st.h"
-
 #define PROPERTY_NAME_MAX_SIZE    (MAX_WORD_LENGTH + 1)
 
 extern int
-onigenc_unicode_property_name_to_ctype(OnigEncoding enc, UChar* name, UChar* end)
+onigenc_unicode_property_name_to_ctype(OnigEncoding enc, const UChar* name, const UChar* end)
 {
   int len;
   int ctype;
   UChar buf[PROPERTY_NAME_MAX_SIZE];
-  UChar *p;
+  const UChar *p;
   OnigCodePoint code;
 
   len = 0;
-  for (p = name; p < end; p += enclen(enc, p)) {
+  for (p = name; p < end; p += enclen(enc, p, end)) {
     code = ONIGENC_MBC_TO_CODE(enc, p, end);
     if (code == ' ' || code == '-' || code == '_')
@@ -223,4 +257,10 @@
 #define onigenc_unicode_unfold3_lookup onigenc_unicode_CaseUnfold_13_lookup
 
+enum {
+  I_WITH_DOT_ABOVE = 0x0130,
+  DOTLESS_i = 0x0131,
+  DOT_ABOVE = 0x0307
+};
+
 extern int
 onigenc_unicode_mbc_case_fold(OnigEncoding enc,
@@ -234,14 +274,14 @@
 
   code = ONIGENC_MBC_TO_CODE(enc, p, end);
-  len = enclen(enc, p);
+  len = enclen(enc, p, end);
   *pp += len;
 
 #ifdef USE_UNICODE_CASE_FOLD_TURKISH_AZERI
   if ((flag & ONIGENC_CASE_FOLD_TURKISH_AZERI) != 0) {
-    if (code == 0x0049) {
-      return ONIGENC_CODE_TO_MBC(enc, 0x0131, fold);
-    }
-    else if (code == 0x0130) {
-      return ONIGENC_CODE_TO_MBC(enc, 0x0069, fold);
+    if (code == 'I') {
+      return ONIGENC_CODE_TO_MBC(enc, DOTLESS_i, fold);
+    }
+    else if (code == I_WITH_DOT_ABOVE) {
+      return ONIGENC_CODE_TO_MBC(enc, 'i', fold);
     }
   }
@@ -249,5 +289,5 @@
 
   if ((to = onigenc_unicode_fold_lookup(code)) != 0) {
-    if (to->n == 1) {
+    if (OnigCodePointCount(to->n) == 1) {
       return ONIGENC_CODE_TO_MBC(enc, to->code[0], fold);
     }
@@ -260,5 +300,5 @@
     {
       rlen = 0;
-      for (i = 0; i < to->n; i++) {
+      for (i = 0; i < OnigCodePointCount(to->n); i++) {
 	len = ONIGENC_CODE_TO_MBC(enc, to->code[i], fold);
 	fold += len;
@@ -277,5 +317,6 @@
 extern int
 onigenc_unicode_apply_all_case_fold(OnigCaseFoldType flag,
-				    OnigApplyAllCaseFoldFunc f, void* arg)
+				    OnigApplyAllCaseFoldFunc f, void* arg,
+				    OnigEncoding enc ARG_UNUSED)
 {
   const CaseUnfold_11_Type* p11;
@@ -285,5 +326,5 @@
   for (i = 0; i < numberof(CaseUnfold_11); i++) {
     p11 = &CaseUnfold_11[i];
-    for (j = 0; j < p11->to.n; j++) {
+    for (j = 0; j < OnigCodePointCount(p11->to.n); j++) {
       code = p11->from;
       r = (*f)(p11->to.code[j], &code, 1, arg);
@@ -306,16 +347,16 @@
 #ifdef USE_UNICODE_CASE_FOLD_TURKISH_AZERI
   if ((flag & ONIGENC_CASE_FOLD_TURKISH_AZERI) != 0) {
-    code = 0x0131;
-    r = (*f)(0x0049, &code, 1, arg);
+    code = DOTLESS_i;
+    r = (*f)('I', &code, 1, arg);
     if (r != 0) return r;
-    code = 0x0049;
-    r = (*f)(0x0131, &code, 1, arg);
+    code = 'I';
+    r = (*f)(DOTLESS_i, &code, 1, arg);
     if (r != 0) return r;
 
-    code = 0x0130;
-    r = (*f)(0x0069, &code, 1, arg);
+    code = I_WITH_DOT_ABOVE;
+    r = (*f)('i', &code, 1, arg);
     if (r != 0) return r;
-    code = 0x0069;
-    r = (*f)(0x0130, &code, 1, arg);
+    code = 'i';
+    r = (*f)(I_WITH_DOT_ABOVE, &code, 1, arg);
     if (r != 0) return r;
   }
@@ -324,5 +365,5 @@
     for (i = 0; i < numberof(CaseUnfold_11_Locale); i++) {
       p11 = &CaseUnfold_11_Locale[i];
-      for (j = 0; j < p11->to.n; j++) {
+      for (j = 0; j < OnigCodePointCount(p11->to.n); j++) {
 	code = p11->from;
 	r = (*f)(p11->to.code[j], &code, 1, arg);
@@ -350,10 +391,10 @@
   if ((flag & INTERNAL_ONIGENC_CASE_FOLD_MULTI_CHAR) != 0) {
     for (i = 0; i < numberof(CaseUnfold_12); i++) {
-      for (j = 0; j < CaseUnfold_12[i].to.n; j++) {
+      for (j = 0; j < OnigCodePointCount(CaseUnfold_12[i].to.n); j++) {
 	r = (*f)(CaseUnfold_12[i].to.code[j],
 		 (OnigCodePoint* )CaseUnfold_12[i].from, 2, arg);
 	if (r != 0) return r;
 
-	for (k = 0; k < CaseUnfold_12[i].to.n; k++) {
+	for (k = 0; k < OnigCodePointCount(CaseUnfold_12[i].to.n); k++) {
 	  if (k == j) continue;
 
@@ -369,10 +410,10 @@
 #endif
       for (i = 0; i < numberof(CaseUnfold_12_Locale); i++) {
-	for (j = 0; j < CaseUnfold_12_Locale[i].to.n; j++) {
+	for (j = 0; j < OnigCodePointCount(CaseUnfold_12_Locale[i].to.n); j++) {
 	  r = (*f)(CaseUnfold_12_Locale[i].to.code[j],
 		   (OnigCodePoint* )CaseUnfold_12_Locale[i].from, 2, arg);
 	  if (r != 0) return r;
 
-	  for (k = 0; k < CaseUnfold_12_Locale[i].to.n; k++) {
+	  for (k = 0; k < OnigCodePointCount(CaseUnfold_12_Locale[i].to.n); k++) {
 	    if (k == j) continue;
 
@@ -389,10 +430,10 @@
 
     for (i = 0; i < numberof(CaseUnfold_13); i++) {
-      for (j = 0; j < CaseUnfold_13[i].to.n; j++) {
+      for (j = 0; j < OnigCodePointCount(CaseUnfold_13[i].to.n); j++) {
 	r = (*f)(CaseUnfold_13[i].to.code[j],
 		 (OnigCodePoint* )CaseUnfold_13[i].from, 3, arg);
 	if (r != 0) return r;
 
-	for (k = 0; k < CaseUnfold_13[i].to.n; k++) {
+	for (k = 0; k < OnigCodePointCount(CaseUnfold_13[i].to.n); k++) {
 	  if (k == j) continue;
 
@@ -407,4 +448,6 @@
   return 0;
 }
+
+#define CodePointListValidP(x) (OnigCodePointCount((x)->n) <= numberof((x)->code))
 
 extern int
@@ -421,30 +464,28 @@
 
   code = ONIGENC_MBC_TO_CODE(enc, p, end);
-  len = enclen(enc, p);
+  len = enclen(enc, p, end);
 
 #ifdef USE_UNICODE_CASE_FOLD_TURKISH_AZERI
   if ((flag & ONIGENC_CASE_FOLD_TURKISH_AZERI) != 0) {
-    if (code == 0x0049) {
+    switch (code) {
+    case 'I':
       items[0].byte_len = len;
       items[0].code_len = 1;
-      items[0].code[0]  = 0x0131;
+      items[0].code[0]  = DOTLESS_i;
       return 1;
-    }
-    else if (code == 0x0130) {
+    case I_WITH_DOT_ABOVE:
       items[0].byte_len = len;
       items[0].code_len = 1;
-      items[0].code[0]  = 0x0069;
+      items[0].code[0]  = 'i';
       return 1;
-    }
-    else if (code == 0x0131) {
+    case DOTLESS_i:
       items[0].byte_len = len;
       items[0].code_len = 1;
-      items[0].code[0]  = 0x0049;
+      items[0].code[0]  = 'I';
       return 1;
-    }
-    else if (code == 0x0069) {
+    case 'i':
       items[0].byte_len = len;
       items[0].code_len = 1;
-      items[0].code[0]  = 0x0130;
+      items[0].code[0]  = I_WITH_DOT_ABOVE;
       return 1;
     }
@@ -453,5 +494,5 @@
 
   if ((to = onigenc_unicode_fold_lookup(code)) != 0) {
-    if (to->n == 1) {
+    if (OnigCodePointCount(to->n) == 1) {
       OnigCodePoint orig_code = code;
 
@@ -462,6 +503,7 @@
 
       code = to->code[0];
-      if ((to = onigenc_unicode_unfold1_lookup(code)) != 0) {
-	for (i = 0; i < to->n; i++) {
+      if ((to = onigenc_unicode_unfold1_lookup(code)) != 0 &&
+	  CodePointListValidP(to)) {
+	for (i = 0; i < OnigCodePointCount(to->n); i++) {
 	  if (to->code[i] != orig_code) {
 	    items[n].byte_len = len;
@@ -477,11 +519,11 @@
       int fn, ncs[3];
 
-      for (fn = 0; fn < to->n; fn++) {
+      for (fn = 0; fn < OnigCodePointCount(to->n); fn++) {
 	cs[fn][0] = to->code[fn];
 	if ((z3 = onigenc_unicode_unfold1_lookup(cs[fn][0])) != 0) {
-	  for (i = 0; i < z3->n; i++) {
+	  for (i = 0; i < OnigCodePointCount(z3->n); i++) {
 	    cs[fn][i+1] = z3->code[i];
 	  }
-	  ncs[fn] = z3->n + 1;
+	  ncs[fn] = OnigCodePointCount(z3->n) + 1;
 	}
 	else
@@ -500,6 +542,7 @@
 	}
 
-	if ((z2 = onigenc_unicode_unfold2_lookup(to->code)) != 0) {
-	  for (i = 0; i < z2->n; i++) {
+	if ((z2 = onigenc_unicode_unfold2_lookup(to->code)) != 0 &&
+	    CodePointListValidP(z2)) {
+	  for (i = 0; i < OnigCodePointCount(z2->n); i++) {
 	    if (z2->code[i] == code) continue;
 
@@ -525,6 +568,7 @@
 	}
 
-	if ((z2 = onigenc_unicode_unfold3_lookup(to->code)) != 0) {
-	  for (i = 0; i < z2->n; i++) {
+	if ((z2 = onigenc_unicode_unfold3_lookup(to->code)) != 0 &&
+	    CodePointListValidP(z2)) {
+	  for (i = 0; i < OnigCodePointCount(z2->n); i++) {
 	    if (z2->code[i] == code) continue;
 
@@ -542,6 +586,7 @@
   }
   else {
-    if ((to = onigenc_unicode_unfold1_lookup(code)) != 0) {
-      for (i = 0; i < to->n; i++) {
+    if ((to = onigenc_unicode_unfold1_lookup(code)) != 0 &&
+	CodePointListValidP(to)) {
+      for (i = 0; i < OnigCodePointCount(to->n); i++) {
 	items[n].byte_len = len;
 	items[n].code_len = 1;
@@ -561,5 +606,5 @@
       code = ONIGENC_MBC_TO_CODE(enc, p, end);
       if ((to = onigenc_unicode_fold_lookup(code)) != 0
-	  && to->n == 1) {
+	  && OnigCodePointCount(to->n) == 1) {
 	codes[1] = to->code[0];
       }
@@ -567,8 +612,9 @@
 	codes[1] = code;
 
-      clen = enclen(enc, p);
+      clen = enclen(enc, p, end);
       len += clen;
-      if ((z2 = onigenc_unicode_unfold2_lookup(codes)) != 0) {
-	for (i = 0; i < z2->n; i++) {
+      if ((z2 = onigenc_unicode_unfold2_lookup(codes)) != 0 &&
+	  CodePointListValidP(z2)) {
+	for (i = 0; i < OnigCodePointCount(z2->n); i++) {
 	  items[n].byte_len = len;
 	  items[n].code_len = 1;
@@ -582,5 +628,5 @@
 	code = ONIGENC_MBC_TO_CODE(enc, p, end);
 	if ((to = onigenc_unicode_fold_lookup(code)) != 0
-	    && to->n == 1) {
+	    && OnigCodePointCount(to->n) == 1) {
 	  codes[2] = to->code[0];
 	}
@@ -588,8 +634,9 @@
 	  codes[2] = code;
 
-	clen = enclen(enc, p);
+	clen = enclen(enc, p, end);
 	len += clen;
-	if ((z2 = onigenc_unicode_unfold3_lookup(codes)) != 0) {
-	  for (i = 0; i < z2->n; i++) {
+	if ((z2 = onigenc_unicode_unfold3_lookup(codes)) != 0 &&
+	    CodePointListValidP(z2)) {
+	  for (i = 0; i < OnigCodePointCount(z2->n); i++) {
 	    items[n].byte_len = len;
 	    items[n].code_len = 1;
@@ -604,2 +651,155 @@
   return n;
 }
+
+/* length in bytes for three characters in UTF-32; e.g. needed for ffi (U+FB03) */
+#define CASE_MAPPING_SLACK 12
+#define MODIFIED (flags |= ONIGENC_CASE_MODIFIED)
+extern int
+onigenc_unicode_case_map(OnigCaseFoldType* flagP,
+    const OnigUChar** pp, const OnigUChar* end,
+    OnigUChar* to, OnigUChar* to_end,
+    const struct OnigEncodingTypeST* enc)
+{
+  OnigCodePoint code;
+  OnigUChar *to_start = to;
+  OnigCaseFoldType flags = *flagP;
+  int codepoint_length;
+
+  to_end -= CASE_MAPPING_SLACK;
+  /* copy flags ONIGENC_CASE_UPCASE     and ONIGENC_CASE_DOWNCASE over to
+   *            ONIGENC_CASE_UP_SPECIAL and ONIGENC_CASE_DOWN_SPECIAL */
+  flags |= (flags & (ONIGENC_CASE_UPCASE | ONIGENC_CASE_DOWNCASE)) << ONIGENC_CASE_SPECIAL_OFFSET;
+
+  while (*pp < end && to <= to_end) {
+    codepoint_length = ONIGENC_PRECISE_MBC_ENC_LEN(enc, *pp, end);
+    if (codepoint_length < 0)
+      return codepoint_length; /* encoding invalid */
+    code = ONIGENC_MBC_TO_CODE(enc, *pp, end);
+    *pp += codepoint_length;
+
+    if (code <= 'z') { /* ASCII comes first */
+      if (code >= 'a' && code <= 'z') {
+	if (flags & ONIGENC_CASE_UPCASE) {
+	  MODIFIED;
+	  if (flags & ONIGENC_CASE_FOLD_TURKISH_AZERI && code == 'i')
+	    code = I_WITH_DOT_ABOVE;
+	  else
+	    code += 'A' - 'a';
+	}
+      }
+      else if (code >= 'A' && code <= 'Z') {
+	if (flags & (ONIGENC_CASE_DOWNCASE | ONIGENC_CASE_FOLD)) {
+	  MODIFIED;
+	  if (flags & ONIGENC_CASE_FOLD_TURKISH_AZERI && code == 'I')
+	    code = DOTLESS_i;
+	  else
+	    code += 'a' - 'A';
+	}
+      }
+    }
+    else if (!(flags & ONIGENC_CASE_ASCII_ONLY) && code >= 0x00B5) { /* deal with non-ASCII; micron sign (U+00B5) is lowest affected */
+      const CodePointList3 *folded;
+
+      if (code == I_WITH_DOT_ABOVE) {
+	if (flags & (ONIGENC_CASE_DOWNCASE | ONIGENC_CASE_FOLD)) {
+	  MODIFIED;
+	  code = 'i';
+	  if (!(flags & ONIGENC_CASE_FOLD_TURKISH_AZERI)) { /* make dot above explicit */
+	    to += ONIGENC_CODE_TO_MBC(enc, code, to);
+	    code = DOT_ABOVE;
+	  }
+	}
+      }
+      else if (code == DOTLESS_i) { /* handle this manually, because it isn't involved in folding */
+	if (flags & ONIGENC_CASE_UPCASE) {
+	  MODIFIED;
+	  code = 'I';
+	}
+      }
+      else if ((folded = onigenc_unicode_fold_lookup(code)) != 0) { /* data about character found in CaseFold_11_Table */
+	if ((flags & ONIGENC_CASE_TITLECASE)                                 /* Titlecase needed, */
+	    && (OnigCaseFoldFlags(folded->n) & ONIGENC_CASE_IS_TITLECASE)) { /* but already Titlecase  */
+	  /* already Titlecase, no changes needed */
+	}
+	else if (flags & OnigCaseFoldFlags(folded->n)) { /* needs and data availability match */
+	  const OnigCodePoint *next;
+	  int count;
+
+	  MODIFIED;
+	  if (flags & OnigCaseFoldFlags(folded->n) & ONIGENC_CASE_SPECIALS) { /* special */
+	    const OnigCodePoint *SpecialsStart = CaseMappingSpecials + OnigSpecialIndexDecode(folded->n);
+
+	    if (OnigCaseFoldFlags(folded->n) & ONIGENC_CASE_IS_TITLECASE) { /* swapCASE available */
+	      if ((flags & (ONIGENC_CASE_UPCASE | ONIGENC_CASE_DOWNCASE))
+		  == (ONIGENC_CASE_UPCASE | ONIGENC_CASE_DOWNCASE)) /* swapCASE needed */
+		goto SpecialsCopy;
+	      else /* swapCASE not needed */
+		SpecialsStart += SpecialsLengthExtract(*SpecialsStart);
+	    }
+	    if (OnigCaseFoldFlags(folded->n) & ONIGENC_CASE_TITLECASE) { /* Titlecase available */
+	      if (flags & ONIGENC_CASE_TITLECASE) /* Titlecase needed, but not yet Titlecase */
+		goto SpecialsCopy;
+	      else /* Titlecase not needed */
+		SpecialsStart += SpecialsLengthExtract(*SpecialsStart);
+	    }
+	    if (OnigCaseFoldFlags(folded->n) & ONIGENC_CASE_DOWN_SPECIAL) {
+	      if (!(flags & ONIGENC_CASE_DOWN_SPECIAL))
+		SpecialsStart += SpecialsLengthExtract(*SpecialsStart);
+	    }
+	    /* here, we know we use ONIGENC_CASE_UP_SPECIAL, and the position is right */
+SpecialsCopy:
+	    count = SpecialsLengthExtract(*SpecialsStart);
+	    next = SpecialsStart;
+	    code = SpecialsCodepointExtract(*next++);
+	  }
+	  else { /* no specials */
+	    count = OnigCodePointCount(folded->n);
+	    next = folded->code;
+	    code = *next++;
+	  }
+	  if (count == 1)
+	    ;
+	  else if (count == 2) {
+	    to += ONIGENC_CODE_TO_MBC(enc, code, to);
+	    code = *next;
+	  }
+	  else { /* count == 3 */
+	    to += ONIGENC_CODE_TO_MBC(enc, code, to);
+	    to += ONIGENC_CODE_TO_MBC(enc, *next++, to);
+	    code = *next;
+	  }
+	}
+      }
+      else if ((folded = onigenc_unicode_unfold1_lookup(code)) != 0  /* data about character found in CaseUnfold_11_Table */
+	  && flags & OnigCaseFoldFlags(folded->n)) { /* needs and data availability match */
+	MODIFIED;
+	code = folded->code[(flags & OnigCaseFoldFlags(folded->n) & ONIGENC_CASE_TITLECASE) ? 1 : 0];
+      }
+    }
+    to += ONIGENC_CODE_TO_MBC(enc, code, to);
+    /* switch from titlecase to lowercase for capitalize */
+    if (flags & ONIGENC_CASE_TITLECASE)
+      flags ^= (ONIGENC_CASE_UPCASE | ONIGENC_CASE_DOWNCASE | ONIGENC_CASE_TITLECASE |
+	  ONIGENC_CASE_UP_SPECIAL | ONIGENC_CASE_DOWN_SPECIAL);
+  }
+  *flagP = flags;
+  return (int )(to - to_start);
+}
+
+#if 0
+const char onigenc_unicode_version_string[] =
+#ifdef ONIG_UNICODE_VERSION_STRING
+    ONIG_UNICODE_VERSION_STRING
+#endif
+    "";
+
+const int onigenc_unicode_version_number[3] = {
+#ifdef ONIG_UNICODE_VERSION_MAJOR
+    ONIG_UNICODE_VERSION_MAJOR,
+    ONIG_UNICODE_VERSION_MINOR,
+    ONIG_UNICODE_VERSION_TEENY,
+#else
+    0
+#endif
+};
+#endif
Index: EcnlProtoTool/trunk/onigmo-6.1.3/src/enc/unicode/casefold.h
===================================================================
--- EcnlProtoTool/trunk/onigmo-5.15.0/src/enc/unicode/casefold.h	(revision 321)
+++ EcnlProtoTool/trunk/onigmo-6.1.3/src/enc/unicode/casefold.h	(revision 331)
@@ -2,1193 +2,1426 @@
 /* Generated by tool/case-folding.rb */
 
+#if defined ONIG_UNICODE_VERSION_STRING && !( \
+      ONIG_UNICODE_VERSION_MAJOR == 10 && \
+      ONIG_UNICODE_VERSION_MINOR == 0 && \
+      ONIG_UNICODE_VERSION_TEENY == 0 && \
+      1)
+# error ONIG_UNICODE_VERSION_STRING mismatch
+#endif
+#define ONIG_UNICODE_VERSION_STRING "10.0.0"
+#define ONIG_UNICODE_VERSION_MAJOR 10
+#define ONIG_UNICODE_VERSION_MINOR 0
+#define ONIG_UNICODE_VERSION_TEENY 0
+
 static const CaseFold_11_Type CaseFold_11_Table[] = {
-#define CaseFold (*(CaseFold_11_Type (*)[1178])(CaseFold_11_Table+0))
-  {0x0041, {1, {0x0061}}},
-  {0x0042, {1, {0x0062}}},
-  {0x0043, {1, {0x0063}}},
-  {0x0044, {1, {0x0064}}},
-  {0x0045, {1, {0x0065}}},
-  {0x0046, {1, {0x0066}}},
-  {0x0047, {1, {0x0067}}},
-  {0x0048, {1, {0x0068}}},
-  {0x004a, {1, {0x006a}}},
-  {0x004b, {1, {0x006b}}},
-  {0x004c, {1, {0x006c}}},
-  {0x004d, {1, {0x006d}}},
-  {0x004e, {1, {0x006e}}},
-  {0x004f, {1, {0x006f}}},
-  {0x0050, {1, {0x0070}}},
-  {0x0051, {1, {0x0071}}},
-  {0x0052, {1, {0x0072}}},
-  {0x0053, {1, {0x0073}}},
-  {0x0054, {1, {0x0074}}},
-  {0x0055, {1, {0x0075}}},
-  {0x0056, {1, {0x0076}}},
-  {0x0057, {1, {0x0077}}},
-  {0x0058, {1, {0x0078}}},
-  {0x0059, {1, {0x0079}}},
-  {0x005a, {1, {0x007a}}},
-  {0x00b5, {1, {0x03bc}}},
-  {0x00c0, {1, {0x00e0}}},
-  {0x00c1, {1, {0x00e1}}},
-  {0x00c2, {1, {0x00e2}}},
-  {0x00c3, {1, {0x00e3}}},
-  {0x00c4, {1, {0x00e4}}},
-  {0x00c5, {1, {0x00e5}}},
-  {0x00c6, {1, {0x00e6}}},
-  {0x00c7, {1, {0x00e7}}},
-  {0x00c8, {1, {0x00e8}}},
-  {0x00c9, {1, {0x00e9}}},
-  {0x00ca, {1, {0x00ea}}},
-  {0x00cb, {1, {0x00eb}}},
-  {0x00cc, {1, {0x00ec}}},
-  {0x00cd, {1, {0x00ed}}},
-  {0x00ce, {1, {0x00ee}}},
-  {0x00cf, {1, {0x00ef}}},
-  {0x00d0, {1, {0x00f0}}},
-  {0x00d1, {1, {0x00f1}}},
-  {0x00d2, {1, {0x00f2}}},
-  {0x00d3, {1, {0x00f3}}},
-  {0x00d4, {1, {0x00f4}}},
-  {0x00d5, {1, {0x00f5}}},
-  {0x00d6, {1, {0x00f6}}},
-  {0x00d8, {1, {0x00f8}}},
-  {0x00d9, {1, {0x00f9}}},
-  {0x00da, {1, {0x00fa}}},
-  {0x00db, {1, {0x00fb}}},
-  {0x00dc, {1, {0x00fc}}},
-  {0x00dd, {1, {0x00fd}}},
-  {0x00de, {1, {0x00fe}}},
-  {0x00df, {2, {0x0073, 0x0073}}},
-  {0x0100, {1, {0x0101}}},
-  {0x0102, {1, {0x0103}}},
-  {0x0104, {1, {0x0105}}},
-  {0x0106, {1, {0x0107}}},
-  {0x0108, {1, {0x0109}}},
-  {0x010a, {1, {0x010b}}},
-  {0x010c, {1, {0x010d}}},
-  {0x010e, {1, {0x010f}}},
-  {0x0110, {1, {0x0111}}},
-  {0x0112, {1, {0x0113}}},
-  {0x0114, {1, {0x0115}}},
-  {0x0116, {1, {0x0117}}},
-  {0x0118, {1, {0x0119}}},
-  {0x011a, {1, {0x011b}}},
-  {0x011c, {1, {0x011d}}},
-  {0x011e, {1, {0x011f}}},
-  {0x0120, {1, {0x0121}}},
-  {0x0122, {1, {0x0123}}},
-  {0x0124, {1, {0x0125}}},
-  {0x0126, {1, {0x0127}}},
-  {0x0128, {1, {0x0129}}},
-  {0x012a, {1, {0x012b}}},
-  {0x012c, {1, {0x012d}}},
-  {0x012e, {1, {0x012f}}},
-  {0x0132, {1, {0x0133}}},
-  {0x0134, {1, {0x0135}}},
-  {0x0136, {1, {0x0137}}},
-  {0x0139, {1, {0x013a}}},
-  {0x013b, {1, {0x013c}}},
-  {0x013d, {1, {0x013e}}},
-  {0x013f, {1, {0x0140}}},
-  {0x0141, {1, {0x0142}}},
-  {0x0143, {1, {0x0144}}},
-  {0x0145, {1, {0x0146}}},
-  {0x0147, {1, {0x0148}}},
-  {0x0149, {2, {0x02bc, 0x006e}}},
-  {0x014a, {1, {0x014b}}},
-  {0x014c, {1, {0x014d}}},
-  {0x014e, {1, {0x014f}}},
-  {0x0150, {1, {0x0151}}},
-  {0x0152, {1, {0x0153}}},
-  {0x0154, {1, {0x0155}}},
-  {0x0156, {1, {0x0157}}},
-  {0x0158, {1, {0x0159}}},
-  {0x015a, {1, {0x015b}}},
-  {0x015c, {1, {0x015d}}},
-  {0x015e, {1, {0x015f}}},
-  {0x0160, {1, {0x0161}}},
-  {0x0162, {1, {0x0163}}},
-  {0x0164, {1, {0x0165}}},
-  {0x0166, {1, {0x0167}}},
-  {0x0168, {1, {0x0169}}},
-  {0x016a, {1, {0x016b}}},
-  {0x016c, {1, {0x016d}}},
-  {0x016e, {1, {0x016f}}},
-  {0x0170, {1, {0x0171}}},
-  {0x0172, {1, {0x0173}}},
-  {0x0174, {1, {0x0175}}},
-  {0x0176, {1, {0x0177}}},
-  {0x0178, {1, {0x00ff}}},
-  {0x0179, {1, {0x017a}}},
-  {0x017b, {1, {0x017c}}},
-  {0x017d, {1, {0x017e}}},
-  {0x017f, {1, {0x0073}}},
-  {0x0181, {1, {0x0253}}},
-  {0x0182, {1, {0x0183}}},
-  {0x0184, {1, {0x0185}}},
-  {0x0186, {1, {0x0254}}},
-  {0x0187, {1, {0x0188}}},
-  {0x0189, {1, {0x0256}}},
-  {0x018a, {1, {0x0257}}},
-  {0x018b, {1, {0x018c}}},
-  {0x018e, {1, {0x01dd}}},
-  {0x018f, {1, {0x0259}}},
-  {0x0190, {1, {0x025b}}},
-  {0x0191, {1, {0x0192}}},
-  {0x0193, {1, {0x0260}}},
-  {0x0194, {1, {0x0263}}},
-  {0x0196, {1, {0x0269}}},
-  {0x0197, {1, {0x0268}}},
-  {0x0198, {1, {0x0199}}},
-  {0x019c, {1, {0x026f}}},
-  {0x019d, {1, {0x0272}}},
-  {0x019f, {1, {0x0275}}},
-  {0x01a0, {1, {0x01a1}}},
-  {0x01a2, {1, {0x01a3}}},
-  {0x01a4, {1, {0x01a5}}},
-  {0x01a6, {1, {0x0280}}},
-  {0x01a7, {1, {0x01a8}}},
-  {0x01a9, {1, {0x0283}}},
-  {0x01ac, {1, {0x01ad}}},
-  {0x01ae, {1, {0x0288}}},
-  {0x01af, {1, {0x01b0}}},
-  {0x01b1, {1, {0x028a}}},
-  {0x01b2, {1, {0x028b}}},
-  {0x01b3, {1, {0x01b4}}},
-  {0x01b5, {1, {0x01b6}}},
-  {0x01b7, {1, {0x0292}}},
-  {0x01b8, {1, {0x01b9}}},
-  {0x01bc, {1, {0x01bd}}},
-  {0x01c4, {1, {0x01c6}}},
-  {0x01c5, {1, {0x01c6}}},
-  {0x01c7, {1, {0x01c9}}},
-  {0x01c8, {1, {0x01c9}}},
-  {0x01ca, {1, {0x01cc}}},
-  {0x01cb, {1, {0x01cc}}},
-  {0x01cd, {1, {0x01ce}}},
-  {0x01cf, {1, {0x01d0}}},
-  {0x01d1, {1, {0x01d2}}},
-  {0x01d3, {1, {0x01d4}}},
-  {0x01d5, {1, {0x01d6}}},
-  {0x01d7, {1, {0x01d8}}},
-  {0x01d9, {1, {0x01da}}},
-  {0x01db, {1, {0x01dc}}},
-  {0x01de, {1, {0x01df}}},
-  {0x01e0, {1, {0x01e1}}},
-  {0x01e2, {1, {0x01e3}}},
-  {0x01e4, {1, {0x01e5}}},
-  {0x01e6, {1, {0x01e7}}},
-  {0x01e8, {1, {0x01e9}}},
-  {0x01ea, {1, {0x01eb}}},
-  {0x01ec, {1, {0x01ed}}},
-  {0x01ee, {1, {0x01ef}}},
-  {0x01f0, {2, {0x006a, 0x030c}}},
-  {0x01f1, {1, {0x01f3}}},
-  {0x01f2, {1, {0x01f3}}},
-  {0x01f4, {1, {0x01f5}}},
-  {0x01f6, {1, {0x0195}}},
-  {0x01f7, {1, {0x01bf}}},
-  {0x01f8, {1, {0x01f9}}},
-  {0x01fa, {1, {0x01fb}}},
-  {0x01fc, {1, {0x01fd}}},
-  {0x01fe, {1, {0x01ff}}},
-  {0x0200, {1, {0x0201}}},
-  {0x0202, {1, {0x0203}}},
-  {0x0204, {1, {0x0205}}},
-  {0x0206, {1, {0x0207}}},
-  {0x0208, {1, {0x0209}}},
-  {0x020a, {1, {0x020b}}},
-  {0x020c, {1, {0x020d}}},
-  {0x020e, {1, {0x020f}}},
-  {0x0210, {1, {0x0211}}},
-  {0x0212, {1, {0x0213}}},
-  {0x0214, {1, {0x0215}}},
-  {0x0216, {1, {0x0217}}},
-  {0x0218, {1, {0x0219}}},
-  {0x021a, {1, {0x021b}}},
-  {0x021c, {1, {0x021d}}},
-  {0x021e, {1, {0x021f}}},
-  {0x0220, {1, {0x019e}}},
-  {0x0222, {1, {0x0223}}},
-  {0x0224, {1, {0x0225}}},
-  {0x0226, {1, {0x0227}}},
-  {0x0228, {1, {0x0229}}},
-  {0x022a, {1, {0x022b}}},
-  {0x022c, {1, {0x022d}}},
-  {0x022e, {1, {0x022f}}},
-  {0x0230, {1, {0x0231}}},
-  {0x0232, {1, {0x0233}}},
-  {0x023a, {1, {0x2c65}}},
-  {0x023b, {1, {0x023c}}},
-  {0x023d, {1, {0x019a}}},
-  {0x023e, {1, {0x2c66}}},
-  {0x0241, {1, {0x0242}}},
-  {0x0243, {1, {0x0180}}},
-  {0x0244, {1, {0x0289}}},
-  {0x0245, {1, {0x028c}}},
-  {0x0246, {1, {0x0247}}},
-  {0x0248, {1, {0x0249}}},
-  {0x024a, {1, {0x024b}}},
-  {0x024c, {1, {0x024d}}},
-  {0x024e, {1, {0x024f}}},
-  {0x0345, {1, {0x03b9}}},
-  {0x0370, {1, {0x0371}}},
-  {0x0372, {1, {0x0373}}},
-  {0x0376, {1, {0x0377}}},
-  {0x037f, {1, {0x03f3}}},
-  {0x0386, {1, {0x03ac}}},
-  {0x0388, {1, {0x03ad}}},
-  {0x0389, {1, {0x03ae}}},
-  {0x038a, {1, {0x03af}}},
-  {0x038c, {1, {0x03cc}}},
-  {0x038e, {1, {0x03cd}}},
-  {0x038f, {1, {0x03ce}}},
-  {0x0390, {3, {0x03b9, 0x0308, 0x0301}}},
-  {0x0391, {1, {0x03b1}}},
-  {0x0392, {1, {0x03b2}}},
-  {0x0393, {1, {0x03b3}}},
-  {0x0394, {1, {0x03b4}}},
-  {0x0395, {1, {0x03b5}}},
-  {0x0396, {1, {0x03b6}}},
-  {0x0397, {1, {0x03b7}}},
-  {0x0398, {1, {0x03b8}}},
-  {0x0399, {1, {0x03b9}}},
-  {0x039a, {1, {0x03ba}}},
-  {0x039b, {1, {0x03bb}}},
-  {0x039c, {1, {0x03bc}}},
-  {0x039d, {1, {0x03bd}}},
-  {0x039e, {1, {0x03be}}},
-  {0x039f, {1, {0x03bf}}},
-  {0x03a0, {1, {0x03c0}}},
-  {0x03a1, {1, {0x03c1}}},
-  {0x03a3, {1, {0x03c3}}},
-  {0x03a4, {1, {0x03c4}}},
-  {0x03a5, {1, {0x03c5}}},
-  {0x03a6, {1, {0x03c6}}},
-  {0x03a7, {1, {0x03c7}}},
-  {0x03a8, {1, {0x03c8}}},
-  {0x03a9, {1, {0x03c9}}},
-  {0x03aa, {1, {0x03ca}}},
-  {0x03ab, {1, {0x03cb}}},
-  {0x03b0, {3, {0x03c5, 0x0308, 0x0301}}},
-  {0x03c2, {1, {0x03c3}}},
-  {0x03cf, {1, {0x03d7}}},
-  {0x03d0, {1, {0x03b2}}},
-  {0x03d1, {1, {0x03b8}}},
-  {0x03d5, {1, {0x03c6}}},
-  {0x03d6, {1, {0x03c0}}},
-  {0x03d8, {1, {0x03d9}}},
-  {0x03da, {1, {0x03db}}},
-  {0x03dc, {1, {0x03dd}}},
-  {0x03de, {1, {0x03df}}},
-  {0x03e0, {1, {0x03e1}}},
-  {0x03e2, {1, {0x03e3}}},
-  {0x03e4, {1, {0x03e5}}},
-  {0x03e6, {1, {0x03e7}}},
-  {0x03e8, {1, {0x03e9}}},
-  {0x03ea, {1, {0x03eb}}},
-  {0x03ec, {1, {0x03ed}}},
-  {0x03ee, {1, {0x03ef}}},
-  {0x03f0, {1, {0x03ba}}},
-  {0x03f1, {1, {0x03c1}}},
-  {0x03f4, {1, {0x03b8}}},
-  {0x03f5, {1, {0x03b5}}},
-  {0x03f7, {1, {0x03f8}}},
-  {0x03f9, {1, {0x03f2}}},
-  {0x03fa, {1, {0x03fb}}},
-  {0x03fd, {1, {0x037b}}},
-  {0x03fe, {1, {0x037c}}},
-  {0x03ff, {1, {0x037d}}},
-  {0x0400, {1, {0x0450}}},
-  {0x0401, {1, {0x0451}}},
-  {0x0402, {1, {0x0452}}},
-  {0x0403, {1, {0x0453}}},
-  {0x0404, {1, {0x0454}}},
-  {0x0405, {1, {0x0455}}},
-  {0x0406, {1, {0x0456}}},
-  {0x0407, {1, {0x0457}}},
-  {0x0408, {1, {0x0458}}},
-  {0x0409, {1, {0x0459}}},
-  {0x040a, {1, {0x045a}}},
-  {0x040b, {1, {0x045b}}},
-  {0x040c, {1, {0x045c}}},
-  {0x040d, {1, {0x045d}}},
-  {0x040e, {1, {0x045e}}},
-  {0x040f, {1, {0x045f}}},
-  {0x0410, {1, {0x0430}}},
-  {0x0411, {1, {0x0431}}},
-  {0x0412, {1, {0x0432}}},
-  {0x0413, {1, {0x0433}}},
-  {0x0414, {1, {0x0434}}},
-  {0x0415, {1, {0x0435}}},
-  {0x0416, {1, {0x0436}}},
-  {0x0417, {1, {0x0437}}},
-  {0x0418, {1, {0x0438}}},
-  {0x0419, {1, {0x0439}}},
-  {0x041a, {1, {0x043a}}},
-  {0x041b, {1, {0x043b}}},
-  {0x041c, {1, {0x043c}}},
-  {0x041d, {1, {0x043d}}},
-  {0x041e, {1, {0x043e}}},
-  {0x041f, {1, {0x043f}}},
-  {0x0420, {1, {0x0440}}},
-  {0x0421, {1, {0x0441}}},
-  {0x0422, {1, {0x0442}}},
-  {0x0423, {1, {0x0443}}},
-  {0x0424, {1, {0x0444}}},
-  {0x0425, {1, {0x0445}}},
-  {0x0426, {1, {0x0446}}},
-  {0x0427, {1, {0x0447}}},
-  {0x0428, {1, {0x0448}}},
-  {0x0429, {1, {0x0449}}},
-  {0x042a, {1, {0x044a}}},
-  {0x042b, {1, {0x044b}}},
-  {0x042c, {1, {0x044c}}},
-  {0x042d, {1, {0x044d}}},
-  {0x042e, {1, {0x044e}}},
-  {0x042f, {1, {0x044f}}},
-  {0x0460, {1, {0x0461}}},
-  {0x0462, {1, {0x0463}}},
-  {0x0464, {1, {0x0465}}},
-  {0x0466, {1, {0x0467}}},
-  {0x0468, {1, {0x0469}}},
-  {0x046a, {1, {0x046b}}},
-  {0x046c, {1, {0x046d}}},
-  {0x046e, {1, {0x046f}}},
-  {0x0470, {1, {0x0471}}},
-  {0x0472, {1, {0x0473}}},
-  {0x0474, {1, {0x0475}}},
-  {0x0476, {1, {0x0477}}},
-  {0x0478, {1, {0x0479}}},
-  {0x047a, {1, {0x047b}}},
-  {0x047c, {1, {0x047d}}},
-  {0x047e, {1, {0x047f}}},
-  {0x0480, {1, {0x0481}}},
-  {0x048a, {1, {0x048b}}},
-  {0x048c, {1, {0x048d}}},
-  {0x048e, {1, {0x048f}}},
-  {0x0490, {1, {0x0491}}},
-  {0x0492, {1, {0x0493}}},
-  {0x0494, {1, {0x0495}}},
-  {0x0496, {1, {0x0497}}},
-  {0x0498, {1, {0x0499}}},
-  {0x049a, {1, {0x049b}}},
-  {0x049c, {1, {0x049d}}},
-  {0x049e, {1, {0x049f}}},
-  {0x04a0, {1, {0x04a1}}},
-  {0x04a2, {1, {0x04a3}}},
-  {0x04a4, {1, {0x04a5}}},
-  {0x04a6, {1, {0x04a7}}},
-  {0x04a8, {1, {0x04a9}}},
-  {0x04aa, {1, {0x04ab}}},
-  {0x04ac, {1, {0x04ad}}},
-  {0x04ae, {1, {0x04af}}},
-  {0x04b0, {1, {0x04b1}}},
-  {0x04b2, {1, {0x04b3}}},
-  {0x04b4, {1, {0x04b5}}},
-  {0x04b6, {1, {0x04b7}}},
-  {0x04b8, {1, {0x04b9}}},
-  {0x04ba, {1, {0x04bb}}},
-  {0x04bc, {1, {0x04bd}}},
-  {0x04be, {1, {0x04bf}}},
-  {0x04c0, {1, {0x04cf}}},
-  {0x04c1, {1, {0x04c2}}},
-  {0x04c3, {1, {0x04c4}}},
-  {0x04c5, {1, {0x04c6}}},
-  {0x04c7, {1, {0x04c8}}},
-  {0x04c9, {1, {0x04ca}}},
-  {0x04cb, {1, {0x04cc}}},
-  {0x04cd, {1, {0x04ce}}},
-  {0x04d0, {1, {0x04d1}}},
-  {0x04d2, {1, {0x04d3}}},
-  {0x04d4, {1, {0x04d5}}},
-  {0x04d6, {1, {0x04d7}}},
-  {0x04d8, {1, {0x04d9}}},
-  {0x04da, {1, {0x04db}}},
-  {0x04dc, {1, {0x04dd}}},
-  {0x04de, {1, {0x04df}}},
-  {0x04e0, {1, {0x04e1}}},
-  {0x04e2, {1, {0x04e3}}},
-  {0x04e4, {1, {0x04e5}}},
-  {0x04e6, {1, {0x04e7}}},
-  {0x04e8, {1, {0x04e9}}},
-  {0x04ea, {1, {0x04eb}}},
-  {0x04ec, {1, {0x04ed}}},
-  {0x04ee, {1, {0x04ef}}},
-  {0x04f0, {1, {0x04f1}}},
-  {0x04f2, {1, {0x04f3}}},
-  {0x04f4, {1, {0x04f5}}},
-  {0x04f6, {1, {0x04f7}}},
-  {0x04f8, {1, {0x04f9}}},
-  {0x04fa, {1, {0x04fb}}},
-  {0x04fc, {1, {0x04fd}}},
-  {0x04fe, {1, {0x04ff}}},
-  {0x0500, {1, {0x0501}}},
-  {0x0502, {1, {0x0503}}},
-  {0x0504, {1, {0x0505}}},
-  {0x0506, {1, {0x0507}}},
-  {0x0508, {1, {0x0509}}},
-  {0x050a, {1, {0x050b}}},
-  {0x050c, {1, {0x050d}}},
-  {0x050e, {1, {0x050f}}},
-  {0x0510, {1, {0x0511}}},
-  {0x0512, {1, {0x0513}}},
-  {0x0514, {1, {0x0515}}},
-  {0x0516, {1, {0x0517}}},
-  {0x0518, {1, {0x0519}}},
-  {0x051a, {1, {0x051b}}},
-  {0x051c, {1, {0x051d}}},
-  {0x051e, {1, {0x051f}}},
-  {0x0520, {1, {0x0521}}},
-  {0x0522, {1, {0x0523}}},
-  {0x0524, {1, {0x0525}}},
-  {0x0526, {1, {0x0527}}},
-  {0x0528, {1, {0x0529}}},
-  {0x052a, {1, {0x052b}}},
-  {0x052c, {1, {0x052d}}},
-  {0x052e, {1, {0x052f}}},
-  {0x0531, {1, {0x0561}}},
-  {0x0532, {1, {0x0562}}},
-  {0x0533, {1, {0x0563}}},
-  {0x0534, {1, {0x0564}}},
-  {0x0535, {1, {0x0565}}},
-  {0x0536, {1, {0x0566}}},
-  {0x0537, {1, {0x0567}}},
-  {0x0538, {1, {0x0568}}},
-  {0x0539, {1, {0x0569}}},
-  {0x053a, {1, {0x056a}}},
-  {0x053b, {1, {0x056b}}},
-  {0x053c, {1, {0x056c}}},
-  {0x053d, {1, {0x056d}}},
-  {0x053e, {1, {0x056e}}},
-  {0x053f, {1, {0x056f}}},
-  {0x0540, {1, {0x0570}}},
-  {0x0541, {1, {0x0571}}},
-  {0x0542, {1, {0x0572}}},
-  {0x0543, {1, {0x0573}}},
-  {0x0544, {1, {0x0574}}},
-  {0x0545, {1, {0x0575}}},
-  {0x0546, {1, {0x0576}}},
-  {0x0547, {1, {0x0577}}},
-  {0x0548, {1, {0x0578}}},
-  {0x0549, {1, {0x0579}}},
-  {0x054a, {1, {0x057a}}},
-  {0x054b, {1, {0x057b}}},
-  {0x054c, {1, {0x057c}}},
-  {0x054d, {1, {0x057d}}},
-  {0x054e, {1, {0x057e}}},
-  {0x054f, {1, {0x057f}}},
-  {0x0550, {1, {0x0580}}},
-  {0x0551, {1, {0x0581}}},
-  {0x0552, {1, {0x0582}}},
-  {0x0553, {1, {0x0583}}},
-  {0x0554, {1, {0x0584}}},
-  {0x0555, {1, {0x0585}}},
-  {0x0556, {1, {0x0586}}},
-  {0x0587, {2, {0x0565, 0x0582}}},
-  {0x10a0, {1, {0x2d00}}},
-  {0x10a1, {1, {0x2d01}}},
-  {0x10a2, {1, {0x2d02}}},
-  {0x10a3, {1, {0x2d03}}},
-  {0x10a4, {1, {0x2d04}}},
-  {0x10a5, {1, {0x2d05}}},
-  {0x10a6, {1, {0x2d06}}},
-  {0x10a7, {1, {0x2d07}}},
-  {0x10a8, {1, {0x2d08}}},
-  {0x10a9, {1, {0x2d09}}},
-  {0x10aa, {1, {0x2d0a}}},
-  {0x10ab, {1, {0x2d0b}}},
-  {0x10ac, {1, {0x2d0c}}},
-  {0x10ad, {1, {0x2d0d}}},
-  {0x10ae, {1, {0x2d0e}}},
-  {0x10af, {1, {0x2d0f}}},
-  {0x10b0, {1, {0x2d10}}},
-  {0x10b1, {1, {0x2d11}}},
-  {0x10b2, {1, {0x2d12}}},
-  {0x10b3, {1, {0x2d13}}},
-  {0x10b4, {1, {0x2d14}}},
-  {0x10b5, {1, {0x2d15}}},
-  {0x10b6, {1, {0x2d16}}},
-  {0x10b7, {1, {0x2d17}}},
-  {0x10b8, {1, {0x2d18}}},
-  {0x10b9, {1, {0x2d19}}},
-  {0x10ba, {1, {0x2d1a}}},
-  {0x10bb, {1, {0x2d1b}}},
-  {0x10bc, {1, {0x2d1c}}},
-  {0x10bd, {1, {0x2d1d}}},
-  {0x10be, {1, {0x2d1e}}},
-  {0x10bf, {1, {0x2d1f}}},
-  {0x10c0, {1, {0x2d20}}},
-  {0x10c1, {1, {0x2d21}}},
-  {0x10c2, {1, {0x2d22}}},
-  {0x10c3, {1, {0x2d23}}},
-  {0x10c4, {1, {0x2d24}}},
-  {0x10c5, {1, {0x2d25}}},
-  {0x10c7, {1, {0x2d27}}},
-  {0x10cd, {1, {0x2d2d}}},
-  {0x1e00, {1, {0x1e01}}},
-  {0x1e02, {1, {0x1e03}}},
-  {0x1e04, {1, {0x1e05}}},
-  {0x1e06, {1, {0x1e07}}},
-  {0x1e08, {1, {0x1e09}}},
-  {0x1e0a, {1, {0x1e0b}}},
-  {0x1e0c, {1, {0x1e0d}}},
-  {0x1e0e, {1, {0x1e0f}}},
-  {0x1e10, {1, {0x1e11}}},
-  {0x1e12, {1, {0x1e13}}},
-  {0x1e14, {1, {0x1e15}}},
-  {0x1e16, {1, {0x1e17}}},
-  {0x1e18, {1, {0x1e19}}},
-  {0x1e1a, {1, {0x1e1b}}},
-  {0x1e1c, {1, {0x1e1d}}},
-  {0x1e1e, {1, {0x1e1f}}},
-  {0x1e20, {1, {0x1e21}}},
-  {0x1e22, {1, {0x1e23}}},
-  {0x1e24, {1, {0x1e25}}},
-  {0x1e26, {1, {0x1e27}}},
-  {0x1e28, {1, {0x1e29}}},
-  {0x1e2a, {1, {0x1e2b}}},
-  {0x1e2c, {1, {0x1e2d}}},
-  {0x1e2e, {1, {0x1e2f}}},
-  {0x1e30, {1, {0x1e31}}},
-  {0x1e32, {1, {0x1e33}}},
-  {0x1e34, {1, {0x1e35}}},
-  {0x1e36, {1, {0x1e37}}},
-  {0x1e38, {1, {0x1e39}}},
-  {0x1e3a, {1, {0x1e3b}}},
-  {0x1e3c, {1, {0x1e3d}}},
-  {0x1e3e, {1, {0x1e3f}}},
-  {0x1e40, {1, {0x1e41}}},
-  {0x1e42, {1, {0x1e43}}},
-  {0x1e44, {1, {0x1e45}}},
-  {0x1e46, {1, {0x1e47}}},
-  {0x1e48, {1, {0x1e49}}},
-  {0x1e4a, {1, {0x1e4b}}},
-  {0x1e4c, {1, {0x1e4d}}},
-  {0x1e4e, {1, {0x1e4f}}},
-  {0x1e50, {1, {0x1e51}}},
-  {0x1e52, {1, {0x1e53}}},
-  {0x1e54, {1, {0x1e55}}},
-  {0x1e56, {1, {0x1e57}}},
-  {0x1e58, {1, {0x1e59}}},
-  {0x1e5a, {1, {0x1e5b}}},
-  {0x1e5c, {1, {0x1e5d}}},
-  {0x1e5e, {1, {0x1e5f}}},
-  {0x1e60, {1, {0x1e61}}},
-  {0x1e62, {1, {0x1e63}}},
-  {0x1e64, {1, {0x1e65}}},
-  {0x1e66, {1, {0x1e67}}},
-  {0x1e68, {1, {0x1e69}}},
-  {0x1e6a, {1, {0x1e6b}}},
-  {0x1e6c, {1, {0x1e6d}}},
-  {0x1e6e, {1, {0x1e6f}}},
-  {0x1e70, {1, {0x1e71}}},
-  {0x1e72, {1, {0x1e73}}},
-  {0x1e74, {1, {0x1e75}}},
-  {0x1e76, {1, {0x1e77}}},
-  {0x1e78, {1, {0x1e79}}},
-  {0x1e7a, {1, {0x1e7b}}},
-  {0x1e7c, {1, {0x1e7d}}},
-  {0x1e7e, {1, {0x1e7f}}},
-  {0x1e80, {1, {0x1e81}}},
-  {0x1e82, {1, {0x1e83}}},
-  {0x1e84, {1, {0x1e85}}},
-  {0x1e86, {1, {0x1e87}}},
-  {0x1e88, {1, {0x1e89}}},
-  {0x1e8a, {1, {0x1e8b}}},
-  {0x1e8c, {1, {0x1e8d}}},
-  {0x1e8e, {1, {0x1e8f}}},
-  {0x1e90, {1, {0x1e91}}},
-  {0x1e92, {1, {0x1e93}}},
-  {0x1e94, {1, {0x1e95}}},
-  {0x1e96, {2, {0x0068, 0x0331}}},
-  {0x1e97, {2, {0x0074, 0x0308}}},
-  {0x1e98, {2, {0x0077, 0x030a}}},
-  {0x1e99, {2, {0x0079, 0x030a}}},
-  {0x1e9a, {2, {0x0061, 0x02be}}},
-  {0x1e9b, {1, {0x1e61}}},
-  {0x1e9e, {2, {0x0073, 0x0073}}},
-  {0x1ea0, {1, {0x1ea1}}},
-  {0x1ea2, {1, {0x1ea3}}},
-  {0x1ea4, {1, {0x1ea5}}},
-  {0x1ea6, {1, {0x1ea7}}},
-  {0x1ea8, {1, {0x1ea9}}},
-  {0x1eaa, {1, {0x1eab}}},
-  {0x1eac, {1, {0x1ead}}},
-  {0x1eae, {1, {0x1eaf}}},
-  {0x1eb0, {1, {0x1eb1}}},
-  {0x1eb2, {1, {0x1eb3}}},
-  {0x1eb4, {1, {0x1eb5}}},
-  {0x1eb6, {1, {0x1eb7}}},
-  {0x1eb8, {1, {0x1eb9}}},
-  {0x1eba, {1, {0x1ebb}}},
-  {0x1ebc, {1, {0x1ebd}}},
-  {0x1ebe, {1, {0x1ebf}}},
-  {0x1ec0, {1, {0x1ec1}}},
-  {0x1ec2, {1, {0x1ec3}}},
-  {0x1ec4, {1, {0x1ec5}}},
-  {0x1ec6, {1, {0x1ec7}}},
-  {0x1ec8, {1, {0x1ec9}}},
-  {0x1eca, {1, {0x1ecb}}},
-  {0x1ecc, {1, {0x1ecd}}},
-  {0x1ece, {1, {0x1ecf}}},
-  {0x1ed0, {1, {0x1ed1}}},
-  {0x1ed2, {1, {0x1ed3}}},
-  {0x1ed4, {1, {0x1ed5}}},
-  {0x1ed6, {1, {0x1ed7}}},
-  {0x1ed8, {1, {0x1ed9}}},
-  {0x1eda, {1, {0x1edb}}},
-  {0x1edc, {1, {0x1edd}}},
-  {0x1ede, {1, {0x1edf}}},
-  {0x1ee0, {1, {0x1ee1}}},
-  {0x1ee2, {1, {0x1ee3}}},
-  {0x1ee4, {1, {0x1ee5}}},
-  {0x1ee6, {1, {0x1ee7}}},
-  {0x1ee8, {1, {0x1ee9}}},
-  {0x1eea, {1, {0x1eeb}}},
-  {0x1eec, {1, {0x1eed}}},
-  {0x1eee, {1, {0x1eef}}},
-  {0x1ef0, {1, {0x1ef1}}},
-  {0x1ef2, {1, {0x1ef3}}},
-  {0x1ef4, {1, {0x1ef5}}},
-  {0x1ef6, {1, {0x1ef7}}},
-  {0x1ef8, {1, {0x1ef9}}},
-  {0x1efa, {1, {0x1efb}}},
-  {0x1efc, {1, {0x1efd}}},
-  {0x1efe, {1, {0x1eff}}},
-  {0x1f08, {1, {0x1f00}}},
-  {0x1f09, {1, {0x1f01}}},
-  {0x1f0a, {1, {0x1f02}}},
-  {0x1f0b, {1, {0x1f03}}},
-  {0x1f0c, {1, {0x1f04}}},
-  {0x1f0d, {1, {0x1f05}}},
-  {0x1f0e, {1, {0x1f06}}},
-  {0x1f0f, {1, {0x1f07}}},
-  {0x1f18, {1, {0x1f10}}},
-  {0x1f19, {1, {0x1f11}}},
-  {0x1f1a, {1, {0x1f12}}},
-  {0x1f1b, {1, {0x1f13}}},
-  {0x1f1c, {1, {0x1f14}}},
-  {0x1f1d, {1, {0x1f15}}},
-  {0x1f28, {1, {0x1f20}}},
-  {0x1f29, {1, {0x1f21}}},
-  {0x1f2a, {1, {0x1f22}}},
-  {0x1f2b, {1, {0x1f23}}},
-  {0x1f2c, {1, {0x1f24}}},
-  {0x1f2d, {1, {0x1f25}}},
-  {0x1f2e, {1, {0x1f26}}},
-  {0x1f2f, {1, {0x1f27}}},
-  {0x1f38, {1, {0x1f30}}},
-  {0x1f39, {1, {0x1f31}}},
-  {0x1f3a, {1, {0x1f32}}},
-  {0x1f3b, {1, {0x1f33}}},
-  {0x1f3c, {1, {0x1f34}}},
-  {0x1f3d, {1, {0x1f35}}},
-  {0x1f3e, {1, {0x1f36}}},
-  {0x1f3f, {1, {0x1f37}}},
-  {0x1f48, {1, {0x1f40}}},
-  {0x1f49, {1, {0x1f41}}},
-  {0x1f4a, {1, {0x1f42}}},
-  {0x1f4b, {1, {0x1f43}}},
-  {0x1f4c, {1, {0x1f44}}},
-  {0x1f4d, {1, {0x1f45}}},
-  {0x1f50, {2, {0x03c5, 0x0313}}},
-  {0x1f52, {3, {0x03c5, 0x0313, 0x0300}}},
-  {0x1f54, {3, {0x03c5, 0x0313, 0x0301}}},
-  {0x1f56, {3, {0x03c5, 0x0313, 0x0342}}},
-  {0x1f59, {1, {0x1f51}}},
-  {0x1f5b, {1, {0x1f53}}},
-  {0x1f5d, {1, {0x1f55}}},
-  {0x1f5f, {1, {0x1f57}}},
-  {0x1f68, {1, {0x1f60}}},
-  {0x1f69, {1, {0x1f61}}},
-  {0x1f6a, {1, {0x1f62}}},
-  {0x1f6b, {1, {0x1f63}}},
-  {0x1f6c, {1, {0x1f64}}},
-  {0x1f6d, {1, {0x1f65}}},
-  {0x1f6e, {1, {0x1f66}}},
-  {0x1f6f, {1, {0x1f67}}},
-  {0x1f80, {2, {0x1f00, 0x03b9}}},
-  {0x1f81, {2, {0x1f01, 0x03b9}}},
-  {0x1f82, {2, {0x1f02, 0x03b9}}},
-  {0x1f83, {2, {0x1f03, 0x03b9}}},
-  {0x1f84, {2, {0x1f04, 0x03b9}}},
-  {0x1f85, {2, {0x1f05, 0x03b9}}},
-  {0x1f86, {2, {0x1f06, 0x03b9}}},
-  {0x1f87, {2, {0x1f07, 0x03b9}}},
-  {0x1f88, {2, {0x1f00, 0x03b9}}},
-  {0x1f89, {2, {0x1f01, 0x03b9}}},
-  {0x1f8a, {2, {0x1f02, 0x03b9}}},
-  {0x1f8b, {2, {0x1f03, 0x03b9}}},
-  {0x1f8c, {2, {0x1f04, 0x03b9}}},
-  {0x1f8d, {2, {0x1f05, 0x03b9}}},
-  {0x1f8e, {2, {0x1f06, 0x03b9}}},
-  {0x1f8f, {2, {0x1f07, 0x03b9}}},
-  {0x1f90, {2, {0x1f20, 0x03b9}}},
-  {0x1f91, {2, {0x1f21, 0x03b9}}},
-  {0x1f92, {2, {0x1f22, 0x03b9}}},
-  {0x1f93, {2, {0x1f23, 0x03b9}}},
-  {0x1f94, {2, {0x1f24, 0x03b9}}},
-  {0x1f95, {2, {0x1f25, 0x03b9}}},
-  {0x1f96, {2, {0x1f26, 0x03b9}}},
-  {0x1f97, {2, {0x1f27, 0x03b9}}},
-  {0x1f98, {2, {0x1f20, 0x03b9}}},
-  {0x1f99, {2, {0x1f21, 0x03b9}}},
-  {0x1f9a, {2, {0x1f22, 0x03b9}}},
-  {0x1f9b, {2, {0x1f23, 0x03b9}}},
-  {0x1f9c, {2, {0x1f24, 0x03b9}}},
-  {0x1f9d, {2, {0x1f25, 0x03b9}}},
-  {0x1f9e, {2, {0x1f26, 0x03b9}}},
-  {0x1f9f, {2, {0x1f27, 0x03b9}}},
-  {0x1fa0, {2, {0x1f60, 0x03b9}}},
-  {0x1fa1, {2, {0x1f61, 0x03b9}}},
-  {0x1fa2, {2, {0x1f62, 0x03b9}}},
-  {0x1fa3, {2, {0x1f63, 0x03b9}}},
-  {0x1fa4, {2, {0x1f64, 0x03b9}}},
-  {0x1fa5, {2, {0x1f65, 0x03b9}}},
-  {0x1fa6, {2, {0x1f66, 0x03b9}}},
-  {0x1fa7, {2, {0x1f67, 0x03b9}}},
-  {0x1fa8, {2, {0x1f60, 0x03b9}}},
-  {0x1fa9, {2, {0x1f61, 0x03b9}}},
-  {0x1faa, {2, {0x1f62, 0x03b9}}},
-  {0x1fab, {2, {0x1f63, 0x03b9}}},
-  {0x1fac, {2, {0x1f64, 0x03b9}}},
-  {0x1fad, {2, {0x1f65, 0x03b9}}},
-  {0x1fae, {2, {0x1f66, 0x03b9}}},
-  {0x1faf, {2, {0x1f67, 0x03b9}}},
-  {0x1fb2, {2, {0x1f70, 0x03b9}}},
-  {0x1fb3, {2, {0x03b1, 0x03b9}}},
-  {0x1fb4, {2, {0x03ac, 0x03b9}}},
-  {0x1fb6, {2, {0x03b1, 0x0342}}},
-  {0x1fb7, {3, {0x03b1, 0x0342, 0x03b9}}},
-  {0x1fb8, {1, {0x1fb0}}},
-  {0x1fb9, {1, {0x1fb1}}},
-  {0x1fba, {1, {0x1f70}}},
-  {0x1fbb, {1, {0x1f71}}},
-  {0x1fbc, {2, {0x03b1, 0x03b9}}},
-  {0x1fbe, {1, {0x03b9}}},
-  {0x1fc2, {2, {0x1f74, 0x03b9}}},
-  {0x1fc3, {2, {0x03b7, 0x03b9}}},
-  {0x1fc4, {2, {0x03ae, 0x03b9}}},
-  {0x1fc6, {2, {0x03b7, 0x0342}}},
-  {0x1fc7, {3, {0x03b7, 0x0342, 0x03b9}}},
-  {0x1fc8, {1, {0x1f72}}},
-  {0x1fc9, {1, {0x1f73}}},
-  {0x1fca, {1, {0x1f74}}},
-  {0x1fcb, {1, {0x1f75}}},
-  {0x1fcc, {2, {0x03b7, 0x03b9}}},
-  {0x1fd2, {3, {0x03b9, 0x0308, 0x0300}}},
-  {0x1fd3, {3, {0x03b9, 0x0308, 0x0301}}},
-  {0x1fd6, {2, {0x03b9, 0x0342}}},
-  {0x1fd7, {3, {0x03b9, 0x0308, 0x0342}}},
-  {0x1fd8, {1, {0x1fd0}}},
-  {0x1fd9, {1, {0x1fd1}}},
-  {0x1fda, {1, {0x1f76}}},
-  {0x1fdb, {1, {0x1f77}}},
-  {0x1fe2, {3, {0x03c5, 0x0308, 0x0300}}},
-  {0x1fe3, {3, {0x03c5, 0x0308, 0x0301}}},
-  {0x1fe4, {2, {0x03c1, 0x0313}}},
-  {0x1fe6, {2, {0x03c5, 0x0342}}},
-  {0x1fe7, {3, {0x03c5, 0x0308, 0x0342}}},
-  {0x1fe8, {1, {0x1fe0}}},
-  {0x1fe9, {1, {0x1fe1}}},
-  {0x1fea, {1, {0x1f7a}}},
-  {0x1feb, {1, {0x1f7b}}},
-  {0x1fec, {1, {0x1fe5}}},
-  {0x1ff2, {2, {0x1f7c, 0x03b9}}},
-  {0x1ff3, {2, {0x03c9, 0x03b9}}},
-  {0x1ff4, {2, {0x03ce, 0x03b9}}},
-  {0x1ff6, {2, {0x03c9, 0x0342}}},
-  {0x1ff7, {3, {0x03c9, 0x0342, 0x03b9}}},
-  {0x1ff8, {1, {0x1f78}}},
-  {0x1ff9, {1, {0x1f79}}},
-  {0x1ffa, {1, {0x1f7c}}},
-  {0x1ffb, {1, {0x1f7d}}},
-  {0x1ffc, {2, {0x03c9, 0x03b9}}},
-  {0x2126, {1, {0x03c9}}},
-  {0x212a, {1, {0x006b}}},
-  {0x212b, {1, {0x00e5}}},
-  {0x2132, {1, {0x214e}}},
-  {0x2160, {1, {0x2170}}},
-  {0x2161, {1, {0x2171}}},
-  {0x2162, {1, {0x2172}}},
-  {0x2163, {1, {0x2173}}},
-  {0x2164, {1, {0x2174}}},
-  {0x2165, {1, {0x2175}}},
-  {0x2166, {1, {0x2176}}},
-  {0x2167, {1, {0x2177}}},
-  {0x2168, {1, {0x2178}}},
-  {0x2169, {1, {0x2179}}},
-  {0x216a, {1, {0x217a}}},
-  {0x216b, {1, {0x217b}}},
-  {0x216c, {1, {0x217c}}},
-  {0x216d, {1, {0x217d}}},
-  {0x216e, {1, {0x217e}}},
-  {0x216f, {1, {0x217f}}},
-  {0x2183, {1, {0x2184}}},
-  {0x24b6, {1, {0x24d0}}},
-  {0x24b7, {1, {0x24d1}}},
-  {0x24b8, {1, {0x24d2}}},
-  {0x24b9, {1, {0x24d3}}},
-  {0x24ba, {1, {0x24d4}}},
-  {0x24bb, {1, {0x24d5}}},
-  {0x24bc, {1, {0x24d6}}},
-  {0x24bd, {1, {0x24d7}}},
-  {0x24be, {1, {0x24d8}}},
-  {0x24bf, {1, {0x24d9}}},
-  {0x24c0, {1, {0x24da}}},
-  {0x24c1, {1, {0x24db}}},
-  {0x24c2, {1, {0x24dc}}},
-  {0x24c3, {1, {0x24dd}}},
-  {0x24c4, {1, {0x24de}}},
-  {0x24c5, {1, {0x24df}}},
-  {0x24c6, {1, {0x24e0}}},
-  {0x24c7, {1, {0x24e1}}},
-  {0x24c8, {1, {0x24e2}}},
-  {0x24c9, {1, {0x24e3}}},
-  {0x24ca, {1, {0x24e4}}},
-  {0x24cb, {1, {0x24e5}}},
-  {0x24cc, {1, {0x24e6}}},
-  {0x24cd, {1, {0x24e7}}},
-  {0x24ce, {1, {0x24e8}}},
-  {0x24cf, {1, {0x24e9}}},
-  {0x2c00, {1, {0x2c30}}},
-  {0x2c01, {1, {0x2c31}}},
-  {0x2c02, {1, {0x2c32}}},
-  {0x2c03, {1, {0x2c33}}},
-  {0x2c04, {1, {0x2c34}}},
-  {0x2c05, {1, {0x2c35}}},
-  {0x2c06, {1, {0x2c36}}},
-  {0x2c07, {1, {0x2c37}}},
-  {0x2c08, {1, {0x2c38}}},
-  {0x2c09, {1, {0x2c39}}},
-  {0x2c0a, {1, {0x2c3a}}},
-  {0x2c0b, {1, {0x2c3b}}},
-  {0x2c0c, {1, {0x2c3c}}},
-  {0x2c0d, {1, {0x2c3d}}},
-  {0x2c0e, {1, {0x2c3e}}},
-  {0x2c0f, {1, {0x2c3f}}},
-  {0x2c10, {1, {0x2c40}}},
-  {0x2c11, {1, {0x2c41}}},
-  {0x2c12, {1, {0x2c42}}},
-  {0x2c13, {1, {0x2c43}}},
-  {0x2c14, {1, {0x2c44}}},
-  {0x2c15, {1, {0x2c45}}},
-  {0x2c16, {1, {0x2c46}}},
-  {0x2c17, {1, {0x2c47}}},
-  {0x2c18, {1, {0x2c48}}},
-  {0x2c19, {1, {0x2c49}}},
-  {0x2c1a, {1, {0x2c4a}}},
-  {0x2c1b, {1, {0x2c4b}}},
-  {0x2c1c, {1, {0x2c4c}}},
-  {0x2c1d, {1, {0x2c4d}}},
-  {0x2c1e, {1, {0x2c4e}}},
-  {0x2c1f, {1, {0x2c4f}}},
-  {0x2c20, {1, {0x2c50}}},
-  {0x2c21, {1, {0x2c51}}},
-  {0x2c22, {1, {0x2c52}}},
-  {0x2c23, {1, {0x2c53}}},
-  {0x2c24, {1, {0x2c54}}},
-  {0x2c25, {1, {0x2c55}}},
-  {0x2c26, {1, {0x2c56}}},
-  {0x2c27, {1, {0x2c57}}},
-  {0x2c28, {1, {0x2c58}}},
-  {0x2c29, {1, {0x2c59}}},
-  {0x2c2a, {1, {0x2c5a}}},
-  {0x2c2b, {1, {0x2c5b}}},
-  {0x2c2c, {1, {0x2c5c}}},
-  {0x2c2d, {1, {0x2c5d}}},
-  {0x2c2e, {1, {0x2c5e}}},
-  {0x2c60, {1, {0x2c61}}},
-  {0x2c62, {1, {0x026b}}},
-  {0x2c63, {1, {0x1d7d}}},
-  {0x2c64, {1, {0x027d}}},
-  {0x2c67, {1, {0x2c68}}},
-  {0x2c69, {1, {0x2c6a}}},
-  {0x2c6b, {1, {0x2c6c}}},
-  {0x2c6d, {1, {0x0251}}},
-  {0x2c6e, {1, {0x0271}}},
-  {0x2c6f, {1, {0x0250}}},
-  {0x2c70, {1, {0x0252}}},
-  {0x2c72, {1, {0x2c73}}},
-  {0x2c75, {1, {0x2c76}}},
-  {0x2c7e, {1, {0x023f}}},
-  {0x2c7f, {1, {0x0240}}},
-  {0x2c80, {1, {0x2c81}}},
-  {0x2c82, {1, {0x2c83}}},
-  {0x2c84, {1, {0x2c85}}},
-  {0x2c86, {1, {0x2c87}}},
-  {0x2c88, {1, {0x2c89}}},
-  {0x2c8a, {1, {0x2c8b}}},
-  {0x2c8c, {1, {0x2c8d}}},
-  {0x2c8e, {1, {0x2c8f}}},
-  {0x2c90, {1, {0x2c91}}},
-  {0x2c92, {1, {0x2c93}}},
-  {0x2c94, {1, {0x2c95}}},
-  {0x2c96, {1, {0x2c97}}},
-  {0x2c98, {1, {0x2c99}}},
-  {0x2c9a, {1, {0x2c9b}}},
-  {0x2c9c, {1, {0x2c9d}}},
-  {0x2c9e, {1, {0x2c9f}}},
-  {0x2ca0, {1, {0x2ca1}}},
-  {0x2ca2, {1, {0x2ca3}}},
-  {0x2ca4, {1, {0x2ca5}}},
-  {0x2ca6, {1, {0x2ca7}}},
-  {0x2ca8, {1, {0x2ca9}}},
-  {0x2caa, {1, {0x2cab}}},
-  {0x2cac, {1, {0x2cad}}},
-  {0x2cae, {1, {0x2caf}}},
-  {0x2cb0, {1, {0x2cb1}}},
-  {0x2cb2, {1, {0x2cb3}}},
-  {0x2cb4, {1, {0x2cb5}}},
-  {0x2cb6, {1, {0x2cb7}}},
-  {0x2cb8, {1, {0x2cb9}}},
-  {0x2cba, {1, {0x2cbb}}},
-  {0x2cbc, {1, {0x2cbd}}},
-  {0x2cbe, {1, {0x2cbf}}},
-  {0x2cc0, {1, {0x2cc1}}},
-  {0x2cc2, {1, {0x2cc3}}},
-  {0x2cc4, {1, {0x2cc5}}},
-  {0x2cc6, {1, {0x2cc7}}},
-  {0x2cc8, {1, {0x2cc9}}},
-  {0x2cca, {1, {0x2ccb}}},
-  {0x2ccc, {1, {0x2ccd}}},
-  {0x2cce, {1, {0x2ccf}}},
-  {0x2cd0, {1, {0x2cd1}}},
-  {0x2cd2, {1, {0x2cd3}}},
-  {0x2cd4, {1, {0x2cd5}}},
-  {0x2cd6, {1, {0x2cd7}}},
-  {0x2cd8, {1, {0x2cd9}}},
-  {0x2cda, {1, {0x2cdb}}},
-  {0x2cdc, {1, {0x2cdd}}},
-  {0x2cde, {1, {0x2cdf}}},
-  {0x2ce0, {1, {0x2ce1}}},
-  {0x2ce2, {1, {0x2ce3}}},
-  {0x2ceb, {1, {0x2cec}}},
-  {0x2ced, {1, {0x2cee}}},
-  {0x2cf2, {1, {0x2cf3}}},
-  {0xa640, {1, {0xa641}}},
-  {0xa642, {1, {0xa643}}},
-  {0xa644, {1, {0xa645}}},
-  {0xa646, {1, {0xa647}}},
-  {0xa648, {1, {0xa649}}},
-  {0xa64a, {1, {0xa64b}}},
-  {0xa64c, {1, {0xa64d}}},
-  {0xa64e, {1, {0xa64f}}},
-  {0xa650, {1, {0xa651}}},
-  {0xa652, {1, {0xa653}}},
-  {0xa654, {1, {0xa655}}},
-  {0xa656, {1, {0xa657}}},
-  {0xa658, {1, {0xa659}}},
-  {0xa65a, {1, {0xa65b}}},
-  {0xa65c, {1, {0xa65d}}},
-  {0xa65e, {1, {0xa65f}}},
-  {0xa660, {1, {0xa661}}},
-  {0xa662, {1, {0xa663}}},
-  {0xa664, {1, {0xa665}}},
-  {0xa666, {1, {0xa667}}},
-  {0xa668, {1, {0xa669}}},
-  {0xa66a, {1, {0xa66b}}},
-  {0xa66c, {1, {0xa66d}}},
-  {0xa680, {1, {0xa681}}},
-  {0xa682, {1, {0xa683}}},
-  {0xa684, {1, {0xa685}}},
-  {0xa686, {1, {0xa687}}},
-  {0xa688, {1, {0xa689}}},
-  {0xa68a, {1, {0xa68b}}},
-  {0xa68c, {1, {0xa68d}}},
-  {0xa68e, {1, {0xa68f}}},
-  {0xa690, {1, {0xa691}}},
-  {0xa692, {1, {0xa693}}},
-  {0xa694, {1, {0xa695}}},
-  {0xa696, {1, {0xa697}}},
-  {0xa698, {1, {0xa699}}},
-  {0xa69a, {1, {0xa69b}}},
-  {0xa722, {1, {0xa723}}},
-  {0xa724, {1, {0xa725}}},
-  {0xa726, {1, {0xa727}}},
-  {0xa728, {1, {0xa729}}},
-  {0xa72a, {1, {0xa72b}}},
-  {0xa72c, {1, {0xa72d}}},
-  {0xa72e, {1, {0xa72f}}},
-  {0xa732, {1, {0xa733}}},
-  {0xa734, {1, {0xa735}}},
-  {0xa736, {1, {0xa737}}},
-  {0xa738, {1, {0xa739}}},
-  {0xa73a, {1, {0xa73b}}},
-  {0xa73c, {1, {0xa73d}}},
-  {0xa73e, {1, {0xa73f}}},
-  {0xa740, {1, {0xa741}}},
-  {0xa742, {1, {0xa743}}},
-  {0xa744, {1, {0xa745}}},
-  {0xa746, {1, {0xa747}}},
-  {0xa748, {1, {0xa749}}},
-  {0xa74a, {1, {0xa74b}}},
-  {0xa74c, {1, {0xa74d}}},
-  {0xa74e, {1, {0xa74f}}},
-  {0xa750, {1, {0xa751}}},
-  {0xa752, {1, {0xa753}}},
-  {0xa754, {1, {0xa755}}},
-  {0xa756, {1, {0xa757}}},
-  {0xa758, {1, {0xa759}}},
-  {0xa75a, {1, {0xa75b}}},
-  {0xa75c, {1, {0xa75d}}},
-  {0xa75e, {1, {0xa75f}}},
-  {0xa760, {1, {0xa761}}},
-  {0xa762, {1, {0xa763}}},
-  {0xa764, {1, {0xa765}}},
-  {0xa766, {1, {0xa767}}},
-  {0xa768, {1, {0xa769}}},
-  {0xa76a, {1, {0xa76b}}},
-  {0xa76c, {1, {0xa76d}}},
-  {0xa76e, {1, {0xa76f}}},
-  {0xa779, {1, {0xa77a}}},
-  {0xa77b, {1, {0xa77c}}},
-  {0xa77d, {1, {0x1d79}}},
-  {0xa77e, {1, {0xa77f}}},
-  {0xa780, {1, {0xa781}}},
-  {0xa782, {1, {0xa783}}},
-  {0xa784, {1, {0xa785}}},
-  {0xa786, {1, {0xa787}}},
-  {0xa78b, {1, {0xa78c}}},
-  {0xa78d, {1, {0x0265}}},
-  {0xa790, {1, {0xa791}}},
-  {0xa792, {1, {0xa793}}},
-  {0xa796, {1, {0xa797}}},
-  {0xa798, {1, {0xa799}}},
-  {0xa79a, {1, {0xa79b}}},
-  {0xa79c, {1, {0xa79d}}},
-  {0xa79e, {1, {0xa79f}}},
-  {0xa7a0, {1, {0xa7a1}}},
-  {0xa7a2, {1, {0xa7a3}}},
-  {0xa7a4, {1, {0xa7a5}}},
-  {0xa7a6, {1, {0xa7a7}}},
-  {0xa7a8, {1, {0xa7a9}}},
-  {0xa7aa, {1, {0x0266}}},
-  {0xa7ab, {1, {0x025c}}},
-  {0xa7ac, {1, {0x0261}}},
-  {0xa7ad, {1, {0x026c}}},
-  {0xa7b0, {1, {0x029e}}},
-  {0xa7b1, {1, {0x0287}}},
-  {0xfb00, {2, {0x0066, 0x0066}}},
-  {0xfb01, {2, {0x0066, 0x0069}}},
-  {0xfb02, {2, {0x0066, 0x006c}}},
-  {0xfb03, {3, {0x0066, 0x0066, 0x0069}}},
-  {0xfb04, {3, {0x0066, 0x0066, 0x006c}}},
-  {0xfb05, {2, {0x0073, 0x0074}}},
-  {0xfb06, {2, {0x0073, 0x0074}}},
-  {0xfb13, {2, {0x0574, 0x0576}}},
-  {0xfb14, {2, {0x0574, 0x0565}}},
-  {0xfb15, {2, {0x0574, 0x056b}}},
-  {0xfb16, {2, {0x057e, 0x0576}}},
-  {0xfb17, {2, {0x0574, 0x056d}}},
-  {0xff21, {1, {0xff41}}},
-  {0xff22, {1, {0xff42}}},
-  {0xff23, {1, {0xff43}}},
-  {0xff24, {1, {0xff44}}},
-  {0xff25, {1, {0xff45}}},
-  {0xff26, {1, {0xff46}}},
-  {0xff27, {1, {0xff47}}},
-  {0xff28, {1, {0xff48}}},
-  {0xff29, {1, {0xff49}}},
-  {0xff2a, {1, {0xff4a}}},
-  {0xff2b, {1, {0xff4b}}},
-  {0xff2c, {1, {0xff4c}}},
-  {0xff2d, {1, {0xff4d}}},
-  {0xff2e, {1, {0xff4e}}},
-  {0xff2f, {1, {0xff4f}}},
-  {0xff30, {1, {0xff50}}},
-  {0xff31, {1, {0xff51}}},
-  {0xff32, {1, {0xff52}}},
-  {0xff33, {1, {0xff53}}},
-  {0xff34, {1, {0xff54}}},
-  {0xff35, {1, {0xff55}}},
-  {0xff36, {1, {0xff56}}},
-  {0xff37, {1, {0xff57}}},
-  {0xff38, {1, {0xff58}}},
-  {0xff39, {1, {0xff59}}},
-  {0xff3a, {1, {0xff5a}}},
-  {0x10400, {1, {0x10428}}},
-  {0x10401, {1, {0x10429}}},
-  {0x10402, {1, {0x1042a}}},
-  {0x10403, {1, {0x1042b}}},
-  {0x10404, {1, {0x1042c}}},
-  {0x10405, {1, {0x1042d}}},
-  {0x10406, {1, {0x1042e}}},
-  {0x10407, {1, {0x1042f}}},
-  {0x10408, {1, {0x10430}}},
-  {0x10409, {1, {0x10431}}},
-  {0x1040a, {1, {0x10432}}},
-  {0x1040b, {1, {0x10433}}},
-  {0x1040c, {1, {0x10434}}},
-  {0x1040d, {1, {0x10435}}},
-  {0x1040e, {1, {0x10436}}},
-  {0x1040f, {1, {0x10437}}},
-  {0x10410, {1, {0x10438}}},
-  {0x10411, {1, {0x10439}}},
-  {0x10412, {1, {0x1043a}}},
-  {0x10413, {1, {0x1043b}}},
-  {0x10414, {1, {0x1043c}}},
-  {0x10415, {1, {0x1043d}}},
-  {0x10416, {1, {0x1043e}}},
-  {0x10417, {1, {0x1043f}}},
-  {0x10418, {1, {0x10440}}},
-  {0x10419, {1, {0x10441}}},
-  {0x1041a, {1, {0x10442}}},
-  {0x1041b, {1, {0x10443}}},
-  {0x1041c, {1, {0x10444}}},
-  {0x1041d, {1, {0x10445}}},
-  {0x1041e, {1, {0x10446}}},
-  {0x1041f, {1, {0x10447}}},
-  {0x10420, {1, {0x10448}}},
-  {0x10421, {1, {0x10449}}},
-  {0x10422, {1, {0x1044a}}},
-  {0x10423, {1, {0x1044b}}},
-  {0x10424, {1, {0x1044c}}},
-  {0x10425, {1, {0x1044d}}},
-  {0x10426, {1, {0x1044e}}},
-  {0x10427, {1, {0x1044f}}},
-  {0x118a0, {1, {0x118c0}}},
-  {0x118a1, {1, {0x118c1}}},
-  {0x118a2, {1, {0x118c2}}},
-  {0x118a3, {1, {0x118c3}}},
-  {0x118a4, {1, {0x118c4}}},
-  {0x118a5, {1, {0x118c5}}},
-  {0x118a6, {1, {0x118c6}}},
-  {0x118a7, {1, {0x118c7}}},
-  {0x118a8, {1, {0x118c8}}},
-  {0x118a9, {1, {0x118c9}}},
-  {0x118aa, {1, {0x118ca}}},
-  {0x118ab, {1, {0x118cb}}},
-  {0x118ac, {1, {0x118cc}}},
-  {0x118ad, {1, {0x118cd}}},
-  {0x118ae, {1, {0x118ce}}},
-  {0x118af, {1, {0x118cf}}},
-  {0x118b0, {1, {0x118d0}}},
-  {0x118b1, {1, {0x118d1}}},
-  {0x118b2, {1, {0x118d2}}},
-  {0x118b3, {1, {0x118d3}}},
-  {0x118b4, {1, {0x118d4}}},
-  {0x118b5, {1, {0x118d5}}},
-  {0x118b6, {1, {0x118d6}}},
-  {0x118b7, {1, {0x118d7}}},
-  {0x118b8, {1, {0x118d8}}},
-  {0x118b9, {1, {0x118d9}}},
-  {0x118ba, {1, {0x118da}}},
-  {0x118bb, {1, {0x118db}}},
-  {0x118bc, {1, {0x118dc}}},
-  {0x118bd, {1, {0x118dd}}},
-  {0x118be, {1, {0x118de}}},
-  {0x118bf, {1, {0x118df}}},
-#define CaseFold_Locale (*(CaseFold_11_Type (*)[2])(CaseFold_11_Table+1178))
-  {0x0049, {1, {0x0069}}},
-  {0x0130, {2, {0x0069, 0x0307}}},
+#define CaseFold (*(CaseFold_11_Type (*)[1399])(CaseFold_11_Table+0))
+  {0x0041, {1|F|D, {0x0061}}},
+  {0x0042, {1|F|D, {0x0062}}},
+  {0x0043, {1|F|D, {0x0063}}},
+  {0x0044, {1|F|D, {0x0064}}},
+  {0x0045, {1|F|D, {0x0065}}},
+  {0x0046, {1|F|D, {0x0066}}},
+  {0x0047, {1|F|D, {0x0067}}},
+  {0x0048, {1|F|D, {0x0068}}},
+  {0x004a, {1|F|D, {0x006a}}},
+  {0x004b, {1|F|D, {0x006b}}},
+  {0x004c, {1|F|D, {0x006c}}},
+  {0x004d, {1|F|D, {0x006d}}},
+  {0x004e, {1|F|D, {0x006e}}},
+  {0x004f, {1|F|D, {0x006f}}},
+  {0x0050, {1|F|D, {0x0070}}},
+  {0x0051, {1|F|D, {0x0071}}},
+  {0x0052, {1|F|D, {0x0072}}},
+  {0x0053, {1|F|D, {0x0073}}},
+  {0x0054, {1|F|D, {0x0074}}},
+  {0x0055, {1|F|D, {0x0075}}},
+  {0x0056, {1|F|D, {0x0076}}},
+  {0x0057, {1|F|D, {0x0077}}},
+  {0x0058, {1|F|D, {0x0078}}},
+  {0x0059, {1|F|D, {0x0079}}},
+  {0x005a, {1|F|D, {0x007a}}},
+  {0x00b5, {1|F|SU|I(0), {0x03bc}}},
+  {0x00c0, {1|F|D, {0x00e0}}},
+  {0x00c1, {1|F|D, {0x00e1}}},
+  {0x00c2, {1|F|D, {0x00e2}}},
+  {0x00c3, {1|F|D, {0x00e3}}},
+  {0x00c4, {1|F|D, {0x00e4}}},
+  {0x00c5, {1|F|D, {0x00e5}}},
+  {0x00c6, {1|F|D, {0x00e6}}},
+  {0x00c7, {1|F|D, {0x00e7}}},
+  {0x00c8, {1|F|D, {0x00e8}}},
+  {0x00c9, {1|F|D, {0x00e9}}},
+  {0x00ca, {1|F|D, {0x00ea}}},
+  {0x00cb, {1|F|D, {0x00eb}}},
+  {0x00cc, {1|F|D, {0x00ec}}},
+  {0x00cd, {1|F|D, {0x00ed}}},
+  {0x00ce, {1|F|D, {0x00ee}}},
+  {0x00cf, {1|F|D, {0x00ef}}},
+  {0x00d0, {1|F|D, {0x00f0}}},
+  {0x00d1, {1|F|D, {0x00f1}}},
+  {0x00d2, {1|F|D, {0x00f2}}},
+  {0x00d3, {1|F|D, {0x00f3}}},
+  {0x00d4, {1|F|D, {0x00f4}}},
+  {0x00d5, {1|F|D, {0x00f5}}},
+  {0x00d6, {1|F|D, {0x00f6}}},
+  {0x00d8, {1|F|D, {0x00f8}}},
+  {0x00d9, {1|F|D, {0x00f9}}},
+  {0x00da, {1|F|D, {0x00fa}}},
+  {0x00db, {1|F|D, {0x00fb}}},
+  {0x00dc, {1|F|D, {0x00fc}}},
+  {0x00dd, {1|F|D, {0x00fd}}},
+  {0x00de, {1|F|D, {0x00fe}}},
+  {0x00df, {2|F|ST|SU|I(1), {0x0073, 0x0073}}},
+  {0x0100, {1|F|D, {0x0101}}},
+  {0x0102, {1|F|D, {0x0103}}},
+  {0x0104, {1|F|D, {0x0105}}},
+  {0x0106, {1|F|D, {0x0107}}},
+  {0x0108, {1|F|D, {0x0109}}},
+  {0x010a, {1|F|D, {0x010b}}},
+  {0x010c, {1|F|D, {0x010d}}},
+  {0x010e, {1|F|D, {0x010f}}},
+  {0x0110, {1|F|D, {0x0111}}},
+  {0x0112, {1|F|D, {0x0113}}},
+  {0x0114, {1|F|D, {0x0115}}},
+  {0x0116, {1|F|D, {0x0117}}},
+  {0x0118, {1|F|D, {0x0119}}},
+  {0x011a, {1|F|D, {0x011b}}},
+  {0x011c, {1|F|D, {0x011d}}},
+  {0x011e, {1|F|D, {0x011f}}},
+  {0x0120, {1|F|D, {0x0121}}},
+  {0x0122, {1|F|D, {0x0123}}},
+  {0x0124, {1|F|D, {0x0125}}},
+  {0x0126, {1|F|D, {0x0127}}},
+  {0x0128, {1|F|D, {0x0129}}},
+  {0x012a, {1|F|D, {0x012b}}},
+  {0x012c, {1|F|D, {0x012d}}},
+  {0x012e, {1|F|D, {0x012f}}},
+  {0x0132, {1|F|D, {0x0133}}},
+  {0x0134, {1|F|D, {0x0135}}},
+  {0x0136, {1|F|D, {0x0137}}},
+  {0x0139, {1|F|D, {0x013a}}},
+  {0x013b, {1|F|D, {0x013c}}},
+  {0x013d, {1|F|D, {0x013e}}},
+  {0x013f, {1|F|D, {0x0140}}},
+  {0x0141, {1|F|D, {0x0142}}},
+  {0x0143, {1|F|D, {0x0144}}},
+  {0x0145, {1|F|D, {0x0146}}},
+  {0x0147, {1|F|D, {0x0148}}},
+  {0x0149, {2|F|SU|I(5), {0x02bc, 0x006e}}},
+  {0x014a, {1|F|D, {0x014b}}},
+  {0x014c, {1|F|D, {0x014d}}},
+  {0x014e, {1|F|D, {0x014f}}},
+  {0x0150, {1|F|D, {0x0151}}},
+  {0x0152, {1|F|D, {0x0153}}},
+  {0x0154, {1|F|D, {0x0155}}},
+  {0x0156, {1|F|D, {0x0157}}},
+  {0x0158, {1|F|D, {0x0159}}},
+  {0x015a, {1|F|D, {0x015b}}},
+  {0x015c, {1|F|D, {0x015d}}},
+  {0x015e, {1|F|D, {0x015f}}},
+  {0x0160, {1|F|D, {0x0161}}},
+  {0x0162, {1|F|D, {0x0163}}},
+  {0x0164, {1|F|D, {0x0165}}},
+  {0x0166, {1|F|D, {0x0167}}},
+  {0x0168, {1|F|D, {0x0169}}},
+  {0x016a, {1|F|D, {0x016b}}},
+  {0x016c, {1|F|D, {0x016d}}},
+  {0x016e, {1|F|D, {0x016f}}},
+  {0x0170, {1|F|D, {0x0171}}},
+  {0x0172, {1|F|D, {0x0173}}},
+  {0x0174, {1|F|D, {0x0175}}},
+  {0x0176, {1|F|D, {0x0177}}},
+  {0x0178, {1|F|D, {0x00ff}}},
+  {0x0179, {1|F|D, {0x017a}}},
+  {0x017b, {1|F|D, {0x017c}}},
+  {0x017d, {1|F|D, {0x017e}}},
+  {0x017f, {1|F|SU|I(7), {0x0073}}},
+  {0x0181, {1|F|D, {0x0253}}},
+  {0x0182, {1|F|D, {0x0183}}},
+  {0x0184, {1|F|D, {0x0185}}},
+  {0x0186, {1|F|D, {0x0254}}},
+  {0x0187, {1|F|D, {0x0188}}},
+  {0x0189, {1|F|D, {0x0256}}},
+  {0x018a, {1|F|D, {0x0257}}},
+  {0x018b, {1|F|D, {0x018c}}},
+  {0x018e, {1|F|D, {0x01dd}}},
+  {0x018f, {1|F|D, {0x0259}}},
+  {0x0190, {1|F|D, {0x025b}}},
+  {0x0191, {1|F|D, {0x0192}}},
+  {0x0193, {1|F|D, {0x0260}}},
+  {0x0194, {1|F|D, {0x0263}}},
+  {0x0196, {1|F|D, {0x0269}}},
+  {0x0197, {1|F|D, {0x0268}}},
+  {0x0198, {1|F|D, {0x0199}}},
+  {0x019c, {1|F|D, {0x026f}}},
+  {0x019d, {1|F|D, {0x0272}}},
+  {0x019f, {1|F|D, {0x0275}}},
+  {0x01a0, {1|F|D, {0x01a1}}},
+  {0x01a2, {1|F|D, {0x01a3}}},
+  {0x01a4, {1|F|D, {0x01a5}}},
+  {0x01a6, {1|F|D, {0x0280}}},
+  {0x01a7, {1|F|D, {0x01a8}}},
+  {0x01a9, {1|F|D, {0x0283}}},
+  {0x01ac, {1|F|D, {0x01ad}}},
+  {0x01ae, {1|F|D, {0x0288}}},
+  {0x01af, {1|F|D, {0x01b0}}},
+  {0x01b1, {1|F|D, {0x028a}}},
+  {0x01b2, {1|F|D, {0x028b}}},
+  {0x01b3, {1|F|D, {0x01b4}}},
+  {0x01b5, {1|F|D, {0x01b6}}},
+  {0x01b7, {1|F|D, {0x0292}}},
+  {0x01b8, {1|F|D, {0x01b9}}},
+  {0x01bc, {1|F|D, {0x01bd}}},
+  {0x01c4, {1|F|D|ST|I(8), {0x01c6}}},
+  {0x01c5, {1|F|D|IT|SU|I(9), {0x01c6}}},
+  {0x01c7, {1|F|D|ST|I(12), {0x01c9}}},
+  {0x01c8, {1|F|D|IT|SU|I(13), {0x01c9}}},
+  {0x01ca, {1|F|D|ST|I(16), {0x01cc}}},
+  {0x01cb, {1|F|D|IT|SU|I(17), {0x01cc}}},
+  {0x01cd, {1|F|D, {0x01ce}}},
+  {0x01cf, {1|F|D, {0x01d0}}},
+  {0x01d1, {1|F|D, {0x01d2}}},
+  {0x01d3, {1|F|D, {0x01d4}}},
+  {0x01d5, {1|F|D, {0x01d6}}},
+  {0x01d7, {1|F|D, {0x01d8}}},
+  {0x01d9, {1|F|D, {0x01da}}},
+  {0x01db, {1|F|D, {0x01dc}}},
+  {0x01de, {1|F|D, {0x01df}}},
+  {0x01e0, {1|F|D, {0x01e1}}},
+  {0x01e2, {1|F|D, {0x01e3}}},
+  {0x01e4, {1|F|D, {0x01e5}}},
+  {0x01e6, {1|F|D, {0x01e7}}},
+  {0x01e8, {1|F|D, {0x01e9}}},
+  {0x01ea, {1|F|D, {0x01eb}}},
+  {0x01ec, {1|F|D, {0x01ed}}},
+  {0x01ee, {1|F|D, {0x01ef}}},
+  {0x01f0, {2|F|SU|I(20), {0x006a, 0x030c}}},
+  {0x01f1, {1|F|D|ST|I(22), {0x01f3}}},
+  {0x01f2, {1|F|D|IT|SU|I(23), {0x01f3}}},
+  {0x01f4, {1|F|D, {0x01f5}}},
+  {0x01f6, {1|F|D, {0x0195}}},
+  {0x01f7, {1|F|D, {0x01bf}}},
+  {0x01f8, {1|F|D, {0x01f9}}},
+  {0x01fa, {1|F|D, {0x01fb}}},
+  {0x01fc, {1|F|D, {0x01fd}}},
+  {0x01fe, {1|F|D, {0x01ff}}},
+  {0x0200, {1|F|D, {0x0201}}},
+  {0x0202, {1|F|D, {0x0203}}},
+  {0x0204, {1|F|D, {0x0205}}},
+  {0x0206, {1|F|D, {0x0207}}},
+  {0x0208, {1|F|D, {0x0209}}},
+  {0x020a, {1|F|D, {0x020b}}},
+  {0x020c, {1|F|D, {0x020d}}},
+  {0x020e, {1|F|D, {0x020f}}},
+  {0x0210, {1|F|D, {0x0211}}},
+  {0x0212, {1|F|D, {0x0213}}},
+  {0x0214, {1|F|D, {0x0215}}},
+  {0x0216, {1|F|D, {0x0217}}},
+  {0x0218, {1|F|D, {0x0219}}},
+  {0x021a, {1|F|D, {0x021b}}},
+  {0x021c, {1|F|D, {0x021d}}},
+  {0x021e, {1|F|D, {0x021f}}},
+  {0x0220, {1|F|D, {0x019e}}},
+  {0x0222, {1|F|D, {0x0223}}},
+  {0x0224, {1|F|D, {0x0225}}},
+  {0x0226, {1|F|D, {0x0227}}},
+  {0x0228, {1|F|D, {0x0229}}},
+  {0x022a, {1|F|D, {0x022b}}},
+  {0x022c, {1|F|D, {0x022d}}},
+  {0x022e, {1|F|D, {0x022f}}},
+  {0x0230, {1|F|D, {0x0231}}},
+  {0x0232, {1|F|D, {0x0233}}},
+  {0x023a, {1|F|D, {0x2c65}}},
+  {0x023b, {1|F|D, {0x023c}}},
+  {0x023d, {1|F|D, {0x019a}}},
+  {0x023e, {1|F|D, {0x2c66}}},
+  {0x0241, {1|F|D, {0x0242}}},
+  {0x0243, {1|F|D, {0x0180}}},
+  {0x0244, {1|F|D, {0x0289}}},
+  {0x0245, {1|F|D, {0x028c}}},
+  {0x0246, {1|F|D, {0x0247}}},
+  {0x0248, {1|F|D, {0x0249}}},
+  {0x024a, {1|F|D, {0x024b}}},
+  {0x024c, {1|F|D, {0x024d}}},
+  {0x024e, {1|F|D, {0x024f}}},
+  {0x0345, {1|F|SU|I(26), {0x03b9}}},
+  {0x0370, {1|F|D, {0x0371}}},
+  {0x0372, {1|F|D, {0x0373}}},
+  {0x0376, {1|F|D, {0x0377}}},
+  {0x037f, {1|F|D, {0x03f3}}},
+  {0x0386, {1|F|D, {0x03ac}}},
+  {0x0388, {1|F|D, {0x03ad}}},
+  {0x0389, {1|F|D, {0x03ae}}},
+  {0x038a, {1|F|D, {0x03af}}},
+  {0x038c, {1|F|D, {0x03cc}}},
+  {0x038e, {1|F|D, {0x03cd}}},
+  {0x038f, {1|F|D, {0x03ce}}},
+  {0x0390, {3|F|SU|I(27), {0x03b9, 0x0308, 0x0301}}},
+  {0x0391, {1|F|D, {0x03b1}}},
+  {0x0392, {1|F|D, {0x03b2}}},
+  {0x0393, {1|F|D, {0x03b3}}},
+  {0x0394, {1|F|D, {0x03b4}}},
+  {0x0395, {1|F|D, {0x03b5}}},
+  {0x0396, {1|F|D, {0x03b6}}},
+  {0x0397, {1|F|D, {0x03b7}}},
+  {0x0398, {1|F|D, {0x03b8}}},
+  {0x0399, {1|F|D, {0x03b9}}},
+  {0x039a, {1|F|D, {0x03ba}}},
+  {0x039b, {1|F|D, {0x03bb}}},
+  {0x039c, {1|F|D, {0x03bc}}},
+  {0x039d, {1|F|D, {0x03bd}}},
+  {0x039e, {1|F|D, {0x03be}}},
+  {0x039f, {1|F|D, {0x03bf}}},
+  {0x03a0, {1|F|D, {0x03c0}}},
+  {0x03a1, {1|F|D, {0x03c1}}},
+  {0x03a3, {1|F|D, {0x03c3}}},
+  {0x03a4, {1|F|D, {0x03c4}}},
+  {0x03a5, {1|F|D, {0x03c5}}},
+  {0x03a6, {1|F|D, {0x03c6}}},
+  {0x03a7, {1|F|D, {0x03c7}}},
+  {0x03a8, {1|F|D, {0x03c8}}},
+  {0x03a9, {1|F|D, {0x03c9}}},
+  {0x03aa, {1|F|D, {0x03ca}}},
+  {0x03ab, {1|F|D, {0x03cb}}},
+  {0x03b0, {3|F|SU|I(30), {0x03c5, 0x0308, 0x0301}}},
+  {0x03c2, {1|F|SU|I(33), {0x03c3}}},
+  {0x03cf, {1|F|D, {0x03d7}}},
+  {0x03d0, {1|F|SU|I(34), {0x03b2}}},
+  {0x03d1, {1|F|SU|I(35), {0x03b8}}},
+  {0x03d5, {1|F|SU|I(36), {0x03c6}}},
+  {0x03d6, {1|F|SU|I(37), {0x03c0}}},
+  {0x03d8, {1|F|D, {0x03d9}}},
+  {0x03da, {1|F|D, {0x03db}}},
+  {0x03dc, {1|F|D, {0x03dd}}},
+  {0x03de, {1|F|D, {0x03df}}},
+  {0x03e0, {1|F|D, {0x03e1}}},
+  {0x03e2, {1|F|D, {0x03e3}}},
+  {0x03e4, {1|F|D, {0x03e5}}},
+  {0x03e6, {1|F|D, {0x03e7}}},
+  {0x03e8, {1|F|D, {0x03e9}}},
+  {0x03ea, {1|F|D, {0x03eb}}},
+  {0x03ec, {1|F|D, {0x03ed}}},
+  {0x03ee, {1|F|D, {0x03ef}}},
+  {0x03f0, {1|F|SU|I(38), {0x03ba}}},
+  {0x03f1, {1|F|SU|I(39), {0x03c1}}},
+  {0x03f4, {1|F|D, {0x03b8}}},
+  {0x03f5, {1|F|SU|I(40), {0x03b5}}},
+  {0x03f7, {1|F|D, {0x03f8}}},
+  {0x03f9, {1|F|D, {0x03f2}}},
+  {0x03fa, {1|F|D, {0x03fb}}},
+  {0x03fd, {1|F|D, {0x037b}}},
+  {0x03fe, {1|F|D, {0x037c}}},
+  {0x03ff, {1|F|D, {0x037d}}},
+  {0x0400, {1|F|D, {0x0450}}},
+  {0x0401, {1|F|D, {0x0451}}},
+  {0x0402, {1|F|D, {0x0452}}},
+  {0x0403, {1|F|D, {0x0453}}},
+  {0x0404, {1|F|D, {0x0454}}},
+  {0x0405, {1|F|D, {0x0455}}},
+  {0x0406, {1|F|D, {0x0456}}},
+  {0x0407, {1|F|D, {0x0457}}},
+  {0x0408, {1|F|D, {0x0458}}},
+  {0x0409, {1|F|D, {0x0459}}},
+  {0x040a, {1|F|D, {0x045a}}},
+  {0x040b, {1|F|D, {0x045b}}},
+  {0x040c, {1|F|D, {0x045c}}},
+  {0x040d, {1|F|D, {0x045d}}},
+  {0x040e, {1|F|D, {0x045e}}},
+  {0x040f, {1|F|D, {0x045f}}},
+  {0x0410, {1|F|D, {0x0430}}},
+  {0x0411, {1|F|D, {0x0431}}},
+  {0x0412, {1|F|D, {0x0432}}},
+  {0x0413, {1|F|D, {0x0433}}},
+  {0x0414, {1|F|D, {0x0434}}},
+  {0x0415, {1|F|D, {0x0435}}},
+  {0x0416, {1|F|D, {0x0436}}},
+  {0x0417, {1|F|D, {0x0437}}},
+  {0x0418, {1|F|D, {0x0438}}},
+  {0x0419, {1|F|D, {0x0439}}},
+  {0x041a, {1|F|D, {0x043a}}},
+  {0x041b, {1|F|D, {0x043b}}},
+  {0x041c, {1|F|D, {0x043c}}},
+  {0x041d, {1|F|D, {0x043d}}},
+  {0x041e, {1|F|D, {0x043e}}},
+  {0x041f, {1|F|D, {0x043f}}},
+  {0x0420, {1|F|D, {0x0440}}},
+  {0x0421, {1|F|D, {0x0441}}},
+  {0x0422, {1|F|D, {0x0442}}},
+  {0x0423, {1|F|D, {0x0443}}},
+  {0x0424, {1|F|D, {0x0444}}},
+  {0x0425, {1|F|D, {0x0445}}},
+  {0x0426, {1|F|D, {0x0446}}},
+  {0x0427, {1|F|D, {0x0447}}},
+  {0x0428, {1|F|D, {0x0448}}},
+  {0x0429, {1|F|D, {0x0449}}},
+  {0x042a, {1|F|D, {0x044a}}},
+  {0x042b, {1|F|D, {0x044b}}},
+  {0x042c, {1|F|D, {0x044c}}},
+  {0x042d, {1|F|D, {0x044d}}},
+  {0x042e, {1|F|D, {0x044e}}},
+  {0x042f, {1|F|D, {0x044f}}},
+  {0x0460, {1|F|D, {0x0461}}},
+  {0x0462, {1|F|D, {0x0463}}},
+  {0x0464, {1|F|D, {0x0465}}},
+  {0x0466, {1|F|D, {0x0467}}},
+  {0x0468, {1|F|D, {0x0469}}},
+  {0x046a, {1|F|D, {0x046b}}},
+  {0x046c, {1|F|D, {0x046d}}},
+  {0x046e, {1|F|D, {0x046f}}},
+  {0x0470, {1|F|D, {0x0471}}},
+  {0x0472, {1|F|D, {0x0473}}},
+  {0x0474, {1|F|D, {0x0475}}},
+  {0x0476, {1|F|D, {0x0477}}},
+  {0x0478, {1|F|D, {0x0479}}},
+  {0x047a, {1|F|D, {0x047b}}},
+  {0x047c, {1|F|D, {0x047d}}},
+  {0x047e, {1|F|D, {0x047f}}},
+  {0x0480, {1|F|D, {0x0481}}},
+  {0x048a, {1|F|D, {0x048b}}},
+  {0x048c, {1|F|D, {0x048d}}},
+  {0x048e, {1|F|D, {0x048f}}},
+  {0x0490, {1|F|D, {0x0491}}},
+  {0x0492, {1|F|D, {0x0493}}},
+  {0x0494, {1|F|D, {0x0495}}},
+  {0x0496, {1|F|D, {0x0497}}},
+  {0x0498, {1|F|D, {0x0499}}},
+  {0x049a, {1|F|D, {0x049b}}},
+  {0x049c, {1|F|D, {0x049d}}},
+  {0x049e, {1|F|D, {0x049f}}},
+  {0x04a0, {1|F|D, {0x04a1}}},
+  {0x04a2, {1|F|D, {0x04a3}}},
+  {0x04a4, {1|F|D, {0x04a5}}},
+  {0x04a6, {1|F|D, {0x04a7}}},
+  {0x04a8, {1|F|D, {0x04a9}}},
+  {0x04aa, {1|F|D, {0x04ab}}},
+  {0x04ac, {1|F|D, {0x04ad}}},
+  {0x04ae, {1|F|D, {0x04af}}},
+  {0x04b0, {1|F|D, {0x04b1}}},
+  {0x04b2, {1|F|D, {0x04b3}}},
+  {0x04b4, {1|F|D, {0x04b5}}},
+  {0x04b6, {1|F|D, {0x04b7}}},
+  {0x04b8, {1|F|D, {0x04b9}}},
+  {0x04ba, {1|F|D, {0x04bb}}},
+  {0x04bc, {1|F|D, {0x04bd}}},
+  {0x04be, {1|F|D, {0x04bf}}},
+  {0x04c0, {1|F|D, {0x04cf}}},
+  {0x04c1, {1|F|D, {0x04c2}}},
+  {0x04c3, {1|F|D, {0x04c4}}},
+  {0x04c5, {1|F|D, {0x04c6}}},
+  {0x04c7, {1|F|D, {0x04c8}}},
+  {0x04c9, {1|F|D, {0x04ca}}},
+  {0x04cb, {1|F|D, {0x04cc}}},
+  {0x04cd, {1|F|D, {0x04ce}}},
+  {0x04d0, {1|F|D, {0x04d1}}},
+  {0x04d2, {1|F|D, {0x04d3}}},
+  {0x04d4, {1|F|D, {0x04d5}}},
+  {0x04d6, {1|F|D, {0x04d7}}},
+  {0x04d8, {1|F|D, {0x04d9}}},
+  {0x04da, {1|F|D, {0x04db}}},
+  {0x04dc, {1|F|D, {0x04dd}}},
+  {0x04de, {1|F|D, {0x04df}}},
+  {0x04e0, {1|F|D, {0x04e1}}},
+  {0x04e2, {1|F|D, {0x04e3}}},
+  {0x04e4, {1|F|D, {0x04e5}}},
+  {0x04e6, {1|F|D, {0x04e7}}},
+  {0x04e8, {1|F|D, {0x04e9}}},
+  {0x04ea, {1|F|D, {0x04eb}}},
+  {0x04ec, {1|F|D, {0x04ed}}},
+  {0x04ee, {1|F|D, {0x04ef}}},
+  {0x04f0, {1|F|D, {0x04f1}}},
+  {0x04f2, {1|F|D, {0x04f3}}},
+  {0x04f4, {1|F|D, {0x04f5}}},
+  {0x04f6, {1|F|D, {0x04f7}}},
+  {0x04f8, {1|F|D, {0x04f9}}},
+  {0x04fa, {1|F|D, {0x04fb}}},
+  {0x04fc, {1|F|D, {0x04fd}}},
+  {0x04fe, {1|F|D, {0x04ff}}},
+  {0x0500, {1|F|D, {0x0501}}},
+  {0x0502, {1|F|D, {0x0503}}},
+  {0x0504, {1|F|D, {0x0505}}},
+  {0x0506, {1|F|D, {0x0507}}},
+  {0x0508, {1|F|D, {0x0509}}},
+  {0x050a, {1|F|D, {0x050b}}},
+  {0x050c, {1|F|D, {0x050d}}},
+  {0x050e, {1|F|D, {0x050f}}},
+  {0x0510, {1|F|D, {0x0511}}},
+  {0x0512, {1|F|D, {0x0513}}},
+  {0x0514, {1|F|D, {0x0515}}},
+  {0x0516, {1|F|D, {0x0517}}},
+  {0x0518, {1|F|D, {0x0519}}},
+  {0x051a, {1|F|D, {0x051b}}},
+  {0x051c, {1|F|D, {0x051d}}},
+  {0x051e, {1|F|D, {0x051f}}},
+  {0x0520, {1|F|D, {0x0521}}},
+  {0x0522, {1|F|D, {0x0523}}},
+  {0x0524, {1|F|D, {0x0525}}},
+  {0x0526, {1|F|D, {0x0527}}},
+  {0x0528, {1|F|D, {0x0529}}},
+  {0x052a, {1|F|D, {0x052b}}},
+  {0x052c, {1|F|D, {0x052d}}},
+  {0x052e, {1|F|D, {0x052f}}},
+  {0x0531, {1|F|D, {0x0561}}},
+  {0x0532, {1|F|D, {0x0562}}},
+  {0x0533, {1|F|D, {0x0563}}},
+  {0x0534, {1|F|D, {0x0564}}},
+  {0x0535, {1|F|D, {0x0565}}},
+  {0x0536, {1|F|D, {0x0566}}},
+  {0x0537, {1|F|D, {0x0567}}},
+  {0x0538, {1|F|D, {0x0568}}},
+  {0x0539, {1|F|D, {0x0569}}},
+  {0x053a, {1|F|D, {0x056a}}},
+  {0x053b, {1|F|D, {0x056b}}},
+  {0x053c, {1|F|D, {0x056c}}},
+  {0x053d, {1|F|D, {0x056d}}},
+  {0x053e, {1|F|D, {0x056e}}},
+  {0x053f, {1|F|D, {0x056f}}},
+  {0x0540, {1|F|D, {0x0570}}},
+  {0x0541, {1|F|D, {0x0571}}},
+  {0x0542, {1|F|D, {0x0572}}},
+  {0x0543, {1|F|D, {0x0573}}},
+  {0x0544, {1|F|D, {0x0574}}},
+  {0x0545, {1|F|D, {0x0575}}},
+  {0x0546, {1|F|D, {0x0576}}},
+  {0x0547, {1|F|D, {0x0577}}},
+  {0x0548, {1|F|D, {0x0578}}},
+  {0x0549, {1|F|D, {0x0579}}},
+  {0x054a, {1|F|D, {0x057a}}},
+  {0x054b, {1|F|D, {0x057b}}},
+  {0x054c, {1|F|D, {0x057c}}},
+  {0x054d, {1|F|D, {0x057d}}},
+  {0x054e, {1|F|D, {0x057e}}},
+  {0x054f, {1|F|D, {0x057f}}},
+  {0x0550, {1|F|D, {0x0580}}},
+  {0x0551, {1|F|D, {0x0581}}},
+  {0x0552, {1|F|D, {0x0582}}},
+  {0x0553, {1|F|D, {0x0583}}},
+  {0x0554, {1|F|D, {0x0584}}},
+  {0x0555, {1|F|D, {0x0585}}},
+  {0x0556, {1|F|D, {0x0586}}},
+  {0x0587, {2|F|ST|SU|I(41), {0x0565, 0x0582}}},
+  {0x10a0, {1|F|D, {0x2d00}}},
+  {0x10a1, {1|F|D, {0x2d01}}},
+  {0x10a2, {1|F|D, {0x2d02}}},
+  {0x10a3, {1|F|D, {0x2d03}}},
+  {0x10a4, {1|F|D, {0x2d04}}},
+  {0x10a5, {1|F|D, {0x2d05}}},
+  {0x10a6, {1|F|D, {0x2d06}}},
+  {0x10a7, {1|F|D, {0x2d07}}},
+  {0x10a8, {1|F|D, {0x2d08}}},
+  {0x10a9, {1|F|D, {0x2d09}}},
+  {0x10aa, {1|F|D, {0x2d0a}}},
+  {0x10ab, {1|F|D, {0x2d0b}}},
+  {0x10ac, {1|F|D, {0x2d0c}}},
+  {0x10ad, {1|F|D, {0x2d0d}}},
+  {0x10ae, {1|F|D, {0x2d0e}}},
+  {0x10af, {1|F|D, {0x2d0f}}},
+  {0x10b0, {1|F|D, {0x2d10}}},
+  {0x10b1, {1|F|D, {0x2d11}}},
+  {0x10b2, {1|F|D, {0x2d12}}},
+  {0x10b3, {1|F|D, {0x2d13}}},
+  {0x10b4, {1|F|D, {0x2d14}}},
+  {0x10b5, {1|F|D, {0x2d15}}},
+  {0x10b6, {1|F|D, {0x2d16}}},
+  {0x10b7, {1|F|D, {0x2d17}}},
+  {0x10b8, {1|F|D, {0x2d18}}},
+  {0x10b9, {1|F|D, {0x2d19}}},
+  {0x10ba, {1|F|D, {0x2d1a}}},
+  {0x10bb, {1|F|D, {0x2d1b}}},
+  {0x10bc, {1|F|D, {0x2d1c}}},
+  {0x10bd, {1|F|D, {0x2d1d}}},
+  {0x10be, {1|F|D, {0x2d1e}}},
+  {0x10bf, {1|F|D, {0x2d1f}}},
+  {0x10c0, {1|F|D, {0x2d20}}},
+  {0x10c1, {1|F|D, {0x2d21}}},
+  {0x10c2, {1|F|D, {0x2d22}}},
+  {0x10c3, {1|F|D, {0x2d23}}},
+  {0x10c4, {1|F|D, {0x2d24}}},
+  {0x10c5, {1|F|D, {0x2d25}}},
+  {0x10c7, {1|F|D, {0x2d27}}},
+  {0x10cd, {1|F|D, {0x2d2d}}},
+  {0x13f8, {1|F|U, {0x13f0}}},
+  {0x13f9, {1|F|U, {0x13f1}}},
+  {0x13fa, {1|F|U, {0x13f2}}},
+  {0x13fb, {1|F|U, {0x13f3}}},
+  {0x13fc, {1|F|U, {0x13f4}}},
+  {0x13fd, {1|F|U, {0x13f5}}},
+  {0x1c80, {1|F|SU|I(45), {0x0432}}},
+  {0x1c81, {1|F|SU|I(46), {0x0434}}},
+  {0x1c82, {1|F|SU|I(47), {0x043e}}},
+  {0x1c83, {1|F|SU|I(48), {0x0441}}},
+  {0x1c84, {1|F|SU|I(49), {0x0442}}},
+  {0x1c85, {1|F|SU|I(50), {0x0442}}},
+  {0x1c86, {1|F|SU|I(51), {0x044a}}},
+  {0x1c87, {1|F|SU|I(52), {0x0463}}},
+  {0x1c88, {1|F|SU|I(53), {0xa64b}}},
+  {0x1e00, {1|F|D, {0x1e01}}},
+  {0x1e02, {1|F|D, {0x1e03}}},
+  {0x1e04, {1|F|D, {0x1e05}}},
+  {0x1e06, {1|F|D, {0x1e07}}},
+  {0x1e08, {1|F|D, {0x1e09}}},
+  {0x1e0a, {1|F|D, {0x1e0b}}},
+  {0x1e0c, {1|F|D, {0x1e0d}}},
+  {0x1e0e, {1|F|D, {0x1e0f}}},
+  {0x1e10, {1|F|D, {0x1e11}}},
+  {0x1e12, {1|F|D, {0x1e13}}},
+  {0x1e14, {1|F|D, {0x1e15}}},
+  {0x1e16, {1|F|D, {0x1e17}}},
+  {0x1e18, {1|F|D, {0x1e19}}},
+  {0x1e1a, {1|F|D, {0x1e1b}}},
+  {0x1e1c, {1|F|D, {0x1e1d}}},
+  {0x1e1e, {1|F|D, {0x1e1f}}},
+  {0x1e20, {1|F|D, {0x1e21}}},
+  {0x1e22, {1|F|D, {0x1e23}}},
+  {0x1e24, {1|F|D, {0x1e25}}},
+  {0x1e26, {1|F|D, {0x1e27}}},
+  {0x1e28, {1|F|D, {0x1e29}}},
+  {0x1e2a, {1|F|D, {0x1e2b}}},
+  {0x1e2c, {1|F|D, {0x1e2d}}},
+  {0x1e2e, {1|F|D, {0x1e2f}}},
+  {0x1e30, {1|F|D, {0x1e31}}},
+  {0x1e32, {1|F|D, {0x1e33}}},
+  {0x1e34, {1|F|D, {0x1e35}}},
+  {0x1e36, {1|F|D, {0x1e37}}},
+  {0x1e38, {1|F|D, {0x1e39}}},
+  {0x1e3a, {1|F|D, {0x1e3b}}},
+  {0x1e3c, {1|F|D, {0x1e3d}}},
+  {0x1e3e, {1|F|D, {0x1e3f}}},
+  {0x1e40, {1|F|D, {0x1e41}}},
+  {0x1e42, {1|F|D, {0x1e43}}},
+  {0x1e44, {1|F|D, {0x1e45}}},
+  {0x1e46, {1|F|D, {0x1e47}}},
+  {0x1e48, {1|F|D, {0x1e49}}},
+  {0x1e4a, {1|F|D, {0x1e4b}}},
+  {0x1e4c, {1|F|D, {0x1e4d}}},
+  {0x1e4e, {1|F|D, {0x1e4f}}},
+  {0x1e50, {1|F|D, {0x1e51}}},
+  {0x1e52, {1|F|D, {0x1e53}}},
+  {0x1e54, {1|F|D, {0x1e55}}},
+  {0x1e56, {1|F|D, {0x1e57}}},
+  {0x1e58, {1|F|D, {0x1e59}}},
+  {0x1e5a, {1|F|D, {0x1e5b}}},
+  {0x1e5c, {1|F|D, {0x1e5d}}},
+  {0x1e5e, {1|F|D, {0x1e5f}}},
+  {0x1e60, {1|F|D, {0x1e61}}},
+  {0x1e62, {1|F|D, {0x1e63}}},
+  {0x1e64, {1|F|D, {0x1e65}}},
+  {0x1e66, {1|F|D, {0x1e67}}},
+  {0x1e68, {1|F|D, {0x1e69}}},
+  {0x1e6a, {1|F|D, {0x1e6b}}},
+  {0x1e6c, {1|F|D, {0x1e6d}}},
+  {0x1e6e, {1|F|D, {0x1e6f}}},
+  {0x1e70, {1|F|D, {0x1e71}}},
+  {0x1e72, {1|F|D, {0x1e73}}},
+  {0x1e74, {1|F|D, {0x1e75}}},
+  {0x1e76, {1|F|D, {0x1e77}}},
+  {0x1e78, {1|F|D, {0x1e79}}},
+  {0x1e7a, {1|F|D, {0x1e7b}}},
+  {0x1e7c, {1|F|D, {0x1e7d}}},
+  {0x1e7e, {1|F|D, {0x1e7f}}},
+  {0x1e80, {1|F|D, {0x1e81}}},
+  {0x1e82, {1|F|D, {0x1e83}}},
+  {0x1e84, {1|F|D, {0x1e85}}},
+  {0x1e86, {1|F|D, {0x1e87}}},
+  {0x1e88, {1|F|D, {0x1e89}}},
+  {0x1e8a, {1|F|D, {0x1e8b}}},
+  {0x1e8c, {1|F|D, {0x1e8d}}},
+  {0x1e8e, {1|F|D, {0x1e8f}}},
+  {0x1e90, {1|F|D, {0x1e91}}},
+  {0x1e92, {1|F|D, {0x1e93}}},
+  {0x1e94, {1|F|D, {0x1e95}}},
+  {0x1e96, {2|F|SU|I(54), {0x0068, 0x0331}}},
+  {0x1e97, {2|F|SU|I(56), {0x0074, 0x0308}}},
+  {0x1e98, {2|F|SU|I(58), {0x0077, 0x030a}}},
+  {0x1e99, {2|F|SU|I(60), {0x0079, 0x030a}}},
+  {0x1e9a, {2|F|SU|I(62), {0x0061, 0x02be}}},
+  {0x1e9b, {1|F|SU|I(64), {0x1e61}}},
+  {0x1e9e, {2|F|SL|I(65), {0x0073, 0x0073}}},
+  {0x1ea0, {1|F|D, {0x1ea1}}},
+  {0x1ea2, {1|F|D, {0x1ea3}}},
+  {0x1ea4, {1|F|D, {0x1ea5}}},
+  {0x1ea6, {1|F|D, {0x1ea7}}},
+  {0x1ea8, {1|F|D, {0x1ea9}}},
+  {0x1eaa, {1|F|D, {0x1eab}}},
+  {0x1eac, {1|F|D, {0x1ead}}},
+  {0x1eae, {1|F|D, {0x1eaf}}},
+  {0x1eb0, {1|F|D, {0x1eb1}}},
+  {0x1eb2, {1|F|D, {0x1eb3}}},
+  {0x1eb4, {1|F|D, {0x1eb5}}},
+  {0x1eb6, {1|F|D, {0x1eb7}}},
+  {0x1eb8, {1|F|D, {0x1eb9}}},
+  {0x1eba, {1|F|D, {0x1ebb}}},
+  {0x1ebc, {1|F|D, {0x1ebd}}},
+  {0x1ebe, {1|F|D, {0x1ebf}}},
+  {0x1ec0, {1|F|D, {0x1ec1}}},
+  {0x1ec2, {1|F|D, {0x1ec3}}},
+  {0x1ec4, {1|F|D, {0x1ec5}}},
+  {0x1ec6, {1|F|D, {0x1ec7}}},
+  {0x1ec8, {1|F|D, {0x1ec9}}},
+  {0x1eca, {1|F|D, {0x1ecb}}},
+  {0x1ecc, {1|F|D, {0x1ecd}}},
+  {0x1ece, {1|F|D, {0x1ecf}}},
+  {0x1ed0, {1|F|D, {0x1ed1}}},
+  {0x1ed2, {1|F|D, {0x1ed3}}},
+  {0x1ed4, {1|F|D, {0x1ed5}}},
+  {0x1ed6, {1|F|D, {0x1ed7}}},
+  {0x1ed8, {1|F|D, {0x1ed9}}},
+  {0x1eda, {1|F|D, {0x1edb}}},
+  {0x1edc, {1|F|D, {0x1edd}}},
+  {0x1ede, {1|F|D, {0x1edf}}},
+  {0x1ee0, {1|F|D, {0x1ee1}}},
+  {0x1ee2, {1|F|D, {0x1ee3}}},
+  {0x1ee4, {1|F|D, {0x1ee5}}},
+  {0x1ee6, {1|F|D, {0x1ee7}}},
+  {0x1ee8, {1|F|D, {0x1ee9}}},
+  {0x1eea, {1|F|D, {0x1eeb}}},
+  {0x1eec, {1|F|D, {0x1eed}}},
+  {0x1eee, {1|F|D, {0x1eef}}},
+  {0x1ef0, {1|F|D, {0x1ef1}}},
+  {0x1ef2, {1|F|D, {0x1ef3}}},
+  {0x1ef4, {1|F|D, {0x1ef5}}},
+  {0x1ef6, {1|F|D, {0x1ef7}}},
+  {0x1ef8, {1|F|D, {0x1ef9}}},
+  {0x1efa, {1|F|D, {0x1efb}}},
+  {0x1efc, {1|F|D, {0x1efd}}},
+  {0x1efe, {1|F|D, {0x1eff}}},
+  {0x1f08, {1|F|D, {0x1f00}}},
+  {0x1f09, {1|F|D, {0x1f01}}},
+  {0x1f0a, {1|F|D, {0x1f02}}},
+  {0x1f0b, {1|F|D, {0x1f03}}},
+  {0x1f0c, {1|F|D, {0x1f04}}},
+  {0x1f0d, {1|F|D, {0x1f05}}},
+  {0x1f0e, {1|F|D, {0x1f06}}},
+  {0x1f0f, {1|F|D, {0x1f07}}},
+  {0x1f18, {1|F|D, {0x1f10}}},
+  {0x1f19, {1|F|D, {0x1f11}}},
+  {0x1f1a, {1|F|D, {0x1f12}}},
+  {0x1f1b, {1|F|D, {0x1f13}}},
+  {0x1f1c, {1|F|D, {0x1f14}}},
+  {0x1f1d, {1|F|D, {0x1f15}}},
+  {0x1f28, {1|F|D, {0x1f20}}},
+  {0x1f29, {1|F|D, {0x1f21}}},
+  {0x1f2a, {1|F|D, {0x1f22}}},
+  {0x1f2b, {1|F|D, {0x1f23}}},
+  {0x1f2c, {1|F|D, {0x1f24}}},
+  {0x1f2d, {1|F|D, {0x1f25}}},
+  {0x1f2e, {1|F|D, {0x1f26}}},
+  {0x1f2f, {1|F|D, {0x1f27}}},
+  {0x1f38, {1|F|D, {0x1f30}}},
+  {0x1f39, {1|F|D, {0x1f31}}},
+  {0x1f3a, {1|F|D, {0x1f32}}},
+  {0x1f3b, {1|F|D, {0x1f33}}},
+  {0x1f3c, {1|F|D, {0x1f34}}},
+  {0x1f3d, {1|F|D, {0x1f35}}},
+  {0x1f3e, {1|F|D, {0x1f36}}},
+  {0x1f3f, {1|F|D, {0x1f37}}},
+  {0x1f48, {1|F|D, {0x1f40}}},
+  {0x1f49, {1|F|D, {0x1f41}}},
+  {0x1f4a, {1|F|D, {0x1f42}}},
+  {0x1f4b, {1|F|D, {0x1f43}}},
+  {0x1f4c, {1|F|D, {0x1f44}}},
+  {0x1f4d, {1|F|D, {0x1f45}}},
+  {0x1f50, {2|F|SU|I(66), {0x03c5, 0x0313}}},
+  {0x1f52, {3|F|SU|I(68), {0x03c5, 0x0313, 0x0300}}},
+  {0x1f54, {3|F|SU|I(71), {0x03c5, 0x0313, 0x0301}}},
+  {0x1f56, {3|F|SU|I(74), {0x03c5, 0x0313, 0x0342}}},
+  {0x1f59, {1|F|D, {0x1f51}}},
+  {0x1f5b, {1|F|D, {0x1f53}}},
+  {0x1f5d, {1|F|D, {0x1f55}}},
+  {0x1f5f, {1|F|D, {0x1f57}}},
+  {0x1f68, {1|F|D, {0x1f60}}},
+  {0x1f69, {1|F|D, {0x1f61}}},
+  {0x1f6a, {1|F|D, {0x1f62}}},
+  {0x1f6b, {1|F|D, {0x1f63}}},
+  {0x1f6c, {1|F|D, {0x1f64}}},
+  {0x1f6d, {1|F|D, {0x1f65}}},
+  {0x1f6e, {1|F|D, {0x1f66}}},
+  {0x1f6f, {1|F|D, {0x1f67}}},
+  {0x1f80, {2|F|ST|SU|I(77), {0x1f00, 0x03b9}}},
+  {0x1f81, {2|F|ST|SU|I(80), {0x1f01, 0x03b9}}},
+  {0x1f82, {2|F|ST|SU|I(83), {0x1f02, 0x03b9}}},
+  {0x1f83, {2|F|ST|SU|I(86), {0x1f03, 0x03b9}}},
+  {0x1f84, {2|F|ST|SU|I(89), {0x1f04, 0x03b9}}},
+  {0x1f85, {2|F|ST|SU|I(92), {0x1f05, 0x03b9}}},
+  {0x1f86, {2|F|ST|SU|I(95), {0x1f06, 0x03b9}}},
+  {0x1f87, {2|F|ST|SU|I(98), {0x1f07, 0x03b9}}},
+  {0x1f88, {2|F|IT|SL|SU|I(101), {0x1f00, 0x03b9}}},
+  {0x1f89, {2|F|IT|SL|SU|I(106), {0x1f01, 0x03b9}}},
+  {0x1f8a, {2|F|IT|SL|SU|I(111), {0x1f02, 0x03b9}}},
+  {0x1f8b, {2|F|IT|SL|SU|I(116), {0x1f03, 0x03b9}}},
+  {0x1f8c, {2|F|IT|SL|SU|I(121), {0x1f04, 0x03b9}}},
+  {0x1f8d, {2|F|IT|SL|SU|I(126), {0x1f05, 0x03b9}}},
+  {0x1f8e, {2|F|IT|SL|SU|I(131), {0x1f06, 0x03b9}}},
+  {0x1f8f, {2|F|IT|SL|SU|I(136), {0x1f07, 0x03b9}}},
+  {0x1f90, {2|F|ST|SU|I(141), {0x1f20, 0x03b9}}},
+  {0x1f91, {2|F|ST|SU|I(144), {0x1f21, 0x03b9}}},
+  {0x1f92, {2|F|ST|SU|I(147), {0x1f22, 0x03b9}}},
+  {0x1f93, {2|F|ST|SU|I(150), {0x1f23, 0x03b9}}},
+  {0x1f94, {2|F|ST|SU|I(153), {0x1f24, 0x03b9}}},
+  {0x1f95, {2|F|ST|SU|I(156), {0x1f25, 0x03b9}}},
+  {0x1f96, {2|F|ST|SU|I(159), {0x1f26, 0x03b9}}},
+  {0x1f97, {2|F|ST|SU|I(162), {0x1f27, 0x03b9}}},
+  {0x1f98, {2|F|IT|SL|SU|I(165), {0x1f20, 0x03b9}}},
+  {0x1f99, {2|F|IT|SL|SU|I(170), {0x1f21, 0x03b9}}},
+  {0x1f9a, {2|F|IT|SL|SU|I(175), {0x1f22, 0x03b9}}},
+  {0x1f9b, {2|F|IT|SL|SU|I(180), {0x1f23, 0x03b9}}},
+  {0x1f9c, {2|F|IT|SL|SU|I(185), {0x1f24, 0x03b9}}},
+  {0x1f9d, {2|F|IT|SL|SU|I(190), {0x1f25, 0x03b9}}},
+  {0x1f9e, {2|F|IT|SL|SU|I(195), {0x1f26, 0x03b9}}},
+  {0x1f9f, {2|F|IT|SL|SU|I(200), {0x1f27, 0x03b9}}},
+  {0x1fa0, {2|F|ST|SU|I(205), {0x1f60, 0x03b9}}},
+  {0x1fa1, {2|F|ST|SU|I(208), {0x1f61, 0x03b9}}},
+  {0x1fa2, {2|F|ST|SU|I(211), {0x1f62, 0x03b9}}},
+  {0x1fa3, {2|F|ST|SU|I(214), {0x1f63, 0x03b9}}},
+  {0x1fa4, {2|F|ST|SU|I(217), {0x1f64, 0x03b9}}},
+  {0x1fa5, {2|F|ST|SU|I(220), {0x1f65, 0x03b9}}},
+  {0x1fa6, {2|F|ST|SU|I(223), {0x1f66, 0x03b9}}},
+  {0x1fa7, {2|F|ST|SU|I(226), {0x1f67, 0x03b9}}},
+  {0x1fa8, {2|F|IT|SL|SU|I(229), {0x1f60, 0x03b9}}},
+  {0x1fa9, {2|F|IT|SL|SU|I(234), {0x1f61, 0x03b9}}},
+  {0x1faa, {2|F|IT|SL|SU|I(239), {0x1f62, 0x03b9}}},
+  {0x1fab, {2|F|IT|SL|SU|I(244), {0x1f63, 0x03b9}}},
+  {0x1fac, {2|F|IT|SL|SU|I(249), {0x1f64, 0x03b9}}},
+  {0x1fad, {2|F|IT|SL|SU|I(254), {0x1f65, 0x03b9}}},
+  {0x1fae, {2|F|IT|SL|SU|I(259), {0x1f66, 0x03b9}}},
+  {0x1faf, {2|F|IT|SL|SU|I(264), {0x1f67, 0x03b9}}},
+  {0x1fb2, {2|F|ST|SU|I(269), {0x1f70, 0x03b9}}},
+  {0x1fb3, {2|F|ST|SU|I(273), {0x03b1, 0x03b9}}},
+  {0x1fb4, {2|F|ST|SU|I(276), {0x03ac, 0x03b9}}},
+  {0x1fb6, {2|F|SU|I(280), {0x03b1, 0x0342}}},
+  {0x1fb7, {3|F|ST|SU|I(282), {0x03b1, 0x0342, 0x03b9}}},
+  {0x1fb8, {1|F|D, {0x1fb0}}},
+  {0x1fb9, {1|F|D, {0x1fb1}}},
+  {0x1fba, {1|F|D, {0x1f70}}},
+  {0x1fbb, {1|F|D, {0x1f71}}},
+  {0x1fbc, {2|F|IT|SL|SU|I(288), {0x03b1, 0x03b9}}},
+  {0x1fbe, {1|F|SU|I(293), {0x03b9}}},
+  {0x1fc2, {2|F|ST|SU|I(294), {0x1f74, 0x03b9}}},
+  {0x1fc3, {2|F|ST|SU|I(298), {0x03b7, 0x03b9}}},
+  {0x1fc4, {2|F|ST|SU|I(301), {0x03ae, 0x03b9}}},
+  {0x1fc6, {2|F|SU|I(305), {0x03b7, 0x0342}}},
+  {0x1fc7, {3|F|ST|SU|I(307), {0x03b7, 0x0342, 0x03b9}}},
+  {0x1fc8, {1|F|D, {0x1f72}}},
+  {0x1fc9, {1|F|D, {0x1f73}}},
+  {0x1fca, {1|F|D, {0x1f74}}},
+  {0x1fcb, {1|F|D, {0x1f75}}},
+  {0x1fcc, {2|F|IT|SL|SU|I(313), {0x03b7, 0x03b9}}},
+  {0x1fd2, {3|F|SU|I(318), {0x03b9, 0x0308, 0x0300}}},
+  {0x1fd3, {3|F|SU|I(321), {0x03b9, 0x0308, 0x0301}}},
+  {0x1fd6, {2|F|SU|I(324), {0x03b9, 0x0342}}},
+  {0x1fd7, {3|F|SU|I(326), {0x03b9, 0x0308, 0x0342}}},
+  {0x1fd8, {1|F|D, {0x1fd0}}},
+  {0x1fd9, {1|F|D, {0x1fd1}}},
+  {0x1fda, {1|F|D, {0x1f76}}},
+  {0x1fdb, {1|F|D, {0x1f77}}},
+  {0x1fe2, {3|F|SU|I(329), {0x03c5, 0x0308, 0x0300}}},
+  {0x1fe3, {3|F|SU|I(332), {0x03c5, 0x0308, 0x0301}}},
+  {0x1fe4, {2|F|SU|I(335), {0x03c1, 0x0313}}},
+  {0x1fe6, {2|F|SU|I(337), {0x03c5, 0x0342}}},
+  {0x1fe7, {3|F|SU|I(339), {0x03c5, 0x0308, 0x0342}}},
+  {0x1fe8, {1|F|D, {0x1fe0}}},
+  {0x1fe9, {1|F|D, {0x1fe1}}},
+  {0x1fea, {1|F|D, {0x1f7a}}},
+  {0x1feb, {1|F|D, {0x1f7b}}},
+  {0x1fec, {1|F|D, {0x1fe5}}},
+  {0x1ff2, {2|F|ST|SU|I(342), {0x1f7c, 0x03b9}}},
+  {0x1ff3, {2|F|ST|SU|I(346), {0x03c9, 0x03b9}}},
+  {0x1ff4, {2|F|ST|SU|I(349), {0x03ce, 0x03b9}}},
+  {0x1ff6, {2|F|SU|I(353), {0x03c9, 0x0342}}},
+  {0x1ff7, {3|F|ST|SU|I(355), {0x03c9, 0x0342, 0x03b9}}},
+  {0x1ff8, {1|F|D, {0x1f78}}},
+  {0x1ff9, {1|F|D, {0x1f79}}},
+  {0x1ffa, {1|F|D, {0x1f7c}}},
+  {0x1ffb, {1|F|D, {0x1f7d}}},
+  {0x1ffc, {2|F|IT|SL|SU|I(361), {0x03c9, 0x03b9}}},
+  {0x2126, {1|F|D, {0x03c9}}},
+  {0x212a, {1|F|D, {0x006b}}},
+  {0x212b, {1|F|D, {0x00e5}}},
+  {0x2132, {1|F|D, {0x214e}}},
+  {0x2160, {1|F|D, {0x2170}}},
+  {0x2161, {1|F|D, {0x2171}}},
+  {0x2162, {1|F|D, {0x2172}}},
+  {0x2163, {1|F|D, {0x2173}}},
+  {0x2164, {1|F|D, {0x2174}}},
+  {0x2165, {1|F|D, {0x2175}}},
+  {0x2166, {1|F|D, {0x2176}}},
+  {0x2167, {1|F|D, {0x2177}}},
+  {0x2168, {1|F|D, {0x2178}}},
+  {0x2169, {1|F|D, {0x2179}}},
+  {0x216a, {1|F|D, {0x217a}}},
+  {0x216b, {1|F|D, {0x217b}}},
+  {0x216c, {1|F|D, {0x217c}}},
+  {0x216d, {1|F|D, {0x217d}}},
+  {0x216e, {1|F|D, {0x217e}}},
+  {0x216f, {1|F|D, {0x217f}}},
+  {0x2183, {1|F|D, {0x2184}}},
+  {0x24b6, {1|F|D, {0x24d0}}},
+  {0x24b7, {1|F|D, {0x24d1}}},
+  {0x24b8, {1|F|D, {0x24d2}}},
+  {0x24b9, {1|F|D, {0x24d3}}},
+  {0x24ba, {1|F|D, {0x24d4}}},
+  {0x24bb, {1|F|D, {0x24d5}}},
+  {0x24bc, {1|F|D, {0x24d6}}},
+  {0x24bd, {1|F|D, {0x24d7}}},
+  {0x24be, {1|F|D, {0x24d8}}},
+  {0x24bf, {1|F|D, {0x24d9}}},
+  {0x24c0, {1|F|D, {0x24da}}},
+  {0x24c1, {1|F|D, {0x24db}}},
+  {0x24c2, {1|F|D, {0x24dc}}},
+  {0x24c3, {1|F|D, {0x24dd}}},
+  {0x24c4, {1|F|D, {0x24de}}},
+  {0x24c5, {1|F|D, {0x24df}}},
+  {0x24c6, {1|F|D, {0x24e0}}},
+  {0x24c7, {1|F|D, {0x24e1}}},
+  {0x24c8, {1|F|D, {0x24e2}}},
+  {0x24c9, {1|F|D, {0x24e3}}},
+  {0x24ca, {1|F|D, {0x24e4}}},
+  {0x24cb, {1|F|D, {0x24e5}}},
+  {0x24cc, {1|F|D, {0x24e6}}},
+  {0x24cd, {1|F|D, {0x24e7}}},
+  {0x24ce, {1|F|D, {0x24e8}}},
+  {0x24cf, {1|F|D, {0x24e9}}},
+  {0x2c00, {1|F|D, {0x2c30}}},
+  {0x2c01, {1|F|D, {0x2c31}}},
+  {0x2c02, {1|F|D, {0x2c32}}},
+  {0x2c03, {1|F|D, {0x2c33}}},
+  {0x2c04, {1|F|D, {0x2c34}}},
+  {0x2c05, {1|F|D, {0x2c35}}},
+  {0x2c06, {1|F|D, {0x2c36}}},
+  {0x2c07, {1|F|D, {0x2c37}}},
+  {0x2c08, {1|F|D, {0x2c38}}},
+  {0x2c09, {1|F|D, {0x2c39}}},
+  {0x2c0a, {1|F|D, {0x2c3a}}},
+  {0x2c0b, {1|F|D, {0x2c3b}}},
+  {0x2c0c, {1|F|D, {0x2c3c}}},
+  {0x2c0d, {1|F|D, {0x2c3d}}},
+  {0x2c0e, {1|F|D, {0x2c3e}}},
+  {0x2c0f, {1|F|D, {0x2c3f}}},
+  {0x2c10, {1|F|D, {0x2c40}}},
+  {0x2c11, {1|F|D, {0x2c41}}},
+  {0x2c12, {1|F|D, {0x2c42}}},
+  {0x2c13, {1|F|D, {0x2c43}}},
+  {0x2c14, {1|F|D, {0x2c44}}},
+  {0x2c15, {1|F|D, {0x2c45}}},
+  {0x2c16, {1|F|D, {0x2c46}}},
+  {0x2c17, {1|F|D, {0x2c47}}},
+  {0x2c18, {1|F|D, {0x2c48}}},
+  {0x2c19, {1|F|D, {0x2c49}}},
+  {0x2c1a, {1|F|D, {0x2c4a}}},
+  {0x2c1b, {1|F|D, {0x2c4b}}},
+  {0x2c1c, {1|F|D, {0x2c4c}}},
+  {0x2c1d, {1|F|D, {0x2c4d}}},
+  {0x2c1e, {1|F|D, {0x2c4e}}},
+  {0x2c1f, {1|F|D, {0x2c4f}}},
+  {0x2c20, {1|F|D, {0x2c50}}},
+  {0x2c21, {1|F|D, {0x2c51}}},
+  {0x2c22, {1|F|D, {0x2c52}}},
+  {0x2c23, {1|F|D, {0x2c53}}},
+  {0x2c24, {1|F|D, {0x2c54}}},
+  {0x2c25, {1|F|D, {0x2c55}}},
+  {0x2c26, {1|F|D, {0x2c56}}},
+  {0x2c27, {1|F|D, {0x2c57}}},
+  {0x2c28, {1|F|D, {0x2c58}}},
+  {0x2c29, {1|F|D, {0x2c59}}},
+  {0x2c2a, {1|F|D, {0x2c5a}}},
+  {0x2c2b, {1|F|D, {0x2c5b}}},
+  {0x2c2c, {1|F|D, {0x2c5c}}},
+  {0x2c2d, {1|F|D, {0x2c5d}}},
+  {0x2c2e, {1|F|D, {0x2c5e}}},
+  {0x2c60, {1|F|D, {0x2c61}}},
+  {0x2c62, {1|F|D, {0x026b}}},
+  {0x2c63, {1|F|D, {0x1d7d}}},
+  {0x2c64, {1|F|D, {0x027d}}},
+  {0x2c67, {1|F|D, {0x2c68}}},
+  {0x2c69, {1|F|D, {0x2c6a}}},
+  {0x2c6b, {1|F|D, {0x2c6c}}},
+  {0x2c6d, {1|F|D, {0x0251}}},
+  {0x2c6e, {1|F|D, {0x0271}}},
+  {0x2c6f, {1|F|D, {0x0250}}},
+  {0x2c70, {1|F|D, {0x0252}}},
+  {0x2c72, {1|F|D, {0x2c73}}},
+  {0x2c75, {1|F|D, {0x2c76}}},
+  {0x2c7e, {1|F|D, {0x023f}}},
+  {0x2c7f, {1|F|D, {0x0240}}},
+  {0x2c80, {1|F|D, {0x2c81}}},
+  {0x2c82, {1|F|D, {0x2c83}}},
+  {0x2c84, {1|F|D, {0x2c85}}},
+  {0x2c86, {1|F|D, {0x2c87}}},
+  {0x2c88, {1|F|D, {0x2c89}}},
+  {0x2c8a, {1|F|D, {0x2c8b}}},
+  {0x2c8c, {1|F|D, {0x2c8d}}},
+  {0x2c8e, {1|F|D, {0x2c8f}}},
+  {0x2c90, {1|F|D, {0x2c91}}},
+  {0x2c92, {1|F|D, {0x2c93}}},
+  {0x2c94, {1|F|D, {0x2c95}}},
+  {0x2c96, {1|F|D, {0x2c97}}},
+  {0x2c98, {1|F|D, {0x2c99}}},
+  {0x2c9a, {1|F|D, {0x2c9b}}},
+  {0x2c9c, {1|F|D, {0x2c9d}}},
+  {0x2c9e, {1|F|D, {0x2c9f}}},
+  {0x2ca0, {1|F|D, {0x2ca1}}},
+  {0x2ca2, {1|F|D, {0x2ca3}}},
+  {0x2ca4, {1|F|D, {0x2ca5}}},
+  {0x2ca6, {1|F|D, {0x2ca7}}},
+  {0x2ca8, {1|F|D, {0x2ca9}}},
+  {0x2caa, {1|F|D, {0x2cab}}},
+  {0x2cac, {1|F|D, {0x2cad}}},
+  {0x2cae, {1|F|D, {0x2caf}}},
+  {0x2cb0, {1|F|D, {0x2cb1}}},
+  {0x2cb2, {1|F|D, {0x2cb3}}},
+  {0x2cb4, {1|F|D, {0x2cb5}}},
+  {0x2cb6, {1|F|D, {0x2cb7}}},
+  {0x2cb8, {1|F|D, {0x2cb9}}},
+  {0x2cba, {1|F|D, {0x2cbb}}},
+  {0x2cbc, {1|F|D, {0x2cbd}}},
+  {0x2cbe, {1|F|D, {0x2cbf}}},
+  {0x2cc0, {1|F|D, {0x2cc1}}},
+  {0x2cc2, {1|F|D, {0x2cc3}}},
+  {0x2cc4, {1|F|D, {0x2cc5}}},
+  {0x2cc6, {1|F|D, {0x2cc7}}},
+  {0x2cc8, {1|F|D, {0x2cc9}}},
+  {0x2cca, {1|F|D, {0x2ccb}}},
+  {0x2ccc, {1|F|D, {0x2ccd}}},
+  {0x2cce, {1|F|D, {0x2ccf}}},
+  {0x2cd0, {1|F|D, {0x2cd1}}},
+  {0x2cd2, {1|F|D, {0x2cd3}}},
+  {0x2cd4, {1|F|D, {0x2cd5}}},
+  {0x2cd6, {1|F|D, {0x2cd7}}},
+  {0x2cd8, {1|F|D, {0x2cd9}}},
+  {0x2cda, {1|F|D, {0x2cdb}}},
+  {0x2cdc, {1|F|D, {0x2cdd}}},
+  {0x2cde, {1|F|D, {0x2cdf}}},
+  {0x2ce0, {1|F|D, {0x2ce1}}},
+  {0x2ce2, {1|F|D, {0x2ce3}}},
+  {0x2ceb, {1|F|D, {0x2cec}}},
+  {0x2ced, {1|F|D, {0x2cee}}},
+  {0x2cf2, {1|F|D, {0x2cf3}}},
+  {0xa640, {1|F|D, {0xa641}}},
+  {0xa642, {1|F|D, {0xa643}}},
+  {0xa644, {1|F|D, {0xa645}}},
+  {0xa646, {1|F|D, {0xa647}}},
+  {0xa648, {1|F|D, {0xa649}}},
+  {0xa64a, {1|F|D, {0xa64b}}},
+  {0xa64c, {1|F|D, {0xa64d}}},
+  {0xa64e, {1|F|D, {0xa64f}}},
+  {0xa650, {1|F|D, {0xa651}}},
+  {0xa652, {1|F|D, {0xa653}}},
+  {0xa654, {1|F|D, {0xa655}}},
+  {0xa656, {1|F|D, {0xa657}}},
+  {0xa658, {1|F|D, {0xa659}}},
+  {0xa65a, {1|F|D, {0xa65b}}},
+  {0xa65c, {1|F|D, {0xa65d}}},
+  {0xa65e, {1|F|D, {0xa65f}}},
+  {0xa660, {1|F|D, {0xa661}}},
+  {0xa662, {1|F|D, {0xa663}}},
+  {0xa664, {1|F|D, {0xa665}}},
+  {0xa666, {1|F|D, {0xa667}}},
+  {0xa668, {1|F|D, {0xa669}}},
+  {0xa66a, {1|F|D, {0xa66b}}},
+  {0xa66c, {1|F|D, {0xa66d}}},
+  {0xa680, {1|F|D, {0xa681}}},
+  {0xa682, {1|F|D, {0xa683}}},
+  {0xa684, {1|F|D, {0xa685}}},
+  {0xa686, {1|F|D, {0xa687}}},
+  {0xa688, {1|F|D, {0xa689}}},
+  {0xa68a, {1|F|D, {0xa68b}}},
+  {0xa68c, {1|F|D, {0xa68d}}},
+  {0xa68e, {1|F|D, {0xa68f}}},
+  {0xa690, {1|F|D, {0xa691}}},
+  {0xa692, {1|F|D, {0xa693}}},
+  {0xa694, {1|F|D, {0xa695}}},
+  {0xa696, {1|F|D, {0xa697}}},
+  {0xa698, {1|F|D, {0xa699}}},
+  {0xa69a, {1|F|D, {0xa69b}}},
+  {0xa722, {1|F|D, {0xa723}}},
+  {0xa724, {1|F|D, {0xa725}}},
+  {0xa726, {1|F|D, {0xa727}}},
+  {0xa728, {1|F|D, {0xa729}}},
+  {0xa72a, {1|F|D, {0xa72b}}},
+  {0xa72c, {1|F|D, {0xa72d}}},
+  {0xa72e, {1|F|D, {0xa72f}}},
+  {0xa732, {1|F|D, {0xa733}}},
+  {0xa734, {1|F|D, {0xa735}}},
+  {0xa736, {1|F|D, {0xa737}}},
+  {0xa738, {1|F|D, {0xa739}}},
+  {0xa73a, {1|F|D, {0xa73b}}},
+  {0xa73c, {1|F|D, {0xa73d}}},
+  {0xa73e, {1|F|D, {0xa73f}}},
+  {0xa740, {1|F|D, {0xa741}}},
+  {0xa742, {1|F|D, {0xa743}}},
+  {0xa744, {1|F|D, {0xa745}}},
+  {0xa746, {1|F|D, {0xa747}}},
+  {0xa748, {1|F|D, {0xa749}}},
+  {0xa74a, {1|F|D, {0xa74b}}},
+  {0xa74c, {1|F|D, {0xa74d}}},
+  {0xa74e, {1|F|D, {0xa74f}}},
+  {0xa750, {1|F|D, {0xa751}}},
+  {0xa752, {1|F|D, {0xa753}}},
+  {0xa754, {1|F|D, {0xa755}}},
+  {0xa756, {1|F|D, {0xa757}}},
+  {0xa758, {1|F|D, {0xa759}}},
+  {0xa75a, {1|F|D, {0xa75b}}},
+  {0xa75c, {1|F|D, {0xa75d}}},
+  {0xa75e, {1|F|D, {0xa75f}}},
+  {0xa760, {1|F|D, {0xa761}}},
+  {0xa762, {1|F|D, {0xa763}}},
+  {0xa764, {1|F|D, {0xa765}}},
+  {0xa766, {1|F|D, {0xa767}}},
+  {0xa768, {1|F|D, {0xa769}}},
+  {0xa76a, {1|F|D, {0xa76b}}},
+  {0xa76c, {1|F|D, {0xa76d}}},
+  {0xa76e, {1|F|D, {0xa76f}}},
+  {0xa779, {1|F|D, {0xa77a}}},
+  {0xa77b, {1|F|D, {0xa77c}}},
+  {0xa77d, {1|F|D, {0x1d79}}},
+  {0xa77e, {1|F|D, {0xa77f}}},
+  {0xa780, {1|F|D, {0xa781}}},
+  {0xa782, {1|F|D, {0xa783}}},
+  {0xa784, {1|F|D, {0xa785}}},
+  {0xa786, {1|F|D, {0xa787}}},
+  {0xa78b, {1|F|D, {0xa78c}}},
+  {0xa78d, {1|F|D, {0x0265}}},
+  {0xa790, {1|F|D, {0xa791}}},
+  {0xa792, {1|F|D, {0xa793}}},
+  {0xa796, {1|F|D, {0xa797}}},
+  {0xa798, {1|F|D, {0xa799}}},
+  {0xa79a, {1|F|D, {0xa79b}}},
+  {0xa79c, {1|F|D, {0xa79d}}},
+  {0xa79e, {1|F|D, {0xa79f}}},
+  {0xa7a0, {1|F|D, {0xa7a1}}},
+  {0xa7a2, {1|F|D, {0xa7a3}}},
+  {0xa7a4, {1|F|D, {0xa7a5}}},
+  {0xa7a6, {1|F|D, {0xa7a7}}},
+  {0xa7a8, {1|F|D, {0xa7a9}}},
+  {0xa7aa, {1|F|D, {0x0266}}},
+  {0xa7ab, {1|F|D, {0x025c}}},
+  {0xa7ac, {1|F|D, {0x0261}}},
+  {0xa7ad, {1|F|D, {0x026c}}},
+  {0xa7ae, {1|F|D, {0x026a}}},
+  {0xa7b0, {1|F|D, {0x029e}}},
+  {0xa7b1, {1|F|D, {0x0287}}},
+  {0xa7b2, {1|F|D, {0x029d}}},
+  {0xa7b3, {1|F|D, {0xab53}}},
+  {0xa7b4, {1|F|D, {0xa7b5}}},
+  {0xa7b6, {1|F|D, {0xa7b7}}},
+  {0xab70, {1|F|U, {0x13a0}}},
+  {0xab71, {1|F|U, {0x13a1}}},
+  {0xab72, {1|F|U, {0x13a2}}},
+  {0xab73, {1|F|U, {0x13a3}}},
+  {0xab74, {1|F|U, {0x13a4}}},
+  {0xab75, {1|F|U, {0x13a5}}},
+  {0xab76, {1|F|U, {0x13a6}}},
+  {0xab77, {1|F|U, {0x13a7}}},
+  {0xab78, {1|F|U, {0x13a8}}},
+  {0xab79, {1|F|U, {0x13a9}}},
+  {0xab7a, {1|F|U, {0x13aa}}},
+  {0xab7b, {1|F|U, {0x13ab}}},
+  {0xab7c, {1|F|U, {0x13ac}}},
+  {0xab7d, {1|F|U, {0x13ad}}},
+  {0xab7e, {1|F|U, {0x13ae}}},
+  {0xab7f, {1|F|U, {0x13af}}},
+  {0xab80, {1|F|U, {0x13b0}}},
+  {0xab81, {1|F|U, {0x13b1}}},
+  {0xab82, {1|F|U, {0x13b2}}},
+  {0xab83, {1|F|U, {0x13b3}}},
+  {0xab84, {1|F|U, {0x13b4}}},
+  {0xab85, {1|F|U, {0x13b5}}},
+  {0xab86, {1|F|U, {0x13b6}}},
+  {0xab87, {1|F|U, {0x13b7}}},
+  {0xab88, {1|F|U, {0x13b8}}},
+  {0xab89, {1|F|U, {0x13b9}}},
+  {0xab8a, {1|F|U, {0x13ba}}},
+  {0xab8b, {1|F|U, {0x13bb}}},
+  {0xab8c, {1|F|U, {0x13bc}}},
+  {0xab8d, {1|F|U, {0x13bd}}},
+  {0xab8e, {1|F|U, {0x13be}}},
+  {0xab8f, {1|F|U, {0x13bf}}},
+  {0xab90, {1|F|U, {0x13c0}}},
+  {0xab91, {1|F|U, {0x13c1}}},
+  {0xab92, {1|F|U, {0x13c2}}},
+  {0xab93, {1|F|U, {0x13c3}}},
+  {0xab94, {1|F|U, {0x13c4}}},
+  {0xab95, {1|F|U, {0x13c5}}},
+  {0xab96, {1|F|U, {0x13c6}}},
+  {0xab97, {1|F|U, {0x13c7}}},
+  {0xab98, {1|F|U, {0x13c8}}},
+  {0xab99, {1|F|U, {0x13c9}}},
+  {0xab9a, {1|F|U, {0x13ca}}},
+  {0xab9b, {1|F|U, {0x13cb}}},
+  {0xab9c, {1|F|U, {0x13cc}}},
+  {0xab9d, {1|F|U, {0x13cd}}},
+  {0xab9e, {1|F|U, {0x13ce}}},
+  {0xab9f, {1|F|U, {0x13cf}}},
+  {0xaba0, {1|F|U, {0x13d0}}},
+  {0xaba1, {1|F|U, {0x13d1}}},
+  {0xaba2, {1|F|U, {0x13d2}}},
+  {0xaba3, {1|F|U, {0x13d3}}},
+  {0xaba4, {1|F|U, {0x13d4}}},
+  {0xaba5, {1|F|U, {0x13d5}}},
+  {0xaba6, {1|F|U, {0x13d6}}},
+  {0xaba7, {1|F|U, {0x13d7}}},
+  {0xaba8, {1|F|U, {0x13d8}}},
+  {0xaba9, {1|F|U, {0x13d9}}},
+  {0xabaa, {1|F|U, {0x13da}}},
+  {0xabab, {1|F|U, {0x13db}}},
+  {0xabac, {1|F|U, {0x13dc}}},
+  {0xabad, {1|F|U, {0x13dd}}},
+  {0xabae, {1|F|U, {0x13de}}},
+  {0xabaf, {1|F|U, {0x13df}}},
+  {0xabb0, {1|F|U, {0x13e0}}},
+  {0xabb1, {1|F|U, {0x13e1}}},
+  {0xabb2, {1|F|U, {0x13e2}}},
+  {0xabb3, {1|F|U, {0x13e3}}},
+  {0xabb4, {1|F|U, {0x13e4}}},
+  {0xabb5, {1|F|U, {0x13e5}}},
+  {0xabb6, {1|F|U, {0x13e6}}},
+  {0xabb7, {1|F|U, {0x13e7}}},
+  {0xabb8, {1|F|U, {0x13e8}}},
+  {0xabb9, {1|F|U, {0x13e9}}},
+  {0xabba, {1|F|U, {0x13ea}}},
+  {0xabbb, {1|F|U, {0x13eb}}},
+  {0xabbc, {1|F|U, {0x13ec}}},
+  {0xabbd, {1|F|U, {0x13ed}}},
+  {0xabbe, {1|F|U, {0x13ee}}},
+  {0xabbf, {1|F|U, {0x13ef}}},
+  {0xfb00, {2|F|ST|SU|I(366), {0x0066, 0x0066}}},
+  {0xfb01, {2|F|ST|SU|I(370), {0x0066, 0x0069}}},
+  {0xfb02, {2|F|ST|SU|I(374), {0x0066, 0x006c}}},
+  {0xfb03, {3|F|ST|SU|I(378), {0x0066, 0x0066, 0x0069}}},
+  {0xfb04, {3|F|ST|SU|I(384), {0x0066, 0x0066, 0x006c}}},
+  {0xfb05, {2|F|ST|SU|I(390), {0x0073, 0x0074}}},
+  {0xfb06, {2|F|ST|SU|I(394), {0x0073, 0x0074}}},
+  {0xfb13, {2|F|ST|SU|I(398), {0x0574, 0x0576}}},
+  {0xfb14, {2|F|ST|SU|I(402), {0x0574, 0x0565}}},
+  {0xfb15, {2|F|ST|SU|I(406), {0x0574, 0x056b}}},
+  {0xfb16, {2|F|ST|SU|I(410), {0x057e, 0x0576}}},
+  {0xfb17, {2|F|ST|SU|I(414), {0x0574, 0x056d}}},
+  {0xff21, {1|F|D, {0xff41}}},
+  {0xff22, {1|F|D, {0xff42}}},
+  {0xff23, {1|F|D, {0xff43}}},
+  {0xff24, {1|F|D, {0xff44}}},
+  {0xff25, {1|F|D, {0xff45}}},
+  {0xff26, {1|F|D, {0xff46}}},
+  {0xff27, {1|F|D, {0xff47}}},
+  {0xff28, {1|F|D, {0xff48}}},
+  {0xff29, {1|F|D, {0xff49}}},
+  {0xff2a, {1|F|D, {0xff4a}}},
+  {0xff2b, {1|F|D, {0xff4b}}},
+  {0xff2c, {1|F|D, {0xff4c}}},
+  {0xff2d, {1|F|D, {0xff4d}}},
+  {0xff2e, {1|F|D, {0xff4e}}},
+  {0xff2f, {1|F|D, {0xff4f}}},
+  {0xff30, {1|F|D, {0xff50}}},
+  {0xff31, {1|F|D, {0xff51}}},
+  {0xff32, {1|F|D, {0xff52}}},
+  {0xff33, {1|F|D, {0xff53}}},
+  {0xff34, {1|F|D, {0xff54}}},
+  {0xff35, {1|F|D, {0xff55}}},
+  {0xff36, {1|F|D, {0xff56}}},
+  {0xff37, {1|F|D, {0xff57}}},
+  {0xff38, {1|F|D, {0xff58}}},
+  {0xff39, {1|F|D, {0xff59}}},
+  {0xff3a, {1|F|D, {0xff5a}}},
+  {0x10400, {1|F|D, {0x10428}}},
+  {0x10401, {1|F|D, {0x10429}}},
+  {0x10402, {1|F|D, {0x1042a}}},
+  {0x10403, {1|F|D, {0x1042b}}},
+  {0x10404, {1|F|D, {0x1042c}}},
+  {0x10405, {1|F|D, {0x1042d}}},
+  {0x10406, {1|F|D, {0x1042e}}},
+  {0x10407, {1|F|D, {0x1042f}}},
+  {0x10408, {1|F|D, {0x10430}}},
+  {0x10409, {1|F|D, {0x10431}}},
+  {0x1040a, {1|F|D, {0x10432}}},
+  {0x1040b, {1|F|D, {0x10433}}},
+  {0x1040c, {1|F|D, {0x10434}}},
+  {0x1040d, {1|F|D, {0x10435}}},
+  {0x1040e, {1|F|D, {0x10436}}},
+  {0x1040f, {1|F|D, {0x10437}}},
+  {0x10410, {1|F|D, {0x10438}}},
+  {0x10411, {1|F|D, {0x10439}}},
+  {0x10412, {1|F|D, {0x1043a}}},
+  {0x10413, {1|F|D, {0x1043b}}},
+  {0x10414, {1|F|D, {0x1043c}}},
+  {0x10415, {1|F|D, {0x1043d}}},
+  {0x10416, {1|F|D, {0x1043e}}},
+  {0x10417, {1|F|D, {0x1043f}}},
+  {0x10418, {1|F|D, {0x10440}}},
+  {0x10419, {1|F|D, {0x10441}}},
+  {0x1041a, {1|F|D, {0x10442}}},
+  {0x1041b, {1|F|D, {0x10443}}},
+  {0x1041c, {1|F|D, {0x10444}}},
+  {0x1041d, {1|F|D, {0x10445}}},
+  {0x1041e, {1|F|D, {0x10446}}},
+  {0x1041f, {1|F|D, {0x10447}}},
+  {0x10420, {1|F|D, {0x10448}}},
+  {0x10421, {1|F|D, {0x10449}}},
+  {0x10422, {1|F|D, {0x1044a}}},
+  {0x10423, {1|F|D, {0x1044b}}},
+  {0x10424, {1|F|D, {0x1044c}}},
+  {0x10425, {1|F|D, {0x1044d}}},
+  {0x10426, {1|F|D, {0x1044e}}},
+  {0x10427, {1|F|D, {0x1044f}}},
+  {0x104b0, {1|F|D, {0x104d8}}},
+  {0x104b1, {1|F|D, {0x104d9}}},
+  {0x104b2, {1|F|D, {0x104da}}},
+  {0x104b3, {1|F|D, {0x104db}}},
+  {0x104b4, {1|F|D, {0x104dc}}},
+  {0x104b5, {1|F|D, {0x104dd}}},
+  {0x104b6, {1|F|D, {0x104de}}},
+  {0x104b7, {1|F|D, {0x104df}}},
+  {0x104b8, {1|F|D, {0x104e0}}},
+  {0x104b9, {1|F|D, {0x104e1}}},
+  {0x104ba, {1|F|D, {0x104e2}}},
+  {0x104bb, {1|F|D, {0x104e3}}},
+  {0x104bc, {1|F|D, {0x104e4}}},
+  {0x104bd, {1|F|D, {0x104e5}}},
+  {0x104be, {1|F|D, {0x104e6}}},
+  {0x104bf, {1|F|D, {0x104e7}}},
+  {0x104c0, {1|F|D, {0x104e8}}},
+  {0x104c1, {1|F|D, {0x104e9}}},
+  {0x104c2, {1|F|D, {0x104ea}}},
+  {0x104c3, {1|F|D, {0x104eb}}},
+  {0x104c4, {1|F|D, {0x104ec}}},
+  {0x104c5, {1|F|D, {0x104ed}}},
+  {0x104c6, {1|F|D, {0x104ee}}},
+  {0x104c7, {1|F|D, {0x104ef}}},
+  {0x104c8, {1|F|D, {0x104f0}}},
+  {0x104c9, {1|F|D, {0x104f1}}},
+  {0x104ca, {1|F|D, {0x104f2}}},
+  {0x104cb, {1|F|D, {0x104f3}}},
+  {0x104cc, {1|F|D, {0x104f4}}},
+  {0x104cd, {1|F|D, {0x104f5}}},
+  {0x104ce, {1|F|D, {0x104f6}}},
+  {0x104cf, {1|F|D, {0x104f7}}},
+  {0x104d0, {1|F|D, {0x104f8}}},
+  {0x104d1, {1|F|D, {0x104f9}}},
+  {0x104d2, {1|F|D, {0x104fa}}},
+  {0x104d3, {1|F|D, {0x104fb}}},
+  {0x10c80, {1|F|D, {0x10cc0}}},
+  {0x10c81, {1|F|D, {0x10cc1}}},
+  {0x10c82, {1|F|D, {0x10cc2}}},
+  {0x10c83, {1|F|D, {0x10cc3}}},
+  {0x10c84, {1|F|D, {0x10cc4}}},
+  {0x10c85, {1|F|D, {0x10cc5}}},
+  {0x10c86, {1|F|D, {0x10cc6}}},
+  {0x10c87, {1|F|D, {0x10cc7}}},
+  {0x10c88, {1|F|D, {0x10cc8}}},
+  {0x10c89, {1|F|D, {0x10cc9}}},
+  {0x10c8a, {1|F|D, {0x10cca}}},
+  {0x10c8b, {1|F|D, {0x10ccb}}},
+  {0x10c8c, {1|F|D, {0x10ccc}}},
+  {0x10c8d, {1|F|D, {0x10ccd}}},
+  {0x10c8e, {1|F|D, {0x10cce}}},
+  {0x10c8f, {1|F|D, {0x10ccf}}},
+  {0x10c90, {1|F|D, {0x10cd0}}},
+  {0x10c91, {1|F|D, {0x10cd1}}},
+  {0x10c92, {1|F|D, {0x10cd2}}},
+  {0x10c93, {1|F|D, {0x10cd3}}},
+  {0x10c94, {1|F|D, {0x10cd4}}},
+  {0x10c95, {1|F|D, {0x10cd5}}},
+  {0x10c96, {1|F|D, {0x10cd6}}},
+  {0x10c97, {1|F|D, {0x10cd7}}},
+  {0x10c98, {1|F|D, {0x10cd8}}},
+  {0x10c99, {1|F|D, {0x10cd9}}},
+  {0x10c9a, {1|F|D, {0x10cda}}},
+  {0x10c9b, {1|F|D, {0x10cdb}}},
+  {0x10c9c, {1|F|D, {0x10cdc}}},
+  {0x10c9d, {1|F|D, {0x10cdd}}},
+  {0x10c9e, {1|F|D, {0x10cde}}},
+  {0x10c9f, {1|F|D, {0x10cdf}}},
+  {0x10ca0, {1|F|D, {0x10ce0}}},
+  {0x10ca1, {1|F|D, {0x10ce1}}},
+  {0x10ca2, {1|F|D, {0x10ce2}}},
+  {0x10ca3, {1|F|D, {0x10ce3}}},
+  {0x10ca4, {1|F|D, {0x10ce4}}},
+  {0x10ca5, {1|F|D, {0x10ce5}}},
+  {0x10ca6, {1|F|D, {0x10ce6}}},
+  {0x10ca7, {1|F|D, {0x10ce7}}},
+  {0x10ca8, {1|F|D, {0x10ce8}}},
+  {0x10ca9, {1|F|D, {0x10ce9}}},
+  {0x10caa, {1|F|D, {0x10cea}}},
+  {0x10cab, {1|F|D, {0x10ceb}}},
+  {0x10cac, {1|F|D, {0x10cec}}},
+  {0x10cad, {1|F|D, {0x10ced}}},
+  {0x10cae, {1|F|D, {0x10cee}}},
+  {0x10caf, {1|F|D, {0x10cef}}},
+  {0x10cb0, {1|F|D, {0x10cf0}}},
+  {0x10cb1, {1|F|D, {0x10cf1}}},
+  {0x10cb2, {1|F|D, {0x10cf2}}},
+  {0x118a0, {1|F|D, {0x118c0}}},
+  {0x118a1, {1|F|D, {0x118c1}}},
+  {0x118a2, {1|F|D, {0x118c2}}},
+  {0x118a3, {1|F|D, {0x118c3}}},
+  {0x118a4, {1|F|D, {0x118c4}}},
+  {0x118a5, {1|F|D, {0x118c5}}},
+  {0x118a6, {1|F|D, {0x118c6}}},
+  {0x118a7, {1|F|D, {0x118c7}}},
+  {0x118a8, {1|F|D, {0x118c8}}},
+  {0x118a9, {1|F|D, {0x118c9}}},
+  {0x118aa, {1|F|D, {0x118ca}}},
+  {0x118ab, {1|F|D, {0x118cb}}},
+  {0x118ac, {1|F|D, {0x118cc}}},
+  {0x118ad, {1|F|D, {0x118cd}}},
+  {0x118ae, {1|F|D, {0x118ce}}},
+  {0x118af, {1|F|D, {0x118cf}}},
+  {0x118b0, {1|F|D, {0x118d0}}},
+  {0x118b1, {1|F|D, {0x118d1}}},
+  {0x118b2, {1|F|D, {0x118d2}}},
+  {0x118b3, {1|F|D, {0x118d3}}},
+  {0x118b4, {1|F|D, {0x118d4}}},
+  {0x118b5, {1|F|D, {0x118d5}}},
+  {0x118b6, {1|F|D, {0x118d6}}},
+  {0x118b7, {1|F|D, {0x118d7}}},
+  {0x118b8, {1|F|D, {0x118d8}}},
+  {0x118b9, {1|F|D, {0x118d9}}},
+  {0x118ba, {1|F|D, {0x118da}}},
+  {0x118bb, {1|F|D, {0x118db}}},
+  {0x118bc, {1|F|D, {0x118dc}}},
+  {0x118bd, {1|F|D, {0x118dd}}},
+  {0x118be, {1|F|D, {0x118de}}},
+  {0x118bf, {1|F|D, {0x118df}}},
+  {0x1e900, {1|F|D, {0x1e922}}},
+  {0x1e901, {1|F|D, {0x1e923}}},
+  {0x1e902, {1|F|D, {0x1e924}}},
+  {0x1e903, {1|F|D, {0x1e925}}},
+  {0x1e904, {1|F|D, {0x1e926}}},
+  {0x1e905, {1|F|D, {0x1e927}}},
+  {0x1e906, {1|F|D, {0x1e928}}},
+  {0x1e907, {1|F|D, {0x1e929}}},
+  {0x1e908, {1|F|D, {0x1e92a}}},
+  {0x1e909, {1|F|D, {0x1e92b}}},
+  {0x1e90a, {1|F|D, {0x1e92c}}},
+  {0x1e90b, {1|F|D, {0x1e92d}}},
+  {0x1e90c, {1|F|D, {0x1e92e}}},
+  {0x1e90d, {1|F|D, {0x1e92f}}},
+  {0x1e90e, {1|F|D, {0x1e930}}},
+  {0x1e90f, {1|F|D, {0x1e931}}},
+  {0x1e910, {1|F|D, {0x1e932}}},
+  {0x1e911, {1|F|D, {0x1e933}}},
+  {0x1e912, {1|F|D, {0x1e934}}},
+  {0x1e913, {1|F|D, {0x1e935}}},
+  {0x1e914, {1|F|D, {0x1e936}}},
+  {0x1e915, {1|F|D, {0x1e937}}},
+  {0x1e916, {1|F|D, {0x1e938}}},
+  {0x1e917, {1|F|D, {0x1e939}}},
+  {0x1e918, {1|F|D, {0x1e93a}}},
+  {0x1e919, {1|F|D, {0x1e93b}}},
+  {0x1e91a, {1|F|D, {0x1e93c}}},
+  {0x1e91b, {1|F|D, {0x1e93d}}},
+  {0x1e91c, {1|F|D, {0x1e93e}}},
+  {0x1e91d, {1|F|D, {0x1e93f}}},
+  {0x1e91e, {1|F|D, {0x1e940}}},
+  {0x1e91f, {1|F|D, {0x1e941}}},
+  {0x1e920, {1|F|D, {0x1e942}}},
+  {0x1e921, {1|F|D, {0x1e943}}},
+#define CaseFold_Locale (*(CaseFold_11_Type (*)[2])(CaseFold_11_Table+1399))
+  {0x0049, {1|F|D, {0x0069}}},
+  {0x0130, {2|F|D, {0x0069, 0x0307}}},
 };
 
-/* C code produced by gperf version 3.0.3 */
+/* ANSI-C code produced by gperf version 3.1 */
 /* Command-line: gperf -7 -k1,2,3 -F,-1 -c -j1 -i1 -t -T -E -C -H onigenc_unicode_CaseFold_11_hash -N onigenc_unicode_CaseFold_11_lookup -n  */
 
-/* maximum key range = 1867, duplicates = 0 */
+/* maximum key range = 3623, duplicates = 0 */
 
 #ifdef __GNUC__
@@ -1205,34 +1438,29 @@
   static const unsigned short asso_values[] =
     {
-        12,  212,    5,  217,    6, 1878,  173,   13,    2,   11,
-       123,    5, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878,
-      1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878,
-      1878, 1878, 1878,  220, 1878, 1878, 1878, 1878, 1878, 1878,
-      1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878,  382,
-      1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878, 1878,
-         8,    4,  219,    1, 1878,  343,  607,  274, 1202,  305,
-      1362,  209,  259,  412, 1443,  174,  290,   35,  442,   21,
-      1434,   70, 1472,  105,  362,  193,  591,   51,    3,    7,
-      1414,   86, 1391,  371, 1358,  398, 1456,  149, 1266,  245,
-      1263,  135, 1231,  121, 1096,  446,  932,  323, 1033,  428,
-      1155,  466, 1084,  991, 1160,  474, 1131,  977,  298,  749,
-       990,  491, 1010,  482, 1021,  696,  161,  729,   46,  966,
-      1209,  813, 1043,  616,  848,  917, 1019,  594, 1201,  526,
-      1127,  540,  943,  900,  171,  774, 1283,  760,  626,  935,
-      1025,  554,  288,  955,  103,  788,  423, 1113,   24, 1005,
-        20,  711,    9,  573,  358,  668,    5,  885,  228,  649,
-       102,  628,  612,  515,  800,  871,   77, 1132,   17, 1072,
-         1, 1188,   47, 1276,  244, 1326,  887, 1289,  202,  740,
-       258, 1168,  222
+         1, 3627,    2,   28,    3,  303,  218,    5,   21,  167,
+         2,  199,  194,    7, 3627, 3627, 3627, 3627, 3627, 3627,
+      3627, 3627, 3627, 3627, 3627, 3627, 3627,   28, 3627, 3627,
+      3627, 3627, 3627, 3627, 3627,  282, 3627, 3627, 3627, 3627,
+      3627,  113, 3627, 3627, 3627, 3627, 3627, 3627, 3627, 3627,
+      3627,  318, 3627, 3627, 3627, 3627, 3627, 3627, 3627, 1197,
+      3627, 3627,  149,   73,  513,    1, 3627, 3627,  267,   17,
+      3627, 3627, 3627, 3627, 3627,  286, 3627, 3627,  289,  617,
+       291,   28, 1163,  444,   36,  430,  954,  110, 1767,    5,
+        11,   22, 1761,  486, 1921,  250, 1746,  122, 1905,  163,
+      1716,  262, 1880,   80, 1503,   68, 1704,  157, 1681,  376,
+      1673,  209, 1822,  203, 1406,  498, 1622,  362, 1588,  316,
+       475,  599, 1228,  538, 1160,  585, 1510,  544,  331,  685,
+      1672,  603, 1536,  840, 1684,  786, 1594,  743, 1380,  700,
+       142,  839, 1302,  865, 1173, 1329, 1730, 1043, 1449,  969,
+      1437, 1108, 1360,  925, 1497,  723,  154,  810,  391, 1083,
+      1777, 1047,  436, 1051,   47, 1342,    8,  974,   98, 1318,
+       781, 1314,  148, 1403,   39, 1357,   18, 1265,   11,  928,
+        92, 1205,    2, 1295,    3, 1181,  187, 1151,  385, 1132,
+       107, 1280,    8, 1678,   41,  511,   42, 1655,   78,  294,
+       134, 1857,   17,  784,    2, 1113,   57,  496,   52
     };
-  return asso_values[bits_of(code, 2)+65] + asso_values[bits_of(code, 1)] + asso_values[bits_of(code, 0)];
+  return asso_values[bits_of(code, 2)+81] + asso_values[bits_of(code, 1)+2] + asso_values[bits_of(code, 0)];
 }
 
-#ifdef __GNUC__
-__inline
-#ifdef __GNUC_STDC_INLINE__
-__attribute__ ((__gnu_inline__))
-#endif
-#endif
 static const CodePointList3 *
 onigenc_unicode_CaseFold_11_lookup(const OnigCodePoint code)
@@ -1241,1534 +1469,2116 @@
     {
       MIN_CODE_VALUE = 0x41,
-      MAX_CODE_VALUE = 0x118bf,
-      TOTAL_KEYWORDS = 1180,
+      MAX_CODE_VALUE = 0x1e921,
+      TOTAL_KEYWORDS = 1401,
       MIN_WORD_LENGTH = 3,
       MAX_WORD_LENGTH = 3,
-      MIN_HASH_VALUE = 11,
-      MAX_HASH_VALUE = 1877
+      MIN_HASH_VALUE = 4,
+      MAX_HASH_VALUE = 3626
     };
 
   static const short wordlist[] =
     {
-      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1,
+      /*0x1ffb*/ 816,
+      /*0x1fe7*/ 802,
+      /*0x017b*/ 118,
+      /*0x1f88*/ 729,
+      /*0x0408*/ 305,
+      /*0x0108*/ 61,
+      /*0x10408*/ 1214,
+      /*0x0055*/ 19,
+      /*0xab88*/ 1112,
+      /*0x1f89*/ 730,
+      /*0x0409*/ 306,
+      /*0x2c67*/ 916,
+      /*0x10409*/ 1215,
+      /*0x2c08*/ 873,
+      /*0xab89*/ 1113,
+      /*0x1ff9*/ 814,
+      /*0x2c6f*/ 921,
+      /*0x0179*/ 117,
+      -1,
+      /*0x2c09*/ 874,
+      /*0x1f8a*/ 731,
+      /*0x040a*/ 307,
+      /*0x010a*/ 62,
+      /*0x1040a*/ 1216,
+      /*0x2c88*/ 931,
+      /*0xab8a*/ 1114,
+      /*0x1f80*/ 721,
+      /*0x0400*/ 297,
+      /*0x0100*/ 57,
+      /*0x10400*/ 1206,
+      /*0x2c0a*/ 875,
+      /*0xab80*/ 1104,
+      /*0x10c88*/ 1290,
+      /*0x00d5*/ 47,
+      /*0x1f83*/ 724,
+      /*0x0403*/ 300,
+      /*0x2c00*/ 865,
+      /*0x10403*/ 1209,
+      /*0x10c89*/ 1291,
+      /*0xab83*/ 1107,
+      /*0x1ff3*/ 809,
+      /*0x2c8a*/ 932,
+      /*0x1e908*/ 1373,
+      /*0x00df*/ 56,
+      /*0x2c03*/ 868,
+      /*0x1fd3*/ 791,
+      /*0x0053*/ 17,
+      /*0x2c80*/ 927,
+      /*0x1e909*/ 1374,
+      /*0x10c8a*/ 1292,
+      /*0x2183*/ 838,
+      -1,
+      /*0x017f*/ 120,
+      -1,
+      /*0xa780*/ 1059,
+      /*0x10c80*/ 1282,
+      -1,
+      /*0x017d*/ 119,
+      -1,
+      /*0x1e90a*/ 1375,
+      /*0x2c7f*/ 926,
+      -1, -1,
+      /*0x10c83*/ 1285,
+      /*0x00dd*/ 54,
+      /*0x1e900*/ 1365,
+      /*0x1f98*/ 745,
+      /*0x0418*/ 321,
+      /*0x0118*/ 69,
+      /*0x10418*/ 1230,
+      /*0x037f*/ 233,
+      /*0xab98*/ 1128,
+      /*0x00d3*/ 45,
+      /*0x1e903*/ 1368,
+      -1,
+      /*0x1e88*/ 607,
+      /*0x2c18*/ 889,
+      -1,
+      /*0x1f96*/ 743,
+      /*0x0416*/ 319,
+      /*0x0116*/ 68,
+      /*0x10416*/ 1228,
+      -1,
+      /*0xab96*/ 1126,
+      -1, -1,
+      /*0x2c75*/ 924,
+      /*0x2c98*/ 939,
+      /*0x2c16*/ 887,
+      -1,
+      /*0x1fe3*/ 799,
+      -1,
+      /*0x1e8a*/ 608,
+      -1,
+      /*0xa798*/ 1068,
+      /*0x10c98*/ 1306,
+      /*0x1fd7*/ 793,
+      /*0x0057*/ 21,
+      /*0x1e80*/ 603,
+      /*0x2c96*/ 938,
+      /*0x2c63*/ 914,
+      -1, -1, -1, -1,
+      /*0x1e918*/ 1389,
+      /*0xa796*/ 1067,
+      /*0x10c96*/ 1304,
+      /*0x1f86*/ 727,
+      /*0x0406*/ 303,
+      /*0x0106*/ 60,
+      /*0x10406*/ 1212,
+      /*0x13fb*/ 527,
+      /*0xab86*/ 1110,
+      -1,
+      /*0x2c6d*/ 919,
+      -1,
+      /*0x1e916*/ 1387,
+      /*0x2c06*/ 871,
+      -1,
+      /*0x1f90*/ 737,
+      /*0x0410*/ 313,
+      /*0x0110*/ 65,
+      /*0x10410*/ 1222,
+      -1,
+      /*0xab90*/ 1120,
+      /*0x2ced*/ 978,
+      /*0x13f9*/ 525,
+      -1,
+      /*0x2c86*/ 930,
+      /*0x2c10*/ 881,
+      -1,
+      /*0x1ff7*/ 812,
+      -1, -1, -1,
+      /*0xa786*/ 1062,
+      /*0x10c86*/ 1288,
+      /*0x1e98*/ 616,
+      -1,
+      /*0x1fbb*/ 777,
+      /*0x2c90*/ 935,
+      /*0x013b*/ 85,
+      -1, -1,
+      /*0xabbb*/ 1163,
+      /*0x1fdb*/ 797,
+      /*0x1e906*/ 1371,
+      /*0xa790*/ 1065,
+      /*0x10c90*/ 1298,
+      /*0x1e96*/ 614,
+      /*0x1e08*/ 543,
+      /*0x1fcb*/ 788,
+      /*0x004b*/ 9,
+      -1,
+      /*0x1f9a*/ 747,
+      /*0x041a*/ 323,
+      /*0x011a*/ 70,
+      /*0x1041a*/ 1232,
+      /*0x1e910*/ 1381,
+      /*0xab9a*/ 1130,
+      /*0x1f92*/ 739,
+      /*0x0412*/ 315,
+      /*0x0112*/ 66,
+      /*0x10412*/ 1224,
+      /*0x2c1a*/ 891,
+      /*0xab92*/ 1122,
+      /*0x13fd*/ 529,
+      /*0x1e0a*/ 544,
+      /*0x0388*/ 235,
+      -1,
+      /*0x2c12*/ 883,
+      /*0x03d5*/ 273,
+      /*0x00db*/ 52,
+      /*0x1e00*/ 539,
+      /*0x0389*/ 236,
+      /*0x2c9a*/ 940,
+      -1, -1,
+      /*0x00cb*/ 37,
+      /*0x1e86*/ 606,
+      /*0x03f9*/ 292,
+      /*0x2c92*/ 936,
+      /*0xa79a*/ 1069,
+      /*0x10c9a*/ 1308,
+      /*0x1fe9*/ 804,
+      /*0x038a*/ 237,
+      -1, -1,
+      /*0xa792*/ 1066,
+      /*0x10c92*/ 1300,
+      -1,
+      /*0x1e90*/ 611,
+      -1,
+      /*0x1e91a*/ 1391,
+      /*0x2c69*/ 917,
+      /*0x0508*/ 425,
+      -1, -1,
+      /*0x0555*/ 481,
+      /*0x1e912*/ 1383,
+      /*0x1fa0*/ 753,
+      /*0x0420*/ 329,
+      /*0x0120*/ 73,
+      /*0x10420*/ 1238,
+      /*0x03f1*/ 288,
+      /*0xaba0*/ 1136,
+      /*0x1f9e*/ 751,
+      /*0x041e*/ 327,
+      /*0x011e*/ 72,
+      /*0x1041e*/ 1236,
+      /*0x2c20*/ 897,
+      /*0xab9e*/ 1134,
+      /*0x050a*/ 426,
+      /*0x1e18*/ 551,
+      -1,
+      /*0x03ff*/ 296,
+      /*0x2c1e*/ 895,
+      /*0x048a*/ 362,
+      /*0x0500*/ 421,
+      /*0x0208*/ 194,
+      /*0x03fd*/ 294,
+      /*0x2ca0*/ 943,
+      -1,
+      /*0x0480*/ 361,
+      -1,
+      /*0x1e16*/ 550,
+      /*0x1e9a*/ 618,
+      /*0x2c9e*/ 942,
+      /*0xa7a0*/ 1072,
+      /*0x10ca0*/ 1314,
+      -1,
+      /*0x0398*/ 249,
+      /*0x1e92*/ 612,
+      -1,
+      /*0xa79e*/ 1071,
+      /*0x10c9e*/ 1312,
+      /*0x020a*/ 195,
+      /*0x0553*/ 479,
+      -1,
+      /*0x1e920*/ 1397,
+      -1,
+      /*0x03f5*/ 290,
+      /*0x0200*/ 190,
+      /*0x0396*/ 247,
+      /*0x104d3*/ 1281,
+      /*0x1e91e*/ 1395,
+      -1,
+      /*0x1f8e*/ 735,
+      /*0x040e*/ 311,
+      /*0x010e*/ 64,
+      /*0x1040e*/ 1220,
+      -1,
+      /*0xab8e*/ 1118,
+      -1, -1,
+      /*0x1e06*/ 542,
+      -1,
+      /*0x2c0e*/ 879,
+      /*0x0518*/ 433,
+      /*0x1f94*/ 741,
+      /*0x0414*/ 317,
+      /*0x0114*/ 67,
+      /*0x10414*/ 1226,
+      /*0x0498*/ 369,
+      /*0xab94*/ 1124,
+      /*0x2165*/ 827,
+      /*0x2167*/ 829,
+      /*0x1e10*/ 547,
+      /*0x2c8e*/ 934,
+      /*0x2c14*/ 885,
+      /*0x0516*/ 432,
+      /*0x216f*/ 837,
+      /*0x1ea0*/ 621,
+      /*0x0386*/ 234,
+      /*0x2161*/ 823,
+      /*0x0496*/ 368,
+      /*0x10c8e*/ 1296,
+      -1,
+      /*0x1e9e*/ 620,
+      -1,
+      /*0x2c94*/ 937,
+      -1,
+      /*0x0218*/ 202,
+      -1, -1,
+      /*0x0390*/ 241,
+      /*0x1e90e*/ 1379,
+      -1,
+      /*0x10c94*/ 1302,
+      -1,
+      /*0xa77b*/ 1056,
+      /*0x1ff6*/ 811,
+      /*0x0476*/ 356,
+      /*0x0176*/ 115,
+      /*0x0216*/ 201,
+      -1, -1,
+      /*0x03f7*/ 291,
+      /*0x1e914*/ 1385,
+      -1,
+      /*0x0506*/ 424,
+      -1,
+      /*0x1e1a*/ 552,
+      -1, -1,
+      /*0xa779*/ 1055,
+      -1,
+      /*0x01d5*/ 167,
+      /*0x1e12*/ 548,
+      -1,
+      /*0x0189*/ 126,
+      /*0x0376*/ 232,
+      /*0x0510*/ 429,
+      /*0x1fa6*/ 759,
+      /*0x0426*/ 335,
+      /*0x0126*/ 76,
+      /*0x10426*/ 1244,
+      /*0x0490*/ 365,
+      /*0xaba6*/ 1142,
+      /*0x1e8e*/ 610,
+      /*0x039a*/ 251,
+      /*0x018a*/ 127,
+      -1,
+      /*0x2c26*/ 903,
+      /*0x0206*/ 193,
+      -1,
+      /*0x0392*/ 243,
+      -1,
+      /*0x1faf*/ 768,
+      /*0x042f*/ 344,
+      -1,
+      /*0x1e94*/ 613,
+      /*0x053b*/ 455,
+      /*0xabaf*/ 1151,
+      /*0x2ca6*/ 946,
+      -1,
+      /*0x0210*/ 198,
+      -1, -1,
+      /*0x104bb*/ 1257,
+      /*0x01f1*/ 181,
+      /*0xa7a6*/ 1075,
+      /*0x10ca6*/ 1320,
+      -1,
+      /*0x054b*/ 471,
+      /*0xa77d*/ 1057,
+      /*0x01d3*/ 166,
+      /*0x051a*/ 434,
+      /*0x1e20*/ 555,
+      /*0x04cb*/ 395,
+      -1,
+      /*0x104cb*/ 1273,
+      /*0x049a*/ 370,
+      /*0x0512*/ 430,
+      /*0x1e1e*/ 554,
+      /*0x2163*/ 825,
+      /*0x023b*/ 217,
+      /*0x10caf*/ 1329,
+      /*0x0492*/ 366,
+      /*0x1fa4*/ 757,
+      /*0x0424*/ 333,
+      /*0x0124*/ 75,
+      /*0x10424*/ 1242,
+      /*0x1ef6*/ 664,
+      /*0xaba4*/ 1140,
+      -1,
+      /*0x03a0*/ 257,
+      /*0x0198*/ 137,
+      -1,
+      /*0x2c24*/ 901,
+      /*0x216d*/ 835,
+      /*0x021a*/ 203,
+      /*0x039e*/ 255,
+      /*0x1f9c*/ 749,
+      /*0x041c*/ 325,
+      /*0x011c*/ 71,
+      /*0x1041c*/ 1234,
+      /*0x0212*/ 199,
+      /*0xab9c*/ 1132,
+      /*0x0196*/ 135,
+      /*0x2ca4*/ 945,
+      -1,
+      /*0x1feb*/ 806,
+      /*0x2c1c*/ 893,
+      -1,
+      /*0x1ea6*/ 624,
+      -1,
+      /*0xa7a4*/ 1074,
+      /*0x10ca4*/ 1318,
+      /*0x004d*/ 11,
+      -1, -1,
+      /*0x2c6b*/ 918,
+      /*0x0520*/ 437,
+      /*0x2c9c*/ 941,
+      /*0x1e0e*/ 546,
+      -1,
+      /*0x01d7*/ 168,
+      /*0x04a0*/ 373,
+      /*0x051e*/ 436,
+      -1,
+      /*0xa79c*/ 1070,
+      /*0x10c9c*/ 1310,
+      /*0x2ceb*/ 977,
+      /*0x049e*/ 372,
+      -1, -1,
+      /*0x1e14*/ 549,
+      -1,
+      /*0x0186*/ 124,
+      -1, -1,
+      /*0x1e91c*/ 1393,
+      /*0x038e*/ 239,
+      -1,
+      /*0x00cd*/ 39,
+      -1,
+      /*0x0220*/ 206,
+      -1, -1,
+      /*0x10bb*/ 511,
+      /*0x0190*/ 131,
+      -1,
+      /*0x021e*/ 205,
+      /*0x24bb*/ 844,
+      /*0x0394*/ 245,
+      -1,
+      /*0x1f84*/ 725,
+      /*0x0404*/ 301,
+      /*0x0104*/ 59,
+      /*0x10404*/ 1210,
+      /*0x1ea4*/ 623,
+      /*0xab84*/ 1108,
+      /*0x01f7*/ 185,
+      /*0x0051*/ 15,
+      -1,
+      /*0x24cb*/ 860,
+      /*0x2c04*/ 869,
+      -1,
+      /*0x1e76*/ 598,
+      /*0x050e*/ 428,
+      /*0x1f82*/ 723,
+      /*0x0402*/ 299,
+      /*0x0102*/ 58,
+      /*0x10402*/ 1208,
+      /*0x048e*/ 364,
+      /*0xab82*/ 1106,
+      /*0x01db*/ 170,
+      /*0x2c84*/ 929,
+      -1,
+      /*0x2169*/ 831,
+      /*0x2c02*/ 867,
+      /*0x0514*/ 431,
+      /*0x01cb*/ 162,
+      -1,
+      /*0xa784*/ 1061,
+      /*0x10c84*/ 1286,
+      /*0x0494*/ 367,
+      /*0x118bb*/ 1360,
+      -1,
+      /*0x00d1*/ 43,
+      /*0x1e26*/ 558,
+      /*0x2c82*/ 928,
+      -1,
+      /*0x020e*/ 197,
+      -1,
+      /*0x1e904*/ 1369,
+      -1, -1,
+      /*0xa782*/ 1060,
+      /*0x10c82*/ 1284,
+      -1,
+      /*0x1fa7*/ 760,
+      /*0x0427*/ 336,
+      -1,
+      /*0x10427*/ 1245,
+      /*0x0214*/ 200,
+      /*0xaba7*/ 1143,
+      -1,
+      /*0x03a6*/ 262,
+      /*0x1e902*/ 1367,
+      /*0x10a0*/ 484,
+      /*0x2c27*/ 904,
+      /*0x1f8c*/ 733,
+      /*0x040c*/ 309,
+      /*0x010c*/ 63,
+      /*0x1040c*/ 1218,
+      -1,
+      /*0xab8c*/ 1116,
+      /*0x04f6*/ 416,
+      -1, -1, -1,
+      /*0x2c0c*/ 877,
+      /*0x047e*/ 360,
+      /*0x1fa2*/ 755,
+      /*0x0422*/ 331,
+      /*0x0122*/ 74,
+      /*0x10422*/ 1240,
+      /*0x1e84*/ 605,
+      /*0xaba2*/ 1138,
+      /*0x10ca7*/ 1321,
+      /*0x01a0*/ 141,
+      /*0x2c7e*/ 925,
+      /*0x2c8c*/ 933,
+      /*0x2c22*/ 899,
+      /*0x0526*/ 440,
+      /*0x1e24*/ 557,
+      /*0x1ff2*/ 808,
+      /*0x0472*/ 354,
+      /*0x0172*/ 113,
+      /*0x04a6*/ 376,
+      /*0x10c8c*/ 1294,
+      /*0x1e82*/ 604,
+      /*0x1f08*/ 669,
+      -1,
+      /*0x2ca2*/ 944,
+      /*0x1f6f*/ 720,
+      /*0x2c72*/ 923,
+      /*0x118a0*/ 1333,
+      /*0x1f09*/ 670,
+      /*0x1e1c*/ 553,
+      /*0x1e90c*/ 1377,
+      /*0xa7a2*/ 1073,
+      /*0x10ca2*/ 1316,
+      /*0x03a4*/ 260,
+      /*0xfb00*/ 1168,
+      /*0x1f5f*/ 712,
+      /*0x0372*/ 231,
+      /*0x2cf2*/ 979,
+      /*0x0226*/ 209,
+      /*0x1f0a*/ 671,
+      -1, -1,
+      /*0xfb03*/ 1171,
+      /*0x1faa*/ 763,
+      /*0x042a*/ 339,
+      /*0x012a*/ 78,
+      -1,
+      /*0x039c*/ 253,
+      /*0xabaa*/ 1146,
+      /*0x1fae*/ 767,
+      /*0x042e*/ 343,
+      /*0x012e*/ 80,
+      -1,
+      /*0x2c2a*/ 907,
+      /*0xabae*/ 1150,
+      -1,
+      /*0x1f5d*/ 711,
+      /*0x018e*/ 129,
+      -1,
+      /*0x2c2e*/ 911,
+      /*0x0524*/ 439,
+      -1, -1,
+      /*0x1e8c*/ 609,
+      /*0x2caa*/ 948,
+      /*0x04a4*/ 375,
+      -1, -1, -1,
+      /*0x0194*/ 134,
+      /*0x2cae*/ 950,
+      /*0xa7aa*/ 1077,
+      /*0x10caa*/ 1324,
+      /*0x1efe*/ 668,
+      /*0x051c*/ 435,
+      /*0x1ea2*/ 622,
+      -1,
+      /*0xa7ae*/ 1081,
+      /*0x10cae*/ 1328,
+      /*0x049c*/ 371,
+      -1, -1, -1,
+      /*0x1e04*/ 541,
+      /*0x0224*/ 208,
+      /*0x1f18*/ 677,
+      /*0xfb16*/ 1178,
+      /*0x2126*/ 818,
+      /*0x1ef2*/ 662,
+      /*0x054d*/ 473,
+      /*0x1fac*/ 765,
+      /*0x042c*/ 341,
+      /*0x012c*/ 79,
+      -1,
+      /*0x04cd*/ 396,
+      /*0xabac*/ 1148,
+      /*0x104cd*/ 1275,
+      /*0x1e02*/ 540,
+      /*0x021c*/ 204,
+      -1,
+      /*0x2c2c*/ 909,
+      /*0x01f6*/ 184,
+      /*0x10a6*/ 490,
+      -1,
+      /*0x1fa8*/ 761,
+      /*0x0428*/ 337,
+      /*0x0128*/ 77,
+      /*0x03d1*/ 272,
+      /*0x1fb2*/ 769,
+      /*0xaba8*/ 1144,
+      /*0x0132*/ 81,
+      /*0x2cac*/ 949,
+      /*0xa726*/ 1019,
+      /*0xabb2*/ 1154,
+      /*0x2c28*/ 905,
+      /*0x1eaa*/ 626,
+      /*0xfb06*/ 1174,
+      /*0x10af*/ 499,
+      /*0xa7ac*/ 1079,
+      /*0x10cac*/ 1326,
+      -1,
+      /*0x1eae*/ 628,
+      -1,
+      /*0x01a6*/ 144,
+      /*0x1f6d*/ 718,
+      /*0x2ca8*/ 947,
+      -1,
+      /*0xa688*/ 1007,
+      /*0x0504*/ 423,
+      /*0x2cb2*/ 952,
+      -1, -1,
+      /*0xa7a8*/ 1076,
+      /*0x10ca8*/ 1322,
+      /*0x0551*/ 477,
+      -1,
+      /*0xa7b2*/ 1084,
+      /*0x10cb2*/ 1332,
+      /*0x01af*/ 149,
+      /*0x1e0c*/ 545,
+      /*0x118a6*/ 1339,
+      /*0x104d1*/ 1279,
+      /*0x0502*/ 422,
+      -1,
+      /*0xa68a*/ 1008,
+      -1,
+      /*0x03a7*/ 263,
+      -1,
+      /*0x10a4*/ 488,
+      /*0x1e7e*/ 602,
+      /*0xa680*/ 1003,
+      /*0x1e22*/ 556,
+      /*0x0204*/ 192,
+      -1, -1,
+      /*0x118af*/ 1348,
+      /*0x216b*/ 833,
+      /*0x038c*/ 238,
+      /*0xa724*/ 1018,
+      /*0x1f3b*/ 694,
+      -1, -1,
+      /*0x1eac*/ 627,
+      -1,
+      /*0x1e72*/ 596,
+      /*0x1f5b*/ 710,
+      /*0x0202*/ 191,
+      /*0x03fe*/ 295,
+      -1,
+      /*0x01a4*/ 143,
+      -1,
+      /*0x1f4b*/ 702,
+      -1, -1,
+      /*0x1f1a*/ 679,
+      -1,
+      /*0x1ea8*/ 625,
+      /*0x10cd*/ 523,
+      /*0xff26*/ 1185,
+      -1,
+      /*0x1eb2*/ 630,
+      /*0x24cd*/ 862,
+      -1,
+      /*0x019c*/ 138,
+      /*0x050c*/ 427,
+      -1,
+      /*0x118a4*/ 1337,
+      -1, -1,
+      /*0x048c*/ 363,
+      /*0xa698*/ 1015,
+      /*0x1e2a*/ 560,
+      /*0x0130*/ 1400,
+      /*0xff2f*/ 1194,
+      -1,
+      /*0xabb0*/ 1152,
+      /*0x0522*/ 438,
+      /*0x1e2e*/ 562,
+      /*0x01cd*/ 163,
+      /*0x04fe*/ 420,
+      -1,
+      /*0x04a2*/ 374,
+      /*0xa696*/ 1014,
+      -1,
+      /*0x1f69*/ 714,
+      /*0x1fba*/ 776,
+      -1, -1,
+      /*0x020c*/ 196,
+      /*0x03aa*/ 266,
+      /*0xabba*/ 1162,
+      /*0x2cb0*/ 951,
+      -1, -1,
+      /*0x04f2*/ 414,
+      -1, -1, -1,
+      /*0xa7b0*/ 1082,
+      /*0x10cb0*/ 1330,
+      /*0x0222*/ 207,
+      -1, -1, -1,
+      /*0xff24*/ 1183,
+      -1,
+      /*0x2cba*/ 956,
+      -1,
+      /*0x1fca*/ 787,
+      /*0x004a*/ 8,
+      /*0x014a*/ 93,
+      -1,
+      /*0xa686*/ 1006,
+      -1, -1, -1,
+      /*0x052a*/ 442,
+      /*0x0184*/ 123,
+      /*0x1e2c*/ 561,
+      -1, -1,
+      /*0x04aa*/ 378,
+      /*0x052e*/ 444,
+      /*0x01d1*/ 165,
+      /*0xa690*/ 1011,
+      -1, -1,
+      /*0x04ae*/ 380,
+      /*0x1fb8*/ 774,
+      /*0x2cca*/ 964,
+      -1,
+      /*0x0182*/ 122,
+      /*0x1e28*/ 559,
+      /*0xabb8*/ 1160,
+      -1,
+      /*0x00ca*/ 36,
+      /*0x1e32*/ 564,
+      -1, -1, -1,
+      /*0x022a*/ 211,
+      /*0x10a7*/ 491,
+      /*0x1eb0*/ 629,
+      -1, -1, -1,
+      /*0x022e*/ 213,
+      /*0x1f0e*/ 675,
+      /*0xfb14*/ 1176,
+      /*0x2cb8*/ 955,
+      /*0x03a8*/ 264,
+      -1, -1, -1, -1, -1, -1,
+      /*0x1eba*/ 634,
+      -1,
+      /*0xa69a*/ 1016,
+      -1, -1,
+      /*0x01a7*/ 145,
+      /*0x052c*/ 443,
+      /*0x10a2*/ 486,
+      /*0xa692*/ 1012,
+      /*0x1fd9*/ 795,
+      /*0x0059*/ 23,
+      /*0x04ac*/ 379,
+      /*0x1ffa*/ 815,
+      /*0x047a*/ 358,
+      /*0x1fb6*/ 772,
+      /*0xa77e*/ 1058,
+      /*0x0136*/ 83,
+      /*0xa722*/ 1017,
+      -1,
+      /*0xabb6*/ 1158,
+      /*0x0528*/ 441,
+      -1,
+      /*0x118a7*/ 1340,
+      /*0x1eca*/ 642,
+      /*0x0532*/ 446,
+      /*0x04a8*/ 377,
+      /*0x01fe*/ 189,
+      -1,
+      /*0x01a2*/ 142,
+      /*0x04b2*/ 382,
+      /*0x022c*/ 212,
+      /*0x104b2*/ 1248,
+      /*0x212a*/ 819,
+      -1, -1,
+      /*0x2cb6*/ 954,
+      /*0x00d9*/ 50,
+      -1,
+      /*0x1fcc*/ 789,
+      /*0x004c*/ 10,
+      /*0x014c*/ 94,
+      /*0x01f2*/ 182,
+      /*0xa7b6*/ 1087,
+      /*0x1eb8*/ 633,
+      /*0x0228*/ 210,
+      /*0x118a2*/ 1335,
+      -1,
+      /*0x10aa*/ 494,
+      /*0x0232*/ 215,
+      -1, -1, -1, -1,
+      /*0x10ae*/ 498,
+      -1, -1, -1,
+      /*0xa72a*/ 1021,
+      -1,
+      /*0x2ccc*/ 965,
+      /*0xff27*/ 1186,
+      /*0x1e30*/ 563,
+      -1,
+      /*0xa72e*/ 1023,
+      -1,
+      /*0x00cc*/ 38,
+      -1,
+      /*0x1fbc*/ 778,
+      /*0x1fb4*/ 771,
+      -1,
+      /*0x0134*/ 82,
+      /*0x1f2f*/ 690,
+      /*0xabbc*/ 1164,
+      /*0xabb4*/ 1156,
+      /*0x01ae*/ 148,
+      -1,
+      /*0x1e3a*/ 568,
+      -1, -1,
+      /*0x03b0*/ 268,
+      -1, -1, -1,
+      /*0xff22*/ 1181,
+      /*0x1efa*/ 666,
+      /*0x118aa*/ 1343,
+      /*0x1eb6*/ 632,
+      -1,
+      /*0x2cbc*/ 957,
+      /*0x2cb4*/ 953,
+      -1,
+      /*0x118ae*/ 1347,
+      -1,
+      /*0x1fbe*/ 779,
+      /*0x10ac*/ 496,
+      /*0xa68e*/ 1010,
+      /*0xa7b4*/ 1086,
+      /*0x2132*/ 821,
+      /*0xabbe*/ 1166,
+      /*0x1e4a*/ 576,
+      -1, -1, -1, -1,
+      /*0xa72c*/ 1022,
+      -1, -1,
+      /*0xa694*/ 1013,
+      /*0x10a8*/ 492,
+      -1,
+      /*0x1ecc*/ 643,
+      /*0x04b0*/ 381,
+      /*0x10b2*/ 502,
+      /*0x104b0*/ 1246,
+      /*0x2cbe*/ 958,
+      /*0x01ac*/ 147,
+      /*0x1f1c*/ 681,
+      -1,
+      /*0xa728*/ 1020,
+      /*0x1e38*/ 567,
+      -1,
+      /*0x053a*/ 454,
+      /*0xa732*/ 1024,
+      /*0xff2a*/ 1189,
+      /*0x13fa*/ 526,
+      /*0x1f6b*/ 716,
+      /*0x04ba*/ 386,
+      -1,
+      /*0x104ba*/ 1256,
+      /*0xff2e*/ 1193,
+      /*0x0230*/ 214,
+      /*0x1f4d*/ 704,
+      /*0x118ac*/ 1345,
+      /*0x01b2*/ 151,
       -1, -1, -1, -1, -1,
-      /*0x10417*/ 1129,
-      -1, -1,
-      /*0x1ff3*/ 794,
-      /*0x10418*/ 1130,
-      /*0x1f97*/ 729,
+      /*0x1ebc*/ 635,
+      /*0x1eb4*/ 631,
+      -1, -1, -1,
+      /*0x054a*/ 470,
+      /*0x023a*/ 216,
+      /*0x118a8*/ 1341,
+      -1, -1, -1,
+      /*0x118b2*/ 1351,
+      /*0x104ca*/ 1272,
+      -1,
+      /*0x1fc8*/ 785,
+      /*0x0048*/ 7,
+      -1,
+      /*0x1fe2*/ 798,
+      /*0x0462*/ 346,
+      /*0x0162*/ 105,
+      /*0xfb04*/ 1172,
+      /*0x1e7a*/ 600,
+      -1,
+      /*0x1e36*/ 566,
+      -1,
+      /*0x0538*/ 452,
+      /*0x1ebe*/ 636,
+      /*0x2c62*/ 913,
+      -1,
+      /*0x024a*/ 226,
+      /*0x04b8*/ 385,
+      /*0xff2c*/ 1191,
+      /*0x104b8*/ 1254,
+      -1,
+      /*0xfb02*/ 1170,
+      /*0x2cc8*/ 963,
+      -1, -1,
+      /*0x2ce2*/ 976,
+      /*0x03fa*/ 293,
+      -1,
+      /*0x00c8*/ 34,
+      -1,
+      /*0x1f85*/ 726,
+      /*0x0405*/ 302,
+      /*0xff28*/ 1187,
+      /*0x10405*/ 1211,
+      /*0x1e4c*/ 577,
+      /*0xab85*/ 1109,
+      /*0xff32*/ 1197,
+      -1, -1, -1,
+      /*0x2c05*/ 870,
+      -1,
+      /*0x10b0*/ 500,
+      -1, -1,
+      /*0x1fc4*/ 782,
+      /*0x0044*/ 3,
+      -1, -1, -1,
+      /*0x1fd6*/ 792,
+      /*0x0056*/ 20,
+      /*0x0156*/ 99,
+      -1, -1,
+      /*0x0536*/ 450,
+      -1,
+      /*0x10ba*/ 510,
+      /*0x04fa*/ 418,
+      /*0x10c85*/ 1287,
+      /*0x04b6*/ 384,
+      /*0x24ba*/ 843,
+      /*0x104b6*/ 1252,
+      /*0x1e3c*/ 569,
+      /*0x1e34*/ 565,
+      -1,
+      /*0x2cc4*/ 961,
+      /*0xa73a*/ 1028,
+      -1,
+      /*0x1e905*/ 1370,
+      -1,
+      /*0x2cd6*/ 970,
+      /*0x00c4*/ 30,
+      /*0x1ec8*/ 641,
+      /*0x1f0c*/ 673,
+      -1,
+      /*0x1ee2*/ 654,
+      /*0x00d6*/ 48,
+      -1,
+      /*0x054c*/ 472,
+      /*0x118b0*/ 1349,
+      -1, -1, -1,
+      /*0x24ca*/ 859,
+      -1,
+      /*0x104cc*/ 1274,
+      -1,
+      /*0xa64a*/ 985,
+      /*0x1e3e*/ 570,
+      /*0xa74a*/ 1036,
+      -1, -1, -1, -1,
+      /*0x118ba*/ 1359,
+      -1, -1, -1, -1,
+      /*0x10b8*/ 508,
+      /*0x01ca*/ 161,
+      -1,
+      /*0x024c*/ 227,
+      /*0x24b8*/ 841,
+      -1, -1, -1,
+      /*0x053c*/ 456,
+      /*0x0534*/ 448,
+      /*0xa738*/ 1027,
+      -1, -1,
+      /*0x04bc*/ 387,
+      /*0x04b4*/ 383,
+      /*0x104bc*/ 1258,
+      /*0x104b4*/ 1250,
+      /*0x1ec4*/ 639,
+      /*0xff30*/ 1195,
+      /*0x1fc2*/ 780,
+      /*0x0042*/ 1,
+      /*0x01b8*/ 155,
+      /*0x1ed6*/ 648,
+      /*0xa684*/ 1005,
+      /*0x0050*/ 14,
+      /*0x0150*/ 96,
+      /*0x1f2a*/ 685,
+      /*0x1fd2*/ 790,
+      /*0x0052*/ 16,
+      /*0x0152*/ 97,
+      -1, -1,
+      /*0x1f2e*/ 689,
+      /*0xff3a*/ 1205,
+      /*0x053e*/ 458,
+      -1, -1,
+      /*0xa682*/ 1004,
+      /*0x118b8*/ 1357,
+      /*0x04be*/ 388,
+      /*0x2cc2*/ 960,
+      /*0x104be*/ 1260,
+      -1,
+      /*0x10b6*/ 506,
+      /*0x2cd0*/ 967,
+      -1,
+      /*0x00c2*/ 28,
+      /*0x24b6*/ 839,
+      /*0x2cd2*/ 968,
+      /*0x1e48*/ 575,
+      /*0x00d0*/ 42,
+      -1,
+      /*0x1e62*/ 588,
+      /*0xa736*/ 1026,
+      /*0x00d2*/ 44,
+      -1, -1, -1,
+      /*0x023e*/ 219,
+      /*0x01d9*/ 169,
+      /*0x004e*/ 12,
+      /*0x014e*/ 95,
+      /*0x01fa*/ 187,
+      -1, -1, -1, -1, -1, -1,
+      -1,
+      /*0x03e2*/ 280,
+      /*0x24cc*/ 861,
+      -1,
+      /*0x1f2c*/ 687,
+      -1,
+      /*0xa64c*/ 986,
+      /*0xff38*/ 1203,
+      /*0xa74c*/ 1037,
+      -1,
+      /*0xa68c*/ 1009,
+      /*0x2cce*/ 966,
+      /*0x118b6*/ 1355,
+      -1, -1,
+      /*0x1fc6*/ 783,
+      /*0x0046*/ 5,
+      /*0x00ce*/ 40,
+      /*0x1f28*/ 683,
+      -1,
+      /*0x1ffc*/ 817,
+      /*0x047c*/ 359,
+      /*0x1ec2*/ 638,
+      -1,
+      /*0x1e44*/ 573,
+      /*0x0548*/ 468,
+      /*0x1ed0*/ 645,
+      /*0x10bc*/ 512,
+      /*0x10b4*/ 504,
+      /*0x1e56*/ 582,
+      /*0x1ed2*/ 646,
+      /*0x24bc*/ 845,
+      /*0x104c8*/ 1270,
+      /*0x04e2*/ 406,
+      -1, -1,
+      /*0x2cc6*/ 962,
+      /*0xa73c*/ 1029,
+      /*0xa734*/ 1025,
+      /*0x1fec*/ 807,
+      /*0x046c*/ 351,
+      /*0x016c*/ 110,
+      /*0x00c6*/ 32,
+      -1, -1, -1, -1,
+      /*0x03d6*/ 274,
+      /*0x01bc*/ 156,
+      /*0x0248*/ 225,
+      /*0xff36*/ 1201,
+      -1, -1,
+      /*0x10be*/ 514,
+      -1, -1, -1,
+      /*0x24be*/ 847,
+      /*0x1fea*/ 805,
+      /*0x046a*/ 350,
+      /*0x016a*/ 109,
+      -1,
+      /*0x1ece*/ 644,
+      /*0xa73e*/ 1030,
+      -1,
+      /*0x118bc*/ 1361,
+      /*0x118b4*/ 1353,
+      /*0x1fab*/ 764,
+      /*0x042b*/ 340,
+      /*0x0544*/ 464,
+      /*0x1f81*/ 722,
+      /*0x0401*/ 298,
+      /*0xabab*/ 1147,
+      /*0x10401*/ 1207,
+      /*0x0556*/ 482,
+      /*0xab81*/ 1105,
+      /*0x104c4*/ 1266,
+      /*0x2c2b*/ 908,
+      -1,
+      /*0x04d6*/ 400,
+      /*0x2c01*/ 866,
+      -1,
+      /*0x013f*/ 87,
+      -1, -1,
+      /*0xabbf*/ 1167,
+      -1,
+      /*0x1ec6*/ 640,
+      /*0x1fe8*/ 803,
+      /*0x0468*/ 349,
+      /*0x0168*/ 108,
+      /*0x118be*/ 1363,
+      /*0x1efc*/ 667,
+      /*0x0244*/ 222,
+      -1,
+      /*0xa7ab*/ 1078,
+      /*0x10cab*/ 1325,
+      -1,
+      /*0x1e42*/ 572,
+      /*0x10c81*/ 1283,
+      -1,
+      /*0x2162*/ 824,
+      /*0x1e50*/ 579,
+      -1,
+      /*0xff34*/ 1199,
+      -1,
+      /*0x1e52*/ 580,
+      -1,
+      /*0x1c88*/ 538,
+      /*0x1e901*/ 1366,
+      -1,
+      /*0x1eec*/ 659,
+      /*0x1fe4*/ 800,
+      /*0x0464*/ 347,
+      /*0x0164*/ 106,
+      -1,
+      /*0x03c2*/ 269,
+      /*0x24c8*/ 857,
+      -1,
+      /*0x1f3a*/ 693,
+      /*0x03d0*/ 271,
+      /*0xa648*/ 984,
+      /*0x2c64*/ 915,
+      /*0xa748*/ 1035,
+      /*0xa662*/ 997,
+      -1,
+      /*0xa762*/ 1048,
+      -1, -1, -1,
+      /*0x1eea*/ 658,
+      /*0x1c80*/ 530,
+      /*0x13fc*/ 528,
+      -1,
+      /*0x01c8*/ 160,
+      /*0x1fa9*/ 762,
+      /*0x0429*/ 338,
+      /*0x01e2*/ 173,
+      /*0x1e4e*/ 578,
+      /*0x1c83*/ 533,
+      /*0xaba9*/ 1145,
+      -1,
+      /*0x1f4a*/ 701,
+      /*0x0542*/ 462,
+      -1,
+      /*0x2c29*/ 906,
+      -1,
+      /*0x0550*/ 476,
+      -1, -1,
+      /*0x104c2*/ 1264,
+      /*0x0552*/ 478,
+      /*0x04d0*/ 397,
+      -1,
+      /*0x104d0*/ 1278,
+      -1,
+      /*0x04d2*/ 398,
+      /*0x10c4*/ 520,
+      /*0x104d2*/ 1280,
+      -1,
+      /*0x1ee8*/ 657,
+      /*0x24c4*/ 853,
+      /*0x1f38*/ 691,
+      /*0x1e46*/ 574,
+      /*0x10ca9*/ 1323,
+      /*0xa644*/ 982,
+      -1,
+      /*0xa744*/ 1033,
+      /*0x1e7c*/ 601,
+      -1,
+      /*0xa656*/ 991,
+      -1,
+      /*0xa756*/ 1042,
+      /*0x0460*/ 345,
+      /*0x0160*/ 104,
+      -1, -1, -1,
+      /*0x01c4*/ 157,
+      -1, -1, -1,
+      /*0x2c60*/ 912,
+      /*0x054e*/ 474,
+      /*0x1ee4*/ 655,
+      -1, -1,
+      /*0x1e6c*/ 593,
+      /*0x046e*/ 352,
+      /*0x016e*/ 111,
+      /*0x104ce*/ 1276,
+      -1, -1,
+      /*0x2ce0*/ 975,
+      -1, -1, -1,
+      /*0x2c6e*/ 920,
+      -1, -1,
+      /*0x1f59*/ 709,
+      -1,
+      /*0x1fe6*/ 801,
+      /*0x0466*/ 348,
+      /*0x0166*/ 107,
+      /*0x03ec*/ 285,
+      /*0x1e6a*/ 592,
+      /*0x024e*/ 228,
+      /*0x0546*/ 466,
+      -1, -1,
+      /*0x013d*/ 86,
+      -1,
+      /*0x1c86*/ 536,
+      /*0xabbd*/ 1165,
+      /*0x104c6*/ 1268,
+      -1, -1,
+      /*0x04fc*/ 419,
+      -1, -1,
+      /*0x1fda*/ 796,
+      /*0x005a*/ 24,
+      /*0x015a*/ 101,
+      /*0x03ea*/ 284,
+      /*0x1fd8*/ 794,
+      /*0x0058*/ 22,
+      /*0x0158*/ 100,
+      -1,
+      /*0x1f4c*/ 703,
+      -1,
+      /*0x10c2*/ 518,
+      /*0x0246*/ 224,
+      /*0x03ab*/ 267,
+      -1,
+      /*0x24c2*/ 851,
+      /*0x1e68*/ 591,
+      /*0x04ec*/ 411,
+      -1,
+      /*0xa642*/ 981,
+      -1,
+      /*0xa742*/ 1032,
+      /*0x2cda*/ 972,
+      /*0xa650*/ 988,
+      /*0x1ee0*/ 653,
+      /*0xa750*/ 1039,
+      /*0x2cd8*/ 971,
+      /*0xa652*/ 989,
+      /*0x00da*/ 51,
+      /*0xa752*/ 1040,
+      /*0x0054*/ 18,
+      /*0x0154*/ 98,
+      /*0x00d8*/ 49,
+      -1,
+      /*0x03e8*/ 283,
+      -1,
+      /*0x04ea*/ 410,
+      /*0x2cc0*/ 959,
+      /*0x1f3c*/ 695,
+      /*0x1eee*/ 660,
+      /*0x1e64*/ 589,
+      -1, -1,
+      /*0x00c0*/ 26,
+      -1, -1,
+      /*0x015e*/ 103,
+      /*0x1fc7*/ 784,
+      /*0x0047*/ 6,
+      /*0x0147*/ 91,
+      /*0x2cd4*/ 969,
+      -1, -1,
+      /*0x053f*/ 459,
+      /*0x1ee6*/ 656,
+      /*0x24ce*/ 863,
+      /*0x00d4*/ 46,
+      -1,
+      /*0x03e4*/ 281,
+      /*0xa64e*/ 987,
+      /*0x104bf*/ 1261,
+      /*0xa74e*/ 1038,
+      -1, -1,
+      /*0x1f3e*/ 697,
+      /*0x2cde*/ 974,
+      /*0x04e8*/ 409,
+      /*0x1fb9*/ 775,
+      -1,
+      /*0x0139*/ 84,
+      -1,
+      /*0x00de*/ 55,
+      /*0xabb9*/ 1161,
+      /*0x1eda*/ 650,
+      /*0x00c7*/ 33,
+      -1, -1,
+      /*0x1ed8*/ 649,
+      -1, -1,
+      /*0x24c6*/ 855,
+      /*0x03a9*/ 265,
+      -1, -1,
+      /*0xa646*/ 983,
+      /*0x216c*/ 834,
+      /*0xa746*/ 1034,
+      -1,
+      /*0x1ec0*/ 637,
+      -1,
+      /*0x04e4*/ 407,
+      -1,
+      /*0x015c*/ 102,
+      /*0x1fa1*/ 754,
+      /*0x0421*/ 330,
+      -1,
+      /*0x10421*/ 1239,
+      -1,
+      /*0xaba1*/ 1137,
+      -1,
+      /*0x1e60*/ 587,
+      /*0x1ed4*/ 647,
+      /*0x01fc*/ 188,
+      /*0x2c21*/ 898,
+      /*0x216a*/ 832,
+      -1, -1, -1,
+      /*0xa66c*/ 1002,
+      -1,
+      /*0xa76c*/ 1053,
+      /*0x2cdc*/ 973,
+      -1,
+      /*0x212b*/ 820,
+      -1,
+      /*0x1e6e*/ 594,
+      /*0x1ede*/ 652,
+      /*0x00dc*/ 53,
+      /*0x03e0*/ 279,
+      -1, -1,
+      /*0x01ec*/ 178,
+      /*0x10ca1*/ 1315,
+      -1,
+      /*0x1f48*/ 699,
+      /*0x0045*/ 4,
+      /*0x0145*/ 90,
+      /*0xa66a*/ 1001,
+      /*0x10ab*/ 495,
+      /*0xa76a*/ 1052,
+      /*0x1e66*/ 590,
+      -1,
+      /*0x1e921*/ 1398,
+      /*0x03ee*/ 286,
+      /*0x2168*/ 830,
+      -1,
+      /*0x1fc3*/ 781,
+      /*0x0043*/ 2,
+      /*0x0143*/ 89,
+      -1,
+      /*0x01ea*/ 177,
+      /*0x10bf*/ 515,
+      /*0xfb05*/ 1173,
+      -1,
+      /*0x0345*/ 229,
+      /*0x24bf*/ 848,
+      -1, -1,
+      /*0x03e6*/ 282,
+      /*0x1e5a*/ 584,
+      /*0x04e0*/ 405,
+      /*0x00c5*/ 31,
+      /*0x0181*/ 121,
+      /*0x1e58*/ 583,
+      -1, -1, -1,
+      /*0xa668*/ 1000,
+      /*0x2164*/ 826,
+      /*0xa768*/ 1051,
+      -1, -1,
+      /*0x1edc*/ 651,
+      /*0x00c3*/ 29,
+      /*0x1e40*/ 571,
+      /*0x04ee*/ 412,
+      /*0x118ab*/ 1344,
+      /*0x03da*/ 276,
+      -1, -1,
+      /*0x01e8*/ 176,
+      /*0x03d8*/ 275,
+      -1,
+      /*0x1f56*/ 708,
+      -1, -1, -1,
+      /*0x1e54*/ 581,
+      -1,
+      /*0x118bf*/ 1364,
+      /*0x04e6*/ 408,
+      /*0xa664*/ 998,
+      /*0x053d*/ 457,
+      /*0xa764*/ 1049,
+      /*0x1fc9*/ 786,
+      /*0x0049*/ 1399,
+      /*0x0149*/ 92,
+      -1, -1,
+      /*0x104bd*/ 1259,
+      /*0x1f97*/ 744,
       /*0x0417*/ 320,
-      /*0x2c17*/ 873,
-      /*0x1e97*/ 600,
-      /*0x1f98*/ 730,
-      /*0x0418*/ 321,
-      /*0x2c18*/ 874,
-      /*0x1e98*/ 601,
-      /*0x0118*/ 69,
-      /*0x0218*/ 202,
-      /*0x2c98*/ 924,
-      /*0x1e18*/ 536,
+      /*0x1e5e*/ 586,
+      /*0x10417*/ 1229,
+      /*0x01e4*/ 174,
+      /*0xab97*/ 1127,
+      /*0x10a9*/ 493,
+      /*0x1fad*/ 766,
+      /*0x042d*/ 342,
+      /*0x04da*/ 402,
+      /*0x2c17*/ 888,
+      -1,
+      /*0xabad*/ 1149,
+      /*0x04d8*/ 401,
+      /*0xff2b*/ 1190,
+      -1,
+      /*0x023d*/ 218,
+      /*0x2c2d*/ 910,
+      -1,
+      /*0x0540*/ 460,
+      /*0x03de*/ 278,
+      /*0x00c9*/ 35,
+      -1, -1,
+      /*0x04c0*/ 389,
+      -1,
+      /*0x104c0*/ 1262,
+      /*0x01a9*/ 146,
+      /*0x2160*/ 822,
+      /*0x10c97*/ 1305,
+      -1, -1,
+      /*0x0554*/ 480,
+      /*0x1fb3*/ 770,
+      -1,
+      /*0xa7ad*/ 1080,
+      /*0x10cad*/ 1327,
+      /*0x04d4*/ 399,
+      /*0xabb3*/ 1155,
+      /*0x1e917*/ 1388,
+      -1, -1, -1,
+      /*0x216e*/ 836,
+      /*0x118a9*/ 1342,
+      -1, -1, -1,
+      /*0x1e5c*/ 585,
+      -1,
+      /*0x0547*/ 467,
+      /*0xa660*/ 996,
+      /*0x04de*/ 404,
+      /*0xa760*/ 1047,
+      -1,
+      /*0x04c7*/ 393,
+      /*0x1f50*/ 705,
+      /*0x104c7*/ 1269,
+      /*0x2166*/ 828,
+      -1,
+      /*0x1f52*/ 706,
+      /*0xa7b3*/ 1085,
+      -1, -1,
+      /*0x01e0*/ 172,
+      -1,
+      /*0x03dc*/ 277,
+      -1,
+      /*0xa76e*/ 1054,
+      /*0x03a1*/ 258,
+      /*0x0539*/ 453,
+      -1,
+      /*0x1e97*/ 615,
+      -1, -1, -1, -1,
+      /*0x104b9*/ 1255,
+      -1,
+      /*0x01ee*/ 179,
+      /*0x10bd*/ 513,
+      /*0xa666*/ 999,
+      /*0xff29*/ 1188,
+      /*0xa766*/ 1050,
+      /*0x24bd*/ 846,
+      /*0x1fa5*/ 758,
+      /*0x0425*/ 334,
+      -1,
+      /*0x10425*/ 1243,
+      -1,
+      /*0xaba5*/ 1141,
+      /*0x1fb7*/ 773,
+      -1, -1,
+      /*0x01e6*/ 175,
+      /*0x2c25*/ 902,
+      /*0xabb7*/ 1159,
+      -1,
+      /*0x04dc*/ 403,
+      -1,
+      /*0xa65a*/ 993,
+      -1,
+      /*0xa75a*/ 1044,
+      -1,
+      /*0xa658*/ 992,
+      -1,
+      /*0xa758*/ 1043,
+      /*0x10c0*/ 516,
+      -1, -1, -1,
+      /*0x24c0*/ 849,
+      -1, -1,
+      /*0x10ca5*/ 1319,
+      /*0xa640*/ 980,
+      -1,
+      /*0xa740*/ 1031,
+      /*0x118bd*/ 1362,
+      /*0x1fa3*/ 756,
+      /*0x0423*/ 332,
+      -1,
+      /*0x10423*/ 1241,
+      /*0x1c84*/ 534,
+      /*0xaba3*/ 1139,
+      -1, -1,
+      /*0x0545*/ 465,
+      /*0xa654*/ 990,
+      /*0x2c23*/ 900,
+      /*0xa754*/ 1041,
+      -1,
+      /*0x04c5*/ 392,
+      -1,
+      /*0x104c5*/ 1267,
+      -1, -1,
+      /*0x1c82*/ 532,
+      /*0x10c7*/ 522,
+      /*0x0543*/ 463,
+      -1,
+      /*0x1f6c*/ 717,
+      /*0x24c7*/ 856,
+      /*0xa65e*/ 995,
+      /*0x04c3*/ 391,
+      /*0xa75e*/ 1046,
+      /*0x104c3*/ 1265,
+      -1,
+      /*0x10ca3*/ 1317,
+      -1, -1,
+      /*0x0245*/ 223,
+      /*0x1ff4*/ 810,
+      /*0x0474*/ 355,
+      /*0x0174*/ 114,
+      -1,
+      /*0x01de*/ 171,
+      -1,
+      /*0x10b9*/ 509,
+      /*0x01c7*/ 159,
+      /*0x1f6a*/ 715,
+      /*0xfb01*/ 1169,
+      /*0x24b9*/ 842,
+      /*0x0243*/ 221,
+      -1, -1,
       /*0x0397*/ 248,
-      /*0x1040e*/ 1120,
-      /*0x0498*/ 369,
-      -1,
-      /*0x0398*/ 249,
-      /*0xa798*/ 1053,
-      /*0x1f8e*/ 720,
-      /*0x040e*/ 311,
-      /*0x2c0e*/ 864,
-      /*0x1e8e*/ 595,
-      /*0x010e*/ 64,
-      /*0x020e*/ 197,
-      /*0x2c8e*/ 919,
-      /*0x1e0e*/ 531,
-      /*0x03f1*/ 288,
-      /*0x1040c*/ 1118,
-      /*0x048e*/ 364,
-      -1,
-      /*0x038e*/ 239,
-      /*0xa698*/ 1000,
-      /*0x1f8c*/ 718,
-      /*0x040c*/ 309,
-      /*0x2c0c*/ 862,
-      /*0x1e8c*/ 594,
-      /*0x010c*/ 63,
-      /*0x020c*/ 196,
-      /*0x2c8c*/ 918,
-      /*0x1e0c*/ 530,
-      -1, -1,
-      /*0x048c*/ 363,
-      /*0x10416*/ 1128,
-      /*0x038c*/ 238,
-      /*0xa68e*/ 995,
-      /*0x2c75*/ 909,
-      /*0x013f*/ 87,
-      /*0x1f96*/ 728,
-      /*0x0416*/ 319,
-      /*0x2c16*/ 872,
-      /*0x1e96*/ 599,
-      /*0x0116*/ 68,
-      /*0x0216*/ 201,
-      /*0x2c96*/ 923,
-      /*0x1e16*/ 535,
-      /*0x03f5*/ 290,
-      -1,
-      /*0x0496*/ 368,
-      /*0xa68c*/ 994,
-      /*0x0396*/ 247,
-      /*0xa796*/ 1052,
-      /*0x10410*/ 1122,
+      -1, -1,
+      /*0x1f2b*/ 686,
+      /*0x1f9d*/ 750,
+      /*0x041d*/ 326,
+      -1,
+      /*0x1041d*/ 1235,
+      /*0xabb1*/ 1153,
+      /*0xab9d*/ 1133,
+      /*0x0470*/ 353,
+      /*0x0170*/ 112,
+      /*0x1f9b*/ 748,
+      /*0x041b*/ 324,
+      /*0x2c1d*/ 894,
+      /*0x1041b*/ 1233,
+      /*0x1f3f*/ 698,
+      /*0xab9b*/ 1131,
+      /*0x10a1*/ 485,
+      /*0x2c70*/ 922,
+      /*0xabb5*/ 1157,
+      /*0x0549*/ 469,
+      /*0x2c1b*/ 892,
+      /*0xa65c*/ 994,
+      /*0x1f68*/ 713,
+      /*0xa75c*/ 1045,
+      /*0x04c9*/ 394,
+      -1,
+      /*0x104c9*/ 1271,
+      /*0x0370*/ 230,
+      /*0x118b9*/ 1358,
+      /*0xa7b1*/ 1083,
+      /*0x10cb1*/ 1331,
+      /*0x10c9d*/ 1311,
+      -1,
+      /*0x1f99*/ 746,
+      /*0x0419*/ 322,
+      -1,
+      /*0x10419*/ 1231,
+      -1,
+      /*0xab99*/ 1129,
+      /*0x10c9b*/ 1309,
+      /*0x00b5*/ 25,
+      /*0x1e91d*/ 1394,
+      -1,
+      /*0x2c19*/ 890,
+      -1,
+      /*0x1f93*/ 740,
+      /*0x0413*/ 316,
+      /*0x10c5*/ 521,
+      /*0x10413*/ 1225,
+      /*0x1e91b*/ 1392,
+      /*0xab93*/ 1123,
+      /*0x24c5*/ 854,
+      -1, -1,
+      /*0x118a1*/ 1334,
+      /*0x2c13*/ 884,
+      /*0x1ef4*/ 663,
+      -1,
+      /*0x0533*/ 447,
+      /*0x10c3*/ 519,
+      /*0x0041*/ 0,
+      /*0x0141*/ 88,
+      /*0x10c99*/ 1307,
+      /*0x24c3*/ 852,
+      -1,
+      /*0x104b3*/ 1249,
+      /*0xff39*/ 1204,
+      -1,
+      /*0x01c5*/ 158,
+      /*0x1f29*/ 684,
+      -1, -1,
+      /*0x1e919*/ 1390,
+      -1,
+      /*0x10c93*/ 1301,
+      /*0x1f8f*/ 736,
+      /*0x040f*/ 312,
+      -1,
+      /*0x1040f*/ 1221,
+      /*0x1ef0*/ 661,
+      /*0xab8f*/ 1119,
+      -1,
+      /*0x1e9b*/ 619,
+      /*0x03a5*/ 261,
+      /*0x1e913*/ 1384,
+      /*0x2c0f*/ 880,
+      /*0x00c1*/ 27,
+      -1, -1, -1,
+      /*0x1f8b*/ 732,
+      /*0x040b*/ 308,
+      /*0xff21*/ 1180,
+      /*0x1040b*/ 1217,
+      -1,
+      /*0xab8b*/ 1115,
+      /*0x1f87*/ 728,
+      /*0x0407*/ 304,
+      /*0xab7b*/ 1099,
+      /*0x10407*/ 1213,
+      /*0x2c0b*/ 876,
+      /*0xab87*/ 1111,
+      /*0x0587*/ 483,
+      -1,
+      /*0x10c8f*/ 1297,
+      /*0x1e99*/ 617,
+      /*0x2c07*/ 872,
+      /*0x004f*/ 13,
+      -1, -1, -1,
+      /*0x24c9*/ 858,
+      -1,
+      /*0xab79*/ 1097,
+      /*0x1e90f*/ 1380,
+      -1,
+      /*0x0537*/ 451,
+      /*0x03a3*/ 259,
+      /*0xa78b*/ 1063,
+      /*0x10c8b*/ 1293,
+      /*0x10ad*/ 497,
+      /*0x1f6e*/ 719,
+      -1,
+      /*0x104b7*/ 1253,
+      -1,
+      /*0x10c87*/ 1289,
+      -1, -1, -1,
+      /*0x1e90b*/ 1376,
+      -1, -1,
+      /*0x1e74*/ 597,
+      /*0x00cf*/ 41,
+      /*0x0197*/ 136,
+      /*0x1e907*/ 1372,
+      -1,
+      /*0xab71*/ 1089,
+      /*0xab73*/ 1091,
       -1, -1, -1, -1,
-      /*0x1f90*/ 722,
-      /*0x0410*/ 313,
-      /*0x2c10*/ 866,
-      /*0x1e90*/ 596,
-      /*0x0110*/ 65,
-      /*0x0210*/ 198,
-      /*0x2c90*/ 920,
-      /*0x1e10*/ 532,
-      /*0xa696*/ 999,
-      /*0x2c6f*/ 906,
-      /*0x0490*/ 365,
-      /*0x1041a*/ 1132,
-      /*0x0390*/ 241,
-      /*0xa790*/ 1050,
-      -1, -1,
-      /*0x1f9a*/ 732,
-      /*0x041a*/ 323,
-      /*0x2c1a*/ 876,
-      /*0x1e9a*/ 603,
-      /*0x011a*/ 70,
-      /*0x021a*/ 203,
-      /*0x2c9a*/ 925,
-      /*0x1e1a*/ 537,
-      -1, -1,
-      /*0x049a*/ 370,
-      /*0xa690*/ 996,
-      /*0x039a*/ 251,
-      /*0xa79a*/ 1054,
-      /*0x10412*/ 1124,
-      -1,
-      /*0x1fe9*/ 789,
-      /*0x1fd9*/ 780,
-      /*0x2c69*/ 902,
-      /*0x1f92*/ 724,
-      /*0x0412*/ 315,
-      /*0x2c12*/ 868,
-      /*0x1e92*/ 597,
-      /*0x0112*/ 66,
-      /*0x0212*/ 199,
-      /*0x2c92*/ 921,
-      /*0x1e12*/ 533,
-      /*0xa69a*/ 1001,
-      /*0x0059*/ 23,
-      /*0x0492*/ 366,
-      /*0x10426*/ 1144,
-      /*0x0392*/ 243,
-      /*0xa792*/ 1051,
-      -1, -1,
-      /*0x1fa6*/ 744,
-      /*0x0426*/ 335,
-      /*0x2c26*/ 888,
-      /*0x1ea6*/ 609,
-      /*0x0126*/ 76,
-      /*0x0226*/ 209,
-      /*0x2ca6*/ 931,
-      /*0x1e26*/ 543,
-      /*0x0518*/ 433,
-      /*0x10424*/ 1142,
-      /*0x04a6*/ 376,
-      /*0xa692*/ 997,
-      /*0x03a6*/ 262,
-      /*0xa7a6*/ 1060,
-      /*0x1fa4*/ 742,
-      /*0x0424*/ 333,
-      /*0x2c24*/ 886,
-      /*0x1ea4*/ 608,
-      /*0x0124*/ 75,
-      /*0x0224*/ 208,
-      /*0x2ca4*/ 930,
-      /*0x1e24*/ 542,
-      /*0x050e*/ 428,
-      /*0x10420*/ 1138,
-      /*0x04a4*/ 375,
-      -1,
-      /*0x03a4*/ 260,
-      /*0xa7a4*/ 1059,
-      /*0x1fa0*/ 738,
-      /*0x0420*/ 329,
-      /*0x2c20*/ 882,
-      /*0x1ea0*/ 606,
-      /*0x0120*/ 73,
-      /*0x0220*/ 206,
-      /*0x2ca0*/ 928,
-      /*0x1e20*/ 540,
-      /*0x050c*/ 427,
-      -1,
-      /*0x04a0*/ 373,
-      -1,
-      /*0x03a0*/ 257,
-      /*0xa7a0*/ 1057,
-      -1, -1,
-      /*0x013d*/ 86,
-      /*0x023d*/ 218,
-      -1,
-      /*0x053f*/ 459,
-      /*0x1040a*/ 1116,
-      -1, -1, -1,
-      /*0x0516*/ 432,
-      /*0x1f8a*/ 716,
-      /*0x040a*/ 307,
-      /*0x2c0a*/ 860,
-      /*0x1e8a*/ 593,
-      /*0x010a*/ 62,
-      /*0x020a*/ 195,
-      /*0x2c8a*/ 917,
-      /*0x1e0a*/ 529,
-      /*0x004f*/ 13,
+      /*0x1f3d*/ 696,
+      -1, -1,
+      /*0x10b3*/ 503,
+      -1,
+      /*0xab7f*/ 1103,
+      -1,
+      /*0x03f4*/ 289,
+      /*0x1f9f*/ 752,
+      /*0x041f*/ 328,
+      /*0xab7d*/ 1101,
+      /*0x1041f*/ 1237,
+      /*0x1e70*/ 595,
+      /*0xab9f*/ 1135,
+      -1,
+      /*0x118ad*/ 1346,
+      -1, -1,
+      /*0x2c1f*/ 896,
+      -1, -1, -1, -1, -1,
+      /*0x01b3*/ 152,
+      /*0x039d*/ 254,
+      -1, -1, -1, -1,
+      /*0x03f0*/ 287,
+      /*0xab75*/ 1093,
+      -1,
+      /*0x039b*/ 252,
+      -1, -1, -1,
+      /*0x10c9f*/ 1313,
+      -1,
+      /*0x04f4*/ 415,
+      /*0x1f54*/ 707,
+      /*0x118b3*/ 1352,
+      -1,
+      /*0x1ff8*/ 813,
+      /*0x0478*/ 357,
+      /*0x0178*/ 116,
+      -1,
+      /*0x1e91f*/ 1396,
+      -1, -1, -1,
+      /*0x0531*/ 445,
+      -1,
+      /*0xff2d*/ 1192,
+      -1,
+      /*0x10a5*/ 489,
+      /*0x0399*/ 250,
+      -1,
+      /*0x104b1*/ 1247,
+      -1, -1,
+      /*0x10b7*/ 507,
+      /*0x04f0*/ 413,
+      /*0x0535*/ 449,
+      -1,
+      /*0x24b7*/ 840,
+      /*0x1f95*/ 742,
+      /*0x0415*/ 318,
+      /*0x0393*/ 244,
+      /*0x10415*/ 1227,
+      /*0x104b5*/ 1251,
+      /*0xab95*/ 1125,
+      -1, -1, -1, -1,
+      /*0x2c15*/ 886,
+      -1,
+      /*0x1f39*/ 692,
+      /*0xff33*/ 1198,
+      -1, -1,
+      /*0x01b7*/ 154,
+      -1, -1, -1, -1,
+      /*0xab77*/ 1095,
+      -1,
+      /*0x10a3*/ 487,
+      -1,
+      /*0x1f91*/ 738,
+      /*0x0411*/ 314,
+      /*0x118a5*/ 1338,
+      /*0x10411*/ 1223,
+      /*0x10c95*/ 1303,
+      /*0xab91*/ 1121,
+      -1,
+      /*0x038f*/ 240,
+      /*0x118b7*/ 1356,
+      -1,
+      /*0x2c11*/ 882,
+      -1, -1, -1,
+      /*0x1e915*/ 1386,
+      -1,
+      /*0x1f8d*/ 734,
+      /*0x040d*/ 310,
+      /*0x0541*/ 461,
+      /*0x1040d*/ 1219,
+      -1,
+      /*0xab8d*/ 1117,
+      -1,
+      /*0x04c1*/ 390,
+      /*0x1ef8*/ 665,
+      /*0x104c1*/ 1263,
+      /*0x2c0d*/ 878,
+      -1, -1,
+      /*0x10c91*/ 1299,
+      -1, -1, -1, -1, -1, -1,
+      /*0x118a3*/ 1336,
+      -1,
       /*0x03cf*/ 270,
-      /*0x048a*/ 362,
-      -1,
-      /*0x038a*/ 237,
-      -1,
-      /*0x10414*/ 1126,
-      -1, -1, -1,
-      /*0x0510*/ 429,
-      /*0x1f94*/ 726,
-      /*0x0414*/ 317,
-      /*0x2c14*/ 870,
-      /*0x1e94*/ 598,
-      /*0x0114*/ 67,
-      /*0x0214*/ 200,
-      /*0x2c94*/ 922,
-      /*0x1e14*/ 534,
-      /*0xa68a*/ 993,
-      /*0x1ffb*/ 801,
-      /*0x0494*/ 367,
-      /*0x10406*/ 1112,
-      /*0x0394*/ 245,
-      /*0x017b*/ 118,
-      -1,
-      /*0x051a*/ 434,
-      /*0x1f86*/ 712,
-      /*0x0406*/ 303,
-      /*0x2c06*/ 856,
-      /*0x1e86*/ 591,
-      /*0x0106*/ 60,
-      /*0x0206*/ 193,
-      /*0x2c86*/ 915,
-      /*0x1e06*/ 527,
-      -1, -1,
-      /*0x0197*/ 136,
-      /*0xa694*/ 998,
-      /*0x0386*/ 234,
-      /*0xa786*/ 1047,
-      /*0x0198*/ 137,
-      /*0x2c7f*/ 911,
-      /*0x1f18*/ 662,
-      /*0x017f*/ 120,
-      /*0x0512*/ 430,
-      /*0x1fe7*/ 787,
-      -1,
-      /*0x2c67*/ 901,
-      /*0x00df*/ 56,
-      -1,
-      /*0x01f1*/ 181,
-      /*0x03ff*/ 296,
-      /*0x00dd*/ 54,
-      /*0xa686*/ 991,
-      /*0x018e*/ 129,
-      /*0x1f5f*/ 697,
-      /*0x1f0e*/ 660,
-      /*0x10422*/ 1140,
-      -1,
-      /*0x1f5d*/ 696,
-      /*0x0526*/ 440,
-      /*0x1ff7*/ 797,
-      /*0x1fa2*/ 740,
-      /*0x0422*/ 331,
-      /*0x2c22*/ 884,
-      /*0x1ea2*/ 607,
-      /*0x0122*/ 74,
-      /*0x0222*/ 207,
-      /*0x2ca2*/ 929,
-      /*0x1e22*/ 541,
-      /*0x1f0c*/ 658,
-      /*0x10407*/ 1113,
-      /*0x04a2*/ 374,
-      /*0x03f7*/ 291,
-      /*0x0524*/ 439,
-      /*0xa7a2*/ 1058,
-      /*0x1f87*/ 713,
-      /*0x0407*/ 304,
-      /*0x2c07*/ 857,
-      /*0x017d*/ 119,
-      /*0x0587*/ 483,
-      /*0x1f3f*/ 683,
-      /*0x10bf*/ 515,
-      -1,
-      /*0x0196*/ 135,
-      -1,
-      /*0x10402*/ 1108,
-      /*0x03fd*/ 294,
-      /*0x0520*/ 437,
-      -1, -1,
-      /*0x1f82*/ 708,
-      /*0x0402*/ 299,
-      /*0x2c02*/ 852,
-      /*0x1e82*/ 589,
-      /*0x0102*/ 58,
-      /*0x0202*/ 191,
-      /*0x2c82*/ 913,
-      /*0x1e02*/ 525,
-      -1,
-      /*0x053d*/ 457,
-      -1,
-      /*0x1040b*/ 1117,
-      /*0x0190*/ 131,
-      /*0xa782*/ 1045,
-      /*0x1fd7*/ 778,
-      -1,
-      /*0x1f8b*/ 717,
-      /*0x040b*/ 308,
-      /*0x2c0b*/ 861,
+      /*0x1e911*/ 1382,
+      /*0xff25*/ 1184,
+      -1,
+      /*0x0241*/ 220,
+      -1,
+      /*0xa78d*/ 1064,
+      /*0x10c8d*/ 1295,
+      /*0xff37*/ 1202,
+      -1,
+      /*0x10b1*/ 501,
+      -1, -1, -1,
+      /*0x01f4*/ 183,
+      -1, -1,
+      /*0x1e90d*/ 1378,
+      -1, -1, -1, -1,
+      /*0x10b5*/ 505,
+      -1, -1, -1,
+      /*0x13f8*/ 524,
       /*0x054f*/ 475,
-      -1,
-      /*0x1f6f*/ 705,
-      /*0x050a*/ 426,
-      -1, -1,
-      /*0x0057*/ 21,
-      /*0x10404*/ 1110,
-      /*0xa682*/ 989,
-      -1,
-      /*0xa78b*/ 1048,
-      /*0x1f1a*/ 664,
-      /*0x1f84*/ 710,
-      /*0x0404*/ 301,
-      /*0x2c04*/ 854,
-      /*0x1e84*/ 590,
-      /*0x0104*/ 59,
-      /*0x0204*/ 192,
-      /*0x2c84*/ 914,
-      /*0x1e04*/ 526,
-      -1,
-      /*0x00d9*/ 50,
-      /*0x0514*/ 431,
-      -1, -1,
-      /*0xa784*/ 1046,
-      /*0x01d9*/ 169,
-      /*0x1f69*/ 699,
-      /*0x1f59*/ 694,
-      -1,
-      /*0x1faa*/ 748,
-      /*0x042a*/ 339,
-      /*0x2c2a*/ 892,
-      /*0x1eaa*/ 611,
-      /*0x012a*/ 78,
-      /*0x022a*/ 211,
-      /*0x2caa*/ 933,
-      /*0x1e2a*/ 545,
-      /*0x0506*/ 424,
-      /*0xa684*/ 990,
-      /*0x04aa*/ 378,
-      -1,
-      /*0x03aa*/ 266,
-      /*0xa7aa*/ 1062,
-      /*0x01a6*/ 144,
-      /*0x10400*/ 1106,
-      -1,
-      /*0x10a6*/ 490,
-      -1, -1,
-      /*0x1f80*/ 706,
-      /*0x0400*/ 297,
-      /*0x2c00*/ 850,
-      /*0x1e80*/ 588,
-      /*0x0100*/ 57,
-      /*0x0200*/ 190,
-      /*0x2c80*/ 912,
-      /*0x1e00*/ 524,
-      /*0x01a4*/ 143,
-      -1,
-      /*0x0480*/ 361,
-      /*0x10a4*/ 488,
-      -1,
-      /*0xa780*/ 1044,
-      /*0x10413*/ 1125,
-      /*0x1fe3*/ 784,
-      -1,
-      /*0x2c63*/ 899,
-      -1,
-      /*0x1f93*/ 725,
-      /*0x0413*/ 316,
-      /*0x2c13*/ 869,
-      /*0x01a0*/ 141,
-      /*0x1041c*/ 1134,
-      /*0x0522*/ 438,
-      /*0x10a0*/ 484,
-      -1,
-      /*0xa680*/ 988,
-      /*0x1f9c*/ 734,
-      /*0x041c*/ 325,
-      /*0x2c1c*/ 878,
-      /*0x0393*/ 244,
-      /*0x011c*/ 71,
-      /*0x021c*/ 204,
-      /*0x2c9c*/ 926,
-      /*0x1e1c*/ 538,
-      /*0x1f3d*/ 681,
-      /*0x10bd*/ 513,
-      /*0x049c*/ 371,
-      /*0x00cf*/ 41,
-      /*0x039c*/ 253,
-      /*0xa79c*/ 1055,
-      -1, -1,
+      -1, -1, -1,
+      /*0x01b1*/ 150,
+      /*0x019d*/ 139,
+      -1,
+      /*0x104cf*/ 1277,
+      -1,
+      /*0xff23*/ 1182,
+      /*0x01f0*/ 180,
+      -1, -1, -1, -1, -1,
+      /*0x01b5*/ 153,
+      -1,
+      /*0x039f*/ 256,
+      -1, -1,
+      /*0x118b1*/ 1350,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1,
+      /*0x118b5*/ 1354,
+      /*0xfb17*/ 1179,
+      /*0x1e78*/ 599,
+      -1, -1, -1,
+      /*0x1f49*/ 700,
+      -1,
+      /*0x10c1*/ 517,
+      -1, -1, -1,
+      /*0x24c1*/ 850,
+      -1, -1,
+      /*0x0193*/ 133,
+      -1, -1, -1,
+      /*0x1f2d*/ 688,
+      -1, -1, -1, -1, -1, -1,
+      /*0xff31*/ 1196,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1,
+      /*0xff35*/ 1200,
+      -1, -1, -1, -1,
+      /*0x0395*/ 246,
+      -1,
+      /*0x018f*/ 130,
+      -1, -1, -1, -1, -1, -1,
+      /*0x04f8*/ 417,
+      -1, -1, -1, -1, -1,
+      /*0xab76*/ 1094,
+      /*0x24cf*/ 864,
+      /*0x018b*/ 128,
+      -1, -1, -1, -1, -1,
+      /*0x0187*/ 125,
+      -1,
+      /*0x0391*/ 242,
+      -1, -1, -1, -1, -1, -1,
+      -1,
       /*0x01cf*/ 164,
-      -1, -1,
-      /*0x018a*/ 127,
-      -1,
-      /*0x1f0a*/ 656,
-      /*0x1041e*/ 1136,
-      /*0x037f*/ 233,
-      -1,
-      /*0x0502*/ 422,
-      -1,
-      /*0x1f9e*/ 736,
-      /*0x041e*/ 327,
-      /*0x2c1e*/ 880,
-      /*0x1e9e*/ 605,
-      /*0x011e*/ 72,
-      /*0x021e*/ 205,
-      /*0x2c9e*/ 927,
-      /*0x1e1e*/ 539,
-      -1,
-      /*0x10408*/ 1114,
-      /*0x049e*/ 372,
-      /*0x0194*/ 134,
-      /*0x039e*/ 255,
-      /*0xa79e*/ 1056,
-      /*0x1f88*/ 714,
-      /*0x0408*/ 305,
-      /*0x2c08*/ 858,
-      /*0x1e88*/ 592,
-      /*0x0108*/ 61,
-      /*0x0208*/ 194,
-      /*0x2c88*/ 916,
-      /*0x1e08*/ 528,
-      /*0x0535*/ 449,
-      /*0x118bf*/ 1177,
-      -1,
-      /*0x1fdb*/ 782,
-      /*0x0388*/ 235,
-      /*0x0186*/ 124,
-      -1,
-      /*0x0504*/ 423,
-      /*0x1fac*/ 750,
-      /*0x042c*/ 341,
-      /*0x2c2c*/ 894,
-      /*0x1eac*/ 612,
-      /*0x012c*/ 79,
-      /*0x022c*/ 212,
-      /*0x2cac*/ 934,
-      /*0x1e2c*/ 546,
-      -1,
-      /*0x1040d*/ 1119,
-      /*0x04ac*/ 379,
-      /*0xa688*/ 992,
-      -1,
-      /*0xa7ac*/ 1064,
-      /*0x1f8d*/ 719,
-      /*0x040d*/ 310,
-      /*0x2c0d*/ 863,
-      /*0x052a*/ 442,
-      /*0x1fa8*/ 746,
-      /*0x0428*/ 337,
-      /*0x2c28*/ 890,
-      /*0x1ea8*/ 610,
-      /*0x0128*/ 77,
-      /*0x0228*/ 210,
-      /*0x2ca8*/ 932,
-      /*0x1e28*/ 544,
-      -1,
-      /*0xa78d*/ 1049,
-      /*0x04a8*/ 377,
-      /*0x24bf*/ 833,
-      /*0x03a8*/ 264,
-      /*0xa7a8*/ 1061,
-      /*0x01f7*/ 185,
-      /*0x01a2*/ 142,
-      -1, -1,
-      /*0x10a2*/ 486,
-      /*0x0500*/ 421,
-      /*0x1fae*/ 752,
-      /*0x042e*/ 343,
-      /*0x2c2e*/ 896,
-      /*0x1eae*/ 613,
-      /*0x012e*/ 80,
-      /*0x022e*/ 213,
-      /*0x2cae*/ 935,
-      /*0x1e2e*/ 547,
-      /*0x1fb2*/ 754,
-      /*0x0187*/ 125,
-      /*0x04ae*/ 380,
-      /*0x1eb2*/ 615,
-      /*0x0132*/ 81,
-      /*0x0232*/ 215,
-      /*0x2cb2*/ 937,
-      /*0x1e32*/ 549,
-      /*0x1fba*/ 761,
-      -1,
-      /*0x04b2*/ 382,
-      /*0x1eba*/ 619,
-      /*0xff26*/ 1085,
-      /*0x023a*/ 216,
-      /*0x2cba*/ 941,
-      /*0x1e3a*/ 553,
-      /*0x0182*/ 122,
-      /*0x1fb8*/ 759,
-      /*0x04ba*/ 386,
-      /*0x051c*/ 435,
-      /*0x1eb8*/ 618,
-      -1,
-      /*0x118a6*/ 1152,
-      /*0x2cb8*/ 940,
-      /*0x1e38*/ 552,
-      -1,
-      /*0xff24*/ 1083,
-      /*0x04b8*/ 385,
-      -1, -1,
-      /*0x01d7*/ 168,
-      /*0xfb17*/ 1079,
-      /*0x018b*/ 128,
-      -1,
-      /*0x1f0b*/ 657,
-      /*0x00b5*/ 25,
-      /*0x118a4*/ 1150,
-      -1, -1, -1,
-      /*0x01b5*/ 153,
-      /*0x1fec*/ 792,
-      /*0x046c*/ 351,
-      /*0x10b5*/ 505,
-      /*0x1eec*/ 644,
-      /*0x016c*/ 110,
-      /*0x051e*/ 436,
-      /*0x0184*/ 123,
-      /*0x1e6c*/ 578,
-      -1,
-      /*0x118a0*/ 1146,
-      /*0x04ec*/ 411,
-      /*0x1fca*/ 772,
-      /*0x03ec*/ 285,
-      -1,
-      /*0x1eca*/ 627,
-      /*0x014a*/ 93,
-      /*0x024a*/ 226,
-      /*0x2cca*/ 949,
-      /*0x1e4a*/ 561,
-      /*0x0508*/ 425,
-      -1,
-      /*0x118bd*/ 1175,
-      /*0x004a*/ 8,
-      -1, -1,
-      /*0x1fcc*/ 774,
-      /*0x1f2a*/ 670,
-      /*0x10aa*/ 494,
-      /*0x1ecc*/ 628,
-      /*0x014c*/ 94,
-      /*0x024c*/ 227,
-      /*0x2ccc*/ 950,
-      /*0x1e4c*/ 562,
-      -1, -1,
-      /*0x052c*/ 443,
-      /*0x004c*/ 10,
-      -1,
-      /*0xfb16*/ 1078,
-      /*0x1fd6*/ 777,
-      /*0xa726*/ 1004,
-      -1,
-      /*0x1ed6*/ 633,
-      /*0x0156*/ 99,
-      -1,
-      /*0x2cd6*/ 955,
-      /*0x1e56*/ 567,
-      -1, -1,
-      /*0x04d6*/ 400,
-      /*0x0056*/ 20,
-      /*0x03d6*/ 274,
-      -1,
-      /*0x0528*/ 441,
-      /*0xa724*/ 1003,
-      -1, -1,
-      /*0x24bd*/ 831,
-      /*0x1fe2*/ 783,
-      /*0x0462*/ 346,
-      /*0x2c62*/ 898,
-      /*0x1ee2*/ 639,
-      /*0x0162*/ 105,
-      /*0x0193*/ 133,
-      /*0x2ce2*/ 961,
-      /*0x1e62*/ 573,
-      -1,
-      /*0x24cf*/ 849,
-      /*0x04e2*/ 406,
-      -1,
-      /*0x03e2*/ 280,
-      /*0x10415*/ 1127,
-      /*0x019c*/ 138,
-      /*0x052e*/ 444,
-      /*0x1f1c*/ 666,
-      -1,
-      /*0x1f95*/ 727,
-      /*0x0415*/ 318,
-      /*0x2c15*/ 871,
-      /*0x1fc8*/ 770,
-      -1,
-      /*0x0532*/ 446,
-      /*0x1ec8*/ 626,
-      -1,
-      /*0x0248*/ 225,
-      /*0x2cc8*/ 948,
-      /*0x1e48*/ 560,
-      /*0x10401*/ 1107,
-      /*0x0395*/ 246,
-      /*0x053a*/ 454,
-      /*0x0048*/ 7,
-      -1,
-      /*0x1f81*/ 707,
-      /*0x0401*/ 298,
-      /*0x2c01*/ 851,
-      /*0xff22*/ 1081,
-      /*0x2165*/ 812,
-      /*0x1feb*/ 791,
-      /*0x0538*/ 452,
-      /*0x2c6b*/ 903,
-      /*0x2161*/ 808,
-      /*0x1fc4*/ 767,
-      -1,
-      /*0x2ceb*/ 962,
-      /*0x1ec4*/ 624,
-      /*0x118a2*/ 1148,
-      /*0x0244*/ 222,
-      /*0x2cc4*/ 946,
-      /*0x1e44*/ 558,
-      -1, -1,
-      /*0x1fd3*/ 776,
-      /*0x0044*/ 3,
-      /*0x1fea*/ 790,
-      /*0x046a*/ 350,
-      /*0x1f08*/ 654,
-      /*0x1eea*/ 643,
-      /*0x016a*/ 109,
-      -1,
-      /*0x00db*/ 52,
-      /*0x1e6a*/ 577,
-      /*0xa77b*/ 1041,
-      /*0x0053*/ 17,
-      /*0x04ea*/ 410,
-      /*0x01db*/ 170,
-      /*0x03ea*/ 284,
-      /*0x1f5b*/ 695,
-      -1, -1,
-      /*0x01ac*/ 147,
-      -1,
-      /*0x1f2c*/ 672,
-      /*0x10ac*/ 496,
-      /*0x054a*/ 470,
-      /*0x1fe8*/ 788,
-      /*0x0468*/ 349,
-      -1,
-      /*0x1ee8*/ 642,
-      /*0x0168*/ 108,
-      -1, -1,
-      /*0x1e68*/ 576,
-      -1, -1,
-      /*0x04e8*/ 409,
-      /*0x1f0d*/ 659,
-      /*0x03e8*/ 283,
-      /*0x054c*/ 472,
-      /*0xff35*/ 1100,
-      /*0x1f28*/ 668,
-      /*0x10a8*/ 492,
-      -1, -1,
-      /*0x1fe4*/ 785,
-      /*0x0464*/ 347,
-      /*0x2c64*/ 900,
-      /*0x1ee4*/ 640,
-      /*0x0164*/ 106,
-      /*0x118b5*/ 1167,
-      -1,
-      /*0x1e64*/ 574,
-      /*0x0556*/ 482,
-      -1,
-      /*0x04e4*/ 407,
-      /*0xa722*/ 1002,
-      /*0x03e4*/ 281,
-      -1,
-      /*0x01ae*/ 148,
-      /*0x216f*/ 822,
-      /*0x1f2e*/ 674,
-      /*0x10ae*/ 498,
-      -1, -1,
-      /*0xff2a*/ 1089,
-      -1,
-      /*0x01b2*/ 151,
-      -1,
-      /*0xa77d*/ 1042,
-      /*0x10b2*/ 502,
-      -1,
-      /*0xfb14*/ 1076,
-      /*0x1fbc*/ 763,
-      -1,
-      /*0x118aa*/ 1156,
-      /*0x1ebc*/ 620,
-      /*0x1f3a*/ 678,
-      /*0x10ba*/ 510,
-      /*0x2cbc*/ 942,
-      /*0x1e3c*/ 554,
-      -1, -1,
-      /*0x04bc*/ 387,
-      /*0x01b8*/ 155,
-      /*0x2169*/ 816,
-      /*0x1f38*/ 676,
-      /*0x10b8*/ 508,
-      /*0xfb06*/ 1074,
-      /*0x0460*/ 345,
-      /*0x2c60*/ 897,
-      /*0x1ee0*/ 638,
-      /*0x0160*/ 104,
-      /*0x0548*/ 468,
-      /*0x2ce0*/ 960,
-      /*0x1e60*/ 572,
-      -1, -1,
-      /*0x04e0*/ 405,
-      -1,
-      /*0x03e0*/ 279,
-      -1, -1, -1,
-      /*0x2126*/ 803,
-      -1,
-      /*0x1fbe*/ 764,
-      -1,
-      /*0x01ec*/ 178,
-      /*0x1ebe*/ 621,
-      /*0x1f6c*/ 702,
-      /*0x023e*/ 219,
-      /*0x2cbe*/ 943,
-      /*0x1e3e*/ 555,
-      /*0x00ca*/ 36,
-      /*0x0544*/ 464,
-      /*0x04be*/ 388,
-      /*0x1ffc*/ 802,
-      /*0x047c*/ 359,
-      /*0x01ca*/ 161,
-      /*0x1efc*/ 652,
-      /*0x1f4a*/ 686,
-      -1, -1,
-      /*0x1e7c*/ 586,
-      /*0x0553*/ 479,
-      /*0x1fb6*/ 757,
-      /*0x04fc*/ 419,
-      /*0x00cc*/ 38,
-      /*0x1eb6*/ 617,
-      /*0x0136*/ 83,
-      -1,
-      /*0x2cb6*/ 939,
-      /*0x1e36*/ 551,
-      /*0xa72a*/ 1006,
-      /*0x1f4c*/ 688,
-      /*0x04b6*/ 384,
-      /*0x1fd2*/ 775,
-      -1, -1,
-      /*0x1ed2*/ 631,
-      /*0x0152*/ 97,
-      /*0x00d6*/ 48,
-      /*0x2cd2*/ 953,
-      /*0x1e52*/ 565,
-      -1, -1,
-      /*0x04d2*/ 398,
-      /*0x0052*/ 16,
-      /*0x1f56*/ 693,
-      -1, -1, -1,
-      /*0xfb02*/ 1070,
-      /*0x1ed0*/ 630,
-      /*0x0150*/ 96,
-      -1,
-      /*0x2cd0*/ 952,
-      /*0x1e50*/ 564,
-      -1, -1,
-      /*0x04d0*/ 397,
-      /*0x0050*/ 14,
-      /*0x03d0*/ 271,
-      -1,
-      /*0x1fda*/ 781,
-      /*0x01e2*/ 173,
-      -1,
-      /*0x1eda*/ 635,
-      /*0x015a*/ 101,
-      /*0xff2c*/ 1091,
-      /*0x2cda*/ 957,
-      /*0x1e5a*/ 569,
-      -1,
-      /*0xa66c*/ 987,
-      /*0x04da*/ 402,
-      /*0x005a*/ 24,
-      /*0x03da*/ 276,
-      -1,
-      /*0x2c6d*/ 904,
-      /*0x118ac*/ 1158,
-      -1,
-      /*0x00c8*/ 34,
-      /*0x2ced*/ 963,
-      /*0xfb04*/ 1072,
-      /*0xa64a*/ 970,
-      -1,
-      /*0x01c8*/ 160,
-      /*0xff28*/ 1087,
-      /*0x1f48*/ 684,
-      /*0x1fc2*/ 765,
-      -1, -1,
-      /*0x1ec2*/ 623,
-      -1,
-      /*0x053c*/ 456,
-      /*0x2cc2*/ 945,
-      /*0x1e42*/ 557,
-      /*0x118a8*/ 1154,
-      /*0xa64c*/ 971,
-      /*0x0181*/ 121,
-      /*0x0042*/ 1,
-      /*0x03c2*/ 269,
-      -1,
-      /*0x00c4*/ 30,
-      -1, -1,
-      /*0x1f6b*/ 701,
-      /*0xff2e*/ 1093,
-      /*0x01c4*/ 157,
-      -1,
-      /*0x2167*/ 814,
-      /*0x10c4*/ 520,
-      /*0xa656*/ 976,
-      /*0x00d3*/ 45,
-      -1,
-      /*0xff32*/ 1097,
-      -1,
-      /*0x118ae*/ 1160,
-      /*0x01d3*/ 166,
-      -1,
-      /*0x01ea*/ 177,
-      /*0xfb00*/ 1068,
-      /*0x1f6a*/ 700,
-      /*0xff3a*/ 1105,
-      -1,
-      /*0x118b2*/ 1164,
-      -1,
-      /*0x053e*/ 458,
-      /*0x0145*/ 90,
-      /*0x0245*/ 223,
-      -1,
-      /*0xa662*/ 982,
-      /*0xff38*/ 1103,
-      /*0x118ba*/ 1172,
-      /*0x04c5*/ 392,
-      /*0x0045*/ 4,
-      -1, -1,
-      /*0xa72c*/ 1007,
-      -1,
-      /*0xfb13*/ 1075,
-      /*0x01e8*/ 176,
-      /*0x118b8*/ 1170,
-      /*0x1f68*/ 698,
-      -1, -1, -1,
-      /*0x0536*/ 450,
-      /*0x046e*/ 352,
-      /*0x2c6e*/ 905,
-      /*0x1eee*/ 645,
-      /*0x016e*/ 111,
-      /*0xa648*/ 969,
-      -1,
-      /*0x1e6e*/ 579,
-      -1,
-      /*0xa728*/ 1005,
-      /*0x04ee*/ 412,
-      /*0x0552*/ 478,
-      /*0x03ee*/ 286,
-      /*0x01e4*/ 174,
-      /*0x1fe6*/ 786,
-      /*0x0466*/ 348,
-      /*0x1ff9*/ 799,
-      /*0x1ee6*/ 641,
-      /*0x0166*/ 107,
-      -1,
-      /*0x0179*/ 117,
-      /*0x1e66*/ 575,
-      /*0x24ba*/ 828,
-      -1,
-      /*0x04e6*/ 408,
-      /*0x0550*/ 476,
-      /*0x03e6*/ 282,
-      /*0xa644*/ 967,
-      /*0x03f9*/ 292,
-      /*0xa72e*/ 1008,
-      -1,
-      /*0x24b8*/ 826,
-      /*0x1ece*/ 629,
-      /*0x014e*/ 95,
-      /*0x024e*/ 228,
-      /*0x2cce*/ 951,
-      /*0x1e4e*/ 563,
-      /*0xa732*/ 1009,
-      -1,
-      /*0xa66a*/ 986,
-      /*0x004e*/ 12,
-      /*0x01bc*/ 156,
-      -1,
-      /*0x1f3c*/ 680,
-      /*0x10bc*/ 512,
-      /*0xa73a*/ 1013,
-      /*0x1fc6*/ 768,
-      -1, -1,
-      /*0x1ec6*/ 625,
-      -1,
-      /*0x0246*/ 224,
-      /*0x2cc6*/ 947,
-      /*0x1e46*/ 559,
-      /*0xa738*/ 1012,
-      -1,
-      /*0x01e0*/ 172,
-      /*0x0046*/ 5,
-      /*0x212a*/ 804,
-      -1,
-      /*0xa668*/ 985,
-      /*0x1fa9*/ 747,
-      /*0x0429*/ 338,
-      /*0x2c29*/ 891,
-      /*0x0542*/ 462,
-      -1,
-      /*0x24ca*/ 844,
-      /*0x1ed4*/ 632,
-      /*0x0154*/ 98,
-      -1,
-      /*0x2cd4*/ 954,
-      /*0x1e54*/ 566,
-      -1,
-      /*0x03a9*/ 265,
-      /*0x04d4*/ 399,
-      /*0x0054*/ 18,
-      /*0x1f3e*/ 682,
-      /*0x10be*/ 514,
-      /*0xa76c*/ 1038,
-      /*0xa664*/ 983,
-      /*0x24cc*/ 846,
-      -1,
-      /*0x04cd*/ 396,
-      /*0x004d*/ 11,
-      /*0x1fd8*/ 779,
-      /*0x01fc*/ 188,
-      -1,
-      /*0x1ed8*/ 634,
-      /*0x0158*/ 100,
-      /*0xa74a*/ 1021,
-      /*0x2cd8*/ 956,
-      /*0x1e58*/ 568,
-      -1,
-      /*0x2163*/ 810,
-      /*0x04d8*/ 401,
-      /*0x0058*/ 22,
-      /*0x03d8*/ 275,
-      /*0x10b6*/ 506,
-      /*0x1ec0*/ 622,
-      /*0x0545*/ 465,
-      /*0x00d2*/ 44,
-      /*0x2cc0*/ 944,
-      /*0x1e40*/ 556,
-      /*0xa74c*/ 1022,
-      -1,
-      /*0x04c0*/ 389,
-      /*0x1fb4*/ 756,
-      /*0x1f52*/ 691,
-      -1,
-      /*0x1eb4*/ 616,
-      /*0x0134*/ 82,
-      -1,
-      /*0x2cb4*/ 938,
-      /*0x1e34*/ 550,
-      /*0x00d0*/ 42,
-      -1,
-      /*0x04b4*/ 383,
-      /*0xa756*/ 1027,
-      -1,
-      /*0x1fb7*/ 758,
-      -1,
-      /*0x1f50*/ 690,
-      /*0xa660*/ 981,
-      /*0x1eb0*/ 614,
-      /*0x0130*/ 1179,
-      /*0x0230*/ 214,
-      /*0x2cb0*/ 936,
-      /*0x1e30*/ 548,
-      /*0x00da*/ 51,
-      -1,
-      /*0x04b0*/ 381,
-      -1,
-      /*0x03b0*/ 268,
-      /*0xa7b0*/ 1066,
-      /*0x24c8*/ 842,
-      -1,
-      /*0xa762*/ 1033,
-      /*0x1ede*/ 637,
-      /*0x015e*/ 103,
-      /*0x1fb9*/ 760,
-      /*0x2cde*/ 959,
-      /*0x1e5e*/ 571,
-      -1,
-      /*0x0139*/ 84,
-      /*0x04de*/ 404,
-      -1,
-      /*0x03de*/ 278,
-      /*0x1f6d*/ 703,
-      /*0x1fc7*/ 769,
-      /*0x0345*/ 229,
-      /*0x1fbb*/ 762,
-      /*0x054e*/ 474,
-      /*0x0147*/ 91,
-      /*0x00c2*/ 28,
-      /*0x013b*/ 85,
-      /*0x023b*/ 217,
-      /*0x24c4*/ 838,
-      /*0xa748*/ 1020,
-      /*0x04c7*/ 393,
-      /*0x0047*/ 6,
-      -1,
-      /*0x10c2*/ 518,
-      /*0x1fab*/ 749,
-      /*0x042b*/ 340,
-      /*0x2c2b*/ 893,
-      /*0x0055*/ 19,
-      /*0x03d5*/ 273,
-      -1,
-      /*0x0546*/ 466,
-      -1, -1,
-      /*0xa652*/ 974,
-      /*0x1fc3*/ 766,
-      -1,
-      /*0x03ab*/ 267,
-      /*0xa7ab*/ 1063,
-      /*0x0143*/ 89,
-      /*0x0243*/ 221,
-      -1,
-      /*0xa744*/ 1018,
-      -1, -1,
-      /*0x04c3*/ 391,
-      /*0x0043*/ 2,
-      -1,
-      /*0xa650*/ 973,
-      /*0x0554*/ 480,
-      -1,
-      /*0x00c5*/ 31,
-      -1, -1,
-      /*0xa76a*/ 1037,
-      -1,
-      /*0x01c5*/ 158,
-      /*0x054d*/ 473,
-      -1,
-      /*0x10c5*/ 521,
-      -1, -1,
-      /*0xa65a*/ 978,
-      /*0x118bc*/ 1174,
-      /*0x1ff2*/ 793,
-      /*0x0472*/ 354,
-      /*0x2c72*/ 908,
-      /*0x1ef2*/ 647,
-      /*0x0172*/ 113,
-      -1,
-      /*0x2cf2*/ 964,
-      /*0x1e72*/ 581,
-      /*0x2132*/ 806,
-      -1,
-      /*0x04f2*/ 414,
-      /*0xa768*/ 1036,
-      /*0x1faf*/ 753,
-      /*0x042f*/ 344,
-      -1,
-      /*0x01ee*/ 179,
-      /*0x0540*/ 460,
-      /*0x1f6e*/ 704,
-      -1,
-      /*0x10427*/ 1145,
-      -1,
-      /*0xfb15*/ 1077,
-      -1,
-      /*0xa642*/ 966,
-      /*0x1fa7*/ 745,
-      /*0x0427*/ 336,
-      /*0x2c27*/ 889,
-      /*0x0534*/ 448,
-      -1,
-      /*0x01e6*/ 175,
-      /*0xa764*/ 1034,
-      -1,
-      /*0x118be*/ 1176,
-      -1, -1,
-      /*0x24bc*/ 830,
-      /*0x03a7*/ 263,
-      /*0xfb01*/ 1069,
-      -1,
-      /*0x00ce*/ 40,
-      /*0x0537*/ 451,
-      -1,
-      /*0xff36*/ 1101,
-      -1,
-      /*0x1edc*/ 636,
-      /*0x015c*/ 102,
-      -1,
-      /*0x2cdc*/ 958,
-      /*0x1e5c*/ 570,
-      /*0x216c*/ 819,
-      -1,
-      /*0x04dc*/ 403,
-      /*0x118b6*/ 1168,
-      /*0x03dc*/ 277,
-      -1,
-      /*0x1fcb*/ 773,
-      /*0x00c6*/ 32,
-      -1,
-      /*0xa73c*/ 1014,
-      /*0x1fb3*/ 755,
-      /*0x0539*/ 453,
-      /*0x0470*/ 353,
-      /*0x2c70*/ 907,
-      /*0x1ef0*/ 646,
-      /*0x0170*/ 112,
-      /*0x04cb*/ 395,
-      /*0x004b*/ 9,
-      /*0x1e70*/ 580,
-      /*0x24be*/ 832,
-      /*0x0547*/ 467,
-      /*0x04f0*/ 413,
-      /*0x053b*/ 455,
-      /*0x03f0*/ 287,
-      /*0xa760*/ 1032,
-      /*0x00d4*/ 46,
-      /*0x0555*/ 481,
-      /*0x01a9*/ 146,
-      -1,
-      /*0x1f29*/ 669,
-      /*0x10a9*/ 493,
-      -1,
-      /*0x1f54*/ 692,
-      /*0x00cd*/ 39,
-      /*0x1fad*/ 751,
-      /*0x042d*/ 342,
-      /*0x2c2d*/ 895,
-      -1,
-      /*0x01cd*/ 163,
-      /*0x24b6*/ 824,
-      /*0x1f4d*/ 689,
-      /*0x10cd*/ 523,
-      /*0xa73e*/ 1015,
-      -1,
-      /*0x0543*/ 463,
-      /*0x00d8*/ 49,
-      /*0xa666*/ 984,
-      /*0xa7ad*/ 1065,
-      /*0x047e*/ 360,
-      /*0x2c7e*/ 910,
-      /*0x1efe*/ 653,
-      -1,
-      /*0xa7b1*/ 1067,
-      -1,
-      /*0x1e7e*/ 587,
-      -1,
-      /*0x00c0*/ 26,
-      /*0x04fe*/ 420,
-      /*0x2162*/ 809,
-      /*0x03fe*/ 295,
-      -1,
-      /*0xa64e*/ 972,
-      /*0xa736*/ 1011,
-      -1,
-      /*0x10c0*/ 516,
-      -1, -1,
-      /*0x1ff4*/ 795,
-      /*0x0474*/ 355,
-      -1,
-      /*0x1ef4*/ 648,
-      /*0x0174*/ 114,
-      -1,
-      /*0xa752*/ 1025,
-      /*0x1e74*/ 582,
-      /*0x10b4*/ 504,
-      /*0x10403*/ 1109,
-      /*0x04f4*/ 415,
-      /*0xa646*/ 968,
-      /*0x03f4*/ 289,
-      /*0x1fc9*/ 771,
-      /*0x1f83*/ 709,
-      /*0x0403*/ 300,
-      /*0x2c03*/ 853,
-      /*0x0149*/ 92,
-      /*0x01b7*/ 154,
-      -1,
-      /*0xa750*/ 1024,
-      /*0x10b7*/ 507,
-      /*0x10b0*/ 500,
-      /*0x04c9*/ 394,
-      /*0x0049*/ 1178,
-      /*0x0141*/ 88,
-      /*0x0241*/ 220,
-      -1,
-      /*0x00de*/ 55,
-      /*0xa654*/ 975,
-      /*0x216b*/ 818,
-      /*0x04c1*/ 390,
-      /*0x0041*/ 0,
-      /*0x01de*/ 171,
-      /*0xa75a*/ 1029,
-      -1,
-      /*0x24c2*/ 836,
-      -1,
-      /*0x10425*/ 1143,
-      -1,
-      /*0x1f39*/ 677,
-      /*0x10b9*/ 509,
-      /*0x00c7*/ 33,
-      /*0x1fa5*/ 743,
-      /*0x0425*/ 334,
-      /*0x2c25*/ 887,
-      /*0x216a*/ 817,
-      /*0x01c7*/ 159,
-      /*0x00d5*/ 47,
-      /*0xa658*/ 977,
-      /*0x10c7*/ 522,
-      /*0x1f3b*/ 679,
-      /*0x10bb*/ 511,
-      /*0x01d5*/ 167,
-      -1,
-      /*0x03a5*/ 261,
-      /*0x0372*/ 231,
-      -1, -1,
-      /*0xa742*/ 1017,
-      /*0xa640*/ 965,
-      /*0x054b*/ 471,
-      -1,
-      /*0x1f2b*/ 671,
-      /*0x10ab*/ 495,
-      /*0x0533*/ 447,
-      /*0x00c3*/ 29,
-      /*0x2168*/ 815,
-      -1, -1,
-      /*0x10423*/ 1141,
-      /*0x24c5*/ 839,
-      -1,
-      /*0x10421*/ 1139,
-      /*0x10c3*/ 519,
-      /*0x1fa3*/ 741,
-      /*0x0423*/ 332,
-      /*0x2c23*/ 885,
-      /*0x1fa1*/ 739,
-      /*0x0421*/ 330,
-      /*0x2c21*/ 883,
-      -1, -1, -1, -1, -1,
-      /*0x2164*/ 811,
-      /*0x03a3*/ 259,
-      /*0x1ff6*/ 796,
-      /*0x0476*/ 356,
-      /*0x03a1*/ 258,
-      /*0x1ef6*/ 649,
-      /*0x0176*/ 115,
-      -1,
-      /*0x0531*/ 445,
-      /*0x1e76*/ 583,
-      -1, -1,
-      /*0x04f6*/ 416,
-      /*0xa65e*/ 980,
-      /*0x01f2*/ 182,
-      /*0x1ffa*/ 800,
-      /*0x047a*/ 358,
-      -1,
-      /*0x1efa*/ 651,
-      -1,
-      /*0x0051*/ 15,
-      /*0x03d1*/ 272,
-      /*0x1e7a*/ 585,
-      /*0xff29*/ 1088,
-      -1,
-      /*0x04fa*/ 418,
-      /*0x01af*/ 149,
-      /*0x03fa*/ 293,
-      /*0x1f2f*/ 675,
-      /*0x10af*/ 499,
-      /*0x0370*/ 230,
-      /*0xa76e*/ 1039,
-      -1,
-      /*0x118a9*/ 1155,
-      -1, -1, -1,
-      /*0x24ce*/ 848,
-      /*0x01a7*/ 145,
-      -1, -1,
-      /*0x10a7*/ 491,
-      -1,
-      /*0x2160*/ 807,
-      -1,
-      /*0xa766*/ 1035,
-      -1,
-      /*0xa779*/ 1040,
-      -1,
-      /*0x0549*/ 469,
-      /*0x00dc*/ 53,
-      -1,
-      /*0x1ff8*/ 798,
-      /*0x0478*/ 357,
-      /*0x24c6*/ 840,
-      /*0x1ef8*/ 650,
-      /*0x0178*/ 116,
-      /*0x0541*/ 461,
-      -1,
-      /*0x1e78*/ 584,
-      /*0xa74e*/ 1023,
-      -1,
-      /*0x04f8*/ 417,
-      -1,
-      /*0x00cb*/ 37,
-      -1, -1, -1,
-      /*0xff34*/ 1099,
-      /*0x01cb*/ 162,
-      -1,
-      /*0x1f4b*/ 687,
-      -1,
-      /*0x01b3*/ 152,
-      /*0x01f0*/ 180,
-      -1,
-      /*0x10b3*/ 503,
-      /*0xa746*/ 1019,
-      /*0x118b4*/ 1166,
-      /*0x1041d*/ 1135,
-      /*0x24cd*/ 847,
-      /*0xff37*/ 1102,
-      /*0xff30*/ 1095,
-      /*0x10405*/ 1111,
-      /*0x1f9d*/ 735,
-      /*0x041d*/ 326,
-      /*0x2c1d*/ 879,
-      -1,
-      /*0x1f85*/ 711,
-      /*0x0405*/ 302,
-      /*0x2c05*/ 855,
-      /*0x118b7*/ 1169,
-      /*0x118b0*/ 1162,
-      -1, -1,
-      /*0xa754*/ 1026,
-      /*0x039d*/ 254,
-      -1, -1,
-      /*0x1f2d*/ 673,
-      /*0x10ad*/ 497,
-      /*0xff39*/ 1104,
-      /*0x01b1*/ 150,
-      /*0x24c0*/ 834,
-      -1,
-      /*0x10b1*/ 501,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1,
+      /*0x019f*/ 140,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1,
+      /*0x1c85*/ 535,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1,
+      /*0x01f8*/ 186,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1,
+      /*0x1f1d*/ 682,
+      -1, -1, -1, -1, -1, -1,
+      -1,
+      /*0x1f1b*/ 680,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1,
+      /*0x0191*/ 132,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1,
+      /*0x1f19*/ 678,
+      /*0xfb13*/ 1175,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
       -1, -1, -1, -1,
-      /*0x01fe*/ 189,
-      /*0x118b9*/ 1171,
-      /*0x1041b*/ 1133,
-      -1, -1,
-      /*0xa758*/ 1028,
-      -1,
-      /*0x1f9b*/ 733,
-      /*0x041b*/ 324,
-      /*0x2c1b*/ 877,
-      /*0x1e9b*/ 604,
-      /*0xa65c*/ 979,
-      /*0x118bb*/ 1173,
-      -1,
-      /*0xff2b*/ 1090,
-      -1,
-      /*0xa740*/ 1016,
-      /*0x24b7*/ 825,
-      -1,
-      /*0x039b*/ 252,
-      /*0x01f4*/ 183,
-      /*0x0551*/ 477,
-      /*0x216d*/ 820,
-      -1,
-      /*0x118ab*/ 1157,
-      /*0x10419*/ 1131,
-      -1,
-      /*0xa734*/ 1010,
-      /*0x00c9*/ 35,
-      -1,
-      /*0x1f99*/ 731,
-      /*0x0419*/ 322,
-      /*0x2c19*/ 875,
-      /*0x1e99*/ 602,
-      -1,
-      /*0x1f49*/ 685,
-      /*0x00c1*/ 27,
-      /*0x24b9*/ 827,
+      /*0x1f0f*/ 676,
       -1, -1, -1, -1,
-      /*0x0399*/ 250,
-      -1,
-      /*0x10c1*/ 517,
-      /*0x1040f*/ 1121,
-      /*0x24c7*/ 841,
-      -1,
-      /*0x24bb*/ 829,
-      -1,
-      /*0x1f8f*/ 721,
-      /*0x040f*/ 312,
-      /*0x2c0f*/ 865,
-      -1,
-      /*0x10409*/ 1115,
-      /*0xa75e*/ 1031,
-      -1, -1, -1,
-      /*0x1f89*/ 715,
-      /*0x0409*/ 306,
-      /*0x2c09*/ 859,
-      /*0x038f*/ 240,
-      -1,
-      /*0x0376*/ 232,
-      /*0xff2f*/ 1094,
-      /*0x10a5*/ 489,
-      /*0x1041f*/ 1137,
-      -1, -1,
-      /*0x24c3*/ 837,
-      /*0x0389*/ 236,
-      /*0x1f9f*/ 737,
-      /*0x041f*/ 328,
-      /*0x2c1f*/ 881,
-      /*0x118af*/ 1161,
-      -1,
-      /*0xff27*/ 1086,
-      -1, -1, -1, -1, -1,
-      /*0x10411*/ 1123,
-      /*0x039f*/ 256,
-      -1, -1,
-      /*0x118a7*/ 1153,
-      /*0x1f91*/ 723,
-      /*0x0411*/ 314,
-      /*0x2c11*/ 867,
-      /*0x2183*/ 823,
-      -1,
-      /*0x216e*/ 821,
+      /*0xab7e*/ 1102,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1,
+      /*0x1f0b*/ 672,
       -1, -1, -1, -1,
-      /*0x10a3*/ 487,
-      -1,
-      /*0x0391*/ 242,
-      /*0x10a1*/ 485,
-      -1, -1, -1, -1, -1,
-      /*0x2166*/ 813,
-      /*0x01f6*/ 184,
-      -1,
-      /*0x00d1*/ 43,
-      -1,
-      /*0xff33*/ 1098,
-      -1, -1,
-      /*0x01d1*/ 165,
-      -1, -1, -1, -1, -1,
-      /*0x01fa*/ 187,
-      /*0x118b3*/ 1165,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1,
-      /*0xff2d*/ 1092,
+      /*0xab72*/ 1090,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1,
+      /*0x1c81*/ 531,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1,
+      /*0xfb15*/ 1177,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1,
+      /*0x1f0d*/ 674,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1,
+      /*0xab7a*/ 1098,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
       -1, -1, -1, -1,
-      /*0xff31*/ 1096,
+      /*0xab7c*/ 1100,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
       -1, -1, -1, -1,
-      /*0x118ad*/ 1159,
+      /*0x1c87*/ 537,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1,
+      /*0xab74*/ 1092,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
       -1, -1, -1, -1,
-      /*0x118b1*/ 1163,
-      -1, -1,
-      /*0x24cb*/ 845,
-      -1, -1, -1,
-      /*0x01f8*/ 186,
+      /*0xab70*/ 1088,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
       -1, -1, -1, -1,
-      /*0xa75c*/ 1030,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1,
-      /*0x019d*/ 139,
-      -1,
-      /*0x1f1d*/ 667,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1,
-      /*0xff25*/ 1084,
-      -1, -1, -1, -1, -1,
-      /*0xa77e*/ 1043,
-      -1, -1, -1,
-      /*0x118a5*/ 1151,
-      -1, -1,
-      /*0x1f1b*/ 665,
-      -1, -1,
-      /*0x24c9*/ 843,
-      -1, -1, -1, -1, -1, -1,
-      -1,
-      /*0x24c1*/ 835,
-      -1, -1, -1, -1, -1, -1,
-      -1,
-      /*0xff23*/ 1082,
-      -1, -1,
-      /*0xff21*/ 1080,
-      /*0x1f19*/ 663,
-      -1, -1, -1, -1, -1,
-      /*0x118a3*/ 1149,
-      /*0x212b*/ 805,
-      -1,
-      /*0x118a1*/ 1147,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1,
-      /*0x018f*/ 130,
-      -1,
-      /*0x1f0f*/ 661,
-      -1, -1, -1, -1, -1, -1,
-      /*0x0189*/ 126,
-      -1,
-      /*0x1f09*/ 655,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1,
-      /*0x019f*/ 140,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1,
-      /*0x0191*/ 132,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1,
-      /*0xfb03*/ 1071,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1,
-      /*0xfb05*/ 1073
+      /*0xab78*/ 1096
     };
 
   if (code <= MAX_CODE_VALUE && code >= MIN_CODE_VALUE)
     {
-      register int key = onigenc_unicode_CaseFold_11_hash(code);
+      register unsigned int key = onigenc_unicode_CaseFold_11_hash(code);
 
-      if (key <= MAX_HASH_VALUE && key >= 0)
+      if (key <= MAX_HASH_VALUE)
         {
           register short s = wordlist[key];
@@ -2782,1067 +3592,1279 @@
 
 static const CaseUnfold_11_Type CaseUnfold_11_Table[] = {
-#define CaseUnfold_11 (*(CaseUnfold_11_Type (*)[1054])(CaseUnfold_11_Table+0))
-  {0x0061, {1, {0x0041}}},
-  {0x0062, {1, {0x0042}}},
-  {0x0063, {1, {0x0043}}},
-  {0x0064, {1, {0x0044}}},
-  {0x0065, {1, {0x0045}}},
-  {0x0066, {1, {0x0046}}},
-  {0x0067, {1, {0x0047}}},
-  {0x0068, {1, {0x0048}}},
-  {0x006a, {1, {0x004a}}},
-  {0x006b, {2, {0x004b, 0x212a}}},
-  {0x006c, {1, {0x004c}}},
-  {0x006d, {1, {0x004d}}},
-  {0x006e, {1, {0x004e}}},
-  {0x006f, {1, {0x004f}}},
-  {0x0070, {1, {0x0050}}},
-  {0x0071, {1, {0x0051}}},
-  {0x0072, {1, {0x0052}}},
-  {0x0073, {2, {0x0053, 0x017f}}},
-  {0x0074, {1, {0x0054}}},
-  {0x0075, {1, {0x0055}}},
-  {0x0076, {1, {0x0056}}},
-  {0x0077, {1, {0x0057}}},
-  {0x0078, {1, {0x0058}}},
-  {0x0079, {1, {0x0059}}},
-  {0x007a, {1, {0x005a}}},
-  {0x00e0, {1, {0x00c0}}},
-  {0x00e1, {1, {0x00c1}}},
-  {0x00e2, {1, {0x00c2}}},
-  {0x00e3, {1, {0x00c3}}},
-  {0x00e4, {1, {0x00c4}}},
-  {0x00e5, {2, {0x00c5, 0x212b}}},
-  {0x00e6, {1, {0x00c6}}},
-  {0x00e7, {1, {0x00c7}}},
-  {0x00e8, {1, {0x00c8}}},
-  {0x00e9, {1, {0x00c9}}},
-  {0x00ea, {1, {0x00ca}}},
-  {0x00eb, {1, {0x00cb}}},
-  {0x00ec, {1, {0x00cc}}},
-  {0x00ed, {1, {0x00cd}}},
-  {0x00ee, {1, {0x00ce}}},
-  {0x00ef, {1, {0x00cf}}},
-  {0x00f0, {1, {0x00d0}}},
-  {0x00f1, {1, {0x00d1}}},
-  {0x00f2, {1, {0x00d2}}},
-  {0x00f3, {1, {0x00d3}}},
-  {0x00f4, {1, {0x00d4}}},
-  {0x00f5, {1, {0x00d5}}},
-  {0x00f6, {1, {0x00d6}}},
-  {0x00f8, {1, {0x00d8}}},
-  {0x00f9, {1, {0x00d9}}},
-  {0x00fa, {1, {0x00da}}},
-  {0x00fb, {1, {0x00db}}},
-  {0x00fc, {1, {0x00dc}}},
-  {0x00fd, {1, {0x00dd}}},
-  {0x00fe, {1, {0x00de}}},
-  {0x00ff, {1, {0x0178}}},
-  {0x0101, {1, {0x0100}}},
-  {0x0103, {1, {0x0102}}},
-  {0x0105, {1, {0x0104}}},
-  {0x0107, {1, {0x0106}}},
-  {0x0109, {1, {0x0108}}},
-  {0x010b, {1, {0x010a}}},
-  {0x010d, {1, {0x010c}}},
-  {0x010f, {1, {0x010e}}},
-  {0x0111, {1, {0x0110}}},
-  {0x0113, {1, {0x0112}}},
-  {0x0115, {1, {0x0114}}},
-  {0x0117, {1, {0x0116}}},
-  {0x0119, {1, {0x0118}}},
-  {0x011b, {1, {0x011a}}},
-  {0x011d, {1, {0x011c}}},
-  {0x011f, {1, {0x011e}}},
-  {0x0121, {1, {0x0120}}},
-  {0x0123, {1, {0x0122}}},
-  {0x0125, {1, {0x0124}}},
-  {0x0127, {1, {0x0126}}},
-  {0x0129, {1, {0x0128}}},
-  {0x012b, {1, {0x012a}}},
-  {0x012d, {1, {0x012c}}},
-  {0x012f, {1, {0x012e}}},
-  {0x0133, {1, {0x0132}}},
-  {0x0135, {1, {0x0134}}},
-  {0x0137, {1, {0x0136}}},
-  {0x013a, {1, {0x0139}}},
-  {0x013c, {1, {0x013b}}},
-  {0x013e, {1, {0x013d}}},
-  {0x0140, {1, {0x013f}}},
-  {0x0142, {1, {0x0141}}},
-  {0x0144, {1, {0x0143}}},
-  {0x0146, {1, {0x0145}}},
-  {0x0148, {1, {0x0147}}},
-  {0x014b, {1, {0x014a}}},
-  {0x014d, {1, {0x014c}}},
-  {0x014f, {1, {0x014e}}},
-  {0x0151, {1, {0x0150}}},
-  {0x0153, {1, {0x0152}}},
-  {0x0155, {1, {0x0154}}},
-  {0x0157, {1, {0x0156}}},
-  {0x0159, {1, {0x0158}}},
-  {0x015b, {1, {0x015a}}},
-  {0x015d, {1, {0x015c}}},
-  {0x015f, {1, {0x015e}}},
-  {0x0161, {1, {0x0160}}},
-  {0x0163, {1, {0x0162}}},
-  {0x0165, {1, {0x0164}}},
-  {0x0167, {1, {0x0166}}},
-  {0x0169, {1, {0x0168}}},
-  {0x016b, {1, {0x016a}}},
-  {0x016d, {1, {0x016c}}},
-  {0x016f, {1, {0x016e}}},
-  {0x0171, {1, {0x0170}}},
-  {0x0173, {1, {0x0172}}},
-  {0x0175, {1, {0x0174}}},
-  {0x0177, {1, {0x0176}}},
-  {0x017a, {1, {0x0179}}},
-  {0x017c, {1, {0x017b}}},
-  {0x017e, {1, {0x017d}}},
-  {0x0180, {1, {0x0243}}},
-  {0x0183, {1, {0x0182}}},
-  {0x0185, {1, {0x0184}}},
-  {0x0188, {1, {0x0187}}},
-  {0x018c, {1, {0x018b}}},
-  {0x0192, {1, {0x0191}}},
-  {0x0195, {1, {0x01f6}}},
-  {0x0199, {1, {0x0198}}},
-  {0x019a, {1, {0x023d}}},
-  {0x019e, {1, {0x0220}}},
-  {0x01a1, {1, {0x01a0}}},
-  {0x01a3, {1, {0x01a2}}},
-  {0x01a5, {1, {0x01a4}}},
-  {0x01a8, {1, {0x01a7}}},
-  {0x01ad, {1, {0x01ac}}},
-  {0x01b0, {1, {0x01af}}},
-  {0x01b4, {1, {0x01b3}}},
-  {0x01b6, {1, {0x01b5}}},
-  {0x01b9, {1, {0x01b8}}},
-  {0x01bd, {1, {0x01bc}}},
-  {0x01bf, {1, {0x01f7}}},
-  {0x01c6, {2, {0x01c4, 0x01c5}}},
-  {0x01c9, {2, {0x01c7, 0x01c8}}},
-  {0x01cc, {2, {0x01ca, 0x01cb}}},
-  {0x01ce, {1, {0x01cd}}},
-  {0x01d0, {1, {0x01cf}}},
-  {0x01d2, {1, {0x01d1}}},
-  {0x01d4, {1, {0x01d3}}},
-  {0x01d6, {1, {0x01d5}}},
-  {0x01d8, {1, {0x01d7}}},
-  {0x01da, {1, {0x01d9}}},
-  {0x01dc, {1, {0x01db}}},
-  {0x01dd, {1, {0x018e}}},
-  {0x01df, {1, {0x01de}}},
-  {0x01e1, {1, {0x01e0}}},
-  {0x01e3, {1, {0x01e2}}},
-  {0x01e5, {1, {0x01e4}}},
-  {0x01e7, {1, {0x01e6}}},
-  {0x01e9, {1, {0x01e8}}},
-  {0x01eb, {1, {0x01ea}}},
-  {0x01ed, {1, {0x01ec}}},
-  {0x01ef, {1, {0x01ee}}},
-  {0x01f3, {2, {0x01f1, 0x01f2}}},
-  {0x01f5, {1, {0x01f4}}},
-  {0x01f9, {1, {0x01f8}}},
-  {0x01fb, {1, {0x01fa}}},
-  {0x01fd, {1, {0x01fc}}},
-  {0x01ff, {1, {0x01fe}}},
-  {0x0201, {1, {0x0200}}},
-  {0x0203, {1, {0x0202}}},
-  {0x0205, {1, {0x0204}}},
-  {0x0207, {1, {0x0206}}},
-  {0x0209, {1, {0x0208}}},
-  {0x020b, {1, {0x020a}}},
-  {0x020d, {1, {0x020c}}},
-  {0x020f, {1, {0x020e}}},
-  {0x0211, {1, {0x0210}}},
-  {0x0213, {1, {0x0212}}},
-  {0x0215, {1, {0x0214}}},
-  {0x0217, {1, {0x0216}}},
-  {0x0219, {1, {0x0218}}},
-  {0x021b, {1, {0x021a}}},
-  {0x021d, {1, {0x021c}}},
-  {0x021f, {1, {0x021e}}},
-  {0x0223, {1, {0x0222}}},
-  {0x0225, {1, {0x0224}}},
-  {0x0227, {1, {0x0226}}},
-  {0x0229, {1, {0x0228}}},
-  {0x022b, {1, {0x022a}}},
-  {0x022d, {1, {0x022c}}},
-  {0x022f, {1, {0x022e}}},
-  {0x0231, {1, {0x0230}}},
-  {0x0233, {1, {0x0232}}},
-  {0x023c, {1, {0x023b}}},
-  {0x023f, {1, {0x2c7e}}},
-  {0x0240, {1, {0x2c7f}}},
-  {0x0242, {1, {0x0241}}},
-  {0x0247, {1, {0x0246}}},
-  {0x0249, {1, {0x0248}}},
-  {0x024b, {1, {0x024a}}},
-  {0x024d, {1, {0x024c}}},
-  {0x024f, {1, {0x024e}}},
-  {0x0250, {1, {0x2c6f}}},
-  {0x0251, {1, {0x2c6d}}},
-  {0x0252, {1, {0x2c70}}},
-  {0x0253, {1, {0x0181}}},
-  {0x0254, {1, {0x0186}}},
-  {0x0256, {1, {0x0189}}},
-  {0x0257, {1, {0x018a}}},
-  {0x0259, {1, {0x018f}}},
-  {0x025b, {1, {0x0190}}},
-  {0x025c, {1, {0xa7ab}}},
-  {0x0260, {1, {0x0193}}},
-  {0x0261, {1, {0xa7ac}}},
-  {0x0263, {1, {0x0194}}},
-  {0x0265, {1, {0xa78d}}},
-  {0x0266, {1, {0xa7aa}}},
-  {0x0268, {1, {0x0197}}},
-  {0x0269, {1, {0x0196}}},
-  {0x026b, {1, {0x2c62}}},
-  {0x026c, {1, {0xa7ad}}},
-  {0x026f, {1, {0x019c}}},
-  {0x0271, {1, {0x2c6e}}},
-  {0x0272, {1, {0x019d}}},
-  {0x0275, {1, {0x019f}}},
-  {0x027d, {1, {0x2c64}}},
-  {0x0280, {1, {0x01a6}}},
-  {0x0283, {1, {0x01a9}}},
-  {0x0287, {1, {0xa7b1}}},
-  {0x0288, {1, {0x01ae}}},
-  {0x0289, {1, {0x0244}}},
-  {0x028a, {1, {0x01b1}}},
-  {0x028b, {1, {0x01b2}}},
-  {0x028c, {1, {0x0245}}},
-  {0x0292, {1, {0x01b7}}},
-  {0x029e, {1, {0xa7b0}}},
-  {0x0371, {1, {0x0370}}},
-  {0x0373, {1, {0x0372}}},
-  {0x0377, {1, {0x0376}}},
-  {0x037b, {1, {0x03fd}}},
-  {0x037c, {1, {0x03fe}}},
-  {0x037d, {1, {0x03ff}}},
-  {0x03ac, {1, {0x0386}}},
-  {0x03ad, {1, {0x0388}}},
-  {0x03ae, {1, {0x0389}}},
-  {0x03af, {1, {0x038a}}},
-  {0x03b1, {1, {0x0391}}},
-  {0x03b2, {2, {0x0392, 0x03d0}}},
-  {0x03b3, {1, {0x0393}}},
-  {0x03b4, {1, {0x0394}}},
-  {0x03b5, {2, {0x0395, 0x03f5}}},
-  {0x03b6, {1, {0x0396}}},
-  {0x03b7, {1, {0x0397}}},
-  {0x03b8, {3, {0x0398, 0x03d1, 0x03f4}}},
-  {0x03b9, {3, {0x0345, 0x0399, 0x1fbe}}},
-  {0x03ba, {2, {0x039a, 0x03f0}}},
-  {0x03bb, {1, {0x039b}}},
-  {0x03bc, {2, {0x00b5, 0x039c}}},
-  {0x03bd, {1, {0x039d}}},
-  {0x03be, {1, {0x039e}}},
-  {0x03bf, {1, {0x039f}}},
-  {0x03c0, {2, {0x03a0, 0x03d6}}},
-  {0x03c1, {2, {0x03a1, 0x03f1}}},
-  {0x03c3, {2, {0x03a3, 0x03c2}}},
-  {0x03c4, {1, {0x03a4}}},
-  {0x03c5, {1, {0x03a5}}},
-  {0x03c6, {2, {0x03a6, 0x03d5}}},
-  {0x03c7, {1, {0x03a7}}},
-  {0x03c8, {1, {0x03a8}}},
-  {0x03c9, {2, {0x03a9, 0x2126}}},
-  {0x03ca, {1, {0x03aa}}},
-  {0x03cb, {1, {0x03ab}}},
-  {0x03cc, {1, {0x038c}}},
-  {0x03cd, {1, {0x038e}}},
-  {0x03ce, {1, {0x038f}}},
-  {0x03d7, {1, {0x03cf}}},
-  {0x03d9, {1, {0x03d8}}},
-  {0x03db, {1, {0x03da}}},
-  {0x03dd, {1, {0x03dc}}},
-  {0x03df, {1, {0x03de}}},
-  {0x03e1, {1, {0x03e0}}},
-  {0x03e3, {1, {0x03e2}}},
-  {0x03e5, {1, {0x03e4}}},
-  {0x03e7, {1, {0x03e6}}},
-  {0x03e9, {1, {0x03e8}}},
-  {0x03eb, {1, {0x03ea}}},
-  {0x03ed, {1, {0x03ec}}},
-  {0x03ef, {1, {0x03ee}}},
-  {0x03f2, {1, {0x03f9}}},
-  {0x03f3, {1, {0x037f}}},
-  {0x03f8, {1, {0x03f7}}},
-  {0x03fb, {1, {0x03fa}}},
-  {0x0430, {1, {0x0410}}},
-  {0x0431, {1, {0x0411}}},
-  {0x0432, {1, {0x0412}}},
-  {0x0433, {1, {0x0413}}},
-  {0x0434, {1, {0x0414}}},
-  {0x0435, {1, {0x0415}}},
-  {0x0436, {1, {0x0416}}},
-  {0x0437, {1, {0x0417}}},
-  {0x0438, {1, {0x0418}}},
-  {0x0439, {1, {0x0419}}},
-  {0x043a, {1, {0x041a}}},
-  {0x043b, {1, {0x041b}}},
-  {0x043c, {1, {0x041c}}},
-  {0x043d, {1, {0x041d}}},
-  {0x043e, {1, {0x041e}}},
-  {0x043f, {1, {0x041f}}},
-  {0x0440, {1, {0x0420}}},
-  {0x0441, {1, {0x0421}}},
-  {0x0442, {1, {0x0422}}},
-  {0x0443, {1, {0x0423}}},
-  {0x0444, {1, {0x0424}}},
-  {0x0445, {1, {0x0425}}},
-  {0x0446, {1, {0x0426}}},
-  {0x0447, {1, {0x0427}}},
-  {0x0448, {1, {0x0428}}},
-  {0x0449, {1, {0x0429}}},
-  {0x044a, {1, {0x042a}}},
-  {0x044b, {1, {0x042b}}},
-  {0x044c, {1, {0x042c}}},
-  {0x044d, {1, {0x042d}}},
-  {0x044e, {1, {0x042e}}},
-  {0x044f, {1, {0x042f}}},
-  {0x0450, {1, {0x0400}}},
-  {0x0451, {1, {0x0401}}},
-  {0x0452, {1, {0x0402}}},
-  {0x0453, {1, {0x0403}}},
-  {0x0454, {1, {0x0404}}},
-  {0x0455, {1, {0x0405}}},
-  {0x0456, {1, {0x0406}}},
-  {0x0457, {1, {0x0407}}},
-  {0x0458, {1, {0x0408}}},
-  {0x0459, {1, {0x0409}}},
-  {0x045a, {1, {0x040a}}},
-  {0x045b, {1, {0x040b}}},
-  {0x045c, {1, {0x040c}}},
-  {0x045d, {1, {0x040d}}},
-  {0x045e, {1, {0x040e}}},
-  {0x045f, {1, {0x040f}}},
-  {0x0461, {1, {0x0460}}},
-  {0x0463, {1, {0x0462}}},
-  {0x0465, {1, {0x0464}}},
-  {0x0467, {1, {0x0466}}},
-  {0x0469, {1, {0x0468}}},
-  {0x046b, {1, {0x046a}}},
-  {0x046d, {1, {0x046c}}},
-  {0x046f, {1, {0x046e}}},
-  {0x0471, {1, {0x0470}}},
-  {0x0473, {1, {0x0472}}},
-  {0x0475, {1, {0x0474}}},
-  {0x0477, {1, {0x0476}}},
-  {0x0479, {1, {0x0478}}},
-  {0x047b, {1, {0x047a}}},
-  {0x047d, {1, {0x047c}}},
-  {0x047f, {1, {0x047e}}},
-  {0x0481, {1, {0x0480}}},
-  {0x048b, {1, {0x048a}}},
-  {0x048d, {1, {0x048c}}},
-  {0x048f, {1, {0x048e}}},
-  {0x0491, {1, {0x0490}}},
-  {0x0493, {1, {0x0492}}},
-  {0x0495, {1, {0x0494}}},
-  {0x0497, {1, {0x0496}}},
-  {0x0499, {1, {0x0498}}},
-  {0x049b, {1, {0x049a}}},
-  {0x049d, {1, {0x049c}}},
-  {0x049f, {1, {0x049e}}},
-  {0x04a1, {1, {0x04a0}}},
-  {0x04a3, {1, {0x04a2}}},
-  {0x04a5, {1, {0x04a4}}},
-  {0x04a7, {1, {0x04a6}}},
-  {0x04a9, {1, {0x04a8}}},
-  {0x04ab, {1, {0x04aa}}},
-  {0x04ad, {1, {0x04ac}}},
-  {0x04af, {1, {0x04ae}}},
-  {0x04b1, {1, {0x04b0}}},
-  {0x04b3, {1, {0x04b2}}},
-  {0x04b5, {1, {0x04b4}}},
-  {0x04b7, {1, {0x04b6}}},
-  {0x04b9, {1, {0x04b8}}},
-  {0x04bb, {1, {0x04ba}}},
-  {0x04bd, {1, {0x04bc}}},
-  {0x04bf, {1, {0x04be}}},
-  {0x04c2, {1, {0x04c1}}},
-  {0x04c4, {1, {0x04c3}}},
-  {0x04c6, {1, {0x04c5}}},
-  {0x04c8, {1, {0x04c7}}},
-  {0x04ca, {1, {0x04c9}}},
-  {0x04cc, {1, {0x04cb}}},
-  {0x04ce, {1, {0x04cd}}},
-  {0x04cf, {1, {0x04c0}}},
-  {0x04d1, {1, {0x04d0}}},
-  {0x04d3, {1, {0x04d2}}},
-  {0x04d5, {1, {0x04d4}}},
-  {0x04d7, {1, {0x04d6}}},
-  {0x04d9, {1, {0x04d8}}},
-  {0x04db, {1, {0x04da}}},
-  {0x04dd, {1, {0x04dc}}},
-  {0x04df, {1, {0x04de}}},
-  {0x04e1, {1, {0x04e0}}},
-  {0x04e3, {1, {0x04e2}}},
-  {0x04e5, {1, {0x04e4}}},
-  {0x04e7, {1, {0x04e6}}},
-  {0x04e9, {1, {0x04e8}}},
-  {0x04eb, {1, {0x04ea}}},
-  {0x04ed, {1, {0x04ec}}},
-  {0x04ef, {1, {0x04ee}}},
-  {0x04f1, {1, {0x04f0}}},
-  {0x04f3, {1, {0x04f2}}},
-  {0x04f5, {1, {0x04f4}}},
-  {0x04f7, {1, {0x04f6}}},
-  {0x04f9, {1, {0x04f8}}},
-  {0x04fb, {1, {0x04fa}}},
-  {0x04fd, {1, {0x04fc}}},
-  {0x04ff, {1, {0x04fe}}},
-  {0x0501, {1, {0x0500}}},
-  {0x0503, {1, {0x0502}}},
-  {0x0505, {1, {0x0504}}},
-  {0x0507, {1, {0x0506}}},
-  {0x0509, {1, {0x0508}}},
-  {0x050b, {1, {0x050a}}},
-  {0x050d, {1, {0x050c}}},
-  {0x050f, {1, {0x050e}}},
-  {0x0511, {1, {0x0510}}},
-  {0x0513, {1, {0x0512}}},
-  {0x0515, {1, {0x0514}}},
-  {0x0517, {1, {0x0516}}},
-  {0x0519, {1, {0x0518}}},
-  {0x051b, {1, {0x051a}}},
-  {0x051d, {1, {0x051c}}},
-  {0x051f, {1, {0x051e}}},
-  {0x0521, {1, {0x0520}}},
-  {0x0523, {1, {0x0522}}},
-  {0x0525, {1, {0x0524}}},
-  {0x0527, {1, {0x0526}}},
-  {0x0529, {1, {0x0528}}},
-  {0x052b, {1, {0x052a}}},
-  {0x052d, {1, {0x052c}}},
-  {0x052f, {1, {0x052e}}},
-  {0x0561, {1, {0x0531}}},
-  {0x0562, {1, {0x0532}}},
-  {0x0563, {1, {0x0533}}},
-  {0x0564, {1, {0x0534}}},
-  {0x0565, {1, {0x0535}}},
-  {0x0566, {1, {0x0536}}},
-  {0x0567, {1, {0x0537}}},
-  {0x0568, {1, {0x0538}}},
-  {0x0569, {1, {0x0539}}},
-  {0x056a, {1, {0x053a}}},
-  {0x056b, {1, {0x053b}}},
-  {0x056c, {1, {0x053c}}},
-  {0x056d, {1, {0x053d}}},
-  {0x056e, {1, {0x053e}}},
-  {0x056f, {1, {0x053f}}},
-  {0x0570, {1, {0x0540}}},
-  {0x0571, {1, {0x0541}}},
-  {0x0572, {1, {0x0542}}},
-  {0x0573, {1, {0x0543}}},
-  {0x0574, {1, {0x0544}}},
-  {0x0575, {1, {0x0545}}},
-  {0x0576, {1, {0x0546}}},
-  {0x0577, {1, {0x0547}}},
-  {0x0578, {1, {0x0548}}},
-  {0x0579, {1, {0x0549}}},
-  {0x057a, {1, {0x054a}}},
-  {0x057b, {1, {0x054b}}},
-  {0x057c, {1, {0x054c}}},
-  {0x057d, {1, {0x054d}}},
-  {0x057e, {1, {0x054e}}},
-  {0x057f, {1, {0x054f}}},
-  {0x0580, {1, {0x0550}}},
-  {0x0581, {1, {0x0551}}},
-  {0x0582, {1, {0x0552}}},
-  {0x0583, {1, {0x0553}}},
-  {0x0584, {1, {0x0554}}},
-  {0x0585, {1, {0x0555}}},
-  {0x0586, {1, {0x0556}}},
-  {0x1d79, {1, {0xa77d}}},
-  {0x1d7d, {1, {0x2c63}}},
-  {0x1e01, {1, {0x1e00}}},
-  {0x1e03, {1, {0x1e02}}},
-  {0x1e05, {1, {0x1e04}}},
-  {0x1e07, {1, {0x1e06}}},
-  {0x1e09, {1, {0x1e08}}},
-  {0x1e0b, {1, {0x1e0a}}},
-  {0x1e0d, {1, {0x1e0c}}},
-  {0x1e0f, {1, {0x1e0e}}},
-  {0x1e11, {1, {0x1e10}}},
-  {0x1e13, {1, {0x1e12}}},
-  {0x1e15, {1, {0x1e14}}},
-  {0x1e17, {1, {0x1e16}}},
-  {0x1e19, {1, {0x1e18}}},
-  {0x1e1b, {1, {0x1e1a}}},
-  {0x1e1d, {1, {0x1e1c}}},
-  {0x1e1f, {1, {0x1e1e}}},
-  {0x1e21, {1, {0x1e20}}},
-  {0x1e23, {1, {0x1e22}}},
-  {0x1e25, {1, {0x1e24}}},
-  {0x1e27, {1, {0x1e26}}},
-  {0x1e29, {1, {0x1e28}}},
-  {0x1e2b, {1, {0x1e2a}}},
-  {0x1e2d, {1, {0x1e2c}}},
-  {0x1e2f, {1, {0x1e2e}}},
-  {0x1e31, {1, {0x1e30}}},
-  {0x1e33, {1, {0x1e32}}},
-  {0x1e35, {1, {0x1e34}}},
-  {0x1e37, {1, {0x1e36}}},
-  {0x1e39, {1, {0x1e38}}},
-  {0x1e3b, {1, {0x1e3a}}},
-  {0x1e3d, {1, {0x1e3c}}},
-  {0x1e3f, {1, {0x1e3e}}},
-  {0x1e41, {1, {0x1e40}}},
-  {0x1e43, {1, {0x1e42}}},
-  {0x1e45, {1, {0x1e44}}},
-  {0x1e47, {1, {0x1e46}}},
-  {0x1e49, {1, {0x1e48}}},
-  {0x1e4b, {1, {0x1e4a}}},
-  {0x1e4d, {1, {0x1e4c}}},
-  {0x1e4f, {1, {0x1e4e}}},
-  {0x1e51, {1, {0x1e50}}},
-  {0x1e53, {1, {0x1e52}}},
-  {0x1e55, {1, {0x1e54}}},
-  {0x1e57, {1, {0x1e56}}},
-  {0x1e59, {1, {0x1e58}}},
-  {0x1e5b, {1, {0x1e5a}}},
-  {0x1e5d, {1, {0x1e5c}}},
-  {0x1e5f, {1, {0x1e5e}}},
-  {0x1e61, {2, {0x1e60, 0x1e9b}}},
-  {0x1e63, {1, {0x1e62}}},
-  {0x1e65, {1, {0x1e64}}},
-  {0x1e67, {1, {0x1e66}}},
-  {0x1e69, {1, {0x1e68}}},
-  {0x1e6b, {1, {0x1e6a}}},
-  {0x1e6d, {1, {0x1e6c}}},
-  {0x1e6f, {1, {0x1e6e}}},
-  {0x1e71, {1, {0x1e70}}},
-  {0x1e73, {1, {0x1e72}}},
-  {0x1e75, {1, {0x1e74}}},
-  {0x1e77, {1, {0x1e76}}},
-  {0x1e79, {1, {0x1e78}}},
-  {0x1e7b, {1, {0x1e7a}}},
-  {0x1e7d, {1, {0x1e7c}}},
-  {0x1e7f, {1, {0x1e7e}}},
-  {0x1e81, {1, {0x1e80}}},
-  {0x1e83, {1, {0x1e82}}},
-  {0x1e85, {1, {0x1e84}}},
-  {0x1e87, {1, {0x1e86}}},
-  {0x1e89, {1, {0x1e88}}},
-  {0x1e8b, {1, {0x1e8a}}},
-  {0x1e8d, {1, {0x1e8c}}},
-  {0x1e8f, {1, {0x1e8e}}},
-  {0x1e91, {1, {0x1e90}}},
-  {0x1e93, {1, {0x1e92}}},
-  {0x1e95, {1, {0x1e94}}},
-  {0x1ea1, {1, {0x1ea0}}},
-  {0x1ea3, {1, {0x1ea2}}},
-  {0x1ea5, {1, {0x1ea4}}},
-  {0x1ea7, {1, {0x1ea6}}},
-  {0x1ea9, {1, {0x1ea8}}},
-  {0x1eab, {1, {0x1eaa}}},
-  {0x1ead, {1, {0x1eac}}},
-  {0x1eaf, {1, {0x1eae}}},
-  {0x1eb1, {1, {0x1eb0}}},
-  {0x1eb3, {1, {0x1eb2}}},
-  {0x1eb5, {1, {0x1eb4}}},
-  {0x1eb7, {1, {0x1eb6}}},
-  {0x1eb9, {1, {0x1eb8}}},
-  {0x1ebb, {1, {0x1eba}}},
-  {0x1ebd, {1, {0x1ebc}}},
-  {0x1ebf, {1, {0x1ebe}}},
-  {0x1ec1, {1, {0x1ec0}}},
-  {0x1ec3, {1, {0x1ec2}}},
-  {0x1ec5, {1, {0x1ec4}}},
-  {0x1ec7, {1, {0x1ec6}}},
-  {0x1ec9, {1, {0x1ec8}}},
-  {0x1ecb, {1, {0x1eca}}},
-  {0x1ecd, {1, {0x1ecc}}},
-  {0x1ecf, {1, {0x1ece}}},
-  {0x1ed1, {1, {0x1ed0}}},
-  {0x1ed3, {1, {0x1ed2}}},
-  {0x1ed5, {1, {0x1ed4}}},
-  {0x1ed7, {1, {0x1ed6}}},
-  {0x1ed9, {1, {0x1ed8}}},
-  {0x1edb, {1, {0x1eda}}},
-  {0x1edd, {1, {0x1edc}}},
-  {0x1edf, {1, {0x1ede}}},
-  {0x1ee1, {1, {0x1ee0}}},
-  {0x1ee3, {1, {0x1ee2}}},
-  {0x1ee5, {1, {0x1ee4}}},
-  {0x1ee7, {1, {0x1ee6}}},
-  {0x1ee9, {1, {0x1ee8}}},
-  {0x1eeb, {1, {0x1eea}}},
-  {0x1eed, {1, {0x1eec}}},
-  {0x1eef, {1, {0x1eee}}},
-  {0x1ef1, {1, {0x1ef0}}},
-  {0x1ef3, {1, {0x1ef2}}},
-  {0x1ef5, {1, {0x1ef4}}},
-  {0x1ef7, {1, {0x1ef6}}},
-  {0x1ef9, {1, {0x1ef8}}},
-  {0x1efb, {1, {0x1efa}}},
-  {0x1efd, {1, {0x1efc}}},
-  {0x1eff, {1, {0x1efe}}},
-  {0x1f00, {1, {0x1f08}}},
-  {0x1f01, {1, {0x1f09}}},
-  {0x1f02, {1, {0x1f0a}}},
-  {0x1f03, {1, {0x1f0b}}},
-  {0x1f04, {1, {0x1f0c}}},
-  {0x1f05, {1, {0x1f0d}}},
-  {0x1f06, {1, {0x1f0e}}},
-  {0x1f07, {1, {0x1f0f}}},
-  {0x1f10, {1, {0x1f18}}},
-  {0x1f11, {1, {0x1f19}}},
-  {0x1f12, {1, {0x1f1a}}},
-  {0x1f13, {1, {0x1f1b}}},
-  {0x1f14, {1, {0x1f1c}}},
-  {0x1f15, {1, {0x1f1d}}},
-  {0x1f20, {1, {0x1f28}}},
-  {0x1f21, {1, {0x1f29}}},
-  {0x1f22, {1, {0x1f2a}}},
-  {0x1f23, {1, {0x1f2b}}},
-  {0x1f24, {1, {0x1f2c}}},
-  {0x1f25, {1, {0x1f2d}}},
-  {0x1f26, {1, {0x1f2e}}},
-  {0x1f27, {1, {0x1f2f}}},
-  {0x1f30, {1, {0x1f38}}},
-  {0x1f31, {1, {0x1f39}}},
-  {0x1f32, {1, {0x1f3a}}},
-  {0x1f33, {1, {0x1f3b}}},
-  {0x1f34, {1, {0x1f3c}}},
-  {0x1f35, {1, {0x1f3d}}},
-  {0x1f36, {1, {0x1f3e}}},
-  {0x1f37, {1, {0x1f3f}}},
-  {0x1f40, {1, {0x1f48}}},
-  {0x1f41, {1, {0x1f49}}},
-  {0x1f42, {1, {0x1f4a}}},
-  {0x1f43, {1, {0x1f4b}}},
-  {0x1f44, {1, {0x1f4c}}},
-  {0x1f45, {1, {0x1f4d}}},
-  {0x1f51, {1, {0x1f59}}},
-  {0x1f53, {1, {0x1f5b}}},
-  {0x1f55, {1, {0x1f5d}}},
-  {0x1f57, {1, {0x1f5f}}},
-  {0x1f60, {1, {0x1f68}}},
-  {0x1f61, {1, {0x1f69}}},
-  {0x1f62, {1, {0x1f6a}}},
-  {0x1f63, {1, {0x1f6b}}},
-  {0x1f64, {1, {0x1f6c}}},
-  {0x1f65, {1, {0x1f6d}}},
-  {0x1f66, {1, {0x1f6e}}},
-  {0x1f67, {1, {0x1f6f}}},
-  {0x1f70, {1, {0x1fba}}},
-  {0x1f71, {1, {0x1fbb}}},
-  {0x1f72, {1, {0x1fc8}}},
-  {0x1f73, {1, {0x1fc9}}},
-  {0x1f74, {1, {0x1fca}}},
-  {0x1f75, {1, {0x1fcb}}},
-  {0x1f76, {1, {0x1fda}}},
-  {0x1f77, {1, {0x1fdb}}},
-  {0x1f78, {1, {0x1ff8}}},
-  {0x1f79, {1, {0x1ff9}}},
-  {0x1f7a, {1, {0x1fea}}},
-  {0x1f7b, {1, {0x1feb}}},
-  {0x1f7c, {1, {0x1ffa}}},
-  {0x1f7d, {1, {0x1ffb}}},
-  {0x1fb0, {1, {0x1fb8}}},
-  {0x1fb1, {1, {0x1fb9}}},
-  {0x1fd0, {1, {0x1fd8}}},
-  {0x1fd1, {1, {0x1fd9}}},
-  {0x1fe0, {1, {0x1fe8}}},
-  {0x1fe1, {1, {0x1fe9}}},
-  {0x1fe5, {1, {0x1fec}}},
-  {0x214e, {1, {0x2132}}},
-  {0x2170, {1, {0x2160}}},
-  {0x2171, {1, {0x2161}}},
-  {0x2172, {1, {0x2162}}},
-  {0x2173, {1, {0x2163}}},
-  {0x2174, {1, {0x2164}}},
-  {0x2175, {1, {0x2165}}},
-  {0x2176, {1, {0x2166}}},
-  {0x2177, {1, {0x2167}}},
-  {0x2178, {1, {0x2168}}},
-  {0x2179, {1, {0x2169}}},
-  {0x217a, {1, {0x216a}}},
-  {0x217b, {1, {0x216b}}},
-  {0x217c, {1, {0x216c}}},
-  {0x217d, {1, {0x216d}}},
-  {0x217e, {1, {0x216e}}},
-  {0x217f, {1, {0x216f}}},
-  {0x2184, {1, {0x2183}}},
-  {0x24d0, {1, {0x24b6}}},
-  {0x24d1, {1, {0x24b7}}},
-  {0x24d2, {1, {0x24b8}}},
-  {0x24d3, {1, {0x24b9}}},
-  {0x24d4, {1, {0x24ba}}},
-  {0x24d5, {1, {0x24bb}}},
-  {0x24d6, {1, {0x24bc}}},
-  {0x24d7, {1, {0x24bd}}},
-  {0x24d8, {1, {0x24be}}},
-  {0x24d9, {1, {0x24bf}}},
-  {0x24da, {1, {0x24c0}}},
-  {0x24db, {1, {0x24c1}}},
-  {0x24dc, {1, {0x24c2}}},
-  {0x24dd, {1, {0x24c3}}},
-  {0x24de, {1, {0x24c4}}},
-  {0x24df, {1, {0x24c5}}},
-  {0x24e0, {1, {0x24c6}}},
-  {0x24e1, {1, {0x24c7}}},
-  {0x24e2, {1, {0x24c8}}},
-  {0x24e3, {1, {0x24c9}}},
-  {0x24e4, {1, {0x24ca}}},
-  {0x24e5, {1, {0x24cb}}},
-  {0x24e6, {1, {0x24cc}}},
-  {0x24e7, {1, {0x24cd}}},
-  {0x24e8, {1, {0x24ce}}},
-  {0x24e9, {1, {0x24cf}}},
-  {0x2c30, {1, {0x2c00}}},
-  {0x2c31, {1, {0x2c01}}},
-  {0x2c32, {1, {0x2c02}}},
-  {0x2c33, {1, {0x2c03}}},
-  {0x2c34, {1, {0x2c04}}},
-  {0x2c35, {1, {0x2c05}}},
-  {0x2c36, {1, {0x2c06}}},
-  {0x2c37, {1, {0x2c07}}},
-  {0x2c38, {1, {0x2c08}}},
-  {0x2c39, {1, {0x2c09}}},
-  {0x2c3a, {1, {0x2c0a}}},
-  {0x2c3b, {1, {0x2c0b}}},
-  {0x2c3c, {1, {0x2c0c}}},
-  {0x2c3d, {1, {0x2c0d}}},
-  {0x2c3e, {1, {0x2c0e}}},
-  {0x2c3f, {1, {0x2c0f}}},
-  {0x2c40, {1, {0x2c10}}},
-  {0x2c41, {1, {0x2c11}}},
-  {0x2c42, {1, {0x2c12}}},
-  {0x2c43, {1, {0x2c13}}},
-  {0x2c44, {1, {0x2c14}}},
-  {0x2c45, {1, {0x2c15}}},
-  {0x2c46, {1, {0x2c16}}},
-  {0x2c47, {1, {0x2c17}}},
-  {0x2c48, {1, {0x2c18}}},
-  {0x2c49, {1, {0x2c19}}},
-  {0x2c4a, {1, {0x2c1a}}},
-  {0x2c4b, {1, {0x2c1b}}},
-  {0x2c4c, {1, {0x2c1c}}},
-  {0x2c4d, {1, {0x2c1d}}},
-  {0x2c4e, {1, {0x2c1e}}},
-  {0x2c4f, {1, {0x2c1f}}},
-  {0x2c50, {1, {0x2c20}}},
-  {0x2c51, {1, {0x2c21}}},
-  {0x2c52, {1, {0x2c22}}},
-  {0x2c53, {1, {0x2c23}}},
-  {0x2c54, {1, {0x2c24}}},
-  {0x2c55, {1, {0x2c25}}},
-  {0x2c56, {1, {0x2c26}}},
-  {0x2c57, {1, {0x2c27}}},
-  {0x2c58, {1, {0x2c28}}},
-  {0x2c59, {1, {0x2c29}}},
-  {0x2c5a, {1, {0x2c2a}}},
-  {0x2c5b, {1, {0x2c2b}}},
-  {0x2c5c, {1, {0x2c2c}}},
-  {0x2c5d, {1, {0x2c2d}}},
-  {0x2c5e, {1, {0x2c2e}}},
-  {0x2c61, {1, {0x2c60}}},
-  {0x2c65, {1, {0x023a}}},
-  {0x2c66, {1, {0x023e}}},
-  {0x2c68, {1, {0x2c67}}},
-  {0x2c6a, {1, {0x2c69}}},
-  {0x2c6c, {1, {0x2c6b}}},
-  {0x2c73, {1, {0x2c72}}},
-  {0x2c76, {1, {0x2c75}}},
-  {0x2c81, {1, {0x2c80}}},
-  {0x2c83, {1, {0x2c82}}},
-  {0x2c85, {1, {0x2c84}}},
-  {0x2c87, {1, {0x2c86}}},
-  {0x2c89, {1, {0x2c88}}},
-  {0x2c8b, {1, {0x2c8a}}},
-  {0x2c8d, {1, {0x2c8c}}},
-  {0x2c8f, {1, {0x2c8e}}},
-  {0x2c91, {1, {0x2c90}}},
-  {0x2c93, {1, {0x2c92}}},
-  {0x2c95, {1, {0x2c94}}},
-  {0x2c97, {1, {0x2c96}}},
-  {0x2c99, {1, {0x2c98}}},
-  {0x2c9b, {1, {0x2c9a}}},
-  {0x2c9d, {1, {0x2c9c}}},
-  {0x2c9f, {1, {0x2c9e}}},
-  {0x2ca1, {1, {0x2ca0}}},
-  {0x2ca3, {1, {0x2ca2}}},
-  {0x2ca5, {1, {0x2ca4}}},
-  {0x2ca7, {1, {0x2ca6}}},
-  {0x2ca9, {1, {0x2ca8}}},
-  {0x2cab, {1, {0x2caa}}},
-  {0x2cad, {1, {0x2cac}}},
-  {0x2caf, {1, {0x2cae}}},
-  {0x2cb1, {1, {0x2cb0}}},
-  {0x2cb3, {1, {0x2cb2}}},
-  {0x2cb5, {1, {0x2cb4}}},
-  {0x2cb7, {1, {0x2cb6}}},
-  {0x2cb9, {1, {0x2cb8}}},
-  {0x2cbb, {1, {0x2cba}}},
-  {0x2cbd, {1, {0x2cbc}}},
-  {0x2cbf, {1, {0x2cbe}}},
-  {0x2cc1, {1, {0x2cc0}}},
-  {0x2cc3, {1, {0x2cc2}}},
-  {0x2cc5, {1, {0x2cc4}}},
-  {0x2cc7, {1, {0x2cc6}}},
-  {0x2cc9, {1, {0x2cc8}}},
-  {0x2ccb, {1, {0x2cca}}},
-  {0x2ccd, {1, {0x2ccc}}},
-  {0x2ccf, {1, {0x2cce}}},
-  {0x2cd1, {1, {0x2cd0}}},
-  {0x2cd3, {1, {0x2cd2}}},
-  {0x2cd5, {1, {0x2cd4}}},
-  {0x2cd7, {1, {0x2cd6}}},
-  {0x2cd9, {1, {0x2cd8}}},
-  {0x2cdb, {1, {0x2cda}}},
-  {0x2cdd, {1, {0x2cdc}}},
-  {0x2cdf, {1, {0x2cde}}},
-  {0x2ce1, {1, {0x2ce0}}},
-  {0x2ce3, {1, {0x2ce2}}},
-  {0x2cec, {1, {0x2ceb}}},
-  {0x2cee, {1, {0x2ced}}},
-  {0x2cf3, {1, {0x2cf2}}},
-  {0x2d00, {1, {0x10a0}}},
-  {0x2d01, {1, {0x10a1}}},
-  {0x2d02, {1, {0x10a2}}},
-  {0x2d03, {1, {0x10a3}}},
-  {0x2d04, {1, {0x10a4}}},
-  {0x2d05, {1, {0x10a5}}},
-  {0x2d06, {1, {0x10a6}}},
-  {0x2d07, {1, {0x10a7}}},
-  {0x2d08, {1, {0x10a8}}},
-  {0x2d09, {1, {0x10a9}}},
-  {0x2d0a, {1, {0x10aa}}},
-  {0x2d0b, {1, {0x10ab}}},
-  {0x2d0c, {1, {0x10ac}}},
-  {0x2d0d, {1, {0x10ad}}},
-  {0x2d0e, {1, {0x10ae}}},
-  {0x2d0f, {1, {0x10af}}},
-  {0x2d10, {1, {0x10b0}}},
-  {0x2d11, {1, {0x10b1}}},
-  {0x2d12, {1, {0x10b2}}},
-  {0x2d13, {1, {0x10b3}}},
-  {0x2d14, {1, {0x10b4}}},
-  {0x2d15, {1, {0x10b5}}},
-  {0x2d16, {1, {0x10b6}}},
-  {0x2d17, {1, {0x10b7}}},
-  {0x2d18, {1, {0x10b8}}},
-  {0x2d19, {1, {0x10b9}}},
-  {0x2d1a, {1, {0x10ba}}},
-  {0x2d1b, {1, {0x10bb}}},
-  {0x2d1c, {1, {0x10bc}}},
-  {0x2d1d, {1, {0x10bd}}},
-  {0x2d1e, {1, {0x10be}}},
-  {0x2d1f, {1, {0x10bf}}},
-  {0x2d20, {1, {0x10c0}}},
-  {0x2d21, {1, {0x10c1}}},
-  {0x2d22, {1, {0x10c2}}},
-  {0x2d23, {1, {0x10c3}}},
-  {0x2d24, {1, {0x10c4}}},
-  {0x2d25, {1, {0x10c5}}},
-  {0x2d27, {1, {0x10c7}}},
-  {0x2d2d, {1, {0x10cd}}},
-  {0xa641, {1, {0xa640}}},
-  {0xa643, {1, {0xa642}}},
-  {0xa645, {1, {0xa644}}},
-  {0xa647, {1, {0xa646}}},
-  {0xa649, {1, {0xa648}}},
-  {0xa64b, {1, {0xa64a}}},
-  {0xa64d, {1, {0xa64c}}},
-  {0xa64f, {1, {0xa64e}}},
-  {0xa651, {1, {0xa650}}},
-  {0xa653, {1, {0xa652}}},
-  {0xa655, {1, {0xa654}}},
-  {0xa657, {1, {0xa656}}},
-  {0xa659, {1, {0xa658}}},
-  {0xa65b, {1, {0xa65a}}},
-  {0xa65d, {1, {0xa65c}}},
-  {0xa65f, {1, {0xa65e}}},
-  {0xa661, {1, {0xa660}}},
-  {0xa663, {1, {0xa662}}},
-  {0xa665, {1, {0xa664}}},
-  {0xa667, {1, {0xa666}}},
-  {0xa669, {1, {0xa668}}},
-  {0xa66b, {1, {0xa66a}}},
-  {0xa66d, {1, {0xa66c}}},
-  {0xa681, {1, {0xa680}}},
-  {0xa683, {1, {0xa682}}},
-  {0xa685, {1, {0xa684}}},
-  {0xa687, {1, {0xa686}}},
-  {0xa689, {1, {0xa688}}},
-  {0xa68b, {1, {0xa68a}}},
-  {0xa68d, {1, {0xa68c}}},
-  {0xa68f, {1, {0xa68e}}},
-  {0xa691, {1, {0xa690}}},
-  {0xa693, {1, {0xa692}}},
-  {0xa695, {1, {0xa694}}},
-  {0xa697, {1, {0xa696}}},
-  {0xa699, {1, {0xa698}}},
-  {0xa69b, {1, {0xa69a}}},
-  {0xa723, {1, {0xa722}}},
-  {0xa725, {1, {0xa724}}},
-  {0xa727, {1, {0xa726}}},
-  {0xa729, {1, {0xa728}}},
-  {0xa72b, {1, {0xa72a}}},
-  {0xa72d, {1, {0xa72c}}},
-  {0xa72f, {1, {0xa72e}}},
-  {0xa733, {1, {0xa732}}},
-  {0xa735, {1, {0xa734}}},
-  {0xa737, {1, {0xa736}}},
-  {0xa739, {1, {0xa738}}},
-  {0xa73b, {1, {0xa73a}}},
-  {0xa73d, {1, {0xa73c}}},
-  {0xa73f, {1, {0xa73e}}},
-  {0xa741, {1, {0xa740}}},
-  {0xa743, {1, {0xa742}}},
-  {0xa745, {1, {0xa744}}},
-  {0xa747, {1, {0xa746}}},
-  {0xa749, {1, {0xa748}}},
-  {0xa74b, {1, {0xa74a}}},
-  {0xa74d, {1, {0xa74c}}},
-  {0xa74f, {1, {0xa74e}}},
-  {0xa751, {1, {0xa750}}},
-  {0xa753, {1, {0xa752}}},
-  {0xa755, {1, {0xa754}}},
-  {0xa757, {1, {0xa756}}},
-  {0xa759, {1, {0xa758}}},
-  {0xa75b, {1, {0xa75a}}},
-  {0xa75d, {1, {0xa75c}}},
-  {0xa75f, {1, {0xa75e}}},
-  {0xa761, {1, {0xa760}}},
-  {0xa763, {1, {0xa762}}},
-  {0xa765, {1, {0xa764}}},
-  {0xa767, {1, {0xa766}}},
-  {0xa769, {1, {0xa768}}},
-  {0xa76b, {1, {0xa76a}}},
-  {0xa76d, {1, {0xa76c}}},
-  {0xa76f, {1, {0xa76e}}},
-  {0xa77a, {1, {0xa779}}},
-  {0xa77c, {1, {0xa77b}}},
-  {0xa77f, {1, {0xa77e}}},
-  {0xa781, {1, {0xa780}}},
-  {0xa783, {1, {0xa782}}},
-  {0xa785, {1, {0xa784}}},
-  {0xa787, {1, {0xa786}}},
-  {0xa78c, {1, {0xa78b}}},
-  {0xa791, {1, {0xa790}}},
-  {0xa793, {1, {0xa792}}},
-  {0xa797, {1, {0xa796}}},
-  {0xa799, {1, {0xa798}}},
-  {0xa79b, {1, {0xa79a}}},
-  {0xa79d, {1, {0xa79c}}},
-  {0xa79f, {1, {0xa79e}}},
-  {0xa7a1, {1, {0xa7a0}}},
-  {0xa7a3, {1, {0xa7a2}}},
-  {0xa7a5, {1, {0xa7a4}}},
-  {0xa7a7, {1, {0xa7a6}}},
-  {0xa7a9, {1, {0xa7a8}}},
-  {0xff41, {1, {0xff21}}},
-  {0xff42, {1, {0xff22}}},
-  {0xff43, {1, {0xff23}}},
-  {0xff44, {1, {0xff24}}},
-  {0xff45, {1, {0xff25}}},
-  {0xff46, {1, {0xff26}}},
-  {0xff47, {1, {0xff27}}},
-  {0xff48, {1, {0xff28}}},
-  {0xff49, {1, {0xff29}}},
-  {0xff4a, {1, {0xff2a}}},
-  {0xff4b, {1, {0xff2b}}},
-  {0xff4c, {1, {0xff2c}}},
-  {0xff4d, {1, {0xff2d}}},
-  {0xff4e, {1, {0xff2e}}},
-  {0xff4f, {1, {0xff2f}}},
-  {0xff50, {1, {0xff30}}},
-  {0xff51, {1, {0xff31}}},
-  {0xff52, {1, {0xff32}}},
-  {0xff53, {1, {0xff33}}},
-  {0xff54, {1, {0xff34}}},
-  {0xff55, {1, {0xff35}}},
-  {0xff56, {1, {0xff36}}},
-  {0xff57, {1, {0xff37}}},
-  {0xff58, {1, {0xff38}}},
-  {0xff59, {1, {0xff39}}},
-  {0xff5a, {1, {0xff3a}}},
-  {0x10428, {1, {0x10400}}},
-  {0x10429, {1, {0x10401}}},
-  {0x1042a, {1, {0x10402}}},
-  {0x1042b, {1, {0x10403}}},
-  {0x1042c, {1, {0x10404}}},
-  {0x1042d, {1, {0x10405}}},
-  {0x1042e, {1, {0x10406}}},
-  {0x1042f, {1, {0x10407}}},
-  {0x10430, {1, {0x10408}}},
-  {0x10431, {1, {0x10409}}},
-  {0x10432, {1, {0x1040a}}},
-  {0x10433, {1, {0x1040b}}},
-  {0x10434, {1, {0x1040c}}},
-  {0x10435, {1, {0x1040d}}},
-  {0x10436, {1, {0x1040e}}},
-  {0x10437, {1, {0x1040f}}},
-  {0x10438, {1, {0x10410}}},
-  {0x10439, {1, {0x10411}}},
-  {0x1043a, {1, {0x10412}}},
-  {0x1043b, {1, {0x10413}}},
-  {0x1043c, {1, {0x10414}}},
-  {0x1043d, {1, {0x10415}}},
-  {0x1043e, {1, {0x10416}}},
-  {0x1043f, {1, {0x10417}}},
-  {0x10440, {1, {0x10418}}},
-  {0x10441, {1, {0x10419}}},
-  {0x10442, {1, {0x1041a}}},
-  {0x10443, {1, {0x1041b}}},
-  {0x10444, {1, {0x1041c}}},
-  {0x10445, {1, {0x1041d}}},
-  {0x10446, {1, {0x1041e}}},
-  {0x10447, {1, {0x1041f}}},
-  {0x10448, {1, {0x10420}}},
-  {0x10449, {1, {0x10421}}},
-  {0x1044a, {1, {0x10422}}},
-  {0x1044b, {1, {0x10423}}},
-  {0x1044c, {1, {0x10424}}},
-  {0x1044d, {1, {0x10425}}},
-  {0x1044e, {1, {0x10426}}},
-  {0x1044f, {1, {0x10427}}},
-  {0x118c0, {1, {0x118a0}}},
-  {0x118c1, {1, {0x118a1}}},
-  {0x118c2, {1, {0x118a2}}},
-  {0x118c3, {1, {0x118a3}}},
-  {0x118c4, {1, {0x118a4}}},
-  {0x118c5, {1, {0x118a5}}},
-  {0x118c6, {1, {0x118a6}}},
-  {0x118c7, {1, {0x118a7}}},
-  {0x118c8, {1, {0x118a8}}},
-  {0x118c9, {1, {0x118a9}}},
-  {0x118ca, {1, {0x118aa}}},
-  {0x118cb, {1, {0x118ab}}},
-  {0x118cc, {1, {0x118ac}}},
-  {0x118cd, {1, {0x118ad}}},
-  {0x118ce, {1, {0x118ae}}},
-  {0x118cf, {1, {0x118af}}},
-  {0x118d0, {1, {0x118b0}}},
-  {0x118d1, {1, {0x118b1}}},
-  {0x118d2, {1, {0x118b2}}},
-  {0x118d3, {1, {0x118b3}}},
-  {0x118d4, {1, {0x118b4}}},
-  {0x118d5, {1, {0x118b5}}},
-  {0x118d6, {1, {0x118b6}}},
-  {0x118d7, {1, {0x118b7}}},
-  {0x118d8, {1, {0x118b8}}},
-  {0x118d9, {1, {0x118b9}}},
-  {0x118da, {1, {0x118ba}}},
-  {0x118db, {1, {0x118bb}}},
-  {0x118dc, {1, {0x118bc}}},
-  {0x118dd, {1, {0x118bd}}},
-  {0x118de, {1, {0x118be}}},
-  {0x118df, {1, {0x118bf}}},
-#define CaseUnfold_11_Locale (*(CaseUnfold_11_Type (*)[1])(CaseUnfold_11_Table+1054))
-  {0x0069, {1, {0x0049}}},
+#define CaseUnfold_11 (*(CaseUnfold_11_Type (*)[1266])(CaseUnfold_11_Table+0))
+  {0x0061, {1|U, {0x0041}}},
+  {0x0062, {1|U, {0x0042}}},
+  {0x0063, {1|U, {0x0043}}},
+  {0x0064, {1|U, {0x0044}}},
+  {0x0065, {1|U, {0x0045}}},
+  {0x0066, {1|U, {0x0046}}},
+  {0x0067, {1|U, {0x0047}}},
+  {0x0068, {1|U, {0x0048}}},
+  {0x006a, {1|U, {0x004a}}},
+  {0x006b, {2|U, {0x004b, 0x212a}}},
+  {0x006c, {1|U, {0x004c}}},
+  {0x006d, {1|U, {0x004d}}},
+  {0x006e, {1|U, {0x004e}}},
+  {0x006f, {1|U, {0x004f}}},
+  {0x0070, {1|U, {0x0050}}},
+  {0x0071, {1|U, {0x0051}}},
+  {0x0072, {1|U, {0x0052}}},
+  {0x0073, {2|U, {0x0053, 0x017f}}},
+  {0x0074, {1|U, {0x0054}}},
+  {0x0075, {1|U, {0x0055}}},
+  {0x0076, {1|U, {0x0056}}},
+  {0x0077, {1|U, {0x0057}}},
+  {0x0078, {1|U, {0x0058}}},
+  {0x0079, {1|U, {0x0059}}},
+  {0x007a, {1|U, {0x005a}}},
+  {0x00e0, {1|U, {0x00c0}}},
+  {0x00e1, {1|U, {0x00c1}}},
+  {0x00e2, {1|U, {0x00c2}}},
+  {0x00e3, {1|U, {0x00c3}}},
+  {0x00e4, {1|U, {0x00c4}}},
+  {0x00e5, {2|U, {0x00c5, 0x212b}}},
+  {0x00e6, {1|U, {0x00c6}}},
+  {0x00e7, {1|U, {0x00c7}}},
+  {0x00e8, {1|U, {0x00c8}}},
+  {0x00e9, {1|U, {0x00c9}}},
+  {0x00ea, {1|U, {0x00ca}}},
+  {0x00eb, {1|U, {0x00cb}}},
+  {0x00ec, {1|U, {0x00cc}}},
+  {0x00ed, {1|U, {0x00cd}}},
+  {0x00ee, {1|U, {0x00ce}}},
+  {0x00ef, {1|U, {0x00cf}}},
+  {0x00f0, {1|U, {0x00d0}}},
+  {0x00f1, {1|U, {0x00d1}}},
+  {0x00f2, {1|U, {0x00d2}}},
+  {0x00f3, {1|U, {0x00d3}}},
+  {0x00f4, {1|U, {0x00d4}}},
+  {0x00f5, {1|U, {0x00d5}}},
+  {0x00f6, {1|U, {0x00d6}}},
+  {0x00f8, {1|U, {0x00d8}}},
+  {0x00f9, {1|U, {0x00d9}}},
+  {0x00fa, {1|U, {0x00da}}},
+  {0x00fb, {1|U, {0x00db}}},
+  {0x00fc, {1|U, {0x00dc}}},
+  {0x00fd, {1|U, {0x00dd}}},
+  {0x00fe, {1|U, {0x00de}}},
+  {0x00ff, {1|U, {0x0178}}},
+  {0x0101, {1|U, {0x0100}}},
+  {0x0103, {1|U, {0x0102}}},
+  {0x0105, {1|U, {0x0104}}},
+  {0x0107, {1|U, {0x0106}}},
+  {0x0109, {1|U, {0x0108}}},
+  {0x010b, {1|U, {0x010a}}},
+  {0x010d, {1|U, {0x010c}}},
+  {0x010f, {1|U, {0x010e}}},
+  {0x0111, {1|U, {0x0110}}},
+  {0x0113, {1|U, {0x0112}}},
+  {0x0115, {1|U, {0x0114}}},
+  {0x0117, {1|U, {0x0116}}},
+  {0x0119, {1|U, {0x0118}}},
+  {0x011b, {1|U, {0x011a}}},
+  {0x011d, {1|U, {0x011c}}},
+  {0x011f, {1|U, {0x011e}}},
+  {0x0121, {1|U, {0x0120}}},
+  {0x0123, {1|U, {0x0122}}},
+  {0x0125, {1|U, {0x0124}}},
+  {0x0127, {1|U, {0x0126}}},
+  {0x0129, {1|U, {0x0128}}},
+  {0x012b, {1|U, {0x012a}}},
+  {0x012d, {1|U, {0x012c}}},
+  {0x012f, {1|U, {0x012e}}},
+  {0x0133, {1|U, {0x0132}}},
+  {0x0135, {1|U, {0x0134}}},
+  {0x0137, {1|U, {0x0136}}},
+  {0x013a, {1|U, {0x0139}}},
+  {0x013c, {1|U, {0x013b}}},
+  {0x013e, {1|U, {0x013d}}},
+  {0x0140, {1|U, {0x013f}}},
+  {0x0142, {1|U, {0x0141}}},
+  {0x0144, {1|U, {0x0143}}},
+  {0x0146, {1|U, {0x0145}}},
+  {0x0148, {1|U, {0x0147}}},
+  {0x014b, {1|U, {0x014a}}},
+  {0x014d, {1|U, {0x014c}}},
+  {0x014f, {1|U, {0x014e}}},
+  {0x0151, {1|U, {0x0150}}},
+  {0x0153, {1|U, {0x0152}}},
+  {0x0155, {1|U, {0x0154}}},
+  {0x0157, {1|U, {0x0156}}},
+  {0x0159, {1|U, {0x0158}}},
+  {0x015b, {1|U, {0x015a}}},
+  {0x015d, {1|U, {0x015c}}},
+  {0x015f, {1|U, {0x015e}}},
+  {0x0161, {1|U, {0x0160}}},
+  {0x0163, {1|U, {0x0162}}},
+  {0x0165, {1|U, {0x0164}}},
+  {0x0167, {1|U, {0x0166}}},
+  {0x0169, {1|U, {0x0168}}},
+  {0x016b, {1|U, {0x016a}}},
+  {0x016d, {1|U, {0x016c}}},
+  {0x016f, {1|U, {0x016e}}},
+  {0x0171, {1|U, {0x0170}}},
+  {0x0173, {1|U, {0x0172}}},
+  {0x0175, {1|U, {0x0174}}},
+  {0x0177, {1|U, {0x0176}}},
+  {0x017a, {1|U, {0x0179}}},
+  {0x017c, {1|U, {0x017b}}},
+  {0x017e, {1|U, {0x017d}}},
+  {0x0180, {1|U, {0x0243}}},
+  {0x0183, {1|U, {0x0182}}},
+  {0x0185, {1|U, {0x0184}}},
+  {0x0188, {1|U, {0x0187}}},
+  {0x018c, {1|U, {0x018b}}},
+  {0x0192, {1|U, {0x0191}}},
+  {0x0195, {1|U, {0x01f6}}},
+  {0x0199, {1|U, {0x0198}}},
+  {0x019a, {1|U, {0x023d}}},
+  {0x019e, {1|U, {0x0220}}},
+  {0x01a1, {1|U, {0x01a0}}},
+  {0x01a3, {1|U, {0x01a2}}},
+  {0x01a5, {1|U, {0x01a4}}},
+  {0x01a8, {1|U, {0x01a7}}},
+  {0x01ad, {1|U, {0x01ac}}},
+  {0x01b0, {1|U, {0x01af}}},
+  {0x01b4, {1|U, {0x01b3}}},
+  {0x01b6, {1|U, {0x01b5}}},
+  {0x01b9, {1|U, {0x01b8}}},
+  {0x01bd, {1|U, {0x01bc}}},
+  {0x01bf, {1|U, {0x01f7}}},
+  {0x01c6, {2|U|ST, {0x01c4, 0x01c5}}},
+  {0x01c9, {2|U|ST, {0x01c7, 0x01c8}}},
+  {0x01cc, {2|U|ST, {0x01ca, 0x01cb}}},
+  {0x01ce, {1|U, {0x01cd}}},
+  {0x01d0, {1|U, {0x01cf}}},
+  {0x01d2, {1|U, {0x01d1}}},
+  {0x01d4, {1|U, {0x01d3}}},
+  {0x01d6, {1|U, {0x01d5}}},
+  {0x01d8, {1|U, {0x01d7}}},
+  {0x01da, {1|U, {0x01d9}}},
+  {0x01dc, {1|U, {0x01db}}},
+  {0x01dd, {1|U, {0x018e}}},
+  {0x01df, {1|U, {0x01de}}},
+  {0x01e1, {1|U, {0x01e0}}},
+  {0x01e3, {1|U, {0x01e2}}},
+  {0x01e5, {1|U, {0x01e4}}},
+  {0x01e7, {1|U, {0x01e6}}},
+  {0x01e9, {1|U, {0x01e8}}},
+  {0x01eb, {1|U, {0x01ea}}},
+  {0x01ed, {1|U, {0x01ec}}},
+  {0x01ef, {1|U, {0x01ee}}},
+  {0x01f3, {2|U|ST, {0x01f1, 0x01f2}}},
+  {0x01f5, {1|U, {0x01f4}}},
+  {0x01f9, {1|U, {0x01f8}}},
+  {0x01fb, {1|U, {0x01fa}}},
+  {0x01fd, {1|U, {0x01fc}}},
+  {0x01ff, {1|U, {0x01fe}}},
+  {0x0201, {1|U, {0x0200}}},
+  {0x0203, {1|U, {0x0202}}},
+  {0x0205, {1|U, {0x0204}}},
+  {0x0207, {1|U, {0x0206}}},
+  {0x0209, {1|U, {0x0208}}},
+  {0x020b, {1|U, {0x020a}}},
+  {0x020d, {1|U, {0x020c}}},
+  {0x020f, {1|U, {0x020e}}},
+  {0x0211, {1|U, {0x0210}}},
+  {0x0213, {1|U, {0x0212}}},
+  {0x0215, {1|U, {0x0214}}},
+  {0x0217, {1|U, {0x0216}}},
+  {0x0219, {1|U, {0x0218}}},
+  {0x021b, {1|U, {0x021a}}},
+  {0x021d, {1|U, {0x021c}}},
+  {0x021f, {1|U, {0x021e}}},
+  {0x0223, {1|U, {0x0222}}},
+  {0x0225, {1|U, {0x0224}}},
+  {0x0227, {1|U, {0x0226}}},
+  {0x0229, {1|U, {0x0228}}},
+  {0x022b, {1|U, {0x022a}}},
+  {0x022d, {1|U, {0x022c}}},
+  {0x022f, {1|U, {0x022e}}},
+  {0x0231, {1|U, {0x0230}}},
+  {0x0233, {1|U, {0x0232}}},
+  {0x023c, {1|U, {0x023b}}},
+  {0x023f, {1|U, {0x2c7e}}},
+  {0x0240, {1|U, {0x2c7f}}},
+  {0x0242, {1|U, {0x0241}}},
+  {0x0247, {1|U, {0x0246}}},
+  {0x0249, {1|U, {0x0248}}},
+  {0x024b, {1|U, {0x024a}}},
+  {0x024d, {1|U, {0x024c}}},
+  {0x024f, {1|U, {0x024e}}},
+  {0x0250, {1|U, {0x2c6f}}},
+  {0x0251, {1|U, {0x2c6d}}},
+  {0x0252, {1|U, {0x2c70}}},
+  {0x0253, {1|U, {0x0181}}},
+  {0x0254, {1|U, {0x0186}}},
+  {0x0256, {1|U, {0x0189}}},
+  {0x0257, {1|U, {0x018a}}},
+  {0x0259, {1|U, {0x018f}}},
+  {0x025b, {1|U, {0x0190}}},
+  {0x025c, {1|U, {0xa7ab}}},
+  {0x0260, {1|U, {0x0193}}},
+  {0x0261, {1|U, {0xa7ac}}},
+  {0x0263, {1|U, {0x0194}}},
+  {0x0265, {1|U, {0xa78d}}},
+  {0x0266, {1|U, {0xa7aa}}},
+  {0x0268, {1|U, {0x0197}}},
+  {0x0269, {1|U, {0x0196}}},
+  {0x026a, {1|U, {0xa7ae}}},
+  {0x026b, {1|U, {0x2c62}}},
+  {0x026c, {1|U, {0xa7ad}}},
+  {0x026f, {1|U, {0x019c}}},
+  {0x0271, {1|U, {0x2c6e}}},
+  {0x0272, {1|U, {0x019d}}},
+  {0x0275, {1|U, {0x019f}}},
+  {0x027d, {1|U, {0x2c64}}},
+  {0x0280, {1|U, {0x01a6}}},
+  {0x0283, {1|U, {0x01a9}}},
+  {0x0287, {1|U, {0xa7b1}}},
+  {0x0288, {1|U, {0x01ae}}},
+  {0x0289, {1|U, {0x0244}}},
+  {0x028a, {1|U, {0x01b1}}},
+  {0x028b, {1|U, {0x01b2}}},
+  {0x028c, {1|U, {0x0245}}},
+  {0x0292, {1|U, {0x01b7}}},
+  {0x029d, {1|U, {0xa7b2}}},
+  {0x029e, {1|U, {0xa7b0}}},
+  {0x0371, {1|U, {0x0370}}},
+  {0x0373, {1|U, {0x0372}}},
+  {0x0377, {1|U, {0x0376}}},
+  {0x037b, {1|U, {0x03fd}}},
+  {0x037c, {1|U, {0x03fe}}},
+  {0x037d, {1|U, {0x03ff}}},
+  {0x03ac, {1|U, {0x0386}}},
+  {0x03ad, {1|U, {0x0388}}},
+  {0x03ae, {1|U, {0x0389}}},
+  {0x03af, {1|U, {0x038a}}},
+  {0x03b1, {1|U, {0x0391}}},
+  {0x03b2, {2|U, {0x0392, 0x03d0}}},
+  {0x03b3, {1|U, {0x0393}}},
+  {0x03b4, {1|U, {0x0394}}},
+  {0x03b5, {2|U, {0x0395, 0x03f5}}},
+  {0x03b6, {1|U, {0x0396}}},
+  {0x03b7, {1|U, {0x0397}}},
+  {0x03b8, {3|U, {0x0398, 0x03d1, 0x03f4}}},
+  {0x03b9, {3|U, {0x0399, 0x0345, 0x1fbe}}},
+  {0x03ba, {2|U, {0x039a, 0x03f0}}},
+  {0x03bb, {1|U, {0x039b}}},
+  {0x03bc, {2|U, {0x039c, 0x00b5}}},
+  {0x03bd, {1|U, {0x039d}}},
+  {0x03be, {1|U, {0x039e}}},
+  {0x03bf, {1|U, {0x039f}}},
+  {0x03c0, {2|U, {0x03a0, 0x03d6}}},
+  {0x03c1, {2|U, {0x03a1, 0x03f1}}},
+  {0x03c3, {2|U, {0x03a3, 0x03c2}}},
+  {0x03c4, {1|U, {0x03a4}}},
+  {0x03c5, {1|U, {0x03a5}}},
+  {0x03c6, {2|U, {0x03a6, 0x03d5}}},
+  {0x03c7, {1|U, {0x03a7}}},
+  {0x03c8, {1|U, {0x03a8}}},
+  {0x03c9, {2|U, {0x03a9, 0x2126}}},
+  {0x03ca, {1|U, {0x03aa}}},
+  {0x03cb, {1|U, {0x03ab}}},
+  {0x03cc, {1|U, {0x038c}}},
+  {0x03cd, {1|U, {0x038e}}},
+  {0x03ce, {1|U, {0x038f}}},
+  {0x03d7, {1|U, {0x03cf}}},
+  {0x03d9, {1|U, {0x03d8}}},
+  {0x03db, {1|U, {0x03da}}},
+  {0x03dd, {1|U, {0x03dc}}},
+  {0x03df, {1|U, {0x03de}}},
+  {0x03e1, {1|U, {0x03e0}}},
+  {0x03e3, {1|U, {0x03e2}}},
+  {0x03e5, {1|U, {0x03e4}}},
+  {0x03e7, {1|U, {0x03e6}}},
+  {0x03e9, {1|U, {0x03e8}}},
+  {0x03eb, {1|U, {0x03ea}}},
+  {0x03ed, {1|U, {0x03ec}}},
+  {0x03ef, {1|U, {0x03ee}}},
+  {0x03f2, {1|U, {0x03f9}}},
+  {0x03f3, {1|U, {0x037f}}},
+  {0x03f8, {1|U, {0x03f7}}},
+  {0x03fb, {1|U, {0x03fa}}},
+  {0x0430, {1|U, {0x0410}}},
+  {0x0431, {1|U, {0x0411}}},
+  {0x0432, {2|U, {0x0412, 0x1c80}}},
+  {0x0433, {1|U, {0x0413}}},
+  {0x0434, {2|U, {0x0414, 0x1c81}}},
+  {0x0435, {1|U, {0x0415}}},
+  {0x0436, {1|U, {0x0416}}},
+  {0x0437, {1|U, {0x0417}}},
+  {0x0438, {1|U, {0x0418}}},
+  {0x0439, {1|U, {0x0419}}},
+  {0x043a, {1|U, {0x041a}}},
+  {0x043b, {1|U, {0x041b}}},
+  {0x043c, {1|U, {0x041c}}},
+  {0x043d, {1|U, {0x041d}}},
+  {0x043e, {2|U, {0x041e, 0x1c82}}},
+  {0x043f, {1|U, {0x041f}}},
+  {0x0440, {1|U, {0x0420}}},
+  {0x0441, {2|U, {0x0421, 0x1c83}}},
+  {0x0442, {3|U, {0x0422, 0x1c84, 0x1c85}}},
+  {0x0443, {1|U, {0x0423}}},
+  {0x0444, {1|U, {0x0424}}},
+  {0x0445, {1|U, {0x0425}}},
+  {0x0446, {1|U, {0x0426}}},
+  {0x0447, {1|U, {0x0427}}},
+  {0x0448, {1|U, {0x0428}}},
+  {0x0449, {1|U, {0x0429}}},
+  {0x044a, {2|U, {0x042a, 0x1c86}}},
+  {0x044b, {1|U, {0x042b}}},
+  {0x044c, {1|U, {0x042c}}},
+  {0x044d, {1|U, {0x042d}}},
+  {0x044e, {1|U, {0x042e}}},
+  {0x044f, {1|U, {0x042f}}},
+  {0x0450, {1|U, {0x0400}}},
+  {0x0451, {1|U, {0x0401}}},
+  {0x0452, {1|U, {0x0402}}},
+  {0x0453, {1|U, {0x0403}}},
+  {0x0454, {1|U, {0x0404}}},
+  {0x0455, {1|U, {0x0405}}},
+  {0x0456, {1|U, {0x0406}}},
+  {0x0457, {1|U, {0x0407}}},
+  {0x0458, {1|U, {0x0408}}},
+  {0x0459, {1|U, {0x0409}}},
+  {0x045a, {1|U, {0x040a}}},
+  {0x045b, {1|U, {0x040b}}},
+  {0x045c, {1|U, {0x040c}}},
+  {0x045d, {1|U, {0x040d}}},
+  {0x045e, {1|U, {0x040e}}},
+  {0x045f, {1|U, {0x040f}}},
+  {0x0461, {1|U, {0x0460}}},
+  {0x0463, {2|U, {0x0462, 0x1c87}}},
+  {0x0465, {1|U, {0x0464}}},
+  {0x0467, {1|U, {0x0466}}},
+  {0x0469, {1|U, {0x0468}}},
+  {0x046b, {1|U, {0x046a}}},
+  {0x046d, {1|U, {0x046c}}},
+  {0x046f, {1|U, {0x046e}}},
+  {0x0471, {1|U, {0x0470}}},
+  {0x0473, {1|U, {0x0472}}},
+  {0x0475, {1|U, {0x0474}}},
+  {0x0477, {1|U, {0x0476}}},
+  {0x0479, {1|U, {0x0478}}},
+  {0x047b, {1|U, {0x047a}}},
+  {0x047d, {1|U, {0x047c}}},
+  {0x047f, {1|U, {0x047e}}},
+  {0x0481, {1|U, {0x0480}}},
+  {0x048b, {1|U, {0x048a}}},
+  {0x048d, {1|U, {0x048c}}},
+  {0x048f, {1|U, {0x048e}}},
+  {0x0491, {1|U, {0x0490}}},
+  {0x0493, {1|U, {0x0492}}},
+  {0x0495, {1|U, {0x0494}}},
+  {0x0497, {1|U, {0x0496}}},
+  {0x0499, {1|U, {0x0498}}},
+  {0x049b, {1|U, {0x049a}}},
+  {0x049d, {1|U, {0x049c}}},
+  {0x049f, {1|U, {0x049e}}},
+  {0x04a1, {1|U, {0x04a0}}},
+  {0x04a3, {1|U, {0x04a2}}},
+  {0x04a5, {1|U, {0x04a4}}},
+  {0x04a7, {1|U, {0x04a6}}},
+  {0x04a9, {1|U, {0x04a8}}},
+  {0x04ab, {1|U, {0x04aa}}},
+  {0x04ad, {1|U, {0x04ac}}},
+  {0x04af, {1|U, {0x04ae}}},
+  {0x04b1, {1|U, {0x04b0}}},
+  {0x04b3, {1|U, {0x04b2}}},
+  {0x04b5, {1|U, {0x04b4}}},
+  {0x04b7, {1|U, {0x04b6}}},
+  {0x04b9, {1|U, {0x04b8}}},
+  {0x04bb, {1|U, {0x04ba}}},
+  {0x04bd, {1|U, {0x04bc}}},
+  {0x04bf, {1|U, {0x04be}}},
+  {0x04c2, {1|U, {0x04c1}}},
+  {0x04c4, {1|U, {0x04c3}}},
+  {0x04c6, {1|U, {0x04c5}}},
+  {0x04c8, {1|U, {0x04c7}}},
+  {0x04ca, {1|U, {0x04c9}}},
+  {0x04cc, {1|U, {0x04cb}}},
+  {0x04ce, {1|U, {0x04cd}}},
+  {0x04cf, {1|U, {0x04c0}}},
+  {0x04d1, {1|U, {0x04d0}}},
+  {0x04d3, {1|U, {0x04d2}}},
+  {0x04d5, {1|U, {0x04d4}}},
+  {0x04d7, {1|U, {0x04d6}}},
+  {0x04d9, {1|U, {0x04d8}}},
+  {0x04db, {1|U, {0x04da}}},
+  {0x04dd, {1|U, {0x04dc}}},
+  {0x04df, {1|U, {0x04de}}},
+  {0x04e1, {1|U, {0x04e0}}},
+  {0x04e3, {1|U, {0x04e2}}},
+  {0x04e5, {1|U, {0x04e4}}},
+  {0x04e7, {1|U, {0x04e6}}},
+  {0x04e9, {1|U, {0x04e8}}},
+  {0x04eb, {1|U, {0x04ea}}},
+  {0x04ed, {1|U, {0x04ec}}},
+  {0x04ef, {1|U, {0x04ee}}},
+  {0x04f1, {1|U, {0x04f0}}},
+  {0x04f3, {1|U, {0x04f2}}},
+  {0x04f5, {1|U, {0x04f4}}},
+  {0x04f7, {1|U, {0x04f6}}},
+  {0x04f9, {1|U, {0x04f8}}},
+  {0x04fb, {1|U, {0x04fa}}},
+  {0x04fd, {1|U, {0x04fc}}},
+  {0x04ff, {1|U, {0x04fe}}},
+  {0x0501, {1|U, {0x0500}}},
+  {0x0503, {1|U, {0x0502}}},
+  {0x0505, {1|U, {0x0504}}},
+  {0x0507, {1|U, {0x0506}}},
+  {0x0509, {1|U, {0x0508}}},
+  {0x050b, {1|U, {0x050a}}},
+  {0x050d, {1|U, {0x050c}}},
+  {0x050f, {1|U, {0x050e}}},
+  {0x0511, {1|U, {0x0510}}},
+  {0x0513, {1|U, {0x0512}}},
+  {0x0515, {1|U, {0x0514}}},
+  {0x0517, {1|U, {0x0516}}},
+  {0x0519, {1|U, {0x0518}}},
+  {0x051b, {1|U, {0x051a}}},
+  {0x051d, {1|U, {0x051c}}},
+  {0x051f, {1|U, {0x051e}}},
+  {0x0521, {1|U, {0x0520}}},
+  {0x0523, {1|U, {0x0522}}},
+  {0x0525, {1|U, {0x0524}}},
+  {0x0527, {1|U, {0x0526}}},
+  {0x0529, {1|U, {0x0528}}},
+  {0x052b, {1|U, {0x052a}}},
+  {0x052d, {1|U, {0x052c}}},
+  {0x052f, {1|U, {0x052e}}},
+  {0x0561, {1|U, {0x0531}}},
+  {0x0562, {1|U, {0x0532}}},
+  {0x0563, {1|U, {0x0533}}},
+  {0x0564, {1|U, {0x0534}}},
+  {0x0565, {1|U, {0x0535}}},
+  {0x0566, {1|U, {0x0536}}},
+  {0x0567, {1|U, {0x0537}}},
+  {0x0568, {1|U, {0x0538}}},
+  {0x0569, {1|U, {0x0539}}},
+  {0x056a, {1|U, {0x053a}}},
+  {0x056b, {1|U, {0x053b}}},
+  {0x056c, {1|U, {0x053c}}},
+  {0x056d, {1|U, {0x053d}}},
+  {0x056e, {1|U, {0x053e}}},
+  {0x056f, {1|U, {0x053f}}},
+  {0x0570, {1|U, {0x0540}}},
+  {0x0571, {1|U, {0x0541}}},
+  {0x0572, {1|U, {0x0542}}},
+  {0x0573, {1|U, {0x0543}}},
+  {0x0574, {1|U, {0x0544}}},
+  {0x0575, {1|U, {0x0545}}},
+  {0x0576, {1|U, {0x0546}}},
+  {0x0577, {1|U, {0x0547}}},
+  {0x0578, {1|U, {0x0548}}},
+  {0x0579, {1|U, {0x0549}}},
+  {0x057a, {1|U, {0x054a}}},
+  {0x057b, {1|U, {0x054b}}},
+  {0x057c, {1|U, {0x054c}}},
+  {0x057d, {1|U, {0x054d}}},
+  {0x057e, {1|U, {0x054e}}},
+  {0x057f, {1|U, {0x054f}}},
+  {0x0580, {1|U, {0x0550}}},
+  {0x0581, {1|U, {0x0551}}},
+  {0x0582, {1|U, {0x0552}}},
+  {0x0583, {1|U, {0x0553}}},
+  {0x0584, {1|U, {0x0554}}},
+  {0x0585, {1|U, {0x0555}}},
+  {0x0586, {1|U, {0x0556}}},
+  {0x13a0, {1|D, {0xab70}}},
+  {0x13a1, {1|D, {0xab71}}},
+  {0x13a2, {1|D, {0xab72}}},
+  {0x13a3, {1|D, {0xab73}}},
+  {0x13a4, {1|D, {0xab74}}},
+  {0x13a5, {1|D, {0xab75}}},
+  {0x13a6, {1|D, {0xab76}}},
+  {0x13a7, {1|D, {0xab77}}},
+  {0x13a8, {1|D, {0xab78}}},
+  {0x13a9, {1|D, {0xab79}}},
+  {0x13aa, {1|D, {0xab7a}}},
+  {0x13ab, {1|D, {0xab7b}}},
+  {0x13ac, {1|D, {0xab7c}}},
+  {0x13ad, {1|D, {0xab7d}}},
+  {0x13ae, {1|D, {0xab7e}}},
+  {0x13af, {1|D, {0xab7f}}},
+  {0x13b0, {1|D, {0xab80}}},
+  {0x13b1, {1|D, {0xab81}}},
+  {0x13b2, {1|D, {0xab82}}},
+  {0x13b3, {1|D, {0xab83}}},
+  {0x13b4, {1|D, {0xab84}}},
+  {0x13b5, {1|D, {0xab85}}},
+  {0x13b6, {1|D, {0xab86}}},
+  {0x13b7, {1|D, {0xab87}}},
+  {0x13b8, {1|D, {0xab88}}},
+  {0x13b9, {1|D, {0xab89}}},
+  {0x13ba, {1|D, {0xab8a}}},
+  {0x13bb, {1|D, {0xab8b}}},
+  {0x13bc, {1|D, {0xab8c}}},
+  {0x13bd, {1|D, {0xab8d}}},
+  {0x13be, {1|D, {0xab8e}}},
+  {0x13bf, {1|D, {0xab8f}}},
+  {0x13c0, {1|D, {0xab90}}},
+  {0x13c1, {1|D, {0xab91}}},
+  {0x13c2, {1|D, {0xab92}}},
+  {0x13c3, {1|D, {0xab93}}},
+  {0x13c4, {1|D, {0xab94}}},
+  {0x13c5, {1|D, {0xab95}}},
+  {0x13c6, {1|D, {0xab96}}},
+  {0x13c7, {1|D, {0xab97}}},
+  {0x13c8, {1|D, {0xab98}}},
+  {0x13c9, {1|D, {0xab99}}},
+  {0x13ca, {1|D, {0xab9a}}},
+  {0x13cb, {1|D, {0xab9b}}},
+  {0x13cc, {1|D, {0xab9c}}},
+  {0x13cd, {1|D, {0xab9d}}},
+  {0x13ce, {1|D, {0xab9e}}},
+  {0x13cf, {1|D, {0xab9f}}},
+  {0x13d0, {1|D, {0xaba0}}},
+  {0x13d1, {1|D, {0xaba1}}},
+  {0x13d2, {1|D, {0xaba2}}},
+  {0x13d3, {1|D, {0xaba3}}},
+  {0x13d4, {1|D, {0xaba4}}},
+  {0x13d5, {1|D, {0xaba5}}},
+  {0x13d6, {1|D, {0xaba6}}},
+  {0x13d7, {1|D, {0xaba7}}},
+  {0x13d8, {1|D, {0xaba8}}},
+  {0x13d9, {1|D, {0xaba9}}},
+  {0x13da, {1|D, {0xabaa}}},
+  {0x13db, {1|D, {0xabab}}},
+  {0x13dc, {1|D, {0xabac}}},
+  {0x13dd, {1|D, {0xabad}}},
+  {0x13de, {1|D, {0xabae}}},
+  {0x13df, {1|D, {0xabaf}}},
+  {0x13e0, {1|D, {0xabb0}}},
+  {0x13e1, {1|D, {0xabb1}}},
+  {0x13e2, {1|D, {0xabb2}}},
+  {0x13e3, {1|D, {0xabb3}}},
+  {0x13e4, {1|D, {0xabb4}}},
+  {0x13e5, {1|D, {0xabb5}}},
+  {0x13e6, {1|D, {0xabb6}}},
+  {0x13e7, {1|D, {0xabb7}}},
+  {0x13e8, {1|D, {0xabb8}}},
+  {0x13e9, {1|D, {0xabb9}}},
+  {0x13ea, {1|D, {0xabba}}},
+  {0x13eb, {1|D, {0xabbb}}},
+  {0x13ec, {1|D, {0xabbc}}},
+  {0x13ed, {1|D, {0xabbd}}},
+  {0x13ee, {1|D, {0xabbe}}},
+  {0x13ef, {1|D, {0xabbf}}},
+  {0x13f0, {1|D, {0x13f8}}},
+  {0x13f1, {1|D, {0x13f9}}},
+  {0x13f2, {1|D, {0x13fa}}},
+  {0x13f3, {1|D, {0x13fb}}},
+  {0x13f4, {1|D, {0x13fc}}},
+  {0x13f5, {1|D, {0x13fd}}},
+  {0x1d79, {1|U, {0xa77d}}},
+  {0x1d7d, {1|U, {0x2c63}}},
+  {0x1e01, {1|U, {0x1e00}}},
+  {0x1e03, {1|U, {0x1e02}}},
+  {0x1e05, {1|U, {0x1e04}}},
+  {0x1e07, {1|U, {0x1e06}}},
+  {0x1e09, {1|U, {0x1e08}}},
+  {0x1e0b, {1|U, {0x1e0a}}},
+  {0x1e0d, {1|U, {0x1e0c}}},
+  {0x1e0f, {1|U, {0x1e0e}}},
+  {0x1e11, {1|U, {0x1e10}}},
+  {0x1e13, {1|U, {0x1e12}}},
+  {0x1e15, {1|U, {0x1e14}}},
+  {0x1e17, {1|U, {0x1e16}}},
+  {0x1e19, {1|U, {0x1e18}}},
+  {0x1e1b, {1|U, {0x1e1a}}},
+  {0x1e1d, {1|U, {0x1e1c}}},
+  {0x1e1f, {1|U, {0x1e1e}}},
+  {0x1e21, {1|U, {0x1e20}}},
+  {0x1e23, {1|U, {0x1e22}}},
+  {0x1e25, {1|U, {0x1e24}}},
+  {0x1e27, {1|U, {0x1e26}}},
+  {0x1e29, {1|U, {0x1e28}}},
+  {0x1e2b, {1|U, {0x1e2a}}},
+  {0x1e2d, {1|U, {0x1e2c}}},
+  {0x1e2f, {1|U, {0x1e2e}}},
+  {0x1e31, {1|U, {0x1e30}}},
+  {0x1e33, {1|U, {0x1e32}}},
+  {0x1e35, {1|U, {0x1e34}}},
+  {0x1e37, {1|U, {0x1e36}}},
+  {0x1e39, {1|U, {0x1e38}}},
+  {0x1e3b, {1|U, {0x1e3a}}},
+  {0x1e3d, {1|U, {0x1e3c}}},
+  {0x1e3f, {1|U, {0x1e3e}}},
+  {0x1e41, {1|U, {0x1e40}}},
+  {0x1e43, {1|U, {0x1e42}}},
+  {0x1e45, {1|U, {0x1e44}}},
+  {0x1e47, {1|U, {0x1e46}}},
+  {0x1e49, {1|U, {0x1e48}}},
+  {0x1e4b, {1|U, {0x1e4a}}},
+  {0x1e4d, {1|U, {0x1e4c}}},
+  {0x1e4f, {1|U, {0x1e4e}}},
+  {0x1e51, {1|U, {0x1e50}}},
+  {0x1e53, {1|U, {0x1e52}}},
+  {0x1e55, {1|U, {0x1e54}}},
+  {0x1e57, {1|U, {0x1e56}}},
+  {0x1e59, {1|U, {0x1e58}}},
+  {0x1e5b, {1|U, {0x1e5a}}},
+  {0x1e5d, {1|U, {0x1e5c}}},
+  {0x1e5f, {1|U, {0x1e5e}}},
+  {0x1e61, {2|U, {0x1e60, 0x1e9b}}},
+  {0x1e63, {1|U, {0x1e62}}},
+  {0x1e65, {1|U, {0x1e64}}},
+  {0x1e67, {1|U, {0x1e66}}},
+  {0x1e69, {1|U, {0x1e68}}},
+  {0x1e6b, {1|U, {0x1e6a}}},
+  {0x1e6d, {1|U, {0x1e6c}}},
+  {0x1e6f, {1|U, {0x1e6e}}},
+  {0x1e71, {1|U, {0x1e70}}},
+  {0x1e73, {1|U, {0x1e72}}},
+  {0x1e75, {1|U, {0x1e74}}},
+  {0x1e77, {1|U, {0x1e76}}},
+  {0x1e79, {1|U, {0x1e78}}},
+  {0x1e7b, {1|U, {0x1e7a}}},
+  {0x1e7d, {1|U, {0x1e7c}}},
+  {0x1e7f, {1|U, {0x1e7e}}},
+  {0x1e81, {1|U, {0x1e80}}},
+  {0x1e83, {1|U, {0x1e82}}},
+  {0x1e85, {1|U, {0x1e84}}},
+  {0x1e87, {1|U, {0x1e86}}},
+  {0x1e89, {1|U, {0x1e88}}},
+  {0x1e8b, {1|U, {0x1e8a}}},
+  {0x1e8d, {1|U, {0x1e8c}}},
+  {0x1e8f, {1|U, {0x1e8e}}},
+  {0x1e91, {1|U, {0x1e90}}},
+  {0x1e93, {1|U, {0x1e92}}},
+  {0x1e95, {1|U, {0x1e94}}},
+  {0x1ea1, {1|U, {0x1ea0}}},
+  {0x1ea3, {1|U, {0x1ea2}}},
+  {0x1ea5, {1|U, {0x1ea4}}},
+  {0x1ea7, {1|U, {0x1ea6}}},
+  {0x1ea9, {1|U, {0x1ea8}}},
+  {0x1eab, {1|U, {0x1eaa}}},
+  {0x1ead, {1|U, {0x1eac}}},
+  {0x1eaf, {1|U, {0x1eae}}},
+  {0x1eb1, {1|U, {0x1eb0}}},
+  {0x1eb3, {1|U, {0x1eb2}}},
+  {0x1eb5, {1|U, {0x1eb4}}},
+  {0x1eb7, {1|U, {0x1eb6}}},
+  {0x1eb9, {1|U, {0x1eb8}}},
+  {0x1ebb, {1|U, {0x1eba}}},
+  {0x1ebd, {1|U, {0x1ebc}}},
+  {0x1ebf, {1|U, {0x1ebe}}},
+  {0x1ec1, {1|U, {0x1ec0}}},
+  {0x1ec3, {1|U, {0x1ec2}}},
+  {0x1ec5, {1|U, {0x1ec4}}},
+  {0x1ec7, {1|U, {0x1ec6}}},
+  {0x1ec9, {1|U, {0x1ec8}}},
+  {0x1ecb, {1|U, {0x1eca}}},
+  {0x1ecd, {1|U, {0x1ecc}}},
+  {0x1ecf, {1|U, {0x1ece}}},
+  {0x1ed1, {1|U, {0x1ed0}}},
+  {0x1ed3, {1|U, {0x1ed2}}},
+  {0x1ed5, {1|U, {0x1ed4}}},
+  {0x1ed7, {1|U, {0x1ed6}}},
+  {0x1ed9, {1|U, {0x1ed8}}},
+  {0x1edb, {1|U, {0x1eda}}},
+  {0x1edd, {1|U, {0x1edc}}},
+  {0x1edf, {1|U, {0x1ede}}},
+  {0x1ee1, {1|U, {0x1ee0}}},
+  {0x1ee3, {1|U, {0x1ee2}}},
+  {0x1ee5, {1|U, {0x1ee4}}},
+  {0x1ee7, {1|U, {0x1ee6}}},
+  {0x1ee9, {1|U, {0x1ee8}}},
+  {0x1eeb, {1|U, {0x1eea}}},
+  {0x1eed, {1|U, {0x1eec}}},
+  {0x1eef, {1|U, {0x1eee}}},
+  {0x1ef1, {1|U, {0x1ef0}}},
+  {0x1ef3, {1|U, {0x1ef2}}},
+  {0x1ef5, {1|U, {0x1ef4}}},
+  {0x1ef7, {1|U, {0x1ef6}}},
+  {0x1ef9, {1|U, {0x1ef8}}},
+  {0x1efb, {1|U, {0x1efa}}},
+  {0x1efd, {1|U, {0x1efc}}},
+  {0x1eff, {1|U, {0x1efe}}},
+  {0x1f00, {1|U, {0x1f08}}},
+  {0x1f01, {1|U, {0x1f09}}},
+  {0x1f02, {1|U, {0x1f0a}}},
+  {0x1f03, {1|U, {0x1f0b}}},
+  {0x1f04, {1|U, {0x1f0c}}},
+  {0x1f05, {1|U, {0x1f0d}}},
+  {0x1f06, {1|U, {0x1f0e}}},
+  {0x1f07, {1|U, {0x1f0f}}},
+  {0x1f10, {1|U, {0x1f18}}},
+  {0x1f11, {1|U, {0x1f19}}},
+  {0x1f12, {1|U, {0x1f1a}}},
+  {0x1f13, {1|U, {0x1f1b}}},
+  {0x1f14, {1|U, {0x1f1c}}},
+  {0x1f15, {1|U, {0x1f1d}}},
+  {0x1f20, {1|U, {0x1f28}}},
+  {0x1f21, {1|U, {0x1f29}}},
+  {0x1f22, {1|U, {0x1f2a}}},
+  {0x1f23, {1|U, {0x1f2b}}},
+  {0x1f24, {1|U, {0x1f2c}}},
+  {0x1f25, {1|U, {0x1f2d}}},
+  {0x1f26, {1|U, {0x1f2e}}},
+  {0x1f27, {1|U, {0x1f2f}}},
+  {0x1f30, {1|U, {0x1f38}}},
+  {0x1f31, {1|U, {0x1f39}}},
+  {0x1f32, {1|U, {0x1f3a}}},
+  {0x1f33, {1|U, {0x1f3b}}},
+  {0x1f34, {1|U, {0x1f3c}}},
+  {0x1f35, {1|U, {0x1f3d}}},
+  {0x1f36, {1|U, {0x1f3e}}},
+  {0x1f37, {1|U, {0x1f3f}}},
+  {0x1f40, {1|U, {0x1f48}}},
+  {0x1f41, {1|U, {0x1f49}}},
+  {0x1f42, {1|U, {0x1f4a}}},
+  {0x1f43, {1|U, {0x1f4b}}},
+  {0x1f44, {1|U, {0x1f4c}}},
+  {0x1f45, {1|U, {0x1f4d}}},
+  {0x1f51, {1|U, {0x1f59}}},
+  {0x1f53, {1|U, {0x1f5b}}},
+  {0x1f55, {1|U, {0x1f5d}}},
+  {0x1f57, {1|U, {0x1f5f}}},
+  {0x1f60, {1|U, {0x1f68}}},
+  {0x1f61, {1|U, {0x1f69}}},
+  {0x1f62, {1|U, {0x1f6a}}},
+  {0x1f63, {1|U, {0x1f6b}}},
+  {0x1f64, {1|U, {0x1f6c}}},
+  {0x1f65, {1|U, {0x1f6d}}},
+  {0x1f66, {1|U, {0x1f6e}}},
+  {0x1f67, {1|U, {0x1f6f}}},
+  {0x1f70, {1|U, {0x1fba}}},
+  {0x1f71, {1|U, {0x1fbb}}},
+  {0x1f72, {1|U, {0x1fc8}}},
+  {0x1f73, {1|U, {0x1fc9}}},
+  {0x1f74, {1|U, {0x1fca}}},
+  {0x1f75, {1|U, {0x1fcb}}},
+  {0x1f76, {1|U, {0x1fda}}},
+  {0x1f77, {1|U, {0x1fdb}}},
+  {0x1f78, {1|U, {0x1ff8}}},
+  {0x1f79, {1|U, {0x1ff9}}},
+  {0x1f7a, {1|U, {0x1fea}}},
+  {0x1f7b, {1|U, {0x1feb}}},
+  {0x1f7c, {1|U, {0x1ffa}}},
+  {0x1f7d, {1|U, {0x1ffb}}},
+  {0x1fb0, {1|U, {0x1fb8}}},
+  {0x1fb1, {1|U, {0x1fb9}}},
+  {0x1fd0, {1|U, {0x1fd8}}},
+  {0x1fd1, {1|U, {0x1fd9}}},
+  {0x1fe0, {1|U, {0x1fe8}}},
+  {0x1fe1, {1|U, {0x1fe9}}},
+  {0x1fe5, {1|U, {0x1fec}}},
+  {0x214e, {1|U, {0x2132}}},
+  {0x2170, {1|U, {0x2160}}},
+  {0x2171, {1|U, {0x2161}}},
+  {0x2172, {1|U, {0x2162}}},
+  {0x2173, {1|U, {0x2163}}},
+  {0x2174, {1|U, {0x2164}}},
+  {0x2175, {1|U, {0x2165}}},
+  {0x2176, {1|U, {0x2166}}},
+  {0x2177, {1|U, {0x2167}}},
+  {0x2178, {1|U, {0x2168}}},
+  {0x2179, {1|U, {0x2169}}},
+  {0x217a, {1|U, {0x216a}}},
+  {0x217b, {1|U, {0x216b}}},
+  {0x217c, {1|U, {0x216c}}},
+  {0x217d, {1|U, {0x216d}}},
+  {0x217e, {1|U, {0x216e}}},
+  {0x217f, {1|U, {0x216f}}},
+  {0x2184, {1|U, {0x2183}}},
+  {0x24d0, {1|U, {0x24b6}}},
+  {0x24d1, {1|U, {0x24b7}}},
+  {0x24d2, {1|U, {0x24b8}}},
+  {0x24d3, {1|U, {0x24b9}}},
+  {0x24d4, {1|U, {0x24ba}}},
+  {0x24d5, {1|U, {0x24bb}}},
+  {0x24d6, {1|U, {0x24bc}}},
+  {0x24d7, {1|U, {0x24bd}}},
+  {0x24d8, {1|U, {0x24be}}},
+  {0x24d9, {1|U, {0x24bf}}},
+  {0x24da, {1|U, {0x24c0}}},
+  {0x24db, {1|U, {0x24c1}}},
+  {0x24dc, {1|U, {0x24c2}}},
+  {0x24dd, {1|U, {0x24c3}}},
+  {0x24de, {1|U, {0x24c4}}},
+  {0x24df, {1|U, {0x24c5}}},
+  {0x24e0, {1|U, {0x24c6}}},
+  {0x24e1, {1|U, {0x24c7}}},
+  {0x24e2, {1|U, {0x24c8}}},
+  {0x24e3, {1|U, {0x24c9}}},
+  {0x24e4, {1|U, {0x24ca}}},
+  {0x24e5, {1|U, {0x24cb}}},
+  {0x24e6, {1|U, {0x24cc}}},
+  {0x24e7, {1|U, {0x24cd}}},
+  {0x24e8, {1|U, {0x24ce}}},
+  {0x24e9, {1|U, {0x24cf}}},
+  {0x2c30, {1|U, {0x2c00}}},
+  {0x2c31, {1|U, {0x2c01}}},
+  {0x2c32, {1|U, {0x2c02}}},
+  {0x2c33, {1|U, {0x2c03}}},
+  {0x2c34, {1|U, {0x2c04}}},
+  {0x2c35, {1|U, {0x2c05}}},
+  {0x2c36, {1|U, {0x2c06}}},
+  {0x2c37, {1|U, {0x2c07}}},
+  {0x2c38, {1|U, {0x2c08}}},
+  {0x2c39, {1|U, {0x2c09}}},
+  {0x2c3a, {1|U, {0x2c0a}}},
+  {0x2c3b, {1|U, {0x2c0b}}},
+  {0x2c3c, {1|U, {0x2c0c}}},
+  {0x2c3d, {1|U, {0x2c0d}}},
+  {0x2c3e, {1|U, {0x2c0e}}},
+  {0x2c3f, {1|U, {0x2c0f}}},
+  {0x2c40, {1|U, {0x2c10}}},
+  {0x2c41, {1|U, {0x2c11}}},
+  {0x2c42, {1|U, {0x2c12}}},
+  {0x2c43, {1|U, {0x2c13}}},
+  {0x2c44, {1|U, {0x2c14}}},
+  {0x2c45, {1|U, {0x2c15}}},
+  {0x2c46, {1|U, {0x2c16}}},
+  {0x2c47, {1|U, {0x2c17}}},
+  {0x2c48, {1|U, {0x2c18}}},
+  {0x2c49, {1|U, {0x2c19}}},
+  {0x2c4a, {1|U, {0x2c1a}}},
+  {0x2c4b, {1|U, {0x2c1b}}},
+  {0x2c4c, {1|U, {0x2c1c}}},
+  {0x2c4d, {1|U, {0x2c1d}}},
+  {0x2c4e, {1|U, {0x2c1e}}},
+  {0x2c4f, {1|U, {0x2c1f}}},
+  {0x2c50, {1|U, {0x2c20}}},
+  {0x2c51, {1|U, {0x2c21}}},
+  {0x2c52, {1|U, {0x2c22}}},
+  {0x2c53, {1|U, {0x2c23}}},
+  {0x2c54, {1|U, {0x2c24}}},
+  {0x2c55, {1|U, {0x2c25}}},
+  {0x2c56, {1|U, {0x2c26}}},
+  {0x2c57, {1|U, {0x2c27}}},
+  {0x2c58, {1|U, {0x2c28}}},
+  {0x2c59, {1|U, {0x2c29}}},
+  {0x2c5a, {1|U, {0x2c2a}}},
+  {0x2c5b, {1|U, {0x2c2b}}},
+  {0x2c5c, {1|U, {0x2c2c}}},
+  {0x2c5d, {1|U, {0x2c2d}}},
+  {0x2c5e, {1|U, {0x2c2e}}},
+  {0x2c61, {1|U, {0x2c60}}},
+  {0x2c65, {1|U, {0x023a}}},
+  {0x2c66, {1|U, {0x023e}}},
+  {0x2c68, {1|U, {0x2c67}}},
+  {0x2c6a, {1|U, {0x2c69}}},
+  {0x2c6c, {1|U, {0x2c6b}}},
+  {0x2c73, {1|U, {0x2c72}}},
+  {0x2c76, {1|U, {0x2c75}}},
+  {0x2c81, {1|U, {0x2c80}}},
+  {0x2c83, {1|U, {0x2c82}}},
+  {0x2c85, {1|U, {0x2c84}}},
+  {0x2c87, {1|U, {0x2c86}}},
+  {0x2c89, {1|U, {0x2c88}}},
+  {0x2c8b, {1|U, {0x2c8a}}},
+  {0x2c8d, {1|U, {0x2c8c}}},
+  {0x2c8f, {1|U, {0x2c8e}}},
+  {0x2c91, {1|U, {0x2c90}}},
+  {0x2c93, {1|U, {0x2c92}}},
+  {0x2c95, {1|U, {0x2c94}}},
+  {0x2c97, {1|U, {0x2c96}}},
+  {0x2c99, {1|U, {0x2c98}}},
+  {0x2c9b, {1|U, {0x2c9a}}},
+  {0x2c9d, {1|U, {0x2c9c}}},
+  {0x2c9f, {1|U, {0x2c9e}}},
+  {0x2ca1, {1|U, {0x2ca0}}},
+  {0x2ca3, {1|U, {0x2ca2}}},
+  {0x2ca5, {1|U, {0x2ca4}}},
+  {0x2ca7, {1|U, {0x2ca6}}},
+  {0x2ca9, {1|U, {0x2ca8}}},
+  {0x2cab, {1|U, {0x2caa}}},
+  {0x2cad, {1|U, {0x2cac}}},
+  {0x2caf, {1|U, {0x2cae}}},
+  {0x2cb1, {1|U, {0x2cb0}}},
+  {0x2cb3, {1|U, {0x2cb2}}},
+  {0x2cb5, {1|U, {0x2cb4}}},
+  {0x2cb7, {1|U, {0x2cb6}}},
+  {0x2cb9, {1|U, {0x2cb8}}},
+  {0x2cbb, {1|U, {0x2cba}}},
+  {0x2cbd, {1|U, {0x2cbc}}},
+  {0x2cbf, {1|U, {0x2cbe}}},
+  {0x2cc1, {1|U, {0x2cc0}}},
+  {0x2cc3, {1|U, {0x2cc2}}},
+  {0x2cc5, {1|U, {0x2cc4}}},
+  {0x2cc7, {1|U, {0x2cc6}}},
+  {0x2cc9, {1|U, {0x2cc8}}},
+  {0x2ccb, {1|U, {0x2cca}}},
+  {0x2ccd, {1|U, {0x2ccc}}},
+  {0x2ccf, {1|U, {0x2cce}}},
+  {0x2cd1, {1|U, {0x2cd0}}},
+  {0x2cd3, {1|U, {0x2cd2}}},
+  {0x2cd5, {1|U, {0x2cd4}}},
+  {0x2cd7, {1|U, {0x2cd6}}},
+  {0x2cd9, {1|U, {0x2cd8}}},
+  {0x2cdb, {1|U, {0x2cda}}},
+  {0x2cdd, {1|U, {0x2cdc}}},
+  {0x2cdf, {1|U, {0x2cde}}},
+  {0x2ce1, {1|U, {0x2ce0}}},
+  {0x2ce3, {1|U, {0x2ce2}}},
+  {0x2cec, {1|U, {0x2ceb}}},
+  {0x2cee, {1|U, {0x2ced}}},
+  {0x2cf3, {1|U, {0x2cf2}}},
+  {0x2d00, {1|U, {0x10a0}}},
+  {0x2d01, {1|U, {0x10a1}}},
+  {0x2d02, {1|U, {0x10a2}}},
+  {0x2d03, {1|U, {0x10a3}}},
+  {0x2d04, {1|U, {0x10a4}}},
+  {0x2d05, {1|U, {0x10a5}}},
+  {0x2d06, {1|U, {0x10a6}}},
+  {0x2d07, {1|U, {0x10a7}}},
+  {0x2d08, {1|U, {0x10a8}}},
+  {0x2d09, {1|U, {0x10a9}}},
+  {0x2d0a, {1|U, {0x10aa}}},
+  {0x2d0b, {1|U, {0x10ab}}},
+  {0x2d0c, {1|U, {0x10ac}}},
+  {0x2d0d, {1|U, {0x10ad}}},
+  {0x2d0e, {1|U, {0x10ae}}},
+  {0x2d0f, {1|U, {0x10af}}},
+  {0x2d10, {1|U, {0x10b0}}},
+  {0x2d11, {1|U, {0x10b1}}},
+  {0x2d12, {1|U, {0x10b2}}},
+  {0x2d13, {1|U, {0x10b3}}},
+  {0x2d14, {1|U, {0x10b4}}},
+  {0x2d15, {1|U, {0x10b5}}},
+  {0x2d16, {1|U, {0x10b6}}},
+  {0x2d17, {1|U, {0x10b7}}},
+  {0x2d18, {1|U, {0x10b8}}},
+  {0x2d19, {1|U, {0x10b9}}},
+  {0x2d1a, {1|U, {0x10ba}}},
+  {0x2d1b, {1|U, {0x10bb}}},
+  {0x2d1c, {1|U, {0x10bc}}},
+  {0x2d1d, {1|U, {0x10bd}}},
+  {0x2d1e, {1|U, {0x10be}}},
+  {0x2d1f, {1|U, {0x10bf}}},
+  {0x2d20, {1|U, {0x10c0}}},
+  {0x2d21, {1|U, {0x10c1}}},
+  {0x2d22, {1|U, {0x10c2}}},
+  {0x2d23, {1|U, {0x10c3}}},
+  {0x2d24, {1|U, {0x10c4}}},
+  {0x2d25, {1|U, {0x10c5}}},
+  {0x2d27, {1|U, {0x10c7}}},
+  {0x2d2d, {1|U, {0x10cd}}},
+  {0xa641, {1|U, {0xa640}}},
+  {0xa643, {1|U, {0xa642}}},
+  {0xa645, {1|U, {0xa644}}},
+  {0xa647, {1|U, {0xa646}}},
+  {0xa649, {1|U, {0xa648}}},
+  {0xa64b, {2|U, {0xa64a, 0x1c88}}},
+  {0xa64d, {1|U, {0xa64c}}},
+  {0xa64f, {1|U, {0xa64e}}},
+  {0xa651, {1|U, {0xa650}}},
+  {0xa653, {1|U, {0xa652}}},
+  {0xa655, {1|U, {0xa654}}},
+  {0xa657, {1|U, {0xa656}}},
+  {0xa659, {1|U, {0xa658}}},
+  {0xa65b, {1|U, {0xa65a}}},
+  {0xa65d, {1|U, {0xa65c}}},
+  {0xa65f, {1|U, {0xa65e}}},
+  {0xa661, {1|U, {0xa660}}},
+  {0xa663, {1|U, {0xa662}}},
+  {0xa665, {1|U, {0xa664}}},
+  {0xa667, {1|U, {0xa666}}},
+  {0xa669, {1|U, {0xa668}}},
+  {0xa66b, {1|U, {0xa66a}}},
+  {0xa66d, {1|U, {0xa66c}}},
+  {0xa681, {1|U, {0xa680}}},
+  {0xa683, {1|U, {0xa682}}},
+  {0xa685, {1|U, {0xa684}}},
+  {0xa687, {1|U, {0xa686}}},
+  {0xa689, {1|U, {0xa688}}},
+  {0xa68b, {1|U, {0xa68a}}},
+  {0xa68d, {1|U, {0xa68c}}},
+  {0xa68f, {1|U, {0xa68e}}},
+  {0xa691, {1|U, {0xa690}}},
+  {0xa693, {1|U, {0xa692}}},
+  {0xa695, {1|U, {0xa694}}},
+  {0xa697, {1|U, {0xa696}}},
+  {0xa699, {1|U, {0xa698}}},
+  {0xa69b, {1|U, {0xa69a}}},
+  {0xa723, {1|U, {0xa722}}},
+  {0xa725, {1|U, {0xa724}}},
+  {0xa727, {1|U, {0xa726}}},
+  {0xa729, {1|U, {0xa728}}},
+  {0xa72b, {1|U, {0xa72a}}},
+  {0xa72d, {1|U, {0xa72c}}},
+  {0xa72f, {1|U, {0xa72e}}},
+  {0xa733, {1|U, {0xa732}}},
+  {0xa735, {1|U, {0xa734}}},
+  {0xa737, {1|U, {0xa736}}},
+  {0xa739, {1|U, {0xa738}}},
+  {0xa73b, {1|U, {0xa73a}}},
+  {0xa73d, {1|U, {0xa73c}}},
+  {0xa73f, {1|U, {0xa73e}}},
+  {0xa741, {1|U, {0xa740}}},
+  {0xa743, {1|U, {0xa742}}},
+  {0xa745, {1|U, {0xa744}}},
+  {0xa747, {1|U, {0xa746}}},
+  {0xa749, {1|U, {0xa748}}},
+  {0xa74b, {1|U, {0xa74a}}},
+  {0xa74d, {1|U, {0xa74c}}},
+  {0xa74f, {1|U, {0xa74e}}},
+  {0xa751, {1|U, {0xa750}}},
+  {0xa753, {1|U, {0xa752}}},
+  {0xa755, {1|U, {0xa754}}},
+  {0xa757, {1|U, {0xa756}}},
+  {0xa759, {1|U, {0xa758}}},
+  {0xa75b, {1|U, {0xa75a}}},
+  {0xa75d, {1|U, {0xa75c}}},
+  {0xa75f, {1|U, {0xa75e}}},
+  {0xa761, {1|U, {0xa760}}},
+  {0xa763, {1|U, {0xa762}}},
+  {0xa765, {1|U, {0xa764}}},
+  {0xa767, {1|U, {0xa766}}},
+  {0xa769, {1|U, {0xa768}}},
+  {0xa76b, {1|U, {0xa76a}}},
+  {0xa76d, {1|U, {0xa76c}}},
+  {0xa76f, {1|U, {0xa76e}}},
+  {0xa77a, {1|U, {0xa779}}},
+  {0xa77c, {1|U, {0xa77b}}},
+  {0xa77f, {1|U, {0xa77e}}},
+  {0xa781, {1|U, {0xa780}}},
+  {0xa783, {1|U, {0xa782}}},
+  {0xa785, {1|U, {0xa784}}},
+  {0xa787, {1|U, {0xa786}}},
+  {0xa78c, {1|U, {0xa78b}}},
+  {0xa791, {1|U, {0xa790}}},
+  {0xa793, {1|U, {0xa792}}},
+  {0xa797, {1|U, {0xa796}}},
+  {0xa799, {1|U, {0xa798}}},
+  {0xa79b, {1|U, {0xa79a}}},
+  {0xa79d, {1|U, {0xa79c}}},
+  {0xa79f, {1|U, {0xa79e}}},
+  {0xa7a1, {1|U, {0xa7a0}}},
+  {0xa7a3, {1|U, {0xa7a2}}},
+  {0xa7a5, {1|U, {0xa7a4}}},
+  {0xa7a7, {1|U, {0xa7a6}}},
+  {0xa7a9, {1|U, {0xa7a8}}},
+  {0xa7b5, {1|U, {0xa7b4}}},
+  {0xa7b7, {1|U, {0xa7b6}}},
+  {0xab53, {1|U, {0xa7b3}}},
+  {0xff41, {1|U, {0xff21}}},
+  {0xff42, {1|U, {0xff22}}},
+  {0xff43, {1|U, {0xff23}}},
+  {0xff44, {1|U, {0xff24}}},
+  {0xff45, {1|U, {0xff25}}},
+  {0xff46, {1|U, {0xff26}}},
+  {0xff47, {1|U, {0xff27}}},
+  {0xff48, {1|U, {0xff28}}},
+  {0xff49, {1|U, {0xff29}}},
+  {0xff4a, {1|U, {0xff2a}}},
+  {0xff4b, {1|U, {0xff2b}}},
+  {0xff4c, {1|U, {0xff2c}}},
+  {0xff4d, {1|U, {0xff2d}}},
+  {0xff4e, {1|U, {0xff2e}}},
+  {0xff4f, {1|U, {0xff2f}}},
+  {0xff50, {1|U, {0xff30}}},
+  {0xff51, {1|U, {0xff31}}},
+  {0xff52, {1|U, {0xff32}}},
+  {0xff53, {1|U, {0xff33}}},
+  {0xff54, {1|U, {0xff34}}},
+  {0xff55, {1|U, {0xff35}}},
+  {0xff56, {1|U, {0xff36}}},
+  {0xff57, {1|U, {0xff37}}},
+  {0xff58, {1|U, {0xff38}}},
+  {0xff59, {1|U, {0xff39}}},
+  {0xff5a, {1|U, {0xff3a}}},
+  {0x10428, {1|U, {0x10400}}},
+  {0x10429, {1|U, {0x10401}}},
+  {0x1042a, {1|U, {0x10402}}},
+  {0x1042b, {1|U, {0x10403}}},
+  {0x1042c, {1|U, {0x10404}}},
+  {0x1042d, {1|U, {0x10405}}},
+  {0x1042e, {1|U, {0x10406}}},
+  {0x1042f, {1|U, {0x10407}}},
+  {0x10430, {1|U, {0x10408}}},
+  {0x10431, {1|U, {0x10409}}},
+  {0x10432, {1|U, {0x1040a}}},
+  {0x10433, {1|U, {0x1040b}}},
+  {0x10434, {1|U, {0x1040c}}},
+  {0x10435, {1|U, {0x1040d}}},
+  {0x10436, {1|U, {0x1040e}}},
+  {0x10437, {1|U, {0x1040f}}},
+  {0x10438, {1|U, {0x10410}}},
+  {0x10439, {1|U, {0x10411}}},
+  {0x1043a, {1|U, {0x10412}}},
+  {0x1043b, {1|U, {0x10413}}},
+  {0x1043c, {1|U, {0x10414}}},
+  {0x1043d, {1|U, {0x10415}}},
+  {0x1043e, {1|U, {0x10416}}},
+  {0x1043f, {1|U, {0x10417}}},
+  {0x10440, {1|U, {0x10418}}},
+  {0x10441, {1|U, {0x10419}}},
+  {0x10442, {1|U, {0x1041a}}},
+  {0x10443, {1|U, {0x1041b}}},
+  {0x10444, {1|U, {0x1041c}}},
+  {0x10445, {1|U, {0x1041d}}},
+  {0x10446, {1|U, {0x1041e}}},
+  {0x10447, {1|U, {0x1041f}}},
+  {0x10448, {1|U, {0x10420}}},
+  {0x10449, {1|U, {0x10421}}},
+  {0x1044a, {1|U, {0x10422}}},
+  {0x1044b, {1|U, {0x10423}}},
+  {0x1044c, {1|U, {0x10424}}},
+  {0x1044d, {1|U, {0x10425}}},
+  {0x1044e, {1|U, {0x10426}}},
+  {0x1044f, {1|U, {0x10427}}},
+  {0x104d8, {1|U, {0x104b0}}},
+  {0x104d9, {1|U, {0x104b1}}},
+  {0x104da, {1|U, {0x104b2}}},
+  {0x104db, {1|U, {0x104b3}}},
+  {0x104dc, {1|U, {0x104b4}}},
+  {0x104dd, {1|U, {0x104b5}}},
+  {0x104de, {1|U, {0x104b6}}},
+  {0x104df, {1|U, {0x104b7}}},
+  {0x104e0, {1|U, {0x104b8}}},
+  {0x104e1, {1|U, {0x104b9}}},
+  {0x104e2, {1|U, {0x104ba}}},
+  {0x104e3, {1|U, {0x104bb}}},
+  {0x104e4, {1|U, {0x104bc}}},
+  {0x104e5, {1|U, {0x104bd}}},
+  {0x104e6, {1|U, {0x104be}}},
+  {0x104e7, {1|U, {0x104bf}}},
+  {0x104e8, {1|U, {0x104c0}}},
+  {0x104e9, {1|U, {0x104c1}}},
+  {0x104ea, {1|U, {0x104c2}}},
+  {0x104eb, {1|U, {0x104c3}}},
+  {0x104ec, {1|U, {0x104c4}}},
+  {0x104ed, {1|U, {0x104c5}}},
+  {0x104ee, {1|U, {0x104c6}}},
+  {0x104ef, {1|U, {0x104c7}}},
+  {0x104f0, {1|U, {0x104c8}}},
+  {0x104f1, {1|U, {0x104c9}}},
+  {0x104f2, {1|U, {0x104ca}}},
+  {0x104f3, {1|U, {0x104cb}}},
+  {0x104f4, {1|U, {0x104cc}}},
+  {0x104f5, {1|U, {0x104cd}}},
+  {0x104f6, {1|U, {0x104ce}}},
+  {0x104f7, {1|U, {0x104cf}}},
+  {0x104f8, {1|U, {0x104d0}}},
+  {0x104f9, {1|U, {0x104d1}}},
+  {0x104fa, {1|U, {0x104d2}}},
+  {0x104fb, {1|U, {0x104d3}}},
+  {0x10cc0, {1|U, {0x10c80}}},
+  {0x10cc1, {1|U, {0x10c81}}},
+  {0x10cc2, {1|U, {0x10c82}}},
+  {0x10cc3, {1|U, {0x10c83}}},
+  {0x10cc4, {1|U, {0x10c84}}},
+  {0x10cc5, {1|U, {0x10c85}}},
+  {0x10cc6, {1|U, {0x10c86}}},
+  {0x10cc7, {1|U, {0x10c87}}},
+  {0x10cc8, {1|U, {0x10c88}}},
+  {0x10cc9, {1|U, {0x10c89}}},
+  {0x10cca, {1|U, {0x10c8a}}},
+  {0x10ccb, {1|U, {0x10c8b}}},
+  {0x10ccc, {1|U, {0x10c8c}}},
+  {0x10ccd, {1|U, {0x10c8d}}},
+  {0x10cce, {1|U, {0x10c8e}}},
+  {0x10ccf, {1|U, {0x10c8f}}},
+  {0x10cd0, {1|U, {0x10c90}}},
+  {0x10cd1, {1|U, {0x10c91}}},
+  {0x10cd2, {1|U, {0x10c92}}},
+  {0x10cd3, {1|U, {0x10c93}}},
+  {0x10cd4, {1|U, {0x10c94}}},
+  {0x10cd5, {1|U, {0x10c95}}},
+  {0x10cd6, {1|U, {0x10c96}}},
+  {0x10cd7, {1|U, {0x10c97}}},
+  {0x10cd8, {1|U, {0x10c98}}},
+  {0x10cd9, {1|U, {0x10c99}}},
+  {0x10cda, {1|U, {0x10c9a}}},
+  {0x10cdb, {1|U, {0x10c9b}}},
+  {0x10cdc, {1|U, {0x10c9c}}},
+  {0x10cdd, {1|U, {0x10c9d}}},
+  {0x10cde, {1|U, {0x10c9e}}},
+  {0x10cdf, {1|U, {0x10c9f}}},
+  {0x10ce0, {1|U, {0x10ca0}}},
+  {0x10ce1, {1|U, {0x10ca1}}},
+  {0x10ce2, {1|U, {0x10ca2}}},
+  {0x10ce3, {1|U, {0x10ca3}}},
+  {0x10ce4, {1|U, {0x10ca4}}},
+  {0x10ce5, {1|U, {0x10ca5}}},
+  {0x10ce6, {1|U, {0x10ca6}}},
+  {0x10ce7, {1|U, {0x10ca7}}},
+  {0x10ce8, {1|U, {0x10ca8}}},
+  {0x10ce9, {1|U, {0x10ca9}}},
+  {0x10cea, {1|U, {0x10caa}}},
+  {0x10ceb, {1|U, {0x10cab}}},
+  {0x10cec, {1|U, {0x10cac}}},
+  {0x10ced, {1|U, {0x10cad}}},
+  {0x10cee, {1|U, {0x10cae}}},
+  {0x10cef, {1|U, {0x10caf}}},
+  {0x10cf0, {1|U, {0x10cb0}}},
+  {0x10cf1, {1|U, {0x10cb1}}},
+  {0x10cf2, {1|U, {0x10cb2}}},
+  {0x118c0, {1|U, {0x118a0}}},
+  {0x118c1, {1|U, {0x118a1}}},
+  {0x118c2, {1|U, {0x118a2}}},
+  {0x118c3, {1|U, {0x118a3}}},
+  {0x118c4, {1|U, {0x118a4}}},
+  {0x118c5, {1|U, {0x118a5}}},
+  {0x118c6, {1|U, {0x118a6}}},
+  {0x118c7, {1|U, {0x118a7}}},
+  {0x118c8, {1|U, {0x118a8}}},
+  {0x118c9, {1|U, {0x118a9}}},
+  {0x118ca, {1|U, {0x118aa}}},
+  {0x118cb, {1|U, {0x118ab}}},
+  {0x118cc, {1|U, {0x118ac}}},
+  {0x118cd, {1|U, {0x118ad}}},
+  {0x118ce, {1|U, {0x118ae}}},
+  {0x118cf, {1|U, {0x118af}}},
+  {0x118d0, {1|U, {0x118b0}}},
+  {0x118d1, {1|U, {0x118b1}}},
+  {0x118d2, {1|U, {0x118b2}}},
+  {0x118d3, {1|U, {0x118b3}}},
+  {0x118d4, {1|U, {0x118b4}}},
+  {0x118d5, {1|U, {0x118b5}}},
+  {0x118d6, {1|U, {0x118b6}}},
+  {0x118d7, {1|U, {0x118b7}}},
+  {0x118d8, {1|U, {0x118b8}}},
+  {0x118d9, {1|U, {0x118b9}}},
+  {0x118da, {1|U, {0x118ba}}},
+  {0x118db, {1|U, {0x118bb}}},
+  {0x118dc, {1|U, {0x118bc}}},
+  {0x118dd, {1|U, {0x118bd}}},
+  {0x118de, {1|U, {0x118be}}},
+  {0x118df, {1|U, {0x118bf}}},
+  {0x1e922, {1|U, {0x1e900}}},
+  {0x1e923, {1|U, {0x1e901}}},
+  {0x1e924, {1|U, {0x1e902}}},
+  {0x1e925, {1|U, {0x1e903}}},
+  {0x1e926, {1|U, {0x1e904}}},
+  {0x1e927, {1|U, {0x1e905}}},
+  {0x1e928, {1|U, {0x1e906}}},
+  {0x1e929, {1|U, {0x1e907}}},
+  {0x1e92a, {1|U, {0x1e908}}},
+  {0x1e92b, {1|U, {0x1e909}}},
+  {0x1e92c, {1|U, {0x1e90a}}},
+  {0x1e92d, {1|U, {0x1e90b}}},
+  {0x1e92e, {1|U, {0x1e90c}}},
+  {0x1e92f, {1|U, {0x1e90d}}},
+  {0x1e930, {1|U, {0x1e90e}}},
+  {0x1e931, {1|U, {0x1e90f}}},
+  {0x1e932, {1|U, {0x1e910}}},
+  {0x1e933, {1|U, {0x1e911}}},
+  {0x1e934, {1|U, {0x1e912}}},
+  {0x1e935, {1|U, {0x1e913}}},
+  {0x1e936, {1|U, {0x1e914}}},
+  {0x1e937, {1|U, {0x1e915}}},
+  {0x1e938, {1|U, {0x1e916}}},
+  {0x1e939, {1|U, {0x1e917}}},
+  {0x1e93a, {1|U, {0x1e918}}},
+  {0x1e93b, {1|U, {0x1e919}}},
+  {0x1e93c, {1|U, {0x1e91a}}},
+  {0x1e93d, {1|U, {0x1e91b}}},
+  {0x1e93e, {1|U, {0x1e91c}}},
+  {0x1e93f, {1|U, {0x1e91d}}},
+  {0x1e940, {1|U, {0x1e91e}}},
+  {0x1e941, {1|U, {0x1e91f}}},
+  {0x1e942, {1|U, {0x1e920}}},
+  {0x1e943, {1|U, {0x1e921}}},
+#define CaseUnfold_11_Locale (*(CaseUnfold_11_Type (*)[1])(CaseUnfold_11_Table+1266))
+  {0x0069, {1|U, {0x0049}}},
 };
 
-/* C code produced by gperf version 3.0.3 */
+/* ANSI-C code produced by gperf version 3.1 */
 /* Command-line: gperf -7 -k1,2,3 -F,-1 -c -j1 -i1 -t -T -E -C -H onigenc_unicode_CaseUnfold_11_hash -N onigenc_unicode_CaseUnfold_11_lookup -n  */
 
-/* maximum key range = 1907, duplicates = 0 */
+/* maximum key range = 2216, duplicates = 0 */
 
 #ifdef __GNUC__
@@ -3859,34 +4881,28 @@
   static const unsigned short asso_values[] =
     {
-         1, 1915,    4,   12,  199,  716,    4,  230,    6,  134,
-       355,  116,    9,    3,    7,   13, 1915, 1915, 1915, 1915,
-      1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915,
-      1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915,
-      1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915, 1915,
-      1915, 1915, 1915,   40, 1915, 1915, 1915, 1915, 1915, 1915,
-      1915, 1915,   21, 1915,    2,    1,   11,   49,   50,  667,
-       131,  651,   26,  872,  251, 1136,   24,   42,  295, 1145,
-       111,   27,   47,   12,  812,  806,  107,  786,   21, 1070,
-        13,  967,   41,    5,  523, 1152,   71, 1077,   73,  948,
-        14,  601,   10,  575,   15,  764,    1,  929,   27, 1057,
-        23,  498,   15,  918, 1208,  753, 1211,  512, 1180,  736,
-      1082,  711,  441,  898,  410, 1028,  277,  887,  238,  684,
-       336,  425,  740,  406, 1016,  360,  972,  382, 1006,  354,
-      1168,  302,  999,  286,  901,  252,  546,  106, 1159,  148,
-      1121,  224, 1061,  132, 1152,  182,  871,  210, 1163,  235,
-      1183,  371, 1197,   64,  954,   90,  339,   79,  604,  168,
-       982,  159,  448,  328,  525,  634,  195,  620,  261,  852,
-       934,  312,  210,  836,  668,  983,  586,  823,  460,  955,
-      1176,  697,  119,  998
+         1, 2219,    2,   14,    4,  807,    9,  379,   10,  179,
+        70,  161,    2,    3,  411,    4, 2219, 2219, 2219, 2219,
+      2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219,   80,
+      2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219, 2219,
+      2219, 2219, 2219,    1, 2219, 2219, 2219, 2219, 2219, 2219,
+      2219, 2219, 2219,  210, 2219, 2219, 2219, 2219, 2219, 2219,
+      2219, 2219,   53, 2219,    7,    8,  306,  607,  169,  844,
+       431,  722,  125, 1047,  489, 1394,   15,   16,  324, 1361,
+       140,  521,   47,  461,  221,  985,   70,  965,    9, 1085,
+        51, 1029,  223,   11,  430, 1168,  122, 1457,  344,  930,
+        91,  711,   31,  651,  157,  772,  224,  876,  262,  900,
+       254,  686,  221,  830, 1335,  755,  432,  623, 1382,  675,
+      1275,  587,   99,  821, 1530,  958,  195,  810, 1518,  739,
+       330,  361,  767,  313,  941,  400,  925,  384, 1142,  295,
+      1295,  242, 1103,  229, 1082,  206, 1066,  104, 1317,  137,
+      1249,  263, 1229,  115, 1154,   71,  135,   60, 1211,  158,
+      1472,  175, 1232,    1, 1345,   27, 1269,   38, 1111,   87,
+      1189,   49, 1256,  503, 1157,  574, 1410,  556, 1200,  787,
+       948,  486, 1316,  797, 1218, 1044, 1282, 1007, 1126,  996,
+       818, 1019,  218, 1072
     };
   return asso_values[bits_of(code, 2)+66] + asso_values[bits_of(code, 1)+4] + asso_values[bits_of(code, 0)];
 }
 
-#ifdef __GNUC__
-__inline
-#ifdef __GNUC_STDC_INLINE__
-__attribute__ ((__gnu_inline__))
-#endif
-#endif
 static const CodePointList3 *
 onigenc_unicode_CaseUnfold_11_lookup(const OnigCodePoint code)
@@ -3895,1401 +4911,1687 @@
     {
       MIN_CODE_VALUE = 0x61,
-      MAX_CODE_VALUE = 0x118df,
-      TOTAL_KEYWORDS = 1055,
+      MAX_CODE_VALUE = 0x1e943,
+      TOTAL_KEYWORDS = 1267,
       MIN_WORD_LENGTH = 3,
       MAX_WORD_LENGTH = 3,
-      MIN_HASH_VALUE = 8,
-      MAX_HASH_VALUE = 1914
+      MIN_HASH_VALUE = 3,
+      MAX_HASH_VALUE = 2218
     };
 
   static const short wordlist[] =
     {
-      -1, -1, -1, -1, -1, -1,
-      -1, -1,
-      /*0x1e1b*/ 490,
-      /*0x049b*/ 362,
+      -1, -1, -1,
+      /*0x13e1*/ 542,
+      /*0x0461*/ 339,
+      /*0x04e1*/ 399,
+      /*0x0061*/ 0,
+      -1,
+      /*0x104e1*/ 1122,
+      /*0x1e61*/ 613,
+      /*0x1ee1*/ 672,
+      /*0x0161*/ 102,
+      /*0x0261*/ 210,
+      /*0x2ce1*/ 904,
+      -1,
+      /*0x049b*/ 364,
+      -1, -1,
+      /*0x24e1*/ 792,
+      /*0x1e1b*/ 578,
+      /*0x048b*/ 356,
       /*0x011b*/ 69,
-      /*0x2c9b*/ 781,
       /*0x021b*/ 178,
-      /*0x051b*/ 426,
-      /*0x1e91*/ 549,
-      /*0x1e11*/ 485,
-      /*0x0491*/ 357,
+      /*0x2c9b*/ 869,
+      /*0x1e0b*/ 570,
+      /*0x1e8b*/ 634,
+      /*0x010b*/ 61,
+      /*0x020b*/ 170,
+      /*0x2c8b*/ 861,
+      /*0x13e3*/ 544,
+      /*0x0463*/ 340,
+      /*0x04e3*/ 400,
+      /*0x0063*/ 2,
+      /*0x13a4*/ 481,
+      /*0x104e3*/ 1124,
+      /*0x1e63*/ 614,
+      /*0x1ee3*/ 673,
+      /*0x0163*/ 103,
+      /*0x0263*/ 211,
+      /*0x2ce3*/ 905,
+      /*0x13e5*/ 546,
+      /*0x0465*/ 341,
+      /*0x04e5*/ 401,
+      /*0x0065*/ 4,
+      /*0x24e3*/ 794,
+      /*0x104e5*/ 1126,
+      /*0x1e65*/ 615,
+      /*0x1ee5*/ 674,
+      /*0x0165*/ 104,
+      /*0x0265*/ 212,
+      /*0xa761*/ 1016,
+      /*0x13e9*/ 550,
+      /*0x0469*/ 343,
+      /*0x04e9*/ 403,
+      /*0x0069*/ 1266,
+      /*0x24e5*/ 796,
+      /*0x104e9*/ 1130,
+      /*0x1e69*/ 617,
+      /*0x1ee9*/ 676,
+      /*0x0169*/ 106,
+      /*0x0269*/ 215,
+      -1,
+      /*0x13db*/ 536,
+      /*0x045b*/ 334,
+      /*0x04db*/ 396,
+      -1,
+      /*0x24e9*/ 800,
+      /*0x104db*/ 1116,
+      /*0x1e5b*/ 610,
+      /*0x1edb*/ 669,
+      /*0x015b*/ 99,
+      /*0x025b*/ 207,
+      /*0x2cdb*/ 901,
+      /*0x13d9*/ 534,
+      /*0x0459*/ 332,
+      /*0x04d9*/ 395,
+      /*0xa763*/ 1017,
+      /*0x24db*/ 786,
+      /*0x104d9*/ 1114,
+      /*0x1e59*/ 609,
+      /*0x1ed9*/ 668,
+      /*0x0159*/ 98,
+      /*0x0259*/ 206,
+      /*0x2cd9*/ 900,
+      -1,
+      /*0x10ce1*/ 1182,
+      -1,
+      /*0xa765*/ 1018,
+      /*0x24d9*/ 784,
+      /*0x13e7*/ 548,
+      /*0x0467*/ 342,
+      /*0x04e7*/ 402,
+      /*0x0067*/ 6,
+      /*0x13a2*/ 479,
+      /*0x104e7*/ 1128,
+      /*0x1e67*/ 616,
+      /*0x1ee7*/ 675,
+      /*0x0167*/ 105,
+      /*0xa769*/ 1020,
+      -1, -1,
+      /*0x13b8*/ 501,
+      /*0x0438*/ 299,
+      -1,
+      /*0x24e7*/ 798,
+      /*0x10438*/ 1089,
+      /*0x13d1*/ 526,
+      /*0x0451*/ 324,
+      /*0x04d1*/ 391,
+      /*0xa75b*/ 1013,
+      -1,
+      /*0x10ce3*/ 1184,
+      /*0x1e51*/ 605,
+      /*0x1ed1*/ 664,
+      /*0x0151*/ 94,
+      /*0x0251*/ 200,
+      /*0x2cd1*/ 896,
+      /*0x13d7*/ 532,
+      /*0x0457*/ 330,
+      /*0x04d7*/ 394,
+      /*0xa759*/ 1012,
+      /*0x24d1*/ 776,
+      /*0x10ce5*/ 1186,
+      /*0x1e57*/ 608,
+      /*0x1ed7*/ 667,
+      /*0x0157*/ 97,
+      /*0x0257*/ 205,
+      /*0x2cd7*/ 899,
+      -1, -1,
+      /*0x0586*/ 476,
+      -1,
+      /*0x24d7*/ 782,
+      /*0x10ce9*/ 1190,
+      -1, -1,
+      /*0xa767*/ 1019,
+      /*0x13da*/ 535,
+      /*0x045a*/ 333,
+      /*0x13d3*/ 528,
+      /*0x0453*/ 326,
+      /*0x04d3*/ 392,
+      /*0x104da*/ 1115,
+      /*0xa661*/ 965,
+      /*0x10cdb*/ 1176,
+      /*0x1e53*/ 606,
+      /*0x1ed3*/ 665,
+      /*0x0153*/ 95,
+      /*0x0253*/ 202,
+      /*0x2cd3*/ 897,
+      -1, -1,
+      /*0x24da*/ 785,
+      /*0xa751*/ 1008,
+      /*0x24d3*/ 778,
+      /*0x10cd9*/ 1174,
+      -1, -1, -1,
+      /*0x13a6*/ 483,
+      /*0x13dd*/ 538,
+      /*0x045d*/ 336,
+      /*0x04dd*/ 397,
+      /*0x03e1*/ 279,
+      /*0xa757*/ 1011,
+      /*0x104dd*/ 1118,
+      /*0x1e5d*/ 611,
+      /*0x1edd*/ 670,
+      /*0x015d*/ 100,
+      /*0xa663*/ 966,
+      /*0x2cdd*/ 902,
+      /*0x10ce7*/ 1188,
+      -1, -1,
+      /*0x0582*/ 472,
+      /*0x24dd*/ 788,
+      -1,
+      /*0x13df*/ 540,
+      /*0x045f*/ 338,
+      /*0x04df*/ 398,
+      /*0xa665*/ 967,
+      -1,
+      /*0x104df*/ 1120,
+      /*0x1e5f*/ 612,
+      /*0x1edf*/ 671,
+      /*0x015f*/ 101,
+      /*0xa753*/ 1009,
+      /*0x2cdf*/ 903,
+      /*0x10cd1*/ 1166,
+      /*0x03e3*/ 280,
+      /*0xab53*/ 1046,
+      /*0xa669*/ 969,
+      /*0x24df*/ 790,
+      -1, -1,
+      /*0x028a*/ 229,
+      /*0x028b*/ 230,
+      /*0x13bc*/ 505,
+      /*0x043c*/ 303,
+      /*0x10cd7*/ 1172,
+      /*0x03e5*/ 281,
+      /*0x1043c*/ 1093,
+      /*0xa65b*/ 962,
+      -1, -1,
+      /*0x013c*/ 84,
+      /*0x023c*/ 190,
+      /*0xa75d*/ 1014,
+      /*0x13cf*/ 524,
+      /*0x044f*/ 322,
+      /*0x04cf*/ 390,
+      /*0x03e9*/ 283,
+      /*0x1044f*/ 1112,
+      /*0xa659*/ 961,
+      /*0x1e4f*/ 604,
+      /*0x1ecf*/ 663,
+      /*0x014f*/ 93,
+      /*0x024f*/ 198,
+      /*0x2ccf*/ 895,
+      /*0x10cda*/ 1175,
+      -1,
+      /*0x10cd3*/ 1168,
+      /*0x03db*/ 276,
+      /*0x13ae*/ 491,
+      /*0xa75f*/ 1015,
+      /*0x2c61*/ 848,
+      /*0x13a8*/ 485,
+      /*0x1042e*/ 1079,
+      /*0x017e*/ 116,
+      /*0xa667*/ 968,
+      /*0x10428*/ 1073,
+      /*0x13cd*/ 522,
+      /*0x044d*/ 320,
+      /*0x03d9*/ 275,
+      -1,
+      /*0x1044d*/ 1110,
+      -1,
+      /*0x1e4d*/ 603,
+      /*0x1ecd*/ 662,
+      /*0x014d*/ 92,
+      /*0x024d*/ 197,
+      /*0x2ccd*/ 894,
+      /*0x10cdd*/ 1178,
+      -1,
+      /*0x13cb*/ 520,
+      /*0x044b*/ 318,
+      /*0xa651*/ 957,
+      -1,
+      /*0x1044b*/ 1108,
+      /*0x03e7*/ 282,
+      /*0x1e4b*/ 602,
+      /*0x1ecb*/ 661,
+      /*0x014b*/ 91,
+      /*0x024b*/ 196,
+      /*0x2ccb*/ 893,
+      /*0xa74f*/ 1007,
+      /*0x13ac*/ 489,
+      /*0xa657*/ 960,
+      -1,
+      /*0x10cdf*/ 1180,
+      /*0x1042c*/ 1077,
+      /*0x03b8*/ 252,
+      /*0x2c65*/ 849,
+      -1,
+      /*0x13aa*/ 487,
+      /*0x13d5*/ 530,
+      /*0x0455*/ 328,
+      /*0x04d5*/ 393,
+      /*0x1042a*/ 1075,
+      -1, -1,
+      /*0x1e55*/ 607,
+      /*0x1ed5*/ 666,
+      /*0x0155*/ 96,
+      /*0x118db*/ 1227,
+      /*0x2cd5*/ 898,
+      -1,
+      /*0x03d7*/ 274,
+      /*0xa74d*/ 1006,
+      /*0xa653*/ 958,
+      /*0x24d5*/ 780,
+      -1, -1, -1,
+      /*0x2c5b*/ 844,
+      /*0x118d9*/ 1225,
+      -1, -1, -1, -1,
+      /*0x10ccf*/ 1164,
+      /*0xa74b*/ 1005,
+      -1, -1, -1,
+      /*0x2c59*/ 842,
+      -1,
+      /*0x13c9*/ 518,
+      /*0x0449*/ 316,
+      -1,
+      /*0xa65d*/ 963,
+      /*0x10449*/ 1106,
+      /*0x029e*/ 234,
+      /*0x1e49*/ 601,
+      /*0x1ec9*/ 660,
+      -1,
+      /*0x0249*/ 195,
+      /*0x2cc9*/ 892,
+      /*0x1f61*/ 729,
+      -1, -1,
+      /*0x0580*/ 470,
+      /*0xa755*/ 1010,
+      /*0x10ccd*/ 1162,
+      -1,
+      /*0x13c3*/ 512,
+      /*0x0443*/ 310,
+      /*0xa65f*/ 964,
+      /*0x118d1*/ 1217,
+      /*0x10443*/ 1100,
+      /*0x03dd*/ 277,
+      /*0x1e43*/ 598,
+      /*0x1ec3*/ 657,
+      /*0x2c38*/ 809,
+      -1,
+      /*0x2cc3*/ 889,
+      /*0x10ccb*/ 1160,
+      -1,
+      /*0x2c51*/ 834,
+      /*0x118d7*/ 1223,
+      -1, -1,
+      /*0x13c0*/ 509,
+      /*0x0440*/ 307,
+      /*0x1f63*/ 731,
+      -1,
+      /*0x10440*/ 1097,
+      /*0x03df*/ 278,
+      /*0x1f24*/ 706,
+      /*0x2c57*/ 840,
+      /*0x0140*/ 86,
+      /*0x0240*/ 192,
+      -1, -1,
+      /*0xa749*/ 1004,
+      /*0x1f65*/ 733,
+      /*0x13a0*/ 477,
+      /*0x10cd5*/ 1170,
+      /*0xa64f*/ 956,
+      /*0x118da*/ 1226,
+      -1,
+      /*0x118d3*/ 1219,
+      -1, -1,
+      /*0x1f10*/ 696,
+      -1, -1,
+      /*0x03bc*/ 256,
+      -1,
+      /*0x2c5a*/ 843,
+      -1,
+      /*0x2c53*/ 836,
+      /*0xa743*/ 1001,
+      /*0x13c1*/ 510,
+      /*0x0441*/ 308,
+      -1, -1,
+      /*0x10441*/ 1098,
+      -1,
+      /*0x1e41*/ 597,
+      /*0x1ec1*/ 656,
+      /*0xa64d*/ 955,
+      /*0x118dd*/ 1229,
+      /*0x2cc1*/ 888,
+      -1, -1, -1,
+      /*0x1f14*/ 700,
+      -1,
+      /*0x10cc9*/ 1158,
+      -1,
+      /*0x01e1*/ 151,
+      /*0x2c5d*/ 846,
+      /*0x03ae*/ 243,
+      /*0xa64b*/ 954,
+      -1,
+      /*0x13c7*/ 516,
+      /*0x0447*/ 314,
+      -1,
+      /*0x118df*/ 1231,
+      /*0x10447*/ 1104,
+      /*0x03cd*/ 272,
+      /*0x1e47*/ 600,
+      /*0x1ec7*/ 659,
+      /*0x1f67*/ 735,
+      /*0x0247*/ 194,
+      /*0x2cc7*/ 891,
+      /*0x10cc3*/ 1152,
+      /*0x1f22*/ 704,
+      -1, -1,
+      /*0x0292*/ 232,
+      /*0x13c5*/ 514,
+      /*0x0445*/ 312,
+      /*0x03cb*/ 270,
+      /*0xa655*/ 959,
+      /*0x10445*/ 1102,
+      /*0x01e3*/ 152,
+      /*0x1e45*/ 599,
+      /*0x1ec5*/ 658,
+      /*0xa741*/ 1000,
+      /*0x1f51*/ 724,
+      /*0x2cc5*/ 890,
+      /*0x0561*/ 439,
+      /*0x10cc0*/ 1149,
+      /*0xff59*/ 1071,
+      /*0x03ac*/ 241,
+      -1,
+      /*0x01e5*/ 153,
+      /*0x2c3c*/ 813,
+      /*0x118cf*/ 1215,
+      -1,
+      /*0x1f57*/ 727,
+      /*0x051b*/ 428,
+      -1, -1, -1, -1,
+      /*0x050b*/ 420,
+      /*0x01e9*/ 155,
+      /*0x2c4f*/ 832,
+      -1,
+      /*0x1f06*/ 694,
+      /*0xa747*/ 1003,
+      /*0x13b2*/ 495,
+      /*0x0432*/ 293,
+      /*0x0584*/ 474,
+      /*0xa649*/ 953,
+      /*0x10432*/ 1083,
+      /*0x0563*/ 441,
+      /*0x2d16*/ 931,
+      -1,
+      /*0x2d1b*/ 936,
+      /*0x118cd*/ 1213,
+      /*0x1f53*/ 725,
+      /*0x10cc1*/ 1150,
+      /*0x2d0a*/ 919,
+      /*0x2d0b*/ 920,
+      /*0xff51*/ 1063,
+      /*0xa745*/ 1002,
+      /*0x0565*/ 443,
+      -1, -1,
+      /*0x2c4d*/ 830,
+      -1,
+      /*0xa643*/ 950,
+      /*0x118cb*/ 1211,
+      /*0x03c9*/ 268,
+      -1,
+      /*0xff57*/ 1069,
+      -1,
+      /*0x0569*/ 447,
+      /*0x2d24*/ 945,
+      -1,
+      /*0x1f26*/ 708,
+      /*0x0491*/ 359,
+      /*0x2c4b*/ 828,
+      /*0x01e7*/ 154,
+      /*0x10cc7*/ 1156,
+      /*0x1e11*/ 573,
+      /*0x1e91*/ 637,
       /*0x0111*/ 64,
-      /*0x2c91*/ 776,
       /*0x0211*/ 173,
-      /*0x0511*/ 421,
-      /*0xa79b*/ 948,
-      /*0x1f24*/ 618,
-      /*0x1f00*/ 600,
-      /*0x1f11*/ 609,
-      /*0x0580*/ 468,
-      /*0x1f22*/ 616,
-      /*0x1f26*/ 620,
-      /*0xa791*/ 944,
-      /*0x1e8f*/ 548,
-      /*0x1e0f*/ 484,
-      /*0x048f*/ 356,
+      /*0x2c91*/ 864,
+      /*0xa79b*/ 1036,
+      /*0x03c3*/ 262,
+      /*0x1f02*/ 690,
+      /*0x118d5*/ 1221,
+      /*0x2d10*/ 925,
+      /*0xff5a*/ 1072,
+      /*0x1e924*/ 1234,
+      /*0xff53*/ 1065,
+      /*0x2d18*/ 933,
+      -1,
+      /*0x10cc5*/ 1154,
+      -1,
+      /*0x0280*/ 224,
+      /*0x2c55*/ 838,
+      /*0x13f3*/ 560,
+      /*0x0473*/ 348,
+      /*0x04f3*/ 408,
+      /*0x0073*/ 17,
+      /*0x03c0*/ 260,
+      /*0x104f3*/ 1140,
+      /*0x1e73*/ 622,
+      /*0x1ef3*/ 681,
+      /*0x0173*/ 111,
+      -1,
+      /*0x2cf3*/ 908,
+      /*0x0567*/ 445,
+      -1,
+      /*0x2d14*/ 929,
+      /*0x019e*/ 126,
+      /*0xa641*/ 949,
+      /*0x028c*/ 231,
+      /*0x13eb*/ 552,
+      /*0x046b*/ 344,
+      /*0x04eb*/ 404,
+      /*0x006b*/ 9,
+      /*0x118c9*/ 1209,
+      /*0x104eb*/ 1132,
+      /*0x1e6b*/ 618,
+      /*0x1eeb*/ 677,
+      /*0x016b*/ 107,
+      /*0x026b*/ 217,
+      /*0x01da*/ 147,
+      -1, -1, -1,
+      /*0x2c49*/ 826,
+      -1, -1,
+      /*0x2d22*/ 943,
+      /*0x03c1*/ 261,
+      -1,
+      /*0x048f*/ 358,
+      /*0xa647*/ 952,
+      /*0x118c3*/ 1203,
+      /*0x1f12*/ 698,
+      /*0x1e0f*/ 572,
+      /*0x1e8f*/ 636,
       /*0x010f*/ 63,
-      /*0x2c8f*/ 775,
       /*0x020f*/ 172,
-      /*0x050f*/ 420,
-      /*0xa69b*/ 897,
-      -1,
-      /*0x1f06*/ 606,
-      -1,
-      /*0x0586*/ 474,
-      -1, -1,
-      /*0xa691*/ 892,
-      /*0x1e8b*/ 546,
-      /*0x1e0b*/ 482,
-      /*0x048b*/ 354,
-      /*0x010b*/ 61,
-      /*0x2c8b*/ 773,
-      /*0x020b*/ 170,
-      /*0x050b*/ 418,
-      /*0x1e81*/ 541,
-      /*0x1e01*/ 477,
-      /*0x0481*/ 353,
+      /*0x2c8f*/ 863,
+      /*0xa69b*/ 985,
+      -1, -1,
+      /*0x2c43*/ 820,
+      /*0x01dd*/ 149,
+      /*0xa68b*/ 977,
+      /*0x1e922*/ 1232,
+      -1,
+      /*0xa645*/ 951,
+      -1,
+      /*0x118c0*/ 1200,
+      -1,
+      /*0x03c7*/ 266,
+      -1,
+      /*0x1e938*/ 1254,
+      -1,
+      /*0xff4f*/ 1061,
+      -1,
+      /*0xa76b*/ 1021,
+      /*0x2d1e*/ 939,
+      /*0x2c40*/ 817,
+      /*0x01df*/ 150,
+      /*0x2d06*/ 915,
+      /*0x0373*/ 236,
+      /*0x13ef*/ 556,
+      /*0x046f*/ 346,
+      /*0x04ef*/ 406,
+      /*0x006f*/ 13,
+      /*0x03c5*/ 264,
+      /*0x104ef*/ 1136,
+      /*0x1e6f*/ 620,
+      /*0x1eef*/ 679,
+      /*0x016f*/ 109,
+      /*0x026f*/ 219,
+      -1, -1,
+      /*0x1f55*/ 726,
+      /*0x2d0e*/ 923,
+      -1,
+      /*0xff4d*/ 1059,
+      -1,
+      /*0x118c1*/ 1201,
+      /*0x13ed*/ 554,
+      /*0x046d*/ 345,
+      /*0x04ed*/ 405,
+      /*0x006d*/ 11,
+      -1,
+      /*0x104ed*/ 1134,
+      /*0x1e6d*/ 619,
+      /*0x1eed*/ 678,
+      /*0x016d*/ 108,
+      /*0x2c41*/ 818,
+      /*0xff4b*/ 1057,
+      /*0x10ceb*/ 1192,
+      -1,
+      /*0x13b7*/ 500,
+      /*0x0437*/ 298,
+      /*0x04b7*/ 378,
+      -1,
+      /*0x10437*/ 1088,
+      /*0x03b2*/ 246,
+      /*0x1e37*/ 592,
+      /*0x1eb7*/ 651,
+      /*0x0137*/ 82,
+      /*0x118c7*/ 1207,
+      /*0x2cb7*/ 883,
+      /*0x2d02*/ 911,
+      /*0x0192*/ 122,
+      -1,
+      /*0x019a*/ 125,
+      /*0x01a8*/ 130,
+      /*0xa76f*/ 1023,
+      /*0x1e926*/ 1236,
+      /*0xff55*/ 1067,
+      /*0x2c47*/ 824,
+      /*0x1fe1*/ 755,
+      -1,
+      /*0x0481*/ 355,
+      /*0x0581*/ 471,
+      /*0x1f00*/ 688,
+      /*0x118c5*/ 1205,
+      /*0x1e01*/ 565,
+      /*0x1e81*/ 629,
       /*0x0101*/ 56,
-      /*0x2c81*/ 768,
       /*0x0201*/ 165,
-      /*0x0501*/ 413,
-      /*0xa68f*/ 891,
-      /*0x1f10*/ 608,
-      -1,
-      /*0x1f01*/ 601,
-      /*0x1f02*/ 602,
-      /*0x0581*/ 469,
-      /*0x0582*/ 470,
-      /*0xa781*/ 939,
-      /*0x1ee1*/ 584,
-      /*0x1e61*/ 525,
-      /*0x04e1*/ 397,
-      /*0x0161*/ 102,
-      /*0x2ce1*/ 816,
-      /*0x0261*/ 210,
-      /*0x0561*/ 437,
-      /*0xa68b*/ 889,
-      /*0x0461*/ 337,
-      -1,
-      /*0x1f61*/ 641,
-      -1, -1, -1,
-      /*0xa681*/ 884,
-      /*0x1ee5*/ 586,
-      /*0x1e65*/ 527,
-      /*0x04e5*/ 399,
-      /*0x0165*/ 104,
-      /*0x1f20*/ 614,
-      /*0x0265*/ 212,
-      /*0x0565*/ 441,
-      -1,
-      /*0x0465*/ 339,
-      -1,
-      /*0x1f65*/ 645,
-      /*0x1ee3*/ 585,
-      /*0x1e63*/ 526,
-      /*0x04e3*/ 398,
-      /*0x0163*/ 103,
-      /*0x2ce3*/ 817,
-      /*0x0263*/ 211,
-      /*0x0563*/ 439,
-      -1,
-      /*0x0463*/ 338,
-      -1,
-      /*0x1f63*/ 643,
-      -1, -1, -1,
-      /*0x2c61*/ 760,
-      /*0x24e1*/ 704,
-      /*0x1ed1*/ 576,
-      /*0x1e51*/ 517,
-      /*0x04d1*/ 389,
-      /*0x0151*/ 94,
-      /*0x2cd1*/ 808,
-      /*0x0251*/ 200,
-      /*0x1fe1*/ 667,
-      /*0xa761*/ 928,
-      /*0x0451*/ 322,
-      -1,
-      /*0x1f51*/ 636,
-      /*0x1f14*/ 612,
-      -1,
-      /*0x2c65*/ 761,
-      /*0x24e5*/ 708,
-      -1,
-      /*0x017e*/ 116,
-      -1, -1,
-      /*0x057e*/ 466,
-      -1,
-      /*0x1fe5*/ 668,
-      /*0xa765*/ 930,
-      -1,
-      /*0x03ae*/ 241,
-      /*0x24e3*/ 706,
-      /*0x1ed7*/ 579,
-      /*0x1e57*/ 520,
-      /*0x04d7*/ 392,
-      /*0x0157*/ 97,
-      /*0x2cd7*/ 811,
-      /*0x0257*/ 205,
-      /*0x03ac*/ 239,
-      /*0xa763*/ 929,
-      /*0x0457*/ 328,
-      /*0x1f04*/ 604,
-      /*0x1f57*/ 639,
-      /*0x0584*/ 472,
-      /*0x0280*/ 223,
-      -1,
-      /*0x2c51*/ 746,
-      /*0x24d1*/ 688,
-      /*0x1ed3*/ 577,
-      /*0x1e53*/ 518,
-      /*0x04d3*/ 390,
-      /*0x0153*/ 95,
-      /*0x2cd3*/ 809,
-      /*0x0253*/ 202,
-      /*0x1fd1*/ 665,
-      /*0xa751*/ 920,
-      /*0x0453*/ 324,
-      /*0x028a*/ 228,
-      /*0x1f53*/ 637,
-      /*0x1ee9*/ 588,
-      /*0x1e69*/ 529,
-      /*0x04e9*/ 401,
-      /*0x0169*/ 106,
-      -1,
-      /*0x0269*/ 215,
-      /*0x0569*/ 445,
-      -1,
-      /*0x0469*/ 341,
-      /*0x1ee7*/ 587,
-      /*0x1e67*/ 528,
-      /*0x04e7*/ 400,
-      /*0x0167*/ 105,
-      /*0x2c57*/ 752,
-      /*0x24d7*/ 694,
-      /*0x0567*/ 443,
-      /*0x028b*/ 229,
-      /*0x0467*/ 340,
-      /*0xa661*/ 877,
-      /*0x1f67*/ 647,
-      /*0x03e1*/ 277,
-      -1,
-      /*0xa757*/ 923,
-      /*0x1ed9*/ 580,
-      /*0x1e59*/ 521,
-      /*0x04d9*/ 393,
-      /*0x0159*/ 98,
-      /*0x2cd9*/ 812,
-      /*0x0259*/ 206,
-      /*0x2c53*/ 748,
-      /*0x24d3*/ 690,
-      /*0x0459*/ 330,
-      -1,
-      /*0xa665*/ 879,
-      -1,
-      /*0x03e5*/ 279,
-      -1, -1,
-      /*0xa753*/ 921,
-      -1,
-      /*0x2cee*/ 819,
-      /*0x24e9*/ 712,
-      /*0x056e*/ 450,
-      -1,
-      /*0xa663*/ 878,
-      /*0x029e*/ 232,
-      /*0x03e3*/ 278,
-      -1,
-      /*0x10428*/ 982,
-      /*0xa769*/ 932,
-      /*0x24e7*/ 710,
-      /*0x1edb*/ 581,
-      /*0x1e5b*/ 522,
-      /*0x04db*/ 394,
-      /*0x015b*/ 99,
-      /*0x2cdb*/ 813,
-      /*0x025b*/ 207,
-      /*0x0574*/ 456,
-      /*0xa767*/ 931,
-      /*0x045b*/ 332,
-      /*0xa651*/ 869,
-      /*0x1f74*/ 652,
-      /*0x1042e*/ 988,
-      /*0x2c59*/ 754,
-      /*0x24d9*/ 696,
-      /*0x1ed5*/ 578,
-      /*0x1e55*/ 519,
-      /*0x04d5*/ 391,
-      /*0x0155*/ 96,
-      /*0x2cd5*/ 810,
-      /*0x1042c*/ 986,
-      /*0x01a8*/ 130,
-      /*0xa759*/ 924,
-      /*0x0455*/ 326,
-      /*0x1042a*/ 984,
-      /*0x1f55*/ 638,
-      /*0x1edd*/ 582,
-      /*0x1e5d*/ 523,
-      /*0x04dd*/ 395,
-      /*0x015d*/ 100,
-      /*0x2cdd*/ 814,
+      /*0x2c81*/ 856,
+      /*0x1f43*/ 721,
+      -1, -1,
+      /*0xa76d*/ 1022,
+      /*0x2c45*/ 822,
+      /*0x13b3*/ 496,
+      /*0x0433*/ 294,
+      /*0x04b3*/ 376,
+      -1,
+      /*0x10433*/ 1084,
+      /*0x057e*/ 468,
+      /*0x1e33*/ 590,
+      /*0x1eb3*/ 649,
+      /*0x0133*/ 80,
+      /*0x0233*/ 189,
+      /*0x2cb3*/ 881,
+      /*0xa737*/ 995,
+      /*0x1f40*/ 718,
+      -1,
+      /*0xff49*/ 1055,
+      /*0x10cef*/ 1196,
+      -1, -1, -1,
+      /*0x1e93c*/ 1258,
+      /*0xa66b*/ 970,
+      /*0x1fe5*/ 756,
+      -1,
+      /*0x03f3*/ 288,
+      -1,
+      /*0x217e*/ 772,
+      /*0x1f20*/ 702,
+      /*0x2d12*/ 927,
+      /*0x13a5*/ 482,
+      /*0x2d1a*/ 935,
+      /*0x04a5*/ 369,
+      /*0x2c32*/ 803,
+      /*0xff43*/ 1049,
+      /*0x10ced*/ 1194,
+      /*0x1e25*/ 583,
+      /*0x1ea5*/ 642,
+      /*0x0125*/ 74,
+      /*0x0225*/ 182,
+      /*0x2ca5*/ 874,
+      -1,
+      /*0x03eb*/ 284,
+      -1, -1,
+      /*0x1f41*/ 719,
+      /*0x0288*/ 227,
+      /*0x1e92e*/ 1244,
+      -1,
+      /*0xa733*/ 993,
+      /*0x1e928*/ 1238,
+      -1,
+      /*0x01c9*/ 139,
+      -1,
+      /*0x13b5*/ 498,
+      /*0x0435*/ 296,
+      /*0x04b5*/ 377,
+      -1,
+      /*0x10435*/ 1086,
+      -1,
+      /*0x1e35*/ 591,
+      /*0x1eb5*/ 650,
+      /*0x0135*/ 81,
       /*0x0180*/ 117,
+      /*0x2cb5*/ 882,
+      /*0x13ad*/ 490,
+      -1,
+      /*0x04ad*/ 373,
+      -1,
+      /*0x1042d*/ 1078,
+      -1,
+      /*0x1e2d*/ 587,
+      /*0x1ead*/ 646,
+      /*0x012d*/ 78,
+      /*0x022d*/ 186,
+      /*0x2cad*/ 878,
+      -1,
+      /*0xa725*/ 987,
+      -1, -1,
+      /*0x1e92c*/ 1242,
+      /*0x018c*/ 121,
+      /*0xff41*/ 1047,
+      -1,
+      /*0x1f45*/ 723,
+      -1, -1,
+      /*0x2c73*/ 854,
+      /*0x1e92a*/ 1240,
+      /*0x1fd1*/ 753,
+      /*0x13a3*/ 480,
+      -1,
+      /*0x04a3*/ 368,
+      /*0xa66d*/ 971,
+      -1,
+      /*0x03ef*/ 286,
+      /*0x1e23*/ 582,
+      /*0x1ea3*/ 641,
+      /*0x0123*/ 73,
+      /*0x0223*/ 181,
+      /*0x2ca3*/ 873,
+      /*0xa735*/ 994,
+      -1, -1,
+      /*0x0585*/ 475,
+      /*0xff47*/ 1053,
+      -1,
+      /*0x1e05*/ 567,
+      /*0x1e85*/ 631,
+      /*0x0105*/ 58,
+      /*0x0205*/ 167,
+      /*0x2c85*/ 858,
+      /*0xa72d*/ 991,
+      /*0x03ed*/ 285,
+      /*0x2d00*/ 909,
+      /*0x1f04*/ 692,
+      /*0x1f32*/ 712,
+      -1,
+      /*0x13bf*/ 508,
+      /*0x043f*/ 306,
+      /*0x04bf*/ 382,
+      /*0xff45*/ 1051,
+      /*0x1043f*/ 1096,
+      -1,
+      /*0x1e3f*/ 596,
+      /*0x1ebf*/ 655,
+      /*0x03b7*/ 251,
+      /*0x023f*/ 191,
+      /*0x2cbf*/ 887,
+      -1, -1, -1,
+      /*0x2d0c*/ 921,
+      -1,
+      /*0x13b1*/ 494,
+      /*0x0431*/ 292,
+      /*0x04b1*/ 375,
+      /*0xa723*/ 986,
+      /*0x10431*/ 1082,
+      /*0x1e943*/ 1265,
+      /*0x1e31*/ 589,
+      /*0x1eb1*/ 648,
+      -1,
+      /*0x0231*/ 188,
+      /*0x2cb1*/ 880,
+      /*0x1f11*/ 697,
+      /*0x13c2*/ 511,
+      /*0x0442*/ 309,
+      /*0x04c2*/ 383,
+      -1,
+      /*0x10442*/ 1099,
+      /*0x13a7*/ 484,
+      /*0x2d20*/ 941,
+      /*0x04a7*/ 370,
+      /*0x0142*/ 87,
+      /*0x0242*/ 193,
+      /*0x1e940*/ 1262,
+      /*0x1e27*/ 584,
+      /*0x1ea7*/ 643,
+      /*0x0127*/ 75,
+      /*0x0227*/ 183,
+      /*0x2ca7*/ 875,
+      /*0x03b3*/ 247,
+      -1,
+      /*0xa78c*/ 1031,
+      /*0xa73f*/ 999,
+      /*0x13f1*/ 558,
+      /*0x0471*/ 347,
+      /*0x04f1*/ 407,
+      /*0x0071*/ 15,
+      /*0x1f73*/ 739,
+      /*0x104f1*/ 1138,
+      /*0x1e71*/ 621,
+      /*0x1ef1*/ 680,
+      /*0x0171*/ 110,
+      /*0x0271*/ 220,
+      /*0x13f5*/ 562,
+      /*0x0475*/ 349,
+      /*0x04f5*/ 409,
+      /*0x0075*/ 19,
+      -1,
+      /*0x104f5*/ 1142,
+      /*0x1e75*/ 623,
+      /*0x1ef5*/ 682,
+      /*0x0175*/ 112,
+      /*0x0275*/ 222,
+      /*0x00e1*/ 26,
+      /*0x1e941*/ 1263,
+      /*0x2c37*/ 808,
+      /*0x13bd*/ 506,
+      /*0x043d*/ 304,
+      /*0x04bd*/ 381,
+      -1,
+      /*0x1043d*/ 1094,
+      -1,
+      /*0x1e3d*/ 595,
+      /*0x1ebd*/ 654,
+      -1,
+      /*0xa727*/ 988,
+      /*0x2cbd*/ 886,
+      /*0x13b9*/ 502,
+      /*0x0439*/ 300,
+      /*0x04b9*/ 379,
+      -1,
+      /*0x10439*/ 1090,
+      /*0x017c*/ 115,
+      /*0x1e39*/ 593,
+      /*0x1eb9*/ 652,
+      -1,
+      /*0x13af*/ 492,
+      /*0x2cb9*/ 884,
+      /*0x04af*/ 374,
+      /*0x00e3*/ 28,
+      /*0x1042f*/ 1080,
+      /*0x03b5*/ 249,
+      /*0x1e2f*/ 588,
+      /*0x1eaf*/ 647,
+      /*0x012f*/ 79,
+      /*0x022f*/ 187,
+      /*0x2caf*/ 879,
+      -1, -1, -1,
+      /*0x00e5*/ 30,
+      /*0x2c33*/ 804,
+      /*0x03ad*/ 242,
+      /*0x0583*/ 473,
+      -1,
+      /*0x10cc2*/ 1151,
+      /*0x1e03*/ 566,
+      /*0x1e83*/ 630,
+      /*0x0103*/ 57,
+      /*0x0203*/ 166,
+      /*0x2c83*/ 857,
+      /*0x00e9*/ 34,
+      /*0x0371*/ 235,
+      /*0xa73d*/ 998,
+      -1,
+      /*0x2d1c*/ 937,
+      /*0x2d04*/ 913,
+      -1, -1, -1,
+      /*0x01f3*/ 159,
+      /*0xa77c*/ 1025,
+      -1,
+      /*0x0188*/ 120,
+      /*0xa739*/ 996,
+      /*0x10cf1*/ 1198,
+      -1,
+      /*0x0511*/ 423,
+      -1, -1, -1, -1,
+      /*0x13a9*/ 486,
+      /*0xa72f*/ 992,
+      /*0x04a9*/ 371,
+      /*0x1e932*/ 1248,
+      /*0x10429*/ 1074,
+      /*0x01eb*/ 156,
+      /*0x1e29*/ 585,
+      /*0x1ea9*/ 644,
+      /*0x0129*/ 76,
+      /*0x0229*/ 184,
+      /*0x2ca9*/ 876,
+      /*0x037c*/ 239,
+      -1, -1,
+      /*0x2d11*/ 926,
+      -1,
+      /*0x1f37*/ 717,
+      /*0x00e7*/ 32,
+      -1, -1,
+      /*0x0573*/ 457,
+      /*0x2c35*/ 806,
+      -1,
+      /*0x03bf*/ 259,
+      /*0x13ab*/ 488,
+      -1,
+      /*0x04ab*/ 372,
+      -1,
+      /*0x1042b*/ 1076,
+      -1,
+      /*0x1e2b*/ 586,
+      /*0x1eab*/ 645,
+      /*0x012b*/ 77,
+      /*0x022b*/ 185,
+      /*0x2cab*/ 877,
+      -1,
+      /*0x1f01*/ 689,
+      /*0x056b*/ 449,
+      -1,
+      /*0x03b1*/ 245,
+      /*0x2173*/ 761,
+      -1,
+      /*0x2d08*/ 917,
+      -1, -1, -1,
+      /*0xa791*/ 1032,
+      /*0xa729*/ 989,
+      -1,
+      /*0x13c6*/ 515,
+      /*0x0446*/ 313,
+      /*0x04c6*/ 385,
+      /*0x1f33*/ 713,
+      /*0x10446*/ 1103,
+      /*0x13a1*/ 478,
+      /*0x050f*/ 422,
+      /*0x04a1*/ 367,
+      /*0x0146*/ 89,
+      /*0x01ef*/ 158,
+      -1,
+      /*0x1e21*/ 581,
+      /*0x1ea1*/ 640,
+      /*0x0121*/ 72,
+      -1,
+      /*0x2ca1*/ 872,
+      /*0x13c4*/ 513,
+      /*0x0444*/ 311,
+      /*0x04c4*/ 384,
+      -1,
+      /*0x10444*/ 1101,
+      -1,
+      /*0xa72b*/ 990,
+      /*0x13f2*/ 559,
+      /*0x0144*/ 88,
+      /*0x2d0f*/ 924,
+      /*0x0072*/ 16,
+      /*0x01ed*/ 157,
+      /*0x104f2*/ 1139,
+      -1, -1,
+      /*0x1f25*/ 707,
+      /*0x0272*/ 221,
+      /*0x13bb*/ 504,
+      /*0x043b*/ 302,
+      /*0x04bb*/ 380,
+      /*0x2c3f*/ 816,
+      /*0x1043b*/ 1092,
+      -1,
+      /*0x1e3b*/ 594,
+      /*0x1ebb*/ 653,
+      /*0x056f*/ 453,
+      /*0x0495*/ 361,
+      /*0x2cbb*/ 885,
+      -1,
+      /*0x03bd*/ 257,
+      /*0x1e15*/ 575,
+      /*0x1e95*/ 639,
+      /*0x0115*/ 66,
+      /*0x0215*/ 175,
+      /*0x2c95*/ 866,
+      -1,
+      /*0x2c31*/ 802,
+      -1,
+      /*0x118c2*/ 1202,
+      /*0x1f35*/ 715,
+      /*0x03b9*/ 253,
+      /*0xa691*/ 980,
+      -1,
+      /*0x056d*/ 451,
+      -1, -1,
+      /*0x0493*/ 360,
+      -1,
+      /*0x2c42*/ 819,
+      /*0x03af*/ 244,
+      /*0x1e13*/ 574,
+      /*0x1e93*/ 638,
+      /*0x0113*/ 65,
+      /*0x0213*/ 174,
+      /*0x2c93*/ 865,
+      -1,
+      /*0x047b*/ 352,
+      /*0x04fb*/ 412,
+      -1, -1,
+      /*0x104fb*/ 1148,
+      /*0x1e7b*/ 626,
+      /*0x1efb*/ 685,
+      -1,
+      /*0xa73b*/ 997,
+      -1,
+      /*0x10cc6*/ 1155,
+      /*0x0479*/ 351,
+      /*0x04f9*/ 411,
+      /*0x0079*/ 23,
+      -1,
+      /*0x104f9*/ 1146,
+      /*0x1e79*/ 625,
+      /*0x1ef9*/ 684,
+      -1,
+      /*0x1f23*/ 705,
+      /*0x0501*/ 415,
+      -1, -1,
+      /*0x047d*/ 353,
+      /*0x04fd*/ 413,
+      /*0x0283*/ 225,
+      /*0x10cc4*/ 1153,
+      /*0x00fe*/ 54,
+      /*0x1e7d*/ 627,
+      /*0x1efd*/ 686,
+      /*0x1f05*/ 693,
+      /*0x027d*/ 223,
+      /*0x01a5*/ 129,
+      /*0x10cf2*/ 1199,
+      /*0x0499*/ 363,
+      /*0x2c3d*/ 814,
+      -1,
+      /*0x1e937*/ 1253,
+      /*0x1e19*/ 577,
+      /*0x2d01*/ 910,
+      /*0x0119*/ 68,
+      /*0x0219*/ 177,
+      /*0x2c99*/ 868,
+      -1, -1,
+      /*0xa68f*/ 979,
+      /*0x2c39*/ 810,
+      -1,
+      /*0x0477*/ 350,
+      /*0x04f7*/ 410,
+      /*0x0077*/ 21,
+      /*0xa7b7*/ 1045,
+      /*0x104f7*/ 1144,
+      /*0x1e77*/ 624,
+      /*0x1ef7*/ 683,
+      /*0x0177*/ 113,
+      /*0x1e07*/ 568,
+      /*0x1e87*/ 632,
+      /*0x0107*/ 59,
+      /*0x0207*/ 168,
+      /*0x2c87*/ 859,
+      -1,
+      /*0x1d79*/ 563,
+      /*0x1f31*/ 711,
+      /*0x0525*/ 433,
+      -1, -1,
+      /*0x01ad*/ 131,
+      /*0x037b*/ 238,
+      /*0x13d0*/ 525,
+      /*0x0450*/ 323,
+      /*0xa781*/ 1027,
+      -1,
+      /*0x1e933*/ 1249,
+      /*0x1d7d*/ 564,
+      /*0x1f42*/ 720,
+      /*0x047f*/ 354,
+      /*0x04ff*/ 414,
+      /*0x0250*/ 199,
+      -1,
+      /*0x1f27*/ 709,
+      /*0x1e7f*/ 628,
+      /*0x1eff*/ 687,
+      /*0x2d25*/ 946,
+      /*0x24d0*/ 775,
+      /*0x13ce*/ 523,
+      /*0x044e*/ 321,
+      /*0x04ce*/ 389,
+      /*0x03c6*/ 265,
+      /*0x1044e*/ 1111,
+      /*0x0497*/ 362,
+      /*0x037d*/ 240,
+      /*0x01a3*/ 128,
+      -1,
+      /*0x1e17*/ 576,
+      /*0x1f71*/ 737,
+      /*0x0117*/ 67,
+      /*0x0217*/ 176,
+      /*0x2c97*/ 867,
+      /*0x052d*/ 437,
+      -1,
+      /*0x1e925*/ 1235,
+      -1,
+      /*0x0185*/ 119,
+      /*0x03c4*/ 263,
+      /*0x1f75*/ 741,
+      /*0x13cc*/ 521,
+      /*0x044c*/ 319,
+      /*0x04cc*/ 388,
+      -1,
+      /*0x1044c*/ 1109,
+      /*0x03f2*/ 287,
+      /*0xff42*/ 1048,
+      -1,
+      /*0x13e6*/ 547,
+      /*0xa7a5*/ 1041,
+      /*0x0377*/ 237,
+      /*0x0066*/ 5,
+      /*0x2d2d*/ 948,
+      /*0x104e6*/ 1127,
+      /*0x01bf*/ 137,
+      /*0x03bb*/ 255,
+      /*0xa77f*/ 1026,
+      /*0x0266*/ 213,
+      /*0x0523*/ 432,
+      /*0x1e935*/ 1251,
+      /*0x1f7c*/ 748,
+      -1, -1,
+      /*0x24e6*/ 797,
+      -1,
+      /*0xa681*/ 972,
+      /*0x007a*/ 24,
+      -1,
+      /*0x104fa*/ 1147,
+      /*0x0505*/ 417,
+      /*0x1e92d*/ 1243,
+      /*0x017a*/ 114,
+      -1,
+      /*0xa7b5*/ 1044,
+      /*0x118c6*/ 1206,
+      -1, -1,
+      /*0x2d23*/ 944,
+      -1,
+      /*0x13c8*/ 517,
+      /*0x0448*/ 315,
+      /*0x04c8*/ 386,
+      -1,
+      /*0x10448*/ 1105,
+      /*0x2c46*/ 823,
+      /*0x10cd0*/ 1165,
+      /*0x1f03*/ 691,
+      /*0x0148*/ 90,
+      /*0x2d05*/ 914,
+      /*0x2184*/ 774,
+      /*0x118c4*/ 1204,
+      /*0x13d8*/ 533,
+      /*0x0458*/ 331,
+      /*0x03fb*/ 290,
+      /*0x13ec*/ 553,
+      /*0x1e923*/ 1233,
+      /*0x104d8*/ 1113,
+      /*0x006c*/ 10,
+      -1,
+      /*0x104ec*/ 1133,
+      /*0x2c44*/ 821,
+      /*0x10cce*/ 1163,
+      -1,
+      /*0x026c*/ 218,
+      /*0x2cec*/ 906,
+      -1,
+      /*0x24d8*/ 783,
+      /*0x049d*/ 365,
+      -1,
+      /*0xa7a3*/ 1040,
+      /*0xa77a*/ 1024,
+      /*0x1e1d*/ 579,
+      /*0x01f5*/ 160,
+      /*0x011d*/ 70,
+      /*0x021d*/ 179,
+      /*0x2c9d*/ 870,
+      -1,
+      /*0x2c3b*/ 812,
+      -1,
+      /*0x0527*/ 434,
+      /*0xa785*/ 1029,
+      -1,
+      /*0x10ccc*/ 1161,
+      /*0x1e93f*/ 1261,
+      -1,
+      /*0x01bd*/ 136,
+      /*0x13e8*/ 549,
+      -1, -1,
+      /*0x0068*/ 7,
+      /*0x10ce6*/ 1187,
+      /*0x104e8*/ 1129,
+      -1, -1,
+      /*0x0571*/ 455,
+      /*0x0268*/ 214,
+      /*0x01b9*/ 135,
+      /*0x13f0*/ 557,
+      /*0x2d27*/ 947,
+      /*0x1e931*/ 1247,
+      /*0x0070*/ 14,
+      /*0x24e8*/ 799,
+      /*0x104f0*/ 1137,
+      -1,
+      /*0x0575*/ 459,
+      -1, -1, -1,
+      /*0x13dc*/ 537,
+      /*0x045c*/ 335,
+      -1,
+      /*0x1e942*/ 1264,
+      -1,
+      /*0x104dc*/ 1117,
+      /*0x2171*/ 759,
+      -1,
+      /*0x1e927*/ 1237,
+      /*0x025c*/ 208,
+      /*0x0076*/ 20,
+      /*0x0183*/ 118,
+      /*0x104f6*/ 1143,
+      /*0x10cc8*/ 1157,
+      /*0x0287*/ 226,
+      /*0x24dc*/ 787,
+      /*0x2175*/ 763,
+      /*0x057c*/ 466,
+      /*0x13d6*/ 531,
+      /*0x0456*/ 329,
+      -1,
+      /*0x13e0*/ 541,
+      /*0xa7a7*/ 1042,
+      -1,
+      /*0x1f21*/ 703,
+      /*0x10cd8*/ 1173,
+      /*0x104e0*/ 1121,
+      /*0x0256*/ 204,
+      /*0x10cec*/ 1193,
+      /*0x052f*/ 438,
+      /*0x0260*/ 209,
+      /*0x03ce*/ 273,
+      /*0xa685*/ 974,
+      /*0x24d6*/ 781,
+      -1,
+      /*0x1f44*/ 722,
+      /*0x24e0*/ 791,
+      /*0x217c*/ 770,
+      /*0x13d4*/ 529,
+      /*0x0454*/ 327,
+      -1, -1,
+      /*0x1f72*/ 738,
+      /*0x0503*/ 416,
+      -1,
+      /*0x13ea*/ 551,
+      /*0x1e93d*/ 1259,
+      /*0x0254*/ 203,
+      /*0x006a*/ 8,
+      -1,
+      /*0x104ea*/ 1131,
+      -1,
+      /*0x03cc*/ 271,
+      /*0x24d4*/ 779,
+      /*0x026a*/ 216,
+      -1,
+      /*0xff46*/ 1052,
+      /*0x1e939*/ 1255,
+      /*0x13e4*/ 545,
+      /*0x1f15*/ 701,
+      /*0x10ce8*/ 1189,
+      /*0x0064*/ 3,
+      /*0x2d03*/ 912,
+      /*0x104e4*/ 1125,
+      /*0x13b6*/ 499,
+      /*0x0436*/ 297,
+      /*0x1e92f*/ 1245,
+      /*0x118d0*/ 1216,
+      /*0x10436*/ 1087,
+      -1, -1,
+      /*0x10cf0*/ 1197,
+      /*0xff44*/ 1050,
+      /*0x24e4*/ 795,
+      /*0x0078*/ 22,
+      /*0x0529*/ 435,
+      /*0x104f8*/ 1145,
+      /*0x2c50*/ 833,
+      -1,
+      /*0x1f13*/ 699,
+      -1,
+      /*0x00f3*/ 44,
+      /*0x10cdc*/ 1177,
+      /*0x118ce*/ 1214,
+      /*0x13ca*/ 519,
+      /*0x044a*/ 317,
+      /*0x04ca*/ 387,
+      -1,
+      /*0x1044a*/ 1107,
+      -1,
+      /*0x1f7b*/ 747,
+      /*0x03c8*/ 267,
+      /*0x01c6*/ 138,
+      /*0x2c4e*/ 831,
+      /*0xa783*/ 1028,
+      -1, -1,
+      /*0x01a1*/ 127,
+      /*0x00eb*/ 36,
+      /*0x052b*/ 436,
+      /*0x10cd6*/ 1171,
+      /*0x1f79*/ 745,
+      -1,
+      /*0x10ce0*/ 1181,
+      /*0x118cc*/ 1212,
+      /*0x13f4*/ 561,
+      /*0x13d2*/ 527,
+      /*0x0452*/ 325,
+      /*0x0074*/ 18,
+      -1,
+      /*0x104f4*/ 1141,
+      -1,
+      /*0x1e929*/ 1239,
+      /*0x1f7d*/ 749,
+      /*0x2c4c*/ 829,
+      /*0x0252*/ 201,
+      -1, -1, -1, -1,
+      /*0x10cd4*/ 1169,
+      /*0x24d2*/ 777,
+      /*0x2c66*/ 850,
+      -1,
+      /*0x13b0*/ 493,
+      /*0x0430*/ 291,
+      /*0xa7a9*/ 1043,
+      /*0x10cea*/ 1191,
+      /*0x10430*/ 1081,
+      /*0x0521*/ 431,
+      -1, -1,
+      /*0x0195*/ 123,
+      -1,
+      /*0x13e2*/ 543,
+      /*0x029d*/ 233,
+      /*0x1e92b*/ 1241,
+      /*0x0062*/ 1,
+      /*0x1f77*/ 743,
+      /*0x104e2*/ 1123,
+      /*0x10ce4*/ 1185,
+      /*0x1f07*/ 695,
+      -1,
+      /*0x118c8*/ 1208,
+      -1, -1, -1,
+      /*0x0572*/ 456,
+      /*0x2d21*/ 942,
+      /*0x24e2*/ 793,
+      /*0x1fb1*/ 751,
+      /*0x00ef*/ 40,
+      /*0x048d*/ 357,
+      /*0x2c48*/ 825,
+      /*0xa683*/ 973,
+      /*0x118d8*/ 1224,
+      /*0x1e0d*/ 571,
+      /*0x1e8d*/ 635,
+      /*0x010d*/ 62,
+      /*0x020d*/ 171,
+      /*0x2c8d*/ 862,
+      -1, -1,
+      /*0x01fb*/ 162,
+      /*0x0515*/ 425,
+      /*0x2c58*/ 841,
+      /*0x10cca*/ 1159,
+      /*0x2172*/ 760,
+      /*0x2c6c*/ 853,
+      /*0x00ed*/ 38,
+      -1,
+      /*0x13b4*/ 497,
+      /*0x0434*/ 295,
+      -1,
+      /*0x01f9*/ 161,
+      /*0x10434*/ 1085,
+      -1, -1, -1, -1,
+      /*0xa7a1*/ 1039,
+      -1, -1,
+      /*0x2d15*/ 930,
+      /*0x0513*/ 424,
+      -1,
+      /*0x01fd*/ 163,
+      -1,
+      /*0x10cd2*/ 1167,
+      /*0x1e09*/ 569,
+      /*0x1e89*/ 633,
+      /*0x0109*/ 60,
+      /*0x0209*/ 169,
+      /*0x2c89*/ 860,
+      /*0x1e93b*/ 1257,
+      /*0x057b*/ 465,
+      /*0x0199*/ 124,
+      /*0xff50*/ 1062,
+      -1,
+      /*0x13ee*/ 555,
+      /*0x2c68*/ 851,
+      -1,
+      /*0x006e*/ 12,
+      /*0x2d13*/ 928,
+      /*0x104ee*/ 1135,
+      /*0x1f66*/ 734,
+      /*0x0579*/ 463,
+      -1, -1,
+      /*0x2cee*/ 907,
+      -1, -1,
+      /*0x118dc*/ 1228,
+      /*0xff4e*/ 1060,
+      -1,
+      /*0x217b*/ 769,
+      /*0x10ce2*/ 1183,
+      -1,
+      /*0x057d*/ 467,
+      -1,
+      /*0x1f7a*/ 746,
+      -1,
+      /*0x2c5c*/ 845,
+      -1,
+      /*0x03b6*/ 250,
+      -1,
+      /*0x2179*/ 767,
+      -1,
+      /*0x0519*/ 427,
+      /*0x2c76*/ 855,
+      /*0x118d6*/ 1222,
+      /*0x03f8*/ 289,
+      -1,
+      /*0x01d0*/ 142,
+      /*0xff4c*/ 1058,
+      /*0xa793*/ 1033,
+      -1, -1,
+      /*0x217d*/ 771,
+      /*0x01ff*/ 164,
+      /*0x2c56*/ 839,
+      -1, -1,
+      /*0x0577*/ 461,
+      /*0x03ca*/ 269,
+      -1,
+      /*0x0507*/ 418,
+      /*0x2d19*/ 934,
+      /*0x049f*/ 366,
+      /*0x01ce*/ 141,
+      /*0x118d4*/ 1220,
+      -1,
+      /*0x1e1f*/ 580,
+      -1,
+      /*0x011f*/ 71,
+      /*0x021f*/ 180,
+      /*0x2c9f*/ 871,
+      -1, -1, -1,
+      /*0x2c54*/ 837,
+      /*0x13de*/ 539,
+      /*0x045e*/ 337,
+      /*0x2177*/ 765,
+      -1,
+      /*0x2d07*/ 916,
+      /*0x104de*/ 1119,
+      /*0x2c6a*/ 852,
+      -1, -1,
+      /*0x01cc*/ 140,
+      /*0x057f*/ 469,
+      -1,
+      /*0xff48*/ 1054,
+      -1,
+      /*0xa695*/ 982,
+      /*0x24de*/ 789,
+      -1, -1,
+      /*0xa799*/ 1035,
+      -1,
+      /*0x10cee*/ 1195,
+      -1, -1,
+      /*0x0517*/ 426,
+      /*0xff58*/ 1070,
+      /*0x2c36*/ 807,
+      -1, -1, -1, -1,
+      /*0x217f*/ 773,
+      -1, -1,
+      /*0x1f70*/ 736,
+      /*0xa693*/ 981,
+      /*0x118ca*/ 1210,
+      /*0xa787*/ 1030,
+      -1, -1, -1,
+      /*0x214e*/ 757,
+      -1,
+      /*0x2d17*/ 932,
+      -1, -1,
+      /*0x2c4a*/ 827,
+      /*0x13be*/ 507,
+      /*0x043e*/ 305,
+      -1,
+      /*0x0566*/ 444,
+      /*0x1043e*/ 1095,
+      /*0x1f76*/ 742,
+      -1, -1,
       /*0x013e*/ 85,
-      -1,
-      /*0x045d*/ 334,
-      -1,
-      /*0xa657*/ 872,
-      /*0x043e*/ 303,
-      /*0x03d7*/ 272,
-      -1,
-      /*0x217e*/ 684,
-      /*0x2c5b*/ 756,
-      /*0x24db*/ 698,
-      /*0x1ecf*/ 575,
-      /*0x1e4f*/ 516,
-      /*0x04cf*/ 388,
-      /*0x014f*/ 93,
-      /*0x2ccf*/ 807,
-      /*0x024f*/ 198,
-      -1,
-      /*0xa75b*/ 925,
-      /*0x044f*/ 320,
-      /*0xa653*/ 870,
-      /*0x0061*/ 0,
-      -1,
-      /*0x2c55*/ 750,
-      /*0x24d5*/ 692,
-      -1,
-      /*0x0570*/ 452,
-      -1, -1,
-      /*0x019a*/ 125,
-      /*0x1f70*/ 648,
-      /*0xa669*/ 881,
-      /*0xa755*/ 922,
-      /*0x03e9*/ 281,
-      /*0x2c5d*/ 758,
-      /*0x24dd*/ 700,
-      /*0x0065*/ 4,
-      /*0x2c3e*/ 727,
-      -1,
-      /*0x013c*/ 84,
-      /*0xa667*/ 880,
-      /*0x023c*/ 190,
-      /*0x03e7*/ 280,
-      /*0xa75d*/ 926,
-      /*0x043c*/ 301,
-      /*0x1ecd*/ 574,
-      /*0x1e4d*/ 515,
-      /*0x0063*/ 2,
-      /*0x014d*/ 92,
-      /*0x2ccd*/ 806,
-      /*0x024d*/ 197,
-      /*0x2c4f*/ 744,
-      /*0x01e1*/ 151,
-      /*0x044d*/ 318,
-      /*0xa659*/ 873,
-      -1,
-      /*0x03d9*/ 273,
-      -1, -1,
-      /*0x019e*/ 126,
-      /*0xa74f*/ 919,
-      /*0x1ecb*/ 573,
-      /*0x1e4b*/ 514,
-      -1,
-      /*0x014b*/ 91,
-      /*0x2ccb*/ 805,
-      /*0x024b*/ 196,
-      /*0x01e5*/ 153,
-      /*0xa78c*/ 943,
-      /*0x044b*/ 316,
-      -1,
-      /*0x1ef3*/ 593,
-      /*0x1e73*/ 534,
-      /*0x04f3*/ 406,
-      /*0x0173*/ 111,
-      /*0x2cf3*/ 820,
-      /*0x2c3c*/ 725,
-      /*0x0573*/ 455,
-      /*0x01e3*/ 152,
-      /*0x0473*/ 346,
-      -1,
-      /*0x1f73*/ 651,
-      /*0xa65b*/ 874,
-      -1,
-      /*0x03db*/ 274,
-      /*0x2c4d*/ 742,
-      -1,
-      /*0x1eeb*/ 589,
-      /*0x1e6b*/ 530,
-      /*0x04eb*/ 402,
-      /*0x016b*/ 107,
-      -1,
-      /*0x026b*/ 216,
-      /*0x056b*/ 447,
-      /*0xa74d*/ 918,
-      /*0x046b*/ 342,
-      /*0xa655*/ 871,
-      -1,
-      /*0x0140*/ 86,
-      /*0x2174*/ 674,
-      /*0x0240*/ 192,
-      /*0x2c4b*/ 740,
-      /*0x118d1*/ 1039,
-      /*0x0440*/ 305,
-      /*0x0564*/ 440,
-      /*0x1f40*/ 630,
-      -1,
-      /*0xa65d*/ 875,
-      /*0x1f64*/ 644,
-      /*0x03dd*/ 275,
-      /*0xa74b*/ 917,
-      /*0x2c73*/ 766,
-      /*0x03be*/ 256,
-      /*0x1ec9*/ 572,
-      /*0x1e49*/ 513,
-      -1,
-      /*0x0069*/ 1054,
-      /*0x2cc9*/ 804,
-      /*0x0249*/ 195,
-      /*0x1ec5*/ 570,
-      /*0x1e45*/ 511,
-      /*0x0449*/ 314,
-      -1,
-      /*0x2cc5*/ 802,
-      /*0xa64f*/ 868,
-      /*0x0067*/ 6,
-      -1,
-      /*0x0445*/ 310,
-      /*0x118d7*/ 1045,
-      /*0x1f45*/ 635,
-      /*0x1edf*/ 583,
-      /*0x1e5f*/ 524,
-      /*0x04df*/ 396,
-      /*0x015f*/ 101,
-      /*0x2cdf*/ 815,
-      /*0x2c40*/ 729,
-      /*0xa76b*/ 933,
-      -1,
-      /*0x045f*/ 336,
-      /*0x24e4*/ 707,
-      -1,
-      /*0x1ec7*/ 571,
-      /*0x1e47*/ 512,
-      /*0x0288*/ 226,
-      /*0x118d3*/ 1041,
-      /*0x2cc7*/ 803,
-      /*0x0247*/ 194,
-      /*0x01e9*/ 155,
-      -1,
-      /*0x0447*/ 312,
-      /*0x2170*/ 670,
-      /*0x03bc*/ 254,
-      /*0x006e*/ 12,
-      /*0x2c49*/ 738,
-      -1, -1,
-      /*0x01e7*/ 154,
-      -1,
-      /*0xa64d*/ 867,
-      /*0x2c45*/ 734,
-      /*0x03cd*/ 270,
-      -1,
-      /*0xa749*/ 916,
-      -1, -1,
-      /*0x1ec3*/ 569,
-      /*0x1e43*/ 510,
-      /*0x0074*/ 18,
-      /*0xa745*/ 914,
-      /*0x2cc3*/ 801,
-      -1,
-      /*0x24df*/ 702,
+      -1, -1,
+      /*0x118d2*/ 1218,
+      /*0x13ba*/ 503,
+      /*0x043a*/ 301,
+      /*0x01d8*/ 146,
+      -1,
+      /*0x1043a*/ 1091,
+      -1,
+      /*0x057a*/ 464,
+      /*0x1f60*/ 728,
       /*0x013a*/ 83,
-      /*0x0443*/ 308,
-      /*0xa64b*/ 866,
-      /*0x1f43*/ 633,
-      /*0x03cb*/ 268,
-      /*0x043a*/ 299,
-      /*0x118d9*/ 1047,
-      /*0xa75f*/ 927,
-      -1,
-      /*0x2c47*/ 736,
-      -1, -1,
-      /*0x1ec1*/ 568,
-      /*0x1e41*/ 509,
-      /*0x03f3*/ 286,
-      /*0x028c*/ 230,
-      /*0x2cc1*/ 800,
-      -1,
-      /*0xa747*/ 915,
-      -1,
-      /*0x0441*/ 306,
-      -1,
-      /*0x1f41*/ 631,
+      /*0x2c52*/ 835,
+      -1, -1,
+      /*0x03b4*/ 248,
+      -1, -1, -1,
+      /*0xa797*/ 1034,
+      -1, -1, -1,
+      /*0xa699*/ 984,
+      -1, -1, -1,
+      /*0x10cde*/ 1179,
+      -1,
+      /*0x217a*/ 768,
+      /*0x2c30*/ 801,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1,
+      /*0x056c*/ 450,
+      /*0xa687*/ 975,
+      -1, -1,
+      /*0xff56*/ 1068,
+      /*0x0289*/ 228,
+      -1,
+      /*0x1f64*/ 732,
+      -1, -1, -1,
+      /*0x051d*/ 429,
+      -1,
+      /*0x1f36*/ 716,
+      -1, -1, -1, -1, -1, -1,
+      /*0x1f78*/ 744,
+      -1,
+      /*0x01dc*/ 148,
+      -1,
+      /*0xff54*/ 1066,
+      -1,
+      /*0x00f1*/ 42,
+      -1, -1, -1,
+      /*0x2d1d*/ 938,
+      -1,
+      /*0x0568*/ 446,
+      -1, -1, -1,
+      /*0x00f5*/ 46,
+      /*0x2c34*/ 805,
+      -1,
+      /*0xa697*/ 983,
+      /*0x01d6*/ 145,
+      -1, -1,
+      /*0x0570*/ 454,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1,
+      /*0x1f74*/ 740,
+      -1, -1,
+      /*0x00fc*/ 52,
+      -1, -1,
+      /*0x01d4*/ 144,
+      /*0x0576*/ 460,
+      /*0xa79d*/ 1037,
+      /*0x2170*/ 758,
+      -1, -1, -1, -1, -1, -1,
+      /*0xff4a*/ 1056,
+      -1, -1,
+      /*0x1f30*/ 710,
+      -1, -1, -1, -1, -1, -1,
+      -1,
+      /*0x2176*/ 764,
+      -1,
+      /*0x1f62*/ 730,
+      -1, -1,
+      /*0x01b6*/ 134,
       -1, -1, -1, -1, -1,
-      /*0xa66b*/ 882,
-      /*0x2173*/ 673,
-      /*0x03eb*/ 282,
-      /*0x1043e*/ 1004,
-      -1,
-      /*0x2c43*/ 732,
-      /*0x118db*/ 1049,
-      -1,
-      /*0x0438*/ 297,
-      /*0x2c3a*/ 723,
-      /*0x03c0*/ 258,
-      /*0xff51*/ 972,
-      -1,
-      /*0x056a*/ 446,
-      /*0xa743*/ 913,
-      -1, -1,
-      /*0x1044f*/ 1021,
-      /*0x0070*/ 14,
-      -1,
-      /*0x118d5*/ 1043,
-      -1,
-      /*0x017a*/ 114,
-      /*0x01dd*/ 149,
-      /*0x2c41*/ 730,
-      /*0x057a*/ 462,
-      /*0xa649*/ 865,
-      -1,
-      /*0x03c9*/ 266,
-      /*0x1f7a*/ 658,
-      -1,
-      /*0x118dd*/ 1051,
-      /*0xa645*/ 863,
-      /*0xa741*/ 912,
-      /*0x03c5*/ 262,
-      -1, -1,
-      /*0xff57*/ 978,
-      -1,
-      /*0x0188*/ 120,
-      /*0x2c38*/ 721,
-      -1,
-      /*0x1043c*/ 1002,
-      /*0xa65f*/ 876,
-      -1,
-      /*0x03df*/ 276,
-      -1,
-      /*0x2c6a*/ 764,
-      /*0x118cf*/ 1037,
-      -1, -1,
-      /*0x1044d*/ 1019,
-      -1,
-      /*0xff53*/ 974,
-      /*0xa647*/ 864,
-      -1,
-      /*0x03c7*/ 264,
-      /*0x1ead*/ 558,
-      /*0x1e2d*/ 499,
-      /*0x04ad*/ 371,
-      /*0x012d*/ 78,
-      /*0x2cad*/ 790,
-      /*0x022d*/ 186,
-      /*0x052d*/ 435,
-      -1, -1, -1,
-      /*0x1044b*/ 1017,
-      /*0xa77a*/ 936,
-      /*0x0073*/ 17,
-      -1,
-      /*0x1eb3*/ 561,
-      /*0x1e33*/ 502,
-      /*0x04b3*/ 374,
-      /*0x0133*/ 80,
-      /*0x2cb3*/ 793,
-      /*0x0233*/ 189,
-      -1,
-      /*0xa643*/ 862,
-      /*0x0433*/ 292,
-      /*0x03c3*/ 260,
-      /*0x1f33*/ 625,
-      /*0x118cd*/ 1035,
-      /*0x018c*/ 121,
-      /*0x03ba*/ 252,
-      /*0x006b*/ 9,
-      /*0x2d1b*/ 848,
-      /*0xff59*/ 980,
-      /*0x2cec*/ 818,
-      /*0x026c*/ 217,
-      /*0x056c*/ 448,
-      /*0x2d24*/ 857,
-      /*0x2d00*/ 821,
-      /*0x2d11*/ 838,
-      /*0x2d18*/ 845,
-      /*0x2d22*/ 855,
-      /*0x0064*/ 3,
-      /*0xa641*/ 861,
-      /*0x118cb*/ 1033,
-      /*0x03c1*/ 259,
-      /*0x01f3*/ 159,
-      /*0x10440*/ 1006,
-      /*0x2d16*/ 843,
-      -1, -1,
-      /*0x2d0a*/ 831,
-      /*0xa72d*/ 903,
-      /*0x2d06*/ 827,
-      /*0x2d0f*/ 836,
-      -1,
-      /*0x0250*/ 199,
-      /*0x2c33*/ 716,
-      -1,
-      /*0x0450*/ 321,
-      -1,
-      /*0x03b8*/ 250,
-      /*0x01eb*/ 156,
-      -1, -1,
-      /*0x10449*/ 1015,
-      /*0xa733*/ 905,
-      -1,
-      /*0x2d1a*/ 847,
-      /*0x2d0b*/ 832,
-      /*0x2c6c*/ 765,
-      /*0x10445*/ 1011,
-      -1, -1,
-      /*0x2d10*/ 837,
-      /*0xff55*/ 976,
-      /*0x2d01*/ 822,
-      /*0x2d02*/ 823,
-      /*0x118c0*/ 1022,
-      -1,
-      /*0x1ea5*/ 554,
-      /*0x1e25*/ 495,
-      /*0x04a5*/ 367,
-      /*0x0125*/ 74,
-      /*0x2ca5*/ 786,
-      /*0x0225*/ 182,
-      /*0x0525*/ 431,
-      -1,
-      /*0x01c9*/ 139,
-      -1,
-      /*0x1f25*/ 619,
-      /*0x2c50*/ 745,
-      /*0x24d0*/ 687,
-      /*0x10447*/ 1013,
-      /*0xa7a5*/ 953,
-      /*0x217a*/ 680,
-      /*0x118c9*/ 1031,
-      /*0x0578*/ 460,
-      /*0x2d1e*/ 851,
-      /*0x1fd0*/ 664,
-      /*0x2d20*/ 853,
-      /*0x1f78*/ 656,
-      /*0x118c5*/ 1027,
-      /*0xff4f*/ 970,
-      -1,
-      /*0x01df*/ 150,
-      /*0x1ea3*/ 553,
-      /*0x1e23*/ 494,
-      /*0x04a3*/ 366,
-      /*0x0123*/ 73,
-      /*0x2ca3*/ 785,
-      /*0x0223*/ 181,
-      /*0x0523*/ 430,
-      /*0x118df*/ 1053,
-      /*0x0266*/ 213,
-      /*0x0566*/ 442,
-      /*0x1f23*/ 617,
-      /*0x10443*/ 1009,
-      /*0x03ad*/ 240,
-      /*0x1f66*/ 646,
-      /*0xa7a3*/ 952,
-      /*0x1043a*/ 1000,
-      -1, -1,
-      /*0x118c7*/ 1029,
-      /*0x1eef*/ 591,
-      /*0x1e6f*/ 532,
-      /*0x04ef*/ 404,
-      /*0x016f*/ 109,
-      /*0xa725*/ 899,
-      /*0x026f*/ 218,
-      /*0x056f*/ 451,
-      /*0x03b3*/ 245,
-      /*0x046f*/ 344,
-      /*0x2d14*/ 841,
-      -1,
-      /*0x10441*/ 1007,
-      /*0xff4d*/ 968,
-      /*0x2d0e*/ 835,
-      /*0x1eed*/ 590,
-      /*0x1e6d*/ 531,
-      /*0x04ed*/ 403,
-      /*0x016d*/ 108,
-      -1, -1,
-      /*0x056d*/ 449,
-      -1,
-      /*0x046d*/ 343,
-      /*0x118c3*/ 1025,
-      /*0x2c66*/ 762,
-      /*0x24e6*/ 709,
-      /*0x006a*/ 8,
-      /*0x10438*/ 998,
-      /*0xff4b*/ 966,
-      -1,
-      /*0xa723*/ 898,
-      /*0x1e85*/ 543,
-      /*0x1e05*/ 479,
-      /*0x2d04*/ 825,
-      /*0x0105*/ 58,
-      /*0x2c85*/ 770,
-      /*0x0205*/ 167,
-      /*0x0505*/ 415,
-      /*0x007a*/ 24,
-      -1, -1,
-      /*0x1f05*/ 605,
-      /*0x118c1*/ 1023,
-      /*0x0585*/ 473,
-      -1,
-      /*0xa785*/ 941,
-      /*0x0373*/ 234,
-      /*0x1e83*/ 542,
-      /*0x1e03*/ 478,
-      /*0xa76f*/ 935,
-      /*0x0103*/ 57,
-      /*0x2c83*/ 769,
-      /*0x0203*/ 166,
-      /*0x0503*/ 414,
-      /*0x0576*/ 458,
-      -1, -1,
-      /*0x1f03*/ 603,
-      /*0x1f76*/ 654,
-      /*0x0583*/ 471,
-      /*0xa685*/ 886,
-      /*0xa783*/ 940,
-      -1,
-      /*0xa76d*/ 934,
-      /*0x1ebf*/ 567,
-      /*0x1e3f*/ 508,
-      /*0x04bf*/ 380,
-      -1,
-      /*0x2cbf*/ 799,
-      /*0x023f*/ 191,
-      -1, -1,
-      /*0x043f*/ 304,
-      -1, -1, -1,
-      /*0xa683*/ 885,
-      /*0x1efd*/ 598,
-      /*0x1e7d*/ 539,
-      /*0x04fd*/ 411,
-      /*0xff49*/ 964,
-      /*0x03f8*/ 287,
-      /*0x027d*/ 222,
-      /*0x057d*/ 465,
-      /*0x1042d*/ 987,
-      /*0x047d*/ 351,
-      /*0xff45*/ 960,
-      /*0x1f7d*/ 661,
-      /*0x2c76*/ 767,
-      -1, -1,
-      /*0x1eb7*/ 563,
-      /*0x1e37*/ 504,
-      /*0x04b7*/ 376,
-      /*0x0137*/ 82,
-      /*0x2cb7*/ 795,
-      /*0x2178*/ 678,
-      /*0x1d7d*/ 476,
-      /*0x10433*/ 993,
-      /*0x0437*/ 296,
-      -1,
-      /*0x1f37*/ 629,
-      -1,
-      /*0x006c*/ 10,
-      /*0x2c3f*/ 728,
-      -1, -1,
-      /*0x01ad*/ 131,
-      /*0xff47*/ 962,
+      /*0xff52*/ 1064,
+      -1, -1, -1, -1, -1, -1,
+      /*0x056a*/ 448,
+      -1, -1, -1, -1, -1,
+      /*0x1fd0*/ 752,
+      -1, -1, -1, -1, -1,
+      /*0x03be*/ 258,
+      /*0x0564*/ 442,
       -1, -1, -1, -1,
-      /*0xa73f*/ 911,
-      -1,
-      /*0x03ef*/ 284,
-      /*0x1eb5*/ 562,
-      /*0x1e35*/ 503,
-      /*0x04b5*/ 375,
-      /*0x0135*/ 81,
-      /*0x2cb5*/ 794,
-      -1,
-      /*0x04c2*/ 381,
-      /*0x0142*/ 87,
-      /*0x0435*/ 294,
-      /*0x0242*/ 193,
-      /*0x1f35*/ 627,
-      /*0xa66d*/ 883,
-      /*0x0442*/ 307,
-      /*0x03ed*/ 283,
-      /*0x1f42*/ 632,
-      /*0x2c37*/ 720,
-      /*0xff43*/ 958,
-      /*0x1eb1*/ 560,
-      /*0x1e31*/ 501,
-      /*0x04b1*/ 373,
-      -1,
-      /*0x2cb1*/ 792,
-      /*0x0231*/ 188,
-      -1,
-      /*0xa737*/ 907,
-      /*0x0431*/ 290,
-      -1,
-      /*0x1f31*/ 623,
-      /*0x1ea7*/ 555,
-      /*0x1e27*/ 496,
-      /*0x04a7*/ 368,
-      /*0x0127*/ 75,
-      /*0x2ca7*/ 787,
-      /*0x0227*/ 183,
-      /*0x0527*/ 432,
-      /*0xff41*/ 956,
-      -1,
-      /*0x2d08*/ 829,
-      /*0x1f27*/ 621,
-      /*0x01d0*/ 142,
-      /*0x2c35*/ 718,
-      -1,
-      /*0xa7a7*/ 954,
-      /*0x00e1*/ 26,
-      /*0x2c42*/ 731,
-      /*0x2184*/ 686,
-      -1,
-      /*0x118d0*/ 1038,
-      /*0x0078*/ 22,
-      /*0xa735*/ 906,
-      /*0x1e95*/ 551,
-      /*0x1e15*/ 487,
-      /*0x0495*/ 359,
-      /*0x0115*/ 66,
-      /*0x2c95*/ 778,
-      /*0x0215*/ 175,
-      /*0x0515*/ 423,
-      /*0x2c31*/ 714,
-      /*0x00e5*/ 30,
-      -1,
-      /*0x1f15*/ 613,
-      -1,
-      /*0x2176*/ 676,
-      /*0x03bf*/ 257,
-      /*0x0283*/ 224,
-      /*0x1fb1*/ 663,
-      /*0x0066*/ 5,
-      -1,
-      /*0x01a5*/ 129,
-      /*0x00e3*/ 28,
-      /*0x1e93*/ 550,
-      /*0x1e13*/ 486,
-      /*0x0493*/ 358,
-      /*0x0113*/ 65,
-      /*0x2c93*/ 777,
-      /*0x0213*/ 174,
-      /*0x0513*/ 422,
-      /*0xa727*/ 900,
-      -1,
-      /*0xa695*/ 894,
-      /*0x1f13*/ 611,
-      /*0x2d0c*/ 833,
-      /*0x006f*/ 13,
-      -1,
-      /*0xa793*/ 945,
-      -1,
-      /*0x1f12*/ 610,
-      /*0x1ef9*/ 596,
-      /*0x1e79*/ 537,
-      /*0x04f9*/ 409,
-      /*0x03b7*/ 249,
-      /*0x217d*/ 683,
-      -1,
-      /*0x0579*/ 461,
-      /*0x01a3*/ 128,
-      /*0x0479*/ 349,
-      /*0x006d*/ 11,
-      /*0x1f79*/ 657,
-      /*0x00fe*/ 54,
-      /*0xa693*/ 893,
-      /*0x1ef5*/ 594,
-      /*0x1e75*/ 535,
-      /*0x04f5*/ 407,
-      /*0x0175*/ 112,
-      -1,
-      /*0x0275*/ 221,
-      /*0x0575*/ 457,
-      /*0x1d79*/ 475,
-      /*0x0475*/ 347,
-      -1,
-      /*0x1f75*/ 653,
-      -1, -1,
-      /*0x01ef*/ 158,
-      -1,
-      /*0x03b5*/ 247,
-      /*0x1ef1*/ 592,
-      /*0x1e71*/ 533,
-      /*0x04f1*/ 405,
-      /*0x0171*/ 110,
-      -1,
-      /*0x0271*/ 219,
-      /*0x0571*/ 453,
-      -1,
-      /*0x0471*/ 345,
-      -1,
-      /*0x1f71*/ 649,
-      /*0x01ed*/ 157,
-      -1, -1,
-      /*0x0076*/ 20,
-      -1,
-      /*0x03b1*/ 243,
-      -1, -1, -1,
-      /*0x1e87*/ 544,
-      /*0x1e07*/ 480,
-      /*0x00e9*/ 34,
-      /*0x0107*/ 59,
-      /*0x2c87*/ 771,
-      /*0x0207*/ 168,
-      /*0x0507*/ 416,
-      /*0x045a*/ 331,
-      /*0x0185*/ 119,
-      -1,
-      /*0x1f07*/ 607,
-      /*0x00e7*/ 32,
-      -1, -1,
-      /*0xa787*/ 942,
-      /*0x1ebd*/ 566,
-      /*0x1e3d*/ 507,
-      /*0x04bd*/ 379,
-      /*0x1043f*/ 1005,
-      /*0x2cbd*/ 798,
-      /*0xff50*/ 971,
-      -1, -1,
-      /*0x043d*/ 302,
-      /*0x0183*/ 118,
-      -1,
-      /*0x1eb9*/ 564,
-      /*0x1e39*/ 505,
-      /*0x04b9*/ 377,
-      /*0xa687*/ 887,
-      /*0x2cb9*/ 796,
-      /*0x04ce*/ 387,
-      -1, -1,
-      /*0x0439*/ 298,
-      -1, -1,
-      /*0x044e*/ 319,
-      /*0x00ee*/ 39,
-      /*0x2c5a*/ 755,
-      /*0x24da*/ 697,
-      /*0x01bf*/ 137,
-      -1, -1, -1,
-      /*0x10437*/ 997,
-      /*0x1eaf*/ 559,
-      /*0x1e2f*/ 500,
-      /*0x04af*/ 372,
-      /*0x012f*/ 79,
-      /*0x2caf*/ 791,
-      /*0x022f*/ 187,
-      /*0x052f*/ 436,
+      /*0x118de*/ 1230,
+      -1, -1,
+      /*0x1f34*/ 714,
+      -1, -1,
+      /*0x03ba*/ 254,
+      -1,
+      /*0x0578*/ 462,
+      -1,
+      /*0x2c5e*/ 847,
+      /*0x01d2*/ 143,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1,
+      /*0x2178*/ 766,
+      /*0x01b0*/ 132,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1,
+      /*0x1e936*/ 1252,
+      -1, -1, -1,
+      /*0x0574*/ 458,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1,
+      /*0x2c3e*/ 815,
+      -1, -1, -1, -1, -1,
+      /*0x2174*/ 762,
+      -1, -1, -1, -1, -1,
+      /*0x2c3a*/ 811,
+      -1,
+      /*0x00f2*/ 43,
+      /*0x0562*/ 440,
+      -1, -1, -1, -1,
+      /*0x01b4*/ 133,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1,
+      /*0x050d*/ 421,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1,
+      /*0x1e930*/ 1246,
+      -1, -1, -1, -1, -1, -1,
+      -1,
+      /*0x2d0d*/ 922,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1,
+      /*0x00fb*/ 51,
+      -1,
+      /*0x0509*/ 419,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1,
+      /*0x00f9*/ 49,
+      -1, -1, -1, -1, -1, -1,
+      /*0x056e*/ 452,
+      -1, -1,
+      /*0x2d09*/ 918,
+      -1,
+      /*0x00fd*/ 53,
+      -1, -1, -1,
+      /*0x1e934*/ 1250,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1,
+      /*0x1fe0*/ 754,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1,
+      /*0x051f*/ 430,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1,
+      /*0x00ff*/ 55,
+      -1, -1, -1,
+      /*0xa68d*/ 978,
+      -1, -1, -1,
+      /*0x2d1f*/ 940,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1,
+      /*0xa689*/ 976,
+      -1,
+      /*0x00e6*/ 31,
+      /*0xa79f*/ 1038,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1,
+      /*0x00fa*/ 50,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1,
+      /*0x1fb0*/ 750,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1,
+      /*0x00ec*/ 37,
+      -1,
+      /*0x1e93e*/ 1260,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1,
+      /*0x1e93a*/ 1256,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1,
+      /*0x00e8*/ 33,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1,
+      /*0x00f0*/ 41,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1,
+      /*0x00f6*/ 47,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1,
+      /*0x00e0*/ 25,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1,
+      /*0x00ea*/ 35,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      /*0x00e4*/ 29,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      /*0x00f8*/ 48,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1,
       /*0x00f4*/ 45,
-      /*0x01fd*/ 163,
-      /*0x2c3d*/ 726,
-      -1,
-      /*0x1ea9*/ 556,
-      /*0x1e29*/ 497,
-      /*0x04a9*/ 369,
-      /*0x0129*/ 76,
-      /*0x2ca9*/ 788,
-      /*0x0229*/ 184,
-      /*0x0529*/ 433,
-      /*0xa73d*/ 910,
-      -1,
-      /*0x2c39*/ 722,
-      /*0x0272*/ 220,
-      /*0x0572*/ 454,
-      /*0x2c4e*/ 743,
-      /*0x10435*/ 995,
-      /*0xa7a9*/ 955,
-      /*0x1f72*/ 650,
-      /*0x0292*/ 231,
-      /*0x10442*/ 1008,
-      /*0xa739*/ 908,
-      /*0x1ea1*/ 552,
-      /*0x1e21*/ 493,
-      /*0x04a1*/ 365,
-      /*0x0121*/ 72,
-      /*0x2ca1*/ 784,
-      /*0x2179*/ 679,
-      /*0x0521*/ 429,
-      /*0x1efb*/ 597,
-      /*0x1e7b*/ 538,
-      /*0x04fb*/ 410,
-      /*0x1f21*/ 615,
-      /*0x10431*/ 991,
-      /*0x0562*/ 438,
-      /*0x057b*/ 463,
-      /*0xa7a1*/ 951,
-      /*0x047b*/ 350,
-      /*0x1f62*/ 642,
-      /*0x1f7b*/ 659,
-      /*0x2175*/ 675,
-      /*0xa72f*/ 904,
-      /*0x1e19*/ 489,
-      /*0x0499*/ 361,
-      /*0x0119*/ 68,
-      /*0x2c99*/ 780,
-      /*0x0219*/ 177,
-      /*0x0519*/ 425,
-      /*0x04c6*/ 383,
-      /*0x0146*/ 89,
-      /*0x00f0*/ 41,
-      /*0x118c2*/ 1024,
-      /*0xa729*/ 901,
-      -1,
-      /*0x0446*/ 311,
-      /*0xa799*/ 947,
-      /*0x2171*/ 671,
-      /*0x1ef7*/ 595,
-      /*0x1e77*/ 536,
-      /*0x04f7*/ 408,
-      /*0x0177*/ 113,
-      /*0x0268*/ 214,
-      /*0x0568*/ 444,
-      /*0x0577*/ 459,
-      -1,
-      /*0x0477*/ 348,
-      -1,
-      /*0x1f77*/ 655,
-      -1,
-      /*0x24e2*/ 705,
-      /*0xa699*/ 896,
-      -1,
-      /*0x1eff*/ 599,
-      /*0x1e7f*/ 540,
-      /*0x04ff*/ 412,
-      /*0x04cc*/ 386,
-      /*0x03bd*/ 255,
-      -1,
-      /*0x057f*/ 467,
-      /*0x0287*/ 225,
-      /*0x047f*/ 352,
-      /*0x044c*/ 317,
-      /*0x04c8*/ 384,
-      /*0x0148*/ 90,
-      -1, -1,
-      /*0x2c46*/ 735,
-      /*0x03b9*/ 251,
-      /*0x0448*/ 313,
-      /*0x0195*/ 123,
-      /*0x03ce*/ 271,
-      -1,
-      /*0x04c4*/ 382,
-      /*0x0144*/ 88,
-      /*0x2d2d*/ 860,
-      /*0x0079*/ 23,
-      /*0x2c68*/ 763,
-      /*0x24e8*/ 711,
-      /*0x0444*/ 309,
-      -1,
-      /*0x1f44*/ 634,
-      /*0x00f3*/ 44,
-      /*0x1ebb*/ 565,
-      /*0x1e3b*/ 506,
-      /*0x04bb*/ 378,
-      /*0x214e*/ 669,
-      /*0x2cbb*/ 797,
-      /*0x03af*/ 242,
-      /*0x0075*/ 19,
-      -1,
-      /*0x043b*/ 300,
-      -1, -1,
-      /*0x2c4c*/ 741,
-      -1,
-      /*0x0192*/ 122,
-      -1,
-      /*0x00eb*/ 36,
-      -1,
-      /*0x2d1c*/ 849,
-      /*0x2c48*/ 737,
-      /*0xa77f*/ 938,
-      -1,
-      /*0x03f2*/ 285,
-      /*0x0071*/ 15,
-      /*0x037d*/ 238,
-      /*0x01f9*/ 161,
-      -1,
-      /*0x00e4*/ 29,
-      -1,
-      /*0x2c44*/ 733,
-      /*0x1eab*/ 557,
-      /*0x1e2b*/ 498,
-      /*0x04ab*/ 370,
-      /*0x012b*/ 77,
-      /*0x2cab*/ 789,
-      /*0x022b*/ 185,
-      /*0x052b*/ 434,
-      /*0x2172*/ 672,
-      /*0x01f5*/ 160,
-      /*0x0256*/ 204,
-      -1,
-      /*0x2c3b*/ 724,
-      /*0x0456*/ 327,
-      /*0x03fb*/ 288,
-      /*0x1e17*/ 488,
-      /*0x0497*/ 360,
-      /*0x0117*/ 67,
-      /*0x2c97*/ 779,
-      /*0x0217*/ 176,
-      /*0x0517*/ 424,
-      /*0xa73b*/ 909,
-      /*0x1e1f*/ 492,
-      /*0x049f*/ 364,
-      /*0x011f*/ 71,
-      /*0x2c9f*/ 783,
-      /*0x021f*/ 180,
-      /*0x051f*/ 428,
-      /*0xa797*/ 946,
-      /*0x217b*/ 681,
-      /*0xff42*/ 957,
-      /*0x03c6*/ 263,
-      -1, -1,
-      /*0x0436*/ 295,
-      /*0xa79f*/ 950,
-      /*0x1f36*/ 628,
-      /*0x1043d*/ 1003,
-      -1, -1, -1,
-      /*0x2d25*/ 858,
-      -1,
-      /*0xa697*/ 895,
-      /*0x01da*/ 147,
-      /*0x2c56*/ 751,
-      /*0x24d6*/ 693,
-      -1,
-      /*0x10439*/ 999,
-      -1,
-      /*0xa72b*/ 902,
-      /*0x1044e*/ 1020,
-      /*0x118da*/ 1048,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
       -1, -1, -1, -1,
-      /*0x2177*/ 677,
-      /*0x03cc*/ 269,
-      -1,
-      /*0x01bd*/ 136,
+      /*0x00e2*/ 27,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1,
       -1, -1, -1, -1,
-      /*0x03c8*/ 265,
-      /*0x2c36*/ 719,
-      /*0x2d23*/ 856,
-      /*0x1042f*/ 989,
-      -1,
-      /*0x0254*/ 203,
-      /*0x01b9*/ 135,
-      /*0x217f*/ 685,
-      /*0x0454*/ 325,
-      /*0x01ce*/ 141,
-      /*0x03c4*/ 261,
-      /*0x0072*/ 16,
-      -1, -1,
-      /*0x10429*/ 983,
-      /*0x1e89*/ 545,
-      /*0x1e09*/ 481,
-      /*0x118ce*/ 1036,
-      /*0x0109*/ 60,
-      /*0x2c89*/ 772,
-      /*0x0209*/ 169,
-      /*0x0509*/ 417,
-      /*0x03bb*/ 253,
-      -1,
-      /*0x1e8d*/ 547,
-      /*0x1e0d*/ 483,
-      /*0x048d*/ 355,
-      /*0x010d*/ 62,
-      /*0x2c8d*/ 774,
-      /*0x020d*/ 171,
-      /*0x050d*/ 419,
-      /*0x0062*/ 1,
-      /*0x1e1d*/ 491,
-      /*0x049d*/ 363,
-      /*0x011d*/ 70,
-      /*0x2c9d*/ 782,
-      /*0x021d*/ 179,
-      /*0x051d*/ 427,
-      -1,
-      /*0x0458*/ 329,
-      /*0x2c54*/ 749,
-      /*0x24d4*/ 691,
-      /*0x00ea*/ 35,
-      /*0x0252*/ 201,
-      /*0xa689*/ 888,
-      /*0xa79d*/ 949,
-      /*0x0452*/ 323,
-      /*0x025c*/ 208,
-      -1,
-      /*0x04ca*/ 385,
-      /*0x045c*/ 333,
-      -1,
-      /*0x2d05*/ 826,
-      /*0xa68d*/ 890,
-      /*0x00fa*/ 50,
-      /*0x044a*/ 315,
-      /*0x01a1*/ 127,
-      /*0x10446*/ 1012,
-      /*0x017c*/ 115,
-      /*0x0068*/ 7,
-      /*0x0077*/ 21,
-      /*0x057c*/ 464,
-      -1,
-      /*0x01fb*/ 162,
-      -1,
-      /*0x1f7c*/ 660,
-      -1,
-      /*0x0434*/ 293,
-      /*0x2d03*/ 824,
-      /*0x1f34*/ 626,
-      /*0x045e*/ 335,
-      /*0x2c58*/ 753,
-      /*0x24d8*/ 695,
-      -1, -1,
-      /*0x0199*/ 124,
-      /*0x03b6*/ 248,
-      -1,
-      /*0x2c52*/ 747,
-      /*0x24d2*/ 689,
-      /*0x01c6*/ 138,
-      /*0x0260*/ 209,
-      /*0x2c5c*/ 757,
-      /*0x24dc*/ 699,
-      /*0x1044c*/ 1018,
-      /*0x0371*/ 233,
-      /*0x1f60*/ 640,
-      /*0x2c4a*/ 739,
-      /*0x118c6*/ 1028,
-      -1, -1,
-      /*0x10448*/ 1014,
-      -1, -1, -1,
-      /*0x0430*/ 289,
-      /*0xff5a*/ 981,
-      /*0x1f30*/ 622,
-      /*0x0432*/ 291,
-      /*0x2c34*/ 717,
-      /*0x1f32*/ 624,
-      /*0x10444*/ 1010,
-      /*0x2c5e*/ 759,
-      /*0x24de*/ 701,
-      /*0xa77c*/ 937,
-      -1,
-      /*0x01ff*/ 164,
-      /*0x01cc*/ 140,
-      -1, -1, -1, -1, -1,
-      /*0x1043b*/ 1001,
-      -1,
-      /*0x118cc*/ 1034,
-      -1,
-      /*0x24e0*/ 703,
-      -1,
-      /*0x00ec*/ 37,
-      -1, -1,
-      /*0x118c8*/ 1030,
-      -1,
-      /*0x1fe0*/ 666,
-      -1,
-      /*0xff4e*/ 969,
-      /*0x2c30*/ 713,
-      -1, -1,
-      /*0x2c32*/ 715,
-      -1,
-      /*0x118c4*/ 1026,
-      -1, -1,
-      /*0x1fb0*/ 662,
-      -1, -1, -1, -1, -1, -1,
-      /*0x1042b*/ 985,
-      -1, -1, -1, -1, -1,
-      /*0x0289*/ 227,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1,
-      /*0x03ca*/ 267,
-      -1, -1,
-      /*0x2d27*/ 859,
-      -1,
-      /*0x10436*/ 996,
-      -1,
-      /*0x01d6*/ 145,
-      -1, -1, -1, -1,
-      /*0x03b4*/ 246,
-      -1, -1,
-      /*0x118d6*/ 1044,
-      -1, -1,
-      /*0x00f8*/ 48,
-      -1, -1, -1, -1,
-      /*0x217c*/ 682,
-      -1,
-      /*0x2d15*/ 842,
-      /*0x037b*/ 236,
-      -1,
-      /*0x01b6*/ 134,
-      -1, -1, -1, -1, -1, -1,
-      /*0xff46*/ 961,
-      /*0x00e6*/ 31,
-      -1, -1, -1, -1, -1, -1,
-      /*0x03b2*/ 244,
-      -1,
-      /*0x2d13*/ 840,
-      -1, -1, -1, -1, -1,
-      /*0x2d12*/ 839,
-      /*0x00ef*/ 40,
-      -1,
-      /*0x0377*/ 235,
-      -1, -1, -1, -1, -1, -1,
-      -1,
-      /*0xff4c*/ 967,
-      -1, -1, -1,
-      /*0x00ed*/ 38,
-      /*0x01d4*/ 144,
-      -1,
-      /*0xff48*/ 963,
-      -1, -1, -1, -1, -1,
-      /*0x118d4*/ 1042,
-      -1, -1, -1,
-      /*0xff44*/ 959,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1,
-      /*0x1044a*/ 1016,
-      -1, -1, -1, -1, -1, -1,
-      /*0x01d8*/ 146,
-      -1,
-      /*0x00f6*/ 47,
-      -1, -1,
-      /*0x10434*/ 994,
-      -1,
-      /*0x01d2*/ 143,
-      /*0x118d8*/ 1046,
-      -1, -1,
-      /*0x01dc*/ 148,
-      -1,
-      /*0x2d07*/ 828,
-      -1,
-      /*0x118d2*/ 1040,
-      -1, -1, -1,
-      /*0x118dc*/ 1050,
-      -1, -1, -1, -1,
-      /*0x118ca*/ 1032,
-      -1,
-      /*0xff56*/ 977,
-      -1,
-      /*0x01b4*/ 133,
-      -1, -1,
-      /*0x00fd*/ 53,
-      -1,
-      /*0x10430*/ 990,
-      -1, -1,
-      /*0x10432*/ 992,
-      -1, -1,
-      /*0x118de*/ 1052,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1,
-      /*0x01b0*/ 132,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1,
-      /*0xff54*/ 975,
-      -1, -1,
-      /*0x2d21*/ 854,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      /*0x2d19*/ 846,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1,
-      /*0xff58*/ 979,
-      -1, -1, -1, -1, -1, -1,
-      /*0xff52*/ 973,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1,
-      /*0xff4a*/ 965,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1,
-      /*0x037c*/ 237,
-      -1, -1, -1, -1, -1, -1,
-      -1,
-      /*0x00f9*/ 49,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      /*0x00f5*/ 46,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1,
-      /*0x00f1*/ 42,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      /*0x2d17*/ 844,
-      -1, -1, -1, -1, -1, -1,
-      /*0x2d1f*/ 852,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1,
-      /*0x00f2*/ 43,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1,
-      /*0x2d09*/ 830,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1,
-      /*0x2d0d*/ 834,
-      -1,
-      /*0x00e2*/ 27,
-      /*0x00fb*/ 51,
-      -1, -1, -1,
-      /*0x2d1d*/ 850,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1,
-      /*0x00e8*/ 33,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1,
-      /*0x00ff*/ 55,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1,
-      /*0x00fc*/ 52,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1, -1, -1, -1, -1,
-      -1, -1,
-      /*0x00e0*/ 25
+      /*0x00ee*/ 39
     };
 
   if (code <= MAX_CODE_VALUE && code >= MIN_CODE_VALUE)
     {
-      register int key = onigenc_unicode_CaseUnfold_11_hash(code);
+      register unsigned int key = onigenc_unicode_CaseUnfold_11_hash(code);
 
-      if (key <= MAX_HASH_VALUE && key >= 0)
+      if (key <= MAX_HASH_VALUE)
         {
           register short s = wordlist[key];
@@ -5366,5 +6668,5 @@
 };
 
-/* C code produced by gperf version 3.0.3 */
+/* ANSI-C code produced by gperf version 3.1 */
 /* Command-line: gperf -7 -k1,2,3,4,5,6 -F,-1 -c -j1 -i1 -t -T -E -C -H onigenc_unicode_CaseUnfold_12_hash -N onigenc_unicode_CaseUnfold_12_lookup -n  */
 
@@ -5401,10 +6703,4 @@
 }
 
-#ifdef __GNUC__
-__inline
-#ifdef __GNUC_STDC_INLINE__
-__attribute__ ((__gnu_inline__))
-#endif
-#endif
 static const CodePointList2 *
 onigenc_unicode_CaseUnfold_12_lookup(const OnigCodePoint *codes)
@@ -5491,7 +6787,7 @@
       codes[1] <= MAX_CODE_VALUE && codes[1] >= MIN_CODE_VALUE)
     {
-      register int key = onigenc_unicode_CaseUnfold_12_hash(codes);
+      register unsigned int key = onigenc_unicode_CaseUnfold_12_hash(codes);
 
-      if (key <= MAX_HASH_VALUE && key >= 0)
+      if (key <= MAX_HASH_VALUE)
         {
           register short s = wordlist[key];
@@ -5522,5 +6818,5 @@
 };
 
-/* C code produced by gperf version 3.0.3 */
+/* ANSI-C code produced by gperf version 3.1 */
 /* Command-line: gperf -7 -k1,2,3,4,5,6,7,8,9 -F,-1 -c -j1 -i1 -t -T -E -C -H onigenc_unicode_CaseUnfold_13_hash -N onigenc_unicode_CaseUnfold_13_lookup -n  */
 
@@ -5557,10 +6853,4 @@
 }
 
-#ifdef __GNUC__
-__inline
-#ifdef __GNUC_STDC_INLINE__
-__attribute__ ((__gnu_inline__))
-#endif
-#endif
 static const CodePointList2 *
 onigenc_unicode_CaseUnfold_13_lookup(const OnigCodePoint *codes)
@@ -5605,7 +6895,7 @@
       codes[2] <= MAX_CODE_VALUE && codes[2] >= MIN_CODE_VALUE)
     {
-      register int key = onigenc_unicode_CaseUnfold_13_hash(codes);
+      register unsigned int key = onigenc_unicode_CaseUnfold_13_hash(codes);
 
-      if (key <= MAX_HASH_VALUE && key >= 0)
+      if (key <= MAX_HASH_VALUE)
         {
           register short s = wordlist[key];
@@ -5618,2 +6908,137 @@
 }
 
+static const OnigCodePoint CaseMappingSpecials[] = {
+    L(1)|0x039C,
+    L(2)|0x0053, 0x0073, L(2)|0x0053, 0x0053,
+    L(2)|0x02BC, 0x004E,
+    L(1)|0x0053,
+    L(1)|0x01C5,
+    L(2)|0x0064, 0x017D, L(1)|0x01C4,
+    L(1)|0x01C8,
+    L(2)|0x006C, 0x004A, L(1)|0x01C7,
+    L(1)|0x01CB,
+    L(2)|0x006E, 0x004A, L(1)|0x01CA,
+    L(2)|0x004A, 0x030C,
+    L(1)|0x01F2,
+    L(2)|0x0064, 0x005A, L(1)|0x01F1,
+    L(1)|0x0399,
+    L(3)|0x0399, 0x0308, 0x0301,
+    L(3)|0x03A5, 0x0308, 0x0301,
+    L(1)|0x03A3,
+    L(1)|0x0392,
+    L(1)|0x0398,
+    L(1)|0x03A6,
+    L(1)|0x03A0,
+    L(1)|0x039A,
+    L(1)|0x03A1,
+    L(1)|0x0395,
+    L(2)|0x0535, 0x0582, L(2)|0x0535, 0x0552,
+    L(1)|0x0412,
+    L(1)|0x0414,
+    L(1)|0x041E,
+    L(1)|0x0421,
+    L(1)|0x0422,
+    L(1)|0x0422,
+    L(1)|0x042A,
+    L(1)|0x0462,
+    L(1)|0xA64A,
+    L(2)|0x0048, 0x0331,
+    L(2)|0x0054, 0x0308,
+    L(2)|0x0057, 0x030A,
+    L(2)|0x0059, 0x030A,
+    L(2)|0x0041, 0x02BE,
+    L(1)|0x1E60,
+    L(1)|0x00DF,
+    L(2)|0x03A5, 0x0313,
+    L(3)|0x03A5, 0x0313, 0x0300,
+    L(3)|0x03A5, 0x0313, 0x0301,
+    L(3)|0x03A5, 0x0313, 0x0342,
+    L(1)|0x1F88, L(2)|0x1F08, 0x0399,
+    L(1)|0x1F89, L(2)|0x1F09, 0x0399,
+    L(1)|0x1F8A, L(2)|0x1F0A, 0x0399,
+    L(1)|0x1F8B, L(2)|0x1F0B, 0x0399,
+    L(1)|0x1F8C, L(2)|0x1F0C, 0x0399,
+    L(1)|0x1F8D, L(2)|0x1F0D, 0x0399,
+    L(1)|0x1F8E, L(2)|0x1F0E, 0x0399,
+    L(1)|0x1F8F, L(2)|0x1F0F, 0x0399,
+    L(2)|0x1F00, 0x0399, L(1)|0x1F80, L(2)|0x1F08, 0x0399,
+    L(2)|0x1F01, 0x0399, L(1)|0x1F81, L(2)|0x1F09, 0x0399,
+    L(2)|0x1F02, 0x0399, L(1)|0x1F82, L(2)|0x1F0A, 0x0399,
+    L(2)|0x1F03, 0x0399, L(1)|0x1F83, L(2)|0x1F0B, 0x0399,
+    L(2)|0x1F04, 0x0399, L(1)|0x1F84, L(2)|0x1F0C, 0x0399,
+    L(2)|0x1F05, 0x0399, L(1)|0x1F85, L(2)|0x1F0D, 0x0399,
+    L(2)|0x1F06, 0x0399, L(1)|0x1F86, L(2)|0x1F0E, 0x0399,
+    L(2)|0x1F07, 0x0399, L(1)|0x1F87, L(2)|0x1F0F, 0x0399,
+    L(1)|0x1F98, L(2)|0x1F28, 0x0399,
+    L(1)|0x1F99, L(2)|0x1F29, 0x0399,
+    L(1)|0x1F9A, L(2)|0x1F2A, 0x0399,
+    L(1)|0x1F9B, L(2)|0x1F2B, 0x0399,
+    L(1)|0x1F9C, L(2)|0x1F2C, 0x0399,
+    L(1)|0x1F9D, L(2)|0x1F2D, 0x0399,
+    L(1)|0x1F9E, L(2)|0x1F2E, 0x0399,
+    L(1)|0x1F9F, L(2)|0x1F2F, 0x0399,
+    L(2)|0x1F20, 0x0399, L(1)|0x1F90, L(2)|0x1F28, 0x0399,
+    L(2)|0x1F21, 0x0399, L(1)|0x1F91, L(2)|0x1F29, 0x0399,
+    L(2)|0x1F22, 0x0399, L(1)|0x1F92, L(2)|0x1F2A, 0x0399,
+    L(2)|0x1F23, 0x0399, L(1)|0x1F93, L(2)|0x1F2B, 0x0399,
+    L(2)|0x1F24, 0x0399, L(1)|0x1F94, L(2)|0x1F2C, 0x0399,
+    L(2)|0x1F25, 0x0399, L(1)|0x1F95, L(2)|0x1F2D, 0x0399,
+    L(2)|0x1F26, 0x0399, L(1)|0x1F96, L(2)|0x1F2E, 0x0399,
+    L(2)|0x1F27, 0x0399, L(1)|0x1F97, L(2)|0x1F2F, 0x0399,
+    L(1)|0x1FA8, L(2)|0x1F68, 0x0399,
+    L(1)|0x1FA9, L(2)|0x1F69, 0x0399,
+    L(1)|0x1FAA, L(2)|0x1F6A, 0x0399,
+    L(1)|0x1FAB, L(2)|0x1F6B, 0x0399,
+    L(1)|0x1FAC, L(2)|0x1F6C, 0x0399,
+    L(1)|0x1FAD, L(2)|0x1F6D, 0x0399,
+    L(1)|0x1FAE, L(2)|0x1F6E, 0x0399,
+    L(1)|0x1FAF, L(2)|0x1F6F, 0x0399,
+    L(2)|0x1F60, 0x0399, L(1)|0x1FA0, L(2)|0x1F68, 0x0399,
+    L(2)|0x1F61, 0x0399, L(1)|0x1FA1, L(2)|0x1F69, 0x0399,
+    L(2)|0x1F62, 0x0399, L(1)|0x1FA2, L(2)|0x1F6A, 0x0399,
+    L(2)|0x1F63, 0x0399, L(1)|0x1FA3, L(2)|0x1F6B, 0x0399,
+    L(2)|0x1F64, 0x0399, L(1)|0x1FA4, L(2)|0x1F6C, 0x0399,
+    L(2)|0x1F65, 0x0399, L(1)|0x1FA5, L(2)|0x1F6D, 0x0399,
+    L(2)|0x1F66, 0x0399, L(1)|0x1FA6, L(2)|0x1F6E, 0x0399,
+    L(2)|0x1F67, 0x0399, L(1)|0x1FA7, L(2)|0x1F6F, 0x0399,
+    L(2)|0x1FBA, 0x0345, L(2)|0x1FBA, 0x0399,
+    L(1)|0x1FBC, L(2)|0x0391, 0x0399,
+    L(2)|0x0386, 0x0345, L(2)|0x0386, 0x0399,
+    L(2)|0x0391, 0x0342,
+    L(3)|0x0391, 0x0342, 0x0345, L(3)|0x0391, 0x0342, 0x0399,
+    L(2)|0x03B1, 0x0399, L(1)|0x1FB3, L(2)|0x0391, 0x0399,
+    L(1)|0x0399,
+    L(2)|0x1FCA, 0x0345, L(2)|0x1FCA, 0x0399,
+    L(1)|0x1FCC, L(2)|0x0397, 0x0399,
+    L(2)|0x0389, 0x0345, L(2)|0x0389, 0x0399,
+    L(2)|0x0397, 0x0342,
+    L(3)|0x0397, 0x0342, 0x0345, L(3)|0x0397, 0x0342, 0x0399,
+    L(2)|0x03B7, 0x0399, L(1)|0x1FC3, L(2)|0x0397, 0x0399,
+    L(3)|0x0399, 0x0308, 0x0300,
+    L(3)|0x0399, 0x0308, 0x0301,
+    L(2)|0x0399, 0x0342,
+    L(3)|0x0399, 0x0308, 0x0342,
+    L(3)|0x03A5, 0x0308, 0x0300,
+    L(3)|0x03A5, 0x0308, 0x0301,
+    L(2)|0x03A1, 0x0313,
+    L(2)|0x03A5, 0x0342,
+    L(3)|0x03A5, 0x0308, 0x0342,
+    L(2)|0x1FFA, 0x0345, L(2)|0x1FFA, 0x0399,
+    L(1)|0x1FFC, L(2)|0x03A9, 0x0399,
+    L(2)|0x038F, 0x0345, L(2)|0x038F, 0x0399,
+    L(2)|0x03A9, 0x0342,
+    L(3)|0x03A9, 0x0342, 0x0345, L(3)|0x03A9, 0x0342, 0x0399,
+    L(2)|0x03C9, 0x0399, L(1)|0x1FF3, L(2)|0x03A9, 0x0399,
+    L(2)|0x0046, 0x0066, L(2)|0x0046, 0x0046,
+    L(2)|0x0046, 0x0069, L(2)|0x0046, 0x0049,
+    L(2)|0x0046, 0x006C, L(2)|0x0046, 0x004C,
+    L(3)|0x0046, 0x0066, 0x0069, L(3)|0x0046, 0x0046, 0x0049,
+    L(3)|0x0046, 0x0066, 0x006C, L(3)|0x0046, 0x0046, 0x004C,
+    L(2)|0x0053, 0x0074, L(2)|0x0053, 0x0054,
+    L(2)|0x0053, 0x0074, L(2)|0x0053, 0x0054,
+    L(2)|0x0544, 0x0576, L(2)|0x0544, 0x0546,
+    L(2)|0x0544, 0x0565, L(2)|0x0544, 0x0535,
+    L(2)|0x0544, 0x056B, L(2)|0x0544, 0x053B,
+    L(2)|0x054E, 0x0576, L(2)|0x054E, 0x0546,
+    L(2)|0x0544, 0x056D, L(2)|0x0544, 0x053D,
+};
Index: EcnlProtoTool/trunk/onigmo-6.1.3/src/enc/unicode/name2ctype.h
===================================================================
--- EcnlProtoTool/trunk/onigmo-5.15.0/src/enc/unicode/name2ctype.h	(revision 321)
+++ EcnlProtoTool/trunk/onigmo-6.1.3/src/enc/unicode/name2ctype.h	(revision 331)
@@ -1,3 +1,3 @@
-/* C code produced by gperf version 3.0.3 */
+/* C code produced by gperf version 3.0.4 */
 /* Command-line: gperf -7 -c -j1 -i1 -t -C -P -T -H uniname2ctype_hash -Q uniname2ctype_pool -N uniname2ctype_p  */
 #ifndef USE_UNICODE_PROPERTIES
@@ -35,5 +35,4 @@
 
 
-#define long size_t
 
 /* 'NEWLINE': [[:NEWLINE:]] */
@@ -45,5 +44,5 @@
 /* 'Alpha': [[:Alpha:]] */
 static const OnigCodePoint CR_Alpha[] = {
-	600,
+	660,
 	0x0041, 0x005a,
 	0x0061, 0x007a,
@@ -97,6 +96,9 @@
 	0x081a, 0x082c,
 	0x0840, 0x0858,
-	0x08a0, 0x08b2,
-	0x08e4, 0x08e9,
+	0x0860, 0x086a,
+	0x08a0, 0x08b4,
+	0x08b6, 0x08bd,
+	0x08d4, 0x08df,
+	0x08e3, 0x08e9,
 	0x08f0, 0x093b,
 	0x093d, 0x094c,
@@ -118,4 +120,5 @@
 	0x09df, 0x09e3,
 	0x09f0, 0x09f1,
+	0x09fc, 0x09fc,
 	0x0a01, 0x0a03,
 	0x0a05, 0x0a0a,
@@ -145,4 +148,5 @@
 	0x0ad0, 0x0ad0,
 	0x0ae0, 0x0ae3,
+	0x0af9, 0x0afc,
 	0x0b01, 0x0b03,
 	0x0b05, 0x0b0c,
@@ -183,7 +187,7 @@
 	0x0c4a, 0x0c4c,
 	0x0c55, 0x0c56,
-	0x0c58, 0x0c59,
+	0x0c58, 0x0c5a,
 	0x0c60, 0x0c63,
-	0x0c81, 0x0c83,
+	0x0c80, 0x0c83,
 	0x0c85, 0x0c8c,
 	0x0c8e, 0x0c90,
@@ -198,5 +202,5 @@
 	0x0ce0, 0x0ce3,
 	0x0cf1, 0x0cf2,
-	0x0d01, 0x0d03,
+	0x0d00, 0x0d03,
 	0x0d05, 0x0d0c,
 	0x0d0e, 0x0d10,
@@ -206,6 +210,6 @@
 	0x0d4a, 0x0d4c,
 	0x0d4e, 0x0d4e,
-	0x0d57, 0x0d57,
-	0x0d60, 0x0d63,
+	0x0d54, 0x0d57,
+	0x0d5f, 0x0d63,
 	0x0d7a, 0x0d7f,
 	0x0d82, 0x0d83,
@@ -275,5 +279,6 @@
 	0x135f, 0x135f,
 	0x1380, 0x138f,
-	0x13a0, 0x13f4,
+	0x13a0, 0x13f5,
+	0x13f8, 0x13fd,
 	0x1401, 0x166c,
 	0x166f, 0x167f,
@@ -316,4 +321,5 @@
 	0x1c4d, 0x1c4f,
 	0x1c5a, 0x1c7d,
+	0x1c80, 0x1c88,
 	0x1ce9, 0x1cec,
 	0x1cee, 0x1cf3,
@@ -387,10 +393,10 @@
 	0x30a1, 0x30fa,
 	0x30fc, 0x30ff,
-	0x3105, 0x312d,
+	0x3105, 0x312e,
 	0x3131, 0x318e,
 	0x31a0, 0x31ba,
 	0x31f0, 0x31ff,
 	0x3400, 0x4db5,
-	0x4e00, 0x9fcc,
+	0x4e00, 0x9fea,
 	0xa000, 0xa48c,
 	0xa4d0, 0xa4fd,
@@ -400,11 +406,9 @@
 	0xa640, 0xa66e,
 	0xa674, 0xa67b,
-	0xa67f, 0xa69d,
-	0xa69f, 0xa6ef,
+	0xa67f, 0xa6ef,
 	0xa717, 0xa71f,
 	0xa722, 0xa788,
-	0xa78b, 0xa78e,
-	0xa790, 0xa7ad,
-	0xa7b0, 0xa7b1,
+	0xa78b, 0xa7ae,
+	0xa7b0, 0xa7b7,
 	0xa7f7, 0xa801,
 	0xa803, 0xa805,
@@ -413,6 +417,8 @@
 	0xa840, 0xa873,
 	0xa880, 0xa8c3,
+	0xa8c5, 0xa8c5,
 	0xa8f2, 0xa8f7,
 	0xa8fb, 0xa8fb,
+	0xa8fd, 0xa8fd,
 	0xa90a, 0xa92a,
 	0xa930, 0xa952,
@@ -440,7 +446,6 @@
 	0xab28, 0xab2e,
 	0xab30, 0xab5a,
-	0xab5c, 0xab5f,
-	0xab64, 0xab65,
-	0xabc0, 0xabea,
+	0xab5c, 0xab65,
+	0xab70, 0xabea,
 	0xac00, 0xd7a3,
 	0xd7b0, 0xd7c6,
@@ -481,5 +486,5 @@
 	0x102a0, 0x102d0,
 	0x10300, 0x1031f,
-	0x10330, 0x1034a,
+	0x1032d, 0x1034a,
 	0x10350, 0x1037a,
 	0x10380, 0x1039d,
@@ -488,4 +493,6 @@
 	0x103d1, 0x103d5,
 	0x10400, 0x1049d,
+	0x104b0, 0x104d3,
+	0x104d8, 0x104fb,
 	0x10500, 0x10527,
 	0x10530, 0x10563,
@@ -501,4 +508,6 @@
 	0x10860, 0x10876,
 	0x10880, 0x1089e,
+	0x108e0, 0x108f2,
+	0x108f4, 0x108f5,
 	0x10900, 0x10915,
 	0x10920, 0x10939,
@@ -519,4 +528,6 @@
 	0x10b80, 0x10b91,
 	0x10c00, 0x10c48,
+	0x10c80, 0x10cb2,
+	0x10cc0, 0x10cf2,
 	0x11000, 0x11045,
 	0x11082, 0x110b8,
@@ -528,9 +539,16 @@
 	0x111c1, 0x111c4,
 	0x111da, 0x111da,
+	0x111dc, 0x111dc,
 	0x11200, 0x11211,
 	0x11213, 0x11234,
 	0x11237, 0x11237,
+	0x1123e, 0x1123e,
+	0x11280, 0x11286,
+	0x11288, 0x11288,
+	0x1128a, 0x1128d,
+	0x1128f, 0x1129d,
+	0x1129f, 0x112a8,
 	0x112b0, 0x112e8,
-	0x11301, 0x11303,
+	0x11300, 0x11303,
 	0x11305, 0x1130c,
 	0x1130f, 0x11310,
@@ -542,6 +560,10 @@
 	0x11347, 0x11348,
 	0x1134b, 0x1134c,
+	0x11350, 0x11350,
 	0x11357, 0x11357,
 	0x1135d, 0x11363,
+	0x11400, 0x11441,
+	0x11443, 0x11445,
+	0x11447, 0x1144a,
 	0x11480, 0x114c1,
 	0x114c4, 0x114c5,
@@ -549,14 +571,38 @@
 	0x11580, 0x115b5,
 	0x115b8, 0x115be,
+	0x115d8, 0x115dd,
 	0x11600, 0x1163e,
 	0x11640, 0x11640,
 	0x11644, 0x11644,
 	0x11680, 0x116b5,
+	0x11700, 0x11719,
+	0x1171d, 0x1172a,
 	0x118a0, 0x118df,
 	0x118ff, 0x118ff,
+	0x11a00, 0x11a32,
+	0x11a35, 0x11a3e,
+	0x11a50, 0x11a83,
+	0x11a86, 0x11a97,
 	0x11ac0, 0x11af8,
-	0x12000, 0x12398,
+	0x11c00, 0x11c08,
+	0x11c0a, 0x11c36,
+	0x11c38, 0x11c3e,
+	0x11c40, 0x11c40,
+	0x11c72, 0x11c8f,
+	0x11c92, 0x11ca7,
+	0x11ca9, 0x11cb6,
+	0x11d00, 0x11d06,
+	0x11d08, 0x11d09,
+	0x11d0b, 0x11d36,
+	0x11d3a, 0x11d3a,
+	0x11d3c, 0x11d3d,
+	0x11d3f, 0x11d41,
+	0x11d43, 0x11d43,
+	0x11d46, 0x11d47,
+	0x12000, 0x12399,
 	0x12400, 0x1246e,
+	0x12480, 0x12543,
 	0x13000, 0x1342e,
+	0x14400, 0x14646,
 	0x16800, 0x16a38,
 	0x16a40, 0x16a5e,
@@ -569,5 +615,9 @@
 	0x16f50, 0x16f7e,
 	0x16f93, 0x16f9f,
-	0x1b000, 0x1b001,
+	0x16fe0, 0x16fe1,
+	0x17000, 0x187ec,
+	0x18800, 0x18af2,
+	0x1b000, 0x1b11e,
+	0x1b170, 0x1b2fb,
 	0x1bc00, 0x1bc6a,
 	0x1bc70, 0x1bc7c,
@@ -605,5 +655,12 @@
 	0x1d7aa, 0x1d7c2,
 	0x1d7c4, 0x1d7cb,
+	0x1e000, 0x1e006,
+	0x1e008, 0x1e018,
+	0x1e01b, 0x1e021,
+	0x1e023, 0x1e024,
+	0x1e026, 0x1e02a,
 	0x1e800, 0x1e8c4,
+	0x1e900, 0x1e943,
+	0x1e947, 0x1e947,
 	0x1ee00, 0x1ee03,
 	0x1ee05, 0x1ee1f,
@@ -645,4 +702,6 @@
 	0x2a700, 0x2b734,
 	0x2b740, 0x2b81d,
+	0x2b820, 0x2cea1,
+	0x2ceb0, 0x2ebe0,
 	0x2f800, 0x2fa1d,
 }; /* CR_Alpha */
@@ -670,5 +729,5 @@
 /* 'Digit': [[:Digit:]] */
 static const OnigCodePoint CR_Digit[] = {
-	50,
+	55,
 	0x0030, 0x0039,
 	0x0660, 0x0669,
@@ -714,16 +773,21 @@
 	0x111d0, 0x111d9,
 	0x112f0, 0x112f9,
+	0x11450, 0x11459,
 	0x114d0, 0x114d9,
 	0x11650, 0x11659,
 	0x116c0, 0x116c9,
+	0x11730, 0x11739,
 	0x118e0, 0x118e9,
+	0x11c50, 0x11c59,
+	0x11d50, 0x11d59,
 	0x16a60, 0x16a69,
 	0x16b50, 0x16b59,
 	0x1d7ce, 0x1d7ff,
+	0x1e950, 0x1e959,
 }; /* CR_Digit */
 
 /* 'Graph': [[:Graph:]] */
 static const OnigCodePoint CR_Graph[] = {
-	605,
+	654,
 	0x0021, 0x007e,
 	0x00a1, 0x0377,
@@ -750,6 +814,8 @@
 	0x0840, 0x085b,
 	0x085e, 0x085e,
-	0x08a0, 0x08b2,
-	0x08e4, 0x0983,
+	0x0860, 0x086a,
+	0x08a0, 0x08b4,
+	0x08b6, 0x08bd,
+	0x08d4, 0x0983,
 	0x0985, 0x098c,
 	0x098f, 0x0990,
@@ -764,5 +830,5 @@
 	0x09dc, 0x09dd,
 	0x09df, 0x09e3,
-	0x09e6, 0x09fb,
+	0x09e6, 0x09fd,
 	0x0a01, 0x0a03,
 	0x0a05, 0x0a0a,
@@ -794,4 +860,5 @@
 	0x0ae0, 0x0ae3,
 	0x0ae6, 0x0af1,
+	0x0af9, 0x0aff,
 	0x0b01, 0x0b03,
 	0x0b05, 0x0b0c,
@@ -833,9 +900,8 @@
 	0x0c4a, 0x0c4d,
 	0x0c55, 0x0c56,
-	0x0c58, 0x0c59,
+	0x0c58, 0x0c5a,
 	0x0c60, 0x0c63,
 	0x0c66, 0x0c6f,
-	0x0c78, 0x0c7f,
-	0x0c81, 0x0c83,
+	0x0c78, 0x0c83,
 	0x0c85, 0x0c8c,
 	0x0c8e, 0x0c90,
@@ -851,15 +917,12 @@
 	0x0ce6, 0x0cef,
 	0x0cf1, 0x0cf2,
-	0x0d01, 0x0d03,
+	0x0d00, 0x0d03,
 	0x0d05, 0x0d0c,
 	0x0d0e, 0x0d10,
-	0x0d12, 0x0d3a,
-	0x0d3d, 0x0d44,
+	0x0d12, 0x0d44,
 	0x0d46, 0x0d48,
-	0x0d4a, 0x0d4e,
-	0x0d57, 0x0d57,
-	0x0d60, 0x0d63,
-	0x0d66, 0x0d75,
-	0x0d79, 0x0d7f,
+	0x0d4a, 0x0d4f,
+	0x0d54, 0x0d63,
+	0x0d66, 0x0d7f,
 	0x0d82, 0x0d83,
 	0x0d85, 0x0d96,
@@ -921,5 +984,6 @@
 	0x135d, 0x137c,
 	0x1380, 0x1399,
-	0x13a0, 0x13f4,
+	0x13a0, 0x13f5,
+	0x13f8, 0x13fd,
 	0x1400, 0x167f,
 	0x1681, 0x169c,
@@ -961,10 +1025,9 @@
 	0x1bfc, 0x1c37,
 	0x1c3b, 0x1c49,
-	0x1c4d, 0x1c7f,
+	0x1c4d, 0x1c88,
 	0x1cc0, 0x1cc7,
-	0x1cd0, 0x1cf6,
-	0x1cf8, 0x1cf9,
-	0x1d00, 0x1df5,
-	0x1dfc, 0x1f15,
+	0x1cd0, 0x1cf9,
+	0x1d00, 0x1df9,
+	0x1dfb, 0x1f15,
 	0x1f18, 0x1f1d,
 	0x1f20, 0x1f45,
@@ -989,9 +1052,8 @@
 	0x2074, 0x208e,
 	0x2090, 0x209c,
-	0x20a0, 0x20bd,
+	0x20a0, 0x20bf,
 	0x20d0, 0x20f0,
-	0x2100, 0x2189,
-	0x2190, 0x23fa,
-	0x2400, 0x2426,
+	0x2100, 0x218b,
+	0x2190, 0x2426,
 	0x2440, 0x244a,
 	0x2460, 0x2b73,
@@ -999,5 +1061,6 @@
 	0x2b98, 0x2bb9,
 	0x2bbd, 0x2bc8,
-	0x2bca, 0x2bd1,
+	0x2bca, 0x2bd2,
+	0x2bec, 0x2bef,
 	0x2c00, 0x2c2e,
 	0x2c30, 0x2c5e,
@@ -1017,5 +1080,5 @@
 	0x2dd0, 0x2dd6,
 	0x2dd8, 0x2dde,
-	0x2de0, 0x2e42,
+	0x2de0, 0x2e49,
 	0x2e80, 0x2e99,
 	0x2e9b, 0x2ef3,
@@ -1025,5 +1088,5 @@
 	0x3041, 0x3096,
 	0x3099, 0x30ff,
-	0x3105, 0x312d,
+	0x3105, 0x312e,
 	0x3131, 0x318e,
 	0x3190, 0x31ba,
@@ -1032,19 +1095,17 @@
 	0x3220, 0x32fe,
 	0x3300, 0x4db5,
-	0x4dc0, 0x9fcc,
+	0x4dc0, 0x9fea,
 	0xa000, 0xa48c,
 	0xa490, 0xa4c6,
 	0xa4d0, 0xa62b,
-	0xa640, 0xa69d,
-	0xa69f, 0xa6f7,
-	0xa700, 0xa78e,
-	0xa790, 0xa7ad,
-	0xa7b0, 0xa7b1,
+	0xa640, 0xa6f7,
+	0xa700, 0xa7ae,
+	0xa7b0, 0xa7b7,
 	0xa7f7, 0xa82b,
 	0xa830, 0xa839,
 	0xa840, 0xa877,
-	0xa880, 0xa8c4,
+	0xa880, 0xa8c5,
 	0xa8ce, 0xa8d9,
-	0xa8e0, 0xa8fb,
+	0xa8e0, 0xa8fd,
 	0xa900, 0xa953,
 	0xa95f, 0xa97c,
@@ -1062,7 +1123,6 @@
 	0xab20, 0xab26,
 	0xab28, 0xab2e,
-	0xab30, 0xab5f,
-	0xab64, 0xab65,
-	0xabc0, 0xabed,
+	0xab30, 0xab65,
+	0xab70, 0xabed,
 	0xabf0, 0xabf9,
 	0xac00, 0xd7a3,
@@ -1084,6 +1144,5 @@
 	0xfdf0, 0xfdfd,
 	0xfe00, 0xfe19,
-	0xfe20, 0xfe2d,
-	0xfe30, 0xfe52,
+	0xfe20, 0xfe52,
 	0xfe54, 0xfe66,
 	0xfe68, 0xfe6b,
@@ -1108,5 +1167,5 @@
 	0x10100, 0x10102,
 	0x10107, 0x10133,
-	0x10137, 0x1018c,
+	0x10137, 0x1018e,
 	0x10190, 0x1019b,
 	0x101a0, 0x101a0,
@@ -1116,5 +1175,5 @@
 	0x102e0, 0x102fb,
 	0x10300, 0x10323,
-	0x10330, 0x1034a,
+	0x1032d, 0x1034a,
 	0x10350, 0x1037a,
 	0x10380, 0x1039d,
@@ -1123,4 +1182,6 @@
 	0x10400, 0x1049d,
 	0x104a0, 0x104a9,
+	0x104b0, 0x104d3,
+	0x104d8, 0x104fb,
 	0x10500, 0x10527,
 	0x10530, 0x10563,
@@ -1137,10 +1198,12 @@
 	0x10857, 0x1089e,
 	0x108a7, 0x108af,
-	0x10900, 0x1091b,
+	0x108e0, 0x108f2,
+	0x108f4, 0x108f5,
+	0x108fb, 0x1091b,
 	0x1091f, 0x10939,
 	0x1093f, 0x1093f,
 	0x10980, 0x109b7,
-	0x109be, 0x109bf,
-	0x10a00, 0x10a03,
+	0x109bc, 0x109cf,
+	0x109d2, 0x10a03,
 	0x10a05, 0x10a06,
 	0x10a0c, 0x10a13,
@@ -1160,4 +1223,7 @@
 	0x10ba9, 0x10baf,
 	0x10c00, 0x10c48,
+	0x10c80, 0x10cb2,
+	0x10cc0, 0x10cf2,
+	0x10cfa, 0x10cff,
 	0x10e60, 0x10e7e,
 	0x11000, 0x1104d,
@@ -1169,13 +1235,17 @@
 	0x11136, 0x11143,
 	0x11150, 0x11176,
-	0x11180, 0x111c8,
-	0x111cd, 0x111cd,
-	0x111d0, 0x111da,
+	0x11180, 0x111cd,
+	0x111d0, 0x111df,
 	0x111e1, 0x111f4,
 	0x11200, 0x11211,
-	0x11213, 0x1123d,
+	0x11213, 0x1123e,
+	0x11280, 0x11286,
+	0x11288, 0x11288,
+	0x1128a, 0x1128d,
+	0x1128f, 0x1129d,
+	0x1129f, 0x112a9,
 	0x112b0, 0x112ea,
 	0x112f0, 0x112f9,
-	0x11301, 0x11303,
+	0x11300, 0x11303,
 	0x11305, 0x1130c,
 	0x1130f, 0x11310,
@@ -1187,23 +1257,51 @@
 	0x11347, 0x11348,
 	0x1134b, 0x1134d,
+	0x11350, 0x11350,
 	0x11357, 0x11357,
 	0x1135d, 0x11363,
 	0x11366, 0x1136c,
 	0x11370, 0x11374,
+	0x11400, 0x11459,
+	0x1145b, 0x1145b,
+	0x1145d, 0x1145d,
 	0x11480, 0x114c7,
 	0x114d0, 0x114d9,
 	0x11580, 0x115b5,
-	0x115b8, 0x115c9,
+	0x115b8, 0x115dd,
 	0x11600, 0x11644,
 	0x11650, 0x11659,
+	0x11660, 0x1166c,
 	0x11680, 0x116b7,
 	0x116c0, 0x116c9,
+	0x11700, 0x11719,
+	0x1171d, 0x1172b,
+	0x11730, 0x1173f,
 	0x118a0, 0x118f2,
 	0x118ff, 0x118ff,
+	0x11a00, 0x11a47,
+	0x11a50, 0x11a83,
+	0x11a86, 0x11a9c,
+	0x11a9e, 0x11aa2,
 	0x11ac0, 0x11af8,
-	0x12000, 0x12398,
+	0x11c00, 0x11c08,
+	0x11c0a, 0x11c36,
+	0x11c38, 0x11c45,
+	0x11c50, 0x11c6c,
+	0x11c70, 0x11c8f,
+	0x11c92, 0x11ca7,
+	0x11ca9, 0x11cb6,
+	0x11d00, 0x11d06,
+	0x11d08, 0x11d09,
+	0x11d0b, 0x11d36,
+	0x11d3a, 0x11d3a,
+	0x11d3c, 0x11d3d,
+	0x11d3f, 0x11d47,
+	0x11d50, 0x11d59,
+	0x12000, 0x12399,
 	0x12400, 0x1246e,
 	0x12470, 0x12474,
+	0x12480, 0x12543,
 	0x13000, 0x1342e,
+	0x14400, 0x14646,
 	0x16800, 0x16a38,
 	0x16a40, 0x16a5e,
@@ -1220,5 +1318,9 @@
 	0x16f50, 0x16f7e,
 	0x16f8f, 0x16f9f,
-	0x1b000, 0x1b001,
+	0x16fe0, 0x16fe1,
+	0x17000, 0x187ec,
+	0x18800, 0x18af2,
+	0x1b000, 0x1b11e,
+	0x1b170, 0x1b2fb,
 	0x1bc00, 0x1bc6a,
 	0x1bc70, 0x1bc7c,
@@ -1228,5 +1330,5 @@
 	0x1d000, 0x1d0f5,
 	0x1d100, 0x1d126,
-	0x1d129, 0x1d1dd,
+	0x1d129, 0x1d1e8,
 	0x1d200, 0x1d245,
 	0x1d300, 0x1d356,
@@ -1252,7 +1354,17 @@
 	0x1d552, 0x1d6a5,
 	0x1d6a8, 0x1d7cb,
-	0x1d7ce, 0x1d7ff,
+	0x1d7ce, 0x1da8b,
+	0x1da9b, 0x1da9f,
+	0x1daa1, 0x1daaf,
+	0x1e000, 0x1e006,
+	0x1e008, 0x1e018,
+	0x1e01b, 0x1e021,
+	0x1e023, 0x1e024,
+	0x1e026, 0x1e02a,
 	0x1e800, 0x1e8c4,
 	0x1e8c7, 0x1e8d6,
+	0x1e900, 0x1e94a,
+	0x1e950, 0x1e959,
+	0x1e95e, 0x1e95f,
 	0x1ee00, 0x1ee03,
 	0x1ee05, 0x1ee1f,
@@ -1298,21 +1410,13 @@
 	0x1f110, 0x1f12e,
 	0x1f130, 0x1f16b,
-	0x1f170, 0x1f19a,
+	0x1f170, 0x1f1ac,
 	0x1f1e6, 0x1f202,
-	0x1f210, 0x1f23a,
+	0x1f210, 0x1f23b,
 	0x1f240, 0x1f248,
 	0x1f250, 0x1f251,
-	0x1f300, 0x1f32c,
-	0x1f330, 0x1f37d,
-	0x1f380, 0x1f3ce,
-	0x1f3d4, 0x1f3f7,
-	0x1f400, 0x1f4fe,
-	0x1f500, 0x1f54a,
-	0x1f550, 0x1f579,
-	0x1f57b, 0x1f5a3,
-	0x1f5a5, 0x1f642,
-	0x1f645, 0x1f6cf,
+	0x1f260, 0x1f265,
+	0x1f300, 0x1f6d4,
 	0x1f6e0, 0x1f6ec,
-	0x1f6f0, 0x1f6f3,
+	0x1f6f0, 0x1f6f8,
 	0x1f700, 0x1f773,
 	0x1f780, 0x1f7d4,
@@ -1322,7 +1426,16 @@
 	0x1f860, 0x1f887,
 	0x1f890, 0x1f8ad,
+	0x1f900, 0x1f90b,
+	0x1f910, 0x1f93e,
+	0x1f940, 0x1f94c,
+	0x1f950, 0x1f96b,
+	0x1f980, 0x1f997,
+	0x1f9c0, 0x1f9c0,
+	0x1f9d0, 0x1f9e6,
 	0x20000, 0x2a6d6,
 	0x2a700, 0x2b734,
 	0x2b740, 0x2b81d,
+	0x2b820, 0x2cea1,
+	0x2ceb0, 0x2ebe0,
 	0x2f800, 0x2fa1d,
 	0xe0001, 0xe0001,
@@ -1335,5 +1448,5 @@
 /* 'Lower': [[:Lower:]] */
 static const OnigCodePoint CR_Lower[] = {
-	633,
+	640,
 	0x0061, 0x007a,
 	0x00aa, 0x00aa,
@@ -1611,4 +1724,6 @@
 	0x052f, 0x052f,
 	0x0561, 0x0587,
+	0x13f8, 0x13fd,
+	0x1c80, 0x1c88,
 	0x1d00, 0x1dbf,
 	0x1e01, 0x1e01,
@@ -1932,12 +2047,16 @@
 	0xa7a7, 0xa7a7,
 	0xa7a9, 0xa7a9,
+	0xa7b5, 0xa7b5,
+	0xa7b7, 0xa7b7,
 	0xa7f8, 0xa7fa,
 	0xab30, 0xab5a,
-	0xab5c, 0xab5f,
-	0xab64, 0xab65,
+	0xab5c, 0xab65,
+	0xab70, 0xabbf,
 	0xfb00, 0xfb06,
 	0xfb13, 0xfb17,
 	0xff41, 0xff5a,
 	0x10428, 0x1044f,
+	0x104d8, 0x104fb,
+	0x10cc0, 0x10cf2,
 	0x118c0, 0x118df,
 	0x1d41a, 0x1d433,
@@ -1969,9 +2088,10 @@
 	0x1d7c4, 0x1d7c9,
 	0x1d7cb, 0x1d7cb,
+	0x1e922, 0x1e943,
 }; /* CR_Lower */
 
 /* 'Print': [[:Print:]] */
 static const OnigCodePoint CR_Print[] = {
-	602,
+	651,
 	0x0020, 0x007e,
 	0x00a0, 0x0377,
@@ -1998,6 +2118,8 @@
 	0x0840, 0x085b,
 	0x085e, 0x085e,
-	0x08a0, 0x08b2,
-	0x08e4, 0x0983,
+	0x0860, 0x086a,
+	0x08a0, 0x08b4,
+	0x08b6, 0x08bd,
+	0x08d4, 0x0983,
 	0x0985, 0x098c,
 	0x098f, 0x0990,
@@ -2012,5 +2134,5 @@
 	0x09dc, 0x09dd,
 	0x09df, 0x09e3,
-	0x09e6, 0x09fb,
+	0x09e6, 0x09fd,
 	0x0a01, 0x0a03,
 	0x0a05, 0x0a0a,
@@ -2042,4 +2164,5 @@
 	0x0ae0, 0x0ae3,
 	0x0ae6, 0x0af1,
+	0x0af9, 0x0aff,
 	0x0b01, 0x0b03,
 	0x0b05, 0x0b0c,
@@ -2081,9 +2204,8 @@
 	0x0c4a, 0x0c4d,
 	0x0c55, 0x0c56,
-	0x0c58, 0x0c59,
+	0x0c58, 0x0c5a,
 	0x0c60, 0x0c63,
 	0x0c66, 0x0c6f,
-	0x0c78, 0x0c7f,
-	0x0c81, 0x0c83,
+	0x0c78, 0x0c83,
 	0x0c85, 0x0c8c,
 	0x0c8e, 0x0c90,
@@ -2099,15 +2221,12 @@
 	0x0ce6, 0x0cef,
 	0x0cf1, 0x0cf2,
-	0x0d01, 0x0d03,
+	0x0d00, 0x0d03,
 	0x0d05, 0x0d0c,
 	0x0d0e, 0x0d10,
-	0x0d12, 0x0d3a,
-	0x0d3d, 0x0d44,
+	0x0d12, 0x0d44,
 	0x0d46, 0x0d48,
-	0x0d4a, 0x0d4e,
-	0x0d57, 0x0d57,
-	0x0d60, 0x0d63,
-	0x0d66, 0x0d75,
-	0x0d79, 0x0d7f,
+	0x0d4a, 0x0d4f,
+	0x0d54, 0x0d63,
+	0x0d66, 0x0d7f,
 	0x0d82, 0x0d83,
 	0x0d85, 0x0d96,
@@ -2169,5 +2288,6 @@
 	0x135d, 0x137c,
 	0x1380, 0x1399,
-	0x13a0, 0x13f4,
+	0x13a0, 0x13f5,
+	0x13f8, 0x13fd,
 	0x1400, 0x169c,
 	0x16a0, 0x16f8,
@@ -2208,10 +2328,9 @@
 	0x1bfc, 0x1c37,
 	0x1c3b, 0x1c49,
-	0x1c4d, 0x1c7f,
+	0x1c4d, 0x1c88,
 	0x1cc0, 0x1cc7,
-	0x1cd0, 0x1cf6,
-	0x1cf8, 0x1cf9,
-	0x1d00, 0x1df5,
-	0x1dfc, 0x1f15,
+	0x1cd0, 0x1cf9,
+	0x1d00, 0x1df9,
+	0x1dfb, 0x1f15,
 	0x1f18, 0x1f1d,
 	0x1f20, 0x1f45,
@@ -2234,9 +2353,8 @@
 	0x2074, 0x208e,
 	0x2090, 0x209c,
-	0x20a0, 0x20bd,
+	0x20a0, 0x20bf,
 	0x20d0, 0x20f0,
-	0x2100, 0x2189,
-	0x2190, 0x23fa,
-	0x2400, 0x2426,
+	0x2100, 0x218b,
+	0x2190, 0x2426,
 	0x2440, 0x244a,
 	0x2460, 0x2b73,
@@ -2244,5 +2362,6 @@
 	0x2b98, 0x2bb9,
 	0x2bbd, 0x2bc8,
-	0x2bca, 0x2bd1,
+	0x2bca, 0x2bd2,
+	0x2bec, 0x2bef,
 	0x2c00, 0x2c2e,
 	0x2c30, 0x2c5e,
@@ -2262,5 +2381,5 @@
 	0x2dd0, 0x2dd6,
 	0x2dd8, 0x2dde,
-	0x2de0, 0x2e42,
+	0x2de0, 0x2e49,
 	0x2e80, 0x2e99,
 	0x2e9b, 0x2ef3,
@@ -2270,5 +2389,5 @@
 	0x3041, 0x3096,
 	0x3099, 0x30ff,
-	0x3105, 0x312d,
+	0x3105, 0x312e,
 	0x3131, 0x318e,
 	0x3190, 0x31ba,
@@ -2277,19 +2396,17 @@
 	0x3220, 0x32fe,
 	0x3300, 0x4db5,
-	0x4dc0, 0x9fcc,
+	0x4dc0, 0x9fea,
 	0xa000, 0xa48c,
 	0xa490, 0xa4c6,
 	0xa4d0, 0xa62b,
-	0xa640, 0xa69d,
-	0xa69f, 0xa6f7,
-	0xa700, 0xa78e,
-	0xa790, 0xa7ad,
-	0xa7b0, 0xa7b1,
+	0xa640, 0xa6f7,
+	0xa700, 0xa7ae,
+	0xa7b0, 0xa7b7,
 	0xa7f7, 0xa82b,
 	0xa830, 0xa839,
 	0xa840, 0xa877,
-	0xa880, 0xa8c4,
+	0xa880, 0xa8c5,
 	0xa8ce, 0xa8d9,
-	0xa8e0, 0xa8fb,
+	0xa8e0, 0xa8fd,
 	0xa900, 0xa953,
 	0xa95f, 0xa97c,
@@ -2307,7 +2424,6 @@
 	0xab20, 0xab26,
 	0xab28, 0xab2e,
-	0xab30, 0xab5f,
-	0xab64, 0xab65,
-	0xabc0, 0xabed,
+	0xab30, 0xab65,
+	0xab70, 0xabed,
 	0xabf0, 0xabf9,
 	0xac00, 0xd7a3,
@@ -2329,6 +2445,5 @@
 	0xfdf0, 0xfdfd,
 	0xfe00, 0xfe19,
-	0xfe20, 0xfe2d,
-	0xfe30, 0xfe52,
+	0xfe20, 0xfe52,
 	0xfe54, 0xfe66,
 	0xfe68, 0xfe6b,
@@ -2353,5 +2468,5 @@
 	0x10100, 0x10102,
 	0x10107, 0x10133,
-	0x10137, 0x1018c,
+	0x10137, 0x1018e,
 	0x10190, 0x1019b,
 	0x101a0, 0x101a0,
@@ -2361,5 +2476,5 @@
 	0x102e0, 0x102fb,
 	0x10300, 0x10323,
-	0x10330, 0x1034a,
+	0x1032d, 0x1034a,
 	0x10350, 0x1037a,
 	0x10380, 0x1039d,
@@ -2368,4 +2483,6 @@
 	0x10400, 0x1049d,
 	0x104a0, 0x104a9,
+	0x104b0, 0x104d3,
+	0x104d8, 0x104fb,
 	0x10500, 0x10527,
 	0x10530, 0x10563,
@@ -2382,10 +2499,12 @@
 	0x10857, 0x1089e,
 	0x108a7, 0x108af,
-	0x10900, 0x1091b,
+	0x108e0, 0x108f2,
+	0x108f4, 0x108f5,
+	0x108fb, 0x1091b,
 	0x1091f, 0x10939,
 	0x1093f, 0x1093f,
 	0x10980, 0x109b7,
-	0x109be, 0x109bf,
-	0x10a00, 0x10a03,
+	0x109bc, 0x109cf,
+	0x109d2, 0x10a03,
 	0x10a05, 0x10a06,
 	0x10a0c, 0x10a13,
@@ -2405,4 +2524,7 @@
 	0x10ba9, 0x10baf,
 	0x10c00, 0x10c48,
+	0x10c80, 0x10cb2,
+	0x10cc0, 0x10cf2,
+	0x10cfa, 0x10cff,
 	0x10e60, 0x10e7e,
 	0x11000, 0x1104d,
@@ -2414,13 +2536,17 @@
 	0x11136, 0x11143,
 	0x11150, 0x11176,
-	0x11180, 0x111c8,
-	0x111cd, 0x111cd,
-	0x111d0, 0x111da,
+	0x11180, 0x111cd,
+	0x111d0, 0x111df,
 	0x111e1, 0x111f4,
 	0x11200, 0x11211,
-	0x11213, 0x1123d,
+	0x11213, 0x1123e,
+	0x11280, 0x11286,
+	0x11288, 0x11288,
+	0x1128a, 0x1128d,
+	0x1128f, 0x1129d,
+	0x1129f, 0x112a9,
 	0x112b0, 0x112ea,
 	0x112f0, 0x112f9,
-	0x11301, 0x11303,
+	0x11300, 0x11303,
 	0x11305, 0x1130c,
 	0x1130f, 0x11310,
@@ -2432,23 +2558,51 @@
 	0x11347, 0x11348,
 	0x1134b, 0x1134d,
+	0x11350, 0x11350,
 	0x11357, 0x11357,
 	0x1135d, 0x11363,
 	0x11366, 0x1136c,
 	0x11370, 0x11374,
+	0x11400, 0x11459,
+	0x1145b, 0x1145b,
+	0x1145d, 0x1145d,
 	0x11480, 0x114c7,
 	0x114d0, 0x114d9,
 	0x11580, 0x115b5,
-	0x115b8, 0x115c9,
+	0x115b8, 0x115dd,
 	0x11600, 0x11644,
 	0x11650, 0x11659,
+	0x11660, 0x1166c,
 	0x11680, 0x116b7,
 	0x116c0, 0x116c9,
+	0x11700, 0x11719,
+	0x1171d, 0x1172b,
+	0x11730, 0x1173f,
 	0x118a0, 0x118f2,
 	0x118ff, 0x118ff,
+	0x11a00, 0x11a47,
+	0x11a50, 0x11a83,
+	0x11a86, 0x11a9c,
+	0x11a9e, 0x11aa2,
 	0x11ac0, 0x11af8,
-	0x12000, 0x12398,
+	0x11c00, 0x11c08,
+	0x11c0a, 0x11c36,
+	0x11c38, 0x11c45,
+	0x11c50, 0x11c6c,
+	0x11c70, 0x11c8f,
+	0x11c92, 0x11ca7,
+	0x11ca9, 0x11cb6,
+	0x11d00, 0x11d06,
+	0x11d08, 0x11d09,
+	0x11d0b, 0x11d36,
+	0x11d3a, 0x11d3a,
+	0x11d3c, 0x11d3d,
+	0x11d3f, 0x11d47,
+	0x11d50, 0x11d59,
+	0x12000, 0x12399,
 	0x12400, 0x1246e,
 	0x12470, 0x12474,
+	0x12480, 0x12543,
 	0x13000, 0x1342e,
+	0x14400, 0x14646,
 	0x16800, 0x16a38,
 	0x16a40, 0x16a5e,
@@ -2465,5 +2619,9 @@
 	0x16f50, 0x16f7e,
 	0x16f8f, 0x16f9f,
-	0x1b000, 0x1b001,
+	0x16fe0, 0x16fe1,
+	0x17000, 0x187ec,
+	0x18800, 0x18af2,
+	0x1b000, 0x1b11e,
+	0x1b170, 0x1b2fb,
 	0x1bc00, 0x1bc6a,
 	0x1bc70, 0x1bc7c,
@@ -2473,5 +2631,5 @@
 	0x1d000, 0x1d0f5,
 	0x1d100, 0x1d126,
-	0x1d129, 0x1d1dd,
+	0x1d129, 0x1d1e8,
 	0x1d200, 0x1d245,
 	0x1d300, 0x1d356,
@@ -2497,7 +2655,17 @@
 	0x1d552, 0x1d6a5,
 	0x1d6a8, 0x1d7cb,
-	0x1d7ce, 0x1d7ff,
+	0x1d7ce, 0x1da8b,
+	0x1da9b, 0x1da9f,
+	0x1daa1, 0x1daaf,
+	0x1e000, 0x1e006,
+	0x1e008, 0x1e018,
+	0x1e01b, 0x1e021,
+	0x1e023, 0x1e024,
+	0x1e026, 0x1e02a,
 	0x1e800, 0x1e8c4,
 	0x1e8c7, 0x1e8d6,
+	0x1e900, 0x1e94a,
+	0x1e950, 0x1e959,
+	0x1e95e, 0x1e95f,
 	0x1ee00, 0x1ee03,
 	0x1ee05, 0x1ee1f,
@@ -2543,21 +2711,13 @@
 	0x1f110, 0x1f12e,
 	0x1f130, 0x1f16b,
-	0x1f170, 0x1f19a,
+	0x1f170, 0x1f1ac,
 	0x1f1e6, 0x1f202,
-	0x1f210, 0x1f23a,
+	0x1f210, 0x1f23b,
 	0x1f240, 0x1f248,
 	0x1f250, 0x1f251,
-	0x1f300, 0x1f32c,
-	0x1f330, 0x1f37d,
-	0x1f380, 0x1f3ce,
-	0x1f3d4, 0x1f3f7,
-	0x1f400, 0x1f4fe,
-	0x1f500, 0x1f54a,
-	0x1f550, 0x1f579,
-	0x1f57b, 0x1f5a3,
-	0x1f5a5, 0x1f642,
-	0x1f645, 0x1f6cf,
+	0x1f260, 0x1f265,
+	0x1f300, 0x1f6d4,
 	0x1f6e0, 0x1f6ec,
-	0x1f6f0, 0x1f6f3,
+	0x1f6f0, 0x1f6f8,
 	0x1f700, 0x1f773,
 	0x1f780, 0x1f7d4,
@@ -2567,7 +2727,16 @@
 	0x1f860, 0x1f887,
 	0x1f890, 0x1f8ad,
+	0x1f900, 0x1f90b,
+	0x1f910, 0x1f93e,
+	0x1f940, 0x1f94c,
+	0x1f950, 0x1f96b,
+	0x1f980, 0x1f997,
+	0x1f9c0, 0x1f9c0,
+	0x1f9d0, 0x1f9e6,
 	0x20000, 0x2a6d6,
 	0x2a700, 0x2b734,
 	0x2b740, 0x2b81d,
+	0x2b820, 0x2cea1,
+	0x2ceb0, 0x2ebe0,
 	0x2f800, 0x2fa1d,
 	0xe0001, 0xe0001,
@@ -2578,16 +2747,11 @@
 }; /* CR_Print */
 
-/* 'Punct': [[:Punct:]] */
-static const OnigCodePoint CR_Punct[] = {
-	155,
-	0x0021, 0x0023,
-	0x0025, 0x002a,
-	0x002c, 0x002f,
-	0x003a, 0x003b,
-	0x003f, 0x0040,
-	0x005b, 0x005d,
-	0x005f, 0x005f,
-	0x007b, 0x007b,
-	0x007d, 0x007d,
+/* 'XPosixPunct': [[:Punct:]] */
+static const OnigCodePoint CR_XPosixPunct[] = {
+	167,
+	0x0021, 0x002f,
+	0x003a, 0x0040,
+	0x005b, 0x0060,
+	0x007b, 0x007e,
 	0x00a1, 0x00a1,
 	0x00a7, 0x00a7,
@@ -2617,4 +2781,5 @@
 	0x0964, 0x0965,
 	0x0970, 0x0970,
+	0x09fd, 0x09fd,
 	0x0af0, 0x0af0,
 	0x0df4, 0x0df4,
@@ -2666,5 +2831,5 @@
 	0x2d70, 0x2d70,
 	0x2e00, 0x2e2e,
-	0x2e30, 0x2e42,
+	0x2e30, 0x2e49,
 	0x3001, 0x3003,
 	0x3008, 0x3011,
@@ -2682,4 +2847,5 @@
 	0xa8ce, 0xa8cf,
 	0xa8f8, 0xa8fa,
+	0xa8fc, 0xa8fc,
 	0xa92e, 0xa92f,
 	0xa95f, 0xa95f,
@@ -2724,10 +2890,23 @@
 	0x11140, 0x11143,
 	0x11174, 0x11175,
-	0x111c5, 0x111c8,
+	0x111c5, 0x111c9,
 	0x111cd, 0x111cd,
+	0x111db, 0x111db,
+	0x111dd, 0x111df,
 	0x11238, 0x1123d,
+	0x112a9, 0x112a9,
+	0x1144b, 0x1144f,
+	0x1145b, 0x1145b,
+	0x1145d, 0x1145d,
 	0x114c6, 0x114c6,
-	0x115c1, 0x115c9,
+	0x115c1, 0x115d7,
 	0x11641, 0x11643,
+	0x11660, 0x1166c,
+	0x1173c, 0x1173e,
+	0x11a3f, 0x11a46,
+	0x11a9a, 0x11a9c,
+	0x11a9e, 0x11aa2,
+	0x11c41, 0x11c45,
+	0x11c70, 0x11c71,
 	0x12470, 0x12474,
 	0x16a6e, 0x16a6f,
@@ -2736,5 +2915,7 @@
 	0x16b44, 0x16b44,
 	0x1bc9f, 0x1bc9f,
-}; /* CR_Punct */
+	0x1da87, 0x1da8b,
+	0x1e95e, 0x1e95f,
+}; /* CR_XPosixPunct */
 
 /* 'Space': [[:Space:]] */
@@ -2755,5 +2936,5 @@
 /* 'Upper': [[:Upper:]] */
 static const OnigCodePoint CR_Upper[] = {
-	627,
+	632,
 	0x0041, 0x005a,
 	0x00c0, 0x00d6,
@@ -3031,4 +3212,5 @@
 	0x10c7, 0x10c7,
 	0x10cd, 0x10cd,
+	0x13a0, 0x13f5,
 	0x1e00, 0x1e00,
 	0x1e02, 0x1e02,
@@ -3344,8 +3526,11 @@
 	0xa7a6, 0xa7a6,
 	0xa7a8, 0xa7a8,
-	0xa7aa, 0xa7ad,
-	0xa7b0, 0xa7b1,
+	0xa7aa, 0xa7ae,
+	0xa7b0, 0xa7b4,
+	0xa7b6, 0xa7b6,
 	0xff21, 0xff3a,
 	0x10400, 0x10427,
+	0x104b0, 0x104d3,
+	0x10c80, 0x10cb2,
 	0x118a0, 0x118bf,
 	0x1d400, 0x1d419,
@@ -3380,4 +3565,5 @@
 	0x1d790, 0x1d7a8,
 	0x1d7ca, 0x1d7ca,
+	0x1e900, 0x1e921,
 	0x1f130, 0x1f149,
 	0x1f150, 0x1f169,
@@ -3395,5 +3581,5 @@
 /* 'Word': [[:Word:]] */
 static const OnigCodePoint CR_Word[] = {
-	629,
+	692,
 	0x0030, 0x0039,
 	0x0041, 0x005a,
@@ -3444,6 +3630,9 @@
 	0x0800, 0x082d,
 	0x0840, 0x085b,
-	0x08a0, 0x08b2,
-	0x08e4, 0x0963,
+	0x0860, 0x086a,
+	0x08a0, 0x08b4,
+	0x08b6, 0x08bd,
+	0x08d4, 0x08e1,
+	0x08e3, 0x0963,
 	0x0966, 0x096f,
 	0x0971, 0x0983,
@@ -3461,4 +3650,5 @@
 	0x09df, 0x09e3,
 	0x09e6, 0x09f1,
+	0x09fc, 0x09fc,
 	0x0a01, 0x0a03,
 	0x0a05, 0x0a0a,
@@ -3490,4 +3680,5 @@
 	0x0ae0, 0x0ae3,
 	0x0ae6, 0x0aef,
+	0x0af9, 0x0aff,
 	0x0b01, 0x0b03,
 	0x0b05, 0x0b0c,
@@ -3530,8 +3721,8 @@
 	0x0c4a, 0x0c4d,
 	0x0c55, 0x0c56,
-	0x0c58, 0x0c59,
+	0x0c58, 0x0c5a,
 	0x0c60, 0x0c63,
 	0x0c66, 0x0c6f,
-	0x0c81, 0x0c83,
+	0x0c80, 0x0c83,
 	0x0c85, 0x0c8c,
 	0x0c8e, 0x0c90,
@@ -3547,13 +3738,12 @@
 	0x0ce6, 0x0cef,
 	0x0cf1, 0x0cf2,
-	0x0d01, 0x0d03,
+	0x0d00, 0x0d03,
 	0x0d05, 0x0d0c,
 	0x0d0e, 0x0d10,
-	0x0d12, 0x0d3a,
-	0x0d3d, 0x0d44,
+	0x0d12, 0x0d44,
 	0x0d46, 0x0d48,
 	0x0d4a, 0x0d4e,
-	0x0d57, 0x0d57,
-	0x0d60, 0x0d63,
+	0x0d54, 0x0d57,
+	0x0d5f, 0x0d63,
 	0x0d66, 0x0d6f,
 	0x0d7a, 0x0d7f,
@@ -3627,5 +3817,6 @@
 	0x135d, 0x135f,
 	0x1380, 0x138f,
-	0x13a0, 0x13f4,
+	0x13a0, 0x13f5,
+	0x13f8, 0x13fd,
 	0x1401, 0x166c,
 	0x166f, 0x167f,
@@ -3671,9 +3862,9 @@
 	0x1c40, 0x1c49,
 	0x1c4d, 0x1c7d,
+	0x1c80, 0x1c88,
 	0x1cd0, 0x1cd2,
-	0x1cd4, 0x1cf6,
-	0x1cf8, 0x1cf9,
-	0x1d00, 0x1df5,
-	0x1dfc, 0x1f15,
+	0x1cd4, 0x1cf9,
+	0x1d00, 0x1df9,
+	0x1dfb, 0x1f15,
 	0x1f18, 0x1f1d,
 	0x1f20, 0x1f45,
@@ -3744,10 +3935,10 @@
 	0x30a1, 0x30fa,
 	0x30fc, 0x30ff,
-	0x3105, 0x312d,
+	0x3105, 0x312e,
 	0x3131, 0x318e,
 	0x31a0, 0x31ba,
 	0x31f0, 0x31ff,
 	0x3400, 0x4db5,
-	0x4e00, 0x9fcc,
+	0x4e00, 0x9fea,
 	0xa000, 0xa48c,
 	0xa4d0, 0xa4fd,
@@ -3756,17 +3947,16 @@
 	0xa640, 0xa672,
 	0xa674, 0xa67d,
-	0xa67f, 0xa69d,
-	0xa69f, 0xa6f1,
+	0xa67f, 0xa6f1,
 	0xa717, 0xa71f,
 	0xa722, 0xa788,
-	0xa78b, 0xa78e,
-	0xa790, 0xa7ad,
-	0xa7b0, 0xa7b1,
+	0xa78b, 0xa7ae,
+	0xa7b0, 0xa7b7,
 	0xa7f7, 0xa827,
 	0xa840, 0xa873,
-	0xa880, 0xa8c4,
+	0xa880, 0xa8c5,
 	0xa8d0, 0xa8d9,
 	0xa8e0, 0xa8f7,
 	0xa8fb, 0xa8fb,
+	0xa8fd, 0xa8fd,
 	0xa900, 0xa92d,
 	0xa930, 0xa953,
@@ -3789,7 +3979,6 @@
 	0xab28, 0xab2e,
 	0xab30, 0xab5a,
-	0xab5c, 0xab5f,
-	0xab64, 0xab65,
-	0xabc0, 0xabea,
+	0xab5c, 0xab65,
+	0xab70, 0xabea,
 	0xabec, 0xabed,
 	0xabf0, 0xabf9,
@@ -3813,5 +4002,5 @@
 	0xfdf0, 0xfdfb,
 	0xfe00, 0xfe0f,
-	0xfe20, 0xfe2d,
+	0xfe20, 0xfe2f,
 	0xfe33, 0xfe34,
 	0xfe4d, 0xfe4f,
@@ -3840,5 +4029,5 @@
 	0x102e0, 0x102e0,
 	0x10300, 0x1031f,
-	0x10330, 0x1034a,
+	0x1032d, 0x1034a,
 	0x10350, 0x1037a,
 	0x10380, 0x1039d,
@@ -3848,4 +4037,6 @@
 	0x10400, 0x1049d,
 	0x104a0, 0x104a9,
+	0x104b0, 0x104d3,
+	0x104d8, 0x104fb,
 	0x10500, 0x10527,
 	0x10530, 0x10563,
@@ -3861,4 +4052,6 @@
 	0x10860, 0x10876,
 	0x10880, 0x1089e,
+	0x108e0, 0x108f2,
+	0x108f4, 0x108f5,
 	0x10900, 0x10915,
 	0x10920, 0x10939,
@@ -3881,4 +4074,6 @@
 	0x10b80, 0x10b91,
 	0x10c00, 0x10c48,
+	0x10c80, 0x10cb2,
+	0x10cc0, 0x10cf2,
 	0x11000, 0x11046,
 	0x11066, 0x1106f,
@@ -3891,10 +4086,18 @@
 	0x11176, 0x11176,
 	0x11180, 0x111c4,
+	0x111ca, 0x111cc,
 	0x111d0, 0x111da,
+	0x111dc, 0x111dc,
 	0x11200, 0x11211,
 	0x11213, 0x11237,
+	0x1123e, 0x1123e,
+	0x11280, 0x11286,
+	0x11288, 0x11288,
+	0x1128a, 0x1128d,
+	0x1128f, 0x1129d,
+	0x1129f, 0x112a8,
 	0x112b0, 0x112ea,
 	0x112f0, 0x112f9,
-	0x11301, 0x11303,
+	0x11300, 0x11303,
 	0x11305, 0x1130c,
 	0x1130f, 0x11310,
@@ -3906,8 +4109,11 @@
 	0x11347, 0x11348,
 	0x1134b, 0x1134d,
+	0x11350, 0x11350,
 	0x11357, 0x11357,
 	0x1135d, 0x11363,
 	0x11366, 0x1136c,
 	0x11370, 0x11374,
+	0x11400, 0x1144a,
+	0x11450, 0x11459,
 	0x11480, 0x114c5,
 	0x114c7, 0x114c7,
@@ -3915,4 +4121,5 @@
 	0x11580, 0x115b5,
 	0x115b8, 0x115c0,
+	0x115d8, 0x115dd,
 	0x11600, 0x11640,
 	0x11644, 0x11644,
@@ -3920,10 +4127,33 @@
 	0x11680, 0x116b7,
 	0x116c0, 0x116c9,
+	0x11700, 0x11719,
+	0x1171d, 0x1172b,
+	0x11730, 0x11739,
 	0x118a0, 0x118e9,
 	0x118ff, 0x118ff,
+	0x11a00, 0x11a3e,
+	0x11a47, 0x11a47,
+	0x11a50, 0x11a83,
+	0x11a86, 0x11a99,
 	0x11ac0, 0x11af8,
-	0x12000, 0x12398,
+	0x11c00, 0x11c08,
+	0x11c0a, 0x11c36,
+	0x11c38, 0x11c40,
+	0x11c50, 0x11c59,
+	0x11c72, 0x11c8f,
+	0x11c92, 0x11ca7,
+	0x11ca9, 0x11cb6,
+	0x11d00, 0x11d06,
+	0x11d08, 0x11d09,
+	0x11d0b, 0x11d36,
+	0x11d3a, 0x11d3a,
+	0x11d3c, 0x11d3d,
+	0x11d3f, 0x11d47,
+	0x11d50, 0x11d59,
+	0x12000, 0x12399,
 	0x12400, 0x1246e,
+	0x12480, 0x12543,
 	0x13000, 0x1342e,
+	0x14400, 0x14646,
 	0x16800, 0x16a38,
 	0x16a40, 0x16a5e,
@@ -3939,5 +4169,9 @@
 	0x16f50, 0x16f7e,
 	0x16f8f, 0x16f9f,
-	0x1b000, 0x1b001,
+	0x16fe0, 0x16fe1,
+	0x17000, 0x187ec,
+	0x18800, 0x18af2,
+	0x1b000, 0x1b11e,
+	0x1b170, 0x1b2fb,
 	0x1bc00, 0x1bc6a,
 	0x1bc70, 0x1bc7c,
@@ -3982,6 +4216,19 @@
 	0x1d7c4, 0x1d7cb,
 	0x1d7ce, 0x1d7ff,
+	0x1da00, 0x1da36,
+	0x1da3b, 0x1da6c,
+	0x1da75, 0x1da75,
+	0x1da84, 0x1da84,
+	0x1da9b, 0x1da9f,
+	0x1daa1, 0x1daaf,
+	0x1e000, 0x1e006,
+	0x1e008, 0x1e018,
+	0x1e01b, 0x1e021,
+	0x1e023, 0x1e024,
+	0x1e026, 0x1e02a,
 	0x1e800, 0x1e8c4,
 	0x1e8d0, 0x1e8d6,
+	0x1e900, 0x1e94a,
+	0x1e950, 0x1e959,
 	0x1ee00, 0x1ee03,
 	0x1ee05, 0x1ee1f,
@@ -4023,4 +4270,6 @@
 	0x2a700, 0x2b734,
 	0x2b740, 0x2b81d,
+	0x2b820, 0x2cea1,
+	0x2ceb0, 0x2ebe0,
 	0x2f800, 0x2fa1d,
 	0xe0100, 0xe01ef,
@@ -4029,5 +4278,5 @@
 /* 'Alnum': [[:Alnum:]] */
 static const OnigCodePoint CR_Alnum[] = {
-	630,
+	695,
 	0x0030, 0x0039,
 	0x0041, 0x005a,
@@ -4081,6 +4330,9 @@
 	0x081a, 0x082c,
 	0x0840, 0x0858,
-	0x08a0, 0x08b2,
-	0x08e4, 0x08e9,
+	0x0860, 0x086a,
+	0x08a0, 0x08b4,
+	0x08b6, 0x08bd,
+	0x08d4, 0x08df,
+	0x08e3, 0x08e9,
 	0x08f0, 0x093b,
 	0x093d, 0x094c,
@@ -4103,4 +4355,5 @@
 	0x09df, 0x09e3,
 	0x09e6, 0x09f1,
+	0x09fc, 0x09fc,
 	0x0a01, 0x0a03,
 	0x0a05, 0x0a0a,
@@ -4131,4 +4384,5 @@
 	0x0ae0, 0x0ae3,
 	0x0ae6, 0x0aef,
+	0x0af9, 0x0afc,
 	0x0b01, 0x0b03,
 	0x0b05, 0x0b0c,
@@ -4171,8 +4425,8 @@
 	0x0c4a, 0x0c4c,
 	0x0c55, 0x0c56,
-	0x0c58, 0x0c59,
+	0x0c58, 0x0c5a,
 	0x0c60, 0x0c63,
 	0x0c66, 0x0c6f,
-	0x0c81, 0x0c83,
+	0x0c80, 0x0c83,
 	0x0c85, 0x0c8c,
 	0x0c8e, 0x0c90,
@@ -4188,5 +4442,5 @@
 	0x0ce6, 0x0cef,
 	0x0cf1, 0x0cf2,
-	0x0d01, 0x0d03,
+	0x0d00, 0x0d03,
 	0x0d05, 0x0d0c,
 	0x0d0e, 0x0d10,
@@ -4196,6 +4450,6 @@
 	0x0d4a, 0x0d4c,
 	0x0d4e, 0x0d4e,
-	0x0d57, 0x0d57,
-	0x0d60, 0x0d63,
+	0x0d54, 0x0d57,
+	0x0d5f, 0x0d63,
 	0x0d66, 0x0d6f,
 	0x0d7a, 0x0d7f,
@@ -4271,5 +4525,6 @@
 	0x135f, 0x135f,
 	0x1380, 0x138f,
-	0x13a0, 0x13f4,
+	0x13a0, 0x13f5,
+	0x13f8, 0x13fd,
 	0x1401, 0x166c,
 	0x166f, 0x167f,
@@ -4317,4 +4572,5 @@
 	0x1c40, 0x1c49,
 	0x1c4d, 0x1c7d,
+	0x1c80, 0x1c88,
 	0x1ce9, 0x1cec,
 	0x1cee, 0x1cf3,
@@ -4388,10 +4644,10 @@
 	0x30a1, 0x30fa,
 	0x30fc, 0x30ff,
-	0x3105, 0x312d,
+	0x3105, 0x312e,
 	0x3131, 0x318e,
 	0x31a0, 0x31ba,
 	0x31f0, 0x31ff,
 	0x3400, 0x4db5,
-	0x4e00, 0x9fcc,
+	0x4e00, 0x9fea,
 	0xa000, 0xa48c,
 	0xa4d0, 0xa4fd,
@@ -4400,11 +4656,9 @@
 	0xa640, 0xa66e,
 	0xa674, 0xa67b,
-	0xa67f, 0xa69d,
-	0xa69f, 0xa6ef,
+	0xa67f, 0xa6ef,
 	0xa717, 0xa71f,
 	0xa722, 0xa788,
-	0xa78b, 0xa78e,
-	0xa790, 0xa7ad,
-	0xa7b0, 0xa7b1,
+	0xa78b, 0xa7ae,
+	0xa7b0, 0xa7b7,
 	0xa7f7, 0xa801,
 	0xa803, 0xa805,
@@ -4413,7 +4667,9 @@
 	0xa840, 0xa873,
 	0xa880, 0xa8c3,
+	0xa8c5, 0xa8c5,
 	0xa8d0, 0xa8d9,
 	0xa8f2, 0xa8f7,
 	0xa8fb, 0xa8fb,
+	0xa8fd, 0xa8fd,
 	0xa900, 0xa92a,
 	0xa930, 0xa952,
@@ -4441,7 +4697,6 @@
 	0xab28, 0xab2e,
 	0xab30, 0xab5a,
-	0xab5c, 0xab5f,
-	0xab64, 0xab65,
-	0xabc0, 0xabea,
+	0xab5c, 0xab65,
+	0xab70, 0xabea,
 	0xabf0, 0xabf9,
 	0xac00, 0xd7a3,
@@ -4484,5 +4739,5 @@
 	0x102a0, 0x102d0,
 	0x10300, 0x1031f,
-	0x10330, 0x1034a,
+	0x1032d, 0x1034a,
 	0x10350, 0x1037a,
 	0x10380, 0x1039d,
@@ -4492,4 +4747,6 @@
 	0x10400, 0x1049d,
 	0x104a0, 0x104a9,
+	0x104b0, 0x104d3,
+	0x104d8, 0x104fb,
 	0x10500, 0x10527,
 	0x10530, 0x10563,
@@ -4505,4 +4762,6 @@
 	0x10860, 0x10876,
 	0x10880, 0x1089e,
+	0x108e0, 0x108f2,
+	0x108f4, 0x108f5,
 	0x10900, 0x10915,
 	0x10920, 0x10939,
@@ -4523,4 +4782,6 @@
 	0x10b80, 0x10b91,
 	0x10c00, 0x10c48,
+	0x10c80, 0x10cb2,
+	0x10cc0, 0x10cf2,
 	0x11000, 0x11045,
 	0x11066, 0x1106f,
@@ -4535,10 +4796,17 @@
 	0x111c1, 0x111c4,
 	0x111d0, 0x111da,
+	0x111dc, 0x111dc,
 	0x11200, 0x11211,
 	0x11213, 0x11234,
 	0x11237, 0x11237,
+	0x1123e, 0x1123e,
+	0x11280, 0x11286,
+	0x11288, 0x11288,
+	0x1128a, 0x1128d,
+	0x1128f, 0x1129d,
+	0x1129f, 0x112a8,
 	0x112b0, 0x112e8,
 	0x112f0, 0x112f9,
-	0x11301, 0x11303,
+	0x11300, 0x11303,
 	0x11305, 0x1130c,
 	0x1130f, 0x11310,
@@ -4550,6 +4818,11 @@
 	0x11347, 0x11348,
 	0x1134b, 0x1134c,
+	0x11350, 0x11350,
 	0x11357, 0x11357,
 	0x1135d, 0x11363,
+	0x11400, 0x11441,
+	0x11443, 0x11445,
+	0x11447, 0x1144a,
+	0x11450, 0x11459,
 	0x11480, 0x114c1,
 	0x114c4, 0x114c5,
@@ -4558,4 +4831,5 @@
 	0x11580, 0x115b5,
 	0x115b8, 0x115be,
+	0x115d8, 0x115dd,
 	0x11600, 0x1163e,
 	0x11640, 0x11640,
@@ -4564,10 +4838,36 @@
 	0x11680, 0x116b5,
 	0x116c0, 0x116c9,
+	0x11700, 0x11719,
+	0x1171d, 0x1172a,
+	0x11730, 0x11739,
 	0x118a0, 0x118e9,
 	0x118ff, 0x118ff,
+	0x11a00, 0x11a32,
+	0x11a35, 0x11a3e,
+	0x11a50, 0x11a83,
+	0x11a86, 0x11a97,
 	0x11ac0, 0x11af8,
-	0x12000, 0x12398,
+	0x11c00, 0x11c08,
+	0x11c0a, 0x11c36,
+	0x11c38, 0x11c3e,
+	0x11c40, 0x11c40,
+	0x11c50, 0x11c59,
+	0x11c72, 0x11c8f,
+	0x11c92, 0x11ca7,
+	0x11ca9, 0x11cb6,
+	0x11d00, 0x11d06,
+	0x11d08, 0x11d09,
+	0x11d0b, 0x11d36,
+	0x11d3a, 0x11d3a,
+	0x11d3c, 0x11d3d,
+	0x11d3f, 0x11d41,
+	0x11d43, 0x11d43,
+	0x11d46, 0x11d47,
+	0x11d50, 0x11d59,
+	0x12000, 0x12399,
 	0x12400, 0x1246e,
+	0x12480, 0x12543,
 	0x13000, 0x1342e,
+	0x14400, 0x14646,
 	0x16800, 0x16a38,
 	0x16a40, 0x16a5e,
@@ -4582,5 +4882,9 @@
 	0x16f50, 0x16f7e,
 	0x16f93, 0x16f9f,
-	0x1b000, 0x1b001,
+	0x16fe0, 0x16fe1,
+	0x17000, 0x187ec,
+	0x18800, 0x18af2,
+	0x1b000, 0x1b11e,
+	0x1b170, 0x1b2fb,
 	0x1bc00, 0x1bc6a,
 	0x1bc70, 0x1bc7c,
@@ -4619,5 +4923,13 @@
 	0x1d7c4, 0x1d7cb,
 	0x1d7ce, 0x1d7ff,
+	0x1e000, 0x1e006,
+	0x1e008, 0x1e018,
+	0x1e01b, 0x1e021,
+	0x1e023, 0x1e024,
+	0x1e026, 0x1e02a,
 	0x1e800, 0x1e8c4,
+	0x1e900, 0x1e943,
+	0x1e947, 0x1e947,
+	0x1e950, 0x1e959,
 	0x1ee00, 0x1ee03,
 	0x1ee05, 0x1ee1f,
@@ -4659,4 +4971,6 @@
 	0x2a700, 0x2b734,
 	0x2b740, 0x2b81d,
+	0x2b820, 0x2cea1,
+	0x2ceb0, 0x2ebe0,
 	0x2f800, 0x2fa1d,
 }; /* CR_Alnum */
@@ -4667,4 +4981,181 @@
 	0x0000, 0x007f,
 }; /* CR_ASCII */
+
+/* 'Punct' */
+static const OnigCodePoint CR_Punct[] = {
+	172,
+	0x0021, 0x0023,
+	0x0025, 0x002a,
+	0x002c, 0x002f,
+	0x003a, 0x003b,
+	0x003f, 0x0040,
+	0x005b, 0x005d,
+	0x005f, 0x005f,
+	0x007b, 0x007b,
+	0x007d, 0x007d,
+	0x00a1, 0x00a1,
+	0x00a7, 0x00a7,
+	0x00ab, 0x00ab,
+	0x00b6, 0x00b7,
+	0x00bb, 0x00bb,
+	0x00bf, 0x00bf,
+	0x037e, 0x037e,
+	0x0387, 0x0387,
+	0x055a, 0x055f,
+	0x0589, 0x058a,
+	0x05be, 0x05be,
+	0x05c0, 0x05c0,
+	0x05c3, 0x05c3,
+	0x05c6, 0x05c6,
+	0x05f3, 0x05f4,
+	0x0609, 0x060a,
+	0x060c, 0x060d,
+	0x061b, 0x061b,
+	0x061e, 0x061f,
+	0x066a, 0x066d,
+	0x06d4, 0x06d4,
+	0x0700, 0x070d,
+	0x07f7, 0x07f9,
+	0x0830, 0x083e,
+	0x085e, 0x085e,
+	0x0964, 0x0965,
+	0x0970, 0x0970,
+	0x09fd, 0x09fd,
+	0x0af0, 0x0af0,
+	0x0df4, 0x0df4,
+	0x0e4f, 0x0e4f,
+	0x0e5a, 0x0e5b,
+	0x0f04, 0x0f12,
+	0x0f14, 0x0f14,
+	0x0f3a, 0x0f3d,
+	0x0f85, 0x0f85,
+	0x0fd0, 0x0fd4,
+	0x0fd9, 0x0fda,
+	0x104a, 0x104f,
+	0x10fb, 0x10fb,
+	0x1360, 0x1368,
+	0x1400, 0x1400,
+	0x166d, 0x166e,
+	0x169b, 0x169c,
+	0x16eb, 0x16ed,
+	0x1735, 0x1736,
+	0x17d4, 0x17d6,
+	0x17d8, 0x17da,
+	0x1800, 0x180a,
+	0x1944, 0x1945,
+	0x1a1e, 0x1a1f,
+	0x1aa0, 0x1aa6,
+	0x1aa8, 0x1aad,
+	0x1b5a, 0x1b60,
+	0x1bfc, 0x1bff,
+	0x1c3b, 0x1c3f,
+	0x1c7e, 0x1c7f,
+	0x1cc0, 0x1cc7,
+	0x1cd3, 0x1cd3,
+	0x2010, 0x2027,
+	0x2030, 0x2043,
+	0x2045, 0x2051,
+	0x2053, 0x205e,
+	0x207d, 0x207e,
+	0x208d, 0x208e,
+	0x2308, 0x230b,
+	0x2329, 0x232a,
+	0x2768, 0x2775,
+	0x27c5, 0x27c6,
+	0x27e6, 0x27ef,
+	0x2983, 0x2998,
+	0x29d8, 0x29db,
+	0x29fc, 0x29fd,
+	0x2cf9, 0x2cfc,
+	0x2cfe, 0x2cff,
+	0x2d70, 0x2d70,
+	0x2e00, 0x2e2e,
+	0x2e30, 0x2e49,
+	0x3001, 0x3003,
+	0x3008, 0x3011,
+	0x3014, 0x301f,
+	0x3030, 0x3030,
+	0x303d, 0x303d,
+	0x30a0, 0x30a0,
+	0x30fb, 0x30fb,
+	0xa4fe, 0xa4ff,
+	0xa60d, 0xa60f,
+	0xa673, 0xa673,
+	0xa67e, 0xa67e,
+	0xa6f2, 0xa6f7,
+	0xa874, 0xa877,
+	0xa8ce, 0xa8cf,
+	0xa8f8, 0xa8fa,
+	0xa8fc, 0xa8fc,
+	0xa92e, 0xa92f,
+	0xa95f, 0xa95f,
+	0xa9c1, 0xa9cd,
+	0xa9de, 0xa9df,
+	0xaa5c, 0xaa5f,
+	0xaade, 0xaadf,
+	0xaaf0, 0xaaf1,
+	0xabeb, 0xabeb,
+	0xfd3e, 0xfd3f,
+	0xfe10, 0xfe19,
+	0xfe30, 0xfe52,
+	0xfe54, 0xfe61,
+	0xfe63, 0xfe63,
+	0xfe68, 0xfe68,
+	0xfe6a, 0xfe6b,
+	0xff01, 0xff03,
+	0xff05, 0xff0a,
+	0xff0c, 0xff0f,
+	0xff1a, 0xff1b,
+	0xff1f, 0xff20,
+	0xff3b, 0xff3d,
+	0xff3f, 0xff3f,
+	0xff5b, 0xff5b,
+	0xff5d, 0xff5d,
+	0xff5f, 0xff65,
+	0x10100, 0x10102,
+	0x1039f, 0x1039f,
+	0x103d0, 0x103d0,
+	0x1056f, 0x1056f,
+	0x10857, 0x10857,
+	0x1091f, 0x1091f,
+	0x1093f, 0x1093f,
+	0x10a50, 0x10a58,
+	0x10a7f, 0x10a7f,
+	0x10af0, 0x10af6,
+	0x10b39, 0x10b3f,
+	0x10b99, 0x10b9c,
+	0x11047, 0x1104d,
+	0x110bb, 0x110bc,
+	0x110be, 0x110c1,
+	0x11140, 0x11143,
+	0x11174, 0x11175,
+	0x111c5, 0x111c9,
+	0x111cd, 0x111cd,
+	0x111db, 0x111db,
+	0x111dd, 0x111df,
+	0x11238, 0x1123d,
+	0x112a9, 0x112a9,
+	0x1144b, 0x1144f,
+	0x1145b, 0x1145b,
+	0x1145d, 0x1145d,
+	0x114c6, 0x114c6,
+	0x115c1, 0x115d7,
+	0x11641, 0x11643,
+	0x11660, 0x1166c,
+	0x1173c, 0x1173e,
+	0x11a3f, 0x11a46,
+	0x11a9a, 0x11a9c,
+	0x11a9e, 0x11aa2,
+	0x11c41, 0x11c45,
+	0x11c70, 0x11c71,
+	0x12470, 0x12474,
+	0x16a6e, 0x16a6f,
+	0x16af5, 0x16af5,
+	0x16b37, 0x16b3b,
+	0x16b44, 0x16b44,
+	0x1bc9f, 0x1bc9f,
+	0x1da87, 0x1da8b,
+	0x1e95e, 0x1e95f,
+}; /* CR_Punct */
 
 #ifdef USE_UNICODE_PROPERTIES
@@ -4677,5 +5168,5 @@
 /* 'Assigned': - */
 static const OnigCodePoint CR_Assigned[] = {
-	600,
+	649,
 	0x0000, 0x0377,
 	0x037a, 0x037f,
@@ -4701,6 +5192,8 @@
 	0x0840, 0x085b,
 	0x085e, 0x085e,
-	0x08a0, 0x08b2,
-	0x08e4, 0x0983,
+	0x0860, 0x086a,
+	0x08a0, 0x08b4,
+	0x08b6, 0x08bd,
+	0x08d4, 0x0983,
 	0x0985, 0x098c,
 	0x098f, 0x0990,
@@ -4715,5 +5208,5 @@
 	0x09dc, 0x09dd,
 	0x09df, 0x09e3,
-	0x09e6, 0x09fb,
+	0x09e6, 0x09fd,
 	0x0a01, 0x0a03,
 	0x0a05, 0x0a0a,
@@ -4745,4 +5238,5 @@
 	0x0ae0, 0x0ae3,
 	0x0ae6, 0x0af1,
+	0x0af9, 0x0aff,
 	0x0b01, 0x0b03,
 	0x0b05, 0x0b0c,
@@ -4784,9 +5278,8 @@
 	0x0c4a, 0x0c4d,
 	0x0c55, 0x0c56,
-	0x0c58, 0x0c59,
+	0x0c58, 0x0c5a,
 	0x0c60, 0x0c63,
 	0x0c66, 0x0c6f,
-	0x0c78, 0x0c7f,
-	0x0c81, 0x0c83,
+	0x0c78, 0x0c83,
 	0x0c85, 0x0c8c,
 	0x0c8e, 0x0c90,
@@ -4802,15 +5295,12 @@
 	0x0ce6, 0x0cef,
 	0x0cf1, 0x0cf2,
-	0x0d01, 0x0d03,
+	0x0d00, 0x0d03,
 	0x0d05, 0x0d0c,
 	0x0d0e, 0x0d10,
-	0x0d12, 0x0d3a,
-	0x0d3d, 0x0d44,
+	0x0d12, 0x0d44,
 	0x0d46, 0x0d48,
-	0x0d4a, 0x0d4e,
-	0x0d57, 0x0d57,
-	0x0d60, 0x0d63,
-	0x0d66, 0x0d75,
-	0x0d79, 0x0d7f,
+	0x0d4a, 0x0d4f,
+	0x0d54, 0x0d63,
+	0x0d66, 0x0d7f,
 	0x0d82, 0x0d83,
 	0x0d85, 0x0d96,
@@ -4872,5 +5362,6 @@
 	0x135d, 0x137c,
 	0x1380, 0x1399,
-	0x13a0, 0x13f4,
+	0x13a0, 0x13f5,
+	0x13f8, 0x13fd,
 	0x1400, 0x169c,
 	0x16a0, 0x16f8,
@@ -4911,10 +5402,9 @@
 	0x1bfc, 0x1c37,
 	0x1c3b, 0x1c49,
-	0x1c4d, 0x1c7f,
+	0x1c4d, 0x1c88,
 	0x1cc0, 0x1cc7,
-	0x1cd0, 0x1cf6,
-	0x1cf8, 0x1cf9,
-	0x1d00, 0x1df5,
-	0x1dfc, 0x1f15,
+	0x1cd0, 0x1cf9,
+	0x1d00, 0x1df9,
+	0x1dfb, 0x1f15,
 	0x1f18, 0x1f1d,
 	0x1f20, 0x1f45,
@@ -4936,9 +5426,8 @@
 	0x2074, 0x208e,
 	0x2090, 0x209c,
-	0x20a0, 0x20bd,
+	0x20a0, 0x20bf,
 	0x20d0, 0x20f0,
-	0x2100, 0x2189,
-	0x2190, 0x23fa,
-	0x2400, 0x2426,
+	0x2100, 0x218b,
+	0x2190, 0x2426,
 	0x2440, 0x244a,
 	0x2460, 0x2b73,
@@ -4946,5 +5435,6 @@
 	0x2b98, 0x2bb9,
 	0x2bbd, 0x2bc8,
-	0x2bca, 0x2bd1,
+	0x2bca, 0x2bd2,
+	0x2bec, 0x2bef,
 	0x2c00, 0x2c2e,
 	0x2c30, 0x2c5e,
@@ -4964,5 +5454,5 @@
 	0x2dd0, 0x2dd6,
 	0x2dd8, 0x2dde,
-	0x2de0, 0x2e42,
+	0x2de0, 0x2e49,
 	0x2e80, 0x2e99,
 	0x2e9b, 0x2ef3,
@@ -4972,5 +5462,5 @@
 	0x3041, 0x3096,
 	0x3099, 0x30ff,
-	0x3105, 0x312d,
+	0x3105, 0x312e,
 	0x3131, 0x318e,
 	0x3190, 0x31ba,
@@ -4979,19 +5469,17 @@
 	0x3220, 0x32fe,
 	0x3300, 0x4db5,
-	0x4dc0, 0x9fcc,
+	0x4dc0, 0x9fea,
 	0xa000, 0xa48c,
 	0xa490, 0xa4c6,
 	0xa4d0, 0xa62b,
-	0xa640, 0xa69d,
-	0xa69f, 0xa6f7,
-	0xa700, 0xa78e,
-	0xa790, 0xa7ad,
-	0xa7b0, 0xa7b1,
+	0xa640, 0xa6f7,
+	0xa700, 0xa7ae,
+	0xa7b0, 0xa7b7,
 	0xa7f7, 0xa82b,
 	0xa830, 0xa839,
 	0xa840, 0xa877,
-	0xa880, 0xa8c4,
+	0xa880, 0xa8c5,
 	0xa8ce, 0xa8d9,
-	0xa8e0, 0xa8fb,
+	0xa8e0, 0xa8fd,
 	0xa900, 0xa953,
 	0xa95f, 0xa97c,
@@ -5009,7 +5497,6 @@
 	0xab20, 0xab26,
 	0xab28, 0xab2e,
-	0xab30, 0xab5f,
-	0xab64, 0xab65,
-	0xabc0, 0xabed,
+	0xab30, 0xab65,
+	0xab70, 0xabed,
 	0xabf0, 0xabf9,
 	0xac00, 0xd7a3,
@@ -5031,6 +5518,5 @@
 	0xfdf0, 0xfdfd,
 	0xfe00, 0xfe19,
-	0xfe20, 0xfe2d,
-	0xfe30, 0xfe52,
+	0xfe20, 0xfe52,
 	0xfe54, 0xfe66,
 	0xfe68, 0xfe6b,
@@ -5055,5 +5541,5 @@
 	0x10100, 0x10102,
 	0x10107, 0x10133,
-	0x10137, 0x1018c,
+	0x10137, 0x1018e,
 	0x10190, 0x1019b,
 	0x101a0, 0x101a0,
@@ -5063,5 +5549,5 @@
 	0x102e0, 0x102fb,
 	0x10300, 0x10323,
-	0x10330, 0x1034a,
+	0x1032d, 0x1034a,
 	0x10350, 0x1037a,
 	0x10380, 0x1039d,
@@ -5070,4 +5556,6 @@
 	0x10400, 0x1049d,
 	0x104a0, 0x104a9,
+	0x104b0, 0x104d3,
+	0x104d8, 0x104fb,
 	0x10500, 0x10527,
 	0x10530, 0x10563,
@@ -5084,10 +5572,12 @@
 	0x10857, 0x1089e,
 	0x108a7, 0x108af,
-	0x10900, 0x1091b,
+	0x108e0, 0x108f2,
+	0x108f4, 0x108f5,
+	0x108fb, 0x1091b,
 	0x1091f, 0x10939,
 	0x1093f, 0x1093f,
 	0x10980, 0x109b7,
-	0x109be, 0x109bf,
-	0x10a00, 0x10a03,
+	0x109bc, 0x109cf,
+	0x109d2, 0x10a03,
 	0x10a05, 0x10a06,
 	0x10a0c, 0x10a13,
@@ -5107,4 +5597,7 @@
 	0x10ba9, 0x10baf,
 	0x10c00, 0x10c48,
+	0x10c80, 0x10cb2,
+	0x10cc0, 0x10cf2,
+	0x10cfa, 0x10cff,
 	0x10e60, 0x10e7e,
 	0x11000, 0x1104d,
@@ -5116,13 +5609,17 @@
 	0x11136, 0x11143,
 	0x11150, 0x11176,
-	0x11180, 0x111c8,
-	0x111cd, 0x111cd,
-	0x111d0, 0x111da,
+	0x11180, 0x111cd,
+	0x111d0, 0x111df,
 	0x111e1, 0x111f4,
 	0x11200, 0x11211,
-	0x11213, 0x1123d,
+	0x11213, 0x1123e,
+	0x11280, 0x11286,
+	0x11288, 0x11288,
+	0x1128a, 0x1128d,
+	0x1128f, 0x1129d,
+	0x1129f, 0x112a9,
 	0x112b0, 0x112ea,
 	0x112f0, 0x112f9,
-	0x11301, 0x11303,
+	0x11300, 0x11303,
 	0x11305, 0x1130c,
 	0x1130f, 0x11310,
@@ -5134,23 +5631,51 @@
 	0x11347, 0x11348,
 	0x1134b, 0x1134d,
+	0x11350, 0x11350,
 	0x11357, 0x11357,
 	0x1135d, 0x11363,
 	0x11366, 0x1136c,
 	0x11370, 0x11374,
+	0x11400, 0x11459,
+	0x1145b, 0x1145b,
+	0x1145d, 0x1145d,
 	0x11480, 0x114c7,
 	0x114d0, 0x114d9,
 	0x11580, 0x115b5,
-	0x115b8, 0x115c9,
+	0x115b8, 0x115dd,
 	0x11600, 0x11644,
 	0x11650, 0x11659,
+	0x11660, 0x1166c,
 	0x11680, 0x116b7,
 	0x116c0, 0x116c9,
+	0x11700, 0x11719,
+	0x1171d, 0x1172b,
+	0x11730, 0x1173f,
 	0x118a0, 0x118f2,
 	0x118ff, 0x118ff,
+	0x11a00, 0x11a47,
+	0x11a50, 0x11a83,
+	0x11a86, 0x11a9c,
+	0x11a9e, 0x11aa2,
 	0x11ac0, 0x11af8,
-	0x12000, 0x12398,
+	0x11c00, 0x11c08,
+	0x11c0a, 0x11c36,
+	0x11c38, 0x11c45,
+	0x11c50, 0x11c6c,
+	0x11c70, 0x11c8f,
+	0x11c92, 0x11ca7,
+	0x11ca9, 0x11cb6,
+	0x11d00, 0x11d06,
+	0x11d08, 0x11d09,
+	0x11d0b, 0x11d36,
+	0x11d3a, 0x11d3a,
+	0x11d3c, 0x11d3d,
+	0x11d3f, 0x11d47,
+	0x11d50, 0x11d59,
+	0x12000, 0x12399,
 	0x12400, 0x1246e,
 	0x12470, 0x12474,
+	0x12480, 0x12543,
 	0x13000, 0x1342e,
+	0x14400, 0x14646,
 	0x16800, 0x16a38,
 	0x16a40, 0x16a5e,
@@ -5167,5 +5692,9 @@
 	0x16f50, 0x16f7e,
 	0x16f8f, 0x16f9f,
-	0x1b000, 0x1b001,
+	0x16fe0, 0x16fe1,
+	0x17000, 0x187ec,
+	0x18800, 0x18af2,
+	0x1b000, 0x1b11e,
+	0x1b170, 0x1b2fb,
 	0x1bc00, 0x1bc6a,
 	0x1bc70, 0x1bc7c,
@@ -5175,5 +5704,5 @@
 	0x1d000, 0x1d0f5,
 	0x1d100, 0x1d126,
-	0x1d129, 0x1d1dd,
+	0x1d129, 0x1d1e8,
 	0x1d200, 0x1d245,
 	0x1d300, 0x1d356,
@@ -5199,7 +5728,17 @@
 	0x1d552, 0x1d6a5,
 	0x1d6a8, 0x1d7cb,
-	0x1d7ce, 0x1d7ff,
+	0x1d7ce, 0x1da8b,
+	0x1da9b, 0x1da9f,
+	0x1daa1, 0x1daaf,
+	0x1e000, 0x1e006,
+	0x1e008, 0x1e018,
+	0x1e01b, 0x1e021,
+	0x1e023, 0x1e024,
+	0x1e026, 0x1e02a,
 	0x1e800, 0x1e8c4,
 	0x1e8c7, 0x1e8d6,
+	0x1e900, 0x1e94a,
+	0x1e950, 0x1e959,
+	0x1e95e, 0x1e95f,
 	0x1ee00, 0x1ee03,
 	0x1ee05, 0x1ee1f,
@@ -5245,21 +5784,13 @@
 	0x1f110, 0x1f12e,
 	0x1f130, 0x1f16b,
-	0x1f170, 0x1f19a,
+	0x1f170, 0x1f1ac,
 	0x1f1e6, 0x1f202,
-	0x1f210, 0x1f23a,
+	0x1f210, 0x1f23b,
 	0x1f240, 0x1f248,
 	0x1f250, 0x1f251,
-	0x1f300, 0x1f32c,
-	0x1f330, 0x1f37d,
-	0x1f380, 0x1f3ce,
-	0x1f3d4, 0x1f3f7,
-	0x1f400, 0x1f4fe,
-	0x1f500, 0x1f54a,
-	0x1f550, 0x1f579,
-	0x1f57b, 0x1f5a3,
-	0x1f5a5, 0x1f642,
-	0x1f645, 0x1f6cf,
+	0x1f260, 0x1f265,
+	0x1f300, 0x1f6d4,
 	0x1f6e0, 0x1f6ec,
-	0x1f6f0, 0x1f6f3,
+	0x1f6f0, 0x1f6f8,
 	0x1f700, 0x1f773,
 	0x1f780, 0x1f7d4,
@@ -5269,7 +5800,16 @@
 	0x1f860, 0x1f887,
 	0x1f890, 0x1f8ad,
+	0x1f900, 0x1f90b,
+	0x1f910, 0x1f93e,
+	0x1f940, 0x1f94c,
+	0x1f950, 0x1f96b,
+	0x1f980, 0x1f997,
+	0x1f9c0, 0x1f9c0,
+	0x1f9d0, 0x1f9e6,
 	0x20000, 0x2a6d6,
 	0x2a700, 0x2b734,
 	0x2b740, 0x2b81d,
+	0x2b820, 0x2cea1,
+	0x2ceb0, 0x2ebe0,
 	0x2f800, 0x2fa1d,
 	0xe0001, 0xe0001,
@@ -5282,5 +5822,5 @@
 /* 'C': Major Category */
 static const OnigCodePoint CR_C[] = {
-	603,
+	653,
 	0x0000, 0x001f,
 	0x007f, 0x009f,
@@ -5309,6 +5849,9 @@
 	0x083f, 0x083f,
 	0x085c, 0x085d,
-	0x085f, 0x089f,
-	0x08b3, 0x08e3,
+	0x085f, 0x085f,
+	0x086b, 0x089f,
+	0x08b5, 0x08b5,
+	0x08be, 0x08d3,
+	0x08e2, 0x08e2,
 	0x0984, 0x0984,
 	0x098d, 0x098e,
@@ -5324,5 +5867,5 @@
 	0x09de, 0x09de,
 	0x09e4, 0x09e5,
-	0x09fc, 0x0a00,
+	0x09fe, 0x0a00,
 	0x0a04, 0x0a04,
 	0x0a0b, 0x0a0e,
@@ -5353,5 +5896,6 @@
 	0x0ad1, 0x0adf,
 	0x0ae4, 0x0ae5,
-	0x0af2, 0x0b00,
+	0x0af2, 0x0af8,
+	0x0b00, 0x0b00,
 	0x0b04, 0x0b04,
 	0x0b0d, 0x0b0e,
@@ -5393,8 +5937,7 @@
 	0x0c4e, 0x0c54,
 	0x0c57, 0x0c57,
-	0x0c5a, 0x0c5f,
+	0x0c5b, 0x0c5f,
 	0x0c64, 0x0c65,
 	0x0c70, 0x0c77,
-	0x0c80, 0x0c80,
 	0x0c84, 0x0c84,
 	0x0c8d, 0x0c8d,
@@ -5410,15 +5953,12 @@
 	0x0ce4, 0x0ce5,
 	0x0cf0, 0x0cf0,
-	0x0cf3, 0x0d00,
+	0x0cf3, 0x0cff,
 	0x0d04, 0x0d04,
 	0x0d0d, 0x0d0d,
 	0x0d11, 0x0d11,
-	0x0d3b, 0x0d3c,
 	0x0d45, 0x0d45,
 	0x0d49, 0x0d49,
-	0x0d4f, 0x0d56,
-	0x0d58, 0x0d5f,
+	0x0d50, 0x0d53,
 	0x0d64, 0x0d65,
-	0x0d76, 0x0d78,
 	0x0d80, 0x0d81,
 	0x0d84, 0x0d84,
@@ -5481,5 +6021,6 @@
 	0x137d, 0x137f,
 	0x139a, 0x139f,
-	0x13f5, 0x13ff,
+	0x13f6, 0x13f7,
+	0x13fe, 0x13ff,
 	0x169d, 0x169f,
 	0x16f9, 0x16ff,
@@ -5520,9 +6061,8 @@
 	0x1c38, 0x1c3a,
 	0x1c4a, 0x1c4c,
-	0x1c80, 0x1cbf,
+	0x1c89, 0x1cbf,
 	0x1cc8, 0x1ccf,
-	0x1cf7, 0x1cf7,
 	0x1cfa, 0x1cff,
-	0x1df6, 0x1dfb,
+	0x1dfa, 0x1dfa,
 	0x1f16, 0x1f17,
 	0x1f1e, 0x1f1f,
@@ -5547,8 +6087,7 @@
 	0x208f, 0x208f,
 	0x209d, 0x209f,
-	0x20be, 0x20cf,
+	0x20c0, 0x20cf,
 	0x20f1, 0x20ff,
-	0x218a, 0x218f,
-	0x23fb, 0x23ff,
+	0x218c, 0x218f,
 	0x2427, 0x243f,
 	0x244b, 0x245f,
@@ -5557,5 +6096,6 @@
 	0x2bba, 0x2bbc,
 	0x2bc9, 0x2bc9,
-	0x2bd2, 0x2bff,
+	0x2bd3, 0x2beb,
+	0x2bf0, 0x2bff,
 	0x2c2f, 0x2c2f,
 	0x2c5f, 0x2c5f,
@@ -5575,5 +6115,5 @@
 	0x2dd7, 0x2dd7,
 	0x2ddf, 0x2ddf,
-	0x2e43, 0x2e7f,
+	0x2e4a, 0x2e7f,
 	0x2e9a, 0x2e9a,
 	0x2ef4, 0x2eff,
@@ -5583,5 +6123,5 @@
 	0x3097, 0x3098,
 	0x3100, 0x3104,
-	0x312e, 0x3130,
+	0x312f, 0x3130,
 	0x318f, 0x318f,
 	0x31bb, 0x31bf,
@@ -5590,19 +6130,17 @@
 	0x32ff, 0x32ff,
 	0x4db6, 0x4dbf,
-	0x9fcd, 0x9fff,
+	0x9feb, 0x9fff,
 	0xa48d, 0xa48f,
 	0xa4c7, 0xa4cf,
 	0xa62c, 0xa63f,
-	0xa69e, 0xa69e,
 	0xa6f8, 0xa6ff,
-	0xa78f, 0xa78f,
-	0xa7ae, 0xa7af,
-	0xa7b2, 0xa7f6,
+	0xa7af, 0xa7af,
+	0xa7b8, 0xa7f6,
 	0xa82c, 0xa82f,
 	0xa83a, 0xa83f,
 	0xa878, 0xa87f,
-	0xa8c5, 0xa8cd,
+	0xa8c6, 0xa8cd,
 	0xa8da, 0xa8df,
-	0xa8fc, 0xa8ff,
+	0xa8fe, 0xa8ff,
 	0xa954, 0xa95e,
 	0xa97d, 0xa97f,
@@ -5620,6 +6158,5 @@
 	0xab27, 0xab27,
 	0xab2f, 0xab2f,
-	0xab60, 0xab63,
-	0xab66, 0xabbf,
+	0xab66, 0xab6f,
 	0xabee, 0xabef,
 	0xabfa, 0xabff,
@@ -5642,5 +6179,4 @@
 	0xfdfe, 0xfdff,
 	0xfe1a, 0xfe1f,
-	0xfe2e, 0xfe2f,
 	0xfe53, 0xfe53,
 	0xfe67, 0xfe67,
@@ -5665,5 +6201,5 @@
 	0x10103, 0x10106,
 	0x10134, 0x10136,
-	0x1018d, 0x1018f,
+	0x1018f, 0x1018f,
 	0x1019c, 0x1019f,
 	0x101a1, 0x101cf,
@@ -5672,5 +6208,5 @@
 	0x102d1, 0x102df,
 	0x102fc, 0x102ff,
-	0x10324, 0x1032f,
+	0x10324, 0x1032c,
 	0x1034b, 0x1034f,
 	0x1037b, 0x1037f,
@@ -5679,5 +6215,7 @@
 	0x103d6, 0x103ff,
 	0x1049e, 0x1049f,
-	0x104aa, 0x104ff,
+	0x104aa, 0x104af,
+	0x104d4, 0x104d7,
+	0x104fc, 0x104ff,
 	0x10528, 0x1052f,
 	0x10564, 0x1056e,
@@ -5693,10 +6231,12 @@
 	0x10856, 0x10856,
 	0x1089f, 0x108a6,
-	0x108b0, 0x108ff,
+	0x108b0, 0x108df,
+	0x108f3, 0x108f3,
+	0x108f6, 0x108fa,
 	0x1091c, 0x1091e,
 	0x1093a, 0x1093e,
 	0x10940, 0x1097f,
-	0x109b8, 0x109bd,
-	0x109c0, 0x109ff,
+	0x109b8, 0x109bb,
+	0x109d0, 0x109d1,
 	0x10a04, 0x10a04,
 	0x10a07, 0x10a0b,
@@ -5716,5 +6256,8 @@
 	0x10b9d, 0x10ba8,
 	0x10bb0, 0x10bff,
-	0x10c49, 0x10e5f,
+	0x10c49, 0x10c7f,
+	0x10cb3, 0x10cbf,
+	0x10cf3, 0x10cf9,
+	0x10d00, 0x10e5f,
 	0x10e7f, 0x10fff,
 	0x1104e, 0x11051,
@@ -5727,12 +6270,16 @@
 	0x11144, 0x1114f,
 	0x11177, 0x1117f,
-	0x111c9, 0x111cc,
 	0x111ce, 0x111cf,
-	0x111db, 0x111e0,
+	0x111e0, 0x111e0,
 	0x111f5, 0x111ff,
 	0x11212, 0x11212,
-	0x1123e, 0x112af,
+	0x1123f, 0x1127f,
+	0x11287, 0x11287,
+	0x11289, 0x11289,
+	0x1128e, 0x1128e,
+	0x1129e, 0x1129e,
+	0x112aa, 0x112af,
 	0x112eb, 0x112ef,
-	0x112fa, 0x11300,
+	0x112fa, 0x112ff,
 	0x11304, 0x11304,
 	0x1130d, 0x1130e,
@@ -5744,24 +6291,52 @@
 	0x11345, 0x11346,
 	0x11349, 0x1134a,
-	0x1134e, 0x11356,
+	0x1134e, 0x1134f,
+	0x11351, 0x11356,
 	0x11358, 0x1135c,
 	0x11364, 0x11365,
 	0x1136d, 0x1136f,
-	0x11375, 0x1147f,
+	0x11375, 0x113ff,
+	0x1145a, 0x1145a,
+	0x1145c, 0x1145c,
+	0x1145e, 0x1147f,
 	0x114c8, 0x114cf,
 	0x114da, 0x1157f,
 	0x115b6, 0x115b7,
-	0x115ca, 0x115ff,
+	0x115de, 0x115ff,
 	0x11645, 0x1164f,
-	0x1165a, 0x1167f,
+	0x1165a, 0x1165f,
+	0x1166d, 0x1167f,
 	0x116b8, 0x116bf,
-	0x116ca, 0x1189f,
+	0x116ca, 0x116ff,
+	0x1171a, 0x1171c,
+	0x1172c, 0x1172f,
+	0x11740, 0x1189f,
 	0x118f3, 0x118fe,
-	0x11900, 0x11abf,
-	0x11af9, 0x11fff,
-	0x12399, 0x123ff,
+	0x11900, 0x119ff,
+	0x11a48, 0x11a4f,
+	0x11a84, 0x11a85,
+	0x11a9d, 0x11a9d,
+	0x11aa3, 0x11abf,
+	0x11af9, 0x11bff,
+	0x11c09, 0x11c09,
+	0x11c37, 0x11c37,
+	0x11c46, 0x11c4f,
+	0x11c6d, 0x11c6f,
+	0x11c90, 0x11c91,
+	0x11ca8, 0x11ca8,
+	0x11cb7, 0x11cff,
+	0x11d07, 0x11d07,
+	0x11d0a, 0x11d0a,
+	0x11d37, 0x11d39,
+	0x11d3b, 0x11d3b,
+	0x11d3e, 0x11d3e,
+	0x11d48, 0x11d4f,
+	0x11d5a, 0x11fff,
+	0x1239a, 0x123ff,
 	0x1246f, 0x1246f,
-	0x12475, 0x12fff,
-	0x1342f, 0x167ff,
+	0x12475, 0x1247f,
+	0x12544, 0x12fff,
+	0x1342f, 0x143ff,
+	0x14647, 0x167ff,
 	0x16a39, 0x16a3f,
 	0x16a5f, 0x16a5f,
@@ -5777,6 +6352,10 @@
 	0x16f45, 0x16f4f,
 	0x16f7f, 0x16f8e,
-	0x16fa0, 0x1afff,
-	0x1b002, 0x1bbff,
+	0x16fa0, 0x16fdf,
+	0x16fe2, 0x16fff,
+	0x187ed, 0x187ff,
+	0x18af3, 0x1afff,
+	0x1b11f, 0x1b16f,
+	0x1b2fc, 0x1bbff,
 	0x1bc6b, 0x1bc6f,
 	0x1bc7d, 0x1bc7f,
@@ -5787,5 +6366,5 @@
 	0x1d127, 0x1d128,
 	0x1d173, 0x1d17a,
-	0x1d1de, 0x1d1ff,
+	0x1d1e9, 0x1d1ff,
 	0x1d246, 0x1d2ff,
 	0x1d357, 0x1d35f,
@@ -5811,7 +6390,17 @@
 	0x1d6a6, 0x1d6a7,
 	0x1d7cc, 0x1d7cd,
-	0x1d800, 0x1e7ff,
+	0x1da8c, 0x1da9a,
+	0x1daa0, 0x1daa0,
+	0x1dab0, 0x1dfff,
+	0x1e007, 0x1e007,
+	0x1e019, 0x1e01a,
+	0x1e022, 0x1e022,
+	0x1e025, 0x1e025,
+	0x1e02b, 0x1e7ff,
 	0x1e8c5, 0x1e8c6,
-	0x1e8d7, 0x1edff,
+	0x1e8d7, 0x1e8ff,
+	0x1e94b, 0x1e94f,
+	0x1e95a, 0x1e95d,
+	0x1e960, 0x1edff,
 	0x1ee04, 0x1ee04,
 	0x1ee20, 0x1ee20,
@@ -5857,21 +6446,13 @@
 	0x1f12f, 0x1f12f,
 	0x1f16c, 0x1f16f,
-	0x1f19b, 0x1f1e5,
+	0x1f1ad, 0x1f1e5,
 	0x1f203, 0x1f20f,
-	0x1f23b, 0x1f23f,
+	0x1f23c, 0x1f23f,
 	0x1f249, 0x1f24f,
-	0x1f252, 0x1f2ff,
-	0x1f32d, 0x1f32f,
-	0x1f37e, 0x1f37f,
-	0x1f3cf, 0x1f3d3,
-	0x1f3f8, 0x1f3ff,
-	0x1f4ff, 0x1f4ff,
-	0x1f54b, 0x1f54f,
-	0x1f57a, 0x1f57a,
-	0x1f5a4, 0x1f5a4,
-	0x1f643, 0x1f644,
-	0x1f6d0, 0x1f6df,
+	0x1f252, 0x1f25f,
+	0x1f266, 0x1f2ff,
+	0x1f6d5, 0x1f6df,
 	0x1f6ed, 0x1f6ef,
-	0x1f6f4, 0x1f6ff,
+	0x1f6f9, 0x1f6ff,
 	0x1f774, 0x1f77f,
 	0x1f7d5, 0x1f7ff,
@@ -5880,8 +6461,17 @@
 	0x1f85a, 0x1f85f,
 	0x1f888, 0x1f88f,
-	0x1f8ae, 0x1ffff,
+	0x1f8ae, 0x1f8ff,
+	0x1f90c, 0x1f90f,
+	0x1f93f, 0x1f93f,
+	0x1f94d, 0x1f94f,
+	0x1f96c, 0x1f97f,
+	0x1f998, 0x1f9bf,
+	0x1f9c1, 0x1f9cf,
+	0x1f9e7, 0x1ffff,
 	0x2a6d7, 0x2a6ff,
 	0x2b735, 0x2b73f,
-	0x2b81e, 0x2f7ff,
+	0x2b81e, 0x2b81f,
+	0x2cea2, 0x2ceaf,
+	0x2ebe1, 0x2f7ff,
 	0x2fa1e, 0xe00ff,
 	0xe01f0, 0x10ffff,
@@ -5893,5 +6483,5 @@
 /* 'Cf': General Category */
 static const OnigCodePoint CR_Cf[] = {
-	17,
+	18,
 	0x00ad, 0x00ad,
 	0x0600, 0x0605,
@@ -5899,4 +6489,5 @@
 	0x06dd, 0x06dd,
 	0x070f, 0x070f,
+	0x08e2, 0x08e2,
 	0x180e, 0x180e,
 	0x200b, 0x200f,
@@ -5915,5 +6506,5 @@
 /* 'Cn': General Category */
 static const OnigCodePoint CR_Cn[] = {
-	600,
+	649,
 	0x0378, 0x0379,
 	0x0380, 0x0383,
@@ -5938,6 +6529,8 @@
 	0x083f, 0x083f,
 	0x085c, 0x085d,
-	0x085f, 0x089f,
-	0x08b3, 0x08e3,
+	0x085f, 0x085f,
+	0x086b, 0x089f,
+	0x08b5, 0x08b5,
+	0x08be, 0x08d3,
 	0x0984, 0x0984,
 	0x098d, 0x098e,
@@ -5953,5 +6546,5 @@
 	0x09de, 0x09de,
 	0x09e4, 0x09e5,
-	0x09fc, 0x0a00,
+	0x09fe, 0x0a00,
 	0x0a04, 0x0a04,
 	0x0a0b, 0x0a0e,
@@ -5982,5 +6575,6 @@
 	0x0ad1, 0x0adf,
 	0x0ae4, 0x0ae5,
-	0x0af2, 0x0b00,
+	0x0af2, 0x0af8,
+	0x0b00, 0x0b00,
 	0x0b04, 0x0b04,
 	0x0b0d, 0x0b0e,
@@ -6022,8 +6616,7 @@
 	0x0c4e, 0x0c54,
 	0x0c57, 0x0c57,
-	0x0c5a, 0x0c5f,
+	0x0c5b, 0x0c5f,
 	0x0c64, 0x0c65,
 	0x0c70, 0x0c77,
-	0x0c80, 0x0c80,
 	0x0c84, 0x0c84,
 	0x0c8d, 0x0c8d,
@@ -6039,15 +6632,12 @@
 	0x0ce4, 0x0ce5,
 	0x0cf0, 0x0cf0,
-	0x0cf3, 0x0d00,
+	0x0cf3, 0x0cff,
 	0x0d04, 0x0d04,
 	0x0d0d, 0x0d0d,
 	0x0d11, 0x0d11,
-	0x0d3b, 0x0d3c,
 	0x0d45, 0x0d45,
 	0x0d49, 0x0d49,
-	0x0d4f, 0x0d56,
-	0x0d58, 0x0d5f,
+	0x0d50, 0x0d53,
 	0x0d64, 0x0d65,
-	0x0d76, 0x0d78,
 	0x0d80, 0x0d81,
 	0x0d84, 0x0d84,
@@ -6110,5 +6700,6 @@
 	0x137d, 0x137f,
 	0x139a, 0x139f,
-	0x13f5, 0x13ff,
+	0x13f6, 0x13f7,
+	0x13fe, 0x13ff,
 	0x169d, 0x169f,
 	0x16f9, 0x16ff,
@@ -6149,9 +6740,8 @@
 	0x1c38, 0x1c3a,
 	0x1c4a, 0x1c4c,
-	0x1c80, 0x1cbf,
+	0x1c89, 0x1cbf,
 	0x1cc8, 0x1ccf,
-	0x1cf7, 0x1cf7,
 	0x1cfa, 0x1cff,
-	0x1df6, 0x1dfb,
+	0x1dfa, 0x1dfa,
 	0x1f16, 0x1f17,
 	0x1f1e, 0x1f1f,
@@ -6174,8 +6764,7 @@
 	0x208f, 0x208f,
 	0x209d, 0x209f,
-	0x20be, 0x20cf,
+	0x20c0, 0x20cf,
 	0x20f1, 0x20ff,
-	0x218a, 0x218f,
-	0x23fb, 0x23ff,
+	0x218c, 0x218f,
 	0x2427, 0x243f,
 	0x244b, 0x245f,
@@ -6184,5 +6773,6 @@
 	0x2bba, 0x2bbc,
 	0x2bc9, 0x2bc9,
-	0x2bd2, 0x2bff,
+	0x2bd3, 0x2beb,
+	0x2bf0, 0x2bff,
 	0x2c2f, 0x2c2f,
 	0x2c5f, 0x2c5f,
@@ -6202,5 +6792,5 @@
 	0x2dd7, 0x2dd7,
 	0x2ddf, 0x2ddf,
-	0x2e43, 0x2e7f,
+	0x2e4a, 0x2e7f,
 	0x2e9a, 0x2e9a,
 	0x2ef4, 0x2eff,
@@ -6210,5 +6800,5 @@
 	0x3097, 0x3098,
 	0x3100, 0x3104,
-	0x312e, 0x3130,
+	0x312f, 0x3130,
 	0x318f, 0x318f,
 	0x31bb, 0x31bf,
@@ -6217,19 +6807,17 @@
 	0x32ff, 0x32ff,
 	0x4db6, 0x4dbf,
-	0x9fcd, 0x9fff,
+	0x9feb, 0x9fff,
 	0xa48d, 0xa48f,
 	0xa4c7, 0xa4cf,
 	0xa62c, 0xa63f,
-	0xa69e, 0xa69e,
 	0xa6f8, 0xa6ff,
-	0xa78f, 0xa78f,
-	0xa7ae, 0xa7af,
-	0xa7b2, 0xa7f6,
+	0xa7af, 0xa7af,
+	0xa7b8, 0xa7f6,
 	0xa82c, 0xa82f,
 	0xa83a, 0xa83f,
 	0xa878, 0xa87f,
-	0xa8c5, 0xa8cd,
+	0xa8c6, 0xa8cd,
 	0xa8da, 0xa8df,
-	0xa8fc, 0xa8ff,
+	0xa8fe, 0xa8ff,
 	0xa954, 0xa95e,
 	0xa97d, 0xa97f,
@@ -6247,6 +6835,5 @@
 	0xab27, 0xab27,
 	0xab2f, 0xab2f,
-	0xab60, 0xab63,
-	0xab66, 0xabbf,
+	0xab66, 0xab6f,
 	0xabee, 0xabef,
 	0xabfa, 0xabff,
@@ -6269,5 +6856,4 @@
 	0xfdfe, 0xfdff,
 	0xfe1a, 0xfe1f,
-	0xfe2e, 0xfe2f,
 	0xfe53, 0xfe53,
 	0xfe67, 0xfe67,
@@ -6293,5 +6879,5 @@
 	0x10103, 0x10106,
 	0x10134, 0x10136,
-	0x1018d, 0x1018f,
+	0x1018f, 0x1018f,
 	0x1019c, 0x1019f,
 	0x101a1, 0x101cf,
@@ -6300,5 +6886,5 @@
 	0x102d1, 0x102df,
 	0x102fc, 0x102ff,
-	0x10324, 0x1032f,
+	0x10324, 0x1032c,
 	0x1034b, 0x1034f,
 	0x1037b, 0x1037f,
@@ -6307,5 +6893,7 @@
 	0x103d6, 0x103ff,
 	0x1049e, 0x1049f,
-	0x104aa, 0x104ff,
+	0x104aa, 0x104af,
+	0x104d4, 0x104d7,
+	0x104fc, 0x104ff,
 	0x10528, 0x1052f,
 	0x10564, 0x1056e,
@@ -6321,10 +6909,12 @@
 	0x10856, 0x10856,
 	0x1089f, 0x108a6,
-	0x108b0, 0x108ff,
+	0x108b0, 0x108df,
+	0x108f3, 0x108f3,
+	0x108f6, 0x108fa,
 	0x1091c, 0x1091e,
 	0x1093a, 0x1093e,
 	0x10940, 0x1097f,
-	0x109b8, 0x109bd,
-	0x109c0, 0x109ff,
+	0x109b8, 0x109bb,
+	0x109d0, 0x109d1,
 	0x10a04, 0x10a04,
 	0x10a07, 0x10a0b,
@@ -6344,5 +6934,8 @@
 	0x10b9d, 0x10ba8,
 	0x10bb0, 0x10bff,
-	0x10c49, 0x10e5f,
+	0x10c49, 0x10c7f,
+	0x10cb3, 0x10cbf,
+	0x10cf3, 0x10cf9,
+	0x10d00, 0x10e5f,
 	0x10e7f, 0x10fff,
 	0x1104e, 0x11051,
@@ -6354,12 +6947,16 @@
 	0x11144, 0x1114f,
 	0x11177, 0x1117f,
-	0x111c9, 0x111cc,
 	0x111ce, 0x111cf,
-	0x111db, 0x111e0,
+	0x111e0, 0x111e0,
 	0x111f5, 0x111ff,
 	0x11212, 0x11212,
-	0x1123e, 0x112af,
+	0x1123f, 0x1127f,
+	0x11287, 0x11287,
+	0x11289, 0x11289,
+	0x1128e, 0x1128e,
+	0x1129e, 0x1129e,
+	0x112aa, 0x112af,
 	0x112eb, 0x112ef,
-	0x112fa, 0x11300,
+	0x112fa, 0x112ff,
 	0x11304, 0x11304,
 	0x1130d, 0x1130e,
@@ -6371,24 +6968,52 @@
 	0x11345, 0x11346,
 	0x11349, 0x1134a,
-	0x1134e, 0x11356,
+	0x1134e, 0x1134f,
+	0x11351, 0x11356,
 	0x11358, 0x1135c,
 	0x11364, 0x11365,
 	0x1136d, 0x1136f,
-	0x11375, 0x1147f,
+	0x11375, 0x113ff,
+	0x1145a, 0x1145a,
+	0x1145c, 0x1145c,
+	0x1145e, 0x1147f,
 	0x114c8, 0x114cf,
 	0x114da, 0x1157f,
 	0x115b6, 0x115b7,
-	0x115ca, 0x115ff,
+	0x115de, 0x115ff,
 	0x11645, 0x1164f,
-	0x1165a, 0x1167f,
+	0x1165a, 0x1165f,
+	0x1166d, 0x1167f,
 	0x116b8, 0x116bf,
-	0x116ca, 0x1189f,
+	0x116ca, 0x116ff,
+	0x1171a, 0x1171c,
+	0x1172c, 0x1172f,
+	0x11740, 0x1189f,
 	0x118f3, 0x118fe,
-	0x11900, 0x11abf,
-	0x11af9, 0x11fff,
-	0x12399, 0x123ff,
+	0x11900, 0x119ff,
+	0x11a48, 0x11a4f,
+	0x11a84, 0x11a85,
+	0x11a9d, 0x11a9d,
+	0x11aa3, 0x11abf,
+	0x11af9, 0x11bff,
+	0x11c09, 0x11c09,
+	0x11c37, 0x11c37,
+	0x11c46, 0x11c4f,
+	0x11c6d, 0x11c6f,
+	0x11c90, 0x11c91,
+	0x11ca8, 0x11ca8,
+	0x11cb7, 0x11cff,
+	0x11d07, 0x11d07,
+	0x11d0a, 0x11d0a,
+	0x11d37, 0x11d39,
+	0x11d3b, 0x11d3b,
+	0x11d3e, 0x11d3e,
+	0x11d48, 0x11d4f,
+	0x11d5a, 0x11fff,
+	0x1239a, 0x123ff,
 	0x1246f, 0x1246f,
-	0x12475, 0x12fff,
-	0x1342f, 0x167ff,
+	0x12475, 0x1247f,
+	0x12544, 0x12fff,
+	0x1342f, 0x143ff,
+	0x14647, 0x167ff,
 	0x16a39, 0x16a3f,
 	0x16a5f, 0x16a5f,
@@ -6404,6 +7029,10 @@
 	0x16f45, 0x16f4f,
 	0x16f7f, 0x16f8e,
-	0x16fa0, 0x1afff,
-	0x1b002, 0x1bbff,
+	0x16fa0, 0x16fdf,
+	0x16fe2, 0x16fff,
+	0x187ed, 0x187ff,
+	0x18af3, 0x1afff,
+	0x1b11f, 0x1b16f,
+	0x1b2fc, 0x1bbff,
 	0x1bc6b, 0x1bc6f,
 	0x1bc7d, 0x1bc7f,
@@ -6413,5 +7042,5 @@
 	0x1d0f6, 0x1d0ff,
 	0x1d127, 0x1d128,
-	0x1d1de, 0x1d1ff,
+	0x1d1e9, 0x1d1ff,
 	0x1d246, 0x1d2ff,
 	0x1d357, 0x1d35f,
@@ -6437,7 +7066,17 @@
 	0x1d6a6, 0x1d6a7,
 	0x1d7cc, 0x1d7cd,
-	0x1d800, 0x1e7ff,
+	0x1da8c, 0x1da9a,
+	0x1daa0, 0x1daa0,
+	0x1dab0, 0x1dfff,
+	0x1e007, 0x1e007,
+	0x1e019, 0x1e01a,
+	0x1e022, 0x1e022,
+	0x1e025, 0x1e025,
+	0x1e02b, 0x1e7ff,
 	0x1e8c5, 0x1e8c6,
-	0x1e8d7, 0x1edff,
+	0x1e8d7, 0x1e8ff,
+	0x1e94b, 0x1e94f,
+	0x1e95a, 0x1e95d,
+	0x1e960, 0x1edff,
 	0x1ee04, 0x1ee04,
 	0x1ee20, 0x1ee20,
@@ -6483,21 +7122,13 @@
 	0x1f12f, 0x1f12f,
 	0x1f16c, 0x1f16f,
-	0x1f19b, 0x1f1e5,
+	0x1f1ad, 0x1f1e5,
 	0x1f203, 0x1f20f,
-	0x1f23b, 0x1f23f,
+	0x1f23c, 0x1f23f,
 	0x1f249, 0x1f24f,
-	0x1f252, 0x1f2ff,
-	0x1f32d, 0x1f32f,
-	0x1f37e, 0x1f37f,
-	0x1f3cf, 0x1f3d3,
-	0x1f3f8, 0x1f3ff,
-	0x1f4ff, 0x1f4ff,
-	0x1f54b, 0x1f54f,
-	0x1f57a, 0x1f57a,
-	0x1f5a4, 0x1f5a4,
-	0x1f643, 0x1f644,
-	0x1f6d0, 0x1f6df,
+	0x1f252, 0x1f25f,
+	0x1f266, 0x1f2ff,
+	0x1f6d5, 0x1f6df,
 	0x1f6ed, 0x1f6ef,
-	0x1f6f4, 0x1f6ff,
+	0x1f6f9, 0x1f6ff,
 	0x1f774, 0x1f77f,
 	0x1f7d5, 0x1f7ff,
@@ -6506,8 +7137,17 @@
 	0x1f85a, 0x1f85f,
 	0x1f888, 0x1f88f,
-	0x1f8ae, 0x1ffff,
+	0x1f8ae, 0x1f8ff,
+	0x1f90c, 0x1f90f,
+	0x1f93f, 0x1f93f,
+	0x1f94d, 0x1f94f,
+	0x1f96c, 0x1f97f,
+	0x1f998, 0x1f9bf,
+	0x1f9c1, 0x1f9cf,
+	0x1f9e7, 0x1ffff,
 	0x2a6d7, 0x2a6ff,
 	0x2b735, 0x2b73f,
-	0x2b81e, 0x2f7ff,
+	0x2b81e, 0x2b81f,
+	0x2cea2, 0x2ceaf,
+	0x2ebe1, 0x2f7ff,
 	0x2fa1e, 0xe0000,
 	0xe0002, 0xe001f,
@@ -6534,5 +7174,5 @@
 /* 'L': Major Category */
 static const OnigCodePoint CR_L[] = {
-	537,
+	585,
 	0x0041, 0x005a,
 	0x0061, 0x007a,
@@ -6583,5 +7223,7 @@
 	0x0828, 0x0828,
 	0x0840, 0x0858,
-	0x08a0, 0x08b2,
+	0x0860, 0x086a,
+	0x08a0, 0x08b4,
+	0x08b6, 0x08bd,
 	0x0904, 0x0939,
 	0x093d, 0x093d,
@@ -6600,4 +7242,5 @@
 	0x09df, 0x09e1,
 	0x09f0, 0x09f1,
+	0x09fc, 0x09fc,
 	0x0a05, 0x0a0a,
 	0x0a0f, 0x0a10,
@@ -6619,4 +7262,5 @@
 	0x0ad0, 0x0ad0,
 	0x0ae0, 0x0ae1,
+	0x0af9, 0x0af9,
 	0x0b05, 0x0b0c,
 	0x0b0f, 0x0b10,
@@ -6645,6 +7289,7 @@
 	0x0c2a, 0x0c39,
 	0x0c3d, 0x0c3d,
-	0x0c58, 0x0c59,
+	0x0c58, 0x0c5a,
 	0x0c60, 0x0c61,
+	0x0c80, 0x0c80,
 	0x0c85, 0x0c8c,
 	0x0c8e, 0x0c90,
@@ -6661,5 +7306,6 @@
 	0x0d3d, 0x0d3d,
 	0x0d4e, 0x0d4e,
-	0x0d60, 0x0d61,
+	0x0d54, 0x0d56,
+	0x0d5f, 0x0d61,
 	0x0d7a, 0x0d7f,
 	0x0d85, 0x0d96,
@@ -6722,5 +7368,6 @@
 	0x1318, 0x135a,
 	0x1380, 0x138f,
-	0x13a0, 0x13f4,
+	0x13a0, 0x13f5,
+	0x13f8, 0x13fd,
 	0x1401, 0x166c,
 	0x166f, 0x167f,
@@ -6738,5 +7385,6 @@
 	0x17dc, 0x17dc,
 	0x1820, 0x1877,
-	0x1880, 0x18a8,
+	0x1880, 0x1884,
+	0x1887, 0x18a8,
 	0x18aa, 0x18aa,
 	0x18b0, 0x18f5,
@@ -6745,5 +7393,5 @@
 	0x1970, 0x1974,
 	0x1980, 0x19ab,
-	0x19c1, 0x19c7,
+	0x19b0, 0x19c9,
 	0x1a00, 0x1a16,
 	0x1a20, 0x1a54,
@@ -6757,4 +7405,5 @@
 	0x1c4d, 0x1c4f,
 	0x1c5a, 0x1c7d,
+	0x1c80, 0x1c88,
 	0x1ce9, 0x1cec,
 	0x1cee, 0x1cf1,
@@ -6824,10 +7473,10 @@
 	0x30a1, 0x30fa,
 	0x30fc, 0x30ff,
-	0x3105, 0x312d,
+	0x3105, 0x312e,
 	0x3131, 0x318e,
 	0x31a0, 0x31ba,
 	0x31f0, 0x31ff,
 	0x3400, 0x4db5,
-	0x4e00, 0x9fcc,
+	0x4e00, 0x9fea,
 	0xa000, 0xa48c,
 	0xa4d0, 0xa4fd,
@@ -6840,7 +7489,6 @@
 	0xa717, 0xa71f,
 	0xa722, 0xa788,
-	0xa78b, 0xa78e,
-	0xa790, 0xa7ad,
-	0xa7b0, 0xa7b1,
+	0xa78b, 0xa7ae,
+	0xa7b0, 0xa7b7,
 	0xa7f7, 0xa801,
 	0xa803, 0xa805,
@@ -6851,4 +7499,5 @@
 	0xa8f2, 0xa8f7,
 	0xa8fb, 0xa8fb,
+	0xa8fd, 0xa8fd,
 	0xa90a, 0xa925,
 	0xa930, 0xa946,
@@ -6879,7 +7528,6 @@
 	0xab28, 0xab2e,
 	0xab30, 0xab5a,
-	0xab5c, 0xab5f,
-	0xab64, 0xab65,
-	0xabc0, 0xabe2,
+	0xab5c, 0xab65,
+	0xab70, 0xabe2,
 	0xac00, 0xd7a3,
 	0xd7b0, 0xd7c6,
@@ -6920,5 +7568,5 @@
 	0x102a0, 0x102d0,
 	0x10300, 0x1031f,
-	0x10330, 0x10340,
+	0x1032d, 0x10340,
 	0x10342, 0x10349,
 	0x10350, 0x10375,
@@ -6927,4 +7575,6 @@
 	0x103c8, 0x103cf,
 	0x10400, 0x1049d,
+	0x104b0, 0x104d3,
+	0x104d8, 0x104fb,
 	0x10500, 0x10527,
 	0x10530, 0x10563,
@@ -6940,4 +7590,6 @@
 	0x10860, 0x10876,
 	0x10880, 0x1089e,
+	0x108e0, 0x108f2,
+	0x108f4, 0x108f5,
 	0x10900, 0x10915,
 	0x10920, 0x10939,
@@ -6957,4 +7609,6 @@
 	0x10b80, 0x10b91,
 	0x10c00, 0x10c48,
+	0x10c80, 0x10cb2,
+	0x10cc0, 0x10cf2,
 	0x11003, 0x11037,
 	0x11083, 0x110af,
@@ -6966,6 +7620,12 @@
 	0x111c1, 0x111c4,
 	0x111da, 0x111da,
+	0x111dc, 0x111dc,
 	0x11200, 0x11211,
 	0x11213, 0x1122b,
+	0x11280, 0x11286,
+	0x11288, 0x11288,
+	0x1128a, 0x1128d,
+	0x1128f, 0x1129d,
+	0x1129f, 0x112a8,
 	0x112b0, 0x112de,
 	0x11305, 0x1130c,
@@ -6976,17 +7636,38 @@
 	0x11335, 0x11339,
 	0x1133d, 0x1133d,
+	0x11350, 0x11350,
 	0x1135d, 0x11361,
+	0x11400, 0x11434,
+	0x11447, 0x1144a,
 	0x11480, 0x114af,
 	0x114c4, 0x114c5,
 	0x114c7, 0x114c7,
 	0x11580, 0x115ae,
+	0x115d8, 0x115db,
 	0x11600, 0x1162f,
 	0x11644, 0x11644,
 	0x11680, 0x116aa,
+	0x11700, 0x11719,
 	0x118a0, 0x118df,
 	0x118ff, 0x118ff,
+	0x11a00, 0x11a00,
+	0x11a0b, 0x11a32,
+	0x11a3a, 0x11a3a,
+	0x11a50, 0x11a50,
+	0x11a5c, 0x11a83,
+	0x11a86, 0x11a89,
 	0x11ac0, 0x11af8,
-	0x12000, 0x12398,
+	0x11c00, 0x11c08,
+	0x11c0a, 0x11c2e,
+	0x11c40, 0x11c40,
+	0x11c72, 0x11c8f,
+	0x11d00, 0x11d06,
+	0x11d08, 0x11d09,
+	0x11d0b, 0x11d30,
+	0x11d46, 0x11d46,
+	0x12000, 0x12399,
+	0x12480, 0x12543,
 	0x13000, 0x1342e,
+	0x14400, 0x14646,
 	0x16800, 0x16a38,
 	0x16a40, 0x16a5e,
@@ -6999,5 +7680,9 @@
 	0x16f50, 0x16f50,
 	0x16f93, 0x16f9f,
-	0x1b000, 0x1b001,
+	0x16fe0, 0x16fe1,
+	0x17000, 0x187ec,
+	0x18800, 0x18af2,
+	0x1b000, 0x1b11e,
+	0x1b170, 0x1b2fb,
 	0x1bc00, 0x1bc6a,
 	0x1bc70, 0x1bc7c,
@@ -7035,4 +7720,5 @@
 	0x1d7c4, 0x1d7cb,
 	0x1e800, 0x1e8c4,
+	0x1e900, 0x1e943,
 	0x1ee00, 0x1ee03,
 	0x1ee05, 0x1ee1f,
@@ -7071,4 +7757,6 @@
 	0x2a700, 0x2b734,
 	0x2b740, 0x2b81d,
+	0x2b820, 0x2cea1,
+	0x2ceb0, 0x2ebe0,
 	0x2f800, 0x2fa1d,
 }; /* CR_L */
@@ -7076,5 +7764,5 @@
 /* 'LC': General Category */
 static const OnigCodePoint CR_LC[] = {
-	117,
+	126,
 	0x0041, 0x005a,
 	0x0061, 0x007a,
@@ -7102,4 +7790,7 @@
 	0x10c7, 0x10c7,
 	0x10cd, 0x10cd,
+	0x13a0, 0x13f5,
+	0x13f8, 0x13fd,
+	0x1c80, 0x1c88,
 	0x1d00, 0x1d2b,
 	0x1d6b, 0x1d77,
@@ -7153,9 +7844,10 @@
 	0xa771, 0xa787,
 	0xa78b, 0xa78e,
-	0xa790, 0xa7ad,
-	0xa7b0, 0xa7b1,
+	0xa790, 0xa7ae,
+	0xa7b0, 0xa7b7,
 	0xa7fa, 0xa7fa,
 	0xab30, 0xab5a,
-	0xab64, 0xab65,
+	0xab60, 0xab65,
+	0xab70, 0xabbf,
 	0xfb00, 0xfb06,
 	0xfb13, 0xfb17,
@@ -7163,4 +7855,8 @@
 	0xff41, 0xff5a,
 	0x10400, 0x1044f,
+	0x104b0, 0x104d3,
+	0x104d8, 0x104fb,
+	0x10c80, 0x10cb2,
+	0x10cc0, 0x10cf2,
 	0x118a0, 0x118df,
 	0x1d400, 0x1d454,
@@ -7194,9 +7890,10 @@
 	0x1d7aa, 0x1d7c2,
 	0x1d7c4, 0x1d7cb,
+	0x1e900, 0x1e943,
 }; /* CR_LC */
 
 /* 'Ll': General Category */
 static const OnigCodePoint CR_Ll[] = {
-	625,
+	633,
 	0x0061, 0x007a,
 	0x00b5, 0x00b5,
@@ -7469,4 +8166,6 @@
 	0x052f, 0x052f,
 	0x0561, 0x0587,
+	0x13f8, 0x13fd,
+	0x1c80, 0x1c88,
 	0x1d00, 0x1d2b,
 	0x1d6b, 0x1d77,
@@ -7788,11 +8487,16 @@
 	0xa7a7, 0xa7a7,
 	0xa7a9, 0xa7a9,
+	0xa7b5, 0xa7b5,
+	0xa7b7, 0xa7b7,
 	0xa7fa, 0xa7fa,
 	0xab30, 0xab5a,
-	0xab64, 0xab65,
+	0xab60, 0xab65,
+	0xab70, 0xabbf,
 	0xfb00, 0xfb06,
 	0xfb13, 0xfb17,
 	0xff41, 0xff5a,
 	0x10428, 0x1044f,
+	0x104d8, 0x104fb,
+	0x10cc0, 0x10cf2,
 	0x118c0, 0x118df,
 	0x1d41a, 0x1d433,
@@ -7824,9 +8528,10 @@
 	0x1d7c4, 0x1d7c9,
 	0x1d7cb, 0x1d7cb,
+	0x1e922, 0x1e943,
 }; /* CR_Ll */
 
 /* 'Lm': General Category */
 static const OnigCodePoint CR_Lm[] = {
-	56,
+	57,
 	0x02b0, 0x02c1,
 	0x02c6, 0x02d1,
@@ -7885,9 +8590,10 @@
 	0x16b40, 0x16b43,
 	0x16f93, 0x16f9f,
+	0x16fe0, 0x16fe1,
 }; /* CR_Lm */
 
 /* 'Lo': General Category */
 static const OnigCodePoint CR_Lo[] = {
-	417,
+	459,
 	0x00aa, 0x00aa,
 	0x00ba, 0x00ba,
@@ -7912,5 +8618,7 @@
 	0x0800, 0x0815,
 	0x0840, 0x0858,
-	0x08a0, 0x08b2,
+	0x0860, 0x086a,
+	0x08a0, 0x08b4,
+	0x08b6, 0x08bd,
 	0x0904, 0x0939,
 	0x093d, 0x093d,
@@ -7929,4 +8637,5 @@
 	0x09df, 0x09e1,
 	0x09f0, 0x09f1,
+	0x09fc, 0x09fc,
 	0x0a05, 0x0a0a,
 	0x0a0f, 0x0a10,
@@ -7948,4 +8657,5 @@
 	0x0ad0, 0x0ad0,
 	0x0ae0, 0x0ae1,
+	0x0af9, 0x0af9,
 	0x0b05, 0x0b0c,
 	0x0b0f, 0x0b10,
@@ -7974,6 +8684,7 @@
 	0x0c2a, 0x0c39,
 	0x0c3d, 0x0c3d,
-	0x0c58, 0x0c59,
+	0x0c58, 0x0c5a,
 	0x0c60, 0x0c61,
+	0x0c80, 0x0c80,
 	0x0c85, 0x0c8c,
 	0x0c8e, 0x0c90,
@@ -7990,5 +8701,6 @@
 	0x0d3d, 0x0d3d,
 	0x0d4e, 0x0d4e,
-	0x0d60, 0x0d61,
+	0x0d54, 0x0d56,
+	0x0d5f, 0x0d61,
 	0x0d7a, 0x0d7f,
 	0x0d85, 0x0d96,
@@ -8047,5 +8759,4 @@
 	0x1318, 0x135a,
 	0x1380, 0x138f,
-	0x13a0, 0x13f4,
 	0x1401, 0x166c,
 	0x166f, 0x167f,
@@ -8063,5 +8774,6 @@
 	0x1820, 0x1842,
 	0x1844, 0x1877,
-	0x1880, 0x18a8,
+	0x1880, 0x1884,
+	0x1887, 0x18a8,
 	0x18aa, 0x18aa,
 	0x18b0, 0x18f5,
@@ -8070,5 +8782,5 @@
 	0x1970, 0x1974,
 	0x1980, 0x19ab,
-	0x19c1, 0x19c7,
+	0x19b0, 0x19c9,
 	0x1a00, 0x1a16,
 	0x1a20, 0x1a54,
@@ -8101,10 +8813,10 @@
 	0x30a1, 0x30fa,
 	0x30ff, 0x30ff,
-	0x3105, 0x312d,
+	0x3105, 0x312e,
 	0x3131, 0x318e,
 	0x31a0, 0x31ba,
 	0x31f0, 0x31ff,
 	0x3400, 0x4db5,
-	0x4e00, 0x9fcc,
+	0x4e00, 0x9fea,
 	0xa000, 0xa014,
 	0xa016, 0xa48c,
@@ -8115,4 +8827,5 @@
 	0xa66e, 0xa66e,
 	0xa6a0, 0xa6e5,
+	0xa78f, 0xa78f,
 	0xa7f7, 0xa7f7,
 	0xa7fb, 0xa801,
@@ -8124,4 +8837,5 @@
 	0xa8f2, 0xa8f7,
 	0xa8fb, 0xa8fb,
+	0xa8fd, 0xa8fd,
 	0xa90a, 0xa925,
 	0xa930, 0xa946,
@@ -8188,5 +8902,5 @@
 	0x102a0, 0x102d0,
 	0x10300, 0x1031f,
-	0x10330, 0x10340,
+	0x1032d, 0x10340,
 	0x10342, 0x10349,
 	0x10350, 0x10375,
@@ -8208,4 +8922,6 @@
 	0x10860, 0x10876,
 	0x10880, 0x1089e,
+	0x108e0, 0x108f2,
+	0x108f4, 0x108f5,
 	0x10900, 0x10915,
 	0x10920, 0x10939,
@@ -8234,6 +8950,12 @@
 	0x111c1, 0x111c4,
 	0x111da, 0x111da,
+	0x111dc, 0x111dc,
 	0x11200, 0x11211,
 	0x11213, 0x1122b,
+	0x11280, 0x11286,
+	0x11288, 0x11288,
+	0x1128a, 0x1128d,
+	0x1128f, 0x1129d,
+	0x1129f, 0x112a8,
 	0x112b0, 0x112de,
 	0x11305, 0x1130c,
@@ -8244,16 +8966,37 @@
 	0x11335, 0x11339,
 	0x1133d, 0x1133d,
+	0x11350, 0x11350,
 	0x1135d, 0x11361,
+	0x11400, 0x11434,
+	0x11447, 0x1144a,
 	0x11480, 0x114af,
 	0x114c4, 0x114c5,
 	0x114c7, 0x114c7,
 	0x11580, 0x115ae,
+	0x115d8, 0x115db,
 	0x11600, 0x1162f,
 	0x11644, 0x11644,
 	0x11680, 0x116aa,
+	0x11700, 0x11719,
 	0x118ff, 0x118ff,
+	0x11a00, 0x11a00,
+	0x11a0b, 0x11a32,
+	0x11a3a, 0x11a3a,
+	0x11a50, 0x11a50,
+	0x11a5c, 0x11a83,
+	0x11a86, 0x11a89,
 	0x11ac0, 0x11af8,
-	0x12000, 0x12398,
+	0x11c00, 0x11c08,
+	0x11c0a, 0x11c2e,
+	0x11c40, 0x11c40,
+	0x11c72, 0x11c8f,
+	0x11d00, 0x11d06,
+	0x11d08, 0x11d09,
+	0x11d0b, 0x11d30,
+	0x11d46, 0x11d46,
+	0x12000, 0x12399,
+	0x12480, 0x12543,
 	0x13000, 0x1342e,
+	0x14400, 0x14646,
 	0x16800, 0x16a38,
 	0x16a40, 0x16a5e,
@@ -8264,5 +9007,8 @@
 	0x16f00, 0x16f44,
 	0x16f50, 0x16f50,
-	0x1b000, 0x1b001,
+	0x17000, 0x187ec,
+	0x18800, 0x18af2,
+	0x1b000, 0x1b11e,
+	0x1b170, 0x1b2fb,
 	0x1bc00, 0x1bc6a,
 	0x1bc70, 0x1bc7c,
@@ -8306,4 +9052,6 @@
 	0x2a700, 0x2b734,
 	0x2b740, 0x2b81d,
+	0x2b820, 0x2cea1,
+	0x2ceb0, 0x2ebe0,
 	0x2f800, 0x2fa1d,
 }; /* CR_Lo */
@@ -8326,5 +9074,5 @@
 /* 'Lu': General Category */
 static const OnigCodePoint CR_Lu[] = {
-	622,
+	627,
 	0x0041, 0x005a,
 	0x00c0, 0x00d6,
@@ -8602,4 +9350,5 @@
 	0x10c7, 0x10c7,
 	0x10cd, 0x10cd,
+	0x13a0, 0x13f5,
 	0x1e00, 0x1e00,
 	0x1e02, 0x1e02,
@@ -8913,8 +9662,11 @@
 	0xa7a6, 0xa7a6,
 	0xa7a8, 0xa7a8,
-	0xa7aa, 0xa7ad,
-	0xa7b0, 0xa7b1,
+	0xa7aa, 0xa7ae,
+	0xa7b0, 0xa7b4,
+	0xa7b6, 0xa7b6,
 	0xff21, 0xff3a,
 	0x10400, 0x10427,
+	0x104b0, 0x104d3,
+	0x10c80, 0x10cb2,
 	0x118a0, 0x118bf,
 	0x1d400, 0x1d419,
@@ -8949,9 +9701,10 @@
 	0x1d790, 0x1d7a8,
 	0x1d7ca, 0x1d7ca,
+	0x1e900, 0x1e921,
 }; /* CR_Lu */
 
 /* 'M': Major Category */
 static const OnigCodePoint CR_M[] = {
-	229,
+	263,
 	0x0300, 0x036f,
 	0x0483, 0x0489,
@@ -8977,5 +9730,6 @@
 	0x0829, 0x082d,
 	0x0859, 0x085b,
-	0x08e4, 0x0903,
+	0x08d4, 0x08e1,
+	0x08e3, 0x0903,
 	0x093a, 0x093c,
 	0x093e, 0x094f,
@@ -9003,4 +9757,5 @@
 	0x0acb, 0x0acd,
 	0x0ae2, 0x0ae3,
+	0x0afa, 0x0aff,
 	0x0b01, 0x0b03,
 	0x0b3c, 0x0b3c,
@@ -9028,5 +9783,6 @@
 	0x0cd5, 0x0cd6,
 	0x0ce2, 0x0ce3,
-	0x0d01, 0x0d03,
+	0x0d00, 0x0d03,
+	0x0d3b, 0x0d3c,
 	0x0d3e, 0x0d44,
 	0x0d46, 0x0d48,
@@ -9074,9 +9830,8 @@
 	0x17dd, 0x17dd,
 	0x180b, 0x180d,
+	0x1885, 0x1886,
 	0x18a9, 0x18a9,
 	0x1920, 0x192b,
 	0x1930, 0x193b,
-	0x19b0, 0x19c0,
-	0x19c8, 0x19c9,
 	0x1a17, 0x1a1b,
 	0x1a55, 0x1a5e,
@@ -9095,7 +9850,7 @@
 	0x1ced, 0x1ced,
 	0x1cf2, 0x1cf4,
-	0x1cf8, 0x1cf9,
-	0x1dc0, 0x1df5,
-	0x1dfc, 0x1dff,
+	0x1cf7, 0x1cf9,
+	0x1dc0, 0x1df9,
+	0x1dfb, 0x1dff,
 	0x20d0, 0x20f0,
 	0x2cef, 0x2cf1,
@@ -9106,5 +9861,5 @@
 	0xa66f, 0xa672,
 	0xa674, 0xa67d,
-	0xa69f, 0xa69f,
+	0xa69e, 0xa69f,
 	0xa6f0, 0xa6f1,
 	0xa802, 0xa802,
@@ -9113,5 +9868,5 @@
 	0xa823, 0xa827,
 	0xa880, 0xa881,
-	0xa8b4, 0xa8c4,
+	0xa8b4, 0xa8c5,
 	0xa8e0, 0xa8f1,
 	0xa926, 0xa92d,
@@ -9135,5 +9890,5 @@
 	0xfb1e, 0xfb1e,
 	0xfe00, 0xfe0f,
-	0xfe20, 0xfe2d,
+	0xfe20, 0xfe2f,
 	0x101fd, 0x101fd,
 	0x102e0, 0x102e0,
@@ -9154,7 +9909,9 @@
 	0x11180, 0x11182,
 	0x111b3, 0x111c0,
+	0x111ca, 0x111cc,
 	0x1122c, 0x11237,
+	0x1123e, 0x1123e,
 	0x112df, 0x112ea,
-	0x11301, 0x11303,
+	0x11300, 0x11303,
 	0x1133c, 0x1133c,
 	0x1133e, 0x11344,
@@ -9165,9 +9922,27 @@
 	0x11366, 0x1136c,
 	0x11370, 0x11374,
+	0x11435, 0x11446,
 	0x114b0, 0x114c3,
 	0x115af, 0x115b5,
 	0x115b8, 0x115c0,
+	0x115dc, 0x115dd,
 	0x11630, 0x11640,
 	0x116ab, 0x116b7,
+	0x1171d, 0x1172b,
+	0x11a01, 0x11a0a,
+	0x11a33, 0x11a39,
+	0x11a3b, 0x11a3e,
+	0x11a47, 0x11a47,
+	0x11a51, 0x11a5b,
+	0x11a8a, 0x11a99,
+	0x11c2f, 0x11c36,
+	0x11c38, 0x11c3f,
+	0x11c92, 0x11ca7,
+	0x11ca9, 0x11cb6,
+	0x11d31, 0x11d36,
+	0x11d3a, 0x11d3a,
+	0x11d3c, 0x11d3d,
+	0x11d3f, 0x11d45,
+	0x11d47, 0x11d47,
 	0x16af0, 0x16af4,
 	0x16b30, 0x16b36,
@@ -9181,5 +9956,17 @@
 	0x1d1aa, 0x1d1ad,
 	0x1d242, 0x1d244,
+	0x1da00, 0x1da36,
+	0x1da3b, 0x1da6c,
+	0x1da75, 0x1da75,
+	0x1da84, 0x1da84,
+	0x1da9b, 0x1da9f,
+	0x1daa1, 0x1daaf,
+	0x1e000, 0x1e006,
+	0x1e008, 0x1e018,
+	0x1e01b, 0x1e021,
+	0x1e023, 0x1e024,
+	0x1e026, 0x1e02a,
 	0x1e8d0, 0x1e8d6,
+	0x1e944, 0x1e94a,
 	0xe0100, 0xe01ef,
 }; /* CR_M */
@@ -9187,5 +9974,5 @@
 /* 'Mc': General Category */
 static const OnigCodePoint CR_Mc[] = {
-	147,
+	160,
 	0x0903, 0x0903,
 	0x093b, 0x093b,
@@ -9252,6 +10039,4 @@
 	0x1930, 0x1931,
 	0x1933, 0x1938,
-	0x19b0, 0x19c0,
-	0x19c8, 0x19c9,
 	0x1a19, 0x1a1a,
 	0x1a55, 0x1a55,
@@ -9277,4 +10062,5 @@
 	0x1ce1, 0x1ce1,
 	0x1cf2, 0x1cf3,
+	0x1cf7, 0x1cf7,
 	0x302e, 0x302f,
 	0xa823, 0xa824,
@@ -9319,4 +10105,7 @@
 	0x11357, 0x11357,
 	0x11362, 0x11363,
+	0x11435, 0x11437,
+	0x11440, 0x11441,
+	0x11445, 0x11445,
 	0x114b0, 0x114b2,
 	0x114b9, 0x114b9,
@@ -9332,4 +10121,15 @@
 	0x116ae, 0x116af,
 	0x116b6, 0x116b6,
+	0x11720, 0x11721,
+	0x11726, 0x11726,
+	0x11a07, 0x11a08,
+	0x11a39, 0x11a39,
+	0x11a57, 0x11a58,
+	0x11a97, 0x11a97,
+	0x11c2f, 0x11c2f,
+	0x11c3e, 0x11c3e,
+	0x11ca9, 0x11ca9,
+	0x11cb1, 0x11cb1,
+	0x11cb4, 0x11cb4,
 	0x16f51, 0x16f7e,
 	0x1d165, 0x1d166,
@@ -9349,5 +10149,5 @@
 /* 'Mn': General Category */
 static const OnigCodePoint CR_Mn[] = {
-	255,
+	301,
 	0x0300, 0x036f,
 	0x0483, 0x0487,
@@ -9373,5 +10173,6 @@
 	0x0829, 0x082d,
 	0x0859, 0x085b,
-	0x08e4, 0x0902,
+	0x08d4, 0x08e1,
+	0x08e3, 0x0902,
 	0x093a, 0x093a,
 	0x093c, 0x093c,
@@ -9399,4 +10200,5 @@
 	0x0acd, 0x0acd,
 	0x0ae2, 0x0ae3,
+	0x0afa, 0x0aff,
 	0x0b01, 0x0b01,
 	0x0b3c, 0x0b3c,
@@ -9421,5 +10223,6 @@
 	0x0ccc, 0x0ccd,
 	0x0ce2, 0x0ce3,
-	0x0d01, 0x0d01,
+	0x0d00, 0x0d01,
+	0x0d3b, 0x0d3c,
 	0x0d41, 0x0d44,
 	0x0d4d, 0x0d4d,
@@ -9467,4 +10270,5 @@
 	0x17dd, 0x17dd,
 	0x180b, 0x180d,
+	0x1885, 0x1886,
 	0x18a9, 0x18a9,
 	0x1920, 0x1922,
@@ -9504,6 +10308,6 @@
 	0x1cf4, 0x1cf4,
 	0x1cf8, 0x1cf9,
-	0x1dc0, 0x1df5,
-	0x1dfc, 0x1dff,
+	0x1dc0, 0x1df9,
+	0x1dfb, 0x1dff,
 	0x20d0, 0x20dc,
 	0x20e1, 0x20e1,
@@ -9516,5 +10320,5 @@
 	0xa66f, 0xa66f,
 	0xa674, 0xa67d,
-	0xa69f, 0xa69f,
+	0xa69e, 0xa69f,
 	0xa6f0, 0xa6f1,
 	0xa802, 0xa802,
@@ -9522,5 +10326,5 @@
 	0xa80b, 0xa80b,
 	0xa825, 0xa826,
-	0xa8c4, 0xa8c4,
+	0xa8c4, 0xa8c5,
 	0xa8e0, 0xa8f1,
 	0xa926, 0xa92d,
@@ -9549,5 +10353,5 @@
 	0xfb1e, 0xfb1e,
 	0xfe00, 0xfe0f,
-	0xfe20, 0xfe2d,
+	0xfe20, 0xfe2f,
 	0x101fd, 0x101fd,
 	0x102e0, 0x102e0,
@@ -9570,14 +10374,19 @@
 	0x11180, 0x11181,
 	0x111b6, 0x111be,
+	0x111ca, 0x111cc,
 	0x1122f, 0x11231,
 	0x11234, 0x11234,
 	0x11236, 0x11237,
+	0x1123e, 0x1123e,
 	0x112df, 0x112df,
 	0x112e3, 0x112ea,
-	0x11301, 0x11301,
+	0x11300, 0x11301,
 	0x1133c, 0x1133c,
 	0x11340, 0x11340,
 	0x11366, 0x1136c,
 	0x11370, 0x11374,
+	0x11438, 0x1143f,
+	0x11442, 0x11444,
+	0x11446, 0x11446,
 	0x114b3, 0x114b8,
 	0x114ba, 0x114ba,
@@ -9587,4 +10396,5 @@
 	0x115bc, 0x115bd,
 	0x115bf, 0x115c0,
+	0x115dc, 0x115dd,
 	0x11633, 0x1163a,
 	0x1163d, 0x1163d,
@@ -9594,4 +10404,28 @@
 	0x116b0, 0x116b5,
 	0x116b7, 0x116b7,
+	0x1171d, 0x1171f,
+	0x11722, 0x11725,
+	0x11727, 0x1172b,
+	0x11a01, 0x11a06,
+	0x11a09, 0x11a0a,
+	0x11a33, 0x11a38,
+	0x11a3b, 0x11a3e,
+	0x11a47, 0x11a47,
+	0x11a51, 0x11a56,
+	0x11a59, 0x11a5b,
+	0x11a8a, 0x11a96,
+	0x11a98, 0x11a99,
+	0x11c30, 0x11c36,
+	0x11c38, 0x11c3d,
+	0x11c3f, 0x11c3f,
+	0x11c92, 0x11ca7,
+	0x11caa, 0x11cb0,
+	0x11cb2, 0x11cb3,
+	0x11cb5, 0x11cb6,
+	0x11d31, 0x11d36,
+	0x11d3a, 0x11d3a,
+	0x11d3c, 0x11d3d,
+	0x11d3f, 0x11d45,
+	0x11d47, 0x11d47,
 	0x16af0, 0x16af4,
 	0x16b30, 0x16b36,
@@ -9603,5 +10437,17 @@
 	0x1d1aa, 0x1d1ad,
 	0x1d242, 0x1d244,
+	0x1da00, 0x1da36,
+	0x1da3b, 0x1da6c,
+	0x1da75, 0x1da75,
+	0x1da84, 0x1da84,
+	0x1da9b, 0x1da9f,
+	0x1daa1, 0x1daaf,
+	0x1e000, 0x1e006,
+	0x1e008, 0x1e018,
+	0x1e01b, 0x1e021,
+	0x1e023, 0x1e024,
+	0x1e026, 0x1e02a,
 	0x1e8d0, 0x1e8d6,
+	0x1e944, 0x1e94a,
 	0xe0100, 0xe01ef,
 }; /* CR_Mn */
@@ -9609,5 +10455,5 @@
 /* 'N': Major Category */
 static const OnigCodePoint CR_N[] = {
-	105,
+	116,
 	0x0030, 0x0039,
 	0x00b2, 0x00b3,
@@ -9628,5 +10474,6 @@
 	0x0c78, 0x0c7e,
 	0x0ce6, 0x0cef,
-	0x0d66, 0x0d75,
+	0x0d58, 0x0d5e,
+	0x0d66, 0x0d78,
 	0x0de6, 0x0def,
 	0x0e50, 0x0e59,
@@ -9688,5 +10535,9 @@
 	0x10879, 0x1087f,
 	0x108a7, 0x108af,
+	0x108fb, 0x108ff,
 	0x10916, 0x1091b,
+	0x109bc, 0x109bd,
+	0x109c0, 0x109cf,
+	0x109d2, 0x109ff,
 	0x10a40, 0x10a47,
 	0x10a7d, 0x10a7e,
@@ -9696,4 +10547,5 @@
 	0x10b78, 0x10b7f,
 	0x10ba9, 0x10baf,
+	0x10cfa, 0x10cff,
 	0x10e60, 0x10e7e,
 	0x11052, 0x1106f,
@@ -9703,8 +10555,12 @@
 	0x111e1, 0x111f4,
 	0x112f0, 0x112f9,
+	0x11450, 0x11459,
 	0x114d0, 0x114d9,
 	0x11650, 0x11659,
 	0x116c0, 0x116c9,
+	0x11730, 0x1173b,
 	0x118e0, 0x118f2,
+	0x11c50, 0x11c6c,
+	0x11d50, 0x11d59,
 	0x12400, 0x1246e,
 	0x16a60, 0x16a69,
@@ -9714,4 +10570,5 @@
 	0x1d7ce, 0x1d7ff,
 	0x1e8c7, 0x1e8cf,
+	0x1e950, 0x1e959,
 	0x1f100, 0x1f10c,
 }; /* CR_N */
@@ -9739,5 +10596,5 @@
 /* 'No': General Category */
 static const OnigCodePoint CR_No[] = {
-	52,
+	60,
 	0x00b2, 0x00b3,
 	0x00b9, 0x00b9,
@@ -9747,5 +10604,6 @@
 	0x0bf0, 0x0bf2,
 	0x0c78, 0x0c7e,
-	0x0d70, 0x0d75,
+	0x0d58, 0x0d5e,
+	0x0d70, 0x0d78,
 	0x0f2a, 0x0f33,
 	0x1369, 0x137c,
@@ -9776,5 +10634,9 @@
 	0x10879, 0x1087f,
 	0x108a7, 0x108af,
+	0x108fb, 0x108ff,
 	0x10916, 0x1091b,
+	0x109bc, 0x109bd,
+	0x109c0, 0x109cf,
+	0x109d2, 0x109ff,
 	0x10a40, 0x10a47,
 	0x10a7d, 0x10a7e,
@@ -9784,8 +10646,11 @@
 	0x10b78, 0x10b7f,
 	0x10ba9, 0x10baf,
+	0x10cfa, 0x10cff,
 	0x10e60, 0x10e7e,
 	0x11052, 0x11065,
 	0x111e1, 0x111f4,
+	0x1173a, 0x1173b,
 	0x118ea, 0x118f2,
+	0x11c5a, 0x11c6c,
 	0x16b5b, 0x16b61,
 	0x1d360, 0x1d371,
@@ -9940,5 +10805,5 @@
 /* 'Po': General Category */
 static const OnigCodePoint CR_Po[] = {
-	151,
+	169,
 	0x0021, 0x0023,
 	0x0025, 0x0027,
@@ -9973,4 +10838,5 @@
 	0x0964, 0x0965,
 	0x0970, 0x0970,
+	0x09fd, 0x09fd,
 	0x0af0, 0x0af0,
 	0x0df4, 0x0df4,
@@ -10024,4 +10890,5 @@
 	0x2e3c, 0x2e3f,
 	0x2e41, 0x2e41,
+	0x2e43, 0x2e49,
 	0x3001, 0x3003,
 	0x303d, 0x303d,
@@ -10035,4 +10902,5 @@
 	0xa8ce, 0xa8cf,
 	0xa8f8, 0xa8fa,
+	0xa8fc, 0xa8fc,
 	0xa92e, 0xa92f,
 	0xa95f, 0xa95f,
@@ -10080,10 +10948,23 @@
 	0x11140, 0x11143,
 	0x11174, 0x11175,
-	0x111c5, 0x111c8,
+	0x111c5, 0x111c9,
 	0x111cd, 0x111cd,
+	0x111db, 0x111db,
+	0x111dd, 0x111df,
 	0x11238, 0x1123d,
+	0x112a9, 0x112a9,
+	0x1144b, 0x1144f,
+	0x1145b, 0x1145b,
+	0x1145d, 0x1145d,
 	0x114c6, 0x114c6,
-	0x115c1, 0x115c9,
+	0x115c1, 0x115d7,
 	0x11641, 0x11643,
+	0x11660, 0x1166c,
+	0x1173c, 0x1173e,
+	0x11a3f, 0x11a46,
+	0x11a9a, 0x11a9c,
+	0x11a9e, 0x11aa2,
+	0x11c41, 0x11c45,
+	0x11c70, 0x11c71,
 	0x12470, 0x12474,
 	0x16a6e, 0x16a6f,
@@ -10092,4 +10973,6 @@
 	0x16b44, 0x16b44,
 	0x1bc9f, 0x1bc9f,
+	0x1da87, 0x1da8b,
+	0x1e95e, 0x1e95f,
 }; /* CR_Po */
 
@@ -10176,5 +11059,5 @@
 /* 'S': Major Category */
 static const OnigCodePoint CR_S[] = {
-	210,
+	217,
 	0x0024, 0x0024,
 	0x002b, 0x002b,
@@ -10215,4 +11098,5 @@
 	0x0bf3, 0x0bfa,
 	0x0c7f, 0x0c7f,
+	0x0d4f, 0x0d4f,
 	0x0d79, 0x0d79,
 	0x0e3f, 0x0e3f,
@@ -10245,5 +11129,5 @@
 	0x207a, 0x207c,
 	0x208a, 0x208c,
-	0x20a0, 0x20bd,
+	0x20a0, 0x20bf,
 	0x2100, 0x2101,
 	0x2103, 0x2106,
@@ -10260,8 +11144,8 @@
 	0x214a, 0x214d,
 	0x214f, 0x214f,
+	0x218a, 0x218b,
 	0x2190, 0x2307,
 	0x230c, 0x2328,
-	0x232b, 0x23fa,
-	0x2400, 0x2426,
+	0x232b, 0x2426,
 	0x2440, 0x244a,
 	0x249c, 0x24e9,
@@ -10276,5 +11160,6 @@
 	0x2b98, 0x2bb9,
 	0x2bbd, 0x2bc8,
-	0x2bca, 0x2bd1,
+	0x2bca, 0x2bd2,
+	0x2bec, 0x2bef,
 	0x2ce5, 0x2cea,
 	0x2e80, 0x2e99,
@@ -10325,5 +11210,5 @@
 	0x10137, 0x1013f,
 	0x10179, 0x10189,
-	0x1018c, 0x1018c,
+	0x1018c, 0x1018e,
 	0x10190, 0x1019b,
 	0x101a0, 0x101a0,
@@ -10331,4 +11216,5 @@
 	0x10877, 0x10878,
 	0x10ac8, 0x10ac8,
+	0x1173f, 0x1173f,
 	0x16b3c, 0x16b3f,
 	0x16b45, 0x16b45,
@@ -10340,5 +11226,5 @@
 	0x1d183, 0x1d184,
 	0x1d18c, 0x1d1a9,
-	0x1d1ae, 0x1d1dd,
+	0x1d1ae, 0x1d1e8,
 	0x1d200, 0x1d241,
 	0x1d245, 0x1d245,
@@ -10354,4 +11240,9 @@
 	0x1d7a9, 0x1d7a9,
 	0x1d7c3, 0x1d7c3,
+	0x1d800, 0x1d9ff,
+	0x1da37, 0x1da3a,
+	0x1da6d, 0x1da74,
+	0x1da76, 0x1da83,
+	0x1da85, 0x1da86,
 	0x1eef0, 0x1eef1,
 	0x1f000, 0x1f02b,
@@ -10363,21 +11254,13 @@
 	0x1f110, 0x1f12e,
 	0x1f130, 0x1f16b,
-	0x1f170, 0x1f19a,
+	0x1f170, 0x1f1ac,
 	0x1f1e6, 0x1f202,
-	0x1f210, 0x1f23a,
+	0x1f210, 0x1f23b,
 	0x1f240, 0x1f248,
 	0x1f250, 0x1f251,
-	0x1f300, 0x1f32c,
-	0x1f330, 0x1f37d,
-	0x1f380, 0x1f3ce,
-	0x1f3d4, 0x1f3f7,
-	0x1f400, 0x1f4fe,
-	0x1f500, 0x1f54a,
-	0x1f550, 0x1f579,
-	0x1f57b, 0x1f5a3,
-	0x1f5a5, 0x1f642,
-	0x1f645, 0x1f6cf,
+	0x1f260, 0x1f265,
+	0x1f300, 0x1f6d4,
 	0x1f6e0, 0x1f6ec,
-	0x1f6f0, 0x1f6f3,
+	0x1f6f0, 0x1f6f8,
 	0x1f700, 0x1f773,
 	0x1f780, 0x1f7d4,
@@ -10387,4 +11270,11 @@
 	0x1f860, 0x1f887,
 	0x1f890, 0x1f8ad,
+	0x1f900, 0x1f90b,
+	0x1f910, 0x1f93e,
+	0x1f940, 0x1f94c,
+	0x1f950, 0x1f96b,
+	0x1f980, 0x1f997,
+	0x1f9c0, 0x1f9c0,
+	0x1f9d0, 0x1f9e6,
 }; /* CR_S */
 
@@ -10402,5 +11292,5 @@
 	0x0e3f, 0x0e3f,
 	0x17db, 0x17db,
-	0x20a0, 0x20bd,
+	0x20a0, 0x20bf,
 	0xa838, 0xa838,
 	0xfdfc, 0xfdfc,
@@ -10413,5 +11303,5 @@
 /* 'Sk': General Category */
 static const OnigCodePoint CR_Sk[] = {
-	28,
+	29,
 	0x005e, 0x005e,
 	0x0060, 0x0060,
@@ -10442,4 +11332,5 @@
 	0xff40, 0xff40,
 	0xffe3, 0xffe3,
+	0x1f3fb, 0x1f3ff,
 }; /* CR_Sk */
 
@@ -10515,5 +11406,5 @@
 /* 'So': General Category */
 static const OnigCodePoint CR_So[] = {
-	165,
+	173,
 	0x00a6, 0x00a6,
 	0x00a9, 0x00a9,
@@ -10532,4 +11423,5 @@
 	0x0bfa, 0x0bfa,
 	0x0c7f, 0x0c7f,
+	0x0d4f, 0x0d4f,
 	0x0d79, 0x0d79,
 	0x0f01, 0x0f03,
@@ -10564,4 +11456,5 @@
 	0x214c, 0x214d,
 	0x214f, 0x214f,
+	0x218a, 0x218b,
 	0x2195, 0x2199,
 	0x219c, 0x219f,
@@ -10579,6 +11472,5 @@
 	0x237d, 0x239a,
 	0x23b4, 0x23db,
-	0x23e2, 0x23fa,
-	0x2400, 0x2426,
+	0x23e2, 0x2426,
 	0x2440, 0x244a,
 	0x249c, 0x24e9,
@@ -10596,5 +11488,6 @@
 	0x2b98, 0x2bb9,
 	0x2bbd, 0x2bc8,
-	0x2bca, 0x2bd1,
+	0x2bca, 0x2bd2,
+	0x2bec, 0x2bef,
 	0x2ce5, 0x2cea,
 	0x2e80, 0x2e99,
@@ -10630,5 +11523,5 @@
 	0x10137, 0x1013f,
 	0x10179, 0x10189,
-	0x1018c, 0x1018c,
+	0x1018c, 0x1018e,
 	0x10190, 0x1019b,
 	0x101a0, 0x101a0,
@@ -10636,4 +11529,5 @@
 	0x10877, 0x10878,
 	0x10ac8, 0x10ac8,
+	0x1173f, 0x1173f,
 	0x16b3c, 0x16b3f,
 	0x16b45, 0x16b45,
@@ -10645,8 +11539,13 @@
 	0x1d183, 0x1d184,
 	0x1d18c, 0x1d1a9,
-	0x1d1ae, 0x1d1dd,
+	0x1d1ae, 0x1d1e8,
 	0x1d200, 0x1d241,
 	0x1d245, 0x1d245,
 	0x1d300, 0x1d356,
+	0x1d800, 0x1d9ff,
+	0x1da37, 0x1da3a,
+	0x1da6d, 0x1da74,
+	0x1da76, 0x1da83,
+	0x1da85, 0x1da86,
 	0x1f000, 0x1f02b,
 	0x1f030, 0x1f093,
@@ -10657,21 +11556,14 @@
 	0x1f110, 0x1f12e,
 	0x1f130, 0x1f16b,
-	0x1f170, 0x1f19a,
+	0x1f170, 0x1f1ac,
 	0x1f1e6, 0x1f202,
-	0x1f210, 0x1f23a,
+	0x1f210, 0x1f23b,
 	0x1f240, 0x1f248,
 	0x1f250, 0x1f251,
-	0x1f300, 0x1f32c,
-	0x1f330, 0x1f37d,
-	0x1f380, 0x1f3ce,
-	0x1f3d4, 0x1f3f7,
-	0x1f400, 0x1f4fe,
-	0x1f500, 0x1f54a,
-	0x1f550, 0x1f579,
-	0x1f57b, 0x1f5a3,
-	0x1f5a5, 0x1f642,
-	0x1f645, 0x1f6cf,
+	0x1f260, 0x1f265,
+	0x1f300, 0x1f3fa,
+	0x1f400, 0x1f6d4,
 	0x1f6e0, 0x1f6ec,
-	0x1f6f0, 0x1f6f3,
+	0x1f6f0, 0x1f6f8,
 	0x1f700, 0x1f773,
 	0x1f780, 0x1f7d4,
@@ -10681,4 +11573,11 @@
 	0x1f860, 0x1f887,
 	0x1f890, 0x1f8ad,
+	0x1f900, 0x1f90b,
+	0x1f910, 0x1f93e,
+	0x1f940, 0x1f94c,
+	0x1f950, 0x1f96b,
+	0x1f980, 0x1f997,
+	0x1f9c0, 0x1f9c0,
+	0x1f9d0, 0x1f9e6,
 }; /* CR_So */
 
@@ -10874,5 +11773,5 @@
 /* 'Cased': Derived Property */
 static const OnigCodePoint CR_Cased[] = {
-	127,
+	135,
 	0x0041, 0x005a,
 	0x0061, 0x007a,
@@ -10905,4 +11804,7 @@
 	0x10c7, 0x10c7,
 	0x10cd, 0x10cd,
+	0x13a0, 0x13f5,
+	0x13f8, 0x13fd,
+	0x1c80, 0x1c88,
 	0x1d00, 0x1dbf,
 	0x1e00, 0x1f15,
@@ -10957,10 +11859,10 @@
 	0xa722, 0xa787,
 	0xa78b, 0xa78e,
-	0xa790, 0xa7ad,
-	0xa7b0, 0xa7b1,
+	0xa790, 0xa7ae,
+	0xa7b0, 0xa7b7,
 	0xa7f8, 0xa7fa,
 	0xab30, 0xab5a,
-	0xab5c, 0xab5f,
-	0xab64, 0xab65,
+	0xab5c, 0xab65,
+	0xab70, 0xabbf,
 	0xfb00, 0xfb06,
 	0xfb13, 0xfb17,
@@ -10968,4 +11870,8 @@
 	0xff41, 0xff5a,
 	0x10400, 0x1044f,
+	0x104b0, 0x104d3,
+	0x104d8, 0x104fb,
+	0x10c80, 0x10cb2,
+	0x10cc0, 0x10cf2,
 	0x118a0, 0x118df,
 	0x1d400, 0x1d454,
@@ -10999,4 +11905,5 @@
 	0x1d7aa, 0x1d7c2,
 	0x1d7c4, 0x1d7cb,
+	0x1e900, 0x1e943,
 	0x1f130, 0x1f149,
 	0x1f150, 0x1f169,
@@ -11006,5 +11913,5 @@
 /* 'Case_Ignorable': Derived Property */
 static const OnigCodePoint CR_Case_Ignorable[] = {
-	335,
+	381,
 	0x0027, 0x0027,
 	0x002e, 0x002e,
@@ -11047,5 +11954,5 @@
 	0x0816, 0x082d,
 	0x0859, 0x085b,
-	0x08e4, 0x0902,
+	0x08d4, 0x0902,
 	0x093a, 0x093a,
 	0x093c, 0x093c,
@@ -11074,4 +11981,5 @@
 	0x0acd, 0x0acd,
 	0x0ae2, 0x0ae3,
+	0x0afa, 0x0aff,
 	0x0b01, 0x0b01,
 	0x0b3c, 0x0b3c,
@@ -11096,5 +12004,6 @@
 	0x0ccc, 0x0ccd,
 	0x0ce2, 0x0ce3,
-	0x0d01, 0x0d01,
+	0x0d00, 0x0d01,
+	0x0d3b, 0x0d3c,
 	0x0d41, 0x0d44,
 	0x0d4d, 0x0d4d,
@@ -11146,4 +12055,5 @@
 	0x180b, 0x180e,
 	0x1843, 0x1843,
+	0x1885, 0x1886,
 	0x18a9, 0x18a9,
 	0x1920, 0x1922,
@@ -11187,6 +12097,6 @@
 	0x1d2c, 0x1d6a,
 	0x1d78, 0x1d78,
-	0x1d9b, 0x1df5,
-	0x1dfc, 0x1dff,
+	0x1d9b, 0x1df9,
+	0x1dfb, 0x1dff,
 	0x1fbd, 0x1fbd,
 	0x1fbf, 0x1fc1,
@@ -11224,6 +12134,5 @@
 	0xa674, 0xa67d,
 	0xa67f, 0xa67f,
-	0xa69c, 0xa69d,
-	0xa69f, 0xa69f,
+	0xa69c, 0xa69f,
 	0xa6f0, 0xa6f1,
 	0xa700, 0xa721,
@@ -11235,5 +12144,5 @@
 	0xa80b, 0xa80b,
 	0xa825, 0xa826,
-	0xa8c4, 0xa8c4,
+	0xa8c4, 0xa8c5,
 	0xa8e0, 0xa8f1,
 	0xa926, 0xa92d,
@@ -11269,5 +12178,5 @@
 	0xfe00, 0xfe0f,
 	0xfe13, 0xfe13,
-	0xfe20, 0xfe2d,
+	0xfe20, 0xfe2f,
 	0xfe52, 0xfe52,
 	0xfe55, 0xfe55,
@@ -11303,14 +12212,19 @@
 	0x11180, 0x11181,
 	0x111b6, 0x111be,
+	0x111ca, 0x111cc,
 	0x1122f, 0x11231,
 	0x11234, 0x11234,
 	0x11236, 0x11237,
+	0x1123e, 0x1123e,
 	0x112df, 0x112df,
 	0x112e3, 0x112ea,
-	0x11301, 0x11301,
+	0x11300, 0x11301,
 	0x1133c, 0x1133c,
 	0x11340, 0x11340,
 	0x11366, 0x1136c,
 	0x11370, 0x11374,
+	0x11438, 0x1143f,
+	0x11442, 0x11444,
+	0x11446, 0x11446,
 	0x114b3, 0x114b8,
 	0x114ba, 0x114ba,
@@ -11320,4 +12234,5 @@
 	0x115bc, 0x115bd,
 	0x115bf, 0x115c0,
+	0x115dc, 0x115dd,
 	0x11633, 0x1163a,
 	0x1163d, 0x1163d,
@@ -11327,8 +12242,33 @@
 	0x116b0, 0x116b5,
 	0x116b7, 0x116b7,
+	0x1171d, 0x1171f,
+	0x11722, 0x11725,
+	0x11727, 0x1172b,
+	0x11a01, 0x11a06,
+	0x11a09, 0x11a0a,
+	0x11a33, 0x11a38,
+	0x11a3b, 0x11a3e,
+	0x11a47, 0x11a47,
+	0x11a51, 0x11a56,
+	0x11a59, 0x11a5b,
+	0x11a8a, 0x11a96,
+	0x11a98, 0x11a99,
+	0x11c30, 0x11c36,
+	0x11c38, 0x11c3d,
+	0x11c3f, 0x11c3f,
+	0x11c92, 0x11ca7,
+	0x11caa, 0x11cb0,
+	0x11cb2, 0x11cb3,
+	0x11cb5, 0x11cb6,
+	0x11d31, 0x11d36,
+	0x11d3a, 0x11d3a,
+	0x11d3c, 0x11d3d,
+	0x11d3f, 0x11d45,
+	0x11d47, 0x11d47,
 	0x16af0, 0x16af4,
 	0x16b30, 0x16b36,
 	0x16b40, 0x16b43,
 	0x16f8f, 0x16f9f,
+	0x16fe0, 0x16fe1,
 	0x1bc9d, 0x1bc9e,
 	0x1bca0, 0x1bca3,
@@ -11338,5 +12278,18 @@
 	0x1d1aa, 0x1d1ad,
 	0x1d242, 0x1d244,
+	0x1da00, 0x1da36,
+	0x1da3b, 0x1da6c,
+	0x1da75, 0x1da75,
+	0x1da84, 0x1da84,
+	0x1da9b, 0x1da9f,
+	0x1daa1, 0x1daaf,
+	0x1e000, 0x1e006,
+	0x1e008, 0x1e018,
+	0x1e01b, 0x1e021,
+	0x1e023, 0x1e024,
+	0x1e026, 0x1e02a,
 	0x1e8d0, 0x1e8d6,
+	0x1e944, 0x1e94a,
+	0x1f3fb, 0x1f3ff,
 	0xe0001, 0xe0001,
 	0xe0020, 0xe007f,
@@ -11346,5 +12299,5 @@
 /* 'Changes_When_Lowercased': Derived Property */
 static const OnigCodePoint CR_Changes_When_Lowercased[] = {
-	585,
+	590,
 	0x0041, 0x005a,
 	0x00c0, 0x00d6,
@@ -11621,4 +12574,5 @@
 	0x10c7, 0x10c7,
 	0x10cd, 0x10cd,
+	0x13a0, 0x13f5,
 	0x1e00, 0x1e00,
 	0x1e02, 0x1e02,
@@ -11927,14 +12881,18 @@
 	0xa7a6, 0xa7a6,
 	0xa7a8, 0xa7a8,
-	0xa7aa, 0xa7ad,
-	0xa7b0, 0xa7b1,
+	0xa7aa, 0xa7ae,
+	0xa7b0, 0xa7b4,
+	0xa7b6, 0xa7b6,
 	0xff21, 0xff3a,
 	0x10400, 0x10427,
+	0x104b0, 0x104d3,
+	0x10c80, 0x10cb2,
 	0x118a0, 0x118bf,
+	0x1e900, 0x1e921,
 }; /* CR_Changes_When_Lowercased */
 
 /* 'Changes_When_Uppercased': Derived Property */
 static const OnigCodePoint CR_Changes_When_Uppercased[] = {
-	599,
+	607,
 	0x0061, 0x007a,
 	0x00b5, 0x00b5,
@@ -12087,6 +13045,5 @@
 	0x0263, 0x0263,
 	0x0265, 0x0266,
-	0x0268, 0x0269,
-	0x026b, 0x026c,
+	0x0268, 0x026c,
 	0x026f, 0x026f,
 	0x0271, 0x0272,
@@ -12097,5 +13054,5 @@
 	0x0287, 0x028c,
 	0x0292, 0x0292,
-	0x029e, 0x029e,
+	0x029d, 0x029e,
 	0x0345, 0x0345,
 	0x0371, 0x0371,
@@ -12223,4 +13180,6 @@
 	0x052f, 0x052f,
 	0x0561, 0x0587,
+	0x13f8, 0x13fd,
+	0x1c80, 0x1c88,
 	0x1d79, 0x1d79,
 	0x1d7d, 0x1d7d,
@@ -12531,14 +13490,21 @@
 	0xa7a7, 0xa7a7,
 	0xa7a9, 0xa7a9,
+	0xa7b5, 0xa7b5,
+	0xa7b7, 0xa7b7,
+	0xab53, 0xab53,
+	0xab70, 0xabbf,
 	0xfb00, 0xfb06,
 	0xfb13, 0xfb17,
 	0xff41, 0xff5a,
 	0x10428, 0x1044f,
+	0x104d8, 0x104fb,
+	0x10cc0, 0x10cf2,
 	0x118c0, 0x118df,
+	0x1e922, 0x1e943,
 }; /* CR_Changes_When_Uppercased */
 
 /* 'Changes_When_Titlecased': Derived Property */
 static const OnigCodePoint CR_Changes_When_Titlecased[] = {
-	600,
+	608,
 	0x0061, 0x007a,
 	0x00b5, 0x00b5,
@@ -12692,6 +13658,5 @@
 	0x0263, 0x0263,
 	0x0265, 0x0266,
-	0x0268, 0x0269,
-	0x026b, 0x026c,
+	0x0268, 0x026c,
 	0x026f, 0x026f,
 	0x0271, 0x0272,
@@ -12702,5 +13667,5 @@
 	0x0287, 0x028c,
 	0x0292, 0x0292,
-	0x029e, 0x029e,
+	0x029d, 0x029e,
 	0x0345, 0x0345,
 	0x0371, 0x0371,
@@ -12828,4 +13793,6 @@
 	0x052f, 0x052f,
 	0x0561, 0x0587,
+	0x13f8, 0x13fd,
+	0x1c80, 0x1c88,
 	0x1d79, 0x1d79,
 	0x1d7d, 0x1d7d,
@@ -13136,14 +14103,21 @@
 	0xa7a7, 0xa7a7,
 	0xa7a9, 0xa7a9,
+	0xa7b5, 0xa7b5,
+	0xa7b7, 0xa7b7,
+	0xab53, 0xab53,
+	0xab70, 0xabbf,
 	0xfb00, 0xfb06,
 	0xfb13, 0xfb17,
 	0xff41, 0xff5a,
 	0x10428, 0x1044f,
+	0x104d8, 0x104fb,
+	0x10cc0, 0x10cf2,
 	0x118c0, 0x118df,
+	0x1e922, 0x1e943,
 }; /* CR_Changes_When_Titlecased */
 
 /* 'Changes_When_Casefolded': Derived Property */
 static const OnigCodePoint CR_Changes_When_Casefolded[] = {
-	596,
+	603,
 	0x0041, 0x005a,
 	0x00b5, 0x00b5,
@@ -13427,4 +14401,6 @@
 	0x10c7, 0x10c7,
 	0x10cd, 0x10cd,
+	0x13f8, 0x13fd,
+	0x1c80, 0x1c88,
 	0x1e00, 0x1e00,
 	0x1e02, 0x1e02,
@@ -13735,16 +14711,21 @@
 	0xa7a6, 0xa7a6,
 	0xa7a8, 0xa7a8,
-	0xa7aa, 0xa7ad,
-	0xa7b0, 0xa7b1,
+	0xa7aa, 0xa7ae,
+	0xa7b0, 0xa7b4,
+	0xa7b6, 0xa7b6,
+	0xab70, 0xabbf,
 	0xfb00, 0xfb06,
 	0xfb13, 0xfb17,
 	0xff21, 0xff3a,
 	0x10400, 0x10427,
+	0x104b0, 0x104d3,
+	0x10c80, 0x10cb2,
 	0x118a0, 0x118bf,
+	0x1e900, 0x1e921,
 }; /* CR_Changes_When_Casefolded */
 
 /* 'Changes_When_Casemapped': Derived Property */
 static const OnigCodePoint CR_Changes_When_Casemapped[] = {
-	107,
+	116,
 	0x0041, 0x005a,
 	0x0061, 0x007a,
@@ -13768,6 +14749,5 @@
 	0x0263, 0x0263,
 	0x0265, 0x0266,
-	0x0268, 0x0269,
-	0x026b, 0x026c,
+	0x0268, 0x026c,
 	0x026f, 0x026f,
 	0x0271, 0x0272,
@@ -13778,5 +14758,5 @@
 	0x0287, 0x028c,
 	0x0292, 0x0292,
-	0x029e, 0x029e,
+	0x029d, 0x029e,
 	0x0345, 0x0345,
 	0x0370, 0x0373,
@@ -13798,4 +14778,7 @@
 	0x10c7, 0x10c7,
 	0x10cd, 0x10cd,
+	0x13a0, 0x13f5,
+	0x13f8, 0x13fd,
+	0x1c80, 0x1c88,
 	0x1d79, 0x1d79,
 	0x1d7d, 0x1d7d,
@@ -13846,6 +14829,8 @@
 	0xa78b, 0xa78d,
 	0xa790, 0xa793,
-	0xa796, 0xa7ad,
-	0xa7b0, 0xa7b1,
+	0xa796, 0xa7ae,
+	0xa7b0, 0xa7b7,
+	0xab53, 0xab53,
+	0xab70, 0xabbf,
 	0xfb00, 0xfb06,
 	0xfb13, 0xfb17,
@@ -13853,10 +14838,15 @@
 	0xff41, 0xff5a,
 	0x10400, 0x1044f,
+	0x104b0, 0x104d3,
+	0x104d8, 0x104fb,
+	0x10c80, 0x10cb2,
+	0x10cc0, 0x10cf2,
 	0x118a0, 0x118df,
+	0x1e900, 0x1e943,
 }; /* CR_Changes_When_Casemapped */
 
 /* 'ID_Start': Derived Property */
 static const OnigCodePoint CR_ID_Start[] = {
-	538,
+	585,
 	0x0041, 0x005a,
 	0x0061, 0x007a,
@@ -13907,5 +14897,7 @@
 	0x0828, 0x0828,
 	0x0840, 0x0858,
-	0x08a0, 0x08b2,
+	0x0860, 0x086a,
+	0x08a0, 0x08b4,
+	0x08b6, 0x08bd,
 	0x0904, 0x0939,
 	0x093d, 0x093d,
@@ -13924,4 +14916,5 @@
 	0x09df, 0x09e1,
 	0x09f0, 0x09f1,
+	0x09fc, 0x09fc,
 	0x0a05, 0x0a0a,
 	0x0a0f, 0x0a10,
@@ -13943,4 +14936,5 @@
 	0x0ad0, 0x0ad0,
 	0x0ae0, 0x0ae1,
+	0x0af9, 0x0af9,
 	0x0b05, 0x0b0c,
 	0x0b0f, 0x0b10,
@@ -13969,6 +14963,7 @@
 	0x0c2a, 0x0c39,
 	0x0c3d, 0x0c3d,
-	0x0c58, 0x0c59,
+	0x0c58, 0x0c5a,
 	0x0c60, 0x0c61,
+	0x0c80, 0x0c80,
 	0x0c85, 0x0c8c,
 	0x0c8e, 0x0c90,
@@ -13985,5 +14980,6 @@
 	0x0d3d, 0x0d3d,
 	0x0d4e, 0x0d4e,
-	0x0d60, 0x0d61,
+	0x0d54, 0x0d56,
+	0x0d5f, 0x0d61,
 	0x0d7a, 0x0d7f,
 	0x0d85, 0x0d96,
@@ -14046,5 +15042,6 @@
 	0x1318, 0x135a,
 	0x1380, 0x138f,
-	0x13a0, 0x13f4,
+	0x13a0, 0x13f5,
+	0x13f8, 0x13fd,
 	0x1401, 0x166c,
 	0x166f, 0x167f,
@@ -14069,5 +15066,5 @@
 	0x1970, 0x1974,
 	0x1980, 0x19ab,
-	0x19c1, 0x19c7,
+	0x19b0, 0x19c9,
 	0x1a00, 0x1a16,
 	0x1a20, 0x1a54,
@@ -14081,4 +15078,5 @@
 	0x1c4d, 0x1c4f,
 	0x1c5a, 0x1c7d,
+	0x1c80, 0x1c88,
 	0x1ce9, 0x1cec,
 	0x1cee, 0x1cf1,
@@ -14147,10 +15145,10 @@
 	0x30a1, 0x30fa,
 	0x30fc, 0x30ff,
-	0x3105, 0x312d,
+	0x3105, 0x312e,
 	0x3131, 0x318e,
 	0x31a0, 0x31ba,
 	0x31f0, 0x31ff,
 	0x3400, 0x4db5,
-	0x4e00, 0x9fcc,
+	0x4e00, 0x9fea,
 	0xa000, 0xa48c,
 	0xa4d0, 0xa4fd,
@@ -14163,7 +15161,6 @@
 	0xa717, 0xa71f,
 	0xa722, 0xa788,
-	0xa78b, 0xa78e,
-	0xa790, 0xa7ad,
-	0xa7b0, 0xa7b1,
+	0xa78b, 0xa7ae,
+	0xa7b0, 0xa7b7,
 	0xa7f7, 0xa801,
 	0xa803, 0xa805,
@@ -14174,4 +15171,5 @@
 	0xa8f2, 0xa8f7,
 	0xa8fb, 0xa8fb,
+	0xa8fd, 0xa8fd,
 	0xa90a, 0xa925,
 	0xa930, 0xa946,
@@ -14202,7 +15200,6 @@
 	0xab28, 0xab2e,
 	0xab30, 0xab5a,
-	0xab5c, 0xab5f,
-	0xab64, 0xab65,
-	0xabc0, 0xabe2,
+	0xab5c, 0xab65,
+	0xab70, 0xabe2,
 	0xac00, 0xd7a3,
 	0xd7b0, 0xd7c6,
@@ -14244,5 +15241,5 @@
 	0x102a0, 0x102d0,
 	0x10300, 0x1031f,
-	0x10330, 0x1034a,
+	0x1032d, 0x1034a,
 	0x10350, 0x10375,
 	0x10380, 0x1039d,
@@ -14251,4 +15248,6 @@
 	0x103d1, 0x103d5,
 	0x10400, 0x1049d,
+	0x104b0, 0x104d3,
+	0x104d8, 0x104fb,
 	0x10500, 0x10527,
 	0x10530, 0x10563,
@@ -14264,4 +15263,6 @@
 	0x10860, 0x10876,
 	0x10880, 0x1089e,
+	0x108e0, 0x108f2,
+	0x108f4, 0x108f5,
 	0x10900, 0x10915,
 	0x10920, 0x10939,
@@ -14281,4 +15282,6 @@
 	0x10b80, 0x10b91,
 	0x10c00, 0x10c48,
+	0x10c80, 0x10cb2,
+	0x10cc0, 0x10cf2,
 	0x11003, 0x11037,
 	0x11083, 0x110af,
@@ -14290,6 +15293,12 @@
 	0x111c1, 0x111c4,
 	0x111da, 0x111da,
+	0x111dc, 0x111dc,
 	0x11200, 0x11211,
 	0x11213, 0x1122b,
+	0x11280, 0x11286,
+	0x11288, 0x11288,
+	0x1128a, 0x1128d,
+	0x1128f, 0x1129d,
+	0x1129f, 0x112a8,
 	0x112b0, 0x112de,
 	0x11305, 0x1130c,
@@ -14300,18 +15309,39 @@
 	0x11335, 0x11339,
 	0x1133d, 0x1133d,
+	0x11350, 0x11350,
 	0x1135d, 0x11361,
+	0x11400, 0x11434,
+	0x11447, 0x1144a,
 	0x11480, 0x114af,
 	0x114c4, 0x114c5,
 	0x114c7, 0x114c7,
 	0x11580, 0x115ae,
+	0x115d8, 0x115db,
 	0x11600, 0x1162f,
 	0x11644, 0x11644,
 	0x11680, 0x116aa,
+	0x11700, 0x11719,
 	0x118a0, 0x118df,
 	0x118ff, 0x118ff,
+	0x11a00, 0x11a00,
+	0x11a0b, 0x11a32,
+	0x11a3a, 0x11a3a,
+	0x11a50, 0x11a50,
+	0x11a5c, 0x11a83,
+	0x11a86, 0x11a89,
 	0x11ac0, 0x11af8,
-	0x12000, 0x12398,
+	0x11c00, 0x11c08,
+	0x11c0a, 0x11c2e,
+	0x11c40, 0x11c40,
+	0x11c72, 0x11c8f,
+	0x11d00, 0x11d06,
+	0x11d08, 0x11d09,
+	0x11d0b, 0x11d30,
+	0x11d46, 0x11d46,
+	0x12000, 0x12399,
 	0x12400, 0x1246e,
+	0x12480, 0x12543,
 	0x13000, 0x1342e,
+	0x14400, 0x14646,
 	0x16800, 0x16a38,
 	0x16a40, 0x16a5e,
@@ -14324,5 +15354,9 @@
 	0x16f50, 0x16f50,
 	0x16f93, 0x16f9f,
-	0x1b000, 0x1b001,
+	0x16fe0, 0x16fe1,
+	0x17000, 0x187ec,
+	0x18800, 0x18af2,
+	0x1b000, 0x1b11e,
+	0x1b170, 0x1b2fb,
 	0x1bc00, 0x1bc6a,
 	0x1bc70, 0x1bc7c,
@@ -14360,4 +15394,5 @@
 	0x1d7c4, 0x1d7cb,
 	0x1e800, 0x1e8c4,
+	0x1e900, 0x1e943,
 	0x1ee00, 0x1ee03,
 	0x1ee05, 0x1ee1f,
@@ -14396,4 +15431,6 @@
 	0x2a700, 0x2b734,
 	0x2b740, 0x2b81d,
+	0x2b820, 0x2cea1,
+	0x2ceb0, 0x2ebe0,
 	0x2f800, 0x2fa1d,
 }; /* CR_ID_Start */
@@ -14401,5 +15438,5 @@
 /* 'ID_Continue': Derived Property */
 static const OnigCodePoint CR_ID_Continue[] = {
-	626,
+	689,
 	0x0030, 0x0039,
 	0x0041, 0x005a,
@@ -14451,6 +15488,9 @@
 	0x0800, 0x082d,
 	0x0840, 0x085b,
-	0x08a0, 0x08b2,
-	0x08e4, 0x0963,
+	0x0860, 0x086a,
+	0x08a0, 0x08b4,
+	0x08b6, 0x08bd,
+	0x08d4, 0x08e1,
+	0x08e3, 0x0963,
 	0x0966, 0x096f,
 	0x0971, 0x0983,
@@ -14468,4 +15508,5 @@
 	0x09df, 0x09e3,
 	0x09e6, 0x09f1,
+	0x09fc, 0x09fc,
 	0x0a01, 0x0a03,
 	0x0a05, 0x0a0a,
@@ -14497,4 +15538,5 @@
 	0x0ae0, 0x0ae3,
 	0x0ae6, 0x0aef,
+	0x0af9, 0x0aff,
 	0x0b01, 0x0b03,
 	0x0b05, 0x0b0c,
@@ -14537,8 +15579,8 @@
 	0x0c4a, 0x0c4d,
 	0x0c55, 0x0c56,
-	0x0c58, 0x0c59,
+	0x0c58, 0x0c5a,
 	0x0c60, 0x0c63,
 	0x0c66, 0x0c6f,
-	0x0c81, 0x0c83,
+	0x0c80, 0x0c83,
 	0x0c85, 0x0c8c,
 	0x0c8e, 0x0c90,
@@ -14554,13 +15596,12 @@
 	0x0ce6, 0x0cef,
 	0x0cf1, 0x0cf2,
-	0x0d01, 0x0d03,
+	0x0d00, 0x0d03,
 	0x0d05, 0x0d0c,
 	0x0d0e, 0x0d10,
-	0x0d12, 0x0d3a,
-	0x0d3d, 0x0d44,
+	0x0d12, 0x0d44,
 	0x0d46, 0x0d48,
 	0x0d4a, 0x0d4e,
-	0x0d57, 0x0d57,
-	0x0d60, 0x0d63,
+	0x0d54, 0x0d57,
+	0x0d5f, 0x0d63,
 	0x0d66, 0x0d6f,
 	0x0d7a, 0x0d7f,
@@ -14635,5 +15676,6 @@
 	0x1369, 0x1371,
 	0x1380, 0x138f,
-	0x13a0, 0x13f4,
+	0x13a0, 0x13f5,
+	0x13f8, 0x13fd,
 	0x1401, 0x166c,
 	0x166f, 0x167f,
@@ -14679,9 +15721,9 @@
 	0x1c40, 0x1c49,
 	0x1c4d, 0x1c7d,
+	0x1c80, 0x1c88,
 	0x1cd0, 0x1cd2,
-	0x1cd4, 0x1cf6,
-	0x1cf8, 0x1cf9,
-	0x1d00, 0x1df5,
-	0x1dfc, 0x1f15,
+	0x1cd4, 0x1cf9,
+	0x1d00, 0x1df9,
+	0x1dfb, 0x1f15,
 	0x1f18, 0x1f1d,
 	0x1f20, 0x1f45,
@@ -14750,10 +15792,10 @@
 	0x30a1, 0x30fa,
 	0x30fc, 0x30ff,
-	0x3105, 0x312d,
+	0x3105, 0x312e,
 	0x3131, 0x318e,
 	0x31a0, 0x31ba,
 	0x31f0, 0x31ff,
 	0x3400, 0x4db5,
-	0x4e00, 0x9fcc,
+	0x4e00, 0x9fea,
 	0xa000, 0xa48c,
 	0xa4d0, 0xa4fd,
@@ -14762,17 +15804,16 @@
 	0xa640, 0xa66f,
 	0xa674, 0xa67d,
-	0xa67f, 0xa69d,
-	0xa69f, 0xa6f1,
+	0xa67f, 0xa6f1,
 	0xa717, 0xa71f,
 	0xa722, 0xa788,
-	0xa78b, 0xa78e,
-	0xa790, 0xa7ad,
-	0xa7b0, 0xa7b1,
+	0xa78b, 0xa7ae,
+	0xa7b0, 0xa7b7,
 	0xa7f7, 0xa827,
 	0xa840, 0xa873,
-	0xa880, 0xa8c4,
+	0xa880, 0xa8c5,
 	0xa8d0, 0xa8d9,
 	0xa8e0, 0xa8f7,
 	0xa8fb, 0xa8fb,
+	0xa8fd, 0xa8fd,
 	0xa900, 0xa92d,
 	0xa930, 0xa953,
@@ -14795,7 +15836,6 @@
 	0xab28, 0xab2e,
 	0xab30, 0xab5a,
-	0xab5c, 0xab5f,
-	0xab64, 0xab65,
-	0xabc0, 0xabea,
+	0xab5c, 0xab65,
+	0xab70, 0xabea,
 	0xabec, 0xabed,
 	0xabf0, 0xabf9,
@@ -14819,5 +15859,5 @@
 	0xfdf0, 0xfdfb,
 	0xfe00, 0xfe0f,
-	0xfe20, 0xfe2d,
+	0xfe20, 0xfe2f,
 	0xfe33, 0xfe34,
 	0xfe4d, 0xfe4f,
@@ -14846,5 +15886,5 @@
 	0x102e0, 0x102e0,
 	0x10300, 0x1031f,
-	0x10330, 0x1034a,
+	0x1032d, 0x1034a,
 	0x10350, 0x1037a,
 	0x10380, 0x1039d,
@@ -14854,4 +15894,6 @@
 	0x10400, 0x1049d,
 	0x104a0, 0x104a9,
+	0x104b0, 0x104d3,
+	0x104d8, 0x104fb,
 	0x10500, 0x10527,
 	0x10530, 0x10563,
@@ -14867,4 +15909,6 @@
 	0x10860, 0x10876,
 	0x10880, 0x1089e,
+	0x108e0, 0x108f2,
+	0x108f4, 0x108f5,
 	0x10900, 0x10915,
 	0x10920, 0x10939,
@@ -14887,4 +15931,6 @@
 	0x10b80, 0x10b91,
 	0x10c00, 0x10c48,
+	0x10c80, 0x10cb2,
+	0x10cc0, 0x10cf2,
 	0x11000, 0x11046,
 	0x11066, 0x1106f,
@@ -14897,10 +15943,18 @@
 	0x11176, 0x11176,
 	0x11180, 0x111c4,
+	0x111ca, 0x111cc,
 	0x111d0, 0x111da,
+	0x111dc, 0x111dc,
 	0x11200, 0x11211,
 	0x11213, 0x11237,
+	0x1123e, 0x1123e,
+	0x11280, 0x11286,
+	0x11288, 0x11288,
+	0x1128a, 0x1128d,
+	0x1128f, 0x1129d,
+	0x1129f, 0x112a8,
 	0x112b0, 0x112ea,
 	0x112f0, 0x112f9,
-	0x11301, 0x11303,
+	0x11300, 0x11303,
 	0x11305, 0x1130c,
 	0x1130f, 0x11310,
@@ -14912,8 +15966,11 @@
 	0x11347, 0x11348,
 	0x1134b, 0x1134d,
+	0x11350, 0x11350,
 	0x11357, 0x11357,
 	0x1135d, 0x11363,
 	0x11366, 0x1136c,
 	0x11370, 0x11374,
+	0x11400, 0x1144a,
+	0x11450, 0x11459,
 	0x11480, 0x114c5,
 	0x114c7, 0x114c7,
@@ -14921,4 +15978,5 @@
 	0x11580, 0x115b5,
 	0x115b8, 0x115c0,
+	0x115d8, 0x115dd,
 	0x11600, 0x11640,
 	0x11644, 0x11644,
@@ -14926,10 +15984,33 @@
 	0x11680, 0x116b7,
 	0x116c0, 0x116c9,
+	0x11700, 0x11719,
+	0x1171d, 0x1172b,
+	0x11730, 0x11739,
 	0x118a0, 0x118e9,
 	0x118ff, 0x118ff,
+	0x11a00, 0x11a3e,
+	0x11a47, 0x11a47,
+	0x11a50, 0x11a83,
+	0x11a86, 0x11a99,
 	0x11ac0, 0x11af8,
-	0x12000, 0x12398,
+	0x11c00, 0x11c08,
+	0x11c0a, 0x11c36,
+	0x11c38, 0x11c40,
+	0x11c50, 0x11c59,
+	0x11c72, 0x11c8f,
+	0x11c92, 0x11ca7,
+	0x11ca9, 0x11cb6,
+	0x11d00, 0x11d06,
+	0x11d08, 0x11d09,
+	0x11d0b, 0x11d36,
+	0x11d3a, 0x11d3a,
+	0x11d3c, 0x11d3d,
+	0x11d3f, 0x11d47,
+	0x11d50, 0x11d59,
+	0x12000, 0x12399,
 	0x12400, 0x1246e,
+	0x12480, 0x12543,
 	0x13000, 0x1342e,
+	0x14400, 0x14646,
 	0x16800, 0x16a38,
 	0x16a40, 0x16a5e,
@@ -14945,5 +16026,9 @@
 	0x16f50, 0x16f7e,
 	0x16f8f, 0x16f9f,
-	0x1b000, 0x1b001,
+	0x16fe0, 0x16fe1,
+	0x17000, 0x187ec,
+	0x18800, 0x18af2,
+	0x1b000, 0x1b11e,
+	0x1b170, 0x1b2fb,
 	0x1bc00, 0x1bc6a,
 	0x1bc70, 0x1bc7c,
@@ -14988,6 +16073,19 @@
 	0x1d7c4, 0x1d7cb,
 	0x1d7ce, 0x1d7ff,
+	0x1da00, 0x1da36,
+	0x1da3b, 0x1da6c,
+	0x1da75, 0x1da75,
+	0x1da84, 0x1da84,
+	0x1da9b, 0x1da9f,
+	0x1daa1, 0x1daaf,
+	0x1e000, 0x1e006,
+	0x1e008, 0x1e018,
+	0x1e01b, 0x1e021,
+	0x1e023, 0x1e024,
+	0x1e026, 0x1e02a,
 	0x1e800, 0x1e8c4,
 	0x1e8d0, 0x1e8d6,
+	0x1e900, 0x1e94a,
+	0x1e950, 0x1e959,
 	0x1ee00, 0x1ee03,
 	0x1ee05, 0x1ee1f,
@@ -15026,4 +16124,6 @@
 	0x2a700, 0x2b734,
 	0x2b740, 0x2b81d,
+	0x2b820, 0x2cea1,
+	0x2ceb0, 0x2ebe0,
 	0x2f800, 0x2fa1d,
 	0xe0100, 0xe01ef,
@@ -15032,5 +16132,5 @@
 /* 'XID_Start': Derived Property */
 static const OnigCodePoint CR_XID_Start[] = {
-	545,
+	592,
 	0x0041, 0x005a,
 	0x0061, 0x007a,
@@ -15081,5 +16181,7 @@
 	0x0828, 0x0828,
 	0x0840, 0x0858,
-	0x08a0, 0x08b2,
+	0x0860, 0x086a,
+	0x08a0, 0x08b4,
+	0x08b6, 0x08bd,
 	0x0904, 0x0939,
 	0x093d, 0x093d,
@@ -15098,4 +16200,5 @@
 	0x09df, 0x09e1,
 	0x09f0, 0x09f1,
+	0x09fc, 0x09fc,
 	0x0a05, 0x0a0a,
 	0x0a0f, 0x0a10,
@@ -15117,4 +16220,5 @@
 	0x0ad0, 0x0ad0,
 	0x0ae0, 0x0ae1,
+	0x0af9, 0x0af9,
 	0x0b05, 0x0b0c,
 	0x0b0f, 0x0b10,
@@ -15143,6 +16247,7 @@
 	0x0c2a, 0x0c39,
 	0x0c3d, 0x0c3d,
-	0x0c58, 0x0c59,
+	0x0c58, 0x0c5a,
 	0x0c60, 0x0c61,
+	0x0c80, 0x0c80,
 	0x0c85, 0x0c8c,
 	0x0c8e, 0x0c90,
@@ -15159,5 +16264,6 @@
 	0x0d3d, 0x0d3d,
 	0x0d4e, 0x0d4e,
-	0x0d60, 0x0d61,
+	0x0d54, 0x0d56,
+	0x0d5f, 0x0d61,
 	0x0d7a, 0x0d7f,
 	0x0d85, 0x0d96,
@@ -15220,5 +16326,6 @@
 	0x1318, 0x135a,
 	0x1380, 0x138f,
-	0x13a0, 0x13f4,
+	0x13a0, 0x13f5,
+	0x13f8, 0x13fd,
 	0x1401, 0x166c,
 	0x166f, 0x167f,
@@ -15243,5 +16350,5 @@
 	0x1970, 0x1974,
 	0x1980, 0x19ab,
-	0x19c1, 0x19c7,
+	0x19b0, 0x19c9,
 	0x1a00, 0x1a16,
 	0x1a20, 0x1a54,
@@ -15255,4 +16362,5 @@
 	0x1c4d, 0x1c4f,
 	0x1c5a, 0x1c7d,
+	0x1c80, 0x1c88,
 	0x1ce9, 0x1cec,
 	0x1cee, 0x1cf1,
@@ -15321,10 +16429,10 @@
 	0x30a1, 0x30fa,
 	0x30fc, 0x30ff,
-	0x3105, 0x312d,
+	0x3105, 0x312e,
 	0x3131, 0x318e,
 	0x31a0, 0x31ba,
 	0x31f0, 0x31ff,
 	0x3400, 0x4db5,
-	0x4e00, 0x9fcc,
+	0x4e00, 0x9fea,
 	0xa000, 0xa48c,
 	0xa4d0, 0xa4fd,
@@ -15337,7 +16445,6 @@
 	0xa717, 0xa71f,
 	0xa722, 0xa788,
-	0xa78b, 0xa78e,
-	0xa790, 0xa7ad,
-	0xa7b0, 0xa7b1,
+	0xa78b, 0xa7ae,
+	0xa7b0, 0xa7b7,
 	0xa7f7, 0xa801,
 	0xa803, 0xa805,
@@ -15348,4 +16455,5 @@
 	0xa8f2, 0xa8f7,
 	0xa8fb, 0xa8fb,
+	0xa8fd, 0xa8fd,
 	0xa90a, 0xa925,
 	0xa930, 0xa946,
@@ -15376,7 +16484,6 @@
 	0xab28, 0xab2e,
 	0xab30, 0xab5a,
-	0xab5c, 0xab5f,
-	0xab64, 0xab65,
-	0xabc0, 0xabe2,
+	0xab5c, 0xab65,
+	0xab70, 0xabe2,
 	0xac00, 0xd7a3,
 	0xd7b0, 0xd7c6,
@@ -15425,5 +16532,5 @@
 	0x102a0, 0x102d0,
 	0x10300, 0x1031f,
-	0x10330, 0x1034a,
+	0x1032d, 0x1034a,
 	0x10350, 0x10375,
 	0x10380, 0x1039d,
@@ -15432,4 +16539,6 @@
 	0x103d1, 0x103d5,
 	0x10400, 0x1049d,
+	0x104b0, 0x104d3,
+	0x104d8, 0x104fb,
 	0x10500, 0x10527,
 	0x10530, 0x10563,
@@ -15445,4 +16554,6 @@
 	0x10860, 0x10876,
 	0x10880, 0x1089e,
+	0x108e0, 0x108f2,
+	0x108f4, 0x108f5,
 	0x10900, 0x10915,
 	0x10920, 0x10939,
@@ -15462,4 +16573,6 @@
 	0x10b80, 0x10b91,
 	0x10c00, 0x10c48,
+	0x10c80, 0x10cb2,
+	0x10cc0, 0x10cf2,
 	0x11003, 0x11037,
 	0x11083, 0x110af,
@@ -15471,6 +16584,12 @@
 	0x111c1, 0x111c4,
 	0x111da, 0x111da,
+	0x111dc, 0x111dc,
 	0x11200, 0x11211,
 	0x11213, 0x1122b,
+	0x11280, 0x11286,
+	0x11288, 0x11288,
+	0x1128a, 0x1128d,
+	0x1128f, 0x1129d,
+	0x1129f, 0x112a8,
 	0x112b0, 0x112de,
 	0x11305, 0x1130c,
@@ -15481,18 +16600,39 @@
 	0x11335, 0x11339,
 	0x1133d, 0x1133d,
+	0x11350, 0x11350,
 	0x1135d, 0x11361,
+	0x11400, 0x11434,
+	0x11447, 0x1144a,
 	0x11480, 0x114af,
 	0x114c4, 0x114c5,
 	0x114c7, 0x114c7,
 	0x11580, 0x115ae,
+	0x115d8, 0x115db,
 	0x11600, 0x1162f,
 	0x11644, 0x11644,
 	0x11680, 0x116aa,
+	0x11700, 0x11719,
 	0x118a0, 0x118df,
 	0x118ff, 0x118ff,
+	0x11a00, 0x11a00,
+	0x11a0b, 0x11a32,
+	0x11a3a, 0x11a3a,
+	0x11a50, 0x11a50,
+	0x11a5c, 0x11a83,
+	0x11a86, 0x11a89,
 	0x11ac0, 0x11af8,
-	0x12000, 0x12398,
+	0x11c00, 0x11c08,
+	0x11c0a, 0x11c2e,
+	0x11c40, 0x11c40,
+	0x11c72, 0x11c8f,
+	0x11d00, 0x11d06,
+	0x11d08, 0x11d09,
+	0x11d0b, 0x11d30,
+	0x11d46, 0x11d46,
+	0x12000, 0x12399,
 	0x12400, 0x1246e,
+	0x12480, 0x12543,
 	0x13000, 0x1342e,
+	0x14400, 0x14646,
 	0x16800, 0x16a38,
 	0x16a40, 0x16a5e,
@@ -15505,5 +16645,9 @@
 	0x16f50, 0x16f50,
 	0x16f93, 0x16f9f,
-	0x1b000, 0x1b001,
+	0x16fe0, 0x16fe1,
+	0x17000, 0x187ec,
+	0x18800, 0x18af2,
+	0x1b000, 0x1b11e,
+	0x1b170, 0x1b2fb,
 	0x1bc00, 0x1bc6a,
 	0x1bc70, 0x1bc7c,
@@ -15541,4 +16685,5 @@
 	0x1d7c4, 0x1d7cb,
 	0x1e800, 0x1e8c4,
+	0x1e900, 0x1e943,
 	0x1ee00, 0x1ee03,
 	0x1ee05, 0x1ee1f,
@@ -15577,4 +16722,6 @@
 	0x2a700, 0x2b734,
 	0x2b740, 0x2b81d,
+	0x2b820, 0x2cea1,
+	0x2ceb0, 0x2ebe0,
 	0x2f800, 0x2fa1d,
 }; /* CR_XID_Start */
@@ -15582,5 +16729,5 @@
 /* 'XID_Continue': Derived Property */
 static const OnigCodePoint CR_XID_Continue[] = {
-	633,
+	696,
 	0x0030, 0x0039,
 	0x0041, 0x005a,
@@ -15632,6 +16779,9 @@
 	0x0800, 0x082d,
 	0x0840, 0x085b,
-	0x08a0, 0x08b2,
-	0x08e4, 0x0963,
+	0x0860, 0x086a,
+	0x08a0, 0x08b4,
+	0x08b6, 0x08bd,
+	0x08d4, 0x08e1,
+	0x08e3, 0x0963,
 	0x0966, 0x096f,
 	0x0971, 0x0983,
@@ -15649,4 +16799,5 @@
 	0x09df, 0x09e3,
 	0x09e6, 0x09f1,
+	0x09fc, 0x09fc,
 	0x0a01, 0x0a03,
 	0x0a05, 0x0a0a,
@@ -15678,4 +16829,5 @@
 	0x0ae0, 0x0ae3,
 	0x0ae6, 0x0aef,
+	0x0af9, 0x0aff,
 	0x0b01, 0x0b03,
 	0x0b05, 0x0b0c,
@@ -15718,8 +16870,8 @@
 	0x0c4a, 0x0c4d,
 	0x0c55, 0x0c56,
-	0x0c58, 0x0c59,
+	0x0c58, 0x0c5a,
 	0x0c60, 0x0c63,
 	0x0c66, 0x0c6f,
-	0x0c81, 0x0c83,
+	0x0c80, 0x0c83,
 	0x0c85, 0x0c8c,
 	0x0c8e, 0x0c90,
@@ -15735,13 +16887,12 @@
 	0x0ce6, 0x0cef,
 	0x0cf1, 0x0cf2,
-	0x0d01, 0x0d03,
+	0x0d00, 0x0d03,
 	0x0d05, 0x0d0c,
 	0x0d0e, 0x0d10,
-	0x0d12, 0x0d3a,
-	0x0d3d, 0x0d44,
+	0x0d12, 0x0d44,
 	0x0d46, 0x0d48,
 	0x0d4a, 0x0d4e,
-	0x0d57, 0x0d57,
-	0x0d60, 0x0d63,
+	0x0d54, 0x0d57,
+	0x0d5f, 0x0d63,
 	0x0d66, 0x0d6f,
 	0x0d7a, 0x0d7f,
@@ -15816,5 +16967,6 @@
 	0x1369, 0x1371,
 	0x1380, 0x138f,
-	0x13a0, 0x13f4,
+	0x13a0, 0x13f5,
+	0x13f8, 0x13fd,
 	0x1401, 0x166c,
 	0x166f, 0x167f,
@@ -15860,9 +17012,9 @@
 	0x1c40, 0x1c49,
 	0x1c4d, 0x1c7d,
+	0x1c80, 0x1c88,
 	0x1cd0, 0x1cd2,
-	0x1cd4, 0x1cf6,
-	0x1cf8, 0x1cf9,
-	0x1d00, 0x1df5,
-	0x1dfc, 0x1f15,
+	0x1cd4, 0x1cf9,
+	0x1d00, 0x1df9,
+	0x1dfb, 0x1f15,
 	0x1f18, 0x1f1d,
 	0x1f20, 0x1f45,
@@ -15932,10 +17084,10 @@
 	0x30a1, 0x30fa,
 	0x30fc, 0x30ff,
-	0x3105, 0x312d,
+	0x3105, 0x312e,
 	0x3131, 0x318e,
 	0x31a0, 0x31ba,
 	0x31f0, 0x31ff,
 	0x3400, 0x4db5,
-	0x4e00, 0x9fcc,
+	0x4e00, 0x9fea,
 	0xa000, 0xa48c,
 	0xa4d0, 0xa4fd,
@@ -15944,17 +17096,16 @@
 	0xa640, 0xa66f,
 	0xa674, 0xa67d,
-	0xa67f, 0xa69d,
-	0xa69f, 0xa6f1,
+	0xa67f, 0xa6f1,
 	0xa717, 0xa71f,
 	0xa722, 0xa788,
-	0xa78b, 0xa78e,
-	0xa790, 0xa7ad,
-	0xa7b0, 0xa7b1,
+	0xa78b, 0xa7ae,
+	0xa7b0, 0xa7b7,
 	0xa7f7, 0xa827,
 	0xa840, 0xa873,
-	0xa880, 0xa8c4,
+	0xa880, 0xa8c5,
 	0xa8d0, 0xa8d9,
 	0xa8e0, 0xa8f7,
 	0xa8fb, 0xa8fb,
+	0xa8fd, 0xa8fd,
 	0xa900, 0xa92d,
 	0xa930, 0xa953,
@@ -15977,7 +17128,6 @@
 	0xab28, 0xab2e,
 	0xab30, 0xab5a,
-	0xab5c, 0xab5f,
-	0xab64, 0xab65,
-	0xabc0, 0xabea,
+	0xab5c, 0xab65,
+	0xab70, 0xabea,
 	0xabec, 0xabed,
 	0xabf0, 0xabf9,
@@ -16002,5 +17152,5 @@
 	0xfdf0, 0xfdf9,
 	0xfe00, 0xfe0f,
-	0xfe20, 0xfe2d,
+	0xfe20, 0xfe2f,
 	0xfe33, 0xfe34,
 	0xfe4d, 0xfe4f,
@@ -16034,5 +17184,5 @@
 	0x102e0, 0x102e0,
 	0x10300, 0x1031f,
-	0x10330, 0x1034a,
+	0x1032d, 0x1034a,
 	0x10350, 0x1037a,
 	0x10380, 0x1039d,
@@ -16042,4 +17192,6 @@
 	0x10400, 0x1049d,
 	0x104a0, 0x104a9,
+	0x104b0, 0x104d3,
+	0x104d8, 0x104fb,
 	0x10500, 0x10527,
 	0x10530, 0x10563,
@@ -16055,4 +17207,6 @@
 	0x10860, 0x10876,
 	0x10880, 0x1089e,
+	0x108e0, 0x108f2,
+	0x108f4, 0x108f5,
 	0x10900, 0x10915,
 	0x10920, 0x10939,
@@ -16075,4 +17229,6 @@
 	0x10b80, 0x10b91,
 	0x10c00, 0x10c48,
+	0x10c80, 0x10cb2,
+	0x10cc0, 0x10cf2,
 	0x11000, 0x11046,
 	0x11066, 0x1106f,
@@ -16085,10 +17241,18 @@
 	0x11176, 0x11176,
 	0x11180, 0x111c4,
+	0x111ca, 0x111cc,
 	0x111d0, 0x111da,
+	0x111dc, 0x111dc,
 	0x11200, 0x11211,
 	0x11213, 0x11237,
+	0x1123e, 0x1123e,
+	0x11280, 0x11286,
+	0x11288, 0x11288,
+	0x1128a, 0x1128d,
+	0x1128f, 0x1129d,
+	0x1129f, 0x112a8,
 	0x112b0, 0x112ea,
 	0x112f0, 0x112f9,
-	0x11301, 0x11303,
+	0x11300, 0x11303,
 	0x11305, 0x1130c,
 	0x1130f, 0x11310,
@@ -16100,8 +17264,11 @@
 	0x11347, 0x11348,
 	0x1134b, 0x1134d,
+	0x11350, 0x11350,
 	0x11357, 0x11357,
 	0x1135d, 0x11363,
 	0x11366, 0x1136c,
 	0x11370, 0x11374,
+	0x11400, 0x1144a,
+	0x11450, 0x11459,
 	0x11480, 0x114c5,
 	0x114c7, 0x114c7,
@@ -16109,4 +17276,5 @@
 	0x11580, 0x115b5,
 	0x115b8, 0x115c0,
+	0x115d8, 0x115dd,
 	0x11600, 0x11640,
 	0x11644, 0x11644,
@@ -16114,10 +17282,33 @@
 	0x11680, 0x116b7,
 	0x116c0, 0x116c9,
+	0x11700, 0x11719,
+	0x1171d, 0x1172b,
+	0x11730, 0x11739,
 	0x118a0, 0x118e9,
 	0x118ff, 0x118ff,
+	0x11a00, 0x11a3e,
+	0x11a47, 0x11a47,
+	0x11a50, 0x11a83,
+	0x11a86, 0x11a99,
 	0x11ac0, 0x11af8,
-	0x12000, 0x12398,
+	0x11c00, 0x11c08,
+	0x11c0a, 0x11c36,
+	0x11c38, 0x11c40,
+	0x11c50, 0x11c59,
+	0x11c72, 0x11c8f,
+	0x11c92, 0x11ca7,
+	0x11ca9, 0x11cb6,
+	0x11d00, 0x11d06,
+	0x11d08, 0x11d09,
+	0x11d0b, 0x11d36,
+	0x11d3a, 0x11d3a,
+	0x11d3c, 0x11d3d,
+	0x11d3f, 0x11d47,
+	0x11d50, 0x11d59,
+	0x12000, 0x12399,
 	0x12400, 0x1246e,
+	0x12480, 0x12543,
 	0x13000, 0x1342e,
+	0x14400, 0x14646,
 	0x16800, 0x16a38,
 	0x16a40, 0x16a5e,
@@ -16133,5 +17324,9 @@
 	0x16f50, 0x16f7e,
 	0x16f8f, 0x16f9f,
-	0x1b000, 0x1b001,
+	0x16fe0, 0x16fe1,
+	0x17000, 0x187ec,
+	0x18800, 0x18af2,
+	0x1b000, 0x1b11e,
+	0x1b170, 0x1b2fb,
 	0x1bc00, 0x1bc6a,
 	0x1bc70, 0x1bc7c,
@@ -16176,6 +17371,19 @@
 	0x1d7c4, 0x1d7cb,
 	0x1d7ce, 0x1d7ff,
+	0x1da00, 0x1da36,
+	0x1da3b, 0x1da6c,
+	0x1da75, 0x1da75,
+	0x1da84, 0x1da84,
+	0x1da9b, 0x1da9f,
+	0x1daa1, 0x1daaf,
+	0x1e000, 0x1e006,
+	0x1e008, 0x1e018,
+	0x1e01b, 0x1e021,
+	0x1e023, 0x1e024,
+	0x1e026, 0x1e02a,
 	0x1e800, 0x1e8c4,
 	0x1e8d0, 0x1e8d6,
+	0x1e900, 0x1e94a,
+	0x1e950, 0x1e959,
 	0x1ee00, 0x1ee03,
 	0x1ee05, 0x1ee1f,
@@ -16214,4 +17422,6 @@
 	0x2a700, 0x2b734,
 	0x2b740, 0x2b81d,
+	0x2b820, 0x2cea1,
+	0x2ceb0, 0x2ebe0,
 	0x2f800, 0x2fa1d,
 	0xe0100, 0xe01ef,
@@ -16242,5 +17452,5 @@
 /* 'Grapheme_Extend': Derived Property */
 static const OnigCodePoint CR_Grapheme_Extend[] = {
-	272,
+	319,
 	0x0300, 0x036f,
 	0x0483, 0x0489,
@@ -16266,5 +17476,6 @@
 	0x0829, 0x082d,
 	0x0859, 0x085b,
-	0x08e4, 0x0902,
+	0x08d4, 0x08e1,
+	0x08e3, 0x0902,
 	0x093a, 0x093a,
 	0x093c, 0x093c,
@@ -16294,4 +17505,5 @@
 	0x0acd, 0x0acd,
 	0x0ae2, 0x0ae3,
+	0x0afa, 0x0aff,
 	0x0b01, 0x0b01,
 	0x0b3c, 0x0b3c,
@@ -16320,5 +17532,6 @@
 	0x0cd5, 0x0cd6,
 	0x0ce2, 0x0ce3,
-	0x0d01, 0x0d01,
+	0x0d00, 0x0d01,
+	0x0d3b, 0x0d3c,
 	0x0d3e, 0x0d3e,
 	0x0d41, 0x0d44,
@@ -16370,4 +17583,5 @@
 	0x17dd, 0x17dd,
 	0x180b, 0x180d,
+	0x1885, 0x1886,
 	0x18a9, 0x18a9,
 	0x1920, 0x1922,
@@ -16407,7 +17621,7 @@
 	0x1cf4, 0x1cf4,
 	0x1cf8, 0x1cf9,
-	0x1dc0, 0x1df5,
-	0x1dfc, 0x1dff,
-	0x200c, 0x200d,
+	0x1dc0, 0x1df9,
+	0x1dfb, 0x1dff,
+	0x200c, 0x200c,
 	0x20d0, 0x20f0,
 	0x2cef, 0x2cf1,
@@ -16418,5 +17632,5 @@
 	0xa66f, 0xa672,
 	0xa674, 0xa67d,
-	0xa69f, 0xa69f,
+	0xa69e, 0xa69f,
 	0xa6f0, 0xa6f1,
 	0xa802, 0xa802,
@@ -16424,5 +17638,5 @@
 	0xa80b, 0xa80b,
 	0xa825, 0xa826,
-	0xa8c4, 0xa8c4,
+	0xa8c4, 0xa8c5,
 	0xa8e0, 0xa8f1,
 	0xa926, 0xa92d,
@@ -16451,5 +17665,5 @@
 	0xfb1e, 0xfb1e,
 	0xfe00, 0xfe0f,
-	0xfe20, 0xfe2d,
+	0xfe20, 0xfe2f,
 	0xff9e, 0xff9f,
 	0x101fd, 0x101fd,
@@ -16473,10 +17687,12 @@
 	0x11180, 0x11181,
 	0x111b6, 0x111be,
+	0x111ca, 0x111cc,
 	0x1122f, 0x11231,
 	0x11234, 0x11234,
 	0x11236, 0x11237,
+	0x1123e, 0x1123e,
 	0x112df, 0x112df,
 	0x112e3, 0x112ea,
-	0x11301, 0x11301,
+	0x11300, 0x11301,
 	0x1133c, 0x1133c,
 	0x1133e, 0x1133e,
@@ -16485,4 +17701,7 @@
 	0x11366, 0x1136c,
 	0x11370, 0x11374,
+	0x11438, 0x1143f,
+	0x11442, 0x11444,
+	0x11446, 0x11446,
 	0x114b0, 0x114b0,
 	0x114b3, 0x114b8,
@@ -16495,4 +17714,5 @@
 	0x115bc, 0x115bd,
 	0x115bf, 0x115c0,
+	0x115dc, 0x115dd,
 	0x11633, 0x1163a,
 	0x1163d, 0x1163d,
@@ -16502,4 +17722,28 @@
 	0x116b0, 0x116b5,
 	0x116b7, 0x116b7,
+	0x1171d, 0x1171f,
+	0x11722, 0x11725,
+	0x11727, 0x1172b,
+	0x11a01, 0x11a06,
+	0x11a09, 0x11a0a,
+	0x11a33, 0x11a38,
+	0x11a3b, 0x11a3e,
+	0x11a47, 0x11a47,
+	0x11a51, 0x11a56,
+	0x11a59, 0x11a5b,
+	0x11a8a, 0x11a96,
+	0x11a98, 0x11a99,
+	0x11c30, 0x11c36,
+	0x11c38, 0x11c3d,
+	0x11c3f, 0x11c3f,
+	0x11c92, 0x11ca7,
+	0x11caa, 0x11cb0,
+	0x11cb2, 0x11cb3,
+	0x11cb5, 0x11cb6,
+	0x11d31, 0x11d36,
+	0x11d3a, 0x11d3a,
+	0x11d3c, 0x11d3d,
+	0x11d3f, 0x11d45,
+	0x11d47, 0x11d47,
 	0x16af0, 0x16af4,
 	0x16b30, 0x16b36,
@@ -16513,5 +17757,18 @@
 	0x1d1aa, 0x1d1ad,
 	0x1d242, 0x1d244,
+	0x1da00, 0x1da36,
+	0x1da3b, 0x1da6c,
+	0x1da75, 0x1da75,
+	0x1da84, 0x1da84,
+	0x1da9b, 0x1da9f,
+	0x1daa1, 0x1daaf,
+	0x1e000, 0x1e006,
+	0x1e008, 0x1e018,
+	0x1e01b, 0x1e021,
+	0x1e023, 0x1e024,
+	0x1e026, 0x1e02a,
 	0x1e8d0, 0x1e8d6,
+	0x1e944, 0x1e94a,
+	0xe0020, 0xe007f,
 	0xe0100, 0xe01ef,
 }; /* CR_Grapheme_Extend */
@@ -16519,5 +17776,5 @@
 /* 'Grapheme_Base': Derived Property */
 static const OnigCodePoint CR_Grapheme_Base[] = {
-	724,
+	791,
 	0x0020, 0x007e,
 	0x00a0, 0x00ac,
@@ -16563,5 +17820,7 @@
 	0x0840, 0x0858,
 	0x085e, 0x085e,
-	0x08a0, 0x08b2,
+	0x0860, 0x086a,
+	0x08a0, 0x08b4,
+	0x08b6, 0x08bd,
 	0x0903, 0x0939,
 	0x093b, 0x093b,
@@ -16585,5 +17844,5 @@
 	0x09dc, 0x09dd,
 	0x09df, 0x09e1,
-	0x09e6, 0x09fb,
+	0x09e6, 0x09fd,
 	0x0a03, 0x0a03,
 	0x0a05, 0x0a0a,
@@ -16612,4 +17871,5 @@
 	0x0ae0, 0x0ae1,
 	0x0ae6, 0x0af1,
+	0x0af9, 0x0af9,
 	0x0b02, 0x0b03,
 	0x0b05, 0x0b0c,
@@ -16649,8 +17909,8 @@
 	0x0c3d, 0x0c3d,
 	0x0c41, 0x0c44,
-	0x0c58, 0x0c59,
+	0x0c58, 0x0c5a,
 	0x0c60, 0x0c61,
 	0x0c66, 0x0c6f,
-	0x0c78, 0x0c7f,
+	0x0c78, 0x0c80,
 	0x0c82, 0x0c83,
 	0x0c85, 0x0c8c,
@@ -16676,8 +17936,8 @@
 	0x0d46, 0x0d48,
 	0x0d4a, 0x0d4c,
-	0x0d4e, 0x0d4e,
-	0x0d60, 0x0d61,
-	0x0d66, 0x0d75,
-	0x0d79, 0x0d7f,
+	0x0d4e, 0x0d4f,
+	0x0d54, 0x0d56,
+	0x0d58, 0x0d61,
+	0x0d66, 0x0d7f,
 	0x0d82, 0x0d83,
 	0x0d85, 0x0d96,
@@ -16756,5 +18016,6 @@
 	0x1360, 0x137c,
 	0x1380, 0x1399,
-	0x13a0, 0x13f4,
+	0x13a0, 0x13f5,
+	0x13f8, 0x13fd,
 	0x1400, 0x169c,
 	0x16a0, 0x16f8,
@@ -16776,5 +18037,6 @@
 	0x1810, 0x1819,
 	0x1820, 0x1877,
-	0x1880, 0x18a8,
+	0x1880, 0x1884,
+	0x1887, 0x18a8,
 	0x18aa, 0x18aa,
 	0x18b0, 0x18f5,
@@ -16818,5 +18080,5 @@
 	0x1c34, 0x1c35,
 	0x1c3b, 0x1c49,
-	0x1c4d, 0x1c7f,
+	0x1c4d, 0x1c88,
 	0x1cc0, 0x1cc7,
 	0x1cd3, 0x1cd3,
@@ -16824,5 +18086,5 @@
 	0x1ce9, 0x1cec,
 	0x1cee, 0x1cf3,
-	0x1cf5, 0x1cf6,
+	0x1cf5, 0x1cf7,
 	0x1d00, 0x1dbf,
 	0x1e00, 0x1f15,
@@ -16848,8 +18110,7 @@
 	0x2074, 0x208e,
 	0x2090, 0x209c,
-	0x20a0, 0x20bd,
-	0x2100, 0x2189,
-	0x2190, 0x23fa,
-	0x2400, 0x2426,
+	0x20a0, 0x20bf,
+	0x2100, 0x218b,
+	0x2190, 0x2426,
 	0x2440, 0x244a,
 	0x2460, 0x2b73,
@@ -16857,5 +18118,6 @@
 	0x2b98, 0x2bb9,
 	0x2bbd, 0x2bc8,
-	0x2bca, 0x2bd1,
+	0x2bca, 0x2bd2,
+	0x2bec, 0x2bef,
 	0x2c00, 0x2c2e,
 	0x2c30, 0x2c5e,
@@ -16876,5 +18138,5 @@
 	0x2dd0, 0x2dd6,
 	0x2dd8, 0x2dde,
-	0x2e00, 0x2e42,
+	0x2e00, 0x2e49,
 	0x2e80, 0x2e99,
 	0x2e9b, 0x2ef3,
@@ -16885,5 +18147,5 @@
 	0x3041, 0x3096,
 	0x309b, 0x30ff,
-	0x3105, 0x312d,
+	0x3105, 0x312e,
 	0x3131, 0x318e,
 	0x3190, 0x31ba,
@@ -16892,5 +18154,5 @@
 	0x3220, 0x32fe,
 	0x3300, 0x4db5,
-	0x4dc0, 0x9fcc,
+	0x4dc0, 0x9fea,
 	0xa000, 0xa48c,
 	0xa490, 0xa4c6,
@@ -16901,7 +18163,6 @@
 	0xa6a0, 0xa6ef,
 	0xa6f2, 0xa6f7,
-	0xa700, 0xa78e,
-	0xa790, 0xa7ad,
-	0xa7b0, 0xa7b1,
+	0xa700, 0xa7ae,
+	0xa7b0, 0xa7b7,
 	0xa7f7, 0xa801,
 	0xa803, 0xa805,
@@ -16913,5 +18174,5 @@
 	0xa880, 0xa8c3,
 	0xa8ce, 0xa8d9,
-	0xa8f2, 0xa8fb,
+	0xa8f2, 0xa8fd,
 	0xa900, 0xa925,
 	0xa92e, 0xa946,
@@ -16946,7 +18207,6 @@
 	0xab20, 0xab26,
 	0xab28, 0xab2e,
-	0xab30, 0xab5f,
-	0xab64, 0xab65,
-	0xabc0, 0xabe4,
+	0xab30, 0xab65,
+	0xab70, 0xabe4,
 	0xabe6, 0xabe7,
 	0xabe9, 0xabec,
@@ -16994,5 +18254,5 @@
 	0x10100, 0x10102,
 	0x10107, 0x10133,
-	0x10137, 0x1018c,
+	0x10137, 0x1018e,
 	0x10190, 0x1019b,
 	0x101a0, 0x101a0,
@@ -17002,5 +18262,5 @@
 	0x102e1, 0x102fb,
 	0x10300, 0x10323,
-	0x10330, 0x1034a,
+	0x1032d, 0x1034a,
 	0x10350, 0x10375,
 	0x10380, 0x1039d,
@@ -17009,4 +18269,6 @@
 	0x10400, 0x1049d,
 	0x104a0, 0x104a9,
+	0x104b0, 0x104d3,
+	0x104d8, 0x104fb,
 	0x10500, 0x10527,
 	0x10530, 0x10563,
@@ -17023,10 +18285,12 @@
 	0x10857, 0x1089e,
 	0x108a7, 0x108af,
-	0x10900, 0x1091b,
+	0x108e0, 0x108f2,
+	0x108f4, 0x108f5,
+	0x108fb, 0x1091b,
 	0x1091f, 0x10939,
 	0x1093f, 0x1093f,
 	0x10980, 0x109b7,
-	0x109be, 0x109bf,
-	0x10a00, 0x10a00,
+	0x109bc, 0x109cf,
+	0x109d2, 0x10a00,
 	0x10a10, 0x10a13,
 	0x10a15, 0x10a17,
@@ -17044,4 +18308,7 @@
 	0x10ba9, 0x10baf,
 	0x10c00, 0x10c48,
+	0x10c80, 0x10cb2,
+	0x10cc0, 0x10cf2,
+	0x10cfa, 0x10cff,
 	0x10e60, 0x10e7e,
 	0x11000, 0x11000,
@@ -17061,7 +18328,7 @@
 	0x11174, 0x11176,
 	0x11182, 0x111b5,
-	0x111bf, 0x111c8,
+	0x111bf, 0x111c9,
 	0x111cd, 0x111cd,
-	0x111d0, 0x111da,
+	0x111d0, 0x111df,
 	0x111e1, 0x111f4,
 	0x11200, 0x11211,
@@ -17070,4 +18337,9 @@
 	0x11235, 0x11235,
 	0x11238, 0x1123d,
+	0x11280, 0x11286,
+	0x11288, 0x11288,
+	0x1128a, 0x1128d,
+	0x1128f, 0x1129d,
+	0x1129f, 0x112a9,
 	0x112b0, 0x112de,
 	0x112e0, 0x112e2,
@@ -17085,5 +18357,12 @@
 	0x11347, 0x11348,
 	0x1134b, 0x1134d,
+	0x11350, 0x11350,
 	0x1135d, 0x11363,
+	0x11400, 0x11437,
+	0x11440, 0x11441,
+	0x11445, 0x11445,
+	0x11447, 0x11459,
+	0x1145b, 0x1145b,
+	0x1145d, 0x1145d,
 	0x11480, 0x114af,
 	0x114b1, 0x114b2,
@@ -17098,5 +18377,5 @@
 	0x115b8, 0x115bb,
 	0x115be, 0x115be,
-	0x115c1, 0x115c9,
+	0x115c1, 0x115db,
 	0x11600, 0x11632,
 	0x1163b, 0x1163c,
@@ -17104,4 +18383,5 @@
 	0x11641, 0x11644,
 	0x11650, 0x11659,
+	0x11660, 0x1166c,
 	0x11680, 0x116aa,
 	0x116ac, 0x116ac,
@@ -17109,11 +18389,43 @@
 	0x116b6, 0x116b6,
 	0x116c0, 0x116c9,
+	0x11700, 0x11719,
+	0x11720, 0x11721,
+	0x11726, 0x11726,
+	0x11730, 0x1173f,
 	0x118a0, 0x118f2,
 	0x118ff, 0x118ff,
+	0x11a00, 0x11a00,
+	0x11a07, 0x11a08,
+	0x11a0b, 0x11a32,
+	0x11a39, 0x11a3a,
+	0x11a3f, 0x11a46,
+	0x11a50, 0x11a50,
+	0x11a57, 0x11a58,
+	0x11a5c, 0x11a83,
+	0x11a86, 0x11a89,
+	0x11a97, 0x11a97,
+	0x11a9a, 0x11a9c,
+	0x11a9e, 0x11aa2,
 	0x11ac0, 0x11af8,
-	0x12000, 0x12398,
+	0x11c00, 0x11c08,
+	0x11c0a, 0x11c2f,
+	0x11c3e, 0x11c3e,
+	0x11c40, 0x11c45,
+	0x11c50, 0x11c6c,
+	0x11c70, 0x11c8f,
+	0x11ca9, 0x11ca9,
+	0x11cb1, 0x11cb1,
+	0x11cb4, 0x11cb4,
+	0x11d00, 0x11d06,
+	0x11d08, 0x11d09,
+	0x11d0b, 0x11d30,
+	0x11d46, 0x11d46,
+	0x11d50, 0x11d59,
+	0x12000, 0x12399,
 	0x12400, 0x1246e,
 	0x12470, 0x12474,
+	0x12480, 0x12543,
 	0x13000, 0x1342e,
+	0x14400, 0x14646,
 	0x16800, 0x16a38,
 	0x16a40, 0x16a5e,
@@ -17131,5 +18443,9 @@
 	0x16f50, 0x16f7e,
 	0x16f93, 0x16f9f,
-	0x1b000, 0x1b001,
+	0x16fe0, 0x16fe1,
+	0x17000, 0x187ec,
+	0x18800, 0x18af2,
+	0x1b000, 0x1b11e,
+	0x1b170, 0x1b2fb,
 	0x1bc00, 0x1bc6a,
 	0x1bc70, 0x1bc7c,
@@ -17145,5 +18461,5 @@
 	0x1d183, 0x1d184,
 	0x1d18c, 0x1d1a9,
-	0x1d1ae, 0x1d1dd,
+	0x1d1ae, 0x1d1e8,
 	0x1d200, 0x1d241,
 	0x1d245, 0x1d245,
@@ -17170,7 +18486,14 @@
 	0x1d552, 0x1d6a5,
 	0x1d6a8, 0x1d7cb,
-	0x1d7ce, 0x1d7ff,
+	0x1d7ce, 0x1d9ff,
+	0x1da37, 0x1da3a,
+	0x1da6d, 0x1da74,
+	0x1da76, 0x1da83,
+	0x1da85, 0x1da8b,
 	0x1e800, 0x1e8c4,
 	0x1e8c7, 0x1e8cf,
+	0x1e900, 0x1e943,
+	0x1e950, 0x1e959,
+	0x1e95e, 0x1e95f,
 	0x1ee00, 0x1ee03,
 	0x1ee05, 0x1ee1f,
@@ -17216,21 +18539,13 @@
 	0x1f110, 0x1f12e,
 	0x1f130, 0x1f16b,
-	0x1f170, 0x1f19a,
+	0x1f170, 0x1f1ac,
 	0x1f1e6, 0x1f202,
-	0x1f210, 0x1f23a,
+	0x1f210, 0x1f23b,
 	0x1f240, 0x1f248,
 	0x1f250, 0x1f251,
-	0x1f300, 0x1f32c,
-	0x1f330, 0x1f37d,
-	0x1f380, 0x1f3ce,
-	0x1f3d4, 0x1f3f7,
-	0x1f400, 0x1f4fe,
-	0x1f500, 0x1f54a,
-	0x1f550, 0x1f579,
-	0x1f57b, 0x1f5a3,
-	0x1f5a5, 0x1f642,
-	0x1f645, 0x1f6cf,
+	0x1f260, 0x1f265,
+	0x1f300, 0x1f6d4,
 	0x1f6e0, 0x1f6ec,
-	0x1f6f0, 0x1f6f3,
+	0x1f6f0, 0x1f6f8,
 	0x1f700, 0x1f773,
 	0x1f780, 0x1f7d4,
@@ -17240,7 +18555,16 @@
 	0x1f860, 0x1f887,
 	0x1f890, 0x1f8ad,
+	0x1f900, 0x1f90b,
+	0x1f910, 0x1f93e,
+	0x1f940, 0x1f94c,
+	0x1f950, 0x1f96b,
+	0x1f980, 0x1f997,
+	0x1f9c0, 0x1f9c0,
+	0x1f9d0, 0x1f9e6,
 	0x20000, 0x2a6d6,
 	0x2a700, 0x2b734,
 	0x2b740, 0x2b81d,
+	0x2b820, 0x2cea1,
+	0x2ceb0, 0x2ebe0,
 	0x2f800, 0x2fa1d,
 }; /* CR_Grapheme_Base */
@@ -17248,5 +18572,5 @@
 /* 'Grapheme_Link': Derived Property */
 static const OnigCodePoint CR_Grapheme_Link[] = {
-	40,
+	48,
 	0x094d, 0x094d,
 	0x09cd, 0x09cd,
@@ -17257,4 +18581,5 @@
 	0x0c4d, 0x0c4d,
 	0x0ccd, 0x0ccd,
+	0x0d3b, 0x0d3c,
 	0x0d4d, 0x0d4d,
 	0x0dca, 0x0dca,
@@ -17285,13 +18610,20 @@
 	0x112ea, 0x112ea,
 	0x1134d, 0x1134d,
+	0x11442, 0x11442,
 	0x114c2, 0x114c2,
 	0x115bf, 0x115bf,
 	0x1163f, 0x1163f,
 	0x116b6, 0x116b6,
+	0x1172b, 0x1172b,
+	0x11a34, 0x11a34,
+	0x11a47, 0x11a47,
+	0x11a99, 0x11a99,
+	0x11c3f, 0x11c3f,
+	0x11d44, 0x11d45,
 }; /* CR_Grapheme_Link */
 
 /* 'Common': Script */
 static const OnigCodePoint CR_Common[] = {
-	165,
+	164,
 	0x0000, 0x0040,
 	0x005b, 0x0060,
@@ -17311,9 +18643,9 @@
 	0x0605, 0x0605,
 	0x060c, 0x060c,
-	0x061b, 0x061c,
+	0x061b, 0x061b,
 	0x061f, 0x061f,
 	0x0640, 0x0640,
-	0x0660, 0x0669,
 	0x06dd, 0x06dd,
+	0x08e2, 0x08e2,
 	0x0964, 0x0965,
 	0x0e3f, 0x0e3f,
@@ -17328,5 +18660,5 @@
 	0x1ce9, 0x1cec,
 	0x1cee, 0x1cf3,
-	0x1cf5, 0x1cf6,
+	0x1cf5, 0x1cf7,
 	0x2000, 0x200b,
 	0x200e, 0x2064,
@@ -17334,5 +18666,5 @@
 	0x2074, 0x207e,
 	0x2080, 0x208e,
-	0x20a0, 0x20bd,
+	0x20a0, 0x20bf,
 	0x2100, 0x2125,
 	0x2127, 0x2129,
@@ -17340,7 +18672,6 @@
 	0x2133, 0x214d,
 	0x214f, 0x215f,
-	0x2189, 0x2189,
-	0x2190, 0x23fa,
-	0x2400, 0x2426,
+	0x2189, 0x218b,
+	0x2190, 0x2426,
 	0x2440, 0x244a,
 	0x2460, 0x27ff,
@@ -17349,6 +18680,7 @@
 	0x2b98, 0x2bb9,
 	0x2bbd, 0x2bc8,
-	0x2bca, 0x2bd1,
-	0x2e00, 0x2e42,
+	0x2bca, 0x2bd2,
+	0x2bec, 0x2bef,
+	0x2e00, 0x2e49,
 	0x2ff0, 0x2ffb,
 	0x3000, 0x3004,
@@ -17399,5 +18731,5 @@
 	0x1d183, 0x1d184,
 	0x1d18c, 0x1d1a9,
-	0x1d1ae, 0x1d1dd,
+	0x1d1ae, 0x1d1e8,
 	0x1d300, 0x1d356,
 	0x1d360, 0x1d371,
@@ -17432,22 +18764,14 @@
 	0x1f110, 0x1f12e,
 	0x1f130, 0x1f16b,
-	0x1f170, 0x1f19a,
+	0x1f170, 0x1f1ac,
 	0x1f1e6, 0x1f1ff,
 	0x1f201, 0x1f202,
-	0x1f210, 0x1f23a,
+	0x1f210, 0x1f23b,
 	0x1f240, 0x1f248,
 	0x1f250, 0x1f251,
-	0x1f300, 0x1f32c,
-	0x1f330, 0x1f37d,
-	0x1f380, 0x1f3ce,
-	0x1f3d4, 0x1f3f7,
-	0x1f400, 0x1f4fe,
-	0x1f500, 0x1f54a,
-	0x1f550, 0x1f579,
-	0x1f57b, 0x1f5a3,
-	0x1f5a5, 0x1f642,
-	0x1f645, 0x1f6cf,
+	0x1f260, 0x1f265,
+	0x1f300, 0x1f6d4,
 	0x1f6e0, 0x1f6ec,
-	0x1f6f0, 0x1f6f3,
+	0x1f6f0, 0x1f6f8,
 	0x1f700, 0x1f773,
 	0x1f780, 0x1f7d4,
@@ -17457,4 +18781,11 @@
 	0x1f860, 0x1f887,
 	0x1f890, 0x1f8ad,
+	0x1f900, 0x1f90b,
+	0x1f910, 0x1f93e,
+	0x1f940, 0x1f94c,
+	0x1f950, 0x1f96b,
+	0x1f980, 0x1f997,
+	0x1f9c0, 0x1f9c0,
+	0x1f9d0, 0x1f9e6,
 	0xe0001, 0xe0001,
 	0xe0020, 0xe007f,
@@ -17463,5 +18794,5 @@
 /* 'Latin': Script */
 static const OnigCodePoint CR_Latin[] = {
-	33,
+	31,
 	0x0041, 0x005a,
 	0x0061, 0x007a,
@@ -17487,11 +18818,9 @@
 	0x2c60, 0x2c7f,
 	0xa722, 0xa787,
-	0xa78b, 0xa78e,
-	0xa790, 0xa7ad,
-	0xa7b0, 0xa7b1,
+	0xa78b, 0xa7ae,
+	0xa7b0, 0xa7b7,
 	0xa7f7, 0xa7ff,
 	0xab30, 0xab5a,
-	0xab5c, 0xab5f,
-	0xab64, 0xab64,
+	0xab5c, 0xab64,
 	0xfb00, 0xfb06,
 	0xff21, 0xff3a,
@@ -17535,5 +18864,5 @@
 	0x2126, 0x2126,
 	0xab65, 0xab65,
-	0x10140, 0x1018c,
+	0x10140, 0x1018e,
 	0x101a0, 0x101a0,
 	0x1d200, 0x1d245,
@@ -17542,12 +18871,13 @@
 /* 'Cyrillic': Script */
 static const OnigCodePoint CR_Cyrillic[] = {
-	7,
+	8,
 	0x0400, 0x0484,
 	0x0487, 0x052f,
+	0x1c80, 0x1c88,
 	0x1d2b, 0x1d2b,
 	0x1d78, 0x1d78,
 	0x2de0, 0x2dff,
-	0xa640, 0xa69d,
-	0xa69f, 0xa69f,
+	0xa640, 0xa69f,
+	0xfe2e, 0xfe2f,
 }; /* CR_Cyrillic */
 
@@ -17579,18 +18909,20 @@
 /* 'Arabic': Script */
 static const OnigCodePoint CR_Arabic[] = {
-	55,
+	57,
 	0x0600, 0x0604,
 	0x0606, 0x060b,
 	0x060d, 0x061a,
+	0x061c, 0x061c,
 	0x061e, 0x061e,
 	0x0620, 0x063f,
 	0x0641, 0x064a,
-	0x0656, 0x065f,
-	0x066a, 0x066f,
+	0x0656, 0x066f,
 	0x0671, 0x06dc,
 	0x06de, 0x06ff,
 	0x0750, 0x077f,
-	0x08a0, 0x08b2,
-	0x08e4, 0x08ff,
+	0x08a0, 0x08b4,
+	0x08b6, 0x08bd,
+	0x08d4, 0x08e1,
+	0x08e3, 0x08ff,
 	0xfb50, 0xfbc1,
 	0xfbd3, 0xfd3d,
@@ -17639,8 +18971,9 @@
 /* 'Syriac': Script */
 static const OnigCodePoint CR_Syriac[] = {
-	3,
+	4,
 	0x0700, 0x070d,
 	0x070f, 0x074a,
 	0x074d, 0x074f,
+	0x0860, 0x086a,
 }; /* CR_Syriac */
 
@@ -17657,5 +18990,5 @@
 	0x0953, 0x0963,
 	0x0966, 0x097f,
-	0xa8e0, 0xa8fb,
+	0xa8e0, 0xa8fd,
 }; /* CR_Devanagari */
 
@@ -17676,5 +19009,5 @@
 	0x09dc, 0x09dd,
 	0x09df, 0x09e3,
-	0x09e6, 0x09fb,
+	0x09e6, 0x09fd,
 }; /* CR_Bengali */
 
@@ -17702,5 +19035,5 @@
 /* 'Gujarati': Script */
 static const OnigCodePoint CR_Gujarati[] = {
-	13,
+	14,
 	0x0a81, 0x0a83,
 	0x0a85, 0x0a8d,
@@ -17716,4 +19049,5 @@
 	0x0ae0, 0x0ae3,
 	0x0ae6, 0x0af1,
+	0x0af9, 0x0aff,
 }; /* CR_Gujarati */
 
@@ -17770,5 +19104,5 @@
 	0x0c4a, 0x0c4d,
 	0x0c55, 0x0c56,
-	0x0c58, 0x0c59,
+	0x0c58, 0x0c5a,
 	0x0c60, 0x0c63,
 	0x0c66, 0x0c6f,
@@ -17779,5 +19113,5 @@
 static const OnigCodePoint CR_Kannada[] = {
 	14,
-	0x0c81, 0x0c83,
+	0x0c80, 0x0c83,
 	0x0c85, 0x0c8c,
 	0x0c8e, 0x0c90,
@@ -17797,16 +19131,13 @@
 /* 'Malayalam': Script */
 static const OnigCodePoint CR_Malayalam[] = {
-	11,
-	0x0d01, 0x0d03,
+	8,
+	0x0d00, 0x0d03,
 	0x0d05, 0x0d0c,
 	0x0d0e, 0x0d10,
-	0x0d12, 0x0d3a,
-	0x0d3d, 0x0d44,
+	0x0d12, 0x0d44,
 	0x0d46, 0x0d48,
-	0x0d4a, 0x0d4e,
-	0x0d57, 0x0d57,
-	0x0d60, 0x0d63,
-	0x0d66, 0x0d75,
-	0x0d79, 0x0d7f,
+	0x0d4a, 0x0d4f,
+	0x0d54, 0x0d63,
+	0x0d66, 0x0d7f,
 }; /* CR_Malayalam */
 
@@ -17950,6 +19281,8 @@
 /* 'Cherokee': Script */
 static const OnigCodePoint CR_Cherokee[] = {
-	1,
-	0x13a0, 0x13f4,
+	3,
+	0x13a0, 0x13f5,
+	0x13f8, 0x13fd,
+	0xab70, 0xabbf,
 }; /* CR_Cherokee */
 
@@ -17985,5 +19318,5 @@
 /* 'Mongolian': Script */
 static const OnigCodePoint CR_Mongolian[] = {
-	6,
+	7,
 	0x1800, 0x1801,
 	0x1804, 0x1804,
@@ -17992,4 +19325,5 @@
 	0x1820, 0x1877,
 	0x1880, 0x18aa,
+	0x11660, 0x1166c,
 }; /* CR_Mongolian */
 
@@ -17999,5 +19333,5 @@
 	0x3041, 0x3096,
 	0x309d, 0x309f,
-	0x1b001, 0x1b001,
+	0x1b001, 0x1b11e,
 	0x1f200, 0x1f200,
 }; /* CR_Hiragana */
@@ -18020,5 +19354,5 @@
 	3,
 	0x02ea, 0x02eb,
-	0x3105, 0x312d,
+	0x3105, 0x312e,
 	0x31a0, 0x31ba,
 }; /* CR_Bopomofo */
@@ -18026,5 +19360,5 @@
 /* 'Han': Script */
 static const OnigCodePoint CR_Han[] = {
-	15,
+	17,
 	0x2e80, 0x2e99,
 	0x2e9b, 0x2ef3,
@@ -18035,5 +19369,5 @@
 	0x3038, 0x303b,
 	0x3400, 0x4db5,
-	0x4e00, 0x9fcc,
+	0x4e00, 0x9fea,
 	0xf900, 0xfa6d,
 	0xfa70, 0xfad9,
@@ -18041,4 +19375,6 @@
 	0x2a700, 0x2b734,
 	0x2b740, 0x2b81d,
+	0x2b820, 0x2cea1,
+	0x2ceb0, 0x2ebe0,
 	0x2f800, 0x2fa1d,
 }; /* CR_Han */
@@ -18053,6 +19389,7 @@
 /* 'Old_Italic': Script */
 static const OnigCodePoint CR_Old_Italic[] = {
-	1,
+	2,
 	0x10300, 0x10323,
+	0x1032d, 0x1032f,
 }; /* CR_Old_Italic */
 
@@ -18084,6 +19421,6 @@
 	0x1cf4, 0x1cf4,
 	0x1cf8, 0x1cf9,
-	0x1dc0, 0x1df5,
-	0x1dfc, 0x1dff,
+	0x1dc0, 0x1df9,
+	0x1dfb, 0x1dff,
 	0x200c, 0x200d,
 	0x20d0, 0x20f0,
@@ -18220,7 +19557,12 @@
 /* 'Glagolitic': Script */
 static const OnigCodePoint CR_Glagolitic[] = {
-	2,
+	7,
 	0x2c00, 0x2c2e,
 	0x2c30, 0x2c5e,
+	0x1e000, 0x1e006,
+	0x1e008, 0x1e018,
+	0x1e01b, 0x1e021,
+	0x1e023, 0x1e024,
+	0x1e026, 0x1e02a,
 }; /* CR_Glagolitic */
 
@@ -18268,8 +19610,9 @@
 /* 'Cuneiform': Script */
 static const OnigCodePoint CR_Cuneiform[] = {
-	3,
-	0x12000, 0x12398,
+	4,
+	0x12000, 0x12399,
 	0x12400, 0x1246e,
 	0x12470, 0x12474,
+	0x12480, 0x12543,
 }; /* CR_Cuneiform */
 
@@ -18323,5 +19666,5 @@
 static const OnigCodePoint CR_Saurashtra[] = {
 	2,
-	0xa880, 0xa8c4,
+	0xa880, 0xa8c5,
 	0xa8ce, 0xa8d9,
 }; /* CR_Saurashtra */
@@ -18505,7 +19848,8 @@
 /* 'Meroitic_Cursive': Script */
 static const OnigCodePoint CR_Meroitic_Cursive[] = {
-	2,
+	3,
 	0x109a0, 0x109b7,
-	0x109be, 0x109bf,
+	0x109bc, 0x109cf,
+	0x109d2, 0x109ff,
 }; /* CR_Meroitic_Cursive */
 
@@ -18526,8 +19870,7 @@
 /* 'Sharada': Script */
 static const OnigCodePoint CR_Sharada[] = {
-	3,
-	0x11180, 0x111c8,
-	0x111cd, 0x111cd,
-	0x111d0, 0x111da,
+	2,
+	0x11180, 0x111cd,
+	0x111d0, 0x111df,
 }; /* CR_Sharada */
 
@@ -18578,6 +19921,6 @@
 /* 'Grantha': Script */
 static const OnigCodePoint CR_Grantha[] = {
-	14,
-	0x11301, 0x11303,
+	15,
+	0x11300, 0x11303,
 	0x11305, 0x1130c,
 	0x1130f, 0x11310,
@@ -18589,4 +19932,5 @@
 	0x11347, 0x11348,
 	0x1134b, 0x1134d,
+	0x11350, 0x11350,
 	0x11357, 0x11357,
 	0x1135d, 0x11363,
@@ -18609,5 +19953,5 @@
 	2,
 	0x11200, 0x11211,
-	0x11213, 0x1123d,
+	0x11213, 0x1123e,
 }; /* CR_Khojki */
 
@@ -18698,5 +20042,5 @@
 	2,
 	0x11580, 0x115b5,
-	0x115b8, 0x115c9,
+	0x115b8, 0x115dd,
 }; /* CR_Siddham */
 
@@ -18721,4 +20065,133 @@
 	0x118ff, 0x118ff,
 }; /* CR_Warang_Citi */
+
+/* 'Ahom': Script */
+static const OnigCodePoint CR_Ahom[] = {
+	3,
+	0x11700, 0x11719,
+	0x1171d, 0x1172b,
+	0x11730, 0x1173f,
+}; /* CR_Ahom */
+
+/* 'Anatolian_Hieroglyphs': Script */
+static const OnigCodePoint CR_Anatolian_Hieroglyphs[] = {
+	1,
+	0x14400, 0x14646,
+}; /* CR_Anatolian_Hieroglyphs */
+
+/* 'Hatran': Script */
+static const OnigCodePoint CR_Hatran[] = {
+	3,
+	0x108e0, 0x108f2,
+	0x108f4, 0x108f5,
+	0x108fb, 0x108ff,
+}; /* CR_Hatran */
+
+/* 'Multani': Script */
+static const OnigCodePoint CR_Multani[] = {
+	5,
+	0x11280, 0x11286,
+	0x11288, 0x11288,
+	0x1128a, 0x1128d,
+	0x1128f, 0x1129d,
+	0x1129f, 0x112a9,
+}; /* CR_Multani */
+
+/* 'Old_Hungarian': Script */
+static const OnigCodePoint CR_Old_Hungarian[] = {
+	3,
+	0x10c80, 0x10cb2,
+	0x10cc0, 0x10cf2,
+	0x10cfa, 0x10cff,
+}; /* CR_Old_Hungarian */
+
+/* 'SignWriting': Script */
+static const OnigCodePoint CR_SignWriting[] = {
+	3,
+	0x1d800, 0x1da8b,
+	0x1da9b, 0x1da9f,
+	0x1daa1, 0x1daaf,
+}; /* CR_SignWriting */
+
+/* 'Adlam': Script */
+static const OnigCodePoint CR_Adlam[] = {
+	3,
+	0x1e900, 0x1e94a,
+	0x1e950, 0x1e959,
+	0x1e95e, 0x1e95f,
+}; /* CR_Adlam */
+
+/* 'Bhaiksuki': Script */
+static const OnigCodePoint CR_Bhaiksuki[] = {
+	4,
+	0x11c00, 0x11c08,
+	0x11c0a, 0x11c36,
+	0x11c38, 0x11c45,
+	0x11c50, 0x11c6c,
+}; /* CR_Bhaiksuki */
+
+/* 'Marchen': Script */
+static const OnigCodePoint CR_Marchen[] = {
+	3,
+	0x11c70, 0x11c8f,
+	0x11c92, 0x11ca7,
+	0x11ca9, 0x11cb6,
+}; /* CR_Marchen */
+
+/* 'Newa': Script */
+static const OnigCodePoint CR_Newa[] = {
+	3,
+	0x11400, 0x11459,
+	0x1145b, 0x1145b,
+	0x1145d, 0x1145d,
+}; /* CR_Newa */
+
+/* 'Osage': Script */
+static const OnigCodePoint CR_Osage[] = {
+	2,
+	0x104b0, 0x104d3,
+	0x104d8, 0x104fb,
+}; /* CR_Osage */
+
+/* 'Tangut': Script */
+static const OnigCodePoint CR_Tangut[] = {
+	3,
+	0x16fe0, 0x16fe0,
+	0x17000, 0x187ec,
+	0x18800, 0x18af2,
+}; /* CR_Tangut */
+
+/* 'Masaram_Gondi': Script */
+static const OnigCodePoint CR_Masaram_Gondi[] = {
+	7,
+	0x11d00, 0x11d06,
+	0x11d08, 0x11d09,
+	0x11d0b, 0x11d36,
+	0x11d3a, 0x11d3a,
+	0x11d3c, 0x11d3d,
+	0x11d3f, 0x11d47,
+	0x11d50, 0x11d59,
+}; /* CR_Masaram_Gondi */
+
+/* 'Nushu': Script */
+static const OnigCodePoint CR_Nushu[] = {
+	2,
+	0x16fe1, 0x16fe1,
+	0x1b170, 0x1b2fb,
+}; /* CR_Nushu */
+
+/* 'Soyombo': Script */
+static const OnigCodePoint CR_Soyombo[] = {
+	3,
+	0x11a50, 0x11a83,
+	0x11a86, 0x11a9c,
+	0x11a9e, 0x11aa2,
+}; /* CR_Soyombo */
+
+/* 'Zanabazar_Square': Script */
+static const OnigCodePoint CR_Zanabazar_Square[] = {
+	1,
+	0x11a00, 0x11a47,
+}; /* CR_Zanabazar_Square */
 
 /* 'White_Space': Binary Property */
@@ -18801,5 +20274,5 @@
 /* 'Terminal_Punctuation': Binary Property */
 static const OnigCodePoint CR_Terminal_Punctuation[] = {
-	86,
+	97,
 	0x0021, 0x0021,
 	0x002c, 0x002c,
@@ -18878,8 +20351,18 @@
 	0x111c5, 0x111c6,
 	0x111cd, 0x111cd,
+	0x111de, 0x111df,
 	0x11238, 0x1123c,
+	0x112a9, 0x112a9,
+	0x1144b, 0x1144d,
+	0x1145b, 0x1145b,
 	0x115c2, 0x115c5,
-	0x115c9, 0x115c9,
+	0x115c9, 0x115d7,
 	0x11641, 0x11642,
+	0x1173c, 0x1173e,
+	0x11a42, 0x11a43,
+	0x11a9b, 0x11a9c,
+	0x11aa1, 0x11aa2,
+	0x11c41, 0x11c43,
+	0x11c71, 0x11c71,
 	0x12470, 0x12474,
 	0x16a6e, 0x16a6f,
@@ -18888,4 +20371,5 @@
 	0x16b44, 0x16b44,
 	0x1bc9f, 0x1bc9f,
+	0x1da87, 0x1da8a,
 }; /* CR_Terminal_Punctuation */
 
@@ -19045,5 +20529,5 @@
 /* 'Other_Alphabetic': Binary Property */
 static const OnigCodePoint CR_Other_Alphabetic[] = {
-	178,
+	206,
 	0x0345, 0x0345,
 	0x05b0, 0x05bd,
@@ -19067,5 +20551,6 @@
 	0x0825, 0x0827,
 	0x0829, 0x082c,
-	0x08e4, 0x08e9,
+	0x08d4, 0x08df,
+	0x08e3, 0x08e9,
 	0x08f0, 0x0903,
 	0x093a, 0x093b,
@@ -19092,4 +20577,5 @@
 	0x0acb, 0x0acc,
 	0x0ae2, 0x0ae3,
+	0x0afa, 0x0afc,
 	0x0b01, 0x0b03,
 	0x0b3e, 0x0b44,
@@ -19115,5 +20601,5 @@
 	0x0cd5, 0x0cd6,
 	0x0ce2, 0x0ce3,
-	0x0d01, 0x0d03,
+	0x0d00, 0x0d03,
 	0x0d3e, 0x0d44,
 	0x0d46, 0x0d48,
@@ -19152,9 +20638,8 @@
 	0x1772, 0x1773,
 	0x17b6, 0x17c8,
+	0x1885, 0x1886,
 	0x18a9, 0x18a9,
 	0x1920, 0x192b,
 	0x1930, 0x1938,
-	0x19b0, 0x19c0,
-	0x19c8, 0x19c9,
 	0x1a17, 0x1a1b,
 	0x1a55, 0x1a5e,
@@ -19172,8 +20657,9 @@
 	0x2de0, 0x2dff,
 	0xa674, 0xa67b,
-	0xa69f, 0xa69f,
+	0xa69e, 0xa69f,
 	0xa823, 0xa827,
 	0xa880, 0xa881,
 	0xa8b4, 0xa8c3,
+	0xa8c5, 0xa8c5,
 	0xa926, 0xa92a,
 	0xa947, 0xa952,
@@ -19205,6 +20691,7 @@
 	0x1122c, 0x11234,
 	0x11237, 0x11237,
+	0x1123e, 0x1123e,
 	0x112df, 0x112e8,
-	0x11301, 0x11303,
+	0x11300, 0x11303,
 	0x1133e, 0x11344,
 	0x11347, 0x11348,
@@ -19212,13 +20699,38 @@
 	0x11357, 0x11357,
 	0x11362, 0x11363,
+	0x11435, 0x11441,
+	0x11443, 0x11445,
 	0x114b0, 0x114c1,
 	0x115af, 0x115b5,
 	0x115b8, 0x115be,
+	0x115dc, 0x115dd,
 	0x11630, 0x1163e,
 	0x11640, 0x11640,
 	0x116ab, 0x116b5,
+	0x1171d, 0x1172a,
+	0x11a01, 0x11a0a,
+	0x11a35, 0x11a39,
+	0x11a3b, 0x11a3e,
+	0x11a51, 0x11a5b,
+	0x11a8a, 0x11a97,
+	0x11c2f, 0x11c36,
+	0x11c38, 0x11c3e,
+	0x11c92, 0x11ca7,
+	0x11ca9, 0x11cb6,
+	0x11d31, 0x11d36,
+	0x11d3a, 0x11d3a,
+	0x11d3c, 0x11d3d,
+	0x11d3f, 0x11d41,
+	0x11d43, 0x11d43,
+	0x11d47, 0x11d47,
 	0x16b30, 0x16b36,
 	0x16f51, 0x16f7e,
 	0x1bc9e, 0x1bc9e,
+	0x1e000, 0x1e006,
+	0x1e008, 0x1e018,
+	0x1e01b, 0x1e021,
+	0x1e023, 0x1e024,
+	0x1e026, 0x1e02a,
+	0x1e947, 0x1e947,
 	0x1f130, 0x1f149,
 	0x1f150, 0x1f169,
@@ -19228,15 +20740,20 @@
 /* 'Ideographic': Binary Property */
 static const OnigCodePoint CR_Ideographic[] = {
-	11,
+	16,
 	0x3006, 0x3007,
 	0x3021, 0x3029,
 	0x3038, 0x303a,
 	0x3400, 0x4db5,
-	0x4e00, 0x9fcc,
+	0x4e00, 0x9fea,
 	0xf900, 0xfa6d,
 	0xfa70, 0xfad9,
+	0x17000, 0x187ec,
+	0x18800, 0x18af2,
+	0x1b170, 0x1b2fb,
 	0x20000, 0x2a6d6,
 	0x2a700, 0x2b734,
 	0x2b740, 0x2b81d,
+	0x2b820, 0x2cea1,
+	0x2ceb0, 0x2ebe0,
 	0x2f800, 0x2fa1d,
 }; /* CR_Ideographic */
@@ -19244,5 +20761,5 @@
 /* 'Diacritic': Binary Property */
 static const OnigCodePoint CR_Diacritic[] = {
-	145,
+	159,
 	0x005e, 0x005e,
 	0x0060, 0x0060,
@@ -19273,5 +20790,5 @@
 	0x07eb, 0x07f5,
 	0x0818, 0x0819,
-	0x08e4, 0x08fe,
+	0x08e3, 0x08fe,
 	0x093c, 0x093c,
 	0x094d, 0x094d,
@@ -19284,4 +20801,5 @@
 	0x0abc, 0x0abc,
 	0x0acd, 0x0acd,
+	0x0afd, 0x0aff,
 	0x0b3c, 0x0b3c,
 	0x0b4d, 0x0b4d,
@@ -19290,4 +20808,5 @@
 	0x0cbc, 0x0cbc,
 	0x0ccd, 0x0ccd,
+	0x0d3b, 0x0d3c,
 	0x0d4d, 0x0d4d,
 	0x0dca, 0x0dca,
@@ -19323,8 +20842,8 @@
 	0x1ced, 0x1ced,
 	0x1cf4, 0x1cf4,
-	0x1cf8, 0x1cf9,
+	0x1cf7, 0x1cf9,
 	0x1d2c, 0x1d6a,
 	0x1dc4, 0x1dcf,
-	0x1df5, 0x1df5,
+	0x1df5, 0x1df9,
 	0x1dfd, 0x1dff,
 	0x1fbd, 0x1fbd,
@@ -19360,5 +20879,5 @@
 	0xabec, 0xabed,
 	0xfb1e, 0xfb1e,
-	0xfe20, 0xfe2d,
+	0xfe20, 0xfe2f,
 	0xff3e, 0xff3e,
 	0xff40, 0xff40,
@@ -19372,4 +20891,5 @@
 	0x11173, 0x11173,
 	0x111c0, 0x111c0,
+	0x111ca, 0x111cc,
 	0x11235, 0x11236,
 	0x112e9, 0x112ea,
@@ -19378,8 +20898,17 @@
 	0x11366, 0x1136c,
 	0x11370, 0x11374,
+	0x11442, 0x11442,
+	0x11446, 0x11446,
 	0x114c2, 0x114c3,
 	0x115bf, 0x115c0,
 	0x1163f, 0x1163f,
 	0x116b6, 0x116b7,
+	0x1172b, 0x1172b,
+	0x11a34, 0x11a34,
+	0x11a47, 0x11a47,
+	0x11a99, 0x11a99,
+	0x11c3f, 0x11c3f,
+	0x11d42, 0x11d42,
+	0x11d44, 0x11d45,
 	0x16af0, 0x16af4,
 	0x16f8f, 0x16f9f,
@@ -19390,9 +20919,11 @@
 	0x1d1aa, 0x1d1ad,
 	0x1e8d0, 0x1e8d6,
+	0x1e944, 0x1e946,
+	0x1e948, 0x1e94a,
 }; /* CR_Diacritic */
 
 /* 'Extender': Binary Property */
 static const OnigCodePoint CR_Extender[] = {
-	26,
+	29,
 	0x00b7, 0x00b7,
 	0x02d0, 0x02d1,
@@ -19420,5 +20951,8 @@
 	0x1135d, 0x1135d,
 	0x115c6, 0x115c8,
+	0x11a98, 0x11a98,
 	0x16b42, 0x16b43,
+	0x16fe0, 0x16fe1,
+	0x1e944, 0x1e946,
 }; /* CR_Extender */
 
@@ -19483,5 +21017,5 @@
 /* 'Other_Grapheme_Extend': Binary Property */
 static const OnigCodePoint CR_Other_Grapheme_Extend[] = {
-	22,
+	23,
 	0x09be, 0x09be,
 	0x09d7, 0x09d7,
@@ -19496,5 +21030,5 @@
 	0x0dcf, 0x0dcf,
 	0x0ddf, 0x0ddf,
-	0x200c, 0x200d,
+	0x200c, 0x200c,
 	0x302e, 0x302f,
 	0xff9e, 0xff9f,
@@ -19506,4 +21040,5 @@
 	0x1d165, 0x1d165,
 	0x1d16e, 0x1d172,
+	0xe0020, 0xe007f,
 }; /* CR_Other_Grapheme_Extend */
 
@@ -19531,7 +21066,7 @@
 /* 'Unified_Ideograph': Binary Property */
 static const OnigCodePoint CR_Unified_Ideograph[] = {
-	12,
+	14,
 	0x3400, 0x4db5,
-	0x4e00, 0x9fcc,
+	0x4e00, 0x9fea,
 	0xfa0e, 0xfa0f,
 	0xfa11, 0xfa11,
@@ -19544,4 +21079,6 @@
 	0x2a700, 0x2b734,
 	0x2b740, 0x2b81d,
+	0x2b820, 0x2cea1,
+	0x2ceb0, 0x2ebe0,
 }; /* CR_Unified_Ideograph */
 
@@ -19564,5 +21101,5 @@
 /* 'Deprecated': Binary Property */
 static const OnigCodePoint CR_Deprecated[] = {
-	9,
+	8,
 	0x0149, 0x0149,
 	0x0673, 0x0673,
@@ -19573,5 +21110,4 @@
 	0x2329, 0x232a,
 	0xe0001, 0xe0001,
-	0xe0020, 0xe007f,
 }; /* CR_Deprecated */
 
@@ -19614,7 +21150,9 @@
 /* 'Logical_Order_Exception': Binary Property */
 static const OnigCodePoint CR_Logical_Order_Exception[] = {
-	5,
+	7,
 	0x0e40, 0x0e44,
 	0x0ec0, 0x0ec4,
+	0x19b5, 0x19b7,
+	0x19ba, 0x19ba,
 	0xaab5, 0xaab6,
 	0xaab9, 0xaab9,
@@ -19624,5 +21162,6 @@
 /* 'Other_ID_Start': Binary Property */
 static const OnigCodePoint CR_Other_ID_Start[] = {
-	3,
+	4,
+	0x1885, 0x1886,
 	0x2118, 0x2118,
 	0x212e, 0x212e,
@@ -19639,7 +21178,7 @@
 }; /* CR_Other_ID_Continue */
 
-/* 'STerm': Binary Property */
-static const OnigCodePoint CR_STerm[] = {
-	60,
+/* 'Sentence_Terminal': Binary Property */
+static const OnigCodePoint CR_Sentence_Terminal[] = {
+	68,
 	0x0021, 0x0021,
 	0x002e, 0x002e,
@@ -19692,9 +21231,16 @@
 	0x111c5, 0x111c6,
 	0x111cd, 0x111cd,
+	0x111de, 0x111df,
 	0x11238, 0x11239,
 	0x1123b, 0x1123c,
+	0x112a9, 0x112a9,
+	0x1144b, 0x1144c,
 	0x115c2, 0x115c3,
-	0x115c9, 0x115c9,
+	0x115c9, 0x115d7,
 	0x11641, 0x11642,
+	0x1173c, 0x1173e,
+	0x11a42, 0x11a43,
+	0x11a9b, 0x11a9c,
+	0x11c41, 0x11c42,
 	0x16a6e, 0x16a6f,
 	0x16af5, 0x16af5,
@@ -19702,5 +21248,6 @@
 	0x16b44, 0x16b44,
 	0x1bc9f, 0x1bc9f,
-}; /* CR_STerm */
+	0x1da88, 0x1da88,
+}; /* CR_Sentence_Terminal */
 
 /* 'Variation_Selector': Binary Property */
@@ -19755,7 +21302,306 @@
 }; /* CR_Pattern_Syntax */
 
+/* 'Prepended_Concatenation_Mark': Binary Property */
+static const OnigCodePoint CR_Prepended_Concatenation_Mark[] = {
+	5,
+	0x0600, 0x0605,
+	0x06dd, 0x06dd,
+	0x070f, 0x070f,
+	0x08e2, 0x08e2,
+	0x110bd, 0x110bd,
+}; /* CR_Prepended_Concatenation_Mark */
+
+/* 'Regional_Indicator': Binary Property */
+static const OnigCodePoint CR_Regional_Indicator[] = {
+	1,
+	0x1f1e6, 0x1f1ff,
+}; /* CR_Regional_Indicator */
+
+/* 'Emoji': Emoji */
+static const OnigCodePoint CR_Emoji[] = {
+	145,
+	0x0023, 0x0023,
+	0x002a, 0x002a,
+	0x0030, 0x0039,
+	0x00a9, 0x00a9,
+	0x00ae, 0x00ae,
+	0x203c, 0x203c,
+	0x2049, 0x2049,
+	0x2122, 0x2122,
+	0x2139, 0x2139,
+	0x2194, 0x2199,
+	0x21a9, 0x21aa,
+	0x231a, 0x231b,
+	0x2328, 0x2328,
+	0x23cf, 0x23cf,
+	0x23e9, 0x23f3,
+	0x23f8, 0x23fa,
+	0x24c2, 0x24c2,
+	0x25aa, 0x25ab,
+	0x25b6, 0x25b6,
+	0x25c0, 0x25c0,
+	0x25fb, 0x25fe,
+	0x2600, 0x2604,
+	0x260e, 0x260e,
+	0x2611, 0x2611,
+	0x2614, 0x2615,
+	0x2618, 0x2618,
+	0x261d, 0x261d,
+	0x2620, 0x2620,
+	0x2622, 0x2623,
+	0x2626, 0x2626,
+	0x262a, 0x262a,
+	0x262e, 0x262f,
+	0x2638, 0x263a,
+	0x2640, 0x2640,
+	0x2642, 0x2642,
+	0x2648, 0x2653,
+	0x2660, 0x2660,
+	0x2663, 0x2663,
+	0x2665, 0x2666,
+	0x2668, 0x2668,
+	0x267b, 0x267b,
+	0x267f, 0x267f,
+	0x2692, 0x2697,
+	0x2699, 0x2699,
+	0x269b, 0x269c,
+	0x26a0, 0x26a1,
+	0x26aa, 0x26ab,
+	0x26b0, 0x26b1,
+	0x26bd, 0x26be,
+	0x26c4, 0x26c5,
+	0x26c8, 0x26c8,
+	0x26ce, 0x26cf,
+	0x26d1, 0x26d1,
+	0x26d3, 0x26d4,
+	0x26e9, 0x26ea,
+	0x26f0, 0x26f5,
+	0x26f7, 0x26fa,
+	0x26fd, 0x26fd,
+	0x2702, 0x2702,
+	0x2705, 0x2705,
+	0x2708, 0x270d,
+	0x270f, 0x270f,
+	0x2712, 0x2712,
+	0x2714, 0x2714,
+	0x2716, 0x2716,
+	0x271d, 0x271d,
+	0x2721, 0x2721,
+	0x2728, 0x2728,
+	0x2733, 0x2734,
+	0x2744, 0x2744,
+	0x2747, 0x2747,
+	0x274c, 0x274c,
+	0x274e, 0x274e,
+	0x2753, 0x2755,
+	0x2757, 0x2757,
+	0x2763, 0x2764,
+	0x2795, 0x2797,
+	0x27a1, 0x27a1,
+	0x27b0, 0x27b0,
+	0x27bf, 0x27bf,
+	0x2934, 0x2935,
+	0x2b05, 0x2b07,
+	0x2b1b, 0x2b1c,
+	0x2b50, 0x2b50,
+	0x2b55, 0x2b55,
+	0x3030, 0x3030,
+	0x303d, 0x303d,
+	0x3297, 0x3297,
+	0x3299, 0x3299,
+	0x1f004, 0x1f004,
+	0x1f0cf, 0x1f0cf,
+	0x1f170, 0x1f171,
+	0x1f17e, 0x1f17f,
+	0x1f18e, 0x1f18e,
+	0x1f191, 0x1f19a,
+	0x1f1e6, 0x1f1ff,
+	0x1f201, 0x1f202,
+	0x1f21a, 0x1f21a,
+	0x1f22f, 0x1f22f,
+	0x1f232, 0x1f23a,
+	0x1f250, 0x1f251,
+	0x1f300, 0x1f321,
+	0x1f324, 0x1f393,
+	0x1f396, 0x1f397,
+	0x1f399, 0x1f39b,
+	0x1f39e, 0x1f3f0,
+	0x1f3f3, 0x1f3f5,
+	0x1f3f7, 0x1f4fd,
+	0x1f4ff, 0x1f53d,
+	0x1f549, 0x1f54e,
+	0x1f550, 0x1f567,
+	0x1f56f, 0x1f570,
+	0x1f573, 0x1f57a,
+	0x1f587, 0x1f587,
+	0x1f58a, 0x1f58d,
+	0x1f590, 0x1f590,
+	0x1f595, 0x1f596,
+	0x1f5a4, 0x1f5a5,
+	0x1f5a8, 0x1f5a8,
+	0x1f5b1, 0x1f5b2,
+	0x1f5bc, 0x1f5bc,
+	0x1f5c2, 0x1f5c4,
+	0x1f5d1, 0x1f5d3,
+	0x1f5dc, 0x1f5de,
+	0x1f5e1, 0x1f5e1,
+	0x1f5e3, 0x1f5e3,
+	0x1f5e8, 0x1f5e8,
+	0x1f5ef, 0x1f5ef,
+	0x1f5f3, 0x1f5f3,
+	0x1f5fa, 0x1f64f,
+	0x1f680, 0x1f6c5,
+	0x1f6cb, 0x1f6d2,
+	0x1f6e0, 0x1f6e5,
+	0x1f6e9, 0x1f6e9,
+	0x1f6eb, 0x1f6ec,
+	0x1f6f0, 0x1f6f0,
+	0x1f6f3, 0x1f6f8,
+	0x1f910, 0x1f93a,
+	0x1f93c, 0x1f93e,
+	0x1f940, 0x1f945,
+	0x1f947, 0x1f94c,
+	0x1f950, 0x1f96b,
+	0x1f980, 0x1f997,
+	0x1f9c0, 0x1f9c0,
+	0x1f9d0, 0x1f9e6,
+}; /* CR_Emoji */
+
+/* 'Emoji_Presentation': Emoji */
+static const OnigCodePoint CR_Emoji_Presentation[] = {
+	75,
+	0x231a, 0x231b,
+	0x23e9, 0x23ec,
+	0x23f0, 0x23f0,
+	0x23f3, 0x23f3,
+	0x25fd, 0x25fe,
+	0x2614, 0x2615,
+	0x2648, 0x2653,
+	0x267f, 0x267f,
+	0x2693, 0x2693,
+	0x26a1, 0x26a1,
+	0x26aa, 0x26ab,
+	0x26bd, 0x26be,
+	0x26c4, 0x26c5,
+	0x26ce, 0x26ce,
+	0x26d4, 0x26d4,
+	0x26ea, 0x26ea,
+	0x26f2, 0x26f3,
+	0x26f5, 0x26f5,
+	0x26fa, 0x26fa,
+	0x26fd, 0x26fd,
+	0x2705, 0x2705,
+	0x270a, 0x270b,
+	0x2728, 0x2728,
+	0x274c, 0x274c,
+	0x274e, 0x274e,
+	0x2753, 0x2755,
+	0x2757, 0x2757,
+	0x2795, 0x2797,
+	0x27b0, 0x27b0,
+	0x27bf, 0x27bf,
+	0x2b1b, 0x2b1c,
+	0x2b50, 0x2b50,
+	0x2b55, 0x2b55,
+	0x1f004, 0x1f004,
+	0x1f0cf, 0x1f0cf,
+	0x1f18e, 0x1f18e,
+	0x1f191, 0x1f19a,
+	0x1f1e6, 0x1f1ff,
+	0x1f201, 0x1f201,
+	0x1f21a, 0x1f21a,
+	0x1f22f, 0x1f22f,
+	0x1f232, 0x1f236,
+	0x1f238, 0x1f23a,
+	0x1f250, 0x1f251,
+	0x1f300, 0x1f320,
+	0x1f32d, 0x1f335,
+	0x1f337, 0x1f37c,
+	0x1f37e, 0x1f393,
+	0x1f3a0, 0x1f3ca,
+	0x1f3cf, 0x1f3d3,
+	0x1f3e0, 0x1f3f0,
+	0x1f3f4, 0x1f3f4,
+	0x1f3f8, 0x1f43e,
+	0x1f440, 0x1f440,
+	0x1f442, 0x1f4fc,
+	0x1f4ff, 0x1f53d,
+	0x1f54b, 0x1f54e,
+	0x1f550, 0x1f567,
+	0x1f57a, 0x1f57a,
+	0x1f595, 0x1f596,
+	0x1f5a4, 0x1f5a4,
+	0x1f5fb, 0x1f64f,
+	0x1f680, 0x1f6c5,
+	0x1f6cc, 0x1f6cc,
+	0x1f6d0, 0x1f6d2,
+	0x1f6eb, 0x1f6ec,
+	0x1f6f4, 0x1f6f8,
+	0x1f910, 0x1f93a,
+	0x1f93c, 0x1f93e,
+	0x1f940, 0x1f945,
+	0x1f947, 0x1f94c,
+	0x1f950, 0x1f96b,
+	0x1f980, 0x1f997,
+	0x1f9c0, 0x1f9c0,
+	0x1f9d0, 0x1f9e6,
+}; /* CR_Emoji_Presentation */
+
+/* 'Emoji_Modifier': Emoji */
+static const OnigCodePoint CR_Emoji_Modifier[] = {
+	1,
+	0x1f3fb, 0x1f3ff,
+}; /* CR_Emoji_Modifier */
+
+/* 'Emoji_Modifier_Base': Emoji */
+static const OnigCodePoint CR_Emoji_Modifier_Base[] = {
+	32,
+	0x261d, 0x261d,
+	0x26f9, 0x26f9,
+	0x270a, 0x270d,
+	0x1f385, 0x1f385,
+	0x1f3c2, 0x1f3c4,
+	0x1f3c7, 0x1f3c7,
+	0x1f3ca, 0x1f3cc,
+	0x1f442, 0x1f443,
+	0x1f446, 0x1f450,
+	0x1f466, 0x1f469,
+	0x1f46e, 0x1f46e,
+	0x1f470, 0x1f478,
+	0x1f47c, 0x1f47c,
+	0x1f481, 0x1f483,
+	0x1f485, 0x1f487,
+	0x1f4aa, 0x1f4aa,
+	0x1f574, 0x1f575,
+	0x1f57a, 0x1f57a,
+	0x1f590, 0x1f590,
+	0x1f595, 0x1f596,
+	0x1f645, 0x1f647,
+	0x1f64b, 0x1f64f,
+	0x1f6a3, 0x1f6a3,
+	0x1f6b4, 0x1f6b6,
+	0x1f6c0, 0x1f6c0,
+	0x1f6cc, 0x1f6cc,
+	0x1f918, 0x1f91c,
+	0x1f91e, 0x1f91f,
+	0x1f926, 0x1f926,
+	0x1f930, 0x1f939,
+	0x1f93d, 0x1f93e,
+	0x1f9d1, 0x1f9dd,
+}; /* CR_Emoji_Modifier_Base */
+
+/* 'Emoji_Component': Emoji */
+static const OnigCodePoint CR_Emoji_Component[] = {
+	5,
+	0x0023, 0x0023,
+	0x002a, 0x002a,
+	0x0030, 0x0039,
+	0x1f1e6, 0x1f1ff,
+	0x1f3fb, 0x1f3ff,
+}; /* CR_Emoji_Component */
+
 /* 'Unknown': Script */
 static const OnigCodePoint CR_Unknown[] = {
-	598,
+	647,
 	0x0378, 0x0379,
 	0x0380, 0x0383,
@@ -19780,6 +21626,8 @@
 	0x083f, 0x083f,
 	0x085c, 0x085d,
-	0x085f, 0x089f,
-	0x08b3, 0x08e3,
+	0x085f, 0x085f,
+	0x086b, 0x089f,
+	0x08b5, 0x08b5,
+	0x08be, 0x08d3,
 	0x0984, 0x0984,
 	0x098d, 0x098e,
@@ -19795,5 +21643,5 @@
 	0x09de, 0x09de,
 	0x09e4, 0x09e5,
-	0x09fc, 0x0a00,
+	0x09fe, 0x0a00,
 	0x0a04, 0x0a04,
 	0x0a0b, 0x0a0e,
@@ -19824,5 +21672,6 @@
 	0x0ad1, 0x0adf,
 	0x0ae4, 0x0ae5,
-	0x0af2, 0x0b00,
+	0x0af2, 0x0af8,
+	0x0b00, 0x0b00,
 	0x0b04, 0x0b04,
 	0x0b0d, 0x0b0e,
@@ -19864,8 +21713,7 @@
 	0x0c4e, 0x0c54,
 	0x0c57, 0x0c57,
-	0x0c5a, 0x0c5f,
+	0x0c5b, 0x0c5f,
 	0x0c64, 0x0c65,
 	0x0c70, 0x0c77,
-	0x0c80, 0x0c80,
 	0x0c84, 0x0c84,
 	0x0c8d, 0x0c8d,
@@ -19881,15 +21729,12 @@
 	0x0ce4, 0x0ce5,
 	0x0cf0, 0x0cf0,
-	0x0cf3, 0x0d00,
+	0x0cf3, 0x0cff,
 	0x0d04, 0x0d04,
 	0x0d0d, 0x0d0d,
 	0x0d11, 0x0d11,
-	0x0d3b, 0x0d3c,
 	0x0d45, 0x0d45,
 	0x0d49, 0x0d49,
-	0x0d4f, 0x0d56,
-	0x0d58, 0x0d5f,
+	0x0d50, 0x0d53,
 	0x0d64, 0x0d65,
-	0x0d76, 0x0d78,
 	0x0d80, 0x0d81,
 	0x0d84, 0x0d84,
@@ -19952,5 +21797,6 @@
 	0x137d, 0x137f,
 	0x139a, 0x139f,
-	0x13f5, 0x13ff,
+	0x13f6, 0x13f7,
+	0x13fe, 0x13ff,
 	0x169d, 0x169f,
 	0x16f9, 0x16ff,
@@ -19991,9 +21837,8 @@
 	0x1c38, 0x1c3a,
 	0x1c4a, 0x1c4c,
-	0x1c80, 0x1cbf,
+	0x1c89, 0x1cbf,
 	0x1cc8, 0x1ccf,
-	0x1cf7, 0x1cf7,
 	0x1cfa, 0x1cff,
-	0x1df6, 0x1dfb,
+	0x1dfa, 0x1dfa,
 	0x1f16, 0x1f17,
 	0x1f1e, 0x1f1f,
@@ -20016,8 +21861,7 @@
 	0x208f, 0x208f,
 	0x209d, 0x209f,
-	0x20be, 0x20cf,
+	0x20c0, 0x20cf,
 	0x20f1, 0x20ff,
-	0x218a, 0x218f,
-	0x23fb, 0x23ff,
+	0x218c, 0x218f,
 	0x2427, 0x243f,
 	0x244b, 0x245f,
@@ -20026,5 +21870,6 @@
 	0x2bba, 0x2bbc,
 	0x2bc9, 0x2bc9,
-	0x2bd2, 0x2bff,
+	0x2bd3, 0x2beb,
+	0x2bf0, 0x2bff,
 	0x2c2f, 0x2c2f,
 	0x2c5f, 0x2c5f,
@@ -20044,5 +21889,5 @@
 	0x2dd7, 0x2dd7,
 	0x2ddf, 0x2ddf,
-	0x2e43, 0x2e7f,
+	0x2e4a, 0x2e7f,
 	0x2e9a, 0x2e9a,
 	0x2ef4, 0x2eff,
@@ -20052,5 +21897,5 @@
 	0x3097, 0x3098,
 	0x3100, 0x3104,
-	0x312e, 0x3130,
+	0x312f, 0x3130,
 	0x318f, 0x318f,
 	0x31bb, 0x31bf,
@@ -20059,19 +21904,17 @@
 	0x32ff, 0x32ff,
 	0x4db6, 0x4dbf,
-	0x9fcd, 0x9fff,
+	0x9feb, 0x9fff,
 	0xa48d, 0xa48f,
 	0xa4c7, 0xa4cf,
 	0xa62c, 0xa63f,
-	0xa69e, 0xa69e,
 	0xa6f8, 0xa6ff,
-	0xa78f, 0xa78f,
-	0xa7ae, 0xa7af,
-	0xa7b2, 0xa7f6,
+	0xa7af, 0xa7af,
+	0xa7b8, 0xa7f6,
 	0xa82c, 0xa82f,
 	0xa83a, 0xa83f,
 	0xa878, 0xa87f,
-	0xa8c5, 0xa8cd,
+	0xa8c6, 0xa8cd,
 	0xa8da, 0xa8df,
-	0xa8fc, 0xa8ff,
+	0xa8fe, 0xa8ff,
 	0xa954, 0xa95e,
 	0xa97d, 0xa97f,
@@ -20089,6 +21932,5 @@
 	0xab27, 0xab27,
 	0xab2f, 0xab2f,
-	0xab60, 0xab63,
-	0xab66, 0xabbf,
+	0xab66, 0xab6f,
 	0xabee, 0xabef,
 	0xabfa, 0xabff,
@@ -20111,5 +21953,4 @@
 	0xfdfe, 0xfdff,
 	0xfe1a, 0xfe1f,
-	0xfe2e, 0xfe2f,
 	0xfe53, 0xfe53,
 	0xfe67, 0xfe67,
@@ -20135,5 +21976,5 @@
 	0x10103, 0x10106,
 	0x10134, 0x10136,
-	0x1018d, 0x1018f,
+	0x1018f, 0x1018f,
 	0x1019c, 0x1019f,
 	0x101a1, 0x101cf,
@@ -20142,5 +21983,5 @@
 	0x102d1, 0x102df,
 	0x102fc, 0x102ff,
-	0x10324, 0x1032f,
+	0x10324, 0x1032c,
 	0x1034b, 0x1034f,
 	0x1037b, 0x1037f,
@@ -20149,5 +21990,7 @@
 	0x103d6, 0x103ff,
 	0x1049e, 0x1049f,
-	0x104aa, 0x104ff,
+	0x104aa, 0x104af,
+	0x104d4, 0x104d7,
+	0x104fc, 0x104ff,
 	0x10528, 0x1052f,
 	0x10564, 0x1056e,
@@ -20163,10 +22006,12 @@
 	0x10856, 0x10856,
 	0x1089f, 0x108a6,
-	0x108b0, 0x108ff,
+	0x108b0, 0x108df,
+	0x108f3, 0x108f3,
+	0x108f6, 0x108fa,
 	0x1091c, 0x1091e,
 	0x1093a, 0x1093e,
 	0x10940, 0x1097f,
-	0x109b8, 0x109bd,
-	0x109c0, 0x109ff,
+	0x109b8, 0x109bb,
+	0x109d0, 0x109d1,
 	0x10a04, 0x10a04,
 	0x10a07, 0x10a0b,
@@ -20186,5 +22031,8 @@
 	0x10b9d, 0x10ba8,
 	0x10bb0, 0x10bff,
-	0x10c49, 0x10e5f,
+	0x10c49, 0x10c7f,
+	0x10cb3, 0x10cbf,
+	0x10cf3, 0x10cf9,
+	0x10d00, 0x10e5f,
 	0x10e7f, 0x10fff,
 	0x1104e, 0x11051,
@@ -20196,12 +22044,16 @@
 	0x11144, 0x1114f,
 	0x11177, 0x1117f,
-	0x111c9, 0x111cc,
 	0x111ce, 0x111cf,
-	0x111db, 0x111e0,
+	0x111e0, 0x111e0,
 	0x111f5, 0x111ff,
 	0x11212, 0x11212,
-	0x1123e, 0x112af,
+	0x1123f, 0x1127f,
+	0x11287, 0x11287,
+	0x11289, 0x11289,
+	0x1128e, 0x1128e,
+	0x1129e, 0x1129e,
+	0x112aa, 0x112af,
 	0x112eb, 0x112ef,
-	0x112fa, 0x11300,
+	0x112fa, 0x112ff,
 	0x11304, 0x11304,
 	0x1130d, 0x1130e,
@@ -20213,24 +22065,52 @@
 	0x11345, 0x11346,
 	0x11349, 0x1134a,
-	0x1134e, 0x11356,
+	0x1134e, 0x1134f,
+	0x11351, 0x11356,
 	0x11358, 0x1135c,
 	0x11364, 0x11365,
 	0x1136d, 0x1136f,
-	0x11375, 0x1147f,
+	0x11375, 0x113ff,
+	0x1145a, 0x1145a,
+	0x1145c, 0x1145c,
+	0x1145e, 0x1147f,
 	0x114c8, 0x114cf,
 	0x114da, 0x1157f,
 	0x115b6, 0x115b7,
-	0x115ca, 0x115ff,
+	0x115de, 0x115ff,
 	0x11645, 0x1164f,
-	0x1165a, 0x1167f,
+	0x1165a, 0x1165f,
+	0x1166d, 0x1167f,
 	0x116b8, 0x116bf,
-	0x116ca, 0x1189f,
+	0x116ca, 0x116ff,
+	0x1171a, 0x1171c,
+	0x1172c, 0x1172f,
+	0x11740, 0x1189f,
 	0x118f3, 0x118fe,
-	0x11900, 0x11abf,
-	0x11af9, 0x11fff,
-	0x12399, 0x123ff,
+	0x11900, 0x119ff,
+	0x11a48, 0x11a4f,
+	0x11a84, 0x11a85,
+	0x11a9d, 0x11a9d,
+	0x11aa3, 0x11abf,
+	0x11af9, 0x11bff,
+	0x11c09, 0x11c09,
+	0x11c37, 0x11c37,
+	0x11c46, 0x11c4f,
+	0x11c6d, 0x11c6f,
+	0x11c90, 0x11c91,
+	0x11ca8, 0x11ca8,
+	0x11cb7, 0x11cff,
+	0x11d07, 0x11d07,
+	0x11d0a, 0x11d0a,
+	0x11d37, 0x11d39,
+	0x11d3b, 0x11d3b,
+	0x11d3e, 0x11d3e,
+	0x11d48, 0x11d4f,
+	0x11d5a, 0x11fff,
+	0x1239a, 0x123ff,
 	0x1246f, 0x1246f,
-	0x12475, 0x12fff,
-	0x1342f, 0x167ff,
+	0x12475, 0x1247f,
+	0x12544, 0x12fff,
+	0x1342f, 0x143ff,
+	0x14647, 0x167ff,
 	0x16a39, 0x16a3f,
 	0x16a5f, 0x16a5f,
@@ -20246,6 +22126,10 @@
 	0x16f45, 0x16f4f,
 	0x16f7f, 0x16f8e,
-	0x16fa0, 0x1afff,
-	0x1b002, 0x1bbff,
+	0x16fa0, 0x16fdf,
+	0x16fe2, 0x16fff,
+	0x187ed, 0x187ff,
+	0x18af3, 0x1afff,
+	0x1b11f, 0x1b16f,
+	0x1b2fc, 0x1bbff,
 	0x1bc6b, 0x1bc6f,
 	0x1bc7d, 0x1bc7f,
@@ -20255,5 +22139,5 @@
 	0x1d0f6, 0x1d0ff,
 	0x1d127, 0x1d128,
-	0x1d1de, 0x1d1ff,
+	0x1d1e9, 0x1d1ff,
 	0x1d246, 0x1d2ff,
 	0x1d357, 0x1d35f,
@@ -20279,7 +22163,17 @@
 	0x1d6a6, 0x1d6a7,
 	0x1d7cc, 0x1d7cd,
-	0x1d800, 0x1e7ff,
+	0x1da8c, 0x1da9a,
+	0x1daa0, 0x1daa0,
+	0x1dab0, 0x1dfff,
+	0x1e007, 0x1e007,
+	0x1e019, 0x1e01a,
+	0x1e022, 0x1e022,
+	0x1e025, 0x1e025,
+	0x1e02b, 0x1e7ff,
 	0x1e8c5, 0x1e8c6,
-	0x1e8d7, 0x1edff,
+	0x1e8d7, 0x1e8ff,
+	0x1e94b, 0x1e94f,
+	0x1e95a, 0x1e95d,
+	0x1e960, 0x1edff,
 	0x1ee04, 0x1ee04,
 	0x1ee20, 0x1ee20,
@@ -20325,21 +22219,13 @@
 	0x1f12f, 0x1f12f,
 	0x1f16c, 0x1f16f,
-	0x1f19b, 0x1f1e5,
+	0x1f1ad, 0x1f1e5,
 	0x1f203, 0x1f20f,
-	0x1f23b, 0x1f23f,
+	0x1f23c, 0x1f23f,
 	0x1f249, 0x1f24f,
-	0x1f252, 0x1f2ff,
-	0x1f32d, 0x1f32f,
-	0x1f37e, 0x1f37f,
-	0x1f3cf, 0x1f3d3,
-	0x1f3f8, 0x1f3ff,
-	0x1f4ff, 0x1f4ff,
-	0x1f54b, 0x1f54f,
-	0x1f57a, 0x1f57a,
-	0x1f5a4, 0x1f5a4,
-	0x1f643, 0x1f644,
-	0x1f6d0, 0x1f6df,
+	0x1f252, 0x1f25f,
+	0x1f266, 0x1f2ff,
+	0x1f6d5, 0x1f6df,
 	0x1f6ed, 0x1f6ef,
-	0x1f6f4, 0x1f6ff,
+	0x1f6f9, 0x1f6ff,
 	0x1f774, 0x1f77f,
 	0x1f7d5, 0x1f7ff,
@@ -20348,8 +22234,17 @@
 	0x1f85a, 0x1f85f,
 	0x1f888, 0x1f88f,
-	0x1f8ae, 0x1ffff,
+	0x1f8ae, 0x1f8ff,
+	0x1f90c, 0x1f90f,
+	0x1f93f, 0x1f93f,
+	0x1f94d, 0x1f94f,
+	0x1f96c, 0x1f97f,
+	0x1f998, 0x1f9bf,
+	0x1f9c1, 0x1f9cf,
+	0x1f9e7, 0x1ffff,
 	0x2a6d7, 0x2a6ff,
 	0x2b735, 0x2b73f,
-	0x2b81e, 0x2f7ff,
+	0x2b81e, 0x2b81f,
+	0x2cea2, 0x2ceaf,
+	0x2ebe1, 0x2f7ff,
 	0x2fa1e, 0xe0000,
 	0xe0002, 0xe001f,
@@ -27518,5 +29413,3059 @@
 	0xefffe, 0x10ffff,
 }; /* CR_Age_7_0 */
+
+/* 'Age_8_0': Derived Age 8.0 */
+static const OnigCodePoint CR_Age_8_0[] = {
+	623,
+	0x0000, 0x0377,
+	0x037a, 0x037f,
+	0x0384, 0x038a,
+	0x038c, 0x038c,
+	0x038e, 0x03a1,
+	0x03a3, 0x052f,
+	0x0531, 0x0556,
+	0x0559, 0x055f,
+	0x0561, 0x0587,
+	0x0589, 0x058a,
+	0x058d, 0x058f,
+	0x0591, 0x05c7,
+	0x05d0, 0x05ea,
+	0x05f0, 0x05f4,
+	0x0600, 0x061c,
+	0x061e, 0x070d,
+	0x070f, 0x074a,
+	0x074d, 0x07b1,
+	0x07c0, 0x07fa,
+	0x0800, 0x082d,
+	0x0830, 0x083e,
+	0x0840, 0x085b,
+	0x085e, 0x085e,
+	0x08a0, 0x08b4,
+	0x08e3, 0x0983,
+	0x0985, 0x098c,
+	0x098f, 0x0990,
+	0x0993, 0x09a8,
+	0x09aa, 0x09b0,
+	0x09b2, 0x09b2,
+	0x09b6, 0x09b9,
+	0x09bc, 0x09c4,
+	0x09c7, 0x09c8,
+	0x09cb, 0x09ce,
+	0x09d7, 0x09d7,
+	0x09dc, 0x09dd,
+	0x09df, 0x09e3,
+	0x09e6, 0x09fb,
+	0x0a01, 0x0a03,
+	0x0a05, 0x0a0a,
+	0x0a0f, 0x0a10,
+	0x0a13, 0x0a28,
+	0x0a2a, 0x0a30,
+	0x0a32, 0x0a33,
+	0x0a35, 0x0a36,
+	0x0a38, 0x0a39,
+	0x0a3c, 0x0a3c,
+	0x0a3e, 0x0a42,
+	0x0a47, 0x0a48,
+	0x0a4b, 0x0a4d,
+	0x0a51, 0x0a51,
+	0x0a59, 0x0a5c,
+	0x0a5e, 0x0a5e,
+	0x0a66, 0x0a75,
+	0x0a81, 0x0a83,
+	0x0a85, 0x0a8d,
+	0x0a8f, 0x0a91,
+	0x0a93, 0x0aa8,
+	0x0aaa, 0x0ab0,
+	0x0ab2, 0x0ab3,
+	0x0ab5, 0x0ab9,
+	0x0abc, 0x0ac5,
+	0x0ac7, 0x0ac9,
+	0x0acb, 0x0acd,
+	0x0ad0, 0x0ad0,
+	0x0ae0, 0x0ae3,
+	0x0ae6, 0x0af1,
+	0x0af9, 0x0af9,
+	0x0b01, 0x0b03,
+	0x0b05, 0x0b0c,
+	0x0b0f, 0x0b10,
+	0x0b13, 0x0b28,
+	0x0b2a, 0x0b30,
+	0x0b32, 0x0b33,
+	0x0b35, 0x0b39,
+	0x0b3c, 0x0b44,
+	0x0b47, 0x0b48,
+	0x0b4b, 0x0b4d,
+	0x0b56, 0x0b57,
+	0x0b5c, 0x0b5d,
+	0x0b5f, 0x0b63,
+	0x0b66, 0x0b77,
+	0x0b82, 0x0b83,
+	0x0b85, 0x0b8a,
+	0x0b8e, 0x0b90,
+	0x0b92, 0x0b95,
+	0x0b99, 0x0b9a,
+	0x0b9c, 0x0b9c,
+	0x0b9e, 0x0b9f,
+	0x0ba3, 0x0ba4,
+	0x0ba8, 0x0baa,
+	0x0bae, 0x0bb9,
+	0x0bbe, 0x0bc2,
+	0x0bc6, 0x0bc8,
+	0x0bca, 0x0bcd,
+	0x0bd0, 0x0bd0,
+	0x0bd7, 0x0bd7,
+	0x0be6, 0x0bfa,
+	0x0c00, 0x0c03,
+	0x0c05, 0x0c0c,
+	0x0c0e, 0x0c10,
+	0x0c12, 0x0c28,
+	0x0c2a, 0x0c39,
+	0x0c3d, 0x0c44,
+	0x0c46, 0x0c48,
+	0x0c4a, 0x0c4d,
+	0x0c55, 0x0c56,
+	0x0c58, 0x0c5a,
+	0x0c60, 0x0c63,
+	0x0c66, 0x0c6f,
+	0x0c78, 0x0c7f,
+	0x0c81, 0x0c83,
+	0x0c85, 0x0c8c,
+	0x0c8e, 0x0c90,
+	0x0c92, 0x0ca8,
+	0x0caa, 0x0cb3,
+	0x0cb5, 0x0cb9,
+	0x0cbc, 0x0cc4,
+	0x0cc6, 0x0cc8,
+	0x0cca, 0x0ccd,
+	0x0cd5, 0x0cd6,
+	0x0cde, 0x0cde,
+	0x0ce0, 0x0ce3,
+	0x0ce6, 0x0cef,
+	0x0cf1, 0x0cf2,
+	0x0d01, 0x0d03,
+	0x0d05, 0x0d0c,
+	0x0d0e, 0x0d10,
+	0x0d12, 0x0d3a,
+	0x0d3d, 0x0d44,
+	0x0d46, 0x0d48,
+	0x0d4a, 0x0d4e,
+	0x0d57, 0x0d57,
+	0x0d5f, 0x0d63,
+	0x0d66, 0x0d75,
+	0x0d79, 0x0d7f,
+	0x0d82, 0x0d83,
+	0x0d85, 0x0d96,
+	0x0d9a, 0x0db1,
+	0x0db3, 0x0dbb,
+	0x0dbd, 0x0dbd,
+	0x0dc0, 0x0dc6,
+	0x0dca, 0x0dca,
+	0x0dcf, 0x0dd4,
+	0x0dd6, 0x0dd6,
+	0x0dd8, 0x0ddf,
+	0x0de6, 0x0def,
+	0x0df2, 0x0df4,
+	0x0e01, 0x0e3a,
+	0x0e3f, 0x0e5b,
+	0x0e81, 0x0e82,
+	0x0e84, 0x0e84,
+	0x0e87, 0x0e88,
+	0x0e8a, 0x0e8a,
+	0x0e8d, 0x0e8d,
+	0x0e94, 0x0e97,
+	0x0e99, 0x0e9f,
+	0x0ea1, 0x0ea3,
+	0x0ea5, 0x0ea5,
+	0x0ea7, 0x0ea7,
+	0x0eaa, 0x0eab,
+	0x0ead, 0x0eb9,
+	0x0ebb, 0x0ebd,
+	0x0ec0, 0x0ec4,
+	0x0ec6, 0x0ec6,
+	0x0ec8, 0x0ecd,
+	0x0ed0, 0x0ed9,
+	0x0edc, 0x0edf,
+	0x0f00, 0x0f47,
+	0x0f49, 0x0f6c,
+	0x0f71, 0x0f97,
+	0x0f99, 0x0fbc,
+	0x0fbe, 0x0fcc,
+	0x0fce, 0x0fda,
+	0x1000, 0x10c5,
+	0x10c7, 0x10c7,
+	0x10cd, 0x10cd,
+	0x10d0, 0x1248,
+	0x124a, 0x124d,
+	0x1250, 0x1256,
+	0x1258, 0x1258,
+	0x125a, 0x125d,
+	0x1260, 0x1288,
+	0x128a, 0x128d,
+	0x1290, 0x12b0,
+	0x12b2, 0x12b5,
+	0x12b8, 0x12be,
+	0x12c0, 0x12c0,
+	0x12c2, 0x12c5,
+	0x12c8, 0x12d6,
+	0x12d8, 0x1310,
+	0x1312, 0x1315,
+	0x1318, 0x135a,
+	0x135d, 0x137c,
+	0x1380, 0x1399,
+	0x13a0, 0x13f5,
+	0x13f8, 0x13fd,
+	0x1400, 0x169c,
+	0x16a0, 0x16f8,
+	0x1700, 0x170c,
+	0x170e, 0x1714,
+	0x1720, 0x1736,
+	0x1740, 0x1753,
+	0x1760, 0x176c,
+	0x176e, 0x1770,
+	0x1772, 0x1773,
+	0x1780, 0x17dd,
+	0x17e0, 0x17e9,
+	0x17f0, 0x17f9,
+	0x1800, 0x180e,
+	0x1810, 0x1819,
+	0x1820, 0x1877,
+	0x1880, 0x18aa,
+	0x18b0, 0x18f5,
+	0x1900, 0x191e,
+	0x1920, 0x192b,
+	0x1930, 0x193b,
+	0x1940, 0x1940,
+	0x1944, 0x196d,
+	0x1970, 0x1974,
+	0x1980, 0x19ab,
+	0x19b0, 0x19c9,
+	0x19d0, 0x19da,
+	0x19de, 0x1a1b,
+	0x1a1e, 0x1a5e,
+	0x1a60, 0x1a7c,
+	0x1a7f, 0x1a89,
+	0x1a90, 0x1a99,
+	0x1aa0, 0x1aad,
+	0x1ab0, 0x1abe,
+	0x1b00, 0x1b4b,
+	0x1b50, 0x1b7c,
+	0x1b80, 0x1bf3,
+	0x1bfc, 0x1c37,
+	0x1c3b, 0x1c49,
+	0x1c4d, 0x1c7f,
+	0x1cc0, 0x1cc7,
+	0x1cd0, 0x1cf6,
+	0x1cf8, 0x1cf9,
+	0x1d00, 0x1df5,
+	0x1dfc, 0x1f15,
+	0x1f18, 0x1f1d,
+	0x1f20, 0x1f45,
+	0x1f48, 0x1f4d,
+	0x1f50, 0x1f57,
+	0x1f59, 0x1f59,
+	0x1f5b, 0x1f5b,
+	0x1f5d, 0x1f5d,
+	0x1f5f, 0x1f7d,
+	0x1f80, 0x1fb4,
+	0x1fb6, 0x1fc4,
+	0x1fc6, 0x1fd3,
+	0x1fd6, 0x1fdb,
+	0x1fdd, 0x1fef,
+	0x1ff2, 0x1ff4,
+	0x1ff6, 0x1ffe,
+	0x2000, 0x2064,
+	0x2066, 0x2071,
+	0x2074, 0x208e,
+	0x2090, 0x209c,
+	0x20a0, 0x20be,
+	0x20d0, 0x20f0,
+	0x2100, 0x218b,
+	0x2190, 0x23fa,
+	0x2400, 0x2426,
+	0x2440, 0x244a,
+	0x2460, 0x2b73,
+	0x2b76, 0x2b95,
+	0x2b98, 0x2bb9,
+	0x2bbd, 0x2bc8,
+	0x2bca, 0x2bd1,
+	0x2bec, 0x2bef,
+	0x2c00, 0x2c2e,
+	0x2c30, 0x2c5e,
+	0x2c60, 0x2cf3,
+	0x2cf9, 0x2d25,
+	0x2d27, 0x2d27,
+	0x2d2d, 0x2d2d,
+	0x2d30, 0x2d67,
+	0x2d6f, 0x2d70,
+	0x2d7f, 0x2d96,
+	0x2da0, 0x2da6,
+	0x2da8, 0x2dae,
+	0x2db0, 0x2db6,
+	0x2db8, 0x2dbe,
+	0x2dc0, 0x2dc6,
+	0x2dc8, 0x2dce,
+	0x2dd0, 0x2dd6,
+	0x2dd8, 0x2dde,
+	0x2de0, 0x2e42,
+	0x2e80, 0x2e99,
+	0x2e9b, 0x2ef3,
+	0x2f00, 0x2fd5,
+	0x2ff0, 0x2ffb,
+	0x3000, 0x303f,
+	0x3041, 0x3096,
+	0x3099, 0x30ff,
+	0x3105, 0x312d,
+	0x3131, 0x318e,
+	0x3190, 0x31ba,
+	0x31c0, 0x31e3,
+	0x31f0, 0x321e,
+	0x3220, 0x32fe,
+	0x3300, 0x4db5,
+	0x4dc0, 0x9fd5,
+	0xa000, 0xa48c,
+	0xa490, 0xa4c6,
+	0xa4d0, 0xa62b,
+	0xa640, 0xa6f7,
+	0xa700, 0xa7ad,
+	0xa7b0, 0xa7b7,
+	0xa7f7, 0xa82b,
+	0xa830, 0xa839,
+	0xa840, 0xa877,
+	0xa880, 0xa8c4,
+	0xa8ce, 0xa8d9,
+	0xa8e0, 0xa8fd,
+	0xa900, 0xa953,
+	0xa95f, 0xa97c,
+	0xa980, 0xa9cd,
+	0xa9cf, 0xa9d9,
+	0xa9de, 0xa9fe,
+	0xaa00, 0xaa36,
+	0xaa40, 0xaa4d,
+	0xaa50, 0xaa59,
+	0xaa5c, 0xaac2,
+	0xaadb, 0xaaf6,
+	0xab01, 0xab06,
+	0xab09, 0xab0e,
+	0xab11, 0xab16,
+	0xab20, 0xab26,
+	0xab28, 0xab2e,
+	0xab30, 0xab65,
+	0xab70, 0xabed,
+	0xabf0, 0xabf9,
+	0xac00, 0xd7a3,
+	0xd7b0, 0xd7c6,
+	0xd7cb, 0xd7fb,
+	0xd800, 0xfa6d,
+	0xfa70, 0xfad9,
+	0xfb00, 0xfb06,
+	0xfb13, 0xfb17,
+	0xfb1d, 0xfb36,
+	0xfb38, 0xfb3c,
+	0xfb3e, 0xfb3e,
+	0xfb40, 0xfb41,
+	0xfb43, 0xfb44,
+	0xfb46, 0xfbc1,
+	0xfbd3, 0xfd3f,
+	0xfd50, 0xfd8f,
+	0xfd92, 0xfdc7,
+	0xfdd0, 0xfdfd,
+	0xfe00, 0xfe19,
+	0xfe20, 0xfe52,
+	0xfe54, 0xfe66,
+	0xfe68, 0xfe6b,
+	0xfe70, 0xfe74,
+	0xfe76, 0xfefc,
+	0xfeff, 0xfeff,
+	0xff01, 0xffbe,
+	0xffc2, 0xffc7,
+	0xffca, 0xffcf,
+	0xffd2, 0xffd7,
+	0xffda, 0xffdc,
+	0xffe0, 0xffe6,
+	0xffe8, 0xffee,
+	0xfff9, 0x1000b,
+	0x1000d, 0x10026,
+	0x10028, 0x1003a,
+	0x1003c, 0x1003d,
+	0x1003f, 0x1004d,
+	0x10050, 0x1005d,
+	0x10080, 0x100fa,
+	0x10100, 0x10102,
+	0x10107, 0x10133,
+	0x10137, 0x1018c,
+	0x10190, 0x1019b,
+	0x101a0, 0x101a0,
+	0x101d0, 0x101fd,
+	0x10280, 0x1029c,
+	0x102a0, 0x102d0,
+	0x102e0, 0x102fb,
+	0x10300, 0x10323,
+	0x10330, 0x1034a,
+	0x10350, 0x1037a,
+	0x10380, 0x1039d,
+	0x1039f, 0x103c3,
+	0x103c8, 0x103d5,
+	0x10400, 0x1049d,
+	0x104a0, 0x104a9,
+	0x10500, 0x10527,
+	0x10530, 0x10563,
+	0x1056f, 0x1056f,
+	0x10600, 0x10736,
+	0x10740, 0x10755,
+	0x10760, 0x10767,
+	0x10800, 0x10805,
+	0x10808, 0x10808,
+	0x1080a, 0x10835,
+	0x10837, 0x10838,
+	0x1083c, 0x1083c,
+	0x1083f, 0x10855,
+	0x10857, 0x1089e,
+	0x108a7, 0x108af,
+	0x108e0, 0x108f2,
+	0x108f4, 0x108f5,
+	0x108fb, 0x1091b,
+	0x1091f, 0x10939,
+	0x1093f, 0x1093f,
+	0x10980, 0x109b7,
+	0x109bc, 0x109cf,
+	0x109d2, 0x10a03,
+	0x10a05, 0x10a06,
+	0x10a0c, 0x10a13,
+	0x10a15, 0x10a17,
+	0x10a19, 0x10a33,
+	0x10a38, 0x10a3a,
+	0x10a3f, 0x10a47,
+	0x10a50, 0x10a58,
+	0x10a60, 0x10a9f,
+	0x10ac0, 0x10ae6,
+	0x10aeb, 0x10af6,
+	0x10b00, 0x10b35,
+	0x10b39, 0x10b55,
+	0x10b58, 0x10b72,
+	0x10b78, 0x10b91,
+	0x10b99, 0x10b9c,
+	0x10ba9, 0x10baf,
+	0x10c00, 0x10c48,
+	0x10c80, 0x10cb2,
+	0x10cc0, 0x10cf2,
+	0x10cfa, 0x10cff,
+	0x10e60, 0x10e7e,
+	0x11000, 0x1104d,
+	0x11052, 0x1106f,
+	0x1107f, 0x110c1,
+	0x110d0, 0x110e8,
+	0x110f0, 0x110f9,
+	0x11100, 0x11134,
+	0x11136, 0x11143,
+	0x11150, 0x11176,
+	0x11180, 0x111cd,
+	0x111d0, 0x111df,
+	0x111e1, 0x111f4,
+	0x11200, 0x11211,
+	0x11213, 0x1123d,
+	0x11280, 0x11286,
+	0x11288, 0x11288,
+	0x1128a, 0x1128d,
+	0x1128f, 0x1129d,
+	0x1129f, 0x112a9,
+	0x112b0, 0x112ea,
+	0x112f0, 0x112f9,
+	0x11300, 0x11303,
+	0x11305, 0x1130c,
+	0x1130f, 0x11310,
+	0x11313, 0x11328,
+	0x1132a, 0x11330,
+	0x11332, 0x11333,
+	0x11335, 0x11339,
+	0x1133c, 0x11344,
+	0x11347, 0x11348,
+	0x1134b, 0x1134d,
+	0x11350, 0x11350,
+	0x11357, 0x11357,
+	0x1135d, 0x11363,
+	0x11366, 0x1136c,
+	0x11370, 0x11374,
+	0x11480, 0x114c7,
+	0x114d0, 0x114d9,
+	0x11580, 0x115b5,
+	0x115b8, 0x115dd,
+	0x11600, 0x11644,
+	0x11650, 0x11659,
+	0x11680, 0x116b7,
+	0x116c0, 0x116c9,
+	0x11700, 0x11719,
+	0x1171d, 0x1172b,
+	0x11730, 0x1173f,
+	0x118a0, 0x118f2,
+	0x118ff, 0x118ff,
+	0x11ac0, 0x11af8,
+	0x12000, 0x12399,
+	0x12400, 0x1246e,
+	0x12470, 0x12474,
+	0x12480, 0x12543,
+	0x13000, 0x1342e,
+	0x14400, 0x14646,
+	0x16800, 0x16a38,
+	0x16a40, 0x16a5e,
+	0x16a60, 0x16a69,
+	0x16a6e, 0x16a6f,
+	0x16ad0, 0x16aed,
+	0x16af0, 0x16af5,
+	0x16b00, 0x16b45,
+	0x16b50, 0x16b59,
+	0x16b5b, 0x16b61,
+	0x16b63, 0x16b77,
+	0x16b7d, 0x16b8f,
+	0x16f00, 0x16f44,
+	0x16f50, 0x16f7e,
+	0x16f8f, 0x16f9f,
+	0x1b000, 0x1b001,
+	0x1bc00, 0x1bc6a,
+	0x1bc70, 0x1bc7c,
+	0x1bc80, 0x1bc88,
+	0x1bc90, 0x1bc99,
+	0x1bc9c, 0x1bca3,
+	0x1d000, 0x1d0f5,
+	0x1d100, 0x1d126,
+	0x1d129, 0x1d1e8,
+	0x1d200, 0x1d245,
+	0x1d300, 0x1d356,
+	0x1d360, 0x1d371,
+	0x1d400, 0x1d454,
+	0x1d456, 0x1d49c,
+	0x1d49e, 0x1d49f,
+	0x1d4a2, 0x1d4a2,
+	0x1d4a5, 0x1d4a6,
+	0x1d4a9, 0x1d4ac,
+	0x1d4ae, 0x1d4b9,
+	0x1d4bb, 0x1d4bb,
+	0x1d4bd, 0x1d4c3,
+	0x1d4c5, 0x1d505,
+	0x1d507, 0x1d50a,
+	0x1d50d, 0x1d514,
+	0x1d516, 0x1d51c,
+	0x1d51e, 0x1d539,
+	0x1d53b, 0x1d53e,
+	0x1d540, 0x1d544,
+	0x1d546, 0x1d546,
+	0x1d54a, 0x1d550,
+	0x1d552, 0x1d6a5,
+	0x1d6a8, 0x1d7cb,
+	0x1d7ce, 0x1da8b,
+	0x1da9b, 0x1da9f,
+	0x1daa1, 0x1daaf,
+	0x1e800, 0x1e8c4,
+	0x1e8c7, 0x1e8d6,
+	0x1ee00, 0x1ee03,
+	0x1ee05, 0x1ee1f,
+	0x1ee21, 0x1ee22,
+	0x1ee24, 0x1ee24,
+	0x1ee27, 0x1ee27,
+	0x1ee29, 0x1ee32,
+	0x1ee34, 0x1ee37,
+	0x1ee39, 0x1ee39,
+	0x1ee3b, 0x1ee3b,
+	0x1ee42, 0x1ee42,
+	0x1ee47, 0x1ee47,
+	0x1ee49, 0x1ee49,
+	0x1ee4b, 0x1ee4b,
+	0x1ee4d, 0x1ee4f,
+	0x1ee51, 0x1ee52,
+	0x1ee54, 0x1ee54,
+	0x1ee57, 0x1ee57,
+	0x1ee59, 0x1ee59,
+	0x1ee5b, 0x1ee5b,
+	0x1ee5d, 0x1ee5d,
+	0x1ee5f, 0x1ee5f,
+	0x1ee61, 0x1ee62,
+	0x1ee64, 0x1ee64,
+	0x1ee67, 0x1ee6a,
+	0x1ee6c, 0x1ee72,
+	0x1ee74, 0x1ee77,
+	0x1ee79, 0x1ee7c,
+	0x1ee7e, 0x1ee7e,
+	0x1ee80, 0x1ee89,
+	0x1ee8b, 0x1ee9b,
+	0x1eea1, 0x1eea3,
+	0x1eea5, 0x1eea9,
+	0x1eeab, 0x1eebb,
+	0x1eef0, 0x1eef1,
+	0x1f000, 0x1f02b,
+	0x1f030, 0x1f093,
+	0x1f0a0, 0x1f0ae,
+	0x1f0b1, 0x1f0bf,
+	0x1f0c1, 0x1f0cf,
+	0x1f0d1, 0x1f0f5,
+	0x1f100, 0x1f10c,
+	0x1f110, 0x1f12e,
+	0x1f130, 0x1f16b,
+	0x1f170, 0x1f19a,
+	0x1f1e6, 0x1f202,
+	0x1f210, 0x1f23a,
+	0x1f240, 0x1f248,
+	0x1f250, 0x1f251,
+	0x1f300, 0x1f579,
+	0x1f57b, 0x1f5a3,
+	0x1f5a5, 0x1f6d0,
+	0x1f6e0, 0x1f6ec,
+	0x1f6f0, 0x1f6f3,
+	0x1f700, 0x1f773,
+	0x1f780, 0x1f7d4,
+	0x1f800, 0x1f80b,
+	0x1f810, 0x1f847,
+	0x1f850, 0x1f859,
+	0x1f860, 0x1f887,
+	0x1f890, 0x1f8ad,
+	0x1f910, 0x1f918,
+	0x1f980, 0x1f984,
+	0x1f9c0, 0x1f9c0,
+	0x1fffe, 0x2a6d6,
+	0x2a700, 0x2b734,
+	0x2b740, 0x2b81d,
+	0x2b820, 0x2cea1,
+	0x2f800, 0x2fa1d,
+	0x2fffe, 0x2ffff,
+	0x3fffe, 0x3ffff,
+	0x4fffe, 0x4ffff,
+	0x5fffe, 0x5ffff,
+	0x6fffe, 0x6ffff,
+	0x7fffe, 0x7ffff,
+	0x8fffe, 0x8ffff,
+	0x9fffe, 0x9ffff,
+	0xafffe, 0xaffff,
+	0xbfffe, 0xbffff,
+	0xcfffe, 0xcffff,
+	0xdfffe, 0xdffff,
+	0xe0001, 0xe0001,
+	0xe0020, 0xe007f,
+	0xe0100, 0xe01ef,
+	0xefffe, 0x10ffff,
+}; /* CR_Age_8_0 */
+
+/* 'Age_9_0': Derived Age 9.0 */
+static const OnigCodePoint CR_Age_9_0[] = {
+	648,
+	0x0000, 0x0377,
+	0x037a, 0x037f,
+	0x0384, 0x038a,
+	0x038c, 0x038c,
+	0x038e, 0x03a1,
+	0x03a3, 0x052f,
+	0x0531, 0x0556,
+	0x0559, 0x055f,
+	0x0561, 0x0587,
+	0x0589, 0x058a,
+	0x058d, 0x058f,
+	0x0591, 0x05c7,
+	0x05d0, 0x05ea,
+	0x05f0, 0x05f4,
+	0x0600, 0x061c,
+	0x061e, 0x070d,
+	0x070f, 0x074a,
+	0x074d, 0x07b1,
+	0x07c0, 0x07fa,
+	0x0800, 0x082d,
+	0x0830, 0x083e,
+	0x0840, 0x085b,
+	0x085e, 0x085e,
+	0x08a0, 0x08b4,
+	0x08b6, 0x08bd,
+	0x08d4, 0x0983,
+	0x0985, 0x098c,
+	0x098f, 0x0990,
+	0x0993, 0x09a8,
+	0x09aa, 0x09b0,
+	0x09b2, 0x09b2,
+	0x09b6, 0x09b9,
+	0x09bc, 0x09c4,
+	0x09c7, 0x09c8,
+	0x09cb, 0x09ce,
+	0x09d7, 0x09d7,
+	0x09dc, 0x09dd,
+	0x09df, 0x09e3,
+	0x09e6, 0x09fb,
+	0x0a01, 0x0a03,
+	0x0a05, 0x0a0a,
+	0x0a0f, 0x0a10,
+	0x0a13, 0x0a28,
+	0x0a2a, 0x0a30,
+	0x0a32, 0x0a33,
+	0x0a35, 0x0a36,
+	0x0a38, 0x0a39,
+	0x0a3c, 0x0a3c,
+	0x0a3e, 0x0a42,
+	0x0a47, 0x0a48,
+	0x0a4b, 0x0a4d,
+	0x0a51, 0x0a51,
+	0x0a59, 0x0a5c,
+	0x0a5e, 0x0a5e,
+	0x0a66, 0x0a75,
+	0x0a81, 0x0a83,
+	0x0a85, 0x0a8d,
+	0x0a8f, 0x0a91,
+	0x0a93, 0x0aa8,
+	0x0aaa, 0x0ab0,
+	0x0ab2, 0x0ab3,
+	0x0ab5, 0x0ab9,
+	0x0abc, 0x0ac5,
+	0x0ac7, 0x0ac9,
+	0x0acb, 0x0acd,
+	0x0ad0, 0x0ad0,
+	0x0ae0, 0x0ae3,
+	0x0ae6, 0x0af1,
+	0x0af9, 0x0af9,
+	0x0b01, 0x0b03,
+	0x0b05, 0x0b0c,
+	0x0b0f, 0x0b10,
+	0x0b13, 0x0b28,
+	0x0b2a, 0x0b30,
+	0x0b32, 0x0b33,
+	0x0b35, 0x0b39,
+	0x0b3c, 0x0b44,
+	0x0b47, 0x0b48,
+	0x0b4b, 0x0b4d,
+	0x0b56, 0x0b57,
+	0x0b5c, 0x0b5d,
+	0x0b5f, 0x0b63,
+	0x0b66, 0x0b77,
+	0x0b82, 0x0b83,
+	0x0b85, 0x0b8a,
+	0x0b8e, 0x0b90,
+	0x0b92, 0x0b95,
+	0x0b99, 0x0b9a,
+	0x0b9c, 0x0b9c,
+	0x0b9e, 0x0b9f,
+	0x0ba3, 0x0ba4,
+	0x0ba8, 0x0baa,
+	0x0bae, 0x0bb9,
+	0x0bbe, 0x0bc2,
+	0x0bc6, 0x0bc8,
+	0x0bca, 0x0bcd,
+	0x0bd0, 0x0bd0,
+	0x0bd7, 0x0bd7,
+	0x0be6, 0x0bfa,
+	0x0c00, 0x0c03,
+	0x0c05, 0x0c0c,
+	0x0c0e, 0x0c10,
+	0x0c12, 0x0c28,
+	0x0c2a, 0x0c39,
+	0x0c3d, 0x0c44,
+	0x0c46, 0x0c48,
+	0x0c4a, 0x0c4d,
+	0x0c55, 0x0c56,
+	0x0c58, 0x0c5a,
+	0x0c60, 0x0c63,
+	0x0c66, 0x0c6f,
+	0x0c78, 0x0c83,
+	0x0c85, 0x0c8c,
+	0x0c8e, 0x0c90,
+	0x0c92, 0x0ca8,
+	0x0caa, 0x0cb3,
+	0x0cb5, 0x0cb9,
+	0x0cbc, 0x0cc4,
+	0x0cc6, 0x0cc8,
+	0x0cca, 0x0ccd,
+	0x0cd5, 0x0cd6,
+	0x0cde, 0x0cde,
+	0x0ce0, 0x0ce3,
+	0x0ce6, 0x0cef,
+	0x0cf1, 0x0cf2,
+	0x0d01, 0x0d03,
+	0x0d05, 0x0d0c,
+	0x0d0e, 0x0d10,
+	0x0d12, 0x0d3a,
+	0x0d3d, 0x0d44,
+	0x0d46, 0x0d48,
+	0x0d4a, 0x0d4f,
+	0x0d54, 0x0d63,
+	0x0d66, 0x0d7f,
+	0x0d82, 0x0d83,
+	0x0d85, 0x0d96,
+	0x0d9a, 0x0db1,
+	0x0db3, 0x0dbb,
+	0x0dbd, 0x0dbd,
+	0x0dc0, 0x0dc6,
+	0x0dca, 0x0dca,
+	0x0dcf, 0x0dd4,
+	0x0dd6, 0x0dd6,
+	0x0dd8, 0x0ddf,
+	0x0de6, 0x0def,
+	0x0df2, 0x0df4,
+	0x0e01, 0x0e3a,
+	0x0e3f, 0x0e5b,
+	0x0e81, 0x0e82,
+	0x0e84, 0x0e84,
+	0x0e87, 0x0e88,
+	0x0e8a, 0x0e8a,
+	0x0e8d, 0x0e8d,
+	0x0e94, 0x0e97,
+	0x0e99, 0x0e9f,
+	0x0ea1, 0x0ea3,
+	0x0ea5, 0x0ea5,
+	0x0ea7, 0x0ea7,
+	0x0eaa, 0x0eab,
+	0x0ead, 0x0eb9,
+	0x0ebb, 0x0ebd,
+	0x0ec0, 0x0ec4,
+	0x0ec6, 0x0ec6,
+	0x0ec8, 0x0ecd,
+	0x0ed0, 0x0ed9,
+	0x0edc, 0x0edf,
+	0x0f00, 0x0f47,
+	0x0f49, 0x0f6c,
+	0x0f71, 0x0f97,
+	0x0f99, 0x0fbc,
+	0x0fbe, 0x0fcc,
+	0x0fce, 0x0fda,
+	0x1000, 0x10c5,
+	0x10c7, 0x10c7,
+	0x10cd, 0x10cd,
+	0x10d0, 0x1248,
+	0x124a, 0x124d,
+	0x1250, 0x1256,
+	0x1258, 0x1258,
+	0x125a, 0x125d,
+	0x1260, 0x1288,
+	0x128a, 0x128d,
+	0x1290, 0x12b0,
+	0x12b2, 0x12b5,
+	0x12b8, 0x12be,
+	0x12c0, 0x12c0,
+	0x12c2, 0x12c5,
+	0x12c8, 0x12d6,
+	0x12d8, 0x1310,
+	0x1312, 0x1315,
+	0x1318, 0x135a,
+	0x135d, 0x137c,
+	0x1380, 0x1399,
+	0x13a0, 0x13f5,
+	0x13f8, 0x13fd,
+	0x1400, 0x169c,
+	0x16a0, 0x16f8,
+	0x1700, 0x170c,
+	0x170e, 0x1714,
+	0x1720, 0x1736,
+	0x1740, 0x1753,
+	0x1760, 0x176c,
+	0x176e, 0x1770,
+	0x1772, 0x1773,
+	0x1780, 0x17dd,
+	0x17e0, 0x17e9,
+	0x17f0, 0x17f9,
+	0x1800, 0x180e,
+	0x1810, 0x1819,
+	0x1820, 0x1877,
+	0x1880, 0x18aa,
+	0x18b0, 0x18f5,
+	0x1900, 0x191e,
+	0x1920, 0x192b,
+	0x1930, 0x193b,
+	0x1940, 0x1940,
+	0x1944, 0x196d,
+	0x1970, 0x1974,
+	0x1980, 0x19ab,
+	0x19b0, 0x19c9,
+	0x19d0, 0x19da,
+	0x19de, 0x1a1b,
+	0x1a1e, 0x1a5e,
+	0x1a60, 0x1a7c,
+	0x1a7f, 0x1a89,
+	0x1a90, 0x1a99,
+	0x1aa0, 0x1aad,
+	0x1ab0, 0x1abe,
+	0x1b00, 0x1b4b,
+	0x1b50, 0x1b7c,
+	0x1b80, 0x1bf3,
+	0x1bfc, 0x1c37,
+	0x1c3b, 0x1c49,
+	0x1c4d, 0x1c88,
+	0x1cc0, 0x1cc7,
+	0x1cd0, 0x1cf6,
+	0x1cf8, 0x1cf9,
+	0x1d00, 0x1df5,
+	0x1dfb, 0x1f15,
+	0x1f18, 0x1f1d,
+	0x1f20, 0x1f45,
+	0x1f48, 0x1f4d,
+	0x1f50, 0x1f57,
+	0x1f59, 0x1f59,
+	0x1f5b, 0x1f5b,
+	0x1f5d, 0x1f5d,
+	0x1f5f, 0x1f7d,
+	0x1f80, 0x1fb4,
+	0x1fb6, 0x1fc4,
+	0x1fc6, 0x1fd3,
+	0x1fd6, 0x1fdb,
+	0x1fdd, 0x1fef,
+	0x1ff2, 0x1ff4,
+	0x1ff6, 0x1ffe,
+	0x2000, 0x2064,
+	0x2066, 0x2071,
+	0x2074, 0x208e,
+	0x2090, 0x209c,
+	0x20a0, 0x20be,
+	0x20d0, 0x20f0,
+	0x2100, 0x218b,
+	0x2190, 0x23fe,
+	0x2400, 0x2426,
+	0x2440, 0x244a,
+	0x2460, 0x2b73,
+	0x2b76, 0x2b95,
+	0x2b98, 0x2bb9,
+	0x2bbd, 0x2bc8,
+	0x2bca, 0x2bd1,
+	0x2bec, 0x2bef,
+	0x2c00, 0x2c2e,
+	0x2c30, 0x2c5e,
+	0x2c60, 0x2cf3,
+	0x2cf9, 0x2d25,
+	0x2d27, 0x2d27,
+	0x2d2d, 0x2d2d,
+	0x2d30, 0x2d67,
+	0x2d6f, 0x2d70,
+	0x2d7f, 0x2d96,
+	0x2da0, 0x2da6,
+	0x2da8, 0x2dae,
+	0x2db0, 0x2db6,
+	0x2db8, 0x2dbe,
+	0x2dc0, 0x2dc6,
+	0x2dc8, 0x2dce,
+	0x2dd0, 0x2dd6,
+	0x2dd8, 0x2dde,
+	0x2de0, 0x2e44,
+	0x2e80, 0x2e99,
+	0x2e9b, 0x2ef3,
+	0x2f00, 0x2fd5,
+	0x2ff0, 0x2ffb,
+	0x3000, 0x303f,
+	0x3041, 0x3096,
+	0x3099, 0x30ff,
+	0x3105, 0x312d,
+	0x3131, 0x318e,
+	0x3190, 0x31ba,
+	0x31c0, 0x31e3,
+	0x31f0, 0x321e,
+	0x3220, 0x32fe,
+	0x3300, 0x4db5,
+	0x4dc0, 0x9fd5,
+	0xa000, 0xa48c,
+	0xa490, 0xa4c6,
+	0xa4d0, 0xa62b,
+	0xa640, 0xa6f7,
+	0xa700, 0xa7ae,
+	0xa7b0, 0xa7b7,
+	0xa7f7, 0xa82b,
+	0xa830, 0xa839,
+	0xa840, 0xa877,
+	0xa880, 0xa8c5,
+	0xa8ce, 0xa8d9,
+	0xa8e0, 0xa8fd,
+	0xa900, 0xa953,
+	0xa95f, 0xa97c,
+	0xa980, 0xa9cd,
+	0xa9cf, 0xa9d9,
+	0xa9de, 0xa9fe,
+	0xaa00, 0xaa36,
+	0xaa40, 0xaa4d,
+	0xaa50, 0xaa59,
+	0xaa5c, 0xaac2,
+	0xaadb, 0xaaf6,
+	0xab01, 0xab06,
+	0xab09, 0xab0e,
+	0xab11, 0xab16,
+	0xab20, 0xab26,
+	0xab28, 0xab2e,
+	0xab30, 0xab65,
+	0xab70, 0xabed,
+	0xabf0, 0xabf9,
+	0xac00, 0xd7a3,
+	0xd7b0, 0xd7c6,
+	0xd7cb, 0xd7fb,
+	0xd800, 0xfa6d,
+	0xfa70, 0xfad9,
+	0xfb00, 0xfb06,
+	0xfb13, 0xfb17,
+	0xfb1d, 0xfb36,
+	0xfb38, 0xfb3c,
+	0xfb3e, 0xfb3e,
+	0xfb40, 0xfb41,
+	0xfb43, 0xfb44,
+	0xfb46, 0xfbc1,
+	0xfbd3, 0xfd3f,
+	0xfd50, 0xfd8f,
+	0xfd92, 0xfdc7,
+	0xfdd0, 0xfdfd,
+	0xfe00, 0xfe19,
+	0xfe20, 0xfe52,
+	0xfe54, 0xfe66,
+	0xfe68, 0xfe6b,
+	0xfe70, 0xfe74,
+	0xfe76, 0xfefc,
+	0xfeff, 0xfeff,
+	0xff01, 0xffbe,
+	0xffc2, 0xffc7,
+	0xffca, 0xffcf,
+	0xffd2, 0xffd7,
+	0xffda, 0xffdc,
+	0xffe0, 0xffe6,
+	0xffe8, 0xffee,
+	0xfff9, 0x1000b,
+	0x1000d, 0x10026,
+	0x10028, 0x1003a,
+	0x1003c, 0x1003d,
+	0x1003f, 0x1004d,
+	0x10050, 0x1005d,
+	0x10080, 0x100fa,
+	0x10100, 0x10102,
+	0x10107, 0x10133,
+	0x10137, 0x1018e,
+	0x10190, 0x1019b,
+	0x101a0, 0x101a0,
+	0x101d0, 0x101fd,
+	0x10280, 0x1029c,
+	0x102a0, 0x102d0,
+	0x102e0, 0x102fb,
+	0x10300, 0x10323,
+	0x10330, 0x1034a,
+	0x10350, 0x1037a,
+	0x10380, 0x1039d,
+	0x1039f, 0x103c3,
+	0x103c8, 0x103d5,
+	0x10400, 0x1049d,
+	0x104a0, 0x104a9,
+	0x104b0, 0x104d3,
+	0x104d8, 0x104fb,
+	0x10500, 0x10527,
+	0x10530, 0x10563,
+	0x1056f, 0x1056f,
+	0x10600, 0x10736,
+	0x10740, 0x10755,
+	0x10760, 0x10767,
+	0x10800, 0x10805,
+	0x10808, 0x10808,
+	0x1080a, 0x10835,
+	0x10837, 0x10838,
+	0x1083c, 0x1083c,
+	0x1083f, 0x10855,
+	0x10857, 0x1089e,
+	0x108a7, 0x108af,
+	0x108e0, 0x108f2,
+	0x108f4, 0x108f5,
+	0x108fb, 0x1091b,
+	0x1091f, 0x10939,
+	0x1093f, 0x1093f,
+	0x10980, 0x109b7,
+	0x109bc, 0x109cf,
+	0x109d2, 0x10a03,
+	0x10a05, 0x10a06,
+	0x10a0c, 0x10a13,
+	0x10a15, 0x10a17,
+	0x10a19, 0x10a33,
+	0x10a38, 0x10a3a,
+	0x10a3f, 0x10a47,
+	0x10a50, 0x10a58,
+	0x10a60, 0x10a9f,
+	0x10ac0, 0x10ae6,
+	0x10aeb, 0x10af6,
+	0x10b00, 0x10b35,
+	0x10b39, 0x10b55,
+	0x10b58, 0x10b72,
+	0x10b78, 0x10b91,
+	0x10b99, 0x10b9c,
+	0x10ba9, 0x10baf,
+	0x10c00, 0x10c48,
+	0x10c80, 0x10cb2,
+	0x10cc0, 0x10cf2,
+	0x10cfa, 0x10cff,
+	0x10e60, 0x10e7e,
+	0x11000, 0x1104d,
+	0x11052, 0x1106f,
+	0x1107f, 0x110c1,
+	0x110d0, 0x110e8,
+	0x110f0, 0x110f9,
+	0x11100, 0x11134,
+	0x11136, 0x11143,
+	0x11150, 0x11176,
+	0x11180, 0x111cd,
+	0x111d0, 0x111df,
+	0x111e1, 0x111f4,
+	0x11200, 0x11211,
+	0x11213, 0x1123e,
+	0x11280, 0x11286,
+	0x11288, 0x11288,
+	0x1128a, 0x1128d,
+	0x1128f, 0x1129d,
+	0x1129f, 0x112a9,
+	0x112b0, 0x112ea,
+	0x112f0, 0x112f9,
+	0x11300, 0x11303,
+	0x11305, 0x1130c,
+	0x1130f, 0x11310,
+	0x11313, 0x11328,
+	0x1132a, 0x11330,
+	0x11332, 0x11333,
+	0x11335, 0x11339,
+	0x1133c, 0x11344,
+	0x11347, 0x11348,
+	0x1134b, 0x1134d,
+	0x11350, 0x11350,
+	0x11357, 0x11357,
+	0x1135d, 0x11363,
+	0x11366, 0x1136c,
+	0x11370, 0x11374,
+	0x11400, 0x11459,
+	0x1145b, 0x1145b,
+	0x1145d, 0x1145d,
+	0x11480, 0x114c7,
+	0x114d0, 0x114d9,
+	0x11580, 0x115b5,
+	0x115b8, 0x115dd,
+	0x11600, 0x11644,
+	0x11650, 0x11659,
+	0x11660, 0x1166c,
+	0x11680, 0x116b7,
+	0x116c0, 0x116c9,
+	0x11700, 0x11719,
+	0x1171d, 0x1172b,
+	0x11730, 0x1173f,
+	0x118a0, 0x118f2,
+	0x118ff, 0x118ff,
+	0x11ac0, 0x11af8,
+	0x11c00, 0x11c08,
+	0x11c0a, 0x11c36,
+	0x11c38, 0x11c45,
+	0x11c50, 0x11c6c,
+	0x11c70, 0x11c8f,
+	0x11c92, 0x11ca7,
+	0x11ca9, 0x11cb6,
+	0x12000, 0x12399,
+	0x12400, 0x1246e,
+	0x12470, 0x12474,
+	0x12480, 0x12543,
+	0x13000, 0x1342e,
+	0x14400, 0x14646,
+	0x16800, 0x16a38,
+	0x16a40, 0x16a5e,
+	0x16a60, 0x16a69,
+	0x16a6e, 0x16a6f,
+	0x16ad0, 0x16aed,
+	0x16af0, 0x16af5,
+	0x16b00, 0x16b45,
+	0x16b50, 0x16b59,
+	0x16b5b, 0x16b61,
+	0x16b63, 0x16b77,
+	0x16b7d, 0x16b8f,
+	0x16f00, 0x16f44,
+	0x16f50, 0x16f7e,
+	0x16f8f, 0x16f9f,
+	0x16fe0, 0x16fe0,
+	0x17000, 0x187ec,
+	0x18800, 0x18af2,
+	0x1b000, 0x1b001,
+	0x1bc00, 0x1bc6a,
+	0x1bc70, 0x1bc7c,
+	0x1bc80, 0x1bc88,
+	0x1bc90, 0x1bc99,
+	0x1bc9c, 0x1bca3,
+	0x1d000, 0x1d0f5,
+	0x1d100, 0x1d126,
+	0x1d129, 0x1d1e8,
+	0x1d200, 0x1d245,
+	0x1d300, 0x1d356,
+	0x1d360, 0x1d371,
+	0x1d400, 0x1d454,
+	0x1d456, 0x1d49c,
+	0x1d49e, 0x1d49f,
+	0x1d4a2, 0x1d4a2,
+	0x1d4a5, 0x1d4a6,
+	0x1d4a9, 0x1d4ac,
+	0x1d4ae, 0x1d4b9,
+	0x1d4bb, 0x1d4bb,
+	0x1d4bd, 0x1d4c3,
+	0x1d4c5, 0x1d505,
+	0x1d507, 0x1d50a,
+	0x1d50d, 0x1d514,
+	0x1d516, 0x1d51c,
+	0x1d51e, 0x1d539,
+	0x1d53b, 0x1d53e,
+	0x1d540, 0x1d544,
+	0x1d546, 0x1d546,
+	0x1d54a, 0x1d550,
+	0x1d552, 0x1d6a5,
+	0x1d6a8, 0x1d7cb,
+	0x1d7ce, 0x1da8b,
+	0x1da9b, 0x1da9f,
+	0x1daa1, 0x1daaf,
+	0x1e000, 0x1e006,
+	0x1e008, 0x1e018,
+	0x1e01b, 0x1e021,
+	0x1e023, 0x1e024,
+	0x1e026, 0x1e02a,
+	0x1e800, 0x1e8c4,
+	0x1e8c7, 0x1e8d6,
+	0x1e900, 0x1e94a,
+	0x1e950, 0x1e959,
+	0x1e95e, 0x1e95f,
+	0x1ee00, 0x1ee03,
+	0x1ee05, 0x1ee1f,
+	0x1ee21, 0x1ee22,
+	0x1ee24, 0x1ee24,
+	0x1ee27, 0x1ee27,
+	0x1ee29, 0x1ee32,
+	0x1ee34, 0x1ee37,
+	0x1ee39, 0x1ee39,
+	0x1ee3b, 0x1ee3b,
+	0x1ee42, 0x1ee42,
+	0x1ee47, 0x1ee47,
+	0x1ee49, 0x1ee49,
+	0x1ee4b, 0x1ee4b,
+	0x1ee4d, 0x1ee4f,
+	0x1ee51, 0x1ee52,
+	0x1ee54, 0x1ee54,
+	0x1ee57, 0x1ee57,
+	0x1ee59, 0x1ee59,
+	0x1ee5b, 0x1ee5b,
+	0x1ee5d, 0x1ee5d,
+	0x1ee5f, 0x1ee5f,
+	0x1ee61, 0x1ee62,
+	0x1ee64, 0x1ee64,
+	0x1ee67, 0x1ee6a,
+	0x1ee6c, 0x1ee72,
+	0x1ee74, 0x1ee77,
+	0x1ee79, 0x1ee7c,
+	0x1ee7e, 0x1ee7e,
+	0x1ee80, 0x1ee89,
+	0x1ee8b, 0x1ee9b,
+	0x1eea1, 0x1eea3,
+	0x1eea5, 0x1eea9,
+	0x1eeab, 0x1eebb,
+	0x1eef0, 0x1eef1,
+	0x1f000, 0x1f02b,
+	0x1f030, 0x1f093,
+	0x1f0a0, 0x1f0ae,
+	0x1f0b1, 0x1f0bf,
+	0x1f0c1, 0x1f0cf,
+	0x1f0d1, 0x1f0f5,
+	0x1f100, 0x1f10c,
+	0x1f110, 0x1f12e,
+	0x1f130, 0x1f16b,
+	0x1f170, 0x1f1ac,
+	0x1f1e6, 0x1f202,
+	0x1f210, 0x1f23b,
+	0x1f240, 0x1f248,
+	0x1f250, 0x1f251,
+	0x1f300, 0x1f6d2,
+	0x1f6e0, 0x1f6ec,
+	0x1f6f0, 0x1f6f6,
+	0x1f700, 0x1f773,
+	0x1f780, 0x1f7d4,
+	0x1f800, 0x1f80b,
+	0x1f810, 0x1f847,
+	0x1f850, 0x1f859,
+	0x1f860, 0x1f887,
+	0x1f890, 0x1f8ad,
+	0x1f910, 0x1f91e,
+	0x1f920, 0x1f927,
+	0x1f930, 0x1f930,
+	0x1f933, 0x1f93e,
+	0x1f940, 0x1f94b,
+	0x1f950, 0x1f95e,
+	0x1f980, 0x1f991,
+	0x1f9c0, 0x1f9c0,
+	0x1fffe, 0x2a6d6,
+	0x2a700, 0x2b734,
+	0x2b740, 0x2b81d,
+	0x2b820, 0x2cea1,
+	0x2f800, 0x2fa1d,
+	0x2fffe, 0x2ffff,
+	0x3fffe, 0x3ffff,
+	0x4fffe, 0x4ffff,
+	0x5fffe, 0x5ffff,
+	0x6fffe, 0x6ffff,
+	0x7fffe, 0x7ffff,
+	0x8fffe, 0x8ffff,
+	0x9fffe, 0x9ffff,
+	0xafffe, 0xaffff,
+	0xbfffe, 0xbffff,
+	0xcfffe, 0xcffff,
+	0xdfffe, 0xdffff,
+	0xe0001, 0xe0001,
+	0xe0020, 0xe007f,
+	0xe0100, 0xe01ef,
+	0xefffe, 0x10ffff,
+}; /* CR_Age_9_0 */
+
+/* 'Age_10_0': Derived Age 10.0 */
+static const OnigCodePoint CR_Age_10_0[] = {
+	659,
+	0x0000, 0x0377,
+	0x037a, 0x037f,
+	0x0384, 0x038a,
+	0x038c, 0x038c,
+	0x038e, 0x03a1,
+	0x03a3, 0x052f,
+	0x0531, 0x0556,
+	0x0559, 0x055f,
+	0x0561, 0x0587,
+	0x0589, 0x058a,
+	0x058d, 0x058f,
+	0x0591, 0x05c7,
+	0x05d0, 0x05ea,
+	0x05f0, 0x05f4,
+	0x0600, 0x061c,
+	0x061e, 0x070d,
+	0x070f, 0x074a,
+	0x074d, 0x07b1,
+	0x07c0, 0x07fa,
+	0x0800, 0x082d,
+	0x0830, 0x083e,
+	0x0840, 0x085b,
+	0x085e, 0x085e,
+	0x0860, 0x086a,
+	0x08a0, 0x08b4,
+	0x08b6, 0x08bd,
+	0x08d4, 0x0983,
+	0x0985, 0x098c,
+	0x098f, 0x0990,
+	0x0993, 0x09a8,
+	0x09aa, 0x09b0,
+	0x09b2, 0x09b2,
+	0x09b6, 0x09b9,
+	0x09bc, 0x09c4,
+	0x09c7, 0x09c8,
+	0x09cb, 0x09ce,
+	0x09d7, 0x09d7,
+	0x09dc, 0x09dd,
+	0x09df, 0x09e3,
+	0x09e6, 0x09fd,
+	0x0a01, 0x0a03,
+	0x0a05, 0x0a0a,
+	0x0a0f, 0x0a10,
+	0x0a13, 0x0a28,
+	0x0a2a, 0x0a30,
+	0x0a32, 0x0a33,
+	0x0a35, 0x0a36,
+	0x0a38, 0x0a39,
+	0x0a3c, 0x0a3c,
+	0x0a3e, 0x0a42,
+	0x0a47, 0x0a48,
+	0x0a4b, 0x0a4d,
+	0x0a51, 0x0a51,
+	0x0a59, 0x0a5c,
+	0x0a5e, 0x0a5e,
+	0x0a66, 0x0a75,
+	0x0a81, 0x0a83,
+	0x0a85, 0x0a8d,
+	0x0a8f, 0x0a91,
+	0x0a93, 0x0aa8,
+	0x0aaa, 0x0ab0,
+	0x0ab2, 0x0ab3,
+	0x0ab5, 0x0ab9,
+	0x0abc, 0x0ac5,
+	0x0ac7, 0x0ac9,
+	0x0acb, 0x0acd,
+	0x0ad0, 0x0ad0,
+	0x0ae0, 0x0ae3,
+	0x0ae6, 0x0af1,
+	0x0af9, 0x0aff,
+	0x0b01, 0x0b03,
+	0x0b05, 0x0b0c,
+	0x0b0f, 0x0b10,
+	0x0b13, 0x0b28,
+	0x0b2a, 0x0b30,
+	0x0b32, 0x0b33,
+	0x0b35, 0x0b39,
+	0x0b3c, 0x0b44,
+	0x0b47, 0x0b48,
+	0x0b4b, 0x0b4d,
+	0x0b56, 0x0b57,
+	0x0b5c, 0x0b5d,
+	0x0b5f, 0x0b63,
+	0x0b66, 0x0b77,
+	0x0b82, 0x0b83,
+	0x0b85, 0x0b8a,
+	0x0b8e, 0x0b90,
+	0x0b92, 0x0b95,
+	0x0b99, 0x0b9a,
+	0x0b9c, 0x0b9c,
+	0x0b9e, 0x0b9f,
+	0x0ba3, 0x0ba4,
+	0x0ba8, 0x0baa,
+	0x0bae, 0x0bb9,
+	0x0bbe, 0x0bc2,
+	0x0bc6, 0x0bc8,
+	0x0bca, 0x0bcd,
+	0x0bd0, 0x0bd0,
+	0x0bd7, 0x0bd7,
+	0x0be6, 0x0bfa,
+	0x0c00, 0x0c03,
+	0x0c05, 0x0c0c,
+	0x0c0e, 0x0c10,
+	0x0c12, 0x0c28,
+	0x0c2a, 0x0c39,
+	0x0c3d, 0x0c44,
+	0x0c46, 0x0c48,
+	0x0c4a, 0x0c4d,
+	0x0c55, 0x0c56,
+	0x0c58, 0x0c5a,
+	0x0c60, 0x0c63,
+	0x0c66, 0x0c6f,
+	0x0c78, 0x0c83,
+	0x0c85, 0x0c8c,
+	0x0c8e, 0x0c90,
+	0x0c92, 0x0ca8,
+	0x0caa, 0x0cb3,
+	0x0cb5, 0x0cb9,
+	0x0cbc, 0x0cc4,
+	0x0cc6, 0x0cc8,
+	0x0cca, 0x0ccd,
+	0x0cd5, 0x0cd6,
+	0x0cde, 0x0cde,
+	0x0ce0, 0x0ce3,
+	0x0ce6, 0x0cef,
+	0x0cf1, 0x0cf2,
+	0x0d00, 0x0d03,
+	0x0d05, 0x0d0c,
+	0x0d0e, 0x0d10,
+	0x0d12, 0x0d44,
+	0x0d46, 0x0d48,
+	0x0d4a, 0x0d4f,
+	0x0d54, 0x0d63,
+	0x0d66, 0x0d7f,
+	0x0d82, 0x0d83,
+	0x0d85, 0x0d96,
+	0x0d9a, 0x0db1,
+	0x0db3, 0x0dbb,
+	0x0dbd, 0x0dbd,
+	0x0dc0, 0x0dc6,
+	0x0dca, 0x0dca,
+	0x0dcf, 0x0dd4,
+	0x0dd6, 0x0dd6,
+	0x0dd8, 0x0ddf,
+	0x0de6, 0x0def,
+	0x0df2, 0x0df4,
+	0x0e01, 0x0e3a,
+	0x0e3f, 0x0e5b,
+	0x0e81, 0x0e82,
+	0x0e84, 0x0e84,
+	0x0e87, 0x0e88,
+	0x0e8a, 0x0e8a,
+	0x0e8d, 0x0e8d,
+	0x0e94, 0x0e97,
+	0x0e99, 0x0e9f,
+	0x0ea1, 0x0ea3,
+	0x0ea5, 0x0ea5,
+	0x0ea7, 0x0ea7,
+	0x0eaa, 0x0eab,
+	0x0ead, 0x0eb9,
+	0x0ebb, 0x0ebd,
+	0x0ec0, 0x0ec4,
+	0x0ec6, 0x0ec6,
+	0x0ec8, 0x0ecd,
+	0x0ed0, 0x0ed9,
+	0x0edc, 0x0edf,
+	0x0f00, 0x0f47,
+	0x0f49, 0x0f6c,
+	0x0f71, 0x0f97,
+	0x0f99, 0x0fbc,
+	0x0fbe, 0x0fcc,
+	0x0fce, 0x0fda,
+	0x1000, 0x10c5,
+	0x10c7, 0x10c7,
+	0x10cd, 0x10cd,
+	0x10d0, 0x1248,
+	0x124a, 0x124d,
+	0x1250, 0x1256,
+	0x1258, 0x1258,
+	0x125a, 0x125d,
+	0x1260, 0x1288,
+	0x128a, 0x128d,
+	0x1290, 0x12b0,
+	0x12b2, 0x12b5,
+	0x12b8, 0x12be,
+	0x12c0, 0x12c0,
+	0x12c2, 0x12c5,
+	0x12c8, 0x12d6,
+	0x12d8, 0x1310,
+	0x1312, 0x1315,
+	0x1318, 0x135a,
+	0x135d, 0x137c,
+	0x1380, 0x1399,
+	0x13a0, 0x13f5,
+	0x13f8, 0x13fd,
+	0x1400, 0x169c,
+	0x16a0, 0x16f8,
+	0x1700, 0x170c,
+	0x170e, 0x1714,
+	0x1720, 0x1736,
+	0x1740, 0x1753,
+	0x1760, 0x176c,
+	0x176e, 0x1770,
+	0x1772, 0x1773,
+	0x1780, 0x17dd,
+	0x17e0, 0x17e9,
+	0x17f0, 0x17f9,
+	0x1800, 0x180e,
+	0x1810, 0x1819,
+	0x1820, 0x1877,
+	0x1880, 0x18aa,
+	0x18b0, 0x18f5,
+	0x1900, 0x191e,
+	0x1920, 0x192b,
+	0x1930, 0x193b,
+	0x1940, 0x1940,
+	0x1944, 0x196d,
+	0x1970, 0x1974,
+	0x1980, 0x19ab,
+	0x19b0, 0x19c9,
+	0x19d0, 0x19da,
+	0x19de, 0x1a1b,
+	0x1a1e, 0x1a5e,
+	0x1a60, 0x1a7c,
+	0x1a7f, 0x1a89,
+	0x1a90, 0x1a99,
+	0x1aa0, 0x1aad,
+	0x1ab0, 0x1abe,
+	0x1b00, 0x1b4b,
+	0x1b50, 0x1b7c,
+	0x1b80, 0x1bf3,
+	0x1bfc, 0x1c37,
+	0x1c3b, 0x1c49,
+	0x1c4d, 0x1c88,
+	0x1cc0, 0x1cc7,
+	0x1cd0, 0x1cf9,
+	0x1d00, 0x1df9,
+	0x1dfb, 0x1f15,
+	0x1f18, 0x1f1d,
+	0x1f20, 0x1f45,
+	0x1f48, 0x1f4d,
+	0x1f50, 0x1f57,
+	0x1f59, 0x1f59,
+	0x1f5b, 0x1f5b,
+	0x1f5d, 0x1f5d,
+	0x1f5f, 0x1f7d,
+	0x1f80, 0x1fb4,
+	0x1fb6, 0x1fc4,
+	0x1fc6, 0x1fd3,
+	0x1fd6, 0x1fdb,
+	0x1fdd, 0x1fef,
+	0x1ff2, 0x1ff4,
+	0x1ff6, 0x1ffe,
+	0x2000, 0x2064,
+	0x2066, 0x2071,
+	0x2074, 0x208e,
+	0x2090, 0x209c,
+	0x20a0, 0x20bf,
+	0x20d0, 0x20f0,
+	0x2100, 0x218b,
+	0x2190, 0x2426,
+	0x2440, 0x244a,
+	0x2460, 0x2b73,
+	0x2b76, 0x2b95,
+	0x2b98, 0x2bb9,
+	0x2bbd, 0x2bc8,
+	0x2bca, 0x2bd2,
+	0x2bec, 0x2bef,
+	0x2c00, 0x2c2e,
+	0x2c30, 0x2c5e,
+	0x2c60, 0x2cf3,
+	0x2cf9, 0x2d25,
+	0x2d27, 0x2d27,
+	0x2d2d, 0x2d2d,
+	0x2d30, 0x2d67,
+	0x2d6f, 0x2d70,
+	0x2d7f, 0x2d96,
+	0x2da0, 0x2da6,
+	0x2da8, 0x2dae,
+	0x2db0, 0x2db6,
+	0x2db8, 0x2dbe,
+	0x2dc0, 0x2dc6,
+	0x2dc8, 0x2dce,
+	0x2dd0, 0x2dd6,
+	0x2dd8, 0x2dde,
+	0x2de0, 0x2e49,
+	0x2e80, 0x2e99,
+	0x2e9b, 0x2ef3,
+	0x2f00, 0x2fd5,
+	0x2ff0, 0x2ffb,
+	0x3000, 0x303f,
+	0x3041, 0x3096,
+	0x3099, 0x30ff,
+	0x3105, 0x312e,
+	0x3131, 0x318e,
+	0x3190, 0x31ba,
+	0x31c0, 0x31e3,
+	0x31f0, 0x321e,
+	0x3220, 0x32fe,
+	0x3300, 0x4db5,
+	0x4dc0, 0x9fea,
+	0xa000, 0xa48c,
+	0xa490, 0xa4c6,
+	0xa4d0, 0xa62b,
+	0xa640, 0xa6f7,
+	0xa700, 0xa7ae,
+	0xa7b0, 0xa7b7,
+	0xa7f7, 0xa82b,
+	0xa830, 0xa839,
+	0xa840, 0xa877,
+	0xa880, 0xa8c5,
+	0xa8ce, 0xa8d9,
+	0xa8e0, 0xa8fd,
+	0xa900, 0xa953,
+	0xa95f, 0xa97c,
+	0xa980, 0xa9cd,
+	0xa9cf, 0xa9d9,
+	0xa9de, 0xa9fe,
+	0xaa00, 0xaa36,
+	0xaa40, 0xaa4d,
+	0xaa50, 0xaa59,
+	0xaa5c, 0xaac2,
+	0xaadb, 0xaaf6,
+	0xab01, 0xab06,
+	0xab09, 0xab0e,
+	0xab11, 0xab16,
+	0xab20, 0xab26,
+	0xab28, 0xab2e,
+	0xab30, 0xab65,
+	0xab70, 0xabed,
+	0xabf0, 0xabf9,
+	0xac00, 0xd7a3,
+	0xd7b0, 0xd7c6,
+	0xd7cb, 0xd7fb,
+	0xd800, 0xfa6d,
+	0xfa70, 0xfad9,
+	0xfb00, 0xfb06,
+	0xfb13, 0xfb17,
+	0xfb1d, 0xfb36,
+	0xfb38, 0xfb3c,
+	0xfb3e, 0xfb3e,
+	0xfb40, 0xfb41,
+	0xfb43, 0xfb44,
+	0xfb46, 0xfbc1,
+	0xfbd3, 0xfd3f,
+	0xfd50, 0xfd8f,
+	0xfd92, 0xfdc7,
+	0xfdd0, 0xfdfd,
+	0xfe00, 0xfe19,
+	0xfe20, 0xfe52,
+	0xfe54, 0xfe66,
+	0xfe68, 0xfe6b,
+	0xfe70, 0xfe74,
+	0xfe76, 0xfefc,
+	0xfeff, 0xfeff,
+	0xff01, 0xffbe,
+	0xffc2, 0xffc7,
+	0xffca, 0xffcf,
+	0xffd2, 0xffd7,
+	0xffda, 0xffdc,
+	0xffe0, 0xffe6,
+	0xffe8, 0xffee,
+	0xfff9, 0x1000b,
+	0x1000d, 0x10026,
+	0x10028, 0x1003a,
+	0x1003c, 0x1003d,
+	0x1003f, 0x1004d,
+	0x10050, 0x1005d,
+	0x10080, 0x100fa,
+	0x10100, 0x10102,
+	0x10107, 0x10133,
+	0x10137, 0x1018e,
+	0x10190, 0x1019b,
+	0x101a0, 0x101a0,
+	0x101d0, 0x101fd,
+	0x10280, 0x1029c,
+	0x102a0, 0x102d0,
+	0x102e0, 0x102fb,
+	0x10300, 0x10323,
+	0x1032d, 0x1034a,
+	0x10350, 0x1037a,
+	0x10380, 0x1039d,
+	0x1039f, 0x103c3,
+	0x103c8, 0x103d5,
+	0x10400, 0x1049d,
+	0x104a0, 0x104a9,
+	0x104b0, 0x104d3,
+	0x104d8, 0x104fb,
+	0x10500, 0x10527,
+	0x10530, 0x10563,
+	0x1056f, 0x1056f,
+	0x10600, 0x10736,
+	0x10740, 0x10755,
+	0x10760, 0x10767,
+	0x10800, 0x10805,
+	0x10808, 0x10808,
+	0x1080a, 0x10835,
+	0x10837, 0x10838,
+	0x1083c, 0x1083c,
+	0x1083f, 0x10855,
+	0x10857, 0x1089e,
+	0x108a7, 0x108af,
+	0x108e0, 0x108f2,
+	0x108f4, 0x108f5,
+	0x108fb, 0x1091b,
+	0x1091f, 0x10939,
+	0x1093f, 0x1093f,
+	0x10980, 0x109b7,
+	0x109bc, 0x109cf,
+	0x109d2, 0x10a03,
+	0x10a05, 0x10a06,
+	0x10a0c, 0x10a13,
+	0x10a15, 0x10a17,
+	0x10a19, 0x10a33,
+	0x10a38, 0x10a3a,
+	0x10a3f, 0x10a47,
+	0x10a50, 0x10a58,
+	0x10a60, 0x10a9f,
+	0x10ac0, 0x10ae6,
+	0x10aeb, 0x10af6,
+	0x10b00, 0x10b35,
+	0x10b39, 0x10b55,
+	0x10b58, 0x10b72,
+	0x10b78, 0x10b91,
+	0x10b99, 0x10b9c,
+	0x10ba9, 0x10baf,
+	0x10c00, 0x10c48,
+	0x10c80, 0x10cb2,
+	0x10cc0, 0x10cf2,
+	0x10cfa, 0x10cff,
+	0x10e60, 0x10e7e,
+	0x11000, 0x1104d,
+	0x11052, 0x1106f,
+	0x1107f, 0x110c1,
+	0x110d0, 0x110e8,
+	0x110f0, 0x110f9,
+	0x11100, 0x11134,
+	0x11136, 0x11143,
+	0x11150, 0x11176,
+	0x11180, 0x111cd,
+	0x111d0, 0x111df,
+	0x111e1, 0x111f4,
+	0x11200, 0x11211,
+	0x11213, 0x1123e,
+	0x11280, 0x11286,
+	0x11288, 0x11288,
+	0x1128a, 0x1128d,
+	0x1128f, 0x1129d,
+	0x1129f, 0x112a9,
+	0x112b0, 0x112ea,
+	0x112f0, 0x112f9,
+	0x11300, 0x11303,
+	0x11305, 0x1130c,
+	0x1130f, 0x11310,
+	0x11313, 0x11328,
+	0x1132a, 0x11330,
+	0x11332, 0x11333,
+	0x11335, 0x11339,
+	0x1133c, 0x11344,
+	0x11347, 0x11348,
+	0x1134b, 0x1134d,
+	0x11350, 0x11350,
+	0x11357, 0x11357,
+	0x1135d, 0x11363,
+	0x11366, 0x1136c,
+	0x11370, 0x11374,
+	0x11400, 0x11459,
+	0x1145b, 0x1145b,
+	0x1145d, 0x1145d,
+	0x11480, 0x114c7,
+	0x114d0, 0x114d9,
+	0x11580, 0x115b5,
+	0x115b8, 0x115dd,
+	0x11600, 0x11644,
+	0x11650, 0x11659,
+	0x11660, 0x1166c,
+	0x11680, 0x116b7,
+	0x116c0, 0x116c9,
+	0x11700, 0x11719,
+	0x1171d, 0x1172b,
+	0x11730, 0x1173f,
+	0x118a0, 0x118f2,
+	0x118ff, 0x118ff,
+	0x11a00, 0x11a47,
+	0x11a50, 0x11a83,
+	0x11a86, 0x11a9c,
+	0x11a9e, 0x11aa2,
+	0x11ac0, 0x11af8,
+	0x11c00, 0x11c08,
+	0x11c0a, 0x11c36,
+	0x11c38, 0x11c45,
+	0x11c50, 0x11c6c,
+	0x11c70, 0x11c8f,
+	0x11c92, 0x11ca7,
+	0x11ca9, 0x11cb6,
+	0x11d00, 0x11d06,
+	0x11d08, 0x11d09,
+	0x11d0b, 0x11d36,
+	0x11d3a, 0x11d3a,
+	0x11d3c, 0x11d3d,
+	0x11d3f, 0x11d47,
+	0x11d50, 0x11d59,
+	0x12000, 0x12399,
+	0x12400, 0x1246e,
+	0x12470, 0x12474,
+	0x12480, 0x12543,
+	0x13000, 0x1342e,
+	0x14400, 0x14646,
+	0x16800, 0x16a38,
+	0x16a40, 0x16a5e,
+	0x16a60, 0x16a69,
+	0x16a6e, 0x16a6f,
+	0x16ad0, 0x16aed,
+	0x16af0, 0x16af5,
+	0x16b00, 0x16b45,
+	0x16b50, 0x16b59,
+	0x16b5b, 0x16b61,
+	0x16b63, 0x16b77,
+	0x16b7d, 0x16b8f,
+	0x16f00, 0x16f44,
+	0x16f50, 0x16f7e,
+	0x16f8f, 0x16f9f,
+	0x16fe0, 0x16fe1,
+	0x17000, 0x187ec,
+	0x18800, 0x18af2,
+	0x1b000, 0x1b11e,
+	0x1b170, 0x1b2fb,
+	0x1bc00, 0x1bc6a,
+	0x1bc70, 0x1bc7c,
+	0x1bc80, 0x1bc88,
+	0x1bc90, 0x1bc99,
+	0x1bc9c, 0x1bca3,
+	0x1d000, 0x1d0f5,
+	0x1d100, 0x1d126,
+	0x1d129, 0x1d1e8,
+	0x1d200, 0x1d245,
+	0x1d300, 0x1d356,
+	0x1d360, 0x1d371,
+	0x1d400, 0x1d454,
+	0x1d456, 0x1d49c,
+	0x1d49e, 0x1d49f,
+	0x1d4a2, 0x1d4a2,
+	0x1d4a5, 0x1d4a6,
+	0x1d4a9, 0x1d4ac,
+	0x1d4ae, 0x1d4b9,
+	0x1d4bb, 0x1d4bb,
+	0x1d4bd, 0x1d4c3,
+	0x1d4c5, 0x1d505,
+	0x1d507, 0x1d50a,
+	0x1d50d, 0x1d514,
+	0x1d516, 0x1d51c,
+	0x1d51e, 0x1d539,
+	0x1d53b, 0x1d53e,
+	0x1d540, 0x1d544,
+	0x1d546, 0x1d546,
+	0x1d54a, 0x1d550,
+	0x1d552, 0x1d6a5,
+	0x1d6a8, 0x1d7cb,
+	0x1d7ce, 0x1da8b,
+	0x1da9b, 0x1da9f,
+	0x1daa1, 0x1daaf,
+	0x1e000, 0x1e006,
+	0x1e008, 0x1e018,
+	0x1e01b, 0x1e021,
+	0x1e023, 0x1e024,
+	0x1e026, 0x1e02a,
+	0x1e800, 0x1e8c4,
+	0x1e8c7, 0x1e8d6,
+	0x1e900, 0x1e94a,
+	0x1e950, 0x1e959,
+	0x1e95e, 0x1e95f,
+	0x1ee00, 0x1ee03,
+	0x1ee05, 0x1ee1f,
+	0x1ee21, 0x1ee22,
+	0x1ee24, 0x1ee24,
+	0x1ee27, 0x1ee27,
+	0x1ee29, 0x1ee32,
+	0x1ee34, 0x1ee37,
+	0x1ee39, 0x1ee39,
+	0x1ee3b, 0x1ee3b,
+	0x1ee42, 0x1ee42,
+	0x1ee47, 0x1ee47,
+	0x1ee49, 0x1ee49,
+	0x1ee4b, 0x1ee4b,
+	0x1ee4d, 0x1ee4f,
+	0x1ee51, 0x1ee52,
+	0x1ee54, 0x1ee54,
+	0x1ee57, 0x1ee57,
+	0x1ee59, 0x1ee59,
+	0x1ee5b, 0x1ee5b,
+	0x1ee5d, 0x1ee5d,
+	0x1ee5f, 0x1ee5f,
+	0x1ee61, 0x1ee62,
+	0x1ee64, 0x1ee64,
+	0x1ee67, 0x1ee6a,
+	0x1ee6c, 0x1ee72,
+	0x1ee74, 0x1ee77,
+	0x1ee79, 0x1ee7c,
+	0x1ee7e, 0x1ee7e,
+	0x1ee80, 0x1ee89,
+	0x1ee8b, 0x1ee9b,
+	0x1eea1, 0x1eea3,
+	0x1eea5, 0x1eea9,
+	0x1eeab, 0x1eebb,
+	0x1eef0, 0x1eef1,
+	0x1f000, 0x1f02b,
+	0x1f030, 0x1f093,
+	0x1f0a0, 0x1f0ae,
+	0x1f0b1, 0x1f0bf,
+	0x1f0c1, 0x1f0cf,
+	0x1f0d1, 0x1f0f5,
+	0x1f100, 0x1f10c,
+	0x1f110, 0x1f12e,
+	0x1f130, 0x1f16b,
+	0x1f170, 0x1f1ac,
+	0x1f1e6, 0x1f202,
+	0x1f210, 0x1f23b,
+	0x1f240, 0x1f248,
+	0x1f250, 0x1f251,
+	0x1f260, 0x1f265,
+	0x1f300, 0x1f6d4,
+	0x1f6e0, 0x1f6ec,
+	0x1f6f0, 0x1f6f8,
+	0x1f700, 0x1f773,
+	0x1f780, 0x1f7d4,
+	0x1f800, 0x1f80b,
+	0x1f810, 0x1f847,
+	0x1f850, 0x1f859,
+	0x1f860, 0x1f887,
+	0x1f890, 0x1f8ad,
+	0x1f900, 0x1f90b,
+	0x1f910, 0x1f93e,
+	0x1f940, 0x1f94c,
+	0x1f950, 0x1f96b,
+	0x1f980, 0x1f997,
+	0x1f9c0, 0x1f9c0,
+	0x1f9d0, 0x1f9e6,
+	0x1fffe, 0x2a6d6,
+	0x2a700, 0x2b734,
+	0x2b740, 0x2b81d,
+	0x2b820, 0x2cea1,
+	0x2ceb0, 0x2ebe0,
+	0x2f800, 0x2fa1d,
+	0x2fffe, 0x2ffff,
+	0x3fffe, 0x3ffff,
+	0x4fffe, 0x4ffff,
+	0x5fffe, 0x5ffff,
+	0x6fffe, 0x6ffff,
+	0x7fffe, 0x7ffff,
+	0x8fffe, 0x8ffff,
+	0x9fffe, 0x9ffff,
+	0xafffe, 0xaffff,
+	0xbfffe, 0xbffff,
+	0xcfffe, 0xcffff,
+	0xdfffe, 0xdffff,
+	0xe0001, 0xe0001,
+	0xe0020, 0xe007f,
+	0xe0100, 0xe01ef,
+	0xefffe, 0x10ffff,
+}; /* CR_Age_10_0 */
+
 #endif /* USE_UNICODE_AGE_PROPERTIES */
+/* 'Grapheme_Cluster_Break_Prepend': Grapheme_Cluster_Break=Prepend */
+static const OnigCodePoint CR_Grapheme_Cluster_Break_Prepend[] = {
+	10,
+	0x0600, 0x0605,
+	0x06dd, 0x06dd,
+	0x070f, 0x070f,
+	0x08e2, 0x08e2,
+	0x0d4e, 0x0d4e,
+	0x110bd, 0x110bd,
+	0x111c2, 0x111c3,
+	0x11a3a, 0x11a3a,
+	0x11a86, 0x11a89,
+	0x11d46, 0x11d46,
+}; /* CR_Grapheme_Cluster_Break_Prepend */
+
+/* 'Grapheme_Cluster_Break_CR': Grapheme_Cluster_Break=CR */
+static const OnigCodePoint CR_Grapheme_Cluster_Break_CR[] = {
+	1,
+	0x000d, 0x000d,
+}; /* CR_Grapheme_Cluster_Break_CR */
+
+/* 'Grapheme_Cluster_Break_LF': Grapheme_Cluster_Break=LF */
+#define CR_Grapheme_Cluster_Break_LF CR_NEWLINE
+
+/* 'Grapheme_Cluster_Break_Control': Grapheme_Cluster_Break=Control */
+static const OnigCodePoint CR_Grapheme_Cluster_Break_Control[] = {
+	19,
+	0x0000, 0x0009,
+	0x000b, 0x000c,
+	0x000e, 0x001f,
+	0x007f, 0x009f,
+	0x00ad, 0x00ad,
+	0x061c, 0x061c,
+	0x180e, 0x180e,
+	0x200b, 0x200b,
+	0x200e, 0x200f,
+	0x2028, 0x202e,
+	0x2060, 0x206f,
+	0xd800, 0xdfff,
+	0xfeff, 0xfeff,
+	0xfff0, 0xfffb,
+	0x1bca0, 0x1bca3,
+	0x1d173, 0x1d17a,
+	0xe0000, 0xe001f,
+	0xe0080, 0xe00ff,
+	0xe01f0, 0xe0fff,
+}; /* CR_Grapheme_Cluster_Break_Control */
+
+/* 'Grapheme_Cluster_Break_Extend': Grapheme_Cluster_Break=Extend */
+#define CR_Grapheme_Cluster_Break_Extend CR_Grapheme_Extend
+
+/* 'Grapheme_Cluster_Break_Regional_Indicator': Grapheme_Cluster_Break=Regional_Indicator */
+#define CR_Grapheme_Cluster_Break_Regional_Indicator CR_Regional_Indicator
+
+/* 'Grapheme_Cluster_Break_SpacingMark': Grapheme_Cluster_Break=SpacingMark */
+static const OnigCodePoint CR_Grapheme_Cluster_Break_SpacingMark[] = {
+	145,
+	0x0903, 0x0903,
+	0x093b, 0x093b,
+	0x093e, 0x0940,
+	0x0949, 0x094c,
+	0x094e, 0x094f,
+	0x0982, 0x0983,
+	0x09bf, 0x09c0,
+	0x09c7, 0x09c8,
+	0x09cb, 0x09cc,
+	0x0a03, 0x0a03,
+	0x0a3e, 0x0a40,
+	0x0a83, 0x0a83,
+	0x0abe, 0x0ac0,
+	0x0ac9, 0x0ac9,
+	0x0acb, 0x0acc,
+	0x0b02, 0x0b03,
+	0x0b40, 0x0b40,
+	0x0b47, 0x0b48,
+	0x0b4b, 0x0b4c,
+	0x0bbf, 0x0bbf,
+	0x0bc1, 0x0bc2,
+	0x0bc6, 0x0bc8,
+	0x0bca, 0x0bcc,
+	0x0c01, 0x0c03,
+	0x0c41, 0x0c44,
+	0x0c82, 0x0c83,
+	0x0cbe, 0x0cbe,
+	0x0cc0, 0x0cc1,
+	0x0cc3, 0x0cc4,
+	0x0cc7, 0x0cc8,
+	0x0cca, 0x0ccb,
+	0x0d02, 0x0d03,
+	0x0d3f, 0x0d40,
+	0x0d46, 0x0d48,
+	0x0d4a, 0x0d4c,
+	0x0d82, 0x0d83,
+	0x0dd0, 0x0dd1,
+	0x0dd8, 0x0dde,
+	0x0df2, 0x0df3,
+	0x0e33, 0x0e33,
+	0x0eb3, 0x0eb3,
+	0x0f3e, 0x0f3f,
+	0x0f7f, 0x0f7f,
+	0x1031, 0x1031,
+	0x103b, 0x103c,
+	0x1056, 0x1057,
+	0x1084, 0x1084,
+	0x17b6, 0x17b6,
+	0x17be, 0x17c5,
+	0x17c7, 0x17c8,
+	0x1923, 0x1926,
+	0x1929, 0x192b,
+	0x1930, 0x1931,
+	0x1933, 0x1938,
+	0x1a19, 0x1a1a,
+	0x1a55, 0x1a55,
+	0x1a57, 0x1a57,
+	0x1a6d, 0x1a72,
+	0x1b04, 0x1b04,
+	0x1b35, 0x1b35,
+	0x1b3b, 0x1b3b,
+	0x1b3d, 0x1b41,
+	0x1b43, 0x1b44,
+	0x1b82, 0x1b82,
+	0x1ba1, 0x1ba1,
+	0x1ba6, 0x1ba7,
+	0x1baa, 0x1baa,
+	0x1be7, 0x1be7,
+	0x1bea, 0x1bec,
+	0x1bee, 0x1bee,
+	0x1bf2, 0x1bf3,
+	0x1c24, 0x1c2b,
+	0x1c34, 0x1c35,
+	0x1ce1, 0x1ce1,
+	0x1cf2, 0x1cf3,
+	0x1cf7, 0x1cf7,
+	0xa823, 0xa824,
+	0xa827, 0xa827,
+	0xa880, 0xa881,
+	0xa8b4, 0xa8c3,
+	0xa952, 0xa953,
+	0xa983, 0xa983,
+	0xa9b4, 0xa9b5,
+	0xa9ba, 0xa9bb,
+	0xa9bd, 0xa9c0,
+	0xaa2f, 0xaa30,
+	0xaa33, 0xaa34,
+	0xaa4d, 0xaa4d,
+	0xaaeb, 0xaaeb,
+	0xaaee, 0xaaef,
+	0xaaf5, 0xaaf5,
+	0xabe3, 0xabe4,
+	0xabe6, 0xabe7,
+	0xabe9, 0xabea,
+	0xabec, 0xabec,
+	0x11000, 0x11000,
+	0x11002, 0x11002,
+	0x11082, 0x11082,
+	0x110b0, 0x110b2,
+	0x110b7, 0x110b8,
+	0x1112c, 0x1112c,
+	0x11182, 0x11182,
+	0x111b3, 0x111b5,
+	0x111bf, 0x111c0,
+	0x1122c, 0x1122e,
+	0x11232, 0x11233,
+	0x11235, 0x11235,
+	0x112e0, 0x112e2,
+	0x11302, 0x11303,
+	0x1133f, 0x1133f,
+	0x11341, 0x11344,
+	0x11347, 0x11348,
+	0x1134b, 0x1134d,
+	0x11362, 0x11363,
+	0x11435, 0x11437,
+	0x11440, 0x11441,
+	0x11445, 0x11445,
+	0x114b1, 0x114b2,
+	0x114b9, 0x114b9,
+	0x114bb, 0x114bc,
+	0x114be, 0x114be,
+	0x114c1, 0x114c1,
+	0x115b0, 0x115b1,
+	0x115b8, 0x115bb,
+	0x115be, 0x115be,
+	0x11630, 0x11632,
+	0x1163b, 0x1163c,
+	0x1163e, 0x1163e,
+	0x116ac, 0x116ac,
+	0x116ae, 0x116af,
+	0x116b6, 0x116b6,
+	0x11720, 0x11721,
+	0x11726, 0x11726,
+	0x11a07, 0x11a08,
+	0x11a39, 0x11a39,
+	0x11a57, 0x11a58,
+	0x11a97, 0x11a97,
+	0x11c2f, 0x11c2f,
+	0x11c3e, 0x11c3e,
+	0x11ca9, 0x11ca9,
+	0x11cb1, 0x11cb1,
+	0x11cb4, 0x11cb4,
+	0x16f51, 0x16f7e,
+	0x1d166, 0x1d166,
+	0x1d16d, 0x1d16d,
+}; /* CR_Grapheme_Cluster_Break_SpacingMark */
+
+/* 'Grapheme_Cluster_Break_L': Grapheme_Cluster_Break=L */
+static const OnigCodePoint CR_Grapheme_Cluster_Break_L[] = {
+	2,
+	0x1100, 0x115f,
+	0xa960, 0xa97c,
+}; /* CR_Grapheme_Cluster_Break_L */
+
+/* 'Grapheme_Cluster_Break_V': Grapheme_Cluster_Break=V */
+static const OnigCodePoint CR_Grapheme_Cluster_Break_V[] = {
+	2,
+	0x1160, 0x11a7,
+	0xd7b0, 0xd7c6,
+}; /* CR_Grapheme_Cluster_Break_V */
+
+/* 'Grapheme_Cluster_Break_T': Grapheme_Cluster_Break=T */
+static const OnigCodePoint CR_Grapheme_Cluster_Break_T[] = {
+	2,
+	0x11a8, 0x11ff,
+	0xd7cb, 0xd7fb,
+}; /* CR_Grapheme_Cluster_Break_T */
+
+/* 'Grapheme_Cluster_Break_LV': Grapheme_Cluster_Break=LV */
+static const OnigCodePoint CR_Grapheme_Cluster_Break_LV[] = {
+	399,
+	0xac00, 0xac00,
+	0xac1c, 0xac1c,
+	0xac38, 0xac38,
+	0xac54, 0xac54,
+	0xac70, 0xac70,
+	0xac8c, 0xac8c,
+	0xaca8, 0xaca8,
+	0xacc4, 0xacc4,
+	0xace0, 0xace0,
+	0xacfc, 0xacfc,
+	0xad18, 0xad18,
+	0xad34, 0xad34,
+	0xad50, 0xad50,
+	0xad6c, 0xad6c,
+	0xad88, 0xad88,
+	0xada4, 0xada4,
+	0xadc0, 0xadc0,
+	0xaddc, 0xaddc,
+	0xadf8, 0xadf8,
+	0xae14, 0xae14,
+	0xae30, 0xae30,
+	0xae4c, 0xae4c,
+	0xae68, 0xae68,
+	0xae84, 0xae84,
+	0xaea0, 0xaea0,
+	0xaebc, 0xaebc,
+	0xaed8, 0xaed8,
+	0xaef4, 0xaef4,
+	0xaf10, 0xaf10,
+	0xaf2c, 0xaf2c,
+	0xaf48, 0xaf48,
+	0xaf64, 0xaf64,
+	0xaf80, 0xaf80,
+	0xaf9c, 0xaf9c,
+	0xafb8, 0xafb8,
+	0xafd4, 0xafd4,
+	0xaff0, 0xaff0,
+	0xb00c, 0xb00c,
+	0xb028, 0xb028,
+	0xb044, 0xb044,
+	0xb060, 0xb060,
+	0xb07c, 0xb07c,
+	0xb098, 0xb098,
+	0xb0b4, 0xb0b4,
+	0xb0d0, 0xb0d0,
+	0xb0ec, 0xb0ec,
+	0xb108, 0xb108,
+	0xb124, 0xb124,
+	0xb140, 0xb140,
+	0xb15c, 0xb15c,
+	0xb178, 0xb178,
+	0xb194, 0xb194,
+	0xb1b0, 0xb1b0,
+	0xb1cc, 0xb1cc,
+	0xb1e8, 0xb1e8,
+	0xb204, 0xb204,
+	0xb220, 0xb220,
+	0xb23c, 0xb23c,
+	0xb258, 0xb258,
+	0xb274, 0xb274,
+	0xb290, 0xb290,
+	0xb2ac, 0xb2ac,
+	0xb2c8, 0xb2c8,
+	0xb2e4, 0xb2e4,
+	0xb300, 0xb300,
+	0xb31c, 0xb31c,
+	0xb338, 0xb338,
+	0xb354, 0xb354,
+	0xb370, 0xb370,
+	0xb38c, 0xb38c,
+	0xb3a8, 0xb3a8,
+	0xb3c4, 0xb3c4,
+	0xb3e0, 0xb3e0,
+	0xb3fc, 0xb3fc,
+	0xb418, 0xb418,
+	0xb434, 0xb434,
+	0xb450, 0xb450,
+	0xb46c, 0xb46c,
+	0xb488, 0xb488,
+	0xb4a4, 0xb4a4,
+	0xb4c0, 0xb4c0,
+	0xb4dc, 0xb4dc,
+	0xb4f8, 0xb4f8,
+	0xb514, 0xb514,
+	0xb530, 0xb530,
+	0xb54c, 0xb54c,
+	0xb568, 0xb568,
+	0xb584, 0xb584,
+	0xb5a0, 0xb5a0,
+	0xb5bc, 0xb5bc,
+	0xb5d8, 0xb5d8,
+	0xb5f4, 0xb5f4,
+	0xb610, 0xb610,
+	0xb62c, 0xb62c,
+	0xb648, 0xb648,
+	0xb664, 0xb664,
+	0xb680, 0xb680,
+	0xb69c, 0xb69c,
+	0xb6b8, 0xb6b8,
+	0xb6d4, 0xb6d4,
+	0xb6f0, 0xb6f0,
+	0xb70c, 0xb70c,
+	0xb728, 0xb728,
+	0xb744, 0xb744,
+	0xb760, 0xb760,
+	0xb77c, 0xb77c,
+	0xb798, 0xb798,
+	0xb7b4, 0xb7b4,
+	0xb7d0, 0xb7d0,
+	0xb7ec, 0xb7ec,
+	0xb808, 0xb808,
+	0xb824, 0xb824,
+	0xb840, 0xb840,
+	0xb85c, 0xb85c,
+	0xb878, 0xb878,
+	0xb894, 0xb894,
+	0xb8b0, 0xb8b0,
+	0xb8cc, 0xb8cc,
+	0xb8e8, 0xb8e8,
+	0xb904, 0xb904,
+	0xb920, 0xb920,
+	0xb93c, 0xb93c,
+	0xb958, 0xb958,
+	0xb974, 0xb974,
+	0xb990, 0xb990,
+	0xb9ac, 0xb9ac,
+	0xb9c8, 0xb9c8,
+	0xb9e4, 0xb9e4,
+	0xba00, 0xba00,
+	0xba1c, 0xba1c,
+	0xba38, 0xba38,
+	0xba54, 0xba54,
+	0xba70, 0xba70,
+	0xba8c, 0xba8c,
+	0xbaa8, 0xbaa8,
+	0xbac4, 0xbac4,
+	0xbae0, 0xbae0,
+	0xbafc, 0xbafc,
+	0xbb18, 0xbb18,
+	0xbb34, 0xbb34,
+	0xbb50, 0xbb50,
+	0xbb6c, 0xbb6c,
+	0xbb88, 0xbb88,
+	0xbba4, 0xbba4,
+	0xbbc0, 0xbbc0,
+	0xbbdc, 0xbbdc,
+	0xbbf8, 0xbbf8,
+	0xbc14, 0xbc14,
+	0xbc30, 0xbc30,
+	0xbc4c, 0xbc4c,
+	0xbc68, 0xbc68,
+	0xbc84, 0xbc84,
+	0xbca0, 0xbca0,
+	0xbcbc, 0xbcbc,
+	0xbcd8, 0xbcd8,
+	0xbcf4, 0xbcf4,
+	0xbd10, 0xbd10,
+	0xbd2c, 0xbd2c,
+	0xbd48, 0xbd48,
+	0xbd64, 0xbd64,
+	0xbd80, 0xbd80,
+	0xbd9c, 0xbd9c,
+	0xbdb8, 0xbdb8,
+	0xbdd4, 0xbdd4,
+	0xbdf0, 0xbdf0,
+	0xbe0c, 0xbe0c,
+	0xbe28, 0xbe28,
+	0xbe44, 0xbe44,
+	0xbe60, 0xbe60,
+	0xbe7c, 0xbe7c,
+	0xbe98, 0xbe98,
+	0xbeb4, 0xbeb4,
+	0xbed0, 0xbed0,
+	0xbeec, 0xbeec,
+	0xbf08, 0xbf08,
+	0xbf24, 0xbf24,
+	0xbf40, 0xbf40,
+	0xbf5c, 0xbf5c,
+	0xbf78, 0xbf78,
+	0xbf94, 0xbf94,
+	0xbfb0, 0xbfb0,
+	0xbfcc, 0xbfcc,
+	0xbfe8, 0xbfe8,
+	0xc004, 0xc004,
+	0xc020, 0xc020,
+	0xc03c, 0xc03c,
+	0xc058, 0xc058,
+	0xc074, 0xc074,
+	0xc090, 0xc090,
+	0xc0ac, 0xc0ac,
+	0xc0c8, 0xc0c8,
+	0xc0e4, 0xc0e4,
+	0xc100, 0xc100,
+	0xc11c, 0xc11c,
+	0xc138, 0xc138,
+	0xc154, 0xc154,
+	0xc170, 0xc170,
+	0xc18c, 0xc18c,
+	0xc1a8, 0xc1a8,
+	0xc1c4, 0xc1c4,
+	0xc1e0, 0xc1e0,
+	0xc1fc, 0xc1fc,
+	0xc218, 0xc218,
+	0xc234, 0xc234,
+	0xc250, 0xc250,
+	0xc26c, 0xc26c,
+	0xc288, 0xc288,
+	0xc2a4, 0xc2a4,
+	0xc2c0, 0xc2c0,
+	0xc2dc, 0xc2dc,
+	0xc2f8, 0xc2f8,
+	0xc314, 0xc314,
+	0xc330, 0xc330,
+	0xc34c, 0xc34c,
+	0xc368, 0xc368,
+	0xc384, 0xc384,
+	0xc3a0, 0xc3a0,
+	0xc3bc, 0xc3bc,
+	0xc3d8, 0xc3d8,
+	0xc3f4, 0xc3f4,
+	0xc410, 0xc410,
+	0xc42c, 0xc42c,
+	0xc448, 0xc448,
+	0xc464, 0xc464,
+	0xc480, 0xc480,
+	0xc49c, 0xc49c,
+	0xc4b8, 0xc4b8,
+	0xc4d4, 0xc4d4,
+	0xc4f0, 0xc4f0,
+	0xc50c, 0xc50c,
+	0xc528, 0xc528,
+	0xc544, 0xc544,
+	0xc560, 0xc560,
+	0xc57c, 0xc57c,
+	0xc598, 0xc598,
+	0xc5b4, 0xc5b4,
+	0xc5d0, 0xc5d0,
+	0xc5ec, 0xc5ec,
+	0xc608, 0xc608,
+	0xc624, 0xc624,
+	0xc640, 0xc640,
+	0xc65c, 0xc65c,
+	0xc678, 0xc678,
+	0xc694, 0xc694,
+	0xc6b0, 0xc6b0,
+	0xc6cc, 0xc6cc,
+	0xc6e8, 0xc6e8,
+	0xc704, 0xc704,
+	0xc720, 0xc720,
+	0xc73c, 0xc73c,
+	0xc758, 0xc758,
+	0xc774, 0xc774,
+	0xc790, 0xc790,
+	0xc7ac, 0xc7ac,
+	0xc7c8, 0xc7c8,
+	0xc7e4, 0xc7e4,
+	0xc800, 0xc800,
+	0xc81c, 0xc81c,
+	0xc838, 0xc838,
+	0xc854, 0xc854,
+	0xc870, 0xc870,
+	0xc88c, 0xc88c,
+	0xc8a8, 0xc8a8,
+	0xc8c4, 0xc8c4,
+	0xc8e0, 0xc8e0,
+	0xc8fc, 0xc8fc,
+	0xc918, 0xc918,
+	0xc934, 0xc934,
+	0xc950, 0xc950,
+	0xc96c, 0xc96c,
+	0xc988, 0xc988,
+	0xc9a4, 0xc9a4,
+	0xc9c0, 0xc9c0,
+	0xc9dc, 0xc9dc,
+	0xc9f8, 0xc9f8,
+	0xca14, 0xca14,
+	0xca30, 0xca30,
+	0xca4c, 0xca4c,
+	0xca68, 0xca68,
+	0xca84, 0xca84,
+	0xcaa0, 0xcaa0,
+	0xcabc, 0xcabc,
+	0xcad8, 0xcad8,
+	0xcaf4, 0xcaf4,
+	0xcb10, 0xcb10,
+	0xcb2c, 0xcb2c,
+	0xcb48, 0xcb48,
+	0xcb64, 0xcb64,
+	0xcb80, 0xcb80,
+	0xcb9c, 0xcb9c,
+	0xcbb8, 0xcbb8,
+	0xcbd4, 0xcbd4,
+	0xcbf0, 0xcbf0,
+	0xcc0c, 0xcc0c,
+	0xcc28, 0xcc28,
+	0xcc44, 0xcc44,
+	0xcc60, 0xcc60,
+	0xcc7c, 0xcc7c,
+	0xcc98, 0xcc98,
+	0xccb4, 0xccb4,
+	0xccd0, 0xccd0,
+	0xccec, 0xccec,
+	0xcd08, 0xcd08,
+	0xcd24, 0xcd24,
+	0xcd40, 0xcd40,
+	0xcd5c, 0xcd5c,
+	0xcd78, 0xcd78,
+	0xcd94, 0xcd94,
+	0xcdb0, 0xcdb0,
+	0xcdcc, 0xcdcc,
+	0xcde8, 0xcde8,
+	0xce04, 0xce04,
+	0xce20, 0xce20,
+	0xce3c, 0xce3c,
+	0xce58, 0xce58,
+	0xce74, 0xce74,
+	0xce90, 0xce90,
+	0xceac, 0xceac,
+	0xcec8, 0xcec8,
+	0xcee4, 0xcee4,
+	0xcf00, 0xcf00,
+	0xcf1c, 0xcf1c,
+	0xcf38, 0xcf38,
+	0xcf54, 0xcf54,
+	0xcf70, 0xcf70,
+	0xcf8c, 0xcf8c,
+	0xcfa8, 0xcfa8,
+	0xcfc4, 0xcfc4,
+	0xcfe0, 0xcfe0,
+	0xcffc, 0xcffc,
+	0xd018, 0xd018,
+	0xd034, 0xd034,
+	0xd050, 0xd050,
+	0xd06c, 0xd06c,
+	0xd088, 0xd088,
+	0xd0a4, 0xd0a4,
+	0xd0c0, 0xd0c0,
+	0xd0dc, 0xd0dc,
+	0xd0f8, 0xd0f8,
+	0xd114, 0xd114,
+	0xd130, 0xd130,
+	0xd14c, 0xd14c,
+	0xd168, 0xd168,
+	0xd184, 0xd184,
+	0xd1a0, 0xd1a0,
+	0xd1bc, 0xd1bc,
+	0xd1d8, 0xd1d8,
+	0xd1f4, 0xd1f4,
+	0xd210, 0xd210,
+	0xd22c, 0xd22c,
+	0xd248, 0xd248,
+	0xd264, 0xd264,
+	0xd280, 0xd280,
+	0xd29c, 0xd29c,
+	0xd2b8, 0xd2b8,
+	0xd2d4, 0xd2d4,
+	0xd2f0, 0xd2f0,
+	0xd30c, 0xd30c,
+	0xd328, 0xd328,
+	0xd344, 0xd344,
+	0xd360, 0xd360,
+	0xd37c, 0xd37c,
+	0xd398, 0xd398,
+	0xd3b4, 0xd3b4,
+	0xd3d0, 0xd3d0,
+	0xd3ec, 0xd3ec,
+	0xd408, 0xd408,
+	0xd424, 0xd424,
+	0xd440, 0xd440,
+	0xd45c, 0xd45c,
+	0xd478, 0xd478,
+	0xd494, 0xd494,
+	0xd4b0, 0xd4b0,
+	0xd4cc, 0xd4cc,
+	0xd4e8, 0xd4e8,
+	0xd504, 0xd504,
+	0xd520, 0xd520,
+	0xd53c, 0xd53c,
+	0xd558, 0xd558,
+	0xd574, 0xd574,
+	0xd590, 0xd590,
+	0xd5ac, 0xd5ac,
+	0xd5c8, 0xd5c8,
+	0xd5e4, 0xd5e4,
+	0xd600, 0xd600,
+	0xd61c, 0xd61c,
+	0xd638, 0xd638,
+	0xd654, 0xd654,
+	0xd670, 0xd670,
+	0xd68c, 0xd68c,
+	0xd6a8, 0xd6a8,
+	0xd6c4, 0xd6c4,
+	0xd6e0, 0xd6e0,
+	0xd6fc, 0xd6fc,
+	0xd718, 0xd718,
+	0xd734, 0xd734,
+	0xd750, 0xd750,
+	0xd76c, 0xd76c,
+	0xd788, 0xd788,
+}; /* CR_Grapheme_Cluster_Break_LV */
+
+/* 'Grapheme_Cluster_Break_LVT': Grapheme_Cluster_Break=LVT */
+static const OnigCodePoint CR_Grapheme_Cluster_Break_LVT[] = {
+	399,
+	0xac01, 0xac1b,
+	0xac1d, 0xac37,
+	0xac39, 0xac53,
+	0xac55, 0xac6f,
+	0xac71, 0xac8b,
+	0xac8d, 0xaca7,
+	0xaca9, 0xacc3,
+	0xacc5, 0xacdf,
+	0xace1, 0xacfb,
+	0xacfd, 0xad17,
+	0xad19, 0xad33,
+	0xad35, 0xad4f,
+	0xad51, 0xad6b,
+	0xad6d, 0xad87,
+	0xad89, 0xada3,
+	0xada5, 0xadbf,
+	0xadc1, 0xaddb,
+	0xaddd, 0xadf7,
+	0xadf9, 0xae13,
+	0xae15, 0xae2f,
+	0xae31, 0xae4b,
+	0xae4d, 0xae67,
+	0xae69, 0xae83,
+	0xae85, 0xae9f,
+	0xaea1, 0xaebb,
+	0xaebd, 0xaed7,
+	0xaed9, 0xaef3,
+	0xaef5, 0xaf0f,
+	0xaf11, 0xaf2b,
+	0xaf2d, 0xaf47,
+	0xaf49, 0xaf63,
+	0xaf65, 0xaf7f,
+	0xaf81, 0xaf9b,
+	0xaf9d, 0xafb7,
+	0xafb9, 0xafd3,
+	0xafd5, 0xafef,
+	0xaff1, 0xb00b,
+	0xb00d, 0xb027,
+	0xb029, 0xb043,
+	0xb045, 0xb05f,
+	0xb061, 0xb07b,
+	0xb07d, 0xb097,
+	0xb099, 0xb0b3,
+	0xb0b5, 0xb0cf,
+	0xb0d1, 0xb0eb,
+	0xb0ed, 0xb107,
+	0xb109, 0xb123,
+	0xb125, 0xb13f,
+	0xb141, 0xb15b,
+	0xb15d, 0xb177,
+	0xb179, 0xb193,
+	0xb195, 0xb1af,
+	0xb1b1, 0xb1cb,
+	0xb1cd, 0xb1e7,
+	0xb1e9, 0xb203,
+	0xb205, 0xb21f,
+	0xb221, 0xb23b,
+	0xb23d, 0xb257,
+	0xb259, 0xb273,
+	0xb275, 0xb28f,
+	0xb291, 0xb2ab,
+	0xb2ad, 0xb2c7,
+	0xb2c9, 0xb2e3,
+	0xb2e5, 0xb2ff,
+	0xb301, 0xb31b,
+	0xb31d, 0xb337,
+	0xb339, 0xb353,
+	0xb355, 0xb36f,
+	0xb371, 0xb38b,
+	0xb38d, 0xb3a7,
+	0xb3a9, 0xb3c3,
+	0xb3c5, 0xb3df,
+	0xb3e1, 0xb3fb,
+	0xb3fd, 0xb417,
+	0xb419, 0xb433,
+	0xb435, 0xb44f,
+	0xb451, 0xb46b,
+	0xb46d, 0xb487,
+	0xb489, 0xb4a3,
+	0xb4a5, 0xb4bf,
+	0xb4c1, 0xb4db,
+	0xb4dd, 0xb4f7,
+	0xb4f9, 0xb513,
+	0xb515, 0xb52f,
+	0xb531, 0xb54b,
+	0xb54d, 0xb567,
+	0xb569, 0xb583,
+	0xb585, 0xb59f,
+	0xb5a1, 0xb5bb,
+	0xb5bd, 0xb5d7,
+	0xb5d9, 0xb5f3,
+	0xb5f5, 0xb60f,
+	0xb611, 0xb62b,
+	0xb62d, 0xb647,
+	0xb649, 0xb663,
+	0xb665, 0xb67f,
+	0xb681, 0xb69b,
+	0xb69d, 0xb6b7,
+	0xb6b9, 0xb6d3,
+	0xb6d5, 0xb6ef,
+	0xb6f1, 0xb70b,
+	0xb70d, 0xb727,
+	0xb729, 0xb743,
+	0xb745, 0xb75f,
+	0xb761, 0xb77b,
+	0xb77d, 0xb797,
+	0xb799, 0xb7b3,
+	0xb7b5, 0xb7cf,
+	0xb7d1, 0xb7eb,
+	0xb7ed, 0xb807,
+	0xb809, 0xb823,
+	0xb825, 0xb83f,
+	0xb841, 0xb85b,
+	0xb85d, 0xb877,
+	0xb879, 0xb893,
+	0xb895, 0xb8af,
+	0xb8b1, 0xb8cb,
+	0xb8cd, 0xb8e7,
+	0xb8e9, 0xb903,
+	0xb905, 0xb91f,
+	0xb921, 0xb93b,
+	0xb93d, 0xb957,
+	0xb959, 0xb973,
+	0xb975, 0xb98f,
+	0xb991, 0xb9ab,
+	0xb9ad, 0xb9c7,
+	0xb9c9, 0xb9e3,
+	0xb9e5, 0xb9ff,
+	0xba01, 0xba1b,
+	0xba1d, 0xba37,
+	0xba39, 0xba53,
+	0xba55, 0xba6f,
+	0xba71, 0xba8b,
+	0xba8d, 0xbaa7,
+	0xbaa9, 0xbac3,
+	0xbac5, 0xbadf,
+	0xbae1, 0xbafb,
+	0xbafd, 0xbb17,
+	0xbb19, 0xbb33,
+	0xbb35, 0xbb4f,
+	0xbb51, 0xbb6b,
+	0xbb6d, 0xbb87,
+	0xbb89, 0xbba3,
+	0xbba5, 0xbbbf,
+	0xbbc1, 0xbbdb,
+	0xbbdd, 0xbbf7,
+	0xbbf9, 0xbc13,
+	0xbc15, 0xbc2f,
+	0xbc31, 0xbc4b,
+	0xbc4d, 0xbc67,
+	0xbc69, 0xbc83,
+	0xbc85, 0xbc9f,
+	0xbca1, 0xbcbb,
+	0xbcbd, 0xbcd7,
+	0xbcd9, 0xbcf3,
+	0xbcf5, 0xbd0f,
+	0xbd11, 0xbd2b,
+	0xbd2d, 0xbd47,
+	0xbd49, 0xbd63,
+	0xbd65, 0xbd7f,
+	0xbd81, 0xbd9b,
+	0xbd9d, 0xbdb7,
+	0xbdb9, 0xbdd3,
+	0xbdd5, 0xbdef,
+	0xbdf1, 0xbe0b,
+	0xbe0d, 0xbe27,
+	0xbe29, 0xbe43,
+	0xbe45, 0xbe5f,
+	0xbe61, 0xbe7b,
+	0xbe7d, 0xbe97,
+	0xbe99, 0xbeb3,
+	0xbeb5, 0xbecf,
+	0xbed1, 0xbeeb,
+	0xbeed, 0xbf07,
+	0xbf09, 0xbf23,
+	0xbf25, 0xbf3f,
+	0xbf41, 0xbf5b,
+	0xbf5d, 0xbf77,
+	0xbf79, 0xbf93,
+	0xbf95, 0xbfaf,
+	0xbfb1, 0xbfcb,
+	0xbfcd, 0xbfe7,
+	0xbfe9, 0xc003,
+	0xc005, 0xc01f,
+	0xc021, 0xc03b,
+	0xc03d, 0xc057,
+	0xc059, 0xc073,
+	0xc075, 0xc08f,
+	0xc091, 0xc0ab,
+	0xc0ad, 0xc0c7,
+	0xc0c9, 0xc0e3,
+	0xc0e5, 0xc0ff,
+	0xc101, 0xc11b,
+	0xc11d, 0xc137,
+	0xc139, 0xc153,
+	0xc155, 0xc16f,
+	0xc171, 0xc18b,
+	0xc18d, 0xc1a7,
+	0xc1a9, 0xc1c3,
+	0xc1c5, 0xc1df,
+	0xc1e1, 0xc1fb,
+	0xc1fd, 0xc217,
+	0xc219, 0xc233,
+	0xc235, 0xc24f,
+	0xc251, 0xc26b,
+	0xc26d, 0xc287,
+	0xc289, 0xc2a3,
+	0xc2a5, 0xc2bf,
+	0xc2c1, 0xc2db,
+	0xc2dd, 0xc2f7,
+	0xc2f9, 0xc313,
+	0xc315, 0xc32f,
+	0xc331, 0xc34b,
+	0xc34d, 0xc367,
+	0xc369, 0xc383,
+	0xc385, 0xc39f,
+	0xc3a1, 0xc3bb,
+	0xc3bd, 0xc3d7,
+	0xc3d9, 0xc3f3,
+	0xc3f5, 0xc40f,
+	0xc411, 0xc42b,
+	0xc42d, 0xc447,
+	0xc449, 0xc463,
+	0xc465, 0xc47f,
+	0xc481, 0xc49b,
+	0xc49d, 0xc4b7,
+	0xc4b9, 0xc4d3,
+	0xc4d5, 0xc4ef,
+	0xc4f1, 0xc50b,
+	0xc50d, 0xc527,
+	0xc529, 0xc543,
+	0xc545, 0xc55f,
+	0xc561, 0xc57b,
+	0xc57d, 0xc597,
+	0xc599, 0xc5b3,
+	0xc5b5, 0xc5cf,
+	0xc5d1, 0xc5eb,
+	0xc5ed, 0xc607,
+	0xc609, 0xc623,
+	0xc625, 0xc63f,
+	0xc641, 0xc65b,
+	0xc65d, 0xc677,
+	0xc679, 0xc693,
+	0xc695, 0xc6af,
+	0xc6b1, 0xc6cb,
+	0xc6cd, 0xc6e7,
+	0xc6e9, 0xc703,
+	0xc705, 0xc71f,
+	0xc721, 0xc73b,
+	0xc73d, 0xc757,
+	0xc759, 0xc773,
+	0xc775, 0xc78f,
+	0xc791, 0xc7ab,
+	0xc7ad, 0xc7c7,
+	0xc7c9, 0xc7e3,
+	0xc7e5, 0xc7ff,
+	0xc801, 0xc81b,
+	0xc81d, 0xc837,
+	0xc839, 0xc853,
+	0xc855, 0xc86f,
+	0xc871, 0xc88b,
+	0xc88d, 0xc8a7,
+	0xc8a9, 0xc8c3,
+	0xc8c5, 0xc8df,
+	0xc8e1, 0xc8fb,
+	0xc8fd, 0xc917,
+	0xc919, 0xc933,
+	0xc935, 0xc94f,
+	0xc951, 0xc96b,
+	0xc96d, 0xc987,
+	0xc989, 0xc9a3,
+	0xc9a5, 0xc9bf,
+	0xc9c1, 0xc9db,
+	0xc9dd, 0xc9f7,
+	0xc9f9, 0xca13,
+	0xca15, 0xca2f,
+	0xca31, 0xca4b,
+	0xca4d, 0xca67,
+	0xca69, 0xca83,
+	0xca85, 0xca9f,
+	0xcaa1, 0xcabb,
+	0xcabd, 0xcad7,
+	0xcad9, 0xcaf3,
+	0xcaf5, 0xcb0f,
+	0xcb11, 0xcb2b,
+	0xcb2d, 0xcb47,
+	0xcb49, 0xcb63,
+	0xcb65, 0xcb7f,
+	0xcb81, 0xcb9b,
+	0xcb9d, 0xcbb7,
+	0xcbb9, 0xcbd3,
+	0xcbd5, 0xcbef,
+	0xcbf1, 0xcc0b,
+	0xcc0d, 0xcc27,
+	0xcc29, 0xcc43,
+	0xcc45, 0xcc5f,
+	0xcc61, 0xcc7b,
+	0xcc7d, 0xcc97,
+	0xcc99, 0xccb3,
+	0xccb5, 0xcccf,
+	0xccd1, 0xcceb,
+	0xcced, 0xcd07,
+	0xcd09, 0xcd23,
+	0xcd25, 0xcd3f,
+	0xcd41, 0xcd5b,
+	0xcd5d, 0xcd77,
+	0xcd79, 0xcd93,
+	0xcd95, 0xcdaf,
+	0xcdb1, 0xcdcb,
+	0xcdcd, 0xcde7,
+	0xcde9, 0xce03,
+	0xce05, 0xce1f,
+	0xce21, 0xce3b,
+	0xce3d, 0xce57,
+	0xce59, 0xce73,
+	0xce75, 0xce8f,
+	0xce91, 0xceab,
+	0xcead, 0xcec7,
+	0xcec9, 0xcee3,
+	0xcee5, 0xceff,
+	0xcf01, 0xcf1b,
+	0xcf1d, 0xcf37,
+	0xcf39, 0xcf53,
+	0xcf55, 0xcf6f,
+	0xcf71, 0xcf8b,
+	0xcf8d, 0xcfa7,
+	0xcfa9, 0xcfc3,
+	0xcfc5, 0xcfdf,
+	0xcfe1, 0xcffb,
+	0xcffd, 0xd017,
+	0xd019, 0xd033,
+	0xd035, 0xd04f,
+	0xd051, 0xd06b,
+	0xd06d, 0xd087,
+	0xd089, 0xd0a3,
+	0xd0a5, 0xd0bf,
+	0xd0c1, 0xd0db,
+	0xd0dd, 0xd0f7,
+	0xd0f9, 0xd113,
+	0xd115, 0xd12f,
+	0xd131, 0xd14b,
+	0xd14d, 0xd167,
+	0xd169, 0xd183,
+	0xd185, 0xd19f,
+	0xd1a1, 0xd1bb,
+	0xd1bd, 0xd1d7,
+	0xd1d9, 0xd1f3,
+	0xd1f5, 0xd20f,
+	0xd211, 0xd22b,
+	0xd22d, 0xd247,
+	0xd249, 0xd263,
+	0xd265, 0xd27f,
+	0xd281, 0xd29b,
+	0xd29d, 0xd2b7,
+	0xd2b9, 0xd2d3,
+	0xd2d5, 0xd2ef,
+	0xd2f1, 0xd30b,
+	0xd30d, 0xd327,
+	0xd329, 0xd343,
+	0xd345, 0xd35f,
+	0xd361, 0xd37b,
+	0xd37d, 0xd397,
+	0xd399, 0xd3b3,
+	0xd3b5, 0xd3cf,
+	0xd3d1, 0xd3eb,
+	0xd3ed, 0xd407,
+	0xd409, 0xd423,
+	0xd425, 0xd43f,
+	0xd441, 0xd45b,
+	0xd45d, 0xd477,
+	0xd479, 0xd493,
+	0xd495, 0xd4af,
+	0xd4b1, 0xd4cb,
+	0xd4cd, 0xd4e7,
+	0xd4e9, 0xd503,
+	0xd505, 0xd51f,
+	0xd521, 0xd53b,
+	0xd53d, 0xd557,
+	0xd559, 0xd573,
+	0xd575, 0xd58f,
+	0xd591, 0xd5ab,
+	0xd5ad, 0xd5c7,
+	0xd5c9, 0xd5e3,
+	0xd5e5, 0xd5ff,
+	0xd601, 0xd61b,
+	0xd61d, 0xd637,
+	0xd639, 0xd653,
+	0xd655, 0xd66f,
+	0xd671, 0xd68b,
+	0xd68d, 0xd6a7,
+	0xd6a9, 0xd6c3,
+	0xd6c5, 0xd6df,
+	0xd6e1, 0xd6fb,
+	0xd6fd, 0xd717,
+	0xd719, 0xd733,
+	0xd735, 0xd74f,
+	0xd751, 0xd76b,
+	0xd76d, 0xd787,
+	0xd789, 0xd7a3,
+}; /* CR_Grapheme_Cluster_Break_LVT */
+
+/* 'Grapheme_Cluster_Break_E_Base': Grapheme_Cluster_Break=E_Base */
+static const OnigCodePoint CR_Grapheme_Cluster_Break_E_Base[] = {
+	31,
+	0x261d, 0x261d,
+	0x26f9, 0x26f9,
+	0x270a, 0x270d,
+	0x1f385, 0x1f385,
+	0x1f3c2, 0x1f3c4,
+	0x1f3c7, 0x1f3c7,
+	0x1f3ca, 0x1f3cc,
+	0x1f442, 0x1f443,
+	0x1f446, 0x1f450,
+	0x1f46e, 0x1f46e,
+	0x1f470, 0x1f478,
+	0x1f47c, 0x1f47c,
+	0x1f481, 0x1f483,
+	0x1f485, 0x1f487,
+	0x1f4aa, 0x1f4aa,
+	0x1f574, 0x1f575,
+	0x1f57a, 0x1f57a,
+	0x1f590, 0x1f590,
+	0x1f595, 0x1f596,
+	0x1f645, 0x1f647,
+	0x1f64b, 0x1f64f,
+	0x1f6a3, 0x1f6a3,
+	0x1f6b4, 0x1f6b6,
+	0x1f6c0, 0x1f6c0,
+	0x1f6cc, 0x1f6cc,
+	0x1f918, 0x1f91c,
+	0x1f91e, 0x1f91f,
+	0x1f926, 0x1f926,
+	0x1f930, 0x1f939,
+	0x1f93d, 0x1f93e,
+	0x1f9d1, 0x1f9dd,
+}; /* CR_Grapheme_Cluster_Break_E_Base */
+
+/* 'Grapheme_Cluster_Break_E_Modifier': Grapheme_Cluster_Break=E_Modifier */
+#define CR_Grapheme_Cluster_Break_E_Modifier CR_Emoji_Modifier
+
+/* 'Grapheme_Cluster_Break_ZWJ': Grapheme_Cluster_Break=ZWJ */
+static const OnigCodePoint CR_Grapheme_Cluster_Break_ZWJ[] = {
+	1,
+	0x200d, 0x200d,
+}; /* CR_Grapheme_Cluster_Break_ZWJ */
+
+/* 'Grapheme_Cluster_Break_Glue_After_Zwj': Grapheme_Cluster_Break=Glue_After_Zwj */
+static const OnigCodePoint CR_Grapheme_Cluster_Break_Glue_After_Zwj[] = {
+	20,
+	0x2640, 0x2640,
+	0x2642, 0x2642,
+	0x2695, 0x2696,
+	0x2708, 0x2708,
+	0x2764, 0x2764,
+	0x1f308, 0x1f308,
+	0x1f33e, 0x1f33e,
+	0x1f373, 0x1f373,
+	0x1f393, 0x1f393,
+	0x1f3a4, 0x1f3a4,
+	0x1f3a8, 0x1f3a8,
+	0x1f3eb, 0x1f3eb,
+	0x1f3ed, 0x1f3ed,
+	0x1f48b, 0x1f48b,
+	0x1f4bb, 0x1f4bc,
+	0x1f527, 0x1f527,
+	0x1f52c, 0x1f52c,
+	0x1f5e8, 0x1f5e8,
+	0x1f680, 0x1f680,
+	0x1f692, 0x1f692,
+}; /* CR_Grapheme_Cluster_Break_Glue_After_Zwj */
+
+/* 'Grapheme_Cluster_Break_E_Base_GAZ': Grapheme_Cluster_Break=E_Base_GAZ */
+static const OnigCodePoint CR_Grapheme_Cluster_Break_E_Base_GAZ[] = {
+	1,
+	0x1f466, 0x1f469,
+}; /* CR_Grapheme_Cluster_Break_E_Base_GAZ */
 
 /* 'In_Basic_Latin': Block */
@@ -27631,4 +32580,10 @@
 }; /* CR_In_Mandaic */
 
+/* 'In_Syriac_Supplement': Block */
+static const OnigCodePoint CR_In_Syriac_Supplement[] = {
+	1,
+	0x0860, 0x086f,
+}; /* CR_In_Syriac_Supplement */
+
 /* 'In_Arabic_Extended_A': Block */
 static const OnigCodePoint CR_In_Arabic_Extended_A[] = {
@@ -27880,4 +32835,10 @@
 #define CR_In_Ol_Chiki CR_Ol_Chiki
 
+/* 'In_Cyrillic_Extended_C': Block */
+static const OnigCodePoint CR_In_Cyrillic_Extended_C[] = {
+	1,
+	0x1c80, 0x1c8f,
+}; /* CR_In_Cyrillic_Extended_C */
+
 /* 'In_Sundanese_Supplement': Block */
 static const OnigCodePoint CR_In_Sundanese_Supplement[] = {
@@ -28354,4 +33315,10 @@
 }; /* CR_In_Latin_Extended_E */
 
+/* 'In_Cherokee_Supplement': Block */
+static const OnigCodePoint CR_In_Cherokee_Supplement[] = {
+	1,
+	0xab70, 0xabbf,
+}; /* CR_In_Cherokee_Supplement */
+
 /* 'In_Meetei_Mayek': Block */
 static const OnigCodePoint CR_In_Meetei_Mayek[] = {
@@ -28558,4 +33525,10 @@
 }; /* CR_In_Osmanya */
 
+/* 'In_Osage': Block */
+static const OnigCodePoint CR_In_Osage[] = {
+	1,
+	0x104b0, 0x104ff,
+}; /* CR_In_Osage */
+
 /* 'In_Elbasan': Block */
 static const OnigCodePoint CR_In_Elbasan[] = {
@@ -28597,4 +33570,10 @@
 }; /* CR_In_Nabataean */
 
+/* 'In_Hatran': Block */
+static const OnigCodePoint CR_In_Hatran[] = {
+	1,
+	0x108e0, 0x108ff,
+}; /* CR_In_Hatran */
+
 /* 'In_Phoenician': Block */
 static const OnigCodePoint CR_In_Phoenician[] = {
@@ -28666,4 +33645,10 @@
 }; /* CR_In_Old_Turkic */
 
+/* 'In_Old_Hungarian': Block */
+static const OnigCodePoint CR_In_Old_Hungarian[] = {
+	1,
+	0x10c80, 0x10cff,
+}; /* CR_In_Old_Hungarian */
+
 /* 'In_Rumi_Numeral_Symbols': Block */
 static const OnigCodePoint CR_In_Rumi_Numeral_Symbols[] = {
@@ -28720,4 +33705,10 @@
 }; /* CR_In_Khojki */
 
+/* 'In_Multani': Block */
+static const OnigCodePoint CR_In_Multani[] = {
+	1,
+	0x11280, 0x112af,
+}; /* CR_In_Multani */
+
 /* 'In_Khudawadi': Block */
 static const OnigCodePoint CR_In_Khudawadi[] = {
@@ -28732,4 +33723,10 @@
 }; /* CR_In_Grantha */
 
+/* 'In_Newa': Block */
+static const OnigCodePoint CR_In_Newa[] = {
+	1,
+	0x11400, 0x1147f,
+}; /* CR_In_Newa */
+
 /* 'In_Tirhuta': Block */
 static const OnigCodePoint CR_In_Tirhuta[] = {
@@ -28750,4 +33747,10 @@
 }; /* CR_In_Modi */
 
+/* 'In_Mongolian_Supplement': Block */
+static const OnigCodePoint CR_In_Mongolian_Supplement[] = {
+	1,
+	0x11660, 0x1167f,
+}; /* CR_In_Mongolian_Supplement */
+
 /* 'In_Takri': Block */
 static const OnigCodePoint CR_In_Takri[] = {
@@ -28756,4 +33759,10 @@
 }; /* CR_In_Takri */
 
+/* 'In_Ahom': Block */
+static const OnigCodePoint CR_In_Ahom[] = {
+	1,
+	0x11700, 0x1173f,
+}; /* CR_In_Ahom */
+
 /* 'In_Warang_Citi': Block */
 static const OnigCodePoint CR_In_Warang_Citi[] = {
@@ -28762,4 +33771,16 @@
 }; /* CR_In_Warang_Citi */
 
+/* 'In_Zanabazar_Square': Block */
+static const OnigCodePoint CR_In_Zanabazar_Square[] = {
+	1,
+	0x11a00, 0x11a4f,
+}; /* CR_In_Zanabazar_Square */
+
+/* 'In_Soyombo': Block */
+static const OnigCodePoint CR_In_Soyombo[] = {
+	1,
+	0x11a50, 0x11aaf,
+}; /* CR_In_Soyombo */
+
 /* 'In_Pau_Cin_Hau': Block */
 static const OnigCodePoint CR_In_Pau_Cin_Hau[] = {
@@ -28768,4 +33789,22 @@
 }; /* CR_In_Pau_Cin_Hau */
 
+/* 'In_Bhaiksuki': Block */
+static const OnigCodePoint CR_In_Bhaiksuki[] = {
+	1,
+	0x11c00, 0x11c6f,
+}; /* CR_In_Bhaiksuki */
+
+/* 'In_Marchen': Block */
+static const OnigCodePoint CR_In_Marchen[] = {
+	1,
+	0x11c70, 0x11cbf,
+}; /* CR_In_Marchen */
+
+/* 'In_Masaram_Gondi': Block */
+static const OnigCodePoint CR_In_Masaram_Gondi[] = {
+	1,
+	0x11d00, 0x11d5f,
+}; /* CR_In_Masaram_Gondi */
+
 /* 'In_Cuneiform': Block */
 static const OnigCodePoint CR_In_Cuneiform[] = {
@@ -28780,4 +33819,10 @@
 }; /* CR_In_Cuneiform_Numbers_and_Punctuation */
 
+/* 'In_Early_Dynastic_Cuneiform': Block */
+static const OnigCodePoint CR_In_Early_Dynastic_Cuneiform[] = {
+	1,
+	0x12480, 0x1254f,
+}; /* CR_In_Early_Dynastic_Cuneiform */
+
 /* 'In_Egyptian_Hieroglyphs': Block */
 static const OnigCodePoint CR_In_Egyptian_Hieroglyphs[] = {
@@ -28786,4 +33831,10 @@
 }; /* CR_In_Egyptian_Hieroglyphs */
 
+/* 'In_Anatolian_Hieroglyphs': Block */
+static const OnigCodePoint CR_In_Anatolian_Hieroglyphs[] = {
+	1,
+	0x14400, 0x1467f,
+}; /* CR_In_Anatolian_Hieroglyphs */
+
 /* 'In_Bamum_Supplement': Block */
 static const OnigCodePoint CR_In_Bamum_Supplement[] = {
@@ -28816,4 +33867,22 @@
 }; /* CR_In_Miao */
 
+/* 'In_Ideographic_Symbols_and_Punctuation': Block */
+static const OnigCodePoint CR_In_Ideographic_Symbols_and_Punctuation[] = {
+	1,
+	0x16fe0, 0x16fff,
+}; /* CR_In_Ideographic_Symbols_and_Punctuation */
+
+/* 'In_Tangut': Block */
+static const OnigCodePoint CR_In_Tangut[] = {
+	1,
+	0x17000, 0x187ff,
+}; /* CR_In_Tangut */
+
+/* 'In_Tangut_Components': Block */
+static const OnigCodePoint CR_In_Tangut_Components[] = {
+	1,
+	0x18800, 0x18aff,
+}; /* CR_In_Tangut_Components */
+
 /* 'In_Kana_Supplement': Block */
 static const OnigCodePoint CR_In_Kana_Supplement[] = {
@@ -28822,4 +33891,16 @@
 }; /* CR_In_Kana_Supplement */
 
+/* 'In_Kana_Extended_A': Block */
+static const OnigCodePoint CR_In_Kana_Extended_A[] = {
+	1,
+	0x1b100, 0x1b12f,
+}; /* CR_In_Kana_Extended_A */
+
+/* 'In_Nushu': Block */
+static const OnigCodePoint CR_In_Nushu[] = {
+	1,
+	0x1b170, 0x1b2ff,
+}; /* CR_In_Nushu */
+
 /* 'In_Duployan': Block */
 static const OnigCodePoint CR_In_Duployan[] = {
@@ -28870,4 +33951,16 @@
 }; /* CR_In_Mathematical_Alphanumeric_Symbols */
 
+/* 'In_Sutton_SignWriting': Block */
+static const OnigCodePoint CR_In_Sutton_SignWriting[] = {
+	1,
+	0x1d800, 0x1daaf,
+}; /* CR_In_Sutton_SignWriting */
+
+/* 'In_Glagolitic_Supplement': Block */
+static const OnigCodePoint CR_In_Glagolitic_Supplement[] = {
+	1,
+	0x1e000, 0x1e02f,
+}; /* CR_In_Glagolitic_Supplement */
+
 /* 'In_Mende_Kikakui': Block */
 static const OnigCodePoint CR_In_Mende_Kikakui[] = {
@@ -28876,4 +33969,10 @@
 }; /* CR_In_Mende_Kikakui */
 
+/* 'In_Adlam': Block */
+static const OnigCodePoint CR_In_Adlam[] = {
+	1,
+	0x1e900, 0x1e95f,
+}; /* CR_In_Adlam */
+
 /* 'In_Arabic_Mathematical_Alphabetic_Symbols': Block */
 static const OnigCodePoint CR_In_Arabic_Mathematical_Alphabetic_Symbols[] = {
@@ -28954,4 +34053,10 @@
 }; /* CR_In_Supplemental_Arrows_C */
 
+/* 'In_Supplemental_Symbols_and_Pictographs': Block */
+static const OnigCodePoint CR_In_Supplemental_Symbols_and_Pictographs[] = {
+	1,
+	0x1f900, 0x1f9ff,
+}; /* CR_In_Supplemental_Symbols_and_Pictographs */
+
 /* 'In_CJK_Unified_Ideographs_Extension_B': Block */
 static const OnigCodePoint CR_In_CJK_Unified_Ideographs_Extension_B[] = {
@@ -28972,4 +34077,16 @@
 }; /* CR_In_CJK_Unified_Ideographs_Extension_D */
 
+/* 'In_CJK_Unified_Ideographs_Extension_E': Block */
+static const OnigCodePoint CR_In_CJK_Unified_Ideographs_Extension_E[] = {
+	1,
+	0x2b820, 0x2ceaf,
+}; /* CR_In_CJK_Unified_Ideographs_Extension_E */
+
+/* 'In_CJK_Unified_Ideographs_Extension_F': Block */
+static const OnigCodePoint CR_In_CJK_Unified_Ideographs_Extension_F[] = {
+	1,
+	0x2ceb0, 0x2ebef,
+}; /* CR_In_CJK_Unified_Ideographs_Extension_F */
+
 /* 'In_CJK_Compatibility_Ideographs_Supplement': Block */
 static const OnigCodePoint CR_In_CJK_Compatibility_Ideographs_Supplement[] = {
@@ -29004,48 +34121,55 @@
 /* 'In_No_Block': Block */
 static const OnigCodePoint CR_In_No_Block[] = {
-	40,
-	0x0860, 0x089f,
-	0x1c80, 0x1cbf,
+	47,
+	0x0870, 0x089f,
+	0x1c90, 0x1cbf,
 	0x2fe0, 0x2fef,
-	0xab70, 0xabbf,
 	0x10200, 0x1027f,
 	0x103e0, 0x103ff,
-	0x104b0, 0x104ff,
 	0x10570, 0x105ff,
 	0x10780, 0x107ff,
-	0x108b0, 0x108ff,
+	0x108b0, 0x108df,
 	0x10940, 0x1097f,
 	0x10aa0, 0x10abf,
 	0x10bb0, 0x10bff,
-	0x10c50, 0x10e5f,
+	0x10c50, 0x10c7f,
+	0x10d00, 0x10e5f,
 	0x10e80, 0x10fff,
-	0x11250, 0x112af,
-	0x11380, 0x1147f,
+	0x11250, 0x1127f,
+	0x11380, 0x113ff,
 	0x114e0, 0x1157f,
-	0x11660, 0x1167f,
-	0x116d0, 0x1189f,
-	0x11900, 0x11abf,
-	0x11b00, 0x11fff,
-	0x12480, 0x12fff,
-	0x13430, 0x167ff,
+	0x116d0, 0x116ff,
+	0x11740, 0x1189f,
+	0x11900, 0x119ff,
+	0x11ab0, 0x11abf,
+	0x11b00, 0x11bff,
+	0x11cc0, 0x11cff,
+	0x11d60, 0x11fff,
+	0x12550, 0x12fff,
+	0x13430, 0x143ff,
+	0x14680, 0x167ff,
 	0x16a70, 0x16acf,
 	0x16b90, 0x16eff,
-	0x16fa0, 0x1afff,
-	0x1b100, 0x1bbff,
+	0x16fa0, 0x16fdf,
+	0x18b00, 0x1afff,
+	0x1b130, 0x1b16f,
+	0x1b300, 0x1bbff,
 	0x1bcb0, 0x1cfff,
 	0x1d250, 0x1d2ff,
 	0x1d380, 0x1d3ff,
-	0x1d800, 0x1e7ff,
-	0x1e8e0, 0x1edff,
+	0x1dab0, 0x1dfff,
+	0x1e030, 0x1e7ff,
+	0x1e8e0, 0x1e8ff,
+	0x1e960, 0x1edff,
 	0x1ef00, 0x1efff,
-	0x1f900, 0x1ffff,
+	0x1fa00, 0x1ffff,
 	0x2a6e0, 0x2a6ff,
-	0x2b820, 0x2f7ff,
+	0x2ebf0, 0x2f7ff,
 	0x2fa20, 0xdffff,
 	0xe0080, 0xe00ff,
 	0xe01f0, 0xeffff,
 }; /* CR_In_No_Block */
+
 #endif /* USE_UNICODE_PROPERTIES */
-
 static const OnigCodePoint* const CodeRanges[] = {
   CR_NEWLINE,
@@ -29057,5 +34181,5 @@
   CR_Lower,
   CR_Print,
-  CR_Punct,
+  CR_XPosixPunct,
   CR_Space,
   CR_Upper,
@@ -29064,4 +34188,5 @@
   CR_Alnum,
   CR_ASCII,
+  CR_Punct,
 #ifdef USE_UNICODE_PROPERTIES
   CR_Any,
@@ -29249,4 +34374,20 @@
   CR_Tirhuta,
   CR_Warang_Citi,
+  CR_Ahom,
+  CR_Anatolian_Hieroglyphs,
+  CR_Hatran,
+  CR_Multani,
+  CR_Old_Hungarian,
+  CR_SignWriting,
+  CR_Adlam,
+  CR_Bhaiksuki,
+  CR_Marchen,
+  CR_Newa,
+  CR_Osage,
+  CR_Tangut,
+  CR_Masaram_Gondi,
+  CR_Nushu,
+  CR_Soyombo,
+  CR_Zanabazar_Square,
   CR_White_Space,
   CR_Bidi_Control,
@@ -29277,8 +34418,15 @@
   CR_Other_ID_Start,
   CR_Other_ID_Continue,
-  CR_STerm,
+  CR_Sentence_Terminal,
   CR_Variation_Selector,
   CR_Pattern_White_Space,
   CR_Pattern_Syntax,
+  CR_Prepended_Concatenation_Mark,
+  CR_Regional_Indicator,
+  CR_Emoji,
+  CR_Emoji_Presentation,
+  CR_Emoji_Modifier,
+  CR_Emoji_Modifier_Base,
+  CR_Emoji_Component,
   CR_Unknown,
 #ifdef USE_UNICODE_AGE_PROPERTIES
@@ -29299,5 +34447,25 @@
   CR_Age_6_3,
   CR_Age_7_0,
+  CR_Age_8_0,
+  CR_Age_9_0,
+  CR_Age_10_0,
 #endif /* USE_UNICODE_AGE_PROPERTIES */
+  CR_Grapheme_Cluster_Break_Prepend,
+  CR_Grapheme_Cluster_Break_CR,
+  CR_Grapheme_Cluster_Break_LF,
+  CR_Grapheme_Cluster_Break_Control,
+  CR_Grapheme_Cluster_Break_Extend,
+  CR_Grapheme_Cluster_Break_Regional_Indicator,
+  CR_Grapheme_Cluster_Break_SpacingMark,
+  CR_Grapheme_Cluster_Break_L,
+  CR_Grapheme_Cluster_Break_V,
+  CR_Grapheme_Cluster_Break_T,
+  CR_Grapheme_Cluster_Break_LV,
+  CR_Grapheme_Cluster_Break_LVT,
+  CR_Grapheme_Cluster_Break_E_Base,
+  CR_Grapheme_Cluster_Break_E_Modifier,
+  CR_Grapheme_Cluster_Break_ZWJ,
+  CR_Grapheme_Cluster_Break_Glue_After_Zwj,
+  CR_Grapheme_Cluster_Break_E_Base_GAZ,
   CR_In_Basic_Latin,
   CR_In_Latin_1_Supplement,
@@ -29319,4 +34487,5 @@
   CR_In_Samaritan,
   CR_In_Mandaic,
+  CR_In_Syriac_Supplement,
   CR_In_Arabic_Extended_A,
   CR_In_Devanagari,
@@ -29361,4 +34530,5 @@
   CR_In_Lepcha,
   CR_In_Ol_Chiki,
+  CR_In_Cyrillic_Extended_C,
   CR_In_Sundanese_Supplement,
   CR_In_Vedic_Extensions,
@@ -29441,4 +34611,5 @@
   CR_In_Ethiopic_Extended_A,
   CR_In_Latin_Extended_E,
+  CR_In_Cherokee_Supplement,
   CR_In_Meetei_Mayek,
   CR_In_Hangul_Syllables,
@@ -29476,4 +34647,5 @@
   CR_In_Shavian,
   CR_In_Osmanya,
+  CR_In_Osage,
   CR_In_Elbasan,
   CR_In_Caucasian_Albanian,
@@ -29483,4 +34655,5 @@
   CR_In_Palmyrene,
   CR_In_Nabataean,
+  CR_In_Hatran,
   CR_In_Phoenician,
   CR_In_Lydian,
@@ -29496,4 +34669,5 @@
   CR_In_Psalter_Pahlavi,
   CR_In_Old_Turkic,
+  CR_In_Old_Hungarian,
   CR_In_Rumi_Numeral_Symbols,
   CR_In_Brahmi,
@@ -29505,15 +34679,26 @@
   CR_In_Sinhala_Archaic_Numbers,
   CR_In_Khojki,
+  CR_In_Multani,
   CR_In_Khudawadi,
   CR_In_Grantha,
+  CR_In_Newa,
   CR_In_Tirhuta,
   CR_In_Siddham,
   CR_In_Modi,
+  CR_In_Mongolian_Supplement,
   CR_In_Takri,
+  CR_In_Ahom,
   CR_In_Warang_Citi,
+  CR_In_Zanabazar_Square,
+  CR_In_Soyombo,
   CR_In_Pau_Cin_Hau,
+  CR_In_Bhaiksuki,
+  CR_In_Marchen,
+  CR_In_Masaram_Gondi,
   CR_In_Cuneiform,
   CR_In_Cuneiform_Numbers_and_Punctuation,
+  CR_In_Early_Dynastic_Cuneiform,
   CR_In_Egyptian_Hieroglyphs,
+  CR_In_Anatolian_Hieroglyphs,
   CR_In_Bamum_Supplement,
   CR_In_Mro,
@@ -29521,5 +34706,10 @@
   CR_In_Pahawh_Hmong,
   CR_In_Miao,
+  CR_In_Ideographic_Symbols_and_Punctuation,
+  CR_In_Tangut,
+  CR_In_Tangut_Components,
   CR_In_Kana_Supplement,
+  CR_In_Kana_Extended_A,
+  CR_In_Nushu,
   CR_In_Duployan,
   CR_In_Shorthand_Format_Controls,
@@ -29530,5 +34720,8 @@
   CR_In_Counting_Rod_Numerals,
   CR_In_Mathematical_Alphanumeric_Symbols,
+  CR_In_Sutton_SignWriting,
+  CR_In_Glagolitic_Supplement,
   CR_In_Mende_Kikakui,
+  CR_In_Adlam,
   CR_In_Arabic_Mathematical_Alphabetic_Symbols,
   CR_In_Mahjong_Tiles,
@@ -29544,7 +34737,10 @@
   CR_In_Geometric_Shapes_Extended,
   CR_In_Supplemental_Arrows_C,
+  CR_In_Supplemental_Symbols_and_Pictographs,
   CR_In_CJK_Unified_Ideographs_Extension_B,
   CR_In_CJK_Unified_Ideographs_Extension_C,
   CR_In_CJK_Unified_Ideographs_Extension_D,
+  CR_In_CJK_Unified_Ideographs_Extension_E,
+  CR_In_CJK_Unified_Ideographs_Extension_F,
   CR_In_CJK_Compatibility_Ideographs_Supplement,
   CR_In_Tags,
@@ -29556,27 +34752,29 @@
 };
 struct uniname2ctype_struct {
-  int name, ctype;
+  short name;
+  unsigned short ctype;
 };
+#define uniname2ctype_offset(str) offsetof(struct uniname2ctype_pool_t, uniname2ctype_pool_##str)
 
 static const struct uniname2ctype_struct *uniname2ctype_p(const char *, unsigned int);
 
 #ifndef USE_UNICODE_PROPERTIES
-#define TOTAL_KEYWORDS 14
+#define TOTAL_KEYWORDS 15
 #define MIN_WORD_LENGTH 4
-#define MAX_WORD_LENGTH 6
+#define MAX_WORD_LENGTH 11
 #define MIN_HASH_VALUE 6
-#define MAX_HASH_VALUE 19
-/* maximum key range = 14, duplicates = 0 */
+#define MAX_HASH_VALUE 20
+/* maximum key range = 15, duplicates = 0 */
 #else /* USE_UNICODE_PROPERTIES */
 #ifndef USE_UNICODE_AGE_PROPERTIES
-#define TOTAL_KEYWORDS 689
+#define TOTAL_KEYWORDS 775
 #else /* USE_UNICODE_AGE_PROPERTIES */
-#define TOTAL_KEYWORDS 705
+#define TOTAL_KEYWORDS 794
 #endif /* USE_UNICODE_AGE_PROPERTIES */
 #define MIN_WORD_LENGTH 1
 #define MAX_WORD_LENGTH 44
-#define MIN_HASH_VALUE 3
-#define MAX_HASH_VALUE 4322
-/* maximum key range = 4320, duplicates = 0 */
+#define MIN_HASH_VALUE 10
+#define MAX_HASH_VALUE 6145
+/* maximum key range = 6136, duplicates = 0 */
 #endif /* USE_UNICODE_PROPERTIES */
 
@@ -29600,36 +34798,36 @@
     {
 #ifndef USE_UNICODE_PROPERTIES
-      20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
-      20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
-      20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
-      20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
-      20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
-      20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
-      20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
-      20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
-      20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
-      20, 20, 20, 20, 20, 20, 20,  3, 11,  5,
-       4, 20, 20,  9, 20,  1, 20, 20, 10, 20,
-       2, 20,  1, 20,  1,  7,  4,  6, 20,  1,
-       4, 20, 20, 20, 20, 20, 20, 20
+      21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+      21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+      21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+      21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+      21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+      21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+      21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+      21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+      21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+      21, 21, 21, 21, 21, 21, 21,  3, 12,  5,
+       4, 21, 21, 10, 21,  1, 21, 21, 11, 21,
+       2,  1,  1, 21,  1,  7,  4,  6, 21,  1,
+       4, 21, 21, 21, 21, 21, 21, 21
 #else /* USE_UNICODE_PROPERTIES */
-      4323, 4323, 4323, 4323, 4323, 4323, 4323, 4323, 4323, 4323,
-      4323, 4323, 4323, 4323, 4323, 4323, 4323, 4323, 4323, 4323,
-      4323, 4323, 4323, 4323, 4323, 4323, 4323, 4323, 4323, 4323,
-      4323, 4323, 4323, 4323, 4323, 4323, 4323, 4323, 4323, 4323,
+      6146, 6146, 6146, 6146, 6146, 6146, 6146, 6146, 6146, 6146,
+      6146, 6146, 6146, 6146, 6146, 6146, 6146, 6146, 6146, 6146,
+      6146, 6146, 6146, 6146, 6146, 6146, 6146, 6146, 6146, 6146,
+      6146, 6146, 6146, 6146, 6146, 6146, 6146, 6146, 6146, 6146,
 #ifndef USE_UNICODE_AGE_PROPERTIES
-      4323, 4323, 4323, 4323, 4323, 4323, 4323, 4323, 4323, 4323,
-      4323, 4323, 4323, 4323, 4323, 4323, 4323, 4323, 4323, 4323,
+      6146, 6146, 6146, 6146, 6146, 6146, 6146, 6146, 6146, 6146,
+      6146, 6146, 6146, 6146, 6146, 6146, 6146, 6146, 6146, 6146,
 #else /* USE_UNICODE_AGE_PROPERTIES */
-      4323, 4323, 4323, 4323, 4323, 4323,    1, 4323,   12,    1,
-         2,    9,   18,   11,    6,   10, 4323, 4323, 4323, 4323,
+      6146, 6146, 6146, 6146, 6146, 6146,    1, 6146,    2,    1,
+         5,   27,    2,   15,    7,   11,    9,    8, 6146, 6146,
 #endif /* USE_UNICODE_AGE_PROPERTIES */
-      4323, 4323, 4323, 4323, 4323, 4323, 4323, 4323, 4323, 4323,
-      4323, 4323, 4323, 4323, 4323, 4323, 4323, 4323, 4323, 4323,
-      4323, 4323, 4323, 4323, 4323, 4323, 4323, 4323, 4323, 4323,
-      4323, 4323, 4323, 4323, 4323, 4323, 4323,   13,  931,    6,
-       382,   25,  311,  891,  277,    4,  272, 1436,  120,    7,
-         1,  303,  456,    1,  232,   32,   65,  732, 1411,  163,
-       883, 1255,    8, 4323, 4323, 4323, 4323, 4323
+      6146, 6146, 6146, 6146, 6146, 6146, 6146, 6146, 6146, 6146,
+      6146, 6146, 6146, 6146, 6146, 6146, 6146, 6146, 6146, 6146,
+      6146, 6146, 6146, 6146, 6146, 6146, 6146, 6146, 6146, 6146,
+      6146, 6146, 6146, 6146, 6146, 6146, 6146,    5, 1058,  101,
+       332,    9,  777, 1271,  842,    3, 1142,   17,  491,   70,
+         1,   15,  741, 1115,   39,  174,  260,  566, 1127, 1473,
+       502, 1554,   13,    2,   12, 6146, 6146, 6146, 6146, 6146
 #endif /* USE_UNICODE_PROPERTIES */
     };
@@ -29669,5 +34867,5 @@
       /*FALLTHROUGH*/
       case 1:
-        hval += asso_values[(unsigned char)str[0]];
+        hval += asso_values[(unsigned char)str[0]+2];
         break;
     }
@@ -29689,726 +34887,814 @@
     char uniname2ctype_pool_str14[sizeof("cntrl")];
     char uniname2ctype_pool_str15[sizeof("space")];
-    char uniname2ctype_pool_str16[sizeof("lower")];
-    char uniname2ctype_pool_str17[sizeof("graph")];
-    char uniname2ctype_pool_str18[sizeof("digit")];
-    char uniname2ctype_pool_str19[sizeof("blank")];
+    char uniname2ctype_pool_str16[sizeof("xposixpunct")];
+    char uniname2ctype_pool_str17[sizeof("lower")];
+    char uniname2ctype_pool_str18[sizeof("graph")];
+    char uniname2ctype_pool_str19[sizeof("digit")];
+    char uniname2ctype_pool_str20[sizeof("blank")];
 #else /* USE_UNICODE_PROPERTIES */
-    char uniname2ctype_pool_str3[sizeof("n")];
-    char uniname2ctype_pool_str10[sizeof("cn")];
-    char uniname2ctype_pool_str11[sizeof("mn")];
-    char uniname2ctype_pool_str13[sizeof("c")];
-    char uniname2ctype_pool_str15[sizeof("m")];
-    char uniname2ctype_pool_str16[sizeof("ci")];
-    char uniname2ctype_pool_str17[sizeof("z")];
-    char uniname2ctype_pool_str20[sizeof("cc")];
-    char uniname2ctype_pool_str21[sizeof("mc")];
-    char uniname2ctype_pool_str29[sizeof("mani")];
-    char uniname2ctype_pool_str31[sizeof("inmanichaean")];
-    char uniname2ctype_pool_str35[sizeof("qaai")];
-    char uniname2ctype_pool_str36[sizeof("zzzz")];
-    char uniname2ctype_pool_str37[sizeof("qaac")];
-    char uniname2ctype_pool_str44[sizeof("incham")];
-    char uniname2ctype_pool_str46[sizeof("sc")];
-    char uniname2ctype_pool_str48[sizeof("sm")];
-    char uniname2ctype_pool_str51[sizeof("mandaic")];
-    char uniname2ctype_pool_str55[sizeof("incuneiform")];
-    char uniname2ctype_pool_str56[sizeof("cans")];
-    char uniname2ctype_pool_str59[sizeof("me")];
-    char uniname2ctype_pool_str61[sizeof("inarmenian")];
-    char uniname2ctype_pool_str64[sizeof("ascii")];
-    char uniname2ctype_pool_str65[sizeof("s")];
-    char uniname2ctype_pool_str69[sizeof("insamaritan")];
-    char uniname2ctype_pool_str72[sizeof("cs")];
-    char uniname2ctype_pool_str74[sizeof("zs")];
-    char uniname2ctype_pool_str85[sizeof("inavestan")];
-    char uniname2ctype_pool_str92[sizeof("incommonindicnumberforms")];
-    char uniname2ctype_pool_str96[sizeof("incuneiformnumbersandpunctuation")];
-    char uniname2ctype_pool_str97[sizeof("inthai")];
-    char uniname2ctype_pool_str98[sizeof("inipaextensions")];
-    char uniname2ctype_pool_str105[sizeof("mtei")];
-    char uniname2ctype_pool_str110[sizeof("inspecials")];
-    char uniname2ctype_pool_str114[sizeof("initialpunctuation")];
-    char uniname2ctype_pool_str115[sizeof("inancientsymbols")];
-    char uniname2ctype_pool_str117[sizeof("inthaana")];
-    char uniname2ctype_pool_str130[sizeof("inmiscellaneousmathematicalsymbolsa")];
-    char uniname2ctype_pool_str134[sizeof("lc")];
-    char uniname2ctype_pool_str135[sizeof("inmusicalsymbols")];
-    char uniname2ctype_pool_str136[sizeof("lm")];
-    char uniname2ctype_pool_str137[sizeof("taile")];
-    char uniname2ctype_pool_str141[sizeof("sterm")];
-    char uniname2ctype_pool_str142[sizeof("lina")];
-    char uniname2ctype_pool_str144[sizeof("inlycian")];
-    char uniname2ctype_pool_str147[sizeof("inmyanmarextendeda")];
-    char uniname2ctype_pool_str151[sizeof("lana")];
-    char uniname2ctype_pool_str153[sizeof("alnum")];
-    char uniname2ctype_pool_str155[sizeof("intaitham")];
-    char uniname2ctype_pool_str157[sizeof("incontrolpictures")];
-    char uniname2ctype_pool_str161[sizeof("inmiscellaneoussymbols")];
-    char uniname2ctype_pool_str163[sizeof("inmalayalam")];
-    char uniname2ctype_pool_str166[sizeof("intransportandmapsymbols")];
-    char uniname2ctype_pool_str170[sizeof("inmiscellaneoussymbolsandarrows")];
-    char uniname2ctype_pool_str173[sizeof("inlineara")];
-    char uniname2ctype_pool_str175[sizeof("inmiscellaneoussymbolsandpictographs")];
-    char uniname2ctype_pool_str183[sizeof("taiviet")];
-    char uniname2ctype_pool_str186[sizeof("cwcm")];
-    char uniname2ctype_pool_str190[sizeof("sinhala")];
-    char uniname2ctype_pool_str203[sizeof("latn")];
-    char uniname2ctype_pool_str205[sizeof("latin")];
-    char uniname2ctype_pool_str206[sizeof("ital")];
-    char uniname2ctype_pool_str208[sizeof("intamil")];
-    char uniname2ctype_pool_str209[sizeof("taml")];
-    char uniname2ctype_pool_str223[sizeof("inlatinextendedc")];
-    char uniname2ctype_pool_str226[sizeof("intaile")];
-    char uniname2ctype_pool_str227[sizeof("tale")];
-    char uniname2ctype_pool_str237[sizeof("inlatinextendeda")];
-    char uniname2ctype_pool_str239[sizeof("inlinearbideograms")];
-    char uniname2ctype_pool_str240[sizeof("newtailue")];
-    char uniname2ctype_pool_str241[sizeof("l")];
-    char uniname2ctype_pool_str243[sizeof("nl")];
-    char uniname2ctype_pool_str247[sizeof("inmeeteimayekextensions")];
-    char uniname2ctype_pool_str250[sizeof("zl")];
-    char uniname2ctype_pool_str252[sizeof("lt")];
-    char uniname2ctype_pool_str255[sizeof("inrunic")];
-    char uniname2ctype_pool_str256[sizeof("incarian")];
-    char uniname2ctype_pool_str257[sizeof("armn")];
-    char uniname2ctype_pool_str259[sizeof("cari")];
-    char uniname2ctype_pool_str260[sizeof("armi")];
-    char uniname2ctype_pool_str261[sizeof("inlatinextendede")];
-    char uniname2ctype_pool_str263[sizeof("incyrillic")];
-    char uniname2ctype_pool_str266[sizeof("armenian")];
-    char uniname2ctype_pool_str267[sizeof("inmyanmar")];
-    char uniname2ctype_pool_str270[sizeof("innewtailue")];
-    char uniname2ctype_pool_str272[sizeof("carian")];
-    char uniname2ctype_pool_str274[sizeof("merc")];
-    char uniname2ctype_pool_str280[sizeof("arabic")];
-    char uniname2ctype_pool_str284[sizeof("inmiscellaneoustechnical")];
-    char uniname2ctype_pool_str287[sizeof("insyriac")];
-    char uniname2ctype_pool_str288[sizeof("samr")];
-    char uniname2ctype_pool_str294[sizeof("zinh")];
-    char uniname2ctype_pool_str295[sizeof("han")];
-    char uniname2ctype_pool_str298[sizeof("samaritan")];
-    char uniname2ctype_pool_str299[sizeof("hani")];
-    char uniname2ctype_pool_str302[sizeof("cwt")];
-    char uniname2ctype_pool_str303[sizeof("incherokee")];
-    char uniname2ctype_pool_str304[sizeof("insharada")];
-    char uniname2ctype_pool_str307[sizeof("cham")];
-    char uniname2ctype_pool_str315[sizeof("manichaean")];
-    char uniname2ctype_pool_str316[sizeof("inmahajani")];
-    char uniname2ctype_pool_str317[sizeof("cntrl")];
-    char uniname2ctype_pool_str318[sizeof("sinh")];
-    char uniname2ctype_pool_str320[sizeof("inruminumeralsymbols")];
-    char uniname2ctype_pool_str327[sizeof("inethiopic")];
-    char uniname2ctype_pool_str330[sizeof("tamil")];
-    char uniname2ctype_pool_str331[sizeof("miao")];
-    char uniname2ctype_pool_str332[sizeof("inenclosedalphanumerics")];
-    char uniname2ctype_pool_str333[sizeof("term")];
-    char uniname2ctype_pool_str335[sizeof("chakma")];
-    char uniname2ctype_pool_str337[sizeof("insinhala")];
-    char uniname2ctype_pool_str347[sizeof("shavian")];
-    char uniname2ctype_pool_str350[sizeof("inosmanya")];
-    char uniname2ctype_pool_str353[sizeof("inlatinextendedadditional")];
-    char uniname2ctype_pool_str359[sizeof("osma")];
-    char uniname2ctype_pool_str362[sizeof("ll")];
-    char uniname2ctype_pool_str363[sizeof("thai")];
-    char uniname2ctype_pool_str366[sizeof("math")];
-    char uniname2ctype_pool_str372[sizeof("thaa")];
-    char uniname2ctype_pool_str374[sizeof("inenclosedalphanumericsupplement")];
-    char uniname2ctype_pool_str375[sizeof("ethi")];
-    char uniname2ctype_pool_str376[sizeof("connectorpunctuation")];
-    char uniname2ctype_pool_str380[sizeof("inlowsurrogates")];
-    char uniname2ctype_pool_str382[sizeof("insinhalaarchaicnumbers")];
-    char uniname2ctype_pool_str386[sizeof("taitham")];
-    char uniname2ctype_pool_str388[sizeof("thaana")];
-    char uniname2ctype_pool_str390[sizeof("lineara")];
-    char uniname2ctype_pool_str392[sizeof("di")];
-    char uniname2ctype_pool_str401[sizeof("idc")];
-    char uniname2ctype_pool_str405[sizeof("meroiticcursive")];
-    char uniname2ctype_pool_str407[sizeof("mand")];
-    char uniname2ctype_pool_str408[sizeof("inmodi")];
-    char uniname2ctype_pool_str410[sizeof("inmandaic")];
-    char uniname2ctype_pool_str412[sizeof("cwl")];
-    char uniname2ctype_pool_str414[sizeof("asciihexdigit")];
-    char uniname2ctype_pool_str415[sizeof("dia")];
-    char uniname2ctype_pool_str418[sizeof("terminalpunctuation")];
-    char uniname2ctype_pool_str419[sizeof("mend")];
-    char uniname2ctype_pool_str423[sizeof("sind")];
-    char uniname2ctype_pool_str425[sizeof("wara")];
-    char uniname2ctype_pool_str433[sizeof("inwarangciti")];
-    char uniname2ctype_pool_str439[sizeof("inideographicdescriptioncharacters")];
-    char uniname2ctype_pool_str441[sizeof("inemoticons")];
-    char uniname2ctype_pool_str453[sizeof("ids")];
-    char uniname2ctype_pool_str456[sizeof("insundanese")];
-    char uniname2ctype_pool_str466[sizeof("pi")];
-    char uniname2ctype_pool_str468[sizeof("indominotiles")];
-    char uniname2ctype_pool_str470[sizeof("pc")];
-    char uniname2ctype_pool_str476[sizeof("loe")];
-    char uniname2ctype_pool_str477[sizeof("titlecaseletter")];
-    char uniname2ctype_pool_str485[sizeof("inopticalcharacterrecognition")];
-    char uniname2ctype_pool_str487[sizeof("idst")];
-    char uniname2ctype_pool_str489[sizeof("shaw")];
-    char uniname2ctype_pool_str490[sizeof("cwcf")];
-    char uniname2ctype_pool_str493[sizeof("idcontinue")];
-    char uniname2ctype_pool_str502[sizeof("inphaistosdisc")];
-    char uniname2ctype_pool_str508[sizeof("pe")];
-    char uniname2ctype_pool_str518[sizeof("indeseret")];
-    char uniname2ctype_pool_str519[sizeof("inspacingmodifierletters")];
-    char uniname2ctype_pool_str520[sizeof("inlydian")];
-    char uniname2ctype_pool_str522[sizeof("ps")];
-    char uniname2ctype_pool_str530[sizeof("hira")];
-    char uniname2ctype_pool_str536[sizeof("whitespace")];
-    char uniname2ctype_pool_str540[sizeof("inscriptionalparthian")];
-    char uniname2ctype_pool_str544[sizeof("cher")];
-    char uniname2ctype_pool_str545[sizeof("inmathematicalalphanumericsymbols")];
-    char uniname2ctype_pool_str546[sizeof("incoptic")];
-    char uniname2ctype_pool_str550[sizeof("inhiragana")];
-    char uniname2ctype_pool_str554[sizeof("inenclosedcjklettersandmonths")];
-    char uniname2ctype_pool_str556[sizeof("space")];
-    char uniname2ctype_pool_str570[sizeof("oriya")];
-    char uniname2ctype_pool_str571[sizeof("mero")];
-    char uniname2ctype_pool_str573[sizeof("mahj")];
-    char uniname2ctype_pool_str582[sizeof("tirh")];
-    char uniname2ctype_pool_str584[sizeof("sora")];
-    char uniname2ctype_pool_str587[sizeof("inscriptionalpahlavi")];
-    char uniname2ctype_pool_str593[sizeof("inarrows")];
-    char uniname2ctype_pool_str594[sizeof("mahajani")];
-    char uniname2ctype_pool_str596[sizeof("joinc")];
-    char uniname2ctype_pool_str597[sizeof("incopticepactnumbers")];
-    char uniname2ctype_pool_str598[sizeof("hano")];
-    char uniname2ctype_pool_str600[sizeof("palm")];
-    char uniname2ctype_pool_str601[sizeof("intirhuta")];
-    char uniname2ctype_pool_str603[sizeof("patws")];
-    char uniname2ctype_pool_str604[sizeof("inolchiki")];
-    char uniname2ctype_pool_str608[sizeof("inlepcha")];
-    char uniname2ctype_pool_str609[sizeof("no")];
-    char uniname2ctype_pool_str611[sizeof("lepc")];
-    char uniname2ctype_pool_str612[sizeof("inogham")];
-    char uniname2ctype_pool_str614[sizeof("co")];
-    char uniname2ctype_pool_str617[sizeof("innko")];
-    char uniname2ctype_pool_str620[sizeof("alpha")];
-    char uniname2ctype_pool_str622[sizeof("psalterpahlavi")];
-    char uniname2ctype_pool_str623[sizeof("inmro")];
-    char uniname2ctype_pool_str624[sizeof("inpalmyrene")];
-    char uniname2ctype_pool_str627[sizeof("common")];
-    char uniname2ctype_pool_str630[sizeof("cf")];
-    char uniname2ctype_pool_str637[sizeof("inmiao")];
-    char uniname2ctype_pool_str640[sizeof("so")];
-    char uniname2ctype_pool_str650[sizeof("diacritic")];
-    char uniname2ctype_pool_str658[sizeof("insundanesesupplement")];
-    char uniname2ctype_pool_str672[sizeof("intifinagh")];
-    char uniname2ctype_pool_str679[sizeof("tifinagh")];
-    char uniname2ctype_pool_str696[sizeof("odi")];
-    char uniname2ctype_pool_str699[sizeof("oidc")];
-    char uniname2ctype_pool_str700[sizeof("modi")];
-    char uniname2ctype_pool_str703[sizeof("decimalnumber")];
-    char uniname2ctype_pool_str705[sizeof("letter")];
-    char uniname2ctype_pool_str708[sizeof("dash")];
-    char uniname2ctype_pool_str709[sizeof("insylotinagri")];
-    char uniname2ctype_pool_str711[sizeof("inolditalic")];
-    char uniname2ctype_pool_str713[sizeof("wspace")];
-    char uniname2ctype_pool_str715[sizeof("dsrt")];
-    char uniname2ctype_pool_str718[sizeof("ideo")];
-    char uniname2ctype_pool_str722[sizeof("siddham")];
-    char uniname2ctype_pool_str724[sizeof("perm")];
-    char uniname2ctype_pool_str725[sizeof("oids")];
-    char uniname2ctype_pool_str727[sizeof("inmahjongtiles")];
-    char uniname2ctype_pool_str728[sizeof("lo")];
-    char uniname2ctype_pool_str730[sizeof("lineseparator")];
-    char uniname2ctype_pool_str731[sizeof("imperialaramaic")];
-    char uniname2ctype_pool_str735[sizeof("idstart")];
-    char uniname2ctype_pool_str736[sizeof("inlao")];
-    char uniname2ctype_pool_str737[sizeof("sharada")];
-    char uniname2ctype_pool_str742[sizeof("lao")];
-    char uniname2ctype_pool_str743[sizeof("laoo")];
-    char uniname2ctype_pool_str744[sizeof("mongolian")];
-    char uniname2ctype_pool_str745[sizeof("oalpha")];
-    char uniname2ctype_pool_str749[sizeof("inimperialaramaic")];
-    char uniname2ctype_pool_str753[sizeof("nchar")];
-    char uniname2ctype_pool_str758[sizeof("inlatin1supplement")];
-    char uniname2ctype_pool_str761[sizeof("prti")];
-    char uniname2ctype_pool_str763[sizeof("cprt")];
-    char uniname2ctype_pool_str767[sizeof("nd")];
-    char uniname2ctype_pool_str768[sizeof("deseret")];
-    char uniname2ctype_pool_str772[sizeof("inoldturkic")];
-    char uniname2ctype_pool_str773[sizeof("radical")];
-    char uniname2ctype_pool_str777[sizeof("canadianaboriginal")];
-    char uniname2ctype_pool_str779[sizeof("inmodifiertoneletters")];
-    char uniname2ctype_pool_str783[sizeof("incaucasianalbanian")];
-    char uniname2ctype_pool_str787[sizeof("coptic")];
-    char uniname2ctype_pool_str796[sizeof("casedletter")];
-    char uniname2ctype_pool_str798[sizeof("sd")];
-    char uniname2ctype_pool_str803[sizeof("inphoenician")];
-    char uniname2ctype_pool_str804[sizeof("sidd")];
-    char uniname2ctype_pool_str805[sizeof("privateuse")];
-    char uniname2ctype_pool_str813[sizeof("sundanese")];
-    char uniname2ctype_pool_str815[sizeof("inancientgreekmusicalnotation")];
-    char uniname2ctype_pool_str817[sizeof("insiddham")];
-    char uniname2ctype_pool_str820[sizeof("cased")];
-    char uniname2ctype_pool_str827[sizeof("print")];
-    char uniname2ctype_pool_str830[sizeof("ininscriptionalparthian")];
-    char uniname2ctype_pool_str832[sizeof("ininscriptionalpahlavi")];
-    char uniname2ctype_pool_str834[sizeof("copt")];
-    char uniname2ctype_pool_str838[sizeof("inancientgreeknumbers")];
-    char uniname2ctype_pool_str845[sizeof("saurashtra")];
-    char uniname2ctype_pool_str848[sizeof("mro")];
-    char uniname2ctype_pool_str849[sizeof("mroo")];
-    char uniname2ctype_pool_str850[sizeof("inalphabeticpresentationforms")];
-    char uniname2ctype_pool_str858[sizeof("lowercase")];
-    char uniname2ctype_pool_str861[sizeof("phli")];
-    char uniname2ctype_pool_str864[sizeof("patternwhitespace")];
-    char uniname2ctype_pool_str866[sizeof("inenclosedideographicsupplement")];
-    char uniname2ctype_pool_str869[sizeof("spaceseparator")];
-    char uniname2ctype_pool_str871[sizeof("inmathematicaloperators")];
-    char uniname2ctype_pool_str882[sizeof("omath")];
-    char uniname2ctype_pool_str892[sizeof("lisu")];
-    char uniname2ctype_pool_str895[sizeof("inpsalterpahlavi")];
-    char uniname2ctype_pool_str898[sizeof("olditalic")];
-    char uniname2ctype_pool_str905[sizeof("hanunoo")];
-    char uniname2ctype_pool_str909[sizeof("inherited")];
-    char uniname2ctype_pool_str910[sizeof("lepcha")];
-    char uniname2ctype_pool_str913[sizeof("p")];
-    char uniname2ctype_pool_str916[sizeof("inmongolian")];
-    char uniname2ctype_pool_str922[sizeof("zp")];
-    char uniname2ctype_pool_str923[sizeof("finalpunctuation")];
-    char uniname2ctype_pool_str925[sizeof("otheridcontinue")];
-    char uniname2ctype_pool_str927[sizeof("shrd")];
-    char uniname2ctype_pool_str932[sizeof("ingrantha")];
-    char uniname2ctype_pool_str934[sizeof("talu")];
-    char uniname2ctype_pool_str936[sizeof("otheralphabetic")];
-    char uniname2ctype_pool_str938[sizeof("noncharactercodepoint")];
+    char uniname2ctype_pool_str10[sizeof("yi")];
+    char uniname2ctype_pool_str13[sizeof("cn")];
+    char uniname2ctype_pool_str14[sizeof("lina")];
+    char uniname2ctype_pool_str15[sizeof("yiii")];
+    char uniname2ctype_pool_str16[sizeof("lana")];
+    char uniname2ctype_pool_str17[sizeof("ci")];
+    char uniname2ctype_pool_str19[sizeof("mn")];
+    char uniname2ctype_pool_str26[sizeof("z")];
+    char uniname2ctype_pool_str28[sizeof("mani")];
+    char uniname2ctype_pool_str33[sizeof("lo")];
+    char uniname2ctype_pool_str35[sizeof("me")];
+    char uniname2ctype_pool_str37[sizeof("loe")];
+    char uniname2ctype_pool_str39[sizeof("lao")];
+    char uniname2ctype_pool_str40[sizeof("laoo")];
+    char uniname2ctype_pool_str41[sizeof("co")];
+    char uniname2ctype_pool_str42[sizeof("miao")];
+    char uniname2ctype_pool_str47[sizeof("pi")];
+    char uniname2ctype_pool_str51[sizeof("inkannada")];
+    char uniname2ctype_pool_str52[sizeof("gran")];
+    char uniname2ctype_pool_str54[sizeof("innko")];
+    char uniname2ctype_pool_str55[sizeof("zzzz")];
+    char uniname2ctype_pool_str59[sizeof("pe")];
+    char uniname2ctype_pool_str60[sizeof("cari")];
+    char uniname2ctype_pool_str61[sizeof("lineara")];
+    char uniname2ctype_pool_str66[sizeof("carian")];
+    char uniname2ctype_pool_str69[sizeof("mendekikakui")];
+    char uniname2ctype_pool_str70[sizeof("geor")];
+    char uniname2ctype_pool_str71[sizeof("po")];
+    char uniname2ctype_pool_str72[sizeof("grek")];
+    char uniname2ctype_pool_str73[sizeof("meeteimayek")];
+    char uniname2ctype_pool_str80[sizeof("mark")];
+    char uniname2ctype_pool_str82[sizeof("mero")];
+    char uniname2ctype_pool_str85[sizeof("kana")];
+    char uniname2ctype_pool_str86[sizeof("m")];
+    char uniname2ctype_pool_str87[sizeof("mro")];
+    char uniname2ctype_pool_str88[sizeof("mroo")];
+    char uniname2ctype_pool_str90[sizeof("greek")];
+    char uniname2ctype_pool_str93[sizeof("gonm")];
+    char uniname2ctype_pool_str97[sizeof("inkharoshthi")];
+    char uniname2ctype_pool_str105[sizeof("cakm")];
+    char uniname2ctype_pool_str106[sizeof("inmanichaean")];
+    char uniname2ctype_pool_str111[sizeof("c")];
+    char uniname2ctype_pool_str113[sizeof("inarmenian")];
+    char uniname2ctype_pool_str117[sizeof("common")];
+    char uniname2ctype_pool_str122[sizeof("inosmanya")];
+    char uniname2ctype_pool_str123[sizeof("inmro")];
+    char uniname2ctype_pool_str129[sizeof("inmiao")];
+    char uniname2ctype_pool_str137[sizeof("mandaic")];
+    char uniname2ctype_pool_str142[sizeof("inmyanmar")];
+    char uniname2ctype_pool_str143[sizeof("lm")];
+    char uniname2ctype_pool_str150[sizeof("prependedconcatenationmark")];
+    char uniname2ctype_pool_str153[sizeof("inideographicsymbolsandpunctuation")];
+    char uniname2ctype_pool_str154[sizeof("inchakma")];
+    char uniname2ctype_pool_str160[sizeof("inkhmer")];
+    char uniname2ctype_pool_str161[sizeof("perm")];
+    char uniname2ctype_pool_str162[sizeof("connectorpunctuation")];
+    char uniname2ctype_pool_str164[sizeof("marc")];
+    char uniname2ctype_pool_str167[sizeof("combiningmark")];
+    char uniname2ctype_pool_str168[sizeof("merc")];
+    char uniname2ctype_pool_str169[sizeof("inrunic")];
+    char uniname2ctype_pool_str170[sizeof("incarian")];
+    char uniname2ctype_pool_str172[sizeof("incuneiformnumbersandpunctuation")];
+    char uniname2ctype_pool_str184[sizeof("inahom")];
+    char uniname2ctype_pool_str186[sizeof("incherokee")];
+    char uniname2ctype_pool_str191[sizeof("qaai")];
+    char uniname2ctype_pool_str193[sizeof("cans")];
+    char uniname2ctype_pool_str205[sizeof("lc")];
+    char uniname2ctype_pool_str210[sizeof("incuneiform")];
+    char uniname2ctype_pool_str213[sizeof("cc")];
+    char uniname2ctype_pool_str215[sizeof("armn")];
+    char uniname2ctype_pool_str216[sizeof("inavestan")];
+    char uniname2ctype_pool_str217[sizeof("armi")];
+    char uniname2ctype_pool_str219[sizeof("mc")];
+    char uniname2ctype_pool_str223[sizeof("armenian")];
+    char uniname2ctype_pool_str227[sizeof("inipaextensions")];
+    char uniname2ctype_pool_str238[sizeof("inmarchen")];
+    char uniname2ctype_pool_str243[sizeof("pc")];
+    char uniname2ctype_pool_str250[sizeof("insharada")];
+    char uniname2ctype_pool_str255[sizeof("lineseparator")];
+    char uniname2ctype_pool_str256[sizeof("masaramgondi")];
+    char uniname2ctype_pool_str259[sizeof("inarrows")];
+    char uniname2ctype_pool_str268[sizeof("ri")];
+    char uniname2ctype_pool_str270[sizeof("incham")];
+    char uniname2ctype_pool_str271[sizeof("latn")];
+    char uniname2ctype_pool_str272[sizeof("incyrillic")];
+    char uniname2ctype_pool_str273[sizeof("latin")];
+    char uniname2ctype_pool_str276[sizeof("inzanabazarsquare")];
+    char uniname2ctype_pool_str279[sizeof("insamaritan")];
+    char uniname2ctype_pool_str283[sizeof("pcm")];
+    char uniname2ctype_pool_str285[sizeof("inmasaramgondi")];
+    char uniname2ctype_pool_str288[sizeof("qmark")];
+    char uniname2ctype_pool_str289[sizeof("qaac")];
+    char uniname2ctype_pool_str291[sizeof("mtei")];
+    char uniname2ctype_pool_str295[sizeof("inthai")];
+    char uniname2ctype_pool_str300[sizeof("inscriptionalparthian")];
+    char uniname2ctype_pool_str301[sizeof("inthaana")];
+    char uniname2ctype_pool_str309[sizeof("inkaithi")];
+    char uniname2ctype_pool_str311[sizeof("initialpunctuation")];
+    char uniname2ctype_pool_str315[sizeof("inkatakana")];
+    char uniname2ctype_pool_str317[sizeof("inkhmersymbols")];
+    char uniname2ctype_pool_str343[sizeof("insyriac")];
+    char uniname2ctype_pool_str344[sizeof("intakri")];
+    char uniname2ctype_pool_str345[sizeof("prti")];
+    char uniname2ctype_pool_str356[sizeof("arabic")];
+    char uniname2ctype_pool_str357[sizeof("mand")];
+    char uniname2ctype_pool_str359[sizeof("cs")];
+    char uniname2ctype_pool_str361[sizeof("mend")];
+    char uniname2ctype_pool_str362[sizeof("zs")];
+    char uniname2ctype_pool_str363[sizeof("letter")];
+    char uniname2ctype_pool_str365[sizeof("privateuse")];
+    char uniname2ctype_pool_str369[sizeof("modi")];
+    char uniname2ctype_pool_str370[sizeof("katakana")];
+    char uniname2ctype_pool_str377[sizeof("ideo")];
+    char uniname2ctype_pool_str383[sizeof("brai")];
+    char uniname2ctype_pool_str384[sizeof("xidcontinue")];
+    char uniname2ctype_pool_str386[sizeof("inmyanmarextendeda")];
+    char uniname2ctype_pool_str387[sizeof("ascii")];
+    char uniname2ctype_pool_str389[sizeof("ps")];
+    char uniname2ctype_pool_str393[sizeof("inkanaextendeda")];
+    char uniname2ctype_pool_str396[sizeof("inmeeteimayek")];
+    char uniname2ctype_pool_str399[sizeof("inruminumeralsymbols")];
+    char uniname2ctype_pool_str408[sizeof("letternumber")];
+    char uniname2ctype_pool_str412[sizeof("knda")];
+    char uniname2ctype_pool_str425[sizeof("kannada")];
+    char uniname2ctype_pool_str428[sizeof("inoldnortharabian")];
+    char uniname2ctype_pool_str430[sizeof("inideographicdescriptioncharacters")];
+    char uniname2ctype_pool_str432[sizeof("inmodi")];
+    char uniname2ctype_pool_str440[sizeof("incjkcompatibilityforms")];
+    char uniname2ctype_pool_str445[sizeof("incjkcompatibilityideographs")];
+    char uniname2ctype_pool_str453[sizeof("xidc")];
+    char uniname2ctype_pool_str455[sizeof("inmendekikakui")];
+    char uniname2ctype_pool_str458[sizeof("brahmi")];
+    char uniname2ctype_pool_str480[sizeof("inolditalic")];
+    char uniname2ctype_pool_str482[sizeof("inmiscellaneousmathematicalsymbolsa")];
+    char uniname2ctype_pool_str486[sizeof("inspecials")];
+    char uniname2ctype_pool_str487[sizeof("inemoticons")];
+    char uniname2ctype_pool_str488[sizeof("patternwhitespace")];
+    char uniname2ctype_pool_str489[sizeof("gothic")];
+    char uniname2ctype_pool_str492[sizeof("intransportandmapsymbols")];
+    char uniname2ctype_pool_str493[sizeof("l")];
+    char uniname2ctype_pool_str509[sizeof("psalterpahlavi")];
+    char uniname2ctype_pool_str516[sizeof("vai")];
+    char uniname2ctype_pool_str517[sizeof("vaii")];
+    char uniname2ctype_pool_str523[sizeof("lt")];
+    char uniname2ctype_pool_str524[sizeof("meroiticcursive")];
+    char uniname2ctype_pool_str526[sizeof("xids")];
+    char uniname2ctype_pool_str530[sizeof("incommonindicnumberforms")];
+    char uniname2ctype_pool_str531[sizeof("inmandaic")];
+    char uniname2ctype_pool_str533[sizeof("inlineara")];
+    char uniname2ctype_pool_str541[sizeof("incjkcompatibilityideographssupplement")];
+    char uniname2ctype_pool_str544[sizeof("inlao")];
+    char uniname2ctype_pool_str545[sizeof("insundanese")];
+    char uniname2ctype_pool_str547[sizeof("mongolian")];
+    char uniname2ctype_pool_str552[sizeof("bamum")];
+    char uniname2ctype_pool_str554[sizeof("idc")];
+    char uniname2ctype_pool_str561[sizeof("inancientsymbols")];
+    char uniname2ctype_pool_str573[sizeof("kali")];
+    char uniname2ctype_pool_str574[sizeof("grlink")];
+    char uniname2ctype_pool_str576[sizeof("grext")];
+    char uniname2ctype_pool_str577[sizeof("control")];
+    char uniname2ctype_pool_str586[sizeof("inkanasupplement")];
+    char uniname2ctype_pool_str591[sizeof("inopticalcharacterrecognition")];
+    char uniname2ctype_pool_str596[sizeof("inadlam")];
+    char uniname2ctype_pool_str598[sizeof("so")];
+    char uniname2ctype_pool_str601[sizeof("inoldsoutharabian")];
+    char uniname2ctype_pool_str602[sizeof("sk")];
+    char uniname2ctype_pool_str606[sizeof("print")];
+    char uniname2ctype_pool_str607[sizeof("idsbinaryoperator")];
+    char uniname2ctype_pool_str609[sizeof("palm")];
+    char uniname2ctype_pool_str618[sizeof("batk")];
+    char uniname2ctype_pool_str619[sizeof("indominotiles")];
+    char uniname2ctype_pool_str620[sizeof("intaitham")];
+    char uniname2ctype_pool_str622[sizeof("inlycian")];
+    char uniname2ctype_pool_str629[sizeof("sora")];
+    char uniname2ctype_pool_str636[sizeof("batak")];
+    char uniname2ctype_pool_str642[sizeof("inmodifiertoneletters")];
+    char uniname2ctype_pool_str657[sizeof("patws")];
+    char uniname2ctype_pool_str665[sizeof("inmalayalam")];
+    char uniname2ctype_pool_str670[sizeof("incjkstrokes")];
+    char uniname2ctype_pool_str681[sizeof("incontrolpictures")];
+    char uniname2ctype_pool_str684[sizeof("samr")];
+    char uniname2ctype_pool_str689[sizeof("bass")];
+    char uniname2ctype_pool_str693[sizeof("samaritan")];
+    char uniname2ctype_pool_str699[sizeof("inmusicalsymbols")];
+    char uniname2ctype_pool_str700[sizeof("ids")];
+    char uniname2ctype_pool_str705[sizeof("pd")];
+    char uniname2ctype_pool_str708[sizeof("sm")];
+    char uniname2ctype_pool_str715[sizeof("pauc")];
+    char uniname2ctype_pool_str716[sizeof("joinc")];
+    char uniname2ctype_pool_str725[sizeof("inlinearbideograms")];
+    char uniname2ctype_pool_str730[sizeof("idcontinue")];
+    char uniname2ctype_pool_str732[sizeof("inancientgreekmusicalnotation")];
+    char uniname2ctype_pool_str737[sizeof("inoldturkic")];
+    char uniname2ctype_pool_str738[sizeof("alnum")];
+    char uniname2ctype_pool_str739[sizeof("inugaritic")];
+    char uniname2ctype_pool_str741[sizeof("s")];
+    char uniname2ctype_pool_str742[sizeof("inmiscellaneoussymbols")];
+    char uniname2ctype_pool_str743[sizeof("n")];
+    char uniname2ctype_pool_str748[sizeof("lisu")];
+    char uniname2ctype_pool_str751[sizeof("inmiscellaneoussymbolsandarrows")];
+    char uniname2ctype_pool_str753[sizeof("insylotinagri")];
+    char uniname2ctype_pool_str756[sizeof("inmiscellaneoussymbolsandpictographs")];
+    char uniname2ctype_pool_str770[sizeof("sc")];
+    char uniname2ctype_pool_str773[sizeof("no")];
+    char uniname2ctype_pool_str777[sizeof("ital")];
+    char uniname2ctype_pool_str781[sizeof("p")];
+    char uniname2ctype_pool_str782[sizeof("xpeo")];
+    char uniname2ctype_pool_str785[sizeof("di")];
+    char uniname2ctype_pool_str787[sizeof("idst")];
+    char uniname2ctype_pool_str788[sizeof("intaile")];
+    char uniname2ctype_pool_str791[sizeof("nko")];
+    char uniname2ctype_pool_str792[sizeof("nkoo")];
+    char uniname2ctype_pool_str793[sizeof("dia")];
+    char uniname2ctype_pool_str797[sizeof("inphoenician")];
+    char uniname2ctype_pool_str799[sizeof("inlatinextendeda")];
+    char uniname2ctype_pool_str802[sizeof("indeseret")];
+    char uniname2ctype_pool_str807[sizeof("inlatinextendede")];
+    char uniname2ctype_pool_str812[sizeof("incaucasianalbanian")];
+    char uniname2ctype_pool_str819[sizeof("insaurashtra")];
+    char uniname2ctype_pool_str823[sizeof("inmeeteimayekextensions")];
+    char uniname2ctype_pool_str834[sizeof("idstart")];
+    char uniname2ctype_pool_str835[sizeof("bali")];
+    char uniname2ctype_pool_str837[sizeof("inspacingmodifierletters")];
+    char uniname2ctype_pool_str848[sizeof("bengali")];
+    char uniname2ctype_pool_str849[sizeof("intamil")];
+    char uniname2ctype_pool_str851[sizeof("inmultani")];
+    char uniname2ctype_pool_str852[sizeof("vs")];
+    char uniname2ctype_pool_str853[sizeof("inlydian")];
+    char uniname2ctype_pool_str855[sizeof("balinese")];
+    char uniname2ctype_pool_str856[sizeof("lepc")];
+    char uniname2ctype_pool_str857[sizeof("cased")];
+    char uniname2ctype_pool_str862[sizeof("zinh")];
+    char uniname2ctype_pool_str867[sizeof("blank")];
+    char uniname2ctype_pool_str870[sizeof("runr")];
+    char uniname2ctype_pool_str872[sizeof("patternsyntax")];
+    char uniname2ctype_pool_str874[sizeof("bidic")];
+    char uniname2ctype_pool_str877[sizeof("xdigit")];
+    char uniname2ctype_pool_str881[sizeof("xidstart")];
+    char uniname2ctype_pool_str885[sizeof("inphaistosdisc")];
+    char uniname2ctype_pool_str897[sizeof("inancientgreeknumbers")];
+    char uniname2ctype_pool_str899[sizeof("canadianaboriginal")];
+    char uniname2ctype_pool_str903[sizeof("cher")];
+    char uniname2ctype_pool_str905[sizeof("plrd")];
+    char uniname2ctype_pool_str906[sizeof("sind")];
+    char uniname2ctype_pool_str909[sizeof("cherokee")];
+    char uniname2ctype_pool_str911[sizeof("phoenician")];
+    char uniname2ctype_pool_str918[sizeof("marchen")];
+    char uniname2ctype_pool_str919[sizeof("inhiragana")];
+    char uniname2ctype_pool_str926[sizeof("inearlydynasticcuneiform")];
+    char uniname2ctype_pool_str928[sizeof("graphemebase")];
+    char uniname2ctype_pool_str930[sizeof("cham")];
+    char uniname2ctype_pool_str931[sizeof("inimperialaramaic")];
+    char uniname2ctype_pool_str932[sizeof("kaithi")];
+    char uniname2ctype_pool_str935[sizeof("insiddham")];
+    char uniname2ctype_pool_str937[sizeof("diacritic")];
+    char uniname2ctype_pool_str942[sizeof("chakma")];
+    char uniname2ctype_pool_str944[sizeof("graphemelink")];
+    char uniname2ctype_pool_str947[sizeof("inkhudawadi")];
+    char uniname2ctype_pool_str948[sizeof("inmahajani")];
+    char uniname2ctype_pool_str956[sizeof("khojki")];
+    char uniname2ctype_pool_str957[sizeof("inogham")];
+    char uniname2ctype_pool_str960[sizeof("khar")];
+    char uniname2ctype_pool_str966[sizeof("incountingrodnumerals")];
+    char uniname2ctype_pool_str975[sizeof("manichaean")];
+    char uniname2ctype_pool_str976[sizeof("coptic")];
+    char uniname2ctype_pool_str977[sizeof("bamu")];
+    char uniname2ctype_pool_str980[sizeof("sterm")];
+    char uniname2ctype_pool_str983[sizeof("inethiopic")];
+    char uniname2ctype_pool_str985[sizeof("ll")];
+    char uniname2ctype_pool_str988[sizeof("inolchiki")];
+    char uniname2ctype_pool_str991[sizeof("inlatinextendedc")];
+    char uniname2ctype_pool_str996[sizeof("zl")];
+    char uniname2ctype_pool_str998[sizeof("adlm")];
+    char uniname2ctype_pool_str1016[sizeof("incyrillicsupplement")];
+    char uniname2ctype_pool_str1019[sizeof("incyrillicextendeda")];
+    char uniname2ctype_pool_str1022[sizeof("incherokeesupplement")];
+    char uniname2ctype_pool_str1023[sizeof("decimalnumber")];
+    char uniname2ctype_pool_str1025[sizeof("khmr")];
+    char uniname2ctype_pool_str1029[sizeof("copt")];
+    char uniname2ctype_pool_str1032[sizeof("ahom")];
+    char uniname2ctype_pool_str1034[sizeof("runic")];
+    char uniname2ctype_pool_str1048[sizeof("intaixuanjingsymbols")];
+    char uniname2ctype_pool_str1049[sizeof("insinhala")];
+    char uniname2ctype_pool_str1053[sizeof("cprt")];
+    char uniname2ctype_pool_str1056[sizeof("imperialaramaic")];
+    char uniname2ctype_pool_str1061[sizeof("casedletter")];
+    char uniname2ctype_pool_str1065[sizeof("khmer")];
+    char uniname2ctype_pool_str1067[sizeof("linb")];
+    char uniname2ctype_pool_str1069[sizeof("adlam")];
+    char uniname2ctype_pool_str1076[sizeof("ininscriptionalparthian")];
+    char uniname2ctype_pool_str1077[sizeof("ininscriptionalpahlavi")];
+    char uniname2ctype_pool_str1078[sizeof("sinhala")];
+    char uniname2ctype_pool_str1080[sizeof("zanb")];
+    char uniname2ctype_pool_str1086[sizeof("incjkunifiedideographsextensiona")];
+    char uniname2ctype_pool_str1088[sizeof("multani")];
+    char uniname2ctype_pool_str1089[sizeof("quotationmark")];
+    char uniname2ctype_pool_str1090[sizeof("incjkunifiedideographsextensione")];
+    char uniname2ctype_pool_str1094[sizeof("innabataean")];
+    char uniname2ctype_pool_str1098[sizeof("inbhaiksuki")];
+    char uniname2ctype_pool_str1100[sizeof("inelbasan")];
+    char uniname2ctype_pool_str1103[sizeof("inkanbun")];
+    char uniname2ctype_pool_str1104[sizeof("inscriptionalpahlavi")];
+    char uniname2ctype_pool_str1107[sizeof("bopo")];
+    char uniname2ctype_pool_str1114[sizeof("linearb")];
+    char uniname2ctype_pool_str1115[sizeof("incyrillicextendedc")];
+    char uniname2ctype_pool_str1116[sizeof("glagolitic")];
+    char uniname2ctype_pool_str1119[sizeof("kharoshthi")];
+    char uniname2ctype_pool_str1120[sizeof("inoldpersian")];
+    char uniname2ctype_pool_str1124[sizeof("goth")];
+    char uniname2ctype_pool_str1126[sizeof("math")];
+    char uniname2ctype_pool_str1127[sizeof("joincontrol")];
+    char uniname2ctype_pool_str1131[sizeof("punct")];
+    char uniname2ctype_pool_str1135[sizeof("lu")];
+    char uniname2ctype_pool_str1136[sizeof("limb")];
+    char uniname2ctype_pool_str1147[sizeof("inmiscellaneoustechnical")];
+    char uniname2ctype_pool_str1152[sizeof("han")];
+    char uniname2ctype_pool_str1155[sizeof("hani")];
+    char uniname2ctype_pool_str1156[sizeof("invai")];
+    char uniname2ctype_pool_str1157[sizeof("sundanese")];
+    char uniname2ctype_pool_str1158[sizeof("taile")];
+    char uniname2ctype_pool_str1160[sizeof("takri")];
+    char uniname2ctype_pool_str1161[sizeof("grantha")];
+    char uniname2ctype_pool_str1167[sizeof("hano")];
+    char uniname2ctype_pool_str1168[sizeof("inhatran")];
+    char uniname2ctype_pool_str1172[sizeof("oriya")];
+    char uniname2ctype_pool_str1173[sizeof("intirhuta")];
+    char uniname2ctype_pool_str1178[sizeof("guru")];
+    char uniname2ctype_pool_str1179[sizeof("kthi")];
+    char uniname2ctype_pool_str1180[sizeof("saur")];
+    char uniname2ctype_pool_str1182[sizeof("incjkunifiedideographsextensionc")];
+    char uniname2ctype_pool_str1186[sizeof("hanunoo")];
+    char uniname2ctype_pool_str1189[sizeof("paucinhau")];
+    char uniname2ctype_pool_str1192[sizeof("takr")];
+    char uniname2ctype_pool_str1193[sizeof("hira")];
+    char uniname2ctype_pool_str1195[sizeof("inarabic")];
+    char uniname2ctype_pool_str1196[sizeof("bopomofo")];
+    char uniname2ctype_pool_str1201[sizeof("radical")];
+    char uniname2ctype_pool_str1202[sizeof("gurmukhi")];
+    char uniname2ctype_pool_str1203[sizeof("inkhojki")];
+    char uniname2ctype_pool_str1207[sizeof("arab")];
+    char uniname2ctype_pool_str1211[sizeof("limbu")];
+    char uniname2ctype_pool_str1218[sizeof("inoldpermic")];
+    char uniname2ctype_pool_str1222[sizeof("brah")];
+    char uniname2ctype_pool_str1225[sizeof("inoldhungarian")];
+    char uniname2ctype_pool_str1227[sizeof("inshorthandformatcontrols")];
+    char uniname2ctype_pool_str1229[sizeof("incoptic")];
+    char uniname2ctype_pool_str1232[sizeof("sd")];
+    char uniname2ctype_pool_str1237[sizeof("sidd")];
+    char uniname2ctype_pool_str1243[sizeof("inherited")];
+    char uniname2ctype_pool_str1245[sizeof("incjkunifiedideographs")];
+    char uniname2ctype_pool_str1249[sizeof("term")];
+    char uniname2ctype_pool_str1252[sizeof("incjksymbolsandpunctuation")];
+    char uniname2ctype_pool_str1253[sizeof("graphemeextend")];
+    char uniname2ctype_pool_str1254[sizeof("dsrt")];
+    char uniname2ctype_pool_str1257[sizeof("cntrl")];
+    char uniname2ctype_pool_str1259[sizeof("xsux")];
+    char uniname2ctype_pool_str1262[sizeof("insyriacsupplement")];
+    char uniname2ctype_pool_str1267[sizeof("inbasiclatin")];
+    char uniname2ctype_pool_str1275[sizeof("deseret")];
+    char uniname2ctype_pool_str1281[sizeof("inenclosedideographicsupplement")];
+    char uniname2ctype_pool_str1285[sizeof("bidicontrol")];
+    char uniname2ctype_pool_str1288[sizeof("closepunctuation")];
+    char uniname2ctype_pool_str1294[sizeof("inlatinextendedadditional")];
+    char uniname2ctype_pool_str1296[sizeof("inarabicpresentationformsa")];
+    char uniname2ctype_pool_str1298[sizeof("grbase")];
+    char uniname2ctype_pool_str1306[sizeof("mong")];
+    char uniname2ctype_pool_str1307[sizeof("anatolianhieroglyphs")];
+    char uniname2ctype_pool_str1308[sizeof("inenclosedalphanumerics")];
+    char uniname2ctype_pool_str1309[sizeof("ingrantha")];
+    char uniname2ctype_pool_str1310[sizeof("georgian")];
+    char uniname2ctype_pool_str1317[sizeof("osage")];
+    char uniname2ctype_pool_str1325[sizeof("inosage")];
+    char uniname2ctype_pool_str1326[sizeof("ingeneralpunctuation")];
+    char uniname2ctype_pool_str1331[sizeof("saurashtra")];
+    char uniname2ctype_pool_str1334[sizeof("inshavian")];
+    char uniname2ctype_pool_str1335[sizeof("space")];
+    char uniname2ctype_pool_str1336[sizeof("mult")];
+    char uniname2ctype_pool_str1340[sizeof("inpalmyrene")];
+    char uniname2ctype_pool_str1341[sizeof("inanatolianhieroglyphs")];
+    char uniname2ctype_pool_str1344[sizeof("spacingmark")];
+    char uniname2ctype_pool_str1348[sizeof("alpha")];
+    char uniname2ctype_pool_str1354[sizeof("ingeorgian")];
+    char uniname2ctype_pool_str1355[sizeof("intibetan")];
+    char uniname2ctype_pool_str1364[sizeof("inlepcha")];
+    char uniname2ctype_pool_str1365[sizeof("inbatak")];
+    char uniname2ctype_pool_str1367[sizeof("emoji")];
+    char uniname2ctype_pool_str1368[sizeof("osma")];
+    char uniname2ctype_pool_str1369[sizeof("bhks")];
+    char uniname2ctype_pool_str1372[sizeof("inmongolian")];
+    char uniname2ctype_pool_str1373[sizeof("variationselector")];
+    char uniname2ctype_pool_str1374[sizeof("braille")];
+    char uniname2ctype_pool_str1379[sizeof("phli")];
+    char uniname2ctype_pool_str1382[sizeof("bhaiksuki")];
+    char uniname2ctype_pool_str1388[sizeof("phnx")];
+    char uniname2ctype_pool_str1390[sizeof("inblockelements")];
 #ifdef USE_UNICODE_AGE_PROPERTIES
-    char uniname2ctype_pool_str939[sizeof("age=1.1")];
-    char uniname2ctype_pool_str940[sizeof("age=2.1")];
+    char uniname2ctype_pool_str1391[sizeof("age=1.1")];
+    char uniname2ctype_pool_str1392[sizeof("age=4.1")];
+    char uniname2ctype_pool_str1393[sizeof("age=4.0")];
+    char uniname2ctype_pool_str1394[sizeof("age=10.0")];
+    char uniname2ctype_pool_str1395[sizeof("age=2.1")];
+    char uniname2ctype_pool_str1396[sizeof("age=2.0")];
+    char uniname2ctype_pool_str1397[sizeof("age=6.1")];
+    char uniname2ctype_pool_str1398[sizeof("age=6.0")];
+    char uniname2ctype_pool_str1399[sizeof("age=9.0")];
+    char uniname2ctype_pool_str1400[sizeof("age=8.0")];
+    char uniname2ctype_pool_str1401[sizeof("age=6.2")];
+    char uniname2ctype_pool_str1402[sizeof("age=7.0")];
 #endif /* USE_UNICODE_AGE_PROPERTIES */
-    char uniname2ctype_pool_str941[sizeof("closepunctuation")];
-    char uniname2ctype_pool_str943[sizeof("letternumber")];
+    char uniname2ctype_pool_str1403[sizeof("inenclosedalphanumericsupplement")];
+    char uniname2ctype_pool_str1404[sizeof("innumberforms")];
 #ifdef USE_UNICODE_AGE_PROPERTIES
-    char uniname2ctype_pool_str944[sizeof("age=6.1")];
-    char uniname2ctype_pool_str945[sizeof("age=6.2")];
+    char uniname2ctype_pool_str1405[sizeof("age=5.1")];
+    char uniname2ctype_pool_str1406[sizeof("age=5.0")];
 #endif /* USE_UNICODE_AGE_PROPERTIES */
-    char uniname2ctype_pool_str946[sizeof("telu")];
+    char uniname2ctype_pool_str1407[sizeof("nd")];
+    char uniname2ctype_pool_str1408[sizeof("separator")];
 #ifdef USE_UNICODE_AGE_PROPERTIES
-    char uniname2ctype_pool_str947[sizeof("age=3.1")];
-    char uniname2ctype_pool_str948[sizeof("age=3.2")];
-    char uniname2ctype_pool_str949[sizeof("age=5.1")];
-    char uniname2ctype_pool_str950[sizeof("age=5.2")];
-    char uniname2ctype_pool_str951[sizeof("age=2.0")];
-    char uniname2ctype_pool_str952[sizeof("age=6.3")];
+    char uniname2ctype_pool_str1409[sizeof("age=5.2")];
 #endif /* USE_UNICODE_AGE_PROPERTIES */
-    char uniname2ctype_pool_str953[sizeof("inshorthandformatcontrols")];
-    char uniname2ctype_pool_str954[sizeof("inoldnortharabian")];
+    char uniname2ctype_pool_str1411[sizeof("ingurmukhi")];
+    char uniname2ctype_pool_str1413[sizeof("incjkunifiedideographsextensiond")];
+    char uniname2ctype_pool_str1414[sizeof("taiviet")];
+    char uniname2ctype_pool_str1416[sizeof("sinh")];
 #ifdef USE_UNICODE_AGE_PROPERTIES
-    char uniname2ctype_pool_str955[sizeof("age=6.0")];
-    char uniname2ctype_pool_str956[sizeof("age=4.1")];
+    char uniname2ctype_pool_str1417[sizeof("age=3.1")];
+    char uniname2ctype_pool_str1418[sizeof("age=3.0")];
 #endif /* USE_UNICODE_AGE_PROPERTIES */
-    char uniname2ctype_pool_str957[sizeof("ingeneralpunctuation")];
+    char uniname2ctype_pool_str1420[sizeof("hatran")];
 #ifdef USE_UNICODE_AGE_PROPERTIES
-    char uniname2ctype_pool_str958[sizeof("age=3.0")];
-    char uniname2ctype_pool_str959[sizeof("age=7.0")];
-    char uniname2ctype_pool_str960[sizeof("age=5.0")];
+    char uniname2ctype_pool_str1421[sizeof("age=3.2")];
+    char uniname2ctype_pool_str1423[sizeof("age=6.3")];
 #endif /* USE_UNICODE_AGE_PROPERTIES */
-    char uniname2ctype_pool_str962[sizeof("innabataean")];
-#ifdef USE_UNICODE_AGE_PROPERTIES
-    char uniname2ctype_pool_str967[sizeof("age=4.0")];
-#endif /* USE_UNICODE_AGE_PROPERTIES */
-    char uniname2ctype_pool_str970[sizeof("bamum")];
-    char uniname2ctype_pool_str972[sizeof("control")];
-    char uniname2ctype_pool_str974[sizeof("induployan")];
-    char uniname2ctype_pool_str975[sizeof("inlatinextendedd")];
-    char uniname2ctype_pool_str976[sizeof("inarabic")];
-    char uniname2ctype_pool_str982[sizeof("runic")];
-    char uniname2ctype_pool_str984[sizeof("inelbasan")];
-    char uniname2ctype_pool_str985[sizeof("inoldsoutharabian")];
-    char uniname2ctype_pool_str986[sizeof("inbasiclatin")];
-    char uniname2ctype_pool_str995[sizeof("format")];
-    char uniname2ctype_pool_str996[sizeof("innumberforms")];
-    char uniname2ctype_pool_str998[sizeof("inugaritic")];
-    char uniname2ctype_pool_str999[sizeof("separator")];
-    char uniname2ctype_pool_str1000[sizeof("idsbinaryoperator")];
-    char uniname2ctype_pool_str1004[sizeof("tagbanwa")];
-    char uniname2ctype_pool_str1012[sizeof("bass")];
-    char uniname2ctype_pool_str1013[sizeof("saur")];
-    char uniname2ctype_pool_str1014[sizeof("nbat")];
-    char uniname2ctype_pool_str1017[sizeof("intaixuanjingsymbols")];
-    char uniname2ctype_pool_str1019[sizeof("joincontrol")];
-    char uniname2ctype_pool_str1023[sizeof("otheridstart")];
-    char uniname2ctype_pool_str1027[sizeof("inbyzantinemusicalsymbols")];
-    char uniname2ctype_pool_str1031[sizeof("intags")];
-    char uniname2ctype_pool_str1033[sizeof("nabataean")];
-    char uniname2ctype_pool_str1034[sizeof("insuperscriptsandsubscripts")];
-    char uniname2ctype_pool_str1036[sizeof("intibetan")];
-    char uniname2ctype_pool_str1039[sizeof("insaurashtra")];
-    char uniname2ctype_pool_str1040[sizeof("othersymbol")];
-    char uniname2ctype_pool_str1041[sizeof("ext")];
-    char uniname2ctype_pool_str1046[sizeof("inarabicpresentationformsa")];
-    char uniname2ctype_pool_str1048[sizeof("inmiscellaneousmathematicalsymbolsb")];
-    char uniname2ctype_pool_str1049[sizeof("otherlowercase")];
-    char uniname2ctype_pool_str1052[sizeof("phoenician")];
-    char uniname2ctype_pool_str1055[sizeof("lower")];
-    char uniname2ctype_pool_str1060[sizeof("linb")];
-    char uniname2ctype_pool_str1064[sizeof("po")];
-    char uniname2ctype_pool_str1065[sizeof("inmyanmarextendedb")];
-    char uniname2ctype_pool_str1066[sizeof("limb")];
-    char uniname2ctype_pool_str1068[sizeof("inbraillepatterns")];
-    char uniname2ctype_pool_str1069[sizeof("tibt")];
-    char uniname2ctype_pool_str1070[sizeof("cuneiform")];
-    char uniname2ctype_pool_str1072[sizeof("bali")];
-    char uniname2ctype_pool_str1073[sizeof("oldpersian")];
-    char uniname2ctype_pool_str1077[sizeof("oldpermic")];
-    char uniname2ctype_pool_str1080[sizeof("pf")];
-    char uniname2ctype_pool_str1084[sizeof("word")];
-    char uniname2ctype_pool_str1086[sizeof("tibetan")];
-    char uniname2ctype_pool_str1089[sizeof("incyrillicsupplement")];
-    char uniname2ctype_pool_str1093[sizeof("elba")];
-    char uniname2ctype_pool_str1094[sizeof("insupplementalmathematicaloperators")];
-    char uniname2ctype_pool_str1095[sizeof("inbalinese")];
-    char uniname2ctype_pool_str1101[sizeof("bengali")];
-    char uniname2ctype_pool_str1104[sizeof("caseignorable")];
-    char uniname2ctype_pool_str1107[sizeof("incountingrodnumerals")];
-    char uniname2ctype_pool_str1114[sizeof("other")];
-    char uniname2ctype_pool_str1118[sizeof("tirhuta")];
-    char uniname2ctype_pool_str1121[sizeof("othernumber")];
-    char uniname2ctype_pool_str1123[sizeof("balinese")];
-    char uniname2ctype_pool_str1129[sizeof("elbasan")];
-    char uniname2ctype_pool_str1134[sizeof("inunifiedcanadianaboriginalsyllabics")];
-    char uniname2ctype_pool_str1136[sizeof("lowercaseletter")];
-    char uniname2ctype_pool_str1140[sizeof("ethiopic")];
-    char uniname2ctype_pool_str1141[sizeof("gran")];
-    char uniname2ctype_pool_str1149[sizeof("ingurmukhi")];
-    char uniname2ctype_pool_str1151[sizeof("sund")];
-    char uniname2ctype_pool_str1153[sizeof("inethiopicsupplement")];
-    char uniname2ctype_pool_str1160[sizeof("inoldpersian")];
-    char uniname2ctype_pool_str1163[sizeof("inoldpermic")];
-    char uniname2ctype_pool_str1170[sizeof("othermath")];
-    char uniname2ctype_pool_str1174[sizeof("unassigned")];
-    char uniname2ctype_pool_str1180[sizeof("hmng")];
-    char uniname2ctype_pool_str1181[sizeof("narb")];
-    char uniname2ctype_pool_str1184[sizeof("brai")];
-    char uniname2ctype_pool_str1186[sizeof("hang")];
-    char uniname2ctype_pool_str1187[sizeof("insorasompeng")];
-    char uniname2ctype_pool_str1193[sizeof("arab")];
-    char uniname2ctype_pool_str1194[sizeof("plrd")];
-    char uniname2ctype_pool_str1195[sizeof("ingujarati")];
-    char uniname2ctype_pool_str1197[sizeof("brahmi")];
-    char uniname2ctype_pool_str1201[sizeof("runr")];
-    char uniname2ctype_pool_str1202[sizeof("ahex")];
-    char uniname2ctype_pool_str1206[sizeof("mong")];
-    char uniname2ctype_pool_str1211[sizeof("pauc")];
-    char uniname2ctype_pool_str1212[sizeof("sarb")];
-    char uniname2ctype_pool_str1218[sizeof("ogam")];
-    char uniname2ctype_pool_str1221[sizeof("olower")];
-    char uniname2ctype_pool_str1222[sizeof("pd")];
-    char uniname2ctype_pool_str1235[sizeof("number")];
-    char uniname2ctype_pool_str1238[sizeof("inbrahmi")];
-    char uniname2ctype_pool_str1240[sizeof("otherletter")];
-    char uniname2ctype_pool_str1252[sizeof("ingothic")];
-    char uniname2ctype_pool_str1254[sizeof("phagspa")];
-    char uniname2ctype_pool_str1262[sizeof("inletterlikesymbols")];
-    char uniname2ctype_pool_str1265[sizeof("yi")];
-    char uniname2ctype_pool_str1269[sizeof("hangul")];
-    char uniname2ctype_pool_str1271[sizeof("yiii")];
-    char uniname2ctype_pool_str1272[sizeof("tfng")];
-    char uniname2ctype_pool_str1273[sizeof("insupplementalarrowsc")];
-    char uniname2ctype_pool_str1277[sizeof("ingreekandcoptic")];
-    char uniname2ctype_pool_str1279[sizeof("xidc")];
-    char uniname2ctype_pool_str1280[sizeof("insupplementalarrowsa")];
-    char uniname2ctype_pool_str1281[sizeof("gothic")];
-    char uniname2ctype_pool_str1283[sizeof("grext")];
-    char uniname2ctype_pool_str1285[sizeof("incombininghalfmarks")];
-    char uniname2ctype_pool_str1286[sizeof("deprecated")];
-    char uniname2ctype_pool_str1287[sizeof("inbassavah")];
-    char uniname2ctype_pool_str1305[sizeof("xids")];
-    char uniname2ctype_pool_str1308[sizeof("linearb")];
-    char uniname2ctype_pool_str1312[sizeof("ingeometricshapes")];
-    char uniname2ctype_pool_str1313[sizeof("phlp")];
-    char uniname2ctype_pool_str1314[sizeof("warangciti")];
-    char uniname2ctype_pool_str1317[sizeof("inblockelements")];
-    char uniname2ctype_pool_str1318[sizeof("modifierletter")];
-    char uniname2ctype_pool_str1321[sizeof("indingbats")];
-    char uniname2ctype_pool_str1322[sizeof("dep")];
-    char uniname2ctype_pool_str1324[sizeof("punct")];
-    char uniname2ctype_pool_str1327[sizeof("inhanunoo")];
-    char uniname2ctype_pool_str1334[sizeof("bidic")];
-    char uniname2ctype_pool_str1344[sizeof("ingreekextended")];
-    char uniname2ctype_pool_str1353[sizeof("idsb")];
-    char uniname2ctype_pool_str1359[sizeof("assigned")];
-    char uniname2ctype_pool_str1364[sizeof("otherpunctuation")];
-    char uniname2ctype_pool_str1368[sizeof("inhangulsyllables")];
-    char uniname2ctype_pool_str1373[sizeof("inarabicmathematicalalphabeticsymbols")];
-    char uniname2ctype_pool_str1385[sizeof("inornamentaldingbats")];
-    char uniname2ctype_pool_str1387[sizeof("inphagspa")];
-    char uniname2ctype_pool_str1389[sizeof("lyci")];
-    char uniname2ctype_pool_str1393[sizeof("mlym")];
-    char uniname2ctype_pool_str1399[sizeof("inarabicextendeda")];
-    char uniname2ctype_pool_str1400[sizeof("rjng")];
-    char uniname2ctype_pool_str1402[sizeof("lycian")];
-    char uniname2ctype_pool_str1403[sizeof("inalchemicalsymbols")];
-    char uniname2ctype_pool_str1409[sizeof("xdigit")];
-    char uniname2ctype_pool_str1412[sizeof("digit")];
-    char uniname2ctype_pool_str1420[sizeof("xidstart")];
-    char uniname2ctype_pool_str1421[sizeof("inrejang")];
-    char uniname2ctype_pool_str1424[sizeof("malayalam")];
-    char uniname2ctype_pool_str1425[sizeof("idstrinaryoperator")];
-    char uniname2ctype_pool_str1429[sizeof("invai")];
-    char uniname2ctype_pool_str1435[sizeof("vai")];
-    char uniname2ctype_pool_str1436[sizeof("vaii")];
-    char uniname2ctype_pool_str1438[sizeof("hiragana")];
-    char uniname2ctype_pool_str1442[sizeof("ingeorgian")];
-    char uniname2ctype_pool_str1448[sizeof("braille")];
-    char uniname2ctype_pool_str1455[sizeof("geor")];
-    char uniname2ctype_pool_str1457[sizeof("brah")];
-    char uniname2ctype_pool_str1463[sizeof("glagolitic")];
-    char uniname2ctype_pool_str1465[sizeof("inkannada")];
-    char uniname2ctype_pool_str1466[sizeof("cakm")];
-    char uniname2ctype_pool_str1467[sizeof("kana")];
-    char uniname2ctype_pool_str1469[sizeof("hebr")];
-    char uniname2ctype_pool_str1471[sizeof("inshavian")];
-    char uniname2ctype_pool_str1477[sizeof("vs")];
-    char uniname2ctype_pool_str1481[sizeof("inchakma")];
-    char uniname2ctype_pool_str1490[sizeof("ogham")];
-    char uniname2ctype_pool_str1491[sizeof("sylotinagri")];
-    char uniname2ctype_pool_str1492[sizeof("inunifiedcanadianaboriginalsyllabicsextended")];
-    char uniname2ctype_pool_str1495[sizeof("inmeroitichieroglyphs")];
-    char uniname2ctype_pool_str1498[sizeof("grantha")];
-    char uniname2ctype_pool_str1500[sizeof("graphemebase")];
-    char uniname2ctype_pool_str1502[sizeof("mathsymbol")];
-    char uniname2ctype_pool_str1505[sizeof("mymr")];
-    char uniname2ctype_pool_str1513[sizeof("insupplementaryprivateuseareaa")];
-    char uniname2ctype_pool_str1514[sizeof("mendekikakui")];
-    char uniname2ctype_pool_str1516[sizeof("incjkcompatibilityforms")];
-    char uniname2ctype_pool_str1518[sizeof("inhalfwidthandfullwidthforms")];
-    char uniname2ctype_pool_str1521[sizeof("incjkcompatibilityideographs")];
-    char uniname2ctype_pool_str1522[sizeof("inkaithi")];
-    char uniname2ctype_pool_str1525[sizeof("avst")];
-    char uniname2ctype_pool_str1526[sizeof("inarabicsupplement")];
-    char uniname2ctype_pool_str1527[sizeof("takri")];
-    char uniname2ctype_pool_str1529[sizeof("syrc")];
-    char uniname2ctype_pool_str1533[sizeof("meeteimayek")];
-    char uniname2ctype_pool_str1534[sizeof("myanmar")];
-    char uniname2ctype_pool_str1535[sizeof("avestan")];
-    char uniname2ctype_pool_str1536[sizeof("inhanguljamoextendeda")];
-    char uniname2ctype_pool_str1540[sizeof("goth")];
-    char uniname2ctype_pool_str1542[sizeof("inkatakana")];
-    char uniname2ctype_pool_str1544[sizeof("incyrillicextendeda")];
-    char uniname2ctype_pool_str1549[sizeof("alphabetic")];
-    char uniname2ctype_pool_str1550[sizeof("syriac")];
-    char uniname2ctype_pool_str1551[sizeof("ideographic")];
-    char uniname2ctype_pool_str1555[sizeof("incjkstrokes")];
-    char uniname2ctype_pool_str1557[sizeof("inlinearbsyllabary")];
-    char uniname2ctype_pool_str1558[sizeof("tavt")];
-    char uniname2ctype_pool_str1559[sizeof("intaiviet")];
-    char uniname2ctype_pool_str1564[sizeof("incjkcompatibilityideographssupplement")];
-    char uniname2ctype_pool_str1576[sizeof("inmeeteimayek")];
-    char uniname2ctype_pool_str1577[sizeof("kali")];
-    char uniname2ctype_pool_str1581[sizeof("inyiradicals")];
-    char uniname2ctype_pool_str1586[sizeof("lu")];
-    char uniname2ctype_pool_str1587[sizeof("inoriya")];
-    char uniname2ctype_pool_str1590[sizeof("hebrew")];
-    char uniname2ctype_pool_str1596[sizeof("extender")];
-    char uniname2ctype_pool_str1598[sizeof("inhighprivateusesurrogates")];
-    char uniname2ctype_pool_str1600[sizeof("limbu")];
-    char uniname2ctype_pool_str1606[sizeof("inbuhid")];
-    char uniname2ctype_pool_str1608[sizeof("inethiopicextendeda")];
-    char uniname2ctype_pool_str1609[sizeof("xidcontinue")];
-    char uniname2ctype_pool_str1611[sizeof("inyijinghexagramsymbols")];
-    char uniname2ctype_pool_str1612[sizeof("logicalorderexception")];
-    char uniname2ctype_pool_str1616[sizeof("inhebrew")];
-    char uniname2ctype_pool_str1617[sizeof("cyrl")];
-    char uniname2ctype_pool_str1618[sizeof("osmanya")];
-    char uniname2ctype_pool_str1621[sizeof("phnx")];
-    char uniname2ctype_pool_str1622[sizeof("incombiningdiacriticalmarks")];
-    char uniname2ctype_pool_str1626[sizeof("inkanasupplement")];
-    char uniname2ctype_pool_str1627[sizeof("inlisu")];
-    char uniname2ctype_pool_str1628[sizeof("changeswhencasemapped")];
-    char uniname2ctype_pool_str1632[sizeof("incombiningdiacriticalmarksforsymbols")];
-    char uniname2ctype_pool_str1636[sizeof("cwu")];
-    char uniname2ctype_pool_str1641[sizeof("phag")];
-    char uniname2ctype_pool_str1645[sizeof("insmallformvariants")];
-    char uniname2ctype_pool_str1656[sizeof("inpahawhhmong")];
-    char uniname2ctype_pool_str1661[sizeof("otheruppercase")];
-    char uniname2ctype_pool_str1662[sizeof("intelugu")];
-    char uniname2ctype_pool_str1665[sizeof("incombiningdiacriticalmarkssupplement")];
-    char uniname2ctype_pool_str1670[sizeof("ingeometricshapesextended")];
-    char uniname2ctype_pool_str1671[sizeof("xpeo")];
-    char uniname2ctype_pool_str1687[sizeof("bamu")];
-    char uniname2ctype_pool_str1689[sizeof("inbamum")];
-    char uniname2ctype_pool_str1692[sizeof("mark")];
-    char uniname2ctype_pool_str1694[sizeof("dupl")];
-    char uniname2ctype_pool_str1695[sizeof("graph")];
-    char uniname2ctype_pool_str1696[sizeof("dashpunctuation")];
-    char uniname2ctype_pool_str1700[sizeof("patternsyntax")];
-    char uniname2ctype_pool_str1705[sizeof("changeswhentitlecased")];
-    char uniname2ctype_pool_str1706[sizeof("inkharoshthi")];
-    char uniname2ctype_pool_str1712[sizeof("inkhmer")];
-    char uniname2ctype_pool_str1713[sizeof("java")];
-    char uniname2ctype_pool_str1714[sizeof("sylo")];
-    char uniname2ctype_pool_str1719[sizeof("ugaritic")];
-    char uniname2ctype_pool_str1722[sizeof("otherdefaultignorablecodepoint")];
-    char uniname2ctype_pool_str1723[sizeof("softdotted")];
-    char uniname2ctype_pool_str1729[sizeof("uideo")];
-    char uniname2ctype_pool_str1732[sizeof("inphoneticextensions")];
-    char uniname2ctype_pool_str1736[sizeof("injavanese")];
-    char uniname2ctype_pool_str1742[sizeof("invariationselectors")];
-    char uniname2ctype_pool_str1744[sizeof("kaithi")];
-    char uniname2ctype_pool_str1747[sizeof("cyrillic")];
-    char uniname2ctype_pool_str1749[sizeof("intakri")];
-    char uniname2ctype_pool_str1750[sizeof("takr")];
-    char uniname2ctype_pool_str1755[sizeof("javanese")];
-    char uniname2ctype_pool_str1757[sizeof("bidicontrol")];
-    char uniname2ctype_pool_str1758[sizeof("caucasianalbanian")];
-    char uniname2ctype_pool_str1765[sizeof("lydi")];
-    char uniname2ctype_pool_str1772[sizeof("insupplementalpunctuation")];
-    char uniname2ctype_pool_str1775[sizeof("inphoneticextensionssupplement")];
-    char uniname2ctype_pool_str1778[sizeof("lydian")];
-    char uniname2ctype_pool_str1784[sizeof("oldturkic")];
-    char uniname2ctype_pool_str1785[sizeof("invariationselectorssupplement")];
-    char uniname2ctype_pool_str1786[sizeof("kthi")];
-    char uniname2ctype_pool_str1792[sizeof("inhanguljamo")];
-    char uniname2ctype_pool_str1797[sizeof("patsyn")];
-    char uniname2ctype_pool_str1802[sizeof("inlimbu")];
-    char uniname2ctype_pool_str1804[sizeof("sorasompeng")];
-    char uniname2ctype_pool_str1807[sizeof("orya")];
-    char uniname2ctype_pool_str1822[sizeof("inkhmersymbols")];
-    char uniname2ctype_pool_str1824[sizeof("inglagolitic")];
-    char uniname2ctype_pool_str1831[sizeof("indevanagari")];
-    char uniname2ctype_pool_str1835[sizeof("deva")];
-    char uniname2ctype_pool_str1836[sizeof("knda")];
-    char uniname2ctype_pool_str1841[sizeof("inbengali")];
-    char uniname2ctype_pool_str1843[sizeof("symbol")];
-    char uniname2ctype_pool_str1846[sizeof("devanagari")];
-    char uniname2ctype_pool_str1849[sizeof("inmendekikakui")];
-    char uniname2ctype_pool_str1852[sizeof("beng")];
-    char uniname2ctype_pool_str1853[sizeof("invedicextensions")];
-    char uniname2ctype_pool_str1859[sizeof("graphemeextend")];
-    char uniname2ctype_pool_str1865[sizeof("kannada")];
-    char uniname2ctype_pool_str1866[sizeof("inbuginese")];
-    char uniname2ctype_pool_str1869[sizeof("olck")];
-    char uniname2ctype_pool_str1871[sizeof("meroitichieroglyphs")];
-    char uniname2ctype_pool_str1872[sizeof("ugar")];
-    char uniname2ctype_pool_str1874[sizeof("intagalog")];
-    char uniname2ctype_pool_str1878[sizeof("inbamumsupplement")];
-    char uniname2ctype_pool_str1880[sizeof("olchiki")];
-    char uniname2ctype_pool_str1899[sizeof("incurrencysymbols")];
-    char uniname2ctype_pool_str1904[sizeof("tagb")];
-    char uniname2ctype_pool_str1912[sizeof("inaegeannumbers")];
-    char uniname2ctype_pool_str1915[sizeof("intagbanwa")];
-    char uniname2ctype_pool_str1916[sizeof("uppercase")];
-    char uniname2ctype_pool_str1917[sizeof("defaultignorablecodepoint")];
-    char uniname2ctype_pool_str1919[sizeof("glag")];
-    char uniname2ctype_pool_str1921[sizeof("inkatakanaphoneticextensions")];
-    char uniname2ctype_pool_str1932[sizeof("changeswhencasefolded")];
-    char uniname2ctype_pool_str1942[sizeof("inpaucinhau")];
-    char uniname2ctype_pool_str1943[sizeof("inprivateusearea")];
-    char uniname2ctype_pool_str1947[sizeof("paucinhau")];
-    char uniname2ctype_pool_str1953[sizeof("spacingmark")];
-    char uniname2ctype_pool_str1956[sizeof("khmr")];
-    char uniname2ctype_pool_str1962[sizeof("khar")];
-    char uniname2ctype_pool_str1964[sizeof("inarabicpresentationformsb")];
-    char uniname2ctype_pool_str1967[sizeof("changeswhenlowercased")];
-    char uniname2ctype_pool_str1971[sizeof("tglg")];
-    char uniname2ctype_pool_str1976[sizeof("inethiopicextended")];
-    char uniname2ctype_pool_str1980[sizeof("incombiningdiacriticalmarksextended")];
-    char uniname2ctype_pool_str1986[sizeof("oupper")];
-    char uniname2ctype_pool_str1994[sizeof("incjksymbolsandpunctuation")];
-    char uniname2ctype_pool_str1997[sizeof("bopo")];
-    char uniname2ctype_pool_str1998[sizeof("punctuation")];
-    char uniname2ctype_pool_str2002[sizeof("combiningmark")];
-    char uniname2ctype_pool_str2007[sizeof("inplayingcards")];
-    char uniname2ctype_pool_str2008[sizeof("inbopomofo")];
-    char uniname2ctype_pool_str2021[sizeof("hyphen")];
-    char uniname2ctype_pool_str2028[sizeof("inkhojki")];
-    char uniname2ctype_pool_str2046[sizeof("nko")];
-    char uniname2ctype_pool_str2047[sizeof("nkoo")];
-    char uniname2ctype_pool_str2048[sizeof("enclosingmark")];
-    char uniname2ctype_pool_str2053[sizeof("openpunctuation")];
-    char uniname2ctype_pool_str2061[sizeof("currencysymbol")];
-    char uniname2ctype_pool_str2063[sizeof("inverticalforms")];
-    char uniname2ctype_pool_str2071[sizeof("hex")];
-    char uniname2ctype_pool_str2072[sizeof("modifiersymbol")];
-    char uniname2ctype_pool_str2073[sizeof("inlatinextendedb")];
-    char uniname2ctype_pool_str2075[sizeof("kharoshthi")];
-    char uniname2ctype_pool_str2080[sizeof("cherokee")];
-    char uniname2ctype_pool_str2088[sizeof("pahawhhmong")];
-    char uniname2ctype_pool_str2096[sizeof("cypriot")];
-    char uniname2ctype_pool_str2105[sizeof("incypriotsyllabary")];
-    char uniname2ctype_pool_str2110[sizeof("palmyrene")];
-    char uniname2ctype_pool_str2113[sizeof("upper")];
-    char uniname2ctype_pool_str2116[sizeof("aghb")];
-    char uniname2ctype_pool_str2123[sizeof("georgian")];
-    char uniname2ctype_pool_str2131[sizeof("gujr")];
-    char uniname2ctype_pool_str2142[sizeof("grbase")];
-    char uniname2ctype_pool_str2152[sizeof("gujarati")];
-    char uniname2ctype_pool_str2153[sizeof("hexdigit")];
-    char uniname2ctype_pool_str2189[sizeof("khmer")];
-    char uniname2ctype_pool_str2194[sizeof("uppercaseletter")];
-    char uniname2ctype_pool_str2198[sizeof("insupplementalarrowsb")];
-    char uniname2ctype_pool_str2224[sizeof("surrogate")];
-    char uniname2ctype_pool_str2227[sizeof("unifiedideograph")];
-    char uniname2ctype_pool_str2237[sizeof("nonspacingmark")];
-    char uniname2ctype_pool_str2241[sizeof("othergraphemeextend")];
-    char uniname2ctype_pool_str2242[sizeof("indevanagariextended")];
-    char uniname2ctype_pool_str2252[sizeof("orkh")];
-    char uniname2ctype_pool_str2273[sizeof("ingeorgiansupplement")];
-    char uniname2ctype_pool_str2287[sizeof("oldnortharabian")];
-    char uniname2ctype_pool_str2290[sizeof("tagalog")];
-    char uniname2ctype_pool_str2292[sizeof("khoj")];
-    char uniname2ctype_pool_str2311[sizeof("bopomofo")];
-    char uniname2ctype_pool_str2318[sizeof("rejang")];
-    char uniname2ctype_pool_str2326[sizeof("buhd")];
-    char uniname2ctype_pool_str2343[sizeof("incjkradicalssupplement")];
-    char uniname2ctype_pool_str2382[sizeof("inkanbun")];
-    char uniname2ctype_pool_str2406[sizeof("variationselector")];
-    char uniname2ctype_pool_str2417[sizeof("inkangxiradicals")];
-    char uniname2ctype_pool_str2421[sizeof("inhighsurrogates")];
-    char uniname2ctype_pool_str2431[sizeof("insupplementaryprivateuseareab")];
-    char uniname2ctype_pool_str2445[sizeof("ogrext")];
-    char uniname2ctype_pool_str2449[sizeof("batk")];
-    char uniname2ctype_pool_str2454[sizeof("inhanguljamoextendedb")];
-    char uniname2ctype_pool_str2457[sizeof("inbatak")];
-    char uniname2ctype_pool_str2462[sizeof("incyrillicextendedb")];
-    char uniname2ctype_pool_str2502[sizeof("innoblock")];
-    char uniname2ctype_pool_str2527[sizeof("any")];
-    char uniname2ctype_pool_str2534[sizeof("xsux")];
-    char uniname2ctype_pool_str2562[sizeof("bugi")];
-    char uniname2ctype_pool_str2570[sizeof("inkhudawadi")];
-    char uniname2ctype_pool_str2571[sizeof("telugu")];
-    char uniname2ctype_pool_str2579[sizeof("changeswhenuppercased")];
-    char uniname2ctype_pool_str2588[sizeof("grek")];
-    char uniname2ctype_pool_str2591[sizeof("guru")];
-    char uniname2ctype_pool_str2595[sizeof("paragraphseparator")];
-    char uniname2ctype_pool_str2613[sizeof("buginese")];
-    char uniname2ctype_pool_str2617[sizeof("inyisyllables")];
-    char uniname2ctype_pool_str2631[sizeof("egyp")];
-    char uniname2ctype_pool_str2634[sizeof("khudawadi")];
-    char uniname2ctype_pool_str2643[sizeof("unknown")];
-    char uniname2ctype_pool_str2685[sizeof("bassavah")];
-    char uniname2ctype_pool_str2689[sizeof("inegyptianhieroglyphs")];
-    char uniname2ctype_pool_str2709[sizeof("buhid")];
-    char uniname2ctype_pool_str2722[sizeof("inkayahli")];
-    char uniname2ctype_pool_str2732[sizeof("inmeroiticcursive")];
-    char uniname2ctype_pool_str2734[sizeof("incjkcompatibility")];
-    char uniname2ctype_pool_str2787[sizeof("oldsoutharabian")];
-    char uniname2ctype_pool_str2795[sizeof("quotationmark")];
-    char uniname2ctype_pool_str2889[sizeof("inhangulcompatibilityjamo")];
-    char uniname2ctype_pool_str2898[sizeof("qmark")];
-    char uniname2ctype_pool_str2902[sizeof("incjkunifiedideographsextensionc")];
-    char uniname2ctype_pool_str2906[sizeof("sk")];
-    char uniname2ctype_pool_str2909[sizeof("incjkunifiedideographsextensiona")];
-    char uniname2ctype_pool_str2918[sizeof("incjkunifiedideographs")];
-    char uniname2ctype_pool_str2984[sizeof("katakana")];
-    char uniname2ctype_pool_str3112[sizeof("kayahli")];
-    char uniname2ctype_pool_str3137[sizeof("duployan")];
-    char uniname2ctype_pool_str3278[sizeof("incjkunifiedideographsextensiond")];
-    char uniname2ctype_pool_str3360[sizeof("inbopomofoextended")];
-    char uniname2ctype_pool_str3466[sizeof("khojki")];
-    char uniname2ctype_pool_str3777[sizeof("zyyy")];
-    char uniname2ctype_pool_str3778[sizeof("egyptianhieroglyphs")];
-    char uniname2ctype_pool_str3827[sizeof("incjkunifiedideographsextensionb")];
-    char uniname2ctype_pool_str3886[sizeof("batak")];
-    char uniname2ctype_pool_str3941[sizeof("blank")];
-    char uniname2ctype_pool_str3995[sizeof("inboxdrawing")];
-    char uniname2ctype_pool_str4025[sizeof("greek")];
-    char uniname2ctype_pool_str4035[sizeof("gurmukhi")];
-    char uniname2ctype_pool_str4122[sizeof("grlink")];
-    char uniname2ctype_pool_str4322[sizeof("graphemelink")];
+    char uniname2ctype_pool_str1427[sizeof("format")];
+    char uniname2ctype_pool_str1429[sizeof("shavian")];
+    char uniname2ctype_pool_str1434[sizeof("insinhalaarchaicnumbers")];
+    char uniname2ctype_pool_str1435[sizeof("cuneiform")];
+    char uniname2ctype_pool_str1439[sizeof("inmyanmarextendedb")];
+    char uniname2ctype_pool_str1444[sizeof("punctuation")];
+    char uniname2ctype_pool_str1449[sizeof("inarabicextendeda")];
+    char uniname2ctype_pool_str1450[sizeof("hatr")];
+    char uniname2ctype_pool_str1451[sizeof("inhanunoo")];
+    char uniname2ctype_pool_str1453[sizeof("inlatinextendedd")];
+    char uniname2ctype_pool_str1455[sizeof("modifierletter")];
+    char uniname2ctype_pool_str1456[sizeof("odi")];
+    char uniname2ctype_pool_str1458[sizeof("ahex")];
+    char uniname2ctype_pool_str1463[sizeof("logicalorderexception")];
+    char uniname2ctype_pool_str1464[sizeof("inbyzantinemusicalsymbols")];
+    char uniname2ctype_pool_str1469[sizeof("sund")];
+    char uniname2ctype_pool_str1470[sizeof("number")];
+    char uniname2ctype_pool_str1471[sizeof("insundanesesupplement")];
+    char uniname2ctype_pool_str1485[sizeof("incopticepactnumbers")];
+    char uniname2ctype_pool_str1490[sizeof("emojimodifier")];
+    char uniname2ctype_pool_str1496[sizeof("zp")];
+    char uniname2ctype_pool_str1497[sizeof("asciihexdigit")];
+    char uniname2ctype_pool_str1500[sizeof("indevanagari")];
+    char uniname2ctype_pool_str1508[sizeof("innewa")];
+    char uniname2ctype_pool_str1510[sizeof("avestan")];
+    char uniname2ctype_pool_str1521[sizeof("insorasompeng")];
+    char uniname2ctype_pool_str1535[sizeof("inmiscellaneousmathematicalsymbolsb")];
+    char uniname2ctype_pool_str1536[sizeof("inbraillepatterns")];
+    char uniname2ctype_pool_str1539[sizeof("nonspacingmark")];
+    char uniname2ctype_pool_str1540[sizeof("ingreekandcoptic")];
+    char uniname2ctype_pool_str1545[sizeof("xposixpunct")];
+    char uniname2ctype_pool_str1553[sizeof("inwarangciti")];
+    char uniname2ctype_pool_str1555[sizeof("oidc")];
+    char uniname2ctype_pool_str1560[sizeof("terminalpunctuation")];
+    char uniname2ctype_pool_str1565[sizeof("cf")];
+    char uniname2ctype_pool_str1572[sizeof("lower")];
+    char uniname2ctype_pool_str1580[sizeof("inunifiedcanadianaboriginalsyllabics")];
+    char uniname2ctype_pool_str1585[sizeof("idsb")];
+    char uniname2ctype_pool_str1589[sizeof("inbalinese")];
+    char uniname2ctype_pool_str1593[sizeof("induployan")];
+    char uniname2ctype_pool_str1594[sizeof("innoblock")];
+    char uniname2ctype_pool_str1595[sizeof("pf")];
+    char uniname2ctype_pool_str1602[sizeof("inoriya")];
+    char uniname2ctype_pool_str1604[sizeof("inkatakanaphoneticextensions")];
+    char uniname2ctype_pool_str1606[sizeof("inkayahli")];
+    char uniname2ctype_pool_str1607[sizeof("wara")];
+    char uniname2ctype_pool_str1608[sizeof("innushu")];
+    char uniname2ctype_pool_str1609[sizeof("lepcha")];
+    char uniname2ctype_pool_str1611[sizeof("inmeroitichieroglyphs")];
+    char uniname2ctype_pool_str1617[sizeof("beng")];
+    char uniname2ctype_pool_str1623[sizeof("idstrinaryoperator")];
+    char uniname2ctype_pool_str1628[sizeof("oids")];
+    char uniname2ctype_pool_str1630[sizeof("regionalindicator")];
+    char uniname2ctype_pool_str1631[sizeof("enclosingmark")];
+    char uniname2ctype_pool_str1632[sizeof("java")];
+    char uniname2ctype_pool_str1636[sizeof("tale")];
+    char uniname2ctype_pool_str1638[sizeof("emojimodifierbase")];
+    char uniname2ctype_pool_str1645[sizeof("inphoneticextensions")];
+    char uniname2ctype_pool_str1647[sizeof("lowercase")];
+    char uniname2ctype_pool_str1648[sizeof("inverticalforms")];
+    char uniname2ctype_pool_str1650[sizeof("javanese")];
+    char uniname2ctype_pool_str1654[sizeof("sentenceterminal")];
+    char uniname2ctype_pool_str1655[sizeof("ingreekextended")];
+    char uniname2ctype_pool_str1656[sizeof("invariationselectors")];
+    char uniname2ctype_pool_str1657[sizeof("cwcm")];
+    char uniname2ctype_pool_str1663[sizeof("lyci")];
+    char uniname2ctype_pool_str1666[sizeof("avst")];
+    char uniname2ctype_pool_str1669[sizeof("lycian")];
+    char uniname2ctype_pool_str1671[sizeof("zanabazarsquare")];
+    char uniname2ctype_pool_str1672[sizeof("sarb")];
+    char uniname2ctype_pool_str1673[sizeof("invedicextensions")];
+    char uniname2ctype_pool_str1674[sizeof("inkangxiradicals")];
+    char uniname2ctype_pool_str1677[sizeof("intaiviet")];
+    char uniname2ctype_pool_str1682[sizeof("mymr")];
+    char uniname2ctype_pool_str1690[sizeof("incjkradicalssupplement")];
+    char uniname2ctype_pool_str1695[sizeof("myanmar")];
+    char uniname2ctype_pool_str1697[sizeof("taml")];
+    char uniname2ctype_pool_str1714[sizeof("olower")];
+    char uniname2ctype_pool_str1725[sizeof("nl")];
+    char uniname2ctype_pool_str1727[sizeof("inethiopicsupplement")];
+    char uniname2ctype_pool_str1728[sizeof("olck")];
+    char uniname2ctype_pool_str1730[sizeof("inethiopicextendeda")];
+    char uniname2ctype_pool_str1736[sizeof("graph")];
+    char uniname2ctype_pool_str1737[sizeof("olchiki")];
+    char uniname2ctype_pool_str1741[sizeof("inphoneticextensionssupplement")];
+    char uniname2ctype_pool_str1743[sizeof("emojicomponent")];
+    char uniname2ctype_pool_str1746[sizeof("inunifiedcanadianaboriginalsyllabicsextended")];
+    char uniname2ctype_pool_str1748[sizeof("ingeometricshapes")];
+    char uniname2ctype_pool_str1752[sizeof("invariationselectorssupplement")];
+    char uniname2ctype_pool_str1754[sizeof("gujr")];
+    char uniname2ctype_pool_str1762[sizeof("sharada")];
+    char uniname2ctype_pool_str1766[sizeof("gujarati")];
+    char uniname2ctype_pool_str1767[sizeof("nchar")];
+    char uniname2ctype_pool_str1772[sizeof("innewtailue")];
+    char uniname2ctype_pool_str1774[sizeof("glag")];
+    char uniname2ctype_pool_str1780[sizeof("ideographic")];
+    char uniname2ctype_pool_str1783[sizeof("shrd")];
+    char uniname2ctype_pool_str1785[sizeof("insoyombo")];
+    char uniname2ctype_pool_str1789[sizeof("inbamum")];
+    char uniname2ctype_pool_str1800[sizeof("inlatin1supplement")];
+    char uniname2ctype_pool_str1802[sizeof("dash")];
+    char uniname2ctype_pool_str1806[sizeof("indingbats")];
+    char uniname2ctype_pool_str1808[sizeof("spaceseparator")];
+    char uniname2ctype_pool_str1813[sizeof("phagspa")];
+    char uniname2ctype_pool_str1814[sizeof("titlecaseletter")];
+    char uniname2ctype_pool_str1815[sizeof("incjkcompatibility")];
+    char uniname2ctype_pool_str1818[sizeof("intangut")];
+    char uniname2ctype_pool_str1819[sizeof("incombiningdiacriticalmarks")];
+    char uniname2ctype_pool_str1821[sizeof("inlisu")];
+    char uniname2ctype_pool_str1825[sizeof("siddham")];
+    char uniname2ctype_pool_str1829[sizeof("incombiningdiacriticalmarksforsymbols")];
+    char uniname2ctype_pool_str1840[sizeof("caucasianalbanian")];
+    char uniname2ctype_pool_str1843[sizeof("uideo")];
+    char uniname2ctype_pool_str1846[sizeof("indevanagariextended")];
+    char uniname2ctype_pool_str1847[sizeof("narb")];
+    char uniname2ctype_pool_str1857[sizeof("inbopomofo")];
+    char uniname2ctype_pool_str1858[sizeof("incjkunifiedideographsextensionf")];
+    char uniname2ctype_pool_str1861[sizeof("inmeroiticcursive")];
+    char uniname2ctype_pool_str1866[sizeof("patsyn")];
+    char uniname2ctype_pool_str1885[sizeof("insuperscriptsandsubscripts")];
+    char uniname2ctype_pool_str1894[sizeof("lydi")];
+    char uniname2ctype_pool_str1900[sizeof("lydian")];
+    char uniname2ctype_pool_str1903[sizeof("intags")];
+    char uniname2ctype_pool_str1909[sizeof("intelugu")];
+    char uniname2ctype_pool_str1910[sizeof("intifinagh")];
+    char uniname2ctype_pool_str1914[sizeof("ingeometricshapesextended")];
+    char uniname2ctype_pool_str1915[sizeof("incombiningdiacriticalmarkssupplement")];
+    char uniname2ctype_pool_str1922[sizeof("deva")];
+    char uniname2ctype_pool_str1924[sizeof("inprivateusearea")];
+    char uniname2ctype_pool_str1932[sizeof("devanagari")];
+    char uniname2ctype_pool_str1933[sizeof("noncharactercodepoint")];
+    char uniname2ctype_pool_str1934[sizeof("inbrahmi")];
+    char uniname2ctype_pool_str1943[sizeof("lowercaseletter")];
+    char uniname2ctype_pool_str1944[sizeof("word")];
+    char uniname2ctype_pool_str1975[sizeof("caseignorable")];
+    char uniname2ctype_pool_str1976[sizeof("inyiradicals")];
+    char uniname2ctype_pool_str1979[sizeof("deprecated")];
+    char uniname2ctype_pool_str1981[sizeof("thai")];
+    char uniname2ctype_pool_str1983[sizeof("thaa")];
+    char uniname2ctype_pool_str1985[sizeof("incombiningdiacriticalmarksextended")];
+    char uniname2ctype_pool_str1989[sizeof("inmathematicalalphanumericsymbols")];
+    char uniname2ctype_pool_str1991[sizeof("thaana")];
+    char uniname2ctype_pool_str1995[sizeof("inornamentaldingbats")];
+    char uniname2ctype_pool_str1997[sizeof("oldpersian")];
+    char uniname2ctype_pool_str1998[sizeof("unassigned")];
+    char uniname2ctype_pool_str1999[sizeof("insupplementalarrowsa")];
+    char uniname2ctype_pool_str2003[sizeof("inpaucinhau")];
+    char uniname2ctype_pool_str2005[sizeof("cwt")];
+    char uniname2ctype_pool_str2007[sizeof("tirhuta")];
+    char uniname2ctype_pool_str2008[sizeof("mahj")];
+    char uniname2ctype_pool_str2013[sizeof("insmallformvariants")];
+    char uniname2ctype_pool_str2015[sizeof("tirh")];
+    char uniname2ctype_pool_str2017[sizeof("orkh")];
+    char uniname2ctype_pool_str2020[sizeof("mahajani")];
+    char uniname2ctype_pool_str2047[sizeof("softdotted")];
+    char uniname2ctype_pool_str2049[sizeof("inphagspa")];
+    char uniname2ctype_pool_str2056[sizeof("inethiopicextended")];
+    char uniname2ctype_pool_str2059[sizeof("taitham")];
+    char uniname2ctype_pool_str2061[sizeof("assigned")];
+    char uniname2ctype_pool_str2068[sizeof("nbat")];
+    char uniname2ctype_pool_str2072[sizeof("incyrillicextendedb")];
+    char uniname2ctype_pool_str2073[sizeof("khoj")];
+    char uniname2ctype_pool_str2076[sizeof("buhd")];
+    char uniname2ctype_pool_str2079[sizeof("nabataean")];
+    char uniname2ctype_pool_str2084[sizeof("inalphabeticpresentationforms")];
+    char uniname2ctype_pool_str2091[sizeof("sorasompeng")];
+    char uniname2ctype_pool_str2095[sizeof("insupplementalarrowsc")];
+    char uniname2ctype_pool_str2096[sizeof("oldpermic")];
+    char uniname2ctype_pool_str2097[sizeof("cyrl")];
+    char uniname2ctype_pool_str2101[sizeof("finalpunctuation")];
+    char uniname2ctype_pool_str2112[sizeof("meroitichieroglyphs")];
+    char uniname2ctype_pool_str2114[sizeof("inarabicsupplement")];
+    char uniname2ctype_pool_str2117[sizeof("phlp")];
+    char uniname2ctype_pool_str2119[sizeof("inpsalterpahlavi")];
+    char uniname2ctype_pool_str2134[sizeof("mlym")];
+    char uniname2ctype_pool_str2139[sizeof("incjkunifiedideographsextensionb")];
+    char uniname2ctype_pool_str2146[sizeof("palmyrene")];
+    char uniname2ctype_pool_str2148[sizeof("insupplementalmathematicaloperators")];
+    char uniname2ctype_pool_str2149[sizeof("malayalam")];
+    char uniname2ctype_pool_str2154[sizeof("soyo")];
+    char uniname2ctype_pool_str2158[sizeof("hex")];
+    char uniname2ctype_pool_str2161[sizeof("phag")];
+    char uniname2ctype_pool_str2165[sizeof("graphemeclusterbreak=ebase")];
+    char uniname2ctype_pool_str2172[sizeof("graphemeclusterbreak=ebasegaz")];
+    char uniname2ctype_pool_str2174[sizeof("inhanguljamo")];
+    char uniname2ctype_pool_str2176[sizeof("bugi")];
+    char uniname2ctype_pool_str2179[sizeof("graphemeclusterbreak=spacingmark")];
+    char uniname2ctype_pool_str2182[sizeof("inhanguljamoextendeda")];
+    char uniname2ctype_pool_str2187[sizeof("currencysymbol")];
+    char uniname2ctype_pool_str2189[sizeof("tamil")];
+    char uniname2ctype_pool_str2192[sizeof("graphemeclusterbreak=cr")];
+    char uniname2ctype_pool_str2193[sizeof("talu")];
+    char uniname2ctype_pool_str2196[sizeof("buginese")];
+    char uniname2ctype_pool_str2197[sizeof("telu")];
+    char uniname2ctype_pool_str2198[sizeof("ingeorgiansupplement")];
+    char uniname2ctype_pool_str2199[sizeof("graphemeclusterbreak=emodifier")];
+    char uniname2ctype_pool_str2207[sizeof("graphemeclusterbreak=regionalindicator")];
+    char uniname2ctype_pool_str2210[sizeof("inlimbu")];
+    char uniname2ctype_pool_str2224[sizeof("inenclosedcjklettersandmonths")];
+    char uniname2ctype_pool_str2225[sizeof("tangut")];
+    char uniname2ctype_pool_str2229[sizeof("inmathematicaloperators")];
+    char uniname2ctype_pool_str2232[sizeof("newa")];
+    char uniname2ctype_pool_str2249[sizeof("newtailue")];
+    char uniname2ctype_pool_str2252[sizeof("hebr")];
+    char uniname2ctype_pool_str2260[sizeof("inbuhid")];
+    char uniname2ctype_pool_str2263[sizeof("insuttonsignwriting")];
+    char uniname2ctype_pool_str2264[sizeof("syrc")];
+    char uniname2ctype_pool_str2271[sizeof("dep")];
+    char uniname2ctype_pool_str2276[sizeof("inbassavah")];
+    char uniname2ctype_pool_str2286[sizeof("otheridcontinue")];
+    char uniname2ctype_pool_str2289[sizeof("inletterlikesymbols")];
+    char uniname2ctype_pool_str2296[sizeof("ext")];
+    char uniname2ctype_pool_str2300[sizeof("other")];
+    char uniname2ctype_pool_str2306[sizeof("inmongoliansupplement")];
+    char uniname2ctype_pool_str2307[sizeof("othernumber")];
+    char uniname2ctype_pool_str2311[sizeof("injavanese")];
+    char uniname2ctype_pool_str2313[sizeof("olditalic")];
+    char uniname2ctype_pool_str2327[sizeof("nshu")];
+    char uniname2ctype_pool_str2349[sizeof("inarabicpresentationformsb")];
+    char uniname2ctype_pool_str2350[sizeof("inlowsurrogates")];
+    char uniname2ctype_pool_str2353[sizeof("incombininghalfmarks")];
+    char uniname2ctype_pool_str2360[sizeof("inbengali")];
+    char uniname2ctype_pool_str2364[sizeof("cwcf")];
+    char uniname2ctype_pool_str2369[sizeof("inbuginese")];
+    char uniname2ctype_pool_str2372[sizeof("syriac")];
+    char uniname2ctype_pool_str2380[sizeof("ethi")];
+    char uniname2ctype_pool_str2386[sizeof("otheralphabetic")];
+    char uniname2ctype_pool_str2393[sizeof("emojipresentation")];
+    char uniname2ctype_pool_str2399[sizeof("inarabicmathematicalalphabeticsymbols")];
+    char uniname2ctype_pool_str2408[sizeof("tang")];
+    char uniname2ctype_pool_str2409[sizeof("buhid")];
+    char uniname2ctype_pool_str2412[sizeof("graphemeclusterbreak=t")];
+    char uniname2ctype_pool_str2413[sizeof("extender")];
+    char uniname2ctype_pool_str2414[sizeof("graphemeclusterbreak=lvt")];
+    char uniname2ctype_pool_str2422[sizeof("tagbanwa")];
+    char uniname2ctype_pool_str2423[sizeof("hang")];
+    char uniname2ctype_pool_str2433[sizeof("incurrencysymbols")];
+    char uniname2ctype_pool_str2449[sizeof("ingujarati")];
+    char uniname2ctype_pool_str2451[sizeof("paragraphseparator")];
+    char uniname2ctype_pool_str2452[sizeof("tibt")];
+    char uniname2ctype_pool_str2461[sizeof("tibetan")];
+    char uniname2ctype_pool_str2465[sizeof("ogam")];
+    char uniname2ctype_pool_str2467[sizeof("cwl")];
+    char uniname2ctype_pool_str2469[sizeof("oalpha")];
+    char uniname2ctype_pool_str2473[sizeof("hiragana")];
+    char uniname2ctype_pool_str2475[sizeof("surrogate")];
+    char uniname2ctype_pool_str2481[sizeof("inbamumsupplement")];
+    char uniname2ctype_pool_str2483[sizeof("inrejang")];
+    char uniname2ctype_pool_str2484[sizeof("intangutcomponents")];
+    char uniname2ctype_pool_str2488[sizeof("hmng")];
+    char uniname2ctype_pool_str2489[sizeof("graphemeclusterbreak=extend")];
+    char uniname2ctype_pool_str2490[sizeof("graphemeclusterbreak=prepend")];
+    char uniname2ctype_pool_str2493[sizeof("bassavah")];
+    char uniname2ctype_pool_str2500[sizeof("ingothic")];
+    char uniname2ctype_pool_str2507[sizeof("alphabetic")];
+    char uniname2ctype_pool_str2509[sizeof("mathsymbol")];
+    char uniname2ctype_pool_str2515[sizeof("oupper")];
+    char uniname2ctype_pool_str2519[sizeof("oldhungarian")];
+    char uniname2ctype_pool_str2523[sizeof("tavt")];
+    char uniname2ctype_pool_str2526[sizeof("insupplementalpunctuation")];
+    char uniname2ctype_pool_str2539[sizeof("dashpunctuation")];
+    char uniname2ctype_pool_str2545[sizeof("inplayingcards")];
+    char uniname2ctype_pool_str2550[sizeof("inaegeannumbers")];
+    char uniname2ctype_pool_str2573[sizeof("osge")];
+    char uniname2ctype_pool_str2576[sizeof("digit")];
+    char uniname2ctype_pool_str2579[sizeof("dupl")];
+    char uniname2ctype_pool_str2587[sizeof("inlinearbsyllabary")];
+    char uniname2ctype_pool_str2589[sizeof("cypriot")];
+    char uniname2ctype_pool_str2594[sizeof("wspace")];
+    char uniname2ctype_pool_str2601[sizeof("whitespace")];
+    char uniname2ctype_pool_str2617[sizeof("cwu")];
+    char uniname2ctype_pool_str2618[sizeof("nushu")];
+    char uniname2ctype_pool_str2622[sizeof("intagbanwa")];
+    char uniname2ctype_pool_str2630[sizeof("sylo")];
+    char uniname2ctype_pool_str2643[sizeof("graphemeclusterbreak=l")];
+    char uniname2ctype_pool_str2649[sizeof("graphemeclusterbreak=control")];
+    char uniname2ctype_pool_str2653[sizeof("oldturkic")];
+    char uniname2ctype_pool_str2660[sizeof("changeswhencasemapped")];
+    char uniname2ctype_pool_str2678[sizeof("rjng")];
+    char uniname2ctype_pool_str2693[sizeof("cyrillic")];
+    char uniname2ctype_pool_str2702[sizeof("hangul")];
+    char uniname2ctype_pool_str2705[sizeof("modifiersymbol")];
+    char uniname2ctype_pool_str2708[sizeof("inalchemicalsymbols")];
+    char uniname2ctype_pool_str2710[sizeof("insupplementaryprivateuseareaa")];
+    char uniname2ctype_pool_str2717[sizeof("orya")];
+    char uniname2ctype_pool_str2751[sizeof("inmahjongtiles")];
+    char uniname2ctype_pool_str2758[sizeof("changeswhentitlecased")];
+    char uniname2ctype_pool_str2763[sizeof("tifinagh")];
+    char uniname2ctype_pool_str2775[sizeof("otherlowercase")];
+    char uniname2ctype_pool_str2779[sizeof("inglagolitic")];
+    char uniname2ctype_pool_str2791[sizeof("otheridstart")];
+    char uniname2ctype_pool_str2792[sizeof("ugar")];
+    char uniname2ctype_pool_str2797[sizeof("otherletter")];
+    char uniname2ctype_pool_str2823[sizeof("inhangulsyllables")];
+    char uniname2ctype_pool_str2829[sizeof("elba")];
+    char uniname2ctype_pool_str2834[sizeof("intagalog")];
+    char uniname2ctype_pool_str2850[sizeof("otheruppercase")];
+    char uniname2ctype_pool_str2879[sizeof("omath")];
+    char uniname2ctype_pool_str2883[sizeof("warangciti")];
+    char uniname2ctype_pool_str2888[sizeof("sylotinagri")];
+    char uniname2ctype_pool_str2890[sizeof("shaw")];
+    char uniname2ctype_pool_str2891[sizeof("inpahawhhmong")];
+    char uniname2ctype_pool_str2901[sizeof("inhalfwidthandfullwidthforms")];
+    char uniname2ctype_pool_str2905[sizeof("inlatinextendedb")];
+    char uniname2ctype_pool_str2926[sizeof("osmanya")];
+    char uniname2ctype_pool_str2930[sizeof("graphemeclusterbreak=lf")];
+    char uniname2ctype_pool_str2932[sizeof("othersymbol")];
+    char uniname2ctype_pool_str2953[sizeof("defaultignorablecodepoint")];
+    char uniname2ctype_pool_str2967[sizeof("incypriotsyllabary")];
+    char uniname2ctype_pool_str2968[sizeof("khudawadi")];
+    char uniname2ctype_pool_str2972[sizeof("kayahli")];
+    char uniname2ctype_pool_str2984[sizeof("hung")];
+    char uniname2ctype_pool_str2987[sizeof("unknown")];
+    char uniname2ctype_pool_str2989[sizeof("inyijinghexagramsymbols")];
+    char uniname2ctype_pool_str3007[sizeof("elbasan")];
+    char uniname2ctype_pool_str3016[sizeof("inbopomofoextended")];
+    char uniname2ctype_pool_str3019[sizeof("changeswhenlowercased")];
+    char uniname2ctype_pool_str3020[sizeof("otherpunctuation")];
+    char uniname2ctype_pool_str3038[sizeof("upper")];
+    char uniname2ctype_pool_str3052[sizeof("insupplementalarrowsb")];
+    char uniname2ctype_pool_str3066[sizeof("oldnortharabian")];
+    char uniname2ctype_pool_str3094[sizeof("changeswhenuppercased")];
+    char uniname2ctype_pool_str3113[sizeof("uppercase")];
+    char uniname2ctype_pool_str3121[sizeof("ugaritic")];
+    char uniname2ctype_pool_str3153[sizeof("otherdefaultignorablecodepoint")];
+    char uniname2ctype_pool_str3177[sizeof("othermath")];
+    char uniname2ctype_pool_str3180[sizeof("tfng")];
+    char uniname2ctype_pool_str3193[sizeof("symbol")];
+    char uniname2ctype_pool_str3195[sizeof("hexdigit")];
+    char uniname2ctype_pool_str3213[sizeof("any")];
+    char uniname2ctype_pool_str3235[sizeof("inhanguljamoextendedb")];
+    char uniname2ctype_pool_str3238[sizeof("ethiopic")];
+    char uniname2ctype_pool_str3276[sizeof("aghb")];
+    char uniname2ctype_pool_str3279[sizeof("graphemeclusterbreak=v")];
+    char uniname2ctype_pool_str3280[sizeof("graphemeclusterbreak=lv")];
+    char uniname2ctype_pool_str3285[sizeof("soyombo")];
+    char uniname2ctype_pool_str3296[sizeof("graphemeclusterbreak=zwj")];
+    char uniname2ctype_pool_str3305[sizeof("graphemeclusterbreak=glueafterzwj")];
+    char uniname2ctype_pool_str3315[sizeof("sgnw")];
+    char uniname2ctype_pool_str3367[sizeof("changeswhencasefolded")];
+    char uniname2ctype_pool_str3373[sizeof("ogham")];
+    char uniname2ctype_pool_str3409[sizeof("uppercaseletter")];
+    char uniname2ctype_pool_str3438[sizeof("inhebrew")];
+    char uniname2ctype_pool_str3442[sizeof("inhighprivateusesurrogates")];
+    char uniname2ctype_pool_str3448[sizeof("openpunctuation")];
+    char uniname2ctype_pool_str3453[sizeof("ogrext")];
+    char uniname2ctype_pool_str3454[sizeof("hyphen")];
+    char uniname2ctype_pool_str3465[sizeof("tagb")];
+    char uniname2ctype_pool_str3496[sizeof("inyisyllables")];
+    char uniname2ctype_pool_str3593[sizeof("oldsoutharabian")];
+    char uniname2ctype_pool_str3662[sizeof("duployan")];
+    char uniname2ctype_pool_str3676[sizeof("hluw")];
+    char uniname2ctype_pool_str3689[sizeof("inglagoliticsupplement")];
+    char uniname2ctype_pool_str3697[sizeof("insupplementalsymbolsandpictographs")];
+    char uniname2ctype_pool_str3763[sizeof("insupplementaryprivateuseareab")];
+    char uniname2ctype_pool_str3791[sizeof("inegyptianhieroglyphs")];
+    char uniname2ctype_pool_str3960[sizeof("rejang")];
+    char uniname2ctype_pool_str3971[sizeof("inhangulcompatibilityjamo")];
+    char uniname2ctype_pool_str4036[sizeof("telugu")];
+    char uniname2ctype_pool_str4164[sizeof("tglg")];
+    char uniname2ctype_pool_str4187[sizeof("tagalog")];
+    char uniname2ctype_pool_str4208[sizeof("othergraphemeextend")];
+    char uniname2ctype_pool_str4460[sizeof("unifiedideograph")];
+    char uniname2ctype_pool_str4464[sizeof("inboxdrawing")];
+    char uniname2ctype_pool_str4483[sizeof("pahawhhmong")];
+    char uniname2ctype_pool_str4608[sizeof("inhighsurrogates")];
+    char uniname2ctype_pool_str4634[sizeof("signwriting")];
+    char uniname2ctype_pool_str4678[sizeof("zyyy")];
+    char uniname2ctype_pool_str4841[sizeof("egyp")];
+    char uniname2ctype_pool_str5170[sizeof("hebrew")];
+    char uniname2ctype_pool_str6145[sizeof("egyptianhieroglyphs")];
 #endif /* USE_UNICODE_PROPERTIES */
   };
@@ -30417,471 +35703,724 @@
 #ifndef USE_UNICODE_PROPERTIES
     "word",
+#else /* USE_UNICODE_PROPERTIES */
+    "yi",
+    "cn",
+    "lina",
+    "yiii",
+    "lana",
+    "ci",
+    "mn",
+    "z",
+    "mani",
+    "lo",
+    "me",
+    "loe",
+    "lao",
+    "laoo",
+    "co",
+    "miao",
+    "pi",
+    "inkannada",
+    "gran",
+    "innko",
+    "zzzz",
+    "pe",
+    "cari",
+    "lineara",
+    "carian",
+    "mendekikakui",
+    "geor",
+    "po",
+    "grek",
+    "meeteimayek",
+    "mark",
+    "mero",
+    "kana",
+    "m",
+    "mro",
+    "mroo",
+    "greek",
+    "gonm",
+    "inkharoshthi",
+    "cakm",
+    "inmanichaean",
+    "c",
+    "inarmenian",
+    "common",
+    "inosmanya",
+    "inmro",
+    "inmiao",
+    "mandaic",
+    "inmyanmar",
+    "lm",
+    "prependedconcatenationmark",
+    "inideographicsymbolsandpunctuation",
+    "inchakma",
+    "inkhmer",
+    "perm",
+    "connectorpunctuation",
+    "marc",
+    "combiningmark",
+    "merc",
+    "inrunic",
+    "incarian",
+    "incuneiformnumbersandpunctuation",
+    "inahom",
+    "incherokee",
+    "qaai",
+    "cans",
+    "lc",
+    "incuneiform",
+    "cc",
+    "armn",
+    "inavestan",
+    "armi",
+    "mc",
+    "armenian",
+    "inipaextensions",
+    "inmarchen",
+    "pc",
+    "insharada",
+    "lineseparator",
+    "masaramgondi",
+    "inarrows",
+    "ri",
+    "incham",
+    "latn",
+    "incyrillic",
+    "latin",
+    "inzanabazarsquare",
+    "insamaritan",
+    "pcm",
+    "inmasaramgondi",
+    "qmark",
+    "qaac",
+    "mtei",
+    "inthai",
+    "inscriptionalparthian",
+    "inthaana",
+    "inkaithi",
+    "initialpunctuation",
+    "inkatakana",
+    "inkhmersymbols",
+    "insyriac",
+    "intakri",
+    "prti",
+    "arabic",
+    "mand",
+    "cs",
+    "mend",
+    "zs",
+    "letter",
+    "privateuse",
+    "modi",
+    "katakana",
+    "ideo",
+    "brai",
+    "xidcontinue",
+    "inmyanmarextendeda",
+    "ascii",
+    "ps",
+    "inkanaextendeda",
+    "inmeeteimayek",
+    "inruminumeralsymbols",
+    "letternumber",
+    "knda",
+    "kannada",
+    "inoldnortharabian",
+    "inideographicdescriptioncharacters",
+    "inmodi",
+    "incjkcompatibilityforms",
+    "incjkcompatibilityideographs",
+    "xidc",
+    "inmendekikakui",
+    "brahmi",
+    "inolditalic",
+    "inmiscellaneousmathematicalsymbolsa",
+    "inspecials",
+    "inemoticons",
+    "patternwhitespace",
+    "gothic",
+    "intransportandmapsymbols",
+    "l",
+    "psalterpahlavi",
+    "vai",
+    "vaii",
+    "lt",
+    "meroiticcursive",
+    "xids",
+    "incommonindicnumberforms",
+    "inmandaic",
+    "inlineara",
+    "incjkcompatibilityideographssupplement",
+    "inlao",
+    "insundanese",
+    "mongolian",
+    "bamum",
+    "idc",
+    "inancientsymbols",
+    "kali",
+    "grlink",
+    "grext",
+    "control",
+    "inkanasupplement",
+    "inopticalcharacterrecognition",
+    "inadlam",
+    "so",
+    "inoldsoutharabian",
+    "sk",
+#endif /* USE_UNICODE_PROPERTIES */
     "print",
+#ifndef USE_UNICODE_PROPERTIES
     "punct",
     "alpha",
+#else /* USE_UNICODE_PROPERTIES */
+    "idsbinaryoperator",
+    "palm",
+    "batk",
+    "indominotiles",
+    "intaitham",
+    "inlycian",
+    "sora",
+    "batak",
+    "inmodifiertoneletters",
+    "patws",
+    "inmalayalam",
+    "incjkstrokes",
+    "incontrolpictures",
+    "samr",
+    "bass",
+    "samaritan",
+    "inmusicalsymbols",
+    "ids",
+    "pd",
+    "sm",
+    "pauc",
+    "joinc",
+    "inlinearbideograms",
+    "idcontinue",
+    "inancientgreekmusicalnotation",
+    "inoldturkic",
+#endif /* USE_UNICODE_PROPERTIES */
     "alnum",
+#ifdef USE_UNICODE_PROPERTIES
+    "inugaritic",
+    "s",
+    "inmiscellaneoussymbols",
+    "n",
+    "lisu",
+    "inmiscellaneoussymbolsandarrows",
+    "insylotinagri",
+    "inmiscellaneoussymbolsandpictographs",
+    "sc",
+    "no",
+    "ital",
+    "p",
+    "xpeo",
+    "di",
+    "idst",
+    "intaile",
+    "nko",
+    "nkoo",
+    "dia",
+    "inphoenician",
+    "inlatinextendeda",
+    "indeseret",
+    "inlatinextendede",
+    "incaucasianalbanian",
+    "insaurashtra",
+    "inmeeteimayekextensions",
+    "idstart",
+    "bali",
+    "inspacingmodifierletters",
+    "bengali",
+    "intamil",
+    "inmultani",
+    "vs",
+    "inlydian",
+    "balinese",
+    "lepc",
+    "cased",
+    "zinh",
+    "blank",
+    "runr",
+    "patternsyntax",
+    "bidic",
+#endif /* USE_UNICODE_PROPERTIES */
     "xdigit",
+#ifndef USE_UNICODE_PROPERTIES
     "upper",
+    "ascii",
 #else /* USE_UNICODE_PROPERTIES */
-    "n",
-    "cn",
-    "mn",
-    "c",
-    "m",
-    "ci",
-    "z",
-    "cc",
-    "mc",
-    "mani",
-    "inmanichaean",
-    "qaai",
-    "zzzz",
-    "qaac",
-    "incham",
-    "sc",
-    "sm",
-    "mandaic",
-    "incuneiform",
-    "cans",
-    "me",
-    "inarmenian",
-#endif /* USE_UNICODE_PROPERTIES */
-    "ascii",
-#ifdef USE_UNICODE_PROPERTIES
-    "s",
-    "insamaritan",
-    "cs",
-    "zs",
-    "inavestan",
-    "incommonindicnumberforms",
-    "incuneiformnumbersandpunctuation",
-    "inthai",
-    "inipaextensions",
-    "mtei",
-    "inspecials",
-    "initialpunctuation",
-    "inancientsymbols",
-    "inthaana",
-    "inmiscellaneousmathematicalsymbolsa",
-    "lc",
-    "inmusicalsymbols",
-    "lm",
+    "xidstart",
+    "inphaistosdisc",
+    "inancientgreeknumbers",
+    "canadianaboriginal",
+    "cher",
+    "plrd",
+    "sind",
+    "cherokee",
+    "phoenician",
+    "marchen",
+    "inhiragana",
+    "inearlydynasticcuneiform",
+    "graphemebase",
+    "cham",
+    "inimperialaramaic",
+    "kaithi",
+    "insiddham",
+    "diacritic",
+    "chakma",
+    "graphemelink",
+    "inkhudawadi",
+    "inmahajani",
+    "khojki",
+    "inogham",
+    "khar",
+    "incountingrodnumerals",
+    "manichaean",
+    "coptic",
+    "bamu",
+    "sterm",
+    "inethiopic",
+    "ll",
+    "inolchiki",
+    "inlatinextendedc",
+    "zl",
+    "adlm",
+    "incyrillicsupplement",
+    "incyrillicextendeda",
+    "incherokeesupplement",
+    "decimalnumber",
+    "khmr",
+    "copt",
+    "ahom",
+    "runic",
+    "intaixuanjingsymbols",
+    "insinhala",
+    "cprt",
+    "imperialaramaic",
+    "casedletter",
+    "khmer",
+    "linb",
+    "adlam",
+    "ininscriptionalparthian",
+    "ininscriptionalpahlavi",
+    "sinhala",
+    "zanb",
+    "incjkunifiedideographsextensiona",
+    "multani",
+    "quotationmark",
+    "incjkunifiedideographsextensione",
+    "innabataean",
+    "inbhaiksuki",
+    "inelbasan",
+    "inkanbun",
+    "inscriptionalpahlavi",
+    "bopo",
+    "linearb",
+    "incyrillicextendedc",
+    "glagolitic",
+    "kharoshthi",
+    "inoldpersian",
+    "goth",
+    "math",
+    "joincontrol",
+    "punct",
+    "lu",
+    "limb",
+    "inmiscellaneoustechnical",
+    "han",
+    "hani",
+    "invai",
+    "sundanese",
     "taile",
-    "sterm",
-    "lina",
-    "inlycian",
-    "inmyanmarextendeda",
-    "lana",
-    "alnum",
-    "intaitham",
-    "incontrolpictures",
-    "inmiscellaneoussymbols",
-    "inmalayalam",
-    "intransportandmapsymbols",
-    "inmiscellaneoussymbolsandarrows",
-    "inlineara",
-    "inmiscellaneoussymbolsandpictographs",
-    "taiviet",
-    "cwcm",
-    "sinhala",
-    "latn",
-    "latin",
-    "ital",
-    "intamil",
-    "taml",
-    "inlatinextendedc",
-    "intaile",
-    "tale",
-    "inlatinextendeda",
-    "inlinearbideograms",
-    "newtailue",
-    "l",
-    "nl",
-    "inmeeteimayekextensions",
-    "zl",
-    "lt",
-    "inrunic",
-    "incarian",
-    "armn",
-    "cari",
-    "armi",
-    "inlatinextendede",
-    "incyrillic",
-    "armenian",
-    "inmyanmar",
-    "innewtailue",
-    "carian",
-    "merc",
-    "arabic",
-    "inmiscellaneoustechnical",
-    "insyriac",
-    "samr",
-    "zinh",
-    "han",
-    "samaritan",
-    "hani",
-    "cwt",
-    "incherokee",
-    "insharada",
-    "cham",
-    "manichaean",
-    "inmahajani",
+    "takri",
+    "grantha",
+    "hano",
+    "inhatran",
+    "oriya",
+    "intirhuta",
+    "guru",
+    "kthi",
+    "saur",
+    "incjkunifiedideographsextensionc",
+    "hanunoo",
+    "paucinhau",
+    "takr",
+    "hira",
+    "inarabic",
+    "bopomofo",
+    "radical",
+    "gurmukhi",
+    "inkhojki",
+    "arab",
+    "limbu",
+    "inoldpermic",
+    "brah",
+    "inoldhungarian",
+    "inshorthandformatcontrols",
+    "incoptic",
+    "sd",
+    "sidd",
+    "inherited",
+    "incjkunifiedideographs",
+    "term",
+    "incjksymbolsandpunctuation",
+    "graphemeextend",
+    "dsrt",
 #endif /* USE_UNICODE_PROPERTIES */
     "cntrl",
 #ifdef USE_UNICODE_PROPERTIES
-    "sinh",
-    "inruminumeralsymbols",
-    "inethiopic",
-    "tamil",
-    "miao",
+    "xsux",
+    "insyriacsupplement",
+    "inbasiclatin",
+    "deseret",
+    "inenclosedideographicsupplement",
+    "bidicontrol",
+    "closepunctuation",
+    "inlatinextendedadditional",
+    "inarabicpresentationformsa",
+    "grbase",
+    "mong",
+    "anatolianhieroglyphs",
     "inenclosedalphanumerics",
-    "term",
-    "chakma",
-    "insinhala",
-    "shavian",
-    "inosmanya",
-    "inlatinextendedadditional",
-    "osma",
-    "ll",
-    "thai",
-    "math",
-    "thaa",
-    "inenclosedalphanumericsupplement",
-    "ethi",
-    "connectorpunctuation",
-    "inlowsurrogates",
-    "insinhalaarchaicnumbers",
-    "taitham",
-    "thaana",
-    "lineara",
-    "di",
-    "idc",
-    "meroiticcursive",
-    "mand",
-    "inmodi",
-    "inmandaic",
-    "cwl",
-    "asciihexdigit",
-    "dia",
-    "terminalpunctuation",
-    "mend",
-    "sind",
-    "wara",
-    "inwarangciti",
-    "inideographicdescriptioncharacters",
-    "inemoticons",
-    "ids",
-    "insundanese",
-    "pi",
-    "indominotiles",
-    "pc",
-    "loe",
-    "titlecaseletter",
-    "inopticalcharacterrecognition",
-    "idst",
-    "shaw",
-    "cwcf",
-    "idcontinue",
-    "inphaistosdisc",
-    "pe",
-    "indeseret",
-    "inspacingmodifierletters",
-    "inlydian",
-    "ps",
-    "hira",
-    "whitespace",
-    "inscriptionalparthian",
-    "cher",
-    "inmathematicalalphanumericsymbols",
-    "incoptic",
-    "inhiragana",
-    "inenclosedcjklettersandmonths",
+    "ingrantha",
+    "georgian",
+    "osage",
+    "inosage",
+    "ingeneralpunctuation",
+    "saurashtra",
+    "inshavian",
 #endif /* USE_UNICODE_PROPERTIES */
     "space",
 #ifdef USE_UNICODE_PROPERTIES
-    "oriya",
-    "mero",
-    "mahj",
-    "tirh",
-    "sora",
-    "inscriptionalpahlavi",
-    "inarrows",
-    "mahajani",
-    "joinc",
-    "incopticepactnumbers",
-    "hano",
-    "palm",
-    "intirhuta",
-    "patws",
-    "inolchiki",
+    "mult",
+    "inpalmyrene",
+    "inanatolianhieroglyphs",
+    "spacingmark",
+    "alpha",
+    "ingeorgian",
+    "intibetan",
     "inlepcha",
-    "no",
-    "lepc",
-    "inogham",
-    "co",
-    "innko",
-    "alpha",
-    "psalterpahlavi",
-    "inmro",
-    "inpalmyrene",
-    "common",
-    "cf",
-    "inmiao",
-    "so",
-    "diacritic",
-    "insundanesesupplement",
-    "intifinagh",
-    "tifinagh",
-    "odi",
-    "oidc",
-    "modi",
-    "decimalnumber",
-    "letter",
-    "dash",
-    "insylotinagri",
-    "inolditalic",
-    "wspace",
-    "dsrt",
-    "ideo",
-    "siddham",
-    "perm",
-    "oids",
-    "inmahjongtiles",
-    "lo",
-    "lineseparator",
-    "imperialaramaic",
-    "idstart",
-    "inlao",
-    "sharada",
-    "lao",
-    "laoo",
-    "mongolian",
-    "oalpha",
-    "inimperialaramaic",
-    "nchar",
-    "inlatin1supplement",
-    "prti",
-    "cprt",
-    "nd",
-    "deseret",
-    "inoldturkic",
-    "radical",
-    "canadianaboriginal",
-    "inmodifiertoneletters",
-    "incaucasianalbanian",
-    "coptic",
-    "casedletter",
-    "sd",
-    "inphoenician",
-    "sidd",
-    "privateuse",
-    "sundanese",
-    "inancientgreekmusicalnotation",
-    "insiddham",
-    "cased",
-    "print",
-    "ininscriptionalparthian",
-    "ininscriptionalpahlavi",
-    "copt",
-    "inancientgreeknumbers",
-    "saurashtra",
-    "mro",
-    "mroo",
-    "inalphabeticpresentationforms",
-    "lowercase",
+    "inbatak",
+    "emoji",
+    "osma",
+    "bhks",
+    "inmongolian",
+    "variationselector",
+    "braille",
     "phli",
-    "patternwhitespace",
-    "inenclosedideographicsupplement",
-    "spaceseparator",
-    "inmathematicaloperators",
-    "omath",
-    "lisu",
-    "inpsalterpahlavi",
-    "olditalic",
-    "hanunoo",
-    "inherited",
-    "lepcha",
-    "p",
-    "inmongolian",
-    "zp",
-    "finalpunctuation",
-    "otheridcontinue",
-    "shrd",
-    "ingrantha",
-    "talu",
-    "otheralphabetic",
-    "noncharactercodepoint",
+    "bhaiksuki",
+    "phnx",
+    "inblockelements",
 #ifdef USE_UNICODE_AGE_PROPERTIES
     "age=1.1",
+    "age=4.1",
+    "age=4.0",
+    "age=10.0",
     "age=2.1",
+    "age=2.0",
+    "age=6.1",
+    "age=6.0",
+    "age=9.0",
+    "age=8.0",
+    "age=6.2",
+    "age=7.0",
 #endif /* USE_UNICODE_AGE_PROPERTIES */
-    "closepunctuation",
-    "letternumber",
+    "inenclosedalphanumericsupplement",
+    "innumberforms",
 #ifdef USE_UNICODE_AGE_PROPERTIES
-    "age=6.1",
-    "age=6.2",
+    "age=5.1",
+    "age=5.0",
 #endif /* USE_UNICODE_AGE_PROPERTIES */
-    "telu",
+    "nd",
+    "separator",
+#ifdef USE_UNICODE_AGE_PROPERTIES
+    "age=5.2",
+#endif /* USE_UNICODE_AGE_PROPERTIES */
+    "ingurmukhi",
+    "incjkunifiedideographsextensiond",
+    "taiviet",
+    "sinh",
 #ifdef USE_UNICODE_AGE_PROPERTIES
     "age=3.1",
+    "age=3.0",
+#endif /* USE_UNICODE_AGE_PROPERTIES */
+    "hatran",
+#ifdef USE_UNICODE_AGE_PROPERTIES
     "age=3.2",
-    "age=5.1",
-    "age=5.2",
-    "age=2.0",
     "age=6.3",
 #endif /* USE_UNICODE_AGE_PROPERTIES */
-    "inshorthandformatcontrols",
-    "inoldnortharabian",
-#ifdef USE_UNICODE_AGE_PROPERTIES
-    "age=6.0",
-    "age=4.1",
-#endif /* USE_UNICODE_AGE_PROPERTIES */
-    "ingeneralpunctuation",
-#ifdef USE_UNICODE_AGE_PROPERTIES
-    "age=3.0",
-    "age=7.0",
-    "age=5.0",
-#endif /* USE_UNICODE_AGE_PROPERTIES */
-    "innabataean",
-#ifdef USE_UNICODE_AGE_PROPERTIES
-    "age=4.0",
-#endif /* USE_UNICODE_AGE_PROPERTIES */
-    "bamum",
-    "control",
-    "induployan",
+    "format",
+    "shavian",
+    "insinhalaarchaicnumbers",
+    "cuneiform",
+    "inmyanmarextendedb",
+    "punctuation",
+    "inarabicextendeda",
+    "hatr",
+    "inhanunoo",
     "inlatinextendedd",
-    "inarabic",
-    "runic",
-    "inelbasan",
-    "inoldsoutharabian",
-    "inbasiclatin",
-    "format",
-    "innumberforms",
-    "inugaritic",
-    "separator",
-    "idsbinaryoperator",
-    "tagbanwa",
-    "bass",
-    "saur",
-    "nbat",
-    "intaixuanjingsymbols",
-    "joincontrol",
-    "otheridstart",
+    "modifierletter",
+    "odi",
+    "ahex",
+    "logicalorderexception",
     "inbyzantinemusicalsymbols",
-    "intags",
-    "nabataean",
-    "insuperscriptsandsubscripts",
-    "intibetan",
-    "insaurashtra",
-    "othersymbol",
-    "ext",
-    "inarabicpresentationformsa",
+    "sund",
+    "number",
+    "insundanesesupplement",
+    "incopticepactnumbers",
+    "emojimodifier",
+    "zp",
+    "asciihexdigit",
+    "indevanagari",
+    "innewa",
+    "avestan",
+    "insorasompeng",
     "inmiscellaneousmathematicalsymbolsb",
-    "otherlowercase",
-    "phoenician",
+    "inbraillepatterns",
+    "nonspacingmark",
+    "ingreekandcoptic",
+#endif /* USE_UNICODE_PROPERTIES */
+    "xposixpunct",
+#ifdef USE_UNICODE_PROPERTIES
+    "inwarangciti",
+    "oidc",
+    "terminalpunctuation",
+    "cf",
 #endif /* USE_UNICODE_PROPERTIES */
     "lower",
-#ifndef USE_UNICODE_PROPERTIES
+#ifdef USE_UNICODE_PROPERTIES
+    "inunifiedcanadianaboriginalsyllabics",
+    "idsb",
+    "inbalinese",
+    "induployan",
+    "innoblock",
+    "pf",
+    "inoriya",
+    "inkatakanaphoneticextensions",
+    "inkayahli",
+    "wara",
+    "innushu",
+    "lepcha",
+    "inmeroitichieroglyphs",
+    "beng",
+    "idstrinaryoperator",
+    "oids",
+    "regionalindicator",
+    "enclosingmark",
+    "java",
+    "tale",
+    "emojimodifierbase",
+    "inphoneticextensions",
+    "lowercase",
+    "inverticalforms",
+    "javanese",
+    "sentenceterminal",
+    "ingreekextended",
+    "invariationselectors",
+    "cwcm",
+    "lyci",
+    "avst",
+    "lycian",
+    "zanabazarsquare",
+    "sarb",
+    "invedicextensions",
+    "inkangxiradicals",
+    "intaiviet",
+    "mymr",
+    "incjkradicalssupplement",
+    "myanmar",
+    "taml",
+    "olower",
+    "nl",
+    "inethiopicsupplement",
+    "olck",
+    "inethiopicextendeda",
+#endif /* USE_UNICODE_PROPERTIES */
     "graph",
-#else /* USE_UNICODE_PROPERTIES */
-    "linb",
-    "po",
-    "inmyanmarextendedb",
-    "limb",
-    "inbraillepatterns",
+#ifdef USE_UNICODE_PROPERTIES
+    "olchiki",
+    "inphoneticextensionssupplement",
+    "emojicomponent",
+    "inunifiedcanadianaboriginalsyllabicsextended",
+    "ingeometricshapes",
+    "invariationselectorssupplement",
+    "gujr",
+    "sharada",
+    "gujarati",
+    "nchar",
+    "innewtailue",
+    "glag",
+    "ideographic",
+    "shrd",
+    "insoyombo",
+    "inbamum",
+    "inlatin1supplement",
+    "dash",
+    "indingbats",
+    "spaceseparator",
+    "phagspa",
+    "titlecaseletter",
+    "incjkcompatibility",
+    "intangut",
+    "incombiningdiacriticalmarks",
+    "inlisu",
+    "siddham",
+    "incombiningdiacriticalmarksforsymbols",
+    "caucasianalbanian",
+    "uideo",
+    "indevanagariextended",
+    "narb",
+    "inbopomofo",
+    "incjkunifiedideographsextensionf",
+    "inmeroiticcursive",
+    "patsyn",
+    "insuperscriptsandsubscripts",
+    "lydi",
+    "lydian",
+    "intags",
+    "intelugu",
+    "intifinagh",
+    "ingeometricshapesextended",
+    "incombiningdiacriticalmarkssupplement",
+    "deva",
+    "inprivateusearea",
+    "devanagari",
+    "noncharactercodepoint",
+    "inbrahmi",
+    "lowercaseletter",
+    "word",
+    "caseignorable",
+    "inyiradicals",
+    "deprecated",
+    "thai",
+    "thaa",
+    "incombiningdiacriticalmarksextended",
+    "inmathematicalalphanumericsymbols",
+    "thaana",
+    "inornamentaldingbats",
+    "oldpersian",
+    "unassigned",
+    "insupplementalarrowsa",
+    "inpaucinhau",
+    "cwt",
+    "tirhuta",
+    "mahj",
+    "insmallformvariants",
+    "tirh",
+    "orkh",
+    "mahajani",
+    "softdotted",
+    "inphagspa",
+    "inethiopicextended",
+    "taitham",
+    "assigned",
+    "nbat",
+    "incyrillicextendedb",
+    "khoj",
+    "buhd",
+    "nabataean",
+    "inalphabeticpresentationforms",
+    "sorasompeng",
+    "insupplementalarrowsc",
+    "oldpermic",
+    "cyrl",
+    "finalpunctuation",
+    "meroitichieroglyphs",
+    "inarabicsupplement",
+    "phlp",
+    "inpsalterpahlavi",
+    "mlym",
+    "incjkunifiedideographsextensionb",
+    "palmyrene",
+    "insupplementalmathematicaloperators",
+    "malayalam",
+    "soyo",
+    "hex",
+    "phag",
+    "graphemeclusterbreak=ebase",
+    "graphemeclusterbreak=ebasegaz",
+    "inhanguljamo",
+    "bugi",
+    "graphemeclusterbreak=spacingmark",
+    "inhanguljamoextendeda",
+    "currencysymbol",
+    "tamil",
+    "graphemeclusterbreak=cr",
+    "talu",
+    "buginese",
+    "telu",
+    "ingeorgiansupplement",
+    "graphemeclusterbreak=emodifier",
+    "graphemeclusterbreak=regionalindicator",
+    "inlimbu",
+    "inenclosedcjklettersandmonths",
+    "tangut",
+    "inmathematicaloperators",
+    "newa",
+    "newtailue",
+    "hebr",
+    "inbuhid",
+    "insuttonsignwriting",
+    "syrc",
+    "dep",
+    "inbassavah",
+    "otheridcontinue",
+    "inletterlikesymbols",
+    "ext",
+    "other",
+    "inmongoliansupplement",
+    "othernumber",
+    "injavanese",
+    "olditalic",
+    "nshu",
+    "inarabicpresentationformsb",
+    "inlowsurrogates",
+    "incombininghalfmarks",
+    "inbengali",
+    "cwcf",
+    "inbuginese",
+    "syriac",
+    "ethi",
+    "otheralphabetic",
+    "emojipresentation",
+    "inarabicmathematicalalphabeticsymbols",
+    "tang",
+    "buhid",
+    "graphemeclusterbreak=t",
+    "extender",
+    "graphemeclusterbreak=lvt",
+    "tagbanwa",
+    "hang",
+    "incurrencysymbols",
+    "ingujarati",
+    "paragraphseparator",
     "tibt",
-    "cuneiform",
-    "bali",
-    "oldpersian",
-    "oldpermic",
-    "pf",
-    "word",
     "tibetan",
-    "incyrillicsupplement",
-    "elba",
-    "insupplementalmathematicaloperators",
-    "inbalinese",
-    "bengali",
-    "caseignorable",
-    "incountingrodnumerals",
-    "other",
-    "tirhuta",
-    "othernumber",
-    "balinese",
-    "elbasan",
-    "inunifiedcanadianaboriginalsyllabics",
-    "lowercaseletter",
-    "ethiopic",
-    "gran",
-    "ingurmukhi",
-    "sund",
-    "inethiopicsupplement",
-    "inoldpersian",
-    "inoldpermic",
-    "othermath",
-    "unassigned",
+    "ogam",
+    "cwl",
+    "oalpha",
+    "hiragana",
+    "surrogate",
+    "inbamumsupplement",
+    "inrejang",
+    "intangutcomponents",
     "hmng",
-    "narb",
-    "brai",
-    "hang",
-    "insorasompeng",
-    "arab",
-    "plrd",
-    "ingujarati",
-    "brahmi",
-    "runr",
-    "ahex",
-    "mong",
-    "pauc",
-    "sarb",
-    "ogam",
-    "olower",
-    "pd",
-    "number",
-    "inbrahmi",
-    "otherletter",
+    "graphemeclusterbreak=extend",
+    "graphemeclusterbreak=prepend",
+    "bassavah",
     "ingothic",
-    "phagspa",
-    "inletterlikesymbols",
-    "yi",
-    "hangul",
-    "yiii",
-    "tfng",
-    "insupplementalarrowsc",
-    "ingreekandcoptic",
-    "xidc",
-    "insupplementalarrowsa",
-    "gothic",
-    "grext",
-    "incombininghalfmarks",
-    "deprecated",
-    "inbassavah",
-    "xids",
-    "linearb",
-    "ingeometricshapes",
-    "phlp",
-    "warangciti",
-    "inblockelements",
-    "modifierletter",
-    "indingbats",
-    "dep",
-    "punct",
-    "inhanunoo",
-    "bidic",
-    "ingreekextended",
-    "idsb",
-    "assigned",
-    "otherpunctuation",
-    "inhangulsyllables",
-    "inarabicmathematicalalphabeticsymbols",
-    "inornamentaldingbats",
-    "inphagspa",
-    "lyci",
-    "mlym",
-    "inarabicextendeda",
-    "rjng",
-    "lycian",
-    "inalchemicalsymbols",
-    "xdigit",
+    "alphabetic",
+    "mathsymbol",
+    "oupper",
+    "oldhungarian",
+    "tavt",
+    "insupplementalpunctuation",
+    "dashpunctuation",
+    "inplayingcards",
+    "inaegeannumbers",
+    "osge",
 #endif /* USE_UNICODE_PROPERTIES */
     "digit",
@@ -30889,270 +36428,110 @@
     "blank"
 #else /* USE_UNICODE_PROPERTIES */
-    "xidstart",
-    "inrejang",
-    "malayalam",
-    "idstrinaryoperator",
-    "invai",
-    "vai",
-    "vaii",
-    "hiragana",
-    "ingeorgian",
-    "braille",
-    "geor",
-    "brah",
-    "glagolitic",
-    "inkannada",
-    "cakm",
-    "kana",
-    "hebr",
-    "inshavian",
-    "vs",
-    "inchakma",
-    "ogham",
+    "dupl",
+    "inlinearbsyllabary",
+    "cypriot",
+    "wspace",
+    "whitespace",
+    "cwu",
+    "nushu",
+    "intagbanwa",
+    "sylo",
+    "graphemeclusterbreak=l",
+    "graphemeclusterbreak=control",
+    "oldturkic",
+    "changeswhencasemapped",
+    "rjng",
+    "cyrillic",
+    "hangul",
+    "modifiersymbol",
+    "inalchemicalsymbols",
+    "insupplementaryprivateuseareaa",
+    "orya",
+    "inmahjongtiles",
+    "changeswhentitlecased",
+    "tifinagh",
+    "otherlowercase",
+    "inglagolitic",
+    "otheridstart",
+    "ugar",
+    "otherletter",
+    "inhangulsyllables",
+    "elba",
+    "intagalog",
+    "otheruppercase",
+    "omath",
+    "warangciti",
     "sylotinagri",
-    "inunifiedcanadianaboriginalsyllabicsextended",
-    "inmeroitichieroglyphs",
-    "grantha",
-    "graphemebase",
-    "mathsymbol",
-    "mymr",
-    "insupplementaryprivateuseareaa",
-    "mendekikakui",
-    "incjkcompatibilityforms",
+    "shaw",
+    "inpahawhhmong",
     "inhalfwidthandfullwidthforms",
-    "incjkcompatibilityideographs",
-    "inkaithi",
-    "avst",
-    "inarabicsupplement",
-    "takri",
-    "syrc",
-    "meeteimayek",
-    "myanmar",
-    "avestan",
-    "inhanguljamoextendeda",
-    "goth",
-    "inkatakana",
-    "incyrillicextendeda",
-    "alphabetic",
-    "syriac",
-    "ideographic",
-    "incjkstrokes",
-    "inlinearbsyllabary",
-    "tavt",
-    "intaiviet",
-    "incjkcompatibilityideographssupplement",
-    "inmeeteimayek",
-    "kali",
-    "inyiradicals",
-    "lu",
-    "inoriya",
-    "hebrew",
-    "extender",
-    "inhighprivateusesurrogates",
-    "limbu",
-    "inbuhid",
-    "inethiopicextendeda",
-    "xidcontinue",
+    "inlatinextendedb",
+    "osmanya",
+    "graphemeclusterbreak=lf",
+    "othersymbol",
+    "defaultignorablecodepoint",
+    "incypriotsyllabary",
+    "khudawadi",
+    "kayahli",
+    "hung",
+    "unknown",
     "inyijinghexagramsymbols",
-    "logicalorderexception",
-    "inhebrew",
-    "cyrl",
-    "osmanya",
-    "phnx",
-    "incombiningdiacriticalmarks",
-    "inkanasupplement",
-    "inlisu",
-    "changeswhencasemapped",
-    "incombiningdiacriticalmarksforsymbols",
-    "cwu",
-    "phag",
-    "insmallformvariants",
-    "inpahawhhmong",
-    "otheruppercase",
-    "intelugu",
-    "incombiningdiacriticalmarkssupplement",
-    "ingeometricshapesextended",
-    "xpeo",
-    "bamu",
-    "inbamum",
-    "mark",
-    "dupl",
-    "graph",
-    "dashpunctuation",
-    "patternsyntax",
-    "changeswhentitlecased",
-    "inkharoshthi",
-    "inkhmer",
-    "java",
-    "sylo",
+    "elbasan",
+    "inbopomofoextended",
+    "changeswhenlowercased",
+    "otherpunctuation",
+    "upper",
+    "insupplementalarrowsb",
+    "oldnortharabian",
+    "changeswhenuppercased",
+    "uppercase",
     "ugaritic",
     "otherdefaultignorablecodepoint",
-    "softdotted",
-    "uideo",
-    "inphoneticextensions",
-    "injavanese",
-    "invariationselectors",
-    "kaithi",
-    "cyrillic",
-    "intakri",
-    "takr",
-    "javanese",
-    "bidicontrol",
-    "caucasianalbanian",
-    "lydi",
-    "insupplementalpunctuation",
-    "inphoneticextensionssupplement",
-    "lydian",
-    "oldturkic",
-    "invariationselectorssupplement",
-    "kthi",
-    "inhanguljamo",
-    "patsyn",
-    "inlimbu",
-    "sorasompeng",
-    "orya",
-    "inkhmersymbols",
-    "inglagolitic",
-    "indevanagari",
-    "deva",
-    "knda",
-    "inbengali",
+    "othermath",
+    "tfng",
     "symbol",
-    "devanagari",
-    "inmendekikakui",
-    "beng",
-    "invedicextensions",
-    "graphemeextend",
-    "kannada",
-    "inbuginese",
-    "olck",
-    "meroitichieroglyphs",
-    "ugar",
-    "intagalog",
-    "inbamumsupplement",
-    "olchiki",
-    "incurrencysymbols",
+    "hexdigit",
+    "any",
+    "inhanguljamoextendedb",
+    "ethiopic",
+    "aghb",
+    "graphemeclusterbreak=v",
+    "graphemeclusterbreak=lv",
+    "soyombo",
+    "graphemeclusterbreak=zwj",
+    "graphemeclusterbreak=glueafterzwj",
+    "sgnw",
+    "changeswhencasefolded",
+    "ogham",
+    "uppercaseletter",
+    "inhebrew",
+    "inhighprivateusesurrogates",
+    "openpunctuation",
+    "ogrext",
+    "hyphen",
     "tagb",
-    "inaegeannumbers",
-    "intagbanwa",
-    "uppercase",
-    "defaultignorablecodepoint",
-    "glag",
-    "inkatakanaphoneticextensions",
-    "changeswhencasefolded",
-    "inpaucinhau",
-    "inprivateusearea",
-    "paucinhau",
-    "spacingmark",
-    "khmr",
-    "khar",
-    "inarabicpresentationformsb",
-    "changeswhenlowercased",
+    "inyisyllables",
+    "oldsoutharabian",
+    "duployan",
+    "hluw",
+    "inglagoliticsupplement",
+    "insupplementalsymbolsandpictographs",
+    "insupplementaryprivateuseareab",
+    "inegyptianhieroglyphs",
+    "rejang",
+    "inhangulcompatibilityjamo",
+    "telugu",
     "tglg",
-    "inethiopicextended",
-    "incombiningdiacriticalmarksextended",
-    "oupper",
-    "incjksymbolsandpunctuation",
-    "bopo",
-    "punctuation",
-    "combiningmark",
-    "inplayingcards",
-    "inbopomofo",
-    "hyphen",
-    "inkhojki",
-    "nko",
-    "nkoo",
-    "enclosingmark",
-    "openpunctuation",
-    "currencysymbol",
-    "inverticalforms",
-    "hex",
-    "modifiersymbol",
-    "inlatinextendedb",
-    "kharoshthi",
-    "cherokee",
+    "tagalog",
+    "othergraphemeextend",
+    "unifiedideograph",
+    "inboxdrawing",
     "pahawhhmong",
-    "cypriot",
-    "incypriotsyllabary",
-    "palmyrene",
-    "upper",
-    "aghb",
-    "georgian",
-    "gujr",
-    "grbase",
-    "gujarati",
-    "hexdigit",
-    "khmer",
-    "uppercaseletter",
-    "insupplementalarrowsb",
-    "surrogate",
-    "unifiedideograph",
-    "nonspacingmark",
-    "othergraphemeextend",
-    "indevanagariextended",
-    "orkh",
-    "ingeorgiansupplement",
-    "oldnortharabian",
-    "tagalog",
-    "khoj",
-    "bopomofo",
-    "rejang",
-    "buhd",
-    "incjkradicalssupplement",
-    "inkanbun",
-    "variationselector",
-    "inkangxiradicals",
     "inhighsurrogates",
-    "insupplementaryprivateuseareab",
-    "ogrext",
-    "batk",
-    "inhanguljamoextendedb",
-    "inbatak",
-    "incyrillicextendedb",
-    "innoblock",
-    "any",
-    "xsux",
-    "bugi",
-    "inkhudawadi",
-    "telugu",
-    "changeswhenuppercased",
-    "grek",
-    "guru",
-    "paragraphseparator",
-    "buginese",
-    "inyisyllables",
+    "signwriting",
+    "zyyy",
     "egyp",
-    "khudawadi",
-    "unknown",
-    "bassavah",
-    "inegyptianhieroglyphs",
-    "buhid",
-    "inkayahli",
-    "inmeroiticcursive",
-    "incjkcompatibility",
-    "oldsoutharabian",
-    "quotationmark",
-    "inhangulcompatibilityjamo",
-    "qmark",
-    "incjkunifiedideographsextensionc",
-    "sk",
-    "incjkunifiedideographsextensiona",
-    "incjkunifiedideographs",
-    "katakana",
-    "kayahli",
-    "duployan",
-    "incjkunifiedideographsextensiond",
-    "inbopomofoextended",
-    "khojki",
-    "zyyy",
-    "egyptianhieroglyphs",
-    "incjkunifiedideographsextensionb",
-    "batak",
-    "blank",
-    "inboxdrawing",
-    "greek",
-    "gurmukhi",
-    "grlink",
-    "graphemelink"
+    "hebrew",
+    "egyptianhieroglyphs"
 #endif /* USE_UNICODE_PROPERTIES */
   };
@@ -31160,5 +36539,5 @@
 #ifdef __GNUC__
 __inline
-#ifdef __GNUC_STDC_INLINE__
+#if defined __GNUC_STDC_INLINE__ || defined __GNUC_GNU_INLINE__
 __attribute__ ((__gnu_inline__))
 #endif
@@ -31172,1343 +36551,1508 @@
     {
 #ifdef USE_UNICODE_PROPERTIES
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1},
+      {uniname2ctype_offset(str10), 111},
+      {-1}, {-1},
+      {uniname2ctype_offset(str13), 21},
+      {uniname2ctype_offset(str14), 184},
+      {uniname2ctype_offset(str15), 111},
+      {uniname2ctype_offset(str16), 152},
+      {uniname2ctype_offset(str17), 61},
+      {-1},
+      {uniname2ctype_offset(str19), 34},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str26), 52},
+      {-1},
+      {uniname2ctype_offset(str28), 186},
+      {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str33), 28},
+      {-1},
+      {uniname2ctype_offset(str35), 33},
+      {-1},
+      {uniname2ctype_offset(str37), 241},
+      {-1},
+      {uniname2ctype_offset(str39), 95},
+      {uniname2ctype_offset(str40), 95},
+      {uniname2ctype_offset(str41), 22},
+      {uniname2ctype_offset(str42), 173},
+      {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str47), 44},
       {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str3,                                        34},
+      {uniname2ctype_offset(str51), 320},
+      {uniname2ctype_offset(str52), 181},
+      {-1},
+      {uniname2ctype_offset(str54), 308},
+      {uniname2ctype_offset(str55), 255},
+      {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str59), 42},
+      {uniname2ctype_offset(str60), 149},
+      {uniname2ctype_offset(str61), 184},
+      {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str66), 149},
+      {-1}, {-1},
+      {uniname2ctype_offset(str69), 187},
+      {uniname2ctype_offset(str70), 98},
+      {uniname2ctype_offset(str71), 45},
+      {uniname2ctype_offset(str72), 77},
+      {uniname2ctype_offset(str73), 160},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str10,                                       20},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str11,                                       33},
+      {uniname2ctype_offset(str80), 31},
       {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str13,                                        17},
+      {uniname2ctype_offset(str82), 172},
+      {-1}, {-1},
+      {uniname2ctype_offset(str85), 108},
+      {uniname2ctype_offset(str86), 31},
+      {uniname2ctype_offset(str87), 189},
+      {uniname2ctype_offset(str88), 189},
       {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str15,                                        30},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str16,                                       60},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str17,                                        51},
+      {uniname2ctype_offset(str90), 77},
       {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str20,                                       18},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str21,                                       31},
+      {uniname2ctype_offset(str93), 212},
+      {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str97), 484},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str29,                                    185},
+      {uniname2ctype_offset(str105), 170},
+      {uniname2ctype_offset(str106), 487},
+      {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str111), 18},
       {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str31,                            438},
+      {uniname2ctype_offset(str113), 302},
       {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str35,                                    114},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str36,                                    231},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str37,                                    128},
+      {uniname2ctype_offset(str117), 75},
+      {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str122), 470},
+      {uniname2ctype_offset(str123), 526},
+      {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str129), 529},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str137), 169},
+      {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str142), 326},
+      {uniname2ctype_offset(str143), 27},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str44,                                  383},
+      {uniname2ctype_offset(str150), 248},
+      {-1}, {-1},
+      {uniname2ctype_offset(str153), 530},
+      {uniname2ctype_offset(str154), 498},
+      {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str160), 339},
+      {uniname2ctype_offset(str161), 194},
+      {uniname2ctype_offset(str162), 40},
       {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str46,                                       47},
+      {uniname2ctype_offset(str164), 208},
+      {-1}, {-1},
+      {uniname2ctype_offset(str167), 31},
+      {uniname2ctype_offset(str168), 171},
+      {uniname2ctype_offset(str169), 334},
+      {uniname2ctype_offset(str170), 461},
       {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str48,                                       49},
+      {uniname2ctype_offset(str172), 521},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str51,                                 168},
+      {uniname2ctype_offset(str184), 512},
+      {-1},
+      {uniname2ctype_offset(str186), 331},
+      {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str191), 115},
+      {-1},
+      {uniname2ctype_offset(str193), 102},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1},
+      {uniname2ctype_offset(str205), 25},
+      {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str210), 520},
+      {-1}, {-1},
+      {uniname2ctype_offset(str213), 19},
+      {-1},
+      {uniname2ctype_offset(str215), 79},
+      {uniname2ctype_offset(str216), 488},
+      {uniname2ctype_offset(str217), 161},
+      {-1},
+      {uniname2ctype_offset(str219), 32},
       {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str55,                             461},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str56,                                    101},
+      {uniname2ctype_offset(str223), 79},
+      {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str227), 296},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1},
+      {uniname2ctype_offset(str238), 518},
+      {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str243), 40},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str250), 500},
+      {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str255), 53},
+      {uniname2ctype_offset(str256), 212},
       {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str59,                                       32},
+      {uniname2ctype_offset(str259), 368},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str268), 249},
       {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str61,                              258},
+      {uniname2ctype_offset(str270), 429},
+      {uniname2ctype_offset(str271), 76},
+      {uniname2ctype_offset(str272), 300},
+      {uniname2ctype_offset(str273), 76},
       {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str64,                                    14},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str65,                                        46},
+      {uniname2ctype_offset(str276), 514},
+      {-1}, {-1},
+      {uniname2ctype_offset(str279), 309},
       {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str69,                             265},
+      {uniname2ctype_offset(str283), 248},
+      {-1},
+      {uniname2ctype_offset(str285), 519},
       {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str72,                                       22},
+      {uniname2ctype_offset(str288), 221},
+      {uniname2ctype_offset(str289), 129},
       {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str74,                                       54},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str291), 160},
+      {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str295), 323},
+      {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str300), 163},
+      {uniname2ctype_offset(str301), 307},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str309), 496},
       {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str85,                               439},
+      {uniname2ctype_offset(str311), 44},
+      {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str315), 399},
+      {-1},
+      {uniname2ctype_offset(str317), 345},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str343), 305},
+      {uniname2ctype_offset(str344), 511},
+      {uniname2ctype_offset(str345), 163},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1},
+      {uniname2ctype_offset(str356), 81},
+      {uniname2ctype_offset(str357), 169},
+      {-1},
+      {uniname2ctype_offset(str359), 23},
+      {-1},
+      {uniname2ctype_offset(str361), 187},
+      {uniname2ctype_offset(str362), 55},
+      {uniname2ctype_offset(str363), 24},
+      {-1},
+      {uniname2ctype_offset(str365), 22},
+      {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str369), 188},
+      {uniname2ctype_offset(str370), 108},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str92,                374},
+      {uniname2ctype_offset(str377), 227},
+      {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str383), 127},
+      {uniname2ctype_offset(str384), 70},
+      {-1},
+      {uniname2ctype_offset(str386), 430},
+      {uniname2ctype_offset(str387), 14},
+      {-1},
+      {uniname2ctype_offset(str389), 46},
       {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str96,        462},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str97,                                  278},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str98,                         252},
+      {uniname2ctype_offset(str393), 534},
+      {-1}, {-1},
+      {uniname2ctype_offset(str396), 436},
+      {-1}, {-1},
+      {uniname2ctype_offset(str399), 494},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str408), 37},
+      {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str412), 91},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str425), 91},
+      {-1}, {-1},
+      {uniname2ctype_offset(str428), 486},
+      {-1},
+      {uniname2ctype_offset(str430), 396},
+      {-1},
+      {uniname2ctype_offset(str432), 509},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str440), 449},
+      {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str445), 443},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str453), 70},
+      {-1},
+      {uniname2ctype_offset(str455), 546},
+      {-1}, {-1},
+      {uniname2ctype_offset(str458), 168},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str480), 463},
+      {-1},
+      {uniname2ctype_offset(str482), 379},
+      {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str486), 453},
+      {uniname2ctype_offset(str487), 555},
+      {uniname2ctype_offset(str488), 246},
+      {uniname2ctype_offset(str489), 113},
+      {-1}, {-1},
+      {uniname2ctype_offset(str492), 557},
+      {uniname2ctype_offset(str493), 24},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str105,                                    159},
+      {uniname2ctype_offset(str509), 195},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str516), 144},
+      {uniname2ctype_offset(str517), 144},
+      {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str523), 29},
+      {uniname2ctype_offset(str524), 171},
+      {-1},
+      {uniname2ctype_offset(str526), 69},
+      {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str530), 420},
+      {uniname2ctype_offset(str531), 310},
+      {-1},
+      {uniname2ctype_offset(str533), 474},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str541), 567},
+      {-1}, {-1},
+      {uniname2ctype_offset(str544), 324},
+      {uniname2ctype_offset(str545), 350},
+      {-1},
+      {uniname2ctype_offset(str547), 106},
       {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str110,                              406},
+      {uniname2ctype_offset(str552), 158},
+      {-1},
+      {uniname2ctype_offset(str554), 68},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str561), 458},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1},
+      {uniname2ctype_offset(str573), 146},
+      {uniname2ctype_offset(str574), 74},
+      {-1},
+      {uniname2ctype_offset(str576), 72},
+      {uniname2ctype_offset(str577), 19},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str586), 533},
+      {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str591), 372},
+      {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str596), 547},
+      {-1},
+      {uniname2ctype_offset(str598), 51},
+      {-1}, {-1},
+      {uniname2ctype_offset(str601), 485},
+      {uniname2ctype_offset(str602), 49},
       {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str114,                       43},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str115,                        411},
+      {uniname2ctype_offset(str606), 7},
+      {uniname2ctype_offset(str607), 234},
       {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str117,                                263},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str609), 192},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str618), 167},
+      {uniname2ctype_offset(str619), 550},
+      {uniname2ctype_offset(str620), 347},
+      {-1},
+      {uniname2ctype_offset(str622), 460},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str629), 175},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str636), 167},
+      {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str642), 417},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str657), 246},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str665), 321},
+      {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str670), 404},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1},
+      {uniname2ctype_offset(str681), 371},
+      {-1}, {-1},
+      {uniname2ctype_offset(str684), 156},
+      {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str689), 178},
       {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str130,     333},
+      {uniname2ctype_offset(str693), 156},
+      {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str699), 539},
+      {uniname2ctype_offset(str700), 67},
+      {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str705), 41},
+      {-1}, {-1},
+      {uniname2ctype_offset(str708), 50},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str715), 193},
+      {uniname2ctype_offset(str716), 218},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str725), 455},
+      {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str730), 68},
+      {-1},
+      {uniname2ctype_offset(str732), 540},
+      {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str737), 492},
+      {uniname2ctype_offset(str738), 13},
+      {uniname2ctype_offset(str739), 466},
+      {-1},
+      {uniname2ctype_offset(str741), 47},
+      {uniname2ctype_offset(str742), 377},
+      {uniname2ctype_offset(str743), 35},
+      {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str748), 157},
+      {-1}, {-1},
+      {uniname2ctype_offset(str751), 385},
+      {-1},
+      {uniname2ctype_offset(str753), 419},
+      {-1}, {-1},
+      {uniname2ctype_offset(str756), 554},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str770), 48},
+      {-1}, {-1},
+      {uniname2ctype_offset(str773), 38},
       {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str134,                                       24},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str135,                        473},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str136,                                       26},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str137,                                   120},
+      {uniname2ctype_offset(str777), 112},
       {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str141,                                   227},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str142,                                    183},
+      {uniname2ctype_offset(str781), 39},
+      {uniname2ctype_offset(str782), 134},
+      {-1}, {-1},
+      {uniname2ctype_offset(str785), 71},
       {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str144,                                413},
+      {uniname2ctype_offset(str787), 235},
+      {uniname2ctype_offset(str788), 343},
       {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str147,                      384},
+      {uniname2ctype_offset(str791), 140},
+      {uniname2ctype_offset(str792), 140},
+      {uniname2ctype_offset(str793), 228},
       {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str151,                                    151},
+      {uniname2ctype_offset(str797), 480},
       {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str153,                                    13},
+      {uniname2ctype_offset(str799), 294},
+      {-1}, {-1},
+      {uniname2ctype_offset(str802), 468},
+      {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str807), 434},
+      {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str812), 473},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str819), 422},
+      {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str823), 432},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str155,                               302},
+      {uniname2ctype_offset(str834), 67},
+      {uniname2ctype_offset(str835), 136},
       {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str157,                       325},
+      {uniname2ctype_offset(str837), 297},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1},
+      {uniname2ctype_offset(str848), 85},
+      {uniname2ctype_offset(str849), 318},
+      {-1},
+      {uniname2ctype_offset(str851), 503},
+      {uniname2ctype_offset(str852), 245},
+      {uniname2ctype_offset(str853), 481},
+      {-1},
+      {uniname2ctype_offset(str855), 136},
+      {uniname2ctype_offset(str856), 142},
+      {uniname2ctype_offset(str857), 60},
+      {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str862), 115},
+      {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str867), 2},
+      {-1}, {-1},
+      {uniname2ctype_offset(str870), 104},
+      {-1},
+      {uniname2ctype_offset(str872), 247},
+      {-1},
+      {uniname2ctype_offset(str874), 217},
+      {-1}, {-1},
+      {uniname2ctype_offset(str877), 11},
       {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str161,                  331},
+      {uniname2ctype_offset(str881), 69},
+      {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str885), 459},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1},
+      {uniname2ctype_offset(str897), 457},
       {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str163,                             276},
+      {uniname2ctype_offset(str899), 102},
+      {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str903), 101},
+      {-1},
+      {uniname2ctype_offset(str905), 173},
+      {uniname2ctype_offset(str906), 197},
       {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str166,                488},
+      {uniname2ctype_offset(str909), 101},
+      {-1},
+      {uniname2ctype_offset(str911), 138},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str918), 208},
+      {uniname2ctype_offset(str919), 398},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str926), 522},
+      {-1},
+      {uniname2ctype_offset(str928), 73},
+      {-1},
+      {uniname2ctype_offset(str930), 151},
+      {uniname2ctype_offset(str931), 476},
+      {uniname2ctype_offset(str932), 166},
+      {-1}, {-1},
+      {uniname2ctype_offset(str935), 508},
+      {-1},
+      {uniname2ctype_offset(str937), 228},
+      {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str942), 170},
+      {-1},
+      {uniname2ctype_offset(str944), 74},
+      {-1}, {-1},
+      {uniname2ctype_offset(str947), 504},
+      {uniname2ctype_offset(str948), 499},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str956), 183},
+      {uniname2ctype_offset(str957), 333},
+      {-1}, {-1},
+      {uniname2ctype_offset(str960), 135},
+      {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str966), 542},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str975), 186},
+      {uniname2ctype_offset(str976), 129},
+      {uniname2ctype_offset(str977), 158},
+      {-1}, {-1},
+      {uniname2ctype_offset(str980), 244},
+      {-1}, {-1},
+      {uniname2ctype_offset(str983), 329},
+      {-1},
+      {uniname2ctype_offset(str985), 26},
+      {-1}, {-1},
+      {uniname2ctype_offset(str988), 353},
+      {-1}, {-1},
+      {uniname2ctype_offset(str991), 387},
+      {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str996), 53},
+      {-1},
+      {uniname2ctype_offset(str998), 206},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1016), 301},
+      {-1}, {-1},
+      {uniname2ctype_offset(str1019), 392},
+      {-1}, {-1},
+      {uniname2ctype_offset(str1022), 435},
+      {uniname2ctype_offset(str1023), 36},
+      {-1},
+      {uniname2ctype_offset(str1025), 105},
       {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str170,         339},
+      {uniname2ctype_offset(str1029), 129},
       {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str173,                               426},
+      {uniname2ctype_offset(str1032), 200},
       {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str175,    485},
+      {uniname2ctype_offset(str1034), 104},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1048), 541},
+      {uniname2ctype_offset(str1049), 322},
+      {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1053), 126},
+      {-1}, {-1},
+      {uniname2ctype_offset(str1056), 161},
+      {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1061), 25},
+      {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1065), 105},
+      {-1},
+      {uniname2ctype_offset(str1067), 122},
+      {-1},
+      {uniname2ctype_offset(str1069), 206},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1076), 489},
+      {uniname2ctype_offset(str1077), 490},
+      {uniname2ctype_offset(str1078), 93},
+      {-1},
+      {uniname2ctype_offset(str1080), 215},
+      {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1086), 408},
+      {-1},
+      {uniname2ctype_offset(str1088), 203},
+      {uniname2ctype_offset(str1089), 221},
+      {uniname2ctype_offset(str1090), 565},
+      {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1094), 478},
+      {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1098), 517},
+      {-1},
+      {uniname2ctype_offset(str1100), 472},
+      {-1}, {-1},
+      {uniname2ctype_offset(str1103), 402},
+      {uniname2ctype_offset(str1104), 164},
+      {-1}, {-1},
+      {uniname2ctype_offset(str1107), 109},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1114), 122},
+      {uniname2ctype_offset(str1115), 354},
+      {uniname2ctype_offset(str1116), 131},
+      {-1}, {-1},
+      {uniname2ctype_offset(str1119), 135},
+      {uniname2ctype_offset(str1120), 467},
+      {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1124), 113},
+      {-1},
+      {uniname2ctype_offset(str1126), 56},
+      {uniname2ctype_offset(str1127), 218},
+      {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1131), 15},
+      {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1135), 30},
+      {uniname2ctype_offset(str1136), 120},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1},
+      {uniname2ctype_offset(str1147), 370},
+      {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1152), 110},
+      {-1}, {-1},
+      {uniname2ctype_offset(str1155), 110},
+      {uniname2ctype_offset(str1156), 414},
+      {uniname2ctype_offset(str1157), 141},
+      {uniname2ctype_offset(str1158), 121},
+      {-1},
+      {uniname2ctype_offset(str1160), 176},
+      {uniname2ctype_offset(str1161), 181},
+      {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1167), 117},
+      {uniname2ctype_offset(str1168), 479},
+      {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1172), 88},
+      {uniname2ctype_offset(str1173), 507},
+      {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1178), 86},
+      {uniname2ctype_offset(str1179), 166},
+      {uniname2ctype_offset(str1180), 145},
+      {-1},
+      {uniname2ctype_offset(str1182), 563},
+      {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1186), 117},
+      {-1}, {-1},
+      {uniname2ctype_offset(str1189), 193},
+      {-1}, {-1},
+      {uniname2ctype_offset(str1192), 176},
+      {uniname2ctype_offset(str1193), 107},
+      {-1},
+      {uniname2ctype_offset(str1195), 304},
+      {uniname2ctype_offset(str1196), 109},
+      {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1201), 236},
+      {uniname2ctype_offset(str1202), 86},
+      {uniname2ctype_offset(str1203), 502},
+      {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1207), 81},
+      {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1211), 120},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1218), 465},
+      {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1222), 168},
+      {-1}, {-1},
+      {uniname2ctype_offset(str1225), 493},
+      {-1},
+      {uniname2ctype_offset(str1227), 537},
+      {-1},
+      {uniname2ctype_offset(str1229), 388},
+      {-1}, {-1},
+      {uniname2ctype_offset(str1232), 240},
+      {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1237), 196},
+      {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1243), 115},
+      {-1},
+      {uniname2ctype_offset(str1245), 410},
+      {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1249), 222},
+      {-1}, {-1},
+      {uniname2ctype_offset(str1252), 397},
+      {uniname2ctype_offset(str1253), 72},
+      {uniname2ctype_offset(str1254), 114},
+      {-1}, {-1},
+      {uniname2ctype_offset(str1257), 3},
+      {-1},
+      {uniname2ctype_offset(str1259), 137},
+      {-1}, {-1},
+      {uniname2ctype_offset(str1262), 311},
+      {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1267), 292},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str183,                                 152},
+      {uniname2ctype_offset(str1275), 114},
+      {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1281), 553},
+      {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1285), 217},
       {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str186,                                     65},
+      {uniname2ctype_offset(str1288), 42},
+      {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1294), 360},
+      {-1},
+      {uniname2ctype_offset(str1296), 445},
+      {-1},
+      {uniname2ctype_offset(str1298), 73},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1306), 106},
+      {uniname2ctype_offset(str1307), 201},
+      {uniname2ctype_offset(str1308), 373},
+      {uniname2ctype_offset(str1309), 505},
+      {uniname2ctype_offset(str1310), 98},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1317), 210},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1325), 471},
+      {uniname2ctype_offset(str1326), 362},
+      {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1331), 145},
+      {-1}, {-1},
+      {uniname2ctype_offset(str1334), 469},
+      {uniname2ctype_offset(str1335), 9},
+      {uniname2ctype_offset(str1336), 203},
       {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str190,                                  92},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1340), 477},
+      {uniname2ctype_offset(str1341), 524},
+      {-1}, {-1},
+      {uniname2ctype_offset(str1344), 32},
       {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str203,                                     75},
+      {uniname2ctype_offset(str1348), 1},
+      {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1354), 327},
+      {uniname2ctype_offset(str1355), 325},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1364), 352},
+      {uniname2ctype_offset(str1365), 351},
       {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str205,                                    75},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str206,                                    111},
+      {uniname2ctype_offset(str1367), 250},
+      {uniname2ctype_offset(str1368), 125},
+      {uniname2ctype_offset(str1369), 207},
+      {-1}, {-1},
+      {uniname2ctype_offset(str1372), 340},
+      {uniname2ctype_offset(str1373), 245},
+      {uniname2ctype_offset(str1374), 127},
+      {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1379), 164},
+      {-1}, {-1},
+      {uniname2ctype_offset(str1382), 207},
+      {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1388), 138},
       {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str208,                                 273},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str209,                                     88},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str223,                        341},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str226,                                 298},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str227,                                    120},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str237,                        250},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str239,                      408},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str240,                               129},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str241,                                        23},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str243,                                       36},
+      {uniname2ctype_offset(str1390), 375},
+#ifndef USE_UNICODE_AGE_PROPERTIES
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str247,                 386},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str250,                                       52},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str252,                                       28},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str255,                                 289},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str256,                                414},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str257,                                     78},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str259,                                    148},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str260,                                    160},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str261,                        388},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str263,                              256},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str266,                                 78},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str267,                               281},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str270,                             299},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str272,                                  148},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str274,                                    170},
-      {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str280,                                   80},
-      {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str284,                324},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str287,                                261},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str288,                                    155},
-      {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str294,                                    114},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str295,                                     109},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str298,                               155},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str299,                                    109},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str302,                                      63},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str303,                              286},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str304,                               450},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str307,                                    150},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str315,                              185},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str316,                              449},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str317,                                     3},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str318,                                     92},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str320,                    444},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str327,                              284},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str330,                                    88},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str331,                                    172},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str332,                 327},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str333,                                    205},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str335,                                  169},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str337,                               277},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str347,                                 123},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str350,                               423},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str353,               314},
-      {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str359,                                    124},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str362,                                       25},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str363,                                     93},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str366,                                     55},
-      {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str372,                                     82},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str374,        483},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str375,                                     99},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str376,                     39},
-      {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str380,                         394},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str382,                 451},
-      {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str386,                                 151},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str388,                                   82},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str390,                                 183},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str392,                                       70},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str401,                                      67},
-      {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str405,                         170},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str407,                                    168},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str408,                                  457},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str410,                               266},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str412,                                      61},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str414,                           208},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str415,                                     211},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str418,                     205},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str419,                                    186},
-      {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str423,                                    196},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str425,                                    198},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str433,                            459},
-      {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str439,      350},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str441,                             486},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str453,                                      66},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str456,                             305},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str466,                                       43},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str468,                           481},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str470,                                       39},
-      {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str476,                                     224},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str477,                          28},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str485,           326},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str487,                                    218},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str489,                                    123},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str490,                                     64},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str493,                               67},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str502,                          412},
-      {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str508,                                       41},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str518,                               421},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str519,                253},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str520,                                432},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str522,                                       45},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str530,                                    106},
-      {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str536,                              199},
-      {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str540,                   162},
-      {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str544,                                    100},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str545,       477},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str546,                                342},
-      {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str550,                              352},
-      {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str554,           360},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str556,                                     9},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str570,                                    87},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str571,                                    171},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str573,                                    184},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str582,                                    197},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str584,                                    174},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str587,                    163},
-      {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str593,                                322},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str594,                                184},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str596,                                   201},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str597,                    415},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str598,                                    116},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str600,                                    191},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str601,                               455},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str603,                                   229},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str604,                               308},
-      {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str608,                                307},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str609,                                       37},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str611,                                    141},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str612,                                 288},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str614,                                       21},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str617,                                   264},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str620,                                     1},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str622,                          194},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str623,                                   465},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str624,                             429},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str627,                                   74},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str630,                                       19},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str637,                                  468},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str640,                                       50},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str650,                               211},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str658,                   309},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str672,                              344},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str679,                                131},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str696,                                     221},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str699,                                    226},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str700,                                    187},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str703,                            35},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str705,                                   23},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str708,                                    202},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str709,                           373},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str711,                             416},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str713,                                  199},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str715,                                    113},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str718,                                    210},
-      {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str722,                                 195},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str724,                                    193},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str725,                                    225},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str727,                          480},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str728,                                       27},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str730,                            52},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str731,                         160},
-      {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str735,                                  66},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str736,                                   279},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str737,                                 173},
-      {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str742,                                      94},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str743,                                     94},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str744,                               105},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str745,                                  209},
-      {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str749,                       428},
-      {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str753,                                   215},
-      {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str758,                      249},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str761,                                    162},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str763,                                    125},
-      {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str767,                                       35},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str768,                                 113},
-      {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str772,                             443},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str773,                                 219},
-      {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str777,                      101},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str779,                   371},
-      {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str783,                     425},
-      {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str787,                                  128},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str796,                              24},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str798,                                      223},
-      {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str803,                            431},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str804,                                    195},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str805,                               21},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str813,                               140},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str815,           474},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str817,                               456},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str820,                                    59},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str827,                                     7},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str830,                 440},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str832,                  441},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str834,                                    128},
-      {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str838,                   410},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str845,                              144},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str848,                                     188},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str849,                                    188},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str850,           397},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str858,                                57},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str861,                                    163},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str864,                       229},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str866,         484},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str869,                           54},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str871,                 323},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str882,                                   206},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str892,                                    156},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str895,                        442},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str898,                               111},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str905,                                 116},
-      {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str909,                               114},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str910,                                  141},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str913,                                        38},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str916,                             295},
-      {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str922,                                       53},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str923,                         42},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str925,                         226},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str927,                                    173},
-      {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str932,                               454},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str934,                                    129},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str936,                         209},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str938,                   215},
+#else /* USE_UNICODE_AGE_PROPERTIES */
+      {uniname2ctype_offset(str1391), 256},
+      {uniname2ctype_offset(str1392), 263},
+      {uniname2ctype_offset(str1393), 262},
+      {uniname2ctype_offset(str1394), 274},
+      {uniname2ctype_offset(str1395), 258},
+      {uniname2ctype_offset(str1396), 257},
+      {uniname2ctype_offset(str1397), 268},
+      {uniname2ctype_offset(str1398), 267},
+      {uniname2ctype_offset(str1399), 273},
+      {uniname2ctype_offset(str1400), 272},
+      {uniname2ctype_offset(str1401), 269},
+      {uniname2ctype_offset(str1402), 271},
+#endif /* USE_UNICODE_AGE_PROPERTIES */
+      {uniname2ctype_offset(str1403), 552},
+      {uniname2ctype_offset(str1404), 367},
 #ifndef USE_UNICODE_AGE_PROPERTIES
       {-1}, {-1},
 #else /* USE_UNICODE_AGE_PROPERTIES */
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str939,                                 232},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str940,                                 234},
+      {uniname2ctype_offset(str1405), 265},
+      {uniname2ctype_offset(str1406), 264},
 #endif /* USE_UNICODE_AGE_PROPERTIES */
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str941,                         41},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str943,                             36},
+      {uniname2ctype_offset(str1407), 36},
+      {uniname2ctype_offset(str1408), 52},
 #ifndef USE_UNICODE_AGE_PROPERTIES
       {-1}, {-1},
 #else /* USE_UNICODE_AGE_PROPERTIES */
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str944,                                 244},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str945,                                 245},
+      {uniname2ctype_offset(str1409), 266},
+      {-1},
 #endif /* USE_UNICODE_AGE_PROPERTIES */
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str946,                                     89},
+      {uniname2ctype_offset(str1411), 315},
+      {-1},
+      {uniname2ctype_offset(str1413), 564},
+      {uniname2ctype_offset(str1414), 153},
+      {-1},
+      {uniname2ctype_offset(str1416), 93},
+#ifndef USE_UNICODE_AGE_PROPERTIES
+      {-1}, {-1}, {-1},
+#else /* USE_UNICODE_AGE_PROPERTIES */
+      {uniname2ctype_offset(str1417), 260},
+      {uniname2ctype_offset(str1418), 259},
+      {-1},
+#endif /* USE_UNICODE_AGE_PROPERTIES */
+      {uniname2ctype_offset(str1420), 202},
 #ifndef USE_UNICODE_AGE_PROPERTIES
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 #else /* USE_UNICODE_AGE_PROPERTIES */
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str947,                                 236},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str948,                                 237},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str949,                                 241},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str950,                                 242},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str951,                                 233},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str952,                                 246},
+      {uniname2ctype_offset(str1421), 261},
+      {-1},
+      {uniname2ctype_offset(str1423), 270},
+      {-1}, {-1}, {-1},
 #endif /* USE_UNICODE_AGE_PROPERTIES */
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str953,               471},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str954,                       437},
-#ifndef USE_UNICODE_AGE_PROPERTIES
+      {uniname2ctype_offset(str1427), 20},
+      {-1},
+      {uniname2ctype_offset(str1429), 124},
+      {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1434), 501},
+      {uniname2ctype_offset(str1435), 137},
+      {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1439), 428},
+      {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1444), 39},
+      {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1449), 312},
+      {uniname2ctype_offset(str1450), 202},
+      {uniname2ctype_offset(str1451), 336},
+      {-1},
+      {uniname2ctype_offset(str1453), 418},
+      {-1},
+      {uniname2ctype_offset(str1455), 27},
+      {uniname2ctype_offset(str1456), 238},
+      {-1},
+      {uniname2ctype_offset(str1458), 225},
+      {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1463), 241},
+      {uniname2ctype_offset(str1464), 538},
+      {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1469), 141},
+      {uniname2ctype_offset(str1470), 35},
+      {uniname2ctype_offset(str1471), 355},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1485), 462},
+      {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1490), 252},
+      {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1496), 54},
+      {uniname2ctype_offset(str1497), 225},
       {-1}, {-1},
-#else /* USE_UNICODE_AGE_PROPERTIES */
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str955,                                 243},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str956,                                 239},
-#endif /* USE_UNICODE_AGE_PROPERTIES */
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str957,                    316},
-#ifndef USE_UNICODE_AGE_PROPERTIES
+      {uniname2ctype_offset(str1500), 313},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1508), 506},
+      {-1},
+      {uniname2ctype_offset(str1510), 154},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1},
+      {uniname2ctype_offset(str1521), 497},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1},
-#else /* USE_UNICODE_AGE_PROPERTIES */
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str958,                                 235},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str959,                                 247},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str960,                                 240},
+      {uniname2ctype_offset(str1535), 383},
+      {uniname2ctype_offset(str1536), 381},
+      {-1}, {-1},
+      {uniname2ctype_offset(str1539), 34},
+      {uniname2ctype_offset(str1540), 299},
+      {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1545), 8},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1553), 513},
       {-1},
-#endif /* USE_UNICODE_AGE_PROPERTIES */
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str962,                             430},
-#ifndef USE_UNICODE_AGE_PROPERTIES
+      {uniname2ctype_offset(str1555), 243},
+      {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1560), 222},
+      {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1565), 20},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1572), 6},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-#else /* USE_UNICODE_AGE_PROPERTIES */
+      {uniname2ctype_offset(str1580), 332},
       {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str967,                                 238},
+      {uniname2ctype_offset(str1585), 234},
+      {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1589), 349},
+      {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1593), 536},
+      {uniname2ctype_offset(str1594), 572},
+      {uniname2ctype_offset(str1595), 43},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1602), 317},
+      {-1},
+      {uniname2ctype_offset(str1604), 405},
+      {-1},
+      {uniname2ctype_offset(str1606), 424},
+      {uniname2ctype_offset(str1607), 199},
+      {uniname2ctype_offset(str1608), 535},
+      {uniname2ctype_offset(str1609), 142},
+      {-1},
+      {uniname2ctype_offset(str1611), 482},
+      {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1617), 85},
+      {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1623), 235},
+      {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1628), 242},
+      {-1},
+      {uniname2ctype_offset(str1630), 249},
+      {uniname2ctype_offset(str1631), 33},
+      {uniname2ctype_offset(str1632), 159},
+      {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1636), 121},
+      {-1},
+      {uniname2ctype_offset(str1638), 253},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1645), 357},
+      {-1},
+      {uniname2ctype_offset(str1647), 58},
+      {uniname2ctype_offset(str1648), 447},
+      {-1},
+      {uniname2ctype_offset(str1650), 159},
+      {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1654), 244},
+      {uniname2ctype_offset(str1655), 361},
+      {uniname2ctype_offset(str1656), 446},
+      {uniname2ctype_offset(str1657), 66},
+      {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1663), 148},
       {-1}, {-1},
-#endif /* USE_UNICODE_AGE_PROPERTIES */
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str970,                                   157},
+      {uniname2ctype_offset(str1666), 154},
+      {-1}, {-1},
+      {uniname2ctype_offset(str1669), 148},
       {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str972,                                  18},
+      {uniname2ctype_offset(str1671), 215},
+      {uniname2ctype_offset(str1672), 162},
+      {uniname2ctype_offset(str1673), 356},
+      {uniname2ctype_offset(str1674), 395},
+      {-1}, {-1},
+      {uniname2ctype_offset(str1677), 431},
+      {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1682), 97},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1690), 394},
+      {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1695), 97},
       {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str974,                              470},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str975,                        372},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str976,                                260},
+      {uniname2ctype_offset(str1697), 89},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1714), 230},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1},
+      {uniname2ctype_offset(str1725), 37},
+      {-1},
+      {uniname2ctype_offset(str1727), 330},
+      {uniname2ctype_offset(str1728), 143},
+      {-1},
+      {uniname2ctype_offset(str1730), 433},
       {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str982,                                   103},
+      {uniname2ctype_offset(str1736), 5},
+      {uniname2ctype_offset(str1737), 143},
+      {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1741), 358},
       {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str984,                               424},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str985,                       436},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str986,                            248},
+      {uniname2ctype_offset(str1743), 254},
+      {-1}, {-1},
+      {uniname2ctype_offset(str1746), 341},
+      {-1},
+      {uniname2ctype_offset(str1748), 376},
+      {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1752), 569},
+      {-1},
+      {uniname2ctype_offset(str1754), 87},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1762), 174},
+      {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1766), 87},
+      {uniname2ctype_offset(str1767), 232},
+      {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1772), 344},
+      {-1},
+      {uniname2ctype_offset(str1774), 131},
+      {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1780), 227},
+      {-1}, {-1},
+      {uniname2ctype_offset(str1783), 174},
+      {-1},
+      {uniname2ctype_offset(str1785), 515},
+      {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1789), 416},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1},
+      {uniname2ctype_offset(str1800), 293},
+      {-1},
+      {uniname2ctype_offset(str1802), 219},
+      {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1806), 378},
+      {-1},
+      {uniname2ctype_offset(str1808), 55},
+      {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1813), 139},
+      {uniname2ctype_offset(str1814), 29},
+      {uniname2ctype_offset(str1815), 407},
+      {-1}, {-1},
+      {uniname2ctype_offset(str1818), 531},
+      {uniname2ctype_offset(str1819), 298},
+      {-1},
+      {uniname2ctype_offset(str1821), 413},
+      {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1825), 196},
+      {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1829), 365},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1},
+      {uniname2ctype_offset(str1840), 177},
+      {-1}, {-1},
+      {uniname2ctype_offset(str1843), 237},
+      {-1}, {-1},
+      {uniname2ctype_offset(str1846), 423},
+      {uniname2ctype_offset(str1847), 190},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1857), 400},
+      {uniname2ctype_offset(str1858), 566},
+      {-1}, {-1},
+      {uniname2ctype_offset(str1861), 483},
+      {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1866), 247},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1885), 363},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str995,                                   19},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str996,                           321},
+      {uniname2ctype_offset(str1894), 150},
+      {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1900), 150},
+      {-1}, {-1},
+      {uniname2ctype_offset(str1903), 568},
+      {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1909), 319},
+      {uniname2ctype_offset(str1910), 390},
+      {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1914), 559},
+      {uniname2ctype_offset(str1915), 359},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1922), 84},
       {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str998,                              419},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str999,                                51},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1000,                       217},
+      {uniname2ctype_offset(str1924), 442},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1932), 84},
+      {uniname2ctype_offset(str1933), 232},
+      {uniname2ctype_offset(str1934), 495},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1943), 26},
+      {uniname2ctype_offset(str1944), 12},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1004,                                118},
+      {uniname2ctype_offset(str1975), 61},
+      {uniname2ctype_offset(str1976), 412},
+      {-1}, {-1},
+      {uniname2ctype_offset(str1979), 239},
+      {-1},
+      {uniname2ctype_offset(str1981), 94},
+      {-1},
+      {uniname2ctype_offset(str1983), 83},
+      {-1},
+      {uniname2ctype_offset(str1985), 348},
+      {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1989), 543},
+      {-1},
+      {uniname2ctype_offset(str1991), 83},
+      {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str1995), 556},
+      {-1},
+      {uniname2ctype_offset(str1997), 134},
+      {uniname2ctype_offset(str1998), 21},
+      {uniname2ctype_offset(str1999), 380},
+      {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2003), 516},
+      {-1},
+      {uniname2ctype_offset(str2005), 64},
+      {-1},
+      {uniname2ctype_offset(str2007), 198},
+      {uniname2ctype_offset(str2008), 185},
+      {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2013), 450},
+      {-1},
+      {uniname2ctype_offset(str2015), 198},
+      {-1},
+      {uniname2ctype_offset(str2017), 165},
+      {-1}, {-1},
+      {uniname2ctype_offset(str2020), 185},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2047), 240},
+      {-1},
+      {uniname2ctype_offset(str2049), 421},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2056), 391},
+      {-1}, {-1},
+      {uniname2ctype_offset(str2059), 152},
+      {-1},
+      {uniname2ctype_offset(str2061), 17},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2068), 191},
+      {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2072), 415},
+      {uniname2ctype_offset(str2073), 183},
+      {-1}, {-1},
+      {uniname2ctype_offset(str2076), 118},
+      {-1}, {-1},
+      {uniname2ctype_offset(str2079), 191},
+      {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2084), 444},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2091), 175},
+      {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2095), 560},
+      {uniname2ctype_offset(str2096), 194},
+      {uniname2ctype_offset(str2097), 78},
+      {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2101), 43},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1},
+      {uniname2ctype_offset(str2112), 172},
+      {-1},
+      {uniname2ctype_offset(str2114), 306},
+      {-1}, {-1},
+      {uniname2ctype_offset(str2117), 195},
+      {-1},
+      {uniname2ctype_offset(str2119), 491},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2134), 92},
+      {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2139), 562},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2146), 192},
+      {-1},
+      {uniname2ctype_offset(str2148), 384},
+      {uniname2ctype_offset(str2149), 92},
+      {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2154), 214},
+      {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2158), 224},
+      {-1}, {-1},
+      {uniname2ctype_offset(str2161), 139},
+      {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2165), 287},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2172), 291},
+      {-1},
+      {uniname2ctype_offset(str2174), 328},
+      {-1},
+      {uniname2ctype_offset(str2176), 128},
+      {-1}, {-1},
+      {uniname2ctype_offset(str2179), 281},
+      {-1}, {-1},
+      {uniname2ctype_offset(str2182), 426},
+      {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2187), 48},
+      {-1},
+      {uniname2ctype_offset(str2189), 89},
+      {-1}, {-1},
+      {uniname2ctype_offset(str2192), 276},
+      {uniname2ctype_offset(str2193), 130},
+      {-1}, {-1},
+      {uniname2ctype_offset(str2196), 128},
+      {uniname2ctype_offset(str2197), 90},
+      {uniname2ctype_offset(str2198), 389},
+      {uniname2ctype_offset(str2199), 288},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1012,                                    177},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1013,                                    144},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1014,                                    190},
+      {uniname2ctype_offset(str2207), 280},
       {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1017,                    475},
+      {uniname2ctype_offset(str2210), 342},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2224), 406},
+      {uniname2ctype_offset(str2225), 211},
+      {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2229), 369},
+      {-1}, {-1},
+      {uniname2ctype_offset(str2232), 209},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2249), 130},
+      {-1}, {-1},
+      {uniname2ctype_offset(str2252), 80},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2260), 337},
+      {-1}, {-1},
+      {uniname2ctype_offset(str2263), 544},
+      {uniname2ctype_offset(str2264), 82},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2271), 239},
+      {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2276), 527},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2286), 243},
+      {-1}, {-1},
+      {uniname2ctype_offset(str2289), 366},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2296), 229},
+      {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2300), 18},
+      {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2306), 510},
+      {uniname2ctype_offset(str2307), 38},
+      {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2311), 427},
       {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1019,                             201},
+      {uniname2ctype_offset(str2313), 112},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2327), 213},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1023,                            225},
+      {uniname2ctype_offset(str2349), 451},
+      {uniname2ctype_offset(str2350), 441},
+      {-1}, {-1},
+      {uniname2ctype_offset(str2353), 448},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2360), 314},
       {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1027,               472},
+      {uniname2ctype_offset(str2364), 65},
+      {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2369), 346},
+      {-1}, {-1},
+      {uniname2ctype_offset(str2372), 82},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2380), 100},
+      {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2386), 226},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2393), 251},
+      {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2399), 548},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2408), 211},
+      {uniname2ctype_offset(str2409), 118},
+      {-1}, {-1},
+      {uniname2ctype_offset(str2412), 284},
+      {uniname2ctype_offset(str2413), 229},
+      {uniname2ctype_offset(str2414), 286},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2422), 119},
+      {uniname2ctype_offset(str2423), 99},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2433), 364},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2449), 316},
+      {-1},
+      {uniname2ctype_offset(str2451), 54},
+      {uniname2ctype_offset(str2452), 96},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2461), 96},
       {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1031,                                  496},
+      {uniname2ctype_offset(str2465), 103},
       {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1033,                               190},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1034,             317},
+      {uniname2ctype_offset(str2467), 62},
       {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1036,                               280},
+      {uniname2ctype_offset(str2469), 226},
+      {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2473), 107},
+      {-1},
+      {uniname2ctype_offset(str2475), 23},
+      {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2481), 525},
+      {-1},
+      {uniname2ctype_offset(str2483), 425},
+      {uniname2ctype_offset(str2484), 532},
+      {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2488), 182},
+      {uniname2ctype_offset(str2489), 279},
+      {uniname2ctype_offset(str2490), 275},
       {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1039,                            376},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1040,                              50},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1041,                                     212},
+      {uniname2ctype_offset(str2493), 178},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2500), 464},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2507), 57},
+      {-1},
+      {uniname2ctype_offset(str2509), 50},
+      {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2515), 231},
+      {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2519), 204},
+      {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2523), 153},
+      {-1}, {-1},
+      {uniname2ctype_offset(str2526), 393},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2539), 41},
+      {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2545), 551},
       {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1046,              398},
+      {uniname2ctype_offset(str2550), 456},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2573), 210},
+      {-1}, {-1},
+      {uniname2ctype_offset(str2576), 4},
+      {-1}, {-1},
+      {uniname2ctype_offset(str2579), 179},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2587), 454},
       {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1048,     337},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1049,                          213},
+      {uniname2ctype_offset(str2589), 126},
+      {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2594), 216},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2601), 216},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2617), 63},
+      {uniname2ctype_offset(str2618), 213},
+      {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2622), 338},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2630), 133},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2643), 282},
+      {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2649), 278},
+      {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2653), 165},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2660), 66},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2678), 147},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2693), 78},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2702), 99},
       {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1052,                              137},
+      {uniname2ctype_offset(str2705), 49},
       {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1055,                                     6},
+      {uniname2ctype_offset(str2708), 558},
+      {-1},
+      {uniname2ctype_offset(str2710), 570},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2717), 88},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2751), 549},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2758), 64},
       {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1060,                                    121},
+      {uniname2ctype_offset(str2763), 132},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1},
+      {uniname2ctype_offset(str2775), 230},
       {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1064,                                       44},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1065,                      382},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1066,                                    119},
+      {uniname2ctype_offset(str2779), 386},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1},
+      {uniname2ctype_offset(str2791), 242},
+      {uniname2ctype_offset(str2792), 123},
+      {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2797), 28},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2823), 437},
+      {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2829), 180},
+      {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2834), 335},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2850), 231},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1068,                       335},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1069,                                     95},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1070,                               136},
+      {uniname2ctype_offset(str2879), 223},
+      {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2883), 199},
+      {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2888), 133},
       {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1072,                                    135},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1073,                              133},
+      {uniname2ctype_offset(str2890), 124},
+      {uniname2ctype_offset(str2891), 528},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2901), 452},
       {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1077,                               193},
+      {uniname2ctype_offset(str2905), 295},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1080,                                       42},
+      {uniname2ctype_offset(str2926), 125},
       {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1084,                                     12},
+      {uniname2ctype_offset(str2930), 277},
       {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1086,                                  95},
+      {uniname2ctype_offset(str2932), 51},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1089,                    257},
+      {uniname2ctype_offset(str2953), 71},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str2967), 475},
+      {uniname2ctype_offset(str2968), 197},
       {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1093,                                    179},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1094,     338},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1095,                              304},
+      {uniname2ctype_offset(str2972), 146},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1},
+      {uniname2ctype_offset(str2984), 204},
+      {-1}, {-1},
+      {uniname2ctype_offset(str2987), 255},
+      {-1},
+      {uniname2ctype_offset(str2989), 409},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str3007), 180},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str3016), 403},
+      {-1}, {-1},
+      {uniname2ctype_offset(str3019), 62},
+      {uniname2ctype_offset(str3020), 45},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str3038), 10},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str3052), 382},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str3066), 190},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str3094), 63},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str3113), 59},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str3121), 123},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str3153), 238},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1101,                                  84},
+      {uniname2ctype_offset(str3177), 223},
       {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1104,                            60},
+      {uniname2ctype_offset(str3180), 132},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str3193), 47},
+      {-1},
+      {uniname2ctype_offset(str3195), 224},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str3213), 16},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str3235), 438},
       {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1107,                   476},
+      {uniname2ctype_offset(str3238), 100},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1},
+      {uniname2ctype_offset(str3276), 177},
+      {-1}, {-1},
+      {uniname2ctype_offset(str3279), 283},
+      {uniname2ctype_offset(str3280), 285},
+      {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str3285), 214},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1},
+      {uniname2ctype_offset(str3296), 289},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str3305), 290},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str3315), 205},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1114,                                    17},
+      {uniname2ctype_offset(str3367), 65},
+      {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str3373), 103},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str3409), 30},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1},
+      {uniname2ctype_offset(str3438), 303},
       {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1118,                                 197},
+      {uniname2ctype_offset(str3442), 440},
+      {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str3448), 46},
+      {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str3453), 233},
+      {uniname2ctype_offset(str3454), 220},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1},
+      {uniname2ctype_offset(str3465), 119},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str3496), 411},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str3593), 162},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str3662), 179},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str3676), 201},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str3689), 545},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str3697), 561},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1121,                              37},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1123,                                135},
-      {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1129,                                 179},
-      {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1134,    287},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1136,                          25},
-      {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1140,                                 99},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1141,                                    180},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1149,                              270},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1151,                                    140},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1153,                    285},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1160,                            420},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1163,                             418},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1170,                               206},
-      {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1174,                               20},
-      {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1180,                                    181},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1181,                                    189},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1184,                                    126},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1186,                                     98},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1187,                           447},
-      {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1193,                                     80},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1194,                                    172},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1195,                              271},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1197,                                  167},
-      {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1201,                                    103},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1202,                                    208},
-      {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1206,                                    105},
-      {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1211,                                    192},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1212,                                    161},
-      {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1218,                                    102},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1221,                                  213},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1222,                                       40},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1235,                                   34},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1238,                                445},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1240,                              27},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1252,                                417},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1254,                                 138},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1262,                     320},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1265,                                      110},
-      {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1269,                                   98},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1271,                                    110},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1272,                                    131},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1273,                   491},
-      {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1277,                        255},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1279,                                     69},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1280,                   334},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1281,                                  112},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1283,                                    71},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1285,                    401},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1286,                              222},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1287,                              466},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1305,                                     68},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1308,                                 121},
-      {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1312,                       330},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1313,                                    194},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1314,                              198},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1317,                         329},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1318,                           26},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1321,                              332},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1322,                                     222},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1324,                                     8},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1327,                               291},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1334,                                   200},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1344,                         315},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1353,                                    217},
-      {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1359,                                 16},
-      {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1364,                         44},
-      {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1368,                       390},
-      {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1373,   479},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1385,                    487},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1387,                               375},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1389,                                    147},
-      {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1393,                                     91},
-      {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1399,                       267},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1400,                                    146},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1402,                                  147},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1403,                     489},
-      {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1409,                                   11},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1412,                                     4},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1420,                                 68},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1421,                                379},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1424,                                91},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1425,                      218},
-      {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1429,                                   368},
-      {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1435,                                     143},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1436,                                    143},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1438,                                106},
-      {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1442,                              282},
-      {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1448,                                 126},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1455,                                     97},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1457,                                    167},
-      {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1463,                              130},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1465,                               275},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1466,                                    169},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1467,                                    107},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1469,                                     79},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1471,                               422},
-      {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1477,                                      228},
-      {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1481,                                448},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1490,                                   102},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1491,                             132},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1492, 296},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1495,                   433},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1498,                                 180},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1500,                             72},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1502,                               49},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1505,                                     96},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1513,          498},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1514,                            186},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1516,                 402},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1518,            405},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1521,            396},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1522,                                446},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1525,                                    153},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1526,                      262},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1527,                                   175},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1529,                                     81},
-      {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1533,                             159},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1534,                                  96},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1535,                                 153},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1536,                   380},
-      {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1540,                                    112},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1542,                              353},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1544,                     346},
-      {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1549,                               56},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1550,                                   81},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1551,                             210},
-      {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1555,                            358},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1557,                      407},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1558,                                    152},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1559,                               385},
-      {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1564,  495},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1576,                           389},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1577,                                    145},
-      {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1581,                            366},
-      {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1586,                                       29},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1587,                                 272},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1590,                                   79},
-      {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1596,                                212},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1598,              393},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1600,                                   119},
-      {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1606,                                 292},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1608,                     387},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1609,                              69},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1611,                 363},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1612,                   224},
-      {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1616,                                259},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1617,                                     77},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1618,                                 124},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1621,                                    137},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1622,             254},
-      {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1626,                        469},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1627,                                  367},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1628,                    65},
-      {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1632,   319},
-      {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1636,                                      62},
-      {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1641,                                    138},
-      {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1645,                     403},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1656,                           467},
-      {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1661,                          214},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1662,                                274},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1665,   313},
-      {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1670,               490},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1671,                                    133},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1687,                                    157},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1689,                                 370},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1692,                                     30},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1694,                                    178},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1695,                                     5},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1696,                          40},
-      {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1700,                           230},
-      {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1705,                    63},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1706,                            435},
-      {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1712,                                 294},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1713,                                    158},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1714,                                    132},
-      {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1719,                                122},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1722,          221},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1723,                              223},
-      {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1729,                                   220},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1732,                    311},
-      {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1736,                              381},
-      {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1742,                    399},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1744,                                  165},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1747,                                 77},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1749,                                 458},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1750,                                    175},
-      {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1755,                                158},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1757,                             200},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1758,                       176},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1765,                                    149},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1772,               347},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1775,          312},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1778,                                  149},
-      {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1784,                               164},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1785,          497},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1786,                                    165},
-      {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1792,                            283},
-      {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1797,                                  230},
-      {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1802,                                 297},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1804,                             174},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1807,                                     87},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1822,                          300},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1824,                            340},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1831,                            268},
-      {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1835,                                     83},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1836,                                     90},
-      {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1841,                               269},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1843,                                   46},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1846,                               83},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1849,                          478},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1852,                                     84},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1853,                       310},
-      {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1859,                           71},
-      {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1865,                                  90},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1866,                              301},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1869,                                    142},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1871,                     171},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1872,                                    122},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1874,                               290},
-      {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1878,                       464},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1880,                                 142},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1899,                       318},
-      {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1904,                                    118},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1912,                         409},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1915,                              293},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1916,                                58},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1917,                70},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1919,                                    130},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1921,            359},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1932,                    64},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1942,                             460},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1943,                        395},
-      {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1947,                               192},
-      {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1953,                              31},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1956,                                    104},
-      {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1962,                                    134},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1964,              404},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1967,                    61},
-      {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1971,                                    115},
-      {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1976,                      345},
-      {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1980,     303},
-      {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1986,                                  214},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1994,              351},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1997,                                    108},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str1998,                              38},
-      {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2002,                            30},
-      {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2007,                          482},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2008,                              354},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2021,                                  203},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2028,                                452},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2046,                                     139},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2047,                                    139},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2048,                            32},
-      {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2053,                          45},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2061,                           47},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2063,                         400},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2071,                                     207},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2072,                           48},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2073,                        251},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2075,                              134},
-      {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2080,                                100},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2088,                             181},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2096,                                 125},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2105,                      427},
-      {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2110,                               191},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2113,                                    10},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2116,                                    176},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2123,                                 97},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2131,                                     86},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2142,                                   72},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2152,                                 86},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2153,                                207},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2189,                                   104},
-      {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2194,                          29},
-      {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2198,                   336},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2224,                                22},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2227,                        220},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2237,                           33},
-      {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2241,                     216},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2242,                    377},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2252,                                    164},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2273,                    343},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2287,                         189},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2290,                                 115},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2292,                                    182},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2311,                                108},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2318,                                  146},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2326,                                    117},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2343,                 348},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2382,                                356},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2406,                       228},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2417,                        349},
-      {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2421,                        392},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2431,          499},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2445,                                  216},
-      {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2449,                                    166},
-      {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2454,                   391},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2457,                                 306},
-      {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2462,                     369},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2502,                               500},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2527,                                      15},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2534,                                    136},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2562,                                    127},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2570,                             453},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2571,                                   89},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2579,                    62},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2588,                                     76},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2591,                                     85},
-      {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2595,                       53},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2613,                                127},
-      {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2617,                           365},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2631,                                    154},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2634,                               196},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2643,                                 231},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2685,                                177},
-      {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2689,                   463},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2709,                                   117},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2722,                               378},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2732,                       434},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2734,                      361},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2787,                         161},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2795,                           204},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2889,               355},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2898,                                   204},
-      {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2902,        493},
-      {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2906,                                       48},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2909,        362},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2918,                  364},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str2984,                                107},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str3112,                                 145},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str3137,                                178},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str3278,        494},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str3360,                      357},
+      {uniname2ctype_offset(str3763), 571},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str3791), 523},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
@@ -32525,64 +38069,165 @@
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
 #ifndef USE_UNICODE_PROPERTIES
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str6,                                     12},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str7,                                     7},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str8,                                     8},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str9,                                     1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str10,                                    13},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str11,                                   11},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str12,                                    10},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str13,                                    14},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str14,                                     3},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str15,                                     9},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str16,                                     6},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str17,                                     5},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str18,                                     4},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str19,                                     2}
+      {uniname2ctype_offset(str6), 12},
+      {uniname2ctype_offset(str7), 7},
+      {uniname2ctype_offset(str8), 15},
+      {uniname2ctype_offset(str9), 1},
+      {uniname2ctype_offset(str10), 13},
+      {uniname2ctype_offset(str11), 11},
+      {uniname2ctype_offset(str12), 10},
+      {uniname2ctype_offset(str13), 14},
+      {uniname2ctype_offset(str14), 3},
+      {uniname2ctype_offset(str15), 9},
+      {uniname2ctype_offset(str16), 8},
+      {uniname2ctype_offset(str17), 6},
+      {uniname2ctype_offset(str18), 5},
+      {uniname2ctype_offset(str19), 4},
+      {uniname2ctype_offset(str20), 2}
 #else /* USE_UNICODE_PROPERTIES */
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str3466,                                  182},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str3960), 147},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1},
+      {uniname2ctype_offset(str3971), 401},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1},
+      {uniname2ctype_offset(str4036), 90},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1},
+      {uniname2ctype_offset(str4164), 116},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str3777,                                     74},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str3778,                     154},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str4187), 116},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1},
+      {uniname2ctype_offset(str4208), 233},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str4460), 237},
       {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str3827,        492},
+      {uniname2ctype_offset(str4464), 374},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str4483), 182},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str4608), 439},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str4634), 205},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str4678), 75},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {uniname2ctype_offset(str4841), 155},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
@@ -32592,61 +38237,115 @@
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str3886,                                   166},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str3941,                                     2},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str3995,                            328},
+      {uniname2ctype_offset(str5170), 80},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
+      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
       {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str4025,                                    76},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str4035,                                 85},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str4122,                                   73},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1},
-      {(int)(long)&((struct uniname2ctype_pool_t *)0)->uniname2ctype_pool_str4322,                             73}
+      {uniname2ctype_offset(str6145), 155}
 #endif /* USE_UNICODE_PROPERTIES */
     };
@@ -32678,2 +38377,13 @@
   return -1;
 }
+#if defined ONIG_UNICODE_VERSION_STRING && !( \
+      ONIG_UNICODE_VERSION_MAJOR == 10 && \
+      ONIG_UNICODE_VERSION_MINOR == 0 && \
+      ONIG_UNICODE_VERSION_TEENY == 0 && \
+      1)
+# error ONIG_UNICODE_VERSION_STRING mismatch
+#endif
+#define ONIG_UNICODE_VERSION_STRING "10.0.0"
+#define ONIG_UNICODE_VERSION_MAJOR 10
+#define ONIG_UNICODE_VERSION_MINOR 0
+#define ONIG_UNICODE_VERSION_TEENY 0
Index: EcnlProtoTool/trunk/onigmo-6.1.3/src/enc/utf8.c
===================================================================
--- EcnlProtoTool/trunk/onigmo-5.15.0/src/enc/utf8.c	(revision 321)
+++ 	(revision )
@@ -1,304 +1,0 @@
-/**********************************************************************
-  utf8.c -  Oniguruma (regular expression library)
-**********************************************************************/
-/*-
- * Copyright (c) 2002-2007  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#include "regenc.h"
-
-#define USE_INVALID_CODE_SCHEME
-
-#ifdef USE_INVALID_CODE_SCHEME
-/* virtual codepoint values for invalid encoding byte 0xfe and 0xff */
-#define INVALID_CODE_FE   0xfffffffe
-#define INVALID_CODE_FF   0xffffffff
-#define VALID_CODE_LIMIT  0x7fffffff
-#endif
-
-#define utf8_islead(c)     ((UChar )((c) & 0xc0) != 0x80)
-
-static const int EncLen_UTF8[] = {
-  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
-  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-  3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
-  4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 1, 1
-};
-
-static int
-mbc_enc_len(const UChar* p)
-{
-  return EncLen_UTF8[*p];
-}
-
-static int
-is_mbc_newline(const UChar* p, const UChar* end)
-{
-  if (p < end) {
-    if (*p == 0x0a) return 1;
-
-#ifdef USE_UNICODE_ALL_LINE_TERMINATORS
-    if (*p == 0x0b || *p == 0x0c || *p == 0x0d) return 1;
-    if (p + 1 < end) {
-      if (*(p+1) == 0x85 && *p == 0xc2) /* U+0085 */
-	return 1;
-      if (p + 2 < end) {
-	if ((*(p+2) == 0xa8 || *(p+2) == 0xa9)
-	    && *(p+1) == 0x80 && *p == 0xe2)  /* U+2028, U+2029 */
-	  return 1;
-      }
-    }
-#endif
-  }
-
-  return 0;
-}
-
-static OnigCodePoint
-mbc_to_code(const UChar* p, const UChar* end ARG_UNUSED)
-{
-  int c, len;
-  OnigCodePoint n;
-
-  len = mbc_enc_len(p);
-  c = *p++;
-  if (len > 1) {
-    len--;
-    n = c & ((1 << (6 - len)) - 1);
-    while (len--) {
-      c = *p++;
-      n = (n << 6) | (c & ((1 << 6) - 1));
-    }
-    return n;
-  }
-  else {
-#ifdef USE_INVALID_CODE_SCHEME
-    if (c > 0xfd) {
-      return ((c == 0xfe) ? INVALID_CODE_FE : INVALID_CODE_FF);
-    }
-#endif
-    return (OnigCodePoint )c;
-  }
-}
-
-static int
-code_to_mbclen(OnigCodePoint code)
-{
-  if      ((code & 0xffffff80) == 0) return 1;
-  else if ((code & 0xfffff800) == 0) return 2;
-  else if ((code & 0xffff0000) == 0) return 3;
-  else if ((code & 0xffe00000) == 0) return 4;
-  else if ((code & 0xfc000000) == 0) return 5;
-  else if ((code & 0x80000000) == 0) return 6;
-#ifdef USE_INVALID_CODE_SCHEME
-  else if (code == INVALID_CODE_FE) return 1;
-  else if (code == INVALID_CODE_FF) return 1;
-#endif
-  else
-    return ONIGERR_INVALID_CODE_POINT_VALUE;
-}
-
-static int
-code_to_mbc(OnigCodePoint code, UChar *buf)
-{
-#define UTF8_TRAILS(code, shift) (UChar )((((code) >> (shift)) & 0x3f) | 0x80)
-#define UTF8_TRAIL0(code)        (UChar )(((code) & 0x3f) | 0x80)
-
-  if ((code & 0xffffff80) == 0) {
-    *buf = (UChar )code;
-    return 1;
-  }
-  else {
-    UChar *p = buf;
-
-    if ((code & 0xfffff800) == 0) {
-      *p++ = (UChar )(((code>>6)& 0x1f) | 0xc0);
-    }
-    else if ((code & 0xffff0000) == 0) {
-      *p++ = (UChar )(((code>>12) & 0x0f) | 0xe0);
-      *p++ = UTF8_TRAILS(code, 6);
-    }
-    else if ((code & 0xffe00000) == 0) {
-      *p++ = (UChar )(((code>>18) & 0x07) | 0xf0);
-      *p++ = UTF8_TRAILS(code, 12);
-      *p++ = UTF8_TRAILS(code,  6);
-    }
-    else if ((code & 0xfc000000) == 0) {
-      *p++ = (UChar )(((code>>24) & 0x03) | 0xf8);
-      *p++ = UTF8_TRAILS(code, 18);
-      *p++ = UTF8_TRAILS(code, 12);
-      *p++ = UTF8_TRAILS(code,  6);
-    }
-    else if ((code & 0x80000000) == 0) {
-      *p++ = (UChar )(((code>>30) & 0x01) | 0xfc);
-      *p++ = UTF8_TRAILS(code, 24);
-      *p++ = UTF8_TRAILS(code, 18);
-      *p++ = UTF8_TRAILS(code, 12);
-      *p++ = UTF8_TRAILS(code,  6);
-    }
-#ifdef USE_INVALID_CODE_SCHEME
-    else if (code == INVALID_CODE_FE) {
-      *p = 0xfe;
-      return 1;
-    }
-    else if (code == INVALID_CODE_FF) {
-      *p = 0xff;
-      return 1;
-    }
-#endif
-    else {
-      return ONIGERR_TOO_BIG_WIDE_CHAR_VALUE;
-    }
-
-    *p++ = UTF8_TRAIL0(code);
-    return (int )(p - buf);
-  }
-}
-
-static int
-mbc_case_fold(OnigCaseFoldType flag, const UChar** pp,
-	      const UChar* end, UChar* fold)
-{
-  const UChar* p = *pp;
-
-  if (ONIGENC_IS_MBC_ASCII(p)) {
-#ifdef USE_UNICODE_CASE_FOLD_TURKISH_AZERI
-    if ((flag & ONIGENC_CASE_FOLD_TURKISH_AZERI) != 0) {
-      if (*p == 0x49) {
-	*fold++ = 0xc4;
-	*fold   = 0xb1;
-	(*pp)++;
-	return 2;
-      }
-    }
-#endif
-
-    *fold = ONIGENC_ASCII_CODE_TO_LOWER_CASE(*p);
-    (*pp)++;
-    return 1; /* return byte length of converted char to lower */
-  }
-  else {
-    return onigenc_unicode_mbc_case_fold(ONIG_ENCODING_UTF8, flag,
-					 pp, end, fold);
-  }
-}
-
-#if 0
-static int
-is_mbc_ambiguous(OnigCaseFoldType flag, const UChar** pp, const UChar* end)
-{
-  const UChar* p = *pp;
-
-  if (ONIGENC_IS_MBC_ASCII(p)) {
-    (*pp)++;
-    return ONIGENC_IS_ASCII_CODE_CASE_AMBIG(*p);
-  }
-  else {
-    (*pp) += mbc_enc_len(p);
-
-    if (*p == 0xc3) {
-      int c = *(p + 1);
-      if (c >= 0x80) {
-	if (c <= (UChar )0x9e) { /* upper */
-	  if (c == (UChar )0x97) return FALSE;
-	  return TRUE;
-	}
-	else if (c >= (UChar )0xa0 && c <= (UChar )0xbe) { /* lower */
-	  if (c == (UChar )'\267') return FALSE;
-	  return TRUE;
-	}
-        else if (c == (UChar )0x9f &&
-                 (flag & INTERNAL_ONIGENC_CASE_FOLD_MULTI_CHAR) != 0) {
-	  return TRUE;
-        }
-      }
-    }
-  }
-
-  return FALSE;
-}
-#endif
-
-
-static int
-get_ctype_code_range(OnigCtype ctype, OnigCodePoint *sb_out,
-		     const OnigCodePoint* ranges[])
-{
-  *sb_out = 0x80;
-  return onigenc_unicode_ctype_code_range(ctype, ranges);
-}
-
-
-static UChar*
-left_adjust_char_head(const UChar* start, const UChar* s)
-{
-  const UChar *p;
-
-  if (s <= start) return (UChar* )s;
-  p = s;
-
-  while (!utf8_islead(*p) && p > start) p--;
-  return (UChar* )p;
-}
-
-static int
-get_case_fold_codes_by_str(OnigCaseFoldType flag,
-    const OnigUChar* p, const OnigUChar* end, OnigCaseFoldCodeItem items[])
-{
-  return onigenc_unicode_get_case_fold_codes_by_str(ONIG_ENCODING_UTF8,
-						    flag, p, end, items);
-}
-
-OnigEncodingType OnigEncodingUTF8 = {
-  mbc_enc_len,
-  "UTF-8",     /* name */
-  6,           /* max byte length */
-  1,           /* min byte length */
-  is_mbc_newline,
-  mbc_to_code,
-  code_to_mbclen,
-  code_to_mbc,
-  mbc_case_fold,
-  onigenc_unicode_apply_all_case_fold,
-  get_case_fold_codes_by_str,
-  onigenc_unicode_property_name_to_ctype,
-  onigenc_unicode_is_code_ctype,
-  get_ctype_code_range,
-  left_adjust_char_head,
-  onigenc_always_true_is_allowed_reverse_match,
-  ONIGENC_FLAG_UNICODE,
-};
Index: EcnlProtoTool/trunk/onigmo-6.1.3/src/enc/utf_8.c
===================================================================
--- EcnlProtoTool/trunk/onigmo-6.1.3/src/enc/utf_8.c	(revision 331)
+++ EcnlProtoTool/trunk/onigmo-6.1.3/src/enc/utf_8.c	(revision 331)
@@ -0,0 +1,449 @@
+/**********************************************************************
+  utf_8.c -  Oniguruma (regular expression library)
+**********************************************************************/
+/*-
+ * Copyright (c) 2002-2007  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include "regenc.h"
+#ifdef RUBY
+# include "encindex.h"
+#endif
+
+#ifndef ENCINDEX_UTF_8
+# define ENCINDEX_UTF_8 0
+#endif
+
+#define USE_INVALID_CODE_SCHEME
+
+#ifdef USE_INVALID_CODE_SCHEME
+/* virtual codepoint values for invalid encoding byte 0xfe and 0xff */
+# define INVALID_CODE_FE  0xfffffffe
+# define INVALID_CODE_FF  0xffffffff
+#endif
+#define VALID_CODE_LIMIT  0x0010ffff
+
+#define utf8_islead(c)     ((UChar )((c) & 0xc0) != 0x80)
+
+static const int EncLen_UTF8[] = {
+  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+  3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+  4, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+};
+
+typedef enum {
+  FAILURE = -2,
+  ACCEPT,
+  S0, S1, S2, S3,
+  S4, S5, S6, S7
+} state_t;
+#define A ACCEPT
+#define F FAILURE
+static const signed char trans[][0x100] = {
+  { /* S0   0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f */
+    /* 0 */ A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A,
+    /* 1 */ A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A,
+    /* 2 */ A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A,
+    /* 3 */ A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A,
+    /* 4 */ A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A,
+    /* 5 */ A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A,
+    /* 6 */ A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A,
+    /* 7 */ A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A,
+    /* 8 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* 9 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* a */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* b */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* c */ F, F, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    /* d */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    /* e */ 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 3,
+    /* f */ 5, 6, 6, 6, 7, F, F, F, F, F, F, F, F, F, F, F
+  },
+  { /* S1   0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f */
+    /* 0 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* 1 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* 2 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* 3 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* 4 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* 5 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* 6 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* 7 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* 8 */ A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A,
+    /* 9 */ A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A,
+    /* a */ A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A,
+    /* b */ A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A,
+    /* c */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* d */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* e */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* f */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F
+  },
+  { /* S2   0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f */
+    /* 0 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* 1 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* 2 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* 3 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* 4 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* 5 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* 6 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* 7 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* 8 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* 9 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* a */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    /* b */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    /* c */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* d */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* e */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* f */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F
+  },
+  { /* S3   0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f */
+    /* 0 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* 1 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* 2 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* 3 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* 4 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* 5 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* 6 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* 7 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* 8 */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    /* 9 */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    /* a */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    /* b */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    /* c */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* d */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* e */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* f */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F
+  },
+  { /* S4   0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f */
+    /* 0 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* 1 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* 2 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* 3 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* 4 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* 5 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* 6 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* 7 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* 8 */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    /* 9 */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+    /* a */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* b */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* c */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* d */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* e */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* f */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F
+  },
+  { /* S5   0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f */
+    /* 0 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* 1 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* 2 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* 3 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* 4 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* 5 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* 6 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* 7 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* 8 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* 9 */ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+    /* a */ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+    /* b */ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+    /* c */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* d */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* e */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* f */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F
+  },
+  { /* S6   0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f */
+    /* 0 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* 1 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* 2 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* 3 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* 4 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* 5 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* 6 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* 7 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* 8 */ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+    /* 9 */ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+    /* a */ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+    /* b */ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+    /* c */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* d */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* e */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* f */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F
+  },
+  { /* S7   0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f */
+    /* 0 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* 1 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* 2 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* 3 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* 4 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* 5 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* 6 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* 7 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* 8 */ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+    /* 9 */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* a */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* b */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* c */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* d */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* e */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F,
+    /* f */ F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F
+  },
+};
+#undef A
+#undef F
+
+static int
+mbc_enc_len(const UChar* p, const UChar* e, OnigEncoding enc ARG_UNUSED)
+{
+  int firstbyte = *p++;
+  state_t s;
+  s = trans[0][firstbyte];
+  if (s < 0) return s == ACCEPT ? ONIGENC_CONSTRUCT_MBCLEN_CHARFOUND(1) :
+                                  ONIGENC_CONSTRUCT_MBCLEN_INVALID();
+
+  if (p == e) return ONIGENC_CONSTRUCT_MBCLEN_NEEDMORE(EncLen_UTF8[firstbyte]-1);
+  s = trans[s][*p++];
+  if (s < 0) return s == ACCEPT ? ONIGENC_CONSTRUCT_MBCLEN_CHARFOUND(2) :
+                                  ONIGENC_CONSTRUCT_MBCLEN_INVALID();
+
+  if (p == e) return ONIGENC_CONSTRUCT_MBCLEN_NEEDMORE(EncLen_UTF8[firstbyte]-2);
+  s = trans[s][*p++];
+  if (s < 0) return s == ACCEPT ? ONIGENC_CONSTRUCT_MBCLEN_CHARFOUND(3) :
+                                  ONIGENC_CONSTRUCT_MBCLEN_INVALID();
+
+  if (p == e) return ONIGENC_CONSTRUCT_MBCLEN_NEEDMORE(EncLen_UTF8[firstbyte]-3);
+  s = trans[s][*p++];
+  return s == ACCEPT ? ONIGENC_CONSTRUCT_MBCLEN_CHARFOUND(4) :
+                       ONIGENC_CONSTRUCT_MBCLEN_INVALID();
+}
+
+static int
+is_mbc_newline(const UChar* p, const UChar* end, OnigEncoding enc)
+{
+  if (p < end) {
+    if (*p == 0x0a) return 1;
+
+#ifdef USE_UNICODE_ALL_LINE_TERMINATORS
+    if (*p == 0x0b || *p == 0x0c || *p == 0x0d) return 1;
+    if (p + 1 < end) {
+      if (*(p+1) == 0x85 && *p == 0xc2) /* U+0085 */
+	return 1;
+      if (p + 2 < end) {
+	if ((*(p+2) == 0xa8 || *(p+2) == 0xa9)
+	    && *(p+1) == 0x80 && *p == 0xe2)  /* U+2028, U+2029 */
+	  return 1;
+      }
+    }
+#endif
+  }
+
+  return 0;
+}
+
+static OnigCodePoint
+mbc_to_code(const UChar* p, const UChar* end, OnigEncoding enc)
+{
+  int c, len;
+  OnigCodePoint n;
+
+  len = mbc_enc_len(p, end, enc);
+  c = *p++;
+  if (len > 1) {
+    len--;
+    n = c & ((1 << (6 - len)) - 1);
+    while (len--) {
+      c = *p++;
+      n = (n << 6) | (c & ((1 << 6) - 1));
+    }
+    return n;
+  }
+  else {
+#ifdef USE_INVALID_CODE_SCHEME
+    if (c > 0xfd) {
+      return ((c == 0xfe) ? INVALID_CODE_FE : INVALID_CODE_FF);
+    }
+#endif
+    return (OnigCodePoint )c;
+  }
+}
+
+static int
+code_to_mbclen(OnigCodePoint code, OnigEncoding enc ARG_UNUSED)
+{
+  if      ((code & 0xffffff80) == 0) return 1;
+  else if ((code & 0xfffff800) == 0) return 2;
+  else if ((code & 0xffff0000) == 0) return 3;
+  else if (code <= VALID_CODE_LIMIT) return 4;
+#ifdef USE_INVALID_CODE_SCHEME
+  else if (code == INVALID_CODE_FE) return 1;
+  else if (code == INVALID_CODE_FF) return 1;
+#endif
+  else
+    return ONIGERR_TOO_BIG_WIDE_CHAR_VALUE;
+}
+
+static int
+code_to_mbc(OnigCodePoint code, UChar *buf, OnigEncoding enc ARG_UNUSED)
+{
+#define UTF8_TRAILS(code, shift) (UChar )((((code) >> (shift)) & 0x3f) | 0x80)
+#define UTF8_TRAIL0(code)        (UChar )(((code) & 0x3f) | 0x80)
+
+  if ((code & 0xffffff80) == 0) {
+    *buf = (UChar )code;
+    return 1;
+  }
+  else {
+    UChar *p = buf;
+
+    if ((code & 0xfffff800) == 0) {
+      *p++ = (UChar )(((code>>6)& 0x1f) | 0xc0);
+    }
+    else if ((code & 0xffff0000) == 0) {
+      *p++ = (UChar )(((code>>12) & 0x0f) | 0xe0);
+      *p++ = UTF8_TRAILS(code, 6);
+    }
+    else if (code <= VALID_CODE_LIMIT) {
+      *p++ = (UChar )(((code>>18) & 0x07) | 0xf0);
+      *p++ = UTF8_TRAILS(code, 12);
+      *p++ = UTF8_TRAILS(code,  6);
+    }
+#ifdef USE_INVALID_CODE_SCHEME
+    else if (code == INVALID_CODE_FE) {
+      *p = 0xfe;
+      return 1;
+    }
+    else if (code == INVALID_CODE_FF) {
+      *p = 0xff;
+      return 1;
+    }
+#endif
+    else {
+      return ONIGERR_TOO_BIG_WIDE_CHAR_VALUE;
+    }
+
+    *p++ = UTF8_TRAIL0(code);
+    return (int )(p - buf);
+  }
+}
+
+static int
+mbc_case_fold(OnigCaseFoldType flag, const UChar** pp,
+	      const UChar* end, UChar* fold, OnigEncoding enc)
+{
+  const UChar* p = *pp;
+
+  if (ONIGENC_IS_MBC_ASCII(p)) {
+#ifdef USE_UNICODE_CASE_FOLD_TURKISH_AZERI
+    if ((flag & ONIGENC_CASE_FOLD_TURKISH_AZERI) != 0) {
+      if (*p == 0x49) {
+	*fold++ = 0xc4;
+	*fold   = 0xb1;
+	(*pp)++;
+	return 2;
+      }
+    }
+#endif
+
+    *fold = ONIGENC_ASCII_CODE_TO_LOWER_CASE(*p);
+    (*pp)++;
+    return 1; /* return byte length of converted char to lower */
+  }
+  else {
+    return onigenc_unicode_mbc_case_fold(enc, flag, pp, end, fold);
+  }
+}
+
+
+static int
+get_ctype_code_range(OnigCtype ctype, OnigCodePoint *sb_out,
+		     const OnigCodePoint* ranges[], OnigEncoding enc ARG_UNUSED)
+{
+  *sb_out = 0x80;
+  return onigenc_unicode_ctype_code_range(ctype, ranges);
+}
+
+
+static UChar*
+left_adjust_char_head(const UChar* start, const UChar* s, const UChar* end, OnigEncoding enc ARG_UNUSED)
+{
+  const UChar *p;
+
+  if (s <= start) return (UChar* )s;
+  p = s;
+
+  while (!utf8_islead(*p) && p > start) p--;
+  return (UChar* )p;
+}
+
+static int
+get_case_fold_codes_by_str(OnigCaseFoldType flag,
+    const OnigUChar* p, const OnigUChar* end, OnigCaseFoldCodeItem items[],
+    OnigEncoding enc)
+{
+  return onigenc_unicode_get_case_fold_codes_by_str(enc, flag, p, end, items);
+}
+
+OnigEncodingDefine(utf_8, UTF_8) = {
+  mbc_enc_len,
+  "UTF-8",     /* name */
+  4,           /* max byte length */
+  1,           /* min byte length */
+  is_mbc_newline,
+  mbc_to_code,
+  code_to_mbclen,
+  code_to_mbc,
+  mbc_case_fold,
+  onigenc_unicode_apply_all_case_fold,
+  get_case_fold_codes_by_str,
+  onigenc_unicode_property_name_to_ctype,
+  onigenc_unicode_is_code_ctype,
+  get_ctype_code_range,
+  left_adjust_char_head,
+  onigenc_always_true_is_allowed_reverse_match,
+  onigenc_unicode_case_map,
+  ENCINDEX_UTF_8,
+  ONIGENC_FLAG_UNICODE,
+};
+ENC_ALIAS("CP65001", "UTF-8")
+
+/*
+ * Name: UTF8-MAC
+ * Link: http://developer.apple.com/documentation/MacOSX/Conceptual/BPFileSystem/BPFileSystem.html
+ * Link: http://developer.apple.com/qa/qa2001/qa1235.html
+ * Link: http://developer.apple.com/jp/qa/qa2001/qa1235.html
+ * Link: http://www.gnu.org/software/emacs/NEWS.23.2
+ */
+ENC_REPLICATE("UTF8-MAC", "UTF-8")
+ENC_ALIAS("UTF-8-MAC", "UTF8-MAC")
+ENC_ALIAS("UTF-8-HFS", "UTF8-MAC") /* Emacs 23.2 */
Index: EcnlProtoTool/trunk/onigmo-6.1.3/src/oniggnu.h
===================================================================
--- EcnlProtoTool/trunk/onigmo-5.15.0/src/oniggnu.h	(revision 321)
+++ 	(revision )
@@ -1,85 +1,0 @@
-#ifndef ONIGGNU_H
-#define ONIGGNU_H
-/**********************************************************************
-  oniggnu.h - Oniguruma (regular expression library)
-**********************************************************************/
-/*-
- * Copyright (c) 2002-2005  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#include "oniguruma.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define RE_MBCTYPE_ASCII         0
-#define RE_MBCTYPE_EUC           1
-#define RE_MBCTYPE_SJIS          2
-#define RE_MBCTYPE_UTF8          3
-
-/* GNU regex options */
-#ifndef RE_NREGS
-#define RE_NREGS                ONIG_NREGION
-#endif
-
-#define RE_OPTION_IGNORECASE         ONIG_OPTION_IGNORECASE
-#define RE_OPTION_EXTENDED           ONIG_OPTION_EXTEND
-#define RE_OPTION_MULTILINE          ONIG_OPTION_MULTILINE
-#define RE_OPTION_SINGLELINE         ONIG_OPTION_SINGLELINE
-#define RE_OPTION_LONGEST            ONIG_OPTION_FIND_LONGEST
-#define RE_OPTION_POSIXLINE         (RE_OPTION_MULTILINE|RE_OPTION_SINGLELINE)
-#define RE_OPTION_FIND_NOT_EMPTY     ONIG_OPTION_FIND_NOT_EMPTY
-#define RE_OPTION_NEGATE_SINGLELINE  ONIG_OPTION_NEGATE_SINGLELINE
-#define RE_OPTION_DONT_CAPTURE_GROUP ONIG_OPTION_DONT_CAPTURE_GROUP
-#define RE_OPTION_CAPTURE_GROUP      ONIG_OPTION_CAPTURE_GROUP
-
-
-ONIG_EXTERN
-void re_mbcinit P_((int));
-ONIG_EXTERN
-int re_compile_pattern P_((const char*, int, struct re_pattern_buffer*, char* err_buf));
-ONIG_EXTERN
-int re_recompile_pattern P_((const char*, int, struct re_pattern_buffer*, char* err_buf));
-ONIG_EXTERN
-void re_free_pattern P_((struct re_pattern_buffer*));
-ONIG_EXTERN
-int re_adjust_startpos P_((struct re_pattern_buffer*, const char*, int, int, int));
-ONIG_EXTERN
-int re_search P_((struct re_pattern_buffer*, const char*, int, int, int, struct re_registers*));
-ONIG_EXTERN
-int re_match P_((struct re_pattern_buffer*, const char *, int, int, struct re_registers*));
-ONIG_EXTERN
-void re_set_casetable P_((const char*));
-ONIG_EXTERN
-void re_free_registers P_((struct re_registers*));
-ONIG_EXTERN
-int re_alloc_pattern P_((struct re_pattern_buffer**));  /* added */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* ONIGGNU_H */
Index: EcnlProtoTool/trunk/onigmo-6.1.3/src/onigmo.h
===================================================================
--- EcnlProtoTool/trunk/onigmo-6.1.3/src/onigmo.h	(revision 331)
+++ EcnlProtoTool/trunk/onigmo-6.1.3/src/onigmo.h	(revision 331)
@@ -0,0 +1,935 @@
+#ifndef ONIGMO_H
+#define ONIGMO_H
+/**********************************************************************
+  onigmo.h - Onigmo (Oniguruma-mod) (regular expression library)
+**********************************************************************/
+/*-
+ * Copyright (c) 2002-2009  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2011-2017  K.Takata  <kentkt AT csc DOT jp>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifdef __cplusplus
+extern "C" {
+# if 0
+} /* satisfy cc-mode */
+# endif
+#endif
+
+#define ONIGMO_VERSION_MAJOR   6
+#define ONIGMO_VERSION_MINOR   1
+#define ONIGMO_VERSION_TEENY   3
+
+#ifndef ONIG_EXTERN
+# ifdef RUBY_EXTERN
+#  define ONIG_EXTERN   RUBY_EXTERN
+# else
+#  if defined(_WIN32) && !defined(__GNUC__)
+#   if defined(EXPORT) || defined(RUBY_EXPORT)
+#    define ONIG_EXTERN   extern __declspec(dllexport)
+#   else
+#    define ONIG_EXTERN   extern __declspec(dllimport)
+#   endif
+#  endif
+# endif
+#endif
+
+#ifndef ONIG_EXTERN
+# define ONIG_EXTERN   extern
+#endif
+
+#ifndef RUBY
+# ifndef RUBY_SYMBOL_EXPORT_BEGIN
+#  define RUBY_SYMBOL_EXPORT_BEGIN
+#  define RUBY_SYMBOL_EXPORT_END
+# endif
+#endif
+
+RUBY_SYMBOL_EXPORT_BEGIN
+
+#include <stddef.h>		/* for size_t */
+
+/* PART: character encoding */
+
+#ifndef ONIG_ESCAPE_UCHAR_COLLISION
+# define UChar OnigUChar
+#endif
+
+typedef unsigned char  OnigUChar;
+typedef unsigned int   OnigCodePoint;
+typedef unsigned int   OnigCtype;
+typedef size_t         OnigDistance;
+typedef ptrdiff_t      OnigPosition;
+
+#define ONIG_INFINITE_DISTANCE  ~((OnigDistance )0)
+
+/*
+ * Onig casefold/case mapping flags and related definitions
+ *
+ * Subfields (starting with 0 at LSB):
+ *   0-2: Code point count in casefold.h
+ *   3-12: Index into SpecialCaseMapping array in casefold.h
+ *   13-22: Case folding/mapping flags
+ */
+typedef unsigned int OnigCaseFoldType; /* case fold flag */
+
+ONIG_EXTERN OnigCaseFoldType OnigDefaultCaseFoldFlag;
+
+/* bits for actual code point count; 3 bits is more than enough, currently only 2 used */
+#define OnigCodePointMaskWidth    3
+#define OnigCodePointMask     ((1<<OnigCodePointMaskWidth)-1)
+#define OnigCodePointCount(n) ((n)&OnigCodePointMask)
+#define OnigCaseFoldFlags(n) ((n)&~OnigCodePointMask)
+
+/* #define ONIGENC_CASE_FOLD_HIRAGANA_KATAKANA  (1<<1) */ /* no longer usable with these values! */
+/* #define ONIGENC_CASE_FOLD_KATAKANA_WIDTH     (1<<2) */ /* no longer usable with these values! */
+
+/* bits for index into table with separate titlecase mappings */
+/* 10 bits provide 1024 values */
+#define OnigSpecialIndexShift 3
+#define OnigSpecialIndexWidth 10
+
+#define ONIGENC_CASE_UPCASE                     (1<<13) /* has/needs uppercase mapping */
+#define ONIGENC_CASE_DOWNCASE                   (1<<14) /* has/needs lowercase mapping */
+#define ONIGENC_CASE_TITLECASE                  (1<<15) /* has/needs (special) titlecase mapping */
+#define ONIGENC_CASE_SPECIAL_OFFSET             3       /* offset in bits from ONIGENC_CASE to ONIGENC_CASE_SPECIAL */
+#define ONIGENC_CASE_UP_SPECIAL                 (1<<16) /* has special upcase mapping */
+#define ONIGENC_CASE_DOWN_SPECIAL               (1<<17) /* has special downcase mapping */
+#define ONIGENC_CASE_MODIFIED                   (1<<18) /* data has been modified */
+#define ONIGENC_CASE_FOLD                       (1<<19) /* has/needs case folding */
+
+#define ONIGENC_CASE_FOLD_TURKISH_AZERI         (1<<20) /* needs mapping specific to Turkic languages; better not change original value! */
+
+#define ONIGENC_CASE_FOLD_LITHUANIAN            (1<<21) /* needs Lithuanian-specific mapping */
+#define ONIGENC_CASE_ASCII_ONLY                 (1<<22) /* only modify ASCII range */
+#define ONIGENC_CASE_IS_TITLECASE               (1<<23) /* character itself is already titlecase */
+
+#define INTERNAL_ONIGENC_CASE_FOLD_MULTI_CHAR   (1<<30) /* better not change original value! */
+
+#define ONIGENC_CASE_FOLD_MIN      INTERNAL_ONIGENC_CASE_FOLD_MULTI_CHAR
+#define ONIGENC_CASE_FOLD_DEFAULT  OnigDefaultCaseFoldFlag
+
+
+#define ONIGENC_MAX_COMP_CASE_FOLD_CODE_LEN       3
+#define ONIGENC_GET_CASE_FOLD_CODES_MAX_NUM      13
+/* 13 => Unicode:0x1ffc */
+
+/* code range */
+#define ONIGENC_CODE_RANGE_NUM(range)     ((int )range[0])
+#define ONIGENC_CODE_RANGE_FROM(range,i)  range[((i)*2) + 1]
+#define ONIGENC_CODE_RANGE_TO(range,i)    range[((i)*2) + 2]
+
+typedef struct {
+  int byte_len;  /* argument(original) character(s) byte length */
+  int code_len;  /* number of code */
+  OnigCodePoint code[ONIGENC_MAX_COMP_CASE_FOLD_CODE_LEN];
+} OnigCaseFoldCodeItem;
+
+typedef struct {
+  OnigCodePoint esc;
+  OnigCodePoint anychar;
+  OnigCodePoint anytime;
+  OnigCodePoint zero_or_one_time;
+  OnigCodePoint one_or_more_time;
+  OnigCodePoint anychar_anytime;
+} OnigMetaCharTableType;
+
+typedef int (*OnigApplyAllCaseFoldFunc)(OnigCodePoint from, OnigCodePoint* to, int to_len, void* arg);
+
+typedef struct OnigEncodingTypeST {
+  int    (*precise_mbc_enc_len)(const OnigUChar* p,const OnigUChar* e, const struct OnigEncodingTypeST* enc);
+  const char*   name;
+  int           max_enc_len;
+  int           min_enc_len;
+  int    (*is_mbc_newline)(const OnigUChar* p, const OnigUChar* end, const struct OnigEncodingTypeST* enc);
+  OnigCodePoint (*mbc_to_code)(const OnigUChar* p, const OnigUChar* end, const struct OnigEncodingTypeST* enc);
+  int    (*code_to_mbclen)(OnigCodePoint code, const struct OnigEncodingTypeST* enc);
+  int    (*code_to_mbc)(OnigCodePoint code, OnigUChar *buf, const struct OnigEncodingTypeST* enc);
+  int    (*mbc_case_fold)(OnigCaseFoldType flag, const OnigUChar** pp, const OnigUChar* end, OnigUChar* to, const struct OnigEncodingTypeST* enc);
+  int    (*apply_all_case_fold)(OnigCaseFoldType flag, OnigApplyAllCaseFoldFunc f, void* arg, const struct OnigEncodingTypeST* enc);
+  int    (*get_case_fold_codes_by_str)(OnigCaseFoldType flag, const OnigUChar* p, const OnigUChar* end, OnigCaseFoldCodeItem acs[], const struct OnigEncodingTypeST* enc);
+  int    (*property_name_to_ctype)(const struct OnigEncodingTypeST* enc, const OnigUChar* p, const OnigUChar* end);
+  int    (*is_code_ctype)(OnigCodePoint code, OnigCtype ctype, const struct OnigEncodingTypeST* enc);
+  int    (*get_ctype_code_range)(OnigCtype ctype, OnigCodePoint* sb_out, const OnigCodePoint* ranges[], const struct OnigEncodingTypeST* enc);
+  OnigUChar* (*left_adjust_char_head)(const OnigUChar* start, const OnigUChar* p, const OnigUChar* end, const struct OnigEncodingTypeST* enc);
+  int    (*is_allowed_reverse_match)(const OnigUChar* p, const OnigUChar* end, const struct OnigEncodingTypeST* enc);
+  int    (*case_map)(OnigCaseFoldType* flagP, const OnigUChar** pp, const OnigUChar* end, OnigUChar* to, OnigUChar* to_end, const struct OnigEncodingTypeST* enc);
+  int ruby_encoding_index;
+  unsigned int  flags;
+} OnigEncodingType;
+
+typedef const OnigEncodingType* OnigEncoding;
+
+ONIG_EXTERN const OnigEncodingType OnigEncodingASCII;
+#ifndef RUBY
+ONIG_EXTERN const OnigEncodingType OnigEncodingISO_8859_1;
+ONIG_EXTERN const OnigEncodingType OnigEncodingISO_8859_2;
+ONIG_EXTERN const OnigEncodingType OnigEncodingISO_8859_3;
+ONIG_EXTERN const OnigEncodingType OnigEncodingISO_8859_4;
+ONIG_EXTERN const OnigEncodingType OnigEncodingISO_8859_5;
+ONIG_EXTERN const OnigEncodingType OnigEncodingISO_8859_6;
+ONIG_EXTERN const OnigEncodingType OnigEncodingISO_8859_7;
+ONIG_EXTERN const OnigEncodingType OnigEncodingISO_8859_8;
+ONIG_EXTERN const OnigEncodingType OnigEncodingISO_8859_9;
+ONIG_EXTERN const OnigEncodingType OnigEncodingISO_8859_10;
+ONIG_EXTERN const OnigEncodingType OnigEncodingISO_8859_11;
+ONIG_EXTERN const OnigEncodingType OnigEncodingISO_8859_13;
+ONIG_EXTERN const OnigEncodingType OnigEncodingISO_8859_14;
+ONIG_EXTERN const OnigEncodingType OnigEncodingISO_8859_15;
+ONIG_EXTERN const OnigEncodingType OnigEncodingISO_8859_16;
+ONIG_EXTERN const OnigEncodingType OnigEncodingUTF_8;
+ONIG_EXTERN const OnigEncodingType OnigEncodingUTF_16BE;
+ONIG_EXTERN const OnigEncodingType OnigEncodingUTF_16LE;
+ONIG_EXTERN const OnigEncodingType OnigEncodingUTF_32BE;
+ONIG_EXTERN const OnigEncodingType OnigEncodingUTF_32LE;
+ONIG_EXTERN const OnigEncodingType OnigEncodingEUC_JP;
+ONIG_EXTERN const OnigEncodingType OnigEncodingEUC_TW;
+ONIG_EXTERN const OnigEncodingType OnigEncodingEUC_KR;
+ONIG_EXTERN const OnigEncodingType OnigEncodingEUC_CN;
+ONIG_EXTERN const OnigEncodingType OnigEncodingShift_JIS;
+ONIG_EXTERN const OnigEncodingType OnigEncodingWindows_31J;
+/* ONIG_EXTERN const OnigEncodingType OnigEncodingKOI8; */
+ONIG_EXTERN const OnigEncodingType OnigEncodingKOI8_R;
+ONIG_EXTERN const OnigEncodingType OnigEncodingKOI8_U;
+ONIG_EXTERN const OnigEncodingType OnigEncodingWindows_1250;
+ONIG_EXTERN const OnigEncodingType OnigEncodingWindows_1251;
+ONIG_EXTERN const OnigEncodingType OnigEncodingWindows_1252;
+ONIG_EXTERN const OnigEncodingType OnigEncodingWindows_1253;
+ONIG_EXTERN const OnigEncodingType OnigEncodingWindows_1254;
+ONIG_EXTERN const OnigEncodingType OnigEncodingWindows_1257;
+ONIG_EXTERN const OnigEncodingType OnigEncodingBIG5;
+ONIG_EXTERN const OnigEncodingType OnigEncodingGB18030;
+#endif /* RUBY */
+
+#define ONIG_ENCODING_ASCII        (&OnigEncodingASCII)
+#ifndef RUBY
+# define ONIG_ENCODING_ISO_8859_1   (&OnigEncodingISO_8859_1)
+# define ONIG_ENCODING_ISO_8859_2   (&OnigEncodingISO_8859_2)
+# define ONIG_ENCODING_ISO_8859_3   (&OnigEncodingISO_8859_3)
+# define ONIG_ENCODING_ISO_8859_4   (&OnigEncodingISO_8859_4)
+# define ONIG_ENCODING_ISO_8859_5   (&OnigEncodingISO_8859_5)
+# define ONIG_ENCODING_ISO_8859_6   (&OnigEncodingISO_8859_6)
+# define ONIG_ENCODING_ISO_8859_7   (&OnigEncodingISO_8859_7)
+# define ONIG_ENCODING_ISO_8859_8   (&OnigEncodingISO_8859_8)
+# define ONIG_ENCODING_ISO_8859_9   (&OnigEncodingISO_8859_9)
+# define ONIG_ENCODING_ISO_8859_10  (&OnigEncodingISO_8859_10)
+# define ONIG_ENCODING_ISO_8859_11  (&OnigEncodingISO_8859_11)
+# define ONIG_ENCODING_ISO_8859_13  (&OnigEncodingISO_8859_13)
+# define ONIG_ENCODING_ISO_8859_14  (&OnigEncodingISO_8859_14)
+# define ONIG_ENCODING_ISO_8859_15  (&OnigEncodingISO_8859_15)
+# define ONIG_ENCODING_ISO_8859_16  (&OnigEncodingISO_8859_16)
+# define ONIG_ENCODING_UTF_8        (&OnigEncodingUTF_8)
+# define ONIG_ENCODING_UTF_16BE     (&OnigEncodingUTF_16BE)
+# define ONIG_ENCODING_UTF_16LE     (&OnigEncodingUTF_16LE)
+# define ONIG_ENCODING_UTF_32BE     (&OnigEncodingUTF_32BE)
+# define ONIG_ENCODING_UTF_32LE     (&OnigEncodingUTF_32LE)
+# define ONIG_ENCODING_EUC_JP       (&OnigEncodingEUC_JP)
+# define ONIG_ENCODING_EUC_TW       (&OnigEncodingEUC_TW)
+# define ONIG_ENCODING_EUC_KR       (&OnigEncodingEUC_KR)
+# define ONIG_ENCODING_EUC_CN       (&OnigEncodingEUC_CN)
+# define ONIG_ENCODING_SHIFT_JIS    (&OnigEncodingShift_JIS)
+# define ONIG_ENCODING_WINDOWS_31J  (&OnigEncodingWindows_31J)
+/* # define ONIG_ENCODING_KOI8         (&OnigEncodingKOI8) */
+# define ONIG_ENCODING_KOI8_R       (&OnigEncodingKOI8_R)
+# define ONIG_ENCODING_KOI8_U       (&OnigEncodingKOI8_U)
+# define ONIG_ENCODING_WINDOWS_1250 (&OnigEncodingWindows_1250)
+# define ONIG_ENCODING_WINDOWS_1251 (&OnigEncodingWindows_1251)
+# define ONIG_ENCODING_WINDOWS_1252 (&OnigEncodingWindows_1252)
+# define ONIG_ENCODING_WINDOWS_1253 (&OnigEncodingWindows_1253)
+# define ONIG_ENCODING_WINDOWS_1254 (&OnigEncodingWindows_1254)
+# define ONIG_ENCODING_WINDOWS_1257 (&OnigEncodingWindows_1257)
+# define ONIG_ENCODING_BIG5         (&OnigEncodingBIG5)
+# define ONIG_ENCODING_GB18030      (&OnigEncodingGB18030)
+
+/* old names */
+# define ONIG_ENCODING_SJIS         ONIG_ENCODING_SHIFT_JIS
+# define ONIG_ENCODING_CP932        ONIG_ENCODING_WINDOWS_31J
+# define ONIG_ENCODING_CP1250       ONIG_ENCODING_WINDOWS_1250
+# define ONIG_ENCODING_CP1251       ONIG_ENCODING_WINDOWS_1251
+# define ONIG_ENCODING_CP1252       ONIG_ENCODING_WINDOWS_1252
+# define ONIG_ENCODING_CP1253       ONIG_ENCODING_WINDOWS_1253
+# define ONIG_ENCODING_CP1254       ONIG_ENCODING_WINDOWS_1254
+# define ONIG_ENCODING_CP1257       ONIG_ENCODING_WINDOWS_1257
+# define ONIG_ENCODING_UTF8         ONIG_ENCODING_UTF_8
+# define ONIG_ENCODING_UTF16_BE     ONIG_ENCODING_UTF_16BE
+# define ONIG_ENCODING_UTF16_LE     ONIG_ENCODING_UTF_16LE
+# define ONIG_ENCODING_UTF32_BE     ONIG_ENCODING_UTF_32BE
+# define ONIG_ENCODING_UTF32_LE     ONIG_ENCODING_UTF_32LE
+#endif /* RUBY */
+
+#define ONIG_ENCODING_UNDEF    ((OnigEncoding )0)
+
+/* this declaration needs to be here because it is used in string.c in Ruby */
+ONIG_EXTERN
+int onigenc_ascii_only_case_map(OnigCaseFoldType* flagP, const OnigUChar** pp, const OnigUChar* end, OnigUChar* to, OnigUChar* to_end, const struct OnigEncodingTypeST* enc);
+
+
+/* work size */
+#define ONIGENC_CODE_TO_MBC_MAXLEN       7
+#define ONIGENC_MBC_CASE_FOLD_MAXLEN    18
+/* 18: 6(max-byte) * 3(case-fold chars) */
+
+/* character types */
+#define ONIGENC_CTYPE_NEWLINE   0
+#define ONIGENC_CTYPE_ALPHA     1
+#define ONIGENC_CTYPE_BLANK     2
+#define ONIGENC_CTYPE_CNTRL     3
+#define ONIGENC_CTYPE_DIGIT     4
+#define ONIGENC_CTYPE_GRAPH     5
+#define ONIGENC_CTYPE_LOWER     6
+#define ONIGENC_CTYPE_PRINT     7
+#define ONIGENC_CTYPE_PUNCT     8
+#define ONIGENC_CTYPE_SPACE     9
+#define ONIGENC_CTYPE_UPPER    10
+#define ONIGENC_CTYPE_XDIGIT   11
+#define ONIGENC_CTYPE_WORD     12
+#define ONIGENC_CTYPE_ALNUM    13  /* alpha || digit */
+#define ONIGENC_CTYPE_ASCII    14
+#define ONIGENC_MAX_STD_CTYPE  ONIGENC_CTYPE_ASCII
+
+/* flags */
+#define ONIGENC_FLAG_NONE       0U
+#define ONIGENC_FLAG_UNICODE    1U
+
+#define onig_enc_len(enc,p,e)          ONIGENC_MBC_ENC_LEN(enc, p, e)
+
+#define ONIGENC_IS_UNDEF(enc)          ((enc) == ONIG_ENCODING_UNDEF)
+#define ONIGENC_IS_SINGLEBYTE(enc)     (ONIGENC_MBC_MAXLEN(enc) == 1)
+#define ONIGENC_IS_MBC_HEAD(enc,p,e)   (ONIGENC_MBC_ENC_LEN(enc,p,e) != 1)
+#define ONIGENC_IS_MBC_ASCII(p)           (*(p)   < 128)
+#define ONIGENC_IS_CODE_ASCII(code)       ((code) < 128)
+#define ONIGENC_IS_MBC_WORD(enc,s,end) \
+   ONIGENC_IS_CODE_WORD(enc,ONIGENC_MBC_TO_CODE(enc,s,end))
+#define ONIGENC_IS_MBC_ASCII_WORD(enc,s,end) \
+   onigenc_ascii_is_code_ctype( \
+	ONIGENC_MBC_TO_CODE(enc,s,end),ONIGENC_CTYPE_WORD,enc)
+#define ONIGENC_IS_UNICODE(enc)        ((enc)->flags & ONIGENC_FLAG_UNICODE)
+
+
+#define ONIGENC_NAME(enc)                      ((enc)->name)
+
+#define ONIGENC_MBC_CASE_FOLD(enc,flag,pp,end,buf) \
+  (enc)->mbc_case_fold(flag,(const OnigUChar** )pp,end,buf,enc)
+#define ONIGENC_IS_ALLOWED_REVERSE_MATCH(enc,s,end) \
+        (enc)->is_allowed_reverse_match(s,end,enc)
+#define ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc,start,s,end) \
+        (enc)->left_adjust_char_head(start, s, end, enc)
+#define ONIGENC_APPLY_ALL_CASE_FOLD(enc,case_fold_flag,f,arg) \
+        (enc)->apply_all_case_fold(case_fold_flag,f,arg,enc)
+#define ONIGENC_GET_CASE_FOLD_CODES_BY_STR(enc,case_fold_flag,p,end,acs) \
+       (enc)->get_case_fold_codes_by_str(case_fold_flag,p,end,acs,enc)
+#define ONIGENC_STEP_BACK(enc,start,s,end,n) \
+        onigenc_step_back((enc),(start),(s),(end),(n))
+
+#define ONIGENC_CONSTRUCT_MBCLEN_CHARFOUND(n)   (n)
+#define ONIGENC_MBCLEN_CHARFOUND_P(r)           (0 < (r))
+#define ONIGENC_MBCLEN_CHARFOUND_LEN(r)         (r)
+
+#define ONIGENC_CONSTRUCT_MBCLEN_INVALID()      (-1)
+#define ONIGENC_MBCLEN_INVALID_P(r)             ((r) == -1)
+
+#define ONIGENC_CONSTRUCT_MBCLEN_NEEDMORE(n)    (-1-(n))
+#define ONIGENC_MBCLEN_NEEDMORE_P(r)            ((r) < -1)
+#define ONIGENC_MBCLEN_NEEDMORE_LEN(r)          (-1-(r))
+
+#define ONIGENC_PRECISE_MBC_ENC_LEN(enc,p,e)   (enc)->precise_mbc_enc_len(p,e,enc)
+
+ONIG_EXTERN
+int onigenc_mbclen_approximate(const OnigUChar* p,const OnigUChar* e, const struct OnigEncodingTypeST* enc);
+
+#define ONIGENC_MBC_ENC_LEN(enc,p,e)           onigenc_mbclen_approximate(p,e,enc)
+#define ONIGENC_MBC_MAXLEN(enc)               ((enc)->max_enc_len)
+#define ONIGENC_MBC_MAXLEN_DIST(enc)           ONIGENC_MBC_MAXLEN(enc)
+#define ONIGENC_MBC_MINLEN(enc)               ((enc)->min_enc_len)
+#define ONIGENC_IS_MBC_NEWLINE(enc,p,end)      (enc)->is_mbc_newline((p),(end),enc)
+#define ONIGENC_MBC_TO_CODE(enc,p,end)         (enc)->mbc_to_code((p),(end),enc)
+#define ONIGENC_CODE_TO_MBCLEN(enc,code)       (enc)->code_to_mbclen(code,enc)
+#define ONIGENC_CODE_TO_MBC(enc,code,buf)      (enc)->code_to_mbc(code,buf,enc)
+#define ONIGENC_PROPERTY_NAME_TO_CTYPE(enc,p,end) \
+  (enc)->property_name_to_ctype(enc,p,end)
+
+#define ONIGENC_IS_CODE_CTYPE(enc,code,ctype)  (enc)->is_code_ctype(code,ctype,enc)
+
+#define ONIGENC_IS_CODE_NEWLINE(enc,code) \
+        ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_NEWLINE)
+#define ONIGENC_IS_CODE_GRAPH(enc,code) \
+        ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_GRAPH)
+#define ONIGENC_IS_CODE_PRINT(enc,code) \
+        ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_PRINT)
+#define ONIGENC_IS_CODE_ALNUM(enc,code) \
+        ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_ALNUM)
+#define ONIGENC_IS_CODE_ALPHA(enc,code) \
+        ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_ALPHA)
+#define ONIGENC_IS_CODE_LOWER(enc,code) \
+        ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_LOWER)
+#define ONIGENC_IS_CODE_UPPER(enc,code) \
+        ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_UPPER)
+#define ONIGENC_IS_CODE_CNTRL(enc,code) \
+        ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_CNTRL)
+#define ONIGENC_IS_CODE_PUNCT(enc,code) \
+        ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_PUNCT)
+#define ONIGENC_IS_CODE_SPACE(enc,code) \
+        ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_SPACE)
+#define ONIGENC_IS_CODE_BLANK(enc,code) \
+        ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_BLANK)
+#define ONIGENC_IS_CODE_DIGIT(enc,code) \
+        ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_DIGIT)
+#define ONIGENC_IS_CODE_XDIGIT(enc,code) \
+        ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_XDIGIT)
+#define ONIGENC_IS_CODE_WORD(enc,code) \
+        ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_WORD)
+
+#define ONIGENC_GET_CTYPE_CODE_RANGE(enc,ctype,sbout,ranges) \
+        (enc)->get_ctype_code_range(ctype,sbout,ranges,enc)
+
+ONIG_EXTERN
+OnigUChar* onigenc_step_back(OnigEncoding enc, const OnigUChar* start, const OnigUChar* s, const OnigUChar* end, int n);
+
+
+/* encoding API */
+ONIG_EXTERN
+int onigenc_init(void);
+ONIG_EXTERN
+int onigenc_set_default_encoding(OnigEncoding enc);
+ONIG_EXTERN
+OnigEncoding onigenc_get_default_encoding(void);
+ONIG_EXTERN
+OnigUChar* onigenc_get_right_adjust_char_head_with_prev(OnigEncoding enc, const OnigUChar* start, const OnigUChar* s, const OnigUChar* end, const OnigUChar** prev);
+ONIG_EXTERN
+OnigUChar* onigenc_get_prev_char_head(OnigEncoding enc, const OnigUChar* start, const OnigUChar* s, const OnigUChar* end);
+ONIG_EXTERN
+OnigUChar* onigenc_get_left_adjust_char_head(OnigEncoding enc, const OnigUChar* start, const OnigUChar* s, const OnigUChar* end);
+ONIG_EXTERN
+OnigUChar* onigenc_get_right_adjust_char_head(OnigEncoding enc, const OnigUChar* start, const OnigUChar* s, const OnigUChar* end);
+ONIG_EXTERN
+int onigenc_strlen(OnigEncoding enc, const OnigUChar* p, const OnigUChar* end);
+ONIG_EXTERN
+int onigenc_strlen_null(OnigEncoding enc, const OnigUChar* p);
+ONIG_EXTERN
+int onigenc_str_bytelen_null(OnigEncoding enc, const OnigUChar* p);
+
+
+
+/* PART: regular expression */
+
+/* config parameters */
+#define ONIG_NREGION                          10
+#define ONIG_MAX_CAPTURE_GROUP_NUM         32767
+#define ONIG_MAX_BACKREF_NUM                1000
+#define ONIG_MAX_REPEAT_NUM               100000
+#define ONIG_MAX_MULTI_BYTE_RANGES_NUM     10000
+/* constants */
+#define ONIG_MAX_ERROR_MESSAGE_LEN            90
+
+typedef unsigned int        OnigOptionType;
+
+#define ONIG_OPTION_DEFAULT            ONIG_OPTION_NONE
+
+/* options */
+#define ONIG_OPTION_NONE                 0U
+#define ONIG_OPTION_IGNORECASE           1U
+#define ONIG_OPTION_EXTEND               (ONIG_OPTION_IGNORECASE         << 1)
+#define ONIG_OPTION_MULTILINE            (ONIG_OPTION_EXTEND             << 1)
+#define ONIG_OPTION_DOTALL                ONIG_OPTION_MULTILINE
+#define ONIG_OPTION_SINGLELINE           (ONIG_OPTION_MULTILINE          << 1)
+#define ONIG_OPTION_FIND_LONGEST         (ONIG_OPTION_SINGLELINE         << 1)
+#define ONIG_OPTION_FIND_NOT_EMPTY       (ONIG_OPTION_FIND_LONGEST       << 1)
+#define ONIG_OPTION_NEGATE_SINGLELINE    (ONIG_OPTION_FIND_NOT_EMPTY     << 1)
+#define ONIG_OPTION_DONT_CAPTURE_GROUP   (ONIG_OPTION_NEGATE_SINGLELINE  << 1)
+#define ONIG_OPTION_CAPTURE_GROUP        (ONIG_OPTION_DONT_CAPTURE_GROUP << 1)
+/* options (search time) */
+#define ONIG_OPTION_NOTBOL               (ONIG_OPTION_CAPTURE_GROUP << 1)
+#define ONIG_OPTION_NOTEOL               (ONIG_OPTION_NOTBOL << 1)
+#define ONIG_OPTION_NOTBOS               (ONIG_OPTION_NOTEOL << 1)
+#define ONIG_OPTION_NOTEOS               (ONIG_OPTION_NOTBOS << 1)
+/* options (ctype range) */
+#define ONIG_OPTION_ASCII_RANGE          (ONIG_OPTION_NOTEOS << 1)
+#define ONIG_OPTION_POSIX_BRACKET_ALL_RANGE (ONIG_OPTION_ASCII_RANGE << 1)
+#define ONIG_OPTION_WORD_BOUND_ALL_RANGE    (ONIG_OPTION_POSIX_BRACKET_ALL_RANGE << 1)
+/* options (newline) */
+#define ONIG_OPTION_NEWLINE_CRLF         (ONIG_OPTION_WORD_BOUND_ALL_RANGE << 1)
+#define ONIG_OPTION_MAXBIT               ONIG_OPTION_NEWLINE_CRLF  /* limit */
+
+#define ONIG_OPTION_ON(options,regopt)      ((options) |= (regopt))
+#define ONIG_OPTION_OFF(options,regopt)     ((options) &= ~(regopt))
+#define ONIG_IS_OPTION_ON(options,option)   ((options) & (option))
+
+/* syntax */
+typedef struct {
+  unsigned int   op;
+  unsigned int   op2;
+  unsigned int   behavior;
+  OnigOptionType options;   /* default option */
+  OnigMetaCharTableType meta_char_table;
+} OnigSyntaxType;
+
+ONIG_EXTERN const OnigSyntaxType OnigSyntaxASIS;
+ONIG_EXTERN const OnigSyntaxType OnigSyntaxPosixBasic;
+ONIG_EXTERN const OnigSyntaxType OnigSyntaxPosixExtended;
+ONIG_EXTERN const OnigSyntaxType OnigSyntaxEmacs;
+ONIG_EXTERN const OnigSyntaxType OnigSyntaxGrep;
+ONIG_EXTERN const OnigSyntaxType OnigSyntaxGnuRegex;
+ONIG_EXTERN const OnigSyntaxType OnigSyntaxJava;
+ONIG_EXTERN const OnigSyntaxType OnigSyntaxPerl58;
+ONIG_EXTERN const OnigSyntaxType OnigSyntaxPerl58_NG;
+ONIG_EXTERN const OnigSyntaxType OnigSyntaxPerl;
+ONIG_EXTERN const OnigSyntaxType OnigSyntaxRuby;
+ONIG_EXTERN const OnigSyntaxType OnigSyntaxPython;
+
+/* predefined syntaxes (see regsyntax.c) */
+#define ONIG_SYNTAX_ASIS               (&OnigSyntaxASIS)
+#define ONIG_SYNTAX_POSIX_BASIC        (&OnigSyntaxPosixBasic)
+#define ONIG_SYNTAX_POSIX_EXTENDED     (&OnigSyntaxPosixExtended)
+#define ONIG_SYNTAX_EMACS              (&OnigSyntaxEmacs)
+#define ONIG_SYNTAX_GREP               (&OnigSyntaxGrep)
+#define ONIG_SYNTAX_GNU_REGEX          (&OnigSyntaxGnuRegex)
+#define ONIG_SYNTAX_JAVA               (&OnigSyntaxJava)
+#define ONIG_SYNTAX_PERL58             (&OnigSyntaxPerl58)
+#define ONIG_SYNTAX_PERL58_NG          (&OnigSyntaxPerl58_NG)
+#define ONIG_SYNTAX_PERL               (&OnigSyntaxPerl)
+#define ONIG_SYNTAX_RUBY               (&OnigSyntaxRuby)
+#define ONIG_SYNTAX_PYTHON             (&OnigSyntaxPython)
+
+/* default syntax */
+ONIG_EXTERN const OnigSyntaxType*   OnigDefaultSyntax;
+#define ONIG_SYNTAX_DEFAULT   OnigDefaultSyntax
+
+/* syntax (operators) */
+#define ONIG_SYN_OP_VARIABLE_META_CHARACTERS    (1U<<0)
+#define ONIG_SYN_OP_DOT_ANYCHAR                 (1U<<1)   /* . */
+#define ONIG_SYN_OP_ASTERISK_ZERO_INF           (1U<<2)   /* * */
+#define ONIG_SYN_OP_ESC_ASTERISK_ZERO_INF       (1U<<3)
+#define ONIG_SYN_OP_PLUS_ONE_INF                (1U<<4)   /* + */
+#define ONIG_SYN_OP_ESC_PLUS_ONE_INF            (1U<<5)
+#define ONIG_SYN_OP_QMARK_ZERO_ONE              (1U<<6)   /* ? */
+#define ONIG_SYN_OP_ESC_QMARK_ZERO_ONE          (1U<<7)
+#define ONIG_SYN_OP_BRACE_INTERVAL              (1U<<8)   /* {lower,upper} */
+#define ONIG_SYN_OP_ESC_BRACE_INTERVAL          (1U<<9)   /* \{lower,upper\} */
+#define ONIG_SYN_OP_VBAR_ALT                    (1U<<10)   /* | */
+#define ONIG_SYN_OP_ESC_VBAR_ALT                (1U<<11)  /* \| */
+#define ONIG_SYN_OP_LPAREN_SUBEXP               (1U<<12)  /* (...)   */
+#define ONIG_SYN_OP_ESC_LPAREN_SUBEXP           (1U<<13)  /* \(...\) */
+#define ONIG_SYN_OP_ESC_AZ_BUF_ANCHOR           (1U<<14)  /* \A, \Z, \z */
+#define ONIG_SYN_OP_ESC_CAPITAL_G_BEGIN_ANCHOR  (1U<<15)  /* \G     */
+#define ONIG_SYN_OP_DECIMAL_BACKREF             (1U<<16)  /* \num   */
+#define ONIG_SYN_OP_BRACKET_CC                  (1U<<17)  /* [...]  */
+#define ONIG_SYN_OP_ESC_W_WORD                  (1U<<18)  /* \w, \W */
+#define ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END     (1U<<19)  /* \<. \> */
+#define ONIG_SYN_OP_ESC_B_WORD_BOUND            (1U<<20)  /* \b, \B */
+#define ONIG_SYN_OP_ESC_S_WHITE_SPACE           (1U<<21)  /* \s, \S */
+#define ONIG_SYN_OP_ESC_D_DIGIT                 (1U<<22)  /* \d, \D */
+#define ONIG_SYN_OP_LINE_ANCHOR                 (1U<<23)  /* ^, $   */
+#define ONIG_SYN_OP_POSIX_BRACKET               (1U<<24)  /* [:xxxx:] */
+#define ONIG_SYN_OP_QMARK_NON_GREEDY            (1U<<25)  /* ??,*?,+?,{n,m}? */
+#define ONIG_SYN_OP_ESC_CONTROL_CHARS           (1U<<26)  /* \n,\r,\t,\a ... */
+#define ONIG_SYN_OP_ESC_C_CONTROL               (1U<<27)  /* \cx  */
+#define ONIG_SYN_OP_ESC_OCTAL3                  (1U<<28)  /* \OOO */
+#define ONIG_SYN_OP_ESC_X_HEX2                  (1U<<29)  /* \xHH */
+#define ONIG_SYN_OP_ESC_X_BRACE_HEX8            (1U<<30)  /* \x{7HHHHHHH} */
+#define ONIG_SYN_OP_ESC_O_BRACE_OCTAL           (1U<<31)  /* \o{OOO} */
+
+#define ONIG_SYN_OP2_ESC_CAPITAL_Q_QUOTE        (1U<<0)  /* \Q...\E */
+#define ONIG_SYN_OP2_QMARK_GROUP_EFFECT         (1U<<1)  /* (?...) */
+#define ONIG_SYN_OP2_OPTION_PERL                (1U<<2)  /* (?imsxadlu), (?-imsx), (?^imsxalu) */
+#define ONIG_SYN_OP2_OPTION_RUBY                (1U<<3)  /* (?imxadu), (?-imx)  */
+#define ONIG_SYN_OP2_PLUS_POSSESSIVE_REPEAT     (1U<<4)  /* ?+,*+,++ */
+#define ONIG_SYN_OP2_PLUS_POSSESSIVE_INTERVAL   (1U<<5)  /* {n,m}+   */
+#define ONIG_SYN_OP2_CCLASS_SET_OP              (1U<<6)  /* [...&&..[..]..] */
+#define ONIG_SYN_OP2_QMARK_LT_NAMED_GROUP       (1U<<7)  /* (?<name>...) */
+#define ONIG_SYN_OP2_ESC_K_NAMED_BACKREF        (1U<<8)  /* \k<name> */
+#define ONIG_SYN_OP2_ESC_G_SUBEXP_CALL          (1U<<9)  /* \g<name>, \g<n> */
+#define ONIG_SYN_OP2_ATMARK_CAPTURE_HISTORY     (1U<<10) /* (?@..),(?@<x>..) */
+#define ONIG_SYN_OP2_ESC_CAPITAL_C_BAR_CONTROL  (1U<<11) /* \C-x */
+#define ONIG_SYN_OP2_ESC_CAPITAL_M_BAR_META     (1U<<12) /* \M-x */
+#define ONIG_SYN_OP2_ESC_V_VTAB                 (1U<<13) /* \v as VTAB */
+#define ONIG_SYN_OP2_ESC_U_HEX4                 (1U<<14) /* \uHHHH */
+#define ONIG_SYN_OP2_ESC_GNU_BUF_ANCHOR         (1U<<15) /* \`, \' */
+#define ONIG_SYN_OP2_ESC_P_BRACE_CHAR_PROPERTY  (1U<<16) /* \p{...}, \P{...} */
+#define ONIG_SYN_OP2_ESC_P_BRACE_CIRCUMFLEX_NOT (1U<<17) /* \p{^..}, \P{^..} */
+/* #define ONIG_SYN_OP2_CHAR_PROPERTY_PREFIX_IS (1U<<18) */
+#define ONIG_SYN_OP2_ESC_H_XDIGIT               (1U<<19) /* \h, \H */
+#define ONIG_SYN_OP2_INEFFECTIVE_ESCAPE         (1U<<20) /* \ */
+#define ONIG_SYN_OP2_ESC_CAPITAL_R_LINEBREAK    (1U<<21) /* \R as (?>\x0D\x0A|[\x0A-\x0D\x{85}\x{2028}\x{2029}]) */
+#define ONIG_SYN_OP2_ESC_CAPITAL_X_EXTENDED_GRAPHEME_CLUSTER (1U<<22) /* \X */
+#define ONIG_SYN_OP2_ESC_V_VERTICAL_WHITESPACE   (1U<<23) /* \v, \V -- Perl */ /* NOTIMPL */
+#define ONIG_SYN_OP2_ESC_H_HORIZONTAL_WHITESPACE (1U<<24) /* \h, \H -- Perl */ /* NOTIMPL */
+#define ONIG_SYN_OP2_ESC_CAPITAL_K_KEEP         (1U<<25) /* \K */
+#define ONIG_SYN_OP2_ESC_G_BRACE_BACKREF        (1U<<26) /* \g{name}, \g{n} */
+#define ONIG_SYN_OP2_QMARK_SUBEXP_CALL          (1U<<27) /* (?&name), (?n), (?R), (?0) */
+#define ONIG_SYN_OP2_QMARK_VBAR_BRANCH_RESET    (1U<<28) /* (?|...) */         /* NOTIMPL */
+#define ONIG_SYN_OP2_QMARK_LPAREN_CONDITION     (1U<<29) /* (?(cond)yes...|no...) */
+#define ONIG_SYN_OP2_QMARK_CAPITAL_P_NAMED_GROUP (1U<<30) /* (?P<name>...), (?P=name), (?P>name) -- Python/PCRE */
+#define ONIG_SYN_OP2_QMARK_TILDE_ABSENT         (1U<<31) /* (?~...) */
+/* #define ONIG_SYN_OP2_OPTION_JAVA                (1U<<xx) */ /* (?idmsux), (?-idmsux) */ /* NOTIMPL */
+
+/* syntax (behavior) */
+#define ONIG_SYN_CONTEXT_INDEP_ANCHORS           (1U<<31) /* not implemented */
+#define ONIG_SYN_CONTEXT_INDEP_REPEAT_OPS        (1U<<0)  /* ?, *, +, {n,m} */
+#define ONIG_SYN_CONTEXT_INVALID_REPEAT_OPS      (1U<<1)  /* error or ignore */
+#define ONIG_SYN_ALLOW_UNMATCHED_CLOSE_SUBEXP    (1U<<2)  /* ...)... */
+#define ONIG_SYN_ALLOW_INVALID_INTERVAL          (1U<<3)  /* {??? */
+#define ONIG_SYN_ALLOW_INTERVAL_LOW_ABBREV       (1U<<4)  /* {,n} => {0,n} */
+#define ONIG_SYN_STRICT_CHECK_BACKREF            (1U<<5)  /* /(\1)/,/\1()/ ..*/
+#define ONIG_SYN_DIFFERENT_LEN_ALT_LOOK_BEHIND   (1U<<6)  /* (?<=a|bc) */
+#define ONIG_SYN_CAPTURE_ONLY_NAMED_GROUP        (1U<<7)  /* see doc/RE */
+#define ONIG_SYN_ALLOW_MULTIPLEX_DEFINITION_NAME (1U<<8)  /* (?<x>)(?<x>) */
+#define ONIG_SYN_FIXED_INTERVAL_IS_GREEDY_ONLY   (1U<<9)  /* a{n}?=(?:a{n})? */
+#define ONIG_SYN_ALLOW_MULTIPLEX_DEFINITION_NAME_CALL (1U<<10)  /* (?<x>)(?<x>)(?&x) */
+#define ONIG_SYN_USE_LEFT_MOST_NAMED_GROUP       (1U<<11) /* (?<x>)(?<x>)\k<x> */
+
+/* syntax (behavior) in char class [...] */
+#define ONIG_SYN_NOT_NEWLINE_IN_NEGATIVE_CC      (1U<<20) /* [^...] */
+#define ONIG_SYN_BACKSLASH_ESCAPE_IN_CC          (1U<<21) /* [..\w..] etc.. */
+#define ONIG_SYN_ALLOW_EMPTY_RANGE_IN_CC         (1U<<22)
+#define ONIG_SYN_ALLOW_DOUBLE_RANGE_OP_IN_CC     (1U<<23) /* [0-9-a]=[0-9\-a] */
+/* syntax (behavior) warning */
+#define ONIG_SYN_WARN_CC_OP_NOT_ESCAPED          (1U<<24) /* [,-,] */
+#define ONIG_SYN_WARN_REDUNDANT_NESTED_REPEAT    (1U<<25) /* (?:a*)+ */
+#define ONIG_SYN_WARN_CC_DUP                     (1U<<26) /* [aa] */
+
+/* meta character specifiers (onig_set_meta_char()) */
+#define ONIG_META_CHAR_ESCAPE               0
+#define ONIG_META_CHAR_ANYCHAR              1
+#define ONIG_META_CHAR_ANYTIME              2
+#define ONIG_META_CHAR_ZERO_OR_ONE_TIME     3
+#define ONIG_META_CHAR_ONE_OR_MORE_TIME     4
+#define ONIG_META_CHAR_ANYCHAR_ANYTIME      5
+
+#define ONIG_INEFFECTIVE_META_CHAR          0
+
+/* error codes */
+#define ONIG_IS_PATTERN_ERROR(ecode)   ((ecode) <= -100 && (ecode) > -1000)
+/* normal return */
+#define ONIG_NORMAL                                            0
+#define ONIG_MISMATCH                                         -1
+#define ONIG_NO_SUPPORT_CONFIG                                -2
+
+/* internal error */
+#define ONIGERR_MEMORY                                         -5
+#define ONIGERR_TYPE_BUG                                       -6
+#define ONIGERR_PARSER_BUG                                    -11
+#define ONIGERR_STACK_BUG                                     -12
+#define ONIGERR_UNDEFINED_BYTECODE                            -13
+#define ONIGERR_UNEXPECTED_BYTECODE                           -14
+#define ONIGERR_MATCH_STACK_LIMIT_OVER                        -15
+#define ONIGERR_PARSE_DEPTH_LIMIT_OVER                        -16
+#define ONIGERR_DEFAULT_ENCODING_IS_NOT_SET                   -21
+#define ONIGERR_SPECIFIED_ENCODING_CANT_CONVERT_TO_WIDE_CHAR  -22
+/* general error */
+#define ONIGERR_INVALID_ARGUMENT                              -30
+/* syntax error */
+#define ONIGERR_END_PATTERN_AT_LEFT_BRACE                    -100
+#define ONIGERR_END_PATTERN_AT_LEFT_BRACKET                  -101
+#define ONIGERR_EMPTY_CHAR_CLASS                             -102
+#define ONIGERR_PREMATURE_END_OF_CHAR_CLASS                  -103
+#define ONIGERR_END_PATTERN_AT_ESCAPE                        -104
+#define ONIGERR_END_PATTERN_AT_META                          -105
+#define ONIGERR_END_PATTERN_AT_CONTROL                       -106
+#define ONIGERR_META_CODE_SYNTAX                             -108
+#define ONIGERR_CONTROL_CODE_SYNTAX                          -109
+#define ONIGERR_CHAR_CLASS_VALUE_AT_END_OF_RANGE             -110
+#define ONIGERR_CHAR_CLASS_VALUE_AT_START_OF_RANGE           -111
+#define ONIGERR_UNMATCHED_RANGE_SPECIFIER_IN_CHAR_CLASS      -112
+#define ONIGERR_TARGET_OF_REPEAT_OPERATOR_NOT_SPECIFIED      -113
+#define ONIGERR_TARGET_OF_REPEAT_OPERATOR_INVALID            -114
+#define ONIGERR_NESTED_REPEAT_OPERATOR                       -115
+#define ONIGERR_UNMATCHED_CLOSE_PARENTHESIS                  -116
+#define ONIGERR_END_PATTERN_WITH_UNMATCHED_PARENTHESIS       -117
+#define ONIGERR_END_PATTERN_IN_GROUP                         -118
+#define ONIGERR_UNDEFINED_GROUP_OPTION                       -119
+#define ONIGERR_INVALID_POSIX_BRACKET_TYPE                   -121
+#define ONIGERR_INVALID_LOOK_BEHIND_PATTERN                  -122
+#define ONIGERR_INVALID_REPEAT_RANGE_PATTERN                 -123
+#define ONIGERR_INVALID_CONDITION_PATTERN                    -124
+/* values error (syntax error) */
+#define ONIGERR_TOO_BIG_NUMBER                               -200
+#define ONIGERR_TOO_BIG_NUMBER_FOR_REPEAT_RANGE              -201
+#define ONIGERR_UPPER_SMALLER_THAN_LOWER_IN_REPEAT_RANGE     -202
+#define ONIGERR_EMPTY_RANGE_IN_CHAR_CLASS                    -203
+#define ONIGERR_MISMATCH_CODE_LENGTH_IN_CLASS_RANGE          -204
+#define ONIGERR_TOO_MANY_MULTI_BYTE_RANGES                   -205
+#define ONIGERR_TOO_SHORT_MULTI_BYTE_STRING                  -206
+#define ONIGERR_TOO_BIG_BACKREF_NUMBER                       -207
+#define ONIGERR_INVALID_BACKREF                              -208
+#define ONIGERR_NUMBERED_BACKREF_OR_CALL_NOT_ALLOWED         -209
+#define ONIGERR_TOO_MANY_CAPTURE_GROUPS                      -210
+#define ONIGERR_TOO_SHORT_DIGITS                             -211
+#define ONIGERR_TOO_LONG_WIDE_CHAR_VALUE                     -212
+#define ONIGERR_EMPTY_GROUP_NAME                             -214
+#define ONIGERR_INVALID_GROUP_NAME                           -215
+#define ONIGERR_INVALID_CHAR_IN_GROUP_NAME                   -216
+#define ONIGERR_UNDEFINED_NAME_REFERENCE                     -217
+#define ONIGERR_UNDEFINED_GROUP_REFERENCE                    -218
+#define ONIGERR_MULTIPLEX_DEFINED_NAME                       -219
+#define ONIGERR_MULTIPLEX_DEFINITION_NAME_CALL               -220
+#define ONIGERR_NEVER_ENDING_RECURSION                       -221
+#define ONIGERR_GROUP_NUMBER_OVER_FOR_CAPTURE_HISTORY        -222
+#define ONIGERR_INVALID_CHAR_PROPERTY_NAME                   -223
+#define ONIGERR_INVALID_CODE_POINT_VALUE                     -400
+#define ONIGERR_INVALID_WIDE_CHAR_VALUE                      -400
+#define ONIGERR_TOO_BIG_WIDE_CHAR_VALUE                      -401
+#define ONIGERR_NOT_SUPPORTED_ENCODING_COMBINATION           -402
+#define ONIGERR_INVALID_COMBINATION_OF_OPTIONS               -403
+
+/* errors related to thread */
+/* #define ONIGERR_OVER_THREAD_PASS_LIMIT_COUNT                -1001 */
+
+
+/* must be smaller than BIT_STATUS_BITS_NUM (unsigned int * 8) */
+#define ONIG_MAX_CAPTURE_HISTORY_GROUP   31
+#define ONIG_IS_CAPTURE_HISTORY_GROUP(r, i) \
+  ((i) <= ONIG_MAX_CAPTURE_HISTORY_GROUP && (r)->list && (r)->list[i])
+
+typedef struct OnigCaptureTreeNodeStruct {
+  int group;   /* group number */
+  OnigPosition beg;
+  OnigPosition end;
+  int allocated;
+  int num_childs;
+  struct OnigCaptureTreeNodeStruct** childs;
+} OnigCaptureTreeNode;
+
+/* match result region type */
+struct re_registers {
+  int  allocated;
+  int  num_regs;
+  OnigPosition* beg;
+  OnigPosition* end;
+  /* extended */
+  OnigCaptureTreeNode* history_root;  /* capture history tree root */
+};
+
+/* capture tree traverse */
+#define ONIG_TRAVERSE_CALLBACK_AT_FIRST   1
+#define ONIG_TRAVERSE_CALLBACK_AT_LAST    2
+#define ONIG_TRAVERSE_CALLBACK_AT_BOTH \
+  ( ONIG_TRAVERSE_CALLBACK_AT_FIRST | ONIG_TRAVERSE_CALLBACK_AT_LAST )
+
+
+#define ONIG_REGION_NOTPOS            -1
+
+typedef struct re_registers   OnigRegion;
+
+typedef struct {
+  OnigEncoding enc;
+  OnigUChar* par;
+  OnigUChar* par_end;
+} OnigErrorInfo;
+
+typedef struct {
+  int lower;
+  int upper;
+} OnigRepeatRange;
+
+typedef void (*OnigWarnFunc)(const char* s);
+extern void onig_null_warn(const char* s);
+#define ONIG_NULL_WARN       onig_null_warn
+
+#define ONIG_CHAR_TABLE_SIZE   256
+
+typedef struct re_pattern_buffer {
+  /* common members of BBuf(bytes-buffer) */
+  unsigned char* p;         /* compiled pattern */
+  unsigned int used;        /* used space for p */
+  unsigned int alloc;       /* allocated space for p */
+
+  int num_mem;                   /* used memory(...) num counted from 1 */
+  int num_repeat;                /* OP_REPEAT/OP_REPEAT_NG id-counter */
+  int num_null_check;            /* OP_NULL_CHECK_START/END id counter */
+  int num_comb_exp_check;        /* combination explosion check */
+  int num_call;                  /* number of subexp call */
+  unsigned int capture_history;  /* (?@...) flag (1-31) */
+  unsigned int bt_mem_start;     /* need backtrack flag */
+  unsigned int bt_mem_end;       /* need backtrack flag */
+  int stack_pop_level;
+  int repeat_range_alloc;
+
+  OnigOptionType    options;
+
+  OnigRepeatRange* repeat_range;
+
+  OnigEncoding      enc;
+  const OnigSyntaxType* syntax;
+  void*             name_table;
+  OnigCaseFoldType  case_fold_flag;
+
+  /* optimization info (string search, char-map and anchors) */
+  int            optimize;          /* optimize flag */
+  int            threshold_len;     /* search str-length for apply optimize */
+  int            anchor;            /* BEGIN_BUF, BEGIN_POS, (SEMI_)END_BUF */
+  OnigDistance   anchor_dmin;       /* (SEMI_)END_BUF anchor distance */
+  OnigDistance   anchor_dmax;       /* (SEMI_)END_BUF anchor distance */
+  int            sub_anchor;        /* start-anchor for exact or map */
+  unsigned char *exact;
+  unsigned char *exact_end;
+  unsigned char  map[ONIG_CHAR_TABLE_SIZE]; /* used as BM skip or char-map */
+  int           *int_map;                   /* BM skip for exact_len > 255 */
+  int           *int_map_backward;          /* BM skip for backward search */
+  OnigDistance   dmin;                      /* min-distance of exact or map */
+  OnigDistance   dmax;                      /* max-distance of exact or map */
+
+  /* regex_t link chain */
+  struct re_pattern_buffer* chain;  /* escape compile-conflict */
+} OnigRegexType;
+
+typedef OnigRegexType*  OnigRegex;
+
+#ifndef ONIG_ESCAPE_REGEX_T_COLLISION
+typedef OnigRegexType  regex_t;
+#endif
+
+
+typedef struct {
+  int             num_of_elements;
+  OnigEncoding    pattern_enc;
+  OnigEncoding    target_enc;
+  const OnigSyntaxType* syntax;
+  OnigOptionType  option;
+  OnigCaseFoldType   case_fold_flag;
+} OnigCompileInfo;
+
+/* Oniguruma Native API */
+ONIG_EXTERN
+int onig_initialize(OnigEncoding encodings[], int n);
+ONIG_EXTERN
+int onig_init(void);
+ONIG_EXTERN
+int onig_error_code_to_str(OnigUChar* s, OnigPosition err_code, ...);
+ONIG_EXTERN
+void onig_set_warn_func(OnigWarnFunc f);
+ONIG_EXTERN
+void onig_set_verb_warn_func(OnigWarnFunc f);
+ONIG_EXTERN
+int onig_new(OnigRegex*, const OnigUChar* pattern, const OnigUChar* pattern_end, OnigOptionType option, OnigEncoding enc, const OnigSyntaxType* syntax, OnigErrorInfo* einfo);
+ONIG_EXTERN
+int onig_reg_init(OnigRegex reg, OnigOptionType option, OnigCaseFoldType case_fold_flag, OnigEncoding enc, const OnigSyntaxType* syntax);
+ONIG_EXTERN
+int onig_new_without_alloc(OnigRegex, const OnigUChar* pattern, const OnigUChar* pattern_end, OnigOptionType option, OnigEncoding enc, const OnigSyntaxType* syntax, OnigErrorInfo* einfo);
+ONIG_EXTERN
+int onig_new_deluxe(OnigRegex* reg, const OnigUChar* pattern, const OnigUChar* pattern_end, OnigCompileInfo* ci, OnigErrorInfo* einfo);
+ONIG_EXTERN
+void onig_free(OnigRegex);
+ONIG_EXTERN
+void onig_free_body(OnigRegex);
+ONIG_EXTERN
+OnigPosition onig_scan(OnigRegex reg, const OnigUChar* str, const OnigUChar* end, OnigRegion* region, OnigOptionType option, int (*scan_callback)(OnigPosition, OnigPosition, OnigRegion*, void*), void* callback_arg);
+ONIG_EXTERN
+OnigPosition onig_search(OnigRegex, const OnigUChar* str, const OnigUChar* end, const OnigUChar* start, const OnigUChar* range, OnigRegion* region, OnigOptionType option);
+ONIG_EXTERN
+OnigPosition onig_search_gpos(OnigRegex, const OnigUChar* str, const OnigUChar* end, const OnigUChar* global_pos, const OnigUChar* start, const OnigUChar* range, OnigRegion* region, OnigOptionType option);
+ONIG_EXTERN
+OnigPosition onig_match(OnigRegex, const OnigUChar* str, const OnigUChar* end, const OnigUChar* at, OnigRegion* region, OnigOptionType option);
+ONIG_EXTERN
+OnigRegion* onig_region_new(void);
+ONIG_EXTERN
+void onig_region_init(OnigRegion* region);
+ONIG_EXTERN
+void onig_region_free(OnigRegion* region, int free_self);
+ONIG_EXTERN
+void onig_region_copy(OnigRegion* to, const OnigRegion* from);
+ONIG_EXTERN
+void onig_region_clear(OnigRegion* region);
+ONIG_EXTERN
+int onig_region_resize(OnigRegion* region, int n);
+ONIG_EXTERN
+int onig_region_set(OnigRegion* region, int at, int beg, int end);
+ONIG_EXTERN
+int onig_name_to_group_numbers(OnigRegex reg, const OnigUChar* name, const OnigUChar* name_end, int** nums);
+ONIG_EXTERN
+int onig_name_to_backref_number(OnigRegex reg, const OnigUChar* name, const OnigUChar* name_end, const OnigRegion *region);
+ONIG_EXTERN
+int onig_foreach_name(OnigRegex reg, int (*func)(const OnigUChar*, const OnigUChar*,int,int*,OnigRegex,void*), void* arg);
+ONIG_EXTERN
+int onig_number_of_names(const OnigRegexType *reg);
+ONIG_EXTERN
+int onig_number_of_captures(const OnigRegexType *reg);
+ONIG_EXTERN
+int onig_number_of_capture_histories(const OnigRegexType *reg);
+ONIG_EXTERN
+OnigCaptureTreeNode* onig_get_capture_tree(OnigRegion* region);
+ONIG_EXTERN
+int onig_capture_tree_traverse(OnigRegion* region, int at, int(*callback_func)(int,OnigPosition,OnigPosition,int,int,void*), void* arg);
+ONIG_EXTERN
+int onig_noname_group_capture_is_active(const OnigRegexType *reg);
+ONIG_EXTERN
+OnigEncoding onig_get_encoding(const OnigRegexType *reg);
+ONIG_EXTERN
+OnigOptionType onig_get_options(const OnigRegexType *reg);
+ONIG_EXTERN
+OnigCaseFoldType onig_get_case_fold_flag(const OnigRegexType *reg);
+ONIG_EXTERN
+const OnigSyntaxType* onig_get_syntax(const OnigRegexType *reg);
+ONIG_EXTERN
+int onig_set_default_syntax(const OnigSyntaxType* syntax);
+ONIG_EXTERN
+void onig_copy_syntax(OnigSyntaxType* to, const OnigSyntaxType* from);
+ONIG_EXTERN
+unsigned int onig_get_syntax_op(const OnigSyntaxType* syntax);
+ONIG_EXTERN
+unsigned int onig_get_syntax_op2(const OnigSyntaxType* syntax);
+ONIG_EXTERN
+unsigned int onig_get_syntax_behavior(const OnigSyntaxType* syntax);
+ONIG_EXTERN
+OnigOptionType onig_get_syntax_options(const OnigSyntaxType* syntax);
+ONIG_EXTERN
+void onig_set_syntax_op(OnigSyntaxType* syntax, unsigned int op);
+ONIG_EXTERN
+void onig_set_syntax_op2(OnigSyntaxType* syntax, unsigned int op2);
+ONIG_EXTERN
+void onig_set_syntax_behavior(OnigSyntaxType* syntax, unsigned int behavior);
+ONIG_EXTERN
+void onig_set_syntax_options(OnigSyntaxType* syntax, OnigOptionType options);
+ONIG_EXTERN
+int onig_set_meta_char(OnigSyntaxType* syntax, unsigned int what, OnigCodePoint code);
+ONIG_EXTERN
+void onig_copy_encoding(OnigEncodingType *to, OnigEncoding from);
+ONIG_EXTERN
+OnigCaseFoldType onig_get_default_case_fold_flag(void);
+ONIG_EXTERN
+int onig_set_default_case_fold_flag(OnigCaseFoldType case_fold_flag);
+ONIG_EXTERN
+unsigned int onig_get_match_stack_limit_size(void);
+ONIG_EXTERN
+int onig_set_match_stack_limit_size(unsigned int size);
+ONIG_EXTERN
+unsigned int onig_get_parse_depth_limit(void);
+ONIG_EXTERN
+int onig_set_parse_depth_limit(unsigned int depth);
+ONIG_EXTERN
+int onig_end(void);
+ONIG_EXTERN
+const char* onig_version(void);
+ONIG_EXTERN
+const char* onig_copyright(void);
+
+RUBY_SYMBOL_EXPORT_END
+
+#ifdef __cplusplus
+# if 0
+{ /* satisfy cc-mode */
+# endif
+}
+#endif
+
+#endif /* ONIGMO_H */
Index: EcnlProtoTool/trunk/onigmo-6.1.3/src/onigmognu.h
===================================================================
--- EcnlProtoTool/trunk/onigmo-6.1.3/src/onigmognu.h	(revision 331)
+++ EcnlProtoTool/trunk/onigmo-6.1.3/src/onigmognu.h	(revision 331)
@@ -0,0 +1,86 @@
+#ifndef ONIGMOGNU_H
+#define ONIGMOGNU_H
+/**********************************************************************
+  onigmognu.h - Onigmo (Oniguruma-mod) (regular expression library)
+**********************************************************************/
+/*-
+ * Copyright (c) 2002-2005  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2011-2016  K.Takata  <kentkt AT csc DOT jp>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include "onigmo.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define RE_MBCTYPE_ASCII         0
+#define RE_MBCTYPE_EUC           1
+#define RE_MBCTYPE_SJIS          2
+#define RE_MBCTYPE_UTF8          3
+
+/* GNU regex options */
+#ifndef RE_NREGS
+#define RE_NREGS                ONIG_NREGION
+#endif
+
+#define RE_OPTION_IGNORECASE         ONIG_OPTION_IGNORECASE
+#define RE_OPTION_EXTENDED           ONIG_OPTION_EXTEND
+#define RE_OPTION_MULTILINE          ONIG_OPTION_MULTILINE
+#define RE_OPTION_SINGLELINE         ONIG_OPTION_SINGLELINE
+#define RE_OPTION_LONGEST            ONIG_OPTION_FIND_LONGEST
+#define RE_OPTION_POSIXLINE         (RE_OPTION_MULTILINE|RE_OPTION_SINGLELINE)
+#define RE_OPTION_FIND_NOT_EMPTY     ONIG_OPTION_FIND_NOT_EMPTY
+#define RE_OPTION_NEGATE_SINGLELINE  ONIG_OPTION_NEGATE_SINGLELINE
+#define RE_OPTION_DONT_CAPTURE_GROUP ONIG_OPTION_DONT_CAPTURE_GROUP
+#define RE_OPTION_CAPTURE_GROUP      ONIG_OPTION_CAPTURE_GROUP
+
+
+ONIG_EXTERN
+void re_mbcinit(int);
+ONIG_EXTERN
+int re_compile_pattern(const char*, int, struct re_pattern_buffer*, char* err_buf);
+ONIG_EXTERN
+int re_recompile_pattern(const char*, int, struct re_pattern_buffer*, char* err_buf);
+ONIG_EXTERN
+void re_free_pattern(struct re_pattern_buffer*);
+ONIG_EXTERN
+int re_adjust_startpos(struct re_pattern_buffer*, const char*, int, int, int);
+ONIG_EXTERN
+int re_search(struct re_pattern_buffer*, const char*, int, int, int, struct re_registers*);
+ONIG_EXTERN
+int re_match(struct re_pattern_buffer*, const char *, int, int, struct re_registers*);
+ONIG_EXTERN
+void re_set_casetable(const char*);
+ONIG_EXTERN
+void re_free_registers(struct re_registers*);
+ONIG_EXTERN
+int re_alloc_pattern(struct re_pattern_buffer**);  /* added */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ONIGMOGNU_H */
Index: EcnlProtoTool/trunk/onigmo-6.1.3/src/onigmoposix.h
===================================================================
--- EcnlProtoTool/trunk/onigmo-6.1.3/src/onigmoposix.h	(revision 331)
+++ EcnlProtoTool/trunk/onigmo-6.1.3/src/onigmoposix.h	(revision 331)
@@ -0,0 +1,163 @@
+#ifndef ONIGMOPOSIX_H
+#define ONIGMOPOSIX_H
+/**********************************************************************
+  onigmoposix.h - Onigmo (Oniguruma-mod) (regular expression library)
+**********************************************************************/
+/*-
+ * Copyright (c) 2002-2005  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2011-2016  K.Takata  <kentkt AT csc DOT jp>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+#include <stdlib.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* options */
+#define REG_ICASE          (1<<0)
+#define REG_NEWLINE        (1<<1)
+#define REG_NOTBOL         (1<<2)
+#define REG_NOTEOL         (1<<3)
+#define REG_EXTENDED       (1<<4) /* if not set, Basic Onigular Expression */
+#define REG_NOSUB          (1<<5)
+
+/* POSIX error codes */
+#define REG_NOMATCH          1
+#define REG_BADPAT           2
+#define REG_ECOLLATE         3
+#define REG_ECTYPE           4
+#define REG_EESCAPE          5
+#define REG_ESUBREG          6
+#define REG_EBRACK           7
+#define REG_EPAREN           8
+#define REG_EBRACE           9
+#define REG_BADBR           10
+#define REG_ERANGE          11
+#define REG_ESPACE          12
+#define REG_BADRPT          13
+
+/* extended error codes */
+#define REG_EONIG_INTERNAL  14
+#define REG_EONIG_BADWC     15
+#define REG_EONIG_BADARG    16
+/* #define REG_EONIG_THREAD    17 */
+
+/* character encodings (for reg_set_encoding()) */
+#define REG_POSIX_ENCODING_ASCII     0
+#define REG_POSIX_ENCODING_EUC_JP    1
+#define REG_POSIX_ENCODING_SJIS      2
+#define REG_POSIX_ENCODING_UTF8      3
+#define REG_POSIX_ENCODING_UTF16_BE  4
+#define REG_POSIX_ENCODING_UTF16_LE  5
+
+
+typedef int regoff_t;
+
+typedef struct {
+  regoff_t  rm_so;
+  regoff_t  rm_eo;
+} regmatch_t;
+
+/* POSIX regex_t */
+typedef struct {
+  void*   onig;          /* Oniguruma regex_t*  */
+  size_t  re_nsub;
+  int     comp_options;
+} regex_t;
+
+
+#ifndef ONIG_EXTERN
+# if defined(_WIN32) && !defined(__GNUC__)
+#  if defined(EXPORT)
+#   define ONIG_EXTERN   extern __declspec(dllexport)
+#  else
+#   define ONIG_EXTERN   extern __declspec(dllimport)
+#  endif
+# endif
+#endif
+
+#ifndef ONIG_EXTERN
+# define ONIG_EXTERN   extern
+#endif
+
+#ifndef ONIGMO_H
+typedef unsigned int        OnigOptionType;
+
+/* syntax */
+typedef struct {
+  unsigned int op;
+  unsigned int op2;
+  unsigned int behavior;
+  OnigOptionType options;    /* default option */
+} OnigSyntaxType;
+
+ONIG_EXTERN const OnigSyntaxType OnigSyntaxPosixBasic;
+ONIG_EXTERN const OnigSyntaxType OnigSyntaxPosixExtended;
+ONIG_EXTERN const OnigSyntaxType OnigSyntaxEmacs;
+ONIG_EXTERN const OnigSyntaxType OnigSyntaxGrep;
+ONIG_EXTERN const OnigSyntaxType OnigSyntaxGnuRegex;
+ONIG_EXTERN const OnigSyntaxType OnigSyntaxJava;
+ONIG_EXTERN const OnigSyntaxType OnigSyntaxPerl;
+ONIG_EXTERN const OnigSyntaxType OnigSyntaxRuby;
+
+/* predefined syntaxes (see regsyntax.c) */
+#define ONIG_SYNTAX_POSIX_BASIC        (&OnigSyntaxPosixBasic)
+#define ONIG_SYNTAX_POSIX_EXTENDED     (&OnigSyntaxPosixExtended)
+#define ONIG_SYNTAX_EMACS              (&OnigSyntaxEmacs)
+#define ONIG_SYNTAX_GREP               (&OnigSyntaxGrep)
+#define ONIG_SYNTAX_GNU_REGEX          (&OnigSyntaxGnuRegex)
+#define ONIG_SYNTAX_JAVA               (&OnigSyntaxJava)
+#define ONIG_SYNTAX_PERL               (&OnigSyntaxPerl)
+#define ONIG_SYNTAX_RUBY               (&OnigSyntaxRuby)
+/* default syntax */
+#define ONIG_SYNTAX_DEFAULT             OnigDefaultSyntax
+
+ONIG_EXTERN const OnigSyntaxType*  OnigDefaultSyntax;
+
+ONIG_EXTERN int  onig_set_default_syntax(const OnigSyntaxType* syntax);
+ONIG_EXTERN void onig_copy_syntax(OnigSyntaxType* to, const OnigSyntaxType* from);
+ONIG_EXTERN const char* onig_version(void);
+ONIG_EXTERN const char* onig_copyright(void);
+ONIG_EXTERN int onig_end(void);
+
+#endif /* ONIGMO_H */
+
+
+ONIG_EXTERN int    regcomp(regex_t* reg, const char* pat, int options);
+ONIG_EXTERN int    regexec(regex_t* reg, const char* str, size_t nmatch, regmatch_t* matches, int options);
+ONIG_EXTERN void   regfree(regex_t* reg);
+ONIG_EXTERN size_t regerror(int code, const regex_t* reg, char* buf, size_t size);
+
+/* extended API */
+ONIG_EXTERN void reg_set_encoding(int enc);
+ONIG_EXTERN int  reg_name_to_group_numbers(regex_t* reg, const unsigned char* name, const unsigned char* name_end, int** nums);
+ONIG_EXTERN int  reg_foreach_name(regex_t* reg, int (*func)(const unsigned char*, const unsigned char*,int,int*,regex_t*,void*), void* arg);
+ONIG_EXTERN int  reg_number_of_names(regex_t* reg);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ONIGMOPOSIX_H */
Index: EcnlProtoTool/trunk/onigmo-6.1.3/src/onigposix.h
===================================================================
--- EcnlProtoTool/trunk/onigmo-5.15.0/src/onigposix.h	(revision 321)
+++ 	(revision )
@@ -1,169 +1,0 @@
-#ifndef ONIGPOSIX_H
-#define ONIGPOSIX_H
-/**********************************************************************
-  onigposix.h - Oniguruma (regular expression library)
-**********************************************************************/
-/*-
- * Copyright (c) 2002-2005  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-#include <stdlib.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* options */
-#define REG_ICASE          (1<<0)
-#define REG_NEWLINE        (1<<1)
-#define REG_NOTBOL         (1<<2)
-#define REG_NOTEOL         (1<<3)
-#define REG_EXTENDED       (1<<4) /* if not set, Basic Onigular Expression */
-#define REG_NOSUB          (1<<5)
-
-/* POSIX error codes */
-#define REG_NOMATCH          1
-#define REG_BADPAT           2
-#define REG_ECOLLATE         3
-#define REG_ECTYPE           4
-#define REG_EESCAPE          5
-#define REG_ESUBREG          6
-#define REG_EBRACK           7
-#define REG_EPAREN           8
-#define REG_EBRACE           9
-#define REG_BADBR           10
-#define REG_ERANGE          11
-#define REG_ESPACE          12
-#define REG_BADRPT          13
-
-/* extended error codes */
-#define REG_EONIG_INTERNAL  14
-#define REG_EONIG_BADWC     15
-#define REG_EONIG_BADARG    16
-#define REG_EONIG_THREAD    17
-
-/* character encodings (for reg_set_encoding()) */
-#define REG_POSIX_ENCODING_ASCII     0
-#define REG_POSIX_ENCODING_EUC_JP    1
-#define REG_POSIX_ENCODING_SJIS      2
-#define REG_POSIX_ENCODING_UTF8      3
-#define REG_POSIX_ENCODING_UTF16_BE  4
-#define REG_POSIX_ENCODING_UTF16_LE  5
-
-
-typedef int regoff_t;
-
-typedef struct {
-  regoff_t  rm_so;
-  regoff_t  rm_eo;
-} regmatch_t;
-
-/* POSIX regex_t */
-typedef struct {
-  void*   onig;          /* Oniguruma regex_t*  */
-  size_t  re_nsub;
-  int     comp_options;
-} regex_t;
-
-
-#ifndef P_
-#if defined(__STDC__) || defined(_WIN32)
-# define P_(args) args
-#else
-# define P_(args) ()
-#endif
-#endif
-
-#ifndef ONIG_EXTERN
-#if defined(_WIN32) && !defined(__GNUC__)
-#if defined(EXPORT)
-#define ONIG_EXTERN   extern __declspec(dllexport)
-#else
-#define ONIG_EXTERN   extern __declspec(dllimport)
-#endif
-#endif
-#endif
-
-#ifndef ONIG_EXTERN
-#define ONIG_EXTERN   extern
-#endif
-
-#ifndef ONIGURUMA_H
-typedef unsigned int        OnigOptionType;
-
-/* syntax */
-typedef struct {
-  unsigned int op;
-  unsigned int op2;
-  unsigned int behavior;
-  OnigOptionType options;    /* default option */
-} OnigSyntaxType;
-
-ONIG_EXTERN OnigSyntaxType OnigSyntaxPosixBasic;
-ONIG_EXTERN OnigSyntaxType OnigSyntaxPosixExtended;
-ONIG_EXTERN OnigSyntaxType OnigSyntaxEmacs;
-ONIG_EXTERN OnigSyntaxType OnigSyntaxGrep;
-ONIG_EXTERN OnigSyntaxType OnigSyntaxGnuRegex;
-ONIG_EXTERN OnigSyntaxType OnigSyntaxJava;
-ONIG_EXTERN OnigSyntaxType OnigSyntaxPerl;
-ONIG_EXTERN OnigSyntaxType OnigSyntaxRuby;
-
-/* predefined syntaxes (see regsyntax.c) */
-#define ONIG_SYNTAX_POSIX_BASIC        (&OnigSyntaxPosixBasic)
-#define ONIG_SYNTAX_POSIX_EXTENDED     (&OnigSyntaxPosixExtended)
-#define ONIG_SYNTAX_EMACS              (&OnigSyntaxEmacs)
-#define ONIG_SYNTAX_GREP               (&OnigSyntaxGrep)
-#define ONIG_SYNTAX_GNU_REGEX          (&OnigSyntaxGnuRegex)
-#define ONIG_SYNTAX_JAVA               (&OnigSyntaxJava)
-#define ONIG_SYNTAX_PERL               (&OnigSyntaxPerl)
-#define ONIG_SYNTAX_RUBY               (&OnigSyntaxRuby)
-/* default syntax */
-#define ONIG_SYNTAX_DEFAULT             OnigDefaultSyntax
-
-ONIG_EXTERN OnigSyntaxType*  OnigDefaultSyntax;
-
-ONIG_EXTERN int  onig_set_default_syntax P_((OnigSyntaxType* syntax));
-ONIG_EXTERN void onig_copy_syntax P_((OnigSyntaxType* to, OnigSyntaxType* from));
-ONIG_EXTERN const char* onig_version P_((void));
-ONIG_EXTERN const char* onig_copyright P_((void));
-
-#endif /* ONIGURUMA_H */
-
-
-ONIG_EXTERN int    regcomp P_((regex_t* reg, const char* pat, int options));
-ONIG_EXTERN int    regexec P_((regex_t* reg, const char* str, size_t nmatch, regmatch_t* matches, int options));
-ONIG_EXTERN void   regfree P_((regex_t* reg));
-ONIG_EXTERN size_t regerror P_((int code, const regex_t* reg, char* buf, size_t size));
-
-/* extended API */
-ONIG_EXTERN void reg_set_encoding P_((int enc));
-ONIG_EXTERN int  reg_name_to_group_numbers P_((regex_t* reg, const unsigned char* name, const unsigned char* name_end, int** nums));
-ONIG_EXTERN int  reg_foreach_name P_((regex_t* reg, int (*func)(const unsigned char*, const unsigned char*,int,int*,regex_t*,void*), void* arg));
-ONIG_EXTERN int  reg_number_of_names P_((regex_t* reg));
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* ONIGPOSIX_H */
Index: EcnlProtoTool/trunk/onigmo-6.1.3/src/oniguruma.h
===================================================================
--- EcnlProtoTool/trunk/onigmo-5.15.0/src/oniguruma.h	(revision 321)
+++ 	(revision )
@@ -1,870 +1,0 @@
-#ifndef ONIGURUMA_H
-#define ONIGURUMA_H
-/**********************************************************************
-  oniguruma.h - Onigmo (Oniguruma-mod) (regular expression library)
-**********************************************************************/
-/*-
- * Copyright (c) 2002-2009  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
- * Copyright (c) 2011-2014  K.Takata  <kentkt AT csc DOT jp>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define ONIGURUMA
-#define ONIGURUMA_VERSION_MAJOR   5
-#define ONIGURUMA_VERSION_MINOR   15
-#define ONIGURUMA_VERSION_TEENY   0
-
-#ifdef __cplusplus
-# ifndef  HAVE_PROTOTYPES
-#  define HAVE_PROTOTYPES 1
-# endif
-# ifndef  HAVE_STDARG_PROTOTYPES
-#  define HAVE_STDARG_PROTOTYPES 1
-# endif
-#endif
-
-/* escape Mac OS X/Xcode 2.4/gcc 4.0.1 problem */
-#if defined(__APPLE__) && defined(__GNUC__) && __GNUC__ >= 4
-# ifndef  HAVE_STDARG_PROTOTYPES
-#  define HAVE_STDARG_PROTOTYPES 1
-# endif
-#endif
-
-#if defined(HAVE_STDARG_H) || defined(_WIN32)
-# ifndef  HAVE_STDARG_PROTOTYPES
-#  define HAVE_STDARG_PROTOTYPES 1
-# endif
-#endif
-
-#ifndef P_
-#if defined(__STDC__) || defined(_WIN32)
-# define P_(args) args
-#else
-# define P_(args) ()
-#endif
-#endif
-
-#ifndef PV_
-#ifdef HAVE_STDARG_PROTOTYPES
-# define PV_(args) args
-#else
-# define PV_(args) ()
-#endif
-#endif
-
-#ifndef ONIG_EXTERN
-#if defined(_WIN32) && !defined(__GNUC__)
-#if defined(EXPORT) || defined(RUBY_EXPORT)
-#define ONIG_EXTERN   extern __declspec(dllexport)
-#else
-#define ONIG_EXTERN   extern __declspec(dllimport)
-#endif
-#endif
-#endif
-
-#ifndef ONIG_EXTERN
-#define ONIG_EXTERN   extern
-#endif
-
-#include <stddef.h>		/* for size_t */
-
-/* PART: character encoding */
-
-#ifndef ONIG_ESCAPE_UCHAR_COLLISION
-#define UChar OnigUChar
-#endif
-
-typedef unsigned char  OnigUChar;
-typedef unsigned int   OnigCodePoint;
-typedef unsigned int   OnigCtype;
-typedef size_t         OnigDistance;
-typedef ptrdiff_t      OnigPosition;
-
-#define ONIG_INFINITE_DISTANCE  ~((OnigDistance )0)
-
-typedef unsigned int OnigCaseFoldType; /* case fold flag */
-
-ONIG_EXTERN OnigCaseFoldType OnigDefaultCaseFoldFlag;
-
-/* #define ONIGENC_CASE_FOLD_HIRAGANA_KATAKANA  (1<<1) */
-/* #define ONIGENC_CASE_FOLD_KATAKANA_WIDTH     (1<<2) */
-#define ONIGENC_CASE_FOLD_TURKISH_AZERI         (1<<20)
-#define INTERNAL_ONIGENC_CASE_FOLD_MULTI_CHAR   (1<<30)
-
-#define ONIGENC_CASE_FOLD_MIN      INTERNAL_ONIGENC_CASE_FOLD_MULTI_CHAR
-#define ONIGENC_CASE_FOLD_DEFAULT  OnigDefaultCaseFoldFlag
-
-
-#define ONIGENC_MAX_COMP_CASE_FOLD_CODE_LEN       3
-#define ONIGENC_GET_CASE_FOLD_CODES_MAX_NUM      13
-/* 13 => Unicode:0x1ffc */
-
-/* code range */
-#define ONIGENC_CODE_RANGE_NUM(range)     ((int )range[0])
-#define ONIGENC_CODE_RANGE_FROM(range,i)  range[((i)*2) + 1]
-#define ONIGENC_CODE_RANGE_TO(range,i)    range[((i)*2) + 2]
-
-typedef struct {
-  int byte_len;  /* argument(original) character(s) byte length */
-  int code_len;  /* number of code */
-  OnigCodePoint code[ONIGENC_MAX_COMP_CASE_FOLD_CODE_LEN];
-} OnigCaseFoldCodeItem;
-
-typedef struct {
-  OnigCodePoint esc;
-  OnigCodePoint anychar;
-  OnigCodePoint anytime;
-  OnigCodePoint zero_or_one_time;
-  OnigCodePoint one_or_more_time;
-  OnigCodePoint anychar_anytime;
-} OnigMetaCharTableType;
-
-typedef int (*OnigApplyAllCaseFoldFunc)(OnigCodePoint from, OnigCodePoint* to, int to_len, void* arg);
-
-typedef struct OnigEncodingTypeST {
-  int    (*mbc_enc_len)(const OnigUChar* p);
-  const char*   name;
-  int           max_enc_len;
-  int           min_enc_len;
-  int    (*is_mbc_newline)(const OnigUChar* p, const OnigUChar* end);
-  OnigCodePoint (*mbc_to_code)(const OnigUChar* p, const OnigUChar* end);
-  int    (*code_to_mbclen)(OnigCodePoint code);
-  int    (*code_to_mbc)(OnigCodePoint code, OnigUChar *buf);
-  int    (*mbc_case_fold)(OnigCaseFoldType flag, const OnigUChar** pp, const OnigUChar* end, OnigUChar* to);
-  int    (*apply_all_case_fold)(OnigCaseFoldType flag, OnigApplyAllCaseFoldFunc f, void* arg);
-  int    (*get_case_fold_codes_by_str)(OnigCaseFoldType flag, const OnigUChar* p, const OnigUChar* end, OnigCaseFoldCodeItem acs[]);
-  int    (*property_name_to_ctype)(struct OnigEncodingTypeST* enc, OnigUChar* p, OnigUChar* end);
-  int    (*is_code_ctype)(OnigCodePoint code, OnigCtype ctype);
-  int    (*get_ctype_code_range)(OnigCtype ctype, OnigCodePoint* sb_out, const OnigCodePoint* ranges[]);
-  OnigUChar* (*left_adjust_char_head)(const OnigUChar* start, const OnigUChar* p);
-  int    (*is_allowed_reverse_match)(const OnigUChar* p, const OnigUChar* end);
-  unsigned int  flags;
-} OnigEncodingType;
-
-typedef OnigEncodingType* OnigEncoding;
-
-ONIG_EXTERN OnigEncodingType OnigEncodingASCII;
-ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_1;
-ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_2;
-ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_3;
-ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_4;
-ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_5;
-ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_6;
-ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_7;
-ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_8;
-ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_9;
-ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_10;
-ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_11;
-ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_13;
-ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_14;
-ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_15;
-ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_16;
-ONIG_EXTERN OnigEncodingType OnigEncodingUTF8;
-ONIG_EXTERN OnigEncodingType OnigEncodingUTF16_BE;
-ONIG_EXTERN OnigEncodingType OnigEncodingUTF16_LE;
-ONIG_EXTERN OnigEncodingType OnigEncodingUTF32_BE;
-ONIG_EXTERN OnigEncodingType OnigEncodingUTF32_LE;
-ONIG_EXTERN OnigEncodingType OnigEncodingEUC_JP;
-ONIG_EXTERN OnigEncodingType OnigEncodingEUC_TW;
-ONIG_EXTERN OnigEncodingType OnigEncodingEUC_KR;
-ONIG_EXTERN OnigEncodingType OnigEncodingEUC_CN;
-ONIG_EXTERN OnigEncodingType OnigEncodingSJIS;
-ONIG_EXTERN OnigEncodingType OnigEncodingCP932;
-ONIG_EXTERN OnigEncodingType OnigEncodingKOI8;
-ONIG_EXTERN OnigEncodingType OnigEncodingKOI8_R;
-ONIG_EXTERN OnigEncodingType OnigEncodingCP1251;
-ONIG_EXTERN OnigEncodingType OnigEncodingBIG5;
-ONIG_EXTERN OnigEncodingType OnigEncodingGB18030;
-
-#define ONIG_ENCODING_ASCII        (&OnigEncodingASCII)
-#define ONIG_ENCODING_ISO_8859_1   (&OnigEncodingISO_8859_1)
-#define ONIG_ENCODING_ISO_8859_2   (&OnigEncodingISO_8859_2)
-#define ONIG_ENCODING_ISO_8859_3   (&OnigEncodingISO_8859_3)
-#define ONIG_ENCODING_ISO_8859_4   (&OnigEncodingISO_8859_4)
-#define ONIG_ENCODING_ISO_8859_5   (&OnigEncodingISO_8859_5)
-#define ONIG_ENCODING_ISO_8859_6   (&OnigEncodingISO_8859_6)
-#define ONIG_ENCODING_ISO_8859_7   (&OnigEncodingISO_8859_7)
-#define ONIG_ENCODING_ISO_8859_8   (&OnigEncodingISO_8859_8)
-#define ONIG_ENCODING_ISO_8859_9   (&OnigEncodingISO_8859_9)
-#define ONIG_ENCODING_ISO_8859_10  (&OnigEncodingISO_8859_10)
-#define ONIG_ENCODING_ISO_8859_11  (&OnigEncodingISO_8859_11)
-#define ONIG_ENCODING_ISO_8859_13  (&OnigEncodingISO_8859_13)
-#define ONIG_ENCODING_ISO_8859_14  (&OnigEncodingISO_8859_14)
-#define ONIG_ENCODING_ISO_8859_15  (&OnigEncodingISO_8859_15)
-#define ONIG_ENCODING_ISO_8859_16  (&OnigEncodingISO_8859_16)
-#define ONIG_ENCODING_UTF8         (&OnigEncodingUTF8)
-#define ONIG_ENCODING_UTF16_BE     (&OnigEncodingUTF16_BE)
-#define ONIG_ENCODING_UTF16_LE     (&OnigEncodingUTF16_LE)
-#define ONIG_ENCODING_UTF32_BE     (&OnigEncodingUTF32_BE)
-#define ONIG_ENCODING_UTF32_LE     (&OnigEncodingUTF32_LE)
-#define ONIG_ENCODING_EUC_JP       (&OnigEncodingEUC_JP)
-#define ONIG_ENCODING_EUC_TW       (&OnigEncodingEUC_TW)
-#define ONIG_ENCODING_EUC_KR       (&OnigEncodingEUC_KR)
-#define ONIG_ENCODING_EUC_CN       (&OnigEncodingEUC_CN)
-#define ONIG_ENCODING_SJIS         (&OnigEncodingSJIS)
-#define ONIG_ENCODING_CP932        (&OnigEncodingCP932)
-#define ONIG_ENCODING_KOI8         (&OnigEncodingKOI8)
-#define ONIG_ENCODING_KOI8_R       (&OnigEncodingKOI8_R)
-#define ONIG_ENCODING_CP1251       (&OnigEncodingCP1251)
-#define ONIG_ENCODING_BIG5         (&OnigEncodingBIG5)
-#define ONIG_ENCODING_GB18030      (&OnigEncodingGB18030)
-
-#define ONIG_ENCODING_UNDEF    ((OnigEncoding )0)
-
-
-/* work size */
-#define ONIGENC_CODE_TO_MBC_MAXLEN       7
-#define ONIGENC_MBC_CASE_FOLD_MAXLEN    18
-/* 18: 6(max-byte) * 3(case-fold chars) */
-
-/* character types */
-#define ONIGENC_CTYPE_NEWLINE   0
-#define ONIGENC_CTYPE_ALPHA     1
-#define ONIGENC_CTYPE_BLANK     2
-#define ONIGENC_CTYPE_CNTRL     3
-#define ONIGENC_CTYPE_DIGIT     4
-#define ONIGENC_CTYPE_GRAPH     5
-#define ONIGENC_CTYPE_LOWER     6
-#define ONIGENC_CTYPE_PRINT     7
-#define ONIGENC_CTYPE_PUNCT     8
-#define ONIGENC_CTYPE_SPACE     9
-#define ONIGENC_CTYPE_UPPER    10
-#define ONIGENC_CTYPE_XDIGIT   11
-#define ONIGENC_CTYPE_WORD     12
-#define ONIGENC_CTYPE_ALNUM    13  /* alpha || digit */
-#define ONIGENC_CTYPE_ASCII    14
-#define ONIGENC_MAX_STD_CTYPE  ONIGENC_CTYPE_ASCII
-
-/* flags */
-#define ONIGENC_FLAG_NONE       0U
-#define ONIGENC_FLAG_UNICODE    1U
-
-
-#define onig_enc_len(enc,p,end)        ONIGENC_MBC_ENC_LEN(enc,p)
-
-#define ONIGENC_IS_UNDEF(enc)          ((enc) == ONIG_ENCODING_UNDEF)
-#define ONIGENC_IS_SINGLEBYTE(enc)     (ONIGENC_MBC_MAXLEN(enc) == 1)
-#define ONIGENC_IS_MBC_HEAD(enc,p)     (ONIGENC_MBC_ENC_LEN(enc,p) != 1)
-#define ONIGENC_IS_MBC_ASCII(p)           (*(p)   < 128)
-#define ONIGENC_IS_CODE_ASCII(code)       ((code) < 128)
-#define ONIGENC_IS_MBC_WORD(enc,s,end) \
-   ONIGENC_IS_CODE_WORD(enc,ONIGENC_MBC_TO_CODE(enc,s,end))
-#define ONIGENC_IS_MBC_ASCII_WORD(enc,s,end) \
-   onigenc_ascii_is_code_ctype( \
-	ONIGENC_MBC_TO_CODE(enc,s,end),ONIGENC_CTYPE_WORD)
-#define ONIGENC_IS_UNICODE(enc)        ((enc)->flags & ONIGENC_FLAG_UNICODE)
-
-
-#define ONIGENC_NAME(enc)                      ((enc)->name)
-
-#define ONIGENC_MBC_CASE_FOLD(enc,flag,pp,end,buf) \
-  (enc)->mbc_case_fold(flag,(const OnigUChar** )pp,end,buf)
-#define ONIGENC_IS_ALLOWED_REVERSE_MATCH(enc,s,end) \
-        (enc)->is_allowed_reverse_match(s,end)
-#define ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc,start,s) \
-        (enc)->left_adjust_char_head(start, s)
-#define ONIGENC_APPLY_ALL_CASE_FOLD(enc,case_fold_flag,f,arg) \
-        (enc)->apply_all_case_fold(case_fold_flag,f,arg)
-#define ONIGENC_GET_CASE_FOLD_CODES_BY_STR(enc,case_fold_flag,p,end,acs) \
-       (enc)->get_case_fold_codes_by_str(case_fold_flag,p,end,acs)
-#define ONIGENC_STEP_BACK(enc,start,s,n) \
-        onigenc_step_back((enc),(start),(s),(n))
-
-#define ONIGENC_MBC_ENC_LEN(enc,p)             (enc)->mbc_enc_len(p)
-#define ONIGENC_MBC_MAXLEN(enc)               ((enc)->max_enc_len)
-#define ONIGENC_MBC_MAXLEN_DIST(enc)           ONIGENC_MBC_MAXLEN(enc)
-#define ONIGENC_MBC_MINLEN(enc)               ((enc)->min_enc_len)
-#define ONIGENC_IS_MBC_NEWLINE(enc,p,end)      (enc)->is_mbc_newline((p),(end))
-#define ONIGENC_MBC_TO_CODE(enc,p,end)         (enc)->mbc_to_code((p),(end))
-#define ONIGENC_CODE_TO_MBCLEN(enc,code)       (enc)->code_to_mbclen(code)
-#define ONIGENC_CODE_TO_MBC(enc,code,buf)      (enc)->code_to_mbc(code,buf)
-#define ONIGENC_PROPERTY_NAME_TO_CTYPE(enc,p,end) \
-  (enc)->property_name_to_ctype(enc,p,end)
-
-#define ONIGENC_IS_CODE_CTYPE(enc,code,ctype)  (enc)->is_code_ctype(code,ctype)
-
-#define ONIGENC_IS_CODE_NEWLINE(enc,code) \
-        ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_NEWLINE)
-#define ONIGENC_IS_CODE_GRAPH(enc,code) \
-        ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_GRAPH)
-#define ONIGENC_IS_CODE_PRINT(enc,code) \
-        ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_PRINT)
-#define ONIGENC_IS_CODE_ALNUM(enc,code) \
-        ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_ALNUM)
-#define ONIGENC_IS_CODE_ALPHA(enc,code) \
-        ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_ALPHA)
-#define ONIGENC_IS_CODE_LOWER(enc,code) \
-        ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_LOWER)
-#define ONIGENC_IS_CODE_UPPER(enc,code) \
-        ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_UPPER)
-#define ONIGENC_IS_CODE_CNTRL(enc,code) \
-        ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_CNTRL)
-#define ONIGENC_IS_CODE_PUNCT(enc,code) \
-        ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_PUNCT)
-#define ONIGENC_IS_CODE_SPACE(enc,code) \
-        ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_SPACE)
-#define ONIGENC_IS_CODE_BLANK(enc,code) \
-        ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_BLANK)
-#define ONIGENC_IS_CODE_DIGIT(enc,code) \
-        ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_DIGIT)
-#define ONIGENC_IS_CODE_XDIGIT(enc,code) \
-        ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_XDIGIT)
-#define ONIGENC_IS_CODE_WORD(enc,code) \
-        ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_WORD)
-
-#define ONIGENC_GET_CTYPE_CODE_RANGE(enc,ctype,sbout,ranges) \
-        (enc)->get_ctype_code_range(ctype,sbout,ranges)
-
-ONIG_EXTERN
-OnigUChar* onigenc_step_back P_((OnigEncoding enc, const OnigUChar* start, const OnigUChar* s, int n));
-
-
-/* encoding API */
-ONIG_EXTERN
-int onigenc_init P_((void));
-ONIG_EXTERN
-int onigenc_set_default_encoding P_((OnigEncoding enc));
-ONIG_EXTERN
-OnigEncoding onigenc_get_default_encoding P_((void));
-ONIG_EXTERN
-void  onigenc_set_default_caseconv_table P_((const OnigUChar* table));
-ONIG_EXTERN
-OnigUChar* onigenc_get_right_adjust_char_head_with_prev P_((OnigEncoding enc, const OnigUChar* start, const OnigUChar* s, const OnigUChar** prev));
-ONIG_EXTERN
-OnigUChar* onigenc_get_prev_char_head P_((OnigEncoding enc, const OnigUChar* start, const OnigUChar* s));
-ONIG_EXTERN
-OnigUChar* onigenc_get_left_adjust_char_head P_((OnigEncoding enc, const OnigUChar* start, const OnigUChar* s));
-ONIG_EXTERN
-OnigUChar* onigenc_get_right_adjust_char_head P_((OnigEncoding enc, const OnigUChar* start, const OnigUChar* s));
-ONIG_EXTERN
-int onigenc_strlen P_((OnigEncoding enc, const OnigUChar* p, const OnigUChar* end));
-ONIG_EXTERN
-int onigenc_strlen_null P_((OnigEncoding enc, const OnigUChar* p));
-ONIG_EXTERN
-int onigenc_str_bytelen_null P_((OnigEncoding enc, const OnigUChar* p));
-
-
-
-/* PART: regular expression */
-
-/* config parameters */
-#define ONIG_NREGION                          10
-#define ONIG_MAX_BACKREF_NUM                1000
-#define ONIG_MAX_CAPTURE_GROUP_NUM         32767
-#define ONIG_MAX_REPEAT_NUM               100000
-#define ONIG_MAX_MULTI_BYTE_RANGES_NUM     10000
-/* constants */
-#define ONIG_MAX_ERROR_MESSAGE_LEN            90
-
-typedef unsigned int        OnigOptionType;
-
-#define ONIG_OPTION_DEFAULT            ONIG_OPTION_NONE
-
-/* options */
-#define ONIG_OPTION_NONE                 0U
-#define ONIG_OPTION_IGNORECASE           1U
-#define ONIG_OPTION_EXTEND               (ONIG_OPTION_IGNORECASE         << 1)
-#define ONIG_OPTION_MULTILINE            (ONIG_OPTION_EXTEND             << 1)
-#define ONIG_OPTION_DOTALL                ONIG_OPTION_MULTILINE
-#define ONIG_OPTION_SINGLELINE           (ONIG_OPTION_MULTILINE          << 1)
-#define ONIG_OPTION_FIND_LONGEST         (ONIG_OPTION_SINGLELINE         << 1)
-#define ONIG_OPTION_FIND_NOT_EMPTY       (ONIG_OPTION_FIND_LONGEST       << 1)
-#define ONIG_OPTION_NEGATE_SINGLELINE    (ONIG_OPTION_FIND_NOT_EMPTY     << 1)
-#define ONIG_OPTION_DONT_CAPTURE_GROUP   (ONIG_OPTION_NEGATE_SINGLELINE  << 1)
-#define ONIG_OPTION_CAPTURE_GROUP        (ONIG_OPTION_DONT_CAPTURE_GROUP << 1)
-/* options (search time) */
-#define ONIG_OPTION_NOTBOL               (ONIG_OPTION_CAPTURE_GROUP << 1)
-#define ONIG_OPTION_NOTEOL               (ONIG_OPTION_NOTBOL << 1)
-#define ONIG_OPTION_POSIX_REGION         (ONIG_OPTION_NOTEOL << 1)
-/* options (ctype range) */
-#define ONIG_OPTION_ASCII_RANGE          (ONIG_OPTION_POSIX_REGION << 1)
-#define ONIG_OPTION_POSIX_BRACKET_ALL_RANGE (ONIG_OPTION_ASCII_RANGE << 1)
-#define ONIG_OPTION_WORD_BOUND_ALL_RANGE    (ONIG_OPTION_POSIX_BRACKET_ALL_RANGE << 1)
-/* options (newline) */
-#define ONIG_OPTION_NEWLINE_CRLF         (ONIG_OPTION_WORD_BOUND_ALL_RANGE << 1)
-#define ONIG_OPTION_NOTBOS               (ONIG_OPTION_NEWLINE_CRLF << 1)
-#define ONIG_OPTION_NOTEOS               (ONIG_OPTION_NOTBOS << 1)
-#define ONIG_OPTION_MAXBIT               ONIG_OPTION_NOTEOS  /* limit */
-
-#define ONIG_OPTION_ON(options,regopt)      ((options) |= (regopt))
-#define ONIG_OPTION_OFF(options,regopt)     ((options) &= ~(regopt))
-#define ONIG_IS_OPTION_ON(options,option)   ((options) & (option))
-
-/* syntax */
-typedef struct {
-  unsigned int   op;
-  unsigned int   op2;
-  unsigned int   behavior;
-  OnigOptionType options;   /* default option */
-  OnigMetaCharTableType meta_char_table;
-} OnigSyntaxType;
-
-ONIG_EXTERN OnigSyntaxType OnigSyntaxASIS;
-ONIG_EXTERN OnigSyntaxType OnigSyntaxPosixBasic;
-ONIG_EXTERN OnigSyntaxType OnigSyntaxPosixExtended;
-ONIG_EXTERN OnigSyntaxType OnigSyntaxEmacs;
-ONIG_EXTERN OnigSyntaxType OnigSyntaxGrep;
-ONIG_EXTERN OnigSyntaxType OnigSyntaxGnuRegex;
-ONIG_EXTERN OnigSyntaxType OnigSyntaxJava;
-ONIG_EXTERN OnigSyntaxType OnigSyntaxPerl58;
-ONIG_EXTERN OnigSyntaxType OnigSyntaxPerl58_NG;
-ONIG_EXTERN OnigSyntaxType OnigSyntaxPerl;
-ONIG_EXTERN OnigSyntaxType OnigSyntaxRuby;
-ONIG_EXTERN OnigSyntaxType OnigSyntaxPython;
-
-/* predefined syntaxes (see regsyntax.c) */
-#define ONIG_SYNTAX_ASIS               (&OnigSyntaxASIS)
-#define ONIG_SYNTAX_POSIX_BASIC        (&OnigSyntaxPosixBasic)
-#define ONIG_SYNTAX_POSIX_EXTENDED     (&OnigSyntaxPosixExtended)
-#define ONIG_SYNTAX_EMACS              (&OnigSyntaxEmacs)
-#define ONIG_SYNTAX_GREP               (&OnigSyntaxGrep)
-#define ONIG_SYNTAX_GNU_REGEX          (&OnigSyntaxGnuRegex)
-#define ONIG_SYNTAX_JAVA               (&OnigSyntaxJava)
-#define ONIG_SYNTAX_PERL58             (&OnigSyntaxPerl58)
-#define ONIG_SYNTAX_PERL58_NG          (&OnigSyntaxPerl58_NG)
-#define ONIG_SYNTAX_PERL               (&OnigSyntaxPerl)
-#define ONIG_SYNTAX_RUBY               (&OnigSyntaxRuby)
-#define ONIG_SYNTAX_PYTHON             (&OnigSyntaxPython)
-
-/* default syntax */
-ONIG_EXTERN OnigSyntaxType*   OnigDefaultSyntax;
-#define ONIG_SYNTAX_DEFAULT   OnigDefaultSyntax
-
-/* syntax (operators) */
-#define ONIG_SYN_OP_VARIABLE_META_CHARACTERS    (1U<<0)
-#define ONIG_SYN_OP_DOT_ANYCHAR                 (1U<<1)   /* . */
-#define ONIG_SYN_OP_ASTERISK_ZERO_INF           (1U<<2)   /* * */
-#define ONIG_SYN_OP_ESC_ASTERISK_ZERO_INF       (1U<<3)
-#define ONIG_SYN_OP_PLUS_ONE_INF                (1U<<4)   /* + */
-#define ONIG_SYN_OP_ESC_PLUS_ONE_INF            (1U<<5)
-#define ONIG_SYN_OP_QMARK_ZERO_ONE              (1U<<6)   /* ? */
-#define ONIG_SYN_OP_ESC_QMARK_ZERO_ONE          (1U<<7)
-#define ONIG_SYN_OP_BRACE_INTERVAL              (1U<<8)   /* {lower,upper} */
-#define ONIG_SYN_OP_ESC_BRACE_INTERVAL          (1U<<9)   /* \{lower,upper\} */
-#define ONIG_SYN_OP_VBAR_ALT                    (1U<<10)   /* | */
-#define ONIG_SYN_OP_ESC_VBAR_ALT                (1U<<11)  /* \| */
-#define ONIG_SYN_OP_LPAREN_SUBEXP               (1U<<12)  /* (...)   */
-#define ONIG_SYN_OP_ESC_LPAREN_SUBEXP           (1U<<13)  /* \(...\) */
-#define ONIG_SYN_OP_ESC_AZ_BUF_ANCHOR           (1U<<14)  /* \A, \Z, \z */
-#define ONIG_SYN_OP_ESC_CAPITAL_G_BEGIN_ANCHOR  (1U<<15)  /* \G     */
-#define ONIG_SYN_OP_DECIMAL_BACKREF             (1U<<16)  /* \num   */
-#define ONIG_SYN_OP_BRACKET_CC                  (1U<<17)  /* [...]  */
-#define ONIG_SYN_OP_ESC_W_WORD                  (1U<<18)  /* \w, \W */
-#define ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END     (1U<<19)  /* \<. \> */
-#define ONIG_SYN_OP_ESC_B_WORD_BOUND            (1U<<20)  /* \b, \B */
-#define ONIG_SYN_OP_ESC_S_WHITE_SPACE           (1U<<21)  /* \s, \S */
-#define ONIG_SYN_OP_ESC_D_DIGIT                 (1U<<22)  /* \d, \D */
-#define ONIG_SYN_OP_LINE_ANCHOR                 (1U<<23)  /* ^, $   */
-#define ONIG_SYN_OP_POSIX_BRACKET               (1U<<24)  /* [:xxxx:] */
-#define ONIG_SYN_OP_QMARK_NON_GREEDY            (1U<<25)  /* ??,*?,+?,{n,m}? */
-#define ONIG_SYN_OP_ESC_CONTROL_CHARS           (1U<<26)  /* \n,\r,\t,\a ... */
-#define ONIG_SYN_OP_ESC_C_CONTROL               (1U<<27)  /* \cx  */
-#define ONIG_SYN_OP_ESC_OCTAL3                  (1U<<28)  /* \OOO */
-#define ONIG_SYN_OP_ESC_X_HEX2                  (1U<<29)  /* \xHH */
-#define ONIG_SYN_OP_ESC_X_BRACE_HEX8            (1U<<30)  /* \x{7HHHHHHH} */
-#define ONIG_SYN_OP_ESC_O_BRACE_OCTAL           (1U<<31)  /* \o{OOO} */ /* NOTIMPL */
-
-#define ONIG_SYN_OP2_ESC_CAPITAL_Q_QUOTE        (1U<<0)  /* \Q...\E */
-#define ONIG_SYN_OP2_QMARK_GROUP_EFFECT         (1U<<1)  /* (?...) */
-#define ONIG_SYN_OP2_OPTION_PERL                (1U<<2)  /* (?imsxadlu), (?-imsx), (?^imsxalu) */
-#define ONIG_SYN_OP2_OPTION_RUBY                (1U<<3)  /* (?imxadu), (?-imx)  */
-#define ONIG_SYN_OP2_PLUS_POSSESSIVE_REPEAT     (1U<<4)  /* ?+,*+,++ */
-#define ONIG_SYN_OP2_PLUS_POSSESSIVE_INTERVAL   (1U<<5)  /* {n,m}+   */
-#define ONIG_SYN_OP2_CCLASS_SET_OP              (1U<<6)  /* [...&&..[..]..] */
-#define ONIG_SYN_OP2_QMARK_LT_NAMED_GROUP       (1U<<7)  /* (?<name>...) */
-#define ONIG_SYN_OP2_ESC_K_NAMED_BACKREF        (1U<<8)  /* \k<name> */
-#define ONIG_SYN_OP2_ESC_G_SUBEXP_CALL          (1U<<9)  /* \g<name>, \g<n> */
-#define ONIG_SYN_OP2_ATMARK_CAPTURE_HISTORY     (1U<<10) /* (?@..),(?@<x>..) */
-#define ONIG_SYN_OP2_ESC_CAPITAL_C_BAR_CONTROL  (1U<<11) /* \C-x */
-#define ONIG_SYN_OP2_ESC_CAPITAL_M_BAR_META     (1U<<12) /* \M-x */
-#define ONIG_SYN_OP2_ESC_V_VTAB                 (1U<<13) /* \v as VTAB */
-#define ONIG_SYN_OP2_ESC_U_HEX4                 (1U<<14) /* \uHHHH */
-#define ONIG_SYN_OP2_ESC_GNU_BUF_ANCHOR         (1U<<15) /* \`, \' */
-#define ONIG_SYN_OP2_ESC_P_BRACE_CHAR_PROPERTY  (1U<<16) /* \p{...}, \P{...} */
-#define ONIG_SYN_OP2_ESC_P_BRACE_CIRCUMFLEX_NOT (1U<<17) /* \p{^..}, \P{^..} */
-/* #define ONIG_SYN_OP2_CHAR_PROPERTY_PREFIX_IS (1U<<18) */
-#define ONIG_SYN_OP2_ESC_H_XDIGIT               (1U<<19) /* \h, \H */
-#define ONIG_SYN_OP2_INEFFECTIVE_ESCAPE         (1U<<20) /* \ */
-#define ONIG_SYN_OP2_ESC_CAPITAL_R_LINEBREAK    (1U<<21) /* \R as (?>\x0D\x0A|[\x0A-\x0D\x{85}\x{2028}\x{2029}]) */
-#define ONIG_SYN_OP2_ESC_CAPITAL_X_EXTENDED_GRAPHEME_CLUSTER (1U<<22) /* \X as (?>\P{M}\p{M}*) */
-#define ONIG_SYN_OP2_ESC_V_VERTICAL_WHITESPACE   (1U<<23) /* \v, \V -- Perl */ /* NOTIMPL */
-#define ONIG_SYN_OP2_ESC_H_HORIZONTAL_WHITESPACE (1U<<24) /* \h, \H -- Perl */ /* NOTIMPL */
-#define ONIG_SYN_OP2_ESC_CAPITAL_K_KEEP         (1U<<25) /* \K */
-#define ONIG_SYN_OP2_ESC_G_BRACE_BACKREF        (1U<<26) /* \g{name}, \g{n} */
-#define ONIG_SYN_OP2_QMARK_SUBEXP_CALL          (1U<<27) /* (?&name), (?n), (?R), (?0) */
-#define ONIG_SYN_OP2_QMARK_VBAR_BRANCH_RESET    (1U<<28) /* (?|...) */         /* NOTIMPL */
-#define ONIG_SYN_OP2_QMARK_LPAREN_CONDITION     (1U<<29) /* (?(cond)yes...|no...) */
-#define ONIG_SYN_OP2_QMARK_CAPITAL_P_NAMED_GROUP (1U<<30) /* (?P<name>...), (?P=name), (?P>name) -- Python/PCRE */
-#define ONIG_SYN_OP2_OPTION_JAVA                (1U<<31) /* (?idmsux), (?-idmsux) */ /* NOTIMPL */
-
-/* syntax (behavior) */
-#define ONIG_SYN_CONTEXT_INDEP_ANCHORS           (1U<<31) /* not implemented */
-#define ONIG_SYN_CONTEXT_INDEP_REPEAT_OPS        (1U<<0)  /* ?, *, +, {n,m} */
-#define ONIG_SYN_CONTEXT_INVALID_REPEAT_OPS      (1U<<1)  /* error or ignore */
-#define ONIG_SYN_ALLOW_UNMATCHED_CLOSE_SUBEXP    (1U<<2)  /* ...)... */
-#define ONIG_SYN_ALLOW_INVALID_INTERVAL          (1U<<3)  /* {??? */
-#define ONIG_SYN_ALLOW_INTERVAL_LOW_ABBREV       (1U<<4)  /* {,n} => {0,n} */
-#define ONIG_SYN_STRICT_CHECK_BACKREF            (1U<<5)  /* /(\1)/,/\1()/ ..*/
-#define ONIG_SYN_DIFFERENT_LEN_ALT_LOOK_BEHIND   (1U<<6)  /* (?<=a|bc) */
-#define ONIG_SYN_CAPTURE_ONLY_NAMED_GROUP        (1U<<7)  /* see doc/RE */
-#define ONIG_SYN_ALLOW_MULTIPLEX_DEFINITION_NAME (1U<<8)  /* (?<x>)(?<x>) */
-#define ONIG_SYN_FIXED_INTERVAL_IS_GREEDY_ONLY   (1U<<9)  /* a{n}?=(?:a{n})? */
-#define ONIG_SYN_ALLOW_MULTIPLEX_DEFINITION_NAME_CALL (1U<<10)  /* (?<x>)(?<x>)(?&x) */
-
-/* syntax (behavior) in char class [...] */
-#define ONIG_SYN_NOT_NEWLINE_IN_NEGATIVE_CC      (1U<<20) /* [^...] */
-#define ONIG_SYN_BACKSLASH_ESCAPE_IN_CC          (1U<<21) /* [..\w..] etc.. */
-#define ONIG_SYN_ALLOW_EMPTY_RANGE_IN_CC         (1U<<22)
-#define ONIG_SYN_ALLOW_DOUBLE_RANGE_OP_IN_CC     (1U<<23) /* [0-9-a]=[0-9\-a] */
-/* syntax (behavior) warning */
-#define ONIG_SYN_WARN_CC_OP_NOT_ESCAPED          (1U<<24) /* [,-,] */
-#define ONIG_SYN_WARN_REDUNDANT_NESTED_REPEAT    (1U<<25) /* (?:a*)+ */
-
-/* meta character specifiers (onig_set_meta_char()) */
-#define ONIG_META_CHAR_ESCAPE               0
-#define ONIG_META_CHAR_ANYCHAR              1
-#define ONIG_META_CHAR_ANYTIME              2
-#define ONIG_META_CHAR_ZERO_OR_ONE_TIME     3
-#define ONIG_META_CHAR_ONE_OR_MORE_TIME     4
-#define ONIG_META_CHAR_ANYCHAR_ANYTIME      5
-
-#define ONIG_INEFFECTIVE_META_CHAR          0
-
-/* error codes */
-#define ONIG_IS_PATTERN_ERROR(ecode)   ((ecode) <= -100 && (ecode) > -1000)
-/* normal return */
-#define ONIG_NORMAL                                            0
-#define ONIG_MISMATCH                                         -1
-#define ONIG_NO_SUPPORT_CONFIG                                -2
-
-/* internal error */
-#define ONIGERR_MEMORY                                         -5
-#define ONIGERR_TYPE_BUG                                       -6
-#define ONIGERR_PARSER_BUG                                    -11
-#define ONIGERR_STACK_BUG                                     -12
-#define ONIGERR_UNDEFINED_BYTECODE                            -13
-#define ONIGERR_UNEXPECTED_BYTECODE                           -14
-#define ONIGERR_MATCH_STACK_LIMIT_OVER                        -15
-#define ONIGERR_DEFAULT_ENCODING_IS_NOT_SET                   -21
-#define ONIGERR_SPECIFIED_ENCODING_CANT_CONVERT_TO_WIDE_CHAR  -22
-/* general error */
-#define ONIGERR_INVALID_ARGUMENT                              -30
-/* syntax error */
-#define ONIGERR_END_PATTERN_AT_LEFT_BRACE                    -100
-#define ONIGERR_END_PATTERN_AT_LEFT_BRACKET                  -101
-#define ONIGERR_EMPTY_CHAR_CLASS                             -102
-#define ONIGERR_PREMATURE_END_OF_CHAR_CLASS                  -103
-#define ONIGERR_END_PATTERN_AT_ESCAPE                        -104
-#define ONIGERR_END_PATTERN_AT_META                          -105
-#define ONIGERR_END_PATTERN_AT_CONTROL                       -106
-#define ONIGERR_META_CODE_SYNTAX                             -108
-#define ONIGERR_CONTROL_CODE_SYNTAX                          -109
-#define ONIGERR_CHAR_CLASS_VALUE_AT_END_OF_RANGE             -110
-#define ONIGERR_CHAR_CLASS_VALUE_AT_START_OF_RANGE           -111
-#define ONIGERR_UNMATCHED_RANGE_SPECIFIER_IN_CHAR_CLASS      -112
-#define ONIGERR_TARGET_OF_REPEAT_OPERATOR_NOT_SPECIFIED      -113
-#define ONIGERR_TARGET_OF_REPEAT_OPERATOR_INVALID            -114
-#define ONIGERR_NESTED_REPEAT_OPERATOR                       -115
-#define ONIGERR_UNMATCHED_CLOSE_PARENTHESIS                  -116
-#define ONIGERR_END_PATTERN_WITH_UNMATCHED_PARENTHESIS       -117
-#define ONIGERR_END_PATTERN_IN_GROUP                         -118
-#define ONIGERR_UNDEFINED_GROUP_OPTION                       -119
-#define ONIGERR_INVALID_POSIX_BRACKET_TYPE                   -121
-#define ONIGERR_INVALID_LOOK_BEHIND_PATTERN                  -122
-#define ONIGERR_INVALID_REPEAT_RANGE_PATTERN                 -123
-#define ONIGERR_INVALID_CONDITION_PATTERN                    -124
-/* values error (syntax error) */
-#define ONIGERR_TOO_BIG_NUMBER                               -200
-#define ONIGERR_TOO_BIG_NUMBER_FOR_REPEAT_RANGE              -201
-#define ONIGERR_UPPER_SMALLER_THAN_LOWER_IN_REPEAT_RANGE     -202
-#define ONIGERR_EMPTY_RANGE_IN_CHAR_CLASS                    -203
-#define ONIGERR_MISMATCH_CODE_LENGTH_IN_CLASS_RANGE          -204
-#define ONIGERR_TOO_MANY_MULTI_BYTE_RANGES                   -205
-#define ONIGERR_TOO_SHORT_MULTI_BYTE_STRING                  -206
-#define ONIGERR_TOO_BIG_BACKREF_NUMBER                       -207
-#define ONIGERR_INVALID_BACKREF                              -208
-#define ONIGERR_NUMBERED_BACKREF_OR_CALL_NOT_ALLOWED         -209
-#define ONIGERR_TOO_SHORT_DIGITS                             -210
-#define ONIGERR_TOO_LONG_WIDE_CHAR_VALUE                     -212
-#define ONIGERR_EMPTY_GROUP_NAME                             -214
-#define ONIGERR_INVALID_GROUP_NAME                           -215
-#define ONIGERR_INVALID_CHAR_IN_GROUP_NAME                   -216
-#define ONIGERR_UNDEFINED_NAME_REFERENCE                     -217
-#define ONIGERR_UNDEFINED_GROUP_REFERENCE                    -218
-#define ONIGERR_MULTIPLEX_DEFINED_NAME                       -219
-#define ONIGERR_MULTIPLEX_DEFINITION_NAME_CALL               -220
-#define ONIGERR_NEVER_ENDING_RECURSION                       -221
-#define ONIGERR_GROUP_NUMBER_OVER_FOR_CAPTURE_HISTORY        -222
-#define ONIGERR_INVALID_CHAR_PROPERTY_NAME                   -223
-#define ONIGERR_TOO_MANY_CAPTURE_GROUPS                      -224
-#define ONIGERR_INVALID_CODE_POINT_VALUE                     -400
-#define ONIGERR_INVALID_WIDE_CHAR_VALUE                      -400
-#define ONIGERR_TOO_BIG_WIDE_CHAR_VALUE                      -401
-#define ONIGERR_NOT_SUPPORTED_ENCODING_COMBINATION           -402
-#define ONIGERR_INVALID_COMBINATION_OF_OPTIONS               -403
-
-/* errors related to thread */
-#define ONIGERR_OVER_THREAD_PASS_LIMIT_COUNT                -1001
-
-
-/* must be smaller than BIT_STATUS_BITS_NUM (unsigned int * 8) */
-#define ONIG_MAX_CAPTURE_HISTORY_GROUP   31
-#define ONIG_IS_CAPTURE_HISTORY_GROUP(r, i) \
-  ((i) <= ONIG_MAX_CAPTURE_HISTORY_GROUP && (r)->list && (r)->list[i])
-
-typedef struct OnigCaptureTreeNodeStruct {
-  int group;   /* group number */
-  OnigPosition beg;
-  OnigPosition end;
-  int allocated;
-  int num_childs;
-  struct OnigCaptureTreeNodeStruct** childs;
-} OnigCaptureTreeNode;
-
-/* match result region type */
-struct re_registers {
-  int  allocated;
-  int  num_regs;
-  OnigPosition* beg;
-  OnigPosition* end;
-  /* extended */
-  OnigCaptureTreeNode* history_root;  /* capture history tree root */
-};
-
-/* capture tree traverse */
-#define ONIG_TRAVERSE_CALLBACK_AT_FIRST   1
-#define ONIG_TRAVERSE_CALLBACK_AT_LAST    2
-#define ONIG_TRAVERSE_CALLBACK_AT_BOTH \
-  ( ONIG_TRAVERSE_CALLBACK_AT_FIRST | ONIG_TRAVERSE_CALLBACK_AT_LAST )
-
-
-#define ONIG_REGION_NOTPOS            -1
-
-typedef struct re_registers   OnigRegion;
-
-typedef struct {
-  OnigEncoding enc;
-  OnigUChar* par;
-  OnigUChar* par_end;
-} OnigErrorInfo;
-
-typedef struct {
-  int lower;
-  int upper;
-} OnigRepeatRange;
-
-typedef void (*OnigWarnFunc) P_((const char* s));
-extern void onig_null_warn P_((const char* s));
-#define ONIG_NULL_WARN       onig_null_warn
-
-#define ONIG_CHAR_TABLE_SIZE   256
-
-/* regex_t state */
-#define ONIG_STATE_NORMAL              0
-#define ONIG_STATE_SEARCHING           1
-#define ONIG_STATE_COMPILING          -1
-#define ONIG_STATE_MODIFY             -2
-
-#define ONIG_STATE(reg) \
-  ((reg)->state > 0 ? ONIG_STATE_SEARCHING : (reg)->state)
-
-typedef struct re_pattern_buffer {
-  /* common members of BBuf(bytes-buffer) */
-  unsigned char* p;         /* compiled pattern */
-  unsigned int used;        /* used space for p */
-  unsigned int alloc;       /* allocated space for p */
-
-  int state;                     /* normal, searching, compiling */
-  int num_mem;                   /* used memory(...) num counted from 1 */
-  int num_repeat;                /* OP_REPEAT/OP_REPEAT_NG id-counter */
-  int num_null_check;            /* OP_NULL_CHECK_START/END id counter */
-  int num_comb_exp_check;        /* combination explosion check */
-  int num_call;                  /* number of subexp call */
-  unsigned int capture_history;  /* (?@...) flag (1-31) */
-  unsigned int bt_mem_start;     /* need backtrack flag */
-  unsigned int bt_mem_end;       /* need backtrack flag */
-  int stack_pop_level;
-  int repeat_range_alloc;
-  OnigRepeatRange* repeat_range;
-
-  OnigEncoding      enc;
-  OnigOptionType    options;
-  OnigSyntaxType*   syntax;
-  OnigCaseFoldType  case_fold_flag;
-  void*             name_table;
-
-  /* optimization info (string search, char-map and anchors) */
-  int            optimize;          /* optimize flag */
-  int            threshold_len;     /* search str-length for apply optimize */
-  int            anchor;            /* BEGIN_BUF, BEGIN_POS, (SEMI_)END_BUF */
-  OnigDistance   anchor_dmin;       /* (SEMI_)END_BUF anchor distance */
-  OnigDistance   anchor_dmax;       /* (SEMI_)END_BUF anchor distance */
-  int            sub_anchor;        /* start-anchor for exact or map */
-  unsigned char *exact;
-  unsigned char *exact_end;
-  unsigned char  map[ONIG_CHAR_TABLE_SIZE]; /* used as BM skip or char-map */
-  int           *int_map;                   /* BM skip for exact_len > 255 */
-  int           *int_map_backward;          /* BM skip for backward search */
-  OnigDistance   dmin;                      /* min-distance of exact or map */
-  OnigDistance   dmax;                      /* max-distance of exact or map */
-
-  /* regex_t link chain */
-  struct re_pattern_buffer* chain;  /* escape compile-conflict */
-} OnigRegexType;
-
-typedef OnigRegexType*  OnigRegex;
-
-#ifndef ONIG_ESCAPE_REGEX_T_COLLISION
-  typedef OnigRegexType  regex_t;
-#endif
-
-
-typedef struct {
-  int             num_of_elements;
-  OnigEncoding    pattern_enc;
-  OnigEncoding    target_enc;
-  OnigSyntaxType* syntax;
-  OnigOptionType  option;
-  OnigCaseFoldType   case_fold_flag;
-} OnigCompileInfo;
-
-/* Oniguruma Native API */
-ONIG_EXTERN
-int onig_init P_((void));
-ONIG_EXTERN
-int onig_error_code_to_str PV_((OnigUChar* s, OnigPosition err_code, ...));
-ONIG_EXTERN
-void onig_set_warn_func P_((OnigWarnFunc f));
-ONIG_EXTERN
-void onig_set_verb_warn_func P_((OnigWarnFunc f));
-ONIG_EXTERN
-int onig_new P_((OnigRegex*, const OnigUChar* pattern, const OnigUChar* pattern_end, OnigOptionType option, OnigEncoding enc, OnigSyntaxType* syntax, OnigErrorInfo* einfo));
-ONIG_EXTERN
-int onig_reg_init P_((OnigRegex reg, OnigOptionType option, OnigCaseFoldType case_fold_flag, OnigEncoding enc, OnigSyntaxType* syntax));
-ONIG_EXTERN
-int onig_new_without_alloc P_((OnigRegex, const OnigUChar* pattern, const OnigUChar* pattern_end, OnigOptionType option, OnigEncoding enc, OnigSyntaxType* syntax, OnigErrorInfo* einfo));
-ONIG_EXTERN
-int onig_new_deluxe P_((OnigRegex* reg, const OnigUChar* pattern, const OnigUChar* pattern_end, OnigCompileInfo* ci, OnigErrorInfo* einfo));
-ONIG_EXTERN
-void onig_free P_((OnigRegex));
-ONIG_EXTERN
-void onig_free_body P_((OnigRegex));
-ONIG_EXTERN
-int onig_recompile P_((OnigRegex, const OnigUChar* pattern, const OnigUChar* pattern_end, OnigOptionType option, OnigEncoding enc, OnigSyntaxType* syntax, OnigErrorInfo* einfo));
-ONIG_EXTERN
-int onig_recompile_deluxe P_((OnigRegex reg, const OnigUChar* pattern, const OnigUChar* pattern_end, OnigCompileInfo* ci, OnigErrorInfo* einfo));
-ONIG_EXTERN
-OnigPosition onig_search P_((OnigRegex, const OnigUChar* str, const OnigUChar* end, const OnigUChar* start, const OnigUChar* range, OnigRegion* region, OnigOptionType option));
-ONIG_EXTERN
-OnigPosition onig_search_gpos P_((OnigRegex, const OnigUChar* str, const OnigUChar* end, const OnigUChar* global_pos, const OnigUChar* start, const OnigUChar* range, OnigRegion* region, OnigOptionType option));
-ONIG_EXTERN
-OnigPosition onig_match P_((OnigRegex, const OnigUChar* str, const OnigUChar* end, const OnigUChar* at, OnigRegion* region, OnigOptionType option));
-ONIG_EXTERN
-OnigRegion* onig_region_new P_((void));
-ONIG_EXTERN
-void onig_region_init P_((OnigRegion* region));
-ONIG_EXTERN
-void onig_region_free P_((OnigRegion* region, int free_self));
-ONIG_EXTERN
-void onig_region_copy P_((OnigRegion* to, OnigRegion* from));
-ONIG_EXTERN
-void onig_region_clear P_((OnigRegion* region));
-ONIG_EXTERN
-int onig_region_resize P_((OnigRegion* region, int n));
-ONIG_EXTERN
-int onig_region_set P_((OnigRegion* region, int at, int beg, int end));
-ONIG_EXTERN
-int onig_name_to_group_numbers P_((OnigRegex reg, const OnigUChar* name, const OnigUChar* name_end, int** nums));
-ONIG_EXTERN
-int onig_name_to_backref_number P_((OnigRegex reg, const OnigUChar* name, const OnigUChar* name_end, OnigRegion *region));
-ONIG_EXTERN
-int onig_foreach_name P_((OnigRegex reg, int (*func)(const OnigUChar*, const OnigUChar*,int,int*,OnigRegex,void*), void* arg));
-ONIG_EXTERN
-int onig_number_of_names P_((OnigRegex reg));
-ONIG_EXTERN
-int onig_number_of_captures P_((OnigRegex reg));
-ONIG_EXTERN
-int onig_number_of_capture_histories P_((OnigRegex reg));
-ONIG_EXTERN
-OnigCaptureTreeNode* onig_get_capture_tree P_((OnigRegion* region));
-ONIG_EXTERN
-int onig_capture_tree_traverse P_((OnigRegion* region, int at, int(*callback_func)(int,OnigPosition,OnigPosition,int,int,void*), void* arg));
-ONIG_EXTERN
-int onig_noname_group_capture_is_active P_((OnigRegex reg));
-ONIG_EXTERN
-OnigEncoding onig_get_encoding P_((OnigRegex reg));
-ONIG_EXTERN
-OnigOptionType onig_get_options P_((OnigRegex reg));
-ONIG_EXTERN
-OnigCaseFoldType onig_get_case_fold_flag P_((OnigRegex reg));
-ONIG_EXTERN
-OnigSyntaxType* onig_get_syntax P_((OnigRegex reg));
-ONIG_EXTERN
-int onig_set_default_syntax P_((OnigSyntaxType* syntax));
-ONIG_EXTERN
-void onig_copy_syntax P_((OnigSyntaxType* to, const OnigSyntaxType* from));
-ONIG_EXTERN
-unsigned int onig_get_syntax_op P_((OnigSyntaxType* syntax));
-ONIG_EXTERN
-unsigned int onig_get_syntax_op2 P_((OnigSyntaxType* syntax));
-ONIG_EXTERN
-unsigned int onig_get_syntax_behavior P_((OnigSyntaxType* syntax));
-ONIG_EXTERN
-OnigOptionType onig_get_syntax_options P_((OnigSyntaxType* syntax));
-ONIG_EXTERN
-void onig_set_syntax_op P_((OnigSyntaxType* syntax, unsigned int op));
-ONIG_EXTERN
-void onig_set_syntax_op2 P_((OnigSyntaxType* syntax, unsigned int op2));
-ONIG_EXTERN
-void onig_set_syntax_behavior P_((OnigSyntaxType* syntax, unsigned int behavior));
-ONIG_EXTERN
-void onig_set_syntax_options P_((OnigSyntaxType* syntax, OnigOptionType options));
-ONIG_EXTERN
-int onig_set_meta_char P_((OnigSyntaxType* syntax, unsigned int what, OnigCodePoint code));
-ONIG_EXTERN
-void onig_copy_encoding P_((OnigEncoding to, OnigEncoding from));
-ONIG_EXTERN
-OnigCaseFoldType onig_get_default_case_fold_flag P_((void));
-ONIG_EXTERN
-int onig_set_default_case_fold_flag P_((OnigCaseFoldType case_fold_flag));
-ONIG_EXTERN
-unsigned int onig_get_match_stack_limit_size P_((void));
-ONIG_EXTERN
-int onig_set_match_stack_limit_size P_((unsigned int size));
-ONIG_EXTERN
-int onig_end P_((void));
-ONIG_EXTERN
-const char* onig_version P_((void));
-ONIG_EXTERN
-const char* onig_copyright P_((void));
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* ONIGURUMA_H */
Index: EcnlProtoTool/trunk/onigmo-6.1.3/src/regcomp.c
===================================================================
--- EcnlProtoTool/trunk/onigmo-5.15.0/src/regcomp.c	(revision 321)
+++ EcnlProtoTool/trunk/onigmo-6.1.3/src/regcomp.c	(revision 331)
@@ -4,5 +4,5 @@
 /*-
  * Copyright (c) 2002-2013  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
- * Copyright (c) 2011-2014  K.Takata  <kentkt AT csc DOT jp>
+ * Copyright (c) 2011-2016  K.Takata  <kentkt AT csc DOT jp>
  * All rights reserved.
  *
@@ -31,13 +31,4 @@
 #include "regparse.h"
 
-#if defined(USE_MULTI_THREAD_SYSTEM) \
-  && defined(USE_DEFAULT_MULTI_THREAD_SYSTEM)
-#ifdef _WIN32
-CRITICAL_SECTION gOnigMutex;
-#else
-pthread_mutex_t gOnigMutex;
-#endif
-#endif
-
 OnigCaseFoldType OnigDefaultCaseFoldFlag = ONIGENC_CASE_FOLD_MIN;
 
@@ -264,4 +255,5 @@
 }
 
+#if 0
 static int
 add_pointer(regex_t* reg, void* addr)
@@ -272,4 +264,5 @@
   return 0;
 }
+#endif
 
 static int
@@ -483,5 +476,5 @@
 
   p = prev = sn->s;
-  prev_len = enclen(enc, p);
+  prev_len = enclen(enc, p, sn->end);
   p += prev_len;
   blen = prev_len;
@@ -489,5 +482,5 @@
 
   for (; p < sn->end; ) {
-    len = enclen(enc, p);
+    len = enclen(enc, p, sn->end);
     if (len == prev_len || ambig) {
       blen += len;
@@ -532,10 +525,10 @@
 
   p = prev = sn->s;
-  prev_len = enclen(enc, p);
+  prev_len = enclen(enc, p, end);
   p += prev_len;
   blen = prev_len;
 
   for (; p < end; ) {
-    len = enclen(enc, p);
+    len = enclen(enc, p, end);
     if (len == prev_len || ambig) {
       blen += len;
@@ -592,9 +585,4 @@
   int len;
 
-  if (IS_NCCLASS_SHARE(cc)) {
-    len = SIZE_OPCODE + SIZE_POINTER;
-    return len;
-  }
-
   if (IS_NULL(cc->mbuf)) {
     len = SIZE_OPCODE + SIZE_BITSET;
@@ -621,10 +609,4 @@
 {
   int r;
-
-  if (IS_NCCLASS_SHARE(cc)) {
-    add_opcode(reg, OP_CCLASS_NODE);
-    r = add_pointer(reg, cc);
-    return r;
-  }
 
   if (IS_NULL(cc->mbuf)) {
@@ -639,7 +621,7 @@
     if (ONIGENC_MBC_MINLEN(reg->enc) > 1 || bitset_is_empty(cc->bs)) {
       if (IS_NCCLASS_NOT(cc))
-        add_opcode(reg, OP_CCLASS_MB_NOT);
+	add_opcode(reg, OP_CCLASS_MB_NOT);
       else
-        add_opcode(reg, OP_CCLASS_MB);
+	add_opcode(reg, OP_CCLASS_MB);
 
       r = add_multi_byte_cclass(cc->mbuf, reg);
@@ -647,7 +629,7 @@
     else {
       if (IS_NCCLASS_NOT(cc))
-        add_opcode(reg, OP_CCLASS_MIX_NOT);
+	add_opcode(reg, OP_CCLASS_MIX_NOT);
       else
-        add_opcode(reg, OP_CCLASS_MIX);
+	add_opcode(reg, OP_CCLASS_MIX);
 
       r = add_bitset(reg, cc->bs);
@@ -761,7 +743,7 @@
     if (qn->greedy && infinite) {
       if (IS_NOT_NULL(qn->next_head_exact) && !CKN_ON)
-        return SIZE_OP_ANYCHAR_STAR_PEEK_NEXT + tlen * qn->lower + cklen;
+	return SIZE_OP_ANYCHAR_STAR_PEEK_NEXT + tlen * qn->lower + cklen;
       else
-        return SIZE_OP_ANYCHAR_STAR + tlen * qn->lower + cklen;
+	return SIZE_OP_ANYCHAR_STAR + tlen * qn->lower + cklen;
     }
   }
@@ -990,7 +972,7 @@
     if (qn->greedy && infinite) {
       if (IS_NOT_NULL(qn->next_head_exact))
-        return SIZE_OP_ANYCHAR_STAR_PEEK_NEXT + tlen * qn->lower;
+	return SIZE_OP_ANYCHAR_STAR_PEEK_NEXT + tlen * qn->lower;
       else
-        return SIZE_OP_ANYCHAR_STAR + tlen * qn->lower;
+	return SIZE_OP_ANYCHAR_STAR + tlen * qn->lower;
     }
   }
@@ -1011,7 +993,10 @@
 
     if (qn->greedy) {
+#ifdef USE_OP_PUSH_OR_JUMP_EXACT
       if (IS_NOT_NULL(qn->head_exact))
 	len += SIZE_OP_PUSH_OR_JUMP_EXACT1 + mod_tlen + SIZE_OP_JUMP;
-      else if (IS_NOT_NULL(qn->next_head_exact))
+      else
+#endif
+      if (IS_NOT_NULL(qn->next_head_exact))
 	len += SIZE_OP_PUSH_IF_PEEK_NEXT + mod_tlen + SIZE_OP_JUMP;
       else
@@ -1079,7 +1064,10 @@
     if (qn->lower == 1 && tlen > QUANTIFIER_EXPAND_LIMIT_SIZE) {
       if (qn->greedy) {
+#ifdef USE_OP_PUSH_OR_JUMP_EXACT
 	if (IS_NOT_NULL(qn->head_exact))
 	  r = add_opcode_rel_addr(reg, OP_JUMP, SIZE_OP_PUSH_OR_JUMP_EXACT1);
-	else if (IS_NOT_NULL(qn->next_head_exact))
+	else
+#endif
+	if (IS_NOT_NULL(qn->next_head_exact))
 	  r = add_opcode_rel_addr(reg, OP_JUMP, SIZE_OP_PUSH_IF_PEEK_NEXT);
 	else
@@ -1097,4 +1085,5 @@
 
     if (qn->greedy) {
+#ifdef USE_OP_PUSH_OR_JUMP_EXACT
       if (IS_NOT_NULL(qn->head_exact)) {
 	r = add_opcode_rel_addr(reg, OP_PUSH_OR_JUMP_EXACT1,
@@ -1107,5 +1096,7 @@
 	-(mod_tlen + (int )SIZE_OP_JUMP + (int )SIZE_OP_PUSH_OR_JUMP_EXACT1));
       }
-      else if (IS_NOT_NULL(qn->next_head_exact)) {
+      else
+#endif
+      if (IS_NOT_NULL(qn->next_head_exact)) {
 	r = add_opcode_rel_addr(reg, OP_PUSH_IF_PEEK_NEXT,
 				mod_tlen + SIZE_OP_JUMP);
@@ -1244,4 +1235,9 @@
 		? SIZE_OP_MEMORY_END_REC : SIZE_OP_MEMORY_END);
     }
+    else if (IS_ENCLOSE_RECURSION(node)) {
+      len = SIZE_OP_MEMORY_START_PUSH;
+      len += tlen + (BIT_STATUS_AT(reg->bt_mem_end, node->regnum)
+		     ? SIZE_OP_MEMORY_END_PUSH_REC : SIZE_OP_MEMORY_END_REC);
+    }
     else
 #endif
@@ -1289,4 +1285,8 @@
       return ONIGERR_PARSER_BUG;
     }
+    break;
+
+  case ENCLOSE_ABSENT:
+    len = SIZE_OP_PUSH_ABSENT_POS + SIZE_OP_ABSENT + tlen + SIZE_OP_ABSENT_END;
     break;
 
@@ -1355,4 +1355,12 @@
       r = add_opcode(reg, OP_RETURN);
     }
+    else if (IS_ENCLOSE_RECURSION(node)) {
+      if (BIT_STATUS_AT(reg->bt_mem_end, node->regnum))
+	r = add_opcode(reg, OP_MEMORY_END_PUSH_REC);
+      else
+	r = add_opcode(reg, OP_MEMORY_END_REC);
+      if (r) return r;
+      r = add_mem_num(reg, node->regnum);
+    }
     else
 #endif
@@ -1427,4 +1435,17 @@
     break;
 
+  case ENCLOSE_ABSENT:
+    len = compile_length_tree(node->target, reg);
+    if (len < 0) return len;
+
+    r = add_opcode(reg, OP_PUSH_ABSENT_POS);
+    if (r) return r;
+    r = add_opcode_rel_addr(reg, OP_ABSENT, len + SIZE_OP_ABSENT_END);
+    if (r) return r;
+    r = compile_tree(node->target, reg);
+    if (r) return r;
+    r = add_opcode(reg, OP_ABSENT_END);
+    break;
+
   default:
     return ONIGERR_TYPE_BUG;
@@ -1480,7 +1501,4 @@
   case ANCHOR_SEMI_END_BUF:   r = add_opcode(reg, OP_SEMI_END_BUF);   break;
   case ANCHOR_BEGIN_POSITION: r = add_opcode(reg, OP_BEGIN_POSITION); break;
-
-  /* used for implicit anchor optimization: /.*a/ ==> /(?:^|\G).*a/ */
-  case ANCHOR_ANYCHAR_STAR:   r = add_opcode(reg, OP_BEGIN_POS_OR_LINE); break;
 
   case ANCHOR_WORD_BOUND:
@@ -1590,8 +1608,8 @@
       len = 0;
       do {
-        r = compile_length_tree(NCAR(node), reg);
-        if (r < 0) return r;
-        len += r;
-        n++;
+	r = compile_length_tree(NCAR(node), reg);
+	if (r < 0) return r;
+	len += r;
+	n++;
       } while (IS_NOT_NULL(node = NCDR(node)));
       r = len;
@@ -1622,5 +1640,5 @@
 #ifdef USE_BACKREF_WITH_LEVEL
       if (IS_BACKREF_NEST_LEVEL(br)) {
-        r = SIZE_OPCODE + SIZE_OPTION + SIZE_LENGTH +
+	r = SIZE_OPCODE + SIZE_OPTION + SIZE_LENGTH +
             SIZE_LENGTH + (SIZE_MEMNUM * br->back_num);
       }
@@ -1786,10 +1804,10 @@
 	int* p;
 
-        if (IS_IGNORECASE(reg->options)) {
-          r = add_opcode(reg, OP_BACKREF_MULTI_IC);
-        }
-        else {
-          r = add_opcode(reg, OP_BACKREF_MULTI);
-        }
+	if (IS_IGNORECASE(reg->options)) {
+	  r = add_opcode(reg, OP_BACKREF_MULTI_IC);
+	}
+	else {
+	  r = add_opcode(reg, OP_BACKREF_MULTI);
+	}
 	if (r) return r;
 
@@ -1885,15 +1903,6 @@
 
   case NT_ANCHOR:
-    {
-      AnchorNode* an = NANCHOR(node);
-      switch (an->type) {
-      case ANCHOR_PREC_READ:
-      case ANCHOR_PREC_READ_NOT:
-      case ANCHOR_LOOK_BEHIND:
-      case ANCHOR_LOOK_BEHIND_NOT:
-	r = noname_disable_map(&(an->target), map, counter);
-	break;
-      }
-    }
+    if (NANCHOR(node)->target)
+      r = noname_disable_map(&(NANCHOR(node)->target), map, counter);
     break;
 
@@ -1952,5 +1961,5 @@
       EncloseNode* en = NENCLOSE(node);
       if (en->type == ENCLOSE_CONDITION)
-        en->regnum = map[en->regnum].new_val;
+	en->regnum = map[en->regnum].new_val;
       r = renumber_by_map(en->target, map);
     }
@@ -1962,15 +1971,6 @@
 
   case NT_ANCHOR:
-    {
-      AnchorNode* an = NANCHOR(node);
-      switch (an->type) {
-      case ANCHOR_PREC_READ:
-      case ANCHOR_PREC_READ_NOT:
-      case ANCHOR_LOOK_BEHIND:
-      case ANCHOR_LOOK_BEHIND_NOT:
-	r = renumber_by_map(an->target, map);
-	break;
-      }
-    }
+    if (NANCHOR(node)->target)
+      r = renumber_by_map(NANCHOR(node)->target, map);
     break;
 
@@ -2006,4 +2006,9 @@
     break;
 
+  case NT_ANCHOR:
+    if (NANCHOR(node)->target)
+      r = numbered_ref_check(NANCHOR(node)->target);
+    break;
+
   default:
     break;
@@ -2014,9 +2019,11 @@
 
 static int
-disable_noname_group_capture_(Node** root, regex_t* reg, ScanEnv* env, GroupNumRemap* map)
+disable_noname_group_capture(Node** root, regex_t* reg, ScanEnv* env)
 {
   int r, i, pos, counter;
   BitStatusType loc;
-
+  GroupNumRemap* map;
+
+  map = (GroupNumRemap* )xalloca(sizeof(GroupNumRemap) * (env->num_mem + 1));
   CHECK_NULL_RETURN_MEMERR(map);
   for (i = 1; i <= env->num_mem; i++) {
@@ -2049,13 +2056,4 @@
 
   return onig_renumber_name_table(reg, map);
-}
-
-static int
-disable_noname_group_capture(Node** root, regex_t* reg, ScanEnv* env)
-{
-	GroupNumRemap* map = (GroupNumRemap*)xmalloc(sizeof(GroupNumRemap) * (env->num_mem + 1));
-	int ret = disable_noname_group_capture_(root, reg, env, map);
-	xfree(map);
-	return ret;
 }
 #endif /* USE_NAMED_GROUP */
@@ -2099,5 +2097,5 @@
     break;
 
-#ifdef USE_SUBEXP_CALL
+# ifdef USE_SUBEXP_CALL
   case NT_CALL:
     if (IS_CALL_RECURSION(NCALL(node))) {
@@ -2107,5 +2105,5 @@
       r = quantifiers_memory_node_info(NCALL(node)->target);
     break;
-#endif
+# endif
 
   case NT_QTFR:
@@ -2129,4 +2127,5 @@
       case ENCLOSE_STOP_BACKTRACK:
       case ENCLOSE_CONDITION:
+      case ENCLOSE_ABSENT:
 	r = quantifiers_memory_node_info(en->target);
 	break;
@@ -2246,20 +2245,28 @@
       switch (en->type) {
       case ENCLOSE_MEMORY:
-#ifdef USE_SUBEXP_CALL
-	if (IS_ENCLOSE_MIN_FIXED(en))
-	  *min = en->min_len;
-	else {
-	  r = get_min_match_length(en->target, min, env);
-	  if (r == 0) {
-	    en->min_len = *min;
-	    SET_ENCLOSE_STATUS(node, NST_MIN_FIXED);
+        if (IS_ENCLOSE_MIN_FIXED(en))
+          *min = en->min_len;
+        else {
+	  if (IS_ENCLOSE_MARK1(NENCLOSE(node)))
+	    *min = 0;  /* recursive */
+	  else {
+	    SET_ENCLOSE_STATUS(node, NST_MARK1);
+	    r = get_min_match_length(en->target, min, env);
+	    CLEAR_ENCLOSE_STATUS(node, NST_MARK1);
+	    if (r == 0) {
+	      en->min_len = *min;
+	      SET_ENCLOSE_STATUS(node, NST_MIN_FIXED);
+	    }
 	  }
-	}
-	break;
-#endif
+        }
+        break;
+
       case ENCLOSE_OPTION:
       case ENCLOSE_STOP_BACKTRACK:
       case ENCLOSE_CONDITION:
 	r = get_min_match_length(en->target, min, env);
+	break;
+
+      case ENCLOSE_ABSENT:
 	break;
       }
@@ -2364,20 +2371,28 @@
       switch (en->type) {
       case ENCLOSE_MEMORY:
-#ifdef USE_SUBEXP_CALL
 	if (IS_ENCLOSE_MAX_FIXED(en))
 	  *max = en->max_len;
 	else {
-	  r = get_max_match_length(en->target, max, env);
-	  if (r == 0) {
-	    en->max_len = *max;
-	    SET_ENCLOSE_STATUS(node, NST_MAX_FIXED);
+	  if (IS_ENCLOSE_MARK1(NENCLOSE(node)))
+	    *max = ONIG_INFINITE_DISTANCE;
+	  else {
+	    SET_ENCLOSE_STATUS(node, NST_MARK1);
+	    r = get_max_match_length(en->target, max, env);
+	    CLEAR_ENCLOSE_STATUS(node, NST_MARK1);
+	    if (r == 0) {
+	      en->max_len = *max;
+	      SET_ENCLOSE_STATUS(node, NST_MAX_FIXED);
+	    }
 	  }
 	}
 	break;
-#endif
+
       case ENCLOSE_OPTION:
       case ENCLOSE_STOP_BACKTRACK:
       case ENCLOSE_CONDITION:
 	r = get_max_match_length(en->target, max, env);
+	break;
+
+      case ENCLOSE_ABSENT:
 	break;
       }
@@ -2445,5 +2460,5 @@
       UChar *s = sn->s;
       while (s < sn->end) {
-	s += enclen(reg->enc, s);
+	s += enclen(reg->enc, s, sn->end);
 	(*len)++;
       }
@@ -2504,4 +2519,5 @@
 	r = get_char_length_tree1(en->target, reg, len, level);
 	break;
+      case ENCLOSE_ABSENT:
       default:
 	break;
@@ -2630,8 +2646,8 @@
 	    v = BITSET_AT(xc->bs, i);
 	    if ((v != 0 && !IS_NCCLASS_NOT(xc)) ||
-                (v == 0 && IS_NCCLASS_NOT(xc))) {
+		(v == 0 && IS_NCCLASS_NOT(xc))) {
 	      v = BITSET_AT(yc->bs, i);
 	      if ((v != 0 && !IS_NCCLASS_NOT(yc)) ||
-                  (v == 0 && IS_NCCLASS_NOT(yc)))
+		  (v == 0 && IS_NCCLASS_NOT(yc)))
 		return 0;
 	    }
@@ -2683,22 +2699,22 @@
 
       case NT_CCLASS:
-        {
-          CClassNode* cc = NCCLASS(y);
-
-          code = ONIGENC_MBC_TO_CODE(reg->enc, xs->s,
-                                     xs->s + ONIGENC_MBC_MAXLEN(reg->enc));
-          return (onig_is_code_in_cc(reg->enc, code, cc) != 0 ? 0 : 1);
-        }
-        break;
+	{
+	  CClassNode* cc = NCCLASS(y);
+
+	  code = ONIGENC_MBC_TO_CODE(reg->enc, xs->s,
+				     xs->s + ONIGENC_MBC_MAXLEN(reg->enc));
+	  return (onig_is_code_in_cc(reg->enc, code, cc) != 0 ? 0 : 1);
+	}
+	break;
 
       case NT_STR:
-        {
-          UChar *q;
-          StrNode* ys = NSTR(y);
-          len = NSTRING_LEN(x);
-          if (len > NSTRING_LEN(y)) len = NSTRING_LEN(y);
-          if (NSTRING_IS_AMBIG(x) || NSTRING_IS_AMBIG(y)) {
-            /* tiny version */
-            return 0;
+	{
+	  UChar *q;
+	  StrNode* ys = NSTR(y);
+	  len = NSTRING_LEN(x);
+	  if (len > NSTRING_LEN(y)) len = NSTRING_LEN(y);
+	  if (NSTRING_IS_AMBIG(x) || NSTRING_IS_AMBIG(y)) {
+	    /* tiny version */
+	    return 0;
 	  }
 	  else {
@@ -2711,5 +2727,5 @@
 
       default:
-        break;
+	break;
       }
     }
@@ -2768,7 +2784,9 @@
       QtfrNode* qn = NQTFR(node);
       if (qn->lower > 0) {
+#ifdef USE_OP_PUSH_OR_JUMP_EXACT
 	if (IS_NOT_NULL(qn->head_exact))
 	  n = qn->head_exact;
 	else
+#endif
 	  n = get_head_value_node(qn->target, exact, reg);
       }
@@ -2795,4 +2813,7 @@
 	n = get_head_value_node(en->target, exact, reg);
 	break;
+
+      case ENCLOSE_ABSENT:
+	break;
       }
     }
@@ -2862,6 +2883,6 @@
 #ifdef USE_SUBEXP_CALL
 
-#define RECURSION_EXIST       1
-#define RECURSION_INFINITE    2
+# define RECURSION_EXIST       1
+# define RECURSION_INFINITE    2
 
 static int
@@ -3063,5 +3084,5 @@
 subexp_recursive_check_trav(Node* node, ScanEnv* env)
 {
-#define FOUND_CALLED_NODE    1
+# define FOUND_CALLED_NODE    1
 
   int type;
@@ -3164,5 +3185,5 @@
 	int gnum = cn->group_num;
 
-#ifdef USE_NAMED_GROUP
+# ifdef USE_NAMED_GROUP
 	if (env->num_named > 0 &&
 	    IS_SYNTAX_BV(env->syntax, ONIG_SYN_CAPTURE_ONLY_NAMED_GROUP) &&
@@ -3170,5 +3191,5 @@
 	  return ONIGERR_NUMBERED_BACKREF_OR_CALL_NOT_ALLOWED;
 	}
-#endif
+# endif
 	if (gnum > env->num_mem) {
 	  onig_scan_env_set_error_string(env,
@@ -3177,7 +3198,7 @@
 	}
 
-#ifdef USE_NAMED_GROUP
+# ifdef USE_NAMED_GROUP
       set_call_attr:
-#endif
+# endif
 	cn->target = nodes[cn->group_num];
 	if (IS_NULL(cn->target)) {
@@ -3190,10 +3211,10 @@
 	cn->unset_addr_list = env->unset_addr_list;
       }
-#ifdef USE_NAMED_GROUP
-#ifdef USE_PERL_SUBEXP_CALL
+# ifdef USE_NAMED_GROUP
+#  ifdef USE_PERL_SUBEXP_CALL
       else if (cn->name == cn->name_end) {
 	goto set_call_attr;
       }
-#endif
+#  endif
       else {
 	int *refs;
@@ -3217,5 +3238,5 @@
 	}
       }
-#endif
+# endif
     }
     break;
@@ -3300,5 +3321,5 @@
 
 static int
-next_setup(Node* node, Node* next_node, int in_root, regex_t* reg)
+next_setup(Node* node, Node* next_node, regex_t* reg)
 {
   int type;
@@ -3334,30 +3355,8 @@
 	}
       }
-
-#ifndef ONIG_DONT_OPTIMIZE
-      if (NTYPE(node) == NT_QTFR && /* the type may be changed by above block */
-	  in_root && /* qn->lower == 0 && */
-	  NTYPE(qn->target) == NT_CANY &&
-	  ! IS_MULTILINE(reg->options)) {
-	/* implicit anchor: /.*a/ ==> /(?:^|\G).*a/ */
-	Node *np;
-	np = onig_node_new_list(NULL_NODE, NULL_NODE);
-	CHECK_NULL_RETURN_MEMERR(np);
-	swap_node(node, np);
-	NCDR(node) = onig_node_new_list(np, NULL_NODE);
-	if (IS_NULL(NCDR(node))) {
-	  onig_node_free(np);
-	  return ONIGERR_MEMORY;
-	}
-	np = onig_node_new_anchor(ANCHOR_ANYCHAR_STAR);   /* (?:^|\G) */
-	CHECK_NULL_RETURN_MEMERR(np);
-	NCAR(node) = np;
-      }
-#endif
     }
   }
   else if (type == NT_ENCLOSE) {
     EncloseNode* en = NENCLOSE(node);
-    in_root = 0;
     if (en->type == ENCLOSE_MEMORY) {
       node = en->target;
@@ -3516,27 +3515,27 @@
 
       if (q < end) {
-        r = expand_case_fold_make_rem_string(&rem, q, end, reg);
-        if (r != 0) {
-          onig_node_free(an);
-          goto mem_err2;
-        }
-
-        xnode = onig_node_list_add(NULL_NODE, snode);
-        if (IS_NULL(xnode)) {
-          onig_node_free(an);
-          onig_node_free(rem);
-          goto mem_err2;
-        }
-        if (IS_NULL(onig_node_list_add(xnode, rem))) {
-          onig_node_free(an);
-          onig_node_free(xnode);
-          onig_node_free(rem);
-          goto mem_err;
-        }
-
-        NCAR(an) = xnode;
+	r = expand_case_fold_make_rem_string(&rem, q, end, reg);
+	if (r != 0) {
+	  onig_node_free(an);
+	  goto mem_err2;
+	}
+
+	xnode = onig_node_list_add(NULL_NODE, snode);
+	if (IS_NULL(xnode)) {
+	  onig_node_free(an);
+	  onig_node_free(rem);
+	  goto mem_err2;
+	}
+	if (IS_NULL(onig_node_list_add(xnode, rem))) {
+	  onig_node_free(an);
+	  onig_node_free(xnode);
+	  onig_node_free(rem);
+	  goto mem_err;
+	}
+
+	NCAR(an) = xnode;
       }
       else {
-        NCAR(an) = snode;
+	NCAR(an) = snode;
       }
 
@@ -3592,5 +3591,5 @@
     }
 
-    len = enclen(reg->enc, p);
+    len = enclen(reg->enc, p, end);
 
     varlen = is_case_fold_variable_len(n, items, len);
@@ -3715,10 +3714,10 @@
 #ifdef USE_COMBINATION_EXPLOSION_CHECK
 
-#define CEC_THRES_NUM_BIG_REPEAT         512
-#define CEC_INFINITE_NUM          0x7fffffff
-
-#define CEC_IN_INFINITE_REPEAT    (1<<0)
-#define CEC_IN_FINITE_REPEAT      (1<<1)
-#define CEC_CONT_BIG_REPEAT       (1<<2)
+# define CEC_THRES_NUM_BIG_REPEAT         512
+# define CEC_INFINITE_NUM          0x7fffffff
+
+# define CEC_IN_INFINITE_REPEAT    (1<<0)
+# define CEC_IN_FINITE_REPEAT      (1<<1)
+# define CEC_CONT_BIG_REPEAT       (1<<2)
 
 static int
@@ -3836,5 +3835,5 @@
     break;
 
-#ifdef USE_SUBEXP_CALL
+# ifdef USE_SUBEXP_CALL
   case NT_CALL:
     if (IS_CALL_RECURSION(NCALL(node)))
@@ -3843,5 +3842,5 @@
       r = setup_comb_exp_check(NCALL(node)->target, state, env);
     break;
-#endif
+# endif
 
   default:
@@ -3857,5 +3856,6 @@
 #define IN_REPEAT     (1<<2)
 #define IN_VAR_REPEAT (1<<3)
-#define IN_ROOT       (1<<4)
+#define IN_CALL       (1<<4)
+#define IN_RECCALL    (1<<5)
 
 /* setup_tree does the following work.
@@ -3872,7 +3872,5 @@
   int type;
   int r = 0;
-  int in_root = state & IN_ROOT;
-
-  state &= ~IN_ROOT;
+
 restart:
   type = NTYPE(node);
@@ -3881,14 +3879,10 @@
     {
       Node* prev = NULL_NODE;
-      int prev_in_root = 0;
-      state |= in_root;
       do {
 	r = setup_tree(NCAR(node), reg, state, env);
 	if (IS_NOT_NULL(prev) && r == 0) {
-	  r = next_setup(prev, NCAR(node), prev_in_root, reg);
+	  r = next_setup(prev, NCAR(node), reg);
 	}
 	prev = NCAR(node);
-	prev_in_root = state & IN_ROOT;
-	state &= ~IN_ROOT;
       } while (r == 0 && IS_NOT_NULL(node = NCDR(node)));
     }
@@ -3947,5 +3941,5 @@
 
       if ((state & IN_REPEAT) != 0) {
-        qn->state |= NST_IN_REPEAT;
+	qn->state |= NST_IN_REPEAT;
       }
 
@@ -4054,5 +4048,4 @@
 	{
 	  OnigOptionType options = reg->options;
-	  state |= in_root;
 	  reg->options = NENCLOSE(node)->option;
 	  r = setup_tree(NENCLOSE(node)->target, reg, state, env);
@@ -4062,10 +4055,16 @@
 
       case ENCLOSE_MEMORY:
-	if ((state & (IN_ALT | IN_NOT | IN_VAR_REPEAT)) != 0) {
+	if ((state & (IN_ALT | IN_NOT | IN_VAR_REPEAT | IN_CALL)) != 0) {
 	  BIT_STATUS_ON_AT(env->bt_mem_start, en->regnum);
 	  /* SET_ENCLOSE_STATUS(node, NST_MEM_IN_ALT_NOT); */
 	}
-        r = setup_tree(en->target, reg, state, env);
-        break;
+	if (IS_ENCLOSE_CALLED(en))
+	  state |= IN_CALL;
+	if (IS_ENCLOSE_RECURSION(en))
+	  state |= IN_RECCALL;
+	else if ((state & IN_RECCALL) != 0)
+	  SET_CALL_RECURSION(node);
+	r = setup_tree(en->target, reg, state, env);
+	break;
 
       case ENCLOSE_STOP_BACKTRACK:
@@ -4094,4 +4093,10 @@
 	}
 #endif
+	if (NENCLOSE(node)->regnum > env->num_mem)
+	  return ONIGERR_INVALID_BACKREF;
+	r = setup_tree(NENCLOSE(node)->target, reg, state, env);
+	break;
+
+      case ENCLOSE_ABSENT:
 	r = setup_tree(NENCLOSE(node)->target, reg, state, env);
 	break;
@@ -4137,8 +4142,8 @@
 	  if (r < 0) return r;
 	  if (r > 0) return ONIGERR_INVALID_LOOK_BEHIND_PATTERN;
-	  r = setup_look_behind(node, reg, env);
-	  if (r != 0) return r;
 	  if (NTYPE(node) != NT_ANCHOR) goto restart;
 	  r = setup_tree(an->target, reg, state, env);
+	  if (r != 0) return r;
+	  r = setup_look_behind(node, reg, env);
 	}
 	break;
@@ -4150,8 +4155,8 @@
 	  if (r < 0) return r;
 	  if (r > 0) return ONIGERR_INVALID_LOOK_BEHIND_PATTERN;
-	  r = setup_look_behind(node, reg, env);
-	  if (r != 0) return r;
 	  if (NTYPE(node) != NT_ANCHOR) goto restart;
 	  r = setup_tree(an->target, reg, (state | IN_NOT), env);
+	  if (r != 0) return r;
+	  r = setup_look_behind(node, reg, env);
 	}
 	break;
@@ -4189,5 +4194,7 @@
 	n = ONIGENC_GET_CASE_FOLD_CODES_BY_STR(enc, reg->case_fold_flag,
 					       p, end, items);
-      clen = enclen(enc, p);
+      clen = enclen(enc, p, end);
+      if (p + clen > end)
+	clen = (int )(end - p);
 
       for (j = 0; j < n; j++) {
@@ -4207,4 +4214,8 @@
   }
   else {
+# if OPT_EXACT_MAXLEN < ONIG_CHAR_TABLE_SIZE
+    /* This should not happen. */
+    return ONIGERR_TYPE_BUG;
+# else
     if (IS_NULL(*int_skip)) {
       *int_skip = (int* )xmalloc(sizeof(int) * ONIG_CHAR_TABLE_SIZE);
@@ -4219,5 +4230,7 @@
 	n = ONIGENC_GET_CASE_FOLD_CODES_BY_STR(enc, reg->case_fold_flag,
 					       p, end, items);
-      clen = enclen(enc, p);
+      clen = enclen(enc, p, end);
+      if (p + clen > end)
+	clen = (int )(end - p);
 
       for (j = 0; j < n; j++) {
@@ -4235,4 +4248,5 @@
       }
     }
+# endif
   }
   return 0;
@@ -4262,5 +4276,7 @@
 	n = ONIGENC_GET_CASE_FOLD_CODES_BY_STR(enc, reg->case_fold_flag,
 					       p, end, items);
-      clen = enclen(enc, p);
+      clen = enclen(enc, p, end);
+      if (p + clen > end)
+	clen = (int )(end - p);
 
       for (j = 0; j < n; j++) {
@@ -4280,4 +4296,8 @@
   }
   else {
+# if OPT_EXACT_MAXLEN < ONIG_CHAR_TABLE_SIZE
+    /* This should not happen. */
+    return ONIGERR_TYPE_BUG;
+# else
     if (IS_NULL(*int_skip)) {
       *int_skip = (int* )xmalloc(sizeof(int) * ONIG_CHAR_TABLE_SIZE);
@@ -4292,5 +4312,7 @@
 	n = ONIGENC_GET_CASE_FOLD_CODES_BY_STR(enc, reg->case_fold_flag,
 					       p, end, items);
-      clen = enclen(enc, p);
+      clen = enclen(enc, p, end);
+      if (p + clen > end)
+	clen = (int )(end - p);
 
       for (j = 0; j < n; j++) {
@@ -4308,10 +4330,9 @@
       }
     }
+# endif
   }
   return 0;
 }
 #endif /* USE_SUNDAY_QUICK_SEARCH */
-
-#define OPT_EXACT_MAXLEN   24
 
 typedef struct {
@@ -4604,5 +4625,5 @@
   end = p + add->len;
   for (i = to->len; p < end; ) {
-    len = enclen(enc, p);
+    len = enclen(enc, p, end);
     if (i + len > OPT_EXACT_MAXLEN) break;
     for (j = 0; j < len && p < end; j++)
@@ -4626,5 +4647,5 @@
 
   for (i = to->len, p = s; p < end && i < OPT_EXACT_MAXLEN; ) {
-    len = enclen(enc, p);
+    len = enclen(enc, p, end);
     if (i + len > OPT_EXACT_MAXLEN) break;
     for (j = 0; j < len && p < end; j++)
@@ -4652,5 +4673,5 @@
   for (i = 0; i < to->len && i < add->len; ) {
     if (to->s[i] != add->s[i]) break;
-    len = enclen(env->enc, to->s + i);
+    len = enclen(env->enc, to->s + i, to->s + to->len);
 
     for (j = 1; j < len; j++) {
@@ -4984,12 +5005,12 @@
 	  add_char_opt_map_info(&opt->map, *(sn->s), env->enc);
 	}
-        set_mml(&opt->len, slen, slen);
+	set_mml(&opt->len, slen, slen);
       }
       else {
-        OnigDistance max;
+	OnigDistance max;
 
 	if (NSTRING_IS_DONT_GET_OPT_INFO(node)) {
-          int n = onigenc_strlen(env->enc, sn->s, sn->end);
-          max = ONIGENC_MBC_MAXLEN_DIST(env->enc) * n;
+	  int n = onigenc_strlen(env->enc, sn->s, sn->end);
+	  max = ONIGENC_MBC_MAXLEN_DIST(env->enc) * n;
 	}
 	else {
@@ -5007,5 +5028,5 @@
 	}
 
-        set_mml(&opt->len, slen, max);
+	set_mml(&opt->len, slen, max);
       }
 
@@ -5023,5 +5044,5 @@
 
       if (IS_NOT_NULL(cc->mbuf) || IS_NCCLASS_NOT(cc)) {
-        OnigDistance min = ONIGENC_MBC_MINLEN(env->enc);
+	OnigDistance min = ONIGENC_MBC_MINLEN(env->enc);
 	OnigDistance max = ONIGENC_MBC_MAXLEN_DIST(env->enc);
 
@@ -5029,10 +5050,10 @@
       }
       else {
-        for (i = 0; i < SINGLE_BYTE_SIZE; i++) {
-          z = BITSET_AT(cc->bs, i);
-          if ((z && !IS_NCCLASS_NOT(cc)) || (!z && IS_NCCLASS_NOT(cc))) {
-            add_char_opt_map_info(&opt->map, (UChar )i, env->enc);
-          }
-        }
+	for (i = 0; i < SINGLE_BYTE_SIZE; i++) {
+	  z = BITSET_AT(cc->bs, i);
+	  if ((z && !IS_NCCLASS_NOT(cc)) || (!z && IS_NCCLASS_NOT(cc))) {
+	    add_char_opt_map_info(&opt->map, (UChar )i, env->enc);
+	  }
+	}
 	set_mml(&opt->len, 1, 1);
       }
@@ -5048,5 +5069,5 @@
 
       if (max == 1) {
-        min = 1;
+	min = 1;
 
 	maxcode = NCTYPE(node)->ascii_range ? 0x80 : SINGLE_BYTE_SIZE;
@@ -5071,5 +5092,5 @@
       }
       else {
-        min = ONIGENC_MBC_MINLEN(env->enc);
+	min = ONIGENC_MBC_MINLEN(env->enc);
       }
       set_mml(&opt->len, min, max);
@@ -5190,5 +5211,5 @@
 	    if (nopt.exb.reach_end) {
 	      for (i = 2; i <= qn->lower &&
-		          ! is_full_opt_exact_info(&opt->exb); i++) {
+			  ! is_full_opt_exact_info(&opt->exb); i++) {
 		concat_opt_exact_info(&opt->exb, &nopt.exb, env->enc);
 	      }
@@ -5261,4 +5282,8 @@
 	r = optimize_node_left(en->target, opt, env);
 	break;
+
+      case ENCLOSE_ABSENT:
+	set_mml(&opt->len, 0, ONIG_INFINITE_DISTANCE);
+	break;
       }
     }
@@ -5312,9 +5337,12 @@
     if (e->len >= 3 || (e->len >= 2 && allow_reverse)) {
       r = set_bm_skip(reg->exact, reg->exact_end, reg,
-	              reg->map, &(reg->int_map), 0);
-      if (r) return r;
-
-      reg->optimize = (allow_reverse != 0
+		      reg->map, &(reg->int_map), 0);
+      if (r == 0) {
+	reg->optimize = (allow_reverse != 0
 		       ? ONIG_OPTIMIZE_EXACT_BM : ONIG_OPTIMIZE_EXACT_BM_NOT_REV);
+      }
+      else {
+	reg->optimize = ONIG_OPTIMIZE_EXACT;
+      }
     }
     else {
@@ -5381,4 +5409,7 @@
         ANCHOR_BEGIN_POSITION | ANCHOR_ANYCHAR_STAR | ANCHOR_ANYCHAR_STAR_ML |
         ANCHOR_LOOK_BEHIND);
+
+  if ((opt.anc.left_anchor & (ANCHOR_LOOK_BEHIND | ANCHOR_PREC_READ_NOT)) != 0)
+    reg->anchor &= ~ANCHOR_ANYCHAR_STAR_ML;
 
   reg->anchor |= opt.anc.right_anchor & (ANCHOR_END_BUF | ANCHOR_SEMI_END_BUF |
@@ -5455,5 +5486,5 @@
       }
 
-      p += enclen(enc, p);
+      p += enclen(enc, p, end);
     }
   }
@@ -5574,12 +5605,12 @@
       for (i = 0; i < ONIG_CHAR_TABLE_SIZE; i++) {
 	if (reg->map[i] != 0) {
-          if (c > 0)  fputs(", ", f);
-          c++;
-          if (ONIGENC_MBC_MAXLEN(reg->enc) == 1 &&
-              ONIGENC_IS_CODE_PRINT(reg->enc, (OnigCodePoint )i))
-            fputc(i, f);
-          else
-            fprintf(f, "%d", i);
-        }
+	  if (c > 0)  fputs(", ", f);
+	  c++;
+	  if (ONIGENC_MBC_MAXLEN(reg->enc) == 1 &&
+	      ONIGENC_IS_CODE_PRINT(reg->enc, (OnigCodePoint )i))
+	    fputc(i, f);
+	  else
+	    fprintf(f, "%d", i);
+	}
       }
       fprintf(f, "]\n");
@@ -5616,4 +5647,5 @@
 }
 
+#ifdef RUBY
 size_t
 onig_memsize(const regex_t *reg)
@@ -5639,7 +5671,7 @@
     return size;
 }
+#endif
 
 #define REGEX_TRANSFER(to,from) do {\
-  (to)->state = ONIG_STATE_MODIFY;\
   onig_free_body(to);\
   xmemcpy(to, from, sizeof(regex_t));\
@@ -5647,55 +5679,37 @@
 } while (0)
 
+#if 0
 extern void
 onig_transfer(regex_t* to, regex_t* from)
 {
-  THREAD_ATOMIC_START;
   REGEX_TRANSFER(to, from);
-  THREAD_ATOMIC_END;
-}
-
-#define REGEX_CHAIN_HEAD(reg) do {\
-  while (IS_NOT_NULL((reg)->chain)) {\
-    (reg) = (reg)->chain;\
-  }\
-} while (0)
-
-extern void
-onig_chain_link_add(regex_t* to, regex_t* add)
-{
-  THREAD_ATOMIC_START;
-  REGEX_CHAIN_HEAD(to);
-  to->chain = add;
-  THREAD_ATOMIC_END;
-}
-
-extern void
-onig_chain_reduce(regex_t* reg)
-{
-  regex_t *head, *prev;
-
-  prev = reg;
-  head = prev->chain;
-  if (IS_NOT_NULL(head)) {
-    reg->state = ONIG_STATE_MODIFY;
-    while (IS_NOT_NULL(head->chain)) {
-      prev = head;
-      head = head->chain;
-    }
-    prev->chain = (regex_t* )NULL;
-    REGEX_TRANSFER(reg, head);
-  }
-}
+}
+#endif
 
 #ifdef ONIG_DEBUG_COMPILE
-static void print_compiled_byte_code_list P_((FILE* f, regex_t* reg));
+static void print_compiled_byte_code_list(FILE* f, regex_t* reg);
 #endif
 #ifdef ONIG_DEBUG_PARSE_TREE
-static void print_tree P_((FILE* f, Node* node));
-#endif
-
+static void print_tree(FILE* f, Node* node);
+#endif
+
+#ifdef RUBY
 extern int
 onig_compile(regex_t* reg, const UChar* pattern, const UChar* pattern_end,
-	      OnigErrorInfo* einfo)
+	     OnigErrorInfo* einfo)
+{
+  return onig_compile_ruby(reg, pattern, pattern_end, einfo, NULL, 0);
+}
+#endif
+
+#ifdef RUBY
+extern int
+onig_compile_ruby(regex_t* reg, const UChar* pattern, const UChar* pattern_end,
+	      OnigErrorInfo* einfo, const char *sourcefile, int sourceline)
+#else
+extern int
+onig_compile(regex_t* reg, const UChar* pattern, const UChar* pattern_end,
+	     OnigErrorInfo* einfo)
+#endif
 {
 #define COMPILE_INIT_SIZE  20
@@ -5711,5 +5725,8 @@
   if (IS_NOT_NULL(einfo)) einfo->par = (UChar* )NULL;
 
-  reg->state = ONIG_STATE_COMPILING;
+#ifdef RUBY
+  scan_env.sourcefile = sourcefile;
+  scan_env.sourceline = sourceline;
+#endif
 
 #ifdef ONIG_DEBUG
@@ -5737,4 +5754,11 @@
   r = onig_parse_make_tree(&root, pattern, pattern_end, reg, &scan_env);
   if (r != 0) goto err;
+
+#ifdef ONIG_DEBUG_PARSE_TREE
+# if 0
+  fprintf(stderr, "ORIGINAL PARSE TREE:\n");
+  print_tree(stderr, root);
+# endif
+#endif
 
 #ifdef USE_NAMED_GROUP
@@ -5770,5 +5794,5 @@
 #endif
 
-  r = setup_tree(root, reg, IN_ROOT, &scan_env);
+  r = setup_tree(root, reg, 0, &scan_env);
   if (r != 0) goto err_unset;
 
@@ -5789,15 +5813,15 @@
 #ifdef USE_COMBINATION_EXPLOSION_CHECK
   if (scan_env.backrefed_mem == 0
-#ifdef USE_SUBEXP_CALL
+# ifdef USE_SUBEXP_CALL
       || scan_env.num_call == 0
-#endif
+# endif
       ) {
     setup_comb_exp_check(root, 0, &scan_env);
-#ifdef USE_SUBEXP_CALL
+# ifdef USE_SUBEXP_CALL
     if (scan_env.has_recursion != 0) {
       scan_env.num_comb_exp_check = 0;
     }
     else
-#endif
+# endif
     if (scan_env.comb_exp_max_regnum > 0) {
       int i;
@@ -5853,12 +5877,11 @@
 
 #ifdef ONIG_DEBUG_COMPILE
-#ifdef USE_NAMED_GROUP
+# ifdef USE_NAMED_GROUP
   onig_print_names(stderr, reg);
-#endif
+# endif
   print_compiled_byte_code_list(stderr, reg);
 #endif
 
  end:
-  reg->state = ONIG_STATE_NORMAL;
   return r;
 
@@ -5884,25 +5907,4 @@
 }
 
-#ifdef USE_RECOMPILE_API
-extern int
-onig_recompile(regex_t* reg, const UChar* pattern, const UChar* pattern_end,
-	    OnigOptionType option, OnigEncoding enc, OnigSyntaxType* syntax,
-	    OnigErrorInfo* einfo)
-{
-  int r;
-  regex_t *new_reg;
-
-  r = onig_new(&new_reg, pattern, pattern_end, option, enc, syntax, einfo);
-  if (r) return r;
-  if (ONIG_STATE(reg) == ONIG_STATE_NORMAL) {
-    onig_transfer(reg, new_reg);
-  }
-  else {
-    onig_chain_link_add(reg, new_reg);
-  }
-  return 0;
-}
-#endif
-
 static int onig_inited = 0;
 
@@ -5910,5 +5912,5 @@
 onig_reg_init(regex_t* reg, OnigOptionType option,
 	      OnigCaseFoldType case_fold_flag,
-	      OnigEncoding enc, OnigSyntaxType* syntax)
+	      OnigEncoding enc, const OnigSyntaxType* syntax)
 {
   if (! onig_inited)
@@ -5925,6 +5927,4 @@
     return ONIGERR_INVALID_COMBINATION_OF_OPTIONS;
   }
-
-  (reg)->state = ONIG_STATE_MODIFY;
 
   if ((option & ONIG_OPTION_NEGATE_SINGLELINE) != 0) {
@@ -5956,5 +5956,5 @@
 onig_new_without_alloc(regex_t* reg, const UChar* pattern,
           const UChar* pattern_end, OnigOptionType option, OnigEncoding enc,
-          OnigSyntaxType* syntax, OnigErrorInfo* einfo)
+          const OnigSyntaxType* syntax, OnigErrorInfo* einfo)
 {
   int r;
@@ -5969,5 +5969,5 @@
 extern int
 onig_new(regex_t** reg, const UChar* pattern, const UChar* pattern_end,
-	  OnigOptionType option, OnigEncoding enc, OnigSyntaxType* syntax,
+	  OnigOptionType option, OnigEncoding enc, const OnigSyntaxType* syntax,
 	  OnigErrorInfo* einfo)
 {
@@ -5989,4 +5989,9 @@
 }
 
+extern int
+onig_initialize(OnigEncoding encodings[] ARG_UNUSED, int n ARG_UNUSED)
+{
+  return onig_init();
+}
 
 extern int
@@ -5996,8 +6001,9 @@
     return 0;
 
-  THREAD_SYSTEM_INIT;
-  THREAD_ATOMIC_START;
-
   onig_inited = 1;
+
+#if defined(ONIG_DEBUG_MEMLEAK) && defined(_MSC_VER)
+  _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
+#endif
 
   onigenc_init();
@@ -6008,5 +6014,4 @@
 #endif
 
-  THREAD_ATOMIC_END;
   return 0;
 }
@@ -6047,6 +6052,4 @@
 onig_end(void)
 {
-  THREAD_ATOMIC_START;
-
   exec_end_call_list();
 
@@ -6055,16 +6058,10 @@
 #endif
 
-#ifdef USE_SHARED_CCLASS_TABLE
-  onig_free_shared_cclass_table();
-#endif
-
-#ifdef USE_PARSE_TREE_NODE_RECYCLE
-  onig_free_node_list();
+#if defined(ONIG_DEBUG_MEMLEAK) && defined(_MSC_VER)
+  _CrtDumpMemoryLeaks();
 #endif
 
   onig_inited = 0;
 
-  THREAD_ATOMIC_END;
-  THREAD_SYSTEM_END;
   return 0;
 }
@@ -6132,12 +6129,12 @@
 
 /* arguments type */
-#define ARG_SPECIAL     -1
-#define ARG_NON          0
-#define ARG_RELADDR      1
-#define ARG_ABSADDR      2
-#define ARG_LENGTH       3
-#define ARG_MEMNUM       4
-#define ARG_OPTION       5
-#define ARG_STATE_CHECK  6
+# define ARG_SPECIAL     -1
+# define ARG_NON          0
+# define ARG_RELADDR      1
+# define ARG_ABSADDR      2
+# define ARG_LENGTH       3
+# define ARG_MEMNUM       4
+# define ARG_OPTION       5
+# define ARG_STATE_CHECK  6
 
 OnigOpInfoType OnigOpInfo[] = {
@@ -6164,5 +6161,4 @@
   { OP_CCLASS_MB_NOT,     "cclass-mb-not",   ARG_SPECIAL },
   { OP_CCLASS_MIX_NOT,    "cclass-mix-not",  ARG_SPECIAL },
-  { OP_CCLASS_NODE,       "cclass-node",     ARG_SPECIAL },
   { OP_ANYCHAR,           "anychar",         ARG_NON },
   { OP_ANYCHAR_ML,        "anychar-ml",      ARG_NON },
@@ -6189,5 +6185,4 @@
   { OP_SEMI_END_BUF,        "semi-end-buf",    ARG_NON },
   { OP_BEGIN_POSITION,      "begin-position",  ARG_NON },
-  { OP_BEGIN_POS_OR_LINE,   "begin-pos-or-line",    ARG_NON },
   { OP_BACKREF1,            "backref1",             ARG_NON },
   { OP_BACKREF2,            "backref2",             ARG_NON },
@@ -6231,4 +6226,7 @@
   { OP_PUSH_LOOK_BEHIND_NOT, "push-look-behind-not", ARG_SPECIAL },
   { OP_FAIL_LOOK_BEHIND_NOT, "fail-look-behind-not", ARG_NON },
+  { OP_PUSH_ABSENT_POS,      "push-absent-pos",      ARG_NON },
+  { OP_ABSENT,               "absent",               ARG_RELADDR },
+  { OP_ABSENT_END,           "absent-end",           ARG_NON },
   { OP_CALL,                 "call",                 ARG_ABSADDR },
   { OP_RETURN,               "return",               ARG_NON },
@@ -6267,5 +6265,5 @@
 }
 
-#ifdef ONIG_DEBUG_PARSE_TREE
+# ifdef ONIG_DEBUG_PARSE_TREE
 static void
 Indent(FILE* f, int indent)
@@ -6274,5 +6272,5 @@
   for (i = 0; i < indent; i++) putc(' ', f);
 }
-#endif /* ONIG_DEBUG_PARSE_TREE */
+# endif /* ONIG_DEBUG_PARSE_TREE */
 
 static void
@@ -6293,5 +6291,5 @@
 
 extern void
-onig_print_compiled_byte_code(FILE* f, UChar* bp, UChar** nextp,
+onig_print_compiled_byte_code(FILE* f, UChar* bp, UChar* bpend, UChar** nextp,
                               OnigEncoding enc)
 {
@@ -6313,5 +6311,5 @@
     case ARG_RELADDR:
       GET_RELADDR_INC(addr, bp);
-      fprintf(f, ":(+%d)", addr);
+      fprintf(f, ":(%s%d)", (addr >= 0) ? "+" : "", addr);
       break;
     case ARG_ABSADDR:
@@ -6392,5 +6390,5 @@
 
     case OP_EXACT1_IC:
-      len = enclen(enc, bp);
+      len = enclen(enc, bp, bpend);
       p_string(f, len, bp);
       bp += len;
@@ -6418,7 +6416,7 @@
       GET_LENGTH_INC(len, bp);
       q = bp;
-#ifndef PLATFORM_UNALIGNED_WORD_ACCESS
+# ifndef PLATFORM_UNALIGNED_WORD_ACCESS
       ALIGNMENT_RIGHT(q);
-#endif
+# endif
       GET_CODE_POINT(code, q);
       bp += len;
@@ -6432,20 +6430,10 @@
       GET_LENGTH_INC(len, bp);
       q = bp;
-#ifndef PLATFORM_UNALIGNED_WORD_ACCESS
+# ifndef PLATFORM_UNALIGNED_WORD_ACCESS
       ALIGNMENT_RIGHT(q);
-#endif
+# endif
       GET_CODE_POINT(code, q);
       bp += len;
       fprintf(f, ":%d:%d:%d", n, (int )code, len);
-      break;
-
-    case OP_CCLASS_NODE:
-      {
-        CClassNode *cc;
-
-        GET_POINTER_INC(cc, bp);
-        n = bitset_on_num(cc->bs);
-        fprintf(f, ":%"PRIuPTR":%d", (uintptr_t )cc, n);
-      }
       break;
 
@@ -6502,5 +6490,5 @@
       addr = *((RelAddrType* )bp);
       bp += SIZE_RELADDR;
-      fprintf(f, ":(%d)", addr);
+      fprintf(f, ":(%s%d)", (addr >= 0) ? "+" : "", addr);
       p_string(f, 1, bp);
       bp += 1;
@@ -6515,5 +6503,5 @@
       GET_RELADDR_INC(addr, bp);
       GET_LENGTH_INC(len, bp);
-      fprintf(f, ":%d:(%d)", len, addr);
+      fprintf(f, ":%d:(%s%d)", len, (addr >= 0) ? "+" : "", addr);
       break;
 
@@ -6524,5 +6512,5 @@
       addr = *((RelAddrType* )bp);
       bp += SIZE_RELADDR;
-      fprintf(f, ":%d:(%d)", scn, addr);
+      fprintf(f, ":%d:(%s%d)", scn, (addr >= 0) ? "+" : "", addr);
       break;
 
@@ -6530,10 +6518,10 @@
       GET_MEMNUM_INC(mem, bp);
       GET_RELADDR_INC(addr, bp);
-      fprintf(f, ":%d:(%d)", mem, addr);
+      fprintf(f, ":%d:(%s%d)", mem, (addr >= 0) ? "+" : "", addr);
       break;
 
     default:
       fprintf(stderr, "onig_print_compiled_byte_code: undefined code %d\n",
-	      *--bp);
+	      bp[-1]);
     }
   }
@@ -6542,5 +6530,5 @@
 }
 
-#ifdef ONIG_DEBUG_COMPILE
+# ifdef ONIG_DEBUG_COMPILE
 static void
 print_compiled_byte_code_list(FILE* f, regex_t* reg)
@@ -6559,12 +6547,12 @@
     else
       fprintf(f, " %ld:", bp - reg->p);
-    onig_print_compiled_byte_code(f, bp, &bp, reg->enc);
+    onig_print_compiled_byte_code(f, bp, end, &bp, reg->enc);
   }
 
   fprintf(f, "\n");
 }
-#endif /* ONIG_DEBUG_COMPILE */
-
-#ifdef ONIG_DEBUG_PARSE_TREE
+# endif /* ONIG_DEBUG_COMPILE */
+
+# ifdef ONIG_DEBUG_PARSE_TREE
 static void
 print_indent_tree(FILE* f, Node* node, int indent)
@@ -6613,10 +6601,13 @@
   case NT_CCLASS:
     fprintf(f, "<cclass:%"PRIxPTR">", (intptr_t )node);
-    if (IS_NCCLASS_NOT(NCCLASS(node))) fputs(" not", f);
+    if (IS_NCCLASS_NOT(NCCLASS(node))) fputs("not ", f);
     if (NCCLASS(node)->mbuf) {
       BBuf* bbuf = NCCLASS(node)->mbuf;
-      for (i = 0; i < (int )bbuf->used; i++) {
-	if (i > 0) fprintf(f, ",");
-	fprintf(f, "%0x", bbuf->p[i]);
+      OnigCodePoint* data = (OnigCodePoint* )bbuf->p;
+      OnigCodePoint* end = (OnigCodePoint* )(bbuf->p + bbuf->used);
+      fprintf(f, "%d", *data++);
+      for (; data < end; data+=2) {
+	fprintf(f, ",");
+	fprintf(f, "%04x-%04x", data[0], data[1]);
       }
     }
@@ -6652,12 +6643,11 @@
     case ANCHOR_SEMI_END_BUF:   fputs("semi end buf",   f); break;
     case ANCHOR_BEGIN_POSITION: fputs("begin position", f); break;
-    case ANCHOR_ANYCHAR_STAR:   fputs("begin position/line", f); break;
 
     case ANCHOR_WORD_BOUND:      fputs("word bound",     f); break;
     case ANCHOR_NOT_WORD_BOUND:  fputs("not word bound", f); break;
-#ifdef USE_WORD_BEGIN_END
+#  ifdef USE_WORD_BEGIN_END
     case ANCHOR_WORD_BEGIN:      fputs("word begin", f);     break;
     case ANCHOR_WORD_END:        fputs("word end", f);       break;
-#endif
+#  endif
     case ANCHOR_PREC_READ:       fputs("prec read",      f); container_p = TRUE; break;
     case ANCHOR_PREC_READ_NOT:   fputs("prec read not",  f); container_p = TRUE; break;
@@ -6685,5 +6675,5 @@
     break;
 
-#ifdef USE_SUBEXP_CALL
+#  ifdef USE_SUBEXP_CALL
   case NT_CALL:
     {
@@ -6693,5 +6683,5 @@
     }
     break;
-#endif
+#  endif
 
   case NT_QTFR:
@@ -6717,4 +6707,7 @@
       fprintf(f, "condition:%d", NENCLOSE(node)->regnum);
       break;
+    case ENCLOSE_ABSENT:
+      fprintf(f, "absent");
+      break;
 
     default:
@@ -6744,4 +6737,4 @@
   print_indent_tree(f, node, 0);
 }
-#endif /* ONIG_DEBUG_PARSE_TREE */
+# endif /* ONIG_DEBUG_PARSE_TREE */
 #endif /* ONIG_DEBUG */
Index: EcnlProtoTool/trunk/onigmo-6.1.3/src/regenc.c
===================================================================
--- EcnlProtoTool/trunk/onigmo-5.15.0/src/regenc.c	(revision 321)
+++ EcnlProtoTool/trunk/onigmo-6.1.3/src/regenc.c	(revision 331)
@@ -4,5 +4,5 @@
 /*-
  * Copyright (c) 2002-2007  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
- * Copyright (c) 2011       K.Takata  <kentkt AT csc DOT jp>
+ * Copyright (c) 2011-2016  K.Takata  <kentkt AT csc DOT jp>
  * All rights reserved.
  *
@@ -52,10 +52,21 @@
 }
 
+extern int
+onigenc_mbclen_approximate(const OnigUChar* p,const OnigUChar* e, OnigEncoding enc)
+{
+  int ret = ONIGENC_PRECISE_MBC_ENC_LEN(enc, p, e);
+  if (ONIGENC_MBCLEN_CHARFOUND_P(ret))
+    return ONIGENC_MBCLEN_CHARFOUND_LEN(ret);
+  else if (ONIGENC_MBCLEN_NEEDMORE_P(ret))
+    return (int )(e - p) + ONIGENC_MBCLEN_NEEDMORE_LEN(ret);
+  return 1;
+}
+
 extern UChar*
-onigenc_get_right_adjust_char_head(OnigEncoding enc, const UChar* start, const UChar* s)
-{
-  UChar* p = ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc, start, s);
+onigenc_get_right_adjust_char_head(OnigEncoding enc, const UChar* start, const UChar* s, const UChar* end)
+{
+  UChar* p = ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc, start, s, end);
   if (p < s) {
-    p += enclen(enc, p);
+    p += enclen(enc, p, end);
   }
   return p;
@@ -64,11 +75,11 @@
 extern UChar*
 onigenc_get_right_adjust_char_head_with_prev(OnigEncoding enc,
-				   const UChar* start, const UChar* s, const UChar** prev)
-{
-  UChar* p = ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc, start, s);
+				   const UChar* start, const UChar* s, const UChar* end, const UChar** prev)
+{
+  UChar* p = ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc, start, s, end);
 
   if (p < s) {
     if (prev) *prev = (const UChar* )p;
-    p += enclen(enc, p);
+    p += enclen(enc, p, end);
   }
   else {
@@ -79,14 +90,14 @@
 
 extern UChar*
-onigenc_get_prev_char_head(OnigEncoding enc, const UChar* start, const UChar* s)
+onigenc_get_prev_char_head(OnigEncoding enc, const UChar* start, const UChar* s, const UChar* end)
 {
   if (s <= start)
     return (UChar* )NULL;
 
-  return ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc, start, s - 1);
+  return ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc, start, s - 1, end);
 }
 
 extern UChar*
-onigenc_step_back(OnigEncoding enc, const UChar* start, const UChar* s, int n)
+onigenc_step_back(OnigEncoding enc, const UChar* start, const UChar* s, const UChar* end, int n)
 {
   while (ONIG_IS_NOT_NULL(s) && n-- > 0) {
@@ -94,5 +105,5 @@
       return (UChar* )NULL;
 
-    s = ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc, start, s - 1);
+    s = ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc, start, s - 1, end);
   }
   return (UChar* )s;
@@ -104,5 +115,5 @@
   UChar* q = (UChar* )p;
   while (n-- > 0) {
-    q += ONIGENC_MBC_ENC_LEN(enc, q);
+    q += ONIGENC_MBC_ENC_LEN(enc, q, end);
   }
   return (q <= end ? q : NULL);
@@ -116,5 +127,5 @@
 
   while (q < end) {
-    q += ONIGENC_MBC_ENC_LEN(enc, q);
+    q += ONIGENC_MBC_ENC_LEN(enc, q, end);
     n++;
   }
@@ -127,4 +138,5 @@
   int n = 0;
   UChar* p = (UChar* )s;
+  UChar* e;
 
   while (1) {
@@ -142,5 +154,6 @@
       if (len == 1) return n;
     }
-    p += ONIGENC_MBC_ENC_LEN(enc, p);
+    e = p + ONIGENC_MBC_MAXLEN(enc);
+    p += ONIGENC_MBC_ENC_LEN(enc, p, e);
     n++;
   }
@@ -152,4 +165,5 @@
   UChar* start = (UChar* )s;
   UChar* p = (UChar* )s;
+  UChar* e;
 
   while (1) {
@@ -167,5 +181,6 @@
       if (len == 1) return (int )(p - start);
     }
-    p += ONIGENC_MBC_ENC_LEN(enc, p);
+    e = p + ONIGENC_MBC_MAXLEN(enc);
+    p += ONIGENC_MBC_ENC_LEN(enc, p, e);
   }
 }
@@ -350,4 +365,5 @@
 #endif
 
+#if 0
 extern void
 onigenc_set_default_caseconv_table(const UChar* table ARG_UNUSED)
@@ -356,9 +372,10 @@
   /* obsoleted. */
 }
+#endif
 
 extern UChar*
-onigenc_get_left_adjust_char_head(OnigEncoding enc, const UChar* start, const UChar* s)
-{
-  return ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc, start, s);
+onigenc_get_left_adjust_char_head(OnigEncoding enc, const UChar* start, const UChar* s, const UChar* end)
+{
+  return ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc, start, s, end);
 }
 
@@ -394,5 +411,6 @@
 extern int
 onigenc_ascii_apply_all_case_fold(OnigCaseFoldType flag ARG_UNUSED,
-				  OnigApplyAllCaseFoldFunc f, void* arg)
+				  OnigApplyAllCaseFoldFunc f, void* arg,
+				  OnigEncoding enc ARG_UNUSED)
 {
   OnigCodePoint code;
@@ -415,5 +433,5 @@
 onigenc_ascii_get_case_fold_codes_by_str(OnigCaseFoldType flag ARG_UNUSED,
 	 const OnigUChar* p, const OnigUChar* end ARG_UNUSED,
-	 OnigCaseFoldCodeItem items[])
+	 OnigCaseFoldCodeItem items[], OnigEncoding enc ARG_UNUSED)
 {
   if (0x41 <= *p && *p <= 0x5a) {
@@ -451,5 +469,5 @@
   int i, r;
 
-  r = onigenc_ascii_apply_all_case_fold(flag, f, arg);
+  r = onigenc_ascii_apply_all_case_fold(flag, f, arg, 0);
   if (r != 0) return r;
 
@@ -555,5 +573,6 @@
 onigenc_not_support_get_ctype_code_range(OnigCtype ctype ARG_UNUSED,
 	 OnigCodePoint* sb_out ARG_UNUSED,
-	 const OnigCodePoint* ranges[] ARG_UNUSED)
+	 const OnigCodePoint* ranges[] ARG_UNUSED,
+	 OnigEncoding enc)
 {
   return ONIG_NO_SUPPORT_CONFIG;
@@ -561,5 +580,5 @@
 
 extern int
-onigenc_is_mbc_newline_0x0a(const UChar* p, const UChar* end)
+onigenc_is_mbc_newline_0x0a(const UChar* p, const UChar* end, OnigEncoding enc ARG_UNUSED)
 {
   if (p < end) {
@@ -572,5 +591,5 @@
 extern int
 onigenc_ascii_mbc_case_fold(OnigCaseFoldType flag ARG_UNUSED, const UChar** p,
-	    const UChar*end ARG_UNUSED, UChar* lower)
+			    const UChar* end, UChar* lower, OnigEncoding enc ARG_UNUSED)
 {
   *lower = ONIGENC_ASCII_CODE_TO_LOWER_CASE(**p);
@@ -593,5 +612,6 @@
 
 extern int
-onigenc_single_byte_mbc_enc_len(const UChar* p ARG_UNUSED)
+onigenc_single_byte_mbc_enc_len(const UChar* p ARG_UNUSED, const UChar* e ARG_UNUSED,
+				OnigEncoding enc ARG_UNUSED)
 {
   return 1;
@@ -599,5 +619,6 @@
 
 extern OnigCodePoint
-onigenc_single_byte_mbc_to_code(const UChar* p, const UChar* end ARG_UNUSED)
+onigenc_single_byte_mbc_to_code(const UChar* p, const UChar* end ARG_UNUSED,
+				OnigEncoding enc ARG_UNUSED)
 {
   return (OnigCodePoint )(*p);
@@ -605,12 +626,16 @@
 
 extern int
-onigenc_single_byte_code_to_mbclen(OnigCodePoint code ARG_UNUSED)
-{
-  return (code < 0x100 ? 1 : ONIGERR_INVALID_CODE_POINT_VALUE);
-}
-
-extern int
-onigenc_single_byte_code_to_mbc(OnigCodePoint code, UChar *buf)
-{
+onigenc_single_byte_code_to_mbclen(OnigCodePoint code ARG_UNUSED, OnigEncoding enc ARG_UNUSED)
+{
+  return 1;
+}
+
+extern int
+onigenc_single_byte_code_to_mbc(OnigCodePoint code, UChar *buf, OnigEncoding enc ARG_UNUSED)
+{
+#ifdef RUBY
+  if (code > 0xff)
+    rb_raise(rb_eRangeError, "%u out of char range", code);
+#endif
   *buf = (UChar )(code & 0xff);
   return 1;
@@ -619,5 +644,7 @@
 extern UChar*
 onigenc_single_byte_left_adjust_char_head(const UChar* start ARG_UNUSED,
-					  const UChar* s)
+					  const UChar* s,
+					  const UChar* end ARG_UNUSED,
+					  OnigEncoding enc ARG_UNUSED)
 {
   return (UChar* )s;
@@ -626,5 +653,6 @@
 extern int
 onigenc_always_true_is_allowed_reverse_match(const UChar* s   ARG_UNUSED,
-					     const UChar* end ARG_UNUSED)
+					     const UChar* end ARG_UNUSED,
+					     OnigEncoding enc ARG_UNUSED)
 {
   return TRUE;
@@ -633,5 +661,6 @@
 extern int
 onigenc_always_false_is_allowed_reverse_match(const UChar* s   ARG_UNUSED,
-					      const UChar* end ARG_UNUSED)
+					      const UChar* end ARG_UNUSED,
+					      OnigEncoding enc ARG_UNUSED)
 {
   return FALSE;
@@ -639,5 +668,6 @@
 
 extern int
-onigenc_ascii_is_code_ctype(OnigCodePoint code, unsigned int ctype)
+onigenc_ascii_is_code_ctype(OnigCodePoint code, unsigned int ctype,
+                            OnigEncoding enc ARG_UNUSED)
 {
   if (code < 128)
@@ -653,5 +683,5 @@
   OnigCodePoint n;
 
-  len = enclen(enc, p);
+  len = enclen(enc, p, end);
   n = (OnigCodePoint )(*p++);
   if (len == 1) return n;
@@ -681,5 +711,5 @@
     int i;
 
-    len = enclen(enc, p);
+    len = enclen(enc, p, end);
     for (i = 0; i < len; i++) {
       *lower++ = *p++;
@@ -708,12 +738,13 @@
 
 extern int
-onigenc_mb2_code_to_mbclen(OnigCodePoint code)
-{
-  if ((code & 0xff00) != 0) return 2;
-  else return 1;
-}
-
-extern int
-onigenc_mb4_code_to_mbclen(OnigCodePoint code)
+onigenc_mb2_code_to_mbclen(OnigCodePoint code, OnigEncoding enc ARG_UNUSED)
+{
+  if (code <= 0xff) return 1;
+  if (code <= 0xffff) return 2;
+  return ONIGERR_TOO_BIG_WIDE_CHAR_VALUE;
+}
+
+extern int
+onigenc_mb4_code_to_mbclen(OnigCodePoint code, OnigEncoding enc ARG_UNUSED)
 {
        if ((code & 0xff000000) != 0) return 4;
@@ -734,5 +765,5 @@
 
 #if 1
-  if (enclen(enc, buf) != (p - buf))
+  if (enclen(enc, buf, p) != (p - buf))
     return ONIGERR_INVALID_CODE_POINT_VALUE;
 #endif
@@ -757,5 +788,5 @@
 
 #if 1
-  if (enclen(enc, buf) != (p - buf))
+  if (enclen(enc, buf, p) != (p - buf))
     return ONIGERR_INVALID_CODE_POINT_VALUE;
 #endif
@@ -764,5 +795,5 @@
 
 extern int
-onigenc_minimum_property_name_to_ctype(OnigEncoding enc, UChar* p, UChar* end)
+onigenc_minimum_property_name_to_ctype(OnigEncoding enc, const UChar* p, const UChar* end)
 {
   static const PosixBracketEntryType PBS[] = {
@@ -840,5 +871,5 @@
 
     sascii++;
-    p += enclen(enc, p);
+    p += enclen(enc, p, end);
   }
   return 0;
@@ -861,9 +892,10 @@
 
     sascii++;
-    p += enclen(enc, p);
+    p += enclen(enc, p, end);
   }
   return 0;
 }
 
+#if 0
 /* Property management */
 static int
@@ -918,15 +950,63 @@
   return 0;
 }
-
-extern int
-onigenc_property_list_init(int (*f)(void))
-{
-  int r;
-
-  THREAD_ATOMIC_START;
-
-  r = f();
-
-  THREAD_ATOMIC_END;
-  return r;
-}
+#endif
+
+extern int
+onigenc_ascii_only_case_map(OnigCaseFoldType* flagP, const OnigUChar** pp, const OnigUChar* end,
+			    OnigUChar* to, OnigUChar* to_end, const struct OnigEncodingTypeST* enc)
+{
+  OnigCodePoint code;
+  OnigUChar *to_start = to;
+  OnigCaseFoldType flags = *flagP;
+  int codepoint_length;
+
+  while (*pp < end && to < to_end) {
+    codepoint_length = ONIGENC_PRECISE_MBC_ENC_LEN(enc, *pp, end);
+    if (codepoint_length < 0)
+      return codepoint_length; /* encoding invalid */
+    code = ONIGENC_MBC_TO_CODE(enc, *pp, end);
+    *pp += codepoint_length;
+
+    if (code >= 'a' && code <= 'z' && (flags & ONIGENC_CASE_UPCASE)) {
+      flags |= ONIGENC_CASE_MODIFIED;
+      code += 'A' - 'a';
+    } else if (code >= 'A' && code <= 'Z' &&
+	(flags & (ONIGENC_CASE_DOWNCASE | ONIGENC_CASE_FOLD))) {
+      flags |= ONIGENC_CASE_MODIFIED;
+      code += 'a' - 'A';
+    }
+    to += ONIGENC_CODE_TO_MBC(enc, code, to);
+    if (flags & ONIGENC_CASE_TITLECASE)  /* switch from titlecase to lowercase for capitalize */
+      flags ^= (ONIGENC_CASE_UPCASE | ONIGENC_CASE_DOWNCASE | ONIGENC_CASE_TITLECASE);
+  }
+  *flagP = flags;
+  return (int )(to - to_start);
+}
+
+extern int
+onigenc_single_byte_ascii_only_case_map(OnigCaseFoldType* flagP, const OnigUChar** pp,
+					const OnigUChar* end, OnigUChar* to, OnigUChar* to_end,
+					const struct OnigEncodingTypeST* enc)
+{
+  OnigCodePoint code;
+  OnigUChar *to_start = to;
+  OnigCaseFoldType flags = *flagP;
+
+  while (*pp < end && to < to_end) {
+    code = *(*pp)++;
+
+    if (code >= 'a' && code <= 'z' && (flags & ONIGENC_CASE_UPCASE)) {
+      flags |= ONIGENC_CASE_MODIFIED;
+      code += 'A' - 'a';
+    } else if (code >= 'A' && code <= 'Z' &&
+	(flags & (ONIGENC_CASE_DOWNCASE | ONIGENC_CASE_FOLD))) {
+      flags |= ONIGENC_CASE_MODIFIED;
+      code += 'a' - 'A';
+    }
+    *to++ = code;
+    if (flags & ONIGENC_CASE_TITLECASE)  /* switch from titlecase to lowercase for capitalize */
+      flags ^= (ONIGENC_CASE_UPCASE | ONIGENC_CASE_DOWNCASE | ONIGENC_CASE_TITLECASE);
+  }
+  *flagP = flags;
+  return (int )(to - to_start);
+}
Index: EcnlProtoTool/trunk/onigmo-6.1.3/src/regenc.h
===================================================================
--- EcnlProtoTool/trunk/onigmo-5.15.0/src/regenc.h	(revision 321)
+++ EcnlProtoTool/trunk/onigmo-6.1.3/src/regenc.h	(revision 331)
@@ -1,4 +1,4 @@
-#ifndef REGENC_H
-#define REGENC_H
+#ifndef ONIGMO_REGENC_H
+#define ONIGMO_REGENC_H
 /**********************************************************************
   regenc.h -  Onigmo (Oniguruma-mod) (regular expression library)
@@ -6,5 +6,5 @@
 /*-
  * Copyright (c) 2002-2008  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
- * Copyright (c) 2011       K.Takata  <kentkt AT csc DOT jp>
+ * Copyright (c) 2011-2016  K.Takata  <kentkt AT csc DOT jp>
  * All rights reserved.
  *
@@ -31,14 +31,32 @@
  */
 
-#ifndef PACKAGE
+#if !defined(RUBY) && (defined(RUBY_EXPORT) || defined(ONIG_ENC_REGISTER))
+# define RUBY
+#endif
+#ifdef RUBY
+# ifndef ONIGMO_REGINT_H
+#  ifndef RUBY_EXTERN
+#   include "ruby/config.h"
+#   include "ruby/defines.h"
+#  endif
+# endif
+#else /* RUBY */
+# ifndef PACKAGE
 /* PACKAGE is defined in config.h */
-#include "config.h"
-#endif
+#  include "config.h"
+# endif
+#endif /* RUBY */
 
 #ifdef ONIG_ESCAPE_UCHAR_COLLISION
-#undef ONIG_ESCAPE_UCHAR_COLLISION
-#endif
-
-#include "oniguruma.h"
+# undef ONIG_ESCAPE_UCHAR_COLLISION
+#endif
+
+#ifdef RUBY
+# include "ruby/onigmo.h"
+#else
+# include "onigmo.h"
+#endif
+
+RUBY_SYMBOL_EXPORT_BEGIN
 
 typedef struct {
@@ -49,21 +67,21 @@
 
 #ifndef NULL
-#define NULL   ((void* )0)
+# define NULL   ((void* )0)
 #endif
 
 #ifndef TRUE
-#define TRUE    1
+# define TRUE    1
 #endif
 
 #ifndef FALSE
-#define FALSE   0
+# define FALSE   0
 #endif
 
 #ifndef ARG_UNUSED
-#if defined(__GNUC__)
+# if defined(__GNUC__)
 #  define ARG_UNUSED  __attribute__ ((unused))
-#else
+# else
 #  define ARG_UNUSED
-#endif
+# endif
 #endif
 
@@ -73,5 +91,5 @@
 #define ONIG_CHECK_NULL_RETURN_VAL(p,val)  if (ONIG_IS_NULL(p)) return (val)
 
-#define enclen(enc,p)      ONIGENC_MBC_ENC_LEN(enc,p)
+#define enclen(enc,p,e) ((enc->max_enc_len == enc->min_enc_len) ? enc->min_enc_len : ONIGENC_MBC_ENC_LEN(enc,p,e))
 
 /* character types bit flag */
@@ -99,14 +117,14 @@
 
 typedef struct {
-  const UChar *name;
+  short int len;
+  const UChar name[6];
   int       ctype;
-  short int len;
 } PosixBracketEntryType;
 
 #define POSIX_BRACKET_ENTRY_INIT(name, ctype) \
-  {(const UChar* )(name), (ctype), (short int )(sizeof(name) - 1)}
+  {(short int )(sizeof(name) - 1), (name), (ctype)}
 
 #ifndef numberof
-#define numberof(array) (int )(sizeof(array) / sizeof((array)[0]))
+# define numberof(array) (int )(sizeof(array) / sizeof((array)[0]))
 #endif
 
@@ -119,50 +137,57 @@
 
 
-#define ONIG_ENCODING_INIT_DEFAULT           ONIG_ENCODING_UTF8
+#define ONIG_ENCODING_INIT_DEFAULT           ONIG_ENCODING_ASCII
 
 /* for encoding system implementation (internal) */
-ONIG_EXTERN int onigenc_ascii_apply_all_case_fold P_((OnigCaseFoldType flag, OnigApplyAllCaseFoldFunc f, void* arg));
-ONIG_EXTERN int onigenc_ascii_get_case_fold_codes_by_str P_((OnigCaseFoldType flag, const OnigUChar* p, const OnigUChar* end, OnigCaseFoldCodeItem items[]));
-ONIG_EXTERN int onigenc_apply_all_case_fold_with_map P_((int map_size, const OnigPairCaseFoldCodes map[], int ess_tsett_flag, OnigCaseFoldType flag, OnigApplyAllCaseFoldFunc f, void* arg));
-ONIG_EXTERN int onigenc_get_case_fold_codes_by_str_with_map P_((int map_size, const OnigPairCaseFoldCodes map[], int ess_tsett_flag, OnigCaseFoldType flag, const OnigUChar* p, const OnigUChar* end, OnigCaseFoldCodeItem items[]));
-ONIG_EXTERN int onigenc_not_support_get_ctype_code_range P_((OnigCtype ctype, OnigCodePoint* sb_out, const OnigCodePoint* ranges[]));
-ONIG_EXTERN int onigenc_is_mbc_newline_0x0a P_((const UChar* p, const UChar* end));
+ONIG_EXTERN int onigenc_ascii_apply_all_case_fold(OnigCaseFoldType flag, OnigApplyAllCaseFoldFunc f, void* arg, OnigEncoding enc);
+ONIG_EXTERN int onigenc_ascii_get_case_fold_codes_by_str(OnigCaseFoldType flag, const OnigUChar* p, const OnigUChar* end, OnigCaseFoldCodeItem items[], OnigEncoding enc);
+ONIG_EXTERN int onigenc_apply_all_case_fold_with_map(int map_size, const OnigPairCaseFoldCodes map[], int ess_tsett_flag, OnigCaseFoldType flag, OnigApplyAllCaseFoldFunc f, void* arg);
+ONIG_EXTERN int onigenc_get_case_fold_codes_by_str_with_map(int map_size, const OnigPairCaseFoldCodes map[], int ess_tsett_flag, OnigCaseFoldType flag, const OnigUChar* p, const OnigUChar* end, OnigCaseFoldCodeItem items[]);
+ONIG_EXTERN int onigenc_not_support_get_ctype_code_range(OnigCtype ctype, OnigCodePoint* sb_out, const OnigCodePoint* ranges[], OnigEncoding enc);
+ONIG_EXTERN int onigenc_is_mbc_newline_0x0a(const UChar* p, const UChar* end, OnigEncoding enc);
+ONIG_EXTERN int    onigenc_single_byte_ascii_only_case_map(OnigCaseFoldType* flagP, const OnigUChar** pp, const OnigUChar* end, OnigUChar* to, OnigUChar* to_end, const struct OnigEncodingTypeST* enc);
 
 
 /* methods for single byte encoding */
-ONIG_EXTERN int onigenc_ascii_mbc_case_fold P_((OnigCaseFoldType flag, const UChar** p, const UChar* end, UChar* lower));
-ONIG_EXTERN int onigenc_single_byte_mbc_enc_len P_((const UChar* p));
-ONIG_EXTERN OnigCodePoint onigenc_single_byte_mbc_to_code P_((const UChar* p, const UChar* end));
-ONIG_EXTERN int onigenc_single_byte_code_to_mbclen P_((OnigCodePoint code));
-ONIG_EXTERN int onigenc_single_byte_code_to_mbc P_((OnigCodePoint code, UChar *buf));
-ONIG_EXTERN UChar* onigenc_single_byte_left_adjust_char_head P_((const UChar* start, const UChar* s));
-ONIG_EXTERN int onigenc_always_true_is_allowed_reverse_match P_((const UChar* s, const UChar* end));
-ONIG_EXTERN int onigenc_always_false_is_allowed_reverse_match P_((const UChar* s, const UChar* end));
-ONIG_EXTERN int onigenc_ascii_is_code_ctype P_((OnigCodePoint code, unsigned int ctype));
+ONIG_EXTERN int onigenc_ascii_mbc_case_fold(OnigCaseFoldType flag, const UChar** p, const UChar* end, UChar* lower, OnigEncoding enc);
+ONIG_EXTERN int onigenc_single_byte_mbc_enc_len(const UChar* p, const UChar* e, OnigEncoding enc);
+ONIG_EXTERN OnigCodePoint onigenc_single_byte_mbc_to_code(const UChar* p, const UChar* end, OnigEncoding enc);
+ONIG_EXTERN int onigenc_single_byte_code_to_mbclen(OnigCodePoint code, OnigEncoding enc);
+ONIG_EXTERN int onigenc_single_byte_code_to_mbc(OnigCodePoint code, UChar *buf, OnigEncoding enc);
+ONIG_EXTERN UChar* onigenc_single_byte_left_adjust_char_head(const UChar* start, const UChar* s, const OnigUChar* end, OnigEncoding enc);
+ONIG_EXTERN int onigenc_always_true_is_allowed_reverse_match(const UChar* s, const UChar* end, OnigEncoding enc);
+ONIG_EXTERN int onigenc_always_false_is_allowed_reverse_match(const UChar* s, const UChar* end, OnigEncoding enc);
+ONIG_EXTERN int onigenc_ascii_is_code_ctype(OnigCodePoint code, unsigned int ctype, OnigEncoding enc);
 
 /* methods for multi byte encoding */
-ONIG_EXTERN OnigCodePoint onigenc_mbn_mbc_to_code P_((OnigEncoding enc, const UChar* p, const UChar* end));
-ONIG_EXTERN int onigenc_mbn_mbc_case_fold P_((OnigEncoding enc, OnigCaseFoldType flag, const UChar** p, const UChar* end, UChar* lower));
-ONIG_EXTERN int onigenc_mb2_code_to_mbclen P_((OnigCodePoint code));
-ONIG_EXTERN int onigenc_mb2_code_to_mbc P_((OnigEncoding enc, OnigCodePoint code, UChar *buf));
-ONIG_EXTERN int onigenc_minimum_property_name_to_ctype P_((OnigEncoding enc, UChar* p, UChar* end));
-ONIG_EXTERN int onigenc_unicode_property_name_to_ctype P_((OnigEncoding enc, UChar* p, UChar* end));
-ONIG_EXTERN int onigenc_mb2_is_code_ctype P_((OnigEncoding enc, OnigCodePoint code, unsigned int ctype));
-ONIG_EXTERN int onigenc_mb4_code_to_mbclen P_((OnigCodePoint code));
-ONIG_EXTERN int onigenc_mb4_code_to_mbc P_((OnigEncoding enc, OnigCodePoint code, UChar *buf));
-ONIG_EXTERN int onigenc_mb4_is_code_ctype P_((OnigEncoding enc, OnigCodePoint code, unsigned int ctype));
+ONIG_EXTERN OnigCodePoint onigenc_mbn_mbc_to_code(OnigEncoding enc, const UChar* p, const UChar* end);
+ONIG_EXTERN int onigenc_mbn_mbc_case_fold(OnigEncoding enc, OnigCaseFoldType flag, const UChar** p, const UChar* end, UChar* lower);
+ONIG_EXTERN int onigenc_mb2_code_to_mbclen(OnigCodePoint code, OnigEncoding enc);
+ONIG_EXTERN int onigenc_mb2_code_to_mbc(OnigEncoding enc, OnigCodePoint code, UChar *buf);
+ONIG_EXTERN int onigenc_minimum_property_name_to_ctype(OnigEncoding enc, const UChar* p, const UChar* end);
+ONIG_EXTERN int onigenc_unicode_property_name_to_ctype(OnigEncoding enc, const UChar* p, const UChar* end);
+ONIG_EXTERN int onigenc_mb2_is_code_ctype(OnigEncoding enc, OnigCodePoint code, unsigned int ctype);
+ONIG_EXTERN int onigenc_mb4_code_to_mbclen(OnigCodePoint code, OnigEncoding enc);
+ONIG_EXTERN int onigenc_mb4_code_to_mbc(OnigEncoding enc, OnigCodePoint code, UChar *buf);
+ONIG_EXTERN int onigenc_mb4_is_code_ctype(OnigEncoding enc, OnigCodePoint code, unsigned int ctype);
+
+ONIG_EXTERN int onigenc_unicode_case_map(OnigCaseFoldType* flagP, const OnigUChar** pp, const OnigUChar* end, OnigUChar* to, OnigUChar* to_end, const struct OnigEncodingTypeST* enc);
 
 
 /* in enc/unicode.c */
-ONIG_EXTERN int onigenc_unicode_is_code_ctype P_((OnigCodePoint code, unsigned int ctype));
-ONIG_EXTERN int onigenc_utf16_32_get_ctype_code_range P_((OnigCtype ctype, OnigCodePoint *sb_out, const OnigCodePoint* ranges[]));
-ONIG_EXTERN int onigenc_unicode_ctype_code_range P_((int ctype, const OnigCodePoint* ranges[]));
-ONIG_EXTERN int onigenc_unicode_get_case_fold_codes_by_str P_((OnigEncoding enc, OnigCaseFoldType flag, const OnigUChar* p, const OnigUChar* end, OnigCaseFoldCodeItem items[]));
-ONIG_EXTERN int onigenc_unicode_mbc_case_fold P_((OnigEncoding enc, OnigCaseFoldType flag, const UChar** pp, const UChar* end, UChar* fold));
-ONIG_EXTERN int onigenc_unicode_apply_all_case_fold P_((OnigCaseFoldType flag, OnigApplyAllCaseFoldFunc f, void* arg));
+ONIG_EXTERN int onigenc_unicode_is_code_ctype(OnigCodePoint code, unsigned int ctype, OnigEncoding enc);
+ONIG_EXTERN int onigenc_utf16_32_get_ctype_code_range(OnigCtype ctype, OnigCodePoint *sb_out, const OnigCodePoint* ranges[], OnigEncoding enc);
+ONIG_EXTERN int onigenc_unicode_ctype_code_range(int ctype, const OnigCodePoint* ranges[]);
+ONIG_EXTERN int onigenc_unicode_get_case_fold_codes_by_str(OnigEncoding enc, OnigCaseFoldType flag, const OnigUChar* p, const OnigUChar* end, OnigCaseFoldCodeItem items[]);
+ONIG_EXTERN int onigenc_unicode_mbc_case_fold(OnigEncoding enc, OnigCaseFoldType flag, const UChar** pp, const UChar* end, UChar* fold);
+ONIG_EXTERN int onigenc_unicode_apply_all_case_fold(OnigCaseFoldType flag, OnigApplyAllCaseFoldFunc f, void* arg, OnigEncoding enc);
 
 
 #define UTF16_IS_SURROGATE_FIRST(c)    (((c) & 0xfc) == 0xd8)
 #define UTF16_IS_SURROGATE_SECOND(c)   (((c) & 0xfc) == 0xdc)
+#define UTF16_IS_SURROGATE(c)          (((c) & 0xf8) == 0xd8)
+#define UNICODE_VALID_CODEPOINT_P(c) ( \
+	((c) <= 0x10ffff) && \
+	!((c) < 0x10000 && UTF16_IS_SURROGATE((c) >> 8)))
 
 #define ONIGENC_ISO_8859_1_TO_LOWER_CASE(c) \
@@ -175,12 +200,12 @@
 
 ONIG_EXTERN int
-onigenc_with_ascii_strncmp P_((OnigEncoding enc, const UChar* p, const UChar* end, const UChar* sascii /* ascii */, int n));
+onigenc_with_ascii_strncmp(OnigEncoding enc, const UChar* p, const UChar* end, const UChar* sascii /* ascii */, int n);
 ONIG_EXTERN int
-onigenc_with_ascii_strnicmp P_((OnigEncoding enc, const UChar* p, const UChar* end, const UChar* sascii /* ascii */, int n));
+onigenc_with_ascii_strnicmp(OnigEncoding enc, const UChar* p, const UChar* end, const UChar* sascii /* ascii */, int n);
 ONIG_EXTERN UChar*
-onigenc_step P_((OnigEncoding enc, const UChar* p, const UChar* end, int n));
+onigenc_step(OnigEncoding enc, const UChar* p, const UChar* end, int n);
 
 /* defined in regexec.c, but used in enc/xxx.c */
-extern int  onig_is_in_code_range P_((const UChar* p, OnigCodePoint code));
+extern int  onig_is_in_code_range(const UChar* p, OnigCodePoint code);
 
 ONIG_EXTERN OnigEncoding  OnigEncDefaultCharEncoding;
@@ -203,3 +228,27 @@
 
 
-#endif /* REGENC_H */
+#ifdef ONIG_ENC_REGISTER
+extern int ONIG_ENC_REGISTER(const char *, OnigEncoding);
+# define OnigEncodingName(n) encoding_##n
+# define OnigEncodingDeclare(n) static const OnigEncodingType OnigEncodingName(n)
+# define OnigEncodingDefine(f,n)			     \
+    OnigEncodingDeclare(n);			     \
+    void Init_##f(void) {			     \
+	ONIG_ENC_REGISTER(OnigEncodingName(n).name,  \
+			  &OnigEncodingName(n));     \
+    }						     \
+    OnigEncodingDeclare(n)
+#else
+# define OnigEncodingName(n) OnigEncoding##n
+# define OnigEncodingDeclare(n) const OnigEncodingType OnigEncodingName(n)
+# define OnigEncodingDefine(f,n) OnigEncodingDeclare(n)
+#endif
+
+/* macros for define replica encoding and encoding alias */
+#define ENC_REPLICATE(name, orig)
+#define ENC_ALIAS(name, orig)
+#define ENC_DUMMY(name)
+
+RUBY_SYMBOL_EXPORT_END
+
+#endif /* ONIGMO_REGENC_H */
Index: EcnlProtoTool/trunk/onigmo-6.1.3/src/regerror.c
===================================================================
--- EcnlProtoTool/trunk/onigmo-5.15.0/src/regerror.c	(revision 321)
+++ EcnlProtoTool/trunk/onigmo-6.1.3/src/regerror.c	(revision 331)
@@ -4,5 +4,5 @@
 /*-
  * Copyright (c) 2002-2007  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
- * Copyright (c) 2011-2014  K.Takata  <kentkt AT csc DOT jp>
+ * Copyright (c) 2011-2016  K.Takata  <kentkt AT csc DOT jp>
  * All rights reserved.
  *
@@ -32,11 +32,5 @@
 #include <stdio.h> /* for vsnprintf() */
 
-#ifdef HAVE_STDARG_PROTOTYPES
 #include <stdarg.h>
-#define va_init_list(a,b) va_start(a,b)
-#else
-#include <varargs.h>
-#define va_init_list(a,b) va_start(a)
-#endif
 
 extern UChar*
@@ -66,4 +60,6 @@
   case ONIGERR_MATCH_STACK_LIMIT_OVER:
     p = "match-stack limit over"; break;
+  case ONIGERR_PARSE_DEPTH_LIMIT_OVER:
+    p = "parse depth limit over"; break;
   case ONIGERR_DEFAULT_ENCODING_IS_NOT_SET:
     p = "default multibyte-encoding is not set"; break;
@@ -180,6 +176,4 @@
   case ONIGERR_INVALID_COMBINATION_OF_OPTIONS:
     p = "invalid combination of options"; break;
-  case ONIGERR_OVER_THREAD_PASS_LIMIT_COUNT:
-    p = "over thread pass limit count"; break;
 
   default:
@@ -192,10 +186,10 @@
 static void sprint_byte(char* s, unsigned int v)
 {
-  sprintf(s, "%02x", (v & 0377));
+  xsnprintf(s, 3, "%02x", (v & 0377));
 }
 
 static void sprint_byte_with_x(char* s, unsigned int v)
 {
-  sprintf(s, "\\x%02x", (v & 0377));
+  xsnprintf(s, 5, "\\x%02x", (v & 0377));
 }
 
@@ -233,5 +227,5 @@
       }
 
-      p += enclen(enc, p);
+      p += enclen(enc, p, end);
       if (len >= buf_size) break;
     }
@@ -253,12 +247,5 @@
 
 extern int
-#ifdef HAVE_STDARG_PROTOTYPES
 onig_error_code_to_str(UChar* s, OnigPosition code, ...)
-#else
-onig_error_code_to_str(s, code, va_alist)
-  UChar* s;
-  OnigPosition code;
-  va_dcl
-#endif
 {
   UChar *p, *q;
@@ -269,5 +256,5 @@
   va_list vargs;
 
-  va_init_list(vargs, code);
+  va_start(vargs, code);
 
   switch (code) {
@@ -324,19 +311,7 @@
 }
 
-
 void
-#ifdef HAVE_STDARG_PROTOTYPES
-onig_snprintf_with_pattern(UChar buf[], int bufsize, OnigEncoding enc,
-                           UChar* pat, UChar* pat_end, const UChar *fmt, ...)
-#else
-onig_snprintf_with_pattern(buf, bufsize, enc, pat, pat_end, fmt, va_alist)
-    UChar buf[];
-    int bufsize;
-    OnigEncoding enc;
-    UChar* pat;
-    UChar* pat_end;
-    const UChar *fmt;
-    va_dcl
-#endif
+onig_vsnprintf_with_pattern(UChar buf[], int bufsize, OnigEncoding enc,
+                           UChar* pat, UChar* pat_end, const UChar *fmt, va_list args)
 {
   size_t need;
@@ -344,33 +319,22 @@
   UChar *p, *s, *bp;
   UChar bs[6];
-  va_list args;
-
-  va_init_list(args, fmt);
+
   n = xvsnprintf((char* )buf, bufsize, (const char* )fmt, args);
-  va_end(args);
 
   need = (pat_end - pat) * 4 + 4;
 
   if (n + need < (size_t )bufsize) {
-    strcat((char* )buf, ": /");
+    static const char sep[] = ": /";
+    memcpy((char* )buf + n, sep, sizeof(sep));
     s = buf + onigenc_str_bytelen_null(ONIG_ENCODING_ASCII, buf);
 
     p = pat;
     while (p < pat_end) {
-      if (*p == '\\') {
-	*s++ = *p++;
-	len = enclen(enc, p);
-	while (len-- > 0) *s++ = *p++;
-      }
-      else if (*p == '/') {
-	*s++ = (unsigned char )'\\';
-	*s++ = *p++;
-      }
-      else if (ONIGENC_IS_MBC_HEAD(enc, p)) {
-        len = enclen(enc, p);
+      if (ONIGENC_IS_MBC_HEAD(enc, p, pat_end)) {
+        len = enclen(enc, p, pat_end);
         if (ONIGENC_MBC_MINLEN(enc) == 1) {
           while (len-- > 0) *s++ = *p++;
         }
-        else { /* for UTF16 */
+        else { /* for UTF16/32 */
           int blen;
 
@@ -383,4 +347,13 @@
         }
       }
+      else if (*p == '\\') {
+	*s++ = *p++;
+	len = enclen(enc, p, pat_end);
+	while (len-- > 0) *s++ = *p++;
+      }
+      else if (*p == '/') {
+	*s++ = (unsigned char )'\\';
+	*s++ = *p++;
+      }
       else if (!ONIGENC_IS_CODE_PRINT(enc, *p) &&
 	       !ONIGENC_IS_CODE_SPACE(enc, *p)) {
@@ -399,2 +372,15 @@
   }
 }
+
+#if 0 /* unused */
+void
+onig_snprintf_with_pattern(UChar buf[], int bufsize, OnigEncoding enc,
+                           UChar* pat, UChar* pat_end, const UChar *fmt, ...)
+{
+  va_list args;
+  va_start(args, fmt);
+  onig_vsnprintf_with_pattern(buf, bufsize, enc,
+	  pat, pat_end, fmt, args);
+  va_end(args);
+}
+#endif
Index: EcnlProtoTool/trunk/onigmo-6.1.3/src/regexec.c
===================================================================
--- EcnlProtoTool/trunk/onigmo-5.15.0/src/regexec.c	(revision 321)
+++ EcnlProtoTool/trunk/onigmo-6.1.3/src/regexec.c	(revision 331)
@@ -4,5 +4,5 @@
 /*-
  * Copyright (c) 2002-2008  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
- * Copyright (c) 2011-2014  K.Takata  <kentkt AT csc DOT jp>
+ * Copyright (c) 2011-2016  K.Takata  <kentkt AT csc DOT jp>
  * All rights reserved.
  *
@@ -31,19 +31,37 @@
 #include "regint.h"
 
-#define USE_MATCH_RANGE_MUST_BE_INSIDE_OF_SPECIFIED_RANGE
-
-#ifndef USE_DIRECT_THREADED_VM
+#ifdef RUBY
+# undef USE_MATCH_RANGE_MUST_BE_INSIDE_OF_SPECIFIED_RANGE
+#else
+# define USE_MATCH_RANGE_MUST_BE_INSIDE_OF_SPECIFIED_RANGE
+#endif
+
+#ifndef USE_TOKEN_THREADED_VM
 # ifdef __GNUC__
-#   define USE_DIRECT_THREADED_VM 1
+#  define USE_TOKEN_THREADED_VM 1
 # else
-#   define USE_DIRECT_THREADED_VM 0
+#  define USE_TOKEN_THREADED_VM 0
 # endif
 #endif
 
+#ifdef RUBY
+# define ENC_DUMMY_FLAG (1<<24)
+static inline int
+rb_enc_asciicompat(OnigEncoding enc)
+{
+  return ONIGENC_MBC_MINLEN(enc)==1 && !((enc)->ruby_encoding_index & ENC_DUMMY_FLAG);
+}
+# undef ONIGENC_IS_MBC_ASCII_WORD
+# define ONIGENC_IS_MBC_ASCII_WORD(enc,s,end) \
+    (rb_enc_asciicompat(enc) ? (ISALNUM(*s) || *s=='_') : \
+   onigenc_ascii_is_code_ctype( \
+	ONIGENC_MBC_TO_CODE(enc,s,end),ONIGENC_CTYPE_WORD,enc))
+#endif /* RUBY */
+
 #ifdef USE_CRNL_AS_LINE_TERMINATOR
-#define ONIGENC_IS_MBC_CRNL(enc,p,end) \
+# define ONIGENC_IS_MBC_CRNL(enc,p,end) \
   (ONIGENC_MBC_TO_CODE(enc,p,end) == 13 && \
-   ONIGENC_MBC_TO_CODE(enc,(p+enclen(enc,p)),end) == 10)
-#define ONIGENC_IS_MBC_NEWLINE_EX(enc,p,start,end,option,check_prev) \
+   ONIGENC_MBC_TO_CODE(enc,(p+enclen(enc,p,end)),end) == 10)
+# define ONIGENC_IS_MBC_NEWLINE_EX(enc,p,start,end,option,check_prev) \
   is_mbc_newline_ex((enc),(p),(start),(end),(option),(check_prev))
 static int
@@ -54,5 +72,5 @@
     if (ONIGENC_MBC_TO_CODE(enc, p, end) == 0x0a) {
       if (check_prev) {
-	const UChar *prev = onigenc_get_prev_char_head(enc, start, p);
+	const UChar *prev = onigenc_get_prev_char_head(enc, start, p, end);
 	if ((prev != NULL) && ONIGENC_MBC_TO_CODE(enc, prev, end) == 0x0d)
 	  return 0;
@@ -64,5 +82,5 @@
     }
     else {
-      const UChar *pnext = p + enclen(enc, p);
+      const UChar *pnext = p + enclen(enc, p, end);
       if (pnext < end &&
 	  ONIGENC_MBC_TO_CODE(enc, p, end) == 0x0d &&
@@ -79,5 +97,5 @@
 }
 #else /* USE_CRNL_AS_LINE_TERMINATOR */
-#define ONIGENC_IS_MBC_NEWLINE_EX(enc,p,start,end,option,check_prev) \
+# define ONIGENC_IS_MBC_NEWLINE_EX(enc,p,start,end,option,check_prev) \
   ONIGENC_IS_MBC_NEWLINE((enc), (p), (end))
 #endif /* USE_CRNL_AS_LINE_TERMINATOR */
@@ -94,5 +112,5 @@
     for (i = 0; i < node->num_childs; i++) {
       if (IS_NOT_NULL(node->childs[i])) {
-        history_tree_free(node->childs[i]);
+	history_tree_free(node->childs[i]);
       }
     }
@@ -145,5 +163,5 @@
 history_tree_add_child(OnigCaptureTreeNode* parent, OnigCaptureTreeNode* child)
 {
-#define HISTORY_TREE_INIT_ALLOC_SIZE  8
+# define HISTORY_TREE_INIT_ALLOC_SIZE  8
 
   if (parent->num_childs >= parent->allocated) {
@@ -153,5 +171,5 @@
       n = HISTORY_TREE_INIT_ALLOC_SIZE;
       parent->childs =
-        (OnigCaptureTreeNode** )xmalloc(sizeof(OnigCaptureTreeNode*) * n);
+	(OnigCaptureTreeNode** )xmalloc(sizeof(OnigCaptureTreeNode*) * n);
       CHECK_NULL_RETURN_MEMERR(parent->childs);
     }
@@ -160,6 +178,6 @@
       n = parent->allocated * 2;
       tmp =
-        (OnigCaptureTreeNode** )xrealloc(parent->childs,
-                                         sizeof(OnigCaptureTreeNode*) * n);
+	(OnigCaptureTreeNode** )xrealloc(parent->childs,
+					 sizeof(OnigCaptureTreeNode*) * n);
       if (tmp == 0) {
 	history_tree_clear(parent);
@@ -337,5 +355,5 @@
 
 extern void
-onig_region_copy(OnigRegion* to, OnigRegion* from)
+onig_region_copy(OnigRegion* to, const OnigRegion* from)
 {
 #define RREGC_SIZE   (sizeof(int) * from->num_regs)
@@ -386,4 +404,6 @@
 #define STK_RETURN                 0x0900
 #define STK_VOID                   0x0a00  /* for fill a blank */
+#define STK_ABSENT_POS             0x0b00  /* for absent */
+#define STK_ABSENT                 0x0c00  /* absent inner loop marker */
 
 /* stack type check mask */
@@ -393,5 +413,5 @@
 
 #ifdef USE_FIND_LONGEST_SEARCH_ALL_OF_RANGE
-#define MATCH_ARG_INIT(msa, arg_option, arg_region, arg_start, arg_gpos) do {\
+# define MATCH_ARG_INIT(msa, arg_option, arg_region, arg_start, arg_gpos) do {\
   (msa).stack_p  = (void* )0;\
   (msa).options  = (arg_option);\
@@ -402,5 +422,5 @@
 } while(0)
 #else
-#define MATCH_ARG_INIT(msa, arg_option, arg_region, arg_start, arg_gpos) do {\
+# define MATCH_ARG_INIT(msa, arg_option, arg_region, arg_start, arg_gpos) do {\
   (msa).stack_p  = (void* )0;\
   (msa).options  = (arg_option);\
@@ -413,7 +433,7 @@
 #ifdef USE_COMBINATION_EXPLOSION_CHECK
 
-#define STATE_CHECK_BUFF_MALLOC_THRESHOLD_SIZE  16
-
-#define STATE_CHECK_BUFF_INIT(msa, str_len, offset, state_num) do {	\
+# define STATE_CHECK_BUFF_MALLOC_THRESHOLD_SIZE  16
+
+# define STATE_CHECK_BUFF_INIT(msa, str_len, offset, state_num) do {	\
   if ((state_num) > 0 && str_len >= STATE_CHECK_STRING_THRESHOLD_LEN) {\
     unsigned int size = (unsigned int )(((str_len) + 1) * (state_num) + 7) >> 3;\
@@ -441,5 +461,5 @@
   } while(0)
 
-#define MATCH_ARG_FREE(msa) do {\
+# define MATCH_ARG_FREE(msa) do {\
   if ((msa).stack_p) xfree((msa).stack_p);\
   if ((msa).state_check_buff_size >= STATE_CHECK_BUFF_MALLOC_THRESHOLD_SIZE) { \
@@ -448,6 +468,5 @@
 } while(0)
 #else /* USE_COMBINATION_EXPLOSION_CHECK */
-#define STATE_CHECK_BUFF_INIT(msa, str_len, offset, state_num)
-#define MATCH_ARG_FREE(msa)  if ((msa).stack_p) xfree((msa).stack_p)
+# define MATCH_ARG_FREE(msa)  if ((msa).stack_p) xfree((msa).stack_p)
 #endif /* USE_COMBINATION_EXPLOSION_CHECK */
 
@@ -466,5 +485,5 @@
       stk_end   = stk_base + msa->stack_n;\
     } else {\
-      stk_alloc = (OnigStackType* )xmalloc(sizeof(OnigStackType) * (stack_num));\
+      stk_alloc = (OnigStackType* )xalloca(sizeof(OnigStackType) * (stack_num));\
       stk_base  = stk_alloc;\
       stk       = stk_base;\
@@ -472,5 +491,5 @@
     }\
   } else if (msa->stack_p) {\
-    alloc_addr = (char* )xmalloc(sizeof(OnigStackIndex) * (ptr_num));\
+    alloc_addr = (char* )xalloca(sizeof(OnigStackIndex) * (ptr_num));\
     heap_addr  = NULL;\
     stk_alloc  = (OnigStackType* )(msa->stack_p);\
@@ -480,5 +499,5 @@
   }\
   else {\
-    alloc_addr = (char* )xmalloc(sizeof(OnigStackIndex) * (ptr_num)\
+    alloc_addr = (char* )xalloca(sizeof(OnigStackIndex) * (ptr_num)\
 		       + sizeof(OnigStackType) * (stack_num));\
     heap_addr  = NULL;\
@@ -538,7 +557,7 @@
     if (limit_size != 0 && n > limit_size) {
       if ((unsigned int )(stk_end - stk_base) == limit_size)
-        return ONIGERR_MATCH_STACK_LIMIT_OVER;
+	return ONIGERR_MATCH_STACK_LIMIT_OVER;
       else
-        n = limit_size;
+	n = limit_size;
     }
     x = (OnigStackType* )xrealloc(stk_base, sizeof(OnigStackType) * n);
@@ -577,7 +596,7 @@
 
 #ifdef USE_COMBINATION_EXPLOSION_CHECK
-#define STATE_CHECK_POS(s,snum) \
+# define STATE_CHECK_POS(s,snum) \
   (((s) - str) * num_comb_exp_check + ((snum) - 1))
-#define STATE_CHECK_VAL(v,snum) do {\
+# define STATE_CHECK_VAL(v,snum) do {\
   if (state_check_buff != NULL) {\
     int x = STATE_CHECK_POS(s,snum);\
@@ -588,5 +607,5 @@
 
 
-#define ELSE_IF_STATE_CHECK_MARK(stk) \
+# define ELSE_IF_STATE_CHECK_MARK(stk) \
   else if ((stk)->type == STK_STATE_CHECK_MARK) { \
     int x = STATE_CHECK_POS(stk->u.state.pstr, stk->u.state.state_check);\
@@ -594,5 +613,5 @@
   }
 
-#define STACK_PUSH(stack_type,pat,s,sprev,keep) do {\
+# define STACK_PUSH(stack_type,pat,s,sprev,keep) do {\
   STACK_ENSURE(1);\
   stk->type = (stack_type);\
@@ -605,5 +624,5 @@
 } while(0)
 
-#define STACK_PUSH_ENSURED(stack_type,pat) do {\
+# define STACK_PUSH_ENSURED(stack_type,pat) do {\
   stk->type = (stack_type);\
   stk->u.state.pcode = (pat);\
@@ -612,5 +631,5 @@
 } while(0)
 
-#define STACK_PUSH_ALT_WITH_STATE_CHECK(pat,s,sprev,snum,keep) do {\
+# define STACK_PUSH_ALT_WITH_STATE_CHECK(pat,s,sprev,snum,keep) do {\
   STACK_ENSURE(1);\
   stk->type = STK_ALT;\
@@ -623,5 +642,5 @@
 } while(0)
 
-#define STACK_PUSH_STATE_CHECK(s,snum) do {\
+# define STACK_PUSH_STATE_CHECK(s,snum) do {\
   if (state_check_buff != NULL) {\
     STACK_ENSURE(1);\
@@ -635,7 +654,7 @@
 #else /* USE_COMBINATION_EXPLOSION_CHECK */
 
-#define ELSE_IF_STATE_CHECK_MARK(stk)
-
-#define STACK_PUSH(stack_type,pat,s,sprev,keep) do {\
+# define ELSE_IF_STATE_CHECK_MARK(stk)
+
+# define STACK_PUSH(stack_type,pat,s,sprev,keep) do {\
   STACK_ENSURE(1);\
   stk->type = (stack_type);\
@@ -647,5 +666,5 @@
 } while(0)
 
-#define STACK_PUSH_ENSURED(stack_type,pat) do {\
+# define STACK_PUSH_ENSURED(stack_type,pat) do {\
   stk->type = (stack_type);\
   stk->u.state.pcode = (pat);\
@@ -657,5 +676,6 @@
 #define STACK_PUSH_POS(s,sprev,keep)         STACK_PUSH(STK_POS,NULL_UCHARP,s,sprev,keep)
 #define STACK_PUSH_POS_NOT(pat,s,sprev,keep) STACK_PUSH(STK_POS_NOT,pat,s,sprev,keep)
-#define STACK_PUSH_STOP_BT              STACK_PUSH_TYPE(STK_STOP_BT)
+#define STACK_PUSH_ABSENT                    STACK_PUSH_TYPE(STK_ABSENT)
+#define STACK_PUSH_STOP_BT                   STACK_PUSH_TYPE(STK_STOP_BT)
 #define STACK_PUSH_LOOK_BEHIND_NOT(pat,s,sprev,keep) \
         STACK_PUSH(STK_LOOK_BEHIND_NOT,pat,s,sprev,keep)
@@ -769,7 +789,15 @@
 } while(0)
 
+#define STACK_PUSH_ABSENT_POS(start, end) do {\
+  STACK_ENSURE(1);\
+  stk->type = STK_ABSENT_POS;\
+  stk->u.absent_pos.abs_pstr = (start);\
+  stk->u.absent_pos.end_pstr = (end);\
+  STACK_INC;\
+} while(0)
+
 
 #ifdef ONIG_DEBUG
-#define STACK_BASE_CHECK(p, at) \
+# define STACK_BASE_CHECK(p, at) \
   if ((p) < stk_base) {\
     fprintf(stderr, "at %s\n", at);\
@@ -777,5 +805,5 @@
   }
 #else
-#define STACK_BASE_CHECK(p, at)
+# define STACK_BASE_CHECK(p, at)
 #endif
 
@@ -867,4 +895,31 @@
     ELSE_IF_STATE_CHECK_MARK(stk);\
   }\
+} while(0)
+
+#define STACK_POP_TIL_ABSENT  do {\
+  while (1) {\
+    stk--;\
+    STACK_BASE_CHECK(stk, "STACK_POP_TIL_ABSENT"); \
+    if (stk->type == STK_ABSENT) break;\
+    else if (stk->type == STK_MEM_START) {\
+      mem_start_stk[stk->u.mem.num] = stk->u.mem.start;\
+      mem_end_stk[stk->u.mem.num]   = stk->u.mem.end;\
+    }\
+    else if (stk->type == STK_REPEAT_INC) {\
+      STACK_AT(stk->u.repeat_inc.si)->u.repeat.count--;\
+    }\
+    else if (stk->type == STK_MEM_END) {\
+      mem_start_stk[stk->u.mem.num] = stk->u.mem.start;\
+      mem_end_stk[stk->u.mem.num]   = stk->u.mem.end;\
+    }\
+    ELSE_IF_STATE_CHECK_MARK(stk);\
+  }\
+} while(0)
+
+#define STACK_POP_ABSENT_POS(start, end) do {\
+  stk--;\
+  STACK_BASE_CHECK(stk, "STACK_POP_ABSENT_POS"); \
+  (start) = stk->u.absent_pos.abs_pstr;\
+  (end) = stk->u.absent_pos.end_pstr;\
 } while(0)
 
@@ -1064,23 +1119,22 @@
 } while(0)
 
-#define STRING_CMP_IC(case_fold_flag,s1,ps2,len) do {\
-  if (string_cmp_ic(encode, case_fold_flag, s1, ps2, len) == 0) \
+#define STRING_CMP_IC(case_fold_flag,s1,ps2,len,text_end) do {\
+  if (string_cmp_ic(encode, case_fold_flag, s1, ps2, len, text_end) == 0) \
     goto fail; \
 } while(0)
 
 static int string_cmp_ic(OnigEncoding enc, int case_fold_flag,
-			 UChar* s1, UChar** ps2, OnigDistance mblen)
+			 UChar* s1, UChar** ps2, OnigDistance mblen, const UChar* text_end)
 {
   UChar buf1[ONIGENC_MBC_CASE_FOLD_MAXLEN];
   UChar buf2[ONIGENC_MBC_CASE_FOLD_MAXLEN];
-  UChar *p1, *p2, *end1, *s2, *end2;
+  UChar *p1, *p2, *end1, *s2;
   int len1, len2;
 
   s2   = *ps2;
   end1 = s1 + mblen;
-  end2 = s2 + mblen;
   while (s1 < end1) {
-    len1 = ONIGENC_MBC_CASE_FOLD(enc, case_fold_flag, &s1, end1, buf1);
-    len2 = ONIGENC_MBC_CASE_FOLD(enc, case_fold_flag, &s2, end2, buf2);
+    len1 = ONIGENC_MBC_CASE_FOLD(enc, case_fold_flag, &s1, text_end, buf1);
+    len2 = ONIGENC_MBC_CASE_FOLD(enc, case_fold_flag, &s2, text_end, buf2);
     if (len1 != len2) return 0;
     p1 = buf1;
@@ -1106,6 +1160,6 @@
 } while(0)
 
-#define STRING_CMP_VALUE_IC(case_fold_flag,s1,ps2,len,is_fail) do {\
-  if (string_cmp_ic(encode, case_fold_flag, s1, ps2, len) == 0) \
+#define STRING_CMP_VALUE_IC(case_fold_flag,s1,ps2,len,text_end,is_fail) do {\
+  if (string_cmp_ic(encode, case_fold_flag, s1, ps2, len, text_end) == 0) \
     is_fail = 1; \
   else \
@@ -1115,14 +1169,16 @@
 
 #define IS_EMPTY_STR           (str == end)
-#define ON_STR_BEGIN(s)       ((s) == str)
-#define ON_STR_END(s)         ((s) == end)
+#define ON_STR_BEGIN(s)        ((s) == str)
+#define ON_STR_END(s)          ((s) == end)
 #ifdef USE_MATCH_RANGE_MUST_BE_INSIDE_OF_SPECIFIED_RANGE
-#define DATA_ENSURE_CHECK1     (s < right_range)
-#define DATA_ENSURE_CHECK(n)   (s + (n) <= right_range)
-#define DATA_ENSURE(n)         if (s + (n) > right_range) goto fail
+# define DATA_ENSURE_CHECK1    (s < right_range)
+# define DATA_ENSURE_CHECK(n)  (s + (n) <= right_range)
+# define DATA_ENSURE(n)        if (s + (n) > right_range) goto fail
+# define ABSENT_END_POS        right_range
 #else
-#define DATA_ENSURE_CHECK1     (s < end)
-#define DATA_ENSURE_CHECK(n)   (s + (n) <= end)
-#define DATA_ENSURE(n)         if (s + (n) > end) goto fail
+# define DATA_ENSURE_CHECK1    (s < end)
+# define DATA_ENSURE_CHECK(n)  (s + (n) <= end)
+# define DATA_ENSURE(n)        if (s + (n) > end) goto fail
+# define ABSENT_END_POS        end
 #endif /* USE_MATCH_RANGE_MUST_BE_INSIDE_OF_SPECIFIED_RANGE */
 
@@ -1141,27 +1197,27 @@
       n = k->u.mem.num;
       if (n <= ONIG_MAX_CAPTURE_HISTORY_GROUP &&
-          BIT_STATUS_AT(reg->capture_history, n) != 0) {
-        child = history_node_new();
-        CHECK_NULL_RETURN_MEMERR(child);
-        child->group = n;
-        child->beg = k->u.mem.pstr - str;
-        r = history_tree_add_child(node, child);
-        if (r != 0) {
-          history_tree_free(child);
-          return r;
-        }
-        *kp = (k + 1);
-        r = make_capture_history_tree(child, kp, stk_top, str, reg);
-        if (r != 0) return r;
-
-        k = *kp;
-        child->end = k->u.mem.pstr - str;
+	  BIT_STATUS_AT(reg->capture_history, n) != 0) {
+	child = history_node_new();
+	CHECK_NULL_RETURN_MEMERR(child);
+	child->group = n;
+	child->beg = k->u.mem.pstr - str;
+	r = history_tree_add_child(node, child);
+	if (r != 0) {
+	  history_tree_free(child);
+	  return r;
+	}
+	*kp = (k + 1);
+	r = make_capture_history_tree(child, kp, stk_top, str, reg);
+	if (r != 0) return r;
+
+	k = *kp;
+	child->end = k->u.mem.pstr - str;
       }
     }
     else if (k->type == STK_MEM_END) {
       if (k->u.mem.num == node->group) {
-        node->end = k->u.mem.pstr - str;
-        *kp = k;
-        return 0;
+	node->end = k->u.mem.pstr - str;
+	*kp = k;
+	return 0;
       }
     }
@@ -1186,8 +1242,8 @@
 }
 
-static int backref_match_at_nested_level(regex_t* reg
-	 , OnigStackType* top, OnigStackType* stk_base
-	 , int ignore_case, int case_fold_flag
-	 , int nest, int mem_num, UChar* memp, UChar** s, const UChar* send)
+static int backref_match_at_nested_level(regex_t* reg,
+	 OnigStackType* top, OnigStackType* stk_base,
+	 int ignore_case, int case_fold_flag,
+	 int nest, int mem_num, UChar* memp, UChar** s, const UChar* send)
 {
   UChar *ss, *p, *pstart, *pend = NULL_UCHARP;
@@ -1216,5 +1272,5 @@
 	    if (ignore_case != 0) {
 	      if (string_cmp_ic(reg->enc, case_fold_flag,
-				pstart, &ss, pend - pstart) == 0)
+				pstart, &ss, pend - pstart, send) == 0)
 		return 0; /* or goto next_mem; */
 	    }
@@ -1246,25 +1302,35 @@
 #ifdef ONIG_DEBUG_STATISTICS
 
-#define USE_TIMEOFDAY
-
-#ifdef USE_TIMEOFDAY
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
+# ifdef _WIN32
+#  include <windows.h>
+static LARGE_INTEGER ts, te, freq;
+#  define GETTIME(t)	  QueryPerformanceCounter(&(t))
+#  define TIMEDIFF(te,ts) (unsigned long )(((te).QuadPart - (ts).QuadPart) \
+			    * 1000000 / freq.QuadPart)
+# else /* _WIN32 */
+
+#  define USE_TIMEOFDAY
+
+#  ifdef USE_TIMEOFDAY
+#   ifdef HAVE_SYS_TIME_H
+#    include <sys/time.h>
+#   endif
+#   ifdef HAVE_UNISTD_H
+#    include <unistd.h>
+#   endif
 static struct timeval ts, te;
-#define GETTIME(t)        gettimeofday(&(t), (struct timezone* )0)
-#define TIMEDIFF(te,ts)   (((te).tv_usec - (ts).tv_usec) + \
-                           (((te).tv_sec - (ts).tv_sec)*1000000))
-#else /* USE_TIMEOFDAY */
-#ifdef HAVE_SYS_TIMES_H
-#include <sys/times.h>
-#endif
+#   define GETTIME(t)      gettimeofday(&(t), (struct timezone* )0)
+#   define TIMEDIFF(te,ts) (((te).tv_usec - (ts).tv_usec) + \
+                            (((te).tv_sec - (ts).tv_sec)*1000000))
+#  else /* USE_TIMEOFDAY */
+#   ifdef HAVE_SYS_TIMES_H
+#    include <sys/times.h>
+#   endif
 static struct tms ts, te;
-#define GETTIME(t)         times(&(t))
-#define TIMEDIFF(te,ts)   ((te).tms_utime - (ts).tms_utime)
-#endif /* USE_TIMEOFDAY */
+#   define GETTIME(t)       times(&(t))
+#   define TIMEDIFF(te,ts)  ((te).tms_utime - (ts).tms_utime)
+#  endif /* USE_TIMEOFDAY */
+
+# endif /* _WIN32 */
 
 static int OpCounter[256];
@@ -1275,5 +1341,5 @@
 static int MaxStackDepth = 0;
 
-#define MOP_IN(opcode) do {\
+# define MOP_IN(opcode) do {\
   if (opcode == OpPrevTarget) OpPrevCounter[OpCurr]++;\
   OpCurr = opcode;\
@@ -1282,5 +1348,5 @@
 } while(0)
 
-#define MOP_OUT do {\
+# define MOP_OUT do {\
   GETTIME(te);\
   OpTime[OpCurr] += TIMEDIFF(te, ts);\
@@ -1295,4 +1361,7 @@
   }
   MaxStackDepth = 0;
+# ifdef _WIN32
+  QueryPerformanceFrequency(&freq);
+# endif
 }
 
@@ -1309,5 +1378,5 @@
 }
 
-#define STACK_INC do {\
+# define STACK_INC do {\
   stk++;\
   if (stk - stk_base > MaxStackDepth) \
@@ -1316,28 +1385,47 @@
 
 #else /* ONIG_DEBUG_STATISTICS */
-#define STACK_INC     stk++
-
-#define MOP_IN(opcode)
-#define MOP_OUT
+# define STACK_INC     stk++
+
+# define MOP_IN(opcode)
+# define MOP_OUT
 #endif /* ONIG_DEBUG_STATISTICS */
 
 
-
-/* matching region of POSIX API */
-typedef int regoff_t;
-
-typedef struct {
-  regoff_t  rm_so;
-  regoff_t  rm_eo;
-} posix_regmatch_t;
+#ifdef ONIG_DEBUG_MATCH
+static char *
+stack_type_str(int stack_type)
+{
+  switch (stack_type) {
+    case STK_ALT:		return "Alt   ";
+    case STK_LOOK_BEHIND_NOT:	return "LBNot ";
+    case STK_POS_NOT:		return "PosNot";
+    case STK_MEM_START:		return "MemS  ";
+    case STK_MEM_END:		return "MemE  ";
+    case STK_REPEAT_INC:	return "RepInc";
+    case STK_STATE_CHECK_MARK:	return "StChMk";
+    case STK_NULL_CHECK_START:	return "NulChS";
+    case STK_NULL_CHECK_END:	return "NulChE";
+    case STK_MEM_END_MARK:	return "MemEMk";
+    case STK_POS:		return "Pos   ";
+    case STK_STOP_BT:		return "StopBt";
+    case STK_REPEAT:		return "Rep   ";
+    case STK_CALL_FRAME:	return "Call  ";
+    case STK_RETURN:		return "Ret   ";
+    case STK_VOID:		return "Void  ";
+    case STK_ABSENT_POS:	return "AbsPos";
+    case STK_ABSENT:		return "Absent";
+    default:			return "      ";
+  }
+}
+#endif
 
 /* match data(str - end) from position (sstart). */
 /* if sstart == str then set sprev to NULL. */
 static OnigPosition
-match_at_(regex_t* reg, const UChar* str, const UChar* end,
+match_at(regex_t* reg, const UChar* str, const UChar* end,
 #ifdef USE_MATCH_RANGE_MUST_BE_INSIDE_OF_SPECIFIED_RANGE
 	 const UChar* right_range,
 #endif
-	 const UChar* sstart, UChar* sprev, OnigMatchArg* msa, char **palloca_base)
+	 const UChar* sstart, UChar* sprev, OnigMatchArg* msa)
 {
   static const UChar FinishCode[] = { OP_FINISH };
@@ -1354,4 +1442,5 @@
   UChar *p = reg->p;
   UChar *pkeep;
+  char *alloca_base;
   char *xmalloc_base = NULL;
   OnigStackType *stk_alloc, *stk_base, *stk, *stk_end;
@@ -1366,11 +1455,12 @@
 #endif
 
-#if USE_DIRECT_THREADED_VM
-#define VM_LOOP JUMP;
-#define VM_LOOP_END
-#define CASE(x) L_##x: sbegin = s; OPCODE_EXEC_HOOK;
-#define DEFAULT L_DEFAULT:
-#define NEXT sprev = sbegin; JUMP
-#define JUMP goto *oplabels[*p++]
+#if USE_TOKEN_THREADED_VM
+# define OP_OFFSET  1
+# define VM_LOOP JUMP;
+# define VM_LOOP_END
+# define CASE(x) L_##x: sbegin = s; OPCODE_EXEC_HOOK;
+# define DEFAULT L_DEFAULT:
+# define NEXT sprev = sbegin; JUMP
+# define JUMP goto *oplabels[*p++]
 
   static const void *oplabels[] = {
@@ -1400,5 +1490,4 @@
     &&L_OP_CCLASS_MB_NOT,
     &&L_OP_CCLASS_MIX_NOT,
-    &&L_OP_CCLASS_NODE,          /* pointer to CClassNode node */
 
     &&L_OP_ANYCHAR,                 /* "."  */
@@ -1413,22 +1502,22 @@
     &&L_OP_WORD_BOUND,
     &&L_OP_NOT_WORD_BOUND,
-#ifdef USE_WORD_BEGIN_END
+# ifdef USE_WORD_BEGIN_END
     &&L_OP_WORD_BEGIN,
     &&L_OP_WORD_END,
-#else
+# else
     &&L_DEFAULT,
     &&L_DEFAULT,
-#endif
+# endif
     &&L_OP_ASCII_WORD,
     &&L_OP_NOT_ASCII_WORD,
     &&L_OP_ASCII_WORD_BOUND,
     &&L_OP_NOT_ASCII_WORD_BOUND,
-#ifdef USE_WORD_BEGIN_END
+# ifdef USE_WORD_BEGIN_END
     &&L_OP_ASCII_WORD_BEGIN,
     &&L_OP_ASCII_WORD_END,
-#else
+# else
     &&L_DEFAULT,
     &&L_DEFAULT,
-#endif
+# endif
 
     &&L_OP_BEGIN_BUF,
@@ -1438,5 +1527,4 @@
     &&L_OP_SEMI_END_BUF,
     &&L_OP_BEGIN_POSITION,
-    &&L_OP_BEGIN_POS_OR_LINE,    /* used for implicit anchor optimization */
 
     &&L_OP_BACKREF1,
@@ -1446,23 +1534,23 @@
     &&L_OP_BACKREF_MULTI,
     &&L_OP_BACKREF_MULTI_IC,
-#ifdef USE_BACKREF_WITH_LEVEL
+# ifdef USE_BACKREF_WITH_LEVEL
     &&L_OP_BACKREF_WITH_LEVEL,   /* \k<xxx+n>, \k<xxx-n> */
-#else
+# else
     &&L_DEFAULT,
-#endif
+# endif
     &&L_OP_MEMORY_START,
     &&L_OP_MEMORY_START_PUSH,    /* push back-tracker to stack */
     &&L_OP_MEMORY_END_PUSH,      /* push back-tracker to stack */
-#ifdef USE_SUBEXP_CALL
+# ifdef USE_SUBEXP_CALL
     &&L_OP_MEMORY_END_PUSH_REC,  /* push back-tracker to stack */
-#else
+# else
     &&L_DEFAULT,
-#endif
+# endif
     &&L_OP_MEMORY_END,
-#ifdef USE_SUBEXP_CALL
+# ifdef USE_SUBEXP_CALL
     &&L_OP_MEMORY_END_REC,       /* push marker to stack */
-#else
+# else
     &&L_DEFAULT,
-#endif
+# endif
 
     &&L_OP_KEEP,
@@ -1472,5 +1560,9 @@
     &&L_OP_PUSH,
     &&L_OP_POP,
+# ifdef USE_OP_PUSH_OR_JUMP_EXACT
     &&L_OP_PUSH_OR_JUMP_EXACT1,  /* if match exact then push, else jump. */
+# else
+    &&L_DEFAULT,
+# endif
     &&L_OP_PUSH_IF_PEEK_NEXT,    /* if match exact then push, else none. */
     &&L_OP_REPEAT,               /* {n,m} */
@@ -1482,14 +1574,14 @@
     &&L_OP_NULL_CHECK_START,     /* null loop checker start */
     &&L_OP_NULL_CHECK_END,       /* null loop checker end   */
-#ifdef USE_MONOMANIAC_CHECK_CAPTURES_IN_ENDLESS_REPEAT
+# ifdef USE_MONOMANIAC_CHECK_CAPTURES_IN_ENDLESS_REPEAT
     &&L_OP_NULL_CHECK_END_MEMST, /* null loop checker end (with capture status) */
-#else
+# else
     &&L_DEFAULT,
-#endif
-#ifdef USE_SUBEXP_CALL
+# endif
+# ifdef USE_SUBEXP_CALL
     &&L_OP_NULL_CHECK_END_MEMST_PUSH, /* with capture status and push check-end */
-#else
+# else
     &&L_DEFAULT,
-#endif
+# endif
 
     &&L_OP_PUSH_POS,             /* (?=...)  start */
@@ -1502,94 +1594,96 @@
     &&L_OP_PUSH_LOOK_BEHIND_NOT, /* (?<!...) start */
     &&L_OP_FAIL_LOOK_BEHIND_NOT, /* (?<!...) end   */
-
-#ifdef USE_SUBEXP_CALL
+    &&L_OP_PUSH_ABSENT_POS,      /* (?~...)  start */
+    &&L_OP_ABSENT,               /* (?~...)  start of inner loop */
+    &&L_OP_ABSENT_END,           /* (?~...)  end   */
+
+# ifdef USE_SUBEXP_CALL
     &&L_OP_CALL,                 /* \g<name> */
     &&L_OP_RETURN,
-#else
+# else
     &&L_DEFAULT,
     &&L_DEFAULT,
-#endif
+# endif
     &&L_OP_CONDITION,
 
-#ifdef USE_COMBINATION_EXPLOSION_CHECK
+# ifdef USE_COMBINATION_EXPLOSION_CHECK
     &&L_OP_STATE_CHECK_PUSH,         /* combination explosion check and push */
     &&L_OP_STATE_CHECK_PUSH_OR_JUMP, /* check ok -> push, else jump  */
     &&L_OP_STATE_CHECK,              /* check only */
-#else
+# else
     &&L_DEFAULT,
     &&L_DEFAULT,
     &&L_DEFAULT,
-#endif
-#ifdef USE_COMBINATION_EXPLOSION_CHECK
+# endif
+# ifdef USE_COMBINATION_EXPLOSION_CHECK
     &&L_OP_STATE_CHECK_ANYCHAR_STAR,
     &&L_OP_STATE_CHECK_ANYCHAR_ML_STAR,
-#else
+# else
     &&L_DEFAULT,
     &&L_DEFAULT,
-#endif
+# endif
     /* no need: IS_DYNAMIC_OPTION() == 0 */
-#if 0   /* no need: IS_DYNAMIC_OPTION() == 0 */
+# if 0   /* no need: IS_DYNAMIC_OPTION() == 0 */
     &&L_OP_SET_OPTION_PUSH,    /* set option and push recover option */
     &&L_OP_SET_OPTION          /* set option */
-#else
+# else
     &&L_DEFAULT,
     &&L_DEFAULT
-#endif
+# endif
   };
-#else
-
-#define VM_LOOP                                 \
+#else /* USE_TOKEN_THREADED_VM */
+
+# define OP_OFFSET  0
+# define VM_LOOP                                \
   while (1) {                                   \
   OPCODE_EXEC_HOOK;                             \
   sbegin = s;                                   \
   switch (*p++) {
-#define VM_LOOP_END } sprev = sbegin; }
-#define CASE(x) case x:
-#define DEFAULT default:
-#define NEXT break
-#define JUMP continue; break
-#endif
+# define VM_LOOP_END } sprev = sbegin; }
+# define CASE(x) case x:
+# define DEFAULT default:
+# define NEXT break
+# define JUMP continue; break
+#endif /* USE_TOKEN_THREADED_VM */
 
 
 #ifdef USE_SUBEXP_CALL
-  /* Stack #0 is used to store the pattern itself and used for (?R), \g<0>, etc. */
-  n = reg->num_repeat + (reg->num_mem + 1) * 2;
-
-  STACK_INIT(*palloca_base, xmalloc_base, n, INIT_MATCH_STACK_SIZE);
+/* Stack #0 is used to store the pattern itself and used for (?R), \g<0>,
+   etc. Additional space is required. */
+# define ADD_NUMMEM 1
+#else
+/* Stack #0 not is used. */
+# define ADD_NUMMEM 0
+#endif
+
+  n = reg->num_repeat + (reg->num_mem + ADD_NUMMEM) * 2;
+
+  STACK_INIT(alloca_base, xmalloc_base, n, INIT_MATCH_STACK_SIZE);
   pop_level = reg->stack_pop_level;
   num_mem = reg->num_mem;
-  repeat_stk = (OnigStackIndex* )*palloca_base;
+  repeat_stk = (OnigStackIndex* )alloca_base;
 
   mem_start_stk = (OnigStackIndex* )(repeat_stk + reg->num_repeat);
-  mem_end_stk   = mem_start_stk + (num_mem + 1);
-#else /* USE_SUBEXP_CALL */
-  /* Stack #0 not is used. */
-  n = reg->num_repeat + reg->num_mem * 2;
-
-  STACK_INIT(*palloca_base, xmalloc_base, n, INIT_MATCH_STACK_SIZE);
-  pop_level = reg->stack_pop_level;
-  num_mem = reg->num_mem;
-  repeat_stk = (OnigStackIndex* )*palloca_base;
-
-  mem_start_stk = (OnigStackIndex* )(repeat_stk + reg->num_repeat);
-  mem_end_stk   = mem_start_stk + num_mem;
+  mem_end_stk   = mem_start_stk + (num_mem + ADD_NUMMEM);
+  {
+    OnigStackIndex *pp = mem_start_stk;
+    for (; pp < repeat_stk + n; pp += 2) {
+      pp[0] = INVALID_STACK_INDEX;
+      pp[1] = INVALID_STACK_INDEX;
+    }
+  }
+#ifndef USE_SUBEXP_CALL
   mem_start_stk--; /* for index start from 1,
 		      mem_start_stk[1]..mem_start_stk[num_mem] */
   mem_end_stk--;   /* for index start from 1,
 		      mem_end_stk[1]..mem_end_stk[num_mem] */
-#endif /* USE_SUBEXP_CALL */
-  {
-      OnigStackIndex *pp = mem_start_stk;
-      for (; pp < (repeat_stk + n); pp+=2) {
-	  pp[0] = INVALID_STACK_INDEX;
-	  pp[1] = INVALID_STACK_INDEX;
-      }
-  }
+#endif
 
 #ifdef ONIG_DEBUG_MATCH
-  fprintf(stderr, "match_at: str: %"PRIdPTR" (%p), end: %"PRIdPTR" (%p), start: %"PRIdPTR" (%p), sprev: %"PRIdPTR" (%p)\n",
-	  (intptr_t )str, str, (intptr_t )end, end, (intptr_t )sstart, sstart, (intptr_t )sprev, sprev);
+  fprintf(stderr, "match_at: str: %"PRIuPTR" (%p), end: %"PRIuPTR" (%p), start: %"PRIuPTR" (%p), sprev: %"PRIuPTR" (%p)\n",
+	  (uintptr_t )str, str, (uintptr_t )end, end, (uintptr_t )sstart, sstart, (uintptr_t )sprev, sprev);
   fprintf(stderr, "size: %d, start offset: %d\n",
 	  (int )(end - str), (int )(sstart - str));
+  fprintf(stderr, "\n ofs> str                   stk:type   addr:opcode\n");
 #endif
 
@@ -1601,9 +1695,9 @@
 
 #ifdef ONIG_DEBUG_MATCH
-#define OPCODE_EXEC_HOOK                                                \
+# define OPCODE_EXEC_HOOK                                               \
     if (s) {                                                            \
       UChar *op, *q, *bp, buf[50];                                      \
       int len;                                                          \
-      op = p - 1;                                                       \
+      op = p - OP_OFFSET;                                               \
       fprintf(stderr, "%4"PRIdPTR"> \"", (*op == OP_FINISH) ? (ptrdiff_t )-1 : s - str); \
       bp = buf;                                                         \
@@ -1611,19 +1705,22 @@
       if (*op != OP_FINISH) {    /* s may not be a valid pointer if OP_FINISH. */ \
 	for (i = 0; i < 7 && q < end; i++) {                            \
-	  len = enclen(encode, q);                                      \
+	  len = enclen(encode, q, end);                                 \
 	  while (len-- > 0) *bp++ = *q++;                               \
 	}                                                               \
+        if (q < end) { xmemcpy(bp, "...", 3); bp += 3; }                \
       }                                                                 \
-      if (q < end) { xmemcpy(bp, "...\"", 4); bp += 4; }                \
-      else         { xmemcpy(bp, "\"",    1); bp += 1; }                \
+      xmemcpy(bp, "\"", 1); bp += 1;                                    \
       *bp = 0;                                                          \
       fputs((char* )buf, stderr);                                       \
       for (i = 0; i < 20 - (bp - buf); i++) fputc(' ', stderr);         \
-      fprintf(stderr, "%4"PRIdPTR":", (op == FinishCode) ? (ptrdiff_t )-1 : op - reg->p); \
-      onig_print_compiled_byte_code(stderr, op, NULL, encode);           \
+      fprintf(stderr, "%4"PRIdPTR":%s %4"PRIdPTR":",                    \
+	  stk - stk_base - 1,                                           \
+	  (stk > stk_base) ? stack_type_str(stk[-1].type) : "      ",   \
+	  (op == FinishCode) ? (ptrdiff_t )-1 : op - reg->p);           \
+      onig_print_compiled_byte_code(stderr, op, reg->p+reg->used, NULL, encode); \
       fprintf(stderr, "\n");                                            \
     }
 #else
-#define OPCODE_EXEC_HOOK ((void) 0)
+# define OPCODE_EXEC_HOOK ((void) 0)
 #endif
 
@@ -1642,81 +1739,54 @@
 	  else
 	    goto end_best_len;
-        }
+	}
 #endif
 	best_len = n;
 	region = msa->region;
 	if (region) {
-#ifdef USE_POSIX_API_REGION_OPTION
-	  if (IS_POSIX_REGION(msa->options)) {
-	    posix_regmatch_t* rmt = (posix_regmatch_t* )region;
-
-	    rmt[0].rm_so = (regoff_t )(((pkeep > s) ? s : pkeep) - str);
-	    rmt[0].rm_eo = (regoff_t )(s - str);
-	    for (i = 1; i <= num_mem; i++) {
-	      if (mem_end_stk[i] != INVALID_STACK_INDEX) {
-		if (BIT_STATUS_AT(reg->bt_mem_start, i))
-		  rmt[i].rm_so = (regoff_t )(STACK_AT(mem_start_stk[i])->u.mem.pstr - str);
-		else
-		  rmt[i].rm_so = (regoff_t )((UChar* )((void* )(mem_start_stk[i])) - str);
-
-		rmt[i].rm_eo = (regoff_t )((BIT_STATUS_AT(reg->bt_mem_end, i)
+	  region->beg[0] = ((pkeep > s) ? s : pkeep) - str;
+	  region->end[0] = s - str;
+	  for (i = 1; i <= num_mem; i++) {
+	    if (mem_end_stk[i] != INVALID_STACK_INDEX) {
+	      if (BIT_STATUS_AT(reg->bt_mem_start, i))
+		region->beg[i] = STACK_AT(mem_start_stk[i])->u.mem.pstr - str;
+	      else
+		region->beg[i] = (UChar* )((void* )mem_start_stk[i]) - str;
+
+	      region->end[i] = (BIT_STATUS_AT(reg->bt_mem_end, i)
 				? STACK_AT(mem_end_stk[i])->u.mem.pstr
-				: (UChar* )((void* )mem_end_stk[i])) - str);
-	      }
-	      else {
-		rmt[i].rm_so = rmt[i].rm_eo = ONIG_REGION_NOTPOS;
-	      }
+				: (UChar* )((void* )mem_end_stk[i])) - str;
+	    }
+	    else {
+	      region->beg[i] = region->end[i] = ONIG_REGION_NOTPOS;
 	    }
 	  }
-	  else {
-#endif /* USE_POSIX_API_REGION_OPTION */
-	    region->beg[0] = ((pkeep > s) ? s : pkeep) - str;
-	    region->end[0] = s - str;
-	    for (i = 1; i <= num_mem; i++) {
-	      if (mem_end_stk[i] != INVALID_STACK_INDEX) {
-		if (BIT_STATUS_AT(reg->bt_mem_start, i))
-		  region->beg[i] = STACK_AT(mem_start_stk[i])->u.mem.pstr - str;
-		else
-		  region->beg[i] = (UChar* )((void* )mem_start_stk[i]) - str;
-
-		region->end[i] = (BIT_STATUS_AT(reg->bt_mem_end, i)
-				  ? STACK_AT(mem_end_stk[i])->u.mem.pstr
-				  : (UChar* )((void* )mem_end_stk[i])) - str;
-	      }
-	      else {
-		region->beg[i] = region->end[i] = ONIG_REGION_NOTPOS;
-	      }
+
+#ifdef USE_CAPTURE_HISTORY
+	  if (reg->capture_history != 0) {
+	    int r;
+	    OnigCaptureTreeNode* node;
+
+	    if (IS_NULL(region->history_root)) {
+	      region->history_root = node = history_node_new();
+	      CHECK_NULL_RETURN_MEMERR(node);
 	    }
-
-#ifdef USE_CAPTURE_HISTORY
-	    if (reg->capture_history != 0) {
-              int r;
-              OnigCaptureTreeNode* node;
-
-              if (IS_NULL(region->history_root)) {
-                region->history_root = node = history_node_new();
-                CHECK_NULL_RETURN_MEMERR(node);
-              }
-              else {
-                node = region->history_root;
-                history_tree_clear(node);
-              }
-
-              node->group = 0;
-              node->beg   = ((pkeep > s) ? s : pkeep) - str;
-              node->end   = s - str;
-
-              stkp = stk_base;
-              r = make_capture_history_tree(region->history_root, &stkp,
-                                            stk, (UChar* )str, reg);
-              if (r < 0) {
-                best_len = r; /* error code */
-                goto finish;
-              }
+	    else {
+	      node = region->history_root;
+	      history_tree_clear(node);
 	    }
+
+	    node->group = 0;
+	    node->beg   = ((pkeep > s) ? s : pkeep) - str;
+	    node->end   = s - str;
+
+	    stkp = stk_base;
+	    r = make_capture_history_tree(region->history_root, &stkp,
+		stk, (UChar* )str, reg);
+	    if (r < 0) {
+	      best_len = r; /* error code */
+	      goto finish;
+	    }
+	  }
 #endif /* USE_CAPTURE_HISTORY */
-#ifdef USE_POSIX_API_REGION_OPTION
-	  } /* else IS_POSIX_REGION() */
-#endif
 	} /* if (region) */
       } /* n > best_len */
@@ -1742,12 +1812,7 @@
 
     CASE(OP_EXACT1)  MOP_IN(OP_EXACT1);
-#if 0
       DATA_ENSURE(1);
       if (*p != *s) goto fail;
       p++; s++;
-#endif
-      if (*p != *s++) goto fail;
-      DATA_ENSURE(0);
-      p++;
       MOP_OUT;
       NEXT;
@@ -1767,6 +1832,6 @@
 	while (len-- > 0) {
 	  if (*p != *q) {
-            goto fail;
-          }
+	    goto fail;
+	  }
 	  p++; q++;
 	}
@@ -1950,10 +2015,10 @@
       if (BITSET_AT(((BitSetRef )p), *s) == 0) goto fail;
       p += SIZE_BITSET;
-      s += enclen(encode, s);   /* OP_CCLASS can match mb-code. \D, \S */
+      s += enclen(encode, s, end);   /* OP_CCLASS can match mb-code. \D, \S */
       MOP_OUT;
       NEXT;
 
     CASE(OP_CCLASS_MB)  MOP_IN(OP_CCLASS_MB);
-      if (! ONIGENC_IS_MBC_HEAD(encode, s)) goto fail;
+      if (! ONIGENC_IS_MBC_HEAD(encode, s, end)) goto fail;
 
     cclass_mb:
@@ -1965,5 +2030,5 @@
 
 	DATA_ENSURE(1);
-	mb_len = enclen(encode, s);
+	mb_len = enclen(encode, s, end);
 	DATA_ENSURE(mb_len);
 	ss = s;
@@ -1985,5 +2050,5 @@
     CASE(OP_CCLASS_MIX)  MOP_IN(OP_CCLASS_MIX);
       DATA_ENSURE(1);
-      if (ONIGENC_IS_MBC_HEAD(encode, s)) {
+      if (ONIGENC_IS_MBC_HEAD(encode, s, end)) {
 	p += SIZE_BITSET;
 	goto cclass_mb;
@@ -2005,5 +2070,5 @@
       if (BITSET_AT(((BitSetRef )p), *s) != 0) goto fail;
       p += SIZE_BITSET;
-      s += enclen(encode, s);
+      s += enclen(encode, s, end);
       MOP_OUT;
       NEXT;
@@ -2011,5 +2076,5 @@
     CASE(OP_CCLASS_MB_NOT)  MOP_IN(OP_CCLASS_MB_NOT);
       DATA_ENSURE(1);
-      if (! ONIGENC_IS_MBC_HEAD(encode, s)) {
+      if (! ONIGENC_IS_MBC_HEAD(encode, s, end)) {
 	s++;
 	GET_LENGTH_INC(tlen, p);
@@ -2023,8 +2088,8 @@
 	OnigCodePoint code;
 	UChar *ss;
-	int mb_len = enclen(encode, s);
+	int mb_len = enclen(encode, s, end);
 
 	if (! DATA_ENSURE_CHECK(mb_len)) {
-          DATA_ENSURE(1);
+	  DATA_ENSURE(1);
 	  s = (UChar* )end;
 	  p += tlen;
@@ -2052,5 +2117,5 @@
     CASE(OP_CCLASS_MIX_NOT)  MOP_IN(OP_CCLASS_MIX_NOT);
       DATA_ENSURE(1);
-      if (ONIGENC_IS_MBC_HEAD(encode, s)) {
+      if (ONIGENC_IS_MBC_HEAD(encode, s, end)) {
 	p += SIZE_BITSET;
 	goto cclass_mb_not;
@@ -2068,26 +2133,7 @@
       NEXT;
 
-    CASE(OP_CCLASS_NODE)  MOP_IN(OP_CCLASS_NODE);
-      {
-	OnigCodePoint code;
-        void *node;
-        int mb_len;
-        UChar *ss;
-
-        DATA_ENSURE(1);
-        GET_POINTER_INC(node, p);
-	mb_len = enclen(encode, s);
-	ss = s;
-	s += mb_len;
-	DATA_ENSURE(0);
-	code = ONIGENC_MBC_TO_CODE(encode, ss, s);
-	if (onig_is_code_in_cc_len(mb_len, code, node) == 0) goto fail;
-      }
-      MOP_OUT;
-      NEXT;
-
     CASE(OP_ANYCHAR)  MOP_IN(OP_ANYCHAR);
       DATA_ENSURE(1);
-      n = enclen(encode, s);
+      n = enclen(encode, s, end);
       DATA_ENSURE(n);
       if (ONIGENC_IS_MBC_NEWLINE_EX(encode, s, str, end, option, 0)) goto fail;
@@ -2098,5 +2144,5 @@
     CASE(OP_ANYCHAR_ML)  MOP_IN(OP_ANYCHAR_ML);
       DATA_ENSURE(1);
-      n = enclen(encode, s);
+      n = enclen(encode, s, end);
       DATA_ENSURE(n);
       s += n;
@@ -2107,17 +2153,17 @@
       while (DATA_ENSURE_CHECK1) {
 	STACK_PUSH_ALT(p, s, sprev, pkeep);
-	n = enclen(encode, s);
-        DATA_ENSURE(n);
-        if (ONIGENC_IS_MBC_NEWLINE_EX(encode, s, str, end, option, 0))  goto fail;
-        sprev = s;
-        s += n;
-      }
-      MOP_OUT;
-      NEXT;
+	n = enclen(encode, s, end);
+	DATA_ENSURE(n);
+	if (ONIGENC_IS_MBC_NEWLINE_EX(encode, s, str, end, option, 0))  goto fail;
+	sprev = s;
+	s += n;
+      }
+      MOP_OUT;
+      JUMP;
 
     CASE(OP_ANYCHAR_ML_STAR)  MOP_IN(OP_ANYCHAR_ML_STAR);
       while (DATA_ENSURE_CHECK1) {
 	STACK_PUSH_ALT(p, s, sprev, pkeep);
-	n = enclen(encode, s);
+	n = enclen(encode, s, end);
 	if (n > 1) {
 	  DATA_ENSURE(n);
@@ -2131,5 +2177,5 @@
       }
       MOP_OUT;
-      NEXT;
+      JUMP;
 
     CASE(OP_ANYCHAR_STAR_PEEK_NEXT)  MOP_IN(OP_ANYCHAR_STAR_PEEK_NEXT);
@@ -2138,9 +2184,9 @@
 	  STACK_PUSH_ALT(p + 1, s, sprev, pkeep);
 	}
-	n = enclen(encode, s);
-        DATA_ENSURE(n);
-        if (ONIGENC_IS_MBC_NEWLINE_EX(encode, s, str, end, option, 0))  goto fail;
-        sprev = s;
-        s += n;
+	n = enclen(encode, s, end);
+	DATA_ENSURE(n);
+	if (ONIGENC_IS_MBC_NEWLINE_EX(encode, s, str, end, option, 0))  goto fail;
+	sprev = s;
+	s += n;
       }
       p++;
@@ -2153,5 +2199,5 @@
 	  STACK_PUSH_ALT(p + 1, s, sprev, pkeep);
 	}
-	n = enclen(encode, s);
+	n = enclen(encode, s, end);
 	if (n > 1) {
 	  DATA_ENSURE(n);
@@ -2176,9 +2222,9 @@
 
 	STACK_PUSH_ALT_WITH_STATE_CHECK(p, s, sprev, mem, pkeep);
-	n = enclen(encode, s);
-        DATA_ENSURE(n);
-        if (ONIGENC_IS_MBC_NEWLINE_EX(encode, s, str, end, option, 0))  goto fail;
-        sprev = s;
-        s += n;
+	n = enclen(encode, s, end);
+	DATA_ENSURE(n);
+	if (ONIGENC_IS_MBC_NEWLINE_EX(encode, s, str, end, option, 0))  goto fail;
+	sprev = s;
+	s += n;
       }
       MOP_OUT;
@@ -2194,5 +2240,5 @@
 
 	STACK_PUSH_ALT_WITH_STATE_CHECK(p, s, sprev, mem, pkeep);
-	n = enclen(encode, s);
+	n = enclen(encode, s, end);
 	if (n > 1) {
 	  DATA_ENSURE(n);
@@ -2214,5 +2260,5 @@
 	goto fail;
 
-      s += enclen(encode, s);
+      s += enclen(encode, s, end);
       MOP_OUT;
       NEXT;
@@ -2223,5 +2269,5 @@
 	goto fail;
 
-      s += enclen(encode, s);
+      s += enclen(encode, s, end);
       MOP_OUT;
       NEXT;
@@ -2232,5 +2278,5 @@
 	goto fail;
 
-      s += enclen(encode, s);
+      s += enclen(encode, s, end);
       MOP_OUT;
       NEXT;
@@ -2241,5 +2287,5 @@
 	goto fail;
 
-      s += enclen(encode, s);
+      s += enclen(encode, s, end);
       MOP_OUT;
       NEXT;
@@ -2372,5 +2418,4 @@
 
     CASE(OP_BEGIN_LINE)  MOP_IN(OP_BEGIN_LINE);
-    op_begin_line:
       if (ON_STR_BEGIN(s)) {
 	if (IS_NOTBOL(msa->options)) goto fail;
@@ -2422,5 +2467,5 @@
       }
       else if (ONIGENC_IS_MBC_NEWLINE_EX(encode, s, str, end, option, 1)) {
-	UChar* ss = s + enclen(encode, s);
+	UChar* ss = s + enclen(encode, s, end);
 	if (ON_STR_END(ss)) {
 	  MOP_OUT;
@@ -2430,5 +2475,5 @@
 	else if (IS_NEWLINE_CRLF(option)
 	    && ONIGENC_IS_MBC_CRNL(encode, s, end)) {
-	  ss += enclen(encode, ss);
+	  ss += enclen(encode, ss, end);
 	  if (ON_STR_END(ss)) {
 	    MOP_OUT;
@@ -2444,11 +2489,4 @@
       if (s != msa->gpos)
 	goto fail;
-
-      MOP_OUT;
-      JUMP;
-
-    CASE(OP_BEGIN_POS_OR_LINE)  MOP_IN(OP_BEGIN_POS_OR_LINE);
-      if (s != msa->gpos)
-	goto op_begin_line;
 
       MOP_OUT;
@@ -2543,5 +2581,5 @@
 	sprev = s;
 	STRING_CMP(pstart, s, n);
-	while (sprev + (len = enclen(encode, sprev)) < s)
+	while (sprev + (len = enclen(encode, sprev, end)) < s)
 	  sprev += len;
 
@@ -2573,6 +2611,6 @@
 	DATA_ENSURE(n);
 	sprev = s;
-	STRING_CMP_IC(case_fold_flag, pstart, &s, n);
-	while (sprev + (len = enclen(encode, sprev)) < s)
+	STRING_CMP_IC(case_fold_flag, pstart, &s, (int)n, end);
+	while (sprev + (len = enclen(encode, sprev, end)) < s)
 	  sprev += len;
 
@@ -2609,5 +2647,5 @@
 	  if (is_fail) continue;
 	  s = swork;
-	  while (sprev + (len = enclen(encode, sprev)) < s)
+	  while (sprev + (len = enclen(encode, sprev, end)) < s)
 	    sprev += len;
 
@@ -2645,8 +2683,8 @@
 	  sprev = s;
 	  swork = s;
-	  STRING_CMP_VALUE_IC(case_fold_flag, pstart, &swork, n, is_fail);
+	  STRING_CMP_VALUE_IC(case_fold_flag, pstart, &swork, n, end, is_fail);
 	  if (is_fail) continue;
 	  s = swork;
-	  while (sprev + (len = enclen(encode, sprev)) < s)
+	  while (sprev + (len = enclen(encode, sprev, end)) < s)
 	    sprev += len;
 
@@ -2671,7 +2709,7 @@
 
 	sprev = s;
-	if (backref_match_at_nested_level(reg, stk, stk_base, ic
-		  , case_fold_flag, (int )level, (int )tlen, p, &s, end)) {
-	  while (sprev + (len = enclen(encode, sprev)) < s)
+	if (backref_match_at_nested_level(reg, stk, stk_base, ic,
+		  case_fold_flag, (int )level, (int )tlen, p, &s, end)) {
+	  while (sprev + (len = enclen(encode, sprev, end)) < s)
 	    sprev += len;
 
@@ -2715,6 +2753,6 @@
 	if (isnull) {
 #ifdef ONIG_DEBUG_MATCH
-	  fprintf(stderr, "NULL_CHECK_END: skip  id:%d, s:%"PRIdPTR" (%p)\n",
-		  (int )mem, (intptr_t )s, s);
+	  fprintf(stderr, "NULL_CHECK_END: skip  id:%d, s:%"PRIuPTR" (%p)\n",
+		  (int )mem, (uintptr_t )s, s);
 #endif
 	null_check_found:
@@ -2748,8 +2786,8 @@
 	STACK_NULL_CHECK_MEMST(isnull, mem, s, reg);
 	if (isnull) {
-#ifdef ONIG_DEBUG_MATCH
-	  fprintf(stderr, "NULL_CHECK_END_MEMST: skip  id:%d, s:%"PRIdPTR" (%p)\n",
-		  (int )mem, (intptr_t )s, s);
-#endif
+# ifdef ONIG_DEBUG_MATCH
+	  fprintf(stderr, "NULL_CHECK_END_MEMST: skip  id:%d, s:%"PRIuPTR" (%p)\n",
+		  (int )mem, (uintptr_t )s, s);
+# endif
 	  if (isnull == -1) goto fail;
 	  goto null_check_found;
@@ -2767,14 +2805,14 @@
 
 	GET_MEMNUM_INC(mem, p); /* mem: null check id */
-#ifdef USE_MONOMANIAC_CHECK_CAPTURES_IN_ENDLESS_REPEAT
+# ifdef USE_MONOMANIAC_CHECK_CAPTURES_IN_ENDLESS_REPEAT
 	STACK_NULL_CHECK_MEMST_REC(isnull, mem, s, reg);
-#else
+# else
 	STACK_NULL_CHECK_REC(isnull, mem, s);
-#endif
+# endif
 	if (isnull) {
-#ifdef ONIG_DEBUG_MATCH
-	  fprintf(stderr, "NULL_CHECK_END_MEMST_PUSH: skip  id:%d, s:%"PRIdPTR" (%p)\n",
-		  (int )mem, (intptr_t )s, s);
-#endif
+# ifdef ONIG_DEBUG_MATCH
+	  fprintf(stderr, "NULL_CHECK_END_MEMST_PUSH: skip  id:%d, s:%"PRIuPTR" (%p)\n",
+		  (int )mem, (uintptr_t )s, s);
+# endif
 	  if (isnull == -1) goto fail;
 	  goto null_check_found;
@@ -2840,4 +2878,5 @@
       JUMP;
 
+#ifdef USE_OP_PUSH_OR_JUMP_EXACT
     CASE(OP_PUSH_OR_JUMP_EXACT1)  MOP_IN(OP_PUSH_OR_JUMP_EXACT1);
       GET_RELADDR_INC(addr, p);
@@ -2851,4 +2890,5 @@
       MOP_OUT;
       JUMP;
+#endif
 
     CASE(OP_PUSH_IF_PEEK_NEXT)  MOP_IN(OP_PUSH_IF_PEEK_NEXT);
@@ -2905,12 +2945,12 @@
       stkp->u.repeat.count++;
       if (stkp->u.repeat.count >= reg->repeat_range[mem].upper) {
-        /* end of repeat. Nothing to do. */
+	/* end of repeat. Nothing to do. */
       }
       else if (stkp->u.repeat.count >= reg->repeat_range[mem].lower) {
-        STACK_PUSH_ALT(p, s, sprev, pkeep);
-        p = STACK_AT(si)->u.repeat.pcode; /* Don't use stkp after PUSH. */
+	STACK_PUSH_ALT(p, s, sprev, pkeep);
+	p = STACK_AT(si)->u.repeat.pcode; /* Don't use stkp after PUSH. */
       }
       else {
-        p = stkp->u.repeat.pcode;
+	p = stkp->u.repeat.pcode;
       }
       STACK_PUSH_REPEAT_INC(si);
@@ -2934,17 +2974,17 @@
       stkp->u.repeat.count++;
       if (stkp->u.repeat.count < reg->repeat_range[mem].upper) {
-        if (stkp->u.repeat.count >= reg->repeat_range[mem].lower) {
-          UChar* pcode = stkp->u.repeat.pcode;
-
-          STACK_PUSH_REPEAT_INC(si);
-          STACK_PUSH_ALT(pcode, s, sprev, pkeep);
-        }
-        else {
-          p = stkp->u.repeat.pcode;
-          STACK_PUSH_REPEAT_INC(si);
-        }
+	if (stkp->u.repeat.count >= reg->repeat_range[mem].lower) {
+	  UChar* pcode = stkp->u.repeat.pcode;
+
+	  STACK_PUSH_REPEAT_INC(si);
+	  STACK_PUSH_ALT(pcode, s, sprev, pkeep);
+	}
+	else {
+	  p = stkp->u.repeat.pcode;
+	  STACK_PUSH_REPEAT_INC(si);
+	}
       }
       else if (stkp->u.repeat.count == reg->repeat_range[mem].upper) {
-        STACK_PUSH_REPEAT_INC(si);
+	STACK_PUSH_REPEAT_INC(si);
       }
       MOP_OUT;
@@ -2996,7 +3036,7 @@
     CASE(OP_LOOK_BEHIND)  MOP_IN(OP_LOOK_BEHIND);
       GET_LENGTH_INC(tlen, p);
-      s = (UChar* )ONIGENC_STEP_BACK(encode, str, s, (int )tlen);
+      s = (UChar* )ONIGENC_STEP_BACK(encode, str, s, end, (int )tlen);
       if (IS_NULL(s)) goto fail;
-      sprev = (UChar* )onigenc_get_prev_char_head(encode, str, s);
+      sprev = (UChar* )onigenc_get_prev_char_head(encode, str, s, end);
       MOP_OUT;
       JUMP;
@@ -3005,5 +3045,5 @@
       GET_RELADDR_INC(addr, p);
       GET_LENGTH_INC(tlen, p);
-      q = (UChar* )ONIGENC_STEP_BACK(encode, str, s, (int )tlen);
+      q = (UChar* )ONIGENC_STEP_BACK(encode, str, s, end, (int )tlen);
       if (IS_NULL(q)) {
 	/* too short case -> success. ex. /(?<!XXX)a/.match("a")
@@ -3015,5 +3055,5 @@
 	STACK_PUSH_LOOK_BEHIND_NOT(p + addr, s, sprev, pkeep);
 	s = q;
-	sprev = (UChar* )onigenc_get_prev_char_head(encode, str, s);
+	sprev = (UChar* )onigenc_get_prev_char_head(encode, str, s, end);
       }
       MOP_OUT;
@@ -3022,4 +3062,61 @@
     CASE(OP_FAIL_LOOK_BEHIND_NOT)  MOP_IN(OP_FAIL_LOOK_BEHIND_NOT);
       STACK_POP_TIL_LOOK_BEHIND_NOT;
+      goto fail;
+      NEXT;
+
+    CASE(OP_PUSH_ABSENT_POS)  MOP_IN(OP_PUSH_ABSENT_POS);
+      /* Save the absent-start-pos and the original end-pos. */
+      STACK_PUSH_ABSENT_POS(s, ABSENT_END_POS);
+      MOP_OUT;
+      JUMP;
+
+    CASE(OP_ABSENT)  MOP_IN(OP_ABSENT);
+      {
+	const UChar* aend = ABSENT_END_POS;
+	UChar* absent;
+	UChar* selfp = p - 1;
+
+	STACK_POP_ABSENT_POS(absent, ABSENT_END_POS);  /* Restore end-pos. */
+	GET_RELADDR_INC(addr, p);
+#ifdef ONIG_DEBUG_MATCH
+	fprintf(stderr, "ABSENT: s:%p, end:%p, absent:%p, aend:%p\n", s, end, absent, aend);
+#endif
+	if ((absent > aend) && (s > absent)) {
+	  /* An empty match occurred in (?~...) at the start point.
+	   * Never match. */
+	  STACK_POP;
+	  goto fail;
+	}
+	else if ((s >= aend) && (s > absent)) {
+	  if (s > aend) {
+	    /* Only one (or less) character matched in the last iteration.
+	     * This is not a possible point. */
+	    goto fail;
+	  }
+	  /* All possible points were found. Try matching after (?~...). */
+	  DATA_ENSURE(0);
+	  p += addr;
+	}
+	else {
+	  STACK_PUSH_ALT(p + addr, s, sprev, pkeep); /* Push possible point. */
+	  n = enclen(encode, s, end);
+	  STACK_PUSH_ABSENT_POS(absent, ABSENT_END_POS); /* Save the original pos. */
+	  STACK_PUSH_ALT(selfp, s + n, s, pkeep); /* Next iteration. */
+	  STACK_PUSH_ABSENT;
+	  ABSENT_END_POS = aend;
+	}
+      }
+      MOP_OUT;
+      JUMP;
+
+    CASE(OP_ABSENT_END)  MOP_IN(OP_ABSENT_END);
+      /* The pattern inside (?~...) was matched.
+       * Set the end-pos temporary and go to next iteration. */
+      if (sprev < ABSENT_END_POS)
+	ABSENT_END_POS = sprev;
+#ifdef ONIG_DEBUG_MATCH
+      fprintf(stderr, "ABSENT_END: end:%p\n", ABSENT_END_POS);
+#endif
+      STACK_POP_TIL_ABSENT;
       goto fail;
       NEXT;
@@ -3057,7 +3154,7 @@
     CASE(OP_FAIL)
       if (0) {
-        /* fall */
+	/* fall */
       fail:
-        MOP_OUT;
+	MOP_OUT;
       }
       MOP_IN(OP_FAIL);
@@ -3070,6 +3167,6 @@
 #ifdef USE_COMBINATION_EXPLOSION_CHECK
       if (stk->u.state.state_check != 0) {
-        stk->type = STK_STATE_CHECK_MARK;
-        stk++;
+	stk->type = STK_STATE_CHECK_MARK;
+	stk++;
       }
 #endif
@@ -3105,20 +3202,4 @@
 }
 
-static OnigPosition
-match_at(regex_t* reg, const UChar* str, const UChar* end,
-#ifdef USE_MATCH_RANGE_MUST_BE_INSIDE_OF_SPECIFIED_RANGE
-	const UChar* right_range,
-#endif
-	const UChar* sstart, UChar* sprev, OnigMatchArg* msa)
-{
-	char *alloca_base = NULL;
-	OnigPosition ret = match_at_(reg, str, end,
-#ifdef USE_MATCH_RANGE_MUST_BE_INSIDE_OF_SPECIFIED_RANGE
-		right_range,
-#endif
-		sstart, sprev, msa, &alloca_base);
-	if(alloca_base) xfree(alloca_base);
-	return ret;
-}
 
 static UChar*
@@ -3156,5 +3237,5 @@
 	return s;
     }
-    s += enclen(enc, s);
+    s += enclen(enc, s, text_end);
   }
 
@@ -3164,5 +3245,5 @@
 static int
 str_lower_case_match(OnigEncoding enc, int case_fold_flag,
-                     const UChar* t, const UChar* tend,
+		     const UChar* t, const UChar* tend,
 		     const UChar* p, const UChar* end)
 {
@@ -3201,5 +3282,5 @@
       return s;
 
-    s += enclen(enc, s);
+    s += enclen(enc, s, text_end);
   }
 
@@ -3219,5 +3300,5 @@
     s = (UChar* )text_start;
   else
-    s = ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc, adjust_text, s);
+    s = ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc, adjust_text, s, text_end);
 
   while (s >= text) {
@@ -3233,5 +3314,5 @@
 	return s;
     }
-    s = (UChar* )onigenc_get_prev_char_head(enc, adjust_text, s);
+    s = (UChar* )onigenc_get_prev_char_head(enc, adjust_text, s, text_end);
   }
 
@@ -3252,12 +3333,12 @@
     s = (UChar* )text_start;
   else
-    s = ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc, adjust_text, s);
+    s = ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc, adjust_text, s, text_end);
 
   while (s >= text) {
     if (str_lower_case_match(enc, case_fold_flag,
-                             target, target_end, s, text_end))
+			     target, target_end, s, text_end))
       return s;
 
-    s = (UChar* )onigenc_get_prev_char_head(enc, adjust_text, s);
+    s = (UChar* )onigenc_get_prev_char_head(enc, adjust_text, s, text_end);
   }
 
@@ -3276,8 +3357,8 @@
   ptrdiff_t skip, tlen1;
 
-#ifdef ONIG_DEBUG_SEARCH
+# ifdef ONIG_DEBUG_SEARCH
   fprintf(stderr, "bm_search_notrev: text: %"PRIuPTR" (%p), text_end: %"PRIuPTR" (%p), text_range: %"PRIuPTR" (%p)\n",
-	  text, text, text_end, text_end, text_range, text_range);
-#endif
+	  (uintptr_t )text, text, (uintptr_t )text_end, text_end, (uintptr_t )text_range, text_range);
+# endif
 
   tail = target_end - 1;
@@ -3300,9 +3381,10 @@
       t = s;
       do {
-        s += enclen(reg->enc, s);
+	s += enclen(reg->enc, s, end);
       } while ((s - t) < skip && s < end);
     }
   }
   else {
+# if OPT_EXACT_MAXLEN >= ONIG_CHAR_TABLE_SIZE
     while (s < end) {
       p = se = s + tlen1;
@@ -3315,7 +3397,8 @@
       t = s;
       do {
-        s += enclen(reg->enc, s);
+	s += enclen(reg->enc, s, end);
       } while ((s - t) < skip && s < end);
     }
+# endif
   }
 
@@ -3331,8 +3414,8 @@
   const UChar *tail;
 
-#ifdef ONIG_DEBUG_SEARCH
-  fprintf(stderr, "bm_search: text: %"PRIuPTR", text_end: %"PRIuPTR", text_range: %"PRIuPTR"\n",
-	  text, text_end, text_range);
-#endif
+# ifdef ONIG_DEBUG_SEARCH
+  fprintf(stderr, "bm_search: text: %"PRIuPTR" (%p), text_end: %"PRIuPTR" (%p), text_range: %"PRIuPTR" (%p)\n",
+	  (uintptr_t )text, text, (uintptr_t )text_end, text_end, (uintptr_t )text_range, text_range);
+# endif
 
   end = text_range + (target_end - target) - 1;
@@ -3346,8 +3429,8 @@
       p = s;
       t = tail;
-#ifdef ONIG_DEBUG_SEARCH
+# ifdef ONIG_DEBUG_SEARCH
       fprintf(stderr, "bm_search_loop: pos: %"PRIdPTR" %s\n",
 	  (intptr_t )(s - text), s);
-#endif
+# endif
       while (*p == *t) {
 	if (t == target) return (UChar* )p;
@@ -3358,4 +3441,5 @@
   }
   else { /* see int_map[] */
+# if OPT_EXACT_MAXLEN >= ONIG_CHAR_TABLE_SIZE
     while (s < end) {
       p = s;
@@ -3367,4 +3451,5 @@
       s += reg->int_map[*s];
     }
+# endif
   }
   return (UChar* )NULL;
@@ -3383,8 +3468,8 @@
   int case_fold_flag = reg->case_fold_flag;
 
-#ifdef ONIG_DEBUG_SEARCH
+# ifdef ONIG_DEBUG_SEARCH
   fprintf(stderr, "bm_search_notrev_ic: text: %d (%p), text_end: %d (%p), text_range: %d (%p)\n",
 	  (int )text, text, (int )text_end, text_end, (int )text_range, text_range);
-#endif
+# endif
 
   tail = target_end - 1;
@@ -3405,9 +3490,10 @@
       t = s;
       do {
-        s += enclen(reg->enc, s);
+	s += enclen(reg->enc, s, end);
       } while ((s - t) < skip && s < end);
     }
   }
   else {
+# if OPT_EXACT_MAXLEN >= ONIG_CHAR_TABLE_SIZE
     while (s < end) {
       se = s + tlen1;
@@ -3418,7 +3504,8 @@
       t = s;
       do {
-        s += enclen(reg->enc, s);
+	s += enclen(reg->enc, s, end);
       } while ((s - t) < skip && s < end);
     }
+# endif
   }
 
@@ -3436,8 +3523,8 @@
   int case_fold_flag = reg->case_fold_flag;
 
-#ifdef ONIG_DEBUG_SEARCH
+# ifdef ONIG_DEBUG_SEARCH
   fprintf(stderr, "bm_search_ic: text: %d (%p), text_end: %d (%p), text_range: %d (%p)\n",
 	  (int )text, text, (int )text_end, text_end, (int )text_range, text_range);
-#endif
+# endif
 
   end = text_range + (target_end - target) - 1;
@@ -3457,4 +3544,5 @@
   }
   else { /* see int_map[] */
+# if OPT_EXACT_MAXLEN >= ONIG_CHAR_TABLE_SIZE
     while (s < end) {
       p = s - (target_end - target) + 1;
@@ -3464,4 +3552,5 @@
       s += reg->int_map[*s];
     }
+# endif
   }
   return (UChar* )NULL;
@@ -3480,10 +3569,9 @@
   ptrdiff_t skip, tlen1;
   OnigEncoding enc = reg->enc;
-  int (*mbc_enc_len)(const OnigUChar* p) = enc->mbc_enc_len;
-
-#ifdef ONIG_DEBUG_SEARCH
-  fprintf(stderr, "bm_search_notrev: text: %"PRIdPTR" (%p), text_end: %"PRIdPTR" (%p), text_range: %"PRIdPTR" (%p)\n",
-	  (intptr_t )text, text, (intptr_t )text_end, text_end, (intptr_t )text_range, text_range);
-#endif
+
+# ifdef ONIG_DEBUG_SEARCH
+  fprintf(stderr, "bm_search_notrev: text: %"PRIuPTR" (%p), text_end: %"PRIuPTR" (%p), text_range: %"PRIuPTR" (%p)\n",
+	  (uintptr_t )text, text, (uintptr_t )text_end, text_end, (uintptr_t )text_range, text_range);
+# endif
 
   tail = target_end - 1;
@@ -3507,9 +3595,10 @@
       t = s;
       do {
-        s += mbc_enc_len(s);
+	s += enclen(enc, s, end);
       } while ((s - t) < skip && s < end);
     }
   }
   else {
+# if OPT_EXACT_MAXLEN >= ONIG_CHAR_TABLE_SIZE
     while (s < end) {
       p = se = s + tlen1;
@@ -3523,7 +3612,8 @@
       t = s;
       do {
-        s += mbc_enc_len(s);
+	s += enclen(enc, s, end);
       } while ((s - t) < skip && s < end);
     }
+# endif
   }
 
@@ -3539,4 +3629,9 @@
   const UChar *tail;
   ptrdiff_t tlen1;
+
+# ifdef ONIG_DEBUG_SEARCH
+  fprintf(stderr, "bm_search: text: %"PRIuPTR" (%p), text_end: %"PRIuPTR" (%p), text_range: %"PRIuPTR" (%p)\n",
+	  (uintptr_t )text, text, (uintptr_t )text_end, text_end, (uintptr_t )text_range, text_range);
+# endif
 
   tail = target_end - 1;
@@ -3560,4 +3655,5 @@
   }
   else { /* see int_map[] */
+# if OPT_EXACT_MAXLEN >= ONIG_CHAR_TABLE_SIZE
     while (s < end) {
       p = s;
@@ -3570,4 +3666,5 @@
       s += reg->int_map[s[1]];
     }
+# endif
   }
   return (UChar* )NULL;
@@ -3584,11 +3681,10 @@
   ptrdiff_t skip, tlen1;
   OnigEncoding enc = reg->enc;
-  int (*mbc_enc_len)(const OnigUChar* p) = enc->mbc_enc_len;
   int case_fold_flag = reg->case_fold_flag;
 
-#ifdef ONIG_DEBUG_SEARCH
-  fprintf(stderr, "bm_search_notrev_ic: text: %"PRIdPTR" (%p), text_end: %"PRIdPTR" (%p), text_range: %"PRIdPTR" (%p)\n",
-	  (intptr_t )text, text, (intptr_t )text_end, text_end, (intptr_t )text_range, text_range);
-#endif
+# ifdef ONIG_DEBUG_SEARCH
+  fprintf(stderr, "bm_search_notrev_ic: text: %"PRIuPTR" (%p), text_end: %"PRIuPTR" (%p), text_range: %"PRIuPTR" (%p)\n",
+	  (uintptr_t )text, text, (uintptr_t )text_end, text_end, (uintptr_t )text_range, text_range);
+# endif
 
   tail = target_end - 1;
@@ -3610,9 +3706,10 @@
       t = s;
       do {
-        s += mbc_enc_len(s);
+	s += enclen(enc, s, end);
       } while ((s - t) < skip && s < end);
     }
   }
   else {
+# if OPT_EXACT_MAXLEN >= ONIG_CHAR_TABLE_SIZE
     while (s < end) {
       se = s + tlen1;
@@ -3624,7 +3721,8 @@
       t = s;
       do {
-        s += mbc_enc_len(s);
+	s += enclen(enc, s, end);
       } while ((s - t) < skip && s < end);
     }
+# endif
   }
 
@@ -3643,8 +3741,8 @@
   int case_fold_flag = reg->case_fold_flag;
 
-#ifdef ONIG_DEBUG_SEARCH
-  fprintf(stderr, "bm_search_ic: text: %"PRIdPTR" (%p), text_end: %"PRIdPTR" (%p), text_range: %"PRIdPTR" (%p)\n",
-	  (intptr_t )text, text, (intptr_t )text_end, text_end, (intptr_t )text_range, text_range);
-#endif
+# ifdef ONIG_DEBUG_SEARCH
+  fprintf(stderr, "bm_search_ic: text: %"PRIuPTR" (%p), text_end: %"PRIuPTR" (%p), text_range: %"PRIuPTR" (%p)\n",
+	  (uintptr_t )text, text, (uintptr_t )text_end, text_end, (uintptr_t )text_range, text_range);
+# endif
 
   tail = target_end - 1;
@@ -3666,4 +3764,5 @@
   }
   else { /* see int_map[] */
+# if OPT_EXACT_MAXLEN >= ONIG_CHAR_TABLE_SIZE
     while (s < end) {
       p = s - tlen1;
@@ -3674,4 +3773,5 @@
       s += reg->int_map[s[1]];
     }
+# endif
   }
   return (UChar* )NULL;
@@ -3679,4 +3779,5 @@
 #endif /* USE_SUNDAY_QUICK_SEARCH */
 
+#ifdef USE_INT_MAP_BACKWARD
 static int
 set_bm_backward_skip(UChar* s, UChar* end, OnigEncoding enc ARG_UNUSED,
@@ -3711,5 +3812,5 @@
     s = text_start;
   else
-    s = ONIGENC_LEFT_ADJUST_CHAR_HEAD(reg->enc, adjust_text, s);
+    s = ONIGENC_LEFT_ADJUST_CHAR_HEAD(reg->enc, adjust_text, s, text_end);
 
   while (s >= text) {
@@ -3723,13 +3824,14 @@
 
     s -= reg->int_map_backward[*s];
-    s = ONIGENC_LEFT_ADJUST_CHAR_HEAD(reg->enc, adjust_text, s);
+    s = ONIGENC_LEFT_ADJUST_CHAR_HEAD(reg->enc, adjust_text, s, text_end);
   }
 
   return (UChar* )NULL;
 }
+#endif
 
 static UChar*
 map_search(OnigEncoding enc, UChar map[],
-	   const UChar* text, const UChar* text_range)
+	   const UChar* text, const UChar* text_range, const UChar* text_end)
 {
   const UChar *s = text;
@@ -3738,5 +3840,5 @@
     if (map[*s]) return (UChar* )s;
 
-    s += enclen(enc, s);
+    s += enclen(enc, s, text_end);
   }
   return (UChar* )NULL;
@@ -3746,5 +3848,5 @@
 map_search_backward(OnigEncoding enc, UChar map[],
 		    const UChar* text, const UChar* adjust_text,
-		    const UChar* text_start)
+		    const UChar* text_start, const UChar* text_end)
 {
   const UChar *s = text_start;
@@ -3753,5 +3855,5 @@
     if (map[*s]) return (UChar* )s;
 
-    s = onigenc_get_prev_char_head(enc, adjust_text, s);
+    s = onigenc_get_prev_char_head(enc, adjust_text, s, text_end);
   }
   return (UChar* )NULL;
@@ -3765,29 +3867,4 @@
   UChar *prev;
   OnigMatchArg msa;
-
-#if defined(USE_RECOMPILE_API) && defined(USE_MULTI_THREAD_SYSTEM)
- start:
-  THREAD_ATOMIC_START;
-  if (ONIG_STATE(reg) >= ONIG_STATE_NORMAL) {
-    ONIG_STATE_INC(reg);
-    if (IS_NOT_NULL(reg->chain) && ONIG_STATE(reg) == ONIG_STATE_NORMAL) {
-      onig_chain_reduce(reg);
-      ONIG_STATE_INC(reg);
-    }
-  }
-  else {
-    int n;
-
-    THREAD_ATOMIC_END;
-    n = 0;
-    while (ONIG_STATE(reg) < ONIG_STATE_NORMAL) {
-      if (++n > THREAD_PASS_LIMIT_COUNT)
-	return ONIGERR_OVER_THREAD_PASS_LIMIT_COUNT;
-      THREAD_PASS;
-    }
-    goto start;
-  }
-  THREAD_ATOMIC_END;
-#endif /* USE_RECOMPILE_API && USE_MULTI_THREAD_SYSTEM */
 
   MATCH_ARG_INIT(msa, option, region, at, at);
@@ -3799,9 +3876,5 @@
 #endif
 
-  if (region
-#ifdef USE_POSIX_API_REGION_OPTION
-      && !IS_POSIX_REGION(option)
-#endif
-      ) {
+  if (region) {
     r = onig_region_resize_clear(region, reg->num_mem + 1);
   }
@@ -3810,5 +3883,5 @@
 
   if (r == 0) {
-    prev = (UChar* )onigenc_get_prev_char_head(reg->enc, str, at);
+    prev = (UChar* )onigenc_get_prev_char_head(reg->enc, str, at, end);
     r = match_at(reg, str, end,
 #ifdef USE_MATCH_RANGE_MUST_BE_INSIDE_OF_SPECIFIED_RANGE
@@ -3819,5 +3892,4 @@
 
   MATCH_ARG_FREE(msa);
-  ONIG_STATE_DEC_THREAD(reg);
   return r;
 }
@@ -3831,5 +3903,5 @@
 #ifdef ONIG_DEBUG_SEARCH
   fprintf(stderr, "forward_search_range: str: %"PRIuPTR" (%p), end: %"PRIuPTR" (%p), s: %"PRIuPTR" (%p), range: %"PRIuPTR" (%p)\n",
-	  (intptr_t )str, str, (intptr_t )end, end, (intptr_t )s, s, (intptr_t )range, range);
+	  (uintptr_t )str, str, (uintptr_t )end, end, (uintptr_t )s, s, (uintptr_t )range, range);
 #endif
 
@@ -3841,5 +3913,7 @@
     else {
       UChar *q = p + reg->dmin;
-      while (p < q) p += enclen(reg->enc, p);
+
+      if (q >= end) return 0; /* fail */
+      while (p < q) p += enclen(reg->enc, p, end);
     }
   }
@@ -3852,5 +3926,5 @@
   case ONIG_OPTIMIZE_EXACT_IC:
     p = slow_search_ic(reg->enc, reg->case_fold_flag,
-                       reg->exact, reg->exact_end, p, end, range);
+		       reg->exact, reg->exact_end, p, end, range);
     break;
 
@@ -3872,5 +3946,5 @@
 
   case ONIG_OPTIMIZE_MAP:
-    p = map_search(reg->enc, reg->map, p, range);
+    p = map_search(reg->enc, reg->map, p, range, end);
     break;
   }
@@ -3880,5 +3954,5 @@
     retry_gate:
       pprev = p;
-      p += enclen(reg->enc, p);
+      p += enclen(reg->enc, p, end);
       goto retry;
     }
@@ -3891,5 +3965,5 @@
 	if (!ON_STR_BEGIN(p)) {
 	  prev = onigenc_get_prev_char_head(reg->enc,
-					    (pprev ? pprev : str), p);
+					    (pprev ? pprev : str), p, end);
 	  if (!ONIGENC_IS_MBC_NEWLINE_EX(reg->enc, prev, str, end, reg->options, 0))
 	    goto retry_gate;
@@ -3916,24 +3990,31 @@
       if (low_prev) {
 	if (*low > s)
-	  *low_prev = onigenc_get_prev_char_head(reg->enc, s, p);
+	  *low_prev = onigenc_get_prev_char_head(reg->enc, s, p, end);
 	else
 	  *low_prev = onigenc_get_prev_char_head(reg->enc,
-						 (pprev ? pprev : str), p);
+						 (pprev ? pprev : str), p, end);
       }
     }
     else {
       if (reg->dmax != ONIG_INFINITE_DISTANCE) {
-	*low = p - reg->dmax;
-	if (*low > s) {
-	  *low = onigenc_get_right_adjust_char_head_with_prev(reg->enc, s,
-							      *low, (const UChar** )low_prev);
-	  if (low_prev && IS_NULL(*low_prev))
-	    *low_prev = onigenc_get_prev_char_head(reg->enc,
-						   (pprev ? pprev : s), *low);
+	if (p < str + reg->dmax) {
+	  *low = (UChar* )str;
+	  if (low_prev)
+	    *low_prev = onigenc_get_prev_char_head(reg->enc, str, *low, end);
 	}
 	else {
-	  if (low_prev)
-	    *low_prev = onigenc_get_prev_char_head(reg->enc,
-					       (pprev ? pprev : str), *low);
+	  *low = p - reg->dmax;
+	  if (*low > s) {
+	    *low = onigenc_get_right_adjust_char_head_with_prev(reg->enc, s,
+								*low, end, (const UChar** )low_prev);
+	    if (low_prev && IS_NULL(*low_prev))
+	      *low_prev = onigenc_get_prev_char_head(reg->enc,
+						     (pprev ? pprev : s), *low, end);
+	  }
+	  else {
+	    if (low_prev)
+	      *low_prev = onigenc_get_prev_char_head(reg->enc,
+						 (pprev ? pprev : str), *low, end);
+	  }
 	}
       }
@@ -3960,5 +4041,4 @@
 		      UChar** low, UChar** high)
 {
-  int r;
   UChar *p;
 
@@ -3978,11 +4058,13 @@
   case ONIG_OPTIMIZE_EXACT_BM_NOT_REV_IC:
     p = slow_search_backward_ic(reg->enc, reg->case_fold_flag,
-                                reg->exact, reg->exact_end,
-                                range, adjrange, end, p);
+				reg->exact, reg->exact_end,
+				range, adjrange, end, p);
     break;
 
   case ONIG_OPTIMIZE_EXACT_BM:
   case ONIG_OPTIMIZE_EXACT_BM_NOT_REV:
+#ifdef USE_INT_MAP_BACKWARD
     if (IS_NULL(reg->int_map_backward)) {
+      int r;
       if (s - range < BM_BACKWARD_SEARCH_LENGTH_THRESHOLD)
 	goto exact_method;
@@ -3994,8 +4076,11 @@
     p = bm_search_backward(reg, reg->exact, reg->exact_end, range, adjrange,
 			   end, p);
+#else
+    goto exact_method;
+#endif
     break;
 
   case ONIG_OPTIMIZE_MAP:
-    p = map_search_backward(reg->enc, reg->map, range, adjrange, p);
+    p = map_search_backward(reg->enc, reg->map, range, adjrange, p, end);
     break;
   }
@@ -4008,5 +4093,5 @@
       case ANCHOR_BEGIN_LINE:
 	if (!ON_STR_BEGIN(p)) {
-	  prev = onigenc_get_prev_char_head(reg->enc, str, p);
+	  prev = onigenc_get_prev_char_head(reg->enc, str, p, end);
 	  if (!ONIGENC_IS_MBC_NEWLINE_EX(reg->enc, prev, str, end, reg->options, 0)) {
 	    p = prev;
@@ -4028,5 +4113,5 @@
 	}
 	else if (! ONIGENC_IS_MBC_NEWLINE_EX(reg->enc, p, str, end, reg->options, 1)) {
-	  p = onigenc_get_prev_char_head(reg->enc, adjrange, p);
+	  p = onigenc_get_prev_char_head(reg->enc, adjrange, p, end);
 	  if (IS_NULL(p)) goto fail;
 	  goto retry;
@@ -4040,5 +4125,5 @@
       *low  = p - reg->dmax;
       *high = p - reg->dmin;
-      *high = onigenc_get_right_adjust_char_head(reg->enc, adjrange, *high);
+      *high = onigenc_get_right_adjust_char_head(reg->enc, adjrange, *high, end);
     }
 
@@ -4078,40 +4163,11 @@
 #endif
 
-#if defined(USE_RECOMPILE_API) && defined(USE_MULTI_THREAD_SYSTEM)
- start:
-  THREAD_ATOMIC_START;
-  if (ONIG_STATE(reg) >= ONIG_STATE_NORMAL) {
-    ONIG_STATE_INC(reg);
-    if (IS_NOT_NULL(reg->chain) && ONIG_STATE(reg) == ONIG_STATE_NORMAL) {
-      onig_chain_reduce(reg);
-      ONIG_STATE_INC(reg);
-    }
-  }
-  else {
-    int n;
-
-    THREAD_ATOMIC_END;
-    n = 0;
-    while (ONIG_STATE(reg) < ONIG_STATE_NORMAL) {
-      if (++n > THREAD_PASS_LIMIT_COUNT)
-	return ONIGERR_OVER_THREAD_PASS_LIMIT_COUNT;
-      THREAD_PASS;
-    }
-    goto start;
-  }
-  THREAD_ATOMIC_END;
-#endif /* USE_RECOMPILE_API && USE_MULTI_THREAD_SYSTEM */
-
 #ifdef ONIG_DEBUG_SEARCH
   fprintf(stderr,
      "onig_search (entry point): str: %"PRIuPTR" (%p), end: %"PRIuPTR", start: %"PRIuPTR", range: %"PRIuPTR"\n",
-     (intptr_t )str, str, end - str, start - str, range - str);
-#endif
-
-  if (region
-#ifdef USE_POSIX_API_REGION_OPTION
-      && !IS_POSIX_REGION(option)
-#endif
-      ) {
+     (uintptr_t )str, str, end - str, start - str, range - str);
+#endif
+
+  if (region) {
     r = onig_region_resize_clear(region, reg->num_mem + 1);
     if (r) goto finish_no_msa;
@@ -4122,6 +4178,6 @@
 
 #ifdef USE_MATCH_RANGE_MUST_BE_INSIDE_OF_SPECIFIED_RANGE
-#ifdef USE_FIND_LONGEST_SEARCH_ALL_OF_RANGE
-#define MATCH_AND_RETURN_CHECK(upper_range) \
+# ifdef USE_FIND_LONGEST_SEARCH_ALL_OF_RANGE
+#  define MATCH_AND_RETURN_CHECK(upper_range) \
   r = match_at(reg, str, end, (upper_range), s, prev, &msa); \
   if (r != ONIG_MISMATCH) {\
@@ -4133,6 +4189,6 @@
     else goto finish; /* error */ \
   }
-#else
-#define MATCH_AND_RETURN_CHECK(upper_range) \
+# else
+#  define MATCH_AND_RETURN_CHECK(upper_range) \
   r = match_at(reg, str, end, (upper_range), s, prev, &msa); \
   if (r != ONIG_MISMATCH) {\
@@ -4142,8 +4198,8 @@
     else goto finish; /* error */ \
   }
-#endif /* USE_FIND_LONGEST_SEARCH_ALL_OF_RANGE */
+# endif /* USE_FIND_LONGEST_SEARCH_ALL_OF_RANGE */
 #else
-#ifdef USE_FIND_LONGEST_SEARCH_ALL_OF_RANGE
-#define MATCH_AND_RETURN_CHECK(none) \
+# ifdef USE_FIND_LONGEST_SEARCH_ALL_OF_RANGE
+#  define MATCH_AND_RETURN_CHECK(none) \
   r = match_at(reg, str, end, s, prev, &msa);\
   if (r != ONIG_MISMATCH) {\
@@ -4155,6 +4211,6 @@
     else goto finish; /* error */ \
   }
-#else
-#define MATCH_AND_RETURN_CHECK(none) \
+# else
+#  define MATCH_AND_RETURN_CHECK(none) \
   r = match_at(reg, str, end, s, prev, &msa);\
   if (r != ONIG_MISMATCH) {\
@@ -4164,5 +4220,5 @@
     else goto finish; /* error */ \
   }
-#endif /* USE_FIND_LONGEST_SEARCH_ALL_OF_RANGE */
+# endif /* USE_FIND_LONGEST_SEARCH_ALL_OF_RANGE */
 #endif /* USE_MATCH_RANGE_MUST_BE_INSIDE_OF_SPECIFIED_RANGE */
 
@@ -4176,5 +4232,13 @@
     begin_position:
       if (range > start)
-	range = start + 1;
+      {
+	if (global_pos > start)
+	{
+	  if (global_pos < range)
+	    range = global_pos + 1;
+	}
+	else
+	  range = start + 1;
+      }
       else
 	range = start;
@@ -4206,5 +4270,5 @@
 	  start = min_semi_end - reg->anchor_dmax;
 	  if (start < end)
-	    start = onigenc_get_right_adjust_char_head(reg->enc, str, start);
+	    start = onigenc_get_right_adjust_char_head(reg->enc, str, start, end);
 	}
 	if ((OnigDistance )(max_semi_end - (range - 1)) < reg->anchor_dmin) {
@@ -4222,5 +4286,5 @@
 	if ((OnigDistance )(max_semi_end - start) < reg->anchor_dmin) {
 	  start = max_semi_end - reg->anchor_dmin;
-	  start = ONIGENC_LEFT_ADJUST_CHAR_HEAD(reg->enc, str, start);
+	  start = ONIGENC_LEFT_ADJUST_CHAR_HEAD(reg->enc, str, start, end);
 	}
 	if (range > start) goto mismatch_no_msa;
@@ -4228,5 +4292,5 @@
     }
     else if (reg->anchor & ANCHOR_SEMI_END_BUF) {
-      UChar* pre_end = ONIGENC_STEP_BACK(reg->enc, str, end, 1);
+      UChar* pre_end = ONIGENC_STEP_BACK(reg->enc, str, end, end, 1);
 
       max_semi_end = (UChar* )end;
@@ -4235,5 +4299,5 @@
 
 #ifdef USE_CRNL_AS_LINE_TERMINATOR
-	pre_end = ONIGENC_STEP_BACK(reg->enc, str, pre_end, 1);
+	pre_end = ONIGENC_STEP_BACK(reg->enc, str, pre_end, end, 1);
 	if (IS_NOT_NULL(pre_end) &&
 	    IS_NEWLINE_CRLF(reg->options) &&
@@ -4252,7 +4316,5 @@
     }
     else if ((reg->anchor & ANCHOR_ANYCHAR_STAR_ML)) {
-      if (! (reg->anchor & ANCHOR_LOOK_BEHIND)) {
-	goto begin_position;
-      }
+      goto begin_position;
     }
   }
@@ -4296,5 +4358,5 @@
   if (range > start) {   /* forward search */
     if (s > str)
-      prev = onigenc_get_prev_char_head(reg->enc, str, s);
+      prev = onigenc_get_prev_char_head(reg->enc, str, s, end);
     else
       prev = (UChar* )NULL;
@@ -4314,5 +4376,5 @@
 
       if ((end - start) < reg->threshold_len)
-        goto mismatch;
+	goto mismatch;
 
       if (reg->dmax != ONIG_INFINITE_DISTANCE) {
@@ -4327,5 +4389,5 @@
 	    MATCH_AND_RETURN_CHECK(orig_range);
 	    prev = s;
-	    s += enclen(reg->enc, s);
+	    s += enclen(reg->enc, s, end);
 	  }
 	} while (s < range);
@@ -4336,22 +4398,20 @@
 				   &low, &high, (UChar** )NULL)) goto mismatch;
 
-        if ((reg->anchor & ANCHOR_ANYCHAR_STAR) != 0) {
-          do {
-            if ((reg->anchor & ANCHOR_BEGIN_POSITION) == 0)
-              msa.gpos = s;     /* move \G position */
-            MATCH_AND_RETURN_CHECK(orig_range);
-            prev = s;
-            s += enclen(reg->enc, s);
-
-            if ((reg->anchor & (ANCHOR_LOOK_BEHIND | ANCHOR_PREC_READ_NOT)) == 0) {
-              while (!ONIGENC_IS_MBC_NEWLINE_EX(reg->enc, prev, str, end, reg->options, 0)
-                     && s < range) {
-                prev = s;
-                s += enclen(reg->enc, s);
-              }
-            }
-          } while (s < range);
-          goto mismatch;
-        }
+	if ((reg->anchor & ANCHOR_ANYCHAR_STAR) != 0) {
+	  do {
+	    MATCH_AND_RETURN_CHECK(orig_range);
+	    prev = s;
+	    s += enclen(reg->enc, s, end);
+
+	    if ((reg->anchor & (ANCHOR_LOOK_BEHIND | ANCHOR_PREC_READ_NOT)) == 0) {
+	      while (!ONIGENC_IS_MBC_NEWLINE_EX(reg->enc, prev, str, end, reg->options, 0)
+		  && s < range) {
+		prev = s;
+		s += enclen(reg->enc, s, end);
+	      }
+	    }
+	  } while (s < range);
+	  goto mismatch;
+	}
       }
     }
@@ -4360,5 +4420,5 @@
       MATCH_AND_RETURN_CHECK(orig_range);
       prev = s;
-      s += enclen(reg->enc, s);
+      s += enclen(reg->enc, s, end);
     } while (s < range);
 
@@ -4372,5 +4432,5 @@
 
       if (range < end)
-	adjrange = ONIGENC_LEFT_ADJUST_CHAR_HEAD(reg->enc, str, range);
+	adjrange = ONIGENC_LEFT_ADJUST_CHAR_HEAD(reg->enc, str, range, end);
       else
 	adjrange = (UChar* )end;
@@ -4389,5 +4449,5 @@
 
 	  while (s >= low) {
-	    prev = onigenc_get_prev_char_head(reg->enc, str, s);
+	    prev = onigenc_get_prev_char_head(reg->enc, str, s, end);
 	    MATCH_AND_RETURN_CHECK(orig_start);
 	    s = prev;
@@ -4408,5 +4468,5 @@
 	    else
 	      sch_start = ONIGENC_LEFT_ADJUST_CHAR_HEAD(reg->enc,
-						    start, sch_start);
+						    start, sch_start, end);
 	  }
 	}
@@ -4417,5 +4477,5 @@
 
     do {
-      prev = onigenc_get_prev_char_head(reg->enc, str, s);
+      prev = onigenc_get_prev_char_head(reg->enc, str, s, end);
       MATCH_AND_RETURN_CHECK(orig_start);
       s = prev;
@@ -4436,13 +4496,8 @@
  finish:
   MATCH_ARG_FREE(msa);
-  ONIG_STATE_DEC_THREAD(reg);
 
   /* If result is mismatch and no FIND_NOT_EMPTY option,
      then the region is not set in match_at(). */
-  if (IS_FIND_NOT_EMPTY(reg->options) && region
-#ifdef USE_POSIX_API_REGION_OPTION
-      && !IS_POSIX_REGION(option)
-#endif
-      ) {
+  if (IS_FIND_NOT_EMPTY(reg->options) && region) {
     onig_region_clear(region);
   }
@@ -4450,5 +4505,5 @@
 #ifdef ONIG_DEBUG
   if (r != ONIG_MISMATCH)
-    fprintf(stderr, "onig_search: error %"PRIdPTR"\n", r);
+    fprintf(stderr, "onig_search: error %"PRIdPTRDIFF"\n", r);
 #endif
   return r;
@@ -4457,19 +4512,59 @@
   r = ONIG_MISMATCH;
  finish_no_msa:
-  ONIG_STATE_DEC_THREAD(reg);
 #ifdef ONIG_DEBUG
   if (r != ONIG_MISMATCH)
-    fprintf(stderr, "onig_search: error %"PRIdPTR"\n", r);
+    fprintf(stderr, "onig_search: error %"PRIdPTRDIFF"\n", r);
 #endif
   return r;
 
  match:
-  ONIG_STATE_DEC_THREAD(reg);
   MATCH_ARG_FREE(msa);
   return s - str;
 }
 
+extern OnigPosition
+onig_scan(regex_t* reg, const UChar* str, const UChar* end,
+	  OnigRegion* region, OnigOptionType option,
+	  int (*scan_callback)(OnigPosition, OnigPosition, OnigRegion*, void*),
+	  void* callback_arg)
+{
+  OnigPosition r;
+  OnigPosition n;
+  int rs;
+  const UChar* start;
+
+  n = 0;
+  start = str;
+  while (1) {
+    r = onig_search(reg, str, end, start, end, region, option);
+    if (r >= 0) {
+      rs = scan_callback(n, r, region, callback_arg);
+      n++;
+      if (rs != 0)
+	return rs;
+
+      if (region->end[0] == start - str) {
+	if (start >= end) break;
+	start += enclen(reg->enc, start, end);
+      }
+      else
+	start = str + region->end[0];
+
+      if (start > end)
+	break;
+    }
+    else if (r == ONIG_MISMATCH) {
+      break;
+    }
+    else { /* error */
+      return r;
+    }
+  }
+
+  return n;
+}
+
 extern OnigEncoding
-onig_get_encoding(regex_t* reg)
+onig_get_encoding(const regex_t* reg)
 {
   return reg->enc;
@@ -4477,5 +4572,5 @@
 
 extern OnigOptionType
-onig_get_options(regex_t* reg)
+onig_get_options(const regex_t* reg)
 {
   return reg->options;
@@ -4483,11 +4578,11 @@
 
 extern  OnigCaseFoldType
-onig_get_case_fold_flag(regex_t* reg)
+onig_get_case_fold_flag(const regex_t* reg)
 {
   return reg->case_fold_flag;
 }
 
-extern OnigSyntaxType*
-onig_get_syntax(regex_t* reg)
+extern const OnigSyntaxType*
+onig_get_syntax(const regex_t* reg)
 {
   return reg->syntax;
@@ -4495,5 +4590,5 @@
 
 extern int
-onig_number_of_captures(regex_t* reg)
+onig_number_of_captures(const regex_t* reg)
 {
   return reg->num_mem;
@@ -4501,5 +4596,5 @@
 
 extern int
-onig_number_of_capture_histories(regex_t* reg)
+onig_number_of_capture_histories(const regex_t* reg)
 {
 #ifdef USE_CAPTURE_HISTORY
@@ -4518,5 +4613,5 @@
 
 extern void
-onig_copy_encoding(OnigEncoding to, OnigEncoding from)
+onig_copy_encoding(OnigEncodingType *to, OnigEncoding from)
 {
   *to = *from;
Index: EcnlProtoTool/trunk/onigmo-6.1.3/src/regext.c
===================================================================
--- EcnlProtoTool/trunk/onigmo-5.15.0/src/regext.c	(revision 321)
+++ EcnlProtoTool/trunk/onigmo-6.1.3/src/regext.c	(revision 331)
@@ -4,5 +4,5 @@
 /*-
  * Copyright (c) 2002-2008  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
- * Copyright (c) 2011       K.Takata  <kentkt AT csc DOT jp>
+ * Copyright (c) 2011-2016  K.Takata  <kentkt AT csc DOT jp>
  * All rights reserved.
  *
@@ -202,22 +202,2 @@
   return r;
 }
-
-#ifdef USE_RECOMPILE_API
-extern int
-onig_recompile_deluxe(regex_t* reg, const UChar* pattern, const UChar* pattern_end,
-                      OnigCompileInfo* ci, OnigErrorInfo* einfo)
-{
-  int r;
-  regex_t *new_reg;
-
-  r = onig_new_deluxe(&new_reg, pattern, pattern_end, ci, einfo);
-  if (r) return r;
-  if (ONIG_STATE(reg) == ONIG_STATE_NORMAL) {
-    onig_transfer(reg, new_reg);
-  }
-  else {
-    onig_chain_link_add(reg, new_reg);
-  }
-  return 0;
-}
-#endif
Index: EcnlProtoTool/trunk/onigmo-6.1.3/src/reggnu.c
===================================================================
--- EcnlProtoTool/trunk/onigmo-5.15.0/src/reggnu.c	(revision 321)
+++ EcnlProtoTool/trunk/onigmo-6.1.3/src/reggnu.c	(revision 331)
@@ -4,5 +4,5 @@
 /*-
  * Copyright (c) 2002-2008  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
- * Copyright (c) 2011       K.Takata  <kentkt AT csc DOT jp>
+ * Copyright (c) 2011-2016  K.Takata  <kentkt AT csc DOT jp>
  * All rights reserved.
  *
@@ -31,6 +31,6 @@
 #include "regint.h"
 
-#ifndef ONIGGNU_H
-#include "oniggnu.h"
+#ifndef ONIGMOGNU_H
+# include "onigmognu.h"
 #endif
 
@@ -49,10 +49,11 @@
     UChar *p;
     UChar *s = (UChar* )string + startpos;
+    UChar *e = (UChar* )string + size;
 
     if (range > 0) {
-      p = onigenc_get_right_adjust_char_head(reg->enc, (UChar* )string, s);
+      p = onigenc_get_right_adjust_char_head(reg->enc, (UChar* )string, s, e);
     }
     else {
-      p = ONIGENC_LEFT_ADJUST_CHAR_HEAD(reg->enc, (UChar* )string, s);
+      p = ONIGENC_LEFT_ADJUST_CHAR_HEAD(reg->enc, (UChar* )string, s, e);
     }
     return (int )(p - (UChar* )string);
@@ -95,27 +96,4 @@
 }
 
-#ifdef USE_RECOMPILE_API
-extern int
-re_recompile_pattern(const char* pattern, int size, regex_t* reg, char* ebuf)
-{
-  int r;
-  OnigErrorInfo einfo;
-  OnigEncoding enc;
-
-  /* I think encoding and options should be arguments of this function.
-     But this is adapted to present re.c. (2002/11/29)
-   */
-  enc = OnigEncDefaultCharEncoding;
-
-  r = onig_recompile(reg, (UChar* )pattern, (UChar* )(pattern + size),
-		     reg->options, enc, OnigDefaultSyntax, &einfo);
-  if (r != ONIG_NORMAL) {
-    if (IS_NOT_NULL(ebuf))
-      (void )onig_error_code_to_str((UChar* )ebuf, r, &einfo);
-  }
-  return r;
-}
-#endif
-
 extern void
 re_free_pattern(regex_t* reg)
@@ -139,5 +117,5 @@
 re_set_casetable(const char* table)
 {
-  onigenc_set_default_caseconv_table((UChar* )table);
+  /* onigenc_set_default_caseconv_table((UChar* )table); */
 }
 
@@ -151,5 +129,4 @@
     enc = ONIG_ENCODING_ASCII;
     break;
-#if 0
   case RE_MBCTYPE_EUC:
     enc = ONIG_ENCODING_EUC_JP;
@@ -158,5 +135,4 @@
     enc = ONIG_ENCODING_SJIS;
     break;
-#endif
   case RE_MBCTYPE_UTF8:
     enc = ONIG_ENCODING_UTF8;
Index: EcnlProtoTool/trunk/onigmo-6.1.3/src/regint.h
===================================================================
--- EcnlProtoTool/trunk/onigmo-5.15.0/src/regint.h	(revision 321)
+++ EcnlProtoTool/trunk/onigmo-6.1.3/src/regint.h	(revision 331)
@@ -1,4 +1,4 @@
-#ifndef REGINT_H
-#define REGINT_H
+#ifndef ONIGMO_REGINT_H
+#define ONIGMO_REGINT_H
 /**********************************************************************
   regint.h -  Onigmo (Oniguruma-mod) (regular expression library)
@@ -6,5 +6,5 @@
 /*-
  * Copyright (c) 2002-2013  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
- * Copyright (c) 2011-2014  K.Takata  <kentkt AT csc DOT jp>
+ * Copyright (c) 2011-2016  K.Takata  <kentkt AT csc DOT jp>
  * All rights reserved.
  *
@@ -36,4 +36,5 @@
 /* #define ONIG_DEBUG_SEARCH */
 /* #define ONIG_DEBUG_MATCH */
+/* #define ONIG_DEBUG_MEMLEAK */
 /* #define ONIG_DONT_OPTIMIZE */
 
@@ -43,23 +44,23 @@
 #if defined(ONIG_DEBUG_PARSE_TREE) || defined(ONIG_DEBUG_MATCH) || \
     defined(ONIG_DEBUG_SEARCH) || defined(ONIG_DEBUG_COMPILE) || \
-    defined(ONIG_DEBUG_STATISTICS)
-#ifndef ONIG_DEBUG
-#define ONIG_DEBUG
-#endif
+    defined(ONIG_DEBUG_STATISTICS) || defined(ONIG_DEBUG_MEMLEAK)
+# ifndef ONIG_DEBUG
+#  define ONIG_DEBUG
+# endif
 #endif
 
 #ifndef UNALIGNED_WORD_ACCESS
-#if defined(__i386) || defined(__i386__) || defined(_M_IX86) || \
-    defined(__x86_64) || defined(__x86_64__) || defined(_M_AMD64) || \
-    defined(__powerpc64__) || \
-    defined(__mc68020__)
-#define UNALIGNED_WORD_ACCESS 1
-#else
-#define UNALIGNED_WORD_ACCESS 0
-#endif
+# if defined(__i386) || defined(__i386__) || defined(_M_IX86) || \
+     defined(__x86_64) || defined(__x86_64__) || defined(_M_AMD64) || \
+     defined(__powerpc64__) || \
+     defined(__mc68020__)
+#  define UNALIGNED_WORD_ACCESS 1
+# else
+#  define UNALIGNED_WORD_ACCESS 0
+# endif
 #endif
 
 #if UNALIGNED_WORD_ACCESS
-#define PLATFORM_UNALIGNED_WORD_ACCESS
+# define PLATFORM_UNALIGNED_WORD_ACCESS
 #endif
 
@@ -74,177 +75,163 @@
 #define USE_NEWLINE_AT_END_OF_STRING_HAS_EMPTY_LINE     /* /\n$/ =~ "\n" */
 #define USE_WARNING_REDUNDANT_NESTED_REPEAT_OPERATOR
-/* #define USE_RECOMPILE_API */
 /* !!! moved to regenc.h. */ /* #define USE_CRNL_AS_LINE_TERMINATOR */
 #define USE_NO_INVALID_QUANTIFIER
 
 /* internal config */
-#define USE_PARSE_TREE_NODE_RECYCLE
-#define USE_OP_PUSH_OR_JUMP_EXACT
+/* #define USE_OP_PUSH_OR_JUMP_EXACT */
 #define USE_QTFR_PEEK_NEXT
 #define USE_ST_LIBRARY
-#define USE_SHARED_CCLASS_TABLE
 #define USE_SUNDAY_QUICK_SEARCH
 
 #define INIT_MATCH_STACK_SIZE                     160
 #define DEFAULT_MATCH_STACK_LIMIT_SIZE              0 /* unlimited */
+#define DEFAULT_PARSE_DEPTH_LIMIT                4096
+
+#define OPT_EXACT_MAXLEN   24
 
 /* check config */
 #if defined(USE_PERL_SUBEXP_CALL) || defined(USE_CAPITAL_P_NAMED_GROUP)
-#if !defined(USE_NAMED_GROUP) || !defined(USE_SUBEXP_CALL)
-#error USE_NAMED_GROUP and USE_SUBEXP_CALL must be defined.
-#endif
+# if !defined(USE_NAMED_GROUP) || !defined(USE_SUBEXP_CALL)
+#  error USE_NAMED_GROUP and USE_SUBEXP_CALL must be defined.
+# endif
 #endif
 
 #if defined(__GNUC__)
-#  define ARG_UNUSED  __attribute__ ((unused))
+# define ARG_UNUSED  __attribute__ ((unused))
 #else
-#  define ARG_UNUSED
-#endif
+# define ARG_UNUSED
+#endif
+
+#if !defined(RUBY) && defined(RUBY_EXPORT)
+# define RUBY
+#endif
+#ifdef RUBY
+# ifndef RUBY_DEFINES_H
+#  include "ruby/ruby.h"
+#  undef xmalloc
+#  undef xrealloc
+#  undef xcalloc
+#  undef xfree
+# endif
+#else /* RUBY */
+# include "config.h"
+# if SIZEOF_LONG_LONG > 0
+#  define LONG_LONG long long
+# endif
+#endif /* RUBY */
+
+#include <stdarg.h>
 
 /* */
 /* escape other system UChar definition */
-#include "config.h"
 #ifdef ONIG_ESCAPE_UCHAR_COLLISION
-#undef ONIG_ESCAPE_UCHAR_COLLISION
+# undef ONIG_ESCAPE_UCHAR_COLLISION
 #endif
 
 #define USE_WORD_BEGIN_END          /* "\<": word-begin, "\>": word-end */
-#define USE_CAPTURE_HISTORY
+#ifdef RUBY
+# undef USE_CAPTURE_HISTORY
+#else
+# define USE_CAPTURE_HISTORY
+#endif
 #define USE_VARIABLE_META_CHARS
-#define USE_POSIX_API_REGION_OPTION     /* needed for POSIX API support */
 #define USE_FIND_LONGEST_SEARCH_ALL_OF_RANGE
 /* #define USE_COMBINATION_EXPLOSION_CHECK */     /* (X*)* */
 
-/* multithread config */
-/* #define USE_MULTI_THREAD_SYSTEM */
-/* #define USE_DEFAULT_MULTI_THREAD_SYSTEM */
-
-#if defined(USE_MULTI_THREAD_SYSTEM) \
-  && defined(USE_DEFAULT_MULTI_THREAD_SYSTEM)
-
-#if defined(_WIN32) && !defined(MUSL_LIBC)
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-extern CRITICAL_SECTION gOnigMutex;
-#define THREAD_SYSTEM_INIT      InitializeCriticalSection(&gOnigMutex)
-#define THREAD_SYSTEM_END       DeleteCriticalSection(&gOnigMutex)
-#define THREAD_ATOMIC_START     EnterCriticalSection(&gOnigMutex)
-#define THREAD_ATOMIC_END       LeaveCriticalSection(&gOnigMutex)
-#define THREAD_PASS             Sleep(0)
-#else /* _WIN32 */
-#include <pthread.h>
-#include <sched.h>
-extern pthread_mutex_t gOnigMutex;
-#define THREAD_SYSTEM_INIT      pthread_mutex_init(&gOnigMutex, NULL)
-#define THREAD_SYSTEM_END       pthread_mutex_destroy(&gOnigMutex)
-#define THREAD_ATOMIC_START     pthread_mutex_lock(&gOnigMutex)
-#define THREAD_ATOMIC_END       pthread_mutex_unlock(&gOnigMutex)
-#define THREAD_PASS             sched_yield()
-#endif /* _WIN32 */
-
-#else /* USE_DEFAULT_MULTI_THREAD_SYSTEM */
-
-#ifndef THREAD_SYSTEM_INIT
-#define THREAD_SYSTEM_INIT      /* depend on thread system */
-#endif
-#ifndef THREAD_SYSTEM_END
-#define THREAD_SYSTEM_END       /* depend on thread system */
-#endif
-#ifndef THREAD_ATOMIC_START
-#define THREAD_ATOMIC_START     /* depend on thread system */
-#endif
-#ifndef THREAD_ATOMIC_END
-#define THREAD_ATOMIC_END       /* depend on thread system */
-#endif
-#ifndef THREAD_PASS
-#define THREAD_PASS             /* depend on thread system */
-#endif
-
-#endif /* USE_DEFAULT_MULTI_THREAD_SYSTEM */
 
 #ifndef xmalloc
-#define xmalloc     malloc
-#define xrealloc    realloc
-#define xcalloc     calloc
-#define xfree       free
-#endif
-
-#define CHECK_INTERRUPT_IN_MATCH_AT
-
-#define st_init_table                  onig_st_init_table
-#define st_init_table_with_size        onig_st_init_table_with_size
-#define st_init_numtable               onig_st_init_numtable
-#define st_init_numtable_with_size     onig_st_init_numtable_with_size
-#define st_init_strtable               onig_st_init_strtable
-#define st_init_strtable_with_size     onig_st_init_strtable_with_size
-#define st_delete                      onig_st_delete
-#define st_delete_safe                 onig_st_delete_safe
-#define st_insert                      onig_st_insert
-#define st_lookup                      onig_st_lookup
-#define st_foreach                     onig_st_foreach
-#define st_add_direct                  onig_st_add_direct
-#define st_free_table                  onig_st_free_table
-#define st_cleanup_safe                onig_st_cleanup_safe
-#define st_copy                        onig_st_copy
-#define st_nothing_key_clone           onig_st_nothing_key_clone
-#define st_nothing_key_free            onig_st_nothing_key_free
+# define xmalloc     malloc
+# define xrealloc    realloc
+# define xcalloc     calloc
+# define xfree       free
+#endif
+
+#ifdef RUBY
+
+# define CHECK_INTERRUPT_IN_MATCH_AT rb_thread_check_ints()
+# define onig_st_init_table                  st_init_table
+# define onig_st_init_table_with_size        st_init_table_with_size
+# define onig_st_init_numtable               st_init_numtable
+# define onig_st_init_numtable_with_size     st_init_numtable_with_size
+# define onig_st_init_strtable               st_init_strtable
+# define onig_st_init_strtable_with_size     st_init_strtable_with_size
+# define onig_st_delete                      st_delete
+# define onig_st_delete_safe                 st_delete_safe
+# define onig_st_insert                      st_insert
+# define onig_st_lookup                      st_lookup
+# define onig_st_foreach                     st_foreach
+# define onig_st_add_direct                  st_add_direct
+# define onig_st_free_table                  st_free_table
+# define onig_st_cleanup_safe                st_cleanup_safe
+# define onig_st_copy                        st_copy
+# define onig_st_nothing_key_clone           st_nothing_key_clone
+# define onig_st_nothing_key_free            st_nothing_key_free
+# define onig_st_is_member                   st_is_member
+
+# define USE_UPPER_CASE_TABLE
+#else /* RUBY */
+
+# define CHECK_INTERRUPT_IN_MATCH_AT
+
+# define st_init_table                  onig_st_init_table
+# define st_init_table_with_size        onig_st_init_table_with_size
+# define st_init_numtable               onig_st_init_numtable
+# define st_init_numtable_with_size     onig_st_init_numtable_with_size
+# define st_init_strtable               onig_st_init_strtable
+# define st_init_strtable_with_size     onig_st_init_strtable_with_size
+# define st_delete                      onig_st_delete
+# define st_delete_safe                 onig_st_delete_safe
+# define st_insert                      onig_st_insert
+# define st_lookup                      onig_st_lookup
+# define st_foreach                     onig_st_foreach
+# define st_add_direct                  onig_st_add_direct
+# define st_free_table                  onig_st_free_table
+# define st_cleanup_safe                onig_st_cleanup_safe
+# define st_copy                        onig_st_copy
+# define st_nothing_key_clone           onig_st_nothing_key_clone
+# define st_nothing_key_free            onig_st_nothing_key_free
 /* */
-#define onig_st_is_member              st_is_member
+# define onig_st_is_member              st_is_member
+
+#endif /* RUBY */
 
 #define STATE_CHECK_STRING_THRESHOLD_LEN             7
 #define STATE_CHECK_BUFF_MAX_SIZE               0x4000
 
-#define THREAD_PASS_LIMIT_COUNT     8
 #define xmemset     memset
 #define xmemcpy     memcpy
 #define xmemmove    memmove
 
-#if defined(_WIN32) && !defined(__GNUC__) && !defined(MUSL_LIBC)
-#define xalloca     _alloca
-#define xvsnprintf  _vsnprintf
+#if ((defined(RUBY_MSVCRT_VERSION) && RUBY_MSVCRT_VERSION >= 90) \
+        || (!defined(RUBY_MSVCRT_VERSION) && defined(_WIN32))) \
+    && !defined(__GNUC__)
+# define xalloca     _alloca
+# define xvsnprintf(buf,size,fmt,args)  _vsnprintf_s(buf,size,_TRUNCATE,fmt,args)
+# define xsnprintf   sprintf_s
+# define xstrcat(dest,src,size)   strcat_s(dest,size,src)
 #else
-/*#define xalloca     alloca*/
-#define xvsnprintf  vsnprintf
-#endif
-
-
-#if defined(USE_RECOMPILE_API) && defined(USE_MULTI_THREAD_SYSTEM)
-#define ONIG_STATE_INC(reg) (reg)->state++
-#define ONIG_STATE_DEC(reg) (reg)->state--
-
-#define ONIG_STATE_INC_THREAD(reg) do {\
-  THREAD_ATOMIC_START;\
-  (reg)->state++;\
-  THREAD_ATOMIC_END;\
-} while(0)
-#define ONIG_STATE_DEC_THREAD(reg) do {\
-  THREAD_ATOMIC_START;\
-  (reg)->state--;\
-  THREAD_ATOMIC_END;\
-} while(0)
-#else
-#define ONIG_STATE_INC(reg)         /* Nothing */
-#define ONIG_STATE_DEC(reg)         /* Nothing */
-#define ONIG_STATE_INC_THREAD(reg)  /* Nothing */
-#define ONIG_STATE_DEC_THREAD(reg)  /* Nothing */
-#endif /* USE_RECOMPILE_API && USE_MULTI_THREAD_SYSTEM */
-
-#ifdef HAVE_STDLIB_H
+# define xalloca     alloca
+# define xvsnprintf  vsnprintf
+# define xsnprintf   snprintf
+# define xstrcat(dest,src,size)	  strcat(dest,src)
+#endif
+
+#if defined(ONIG_DEBUG_MEMLEAK) && defined(_MSC_VER)
+# define _CRTDBG_MAP_ALLOC
+# include <malloc.h>
+# include <crtdbg.h>
+#endif
+
 #include <stdlib.h>
-#endif
 
 #if defined(HAVE_ALLOCA_H) && (defined(_AIX) || !defined(__GNUC__))
-#include <alloca.h>
-#endif
-
-#ifdef HAVE_STRING_H
-# include <string.h>
-#else
-# include <strings.h>
-#endif
+# include <alloca.h>
+#endif
+
+#include <string.h>
 
 #include <ctype.h>
 #ifdef HAVE_SYS_TYPES_H
-#include <sys/types.h>
+# include <sys/types.h>
 #endif
 
@@ -257,10 +244,8 @@
 #endif
 
-#ifdef STDC_HEADERS
-# include <stddef.h>
-#endif
-
-#if defined(_WIN32) && !defined(MUSL_LIBC)
-#include <malloc.h>	/* for alloca() */
+#include <stddef.h>
+
+#ifdef _WIN32
+# include <malloc.h>	/* for alloca() */
 #endif
 
@@ -269,36 +254,42 @@
 #endif
 
-#if defined(_WIN32) && !defined(MUSL_LIBC)
-#if defined(_MSC_VER) && (_MSC_VER < 1300)
-#ifndef _INTPTR_T_DEFINED
-#define _INTPTR_T_DEFINED
+#ifdef _WIN32
+# if defined(_MSC_VER) && (_MSC_VER < 1300)
+#  ifndef _INTPTR_T_DEFINED
+#   define _INTPTR_T_DEFINED
 typedef int intptr_t;
-#endif
-#ifndef _UINTPTR_T_DEFINED
-#define _UINTPTR_T_DEFINED
+#  endif
+#  ifndef _UINTPTR_T_DEFINED
+#   define _UINTPTR_T_DEFINED
 typedef unsigned int uintptr_t;
-#endif
-#endif
+#  endif
+# endif
 #endif /* _WIN32 */
 
 #ifndef PRIdPTR
-#ifdef _WIN64
-#define PRIdPTR	"I64d"
-#define PRIuPTR	"I64u"
-#define PRIxPTR	"I64x"
-#else
-#define PRIdPTR	"ld"
-#define PRIuPTR	"lu"
-#define PRIxPTR	"lx"
-#endif
+# ifdef _WIN64
+#  define PRIdPTR	"I64d"
+#  define PRIuPTR	"I64u"
+#  define PRIxPTR	"I64x"
+# else
+#  define PRIdPTR	"ld"
+#  define PRIuPTR	"lu"
+#  define PRIxPTR	"lx"
+# endif
+#endif
+
+#ifndef PRIdPTRDIFF
+# define PRIdPTRDIFF PRIdPTR
 #endif
 
 #include "regenc.h"
 
+RUBY_SYMBOL_EXPORT_BEGIN
+
 #ifdef MIN
-#undef MIN
+# undef MIN
 #endif
 #ifdef MAX
-#undef MAX
+# undef MAX
 #endif
 #define MIN(a,b) (((a)>(b))?(b):(a))
@@ -315,5 +306,5 @@
 #ifdef PLATFORM_UNALIGNED_WORD_ACCESS
 
-#define PLATFORM_GET_INC(val,p,type) do{\
+# define PLATFORM_GET_INC(val,p,type) do{\
   val  = *(type* )p;\
   (p) += sizeof(type);\
@@ -322,5 +313,5 @@
 #else
 
-#define PLATFORM_GET_INC(val,p,type) do{\
+# define PLATFORM_GET_INC(val,p,type) do{\
   xmemcpy(&val, (p), sizeof(type));\
   (p) += sizeof(type);\
@@ -328,7 +319,7 @@
 
 /* sizeof(OnigCodePoint) */
-#define WORD_ALIGNMENT_SIZE     SIZEOF_LONG
-
-#define GET_ALIGNMENT_PAD_SIZE(addr,pad_size) do {\
+# define WORD_ALIGNMENT_SIZE     SIZEOF_LONG
+
+# define GET_ALIGNMENT_PAD_SIZE(addr,pad_size) do {\
   (pad_size) = WORD_ALIGNMENT_SIZE \
                - ((uintptr_t )(addr) % WORD_ALIGNMENT_SIZE);\
@@ -336,5 +327,5 @@
 } while (0)
 
-#define ALIGNMENT_RIGHT(addr) do {\
+# define ALIGNMENT_RIGHT(addr) do {\
   (addr) += (WORD_ALIGNMENT_SIZE - 1);\
   (addr) -= ((uintptr_t )(addr) % WORD_ALIGNMENT_SIZE);\
@@ -400,5 +391,4 @@
 #define IS_NOTBOS(option)         ((option) & ONIG_OPTION_NOTBOS)
 #define IS_NOTEOS(option)         ((option) & ONIG_OPTION_NOTEOS)
-#define IS_POSIX_REGION(option)   ((option) & ONIG_OPTION_POSIX_REGION)
 #define IS_ASCII_RANGE(option)    ((option) & ONIG_OPTION_ASCII_RANGE)
 #define IS_POSIX_BRACKET_ALL_RANGE(option)  ((option) & ONIG_OPTION_POSIX_BRACKET_ALL_RANGE)
@@ -583,5 +573,4 @@
   OP_CCLASS_MB_NOT,
   OP_CCLASS_MIX_NOT,
-  OP_CCLASS_NODE,       /* pointer to CClassNode node */
 
   OP_ANYCHAR,                 /* "."  */
@@ -612,5 +601,4 @@
   OP_SEMI_END_BUF,
   OP_BEGIN_POSITION,
-  OP_BEGIN_POS_OR_LINE,   /* used for implicit anchor optimization */
 
   OP_BACKREF1,
@@ -657,4 +645,7 @@
   OP_PUSH_LOOK_BEHIND_NOT, /* (?<!...) start */
   OP_FAIL_LOOK_BEHIND_NOT, /* (?<!...) end   */
+  OP_PUSH_ABSENT_POS,      /* (?~...)  start */
+  OP_ABSENT,               /* (?~...)  start of inner loop */
+  OP_ABSENT_END,           /* (?~...)  end   */
 
   OP_CALL,                 /* \g<name> */
@@ -744,10 +735,13 @@
 #define SIZE_OP_RETURN                  SIZE_OPCODE
 #define SIZE_OP_CONDITION              (SIZE_OPCODE + SIZE_MEMNUM + SIZE_RELADDR)
+#define SIZE_OP_PUSH_ABSENT_POS         SIZE_OPCODE
+#define SIZE_OP_ABSENT                 (SIZE_OPCODE + SIZE_RELADDR)
+#define SIZE_OP_ABSENT_END              SIZE_OPCODE
 
 #ifdef USE_COMBINATION_EXPLOSION_CHECK
-#define SIZE_OP_STATE_CHECK            (SIZE_OPCODE + SIZE_STATE_CHECK_NUM)
-#define SIZE_OP_STATE_CHECK_PUSH       (SIZE_OPCODE + SIZE_STATE_CHECK_NUM + SIZE_RELADDR)
-#define SIZE_OP_STATE_CHECK_PUSH_OR_JUMP (SIZE_OPCODE + SIZE_STATE_CHECK_NUM + SIZE_RELADDR)
-#define SIZE_OP_STATE_CHECK_ANYCHAR_STAR (SIZE_OPCODE + SIZE_STATE_CHECK_NUM)
+# define SIZE_OP_STATE_CHECK           (SIZE_OPCODE + SIZE_STATE_CHECK_NUM)
+# define SIZE_OP_STATE_CHECK_PUSH      (SIZE_OPCODE + SIZE_STATE_CHECK_NUM + SIZE_RELADDR)
+# define SIZE_OP_STATE_CHECK_PUSH_OR_JUMP (SIZE_OPCODE + SIZE_STATE_CHECK_NUM + SIZE_RELADDR)
+# define SIZE_OP_STATE_CHECK_ANYCHAR_STAR (SIZE_OPCODE + SIZE_STATE_CHECK_NUM)
 #endif
 
@@ -797,11 +791,8 @@
 /* cclass node */
 #define FLAG_NCCLASS_NOT           (1<<0)
-#define FLAG_NCCLASS_SHARE         (1<<1)
 
 #define NCCLASS_SET_NOT(nd)     NCCLASS_FLAG_SET(nd, FLAG_NCCLASS_NOT)
-#define NCCLASS_SET_SHARE(nd)   NCCLASS_FLAG_SET(nd, FLAG_NCCLASS_SHARE)
 #define NCCLASS_CLEAR_NOT(nd)   NCCLASS_FLAG_CLEAR(nd, FLAG_NCCLASS_NOT)
 #define IS_NCCLASS_NOT(nd)      IS_NCCLASS_FLAG_ON(nd, FLAG_NCCLASS_NOT)
-#define IS_NCCLASS_SHARE(nd)    IS_NCCLASS_FLAG_ON(nd, FLAG_NCCLASS_SHARE)
 
 typedef struct {
@@ -858,4 +849,8 @@
     } call_frame;
 #endif
+    struct {
+      UChar *abs_pstr;        /* absent start position */
+      const UChar *end_pstr;  /* end position */
+    } absent_pos;
   } u;
 } OnigStackType;
@@ -901,51 +896,43 @@
 
 
-extern void onig_print_compiled_byte_code P_((FILE* f, UChar* bp, UChar** nextp, OnigEncoding enc));
-
-#ifdef ONIG_DEBUG_STATISTICS
-extern void onig_statistics_init P_((void));
-extern void onig_print_statistics P_((FILE* f));
-#endif
-#endif
-
-extern UChar* onig_error_code_to_format P_((OnigPosition code));
-extern void  onig_snprintf_with_pattern PV_((UChar buf[], int bufsize, OnigEncoding enc, UChar* pat, UChar* pat_end, const UChar *fmt, ...));
-extern int  onig_bbuf_init P_((BBuf* buf, OnigDistance size));
-extern int  onig_compile P_((regex_t* reg, const UChar* pattern, const UChar* pattern_end, OnigErrorInfo* einfo));
-extern void onig_chain_reduce P_((regex_t* reg));
-extern void onig_chain_link_add P_((regex_t* to, regex_t* add));
-extern void onig_transfer P_((regex_t* to, regex_t* from));
-extern int  onig_is_code_in_cc P_((OnigEncoding enc, OnigCodePoint code, CClassNode* cc));
-extern int  onig_is_code_in_cc_len P_((int enclen, OnigCodePoint code, CClassNode* cc));
+extern void onig_print_compiled_byte_code(FILE* f, UChar* bp, UChar* bpend, UChar** nextp, OnigEncoding enc);
+
+# ifdef ONIG_DEBUG_STATISTICS
+extern void onig_statistics_init(void);
+extern void onig_print_statistics(FILE* f);
+# endif
+#endif
+
+extern UChar* onig_error_code_to_format(OnigPosition code);
+extern void onig_vsnprintf_with_pattern(UChar buf[], int bufsize, OnigEncoding enc, UChar* pat, UChar* pat_end, const UChar *fmt, va_list args);
+extern void onig_snprintf_with_pattern(UChar buf[], int bufsize, OnigEncoding enc, UChar* pat, UChar* pat_end, const UChar *fmt, ...);
+extern int  onig_bbuf_init(BBuf* buf, OnigDistance size);
+extern int  onig_compile(regex_t* reg, const UChar* pattern, const UChar* pattern_end, OnigErrorInfo* einfo);
+#ifdef RUBY
+extern int  onig_compile_ruby(regex_t* reg, const UChar* pattern, const UChar* pattern_end, OnigErrorInfo* einfo, const char *sourcefile, int sourceline);
+#endif
+extern void onig_transfer(regex_t* to, regex_t* from);
+extern int  onig_is_code_in_cc(OnigEncoding enc, OnigCodePoint code, CClassNode* cc);
+extern int  onig_is_code_in_cc_len(int enclen, OnigCodePoint code, CClassNode* cc);
 
 /* strend hash */
 typedef void hash_table_type;
-typedef uintptr_t hash_data_type;
-
-extern hash_table_type* onig_st_init_strend_table_with_size P_((int size));
-extern int onig_st_lookup_strend P_((hash_table_type* table, const UChar* str_key, const UChar* end_key, hash_data_type *value));
-extern int onig_st_insert_strend P_((hash_table_type* table, const UChar* str_key, const UChar* end_key, hash_data_type value));
-
-/* encoding property management */
-#define PROPERTY_LIST_ADD_PROP(Name, CR) \
-  r = onigenc_property_list_add_property((UChar* )Name, CR,\
-	      &PropertyNameTable, &PropertyList, &PropertyListNum,\
-	      &PropertyListSize);\
-  if (r != 0) goto end
-
-#define PROPERTY_LIST_INIT_CHECK \
-  if (PropertyInited == 0) {\
-    int r = onigenc_property_list_init(init_property_list);\
-    if (r != 0) return r;\
-  }
-
-extern int onigenc_property_list_add_property P_((UChar* name, const OnigCodePoint* prop, hash_table_type **table, const OnigCodePoint*** plist, int *pnum, int *psize));
-
-typedef int (*ONIGENC_INIT_PROPERTY_LIST_FUNC_TYPE)(void);
-
-extern int onigenc_property_list_init P_((ONIGENC_INIT_PROPERTY_LIST_FUNC_TYPE));
-
-extern size_t onig_memsize P_((const regex_t *reg));
-extern size_t onig_region_memsize P_((const struct re_registers *regs));
-
-#endif /* REGINT_H */
+#ifdef RUBY
+# include "ruby/st.h"
+#else
+# include "st.h"
+#endif
+typedef st_data_t hash_data_type;
+
+extern hash_table_type* onig_st_init_strend_table_with_size(st_index_t size);
+extern int onig_st_lookup_strend(hash_table_type* table, const UChar* str_key, const UChar* end_key, hash_data_type *value);
+extern int onig_st_insert_strend(hash_table_type* table, const UChar* str_key, const UChar* end_key, hash_data_type value);
+
+#ifdef RUBY
+extern size_t onig_memsize(const regex_t *reg);
+extern size_t onig_region_memsize(const struct re_registers *regs);
+#endif
+
+RUBY_SYMBOL_EXPORT_END
+
+#endif /* ONIGMO_REGINT_H */
Index: EcnlProtoTool/trunk/onigmo-6.1.3/src/regparse.c
===================================================================
--- EcnlProtoTool/trunk/onigmo-5.15.0/src/regparse.c	(revision 321)
+++ EcnlProtoTool/trunk/onigmo-6.1.3/src/regparse.c	(revision 331)
@@ -4,5 +4,5 @@
 /*-
  * Copyright (c) 2002-2008  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
- * Copyright (c) 2011-2014  K.Takata  <kentkt AT csc DOT jp>
+ * Copyright (c) 2011-2016  K.Takata  <kentkt AT csc DOT jp>
  * All rights reserved.
  *
@@ -30,5 +30,5 @@
 
 #include "regparse.h"
-#include "st.h"
+#include <stdarg.h>
 
 #define WARN_BUFSIZE    256
@@ -37,5 +37,5 @@
 
 
-OnigSyntaxType OnigSyntaxRuby = {
+const OnigSyntaxType OnigSyntaxRuby = {
   (( SYN_GNU_REGEX_OP | ONIG_SYN_OP_QMARK_NON_GREEDY |
      ONIG_SYN_OP_ESC_OCTAL3 | ONIG_SYN_OP_ESC_X_HEX2 |
@@ -53,8 +53,12 @@
       ONIG_SYN_OP2_ESC_CAPITAL_M_BAR_META | ONIG_SYN_OP2_ESC_V_VTAB |
       ONIG_SYN_OP2_ESC_H_XDIGIT |
+#ifndef RUBY
+      ONIG_SYN_OP2_ESC_U_HEX4 |
+#endif
       ONIG_SYN_OP2_ESC_CAPITAL_X_EXTENDED_GRAPHEME_CLUSTER |
       ONIG_SYN_OP2_QMARK_LPAREN_CONDITION |
       ONIG_SYN_OP2_ESC_CAPITAL_R_LINEBREAK |
-      ONIG_SYN_OP2_ESC_CAPITAL_K_KEEP )
+      ONIG_SYN_OP2_ESC_CAPITAL_K_KEEP |
+      ONIG_SYN_OP2_QMARK_TILDE_ABSENT )
   , ( SYN_GNU_REGEX_BV |
       ONIG_SYN_ALLOW_INTERVAL_LOW_ABBREV |
@@ -64,4 +68,5 @@
       ONIG_SYN_FIXED_INTERVAL_IS_GREEDY_ONLY |
       ONIG_SYN_WARN_CC_OP_NOT_ESCAPED |
+      ONIG_SYN_WARN_CC_DUP |
       ONIG_SYN_WARN_REDUNDANT_NESTED_REPEAT )
   , ( ONIG_OPTION_ASCII_RANGE | ONIG_OPTION_POSIX_BRACKET_ALL_RANGE |
@@ -78,5 +83,5 @@
 };
 
-OnigSyntaxType*  OnigDefaultSyntax = ONIG_SYNTAX_RUBY;
+const OnigSyntaxType*  OnigDefaultSyntax = ONIG_SYNTAX_RUBY;
 
 extern void onig_null_warn(const char* s ARG_UNUSED) { }
@@ -103,4 +108,26 @@
   onig_verb_warn = f;
 }
+
+static void CC_DUP_WARN(ScanEnv *env);
+
+
+static unsigned int ParseDepthLimit = DEFAULT_PARSE_DEPTH_LIMIT;
+
+extern unsigned int
+onig_get_parse_depth_limit(void)
+{
+  return ParseDepthLimit;
+}
+
+extern int
+onig_set_parse_depth_limit(unsigned int depth)
+{
+  if (depth == 0)
+    ParseDepthLimit = DEFAULT_PARSE_DEPTH_LIMIT;
+  else
+    ParseDepthLimit = depth;
+  return 0;
+}
+
 
 static void
@@ -137,5 +164,5 @@
 
 #define SET_ALL_MULTI_BYTE_RANGE(enc, pbuf) \
-  add_code_range_to_buf(pbuf, MBCODE_START_POS(enc), ONIG_LAST_CODE_POINT)
+  add_code_range_to_buf(pbuf, env, MBCODE_START_POS(enc), ONIG_LAST_CODE_POINT)
 
 #define ADD_ALL_MULTI_BYTE_RANGE(enc, mbuf) do {\
@@ -146,4 +173,9 @@
 } while (0)
 
+
+#define BITSET_SET_BIT_CHKDUP(bs, pos) do { \
+  if (BITSET_AT(bs, pos)) CC_DUP_WARN(env); \
+  BS_ROOM(bs, pos) |= BS_BIT(pos); \
+} while (0)
 
 #define BITSET_IS_EMPTY(bs,empty) do {\
@@ -158,9 +190,9 @@
 
 static void
-bitset_set_range(BitSetRef bs, int from, int to)
+bitset_set_range(ScanEnv *env, BitSetRef bs, int from, int to)
 {
   int i;
   for (i = from; i <= to && i < SINGLE_BYTE_SIZE; i++) {
-    BITSET_SET_BIT(bs, i);
+    BITSET_SET_BIT_CHKDUP(bs, i);
   }
 }
@@ -210,4 +242,5 @@
 }
 
+#if defined(USE_NAMED_GROUP) && !defined(USE_ST_LIBRARY)
 extern int
 onig_strncmp(const UChar* s1, const UChar* s2, int n)
@@ -221,4 +254,5 @@
   return 0;
 }
+#endif
 
 extern void
@@ -259,7 +293,7 @@
 #ifdef __GNUC__
 /* get rid of Wunused-but-set-variable and Wuninitialized */
-#define PFETCH_READY  UChar* pfetch_prev = NULL; (void)pfetch_prev
+# define PFETCH_READY  UChar* pfetch_prev = NULL; (void)pfetch_prev
 #else
-#define PFETCH_READY  UChar* pfetch_prev
+# define PFETCH_READY  UChar* pfetch_prev
 #endif
 #define PEND         (p < end ?  0 : 1)
@@ -267,18 +301,18 @@
 #define PINC       do { \
   pfetch_prev = p; \
-  p += ONIGENC_MBC_ENC_LEN(enc, p); \
+  p += enclen(enc, p, end); \
 } while (0)
 #define PFETCH(c)  do { \
-  c = ONIGENC_MBC_TO_CODE(enc, p, end); \
+  c = ((enc->max_enc_len == 1) ? *p : ONIGENC_MBC_TO_CODE(enc, p, end)); \
   pfetch_prev = p; \
-  p += ONIGENC_MBC_ENC_LEN(enc, p); \
+  p += enclen(enc, p, end); \
 } while (0)
 
 #define PINC_S     do { \
-  p += ONIGENC_MBC_ENC_LEN(enc, p); \
+  p += enclen(enc, p, end); \
 } while (0)
 #define PFETCH_S(c) do { \
-  c = ONIGENC_MBC_TO_CODE(enc, p, end); \
-  p += ONIGENC_MBC_ENC_LEN(enc, p); \
+  c = ((enc->max_enc_len == 1) ? *p : ONIGENC_MBC_TO_CODE(enc, p, end)); \
+  p += enclen(enc, p, end); \
 } while (0)
 
@@ -319,15 +353,24 @@
 #ifdef USE_ST_LIBRARY
 
+# ifdef RUBY
+#  include "ruby/st.h"
+# else
+#  include "st.h"
+# endif
+
 typedef struct {
-  UChar* s;
-  UChar* end;
+  const UChar* s;
+  const UChar* end;
 } st_str_end_key;
 
 static int
-str_end_cmp(st_str_end_key* x, st_str_end_key* y)
-{
-  UChar *p, *q;
+str_end_cmp(st_data_t xp, st_data_t yp)
+{
+  const st_str_end_key *x, *y;
+  const UChar *p, *q;
   int c;
 
+  x = (const st_str_end_key *)xp;
+  y = (const st_str_end_key *)yp;
   if ((x->end - x->s) != (y->end - y->s))
     return 1;
@@ -345,9 +388,10 @@
 }
 
-static int
-str_end_hash(st_str_end_key* x)
-{
-  UChar *p;
-  int val = 0;
+static st_index_t
+str_end_hash(st_data_t xp)
+{
+  const st_str_end_key *x = (const st_str_end_key *)xp;
+  const UChar *p;
+  st_index_t val = 0;
 
   p = x->s;
@@ -360,7 +404,7 @@
 
 extern hash_table_type*
-onig_st_init_strend_table_with_size(int size)
-{
-  static struct st_hash_type hashType = {
+onig_st_init_strend_table_with_size(st_index_t size)
+{
+  static const struct st_hash_type hashType = {
     str_end_cmp,
     str_end_hash,
@@ -405,5 +449,5 @@
 #ifdef USE_NAMED_GROUP
 
-#define INIT_NAME_BACKREFS_ALLOC_NUM   8
+# define INIT_NAME_BACKREFS_ALLOC_NUM   8
 
 typedef struct {
@@ -416,10 +460,10 @@
 } NameEntry;
 
-#ifdef USE_ST_LIBRARY
+# ifdef USE_ST_LIBRARY
 
 typedef st_table  NameTable;
 typedef st_data_t HashDataType;   /* 1.6 st.h doesn't define st_data_t type */
 
-#ifdef ONIG_DEBUG
+#  ifdef ONIG_DEBUG
 static int
 i_print_name_entry(UChar* key, NameEntry* e, void* arg)
@@ -455,5 +499,5 @@
   return 0;
 }
-#endif /* ONIG_DEBUG */
+#  endif /* ONIG_DEBUG */
 
 static int
@@ -518,6 +562,6 @@
 {
   int r = (*(arg->func))(e->name,
-                         e->name + e->name_len,
-                         e->back_num,
+			 e->name + e->name_len,
+			 e->back_num,
 			 (e->back_num > 1 ? e->back_refs : &(e->back_ref1)),
 			 arg->reg, arg->arg);
@@ -577,17 +621,17 @@
 
 extern int
-onig_number_of_names(regex_t* reg)
+onig_number_of_names(const regex_t* reg)
 {
   NameTable* t = (NameTable* )reg->name_table;
 
   if (IS_NOT_NULL(t))
-    return t->num_entries;
+    return (int )t->num_entries;
   else
     return 0;
 }
 
-#else  /* USE_ST_LIBRARY */
-
-#define INIT_NAMES_ALLOC_NUM    8
+# else  /* USE_ST_LIBRARY */
+
+#  define INIT_NAMES_ALLOC_NUM    8
 
 typedef struct {
@@ -597,5 +641,5 @@
 } NameTable;
 
-#ifdef ONIG_DEBUG
+#  ifdef ONIG_DEBUG
 extern int
 onig_print_names(FILE* fp, regex_t* reg)
@@ -628,5 +672,5 @@
   return 0;
 }
-#endif
+#  endif
 
 static int
@@ -713,5 +757,5 @@
 
 extern int
-onig_number_of_names(regex_t* reg)
+onig_number_of_names(const regex_t* reg)
 {
   NameTable* t = (NameTable* )reg->name_table;
@@ -723,5 +767,5 @@
 }
 
-#endif /* else USE_ST_LIBRARY */
+# endif /* else USE_ST_LIBRARY */
 
 static int
@@ -737,5 +781,5 @@
   e = name_find(reg, name, name_end);
   if (IS_NULL(e)) {
-#ifdef USE_ST_LIBRARY
+# ifdef USE_ST_LIBRARY
     if (IS_NULL(t)) {
       t = onig_st_init_strend_table_with_size(5);
@@ -758,5 +802,5 @@
     e->back_refs  = (int* )NULL;
 
-#else
+# else
 
     if (IS_NULL(t)) {
@@ -801,5 +845,5 @@
     if (IS_NULL(e->name)) return ONIGERR_MEMORY;
     e->name_len = name_end - name;
-#endif
+# endif
   }
 
@@ -864,5 +908,5 @@
 extern int
 onig_name_to_backref_number(regex_t* reg, const UChar* name,
-			    const UChar* name_end, OnigRegion *region)
+			    const UChar* name_end, const OnigRegion *region)
 {
   int i, n, *nums;
@@ -897,5 +941,5 @@
 extern int
 onig_name_to_backref_number(regex_t* reg, const UChar* name,
-			    const UChar* name_end, OnigRegion* region)
+			    const UChar* name_end, const OnigRegion* region)
 {
   return ONIG_NO_SUPPORT_CONFIG;
@@ -910,5 +954,5 @@
 
 extern int
-onig_number_of_names(regex_t* reg)
+onig_number_of_names(const regex_t* reg)
 {
   return 0;
@@ -917,5 +961,5 @@
 
 extern int
-onig_noname_group_capture_is_active(regex_t* reg)
+onig_noname_group_capture_is_active(const regex_t* reg)
 {
   if (ONIG_IS_OPTION_ON(reg->options, ONIG_OPTION_DONT_CAPTURE_GROUP))
@@ -964,4 +1008,6 @@
   env->has_recursion       = 0;
 #endif
+  env->parse_depth         = 0;
+  env->warnings_flag       = 0;
 }
 
@@ -980,4 +1026,5 @@
 	alloc = INIT_SCANENV_MEMNODES_ALLOC_SIZE;
 	p = (Node** )xmalloc(sizeof(Node*) * alloc);
+	CHECK_NULL_RETURN_MEMERR(p);
 	xmemcpy(p, env->mem_nodes_static,
 		sizeof(Node*) * SCANENV_MEMNODES_SIZE);
@@ -986,6 +1033,6 @@
 	alloc = env->mem_alloc * 2;
 	p = (Node** )xrealloc(env->mem_nodes_dynamic, sizeof(Node*) * alloc);
-      }
-      CHECK_NULL_RETURN_MEMERR(p);
+	CHECK_NULL_RETURN_MEMERR(p);
+      }
 
       for (i = env->num_mem + 1; i < alloc; i++)
@@ -1012,12 +1059,4 @@
 
 
-#ifdef USE_PARSE_TREE_NODE_RECYCLE
-typedef struct _FreeNode {
-  struct _FreeNode* next;
-} FreeNode;
-
-static FreeNode* FreeNodeList = (FreeNode* )NULL;
-#endif
-
 extern void
 onig_node_free(Node* node)
@@ -1040,16 +1079,5 @@
       Node* next_node = NCDR(node);
 
-#ifdef USE_PARSE_TREE_NODE_RECYCLE
-      {
-	FreeNode* n = (FreeNode* )node;
-
-        THREAD_ATOMIC_START;
-	n->next = FreeNodeList;
-	FreeNodeList = n;
-        THREAD_ATOMIC_END;
-      }
-#else
       xfree(node);
-#endif
       node = next_node;
       goto start;
@@ -1061,7 +1089,6 @@
       CClassNode* cc = NCCLASS(node);
 
-      if (IS_NCCLASS_SHARE(cc)) return ;
       if (cc->mbuf)
-        bbuf_free(cc->mbuf);
+	bbuf_free(cc->mbuf);
     }
     break;
@@ -1088,34 +1115,6 @@
   }
 
-#ifdef USE_PARSE_TREE_NODE_RECYCLE
-  {
-    FreeNode* n = (FreeNode* )node;
-
-    THREAD_ATOMIC_START;
-    n->next = FreeNodeList;
-    FreeNodeList = n;
-    THREAD_ATOMIC_END;
-  }
-#else
   xfree(node);
-#endif
-}
-
-#ifdef USE_PARSE_TREE_NODE_RECYCLE
-extern int
-onig_free_node_list(void)
-{
-  FreeNode* n;
-
-  /* THREAD_ATOMIC_START; */
-  while (IS_NOT_NULL(FreeNodeList)) {
-    n = FreeNodeList;
-    FreeNodeList = FreeNodeList->next;
-    xfree(n);
-  }
-  /* THREAD_ATOMIC_END; */
-  return 0;
-}
-#endif
+}
 
 static Node*
@@ -1123,15 +1122,4 @@
 {
   Node* node;
-
-#ifdef USE_PARSE_TREE_NODE_RECYCLE
-  THREAD_ATOMIC_START;
-  if (IS_NOT_NULL(FreeNodeList)) {
-    node = (Node* )FreeNodeList;
-    FreeNodeList = FreeNodeList->next;
-    THREAD_ATOMIC_END;
-    return node;
-  }
-  THREAD_ATOMIC_END;
-#endif
 
   node = (Node* )xmalloc(sizeof(Node));
@@ -1139,24 +1127,4 @@
   return node;
 }
-
-#if defined(USE_MULTI_THREAD_SYSTEM) && \
-    defined(USE_SHARED_CCLASS_TABLE) && \
-    defined(USE_PARSE_TREE_NODE_RECYCLE)
-static Node*
-node_new_locked(void)
-{
-  Node* node;
-
-  if (IS_NOT_NULL(FreeNodeList)) {
-    node = (Node* )FreeNodeList;
-    FreeNodeList = FreeNodeList->next;
-    return node;
-  }
-
-  node = (Node* )xmalloc(sizeof(Node));
-  /* xmemset(node, 0, sizeof(Node)); */
-  return node;
-}
-#endif
 
 static void
@@ -1179,73 +1147,4 @@
   return node;
 }
-
-#if defined(USE_MULTI_THREAD_SYSTEM) && \
-    defined(USE_SHARED_CCLASS_TABLE) && \
-    defined(USE_PARSE_TREE_NODE_RECYCLE)
-static Node*
-node_new_cclass_locked(void)
-{
-  Node* node = node_new_locked();
-  CHECK_NULL_RETURN(node);
-
-  SET_NTYPE(node, NT_CCLASS);
-  initialize_cclass(NCCLASS(node));
-  return node;
-}
-#else
-#define node_new_cclass_locked()  node_new_cclass()
-#endif
-
-#ifdef USE_SHARED_CCLASS_TABLE
-static Node*
-node_new_cclass_by_codepoint_range(int not, OnigCodePoint sb_out,
-				   const OnigCodePoint ranges[])
-{
-  int n, i;
-  CClassNode* cc;
-  OnigCodePoint j;
-
-  Node* node = node_new_cclass_locked();
-  CHECK_NULL_RETURN(node);
-
-  cc = NCCLASS(node);
-  if (not != 0) NCCLASS_SET_NOT(cc);
-
-  BITSET_CLEAR(cc->bs);
-  if (sb_out > 0 && IS_NOT_NULL(ranges)) {
-    n = ONIGENC_CODE_RANGE_NUM(ranges);
-    for (i = 0; i < n; i++) {
-      for (j  = ONIGENC_CODE_RANGE_FROM(ranges, i);
-           j <= (OnigCodePoint )ONIGENC_CODE_RANGE_TO(ranges, i); j++) {
-	if (j >= sb_out) goto sb_end;
-
-        BITSET_SET_BIT(cc->bs, j);
-      }
-    }
-  }
-
- sb_end:
-  if (IS_NULL(ranges)) {
-  is_null:
-    cc->mbuf = NULL;
-  }
-  else {
-    BBuf* bbuf;
-
-    n = ONIGENC_CODE_RANGE_NUM(ranges);
-    if (n == 0) goto is_null;
-
-    bbuf = (BBuf* )xmalloc(sizeof(BBuf));
-    CHECK_NULL_RETURN(bbuf);
-    bbuf->alloc = n + 1;
-    bbuf->used  = n + 1;
-    bbuf->p     = (UChar* )((void* )ranges);
-
-    cc->mbuf = bbuf;
-  }
-
-  return node;
-}
-#endif /* USE_SHARED_CCLASS_TABLE */
 
 static Node*
@@ -1535,4 +1434,5 @@
 }
 
+#if 0
 extern void
 onig_node_conv_to_str_node(Node* node, int flag)
@@ -1544,4 +1444,5 @@
   NSTR(node)->end  = NSTR(node)->buf;
 }
+#endif
 
 extern void
@@ -1614,5 +1515,5 @@
 
   if (sn->end > sn->s) {
-    p = onigenc_get_prev_char_head(enc, sn->s, sn->end);
+    p = onigenc_get_prev_char_head(enc, sn->s, sn->end, sn->end);
     if (p && p > sn->s) { /* can be split. */
       n = node_new_str(p, sn->end);
@@ -1629,5 +1530,5 @@
 {
   if (sn->end > sn->s) {
-    return ((enclen(enc, sn->s) < sn->end - sn->s)  ?  1 : 0);
+    return ((enclen(enc, sn->s, sn->end) < sn->end - sn->s)  ?  1 : 0);
   }
   return 0;
@@ -1702,4 +1603,5 @@
     else {
       PUNFETCH;
+      maxlen++;
       break;
     }
@@ -1766,5 +1668,6 @@
 
 static int
-add_code_range_to_buf(BBuf** pbuf, OnigCodePoint from, OnigCodePoint to)
+add_code_range_to_buf0(BBuf** pbuf, ScanEnv* env, OnigCodePoint from, OnigCodePoint to,
+	int checkdup)
 {
   int r, inc_n, pos;
@@ -1807,4 +1710,7 @@
       bound = x;
   }
+  /* data[(low-1)*2+1] << from <= data[low*2]
+   * data[(high-1)*2+1] <= to << data[high*2]
+   */
 
   inc_n = low + 1 - high;
@@ -1813,4 +1719,7 @@
 
   if (inc_n != 1) {
+    if (checkdup && from <= data[low*2+1]
+	&& (data[low*2] <= from || data[low*2+1] <= to))
+      CC_DUP_WARN(env);
     if (from > data[low*2])
       from = data[low*2];
@@ -1845,5 +1754,11 @@
 
 static int
-add_code_range(BBuf** pbuf, ScanEnv* env, OnigCodePoint from, OnigCodePoint to)
+add_code_range_to_buf(BBuf** pbuf, ScanEnv* env, OnigCodePoint from, OnigCodePoint to)
+{
+  return add_code_range_to_buf0(pbuf, env, from, to, 1);
+}
+
+static int
+add_code_range0(BBuf** pbuf, ScanEnv* env, OnigCodePoint from, OnigCodePoint to, int checkdup)
 {
   if (from > to) {
@@ -1854,9 +1769,15 @@
   }
 
-  return add_code_range_to_buf(pbuf, from, to);
+  return add_code_range_to_buf0(pbuf, env, from, to, checkdup);
 }
 
 static int
-not_code_range_buf(OnigEncoding enc, BBuf* bbuf, BBuf** pbuf)
+add_code_range(BBuf** pbuf, ScanEnv* env, OnigCodePoint from, OnigCodePoint to)
+{
+  return add_code_range0(pbuf, env, from, to, 1);
+}
+
+static int
+not_code_range_buf(OnigEncoding enc, BBuf* bbuf, BBuf** pbuf, ScanEnv* env)
 {
   int r, i, n;
@@ -1880,5 +1801,5 @@
     to   = data[i*2+1];
     if (pre <= from - 1) {
-      r = add_code_range_to_buf(pbuf, pre, from - 1);
+      r = add_code_range_to_buf(pbuf, env, pre, from - 1);
       if (r != 0) return r;
     }
@@ -1887,5 +1808,5 @@
   }
   if (to < ONIG_LAST_CODE_POINT) {
-    r = add_code_range_to_buf(pbuf, to + 1, ONIG_LAST_CODE_POINT);
+    r = add_code_range_to_buf(pbuf, env, to + 1, ONIG_LAST_CODE_POINT);
   }
   return r;
@@ -1901,5 +1822,5 @@
 static int
 or_code_range_buf(OnigEncoding enc, BBuf* bbuf1, int not1,
-                  BBuf* bbuf2, int not2, BBuf** pbuf)
+                  BBuf* bbuf2, int not2, BBuf** pbuf, ScanEnv* env)
 {
   int r;
@@ -1927,5 +1848,5 @@
       }
       else {
-	return not_code_range_buf(enc, bbuf2, pbuf);
+	return not_code_range_buf(enc, bbuf2, pbuf, env);
       }
     }
@@ -1943,5 +1864,5 @@
   }
   else if (not1 == 0) { /* 1 OR (not 2) */
-    r = not_code_range_buf(enc, bbuf2, pbuf);
+    r = not_code_range_buf(enc, bbuf2, pbuf, env);
   }
   if (r != 0) return r;
@@ -1950,5 +1871,5 @@
     from = data1[i*2];
     to   = data1[i*2+1];
-    r = add_code_range_to_buf(pbuf, from, to);
+    r = add_code_range_to_buf(pbuf, env, from, to);
     if (r != 0) return r;
   }
@@ -1957,6 +1878,6 @@
 
 static int
-and_code_range1(BBuf** pbuf, OnigCodePoint from1, OnigCodePoint to1,
-	        OnigCodePoint* data, int n)
+and_code_range1(BBuf** pbuf, ScanEnv* env, OnigCodePoint from1, OnigCodePoint to1,
+		OnigCodePoint* data, int n)
 {
   int i, r;
@@ -1975,5 +1896,5 @@
       if (to2 < to1) {
 	if (from1 <= from2 - 1) {
-	  r = add_code_range_to_buf(pbuf, from1, from2-1);
+	  r = add_code_range_to_buf(pbuf, env, from1, from2-1);
 	  if (r != 0) return r;
 	}
@@ -1990,5 +1911,5 @@
   }
   if (from1 <= to1) {
-    r = add_code_range_to_buf(pbuf, from1, to1);
+    r = add_code_range_to_buf(pbuf, env, from1, to1);
     if (r != 0) return r;
   }
@@ -1997,5 +1918,5 @@
 
 static int
-and_code_range_buf(BBuf* bbuf1, int not1, BBuf* bbuf2, int not2, BBuf** pbuf)
+and_code_range_buf(BBuf* bbuf1, int not1, BBuf* bbuf2, int not2, BBuf** pbuf, ScanEnv* env)
 {
   int r;
@@ -2036,5 +1957,5 @@
 	from = MAX(from1, from2);
 	to   = MIN(to1, to2);
-	r = add_code_range_to_buf(pbuf, from, to);
+	r = add_code_range_to_buf(pbuf, env, from, to);
 	if (r != 0) return r;
       }
@@ -2045,5 +1966,5 @@
       from1 = data1[i*2];
       to1   = data1[i*2+1];
-      r = and_code_range1(pbuf, from1, to1, data2, n2);
+      r = and_code_range1(pbuf, env, from1, to1, data2, n2);
       if (r != 0) return r;
     }
@@ -2054,6 +1975,7 @@
 
 static int
-and_cclass(CClassNode* dest, CClassNode* cc, OnigEncoding enc)
-{
+and_cclass(CClassNode* dest, CClassNode* cc, ScanEnv* env)
+{
+  OnigEncoding enc = env->enc;
   int r, not1, not2;
   BBuf *buf1, *buf2, *pbuf = 0;
@@ -2087,11 +2009,11 @@
   if (! ONIGENC_IS_SINGLEBYTE(enc)) {
     if (not1 != 0 && not2 != 0) {
-      r = or_code_range_buf(enc, buf1, 0, buf2, 0, &pbuf);
+      r = or_code_range_buf(enc, buf1, 0, buf2, 0, &pbuf, env);
     }
     else {
-      r = and_code_range_buf(buf1, not1, buf2, not2, &pbuf);
+      r = and_code_range_buf(buf1, not1, buf2, not2, &pbuf, env);
       if (r == 0 && not1 != 0) {
 	BBuf *tbuf = 0;
-	r = not_code_range_buf(enc, pbuf, &tbuf);
+	r = not_code_range_buf(enc, pbuf, &tbuf, env);
 	bbuf_free(pbuf);
 	pbuf = tbuf;
@@ -2111,6 +2033,7 @@
 
 static int
-or_cclass(CClassNode* dest, CClassNode* cc, OnigEncoding enc)
-{
+or_cclass(CClassNode* dest, CClassNode* cc, ScanEnv* env)
+{
+  OnigEncoding enc = env->enc;
   int r, not1, not2;
   BBuf *buf1, *buf2, *pbuf = 0;
@@ -2144,11 +2067,11 @@
   if (! ONIGENC_IS_SINGLEBYTE(enc)) {
     if (not1 != 0 && not2 != 0) {
-      r = and_code_range_buf(buf1, 0, buf2, 0, &pbuf);
+      r = and_code_range_buf(buf1, 0, buf2, 0, &pbuf, env);
     }
     else {
-      r = or_code_range_buf(enc, buf1, not1, buf2, not2, &pbuf);
+      r = or_code_range_buf(enc, buf1, not1, buf2, not2, &pbuf, env);
       if (r == 0 && not1 != 0) {
 	BBuf *tbuf = 0;
-	r = not_code_range_buf(enc, pbuf, &tbuf);
+	r = not_code_range_buf(enc, pbuf, &tbuf, env);
 	bbuf_free(pbuf);
 	pbuf = tbuf;
@@ -2168,6 +2091,8 @@
 }
 
-static int
-conv_backslash_value(int c, ScanEnv* env)
+static void UNKNOWN_ESC_WARN(ScanEnv *env, int c);
+
+static OnigCodePoint
+conv_backslash_value(OnigCodePoint c, ScanEnv* env)
 {
   if (IS_SYNTAX_OP(env->syntax, ONIG_SYN_OP_ESC_CONTROL_CHARS)) {
@@ -2186,4 +2111,6 @@
 
     default:
+      if (('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z'))
+	  UNKNOWN_ESC_WARN(env, c);
       break;
     }
@@ -2193,5 +2120,5 @@
 
 #ifdef USE_NO_INVALID_QUANTIFIER
-#define is_invalid_quantifier_target(node) 0
+# define is_invalid_quantifier_target(node) 0
 #else
 static int
@@ -2265,4 +2192,5 @@
 
 static enum ReduceType const ReduceTypeTable[6][6] = {
+/* '?',     '*',     '+',    '??',    '*?',    '+?'      p / c   */
   {RQ_DEL,  RQ_A,    RQ_A,   RQ_QQ,   RQ_AQ,   RQ_ASIS}, /* '?'  */
   {RQ_DEL,  RQ_DEL,  RQ_DEL, RQ_P_QQ, RQ_P_QQ, RQ_DEL},  /* '*'  */
@@ -2467,4 +2395,5 @@
   if (IS_SYNTAX_OP(env->syntax, ONIG_SYN_OP_ESC_BRACE_INTERVAL)) {
     if (c != MC_ESC(env->syntax)) goto invalid;
+    if (PEND) goto invalid;
     PFETCH(c);
   }
@@ -2490,5 +2419,5 @@
 /* \M-, \C-, \c, or \... */
 static int
-fetch_escaped_value(UChar** src, UChar* end, ScanEnv* env)
+fetch_escaped_value(UChar** src, UChar* end, ScanEnv* env, OnigCodePoint* val)
 {
   int v;
@@ -2509,7 +2438,6 @@
       PFETCH_S(c);
       if (c == MC_ESC(env->syntax)) {
-        v = fetch_escaped_value(&p, end, env);
-        if (v < 0) return v;
-        c = (OnigCodePoint )v;
+	v = fetch_escaped_value(&p, end, env, &c);
+	if (v < 0) return v;
       }
       c = ((c & 0xff) | 0x80);
@@ -2535,13 +2463,12 @@
       PFETCH_S(c);
       if (c == '?') {
-        c = 0177;
+	c = 0177;
       }
       else {
-        if (c == MC_ESC(env->syntax)) {
-          v = fetch_escaped_value(&p, end, env);
-          if (v < 0) return v;
-          c = (OnigCodePoint )v;
-        }
-        c &= 0x9f;
+	if (c == MC_ESC(env->syntax)) {
+	  v = fetch_escaped_value(&p, end, env, &c);
+	  if (v < 0) return v;
+	}
+	c &= 0x9f;
       }
       break;
@@ -2558,5 +2485,6 @@
 
   *src = p;
-  return c;
+  *val = c;
+  return 0;
 }
 
@@ -2579,5 +2507,11 @@
 
 #ifdef USE_NAMED_GROUP
-#ifdef USE_BACKREF_WITH_LEVEL
+# ifdef RUBY
+#  define ONIGENC_IS_CODE_NAME(enc, c)  TRUE
+# else
+#  define ONIGENC_IS_CODE_NAME(enc, c)  ONIGENC_IS_CODE_WORD(enc, c)
+# endif
+
+# ifdef USE_BACKREF_WITH_LEVEL
 /*
    \k<name+n>, \k<name-n>
@@ -2624,5 +2558,5 @@
       pnum_head = p;
     }
-    else if (!ONIGENC_IS_CODE_WORD(enc, c)) {
+    else if (!ONIGENC_IS_CODE_NAME(enc, c)) {
       r = ONIGERR_INVALID_CHAR_IN_GROUP_NAME;
     }
@@ -2639,12 +2573,12 @@
     if (is_num != 0) {
       if (ONIGENC_IS_CODE_DIGIT(enc, c)) {
-        is_num = 1;
+	is_num = 1;
       }
       else {
-        r = ONIGERR_INVALID_GROUP_NAME;
-        is_num = 0;
-      }
-    }
-    else if (!ONIGENC_IS_CODE_WORD(enc, c)) {
+	r = ONIGERR_INVALID_GROUP_NAME;
+	is_num = 0;
+      }
+    }
+    else if (!ONIGENC_IS_CODE_NAME(enc, c)) {
       r = ONIGERR_INVALID_CHAR_IN_GROUP_NAME;
     }
@@ -2656,4 +2590,8 @@
       int flag = (c == '-' ? -1 : 1);
 
+      if (PEND) {
+	r = ONIGERR_INVALID_CHAR_IN_GROUP_NAME;
+	goto end;
+      }
       PFETCH(c);
       if (! ONIGENC_IS_CODE_DIGIT(enc, c)) goto err;
@@ -2664,7 +2602,9 @@
       exist_level = 1;
 
-      PFETCH(c);
-      if (c == end_code)
-	goto end;
+      if (!PEND) {
+	PFETCH(c);
+	if (c == end_code)
+	  goto end;
+      }
     }
 
@@ -2693,5 +2633,5 @@
   }
 }
-#endif /* USE_BACKREF_WITH_LEVEL */
+# endif /* USE_BACKREF_WITH_LEVEL */
 
 /*
@@ -2730,16 +2670,5 @@
     if (ONIGENC_IS_CODE_DIGIT(enc, c)) {
       if (ref == 1)
-        is_num = 1;
-      else {
-        r = ONIGERR_INVALID_GROUP_NAME;
-        is_num = 0;
-      }
-    }
-    else if (c == '-') {
-      if (ref == 1) {
-        is_num = 2;
-        sign = -1;
-        pnum_head = p;
-      }
+	is_num = 1;
       else {
 	r = ONIGERR_INVALID_GROUP_NAME;
@@ -2747,5 +2676,16 @@
       }
     }
-    else if (!ONIGENC_IS_CODE_WORD(enc, c)) {
+    else if (c == '-') {
+      if (ref == 1) {
+	is_num = 2;
+	sign = -1;
+	pnum_head = p;
+      }
+      else {
+	r = ONIGERR_INVALID_GROUP_NAME;
+	is_num = 0;
+      }
+    }
+    else if (!ONIGENC_IS_CODE_NAME(enc, c)) {
       r = ONIGERR_INVALID_CHAR_IN_GROUP_NAME;
     }
@@ -2757,24 +2697,28 @@
       PFETCH_S(c);
       if (c == end_code || c == ')') {
-	if (is_num == 2) r = ONIGERR_INVALID_GROUP_NAME;
+	if (is_num == 2) {
+	  r = ONIGERR_INVALID_GROUP_NAME;
+	  goto teardown;
+	}
 	break;
       }
 
       if (is_num != 0) {
-        if (ONIGENC_IS_CODE_DIGIT(enc, c)) {
-          is_num = 1;
-        }
-        else {
-          if (!ONIGENC_IS_CODE_WORD(enc, c))
-            r = ONIGERR_INVALID_CHAR_IN_GROUP_NAME;
-          else
-            r = ONIGERR_INVALID_GROUP_NAME;
-          is_num = 0;
-        }
+	if (ONIGENC_IS_CODE_DIGIT(enc, c)) {
+	  is_num = 1;
+	}
+	else {
+	  if (!ONIGENC_IS_CODE_WORD(enc, c))
+	    r = ONIGERR_INVALID_CHAR_IN_GROUP_NAME;
+	  else
+	    r = ONIGERR_INVALID_GROUP_NAME;
+	  goto teardown;
+	}
       }
       else {
-        if (!ONIGENC_IS_CODE_WORD(enc, c)) {
-          r = ONIGERR_INVALID_CHAR_IN_GROUP_NAME;
-        }
+	if (!ONIGENC_IS_CODE_NAME(enc, c)) {
+	  r = ONIGERR_INVALID_CHAR_IN_GROUP_NAME;
+	  goto teardown;
+	}
       }
     }
@@ -2783,4 +2727,5 @@
       r = ONIGERR_INVALID_GROUP_NAME;
       name_end = end;
+      goto err;
     }
 
@@ -2789,6 +2734,6 @@
       if (*rback_num < 0) return ONIGERR_TOO_BIG_NUMBER;
       else if (*rback_num == 0) {
-        r = ONIGERR_INVALID_GROUP_NAME;
-        goto err;
+	r = ONIGERR_INVALID_GROUP_NAME;
+	goto err;
       }
 
@@ -2801,9 +2746,10 @@
   }
   else {
+teardown:
     while (!PEND) {
       name_end = p;
       PFETCH_S(c);
       if (c == end_code || c == ')')
-        break;
+	break;
     }
     if (PEND)
@@ -2894,6 +2840,27 @@
 #endif /* USE_NAMED_GROUP */
 
+
 static void
-CC_ESC_WARN(ScanEnv* env, UChar *c)
+onig_syntax_warn(ScanEnv *env, const char *fmt, ...)
+{
+    va_list args;
+    UChar buf[WARN_BUFSIZE];
+    va_start(args, fmt);
+    onig_vsnprintf_with_pattern(buf, WARN_BUFSIZE, env->enc,
+		env->pattern, env->pattern_end,
+		(const UChar *)fmt, args);
+    va_end(args);
+#ifdef RUBY
+    if (env->sourcefile == NULL)
+      rb_warn("%s", (char *)buf);
+    else
+      rb_compile_warn(env->sourcefile, env->sourceline, "%s", (char *)buf);
+#else
+    (*onig_warn)((char* )buf);
+#endif
+}
+
+static void
+CC_ESC_WARN(ScanEnv *env, UChar *c)
 {
   if (onig_warn == onig_null_warn) return ;
@@ -2901,9 +2868,5 @@
   if (IS_SYNTAX_BV(env->syntax, ONIG_SYN_WARN_CC_OP_NOT_ESCAPED) &&
       IS_SYNTAX_BV(env->syntax, ONIG_SYN_BACKSLASH_ESCAPE_IN_CC)) {
-    UChar buf[WARN_BUFSIZE];
-    onig_snprintf_with_pattern(buf, WARN_BUFSIZE, env->enc,
-		env->pattern, env->pattern_end,
-                (UChar* )"character class has '%s' without escape", c);
-    (*onig_warn)((char* )buf);
+    onig_syntax_warn(env, "character class has '%s' without escape", c);
   }
 }
@@ -2915,10 +2878,29 @@
 
   if (IS_SYNTAX_BV(env->syntax, ONIG_SYN_WARN_CC_OP_NOT_ESCAPED)) {
-    UChar buf[WARN_BUFSIZE];
-    onig_snprintf_with_pattern(buf, WARN_BUFSIZE, env->enc,
-		env->pattern, env->pattern_end,
-		(UChar* )"regular expression has '%s' without escape", c);
-    (*onig_warn)((char* )buf);
-  }
+    onig_syntax_warn(env, "regular expression has '%s' without escape", c);
+  }
+}
+
+#ifndef RTEST
+# define RTEST(v)  1
+#endif
+
+static void
+CC_DUP_WARN(ScanEnv *env)
+{
+  if (onig_warn == onig_null_warn || !RTEST(ruby_verbose)) return ;
+
+  if (IS_SYNTAX_BV(env->syntax, ONIG_SYN_WARN_CC_DUP) &&
+      !(env->warnings_flag & ONIG_SYN_WARN_CC_DUP)) {
+    env->warnings_flag |= ONIG_SYN_WARN_CC_DUP;
+    onig_syntax_warn(env, "character class has duplicated range");
+  }
+}
+
+static void
+UNKNOWN_ESC_WARN(ScanEnv *env, int c)
+{
+  if (onig_warn == onig_null_warn || !RTEST(ruby_verbose)) return ;
+  onig_syntax_warn(env, "Unknown escape \\%c is ignored", c);
 }
 
@@ -2934,10 +2916,10 @@
   while (p < to) {
     x = ONIGENC_MBC_TO_CODE(enc, p, to);
-    q = p + enclen(enc, p);
+    q = p + enclen(enc, p, to);
     if (x == s[0]) {
       for (i = 1; i < n && q < to; i++) {
 	x = ONIGENC_MBC_TO_CODE(enc, q, to);
 	if (x != s[i]) break;
-	q += enclen(enc, q);
+	q += enclen(enc, q, to);
       }
       if (i >= n) {
@@ -2954,5 +2936,5 @@
 static int
 str_exist_check_with_esc(OnigCodePoint s[], int n, UChar* from, UChar* to,
-		 OnigCodePoint bad, OnigEncoding enc, OnigSyntaxType* syn)
+		 OnigCodePoint bad, OnigEncoding enc, const OnigSyntaxType* syn)
 {
   int i, in_esc;
@@ -2965,17 +2947,17 @@
     if (in_esc) {
       in_esc = 0;
-      p += enclen(enc, p);
+      p += enclen(enc, p, to);
     }
     else {
       x = ONIGENC_MBC_TO_CODE(enc, p, to);
-      q = p + enclen(enc, p);
+      q = p + enclen(enc, p, to);
       if (x == s[0]) {
 	for (i = 1; i < n && q < to; i++) {
 	  x = ONIGENC_MBC_TO_CODE(enc, q, to);
 	  if (x != s[i]) break;
-	  q += enclen(enc, q);
+	  q += enclen(enc, q, to);
 	}
 	if (i >= n) return 1;
-	p += enclen(enc, p);
+	p += enclen(enc, p, to);
       }
       else {
@@ -2995,5 +2977,5 @@
   int num;
   OnigCodePoint c, c2;
-  OnigSyntaxType* syn = env->syntax;
+  const OnigSyntaxType* syn = env->syntax;
   OnigEncoding enc = env->enc;
   UChar* prev;
@@ -3073,4 +3055,6 @@
     case 'p':
     case 'P':
+      if (PEND) break;
+
       c2 = PPEEK;
       if (c2 == '{' &&
@@ -3080,5 +3064,5 @@
 	tok->u.prop.not = (c == 'P' ? 1 : 0);
 
-	if (IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_P_BRACE_CIRCUMFLEX_NOT)) {
+	if (!PEND && IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_P_BRACE_CIRCUMFLEX_NOT)) {
 	  PFETCH(c2);
 	  if (c2 == '^') {
@@ -3089,4 +3073,7 @@
 	}
       }
+      else {
+	onig_syntax_warn(env, "invalid Unicode Property \\%c", c);
+      }
       break;
 
@@ -3100,10 +3087,10 @@
 	if (num < 0) return ONIGERR_TOO_BIG_WIDE_CHAR_VALUE;
 	if (!PEND) {
-          c2 = PPEEK;
-          if (ONIGENC_IS_CODE_XDIGIT(enc, c2))
-            return ONIGERR_TOO_LONG_WIDE_CHAR_VALUE;
-        }
-
-	if (p > prev + enclen(enc, prev) && !PEND && (PPEEK_IS('}'))) {
+	  c2 = PPEEK;
+	  if (ONIGENC_IS_CODE_XDIGIT(enc, c2))
+	    return ONIGERR_TOO_LONG_WIDE_CHAR_VALUE;
+	}
+
+	if (p > prev + enclen(enc, prev, end) && !PEND && (PPEEK_IS('}'))) {
 	  PINC;
 	  tok->type   = TK_CODE_POINT;
@@ -3142,4 +3129,31 @@
 	tok->base   = 16;
 	tok->u.code = (OnigCodePoint )num;
+      }
+      break;
+
+    case 'o':
+      if (PEND) break;
+
+      prev = p;
+      if (PPEEK_IS('{') && IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_O_BRACE_OCTAL)) {
+	PINC;
+	num = scan_unsigned_octal_number(&p, end, 11, enc);
+	if (num < 0) return ONIGERR_TOO_BIG_WIDE_CHAR_VALUE;
+	if (!PEND) {
+	  c2 = PPEEK;
+	  if (ONIGENC_IS_CODE_DIGIT(enc, c2) && c2 < '8')
+	    return ONIGERR_TOO_LONG_WIDE_CHAR_VALUE;
+	}
+
+	if (p > prev + enclen(enc, prev, end) && !PEND && (PPEEK_IS('}'))) {
+	  PINC;
+	  tok->type   = TK_CODE_POINT;
+	  tok->base   = 8;
+	  tok->u.code = (OnigCodePoint )num;
+	}
+	else {
+	  /* can't read nothing or invalid format */
+	  p = prev;
+	}
       }
       break;
@@ -3163,8 +3177,8 @@
     default:
       PUNFETCH;
-      num = fetch_escaped_value(&p, end, env);
+      num = fetch_escaped_value(&p, end, env, &c2);
       if (num < 0) return num;
-      if (tok->u.c != num) {
-	tok->u.code = (OnigCodePoint )num;
+      if ((OnigCodePoint )tok->u.c != c2) {
+	tok->u.code = (OnigCodePoint )c2;
 	tok->type   = TK_CODE_POINT;
       }
@@ -3215,5 +3229,5 @@
 {
   int r, num;
-  OnigSyntaxType* syn = env->syntax;
+  const OnigSyntaxType* syn = env->syntax;
   UChar* prev;
   UChar* p = *src;
@@ -3224,5 +3238,5 @@
   prev = p;
 
-#ifdef USE_BACKREF_WITH_LEVEL
+# ifdef USE_BACKREF_WITH_LEVEL
   name_end = NULL_UCHARP; /* no need. escape gcc warning. */
   r = fetch_name_with_level(c, &p, end, &name_end,
@@ -3230,7 +3244,7 @@
   if (r == 1) tok->u.backref.exist_level = 1;
   else        tok->u.backref.exist_level = 0;
-#else
+# else
   r = fetch_name(&p, end, &name_end, env, &back_num, 1);
-#endif
+# endif
   if (r < 0) return r;
 
@@ -3270,5 +3284,5 @@
     tok->type = TK_BACKREF;
     tok->u.backref.by_name = 1;
-    if (num == 1) {
+    if (num == 1 || IS_SYNTAX_BV(syn, ONIG_SYN_USE_LEFT_MOST_NAMED_GROUP)) {
       tok->u.backref.num  = 1;
       tok->u.backref.ref1 = backs[0];
@@ -3290,5 +3304,5 @@
   OnigCodePoint c;
   OnigEncoding enc = env->enc;
-  OnigSyntaxType* syn = env->syntax;
+  const OnigSyntaxType* syn = env->syntax;
   UChar* prev;
   UChar* p = *src;
@@ -3523,9 +3537,9 @@
 	if (num < 0) return ONIGERR_TOO_BIG_WIDE_CHAR_VALUE;
 	if (!PEND) {
-          if (ONIGENC_IS_CODE_XDIGIT(enc, PPEEK))
-            return ONIGERR_TOO_LONG_WIDE_CHAR_VALUE;
-        }
-
-	if ((p > prev + enclen(enc, prev)) && !PEND && PPEEK_IS('}')) {
+	  if (ONIGENC_IS_CODE_XDIGIT(enc, PPEEK))
+	    return ONIGERR_TOO_LONG_WIDE_CHAR_VALUE;
+	}
+
+	if ((p > prev + enclen(enc, prev, end)) && !PEND && PPEEK_IS('}')) {
 	  PINC;
 	  tok->type   = TK_CODE_POINT;
@@ -3566,4 +3580,30 @@
       break;
 
+    case 'o':
+      if (PEND) break;
+
+      prev = p;
+      if (PPEEK_IS('{') && IS_SYNTAX_OP(syn, ONIG_SYN_OP_ESC_O_BRACE_OCTAL)) {
+	PINC;
+	num = scan_unsigned_octal_number(&p, end, 11, enc);
+	if (num < 0) return ONIGERR_TOO_BIG_WIDE_CHAR_VALUE;
+	if (!PEND) {
+	  OnigCodePoint c = PPEEK;
+	  if (ONIGENC_IS_CODE_DIGIT(enc, c) && c < '8')
+	    return ONIGERR_TOO_LONG_WIDE_CHAR_VALUE;
+	}
+
+	if ((p > prev + enclen(enc, prev, end)) && !PEND && PPEEK_IS('}')) {
+	  PINC;
+	  tok->type   = TK_CODE_POINT;
+	  tok->u.code = (OnigCodePoint )num;
+	}
+	else {
+	  /* can't read nothing or invalid format */
+	  p = prev;
+	}
+      }
+      break;
+
     case '1': case '2': case '3': case '4':
     case '5': case '6': case '7': case '8': case '9':
@@ -3572,5 +3612,5 @@
       num = onig_scan_unsigned_number(&p, end, enc);
       if (num < 0 || num > ONIG_MAX_BACKREF_NUM) {
-        goto skip_backref;
+	goto skip_backref;
       }
 
@@ -3605,5 +3645,5 @@
 	prev = p;
 	num = scan_unsigned_octal_number(&p, end, (c == '0' ? 2:3), enc);
-	if (num < 0) return ONIGERR_TOO_BIG_NUMBER;
+	if (num < 0 || 0xff < num) return ONIGERR_TOO_BIG_NUMBER;
 	if (p == prev) {  /* can't read nothing. */
 	  num = 0; /* but, it's not error */
@@ -3620,5 +3660,5 @@
 #ifdef USE_NAMED_GROUP
     case 'k':
-      if (IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_K_NAMED_BACKREF)) {
+      if (!PEND && IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_K_NAMED_BACKREF)) {
 	PFETCH(c);
 	if (c == '<' || c == '\'') {
@@ -3626,6 +3666,8 @@
 	  if (r < 0) return r;
 	}
-	else
+	else {
 	  PUNFETCH;
+	  onig_syntax_warn(env, "invalid back reference");
+	}
       }
       break;
@@ -3634,6 +3676,6 @@
 #if defined(USE_SUBEXP_CALL) || defined(USE_NAMED_GROUP)
     case 'g':
-#ifdef USE_NAMED_GROUP
-      if (IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_G_BRACE_BACKREF)) {
+# ifdef USE_NAMED_GROUP
+      if (!PEND && IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_G_BRACE_BACKREF)) {
 	PFETCH(c);
 	if (c == '{') {
@@ -3644,7 +3686,7 @@
 	  PUNFETCH;
       }
-#endif
-#ifdef USE_SUBEXP_CALL
-      if (IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_G_SUBEXP_CALL)) {
+# endif
+# ifdef USE_SUBEXP_CALL
+      if (!PEND && IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_G_SUBEXP_CALL)) {
 	PFETCH(c);
 	if (c == '<' || c == '\'') {
@@ -3678,8 +3720,10 @@
 	  tok->u.call.rel      = rel;
 	}
-	else
+	else {
+	  onig_syntax_warn(env, "invalid subexp call");
 	  PUNFETCH;
-      }
-#endif
+	}
+      }
+# endif
       break;
 #endif
@@ -3699,5 +3743,5 @@
 	tok->u.prop.not = (c == 'P' ? 1 : 0);
 
-	if (IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_P_BRACE_CIRCUMFLEX_NOT)) {
+	if (!PEND && IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_ESC_P_BRACE_CIRCUMFLEX_NOT)) {
 	  PFETCH(c);
 	  if (c == '^') {
@@ -3708,4 +3752,7 @@
 	}
       }
+      else {
+	onig_syntax_warn(env, "invalid Unicode Property \\%c", c);
+      }
       break;
 
@@ -3729,14 +3776,18 @@
 
     default:
-      PUNFETCH;
-      num = fetch_escaped_value(&p, end, env);
-      if (num < 0) return num;
-      /* set_raw: */
-      if (tok->u.c != num) {
-	tok->type = TK_CODE_POINT;
-	tok->u.code = (OnigCodePoint )num;
-      }
-      else { /* string */
-	p = tok->backp + enclen(enc, tok->backp);
+      {
+	OnigCodePoint c2;
+
+	PUNFETCH;
+	num = fetch_escaped_value(&p, end, env, &c2);
+	if (num < 0) return num;
+	/* set_raw: */
+	if ((OnigCodePoint )tok->u.c != c2) {
+	  tok->type = TK_CODE_POINT;
+	  tok->u.code = (OnigCodePoint )c2;
+	}
+	else { /* string */
+	  p = tok->backp + enclen(enc, tok->backp, end);
+	}
       }
       break;
@@ -3828,20 +3879,20 @@
     case '(':
       if (PPEEK_IS('?') &&
-          IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_QMARK_GROUP_EFFECT)) {
-        PINC;
-        if (PPEEK_IS('#')) {
-          PFETCH(c);
-          while (1) {
-            if (PEND) return ONIGERR_END_PATTERN_IN_GROUP;
-            PFETCH(c);
-            if (c == MC_ESC(syn)) {
-              if (!PEND) PFETCH(c);
-            }
-            else {
-              if (c == ')') break;
-            }
-          }
-          goto start;
-        }
+	  IS_SYNTAX_OP2(syn, ONIG_SYN_OP2_QMARK_GROUP_EFFECT)) {
+	PINC;
+	if (PPEEK_IS('#')) {
+	  PFETCH(c);
+	  while (1) {
+	    if (PEND) return ONIGERR_END_PATTERN_IN_GROUP;
+	    PFETCH(c);
+	    if (c == MC_ESC(syn)) {
+	      if (!PEND) PFETCH(c);
+	    }
+	    else {
+	      if (c == ')') break;
+	    }
+	  }
+	  goto start;
+	}
 #ifdef USE_PERL_SUBEXP_CALL
 	/* (?&name), (?n), (?R), (?0), (?+n), (?-n) */
@@ -3914,4 +3965,5 @@
 
 	  PINC;     /* skip 'P' */
+	  if (PEND) return ONIGERR_UNDEFINED_GROUP_OPTION;
 	  PFETCH(c);
 	  if (c == '=') {       /* (?P=name): backref */
@@ -3932,8 +3984,7 @@
 	    break;
 	  }
-	  PUNFETCH;
 	}
 #endif /* USE_CAPITAL_P_NAMED_GROUP */
-        PUNFETCH;
+	PUNFETCH;
       }
 
@@ -4003,5 +4054,5 @@
 static int
 add_ctype_to_cc_by_range(CClassNode* cc, int ctype ARG_UNUSED, int not,
-			 OnigEncoding enc ARG_UNUSED,
+                         ScanEnv* env,
                          OnigCodePoint sb_out, const OnigCodePoint mbr[])
 {
@@ -4013,9 +4064,9 @@
   if (not == 0) {
     for (i = 0; i < n; i++) {
-      for (j  = ONIGENC_CODE_RANGE_FROM(mbr, i);
-           j <= ONIGENC_CODE_RANGE_TO(mbr, i); j++) {
+      for (j = ONIGENC_CODE_RANGE_FROM(mbr, i);
+	  j <= ONIGENC_CODE_RANGE_TO(mbr, i); j++) {
 	if (j >= sb_out) {
 	  if (j > ONIGENC_CODE_RANGE_FROM(mbr, i)) {
-	    r = add_code_range_to_buf(&(cc->mbuf), j,
+	    r = add_code_range_to_buf(&(cc->mbuf), env, j,
 				      ONIGENC_CODE_RANGE_TO(mbr, i));
 	    if (r != 0) return r;
@@ -4025,5 +4076,5 @@
 	  goto sb_end;
 	}
-        BITSET_SET_BIT(cc->bs, j);
+	BITSET_SET_BIT_CHKDUP(cc->bs, j);
       }
     }
@@ -4031,5 +4082,5 @@
   sb_end:
     for ( ; i < n; i++) {
-      r = add_code_range_to_buf(&(cc->mbuf),
+      r = add_code_range_to_buf(&(cc->mbuf), env,
                                 ONIGENC_CODE_RANGE_FROM(mbr, i),
                                 ONIGENC_CODE_RANGE_TO(mbr, i));
@@ -4046,10 +4097,10 @@
 	  goto sb_end2;
 	}
-	BITSET_SET_BIT(cc->bs, j);
+	BITSET_SET_BIT_CHKDUP(cc->bs, j);
       }
       prev = ONIGENC_CODE_RANGE_TO(mbr, i) + 1;
     }
     for (j = prev; j < sb_out; j++) {
-      BITSET_SET_BIT(cc->bs, j);
+      BITSET_SET_BIT_CHKDUP(cc->bs, j);
     }
 
@@ -4059,5 +4110,5 @@
     for (i = 0; i < n; i++) {
       if (prev < ONIGENC_CODE_RANGE_FROM(mbr, i)) {
-	r = add_code_range_to_buf(&(cc->mbuf), prev,
+	r = add_code_range_to_buf(&(cc->mbuf), env, prev,
                                   ONIGENC_CODE_RANGE_FROM(mbr, i) - 1);
 	if (r != 0) return r;
@@ -4066,5 +4117,5 @@
     }
     if (prev < 0x7fffffff) {
-      r = add_code_range_to_buf(&(cc->mbuf), prev, 0x7fffffff);
+      r = add_code_range_to_buf(&(cc->mbuf), env, prev, 0x7fffffff);
       if (r != 0) return r;
     }
@@ -4088,9 +4139,9 @@
       CClassNode ccwork;
       initialize_cclass(&ccwork);
-      r = add_ctype_to_cc_by_range(&ccwork, ctype, not, env->enc, sb_out,
+      r = add_ctype_to_cc_by_range(&ccwork, ctype, not, env, sb_out,
 				   ranges);
       if (r == 0) {
 	if (not) {
-	  r = add_code_range_to_buf(&(ccwork.mbuf), 0x80, ONIG_LAST_CODE_POINT);
+	  r = add_code_range_to_buf0(&(ccwork.mbuf), env, 0x80, ONIG_LAST_CODE_POINT, FALSE);
 	}
 	else {
@@ -4098,14 +4149,17 @@
 	  initialize_cclass(&ccascii);
 	  if (ONIGENC_MBC_MINLEN(env->enc) > 1) {
-	    add_code_range(&(ccascii.mbuf), env, 0x00, 0x7F);
+	    r = add_code_range(&(ccascii.mbuf), env, 0x00, 0x7F);
 	  }
 	  else {
-	    bitset_set_range(ccascii.bs, 0x00, 0x7F);
+	    bitset_set_range(env, ccascii.bs, 0x00, 0x7F);
+	    r = 0;
 	  }
-	  r = and_cclass(&ccwork, &ccascii, enc);
+	  if (r == 0) {
+	    r = and_cclass(&ccwork, &ccascii, env);
+	  }
 	  if (IS_NOT_NULL(ccascii.mbuf)) bbuf_free(ccascii.mbuf);
 	}
 	if (r == 0) {
-	  r = or_cclass(cc, &ccwork, enc);
+	  r = or_cclass(cc, &ccwork, env);
 	}
 	if (IS_NOT_NULL(ccwork.mbuf)) bbuf_free(ccwork.mbuf);
@@ -4113,5 +4167,5 @@
     }
     else {
-      r = add_ctype_to_cc_by_range(cc, ctype, not, env->enc, sb_out, ranges);
+      r = add_ctype_to_cc_by_range(cc, ctype, not, env, sb_out, ranges);
     }
     return r;
@@ -4138,5 +4192,5 @@
       for (c = 0; c < SINGLE_BYTE_SIZE; c++) {
 	if (! ONIGENC_IS_CODE_CTYPE(enc, (OnigCodePoint )c, ctype))
-	  BITSET_SET_BIT(cc->bs, c);
+	  BITSET_SET_BIT_CHKDUP(cc->bs, c);
       }
       ADD_ALL_MULTI_BYTE_RANGE(enc, cc->mbuf);
@@ -4145,5 +4199,5 @@
       for (c = 0; c < SINGLE_BYTE_SIZE; c++) {
 	if (ONIGENC_IS_CODE_CTYPE(enc, (OnigCodePoint )c, ctype))
-	  BITSET_SET_BIT(cc->bs, c);
+	  BITSET_SET_BIT_CHKDUP(cc->bs, c);
       }
     }
@@ -4156,16 +4210,16 @@
 	if (! ONIGENC_IS_CODE_CTYPE(enc, (OnigCodePoint )c, ctype)
 	    || c >= maxcode)
-	  BITSET_SET_BIT(cc->bs, c);
+	  BITSET_SET_BIT_CHKDUP(cc->bs, c);
       }
       if (ascii_range)
-        ADD_ALL_MULTI_BYTE_RANGE(enc, cc->mbuf);
+	ADD_ALL_MULTI_BYTE_RANGE(enc, cc->mbuf);
     }
     else {
       for (c = 0; c < maxcode; c++) {
 	if (ONIGENC_IS_CODE_CTYPE(enc, (OnigCodePoint )c, ctype))
-	  BITSET_SET_BIT(cc->bs, c);
+	  BITSET_SET_BIT_CHKDUP(cc->bs, c);
       }
       if (! ascii_range)
-        ADD_ALL_MULTI_BYTE_RANGE(enc, cc->mbuf);
+	ADD_ALL_MULTI_BYTE_RANGE(enc, cc->mbuf);
     }
     break;
@@ -4174,17 +4228,17 @@
     if (not == 0) {
       for (c = 0; c < maxcode; c++) {
-	if (ONIGENC_IS_CODE_WORD(enc, c)) BITSET_SET_BIT(cc->bs, c);
+	if (ONIGENC_IS_CODE_WORD(enc, c)) BITSET_SET_BIT_CHKDUP(cc->bs, c);
       }
       if (! ascii_range)
-        ADD_ALL_MULTI_BYTE_RANGE(enc, cc->mbuf);
+	ADD_ALL_MULTI_BYTE_RANGE(enc, cc->mbuf);
     }
     else {
       for (c = 0; c < SINGLE_BYTE_SIZE; c++) {
-        if ((ONIGENC_CODE_TO_MBCLEN(enc, c) > 0) /* check invalid code point */
+	if ((ONIGENC_CODE_TO_MBCLEN(enc, c) > 0) /* check invalid code point */
 	    && (! ONIGENC_IS_CODE_WORD(enc, c) || c >= maxcode))
-	  BITSET_SET_BIT(cc->bs, c);
+	  BITSET_SET_BIT_CHKDUP(cc->bs, c);
       }
       if (ascii_range)
-        ADD_ALL_MULTI_BYTE_RANGE(enc, cc->mbuf);
+	ADD_ALL_MULTI_BYTE_RANGE(enc, cc->mbuf);
     }
     break;
@@ -4245,5 +4299,5 @@
       p = (UChar* )onigenc_step(enc, p, end, pb->len);
       if (onigenc_with_ascii_strncmp(enc, p, end, (UChar* )":]", 2) != 0)
-        return ONIGERR_INVALID_POSIX_BRACKET_TYPE;
+	return ONIGERR_INVALID_POSIX_BRACKET_TYPE;
 
       r = add_ctype_to_cc(cc, pb->ctype, not, ascii_range, env);
@@ -4276,5 +4330,5 @@
       PFETCH_S(c);
       if (c == ']')
-        return ONIGERR_INVALID_POSIX_BRACKET_TYPE;
+	return ONIGERR_INVALID_POSIX_BRACKET_TYPE;
     }
   }
@@ -4356,5 +4410,5 @@
 static int
 next_state_class(CClassNode* cc, CClassNode* asc_cc,
-	         OnigCodePoint* vs, enum CCVALTYPE* type,
+		 OnigCodePoint* vs, enum CCVALTYPE* type,
 		 enum CCSTATE* state, ScanEnv* env)
 {
@@ -4366,5 +4420,5 @@
   if (*state == CCS_VALUE && *type != CCV_CLASS) {
     if (*type == CCV_SB) {
-      BITSET_SET_BIT(cc->bs, (int )(*vs));
+      BITSET_SET_BIT_CHKDUP(cc->bs, (int )(*vs));
       if (IS_NOT_NULL(asc_cc))
 	BITSET_SET_BIT(asc_cc->bs, (int )(*vs));
@@ -4374,5 +4428,5 @@
       if (r < 0) return r;
       if (IS_NOT_NULL(asc_cc)) {
-	r = add_code_range(&(asc_cc->mbuf), env, *vs, *vs);
+	r = add_code_range0(&(asc_cc->mbuf), env, *vs, *vs, 0);
 	if (r < 0) return r;
       }
@@ -4387,6 +4441,6 @@
 static int
 next_state_val(CClassNode* cc, CClassNode* asc_cc,
-	       OnigCodePoint *vs, OnigCodePoint v,
-	       int* vs_israw, int v_israw,
+	       OnigCodePoint *from, OnigCodePoint to,
+	       int* from_israw, int to_israw,
 	       enum CCVALTYPE intype, enum CCVALTYPE* type,
 	       enum CCSTATE* state, ScanEnv* env)
@@ -4397,13 +4451,13 @@
   case CCS_VALUE:
     if (*type == CCV_SB) {
-      BITSET_SET_BIT(cc->bs, (int )(*vs));
+      BITSET_SET_BIT_CHKDUP(cc->bs, (int )(*from));
       if (IS_NOT_NULL(asc_cc))
-	BITSET_SET_BIT(asc_cc->bs, (int )(*vs));
+	BITSET_SET_BIT(asc_cc->bs, (int )(*from));
     }
     else if (*type == CCV_CODE_POINT) {
-      r = add_code_range(&(cc->mbuf), env, *vs, *vs);
+      r = add_code_range(&(cc->mbuf), env, *from, *from);
       if (r < 0) return r;
       if (IS_NOT_NULL(asc_cc)) {
-	r = add_code_range(&(asc_cc->mbuf), env, *vs, *vs);
+	r = add_code_range0(&(asc_cc->mbuf), env, *from, *from, 0);
 	if (r < 0) return r;
       }
@@ -4414,8 +4468,8 @@
     if (intype == *type) {
       if (intype == CCV_SB) {
-        if (*vs > 0xff || v > 0xff)
-          return ONIGERR_INVALID_CODE_POINT_VALUE;
-
-	if (*vs > v) {
+	if (*from > 0xff || to > 0xff)
+	  return ONIGERR_INVALID_CODE_POINT_VALUE;
+
+	if (*from > to) {
 	  if (IS_SYNTAX_BV(env->syntax, ONIG_SYN_ALLOW_EMPTY_RANGE_IN_CC))
 	    goto ccs_range_end;
@@ -4423,13 +4477,13 @@
 	    return ONIGERR_EMPTY_RANGE_IN_CHAR_CLASS;
 	}
-	bitset_set_range(cc->bs, (int )*vs, (int )v);
+	bitset_set_range(env, cc->bs, (int )*from, (int )to);
 	if (IS_NOT_NULL(asc_cc))
-	  bitset_set_range(asc_cc->bs, (int )*vs, (int )v);
+	  bitset_set_range(env, asc_cc->bs, (int )*from, (int )to);
       }
       else {
-	r = add_code_range(&(cc->mbuf), env, *vs, v);
+	r = add_code_range(&(cc->mbuf), env, *from, to);
 	if (r < 0) return r;
 	if (IS_NOT_NULL(asc_cc)) {
-	  r = add_code_range(&(asc_cc->mbuf), env, *vs, v);
+	  r = add_code_range0(&(asc_cc->mbuf), env, *from, to, 0);
 	  if (r < 0) return r;
 	}
@@ -4437,26 +4491,18 @@
     }
     else {
-#if 0
-      if (intype == CCV_CODE_POINT && *type == CCV_SB) {
-#endif
-	if (*vs > v) {
-	  if (IS_SYNTAX_BV(env->syntax, ONIG_SYN_ALLOW_EMPTY_RANGE_IN_CC))
-	    goto ccs_range_end;
-	  else
-	    return ONIGERR_EMPTY_RANGE_IN_CHAR_CLASS;
-	}
-	bitset_set_range(cc->bs, (int )*vs, (int )(v < 0xff ? v : 0xff));
-	r = add_code_range(&(cc->mbuf), env, (OnigCodePoint )*vs, v);
+      if (*from > to) {
+	if (IS_SYNTAX_BV(env->syntax, ONIG_SYN_ALLOW_EMPTY_RANGE_IN_CC))
+	  goto ccs_range_end;
+	else
+	  return ONIGERR_EMPTY_RANGE_IN_CHAR_CLASS;
+      }
+      bitset_set_range(env, cc->bs, (int )*from, (int )(to < 0xff ? to : 0xff));
+      r = add_code_range(&(cc->mbuf), env, (OnigCodePoint )*from, to);
+      if (r < 0) return r;
+      if (IS_NOT_NULL(asc_cc)) {
+	bitset_set_range(env, asc_cc->bs, (int )*from, (int )(to < 0xff ? to : 0xff));
+	r = add_code_range0(&(asc_cc->mbuf), env, (OnigCodePoint )*from, to, 0);
 	if (r < 0) return r;
-	if (IS_NOT_NULL(asc_cc)) {
-	  bitset_set_range(asc_cc->bs, (int )*vs, (int )(v < 0xff ? v : 0xff));
-	  r = add_code_range(&(asc_cc->mbuf), env, (OnigCodePoint )*vs, v);
-	  if (r < 0) return r;
-	}
-#if 0
-      }
-      else
-	return ONIGERR_MISMATCH_CODE_LENGTH_IN_CLASS_RANGE;
-#endif
+      }
     }
   ccs_range_end:
@@ -4473,7 +4519,7 @@
   }
 
-  *vs_israw = v_israw;
-  *vs       = v;
-  *type     = intype;
+  *from_israw = to_israw;
+  *from       = to;
+  *type       = intype;
   return 0;
 }
@@ -4519,6 +4565,9 @@
   int val_israw, in_israw;
 
+  *np = *asc_np = NULL_NODE;
+  env->parse_depth++;
+  if (env->parse_depth > ParseDepthLimit)
+    return ONIGERR_PARSE_DEPTH_LIMIT_OVER;
   prev_cc = asc_prev_cc = (CClassNode* )NULL;
-  *np = *asc_np = NULL_NODE;
   r = fetch_token_in_cc(tok, src, end, env);
   if (r == TK_CHAR && tok->u.c == '^' && tok->escaped == 0) {
@@ -4602,5 +4651,5 @@
 	}
 
-	len = enclen(env->enc, buf);
+	len = enclen(env->enc, buf, buf + i);
 	if (i < len) {
 	  r = ONIGERR_TOO_SHORT_MULTI_BYTE_STRING;
@@ -4610,5 +4659,6 @@
 	  p = psave;
 	  for (i = 1; i < len; i++) {
-	    r = fetch_token_in_cc(tok, &p, end, env);
+	    (void)fetch_token_in_cc(tok, &p, end, env);
+	    /* no need to check the retun value (already checked above) */
 	  }
 	  fetched = 0;
@@ -4710,4 +4760,10 @@
 	  goto range_end_val;
 	}
+
+	if (val_type == CCV_CLASS) {
+	  r = ONIGERR_UNMATCHED_RANGE_SPECIFIER_IN_CHAR_CLASS;
+	  goto err;
+	}
+
 	state = CCS_RANGE;
       }
@@ -4757,9 +4813,9 @@
 	if (r == 0) {
 	  acc = NCCLASS(anode);
-	  r = or_cclass(cc, acc, env->enc);
+	  r = or_cclass(cc, acc, env);
 	}
 	if (r == 0 && IS_NOT_NULL(aasc_node)) {
 	  acc = NCCLASS(aasc_node);
-	  r = or_cclass(asc_cc, acc, env->enc);
+	  r = or_cclass(asc_cc, acc, env);
 	}
 	onig_node_free(anode);
@@ -4781,9 +4837,9 @@
 
 	if (IS_NOT_NULL(prev_cc)) {
-	  r = and_cclass(prev_cc, cc, env->enc);
+	  r = and_cclass(prev_cc, cc, env);
 	  if (r != 0) goto err;
 	  bbuf_free(cc->mbuf);
 	  if (IS_NOT_NULL(asc_cc)) {
-	    r = and_cclass(asc_prev_cc, asc_cc, env->enc);
+	    r = and_cclass(asc_prev_cc, asc_cc, env);
 	    if (r != 0) goto err;
 	    bbuf_free(asc_cc->mbuf);
@@ -4829,10 +4885,10 @@
 
   if (IS_NOT_NULL(prev_cc)) {
-    r = and_cclass(prev_cc, cc, env->enc);
+    r = and_cclass(prev_cc, cc, env);
     if (r != 0) goto err;
     bbuf_free(cc->mbuf);
     cc = prev_cc;
     if (IS_NOT_NULL(asc_cc)) {
-      r = and_cclass(asc_prev_cc, asc_cc, env->enc);
+      r = and_cclass(asc_prev_cc, asc_cc, env);
       if (r != 0) goto err;
       bbuf_free(asc_cc->mbuf);
@@ -4863,14 +4919,15 @@
 
       if (ONIGENC_IS_CODE_NEWLINE(env->enc, NEWLINE_CODE)) {
-        if (ONIGENC_CODE_TO_MBCLEN(env->enc, NEWLINE_CODE) == 1)
-          BITSET_SET_BIT(cc->bs, NEWLINE_CODE);
-        else {
-          r = add_code_range(&(cc->mbuf), env, NEWLINE_CODE, NEWLINE_CODE);
-          if (r < 0) goto err;
-        }
+	if (ONIGENC_CODE_TO_MBCLEN(env->enc, NEWLINE_CODE) == 1)
+	  BITSET_SET_BIT_CHKDUP(cc->bs, NEWLINE_CODE);
+	else {
+	  r = add_code_range(&(cc->mbuf), env, NEWLINE_CODE, NEWLINE_CODE);
+	  if (r < 0) goto err;
+	}
       }
     }
   }
   *src = p;
+  env->parse_depth--;
   return 0;
 
@@ -4933,4 +4990,12 @@
       *np = node_new_enclose(ENCLOSE_STOP_BACKTRACK);
       break;
+    case '~':   /* (?~...) absent operator */
+      if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_QMARK_TILDE_ABSENT)) {
+	*np = node_new_enclose(ENCLOSE_ABSENT);
+      }
+      else {
+	return ONIGERR_UNDEFINED_GROUP_OPTION;
+      }
+      break;
 
 #ifdef USE_NAMED_GROUP
@@ -4943,7 +5008,8 @@
       break;
 
-#ifdef USE_CAPITAL_P_NAMED_GROUP
+# ifdef USE_CAPITAL_P_NAMED_GROUP
     case 'P':   /* (?P<name>...) */
-      if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_QMARK_CAPITAL_P_NAMED_GROUP)) {
+      if (!PEND &&
+	  IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_QMARK_CAPITAL_P_NAMED_GROUP)) {
 	PFETCH(c);
 	if (c == '<') goto named_group1;
@@ -4951,8 +5017,9 @@
       return ONIGERR_UNDEFINED_GROUP_OPTION;
       break;
+# endif
 #endif
-#endif
 
     case '<':   /* look behind (?<=...), (?<!...) */
+      if (PEND) return ONIGERR_END_PATTERN_WITH_UNMATCHED_PARENTHESIS;
       PFETCH(c);
       if (c == '=')
@@ -4972,5 +5039,7 @@
 	  list_capture = 0;
 
+# ifdef USE_CAPTURE_HISTORY
 	named_group2:
+# endif
 	  name = p;
 	  r = fetch_name((OnigCodePoint )c, &p, end, &name_end, env, &num, 0);
@@ -5002,8 +5071,10 @@
       break;
 
+#ifdef USE_CAPTURE_HISTORY
     case '@':
       if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_ATMARK_CAPTURE_HISTORY)) {
-#ifdef USE_NAMED_GROUP
-	if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_QMARK_LT_NAMED_GROUP)) {
+# ifdef USE_NAMED_GROUP
+	if (!PEND &&
+	    IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_QMARK_LT_NAMED_GROUP)) {
 	  PFETCH(c);
 	  if (c == '<' || c == '\'') {
@@ -5013,5 +5084,5 @@
 	  PUNFETCH;
 	}
-#endif
+# endif
 	*np = node_new_enclose_memory(env->option, 0);
 	CHECK_NULL_RETURN_MEMERR(*np);
@@ -5028,7 +5099,9 @@
       }
       break;
+#endif /* USE_CAPTURE_HISTORY */
 
     case '(':   /* conditional expression: (?(cond)yes), (?(cond)yes|no) */
-      if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_QMARK_LPAREN_CONDITION)) {
+      if (!PEND &&
+	  IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_QMARK_LPAREN_CONDITION)) {
 	UChar *name = NULL;
 	UChar *name_end;
@@ -5048,5 +5121,5 @@
 	  if (IS_SYNTAX_BV(env->syntax, ONIG_SYN_STRICT_CHECK_BACKREF)) {
 	    if (num > env->num_mem ||
-	        IS_NULL(SCANENV_MEM_NODES(env)[num]))
+		IS_NULL(SCANENV_MEM_NODES(env)[num]))
 	    return ONIGERR_INVALID_BACKREF;
 	  }
@@ -5054,28 +5127,21 @@
 #ifdef USE_NAMED_GROUP
 	else if (c == '<' || c == '\'') {    /* (<name>), ('name') */
-	  int nums;
-	  int *backs;
-
 	  name = p;
-	  r = fetch_name((OnigCodePoint )c, &p, end, &name_end, env, &num, 0);
+	  r = fetch_named_backref_token(c, tok, &p, end, env);
 	  if (r < 0) return r;
-	  PFETCH(c);
-	  if (c != ')') return ONIGERR_UNDEFINED_GROUP_OPTION;
-
-	  nums = onig_name_to_group_numbers(env->reg, name, name_end, &backs);
-	  if (nums <= 0) {
-	    onig_scan_env_set_error_string(env,
-		     ONIGERR_UNDEFINED_NAME_REFERENCE, name, name_end);
-	    return ONIGERR_UNDEFINED_NAME_REFERENCE;
+	  if (!PPEEK_IS(')')) return ONIGERR_UNDEFINED_GROUP_OPTION;
+	  PINC;
+
+	  if (IS_SYNTAX_BV(env->syntax, ONIG_SYN_USE_LEFT_MOST_NAMED_GROUP)) {
+	    num = tok->u.backref.ref1;
 	  }
-	  if (IS_SYNTAX_BV(env->syntax, ONIG_SYN_STRICT_CHECK_BACKREF)) {
-	    int i;
-	    for (i = 0; i < nums; i++) {
-	      if (backs[i] > env->num_mem ||
-		  IS_NULL(SCANENV_MEM_NODES(env)[backs[i]]))
-	      return ONIGERR_INVALID_BACKREF;
-	    }
+	  else {
+	    /* FIXME:
+	     * Use left most named group for now. This is the same as Perl.
+	     * However this should use the same strategy as normal back-
+	     * references on Ruby syntax; search right to left. */
+	    int len = tok->u.backref.num;
+	    num = len > 1 ? tok->u.backref.refs[0] : tok->u.backref.ref1;
 	  }
-	  num = backs[0];       /* XXX: use left most named group as Perl */
 	}
 #endif
@@ -5102,5 +5168,5 @@
 
     case '^':   /* loads default options */
-      if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_OPTION_PERL)) {
+      if (!PEND && IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_OPTION_PERL)) {
 	/* d-imsx */
 	ONOFF(option, ONIG_OPTION_ASCII_RANGE, 1);
@@ -5112,5 +5178,5 @@
       }
 #if 0
-      else if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_OPTION_RUBY)) {
+      else if (!PEND && IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_OPTION_RUBY)) {
 	/* d-imx */
 	ONOFF(option, ONIG_OPTION_ASCII_RANGE, 0);
@@ -5170,6 +5236,6 @@
 	  case 'a':     /* limits \d, \s, \w and POSIX brackets to ASCII range */
 	    if ((IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_OPTION_PERL) ||
-	         IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_OPTION_RUBY)) &&
-	        (neg == 0)) {
+		 IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_OPTION_RUBY)) &&
+		(neg == 0)) {
 	      ONOFF(option, ONIG_OPTION_ASCII_RANGE, 0);
 	      ONOFF(option, ONIG_OPTION_POSIX_BRACKET_ALL_RANGE, 1);
@@ -5182,6 +5248,6 @@
 	  case 'u':
 	    if ((IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_OPTION_PERL) ||
-	         IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_OPTION_RUBY)) &&
-	        (neg == 0)) {
+		 IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_OPTION_RUBY)) &&
+		(neg == 0)) {
 	      ONOFF(option, ONIG_OPTION_ASCII_RANGE, 1);
 	      ONOFF(option, ONIG_OPTION_POSIX_BRACKET_ALL_RANGE, 1);
@@ -5194,9 +5260,9 @@
 	  case 'd':
 	    if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_OPTION_PERL) &&
-	        (neg == 0)) {
+		(neg == 0)) {
 	      ONOFF(option, ONIG_OPTION_ASCII_RANGE, 1);
 	    }
 	    else if (IS_SYNTAX_OP2(env->syntax, ONIG_SYN_OP2_OPTION_RUBY) &&
-	        (neg == 0)) {
+		(neg == 0)) {
 	      ONOFF(option, ONIG_OPTION_ASCII_RANGE, 0);
 	      ONOFF(option, ONIG_OPTION_POSIX_BRACKET_ALL_RANGE, 0);
@@ -5228,7 +5294,10 @@
 	    OnigOptionType prev = env->option;
 
-	    env->option     = option;
+	    env->option = option;
 	    r = fetch_token(tok, &p, end, env);
-	    if (r < 0) return r;
+	    if (r < 0) {
+	      env->option = prev;
+	      return r;
+	    }
 	    r = parse_subexp(&target, tok, term, &p, end, env);
 	    env->option = prev;
@@ -5345,34 +5414,27 @@
 
 #ifdef USE_WARNING_REDUNDANT_NESTED_REPEAT_OPERATOR
-      if (!IS_QUANTIFIER_BY_NUMBER(qn) && !IS_QUANTIFIER_BY_NUMBER(qnt) &&
+      if (nestq_num >= 0 && targetq_num >= 0 &&
 	  IS_SYNTAX_BV(env->syntax, ONIG_SYN_WARN_REDUNDANT_NESTED_REPEAT)) {
-        UChar buf[WARN_BUFSIZE];
-
-        switch (ReduceTypeTable[targetq_num][nestq_num]) {
-        case RQ_ASIS:
-          break;
-
-        case RQ_DEL:
-          if (onig_verb_warn != onig_null_warn) {
-            onig_snprintf_with_pattern(buf, WARN_BUFSIZE, env->enc,
-                                 env->pattern, env->pattern_end,
-                                 (UChar* )"redundant nested repeat operator");
-            (*onig_verb_warn)((char* )buf);
-          }
-          goto warn_exit;
-          break;
-
-        default:
-          if (onig_verb_warn != onig_null_warn) {
-            onig_snprintf_with_pattern(buf, WARN_BUFSIZE, env->enc,
-                                       env->pattern, env->pattern_end,
-            (UChar* )"nested repeat operator %s and %s was replaced with '%s'",
-            PopularQStr[targetq_num], PopularQStr[nestq_num],
-            ReduceQStr[ReduceTypeTable[targetq_num][nestq_num]]);
-            (*onig_verb_warn)((char* )buf);
-          }
-          goto warn_exit;
-          break;
-        }
+	switch (ReduceTypeTable[targetq_num][nestq_num]) {
+	case RQ_ASIS:
+	  break;
+
+	case RQ_DEL:
+	  if (onig_warn != onig_null_warn) {
+	    onig_syntax_warn(env, "regular expression has redundant nested repeat operator '%s'",
+		PopularQStr[targetq_num]);
+	  }
+	  goto warn_exit;
+	  break;
+
+	default:
+	  if (onig_warn != onig_null_warn) {
+	    onig_syntax_warn(env, "nested repeat operator '%s' and '%s' was replaced with '%s' in regular expression",
+		PopularQStr[targetq_num], PopularQStr[nestq_num],
+		ReduceQStr[ReduceTypeTable[targetq_num][nestq_num]]);
+	  }
+	  goto warn_exit;
+	  break;
+	}
       }
 
@@ -5402,83 +5464,4 @@
   return 0;
 }
-
-
-#ifdef USE_SHARED_CCLASS_TABLE
-
-#define THRESHOLD_RANGE_NUM_FOR_SHARE_CCLASS     8
-
-/* for ctype node hash table */
-
-typedef struct {
-  OnigEncoding enc;
-  int not;
-  int type;
-} type_cclass_key;
-
-static int type_cclass_cmp(type_cclass_key* x, type_cclass_key* y)
-{
-  if (x->type != y->type) return 1;
-  if (x->enc  != y->enc)  return 1;
-  if (x->not  != y->not)  return 1;
-  return 0;
-}
-
-static int type_cclass_hash(type_cclass_key* key)
-{
-  int i, val;
-  UChar *p;
-
-  val = 0;
-
-  p = (UChar* )&(key->enc);
-  for (i = 0; i < (int )sizeof(key->enc); i++) {
-    val = val * 997 + (int )*p++;
-  }
-
-  p = (UChar* )(&key->type);
-  for (i = 0; i < (int )sizeof(key->type); i++) {
-    val = val * 997 + (int )*p++;
-  }
-
-  val += key->not;
-  return val + (val >> 5);
-}
-
-static struct st_hash_type type_type_cclass_hash = {
-    type_cclass_cmp,
-    type_cclass_hash,
-};
-
-static st_table* OnigTypeCClassTable;
-
-
-static int
-i_free_shared_class(type_cclass_key* key, Node* node, void* arg ARG_UNUSED)
-{
-  if (IS_NOT_NULL(node)) {
-    CClassNode* cc = NCCLASS(node);
-    if (IS_NOT_NULL(cc->mbuf)) xfree(cc->mbuf);
-    xfree(node);
-  }
-
-  if (IS_NOT_NULL(key)) xfree(key);
-  return ST_DELETE;
-}
-
-extern int
-onig_free_shared_cclass_table(void)
-{
-  /* THREAD_ATOMIC_START; */
-  if (IS_NOT_NULL(OnigTypeCClassTable)) {
-    onig_st_foreach(OnigTypeCClassTable, i_free_shared_class, 0);
-    onig_st_free_table(OnigTypeCClassTable);
-    OnigTypeCClassTable = NULL;
-  }
-  /* THREAD_ATOMIC_END; */
-
-  return 0;
-}
-
-#endif /* USE_SHARED_CCLASS_TABLE */
 
 
@@ -5525,5 +5508,5 @@
   CClassNode* asc_cc;
   BitSetRef bs;
-  int add_flag;
+  int add_flag, r;
 
   iarg = (IApplyCaseFoldArg* )arg;
@@ -5552,5 +5535,6 @@
       if (add_flag) {
 	if (ONIGENC_MBC_MINLEN(env->enc) > 1 || *to >= SINGLE_BYTE_SIZE) {
-	  add_code_range(&(cc->mbuf), env, *to, *to);
+	  r = add_code_range0(&(cc->mbuf), env, *to, *to, 0);
+	  if (r < 0) return r;
 	}
 	else {
@@ -5564,5 +5548,6 @@
 	if (ONIGENC_MBC_MINLEN(env->enc) > 1 || *to >= SINGLE_BYTE_SIZE) {
 	  if (IS_NCCLASS_NOT(cc)) clear_not_flag_cclass(cc, env->enc);
-	  add_code_range(&(cc->mbuf), env, *to, *to);
+	  r = add_code_range0(&(cc->mbuf), env, *to, *to, 0);
+	  if (r < 0) return r;
 	}
 	else {
@@ -5654,5 +5639,5 @@
   Node* target2 = NULL;
   CClassNode* cc;
-  int num1, num2;
+  int num1, num2, r;
   UChar buf[ONIGENC_CODE_TO_MBC_MAXLEN * 2];
 
@@ -5670,8 +5655,9 @@
   cc = NCCLASS(right);
   if (ONIGENC_MBC_MINLEN(env->enc) > 1) {
-    add_code_range(&(cc->mbuf), env, 0x0A, 0x0D);
+    r = add_code_range(&(cc->mbuf), env, 0x0A, 0x0D);
+    if (r != 0) goto err;
   }
   else {
-    bitset_set_range(cc->bs, 0x0A, 0x0D);
+    bitset_set_range(env, cc->bs, 0x0A, 0x0D);
   }
 
@@ -5679,6 +5665,8 @@
   if (ONIGENC_IS_UNICODE(env->enc)) {
     /* UTF-8, UTF-16BE/LE, UTF-32BE/LE */
-    add_code_range(&(cc->mbuf), env, 0x85, 0x85);
-    add_code_range(&(cc->mbuf), env, 0x2028, 0x2029);
+    r = add_code_range(&(cc->mbuf), env, 0x85, 0x85);
+    if (r != 0) goto err;
+    r = add_code_range(&(cc->mbuf), env, 0x2028, 0x2029);
+    if (r != 0) goto err;
   }
 
@@ -5707,63 +5695,638 @@
 
 static int
+propname2ctype(ScanEnv* env, const char* propname)
+{
+  UChar* name = (UChar* )propname;
+  int ctype = env->enc->property_name_to_ctype(ONIG_ENCODING_ASCII,
+      name, name + strlen(propname));
+  return ctype;
+}
+
+static int
 node_extended_grapheme_cluster(Node** np, ScanEnv* env)
 {
-  /* same as (?>\P{M}\p{M}*) */
+  Node* tmp = NULL;
   Node* np1 = NULL;
-  Node* np2 = NULL;
-  Node* qn = NULL;
-  Node* list1 = NULL;
+  Node* list = NULL;
   Node* list2 = NULL;
+  Node* alt = NULL;
+  Node* alt2 = NULL;
+  BBuf *pbuf1 = NULL;
   int r = 0;
+  int num1;
+  UChar buf[ONIGENC_CODE_TO_MBC_MAXLEN * 2];
+  OnigOptionType option;
 
 #ifdef USE_UNICODE_PROPERTIES
   if (ONIGENC_IS_UNICODE(env->enc)) {
     /* UTF-8, UTF-16BE/LE, UTF-32BE/LE */
-    CClassNode* cc1;
-    CClassNode* cc2;
-    UChar* propname = (UChar* )"M";
-    int ctype = env->enc->property_name_to_ctype(ONIG_ENCODING_ASCII,
-	propname, propname + 1);
-    if (ctype >= 0) {
-      /* \P{M} */
-      np1 = node_new_cclass();
-      if (IS_NULL(np1)) goto err;
-      cc1 = NCCLASS(np1);
-      r = add_ctype_to_cc(cc1, ctype, 0, 0, env);
+    CClassNode* cc;
+    OnigCodePoint sb_out = (ONIGENC_MBC_MINLEN(env->enc) > 1) ? 0x00 : 0x80;
+    int extend = propname2ctype(env, "Grapheme_Cluster_Break=Extend");
+
+    /* Prepend*
+     * ( RI-sequence | Hangul-Syllable | !Control )
+     * ( Grapheme_Extend | SpacingMark )* */
+
+    /* ( Grapheme_Extend | SpacingMark )* */
+    np1 = node_new_cclass();
+    if (IS_NULL(np1)) goto err;
+    cc = NCCLASS(np1);
+    r = add_ctype_to_cc(cc, extend, 0, 0, env);
+    if (r != 0) goto err;
+    r = add_ctype_to_cc(cc, propname2ctype(env, "Grapheme_Cluster_Break=SpacingMark"), 0, 0, env);
+    if (r != 0) goto err;
+    r = add_code_range(&(cc->mbuf), env, 0x200D, 0x200D);
+    if (r != 0) goto err;
+
+    tmp = node_new_quantifier(0, REPEAT_INFINITE, 0);
+    if (IS_NULL(tmp)) goto err;
+    NQTFR(tmp)->target = np1;
+    np1 = tmp;
+
+    tmp = node_new_list(np1, NULL_NODE);
+    if (IS_NULL(tmp)) goto err;
+    list = tmp;
+    np1 = NULL;
+
+    /* ( RI-sequence | Hangul-Syllable | !Control ) */
+    /* !Control */
+    np1 = node_new_cclass();
+    if (IS_NULL(np1)) goto err;
+    cc = NCCLASS(np1);
+    r = add_ctype_to_cc(cc, propname2ctype(env, "Grapheme_Cluster_Break=Control"), 1, 0, env);
+    if (r != 0) goto err;
+    if (ONIGENC_MBC_MINLEN(env->enc) > 1) {
+      BBuf *pbuf2 = NULL;
+      r = add_code_range(&pbuf1, env, 0x0a, 0x0a);
       if (r != 0) goto err;
-      NCCLASS_SET_NOT(cc1);
-
-      /* \p{M}* */
-      np2 = node_new_cclass();
-      if (IS_NULL(np2)) goto err;
-      cc2 = NCCLASS(np2);
-      r = add_ctype_to_cc(cc2, ctype, 0, 0, env);
+      r = add_code_range(&pbuf1, env, 0x0d, 0x0d);
       if (r != 0) goto err;
-
-      qn = node_new_quantifier(0, REPEAT_INFINITE, 0);
-      if (IS_NULL(qn)) goto err;
-      NQTFR(qn)->target = np2;
-      np2 = NULL;
-
-      /* \P{M}\p{M}* */
-      list2 = node_new_list(qn, NULL_NODE);
-      if (IS_NULL(list2)) goto err;
-      qn = NULL;
-      list1 = node_new_list(np1, list2);
-      if (IS_NULL(list1)) goto err;
-      np1 = NULL;
-      list2 = NULL;
-
-      /* (?>...) */
-      *np = node_new_enclose(ENCLOSE_STOP_BACKTRACK);
-      if (IS_NULL(*np)) goto err;
-      NENCLOSE(*np)->target = list1;
-      return ONIG_NORMAL;
-    }
-  }
-#endif /* USE_UNICODE_PROPERTIES */
-  if (IS_NULL(*np)) {
+      r = and_code_range_buf(cc->mbuf, 0, pbuf1, 1, &pbuf2, env);
+      if (r != 0) {
+	bbuf_free(pbuf2);
+	goto err;
+      }
+      bbuf_free(pbuf1);
+      pbuf1 = NULL;
+      bbuf_free(cc->mbuf);
+      cc->mbuf = pbuf2;
+    }
+    else {
+      BITSET_CLEAR_BIT(cc->bs, 0x0a);
+      BITSET_CLEAR_BIT(cc->bs, 0x0d);
+    }
+
+    tmp = onig_node_new_alt(np1, NULL_NODE);
+    if (IS_NULL(tmp)) goto err;
+    alt = tmp;
+    np1 = NULL;
+
+    /* Hangul-Syllable
+     *  := L* V+ T*
+     *  | L* LV V* T*
+     *  | L* LVT T*
+     *  | L+
+     *  | T+ */
+
+    /* T+ */
+    np1 = node_new_cclass();
+    if (IS_NULL(np1)) goto err;
+    cc = NCCLASS(np1);
+    r = add_ctype_to_cc(cc, propname2ctype(env, "Grapheme_Cluster_Break=T"), 0, 0, env);
+    if (r != 0) goto err;
+
+    tmp = node_new_quantifier(1, REPEAT_INFINITE, 0);
+    if (IS_NULL(tmp)) goto err;
+    NQTFR(tmp)->target = np1;
+    np1 = tmp;
+
+    tmp = onig_node_new_alt(np1, alt);
+    if (IS_NULL(tmp)) goto err;
+    alt = tmp;
+    np1 = NULL;
+
+    /* L+ */
+    np1 = node_new_cclass();
+    if (IS_NULL(np1)) goto err;
+    cc = NCCLASS(np1);
+    r = add_ctype_to_cc(cc, propname2ctype(env, "Grapheme_Cluster_Break=L"), 0, 0, env);
+    if (r != 0) goto err;
+
+    tmp = node_new_quantifier(1, REPEAT_INFINITE, 0);
+    if (IS_NULL(tmp)) goto err;
+    NQTFR(tmp)->target = np1;
+    np1 = tmp;
+
+    tmp = onig_node_new_alt(np1, alt);
+    if (IS_NULL(tmp)) goto err;
+    alt = tmp;
+    np1 = NULL;
+
+    /* L* LVT T* */
+    np1 = node_new_cclass();
+    if (IS_NULL(np1)) goto err;
+    cc = NCCLASS(np1);
+    r = add_ctype_to_cc(cc, propname2ctype(env, "Grapheme_Cluster_Break=T"), 0, 0, env);
+    if (r != 0) goto err;
+
+    tmp = node_new_quantifier(0, REPEAT_INFINITE, 0);
+    if (IS_NULL(tmp)) goto err;
+    NQTFR(tmp)->target = np1;
+    np1 = tmp;
+
+    tmp = node_new_list(np1, NULL_NODE);
+    if (IS_NULL(tmp)) goto err;
+    list2 = tmp;
+    np1 = NULL;
+
+    np1 = node_new_cclass();
+    if (IS_NULL(np1)) goto err;
+    cc = NCCLASS(np1);
+    r = add_ctype_to_cc(cc, propname2ctype(env, "Grapheme_Cluster_Break=LVT"), 0, 0, env);
+    if (r != 0) goto err;
+
+    tmp = node_new_list(np1, list2);
+    if (IS_NULL(tmp)) goto err;
+    list2 = tmp;
+    np1 = NULL;
+
+    np1 = node_new_cclass();
+    if (IS_NULL(np1)) goto err;
+    cc = NCCLASS(np1);
+    r = add_ctype_to_cc(cc, propname2ctype(env, "Grapheme_Cluster_Break=L"), 0, 0, env);
+    if (r != 0) goto err;
+
+    tmp = node_new_quantifier(0, REPEAT_INFINITE, 0);
+    if (IS_NULL(tmp)) goto err;
+    NQTFR(tmp)->target = np1;
+    np1 = tmp;
+
+    tmp = node_new_list(np1, list2);
+    if (IS_NULL(tmp)) goto err;
+    list2 = tmp;
+    np1 = NULL;
+
+    tmp = onig_node_new_alt(list2, alt);
+    if (IS_NULL(tmp)) goto err;
+    alt = tmp;
+    list2 = NULL;
+
+    /* L* LV V* T* */
+    np1 = node_new_cclass();
+    if (IS_NULL(np1)) goto err;
+    cc = NCCLASS(np1);
+    r = add_ctype_to_cc(cc, propname2ctype(env, "Grapheme_Cluster_Break=T"), 0, 0, env);
+    if (r != 0) goto err;
+
+    tmp = node_new_quantifier(0, REPEAT_INFINITE, 0);
+    if (IS_NULL(tmp)) goto err;
+    NQTFR(tmp)->target = np1;
+    np1 = tmp;
+
+    tmp = node_new_list(np1, NULL_NODE);
+    if (IS_NULL(tmp)) goto err;
+    list2 = tmp;
+    np1 = NULL;
+
+    np1 = node_new_cclass();
+    if (IS_NULL(np1)) goto err;
+    cc = NCCLASS(np1);
+    r = add_ctype_to_cc(cc, propname2ctype(env, "Grapheme_Cluster_Break=V"), 0, 0, env);
+    if (r != 0) goto err;
+
+    tmp = node_new_quantifier(0, REPEAT_INFINITE, 0);
+    if (IS_NULL(tmp)) goto err;
+    NQTFR(tmp)->target = np1;
+    np1 = tmp;
+
+    tmp = node_new_list(np1, list2);
+    if (IS_NULL(tmp)) goto err;
+    list2 = tmp;
+    np1 = NULL;
+
+    np1 = node_new_cclass();
+    if (IS_NULL(np1)) goto err;
+    cc = NCCLASS(np1);
+    r = add_ctype_to_cc(cc, propname2ctype(env, "Grapheme_Cluster_Break=LV"), 0, 0, env);
+    if (r != 0) goto err;
+
+    tmp = node_new_list(np1, list2);
+    if (IS_NULL(tmp)) goto err;
+    list2 = tmp;
+    np1 = NULL;
+
+    np1 = node_new_cclass();
+    if (IS_NULL(np1)) goto err;
+    cc = NCCLASS(np1);
+    r = add_ctype_to_cc(cc, propname2ctype(env, "Grapheme_Cluster_Break=L"), 0, 0, env);
+    if (r != 0) goto err;
+
+    tmp = node_new_quantifier(0, REPEAT_INFINITE, 0);
+    if (IS_NULL(tmp)) goto err;
+    NQTFR(tmp)->target = np1;
+    np1 = tmp;
+
+    tmp = node_new_list(np1, list2);
+    if (IS_NULL(tmp)) goto err;
+    list2 = tmp;
+    np1 = NULL;
+
+    tmp = onig_node_new_alt(list2, alt);
+    if (IS_NULL(tmp)) goto err;
+    alt = tmp;
+    list2 = NULL;
+
+    /* L* V+ T* */
+    np1 = node_new_cclass();
+    if (IS_NULL(np1)) goto err;
+    cc = NCCLASS(np1);
+    r = add_ctype_to_cc(cc, propname2ctype(env, "Grapheme_Cluster_Break=T"), 0, 0, env);
+    if (r != 0) goto err;
+
+    tmp = node_new_quantifier(0, REPEAT_INFINITE, 0);
+    if (IS_NULL(tmp)) goto err;
+    NQTFR(tmp)->target = np1;
+    np1 = tmp;
+
+    tmp = node_new_list(np1, NULL_NODE);
+    if (IS_NULL(tmp)) goto err;
+    list2 = tmp;
+    np1 = NULL;
+
+    np1 = node_new_cclass();
+    if (IS_NULL(np1)) goto err;
+    cc = NCCLASS(np1);
+    r = add_ctype_to_cc(cc, propname2ctype(env, "Grapheme_Cluster_Break=V"), 0, 0, env);
+    if (r != 0) goto err;
+
+    tmp = node_new_quantifier(1, REPEAT_INFINITE, 0);
+    if (IS_NULL(tmp)) goto err;
+    NQTFR(tmp)->target = np1;
+    np1 = tmp;
+
+    tmp = node_new_list(np1, list2);
+    if (IS_NULL(tmp)) goto err;
+    list2 = tmp;
+    np1 = NULL;
+
+    np1 = node_new_cclass();
+    if (IS_NULL(np1)) goto err;
+    cc = NCCLASS(np1);
+    r = add_ctype_to_cc(cc, propname2ctype(env, "Grapheme_Cluster_Break=L"), 0, 0, env);
+    if (r != 0) goto err;
+
+    tmp = node_new_quantifier(0, REPEAT_INFINITE, 0);
+    if (IS_NULL(tmp)) goto err;
+    NQTFR(tmp)->target = np1;
+    np1 = tmp;
+
+    tmp = node_new_list(np1, list2);
+    if (IS_NULL(tmp)) goto err;
+    list2 = tmp;
+    np1 = NULL;
+
+    tmp = onig_node_new_alt(list2, alt);
+    if (IS_NULL(tmp)) goto err;
+    alt = tmp;
+    list2 = NULL;
+
+    /* Emoji sequence := (E_Base | EBG) Extend* E_Modifier?
+     *                   (ZWJ (Glue_After_Zwj | EBG Extend* E_Modifier?) )* */
+
+    /* ZWJ (Glue_After_Zwj | E_Base_GAZ Extend* E_Modifier?) */
+    np1 = node_new_cclass();
+    if (IS_NULL(np1)) goto err;
+    cc = NCCLASS(np1);
+    r = add_ctype_to_cc(cc, propname2ctype(env, "Grapheme_Cluster_Break=E_Modifier"), 0, 0, env);
+    if (r != 0) goto err;
+
+    tmp = node_new_quantifier(0, 1, 0);
+    if (IS_NULL(tmp)) goto err;
+    NQTFR(tmp)->target = np1;
+    np1 = tmp;
+
+    tmp = node_new_list(np1, NULL_NODE);
+    if (IS_NULL(tmp)) goto err;
+    list2 = tmp;
+    np1 = NULL;
+
+    np1 = node_new_cclass();
+    if (IS_NULL(np1)) goto err;
+    cc = NCCLASS(np1);
+    r = add_ctype_to_cc(cc, extend, 0, 0, env);
+    if (r != 0) goto err;
+
+    tmp = node_new_quantifier(0, REPEAT_INFINITE, 0);
+    if (IS_NULL(tmp)) goto err;
+    NQTFR(tmp)->target = np1;
+    np1 = tmp;
+
+    tmp = node_new_list(np1, list2);
+    if (IS_NULL(tmp)) goto err;
+    list2 = tmp;
+    np1 = NULL;
+
+    np1 = node_new_cclass();
+    if (IS_NULL(np1)) goto err;
+    cc = NCCLASS(np1);
+    r = add_ctype_to_cc(cc, propname2ctype(env, "Grapheme_Cluster_Break=E_Base_GAZ"), 0, 0, env);
+    if (r != 0) goto err;
+
+    tmp = node_new_list(np1, list2);
+    if (IS_NULL(tmp)) goto err;
+    list2 = tmp;
+    np1 = NULL;
+
+    tmp = onig_node_new_alt(list2, NULL_NODE);
+    if (IS_NULL(tmp)) goto err;
+    alt2 = tmp;
+    list2 = NULL;
+
+    /* Glue_After_Zwj */
+    np1 = node_new_cclass();
+    if (IS_NULL(np1)) goto err;
+    cc = NCCLASS(np1);
+    r = add_ctype_to_cc(cc, extend, 0, 0, env);
+    if (r != 0) goto err;
+
+    tmp = node_new_quantifier(0, REPEAT_INFINITE, 0);
+    if (IS_NULL(tmp)) goto err;
+    NQTFR(tmp)->target = np1;
+    np1 = tmp;
+
+    tmp = node_new_list(np1, NULL_NODE);
+    if (IS_NULL(tmp)) goto err;
+    list2 = tmp;
+    np1 = NULL;
+
+    np1 = node_new_cclass();
+    if (IS_NULL(np1)) goto err;
+    cc = NCCLASS(np1);
+    {
+      static const OnigCodePoint ranges[] = {
+	13,
+	0x1F308, 0x1F308,
+	0x1F33E, 0x1F33E,
+	0x1F373, 0x1F373,
+	0x1F393, 0x1F393,
+	0x1F3A4, 0x1F3A4,
+	0x1F3A8, 0x1F3A8,
+	0x1F3EB, 0x1F3EB,
+	0x1F3ED, 0x1F3ED,
+	0x1F4BB, 0x1F4BC,
+	0x1F527, 0x1F527,
+	0x1F52C, 0x1F52C,
+	0x1F680, 0x1F680,
+	0x1F692, 0x1F692,
+      };
+      r = add_ctype_to_cc_by_range(cc, -1, 0, env, sb_out, ranges);
+      if (r != 0) goto err;
+    }
+    r = add_ctype_to_cc(cc, propname2ctype(env, "Grapheme_Cluster_Break=Glue_After_Zwj"), 0, 0, env);
+    if (r != 0) goto err;
+
+    tmp = node_new_list(np1, list2);
+    if (IS_NULL(tmp)) goto err;
+    list2 = tmp;
+    np1 = NULL;
+
+    tmp = onig_node_new_alt(list2, alt2);
+    if (IS_NULL(tmp)) goto err;
+    alt2 = tmp;
+    list2 = NULL;
+
+    /* Emoji variation sequence
+     * http://unicode.org/Public/emoji/4.0/emoji-zwj-sequences.txt
+     */
+    r = ONIGENC_CODE_TO_MBC(env->enc, 0xfe0f, buf);
+    if (r < 0) goto err;
+    np1 = node_new_str_raw(buf, buf + r);
+    if (IS_NULL(np1)) goto err;
+
+    tmp = node_new_quantifier(0, 1, 0);
+    if (IS_NULL(tmp)) goto err;
+    NQTFR(tmp)->target = np1;
+    np1 = tmp;
+
+    tmp = node_new_list(np1, NULL_NODE);
+    if (IS_NULL(tmp)) goto err;
+    list2 = tmp;
+    np1 = NULL;
+
+    np1 = node_new_cclass();
+    if (IS_NULL(np1)) goto err;
+    cc = NCCLASS(np1);
+    {
+      static const OnigCodePoint ranges[] = {
+	4,
+	0x2640, 0x2640,
+	0x2642, 0x2642,
+	0x2695, 0x2696,
+	0x2708, 0x2708,
+      };
+      r = add_ctype_to_cc_by_range(cc, -1, 0, env, sb_out, ranges);
+      if (r != 0) goto err;
+    }
+
+    tmp = node_new_list(np1, list2);
+    if (IS_NULL(tmp)) goto err;
+    list2 = tmp;
+    np1 = NULL;
+
+    tmp = onig_node_new_alt(list2, alt2);
+    if (IS_NULL(tmp)) goto err;
+    alt2 = tmp;
+    list2 = NULL;
+
+    tmp = node_new_list(alt2, NULL_NODE);
+    if (IS_NULL(tmp)) goto err;
+    list2 = tmp;
+    alt2 = NULL;
+
+    /* ZWJ */
+    r = ONIGENC_CODE_TO_MBC(env->enc, 0x200D, buf);
+    if (r < 0) goto err;
+    np1 = node_new_str_raw(buf, buf + r);
+    if (IS_NULL(np1)) goto err;
+
+    tmp = node_new_list(np1, list2);
+    if (IS_NULL(tmp)) goto err;
+    list2 = tmp;
+    np1 = NULL;
+
+    tmp = node_new_quantifier(0, REPEAT_INFINITE, 0);
+    if (IS_NULL(tmp)) goto err;
+    NQTFR(tmp)->target = list2;
+    np1 = tmp;
+    list2 = NULL;
+
+    tmp = node_new_list(np1, NULL_NODE);
+    if (IS_NULL(tmp)) goto err;
+    list2 = tmp;
+    np1 = NULL;
+
+    /* E_Modifier? */
+    np1 = node_new_cclass();
+    if (IS_NULL(np1)) goto err;
+    cc = NCCLASS(np1);
+    r = add_ctype_to_cc(cc, propname2ctype(env, "Grapheme_Cluster_Break=E_Modifier"), 0, 0, env);
+    if (r != 0) goto err;
+
+    tmp = node_new_quantifier(0, 1, 0);
+    if (IS_NULL(tmp)) goto err;
+    NQTFR(tmp)->target = np1;
+    np1 = tmp;
+
+    tmp = node_new_list(np1, list2);
+    if (IS_NULL(tmp)) goto err;
+    list2 = tmp;
+    np1 = NULL;
+
+    /* Extend* */
+    np1 = node_new_cclass();
+    if (IS_NULL(np1)) goto err;
+    cc = NCCLASS(np1);
+    r = add_ctype_to_cc(cc, extend, 0, 0, env);
+    if (r != 0) goto err;
+
+    tmp = node_new_quantifier(0, REPEAT_INFINITE, 0);
+    if (IS_NULL(tmp)) goto err;
+    NQTFR(tmp)->target = np1;
+    np1 = tmp;
+
+    tmp = node_new_list(np1, list2);
+    if (IS_NULL(tmp)) goto err;
+    list2 = tmp;
+    np1 = NULL;
+
+    /* (E_Base | EBG) */
+    np1 = node_new_cclass();
+    if (IS_NULL(np1)) goto err;
+    cc = NCCLASS(np1);
+    {
+      static const OnigCodePoint ranges[] = {
+	8,
+	0x1F3C2, 0x1F3C2,
+	0x1F3C7, 0x1F3C7,
+	0x1F3CC, 0x1F3CC,
+	0x1F3F3, 0x1F3F3,
+	0x1F441, 0x1F441,
+	0x1F46F, 0x1F46F,
+	0x1F574, 0x1F574,
+	0x1F6CC, 0x1F6CC,
+      };
+      r = add_ctype_to_cc_by_range(cc, -1, 0, env, sb_out, ranges);
+      if (r != 0) goto err;
+    }
+    r = add_ctype_to_cc(cc, propname2ctype(env, "Grapheme_Cluster_Break=E_Base"), 0, 0, env);
+    if (r != 0) goto err;
+    r = add_ctype_to_cc(cc, propname2ctype(env, "Grapheme_Cluster_Break=E_Base_GAZ"), 0, 0, env);
+    if (r != 0) goto err;
+
+    tmp = node_new_list(np1, list2);
+    if (IS_NULL(tmp)) goto err;
+    list2 = tmp;
+    np1 = NULL;
+
+    tmp = onig_node_new_alt(list2, alt);
+    if (IS_NULL(tmp)) goto err;
+    alt = tmp;
+    list2 = NULL;
+
+    /* ZWJ (E_Base_GAZ | Glue_After_Zwj) E_Modifier? */
+    /* a sequence starting with ZWJ seems artificial, but GraphemeBreakTest
+     * has such examples.
+     * http://www.unicode.org/Public/9.0.0/ucd/auxiliary/GraphemeBreakTest.html
+     */
+    np1 = node_new_cclass();
+    if (IS_NULL(np1)) goto err;
+    cc = NCCLASS(np1);
+    r = add_ctype_to_cc(cc, propname2ctype(env, "Grapheme_Cluster_Break=E_Modifier"), 0, 0, env);
+    if (r != 0) goto err;
+
+    tmp = node_new_quantifier(0, 1, 0);
+    if (IS_NULL(tmp)) goto err;
+    NQTFR(tmp)->target = np1;
+    np1 = tmp;
+
+    tmp = node_new_list(np1, NULL_NODE);
+    if (IS_NULL(tmp)) goto err;
+    list2 = tmp;
+    np1 = NULL;
+
+    np1 = node_new_cclass();
+    if (IS_NULL(np1)) goto err;
+    cc = NCCLASS(np1);
+    r = add_ctype_to_cc(cc, propname2ctype(env, "Grapheme_Cluster_Break=Glue_After_Zwj"), 0, 0, env);
+    if (r != 0) goto err;
+    r = add_ctype_to_cc(cc, propname2ctype(env, "Grapheme_Cluster_Break=E_Base_GAZ"), 0, 0, env);
+    if (r != 0) goto err;
+
+    tmp = node_new_list(np1, list2);
+    if (IS_NULL(tmp)) goto err;
+    list2 = tmp;
+    np1 = NULL;
+
+    r = ONIGENC_CODE_TO_MBC(env->enc, 0x200D, buf);
+    if (r < 0) goto err;
+    np1 = node_new_str_raw(buf, buf + r);
+    if (IS_NULL(np1)) goto err;
+
+    tmp = node_new_list(np1, list2);
+    if (IS_NULL(tmp)) goto err;
+    list2 = tmp;
+    np1 = NULL;
+
+    tmp = onig_node_new_alt(list2, alt);
+    if (IS_NULL(tmp)) goto err;
+    alt = tmp;
+    list2 = NULL;
+
+    /* RI-Sequence := Regional_Indicator{2} */
+    np1 = node_new_cclass();
+    if (IS_NULL(np1)) goto err;
+    cc = NCCLASS(np1);
+    r = add_code_range(&(cc->mbuf), env, 0x1F1E6, 0x1F1FF);
+    if (r != 0) goto err;
+
+    tmp = node_new_quantifier(2, 2, 0);
+    if (IS_NULL(tmp)) goto err;
+    NQTFR(tmp)->target = np1;
+    np1 = tmp;
+
+    tmp = node_new_list(np1, list2);
+    if (IS_NULL(tmp)) goto err;
+    list2 = tmp;
+    np1 = NULL;
+
+    tmp = onig_node_new_alt(list2, alt);
+    if (IS_NULL(tmp)) goto err;
+    alt = tmp;
+    list2 = NULL;
+
+    tmp = node_new_list(alt, list);
+    if (IS_NULL(tmp)) goto err;
+    list = tmp;
+    alt = NULL;
+
+    /* Prepend* */
+    np1 = node_new_cclass();
+    if (IS_NULL(np1)) goto err;
+    cc = NCCLASS(np1);
+    r = add_ctype_to_cc(cc, propname2ctype(env, "Grapheme_Cluster_Break=Prepend"), 0, 0, env);
+    if (r != 0) goto err;
+
+    tmp = node_new_quantifier(0, REPEAT_INFINITE, 0);
+    if (IS_NULL(tmp)) goto err;
+    NQTFR(tmp)->target = np1;
+    np1 = tmp;
+
+    tmp = node_new_list(np1, list);
+    if (IS_NULL(tmp)) goto err;
+    list = tmp;
+    np1 = NULL;
+
     /* PerlSyntax: (?s:.), RubySyntax: (?m:.) */
-    OnigOptionType option;
     np1 = node_new_anychar();
     if (IS_NULL(np1)) goto err;
@@ -5771,16 +6334,118 @@
     option = env->option;
     ONOFF(option, ONIG_OPTION_MULTILINE, 0);
+    tmp = node_new_option(option);
+    if (IS_NULL(tmp)) goto err;
+    NENCLOSE(tmp)->target = np1;
+    np1 = tmp;
+
+    tmp = onig_node_new_alt(np1, NULL_NODE);
+    if (IS_NULL(tmp)) goto err;
+    alt = tmp;
+    np1 = NULL;
+
+    /* Prepend+ */
+    r = ONIGENC_CODE_TO_MBC(env->enc, 0x200D, buf);
+    if (r < 0) goto err;
+    np1 = node_new_str_raw(buf, buf + r);
+    if (IS_NULL(np1)) goto err;
+
+    tmp = node_new_quantifier(0, 1, 0);
+    if (IS_NULL(tmp)) goto err;
+    NQTFR(tmp)->target = np1;
+    np1 = tmp;
+
+    tmp = node_new_list(np1, NULL_NODE);
+    if (IS_NULL(tmp)) goto err;
+    list2 = tmp;
+    np1 = NULL;
+
+    np1 = node_new_cclass();
+    if (IS_NULL(np1)) goto err;
+    cc = NCCLASS(np1);
+    r = add_ctype_to_cc(cc, propname2ctype(env, "Grapheme_Cluster_Break=Prepend"), 0, 0, env);
+    if (r != 0) goto err;
+
+    tmp = node_new_quantifier(1, REPEAT_INFINITE, 0);
+    if (IS_NULL(tmp)) goto err;
+    NQTFR(tmp)->target = np1;
+    np1 = tmp;
+
+    tmp = node_new_list(np1, list2);
+    if (IS_NULL(tmp)) goto err;
+    list2 = tmp;
+    np1 = NULL;
+
+    tmp = onig_node_new_alt(list2, alt);
+    if (IS_NULL(tmp)) goto err;
+    alt = tmp;
+    list2 = NULL;
+
+    tmp = onig_node_new_alt(list, alt);
+    if (IS_NULL(tmp)) goto err;
+    alt = tmp;
+    list = NULL;
+  }
+  else
+#endif /* USE_UNICODE_PROPERTIES */
+  {
+    /* PerlSyntax: (?s:.), RubySyntax: (?m:.) */
+    np1 = node_new_anychar();
+    if (IS_NULL(np1)) goto err;
+
+    option = env->option;
+    ONOFF(option, ONIG_OPTION_MULTILINE, 0);
+    tmp = node_new_option(option);
+    if (IS_NULL(tmp)) goto err;
+    NENCLOSE(tmp)->target = np1;
+    np1 = tmp;
+
+    alt = onig_node_new_alt(np1, NULL_NODE);
+    if (IS_NULL(alt)) goto err;
+    np1 = NULL;
+  }
+
+  /* \x0D\x0A */
+  r = ONIGENC_CODE_TO_MBC(env->enc, 0x0D, buf);
+  if (r < 0) goto err;
+  num1 = r;
+  r = ONIGENC_CODE_TO_MBC(env->enc, 0x0A, buf + num1);
+  if (r < 0) goto err;
+  np1 = node_new_str_raw(buf, buf + num1 + r);
+  if (IS_NULL(np1)) goto err;
+
+  tmp = onig_node_new_alt(np1, alt);
+  if (IS_NULL(tmp)) goto err;
+  alt = tmp;
+  np1 = NULL;
+
+  /* (?>\x0D\x0A|...) */
+  tmp = node_new_enclose(ENCLOSE_STOP_BACKTRACK);
+  if (IS_NULL(tmp)) goto err;
+  NENCLOSE(tmp)->target = alt;
+  np1 = tmp;
+
+#ifdef USE_UNICODE_PROPERTIES
+  if (ONIGENC_IS_UNICODE(env->enc)) {
+    /* Don't ignore case. */
+    option = env->option;
+    ONOFF(option, ONIG_OPTION_IGNORECASE, 1);
     *np = node_new_option(option);
     if (IS_NULL(*np)) goto err;
     NENCLOSE(*np)->target = np1;
   }
+  else
+#endif
+  {
+    *np = np1;
+  }
   return ONIG_NORMAL;
 
  err:
   onig_node_free(np1);
-  onig_node_free(np2);
-  onig_node_free(qn);
-  onig_node_free(list1);
+  onig_node_free(list);
   onig_node_free(list2);
+  onig_node_free(alt);
+  onig_node_free(alt2);
+  bbuf_free(pbuf1);
   return (r == 0) ? ONIGERR_MEMORY : r;
 }
@@ -5815,5 +6480,5 @@
       c = data[0];
       if (((c < SINGLE_BYTE_SIZE) && BITSET_AT(cc->bs, c))) {
-        /* skip if c is included in the bitset */
+	/* skip if c is included in the bitset */
 	c = not_found;
       }
@@ -5829,7 +6494,7 @@
     if (b1 != 0) {
       if (((b1 & (b1 - 1)) == 0) && (c == not_found)) {
-        c = BITS_IN_ROOM * i + countbits(b1 - 1);
+	c = BITS_IN_ROOM * i + countbits(b1 - 1);
       } else {
-        return 0;  /* the character class contains multiple chars */
+	return 0;  /* the character class contains multiple chars */
       }
     }
@@ -5876,5 +6541,8 @@
       env->option = NENCLOSE(*np)->option;
       r = fetch_token(tok, src, end, env);
-      if (r < 0) return r;
+      if (r < 0) {
+	env->option = prev;
+	return r;
+      }
       r = parse_subexp(&target, tok, term, src, end, env);
       env->option = prev;
@@ -5949,5 +6617,5 @@
       while (1) {
 	if (len >= ONIGENC_MBC_MINLEN(env->enc)) {
-	  if (len == enclen(env->enc, NSTR(*np)->s)) {
+	  if (len == enclen(env->enc, NSTR(*np)->s, NSTR(*np)->end)) {
 	    r = fetch_token(tok, src, end, env);
 	    NSTRING_CLEAR_RAW(*np);
@@ -6029,67 +6697,11 @@
 	  CClassNode* cc;
 
-#ifdef USE_SHARED_CCLASS_TABLE
-          const OnigCodePoint *mbr;
-	  OnigCodePoint sb_out;
-
-          r = ONIGENC_GET_CTYPE_CODE_RANGE(env->enc, tok->u.prop.ctype,
-					   &sb_out, &mbr);
-          if (r == 0 &&
-              ! IS_ASCII_RANGE(env->option) &&
-              ONIGENC_CODE_RANGE_NUM(mbr)
-              >= THRESHOLD_RANGE_NUM_FOR_SHARE_CCLASS) {
-            type_cclass_key  key;
-            type_cclass_key* new_key;
-
-            key.enc  = env->enc;
-            key.not  = tok->u.prop.not;
-            key.type = tok->u.prop.ctype;
-
-            THREAD_ATOMIC_START;
-
-            if (IS_NULL(OnigTypeCClassTable)) {
-              OnigTypeCClassTable
-                = onig_st_init_table_with_size(&type_type_cclass_hash, 10);
-              if (IS_NULL(OnigTypeCClassTable)) {
-                THREAD_ATOMIC_END;
-                return ONIGERR_MEMORY;
-              }
-            }
-            else {
-              if (onig_st_lookup(OnigTypeCClassTable, (st_data_t )&key,
-                                 (st_data_t* )np)) {
-                THREAD_ATOMIC_END;
-                break;
-              }
-            }
-
-            *np = node_new_cclass_by_codepoint_range(tok->u.prop.not,
-						     sb_out, mbr);
-            if (IS_NULL(*np)) {
-              THREAD_ATOMIC_END;
-              return ONIGERR_MEMORY;
-            }
-
-            cc = NCCLASS(*np);
-            NCCLASS_SET_SHARE(cc);
-            new_key = (type_cclass_key* )xmalloc(sizeof(type_cclass_key));
-	    xmemcpy(new_key, &key, sizeof(type_cclass_key));
-            onig_st_add_direct(OnigTypeCClassTable, (st_data_t )new_key,
-                               (st_data_t )*np);
-
-            THREAD_ATOMIC_END;
-          }
-          else {
-#endif
-            *np = node_new_cclass();
-            CHECK_NULL_RETURN_MEMERR(*np);
-            cc = NCCLASS(*np);
-            r = add_ctype_to_cc(cc, tok->u.prop.ctype, 0,
-			    IS_ASCII_RANGE(env->option), env);
-	    if (r != 0) return r;
-            if (tok->u.prop.not != 0) NCCLASS_SET_NOT(cc);
-#ifdef USE_SHARED_CCLASS_TABLE
-          }
-#endif
+	  *np = node_new_cclass();
+	  CHECK_NULL_RETURN_MEMERR(*np);
+	  cc = NCCLASS(*np);
+	  r = add_ctype_to_cc(cc, tok->u.prop.ctype, 0,
+	      IS_ASCII_RANGE(env->option), env);
+	  if (r != 0) return r;
+	  if (tok->u.prop.not != 0) NCCLASS_SET_NOT(cc);
 	}
 	break;
@@ -6321,4 +6933,7 @@
 
   *top = NULL;
+  env->parse_depth++;
+  if (env->parse_depth > ParseDepthLimit)
+    return ONIGERR_PARSE_DEPTH_LIMIT_OVER;
   r = parse_branch(&node, tok, term, src, end, env);
   if (r < 0) {
@@ -6358,4 +6973,5 @@
   }
 
+  env->parse_depth--;
   return r;
 }
Index: EcnlProtoTool/trunk/onigmo-6.1.3/src/regparse.h
===================================================================
--- EcnlProtoTool/trunk/onigmo-5.15.0/src/regparse.h	(revision 321)
+++ EcnlProtoTool/trunk/onigmo-6.1.3/src/regparse.h	(revision 331)
@@ -1,4 +1,4 @@
-#ifndef REGPARSE_H
-#define REGPARSE_H
+#ifndef ONIGMO_REGPARSE_H
+#define ONIGMO_REGPARSE_H
 /**********************************************************************
   regparse.h -  Onigmo (Oniguruma-mod) (regular expression library)
@@ -6,5 +6,5 @@
 /*-
  * Copyright (c) 2002-2007  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
- * Copyright (c) 2011       K.Takata  <kentkt AT csc DOT jp>
+ * Copyright (c) 2011-2016  K.Takata  <kentkt AT csc DOT jp>
  * All rights reserved.
  *
@@ -33,4 +33,6 @@
 #include "regint.h"
 
+RUBY_SYMBOL_EXPORT_BEGIN
+
 /* node type */
 #define NT_STR         0
@@ -94,4 +96,5 @@
 #define ENCLOSE_STOP_BACKTRACK   (1<<2)
 #define ENCLOSE_CONDITION        (1<<3)
+#define ENCLOSE_ABSENT           (1<<4)
 
 #define NODE_STR_MARGIN         16
@@ -289,5 +292,5 @@
   OnigCaseFoldType case_fold_flag;
   OnigEncoding     enc;
-  OnigSyntaxType*  syntax;
+  const OnigSyntaxType* syntax;
   BitStatusType    capture_history;
   BitStatusType    bt_mem_start;
@@ -316,4 +319,10 @@
   int has_recursion;
 #endif
+  unsigned int parse_depth;
+  int warnings_flag;
+#ifdef RUBY
+  const char* sourcefile;
+  int sourceline;
+#endif
 } ScanEnv;
 
@@ -328,33 +337,34 @@
 } GroupNumRemap;
 
-extern int    onig_renumber_name_table P_((regex_t* reg, GroupNumRemap* map));
-#endif
-
-extern int    onig_strncmp P_((const UChar* s1, const UChar* s2, int n));
-extern void   onig_strcpy P_((UChar* dest, const UChar* src, const UChar* end));
-extern void   onig_scan_env_set_error_string P_((ScanEnv* env, int ecode, UChar* arg, UChar* arg_end));
-extern int    onig_scan_unsigned_number P_((UChar** src, const UChar* end, OnigEncoding enc));
-extern void   onig_reduce_nested_quantifier P_((Node* pnode, Node* cnode));
-extern void   onig_node_conv_to_str_node P_((Node* node, int raw));
-extern int    onig_node_str_cat P_((Node* node, const UChar* s, const UChar* end));
-extern int    onig_node_str_set P_((Node* node, const UChar* s, const UChar* end));
-extern void   onig_node_free P_((Node* node));
-extern Node*  onig_node_new_enclose P_((int type));
-extern Node*  onig_node_new_anchor P_((int type));
-extern Node*  onig_node_new_str P_((const UChar* s, const UChar* end));
-extern Node*  onig_node_new_list P_((Node* left, Node* right));
-extern Node*  onig_node_list_add P_((Node* list, Node* x));
-extern Node*  onig_node_new_alt P_((Node* left, Node* right));
-extern void   onig_node_str_clear P_((Node* node));
-extern int    onig_free_node_list P_((void));
-extern int    onig_names_free P_((regex_t* reg));
-extern int    onig_parse_make_tree P_((Node** root, const UChar* pattern, const UChar* end, regex_t* reg, ScanEnv* env));
-extern int    onig_free_shared_cclass_table P_((void));
+extern int    onig_renumber_name_table(regex_t* reg, GroupNumRemap* map);
+#endif
+
+extern int    onig_strncmp(const UChar* s1, const UChar* s2, int n);
+extern void   onig_strcpy(UChar* dest, const UChar* src, const UChar* end);
+extern void   onig_scan_env_set_error_string(ScanEnv* env, int ecode, UChar* arg, UChar* arg_end);
+extern int    onig_scan_unsigned_number(UChar** src, const UChar* end, OnigEncoding enc);
+extern void   onig_reduce_nested_quantifier(Node* pnode, Node* cnode);
+extern void   onig_node_conv_to_str_node(Node* node, int raw);
+extern int    onig_node_str_cat(Node* node, const UChar* s, const UChar* end);
+extern int    onig_node_str_set(Node* node, const UChar* s, const UChar* end);
+extern void   onig_node_free(Node* node);
+extern Node*  onig_node_new_enclose(int type);
+extern Node*  onig_node_new_anchor(int type);
+extern Node*  onig_node_new_str(const UChar* s, const UChar* end);
+extern Node*  onig_node_new_list(Node* left, Node* right);
+extern Node*  onig_node_list_add(Node* list, Node* x);
+extern Node*  onig_node_new_alt(Node* left, Node* right);
+extern void   onig_node_str_clear(Node* node);
+extern int    onig_names_free(regex_t* reg);
+extern int    onig_parse_make_tree(Node** root, const UChar* pattern, const UChar* end, regex_t* reg, ScanEnv* env);
+extern int    onig_free_shared_cclass_table(void);
 
 #ifdef ONIG_DEBUG
-#ifdef USE_NAMED_GROUP
+# ifdef USE_NAMED_GROUP
 extern int onig_print_names(FILE*, regex_t*);
-#endif
-#endif
-
-#endif /* REGPARSE_H */
+# endif
+#endif
+
+RUBY_SYMBOL_EXPORT_END
+
+#endif /* ONIGMO_REGPARSE_H */
Index: EcnlProtoTool/trunk/onigmo-6.1.3/src/regposerr.c
===================================================================
--- EcnlProtoTool/trunk/onigmo-5.15.0/src/regposerr.c	(revision 321)
+++ EcnlProtoTool/trunk/onigmo-6.1.3/src/regposerr.c	(revision 331)
@@ -1,7 +1,8 @@
 /**********************************************************************
-  regposerr.c - Oniguruma (regular expression library)
+  regposerr.c - Onigmo (Oniguruma-mod) (regular expression library)
 **********************************************************************/
 /*-
  * Copyright (c) 2002-2007  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2011-2016  K.Takata  <kentkt AT csc DOT jp>
  * All rights reserved.
  *
@@ -29,16 +30,19 @@
 
 #include "config.h"
-#include "onigposix.h"
+#include "onigmoposix.h"
+#include <string.h>
 
-#ifdef HAVE_STRING_H
-# include <string.h>
+#if defined(__GNUC__)
+# define ARG_UNUSED  __attribute__ ((unused))
 #else
-# include <strings.h>
+# define ARG_UNUSED
 #endif
 
-#if defined(__GNUC__)
-#  define ARG_UNUSED  __attribute__ ((unused))
+#if defined(_WIN32) && !defined(__GNUC__)
+# define xsnprintf   sprintf_s
+# define xstrncpy(dest,src,size)   strncpy_s(dest,size,src,_TRUNCATE)
 #else
-#  define ARG_UNUSED
+# define xsnprintf   snprintf
+# define xstrncpy    strncpy
 #endif
 
@@ -65,5 +69,4 @@
   "invalid wide char value",                 /* REG_EONIG_BADWC    */
   "invalid argument",                        /* REG_EONIG_BADARG   */
-  "multi-thread error"                       /* REG_EONIG_THREAD   */
 };
 
@@ -87,5 +90,5 @@
   }
   else {
-    sprintf(tbuf, "undefined error code (%d)", posix_ecode);
+    xsnprintf(tbuf, sizeof(tbuf), "undefined error code (%d)", posix_ecode);
     s = tbuf;
   }
@@ -94,5 +97,5 @@
 
   if (buf != NULL && size > 0) {
-    strncpy(buf, s, size - 1);
+    xstrncpy(buf, s, size - 1);
     buf[size - 1] = '\0';
   }
Index: EcnlProtoTool/trunk/onigmo-6.1.3/src/regposix.c
===================================================================
--- EcnlProtoTool/trunk/onigmo-5.15.0/src/regposix.c	(revision 321)
+++ EcnlProtoTool/trunk/onigmo-6.1.3/src/regposix.c	(revision 331)
@@ -4,5 +4,5 @@
 /*-
  * Copyright (c) 2002-2008  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
- * Copyright (c) 2011       K.Takata  <kentkt AT csc DOT jp>
+ * Copyright (c) 2011-2016  K.Takata  <kentkt AT csc DOT jp>
  * All rights reserved.
  *
@@ -32,5 +32,5 @@
 #include "regint.h"
 #undef regex_t
-#include "onigposix.h"
+#include "onigmoposix.h"
 
 #define ONIG_C(reg)    ((onig_regex_t* )((reg)->onig))
@@ -116,5 +116,4 @@
     { ONIGERR_INVALID_CHAR_PROPERTY_NAME,                 REG_BADPAT },
     { ONIGERR_NOT_SUPPORTED_ENCODING_COMBINATION,         REG_EONIG_BADARG },
-    { ONIGERR_OVER_THREAD_PASS_LIMIT_COUNT,               REG_EONIG_THREAD }
 
   };
@@ -136,5 +135,5 @@
 {
   int r, len;
-  OnigSyntaxType* syntax = OnigDefaultSyntax;
+  const OnigSyntaxType* syntax = OnigDefaultSyntax;
   OnigOptionType options;
 
@@ -170,23 +169,18 @@
   int r, i, len;
   UChar* end;
-  regmatch_t* pm;
+  OnigRegion* region = NULL;
   OnigOptionType options;
 
-  options = ONIG_OPTION_POSIX_REGION;
+  options = ONIG_OPTION_NONE;
   if ((posix_options & REG_NOTBOL) != 0) options |= ONIG_OPTION_NOTBOL;
   if ((posix_options & REG_NOTEOL) != 0) options |= ONIG_OPTION_NOTEOL;
 
-  if (nmatch == 0 || (reg->comp_options & REG_NOSUB) != 0) {
-    pm = (regmatch_t* )NULL;
+  if ((reg->comp_options & REG_NOSUB) != 0) {
     nmatch = 0;
   }
-  else if ((int )nmatch < ONIG_C(reg)->num_mem + 1) {
-    pm = (regmatch_t* )xmalloc(sizeof(regmatch_t)
-                               * (ONIG_C(reg)->num_mem + 1));
-    if (pm == NULL)
+  else if (nmatch != 0) {
+    region = onig_region_new();
+    if (region == NULL)
       return REG_ESPACE;
-  }
-  else {
-    pm = pmatch;
   }
 
@@ -194,10 +188,11 @@
   end = (UChar* )(str + len);
   r = (int )onig_search(ONIG_C(reg), (UChar* )str, end, (UChar* )str, end,
-		  (OnigRegion* )pm, options);
+		  region, options);
 
   if (r >= 0) {
     r = 0; /* Match */
-    if (pm != pmatch && pm != NULL) {
-      xmemcpy(pmatch, pm, sizeof(regmatch_t) * nmatch);
+    for (i = 0; i < (int )nmatch; i++) {
+      pmatch[i].rm_so = (regoff_t )region->beg[i];
+      pmatch[i].rm_eo = (regoff_t )region->end[i];
     }
   }
@@ -211,6 +206,6 @@
   }
 
-  if (pm != pmatch && pm != NULL)
-    xfree(pm);
+  if (region != NULL)
+    onig_region_free(region, 1);
 
 #if 0
@@ -238,5 +233,4 @@
     enc = ONIG_ENCODING_ASCII;
     break;
-#if 0
   case REG_POSIX_ENCODING_EUC_JP:
     enc = ONIG_ENCODING_EUC_JP;
@@ -245,9 +239,7 @@
     enc = ONIG_ENCODING_SJIS;
     break;
-#endif
   case REG_POSIX_ENCODING_UTF8:
     enc = ONIG_ENCODING_UTF8;
     break;
-#if 0
   case REG_POSIX_ENCODING_UTF16_BE:
     enc = ONIG_ENCODING_UTF16_BE;
@@ -256,5 +248,5 @@
     enc = ONIG_ENCODING_UTF16_LE;
     break;
-#endif
+
   default:
     return ;
Index: EcnlProtoTool/trunk/onigmo-6.1.3/src/regsyntax.c
===================================================================
--- EcnlProtoTool/trunk/onigmo-5.15.0/src/regsyntax.c	(revision 321)
+++ EcnlProtoTool/trunk/onigmo-6.1.3/src/regsyntax.c	(revision 331)
@@ -4,5 +4,5 @@
 /*-
  * Copyright (c) 2002-2006  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
- * Copyright (c) 2011-2012  K.Takata  <kentkt AT csc DOT jp>
+ * Copyright (c) 2011-2016  K.Takata  <kentkt AT csc DOT jp>
  * All rights reserved.
  *
@@ -31,5 +31,5 @@
 #include "regint.h"
 
-OnigSyntaxType OnigSyntaxASIS = {
+const OnigSyntaxType OnigSyntaxASIS = {
     0
   , ONIG_SYN_OP2_INEFFECTIVE_ESCAPE
@@ -47,5 +47,5 @@
 };
 
-OnigSyntaxType OnigSyntaxPosixBasic = {
+const OnigSyntaxType OnigSyntaxPosixBasic = {
   ( SYN_POSIX_COMMON_OP | ONIG_SYN_OP_ESC_LPAREN_SUBEXP |
     ONIG_SYN_OP_ESC_BRACE_INTERVAL )
@@ -64,5 +64,5 @@
 };
 
-OnigSyntaxType OnigSyntaxPosixExtended = {
+const OnigSyntaxType OnigSyntaxPosixExtended = {
   ( SYN_POSIX_COMMON_OP | ONIG_SYN_OP_LPAREN_SUBEXP |
     ONIG_SYN_OP_BRACE_INTERVAL |
@@ -85,5 +85,5 @@
 };
 
-OnigSyntaxType OnigSyntaxEmacs = {
+const OnigSyntaxType OnigSyntaxEmacs = {
   ( ONIG_SYN_OP_DOT_ANYCHAR | ONIG_SYN_OP_BRACKET_CC |
     ONIG_SYN_OP_ESC_BRACE_INTERVAL |
@@ -106,5 +106,5 @@
 };
 
-OnigSyntaxType OnigSyntaxGrep = {
+const OnigSyntaxType OnigSyntaxGrep = {
   ( ONIG_SYN_OP_DOT_ANYCHAR | ONIG_SYN_OP_BRACKET_CC | ONIG_SYN_OP_POSIX_BRACKET |
     ONIG_SYN_OP_ESC_BRACE_INTERVAL | ONIG_SYN_OP_ESC_LPAREN_SUBEXP |
@@ -128,5 +128,5 @@
 };
 
-OnigSyntaxType OnigSyntaxGnuRegex = {
+const OnigSyntaxType OnigSyntaxGnuRegex = {
   SYN_GNU_REGEX_OP
   , 0
@@ -144,5 +144,5 @@
 };
 
-OnigSyntaxType OnigSyntaxJava = {
+const OnigSyntaxType OnigSyntaxJava = {
   (( SYN_GNU_REGEX_OP | ONIG_SYN_OP_QMARK_NON_GREEDY |
      ONIG_SYN_OP_ESC_CONTROL_CHARS | ONIG_SYN_OP_ESC_C_CONTROL |
@@ -169,5 +169,5 @@
 
 /* Perl 5.8 */
-OnigSyntaxType OnigSyntaxPerl58 = {
+const OnigSyntaxType OnigSyntaxPerl58 = {
   (( SYN_GNU_REGEX_OP | ONIG_SYN_OP_QMARK_NON_GREEDY |
      ONIG_SYN_OP_ESC_OCTAL3 | ONIG_SYN_OP_ESC_X_HEX2 |
@@ -195,5 +195,5 @@
 
 /* Perl 5.8 + named group */
-OnigSyntaxType OnigSyntaxPerl58_NG = {
+const OnigSyntaxType OnigSyntaxPerl58_NG = {
   (( SYN_GNU_REGEX_OP | ONIG_SYN_OP_QMARK_NON_GREEDY |
      ONIG_SYN_OP_ESC_OCTAL3 | ONIG_SYN_OP_ESC_X_HEX2 |
@@ -226,9 +226,9 @@
 
 /* Perl 5.10+ */
-OnigSyntaxType OnigSyntaxPerl = {
+const OnigSyntaxType OnigSyntaxPerl = {
   (( SYN_GNU_REGEX_OP | ONIG_SYN_OP_QMARK_NON_GREEDY |
      ONIG_SYN_OP_ESC_OCTAL3 | ONIG_SYN_OP_ESC_X_HEX2 |
      ONIG_SYN_OP_ESC_X_BRACE_HEX8 | ONIG_SYN_OP_ESC_CONTROL_CHARS |
-     ONIG_SYN_OP_ESC_C_CONTROL )
+     ONIG_SYN_OP_ESC_O_BRACE_OCTAL | ONIG_SYN_OP_ESC_C_CONTROL )
    & ~ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END )
   , ( ONIG_SYN_OP2_ESC_CAPITAL_Q_QUOTE |
@@ -249,5 +249,6 @@
   , ( SYN_GNU_REGEX_BV |
       ONIG_SYN_ALLOW_MULTIPLEX_DEFINITION_NAME |
-      ONIG_SYN_ALLOW_MULTIPLEX_DEFINITION_NAME_CALL )
+      ONIG_SYN_ALLOW_MULTIPLEX_DEFINITION_NAME_CALL |
+      ONIG_SYN_USE_LEFT_MOST_NAMED_GROUP )
   , ( ONIG_OPTION_SINGLELINE | ONIG_OPTION_CAPTURE_GROUP )
   ,
@@ -262,5 +263,5 @@
 };
 
-OnigSyntaxType OnigSyntaxPython = {
+const OnigSyntaxType OnigSyntaxPython = {
   (( SYN_GNU_REGEX_OP | ONIG_SYN_OP_QMARK_NON_GREEDY |
      ONIG_SYN_OP_ESC_OCTAL3 | ONIG_SYN_OP_ESC_X_HEX2 |
@@ -293,5 +294,5 @@
 
 extern int
-onig_set_default_syntax(OnigSyntaxType* syntax)
+onig_set_default_syntax(const OnigSyntaxType* syntax)
 {
   if (IS_NULL(syntax))
@@ -333,5 +334,5 @@
 
 extern unsigned int
-onig_get_syntax_op(OnigSyntaxType* syntax)
+onig_get_syntax_op(const OnigSyntaxType* syntax)
 {
   return syntax->op;
@@ -339,5 +340,5 @@
 
 extern unsigned int
-onig_get_syntax_op2(OnigSyntaxType* syntax)
+onig_get_syntax_op2(const OnigSyntaxType* syntax)
 {
   return syntax->op2;
@@ -345,5 +346,5 @@
 
 extern unsigned int
-onig_get_syntax_behavior(OnigSyntaxType* syntax)
+onig_get_syntax_behavior(const OnigSyntaxType* syntax)
 {
   return syntax->behavior;
@@ -351,5 +352,5 @@
 
 extern OnigOptionType
-onig_get_syntax_options(OnigSyntaxType* syntax)
+onig_get_syntax_options(const OnigSyntaxType* syntax)
 {
   return syntax->options;
Index: EcnlProtoTool/trunk/onigmo-6.1.3/src/regversion.c
===================================================================
--- EcnlProtoTool/trunk/onigmo-5.15.0/src/regversion.c	(revision 321)
+++ EcnlProtoTool/trunk/onigmo-6.1.3/src/regversion.c	(revision 331)
@@ -3,6 +3,6 @@
 **********************************************************************/
 /*-
- * Copyright (c) 2002-2009  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
- * Copyright (c) 2011-2014  K.Takata  <kentkt AT csc DOT jp>
+ * Copyright (c) 2002-2016  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
+ * Copyright (c) 2011-2017  K.Takata  <kentkt AT csc DOT jp>
  * All rights reserved.
  *
@@ -29,17 +29,17 @@
  */
 
-#include "config.h"
-#include "oniguruma.h"
-#include <stdio.h>
+#include "onigmo.h"
+
+#define TOSTR_(a)	#a
+#define ONIG_VERSION_TOSTR_(a,b,c)	\
+	TOSTR_(a) "." TOSTR_(b) "." TOSTR_(c)
+#define ONIG_VERSION_STRING	\
+	ONIG_VERSION_TOSTR_(ONIGMO_VERSION_MAJOR, ONIGMO_VERSION_MINOR, ONIGMO_VERSION_TEENY)
 
 extern const char*
 onig_version(void)
 {
-  static char s[12];
+  const char *s = ONIG_VERSION_STRING;
 
-  sprintf(s, "%d.%d.%d",
-          ONIGURUMA_VERSION_MAJOR,
-          ONIGURUMA_VERSION_MINOR,
-          ONIGURUMA_VERSION_TEENY);
   return s;
 }
@@ -48,11 +48,8 @@
 onig_copyright(void)
 {
-  static char s[80];
+  const char *s =
+    "Onigmo " ONIG_VERSION_STRING " : Copyright (C) 2002-2016 K.Kosako, "
+    "2011-2017 K.Takata";
 
-  sprintf(s, "Onigmo %d.%d.%d : Copyright (C) 2002-2009 K.Kosako, "
-	     "2011-2014 K.Takata",
-          ONIGURUMA_VERSION_MAJOR,
-          ONIGURUMA_VERSION_MINOR,
-          ONIGURUMA_VERSION_TEENY);
   return s;
 }
Index: EcnlProtoTool/trunk/onigmo-6.1.3/src/st.c
===================================================================
--- EcnlProtoTool/trunk/onigmo-5.15.0/src/st.c	(revision 321)
+++ EcnlProtoTool/trunk/onigmo-6.1.3/src/st.c	(revision 331)
@@ -1,578 +1,2000 @@
-/* This is a public domain general purpose hash table package written by Peter Moore @ UCB. */
-
-/* static	char	sccsid[] = "@(#) st.c 5.1 89/12/14 Crucible"; */
+/* This is a public domain general purpose hash table package
+   originally written by Peter Moore @ UCB.
+
+   The hash table data structures were redesigned and the package was
+   rewritten by Vladimir Makarov <vmakarov@redhat.com>.  */
+
+/* The original package implemented classic bucket-based hash tables
+   with entries doubly linked for an access by their insertion order.
+   To decrease pointer chasing and as a consequence to improve a data
+   locality the current implementation is based on storing entries in
+   an array and using hash tables with open addressing.  The current
+   entries are more compact in comparison with the original ones and
+   this also improves the data locality.
+
+   The hash table has two arrays called *bins* and *entries*.
+
+     bins:
+    -------
+   |       |                  entries array:
+   |-------|            --------------------------------
+   | index |           |      | entry:  |        |      |
+   |-------|           |      |         |        |      |
+   | ...   |           | ...  | hash    |  ...   | ...  |
+   |-------|           |      | key     |        |      |
+   | empty |           |      | record  |        |      |
+   |-------|            --------------------------------
+   | ...   |                   ^                  ^
+   |-------|                   |_ entries start   |_ entries bound
+   |deleted|
+    -------
+
+   o The entry array contains table entries in the same order as they
+     were inserted.
+
+     When the first entry is deleted, a variable containing index of
+     the current first entry (*entries start*) is changed.  In all
+     other cases of the deletion, we just mark the entry as deleted by
+     using a reserved hash value.
+
+     Such organization of the entry storage makes operations of the
+     table shift and the entries traversal very fast.
+
+   o The bins provide access to the entries by their keys.  The
+     key hash is mapped to a bin containing *index* of the
+     corresponding entry in the entry array.
+
+     The bin array size is always power of two, it makes mapping very
+     fast by using the corresponding lower bits of the hash.
+     Generally it is not a good idea to ignore some part of the hash.
+     But alternative approach is worse.  For example, we could use a
+     modulo operation for mapping and a prime number for the size of
+     the bin array.  Unfortunately, the modulo operation for big
+     64-bit numbers are extremely slow (it takes more than 100 cycles
+     on modern Intel CPUs).
+
+     Still other bits of the hash value are used when the mapping
+     results in a collision.  In this case we use a secondary hash
+     value which is a result of a function of the collision bin
+     index and the original hash value.  The function choice
+     guarantees that we can traverse all bins and finally find the
+     corresponding bin as after several iterations the function
+     becomes a full cycle linear congruential generator because it
+     satisfies requirements of the Hull-Dobell theorem.
+
+     When an entry is removed from the table besides marking the
+     hash in the corresponding entry described above, we also mark
+     the bin by a special value in order to find entries which had
+     a collision with the removed entries.
+
+     There are two reserved values for the bins.  One denotes an
+     empty bin, another one denotes a bin for a deleted entry.
+
+   o The length of the bin array is at least two times more than the
+     entry array length.  This keeps the table load factor healthy.
+     The trigger of rebuilding the table is always a case when we can
+     not insert an entry anymore at the entries bound.  We could
+     change the entries bound too in case of deletion but than we need
+     a special code to count bins with corresponding deleted entries
+     and reset the bin values when there are too many bins
+     corresponding deleted entries
+
+     Table rebuilding is done by creation of a new entry array and
+     bins of an appropriate size.  We also try to reuse the arrays
+     in some cases by compacting the array and removing deleted
+     entries.
+
+   o To save memory very small tables have no allocated arrays
+     bins.  We use a linear search for an access by a key.
+
+   o To save more memory we use 8-, 16-, 32- and 64- bit indexes in
+     bins depending on the current hash table size.
+
+   This implementation speeds up the Ruby hash table benchmarks in
+   average by more 40% on Intel Haswell CPU.
+
+*/
+
+#ifdef RUBY
+#include "internal.h"
+#else
+#include "regint.h"
+#include "st.h"
+#endif
 
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
-
-#ifdef _WIN32
-#include <malloc.h>
-#endif
-
-#include "regint.h"
-#include "st.h"
-
-typedef struct st_table_entry st_table_entry;
+#include <assert.h>
+
+#ifdef __GNUC__
+#define PREFETCH(addr, write_p) __builtin_prefetch(addr, write_p)
+#define EXPECT(expr, val) __builtin_expect(expr, val)
+#define ATTRIBUTE_UNUSED  __attribute__((unused))
+#else
+#define PREFETCH(addr, write_p)
+#define EXPECT(expr, val) (expr)
+#define ATTRIBUTE_UNUSED
+#endif
+
+#ifdef ST_DEBUG
+#define st_assert(cond) assert(cond)
+#else
+#define st_assert(cond) ((void)(0 && (cond)))
+#endif
+
+/* The type of hashes.  */
+typedef st_index_t st_hash_t;
 
 struct st_table_entry {
-    unsigned int hash;
+    st_hash_t hash;
     st_data_t key;
     st_data_t record;
-    st_table_entry *next;
 };
 
-#define ST_DEFAULT_MAX_DENSITY 5
-#define ST_DEFAULT_INIT_TABLE_SIZE 11
-
-    /*
-     * DEFAULT_MAX_DENSITY is the default for the largest we allow the
-     * average number of items per bin before increasing the number of
-     * bins
-     *
-     * DEFAULT_INIT_TABLE_SIZE is the default for the number of bins
-     * allocated initially
-     *
-     */
-
-static int numcmp(long, long);
-static int numhash(long);
-static struct st_hash_type type_numhash = {
-    numcmp,
-    numhash,
+#ifdef RUBY
+#define type_numhash st_hashtype_num
+const struct st_hash_type st_hashtype_num = {
+    st_numcmp,
+    st_numhash,
 };
 
 /* extern int strcmp(const char *, const char *); */
-static int strhash(const char *);
-static struct st_hash_type type_strhash = {
+static st_index_t strhash(st_data_t);
+static const struct st_hash_type type_strhash = {
     strcmp,
     strhash,
 };
 
-static void rehash(st_table *);
-
-#define alloc(type) (type*)xmalloc((unsigned)sizeof(type))
-#define Calloc(n,s) (char*)xcalloc((n),(s))
-
-#define EQUAL(table,x,y) ((x)==(y) || (*table->type->compare)((x),(y)) == 0)
-
-#define do_hash(key,table) (unsigned int)(*(table)->type->hash)((key))
-#define do_hash_bin(key,table) (do_hash(key, table)%(table)->num_bins)
-
-/*
- * MINSIZE is the minimum size of a dictionary.
- */
-
-#define MINSIZE 8
-
-/*
-Table of prime numbers 2^n+a, 2<=n<=30.
-*/
-static const long primes[] = {
-	8 + 3,
-	16 + 3,
-	32 + 5,
-	64 + 3,
-	128 + 3,
-	256 + 27,
-	512 + 9,
-	1024 + 9,
-	2048 + 5,
-	4096 + 3,
-	8192 + 27,
-	16384 + 43,
-	32768 + 3,
-	65536 + 45,
-	131072 + 29,
-	262144 + 3,
-	524288 + 21,
-	1048576 + 7,
-	2097152 + 17,
-	4194304 + 15,
-	8388608 + 9,
-	16777216 + 43,
-	33554432 + 35,
-	67108864 + 15,
-	134217728 + 29,
-	268435456 + 3,
-	536870912 + 11,
-	1073741824 + 85,
-	0
+static st_index_t strcasehash(st_data_t);
+static const struct st_hash_type type_strcasehash = {
+    st_locale_insensitive_strcasecmp,
+    strcasehash,
 };
-
+#endif /* RUBY */
+
+/* Value used to catch uninitialized entries/bins during debugging.
+   There is a possibility for a false alarm, but its probability is
+   extremely small.  */
+#define ST_INIT_VAL 0xafafafafafafafaf
+#define ST_INIT_VAL_BYTE 0xafa
+
+#ifdef RUBY
+#undef malloc
+#undef realloc
+#undef calloc
+#undef free
+#define malloc ruby_xmalloc
+#define calloc ruby_xcalloc
+#define realloc ruby_xrealloc
+#define free ruby_xfree
+#else /* RUBY */
+#define MEMCPY(p1,p2,type,n)  memcpy((p1), (p2), sizeof(type)*(n))
+#endif /* RUBY */
+
+#define EQUAL(tab,x,y) ((x) == (y) || (*(tab)->type->compare)((x),(y)) == 0)
+#define PTR_EQUAL(tab, ptr, hash_val, key_) \
+    ((ptr)->hash == (hash_val) && EQUAL((tab), (key_), (ptr)->key))
+
+/* Features of a table.  */
+struct st_features {
+    /* Power of 2 used for number of allocated entries.  */
+    unsigned char entry_power;
+    /* Power of 2 used for number of allocated bins.  Depending on the
+       table size, the number of bins is 2-4 times more than the
+       number of entries.  */
+    unsigned char bin_power;
+    /* Enumeration of sizes of bins (8-bit, 16-bit etc).  */
+    unsigned char size_ind;
+    /* Bins are packed in words of type st_index_t.  The following is
+       a size of bins counted by words.  */
+    st_index_t bins_words;
+};
+
+/* Features of all possible size tables.  */
+#if SIZEOF_ST_INDEX_T == 8
+#define MAX_POWER2 62
+static const struct st_features features[] = {
+    {0, 1, 0, 0x0},
+    {1, 2, 0, 0x1},
+    {2, 3, 0, 0x1},
+    {3, 4, 0, 0x2},
+    {4, 5, 0, 0x4},
+    {5, 6, 0, 0x8},
+    {6, 7, 0, 0x10},
+    {7, 8, 0, 0x20},
+    {8, 9, 1, 0x80},
+    {9, 10, 1, 0x100},
+    {10, 11, 1, 0x200},
+    {11, 12, 1, 0x400},
+    {12, 13, 1, 0x800},
+    {13, 14, 1, 0x1000},
+    {14, 15, 1, 0x2000},
+    {15, 16, 1, 0x4000},
+    {16, 17, 2, 0x10000},
+    {17, 18, 2, 0x20000},
+    {18, 19, 2, 0x40000},
+    {19, 20, 2, 0x80000},
+    {20, 21, 2, 0x100000},
+    {21, 22, 2, 0x200000},
+    {22, 23, 2, 0x400000},
+    {23, 24, 2, 0x800000},
+    {24, 25, 2, 0x1000000},
+    {25, 26, 2, 0x2000000},
+    {26, 27, 2, 0x4000000},
+    {27, 28, 2, 0x8000000},
+    {28, 29, 2, 0x10000000},
+    {29, 30, 2, 0x20000000},
+    {30, 31, 2, 0x40000000},
+    {31, 32, 2, 0x80000000},
+    {32, 33, 3, 0x200000000},
+    {33, 34, 3, 0x400000000},
+    {34, 35, 3, 0x800000000},
+    {35, 36, 3, 0x1000000000},
+    {36, 37, 3, 0x2000000000},
+    {37, 38, 3, 0x4000000000},
+    {38, 39, 3, 0x8000000000},
+    {39, 40, 3, 0x10000000000},
+    {40, 41, 3, 0x20000000000},
+    {41, 42, 3, 0x40000000000},
+    {42, 43, 3, 0x80000000000},
+    {43, 44, 3, 0x100000000000},
+    {44, 45, 3, 0x200000000000},
+    {45, 46, 3, 0x400000000000},
+    {46, 47, 3, 0x800000000000},
+    {47, 48, 3, 0x1000000000000},
+    {48, 49, 3, 0x2000000000000},
+    {49, 50, 3, 0x4000000000000},
+    {50, 51, 3, 0x8000000000000},
+    {51, 52, 3, 0x10000000000000},
+    {52, 53, 3, 0x20000000000000},
+    {53, 54, 3, 0x40000000000000},
+    {54, 55, 3, 0x80000000000000},
+    {55, 56, 3, 0x100000000000000},
+    {56, 57, 3, 0x200000000000000},
+    {57, 58, 3, 0x400000000000000},
+    {58, 59, 3, 0x800000000000000},
+    {59, 60, 3, 0x1000000000000000},
+    {60, 61, 3, 0x2000000000000000},
+    {61, 62, 3, 0x4000000000000000},
+    {62, 63, 3, 0x8000000000000000},
+};
+
+#else
+#define MAX_POWER2 30
+
+static const struct st_features features[] = {
+    {0, 1, 0, 0x1},
+    {1, 2, 0, 0x1},
+    {2, 3, 0, 0x2},
+    {3, 4, 0, 0x4},
+    {4, 5, 0, 0x8},
+    {5, 6, 0, 0x10},
+    {6, 7, 0, 0x20},
+    {7, 8, 0, 0x40},
+    {8, 9, 1, 0x100},
+    {9, 10, 1, 0x200},
+    {10, 11, 1, 0x400},
+    {11, 12, 1, 0x800},
+    {12, 13, 1, 0x1000},
+    {13, 14, 1, 0x2000},
+    {14, 15, 1, 0x4000},
+    {15, 16, 1, 0x8000},
+    {16, 17, 2, 0x20000},
+    {17, 18, 2, 0x40000},
+    {18, 19, 2, 0x80000},
+    {19, 20, 2, 0x100000},
+    {20, 21, 2, 0x200000},
+    {21, 22, 2, 0x400000},
+    {22, 23, 2, 0x800000},
+    {23, 24, 2, 0x1000000},
+    {24, 25, 2, 0x2000000},
+    {25, 26, 2, 0x4000000},
+    {26, 27, 2, 0x8000000},
+    {27, 28, 2, 0x10000000},
+    {28, 29, 2, 0x20000000},
+    {29, 30, 2, 0x40000000},
+    {30, 31, 2, 0x80000000},
+};
+
+#endif
+
+/* The reserved hash value and its substitution.  */
+#define RESERVED_HASH_VAL (~(st_hash_t) 0)
+#define RESERVED_HASH_SUBSTITUTION_VAL ((st_hash_t) 0)
+
+/* Return hash value of KEY for table TAB.  */
+static inline st_hash_t
+do_hash(st_data_t key, st_table *tab)
+{
+    st_hash_t hash = (st_hash_t)(tab->type->hash)(key);
+
+    /* RESERVED_HASH_VAL is used for a deleted entry.  Map it into
+       another value.  Such mapping should be extremely rare.  */
+    return hash == RESERVED_HASH_VAL ? RESERVED_HASH_SUBSTITUTION_VAL : hash;
+}
+
+/* Power of 2 defining the minimal number of allocated entries.  */
+#define MINIMAL_POWER2 2
+
+#if MINIMAL_POWER2 < 2
+#error "MINIMAL_POWER2 should be >= 2"
+#endif
+
+/* If the power2 of the allocated `entries` is less than the following
+   value, don't allocate bins and use a linear search.  */
+#define MAX_POWER2_FOR_TABLES_WITHOUT_BINS 4
+
+/* Return smallest n >= MINIMAL_POWER2 such 2^n > SIZE.  */
 static int
-new_size(size)
-    int size;
-{
-    int i;
-
-#if 0
-    for (i=3; i<31; i++) {
-	if ((1<<i) > size) return 1<<i;
-    }
+get_power2(st_index_t size)
+{
+    unsigned int n;
+
+    for (n = 0; size != 0; n++)
+        size >>= 1;
+    if (n <= MAX_POWER2)
+        return n < MINIMAL_POWER2 ? MINIMAL_POWER2 : n;
+#ifdef RUBY
+    /* Ran out of the table entries */
+    rb_raise(rb_eRuntimeError, "st_table too big");
+#endif
+    /* should raise exception */
     return -1;
-#else
-    int newsize;
-
-    for (i = 0, newsize = MINSIZE;
-	 i < (int )(sizeof(primes)/sizeof(primes[0]));
-	 i++, newsize <<= 1)
+}
+
+/* Return value of N-th bin in array BINS of table with bins size
+   index S.  */
+static inline st_index_t
+get_bin(st_index_t *bins, int s, st_index_t n)
+{
+  return (s == 0 ? ((unsigned char *) bins)[n]
+	  : s == 1 ? ((unsigned short *) bins)[n]
+	  : s == 2 ? ((unsigned int *) bins)[n]
+	  : ((st_index_t *) bins)[n]);
+}
+
+/* Set up N-th bin in array BINS of table with bins size index S to
+   value V.  */
+static inline void
+set_bin(st_index_t *bins, int s, st_index_t n, st_index_t v)
+{
+    if (s == 0) ((unsigned char *) bins)[n] = (unsigned char) v;
+    else if (s == 1) ((unsigned short *) bins)[n] = (unsigned short) v;
+    else if (s == 2) ((unsigned int *) bins)[n] = (unsigned int) v;
+    else ((st_index_t *) bins)[n] = v;
+}
+
+/* These macros define reserved values for empty table bin and table
+   bin which contains a deleted entry.  We will never use such values
+   for an entry index in bins.  */
+#define EMPTY_BIN    0
+#define DELETED_BIN  1
+/* Base of a real entry index in the bins.  */
+#define ENTRY_BASE 2
+
+/* Mark I-th bin of table TAB as empty, in other words not
+   corresponding to any entry.  */
+#define MARK_BIN_EMPTY(tab, i) (set_bin((tab)->bins, get_size_ind(tab), i, EMPTY_BIN))
+
+/* Values used for not found entry and bin with given
+   characteristics.  */
+#define UNDEFINED_ENTRY_IND (~(st_index_t) 0)
+#define UNDEFINED_BIN_IND (~(st_index_t) 0)
+
+/* Mark I-th bin of table TAB as corresponding to a deleted table
+   entry.  Update number of entries in the table and number of bins
+   corresponding to deleted entries. */
+#define MARK_BIN_DELETED(tab, i)				\
+    do {                                                        \
+        st_assert(i != UNDEFINED_BIN_IND);			\
+	st_assert(! IND_EMPTY_OR_DELETED_BIN_P(tab, i)); 	\
+        set_bin((tab)->bins, get_size_ind(tab), i, DELETED_BIN); \
+    } while (0)
+
+/* Macros to check that value B is used empty bins and bins
+   corresponding deleted entries.  */
+#define EMPTY_BIN_P(b) ((b) == EMPTY_BIN)
+#define DELETED_BIN_P(b) ((b) == DELETED_BIN)
+#define EMPTY_OR_DELETED_BIN_P(b) ((b) <= DELETED_BIN)
+
+/* Macros to check empty bins and bins corresponding to deleted
+   entries.  Bins are given by their index I in table TAB.  */
+#define IND_EMPTY_BIN_P(tab, i) (EMPTY_BIN_P(get_bin((tab)->bins, get_size_ind(tab), i)))
+#define IND_DELETED_BIN_P(tab, i) (DELETED_BIN_P(get_bin((tab)->bins, get_size_ind(tab), i)))
+#define IND_EMPTY_OR_DELETED_BIN_P(tab, i) (EMPTY_OR_DELETED_BIN_P(get_bin((tab)->bins, get_size_ind(tab), i)))
+
+/* Macros for marking and checking deleted entries given by their
+   pointer E_PTR.  */
+#define MARK_ENTRY_DELETED(e_ptr) ((e_ptr)->hash = RESERVED_HASH_VAL)
+#define DELETED_ENTRY_P(e_ptr) ((e_ptr)->hash == RESERVED_HASH_VAL)
+
+/* Return bin size index of table TAB.  */
+static inline unsigned int
+get_size_ind(const st_table *tab)
+{
+    return tab->size_ind;
+}
+
+/* Return the number of allocated bins of table TAB.  */
+static inline st_index_t
+get_bins_num(const st_table *tab)
+{
+    return ((st_index_t) 1)<<tab->bin_power;
+}
+
+/* Return mask for a bin index in table TAB.  */
+static inline st_index_t
+bins_mask(const st_table *tab)
+{
+    return get_bins_num(tab) - 1;
+}
+
+/* Return the index of table TAB bin corresponding to
+   HASH_VALUE.  */
+static inline st_index_t
+hash_bin(st_hash_t hash_value, st_table *tab)
+{
+    return hash_value & bins_mask(tab);
+}
+
+/* Return the number of allocated entries of table TAB.  */
+static inline st_index_t
+get_allocated_entries(const st_table *tab)
+{
+    return ((st_index_t) 1)<<tab->entry_power;
+}
+
+/* Return size of the allocated bins of table TAB.  */
+static inline st_index_t
+bins_size(const st_table *tab)
+{
+    return features[tab->entry_power].bins_words * sizeof (st_index_t);
+}
+
+/* Mark all bins of table TAB as empty.  */
+static void
+initialize_bins(st_table *tab)
+{
+    memset(tab->bins, 0, bins_size(tab));
+}
+
+/* Make table TAB empty.  */
+static void
+make_tab_empty(st_table *tab)
+{
+    tab->num_entries = 0;
+    tab->entries_start = tab->entries_bound = 0;
+    if (tab->bins != NULL)
+        initialize_bins(tab);
+}
+
+#ifdef ST_DEBUG
+/* Check the table T consistency.  It can be extremely slow.  So use
+   it only for debugging.  */
+static void
+st_check(st_table *tab)
+{
+    st_index_t d, e, i, n, p;
+
+    for (p = get_allocated_entries(tab), i = 0; p > 1; i++, p>>=1)
+        ;
+    p = i;
+    assert(p >= MINIMAL_POWER2);
+    assert(tab->entries_bound <= get_allocated_entries(tab)
+	   && tab->entries_start <= tab->entries_bound);
+    n = 0;
+    return;
+    if (tab->entries_bound != 0)
+        for (i = tab->entries_start; i < tab->entries_bound; i++) {
+	    assert(tab->entries[i].hash != (st_hash_t) ST_INIT_VAL
+		   && tab->entries[i].key != ST_INIT_VAL
+		   && tab->entries[i].record != ST_INIT_VAL);
+	    if (! DELETED_ENTRY_P(&tab->entries[i]))
+	        n++;
+	}
+    assert(n == tab->num_entries);
+    if (tab->bins == NULL)
+        assert(p <= MAX_POWER2_FOR_TABLES_WITHOUT_BINS);
+    else {
+        assert(p > MAX_POWER2_FOR_TABLES_WITHOUT_BINS);
+	for (n = d = i = 0; i < get_bins_num(tab); i++) {
+	    assert(get_bin(tab->bins, tab->size_ind, i) != ST_INIT_VAL);
+	    if (IND_DELETED_BIN_P(tab, i)) {
+	        d++;
+		continue;
+	    }
+	    else if (IND_EMPTY_BIN_P(tab, i))
+	        continue;
+	    n++;
+	    e = get_bin(tab->bins, tab->size_ind, i) - ENTRY_BASE;
+	    assert(tab->entries_start <= e && e < tab->entries_bound);
+	    assert(! DELETED_ENTRY_P(&tab->entries[e]));
+	    assert(tab->entries[e].hash != (st_hash_t) ST_INIT_VAL
+		   && tab->entries[e].key != ST_INIT_VAL
+		   && tab->entries[e].record != ST_INIT_VAL);
+	}
+	assert(n == tab->num_entries);
+	assert(n + d < get_bins_num(tab));
+    }
+}
+#endif
+
+#ifdef HASH_LOG
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+static struct {
+    int all, total, num, str, strcase;
+}  collision;
+
+/* Flag switching off output of package statistics at the end of
+   program.  */
+static int init_st = 0;
+
+/* Output overall number of table searches and collisions into a
+   temporary file.  */
+static void
+stat_col(void)
+{
+    char fname[10+sizeof(long)*3];
+    FILE *f;
+    if (!collision.total) return;
+    f = fopen((snprintf(fname, sizeof(fname), "/tmp/col%ld", (long)getpid()), fname), "w");
+    if (f == 0) return ;
+
+    fprintf(f, "collision: %d / %d (%6.2f)\n", collision.all, collision.total,
+            ((double)collision.all / (collision.total)) * 100);
+    fprintf(f, "num: %d, str: %d, strcase: %d\n", collision.num, collision.str, collision.strcase);
+    fclose(f);
+}
+#endif
+
+/* Create and return table with TYPE which can hold at least SIZE
+   entries.  The real number of entries which the table can hold is
+   the nearest power of two for SIZE.  */
+st_table *
+st_init_table_with_size(const struct st_hash_type *type, st_index_t size)
+{
+    st_table *tab;
+    int n;
+
+#ifdef HASH_LOG
+#if HASH_LOG+0 < 0
     {
-	if (newsize > size) return primes[i];
-    }
-    /* Ran out of polynomials */
-    return -1;			/* should raise exception */
-#endif
-}
+        const char *e = getenv("ST_HASH_LOG");
+        if (!e || !*e) init_st = 1;
+    }
+#endif
+    if (init_st == 0) {
+        init_st = 1;
+        atexit(stat_col);
+    }
+#endif
+
+    n = get_power2(size);
+#ifndef RUBY
+    if (n < 0)
+	return NULL;
+#endif
+    tab = (st_table *) malloc(sizeof (st_table));
+    if (tab == NULL)
+	return NULL;
+    tab->type = type;
+    tab->entry_power = n;
+    tab->bin_power = features[n].bin_power;
+    tab->size_ind = features[n].size_ind;
+    if (n <= MAX_POWER2_FOR_TABLES_WITHOUT_BINS)
+        tab->bins = NULL;
+    else {
+        tab->bins = (st_index_t *) malloc(bins_size(tab));
+	if (tab->bins == NULL) {
+	    free(tab);
+	    return NULL;
+	}
+    }
+    tab->entries = (st_table_entry *) malloc(get_allocated_entries(tab)
+					     * sizeof(st_table_entry));
+    if (tab->entries == NULL) {
+	st_free_table(tab);
+	return NULL;
+    }
+#ifdef ST_DEBUG
+    memset(tab->entries, ST_INIT_VAL_BYTE,
+	   get_allocated_entries(tab) * sizeof(st_table_entry));
+    if (tab->bins != NULL)
+        memset(tab->bins, ST_INIT_VAL_BYTE, bins_size(tab));
+#endif
+    make_tab_empty(tab);
+    tab->rebuilds_num = 0;
+#ifdef ST_DEBUG
+    st_check(tab);
+#endif
+    return tab;
+}
+
+#ifdef RUBY
+/* Create and return table with TYPE which can hold a minimal number
+   of entries (see comments for get_power2).  */
+st_table *
+st_init_table(const struct st_hash_type *type)
+{
+    return st_init_table_with_size(type, 0);
+}
+
+/* Create and return table which can hold a minimal number of
+   numbers.  */
+st_table *
+st_init_numtable(void)
+{
+    return st_init_table(&type_numhash);
+}
+
+/* Create and return table which can hold SIZE numbers.  */
+st_table *
+st_init_numtable_with_size(st_index_t size)
+{
+    return st_init_table_with_size(&type_numhash, size);
+}
+
+/* Create and return table which can hold a minimal number of
+   strings.  */
+st_table *
+st_init_strtable(void)
+{
+    return st_init_table(&type_strhash);
+}
+
+/* Create and return table which can hold SIZE strings.  */
+st_table *
+st_init_strtable_with_size(st_index_t size)
+{
+    return st_init_table_with_size(&type_strhash, size);
+}
+
+/* Create and return table which can hold a minimal number of strings
+   whose character case is ignored.  */
+st_table *
+st_init_strcasetable(void)
+{
+    return st_init_table(&type_strcasehash);
+}
+
+/* Create and return table which can hold SIZE strings whose character
+   case is ignored.  */
+st_table *
+st_init_strcasetable_with_size(st_index_t size)
+{
+    return st_init_table_with_size(&type_strcasehash, size);
+}
+
+/* Make table TAB empty.  */
+void
+st_clear(st_table *tab)
+{
+    make_tab_empty(tab);
+    tab->rebuilds_num++;
+#ifdef ST_DEBUG
+    st_check(tab);
+#endif
+}
+#endif /* RUBY */
+
+/* Free table TAB space.  */
+void
+st_free_table(st_table *tab)
+{
+    if (tab->bins != NULL)
+        free(tab->bins);
+    free(tab->entries);
+    free(tab);
+}
+
+#ifdef RUBY
+/* Return byte size of memory allocted for table TAB.  */
+size_t
+st_memsize(const st_table *tab)
+{
+    return(sizeof(st_table)
+           + (tab->bins == NULL ? 0 : bins_size(tab))
+           + get_allocated_entries(tab) * sizeof(st_table_entry));
+}
+#endif /* RUBY */
+
+static st_index_t
+find_table_entry_ind(st_table *tab, st_hash_t hash_value, st_data_t key);
+
+static st_index_t
+find_table_bin_ind(st_table *tab, st_hash_t hash_value, st_data_t key);
+
+static st_index_t
+find_table_bin_ind_direct(st_table *table, st_hash_t hash_value, st_data_t key);
+
+static st_index_t
+find_table_bin_ptr_and_reserve(st_table *tab, st_hash_t *hash_value,
+			       st_data_t key, st_index_t *bin_ind);
 
 #ifdef HASH_LOG
-static int collision = 0;
-static int init_st = 0;
-
 static void
-stat_col()
-{
-    FILE *f = fopen("/tmp/col", "w");
-    fprintf(f, "collision: %d\n", collision);
-    fclose(f);
-}
-#endif
-
-st_table*
-st_init_table_with_size(type, size)
-    struct st_hash_type *type;
-    int size;
-{
-    st_table *tbl;
-
-#ifdef HASH_LOG
-    if (init_st == 0) {
-	init_st = 1;
-	atexit(stat_col);
-    }
-#endif
-
-    size = new_size(size);	/* round up to prime number */
-
-    tbl = alloc(st_table);
-    tbl->type = type;
-    tbl->num_entries = 0;
-    tbl->num_bins = size;
-    tbl->bins = (st_table_entry **)Calloc(size, sizeof(st_table_entry*));
-
-    return tbl;
-}
-
-st_table*
-st_init_table(type)
-    struct st_hash_type *type;
-{
-    return st_init_table_with_size(type, 0);
-}
-
-st_table*
-st_init_numtable(void)
-{
-    return st_init_table(&type_numhash);
-}
-
-st_table*
-st_init_numtable_with_size(size)
-    int size;
-{
-    return st_init_table_with_size(&type_numhash, size);
-}
-
-st_table*
-st_init_strtable(void)
-{
-    return st_init_table(&type_strhash);
-}
-
-st_table*
-st_init_strtable_with_size(size)
-    int size;
-{
-    return st_init_table_with_size(&type_strhash, size);
-}
-
+count_collision(const struct st_hash_type *type)
+{
+    collision.all++;
+    if (type == &type_numhash) {
+        collision.num++;
+    }
+    else if (type == &type_strhash) {
+        collision.strcase++;
+    }
+    else if (type == &type_strcasehash) {
+        collision.str++;
+    }
+}
+
+#define COLLISION (collision_check ? count_collision(tab->type) : (void)0)
+#define FOUND_BIN (collision_check ? collision.total++ : (void)0)
+#define collision_check 0
+#else
+#define COLLISION
+#define FOUND_BIN
+#endif
+
+/* If the number of entries in the table is at least REBUILD_THRESHOLD
+   times less than the entry array length, decrease the table
+   size.  */
+#define REBUILD_THRESHOLD 4
+
+#if REBUILD_THRESHOLD < 2
+#error "REBUILD_THRESHOLD should be >= 2"
+#endif
+
+/* Rebuild table TAB.  Rebuilding removes all deleted bins and entries
+   and can change size of the table entries and bins arrays.
+   Rebuilding is implemented by creation of a new table or by
+   compaction of the existing one.  */
+static void
+rebuild_table(st_table *tab)
+{
+    st_index_t i, ni, bound;
+    unsigned int size_ind;
+    st_table *new_tab;
+    st_table_entry *entries, *new_entries;
+    st_table_entry *curr_entry_ptr;
+    st_index_t *bins;
+    st_index_t bin_ind;
+
+    st_assert(tab != NULL);
+    bound = tab->entries_bound;
+    entries = tab->entries;
+    if ((2 * tab->num_entries <= get_allocated_entries(tab)
+	 && REBUILD_THRESHOLD * tab->num_entries > get_allocated_entries(tab))
+	|| tab->num_entries < (1 << MINIMAL_POWER2)) {
+        /* Compaction: */
+        tab->num_entries = 0;
+	if (tab->bins != NULL)
+	    initialize_bins(tab);
+	new_tab = tab;
+	new_entries = entries;
+    }
+    else {
+        new_tab = st_init_table_with_size(tab->type,
+					  2 * tab->num_entries - 1);
+	new_entries = new_tab->entries;
+    }
+    ni = 0;
+    bins = new_tab->bins;
+    size_ind = get_size_ind(new_tab);
+    for (i = tab->entries_start; i < bound; i++) {
+        curr_entry_ptr = &entries[i];
+	PREFETCH(entries + i + 1, 0);
+	if (EXPECT(DELETED_ENTRY_P(curr_entry_ptr), 0))
+	    continue;
+	if (&new_entries[ni] != curr_entry_ptr)
+	    new_entries[ni] = *curr_entry_ptr;
+	if (EXPECT(bins != NULL, 1)) {
+	    bin_ind = find_table_bin_ind_direct(new_tab, curr_entry_ptr->hash,
+						curr_entry_ptr->key);
+	    st_assert(bin_ind != UNDEFINED_BIN_IND
+		      && (tab == new_tab || new_tab->rebuilds_num == 0)
+		      && IND_EMPTY_BIN_P(new_tab, bin_ind));
+	    set_bin(bins, size_ind, bin_ind, ni + ENTRY_BASE);
+	}
+	new_tab->num_entries++;
+	ni++;
+    }
+    if (new_tab != tab) {
+        tab->entry_power = new_tab->entry_power;
+	tab->bin_power = new_tab->bin_power;
+	tab->size_ind = new_tab->size_ind;
+	st_assert (tab->num_entries == ni && new_tab->num_entries == ni);
+	if (tab->bins != NULL)
+	    free(tab->bins);
+	tab->bins = new_tab->bins;
+	free(tab->entries);
+	tab->entries = new_tab->entries;
+	free(new_tab);
+    }
+    tab->entries_start = 0;
+    tab->entries_bound = tab->num_entries;
+    tab->rebuilds_num++;
+#ifdef ST_DEBUG
+    st_check(tab);
+#endif
+}
+
+/* Return the next secondary hash index for table TAB using previous
+   index IND and PERTERB.  Finally modulo of the function becomes a
+   full *cycle linear congruential generator*, in other words it
+   guarantees traversing all table bins in extreme case.
+
+   According the Hull-Dobell theorem a generator
+   "Xnext = (a*Xprev + c) mod m" is a full cycle generator iff
+     o m and c are relatively prime
+     o a-1 is divisible by all prime factors of m
+     o a-1 is divisible by 4 if m is divisible by 4.
+
+   For our case a is 5, c is 1, and m is a power of two.  */
+static inline st_index_t
+secondary_hash(st_index_t ind, st_table *tab, st_index_t *perterb)
+{
+    *perterb >>= 11;
+    ind = (ind << 2) + ind + *perterb + 1;
+    return hash_bin(ind, tab);
+}
+
+/* Find an entry with HASH_VALUE and KEY in TABLE using a linear
+   search.  Return the index of the found entry in array `entries`.
+   If it is not found, return UNDEFINED_ENTRY_IND.  */
+static inline st_index_t
+find_entry(st_table *tab, st_hash_t hash_value, st_data_t key)
+{
+    st_index_t i, bound;
+    st_table_entry *entries;
+
+    bound = tab->entries_bound;
+    entries = tab->entries;
+    for (i = tab->entries_start; i < bound; i++) {
+	if (PTR_EQUAL(tab, &entries[i], hash_value, key))
+	    return i;
+    }
+    return UNDEFINED_ENTRY_IND;
+}
+
+/* Use the quadratic probing.  The method has a better data locality
+   but more collisions than the current approach.  In average it
+   results in a bit slower search.  */
+/*#define QUADRATIC_PROBE*/
+
+/* Return index of entry with HASH_VALUE and KEY in table TAB.  If
+   there is no such entry, return UNDEFINED_ENTRY_IND.  */
+static st_index_t
+find_table_entry_ind(st_table *tab, st_hash_t hash_value, st_data_t key)
+{
+    st_index_t ind;
+#ifdef QUADRATIC_PROBE
+    st_index_t d;
+#else
+    st_index_t peterb;
+#endif
+    st_index_t bin;
+    st_table_entry *entries = tab->entries;
+
+    st_assert(tab != NULL && tab->bins != NULL);
+    ind = hash_bin(hash_value, tab);
+#ifdef QUADRATIC_PROBE
+    d = 1;
+#else
+    peterb = hash_value;
+#endif
+    FOUND_BIN;
+    for (;;) {
+        bin = get_bin(tab->bins, get_size_ind(tab), ind);
+        if (! EMPTY_OR_DELETED_BIN_P(bin)
+            && PTR_EQUAL(tab, &entries[bin - ENTRY_BASE], hash_value, key))
+            break;
+        else if (EMPTY_BIN_P(bin))
+            return UNDEFINED_ENTRY_IND;
+#ifdef QUADRATIC_PROBE
+	ind = hash_bin(ind + d, tab);
+	d++;
+#else
+        ind = secondary_hash(ind, tab, &peterb);
+#endif
+        COLLISION;
+    }
+    return bin;
+}
+
+/* Find and return index of table TAB bin corresponding to an entry
+   with HASH_VALUE and KEY.  If there is no such bin, return
+   UNDEFINED_BIN_IND.  */
+static st_index_t
+find_table_bin_ind(st_table *tab, st_hash_t hash_value, st_data_t key)
+{
+    st_index_t ind;
+#ifdef QUADRATIC_PROBE
+    st_index_t d;
+#else
+    st_index_t peterb;
+#endif
+    st_index_t bin;
+    st_table_entry *entries = tab->entries;
+
+    st_assert(tab != NULL && tab->bins != NULL);
+    ind = hash_bin(hash_value, tab);
+#ifdef QUADRATIC_PROBE
+    d = 1;
+#else
+    peterb = hash_value;
+#endif
+    FOUND_BIN;
+    for (;;) {
+        bin = get_bin(tab->bins, get_size_ind(tab), ind);
+        if (! EMPTY_OR_DELETED_BIN_P(bin)
+            && PTR_EQUAL(tab, &entries[bin - ENTRY_BASE], hash_value, key))
+            break;
+        else if (EMPTY_BIN_P(bin))
+            return UNDEFINED_BIN_IND;
+#ifdef QUADRATIC_PROBE
+	ind = hash_bin(ind + d, tab);
+	d++;
+#else
+        ind = secondary_hash(ind, tab, &peterb);
+#endif
+        COLLISION;
+    }
+    return ind;
+}
+
+/* Find and return index of table TAB bin corresponding to an entry
+   with HASH_VALUE and KEY.  The entry should be in the table
+   already.  */
+static st_index_t
+find_table_bin_ind_direct(st_table *tab, st_hash_t hash_value, st_data_t key)
+{
+    st_index_t ind;
+#ifdef QUADRATIC_PROBE
+    st_index_t d;
+#else
+    st_index_t peterb;
+#endif
+    st_index_t bin;
+    st_table_entry *entries = tab->entries;
+
+    st_assert(tab != NULL && tab->bins != NULL);
+    ind = hash_bin(hash_value, tab);
+#ifdef QUADRATIC_PROBE
+    d = 1;
+#else
+    peterb = hash_value;
+#endif
+    FOUND_BIN;
+    for (;;) {
+        bin = get_bin(tab->bins, get_size_ind(tab), ind);
+        if (EMPTY_OR_DELETED_BIN_P(bin))
+	    return ind;
+	st_assert (! PTR_EQUAL(tab, &entries[bin - ENTRY_BASE], hash_value, key));
+#ifdef QUADRATIC_PROBE
+	ind = hash_bin(ind + d, tab);
+	d++;
+#else
+        ind = secondary_hash(ind, tab, &peterb);
+#endif
+        COLLISION;
+    }
+}
+
+/* Return index of table TAB bin for HASH_VALUE and KEY through
+   BIN_IND and the pointed value as the function result.  Reserve the
+   bin for inclusion of the corresponding entry into the table if it
+   is not there yet.  We always find such bin as bins array length is
+   bigger entries array.  Although we can reuse a deleted bin, the
+   result bin value is always empty if the table has no entry with
+   KEY.  Return the entries array index of the found entry or
+   UNDEFINED_ENTRY_IND if it is not found.  */
+static st_index_t
+find_table_bin_ptr_and_reserve(st_table *tab, st_hash_t *hash_value,
+			       st_data_t key, st_index_t *bin_ind) {
+    st_index_t ind;
+    st_hash_t curr_hash_value = *hash_value;
+#ifdef QUADRATIC_PROBE
+    st_index_t d;
+#else
+    st_index_t peterb;
+#endif
+    st_index_t entry_index;
+    st_index_t first_deleted_bin_ind;
+    st_table_entry *entries;
+
+    st_assert(tab != NULL && tab->bins != NULL
+	      && tab->entries_bound <= get_allocated_entries(tab)
+	      && tab->entries_start <= tab->entries_bound);
+    ind = hash_bin(curr_hash_value, tab);
+#ifdef QUADRATIC_PROBE
+    d = 1;
+#else
+    peterb = curr_hash_value;
+#endif
+    FOUND_BIN;
+    first_deleted_bin_ind = UNDEFINED_BIN_IND;
+    entries = tab->entries;
+    for (;;) {
+        entry_index = get_bin(tab->bins, get_size_ind(tab), ind);
+        if (EMPTY_BIN_P(entry_index)) {
+            tab->num_entries++;
+	    entry_index = UNDEFINED_ENTRY_IND;
+            if (first_deleted_bin_ind != UNDEFINED_BIN_IND) {
+                /* We can reuse bin of a deleted entry.  */
+                ind = first_deleted_bin_ind;
+                MARK_BIN_EMPTY(tab, ind);
+            }
+            break;
+        } else if (! DELETED_BIN_P(entry_index)) {
+            if (PTR_EQUAL(tab, &entries[entry_index - ENTRY_BASE], curr_hash_value, key))
+                break;
+        } else if (first_deleted_bin_ind == UNDEFINED_BIN_IND)
+            first_deleted_bin_ind = ind;
+#ifdef QUADRATIC_PROBE
+	ind = hash_bin(ind + d, tab);
+	d++;
+#else
+        ind = secondary_hash(ind, tab, &peterb);
+#endif
+        COLLISION;
+    }
+    *bin_ind = ind;
+    return entry_index;
+}
+
+/* Find an entry with KEY in table TAB.  Return non-zero if we found
+   it.  Set up *RECORD to the found entry record.  */
+int
+st_lookup(st_table *tab, st_data_t key, st_data_t *value)
+{
+    st_index_t bin;
+    st_hash_t hash = do_hash(key, tab);
+
+    if (tab->bins == NULL) {
+        bin = find_entry(tab, hash, key);
+	if (bin == UNDEFINED_ENTRY_IND)
+	    return 0;
+    } else {
+        bin = find_table_entry_ind(tab, hash, key);
+	if (bin == UNDEFINED_ENTRY_IND)
+	    return 0;
+	bin -= ENTRY_BASE;
+    }
+    if (value != 0)
+        *value = tab->entries[bin].record;
+    return 1;
+}
+
+#ifdef RUBY
+/* Find an entry with KEY in table TAB.  Return non-zero if we found
+   it.  Set up *RESULT to the found table entry key.  */
+int
+st_get_key(st_table *tab, st_data_t key, st_data_t *result)
+{
+    st_index_t bin;
+    st_hash_t hash = do_hash(key, tab);
+
+    if (tab->bins == NULL) {
+        bin = find_entry(tab, hash, key);
+	if (bin == UNDEFINED_ENTRY_IND)
+	    return 0;
+    } else {
+        bin = find_table_entry_ind(tab, hash, key);
+	if (bin == UNDEFINED_ENTRY_IND)
+	    return 0;
+	bin -= ENTRY_BASE;
+    }
+    if (result != 0)
+        *result = tab->entries[bin].key;
+    return 1;
+}
+#endif /* RUBY */
+
+/* Check the table and rebuild it if it is necessary.  */
+static inline void
+rebuild_table_if_necessary (st_table *tab)
+{
+    st_index_t bound = tab->entries_bound;
+
+    if (bound == get_allocated_entries(tab))
+        rebuild_table(tab);
+    st_assert(tab->entries_bound < get_allocated_entries(tab));
+}
+
+/* Insert (KEY, VALUE) into table TAB and return zero.  If there is
+   already entry with KEY in the table, return nonzero and and update
+   the value of the found entry.  */
+int
+st_insert(st_table *tab, st_data_t key, st_data_t value)
+{
+    st_table_entry *entry;
+    st_index_t bin;
+    st_index_t ind;
+    st_hash_t hash_value;
+    st_index_t bin_ind;
+    int new_p;
+
+    rebuild_table_if_necessary(tab);
+    hash_value = do_hash(key, tab);
+    if (tab->bins == NULL) {
+        bin = find_entry(tab, hash_value, key);
+	new_p = bin == UNDEFINED_ENTRY_IND;
+	if (new_p)
+	    tab->num_entries++;
+	bin_ind = UNDEFINED_BIN_IND;
+    } else {
+        bin = find_table_bin_ptr_and_reserve(tab, &hash_value,
+					     key, &bin_ind);
+	new_p = bin == UNDEFINED_ENTRY_IND;
+	bin -= ENTRY_BASE;
+    }
+    if (new_p) {
+        st_assert(tab->entries_bound < get_allocated_entries(tab));
+	ind = tab->entries_bound++;
+        entry = &tab->entries[ind];
+        entry->hash = hash_value;
+        entry->key = key;
+        entry->record = value;
+	if (bin_ind != UNDEFINED_BIN_IND)
+	    set_bin(tab->bins, get_size_ind(tab), bin_ind, ind + ENTRY_BASE);
+#ifdef ST_DEBUG
+	st_check(tab);
+#endif
+        return 0;
+    }
+    tab->entries[bin].record = value;
+#ifdef ST_DEBUG
+    st_check(tab);
+#endif
+    return 1;
+}
+
+#ifdef RUBY
+/* Insert (KEY, VALUE, HASH) into table TAB.  The table should not have
+   entry with KEY before the insertion.  */
+static inline void
+st_add_direct_with_hash(st_table *tab,
+			st_data_t key, st_data_t value, st_hash_t hash) {
+    st_table_entry *entry;
+    st_index_t ind;
+    st_index_t bin_ind;
+
+    rebuild_table_if_necessary(tab);
+    ind = tab->entries_bound++;
+    entry = &tab->entries[ind];
+    entry->hash = hash;
+    entry->key = key;
+    entry->record = value;
+    tab->num_entries++;
+    if (tab->bins != NULL) {
+        bin_ind = find_table_bin_ind_direct(tab, hash, key);
+	st_assert (bin_ind != UNDEFINED_BIN_IND);
+	set_bin(tab->bins, get_size_ind(tab), bin_ind, ind + ENTRY_BASE);
+    }
+#ifdef ST_DEBUG
+    st_check(tab);
+#endif
+}
+
+/* Insert (KEY, VALUE) into table TAB.  The table should not have
+   entry with KEY before the insertion.  */
 void
-st_free_table(table)
-    st_table *table;
-{
-    register st_table_entry *ptr, *next;
-    int i;
-
-    for(i = 0; i < table->num_bins; i++) {
-	ptr = table->bins[i];
-	while (ptr != 0) {
-	    next = ptr->next;
-	    free(ptr);
-	    ptr = next;
+st_add_direct(st_table *tab, st_data_t key, st_data_t value)
+{
+    st_hash_t hash_value;
+
+    hash_value = do_hash(key, tab);
+    st_add_direct_with_hash(tab, key, value, hash_value);
+}
+
+/* Insert (FUNC(KEY), VALUE) into table TAB and return zero.  If
+   there is already entry with KEY in the table, return nonzero and
+   and update the value of the found entry.  */
+int
+st_insert2(st_table *tab, st_data_t key, st_data_t value,
+           st_data_t (*func)(st_data_t)) {
+    st_table_entry *entry;
+    st_index_t bin;
+    st_index_t ind, check;
+    st_hash_t hash_value;
+    st_index_t bin_ind;
+    int new_p;
+
+    rebuild_table_if_necessary (tab);
+    hash_value = do_hash(key, tab);
+    if (tab->bins == NULL) {
+        bin = find_entry(tab, hash_value, key);
+	new_p = bin == UNDEFINED_ENTRY_IND;
+	bin_ind = UNDEFINED_BIN_IND;
+    } else {
+        bin = find_table_bin_ptr_and_reserve(tab, &hash_value,
+					     key, &bin_ind);
+	new_p = bin == UNDEFINED_ENTRY_IND;
+	bin -= ENTRY_BASE;
+    }
+    if (new_p) {
+        st_assert(tab->entries_bound < get_allocated_entries(tab));
+        check = tab->rebuilds_num;
+        key = (*func)(key);
+        st_assert(check == tab->rebuilds_num
+                  && do_hash(key, tab) == hash_value);
+        ind = tab->entries_bound++;
+        entry = &tab->entries[ind];
+        entry->hash = hash_value;
+        entry->key = key;
+        entry->record = value;
+	if (bin_ind != UNDEFINED_BIN_IND)
+	    set_bin(tab->bins, get_size_ind(tab), bin_ind, ind + ENTRY_BASE);
+#ifdef ST_DEBUG
+	st_check(tab);
+#endif
+        return 0;
+    }
+    tab->entries[bin].record = value;
+#ifdef ST_DEBUG
+    st_check(tab);
+#endif
+    return 1;
+}
+
+/* Create and return a copy of table OLD_TAB.  */
+st_table *
+st_copy(st_table *old_tab)
+{
+    st_table *new_tab;
+
+    new_tab = (st_table *) malloc(sizeof(st_table));
+    if (new_tab == NULL)
+	return NULL;
+    *new_tab = *old_tab;
+    if (old_tab->bins == NULL)
+        new_tab->bins = NULL;
+    else {
+        new_tab->bins = (st_index_t *) malloc(bins_size(old_tab));
+	if (new_tab->bins == NULL) {
+	    free(new_tab);
+	    return NULL;
 	}
     }
-    free(table->bins);
-    free(table);
-}
-
-#define PTR_NOT_EQUAL(table, ptr, hash_val, key) \
-((ptr) != 0 && (ptr->hash != (hash_val) || !EQUAL((table), (key), (ptr)->key)))
-
-#ifdef HASH_LOG
-#define COLLISION collision++
-#else
-#define COLLISION
-#endif
-
-#define FIND_ENTRY(table, ptr, hash_val, bin_pos) do {\
-    bin_pos = hash_val%(table)->num_bins;\
-    ptr = (table)->bins[bin_pos];\
-    if (PTR_NOT_EQUAL(table, ptr, hash_val, key)) {\
-	COLLISION;\
-	while (PTR_NOT_EQUAL(table, ptr->next, hash_val, key)) {\
-	    ptr = ptr->next;\
-	}\
-	ptr = ptr->next;\
-    }\
-} while (0)
+    new_tab->entries = (st_table_entry *) malloc(get_allocated_entries(old_tab)
+						 * sizeof(st_table_entry));
+    if (new_tab->entries == NULL) {
+	st_free_table(new_tab);
+	return NULL;
+    }
+    MEMCPY(new_tab->entries, old_tab->entries, st_table_entry,
+	   get_allocated_entries(old_tab));
+    if (old_tab->bins != NULL)
+        MEMCPY(new_tab->bins, old_tab->bins, char, bins_size(old_tab));
+#ifdef ST_DEBUG
+    st_check(new_tab);
+#endif
+    return new_tab;
+}
+#endif /* RUBY */
+
+/* Update the entries start of table TAB after removing an entry
+   with index N in the array entries.  */
+static inline void
+update_range_for_deleted(st_table *tab, st_index_t n)
+{
+    /* Do not update entries_bound here.  Otherwise, we can fill all
+       bins by deleted entry value before rebuilding the table.  */
+    if (tab->entries_start == n)
+        tab->entries_start = n + 1;
+}
+
+#ifdef RUBY
+/* Delete entry with KEY from table TAB, set up *VALUE (unless
+   VALUE is zero) from deleted table entry, and return non-zero.  If
+   there is no entry with KEY in the table, clear *VALUE (unless VALUE
+   is zero), and return zero.  */
+static int
+st_general_delete(st_table *tab, st_data_t *key, st_data_t *value)
+{
+    st_table_entry *entry;
+    st_index_t bin;
+    st_index_t bin_ind;
+    st_hash_t hash;
+
+    st_assert(tab != NULL);
+    hash = do_hash(*key, tab);
+    if (tab->bins == NULL) {
+        bin = find_entry(tab, hash, *key);
+	if (bin == UNDEFINED_ENTRY_IND) {
+	    if (value != 0) *value = 0;
+	    return 0;
+	}
+    } else {
+        bin_ind = find_table_bin_ind(tab, hash, *key);
+	if (bin_ind == UNDEFINED_BIN_IND) {
+	    if (value != 0) *value = 0;
+	    return 0;
+	}
+	bin = get_bin(tab->bins, get_size_ind(tab), bin_ind) - ENTRY_BASE;
+	MARK_BIN_DELETED(tab, bin_ind);
+    }
+    entry = &tab->entries[bin];
+    *key = entry->key;
+    if (value != 0) *value = entry->record;
+    MARK_ENTRY_DELETED(entry);
+    tab->num_entries--;
+    update_range_for_deleted(tab, bin);
+#ifdef ST_DEBUG
+    st_check(tab);
+#endif
+    return 1;
+}
 
 int
-st_lookup(table, key, value)
-    st_table *table;
-    register st_data_t key;
-    st_data_t *value;
-{
-    unsigned int hash_val, bin_pos;
-    register st_table_entry *ptr;
-
-    hash_val = do_hash(key, table);
-    FIND_ENTRY(table, ptr, hash_val, bin_pos);
-
-    if (ptr == 0) {
-	return 0;
-    }
-    else {
-	if (value != 0)  *value = ptr->record;
-	return 1;
-    }
-}
-
-#define ADD_DIRECT(table, key, value, hash_val, bin_pos)\
-do {\
-    st_table_entry *entry;\
-    if (table->num_entries/(table->num_bins) > ST_DEFAULT_MAX_DENSITY) {\
-	rehash(table);\
-        bin_pos = hash_val % table->num_bins;\
-    }\
-    \
-    entry = alloc(st_table_entry);\
-    \
-    entry->hash = hash_val;\
-    entry->key = key;\
-    entry->record = value;\
-    entry->next = table->bins[bin_pos];\
-    table->bins[bin_pos] = entry;\
-    table->num_entries++;\
-} while (0)
-
+st_delete(st_table *tab, st_data_t *key, st_data_t *value)
+{
+    return st_general_delete(tab, key, value);
+}
+
+/* The function and other functions with suffix '_safe' or '_check'
+   are originated from the previous implementation of the hash tables.
+   It was necessary for correct deleting entries during traversing
+   tables.  The current implementation permits deletion during
+   traversing without a specific way to do this.  */
 int
-st_insert(table, key, value)
-    register st_table *table;
-    register st_data_t key;
-    st_data_t value;
-{
-    unsigned int hash_val, bin_pos;
-    register st_table_entry *ptr;
-
-    hash_val = do_hash(key, table);
-    FIND_ENTRY(table, ptr, hash_val, bin_pos);
-
-    if (ptr == 0) {
-	ADD_DIRECT(table, key, value, hash_val, bin_pos);
-	return 0;
-    }
-    else {
-	ptr->record = value;
-	return 1;
-    }
-}
-
-void
-st_add_direct(table, key, value)
-    st_table *table;
-    st_data_t key;
-    st_data_t value;
-{
-    unsigned int hash_val, bin_pos;
-
-    hash_val = do_hash(key, table);
-    bin_pos = hash_val % table->num_bins;
-    ADD_DIRECT(table, key, value, hash_val, bin_pos);
-}
-
-static void
-rehash(table)
-    register st_table *table;
-{
-    register st_table_entry *ptr, *next, **new_bins;
-    int i, old_num_bins = table->num_bins, new_num_bins;
-    unsigned int hash_val;
-
-    new_num_bins = new_size(old_num_bins+1);
-    new_bins = (st_table_entry**)Calloc(new_num_bins, sizeof(st_table_entry*));
-
-    for(i = 0; i < old_num_bins; i++) {
-	ptr = table->bins[i];
-	while (ptr != 0) {
-	    next = ptr->next;
-	    hash_val = ptr->hash % new_num_bins;
-	    ptr->next = new_bins[hash_val];
-	    new_bins[hash_val] = ptr;
-	    ptr = next;
-	}
-    }
-    free(table->bins);
-    table->num_bins = new_num_bins;
-    table->bins = new_bins;
-}
-
-st_table*
-st_copy(old_table)
-    st_table *old_table;
-{
-    st_table *new_table;
-    st_table_entry *ptr, *entry;
-    int i, num_bins = old_table->num_bins;
-
-    new_table = alloc(st_table);
-    if (new_table == 0) {
-	return 0;
-    }
-
-    *new_table = *old_table;
-    new_table->bins = (st_table_entry**)
-	Calloc((unsigned)num_bins, sizeof(st_table_entry*));
-
-    if (new_table->bins == 0) {
-	free(new_table);
-	return 0;
-    }
-
-    for(i = 0; i < num_bins; i++) {
-	new_table->bins[i] = 0;
-	ptr = old_table->bins[i];
-	while (ptr != 0) {
-	    entry = alloc(st_table_entry);
-	    if (entry == 0) {
-		free(new_table->bins);
-		free(new_table);
-		return 0;
+st_delete_safe(st_table *tab, st_data_t *key, st_data_t *value,
+               st_data_t never ATTRIBUTE_UNUSED) {
+    return st_general_delete(tab, key, value);
+}
+
+/* If table TAB is empty, clear *VALUE (unless VALUE is zero), and
+   return zero.  Otherwise, remove the first entry in the table.
+   Return its key through KEY and its record through VALUE (unless
+   VALUE is zero).  */
+int
+st_shift(st_table *tab, st_data_t *key, st_data_t *value)
+{
+    st_index_t i, bound;
+    st_index_t bin;
+    st_table_entry *entries, *curr_entry_ptr;
+    st_index_t bin_ind;
+
+    entries = tab->entries;
+    bound = tab->entries_bound;
+    for (i = tab->entries_start; i < bound; i++) {
+        curr_entry_ptr = &entries[i];
+	if (! DELETED_ENTRY_P(curr_entry_ptr)) {
+	    if (value != 0) *value = curr_entry_ptr->record;
+	    *key = curr_entry_ptr->key;
+	    if (tab->bins == NULL) {
+	        bin = find_entry(tab, curr_entry_ptr->hash, curr_entry_ptr->key);
+		st_assert(bin != UNDEFINED_ENTRY_IND
+			  && &entries[bin] == curr_entry_ptr);
+	    } else {
+	        bin_ind = find_table_bin_ind(tab, curr_entry_ptr->hash,
+					     curr_entry_ptr->key);
+		st_assert(bin_ind != UNDEFINED_BIN_IND
+			  && &entries[get_bin(tab->bins, get_size_ind(tab), bin_ind)
+				      - ENTRY_BASE] == curr_entry_ptr);
+		MARK_BIN_DELETED(tab, bin_ind);
 	    }
-	    *entry = *ptr;
-	    entry->next = new_table->bins[i];
-	    new_table->bins[i] = entry;
-	    ptr = ptr->next;
-	}
-    }
-    return new_table;
-}
-
-int
-st_delete(table, key, value)
-    register st_table *table;
-    register st_data_t *key;
-    st_data_t *value;
-{
-    unsigned int hash_val;
-    st_table_entry *tmp;
-    register st_table_entry *ptr;
-
-    hash_val = do_hash_bin(*key, table);
-    ptr = table->bins[hash_val];
-
-    if (ptr == 0) {
-	if (value != 0) *value = 0;
-	return 0;
-    }
-
-    if (EQUAL(table, *key, ptr->key)) {
-	table->bins[hash_val] = ptr->next;
-	table->num_entries--;
-	if (value != 0) *value = ptr->record;
-	*key = ptr->key;
-	free(ptr);
-	return 1;
-    }
-
-    for(; ptr->next != 0; ptr = ptr->next) {
-	if (EQUAL(table, ptr->next->key, *key)) {
-	    tmp = ptr->next;
-	    ptr->next = ptr->next->next;
-	    table->num_entries--;
-	    if (value != 0) *value = tmp->record;
-	    *key = tmp->key;
-	    free(tmp);
+	    MARK_ENTRY_DELETED(curr_entry_ptr);
+	    tab->num_entries--;
+	    update_range_for_deleted(tab, i);
+#ifdef ST_DEBUG
+	    st_check(tab);
+#endif
 	    return 1;
 	}
     }
-
+    st_assert(tab->num_entries == 0);
+    tab->entries_start = tab->entries_bound = 0;
+    if (value != 0) *value = 0;
     return 0;
 }
 
+/* See comments for function st_delete_safe.  */
+void
+st_cleanup_safe(st_table *tab ATTRIBUTE_UNUSED,
+                st_data_t never ATTRIBUTE_UNUSED) {
+}
+
+/* Find entry with KEY in table TAB, call FUNC with the key and the
+   value of the found entry, and non-zero as the 3rd argument.  If the
+   entry is not found, call FUNC with KEY, and 2 zero arguments.  If
+   the call returns ST_CONTINUE, the table will have an entry with key
+   and value returned by FUNC through the 1st and 2nd parameters.  If
+   the call of FUNC returns ST_DELETE, the table will not have entry
+   with KEY.  The function returns flag of that the entry with KEY was
+   in the table before the call.  */
 int
-st_delete_safe(table, key, value, never)
-    register st_table *table;
-    register st_data_t *key;
-    st_data_t *value;
-    st_data_t never;
-{
-    unsigned int hash_val;
-    register st_table_entry *ptr;
-
-    hash_val = do_hash_bin(*key, table);
-    ptr = table->bins[hash_val];
-
-    if (ptr == 0) {
-	if (value != 0) *value = 0;
-	return 0;
-    }
-
-    for(; ptr != 0; ptr = ptr->next) {
-	if ((ptr->key != never) && EQUAL(table, ptr->key, *key)) {
-	    table->num_entries--;
-	    *key = ptr->key;
-	    if (value != 0) *value = ptr->record;
-	    ptr->key = ptr->record = never;
-	    return 1;
+st_update(st_table *tab, st_data_t key,
+	  st_update_callback_func *func, st_data_t arg) {
+    st_table_entry *entry = NULL; /* to avoid uninitialized value warning */
+    st_index_t bin = 0; /* Ditto */
+    st_table_entry *entries;
+    st_index_t bin_ind;
+    st_data_t value = 0, old_key;
+    st_index_t check;
+    int retval, existing;
+    st_hash_t hash = do_hash(key, tab);
+
+    entries = tab->entries;
+    if (tab->bins == NULL) {
+        bin = find_entry(tab, hash, key);
+	existing = bin != UNDEFINED_ENTRY_IND;
+	entry = &entries[bin];
+	bin_ind = UNDEFINED_BIN_IND;
+    } else {
+        bin_ind = find_table_bin_ind(tab, hash, key);
+	existing = bin_ind != UNDEFINED_BIN_IND;
+	if (existing) {
+	    bin = get_bin(tab->bins, get_size_ind(tab), bin_ind) - ENTRY_BASE;
+	    entry = &entries[bin];
 	}
     }
-
+    if (existing) {
+        key = entry->key;
+        value = entry->record;
+    }
+    old_key = key;
+    check = tab->rebuilds_num;
+    retval = (*func)(&key, &value, arg, existing);
+    st_assert(check == tab->rebuilds_num);
+    switch (retval) {
+    case ST_CONTINUE:
+        if (! existing) {
+	    st_add_direct_with_hash(tab, key, value, hash);
+            break;
+        }
+        if (old_key != key) {
+            entry->key = key;
+        }
+        entry->record = value;
+        break;
+    case ST_DELETE:
+        if (existing) {
+	    if (bin_ind != UNDEFINED_BIN_IND)
+	        MARK_BIN_DELETED(tab, bin_ind);
+            MARK_ENTRY_DELETED(entry);
+	    tab->num_entries--;
+	    update_range_for_deleted(tab, bin);
+#ifdef ST_DEBUG
+	    st_check(tab);
+#endif
+        }
+        break;
+    }
+#ifdef ST_DEBUG
+    st_check(tab);
+#endif
+    return existing;
+}
+#endif /* RUBY */
+
+/* Traverse all entries in table TAB calling FUNC with current entry
+   key and value and zero.  If the call returns ST_STOP, stop
+   traversing.  If the call returns ST_DELETE, delete the current
+   entry from the table.  In case of ST_CHECK or ST_CONTINUE, continue
+   traversing.  The function returns zero unless an error is found.
+   CHECK_P is flag of st_foreach_check call.  The behavior is a bit
+   different for ST_CHECK and when the current element is removed
+   during traversing.  */
+static inline int
+st_general_foreach(st_table *tab, int (*func)(ANYARGS), st_data_t arg,
+		   int check_p) {
+    st_index_t bin;
+    st_index_t bin_ind;
+    st_table_entry *entries, *curr_entry_ptr;
+    enum st_retval retval;
+    st_index_t i, rebuilds_num;
+    st_hash_t hash;
+    st_data_t key;
+    int error_p, packed_p = tab->bins == NULL;
+
+    st_assert(tab->entries_start <= tab->entries_bound);
+    entries = tab->entries;
+    /* The bound can change inside the loop even without rebuilding
+       the table, e.g. by an entry inesrtion.  */
+    for (i = tab->entries_start; i < tab->entries_bound; i++) {
+        curr_entry_ptr = &entries[i];
+	if (EXPECT(DELETED_ENTRY_P(curr_entry_ptr), 0))
+	    continue;
+	key = curr_entry_ptr->key;
+	rebuilds_num = tab->rebuilds_num;
+	hash = curr_entry_ptr->hash;
+	retval = (*func)(key, curr_entry_ptr->record, arg, 0);
+	if (rebuilds_num != tab->rebuilds_num) {
+	    entries = tab->entries;
+	    packed_p = tab->bins == NULL;
+	    if (packed_p) {
+	        i = find_entry(tab, hash, key);
+		error_p = i == UNDEFINED_ENTRY_IND;
+	    } else {
+	        i = find_table_entry_ind(tab, hash, key);
+		error_p = i == UNDEFINED_ENTRY_IND;
+		i -= ENTRY_BASE;
+	    }
+	    if (error_p && check_p) {
+	        /* call func with error notice */
+	        retval = (*func)(0, 0, arg, 1);
+#ifdef ST_DEBUG
+		st_check(tab);
+#endif
+		return 1;
+	    }
+	    curr_entry_ptr = &entries[i];
+	}
+	switch (retval) {
+	case ST_CONTINUE:
+	    break;
+	case ST_CHECK:
+	    if (check_p)
+		break;
+	case ST_STOP:
+#ifdef ST_DEBUG
+	    st_check(tab);
+#endif
+	    return 0;
+	case ST_DELETE:
+	    if (packed_p) {
+	        bin = find_entry(tab, hash, curr_entry_ptr->key);
+		if (bin == UNDEFINED_ENTRY_IND)
+		    break;
+	    } else {
+	        bin_ind = find_table_bin_ind(tab, hash, curr_entry_ptr->key);
+		if (bin_ind == UNDEFINED_BIN_IND)
+		    break;
+		bin = get_bin(tab->bins, get_size_ind(tab), bin_ind) - ENTRY_BASE;
+		MARK_BIN_DELETED(tab, bin_ind);
+	    }
+	    st_assert(&entries[bin] == curr_entry_ptr);
+	    MARK_ENTRY_DELETED(curr_entry_ptr);
+	    tab->num_entries--;
+	    update_range_for_deleted(tab, bin);
+#ifdef ST_DEBUG
+	    st_check(tab);
+#endif
+	    break;
+	}
+    }
+#ifdef ST_DEBUG
+    st_check(tab);
+#endif
     return 0;
 }
 
-static int
-#if defined(__GNUC__)
-delete_never(st_data_t key __attribute__ ((unused)), st_data_t value,
-	     st_data_t never)
-#else
-delete_never(key, value, never)
-    st_data_t key, value, never;
-#endif
-{
-    if (value == never) return ST_DELETE;
-    return ST_CONTINUE;
-}
-
-void
-st_cleanup_safe(table, never)
-    st_table *table;
-    st_data_t never;
-{
-    int num_entries = table->num_entries;
-
-    st_foreach(table, delete_never, never);
-    table->num_entries = num_entries;
-}
-
 int
-st_foreach(table, func, arg)
-    st_table *table;
-    int (*func)();
-    st_data_t arg;
-{
-    st_table_entry *ptr, *last, *tmp;
-    enum st_retval retval;
-    int i;
-
-    for(i = 0; i < table->num_bins; i++) {
-	last = 0;
-	for(ptr = table->bins[i]; ptr != 0;) {
-	    retval = (*func)(ptr->key, ptr->record, arg);
-	    switch (retval) {
-	    case ST_CHECK:	/* check if hash is modified during iteration */
-	        tmp = 0;
-		if (i < table->num_bins) {
-		    for (tmp = table->bins[i]; tmp; tmp=tmp->next) {
-			if (tmp == ptr) break;
-		    }
-		}
-		if (!tmp) {
-		    /* call func with error notice */
-		    return 1;
-		}
-		/* fall through */
-	    case ST_CONTINUE:
-		last = ptr;
-		ptr = ptr->next;
-		break;
-	    case ST_STOP:
-	        return 0;
-	    case ST_DELETE:
-		tmp = ptr;
-		if (last == 0) {
-		    table->bins[i] = ptr->next;
-		}
-		else {
-		    last->next = ptr->next;
-		}
-		ptr = ptr->next;
-		free(tmp);
-		table->num_entries--;
+st_foreach(st_table *tab, int (*func)(ANYARGS), st_data_t arg)
+{
+  return st_general_foreach(tab, func, arg, FALSE);
+}
+
+#ifdef RUBY
+/* See comments for function st_delete_safe.  */
+int
+st_foreach_check(st_table *tab, int (*func)(ANYARGS), st_data_t arg,
+                 st_data_t never ATTRIBUTE_UNUSED) {
+  return st_general_foreach(tab, func, arg, TRUE);
+}
+
+/* Set up array KEYS by at most SIZE keys of head table TAB entries.
+   Return the number of keys set up in array KEYS.  */
+static inline st_index_t
+st_general_keys(st_table *tab, st_data_t *keys, st_index_t size)
+{
+    st_index_t i, bound;
+    st_data_t key, *keys_start, *keys_end;
+    st_table_entry *curr_entry_ptr, *entries = tab->entries;
+
+    bound = tab->entries_bound;
+    keys_start = keys;
+    keys_end = keys + size;
+    for (i = tab->entries_start; i < bound; i++) {
+	if (keys == keys_end)
+	    break;
+	curr_entry_ptr = &entries[i];
+	key = curr_entry_ptr->key;
+        if (! DELETED_ENTRY_P(curr_entry_ptr))
+	    *keys++ = key;
+    }
+
+    return keys - keys_start;
+}
+
+st_index_t
+st_keys(st_table *tab, st_data_t *keys, st_index_t size)
+{
+    return st_general_keys(tab, keys, size);
+}
+
+/* See comments for function st_delete_safe.  */
+st_index_t
+st_keys_check(st_table *tab, st_data_t *keys, st_index_t size,
+              st_data_t never ATTRIBUTE_UNUSED) {
+    return st_general_keys(tab, keys, size);
+}
+
+/* Set up array VALUES by at most SIZE values of head table TAB
+   entries.  Return the number of values set up in array VALUES.  */
+static inline st_index_t
+st_general_values(st_table *tab, st_data_t *values, st_index_t size)
+{
+    st_index_t i, bound;
+    st_data_t *values_start, *values_end;
+    st_table_entry *curr_entry_ptr, *entries = tab->entries;
+
+    values_start = values;
+    values_end = values + size;
+    bound = tab->entries_bound;
+    st_assert(bound != 0);
+    for (i = tab->entries_start; i < bound; i++) {
+	if (values == values_end)
+	    break;
+        curr_entry_ptr = &entries[i];
+        if (! DELETED_ENTRY_P(curr_entry_ptr))
+	    *values++ = curr_entry_ptr->record;
+    }
+
+    return values - values_start;
+}
+
+st_index_t
+st_values(st_table *tab, st_data_t *values, st_index_t size)
+{
+    return st_general_values(tab, values, size);
+}
+
+/* See comments for function st_delete_safe.  */
+st_index_t
+st_values_check(st_table *tab, st_data_t *values, st_index_t size,
+		st_data_t never ATTRIBUTE_UNUSED) {
+    return st_general_values(tab, values, size);
+}
+#endif /* RUBY */
+
+#ifdef RUBY
+#define FNV1_32A_INIT 0x811c9dc5
+
+/*
+ * 32 bit magic FNV-1a prime
+ */
+#define FNV_32_PRIME 0x01000193
+
+#ifndef UNALIGNED_WORD_ACCESS
+# if defined(__i386) || defined(__i386__) || defined(_M_IX86) || \
+     defined(__x86_64) || defined(__x86_64__) || defined(_M_AMD64) || \
+     defined(__powerpc64__) || \
+     defined(__mc68020__)
+#   define UNALIGNED_WORD_ACCESS 1
+# endif
+#endif
+#ifndef UNALIGNED_WORD_ACCESS
+# define UNALIGNED_WORD_ACCESS 0
+#endif
+
+/* This hash function is quite simplified MurmurHash3
+ * Simplification is legal, cause most of magic still happens in finalizator.
+ * And finalizator is almost the same as in MurmurHash3 */
+#define BIG_CONSTANT(x,y) ((st_index_t)(x)<<32|(st_index_t)(y))
+#define ROTL(x,n) ((x)<<(n)|(x)>>(SIZEOF_ST_INDEX_T*CHAR_BIT-(n)))
+
+#if ST_INDEX_BITS <= 32
+#define C1 (st_index_t)0xcc9e2d51
+#define C2 (st_index_t)0x1b873593
+#else
+#define C1 BIG_CONSTANT(0x87c37b91,0x114253d5);
+#define C2 BIG_CONSTANT(0x4cf5ad43,0x2745937f);
+#endif
+static inline st_index_t
+murmur_step(st_index_t h, st_index_t k)
+{
+#if ST_INDEX_BITS <= 32
+#define r1 (17)
+#define r2 (11)
+#else
+#define r1 (33)
+#define r2 (24)
+#endif
+    k *= C1;
+    h ^= ROTL(k, r1);
+    h *= C2;
+    h = ROTL(h, r2);
+    return h;
+}
+#undef r1
+#undef r2
+
+static inline st_index_t
+murmur_finish(st_index_t h)
+{
+#if ST_INDEX_BITS <= 32
+#define r1 (16)
+#define r2 (13)
+#define r3 (16)
+    const st_index_t c1 = 0x85ebca6b;
+    const st_index_t c2 = 0xc2b2ae35;
+#else
+/* values are taken from Mix13 on http://zimbry.blogspot.ru/2011/09/better-bit-mixing-improving-on.html */
+#define r1 (30)
+#define r2 (27)
+#define r3 (31)
+    const st_index_t c1 = BIG_CONSTANT(0xbf58476d,0x1ce4e5b9);
+    const st_index_t c2 = BIG_CONSTANT(0x94d049bb,0x133111eb);
+#endif
+#if ST_INDEX_BITS > 64
+    h ^= h >> 64;
+    h *= c2;
+    h ^= h >> 65;
+#endif
+    h ^= h >> r1;
+    h *= c1;
+    h ^= h >> r2;
+    h *= c2;
+    h ^= h >> r3;
+    return h;
+}
+#undef r1
+#undef r2
+#undef r3
+
+st_index_t
+st_hash(const void *ptr, size_t len, st_index_t h)
+{
+    const char *data = ptr;
+    st_index_t t = 0;
+    size_t l = len;
+
+#define data_at(n) (st_index_t)((unsigned char)data[(n)])
+#define UNALIGNED_ADD_4 UNALIGNED_ADD(2); UNALIGNED_ADD(1); UNALIGNED_ADD(0)
+#if SIZEOF_ST_INDEX_T > 4
+#define UNALIGNED_ADD_8 UNALIGNED_ADD(6); UNALIGNED_ADD(5); UNALIGNED_ADD(4); UNALIGNED_ADD(3); UNALIGNED_ADD_4
+#if SIZEOF_ST_INDEX_T > 8
+#define UNALIGNED_ADD_16 UNALIGNED_ADD(14); UNALIGNED_ADD(13); UNALIGNED_ADD(12); UNALIGNED_ADD(11); \
+    UNALIGNED_ADD(10); UNALIGNED_ADD(9); UNALIGNED_ADD(8); UNALIGNED_ADD(7); UNALIGNED_ADD_8
+#define UNALIGNED_ADD_ALL UNALIGNED_ADD_16
+#endif
+#define UNALIGNED_ADD_ALL UNALIGNED_ADD_8
+#else
+#define UNALIGNED_ADD_ALL UNALIGNED_ADD_4
+#endif
+#undef SKIP_TAIL
+    if (len >= sizeof(st_index_t)) {
+#if !UNALIGNED_WORD_ACCESS
+	int align = (int)((st_data_t)data % sizeof(st_index_t));
+	if (align) {
+	    st_index_t d = 0;
+	    int sl, sr, pack;
+
+	    switch (align) {
+#ifdef WORDS_BIGENDIAN
+# define UNALIGNED_ADD(n) case SIZEOF_ST_INDEX_T - (n) - 1: \
+		t |= data_at(n) << CHAR_BIT*(SIZEOF_ST_INDEX_T - (n) - 2)
+#else
+# define UNALIGNED_ADD(n) case SIZEOF_ST_INDEX_T - (n) - 1:	\
+		t |= data_at(n) << CHAR_BIT*(n)
+#endif
+		UNALIGNED_ADD_ALL;
+#undef UNALIGNED_ADD
 	    }
+
+#ifdef WORDS_BIGENDIAN
+	    t >>= (CHAR_BIT * align) - CHAR_BIT;
+#else
+	    t <<= (CHAR_BIT * align);
+#endif
+
+	    data += sizeof(st_index_t)-align;
+	    len -= sizeof(st_index_t)-align;
+
+	    sl = CHAR_BIT * (SIZEOF_ST_INDEX_T-align);
+	    sr = CHAR_BIT * align;
+
+	    while (len >= sizeof(st_index_t)) {
+		d = *(st_index_t *)data;
+#ifdef WORDS_BIGENDIAN
+		t = (t << sr) | (d >> sl);
+#else
+		t = (t >> sr) | (d << sl);
+#endif
+		h = murmur_step(h, t);
+		t = d;
+		data += sizeof(st_index_t);
+		len -= sizeof(st_index_t);
+	    }
+
+	    pack = len < (size_t)align ? (int)len : align;
+	    d = 0;
+	    switch (pack) {
+#ifdef WORDS_BIGENDIAN
+# define UNALIGNED_ADD(n) case (n) + 1: \
+		d |= data_at(n) << CHAR_BIT*(SIZEOF_ST_INDEX_T - (n) - 1)
+#else
+# define UNALIGNED_ADD(n) case (n) + 1: \
+		d |= data_at(n) << CHAR_BIT*(n)
+#endif
+		UNALIGNED_ADD_ALL;
+#undef UNALIGNED_ADD
+	    }
+#ifdef WORDS_BIGENDIAN
+	    t = (t << sr) | (d >> sl);
+#else
+	    t = (t >> sr) | (d << sl);
+#endif
+
+	    if (len < (size_t)align) goto skip_tail;
+# define SKIP_TAIL 1
+	    h = murmur_step(h, t);
+	    data += pack;
+	    len -= pack;
 	}
+	else
+#endif
+	{
+	    do {
+		h = murmur_step(h, *(st_index_t *)data);
+		data += sizeof(st_index_t);
+		len -= sizeof(st_index_t);
+	    } while (len >= sizeof(st_index_t));
+	}
+    }
+
+    t = 0;
+    switch (len) {
+#if UNALIGNED_WORD_ACCESS && SIZEOF_ST_INDEX_T <= 8 && CHAR_BIT == 8
+    /* in this case byteorder doesn't really matter */
+#if SIZEOF_ST_INDEX_T > 4
+	case 7: t |= data_at(6) << 48;
+	case 6: t |= data_at(5) << 40;
+	case 5: t |= data_at(4) << 32;
+	case 4:
+	    t |= (st_index_t)*(uint32_t*)data;
+	    goto skip_tail;
+# define SKIP_TAIL 1
+#endif
+	case 3: t |= data_at(2) << 16;
+	case 2: t |= data_at(1) << 8;
+	case 1: t |= data_at(0);
+#else
+#ifdef WORDS_BIGENDIAN
+# define UNALIGNED_ADD(n) case (n) + 1: \
+	t |= data_at(n) << CHAR_BIT*(SIZEOF_ST_INDEX_T - (n) - 1)
+#else
+# define UNALIGNED_ADD(n) case (n) + 1: \
+	t |= data_at(n) << CHAR_BIT*(n)
+#endif
+	UNALIGNED_ADD_ALL;
+#undef UNALIGNED_ADD
+#endif
+#ifdef SKIP_TAIL
+      skip_tail:
+#endif
+	h ^= t; h -= ROTL(t, 7);
+	h *= C2;
+    }
+    h ^= l;
+
+    return murmur_finish(h);
+}
+
+st_index_t
+st_hash_uint32(st_index_t h, uint32_t i)
+{
+    return murmur_step(h, i);
+}
+
+st_index_t
+st_hash_uint(st_index_t h, st_index_t i)
+{
+    i += h;
+/* no matter if it is BigEndian or LittleEndian,
+ * we hash just integers */
+#if SIZEOF_ST_INDEX_T*CHAR_BIT > 8*8
+    h = murmur_step(h, i >> 8*8);
+#endif
+    h = murmur_step(h, i);
+    return h;
+}
+
+st_index_t
+st_hash_end(st_index_t h)
+{
+    h = murmur_finish(h);
+    return h;
+}
+
+#undef st_hash_start
+st_index_t
+st_hash_start(st_index_t h)
+{
+    return h;
+}
+
+static st_index_t
+strhash(st_data_t arg)
+{
+    register const char *string = (const char *)arg;
+    return st_hash(string, strlen(string), FNV1_32A_INIT);
+}
+
+int
+st_locale_insensitive_strcasecmp(const char *s1, const char *s2)
+{
+    unsigned int c1, c2;
+
+    while (1) {
+        c1 = (unsigned char)*s1++;
+        c2 = (unsigned char)*s2++;
+        if (c1 == '\0' || c2 == '\0') {
+            if (c1 != '\0') return 1;
+            if (c2 != '\0') return -1;
+            return 0;
+        }
+        if ((unsigned int)(c1 - 'A') <= ('Z' - 'A')) c1 += 'a' - 'A';
+        if ((unsigned int)(c2 - 'A') <= ('Z' - 'A')) c2 += 'a' - 'A';
+        if (c1 != c2) {
+            if (c1 > c2)
+                return 1;
+            else
+                return -1;
+        }
+    }
+}
+
+int
+st_locale_insensitive_strncasecmp(const char *s1, const char *s2, size_t n)
+{
+    unsigned int c1, c2;
+
+    while (n--) {
+        c1 = (unsigned char)*s1++;
+        c2 = (unsigned char)*s2++;
+        if (c1 == '\0' || c2 == '\0') {
+            if (c1 != '\0') return 1;
+            if (c2 != '\0') return -1;
+            return 0;
+        }
+        if ((unsigned int)(c1 - 'A') <= ('Z' - 'A')) c1 += 'a' - 'A';
+        if ((unsigned int)(c2 - 'A') <= ('Z' - 'A')) c2 += 'a' - 'A';
+        if (c1 != c2) {
+            if (c1 > c2)
+                return 1;
+            else
+                return -1;
+        }
     }
     return 0;
 }
 
-static int
-strhash(string)
-    register const char *string;
-{
-    register int c;
-
-#ifdef HASH_ELFHASH
-    register unsigned int h = 0, g;
-
-    while ((c = *string++) != '\0') {
-	h = ( h << 4 ) + c;
-	if ( g = h & 0xF0000000 )
-	    h ^= g >> 24;
-	h &= ~g;
-    }
-    return h;
-#elif HASH_PERL
-    register int val = 0;
-
-    while ((c = *string++) != '\0') {
-	val += c;
-	val += (val << 10);
-	val ^= (val >> 6);
-    }
-    val += (val << 3);
-    val ^= (val >> 11);
-
-    return val + (val << 15);
-#else
-    register int val = 0;
-
-    while ((c = *string++) != '\0') {
-	val = val*997 + c;
-    }
-
-    return val + (val>>5);
-#endif
-}
-
-static int
-numcmp(x, y)
-    long x, y;
+static st_index_t
+strcasehash(st_data_t arg)
+{
+    register const char *string = (const char *)arg;
+    register st_index_t hval = FNV1_32A_INIT;
+
+    /*
+     * FNV-1a hash each octet in the buffer
+     */
+    while (*string) {
+	unsigned int c = (unsigned char)*string++;
+	if ((unsigned int)(c - 'A') <= ('Z' - 'A')) c += 'a' - 'A';
+	hval ^= c;
+
+	/* multiply by the 32 bit FNV magic prime mod 2^32 */
+	hval *= FNV_32_PRIME;
+    }
+    return hval;
+}
+
+int
+st_numcmp(st_data_t x, st_data_t y)
 {
     return x != y;
 }
 
-static int
-numhash(n)
-    long n;
-{
-    return n;
-}
+st_index_t
+st_numhash(st_data_t n)
+{
+    enum {s1 = 11, s2 = 3};
+    return (st_index_t)((n>>s1|(n<<s2)) ^ (n>>s2));
+}
+#endif /* RUBY */
Index: EcnlProtoTool/trunk/onigmo-6.1.3/src/st.h
===================================================================
--- EcnlProtoTool/trunk/onigmo-5.15.0/src/st.h	(revision 321)
+++ EcnlProtoTool/trunk/onigmo-6.1.3/src/st.h	(revision 331)
@@ -1,32 +1,45 @@
-/* This is a public domain general purpose hash table package written by Peter Moore @ UCB. */
+/* This is a public domain general purpose hash table package
+   originally written by Peter Moore @ UCB.
 
-/* @(#) st.h 5.1 89/12/14 */
+   The hash table data strutures were redesigned and the package was
+   rewritten by Vladimir Makarov <vmakarov@redhat.com>.  */
 
-#ifndef ST_INCLUDED
+#ifndef RUBY_ST_H
+#define RUBY_ST_H 1
 
-#define ST_INCLUDED
+#if defined(__cplusplus)
+extern "C" {
+#if 0
+} /* satisfy cc-mode */
+#endif
+#endif
 
-typedef uintptr_t st_data_t;
+#ifdef RUBY
+#include "ruby/defines.h"
+#else /* RUBY */
+#ifndef RUBY_SYMBOL_EXPORT_BEGIN
+#define RUBY_SYMBOL_EXPORT_BEGIN
+#define RUBY_SYMBOL_EXPORT_END
+#endif
+#endif /* RUBY */
+
+RUBY_SYMBOL_EXPORT_BEGIN
+
+#if SIZEOF_LONG == SIZEOF_VOIDP
+typedef unsigned long st_data_t;
+#elif SIZEOF_LONG_LONG == SIZEOF_VOIDP
+typedef unsigned LONG_LONG st_data_t;
+#else
+# error ---->> st.c requires sizeof(void*) == sizeof(long) or sizeof(LONG_LONG) to be compiled. <<----
+#endif
 #define ST_DATA_T_DEFINED
 
-typedef struct st_table st_table;
-typedef int st_index_t;
-
-struct st_hash_type {
-    int (*compare)();
-    int (*hash)();
-};
-
-struct st_table {
-    struct st_hash_type *type;
-    int num_bins;
-    int num_entries;
-    struct st_table_entry **bins;
-};
-
-#define st_is_member(table,key) st_lookup(table,key,(st_data_t *)0)
-
-enum st_retval {ST_CONTINUE, ST_STOP, ST_DELETE, ST_CHECK};
-
+#ifndef CHAR_BIT
+# ifdef HAVE_LIMITS_H
+#  include <limits.h>
+# else
+#  define CHAR_BIT 8
+# endif
+#endif
 #ifndef _
 # define _(args) args
@@ -40,25 +53,110 @@
 #endif
 
-st_table *st_init_table _((struct st_hash_type *));
-st_table *st_init_table_with_size _((struct st_hash_type *, int));
-st_table *st_init_numtable _((void));
-st_table *st_init_numtable_with_size _((int));
-st_table *st_init_strtable _((void));
-st_table *st_init_strtable_with_size _((int));
-int st_delete _((st_table *, st_data_t *, st_data_t *));
-int st_delete_safe _((st_table *, st_data_t *, st_data_t *, st_data_t));
-int st_insert _((st_table *, st_data_t, st_data_t));
-int st_lookup _((st_table *, st_data_t, st_data_t *));
-int st_foreach _((st_table *, int (*)(ANYARGS), st_data_t));
-void st_add_direct _((st_table *, st_data_t, st_data_t));
-void st_free_table _((st_table *));
-void st_cleanup_safe _((st_table *, st_data_t));
-st_table *st_copy _((st_table *));
+typedef struct st_table st_table;
 
-#define ST_NUMCMP	((int (*)()) 0)
-#define ST_NUMHASH	((int (*)()) -2)
+typedef st_data_t st_index_t;
 
-#define st_numcmp	ST_NUMCMP
-#define st_numhash	ST_NUMHASH
+/* Maximal value of unsigned integer type st_index_t.  */
+#define MAX_ST_INDEX_VAL (~(st_index_t) 0)
 
-#endif /* ST_INCLUDED */
+typedef int st_compare_func(st_data_t, st_data_t);
+typedef st_index_t st_hash_func(st_data_t);
+
+typedef char st_check_for_sizeof_st_index_t[SIZEOF_VOIDP == (int)sizeof(st_index_t) ? 1 : -1];
+#define SIZEOF_ST_INDEX_T SIZEOF_VOIDP
+
+struct st_hash_type {
+    int (*compare)(ANYARGS /*st_data_t, st_data_t*/); /* st_compare_func* */
+    st_index_t (*hash)(ANYARGS /*st_data_t*/);        /* st_hash_func* */
+};
+
+#define ST_INDEX_BITS (SIZEOF_ST_INDEX_T * CHAR_BIT)
+
+#if defined(HAVE_BUILTIN___BUILTIN_CHOOSE_EXPR) && defined(HAVE_BUILTIN___BUILTIN_TYPES_COMPATIBLE_P)
+# define ST_DATA_COMPATIBLE_P(type) \
+   __builtin_choose_expr(__builtin_types_compatible_p(type, st_data_t), 1, 0)
+#else
+# define ST_DATA_COMPATIBLE_P(type) 0
+#endif
+
+typedef struct st_table_entry st_table_entry;
+
+struct st_table_entry; /* defined in st.c */
+
+struct st_table {
+    /* Cached features of the table -- see st.c for more details.  */
+    unsigned char entry_power, bin_power, size_ind;
+    /* How many times the table was rebuilt.  */
+    unsigned int rebuilds_num;
+    const struct st_hash_type *type;
+    /* Number of entries currently in the table.  */
+    st_index_t num_entries;
+    /* Array of bins used for access by keys.  */
+    st_index_t *bins;
+    /* Start and bound index of entries in array entries.
+       entries_starts and entries_bound are in interval
+       [0,allocated_entries].  */
+    st_index_t entries_start, entries_bound;
+    /* Array of size 2^entry_power.  */
+    st_table_entry *entries;
+};
+
+#define st_is_member(table,key) st_lookup((table),(key),(st_data_t *)0)
+
+enum st_retval {ST_CONTINUE, ST_STOP, ST_DELETE, ST_CHECK};
+
+st_table *st_init_table(const struct st_hash_type *);
+st_table *st_init_table_with_size(const struct st_hash_type *, st_index_t);
+st_table *st_init_numtable(void);
+st_table *st_init_numtable_with_size(st_index_t);
+st_table *st_init_strtable(void);
+st_table *st_init_strtable_with_size(st_index_t);
+st_table *st_init_strcasetable(void);
+st_table *st_init_strcasetable_with_size(st_index_t);
+int st_delete(st_table *, st_data_t *, st_data_t *); /* returns 0:notfound 1:deleted */
+int st_delete_safe(st_table *, st_data_t *, st_data_t *, st_data_t);
+int st_shift(st_table *, st_data_t *, st_data_t *); /* returns 0:notfound 1:deleted */
+int st_insert(st_table *, st_data_t, st_data_t);
+int st_insert2(st_table *, st_data_t, st_data_t, st_data_t (*)(st_data_t));
+int st_lookup(st_table *, st_data_t, st_data_t *);
+int st_get_key(st_table *, st_data_t, st_data_t *);
+typedef int st_update_callback_func(st_data_t *key, st_data_t *value, st_data_t arg, int existing);
+/* *key may be altered, but must equal to the old key, i.e., the
+ * results of hash() are same and compare() returns 0, otherwise the
+ * behavior is undefined */
+int st_update(st_table *table, st_data_t key, st_update_callback_func *func, st_data_t arg);
+int st_foreach(st_table *, int (*)(ANYARGS), st_data_t);
+int st_foreach_check(st_table *, int (*)(ANYARGS), st_data_t, st_data_t);
+st_index_t st_keys(st_table *table, st_data_t *keys, st_index_t size);
+st_index_t st_keys_check(st_table *table, st_data_t *keys, st_index_t size, st_data_t never);
+st_index_t st_values(st_table *table, st_data_t *values, st_index_t size);
+st_index_t st_values_check(st_table *table, st_data_t *values, st_index_t size, st_data_t never);
+void st_add_direct(st_table *, st_data_t, st_data_t);
+void st_free_table(st_table *);
+void st_cleanup_safe(st_table *, st_data_t);
+void st_clear(st_table *);
+st_table *st_copy(st_table *);
+int st_numcmp(st_data_t, st_data_t);
+st_index_t st_numhash(st_data_t);
+int st_locale_insensitive_strcasecmp(const char *s1, const char *s2);
+int st_locale_insensitive_strncasecmp(const char *s1, const char *s2, size_t n);
+#define st_strcasecmp st_locale_insensitive_strcasecmp
+#define st_strncasecmp st_locale_insensitive_strncasecmp
+size_t st_memsize(const st_table *);
+st_index_t st_hash(const void *ptr, size_t len, st_index_t h);
+st_index_t st_hash_uint32(st_index_t h, uint32_t i);
+st_index_t st_hash_uint(st_index_t h, st_index_t i);
+st_index_t st_hash_end(st_index_t h);
+st_index_t st_hash_start(st_index_t h);
+#define st_hash_start(h) ((st_index_t)(h))
+
+RUBY_SYMBOL_EXPORT_END
+
+#if defined(__cplusplus)
+#if 0
+{ /* satisfy cc-mode */
+#endif
+}  /* extern "C" { */
+#endif
+
+#endif /* RUBY_ST_H */
