diff options
Diffstat (limited to 'unicode')
| -rw-r--r-- | unicode/ChangeLog | 5 | ||||
| -rw-r--r-- | unicode/Makefile.am | 4 | ||||
| -rw-r--r-- | unicode/book.xml | 161 | ||||
| -rw-r--r-- | unicode/configure.ac | 17 | ||||
| -rw-r--r-- | unicode/courier-unicode.h.in | 176 | ||||
| -rw-r--r-- | unicode/eastasianwidth.h | 2 | ||||
| -rw-r--r-- | unicode/enttest.c | 2 | ||||
| -rw-r--r-- | unicode/linebreaktab_internal.h | 2 | ||||
| -rw-r--r-- | unicode/linebreaktest.C | 22 | ||||
| -rw-r--r-- | unicode/mkeastasianwidth.pl | 2 | ||||
| -rw-r--r-- | unicode/mkultcase.pl | 2 | ||||
| -rw-r--r-- | unicode/unicode.c | 38 | ||||
| -rw-r--r-- | unicode/unicode_categories.c | 20 | ||||
| -rw-r--r-- | unicode/unicode_graphemebreak.c | 2 | ||||
| -rw-r--r-- | unicode/unicode_htmlent.c | 6 | ||||
| -rw-r--r-- | unicode/unicode_linebreak.c | 14 | ||||
| -rw-r--r-- | unicode/unicode_scripts.c | 2 | ||||
| -rw-r--r-- | unicode/unicode_tablookup.c | 4 | ||||
| -rw-r--r-- | unicode/unicode_ultcase.c | 14 | ||||
| -rw-r--r-- | unicode/unicode_ultcasetab.c | 776 | ||||
| -rw-r--r-- | unicode/unicode_wcwidth.c | 4 | ||||
| -rw-r--r-- | unicode/unicode_wordbreak.c | 6 | ||||
| -rw-r--r-- | unicode/unicodebuf.c | 12 | ||||
| -rw-r--r-- | unicode/unicodecpp.C | 54 | ||||
| -rw-r--r-- | unicode/unicodetest.c | 2 | ||||
| -rw-r--r-- | unicode/wordbreaktest.C | 4 | 
26 files changed, 702 insertions, 651 deletions
| diff --git a/unicode/ChangeLog b/unicode/ChangeLog index 68d0427..95f525f 100644 --- a/unicode/ChangeLog +++ b/unicode/ChangeLog @@ -1,3 +1,8 @@ +2017-03-06  Sam Varshavchik  <mrsam@courier-mta.com> + +	* Migrate to C++11: remove unicode_char, use char32_t. Replace +	std::vector<unicode_char> with std::u32string. +  1.5  2016-02-19  Sam Varshavchik  <mrsam@courier-mta.com> diff --git a/unicode/Makefile.am b/unicode/Makefile.am index 0618602..d2232eb 100644 --- a/unicode/Makefile.am +++ b/unicode/Makefile.am @@ -1,5 +1,5 @@  # -# Copyright 2000-2014 Double Precision, Inc.  See COPYING for +# Copyright 2000-2017 Double Precision, Inc.  See COPYING for  # distribution information. @@ -77,7 +77,7 @@ libcourier_unicode_la_SOURCES=\  			categoriestab.h \  			unicode_categories.c -libcourier_unicode_la_LDFLAGS=-version-info 3:0:0 +libcourier_unicode_la_LDFLAGS=-version-info 4:0:0  EXTRA_DIST=$(noinst_SCRIPTS) $(man_MANS) $(PACKAGE).spec \  	packaging/freebsd10/pkg-descr diff --git a/unicode/book.xml b/unicode/book.xml index b9a7000..abd4115 100644 --- a/unicode/book.xml +++ b/unicode/book.xml @@ -100,6 +100,15 @@ See COPYING for distribution information.      <para>        To use the library, <quote>#include <courier-unicode.h></quote> and link        with <literal>-lcourier-unicode</literal>. +      The C++ compiler must have C++11 support. Minimum usable version of +      gcc appears to be gcc 4.4 with the <literal>-std=c++0x</literal> flag. +      Current versions of gcc use C++11, or higher, by default and do not +      require extra flags. Like with all C++ code, the same compiler, and flags, +      must be used to build code that uses this library that was used to +      build the library itself. +    </para> + +    <para>        The starting point is        <link linkend="courier-unicode">  	<citerefentry> @@ -158,6 +167,16 @@ See COPYING for distribution information.  	      characters, in addition to unicode characters, with  	      modified-UTF7.  	  </para> + +	  <para> +	    The C++ compiler must have C++11 support. Minimum usable version of +	    gcc appears to be gcc 4.4 with the <literal>-std=c++0x</literal> +	    flag. Current versions of gcc use C++11, or higher, by default and +	    do not require extra flags. Consult the packaging documentation +	    for the Courier Unicode Library for information on any +	    compiler flags that are needed to build software that links +	    with this library. +	  </para>  	</refsect1>  	<refsect1>  	  <title>SEE ALSO</title> @@ -302,7 +321,7 @@ See COPYING for distribution information.  	    <funcprototype>                <funcdef>unicode_convert_handle_t <function>unicode_convert_tou_init</function></funcdef>                <paramdef>const char *<parameter>src_chset</parameter></paramdef> -	      <paramdef>unicode_char **<parameter>ucptr_ret</parameter></paramdef> +	      <paramdef>char32_t **<parameter>ucptr_ret</parameter></paramdef>  	      <paramdef>size_t *<parameter>ucsize_ret</parameter></paramdef>                <paramdef>int <parameter>nullterminate</parameter></paramdef>  	    </funcprototype> @@ -318,7 +337,7 @@ See COPYING for distribution information.  	    <funcprototype>                <funcdef>int <function>unicode_convert_uc</function></funcdef>                <paramdef>unicode_convert_handle_t <parameter>handle</parameter></paramdef> -              <paramdef>const unicode_char *<parameter>text</parameter></paramdef> +              <paramdef>const char32_t *<parameter>text</parameter></paramdef>  	      <paramdef>size_t <parameter>cnt</parameter></paramdef>  	    </funcprototype> @@ -349,14 +368,14 @@ See COPYING for distribution information.                <paramdef>const char *<parameter>text</parameter></paramdef>  	      <paramdef>size_t <parameter>text_l</parameter></paramdef>                <paramdef>const char *<parameter>charset</parameter></paramdef> -              <paramdef>unicode_char **<parameter>uc</parameter></paramdef> +              <paramdef>char32_t **<parameter>uc</parameter></paramdef>  	      <paramdef>size_t *<parameter>ucsize</parameter></paramdef>  	      <paramdef>int *<parameter>error</parameter></paramdef>  	    </funcprototype>  	    <funcprototype>                <funcdef>int <function>unicode_convert_fromu_tobuf</function></funcdef> -              <paramdef>const unicode_char *<parameter>utext</parameter></paramdef> +              <paramdef>const char32_t *<parameter>utext</parameter></paramdef>  	      <paramdef>size_t <parameter>utext_l</parameter></paramdef>                <paramdef>const char *<parameter>charset</parameter></paramdef>                <paramdef>char **<parameter>c</parameter></paramdef> @@ -374,13 +393,13 @@ See COPYING for distribution information.  	  <para>  	    <varname>unicode_u_ucs4_native</varname>[] contains the  	    string <quote>UCS-4BE</quote> or <quote>UCS-4LE</quote>, -	    matching the native <classname>unicode_char</classname> endianness. +	    matching the native <classname>char32_t</classname> endianness.  	  </para>  	  <para>  	    <varname>unicode_u_ucs2_native</varname>[] contains the  	    string <quote>UCS-2BE</quote> or <quote>UCS-2LE</quote>, -	    matching the native <classname>unicode_char</classname> endianness. +	    matching the native <classname>char32_t</classname> endianness.  	  </para>  	  <para> @@ -520,26 +539,26 @@ See COPYING for distribution information.  	    <para>  	      <function>unicode_convert_tou_init</function>() -	      converts character text into a <classname>unicode_char</classname> +	      converts character text into a <classname>char32_t</classname>  	      buffer.  	      It works just like  	      <function>unicode_convert_tocbuf_init</function>(), except  	      that only the source character set gets specified and the output -	      buffer is a <classname>unicode_char</classname> buffer. +	      buffer is a <classname>char32_t</classname> buffer.  	      <parameter>nullterminate</parameter> terminates the converted  	      unicode characters with a <literal>U+0000</literal>.  	    </para>  	    <para>  	      <function>unicode_convert_fromu_init</function>() -	      converts <classname>unicode_char</classname>s to the output +	      converts <classname>char32_t</classname>s to the output  	      character set, and also works like  	      <function>unicode_convert_tocbuf_init</function>().  	      Additionally, in this case,  	      <function>unicode_convert_uc</function>() works just like  	      <function>unicode_convert</function>() except that the  	      input sequence is a -	      <classname>unicode_char</classname> sequence, and the +	      <classname>char32_t</classname> sequence, and the  	      count parameter is th enumber of unicode characters.  	    </para>  	  </refsect2> @@ -680,7 +699,7 @@ See COPYING for distribution information.  	  <funcsynopsis>  	    <funcsynopsisinfo>#include <courier-unicode.h></funcsynopsisinfo>  	    <funcprototype> -              <funcdef>unicode_char <function>unicode_html40ent_lookup</function></funcdef> +              <funcdef>char32_t <function>unicode_html40ent_lookup</function></funcdef>                <paramdef>const char *<parameter>entity</parameter></paramdef>  	    </funcprototype>  	  </funcsynopsis> @@ -751,52 +770,52 @@ See COPYING for distribution information.  	    <funcsynopsisinfo>#include <courier-unicode.h></funcsynopsisinfo>  	    <funcprototype>  	      <funcdef>uint32_t <function>unicode_category_lookup</function></funcdef> -              <paramdef>unicode_char <parameter>c</parameter></paramdef> +              <paramdef>char32_t <parameter>c</parameter></paramdef>  	    </funcprototype>  	    <funcprototype>                <funcdef>int <function>unicode_isalnum</function></funcdef> -              <paramdef>unicode_char <parameter>c</parameter></paramdef> +              <paramdef>char32_t <parameter>c</parameter></paramdef>  	    </funcprototype>  	    <funcprototype>                <funcdef>int <function>unicode_isalpha</function></funcdef> -              <paramdef>unicode_char <parameter>c</parameter></paramdef> +              <paramdef>char32_t <parameter>c</parameter></paramdef>  	    </funcprototype>  	    <funcprototype>                <funcdef>int <function>unicode_isblank</function></funcdef> -              <paramdef>unicode_char <parameter>c</parameter></paramdef> +              <paramdef>char32_t <parameter>c</parameter></paramdef>  	    </funcprototype>  	    <funcprototype>                <funcdef>int <function>unicode_isdigit</function></funcdef> -              <paramdef>unicode_char <parameter>c</parameter></paramdef> +              <paramdef>char32_t <parameter>c</parameter></paramdef>  	    </funcprototype>  	    <funcprototype>                <funcdef>int <function>unicode_isgraph</function></funcdef> -              <paramdef>unicode_char <parameter>c</parameter></paramdef> +              <paramdef>char32_t <parameter>c</parameter></paramdef>  	    </funcprototype>  	    <funcprototype>                <funcdef>int <function>unicode_islower</function></funcdef> -              <paramdef>unicode_char <parameter>c</parameter></paramdef> +              <paramdef>char32_t <parameter>c</parameter></paramdef>  	    </funcprototype>  	    <funcprototype>                <funcdef>int <function>unicode_ispunct</function></funcdef> -              <paramdef>unicode_char <parameter>c</parameter></paramdef> +              <paramdef>char32_t <parameter>c</parameter></paramdef>  	    </funcprototype>  	    <funcprototype>                <funcdef>int <function>unicode_isspace</function></funcdef> -              <paramdef>unicode_char <parameter>c</parameter></paramdef> +              <paramdef>char32_t <parameter>c</parameter></paramdef>  	    </funcprototype>  	    <funcprototype>                <funcdef>int <function>unicode_isupper</function></funcdef> -              <paramdef>unicode_char <parameter>c</parameter></paramdef> +              <paramdef>char32_t <parameter>c</parameter></paramdef>  	    </funcprototype>  	  </funcsynopsis>  	</refsynopsisdiv> @@ -973,8 +992,8 @@ See COPYING for distribution information.  	    <funcsynopsisinfo>#include <courier-unicode.h></funcsynopsisinfo>  	    <funcprototype>                <funcdef>int <function>unicode_grapheme_break</function></funcdef> -              <paramdef>unicode_char <parameter>a</parameter></paramdef> -              <paramdef>unicode_char <parameter>b</parameter></paramdef> +              <paramdef>char32_t <parameter>a</parameter></paramdef> +              <paramdef>char32_t <parameter>b</parameter></paramdef>  	    </funcprototype>  	  </funcsynopsis>  	</refsynopsisdiv> @@ -1027,7 +1046,7 @@ See COPYING for distribution information.  	    <funcsynopsisinfo>#include <courier-unicode.h></funcsynopsisinfo>  	    <funcprototype>                <funcdef>unicode_script_t <function>unicode_script</function></funcdef> -              <paramdef>unicode_char <parameter>ch</parameter></paramdef> +              <paramdef>char32_t <parameter>ch</parameter></paramdef>  	    </funcprototype>  	  </funcsynopsis>  	</refsynopsisdiv> @@ -1096,13 +1115,13 @@ See COPYING for distribution information.  	    <funcprototype>                <funcdef>int <function>unicode_lb_next</function></funcdef>                <paramdef>unicode_lb_info_t <parameter>lb</parameter></paramdef> -              <paramdef>unicode_char <parameter>c</parameter></paramdef> +              <paramdef>char32_t <parameter>c</parameter></paramdef>  	    </funcprototype>  	    <funcprototype>                <funcdef>int <function>unicode_lb_next_cnt</function></funcdef>                <paramdef>unicode_lb_info_t <parameter>lb</parameter></paramdef> -              <paramdef>const unicode_char *<parameter>cptr</parameter></paramdef> +              <paramdef>const char32_t *<parameter>cptr</parameter></paramdef>                <paramdef>size_t <parameter>cnt</parameter></paramdef>  	    </funcprototype> @@ -1115,7 +1134,7 @@ See COPYING for distribution information.  	  <funcsynopsis>  	    <funcprototype>                <funcdef>unicode_lbc_info_t <function>unicode_lbc_init</function></funcdef> -              <paramdef>int (*<parameter>cb_func</parameter>)(int, unicode_char, void *)</paramdef> +              <paramdef>int (*<parameter>cb_func</parameter>)(int, char32_t, void *)</paramdef>                <paramdef>void *<parameter>cb_arg</parameter></paramdef>  	    </funcprototype> @@ -1128,13 +1147,13 @@ See COPYING for distribution information.  	    <funcprototype>                <funcdef>int <function>unicode_lbc_next</function></funcdef>                <paramdef>unicode_lb_info_t <parameter>lb</parameter></paramdef> -              <paramdef>unicode_char <parameter>c</parameter></paramdef> +              <paramdef>char32_t <parameter>c</parameter></paramdef>  	    </funcprototype>  	    <funcprototype>                <funcdef>int <function>unicode_lbc_next_cnt</function></funcdef>                <paramdef>unicode_lb_info_t <parameter>lb</parameter></paramdef> -              <paramdef>const unicode_char *<parameter>cptr</parameter></paramdef> +              <paramdef>const char32_t *<parameter>cptr</parameter></paramdef>                <paramdef>size_t <parameter>cnt</parameter></paramdef>  	    </funcprototype> @@ -1414,13 +1433,13 @@ See COPYING for distribution information.  	    <funcprototype>                <funcdef>int <function>unicode_wb_next</function></funcdef>                <paramdef>unicode_wb_info_t <parameter>wb</parameter></paramdef> -              <paramdef>unicode_char <parameter>c</parameter></paramdef> +              <paramdef>char32_t <parameter>c</parameter></paramdef>  	    </funcprototype>  	    <funcprototype>                <funcdef>int <function>unicode_wb_next_cnt</function></funcdef>                <paramdef>unicode_wb_info_t <parameter>wb</parameter></paramdef> -              <paramdef>const unicode_char *<parameter>cptr</parameter></paramdef> +              <paramdef>const char32_t *<parameter>cptr</parameter></paramdef>                <paramdef>size_t <parameter>cnt</parameter></paramdef>  	    </funcprototype> @@ -1437,7 +1456,7 @@ See COPYING for distribution information.  	    <funcprototype>                <funcdef>int <function>unicode_wbscan_next</function></funcdef>                <paramdef>unicode_wbscan_info_t <parameter>wbs</parameter></paramdef> -              <paramdef>unicode_char <parameter>c</parameter></paramdef> +              <paramdef>char32_t <parameter>c</parameter></paramdef>  	    </funcprototype>  	    <funcprototype> @@ -1616,20 +1635,20 @@ See COPYING for distribution information.  	  <funcsynopsis>  	    <funcsynopsisinfo>#include <courier-unicode.h></funcsynopsisinfo>  	    <funcprototype> -              <funcdef>unicode_char <function>unicode_uc</function></funcdef> -              <paramdef>unicode_char <parameter>c</parameter></paramdef> +              <funcdef>char32_t <function>unicode_uc</function></funcdef> +              <paramdef>char32_t <parameter>c</parameter></paramdef>  	    </funcprototype>  	  </funcsynopsis>  	  <funcsynopsis>  	    <funcprototype> -              <funcdef>unicode_char <function>unicode_lc</function></funcdef> -              <paramdef>unicode_char <parameter>c</parameter></paramdef> +              <funcdef>char32_t <function>unicode_lc</function></funcdef> +              <paramdef>char32_t <parameter>c</parameter></paramdef>  	    </funcprototype>  	  </funcsynopsis>  	  <funcsynopsis>  	    <funcprototype> -              <funcdef>unicode_char <function>unicode_tc</function></funcdef> -              <paramdef>unicode_char <parameter>c</parameter></paramdef> +              <funcdef>char32_t <function>unicode_tc</function></funcdef> +              <paramdef>char32_t <parameter>c</parameter></paramdef>  	    </funcprototype>  	  </funcsynopsis>  	  <funcsynopsis> @@ -1637,8 +1656,8 @@ See COPYING for distribution information.                <funcdef>char *<function>unicode_convert_tocase</function></funcdef>                <paramdef>const char *<parameter>str</parameter></paramdef>                <paramdef>const char *<parameter>charset</parameter></paramdef> -              <paramdef>unicode_char (*<parameter>first_char_func</parameter>)(uncode_char)</paramdef> -              <paramdef>unicode_char (*<parameter>char_func</parameter>)(uncode_char)</paramdef> +              <paramdef>char32_t (*<parameter>first_char_func</parameter>)(uncode_char)</paramdef> +              <paramdef>char32_t (*<parameter>char_func</parameter>)(uncode_char)</paramdef>  	    </funcprototype>  	  </funcsynopsis>  	</refsynopsisdiv> @@ -1754,13 +1773,13 @@ extern const char unicode::iso_8859_1[];</funcsynopsisinfo>  	    <funcprototype>                <funcdef>std::string <function>unicode::iconvert::convert</function></funcdef> -              <paramdef>const std::vector<unicode_char> &<parameter>text</parameter></paramdef> +              <paramdef>const std::vector<char32_t> &<parameter>text</parameter></paramdef>                <paramdef>const std::string &<parameter>dstcharset</parameter></paramdef>  	    </funcprototype>  	    <funcprototype>                <funcdef>std::string <function>unicode::iconvert::convert</function></funcdef> -              <paramdef>const std::vector<unicode_char> &<parameter>text</parameter></paramdef> +              <paramdef>const std::vector<char32_t> &<parameter>text</parameter></paramdef>                <paramdef>const std::string &<parameter>dstcharset</parameter></paramdef>                <paramdef>bool &<parameter>errflag</parameter></paramdef>  	    </funcprototype> @@ -1769,7 +1788,7 @@ extern const char unicode::iso_8859_1[];</funcsynopsisinfo>                <funcdef>bool <function>unicode::iconvert::convert</function></funcdef>                <paramdef>const std::string &<parameter>text</parameter></paramdef>                <paramdef>const std::string &<parameter>charset</parameter></paramdef> -              <paramdef>std::vector<unicode_char> &<parameter>text</parameter></paramdef> +              <paramdef>std::vector<char32_t> &<parameter>text</parameter></paramdef>  	    </funcprototype>  	  </funcsynopsis>  	</refsynopsisdiv> @@ -1875,8 +1894,8 @@ extern const char unicode::iso_8859_1[];</funcsynopsisinfo>                <funcdef>std::string <function>unicode::iconvert::convert_tocase</function></funcdef>                <paramdef>const std::string &<parameter>text</parameter></paramdef>                <paramdef>const std::string &<parameter>charset</parameter></paramdef> -              <paramdef>unicode_char (*<parameter>first_char_func</parameter>)(unicode_char)</paramdef> -              <paramdef>unicode_char (*<parameter>char_func</parameter>)(unicode_char)</paramdef> +              <paramdef>char32_t (*<parameter>first_char_func</parameter>)(char32_t)</paramdef> +              <paramdef>char32_t (*<parameter>char_func</parameter>)(char32_t)</paramdef>  	    </funcprototype>  	    <funcprototype> @@ -1884,8 +1903,8 @@ extern const char unicode::iso_8859_1[];</funcsynopsisinfo>                <paramdef>const std::string &<parameter>text</parameter></paramdef>                <paramdef>const std::string &<parameter>charset</parameter></paramdef>                <paramdef>bool &<parameter>err</parameter></paramdef> -              <paramdef>unicode_char (*<parameter>first_char_func</parameter>)(unicode_char)</paramdef> -              <paramdef>unicode_char (*<parameter>char_func</parameter>)(unicode_char)</paramdef> +              <paramdef>char32_t (*<parameter>first_char_func</parameter>)(char32_t)</paramdef> +              <paramdef>char32_t (*<parameter>char_func</parameter>)(char32_t)</paramdef>  	    </funcprototype>  	  </funcsynopsis>  	</refsynopsisdiv> @@ -1981,7 +2000,7 @@ extern const char unicode::iso_8859_1[];</funcsynopsisinfo>  	    <funcprototype>                <funcdef>std::pair<std::string, bool> <function>unicode::iconvert::fromu::convert</function></funcdef> -              <paramdef>const std::vector<unicode_char> &<parameter>text</parameter></paramdef> +              <paramdef>const std::u32string &<parameter>text</parameter></paramdef>                <paramdef>const std::string &<parameter>charset</parameter></paramdef>  	    </funcprototype>  	  </funcsynopsis> @@ -1995,7 +2014,7 @@ extern const char unicode::iso_8859_1[];</funcsynopsisinfo>  	    text in the given character set.  	    <parameter>beg_iter</parameter> and  	    <parameter>end_iter</parameter> define an input sequence of -	    <classname>unicode_char</classname>s. +	    <classname>char32_t</classname>s.  	    They get converted to unicode characters.  	    <parameter>output_iter</parameter> is an output iterator that  	    <function>convert</function>() @@ -2013,7 +2032,7 @@ extern const char unicode::iso_8859_1[];</funcsynopsisinfo>  	    into a <classname>std::string</classname>, instead of using  	    an output iterator.  	    Finally, a single -	    <classname>std::vector<unicode_char></classname> +	    <classname>std::u32string</classname>  	    specifies the character string, instead of a beginning and an  	    ending iterator.  	  </para> @@ -2072,11 +2091,11 @@ extern const char unicode::iso_8859_1[];</funcsynopsisinfo>                <paramdef>input_iter_t <parameter>beg_iter</parameter></paramdef>                <paramdef>input_iter_t <parameter>end_iter</parameter></paramdef>                <paramdef>const std::string &<parameter>charset</parameter></paramdef> -              <paramdef>std::vector<unicode_char> &<parameter>out_buf</parameter></paramdef> +              <paramdef>std::u32string &<parameter>out_buf</parameter></paramdef>  	    </funcprototype>  	    <funcprototype> -              <funcdef>std::pair<std::vector<unicode_char>, bool> <function>convert</function></funcdef> +              <funcdef>std::pair<std::u32string, bool> <function>convert</function></funcdef>                <paramdef>const std::string &<parameter>text</parameter></paramdef>                <paramdef>const std::string &<parameter>charset</parameter></paramdef>  	    </funcprototype> @@ -2095,7 +2114,7 @@ extern const char unicode::iso_8859_1[];</funcsynopsisinfo>  	    character set. They get converted to unicode characters.  	    <parameter>output_iter</parameter> is an output iterator that  	    <function>convert</function>() -	    iterates over <classname>unicode_char</classname>s. +	    iterates over <classname>char32_t</classname>s.  	    <function>convert</function>() returns the value of the output  	    iterator after iterating over the converted character sequence.  	    <parameter>errflag</parameter>, passed by reference, gets set to @@ -2108,7 +2127,7 @@ extern const char unicode::iso_8859_1[];</funcsynopsisinfo>  	  <para>  	    An overloaded <function>convert</function>() puts the unicode  	    character sequence into a vector of -	    <classname>unicode_char</classname>s, instead of an output +	    <classname>char32_t</classname>s, instead of an output  	    sequence, and returned the error flag.  	    Finally, a single <classname>std::string</classname>  	    specifies the character string, instead of a beginning and an @@ -2173,8 +2192,8 @@ public:      }  }; -unicode_char c; -std::vector<unicode_char> buf; +char32_t c; +std::u32string buf;  linebreak compute_linebreak; @@ -2198,7 +2217,7 @@ public:      using unicode::linebreak_callback_base::operator<<;      using unicode::linebreak_callback_base::operator(); -    int callback(int linebreak_code, unicode_char ch) +    int callback(int linebreak_code, char32_t ch)      {          // ...      } @@ -2206,9 +2225,9 @@ public:  // ... -std::vector<unicode_char> buf; +std::u32string buf; -typedef unicode::linebreak_iter<std::vector<unicode_char>::const_iterator> iter_t; +typedef unicode::linebreak_iter<std::u32string::const_iterator> iter_t;  iter_t beg_iter(buf.begin(), buf.end()), end_iter; @@ -2220,13 +2239,13 @@ std::copy(beg_iter, end_iter, std::back_insert_iterator<std::vector<int>  // ... -typedef unicode::linebreakc_iter<std::vector<unicode_char>::const_iterator> iter_t; +typedef unicode::linebreakc_iter<std::u32string::const_iterator> iter_t;  iter_t beg_iter(buf.begin(), buf.end()), end_iter;  beg_iter.set_opts(UNICODE_LB_OPT_SYBREAK); -std::vector<std::pair<int, unicode_char>> linebreaks; +std::vector<std::pair<int, char32_t>> linebreaks;  std::copy(beg_iter, end_iter, std::back_insert_iterator<std::vector<int>>(linebreaks));</programlisting>  	</refsynopsisdiv> @@ -2301,13 +2320,13 @@ std::copy(beg_iter, end_iter, std::back_insert_iterator<std::vector<int>  	    The template parameter is an input iterator over  	    <classname>unicode</classname> chars. The constructor's parameters  	    are a beginning and an ending iterator value for a sequence of -	    <classname>unicode_char</classname>. This constructs the beginning +	    <classname>char32_t</classname>. This constructs the beginning  	    iterator value for a sequence of <classname>int</classname>s  	    consisting of line-break values  	    (<literal>UNICODE_LB_MANDATORY</literal>,  	    <literal>UNICODE_LB_NONE</literal>, or  	    <literal>UNICODE_LB_ALLOWED</literal>) corresponding to each -	    <classname>unicode_char</classname> in the underlying sequence. +	    <classname>char32_t</classname> in the underlying sequence.  	    The default constructor creates the ending iterator value for the  	    sequence.  	  </para> @@ -2321,7 +2340,7 @@ std::copy(beg_iter, end_iter, std::back_insert_iterator<std::vector<int>  	    The <classname>linebreakc_iter</classname> template implements a  	    similar input iterator, with the difference that it ends up iterating  	    over a <classname>std::pair</classname> of line-breaking values and -	    the corresponding <classname>unicode_char</classname> from the +	    the corresponding <classname>char32_t</classname> from the  	    underlying input sequence.  	  </para>  	</refsect1> @@ -2375,8 +2394,8 @@ std::copy(beg_iter, end_iter, std::back_insert_iterator<std::vector<int>  	    </funcprototype>  	    <funcprototype> -              <funcdef>std::vector<unicode_char> <function>unicode::tolower</function></funcdef> -	      <paramdef>const std::vector<unicode_char> &<parameter>u</parameter></paramdef> +              <funcdef>std::u32string <function>unicode::tolower</function></funcdef> +	      <paramdef>const std::u32string &<parameter>u</parameter></paramdef>  	    </funcprototype>  	    <funcprototype> @@ -2391,8 +2410,8 @@ std::copy(beg_iter, end_iter, std::back_insert_iterator<std::vector<int>  	    </funcprototype>  	    <funcprototype> -              <funcdef>std::vector<unicode_char> <function>unicode::toupper</function></funcdef> -	      <paramdef>const std::vector<unicode_char> &<parameter>u</parameter></paramdef> +              <funcdef>std::u32string <function>unicode::toupper</function></funcdef> +	      <paramdef>const std::u32string &<parameter>u</parameter></paramdef>  	    </funcprototype>  	  </funcsynopsis>  	</refsynopsisdiv> @@ -2419,7 +2438,7 @@ std::copy(beg_iter, end_iter, std::back_insert_iterator<std::vector<int>  	  <para>  	    Passing a -	    <classname>const std::vector<unicode_char> &</classname> +	    <classname>const std::u32string &</classname>  	    directly also converts it accordingly, returning the converted  	    unicode string.  	  </para> @@ -2477,8 +2496,8 @@ public:      }  }; -unicode_char c; -std::vector<unicode_char> buf; +char32_t c; +std::u32string buf;  wordbreak compute_wordbreak; diff --git a/unicode/configure.ac b/unicode/configure.ac index 079f461..7d71cf8 100644 --- a/unicode/configure.ac +++ b/unicode/configure.ac @@ -1,6 +1,6 @@  dnl Process this file with autoconf to produce a configure script. -AC_INIT([courier-unicode], [1.5], [courier-users@lists.sourceforge.net]) +AC_INIT([courier-unicode], [1.5.20170306], [courier-users@lists.sourceforge.net])  >confdefs.h  # Kill PACKAGE_ macros @@ -54,6 +54,21 @@ else       AC_SUBST(LANGINFO_L,0)  fi + +AC_TRY_COMPILE([ +#include <uchar.h> +],[ +char32_t c=0; +], +[ +HAVE_UCHAR_H=1 +], +[ +HAVE_UCHAR_H=0 +]) + +AC_SUBST(HAVE_UCHAR_H) +  AM_CONDITIONAL(UPDATE_UNICODE, test -f ${srcdir}/UnicodeData.txt)  AC_SYS_LARGEFILE diff --git a/unicode/courier-unicode.h.in b/unicode/courier-unicode.h.in index 9b58f5c..ac12d25 100644 --- a/unicode/courier-unicode.h.in +++ b/unicode/courier-unicode.h.in @@ -2,7 +2,7 @@  #define	courier_unicode_h  /* -** Copyright 2000-2015 Double Precision, Inc. +** Copyright 2000-2017 Double Precision, Inc.  ** See COPYING for distribution information.  **  */ @@ -26,7 +26,19 @@ extern "C" {  #include	<sys/types.h>  #include	<locale.h> -typedef uint32_t unicode_char; +#ifdef __cplusplus + +#else + +#if @HAVE_UCHAR_H@ + +#include	<uchar.h> + +#else + +typedef uint32_t char32_t; +#endif +#endif  /*  ** The system default character set, from the locale. @@ -46,9 +58,9 @@ extern const char *unicode_locale_chset_l(locale_t l);  /* Unicode upper/lower/title case conversion functions */ -extern unicode_char unicode_uc(unicode_char); -extern unicode_char unicode_lc(unicode_char); -extern unicode_char unicode_tc(unicode_char); +extern char32_t unicode_uc(char32_t); +extern char32_t unicode_lc(char32_t); +extern char32_t unicode_tc(char32_t);  /*  ** Look up HTML 4.0/XHTML entity. @@ -58,7 +70,7 @@ extern unicode_char unicode_tc(unicode_char);  ** Returns the unicode entity value, or 0 if no such entity is defined.  */ -unicode_char unicode_html40ent_lookup(const char *n); +char32_t unicode_html40ent_lookup(const char *n);  /*  ** @@ -75,19 +87,19 @@ unicode_char unicode_html40ent_lookup(const char *n);  ** shown on a text console.  */ -extern int unicode_wcwidth(unicode_char c); -extern size_t unicode_wcwidth_str(const unicode_char *c); +extern int unicode_wcwidth(char32_t c); +extern size_t unicode_wcwidth_str(const char32_t *c);  /* Internal unicode table lookup functions */ -extern uint8_t unicode_tab_lookup(unicode_char ch, +extern uint8_t unicode_tab_lookup(char32_t ch,  				  const size_t *unicode_indextab,  				  size_t unicode_indextab_sizeof,  				  const uint8_t (*unicode_rangetab)[2],  				  const uint8_t *unicode_classtab,  				  uint8_t uclass); -extern uint32_t unicode_tab32_lookup(unicode_char ch, +extern uint32_t unicode_tab32_lookup(char32_t ch,  				     const size_t *unicode_indextab,  				     size_t unicode_indextab_sizeof,  				     const uint8_t (*unicode_rangetab)[2], @@ -108,63 +120,63 @@ extern uint32_t unicode_tab32_lookup(unicode_char ch,  #include <courier-unicode-categories-tab.h> -uint32_t unicode_category_lookup(unicode_char); +uint32_t unicode_category_lookup(char32_t);  /*  ** Return non-0 for TAB, and all UNICODE_CATEGORY_2_SPACE.  */ -extern int unicode_isblank(unicode_char ch); +extern int unicode_isblank(char32_t ch);  /*  ** The unicode-ish isspace(). In addition to return non-0 for  ** unicode_isblank(), this also returns non-0 for unicode characters  ** with linebreaking properties of BK, CR, LF, NL, and SP.  */ -extern int unicode_isspace(unicode_char ch); +extern int unicode_isspace(char32_t ch);  /*  ** Return non-0 for all UNICODE_CATEGORY_1_LETTER  */ -extern int unicode_isalpha(unicode_char ch); +extern int unicode_isalpha(char32_t ch);  /*  ** Return non-0 for all UNICODE_CATEGORY_1_NUMBER | UNICODE_CATEGORY_2_DIGIT,  ** only (no third categories).  */ -extern int unicode_isdigit(unicode_char ch); +extern int unicode_isdigit(char32_t ch);  /*  ** Return non-0 for all unicode_isalpha() or unicode_isdigit().  */ -extern int unicode_isalnum(unicode_char ch); +extern int unicode_isalnum(char32_t ch);  /*  ** Returns non-0 for all codepoints above SPACE which are not  ** unicode_isspace().  */ -extern int unicode_isgraph(unicode_char ch); +extern int unicode_isgraph(char32_t ch);  /*  ** Return non-0 for all UNICODE_CATEGORY_1_PUNCTUATION.  */ -extern int unicode_ispunct(unicode_char ch); +extern int unicode_ispunct(char32_t ch);  /*  ** Return non-0 for all unicode_isalpha() for which the character is  ** equal to unicode_lc() of itself.  */ -extern int unicode_islower(unicode_char ch); +extern int unicode_islower(char32_t ch);  /*  ** Return non-0 for all unicode_isalpha() for which the character is  ** equal to unicode_uc() of itself.  */ -extern int unicode_isupper(unicode_char ch); +extern int unicode_isupper(char32_t ch);  /*  ** Implementation of grapheme cluster boundary rules, as per @@ -175,7 +187,7 @@ extern int unicode_isupper(unicode_char ch);  ** characters.  */ -int unicode_grapheme_break(unicode_char a, unicode_char b); +int unicode_grapheme_break(char32_t a, char32_t b);  typedef enum { @@ -188,7 +200,7 @@ typedef enum {  ** http://www.unicode.org/reports/tr24/tr24-24.html  */ -unicode_script_t unicode_script(unicode_char a); +unicode_script_t unicode_script(char32_t a);  /*  ** Implementation of line break rules, as per @@ -251,7 +263,7 @@ extern unicode_lb_info_t unicode_lb_init(int (*cb_func)(int, void *),  ** it returned 0.  */ -extern int unicode_lb_next(unicode_lb_info_t i, unicode_char ch); +extern int unicode_lb_next(unicode_lb_info_t i, char32_t ch);  /*  ** Convenience function that invokes unicode_lb_next() with a list of @@ -260,7 +272,7 @@ extern int unicode_lb_next(unicode_lb_info_t i, unicode_char ch);  */  extern int unicode_lb_next_cnt(unicode_lb_info_t i, -			       const unicode_char *chars, +			       const char32_t *chars,  			       size_t cnt);  /* @@ -292,12 +304,12 @@ struct unicode_lbc_info;  typedef struct unicode_lbc_info *unicode_lbc_info_t; -extern unicode_lbc_info_t unicode_lbc_init(int (*cb_func)(int, unicode_char, +extern unicode_lbc_info_t unicode_lbc_init(int (*cb_func)(int, char32_t,  							  void *),  					   void *cb_arg); -extern int unicode_lbc_next(unicode_lbc_info_t i, unicode_char ch); +extern int unicode_lbc_next(unicode_lbc_info_t i, char32_t ch);  extern int unicode_lbc_next_cnt(unicode_lbc_info_t i, -				const unicode_char *chars, +				const char32_t *chars,  				size_t cnt);  extern int unicode_lbc_end(unicode_lbc_info_t i); @@ -399,7 +411,7 @@ extern unicode_wb_info_t unicode_wb_init(int (*cb_func)(int, void *),  ** it returned 0.  */ -extern int unicode_wb_next(unicode_wb_info_t i, unicode_char ch); +extern int unicode_wb_next(unicode_wb_info_t i, char32_t ch);  /*  ** Convenience function that invokes unicode_wb_next() with a list of @@ -408,7 +420,7 @@ extern int unicode_wb_next(unicode_wb_info_t i, unicode_char ch);  */  extern int unicode_wb_next_cnt(unicode_wb_info_t i, -			       const unicode_char *chars, +			       const char32_t *chars,  			       size_t cnt);  /* @@ -448,7 +460,7 @@ typedef struct unicode_wbscan_info *unicode_wbscan_info_t;  unicode_wbscan_info_t unicode_wbscan_init(); -int unicode_wbscan_next(unicode_wbscan_info_t i, unicode_char ch); +int unicode_wbscan_next(unicode_wbscan_info_t i, char32_t ch);  size_t unicode_wbscan_end(unicode_wbscan_info_t i); @@ -457,7 +469,7 @@ size_t unicode_wbscan_end(unicode_wbscan_info_t i);  */  struct unicode_buf { -	unicode_char *ptr;	/* The unicode characters */ +	char32_t *ptr;	/* The unicode characters */  	size_t size,		/* Buffer size */  		len,		/* How many characters in ptr are initialized */  		max;		/* Maximum size the buffer can grow to */ @@ -519,7 +531,7 @@ void unicode_buf_deinit(struct unicode_buf *p);  */  int unicode_buf_append(struct unicode_buf *p,	/* The buffer */ -		       const unicode_char *uc,	/* Characters to append */ +		       const char32_t *uc,	/* Characters to append */  		       size_t l);		/* How many of them */  /* @@ -681,12 +693,12 @@ unicode_convert_tocbuf_init(/* Convert from this chset */  /* -** Specialization: convert some character text to a unicode_char array. +** Specialization: convert some character text to a char32_t array.  ** -** This is like unicode_convert_tocbuf_init(), but converts to a unicode_char +** This is like unicode_convert_tocbuf_init(), but converts to a char32_t  ** array.  ** -** The returned *ucsize_ret is initialized with the number of unicode_chars, +** The returned *ucsize_ret is initialized with the number of char32_ts,  ** rather than the byte count.  **  ** In all other ways, this function behaves identically to @@ -698,7 +710,7 @@ unicode_convert_tou_init(/* Convert from this chset */  			   const char *src_chset,  			   /* malloc()ed buffer pointer, on exit. */ -			   unicode_char **ucptr_ret, +			   char32_t **ucptr_ret,  			   /* size of the malloc()ed buffer, upon exit */  			   size_t *ucsize_ret, @@ -708,7 +720,7 @@ unicode_convert_tou_init(/* Convert from this chset */  			   );  /* -** Specialization: convert a unicode_char array to some character text. +** Specialization: convert a char32_t array to some character text.  **  ** This is the opposite of unicode_convert_tou_init(). Call this to  ** initialize the conversion handle, then use unicode_convert_uc() @@ -733,7 +745,7 @@ int unicode_convert_uc(/* The conversion handle */  			 unicode_convert_handle_t handle,  			 /* Text to convert */ -			 const unicode_char *text, +			 const char32_t *text,  			 /* Number of bytes to convert */  			 size_t cnt); @@ -858,7 +870,7 @@ int unicode_convert_tou_tobuf(/* Character text to convert */  				** If this function returns 0, this gets  				** initialized  				*/ -				unicode_char **uc, +				char32_t **uc,  				/*  				** Size of the allocated buffer @@ -884,7 +896,7 @@ int unicode_convert_tou_tobuf(/* Character text to convert */  */  int unicode_convert_fromu_tobuf(/* Unicode array to convert to a char str */ -				  const unicode_char *utext, +				  const char32_t *utext,  				  /*  				  ** Size of the unicode array. @@ -944,22 +956,22 @@ char *unicode_convert_tocase( /* String to convert */  			       ** str: unicode_uc, unicode_lc, or unicode_tc:  			       */ -			       unicode_char (*first_char_func)(unicode_char), +			       char32_t (*first_char_func)(char32_t),  			       /*  			       ** Conversion of the second and the remaining  			       ** character in str. If NULL, same as  			       ** first_char_func.  			       */ -			       unicode_char (*char_func)(unicode_char)); +			       char32_t (*char_func)(char32_t)); -/* Either UCS-4BE or UCS-4LE, matching the native unicode_char endianness */ +/* Either UCS-4BE or UCS-4LE, matching the native char32_t endianness */  extern const char unicode_u_ucs4_native[]; -/* Either UCS-2BE or UCS-2LE, matching the native unicode_char endianness */ +/* Either UCS-2BE or UCS-2LE, matching the native char32_t endianness */  extern const char unicode_u_ucs2_native[]; @@ -980,7 +992,7 @@ extern const char unicode_u_ucs2_native[];  #ifdef	__cplusplus  } -extern size_t unicode_wcwidth(const std::vector<unicode_char> &uc); +extern size_t unicode_wcwidth(const std::u32string &uc);  namespace unicode { @@ -1025,7 +1037,7 @@ class iconvert {  	bool operator()(const char *, size_t); -	bool operator()(const unicode_char *, size_t); +	bool operator()(const char32_t *, size_t);  	/*  	** Get the results here. If the subclass returns a non-0 @@ -1074,13 +1086,13 @@ class iconvert {  	/* Convert from unicode to a charset */ -	static std::string convert(const std::vector<unicode_char> &uc, +	static std::string convert(const std::u32string &uc,  				   const std::string &dstcharset,  				   bool &errflag);  	/* Convert from unicode to a charset */ -	static std::string convert(const std::vector<unicode_char> &uc, +	static std::string convert(const std::u32string &uc,  				   const std::string &dstcharset)  	{  		bool dummy; @@ -1092,7 +1104,7 @@ class iconvert {  	static bool convert(const std::string &text,  			    const std::string &charset, -			    std::vector<unicode_char> &uc); +			    std::u32string &uc);  	/* Convert to upper/lower/title case */ @@ -1105,10 +1117,10 @@ class iconvert {  			       const std::string &charset,  			       /* First character: unicode_uc, unicode_lc, or unicode_tc */ -			       unicode_char (*first_char_func)(unicode_char), +			       char32_t (*first_char_func)(char32_t),  			       /* If not NULL, second and subsequent chars */ -			       unicode_char (*char_func)(unicode_char) +			       char32_t (*char_func)(char32_t)  			       =NULL)  	{  		bool dummy; @@ -1131,10 +1143,10 @@ class iconvert {  			       bool &err,  			       /* First character: unicode_uc, unicode_lc, or unicode_tc */ -			       unicode_char (*first_char_func)(unicode_char), +			       char32_t (*first_char_func)(char32_t),  			       /* If not NULL, second and subsequent chars */ -			       unicode_char (*char_func)(unicode_char) +			       char32_t (*char_func)(char32_t)  			       =NULL);   private:  	bool end(bool *); @@ -1144,14 +1156,14 @@ class iconvert {  	class fromu;  }; -/* Convert output of iconvert to unicode_chars. */ +/* Convert output of iconvert to char32_ts. */  class iconvert::tou : public iconvert {   public:  	bool begin(const std::string &chset); -	virtual int converted(const unicode_char *, size_t); +	virtual int converted(const char32_t *, size_t);  	using iconvert::operator();   private: @@ -1172,12 +1184,12 @@ class iconvert::tou : public iconvert {  		static bool convert(input_iter_t from_iter,  				    input_iter_t to_iter,  				    const std::string &chset, -				    std::vector<unicode_char> &out_buf) +				    std::u32string &out_buf)  	{  		bool flag;  		out_buf.clear(); -		std::back_insert_iterator<std::vector<unicode_char> > +		std::back_insert_iterator<std::u32string >  			insert_iter(out_buf);  		convert(from_iter, to_iter, chset, flag, insert_iter); @@ -1185,7 +1197,7 @@ class iconvert::tou : public iconvert {  		return flag;  	} -	static std::pair<std::vector<unicode_char>, bool> +	static std::pair<std::u32string, bool>  		convert(const std::string &str,  			const std::string &chset);  }; @@ -1206,7 +1218,7 @@ class iconvert::tou::to_iter_class : public iconvert::tou {  	operator iter_t() const { return iter; }   private: -	int converted(const unicode_char *ptr, size_t cnt) +	int converted(const char32_t *ptr, size_t cnt)  	{  		while (cnt)  		{ @@ -1253,7 +1265,7 @@ template<typename input_iter_t,  	return out;  } -/* Convert output of iconvert from unicode_chars. */ +/* Convert output of iconvert from char32_ts. */  class iconvert::fromu : public iconvert { @@ -1288,7 +1300,7 @@ class iconvert::fromu : public iconvert {  	}  	static std::pair<std::string, bool> -		convert(const std::vector<unicode_char> &ubuf, +		convert(const std::u32string &ubuf,  			const std::string &chset);  }; @@ -1337,7 +1349,7 @@ template<typename input_iter_t,  	if (!out.begin(chset))  		return out; -	std::vector<unicode_char> string; +	std::u32string string;  	while (from_iter != to_iter)  	{ @@ -1362,14 +1374,14 @@ template<typename input_iter_t,  */  extern "C" int linebreak_trampoline(int value, void *ptr); -extern "C" int linebreakc_trampoline(int value, unicode_char ch, +extern "C" int linebreakc_trampoline(int value, char32_t ch,  				     void *ptr);  /*  ** Subclass linebreak_callback_base, implement operator()(int).  **  ** Use operator<< or operator()(iterator, iterator) to feed -** unicode_chars into the linebreaking algorithm. The subclass receives +** char32_ts into the linebreaking algorithm. The subclass receives  ** UNICODE_LB values, as they become available.  */ @@ -1403,7 +1415,7 @@ class linebreak_callback_base {  	friend int linebreak_trampoline(int, void *); -	linebreak_callback_base &operator<<(unicode_char uc); +	linebreak_callback_base &operator<<(char32_t uc);  	template<typename iter_type>  		linebreak_callback_base &operator()(iter_type beg_iter, @@ -1438,7 +1450,7 @@ class linebreak_callback_save_buf : public linebreak_callback_base {  };  /* -** Convert an input iterator sequence over unicode_chars into +** Convert an input iterator sequence over char32_ts into  ** an input iterator sequence over linebreak values.  */ @@ -1590,9 +1602,9 @@ class linebreakc_callback_base {  	void set_opts(int opts); -	friend int linebreakc_trampoline(int, unicode_char, void *); +	friend int linebreakc_trampoline(int, char32_t, void *); -	linebreakc_callback_base &operator<<(unicode_char uc); +	linebreakc_callback_base &operator<<(char32_t uc);  	template<typename iter_type>  		linebreakc_callback_base &operator()(iter_type beg_iter, @@ -1604,19 +1616,19 @@ class linebreakc_callback_base {  	}  	linebreakc_callback_base &operator<<(const -					     std::vector<unicode_char> +					     std::u32string  					     &vec)  	{  		return operator()(vec.begin(), vec.end());  	}   private: -	virtual int callback(int, unicode_char); +	virtual int callback(int, char32_t);  };  class linebreakc_callback_save_buf : public linebreakc_callback_base {   public: -	std::list<std::pair<int, unicode_char> > lb_buf; +	std::list<std::pair<int, char32_t> > lb_buf;  	linebreakc_callback_save_buf();  	~linebreakc_callback_save_buf(); @@ -1624,20 +1636,20 @@ class linebreakc_callback_save_buf : public linebreakc_callback_base {  	using linebreakc_callback_base::operator<<;  	using linebreakc_callback_base::operator();   private: -	int callback(int, unicode_char); +	int callback(int, char32_t);  };  /* -** Convert an input iterator sequence over unicode_chars into -** an input iterator sequence over std::pair<int, unicode_char>, +** Convert an input iterator sequence over char32_ts into +** an input iterator sequence over std::pair<int, char32_t>,  ** the original unicode character, and the linebreaking value before  ** the character.  */  template<typename input_t> class linebreakc_iter  : public std::iterator<std::input_iterator_tag, -	std::pair<int, unicode_char>, void> +	std::pair<int, char32_t>, void>  {  	mutable input_t iter_value, end_iter_value; @@ -1723,7 +1735,7 @@ template<typename input_t> class linebreakc_iter  		fill();  		return buf == NULL ?  			std::make_pair(UNICODE_LB_MANDATORY, -				       (unicode_char)0): +				       (char32_t)0):  			buf->lb_buf.front();  	} @@ -1748,7 +1760,7 @@ template<typename input_t> class linebreakc_iter  ** Subclass wordbreak_callback_base, implement operator()(int).  **  ** Use operator<< or operator()(iterator, iterator) to feed -** unicode_chars into the wordbreaking algorithm. The subclass receives +** char32_ts into the wordbreaking algorithm. The subclass receives  ** word flags, as they become available.  */ @@ -1782,7 +1794,7 @@ class wordbreak_callback_base {  	friend int wordbreak_trampoline(int, void *); -	wordbreak_callback_base &operator<<(unicode_char uc); +	wordbreak_callback_base &operator<<(char32_t uc);  	template<typename iter_type>  		wordbreak_callback_base &operator()(iter_type beg_iter, @@ -1794,7 +1806,7 @@ class wordbreak_callback_base {  	}  	wordbreak_callback_base &operator<<(const -					    std::vector<unicode_char> +					    std::u32string  					    &vec)  	{  		return operator()(vec.begin(), vec.end()); @@ -1828,7 +1840,7 @@ class wordbreakscan {  	wordbreakscan();  	~wordbreakscan(); -	bool operator<<(unicode_char uc); +	bool operator<<(char32_t uc);  	size_t finish();  }; @@ -1853,11 +1865,11 @@ std::string toupper(const std::string &string,  //! Convert unicode to lowercase -std::vector<unicode_char> tolower(const std::vector<unicode_char> &u); +std::u32string tolower(const std::u32string &u);  //! Convert unicode to uppercase -std::vector<unicode_char> toupper(const std::vector<unicode_char> &u); +std::u32string toupper(const std::u32string &u);  #if 0  { diff --git a/unicode/eastasianwidth.h b/unicode/eastasianwidth.h index 03eb91e..456b04b 100644 --- a/unicode/eastasianwidth.h +++ b/unicode/eastasianwidth.h @@ -1,4 +1,4 @@ -static const unicode_char unicode_wcwidth_tab[][2]={ +static const char32_t unicode_wcwidth_tab[][2]={  {0x1100, 0x115f},  {0x2329, 0x232a},  {0x2e80, 0x2e99}, diff --git a/unicode/enttest.c b/unicode/enttest.c index aa9f208..8db070a 100644 --- a/unicode/enttest.c +++ b/unicode/enttest.c @@ -8,7 +8,7 @@  struct i {  	size_t n_start;  	size_t n_size; -	unicode_char v; +	char32_t v;  };  #include "unicode_htmlent.h" diff --git a/unicode/linebreaktab_internal.h b/unicode/linebreaktab_internal.h index 2f6c165..56beed0 100644 --- a/unicode/linebreaktab_internal.h +++ b/unicode/linebreaktab_internal.h @@ -46,6 +46,6 @@  #define UNICODE_LB_RI   0x49  #define UNICODE_LB_SA	0x4A -extern int unicode_lb_lookup(unicode_char ch); +extern int unicode_lb_lookup(char32_t ch);  #endif diff --git a/unicode/linebreaktest.C b/unicode/linebreaktest.C index 46bbfee..effd7f4 100644 --- a/unicode/linebreaktest.C +++ b/unicode/linebreaktest.C @@ -59,7 +59,7 @@ static void testsuite()  			words.push_back(std::string(p, b));  		} -		std::vector<unicode_char> ubuf; +		std::u32string ubuf;  		std::vector<int> status;  		while (1) @@ -90,7 +90,7 @@ static void testsuite()  				std::istringstream i(words.front()); -				unicode_char uc; +				uint32_t uc;  				i >> std::hex >> uc; @@ -110,7 +110,7 @@ static void testsuite()  		std::vector<int> computed_status; -		typedef std::vector<unicode_char>::const_iterator ubuf_iter; +		typedef std::u32string::const_iterator ubuf_iter;  		typedef unicode::linebreak_iter<ubuf_iter> lb_iter;  		std::copy(lb_iter(ubuf.begin(), ubuf.end()), lb_iter(), @@ -138,18 +138,18 @@ static void testsuite()  static void testlinebreakc()  { -	static unicode_char str[]={'$', '(', 0x0300, 0x0301, 0x0302, 0x0303, +	static char32_t str[]={'$', '(', 0x0300, 0x0301, 0x0302, 0x0303,  				   0x0304, 0x0305, 0x0306, 0x0307, '1', '.',  				   '2', ' ', 'A'}; -	typedef std::vector<std::pair<int, unicode_char> > linebreakvec_t; +	typedef std::vector<std::pair<int, char32_t> > linebreakvec_t;  	linebreakvec_t linebreakvec; -	std::copy(unicode::linebreakc_iter<unicode_char *>(str, +	std::copy(unicode::linebreakc_iter<char32_t *>(str,  							str + sizeof(str)  							/sizeof(str[0])), -		  unicode::linebreakc_iter<unicode_char *>(), +		  unicode::linebreakc_iter<char32_t *>(),  		  std::back_insert_iterator<linebreakvec_t>  		  (linebreakvec)); @@ -179,7 +179,7 @@ int main(int argc, char **argv)  	std::string convteststr="0000000000000000000000000000000\xe3\x82\xa2"; -	std::pair<std::vector<unicode_char>, bool> uc; +	std::pair<std::u32string, bool> uc;  	uc=unicode::iconvert::tou::convert(convteststr, "utf-8"); @@ -189,11 +189,11 @@ int main(int argc, char **argv)  		exit(1);  	} -	std::vector<unicode_char>::iterator e(uc.first.end()), +	std::u32string::iterator e(uc.first.end()),  		b(std::find_if(uc.first.begin(), e, -			       std::not1(std::bind2nd(std::equal_to<unicode_char> +			       std::not1(std::bind2nd(std::equal_to<char32_t>  						      (), -						      unicode_char('0'))))); +						      char32_t('0')))));  	if (b == e || *b++ != 0x30A2 || b != e)  	{ diff --git a/unicode/mkeastasianwidth.pl b/unicode/mkeastasianwidth.pl index 0ddf800..d34f064 100644 --- a/unicode/mkeastasianwidth.pl +++ b/unicode/mkeastasianwidth.pl @@ -9,7 +9,7 @@ my $fh=new IO::File "<EastAsianWidth.txt";  my $pb=-1;  my $pe=-1; -print "static const unicode_char unicode_wcwidth_tab[][2]={\n"; +print "static const char32_t unicode_wcwidth_tab[][2]={\n";  sub full($$) {      my $b=hex(shift); diff --git a/unicode/mkultcase.pl b/unicode/mkultcase.pl index 2a2632a..93a08d1 100644 --- a/unicode/mkultcase.pl +++ b/unicode/mkultcase.pl @@ -75,7 +75,7 @@ print "const unsigned unicode_case_hash=$tabsize;\n";  print "/* unicode_case_maxbucket="      . ($maxcnt+2) . "*/\n"; -print "const unicode_char unicode_case_tab[][4]={\n"; +print "const char32_t unicode_case_tab[][4]={\n";  my $idx=0; diff --git a/unicode/unicode.c b/unicode/unicode.c index 462ca2b..71e6439 100644 --- a/unicode/unicode.c +++ b/unicode/unicode.c @@ -1300,15 +1300,15 @@ char *unicode_convert_tobuf(const char *text,  /*****************************************************************************/  /* -** Convert text to unicode_chars. Same basic approach as +** Convert text to char32_ts. Same basic approach as  ** unicode_convert_tocbuf_init(). The output character set gets specified  ** as UCS-4, the final output size is divided by 4, and the output buffer gets -** typed as a unicode_char array. +** typed as a char32_t array.  */  struct unicode_convert_buf {  	struct unicode_convert_buf *next; -	unicode_char *fragment; +	char32_t *fragment;  	size_t fragment_size;  	size_t max_fragment_size;  }; @@ -1316,7 +1316,7 @@ struct unicode_convert_buf {  struct unicode_convert_tou {  	struct unicode_convert_hdr hdr; -	unicode_char **ucptr_ret; +	char32_t **ucptr_ret;  	size_t *ucsize_ret;  	int errflag;  	size_t tot_size; @@ -1332,7 +1332,7 @@ static int deinit_tounicode(void *ptr, int *errptr);  unicode_convert_handle_t  unicode_convert_tou_init(const char *src_chset, -			   unicode_char **ucptr_ret, +			   char32_t **ucptr_ret,  			   size_t *ucsize_ret,  			   int nullterminate  			   ) @@ -1381,7 +1381,7 @@ unicode_convert_fromu_init(const char *dst_chset,  }  int unicode_convert_uc(unicode_convert_handle_t handle, -			 const unicode_char *text, +			 const char32_t *text,  			 size_t cnt)  {  	return unicode_convert(handle, (const char *)text, @@ -1397,9 +1397,9 @@ static int save_unicode(const char *text, size_t cnt, void *ptr)  	struct unicode_convert_buf *fragment;  	size_t tot_size; -	cnt /= sizeof(unicode_char); +	cnt /= sizeof(char32_t); -	tot_size=p->tot_size + cnt*sizeof(unicode_char); +	tot_size=p->tot_size + cnt*sizeof(char32_t);  	/* Keep track of the total size saved */  	if (p->tail) @@ -1412,10 +1412,10 @@ static int save_unicode(const char *text, size_t cnt, void *ptr)  		if (n)  		{  			memcpy(p->tail->fragment+p->tail->fragment_size, -			       text, n*sizeof(unicode_char)); +			       text, n*sizeof(char32_t));  			cnt -= n; -			text += n*sizeof(unicode_char); +			text += n*sizeof(char32_t);  			p->tail->fragment_size += n;  		}  	} @@ -1428,7 +1428,7 @@ static int save_unicode(const char *text, size_t cnt, void *ptr)  			cnt_alloc=16;  		if ((fragment=malloc(sizeof(struct unicode_convert_buf) -				     +cnt_alloc*sizeof(unicode_char))) +				     +cnt_alloc*sizeof(char32_t)))  		    == NULL)  		{  			p->errflag=1; @@ -1436,10 +1436,10 @@ static int save_unicode(const char *text, size_t cnt, void *ptr)  		}  		fragment->next=NULL; -		fragment->fragment=(unicode_char *)(fragment+1); +		fragment->fragment=(char32_t *)(fragment+1);  		fragment->max_fragment_size=cnt_alloc;  		fragment->fragment_size=cnt; -		memcpy(fragment->fragment, text, cnt*sizeof(unicode_char)); +		memcpy(fragment->fragment, text, cnt*sizeof(char32_t));  		*(p->last)=fragment;  		p->last=&fragment->next; @@ -1480,7 +1480,7 @@ static int deinit_tounicode(void *ptr, int *errptr)  	if (rc == 0 && p->nullterminate)  	{ -		unicode_char zero=0; +		char32_t zero=0;  		rc=save_unicode( (const char *)&zero, sizeof(zero),  				 p->hdr.ptr); @@ -1526,7 +1526,7 @@ static int deinit_tounicode(void *ptr, int *errptr)  int unicode_convert_tou_tobuf(const char *text,  				size_t text_l,  				const char *charset, -				unicode_char **uc, +				char32_t **uc,  				size_t *ucsize,  				int *err)  { @@ -1547,7 +1547,7 @@ int unicode_convert_tou_tobuf(const char *text,  	return 0;  } -int unicode_convert_fromu_tobuf(const unicode_char *utext, +int unicode_convert_fromu_tobuf(const char32_t *utext,  				  size_t utext_l,  				  const char *charset,  				  char **c, @@ -1579,10 +1579,10 @@ int unicode_convert_fromu_tobuf(const unicode_char *utext,  char *unicode_convert_tocase(const char *str,  			       const char *charset, -			       unicode_char (*first_char_func)(unicode_char), -			       unicode_char (*char_func)(unicode_char)) +			       char32_t (*first_char_func)(char32_t), +			       char32_t (*char_func)(char32_t))  { -	unicode_char *uc; +	char32_t *uc;  	size_t ucsize;  	size_t i;  	int err; diff --git a/unicode/unicode_categories.c b/unicode/unicode_categories.c index bdbdbe1..5e57e40 100644 --- a/unicode/unicode_categories.c +++ b/unicode/unicode_categories.c @@ -9,7 +9,7 @@  #include	"categoriestab.h"  #include	"linebreaktab_internal.h" -uint32_t unicode_category_lookup(unicode_char ch) +uint32_t unicode_category_lookup(char32_t ch)  {  	return unicode_tab32_lookup(ch,  				    unicode_indextab, @@ -20,7 +20,7 @@ uint32_t unicode_category_lookup(unicode_char ch)  				    0);  } -int unicode_isspace(unicode_char ch) +int unicode_isspace(char32_t ch)  {  	switch (unicode_lb_lookup(ch)) {  	case UNICODE_LB_BK: @@ -34,7 +34,7 @@ int unicode_isspace(unicode_char ch)  	return unicode_isblank(ch);  } -int unicode_isblank(unicode_char ch) +int unicode_isblank(char32_t ch)  {  	if (ch == 9)  		return 1; @@ -45,40 +45,40 @@ int unicode_isblank(unicode_char ch)  	return 0;  } -int unicode_isalpha(unicode_char ch) +int unicode_isalpha(char32_t ch)  {  	return (unicode_category_lookup(ch) & UNICODE_CATEGORY_1) ==  		UNICODE_CATEGORY_1_LETTER;  } -int unicode_isdigit(unicode_char ch) +int unicode_isdigit(char32_t ch)  {  	return unicode_category_lookup(ch) ==  		(UNICODE_CATEGORY_1_NUMBER | UNICODE_CATEGORY_2_DIGIT);  } -int unicode_isalnum(unicode_char ch) +int unicode_isalnum(char32_t ch)  {  	return unicode_isalpha(ch) || unicode_isdigit(ch);  } -int unicode_isgraph(unicode_char ch) +int unicode_isgraph(char32_t ch)  {  	return (ch >= ' ' && !unicode_isspace(ch));  } -int unicode_ispunct(unicode_char ch) +int unicode_ispunct(char32_t ch)  {  	return (unicode_category_lookup(ch) & UNICODE_CATEGORY_1) ==  		UNICODE_CATEGORY_1_PUNCTUATION;  } -int unicode_islower(unicode_char ch) +int unicode_islower(char32_t ch)  {  	return unicode_isalpha(ch) && ch == unicode_lc(ch);  } -int unicode_isupper(unicode_char ch) +int unicode_isupper(char32_t ch)  {  	return unicode_isalpha(ch) && ch == unicode_uc(ch);  } diff --git a/unicode/unicode_graphemebreak.c b/unicode/unicode_graphemebreak.c index 7df3164..926bfb1 100644 --- a/unicode/unicode_graphemebreak.c +++ b/unicode/unicode_graphemebreak.c @@ -26,7 +26,7 @@  #include "graphemebreaktab.h" -int unicode_grapheme_break(unicode_char a, unicode_char b) +int unicode_grapheme_break(char32_t a, char32_t b)  {  	uint8_t ac=unicode_tab_lookup(a, unicode_indextab,  			 sizeof(unicode_indextab)/sizeof(unicode_indextab[0]), diff --git a/unicode/unicode_htmlent.c b/unicode/unicode_htmlent.c index b1111ce..5472db8 100644 --- a/unicode/unicode_htmlent.c +++ b/unicode/unicode_htmlent.c @@ -12,7 +12,7 @@  struct i {  	size_t n_start;  	size_t n_size; -	unicode_char v; +	char32_t v;  };  #include "unicode_htmlent.h" @@ -42,14 +42,14 @@ static int compar(const void *key, const void *obj)  	return 0;  } -unicode_char unicode_html40ent_lookup(const char *n) +char32_t unicode_html40ent_lookup(const char *n)  {  	const struct i *ptr;  	if (*n == '#')  	{  		const char *p=n; -		unicode_char uc; +		char32_t uc;  		char *endptr;  		++p; diff --git a/unicode/unicode_linebreak.c b/unicode/unicode_linebreak.c index 85421fd..a843c6c 100644 --- a/unicode/unicode_linebreak.c +++ b/unicode/unicode_linebreak.c @@ -91,7 +91,7 @@ static int end_def(unicode_lb_info_t i)  #define RESULT(x) (*i->cb_func)((x), i->cb_arg)  int unicode_lb_next_cnt(unicode_lb_info_t i, -			const unicode_char *chars, +			const char32_t *chars,  			size_t cnt)  {  	while (cnt) @@ -107,7 +107,7 @@ int unicode_lb_next_cnt(unicode_lb_info_t i,  	return 0;  } -int unicode_lb_lookup(unicode_char ch) +int unicode_lb_lookup(char32_t ch)  {  	return unicode_tab_lookup(ch,  				  unicode_indextab, @@ -119,7 +119,7 @@ int unicode_lb_lookup(unicode_char ch)  }  int unicode_lb_next(unicode_lb_info_t i, -		    unicode_char ch) +		    char32_t ch)  {  	return (*i->next_handler)(i, (i->opts & UNICODE_LB_OPT_DASHWJ) &&  				  (ch == 0x2012 || ch == 0x2013) @@ -596,7 +596,7 @@ struct unicode_lbc_info {  	size_t buf_ptr; -	int (*cb_func)(int, unicode_char, void *); +	int (*cb_func)(int, char32_t, void *);  	void *cb_arg;  }; @@ -614,7 +614,7 @@ static int unicode_lbc_callback(int value, void *ptr)  			     h->cb_arg);  } -unicode_lbc_info_t unicode_lbc_init(int (*cb_func)(int, unicode_char, void *), +unicode_lbc_info_t unicode_lbc_init(int (*cb_func)(int, char32_t, void *),  				    void *cb_arg)  {  	unicode_lbc_info_t h= @@ -641,7 +641,7 @@ void unicode_lbc_set_opts(unicode_lbc_info_t i, int opts)  }  int unicode_lbc_next_cnt(unicode_lbc_info_t i, -			 const unicode_char *chars, +			 const char32_t *chars,  			 size_t cnt)  {  	while (cnt) @@ -657,7 +657,7 @@ int unicode_lbc_next_cnt(unicode_lbc_info_t i,  	return 0;  } -int unicode_lbc_next(unicode_lbc_info_t i, unicode_char ch) +int unicode_lbc_next(unicode_lbc_info_t i, char32_t ch)  {  	if (i->buf_ptr >= unicode_buf_len(&i->buf))  	{ diff --git a/unicode/unicode_scripts.c b/unicode/unicode_scripts.c index 6d52b40..713846b 100644 --- a/unicode/unicode_scripts.c +++ b/unicode/unicode_scripts.c @@ -8,7 +8,7 @@  #include	"courier-unicode.h"  #include "scriptstab.h" -unicode_script_t unicode_script(unicode_char a) +unicode_script_t unicode_script(char32_t a)  {  	return unicode_tab_lookup(a, unicode_indextab,  				  sizeof(unicode_indextab) diff --git a/unicode/unicode_tablookup.c b/unicode/unicode_tablookup.c index 067aa5d..1f04652 100644 --- a/unicode/unicode_tablookup.c +++ b/unicode/unicode_tablookup.c @@ -9,7 +9,7 @@  #define BLOCK_SIZE	256 -uint8_t unicode_tab_lookup(unicode_char ch, +uint8_t unicode_tab_lookup(char32_t ch,  			   const size_t *unicode_indextab,  			   size_t unicode_indextab_sizeof,  			   const uint8_t (*unicode_rangetab)[2], @@ -48,7 +48,7 @@ uint8_t unicode_tab_lookup(unicode_char ch,  	return uclass;  } -uint32_t unicode_tab32_lookup(unicode_char ch, +uint32_t unicode_tab32_lookup(char32_t ch,  			      const size_t *unicode_indextab,  			      size_t unicode_indextab_sizeof,  			      const uint8_t (*unicode_rangetab)[2], diff --git a/unicode/unicode_ultcase.c b/unicode/unicode_ultcase.c index 44da797..3ddd9e3 100644 --- a/unicode/unicode_ultcase.c +++ b/unicode/unicode_ultcase.c @@ -8,16 +8,16 @@  #include "courier-unicode.h"  extern const unsigned unicode_case_hash; -extern const unicode_char unicode_case_tab[][4]; +extern const char32_t unicode_case_tab[][4];  extern const unsigned unicode_case_offset[]; -static unsigned find_case(unicode_char c) +static unsigned find_case(char32_t c)  {  	unsigned idx= c % unicode_case_hash;  	unsigned i=unicode_case_offset[idx]; -	unicode_char uc; +	char32_t uc;  	--i; @@ -31,24 +31,24 @@ static unsigned find_case(unicode_char c)  	return (0);  } -unicode_char unicode_uc(unicode_char c) +char32_t unicode_uc(char32_t c)  {  	unsigned i=find_case(c);  	return (unicode_case_tab[i][0] != c ? c:unicode_case_tab[i][1]);  } -unicode_char unicode_lc(unicode_char c) +char32_t unicode_lc(char32_t c)  {  	unsigned i=find_case(c);  	return (unicode_case_tab[i][0] != c ? c:unicode_case_tab[i][2]);  } -unicode_char unicode_tc(unicode_char c) +char32_t unicode_tc(char32_t c)  {  	unsigned i; -	unicode_char oc=c; +	char32_t oc=c;  	c=unicode_lc(c);  	i=find_case(c); diff --git a/unicode/unicode_ultcasetab.c b/unicode/unicode_ultcasetab.c index 747f9c6..5b8fee2 100644 --- a/unicode/unicode_ultcasetab.c +++ b/unicode/unicode_ultcasetab.c @@ -8,7 +8,7 @@  const unsigned unicode_case_hash=2048;  /* unicode_case_maxbucket=6*/ -const unicode_char unicode_case_tab[][4]={ +const char32_t unicode_case_tab[][4]={  {0x0041,0x0041,0x0061,0x0041},{0x0042,0x0042,0x0062,0x0042},{0x0043,0x0043,0x0063,0x0043},{0x0044,0x0044,0x0064,0x0044},  {0x0045,0x0045,0x0065,0x0045},{0x0046,0x0046,0x0066,0x0046},{0x0047,0x0047,0x0067,0x0047},{0x0048,0x0048,0x0068,0x0048},  {0x0049,0x0049,0x0069,0x0049},{0x004a,0x004a,0x006a,0x004a},{0x004b,0x004b,0x006b,0x004b},{0x004c,0x004c,0x006c,0x004c}, @@ -22,39 +22,39 @@ const unicode_char unicode_case_tab[][4]={  {0x006f,0x004f,0x006f,0x004f},{0x0070,0x0050,0x0070,0x0050},{0x0071,0x0051,0x0071,0x0051},{0x0072,0x0052,0x0072,0x0052},  {0x0073,0x0053,0x0073,0x0053},{0x0074,0x0054,0x0074,0x0054},{0x0075,0x0055,0x0075,0x0055},{0x0076,0x0056,0x0076,0x0056},  {0x0077,0x0057,0x0077,0x0057},{0x0078,0x0058,0x0078,0x0058},{0x0079,0x0059,0x0079,0x0059},{0x007a,0x005a,0x007a,0x005a}, -{0x118a0,0x118a0,0x118c0,0x118a0},{0x10a0,0x10a0,0x2d00,0x10a0},{0x10a1,0x10a1,0x2d01,0x10a1},{0x118a1,0x118a1,0x118c1,0x118a1}, -{0x10a2,0x10a2,0x2d02,0x10a2},{0x118a2,0x118a2,0x118c2,0x118a2},{0x118a3,0x118a3,0x118c3,0x118a3},{0x10a3,0x10a3,0x2d03,0x10a3}, -{0x10a4,0x10a4,0x2d04,0x10a4},{0x118a4,0x118a4,0x118c4,0x118a4},{0x10a5,0x10a5,0x2d05,0x10a5},{0x118a5,0x118a5,0x118c5,0x118a5}, -{0x118a6,0x118a6,0x118c6,0x118a6},{0x10a6,0x10a6,0x2d06,0x10a6},{0x10a7,0x10a7,0x2d07,0x10a7},{0x118a7,0x118a7,0x118c7,0x118a7}, -{0x118a8,0x118a8,0x118c8,0x118a8},{0x10a8,0x10a8,0x2d08,0x10a8},{0x10a9,0x10a9,0x2d09,0x10a9},{0x118a9,0x118a9,0x118c9,0x118a9}, +{0x10a0,0x10a0,0x2d00,0x10a0},{0x118a0,0x118a0,0x118c0,0x118a0},{0x118a1,0x118a1,0x118c1,0x118a1},{0x10a1,0x10a1,0x2d01,0x10a1}, +{0x118a2,0x118a2,0x118c2,0x118a2},{0x10a2,0x10a2,0x2d02,0x10a2},{0x118a3,0x118a3,0x118c3,0x118a3},{0x10a3,0x10a3,0x2d03,0x10a3}, +{0x118a4,0x118a4,0x118c4,0x118a4},{0x10a4,0x10a4,0x2d04,0x10a4},{0x118a5,0x118a5,0x118c5,0x118a5},{0x10a5,0x10a5,0x2d05,0x10a5}, +{0x118a6,0x118a6,0x118c6,0x118a6},{0x10a6,0x10a6,0x2d06,0x10a6},{0x118a7,0x118a7,0x118c7,0x118a7},{0x10a7,0x10a7,0x2d07,0x10a7}, +{0x10a8,0x10a8,0x2d08,0x10a8},{0x118a8,0x118a8,0x118c8,0x118a8},{0x118a9,0x118a9,0x118c9,0x118a9},{0x10a9,0x10a9,0x2d09,0x10a9},  {0x10aa,0x10aa,0x2d0a,0x10aa},{0x118aa,0x118aa,0x118ca,0x118aa},{0x118ab,0x118ab,0x118cb,0x118ab},{0x10ab,0x10ab,0x2d0b,0x10ab}, -{0x118ac,0x118ac,0x118cc,0x118ac},{0x10ac,0x10ac,0x2d0c,0x10ac},{0x118ad,0x118ad,0x118cd,0x118ad},{0x10ad,0x10ad,0x2d0d,0x10ad}, -{0x10ae,0x10ae,0x2d0e,0x10ae},{0x118ae,0x118ae,0x118ce,0x118ae},{0x118af,0x118af,0x118cf,0x118af},{0x10af,0x10af,0x2d0f,0x10af}, -{0x118b0,0x118b0,0x118d0,0x118b0},{0x10b0,0x10b0,0x2d10,0x10b0},{0x10b1,0x10b1,0x2d11,0x10b1},{0x118b1,0x118b1,0x118d1,0x118b1}, +{0x10ac,0x10ac,0x2d0c,0x10ac},{0x118ac,0x118ac,0x118cc,0x118ac},{0x10ad,0x10ad,0x2d0d,0x10ad},{0x118ad,0x118ad,0x118cd,0x118ad}, +{0x118ae,0x118ae,0x118ce,0x118ae},{0x10ae,0x10ae,0x2d0e,0x10ae},{0x10af,0x10af,0x2d0f,0x10af},{0x118af,0x118af,0x118cf,0x118af}, +{0x10b0,0x10b0,0x2d10,0x10b0},{0x118b0,0x118b0,0x118d0,0x118b0},{0x10b1,0x10b1,0x2d11,0x10b1},{0x118b1,0x118b1,0x118d1,0x118b1},  {0x10b2,0x10b2,0x2d12,0x10b2},{0x118b2,0x118b2,0x118d2,0x118b2},{0x10b3,0x10b3,0x2d13,0x10b3},{0x118b3,0x118b3,0x118d3,0x118b3}, -{0x118b4,0x118b4,0x118d4,0x118b4},{0x10b4,0x10b4,0x2d14,0x10b4},{0x118b5,0x118b5,0x118d5,0x118b5},{0x00b5,0x039c,0x00b5,0x039c}, -{0x10b5,0x10b5,0x2d15,0x10b5},{0x118b6,0x118b6,0x118d6,0x118b6},{0x10b6,0x10b6,0x2d16,0x10b6},{0x118b7,0x118b7,0x118d7,0x118b7}, -{0x10b7,0x10b7,0x2d17,0x10b7},{0x118b8,0x118b8,0x118d8,0x118b8},{0x10b8,0x10b8,0x2d18,0x10b8},{0x10b9,0x10b9,0x2d19,0x10b9}, -{0x118b9,0x118b9,0x118d9,0x118b9},{0x10ba,0x10ba,0x2d1a,0x10ba},{0x118ba,0x118ba,0x118da,0x118ba},{0x118bb,0x118bb,0x118db,0x118bb}, -{0x10bb,0x10bb,0x2d1b,0x10bb},{0x118bc,0x118bc,0x118dc,0x118bc},{0x10bc,0x10bc,0x2d1c,0x10bc},{0x118bd,0x118bd,0x118dd,0x118bd}, -{0x10bd,0x10bd,0x2d1d,0x10bd},{0x118be,0x118be,0x118de,0x118be},{0x10be,0x10be,0x2d1e,0x10be},{0x10bf,0x10bf,0x2d1f,0x10bf}, -{0x118bf,0x118bf,0x118df,0x118bf},{0x00c0,0x00c0,0x00e0,0x00c0},{0x10c0,0x10c0,0x2d20,0x10c0},{0x118c0,0x118a0,0x118c0,0x118a0}, -{0x10c1,0x10c1,0x2d21,0x10c1},{0x00c1,0x00c1,0x00e1,0x00c1},{0x118c1,0x118a1,0x118c1,0x118a1},{0x118c2,0x118a2,0x118c2,0x118a2}, -{0x10c2,0x10c2,0x2d22,0x10c2},{0x00c2,0x00c2,0x00e2,0x00c2},{0x118c3,0x118a3,0x118c3,0x118a3},{0x10c3,0x10c3,0x2d23,0x10c3}, -{0x00c3,0x00c3,0x00e3,0x00c3},{0x118c4,0x118a4,0x118c4,0x118a4},{0x10c4,0x10c4,0x2d24,0x10c4},{0x00c4,0x00c4,0x00e4,0x00c4}, -{0x10c5,0x10c5,0x2d25,0x10c5},{0x118c5,0x118a5,0x118c5,0x118a5},{0x00c5,0x00c5,0x00e5,0x00c5},{0x00c6,0x00c6,0x00e6,0x00c6}, +{0x10b4,0x10b4,0x2d14,0x10b4},{0x118b4,0x118b4,0x118d4,0x118b4},{0x118b5,0x118b5,0x118d5,0x118b5},{0x00b5,0x039c,0x00b5,0x039c}, +{0x10b5,0x10b5,0x2d15,0x10b5},{0x10b6,0x10b6,0x2d16,0x10b6},{0x118b6,0x118b6,0x118d6,0x118b6},{0x10b7,0x10b7,0x2d17,0x10b7}, +{0x118b7,0x118b7,0x118d7,0x118b7},{0x118b8,0x118b8,0x118d8,0x118b8},{0x10b8,0x10b8,0x2d18,0x10b8},{0x118b9,0x118b9,0x118d9,0x118b9}, +{0x10b9,0x10b9,0x2d19,0x10b9},{0x118ba,0x118ba,0x118da,0x118ba},{0x10ba,0x10ba,0x2d1a,0x10ba},{0x118bb,0x118bb,0x118db,0x118bb}, +{0x10bb,0x10bb,0x2d1b,0x10bb},{0x10bc,0x10bc,0x2d1c,0x10bc},{0x118bc,0x118bc,0x118dc,0x118bc},{0x118bd,0x118bd,0x118dd,0x118bd}, +{0x10bd,0x10bd,0x2d1d,0x10bd},{0x118be,0x118be,0x118de,0x118be},{0x10be,0x10be,0x2d1e,0x10be},{0x118bf,0x118bf,0x118df,0x118bf}, +{0x10bf,0x10bf,0x2d1f,0x10bf},{0x10c0,0x10c0,0x2d20,0x10c0},{0x118c0,0x118a0,0x118c0,0x118a0},{0x00c0,0x00c0,0x00e0,0x00c0}, +{0x00c1,0x00c1,0x00e1,0x00c1},{0x10c1,0x10c1,0x2d21,0x10c1},{0x118c1,0x118a1,0x118c1,0x118a1},{0x118c2,0x118a2,0x118c2,0x118a2}, +{0x00c2,0x00c2,0x00e2,0x00c2},{0x10c2,0x10c2,0x2d22,0x10c2},{0x10c3,0x10c3,0x2d23,0x10c3},{0x118c3,0x118a3,0x118c3,0x118a3}, +{0x00c3,0x00c3,0x00e3,0x00c3},{0x10c4,0x10c4,0x2d24,0x10c4},{0x118c4,0x118a4,0x118c4,0x118a4},{0x00c4,0x00c4,0x00e4,0x00c4}, +{0x118c5,0x118a5,0x118c5,0x118a5},{0x10c5,0x10c5,0x2d25,0x10c5},{0x00c5,0x00c5,0x00e5,0x00c5},{0x00c6,0x00c6,0x00e6,0x00c6},  {0x118c6,0x118a6,0x118c6,0x118a6},{0x10c7,0x10c7,0x2d27,0x10c7},{0x118c7,0x118a7,0x118c7,0x118a7},{0x00c7,0x00c7,0x00e7,0x00c7}, -{0x00c8,0x00c8,0x00e8,0x00c8},{0x118c8,0x118a8,0x118c8,0x118a8},{0x118c9,0x118a9,0x118c9,0x118a9},{0x00c9,0x00c9,0x00e9,0x00c9}, -{0x118ca,0x118aa,0x118ca,0x118aa},{0x00ca,0x00ca,0x00ea,0x00ca},{0x00cb,0x00cb,0x00eb,0x00cb},{0x118cb,0x118ab,0x118cb,0x118ab}, -{0x00cc,0x00cc,0x00ec,0x00cc},{0x118cc,0x118ac,0x118cc,0x118ac},{0x00cd,0x00cd,0x00ed,0x00cd},{0x118cd,0x118ad,0x118cd,0x118ad}, -{0x10cd,0x10cd,0x2d2d,0x10cd},{0x00ce,0x00ce,0x00ee,0x00ce},{0x118ce,0x118ae,0x118ce,0x118ae},{0x118cf,0x118af,0x118cf,0x118af}, -{0x00cf,0x00cf,0x00ef,0x00cf},{0x00d0,0x00d0,0x00f0,0x00d0},{0x118d0,0x118b0,0x118d0,0x118b0},{0x00d1,0x00d1,0x00f1,0x00d1}, -{0x118d1,0x118b1,0x118d1,0x118b1},{0x118d2,0x118b2,0x118d2,0x118b2},{0x00d2,0x00d2,0x00f2,0x00d2},{0x00d3,0x00d3,0x00f3,0x00d3}, -{0x118d3,0x118b3,0x118d3,0x118b3},{0x118d4,0x118b4,0x118d4,0x118b4},{0x00d4,0x00d4,0x00f4,0x00d4},{0x00d5,0x00d5,0x00f5,0x00d5}, -{0x118d5,0x118b5,0x118d5,0x118b5},{0x00d6,0x00d6,0x00f6,0x00d6},{0x118d6,0x118b6,0x118d6,0x118b6},{0x118d7,0x118b7,0x118d7,0x118b7}, +{0x118c8,0x118a8,0x118c8,0x118a8},{0x00c8,0x00c8,0x00e8,0x00c8},{0x118c9,0x118a9,0x118c9,0x118a9},{0x00c9,0x00c9,0x00e9,0x00c9}, +{0x00ca,0x00ca,0x00ea,0x00ca},{0x118ca,0x118aa,0x118ca,0x118aa},{0x00cb,0x00cb,0x00eb,0x00cb},{0x118cb,0x118ab,0x118cb,0x118ab}, +{0x118cc,0x118ac,0x118cc,0x118ac},{0x00cc,0x00cc,0x00ec,0x00cc},{0x118cd,0x118ad,0x118cd,0x118ad},{0x10cd,0x10cd,0x2d2d,0x10cd}, +{0x00cd,0x00cd,0x00ed,0x00cd},{0x00ce,0x00ce,0x00ee,0x00ce},{0x118ce,0x118ae,0x118ce,0x118ae},{0x00cf,0x00cf,0x00ef,0x00cf}, +{0x118cf,0x118af,0x118cf,0x118af},{0x118d0,0x118b0,0x118d0,0x118b0},{0x00d0,0x00d0,0x00f0,0x00d0},{0x00d1,0x00d1,0x00f1,0x00d1}, +{0x118d1,0x118b1,0x118d1,0x118b1},{0x00d2,0x00d2,0x00f2,0x00d2},{0x118d2,0x118b2,0x118d2,0x118b2},{0x00d3,0x00d3,0x00f3,0x00d3}, +{0x118d3,0x118b3,0x118d3,0x118b3},{0x118d4,0x118b4,0x118d4,0x118b4},{0x00d4,0x00d4,0x00f4,0x00d4},{0x118d5,0x118b5,0x118d5,0x118b5}, +{0x00d5,0x00d5,0x00f5,0x00d5},{0x00d6,0x00d6,0x00f6,0x00d6},{0x118d6,0x118b6,0x118d6,0x118b6},{0x118d7,0x118b7,0x118d7,0x118b7},  {0x00d8,0x00d8,0x00f8,0x00d8},{0x118d8,0x118b8,0x118d8,0x118b8},{0x118d9,0x118b9,0x118d9,0x118b9},{0x00d9,0x00d9,0x00f9,0x00d9}, -{0x118da,0x118ba,0x118da,0x118ba},{0x00da,0x00da,0x00fa,0x00da},{0x118db,0x118bb,0x118db,0x118bb},{0x00db,0x00db,0x00fb,0x00db}, -{0x00dc,0x00dc,0x00fc,0x00dc},{0x118dc,0x118bc,0x118dc,0x118bc},{0x00dd,0x00dd,0x00fd,0x00dd},{0x118dd,0x118bd,0x118dd,0x118bd}, +{0x00da,0x00da,0x00fa,0x00da},{0x118da,0x118ba,0x118da,0x118ba},{0x00db,0x00db,0x00fb,0x00db},{0x118db,0x118bb,0x118db,0x118bb}, +{0x118dc,0x118bc,0x118dc,0x118bc},{0x00dc,0x00dc,0x00fc,0x00dc},{0x118dd,0x118bd,0x118dd,0x118bd},{0x00dd,0x00dd,0x00fd,0x00dd},  {0x00de,0x00de,0x00fe,0x00de},{0x118de,0x118be,0x118de,0x118be},{0x118df,0x118bf,0x118df,0x118bf},{0x00e0,0x00c0,0x00e0,0x00c0},  {0x00e1,0x00c1,0x00e1,0x00c1},{0x00e2,0x00c2,0x00e2,0x00c2},{0x00e3,0x00c3,0x00e3,0x00c3},{0x00e4,0x00c4,0x00e4,0x00c4},  {0x00e5,0x00c5,0x00e5,0x00c5},{0x00e6,0x00c6,0x00e6,0x00c6},{0x00e7,0x00c7,0x00e7,0x00c7},{0x00e8,0x00c8,0x00e8,0x00c8}, @@ -73,9 +73,9 @@ const unicode_char unicode_case_tab[][4]={  {0x011a,0x011a,0x011b,0x011a},{0x011b,0x011a,0x011b,0x011a},{0x011c,0x011c,0x011d,0x011c},{0x011d,0x011c,0x011d,0x011c},  {0x011e,0x011e,0x011f,0x011e},{0x011f,0x011e,0x011f,0x011e},{0x0120,0x0120,0x0121,0x0120},{0x0121,0x0120,0x0121,0x0120},  {0x0122,0x0122,0x0123,0x0122},{0x0123,0x0122,0x0123,0x0122},{0x0124,0x0124,0x0125,0x0124},{0x0125,0x0124,0x0125,0x0124}, -{0x0126,0x0126,0x0127,0x0126},{0x2126,0x2126,0x03c9,0x2126},{0x0127,0x0126,0x0127,0x0126},{0x0128,0x0128,0x0129,0x0128}, -{0x0129,0x0128,0x0129,0x0128},{0x012a,0x012a,0x012b,0x012a},{0x212a,0x212a,0x006b,0x212a},{0x012b,0x012a,0x012b,0x012a}, -{0x212b,0x212b,0x00e5,0x212b},{0x012c,0x012c,0x012d,0x012c},{0x012d,0x012c,0x012d,0x012c},{0x012e,0x012e,0x012f,0x012e}, +{0x2126,0x2126,0x03c9,0x2126},{0x0126,0x0126,0x0127,0x0126},{0x0127,0x0126,0x0127,0x0126},{0x0128,0x0128,0x0129,0x0128}, +{0x0129,0x0128,0x0129,0x0128},{0x012a,0x012a,0x012b,0x012a},{0x212a,0x212a,0x006b,0x212a},{0x212b,0x212b,0x00e5,0x212b}, +{0x012b,0x012a,0x012b,0x012a},{0x012c,0x012c,0x012d,0x012c},{0x012d,0x012c,0x012d,0x012c},{0x012e,0x012e,0x012f,0x012e},  {0x012f,0x012e,0x012f,0x012e},{0x0130,0x0130,0x0069,0x0130},{0x0131,0x0049,0x0131,0x0049},{0x2132,0x2132,0x214e,0x2132},  {0x0132,0x0132,0x0133,0x0132},{0x0133,0x0132,0x0133,0x0132},{0x0134,0x0134,0x0135,0x0134},{0x0135,0x0134,0x0135,0x0134},  {0x0136,0x0136,0x0137,0x0136},{0x0137,0x0136,0x0137,0x0136},{0x0139,0x0139,0x013a,0x0139},{0x013a,0x0139,0x013a,0x0139}, @@ -88,24 +88,24 @@ const unicode_char unicode_case_tab[][4]={  {0x0153,0x0152,0x0153,0x0152},{0x0154,0x0154,0x0155,0x0154},{0x0155,0x0154,0x0155,0x0154},{0x0156,0x0156,0x0157,0x0156},  {0x0157,0x0156,0x0157,0x0156},{0x0158,0x0158,0x0159,0x0158},{0x0159,0x0158,0x0159,0x0158},{0x015a,0x015a,0x015b,0x015a},  {0x015b,0x015a,0x015b,0x015a},{0x015c,0x015c,0x015d,0x015c},{0x015d,0x015c,0x015d,0x015c},{0x015e,0x015e,0x015f,0x015e}, -{0x015f,0x015e,0x015f,0x015e},{0x0160,0x0160,0x0161,0x0160},{0x2160,0x2160,0x2170,0x2160},{0x2161,0x2161,0x2171,0x2161}, -{0x0161,0x0160,0x0161,0x0160},{0x0162,0x0162,0x0163,0x0162},{0x2162,0x2162,0x2172,0x2162},{0x0163,0x0162,0x0163,0x0162}, -{0x2163,0x2163,0x2173,0x2163},{0x2164,0x2164,0x2174,0x2164},{0x0164,0x0164,0x0165,0x0164},{0x2165,0x2165,0x2175,0x2165}, -{0x0165,0x0164,0x0165,0x0164},{0x2166,0x2166,0x2176,0x2166},{0x0166,0x0166,0x0167,0x0166},{0x2167,0x2167,0x2177,0x2167}, +{0x015f,0x015e,0x015f,0x015e},{0x2160,0x2160,0x2170,0x2160},{0x0160,0x0160,0x0161,0x0160},{0x0161,0x0160,0x0161,0x0160}, +{0x2161,0x2161,0x2171,0x2161},{0x2162,0x2162,0x2172,0x2162},{0x0162,0x0162,0x0163,0x0162},{0x0163,0x0162,0x0163,0x0162}, +{0x2163,0x2163,0x2173,0x2163},{0x2164,0x2164,0x2174,0x2164},{0x0164,0x0164,0x0165,0x0164},{0x0165,0x0164,0x0165,0x0164}, +{0x2165,0x2165,0x2175,0x2165},{0x0166,0x0166,0x0167,0x0166},{0x2166,0x2166,0x2176,0x2166},{0x2167,0x2167,0x2177,0x2167},  {0x0167,0x0166,0x0167,0x0166},{0x0168,0x0168,0x0169,0x0168},{0x2168,0x2168,0x2178,0x2168},{0x2169,0x2169,0x2179,0x2169}, -{0x0169,0x0168,0x0169,0x0168},{0x216a,0x216a,0x217a,0x216a},{0x016a,0x016a,0x016b,0x016a},{0x016b,0x016a,0x016b,0x016a}, -{0x216b,0x216b,0x217b,0x216b},{0x216c,0x216c,0x217c,0x216c},{0x016c,0x016c,0x016d,0x016c},{0x216d,0x216d,0x217d,0x216d}, +{0x0169,0x0168,0x0169,0x0168},{0x016a,0x016a,0x016b,0x016a},{0x216a,0x216a,0x217a,0x216a},{0x016b,0x016a,0x016b,0x016a}, +{0x216b,0x216b,0x217b,0x216b},{0x016c,0x016c,0x016d,0x016c},{0x216c,0x216c,0x217c,0x216c},{0x216d,0x216d,0x217d,0x216d},  {0x016d,0x016c,0x016d,0x016c},{0x216e,0x216e,0x217e,0x216e},{0x016e,0x016e,0x016f,0x016e},{0x016f,0x016e,0x016f,0x016e}, -{0x216f,0x216f,0x217f,0x216f},{0x2170,0x2160,0x2170,0x2160},{0x0170,0x0170,0x0171,0x0170},{0x2171,0x2161,0x2171,0x2161}, -{0x0171,0x0170,0x0171,0x0170},{0x2172,0x2162,0x2172,0x2162},{0x0172,0x0172,0x0173,0x0172},{0x0173,0x0172,0x0173,0x0172}, -{0x2173,0x2163,0x2173,0x2163},{0x2174,0x2164,0x2174,0x2164},{0x0174,0x0174,0x0175,0x0174},{0x0175,0x0174,0x0175,0x0174}, -{0x2175,0x2165,0x2175,0x2165},{0x2176,0x2166,0x2176,0x2166},{0x0176,0x0176,0x0177,0x0176},{0x0177,0x0176,0x0177,0x0176}, -{0x2177,0x2167,0x2177,0x2167},{0x2178,0x2168,0x2178,0x2168},{0x0178,0x0178,0x00ff,0x0178},{0x2179,0x2169,0x2179,0x2169}, -{0x0179,0x0179,0x017a,0x0179},{0x017a,0x0179,0x017a,0x0179},{0x217a,0x216a,0x217a,0x216a},{0x217b,0x216b,0x217b,0x216b}, -{0x017b,0x017b,0x017c,0x017b},{0x017c,0x017b,0x017c,0x017b},{0x217c,0x216c,0x217c,0x216c},{0x017d,0x017d,0x017e,0x017d}, -{0x217d,0x216d,0x217d,0x216d},{0x217e,0x216e,0x217e,0x216e},{0x017e,0x017d,0x017e,0x017d},{0x217f,0x216f,0x217f,0x216f}, -{0x017f,0x0053,0x017f,0x0053},{0x0180,0x0243,0x0180,0x0243},{0x0181,0x0181,0x0253,0x0181},{0x0182,0x0182,0x0183,0x0182}, -{0x0183,0x0182,0x0183,0x0182},{0x2183,0x2183,0x2184,0x2183},{0x2184,0x2183,0x2184,0x2183},{0x0184,0x0184,0x0185,0x0184}, +{0x216f,0x216f,0x217f,0x216f},{0x0170,0x0170,0x0171,0x0170},{0x2170,0x2160,0x2170,0x2160},{0x0171,0x0170,0x0171,0x0170}, +{0x2171,0x2161,0x2171,0x2161},{0x2172,0x2162,0x2172,0x2162},{0x0172,0x0172,0x0173,0x0172},{0x0173,0x0172,0x0173,0x0172}, +{0x2173,0x2163,0x2173,0x2163},{0x0174,0x0174,0x0175,0x0174},{0x2174,0x2164,0x2174,0x2164},{0x2175,0x2165,0x2175,0x2165}, +{0x0175,0x0174,0x0175,0x0174},{0x2176,0x2166,0x2176,0x2166},{0x0176,0x0176,0x0177,0x0176},{0x2177,0x2167,0x2177,0x2167}, +{0x0177,0x0176,0x0177,0x0176},{0x2178,0x2168,0x2178,0x2168},{0x0178,0x0178,0x00ff,0x0178},{0x0179,0x0179,0x017a,0x0179}, +{0x2179,0x2169,0x2179,0x2169},{0x217a,0x216a,0x217a,0x216a},{0x017a,0x0179,0x017a,0x0179},{0x217b,0x216b,0x217b,0x216b}, +{0x017b,0x017b,0x017c,0x017b},{0x217c,0x216c,0x217c,0x216c},{0x017c,0x017b,0x017c,0x017b},{0x017d,0x017d,0x017e,0x017d}, +{0x217d,0x216d,0x217d,0x216d},{0x017e,0x017d,0x017e,0x017d},{0x217e,0x216e,0x217e,0x216e},{0x017f,0x0053,0x017f,0x0053}, +{0x217f,0x216f,0x217f,0x216f},{0x0180,0x0243,0x0180,0x0243},{0x0181,0x0181,0x0253,0x0181},{0x0182,0x0182,0x0183,0x0182}, +{0x2183,0x2183,0x2184,0x2183},{0x0183,0x0182,0x0183,0x0182},{0x2184,0x2183,0x2184,0x2183},{0x0184,0x0184,0x0185,0x0184},  {0x0185,0x0184,0x0185,0x0184},{0x0186,0x0186,0x0254,0x0186},{0x0187,0x0187,0x0188,0x0187},{0x0188,0x0187,0x0188,0x0187},  {0x0189,0x0189,0x0256,0x0189},{0x018a,0x018a,0x0257,0x018a},{0x018b,0x018b,0x018c,0x018b},{0x018c,0x018b,0x018c,0x018b},  {0x018e,0x018e,0x01dd,0x018e},{0x018f,0x018f,0x0259,0x018f},{0x0190,0x0190,0x025b,0x0190},{0x0191,0x0191,0x0192,0x0191}, @@ -161,278 +161,278 @@ const unicode_char unicode_case_tab[][4]={  {0x0280,0x01a6,0x0280,0x01a6},{0x0283,0x01a9,0x0283,0x01a9},{0x0287,0xa7b1,0x0287,0xa7b1},{0x0288,0x01ae,0x0288,0x01ae},  {0x0289,0x0244,0x0289,0x0244},{0x028a,0x01b1,0x028a,0x01b1},{0x028b,0x01b2,0x028b,0x01b2},{0x028c,0x0245,0x028c,0x0245},  {0x0292,0x01b7,0x0292,0x01b7},{0x029d,0xa7b2,0x029d,0xa7b2},{0x029e,0xa7b0,0x029e,0xa7b0},{0x0345,0x0399,0x0345,0x0399}, -{0xab53,0xa7b3,0xab53,0xa7b3},{0xab70,0x13a0,0xab70,0x13a0},{0x0370,0x0370,0x0371,0x0370},{0xab71,0x13a1,0xab71,0x13a1}, -{0x0371,0x0370,0x0371,0x0370},{0xab72,0x13a2,0xab72,0x13a2},{0x0372,0x0372,0x0373,0x0372},{0xab73,0x13a3,0xab73,0x13a3}, -{0x0373,0x0372,0x0373,0x0372},{0xab74,0x13a4,0xab74,0x13a4},{0xab75,0x13a5,0xab75,0x13a5},{0x0376,0x0376,0x0377,0x0376}, -{0xab76,0x13a6,0xab76,0x13a6},{0x0377,0x0376,0x0377,0x0376},{0xab77,0x13a7,0xab77,0x13a7},{0xab78,0x13a8,0xab78,0x13a8}, +{0xab53,0xa7b3,0xab53,0xa7b3},{0x0370,0x0370,0x0371,0x0370},{0xab70,0x13a0,0xab70,0x13a0},{0x0371,0x0370,0x0371,0x0370}, +{0xab71,0x13a1,0xab71,0x13a1},{0xab72,0x13a2,0xab72,0x13a2},{0x0372,0x0372,0x0373,0x0372},{0xab73,0x13a3,0xab73,0x13a3}, +{0x0373,0x0372,0x0373,0x0372},{0xab74,0x13a4,0xab74,0x13a4},{0xab75,0x13a5,0xab75,0x13a5},{0xab76,0x13a6,0xab76,0x13a6}, +{0x0376,0x0376,0x0377,0x0376},{0x0377,0x0376,0x0377,0x0376},{0xab77,0x13a7,0xab77,0x13a7},{0xab78,0x13a8,0xab78,0x13a8},  {0xab79,0x13a9,0xab79,0x13a9},{0xab7a,0x13aa,0xab7a,0x13aa},{0xab7b,0x13ab,0xab7b,0x13ab},{0x037b,0x03fd,0x037b,0x03fd}, -{0x037c,0x03fe,0x037c,0x03fe},{0xab7c,0x13ac,0xab7c,0x13ac},{0xab7d,0x13ad,0xab7d,0x13ad},{0x037d,0x03ff,0x037d,0x03ff}, -{0xab7e,0x13ae,0xab7e,0x13ae},{0xab7f,0x13af,0xab7f,0x13af},{0x037f,0x037f,0x03f3,0x037f},{0xab80,0x13b0,0xab80,0x13b0}, +{0xab7c,0x13ac,0xab7c,0x13ac},{0x037c,0x03fe,0x037c,0x03fe},{0x037d,0x03ff,0x037d,0x03ff},{0xab7d,0x13ad,0xab7d,0x13ad}, +{0xab7e,0x13ae,0xab7e,0x13ae},{0x037f,0x037f,0x03f3,0x037f},{0xab7f,0x13af,0xab7f,0x13af},{0xab80,0x13b0,0xab80,0x13b0},  {0xab81,0x13b1,0xab81,0x13b1},{0xab82,0x13b2,0xab82,0x13b2},{0xab83,0x13b3,0xab83,0x13b3},{0xab84,0x13b4,0xab84,0x13b4}, -{0xab85,0x13b5,0xab85,0x13b5},{0xab86,0x13b6,0xab86,0x13b6},{0x0386,0x0386,0x03ac,0x0386},{0xab87,0x13b7,0xab87,0x13b7}, -{0x0388,0x0388,0x03ad,0x0388},{0xab88,0x13b8,0xab88,0x13b8},{0xab89,0x13b9,0xab89,0x13b9},{0x0389,0x0389,0x03ae,0x0389}, -{0x038a,0x038a,0x03af,0x038a},{0xab8a,0x13ba,0xab8a,0x13ba},{0xab8b,0x13bb,0xab8b,0x13bb},{0xab8c,0x13bc,0xab8c,0x13bc}, -{0x038c,0x038c,0x03cc,0x038c},{0xab8d,0x13bd,0xab8d,0x13bd},{0x038e,0x038e,0x03cd,0x038e},{0xab8e,0x13be,0xab8e,0x13be}, -{0x038f,0x038f,0x03ce,0x038f},{0xab8f,0x13bf,0xab8f,0x13bf},{0xab90,0x13c0,0xab90,0x13c0},{0x0391,0x0391,0x03b1,0x0391}, -{0xab91,0x13c1,0xab91,0x13c1},{0xab92,0x13c2,0xab92,0x13c2},{0x0392,0x0392,0x03b2,0x0392},{0xab93,0x13c3,0xab93,0x13c3}, -{0x0393,0x0393,0x03b3,0x0393},{0x0394,0x0394,0x03b4,0x0394},{0xab94,0x13c4,0xab94,0x13c4},{0x0395,0x0395,0x03b5,0x0395}, -{0xab95,0x13c5,0xab95,0x13c5},{0xab96,0x13c6,0xab96,0x13c6},{0x0396,0x0396,0x03b6,0x0396},{0x0397,0x0397,0x03b7,0x0397}, -{0xab97,0x13c7,0xab97,0x13c7},{0x0398,0x0398,0x03b8,0x0398},{0xab98,0x13c8,0xab98,0x13c8},{0xab99,0x13c9,0xab99,0x13c9}, +{0xab85,0x13b5,0xab85,0x13b5},{0x0386,0x0386,0x03ac,0x0386},{0xab86,0x13b6,0xab86,0x13b6},{0xab87,0x13b7,0xab87,0x13b7}, +{0xab88,0x13b8,0xab88,0x13b8},{0x0388,0x0388,0x03ad,0x0388},{0x0389,0x0389,0x03ae,0x0389},{0xab89,0x13b9,0xab89,0x13b9}, +{0x038a,0x038a,0x03af,0x038a},{0xab8a,0x13ba,0xab8a,0x13ba},{0xab8b,0x13bb,0xab8b,0x13bb},{0x038c,0x038c,0x03cc,0x038c}, +{0xab8c,0x13bc,0xab8c,0x13bc},{0xab8d,0x13bd,0xab8d,0x13bd},{0x038e,0x038e,0x03cd,0x038e},{0xab8e,0x13be,0xab8e,0x13be}, +{0xab8f,0x13bf,0xab8f,0x13bf},{0x038f,0x038f,0x03ce,0x038f},{0xab90,0x13c0,0xab90,0x13c0},{0x0391,0x0391,0x03b1,0x0391}, +{0xab91,0x13c1,0xab91,0x13c1},{0x0392,0x0392,0x03b2,0x0392},{0xab92,0x13c2,0xab92,0x13c2},{0xab93,0x13c3,0xab93,0x13c3}, +{0x0393,0x0393,0x03b3,0x0393},{0xab94,0x13c4,0xab94,0x13c4},{0x0394,0x0394,0x03b4,0x0394},{0x0395,0x0395,0x03b5,0x0395}, +{0xab95,0x13c5,0xab95,0x13c5},{0x0396,0x0396,0x03b6,0x0396},{0xab96,0x13c6,0xab96,0x13c6},{0x0397,0x0397,0x03b7,0x0397}, +{0xab97,0x13c7,0xab97,0x13c7},{0xab98,0x13c8,0xab98,0x13c8},{0x0398,0x0398,0x03b8,0x0398},{0xab99,0x13c9,0xab99,0x13c9},  {0x0399,0x0399,0x03b9,0x0399},{0x039a,0x039a,0x03ba,0x039a},{0xab9a,0x13ca,0xab9a,0x13ca},{0x039b,0x039b,0x03bb,0x039b}, -{0xab9b,0x13cb,0xab9b,0x13cb},{0x039c,0x039c,0x03bc,0x039c},{0xab9c,0x13cc,0xab9c,0x13cc},{0xab9d,0x13cd,0xab9d,0x13cd}, -{0x039d,0x039d,0x03bd,0x039d},{0x039e,0x039e,0x03be,0x039e},{0xab9e,0x13ce,0xab9e,0x13ce},{0x039f,0x039f,0x03bf,0x039f}, -{0xab9f,0x13cf,0xab9f,0x13cf},{0xaba0,0x13d0,0xaba0,0x13d0},{0x03a0,0x03a0,0x03c0,0x03a0},{0x13a0,0x13a0,0xab70,0x13a0}, -{0xaba1,0x13d1,0xaba1,0x13d1},{0x13a1,0x13a1,0xab71,0x13a1},{0x03a1,0x03a1,0x03c1,0x03a1},{0x13a2,0x13a2,0xab72,0x13a2}, -{0xaba2,0x13d2,0xaba2,0x13d2},{0xaba3,0x13d3,0xaba3,0x13d3},{0x13a3,0x13a3,0xab73,0x13a3},{0x03a3,0x03a3,0x03c3,0x03a3}, +{0xab9b,0x13cb,0xab9b,0x13cb},{0xab9c,0x13cc,0xab9c,0x13cc},{0x039c,0x039c,0x03bc,0x039c},{0xab9d,0x13cd,0xab9d,0x13cd}, +{0x039d,0x039d,0x03bd,0x039d},{0xab9e,0x13ce,0xab9e,0x13ce},{0x039e,0x039e,0x03be,0x039e},{0x039f,0x039f,0x03bf,0x039f}, +{0xab9f,0x13cf,0xab9f,0x13cf},{0x13a0,0x13a0,0xab70,0x13a0},{0x03a0,0x03a0,0x03c0,0x03a0},{0xaba0,0x13d0,0xaba0,0x13d0}, +{0x03a1,0x03a1,0x03c1,0x03a1},{0x13a1,0x13a1,0xab71,0x13a1},{0xaba1,0x13d1,0xaba1,0x13d1},{0x13a2,0x13a2,0xab72,0x13a2}, +{0xaba2,0x13d2,0xaba2,0x13d2},{0x03a3,0x03a3,0x03c3,0x03a3},{0x13a3,0x13a3,0xab73,0x13a3},{0xaba3,0x13d3,0xaba3,0x13d3},  {0x03a4,0x03a4,0x03c4,0x03a4},{0x13a4,0x13a4,0xab74,0x13a4},{0xaba4,0x13d4,0xaba4,0x13d4},{0xaba5,0x13d5,0xaba5,0x13d5}, -{0x13a5,0x13a5,0xab75,0x13a5},{0x03a5,0x03a5,0x03c5,0x03a5},{0x03a6,0x03a6,0x03c6,0x03a6},{0xaba6,0x13d6,0xaba6,0x13d6}, -{0x13a6,0x13a6,0xab76,0x13a6},{0xaba7,0x13d7,0xaba7,0x13d7},{0x13a7,0x13a7,0xab77,0x13a7},{0x03a7,0x03a7,0x03c7,0x03a7}, -{0x03a8,0x03a8,0x03c8,0x03a8},{0x13a8,0x13a8,0xab78,0x13a8},{0xaba8,0x13d8,0xaba8,0x13d8},{0x13a9,0x13a9,0xab79,0x13a9}, -{0xaba9,0x13d9,0xaba9,0x13d9},{0x03a9,0x03a9,0x03c9,0x03a9},{0x13aa,0x13aa,0xab7a,0x13aa},{0x03aa,0x03aa,0x03ca,0x03aa}, -{0xabaa,0x13da,0xabaa,0x13da},{0x13ab,0x13ab,0xab7b,0x13ab},{0xabab,0x13db,0xabab,0x13db},{0x03ab,0x03ab,0x03cb,0x03ab}, -{0xabac,0x13dc,0xabac,0x13dc},{0x13ac,0x13ac,0xab7c,0x13ac},{0x03ac,0x0386,0x03ac,0x0386},{0x13ad,0x13ad,0xab7d,0x13ad}, -{0x03ad,0x0388,0x03ad,0x0388},{0xabad,0x13dd,0xabad,0x13dd},{0x03ae,0x0389,0x03ae,0x0389},{0x13ae,0x13ae,0xab7e,0x13ae}, -{0xabae,0x13de,0xabae,0x13de},{0xabaf,0x13df,0xabaf,0x13df},{0x03af,0x038a,0x03af,0x038a},{0x13af,0x13af,0xab7f,0x13af}, -{0xabb0,0x13e0,0xabb0,0x13e0},{0x13b0,0x13b0,0xab80,0x13b0},{0xabb1,0x13e1,0xabb1,0x13e1},{0x13b1,0x13b1,0xab81,0x13b1}, -{0x03b1,0x0391,0x03b1,0x0391},{0x13b2,0x13b2,0xab82,0x13b2},{0x03b2,0x0392,0x03b2,0x0392},{0xabb2,0x13e2,0xabb2,0x13e2}, -{0xabb3,0x13e3,0xabb3,0x13e3},{0x03b3,0x0393,0x03b3,0x0393},{0x13b3,0x13b3,0xab83,0x13b3},{0xabb4,0x13e4,0xabb4,0x13e4}, -{0x03b4,0x0394,0x03b4,0x0394},{0x13b4,0x13b4,0xab84,0x13b4},{0xabb5,0x13e5,0xabb5,0x13e5},{0x13b5,0x13b5,0xab85,0x13b5}, -{0x03b5,0x0395,0x03b5,0x0395},{0x03b6,0x0396,0x03b6,0x0396},{0xabb6,0x13e6,0xabb6,0x13e6},{0x13b6,0x13b6,0xab86,0x13b6}, -{0xabb7,0x13e7,0xabb7,0x13e7},{0x03b7,0x0397,0x03b7,0x0397},{0x13b7,0x13b7,0xab87,0x13b7},{0x03b8,0x0398,0x03b8,0x0398}, -{0x13b8,0x13b8,0xab88,0x13b8},{0xabb8,0x13e8,0xabb8,0x13e8},{0x03b9,0x0399,0x03b9,0x0399},{0x13b9,0x13b9,0xab89,0x13b9}, -{0xabb9,0x13e9,0xabb9,0x13e9},{0x03ba,0x039a,0x03ba,0x039a},{0x13ba,0x13ba,0xab8a,0x13ba},{0xabba,0x13ea,0xabba,0x13ea}, -{0x03bb,0x039b,0x03bb,0x039b},{0xabbb,0x13eb,0xabbb,0x13eb},{0x13bb,0x13bb,0xab8b,0x13bb},{0x03bc,0x039c,0x03bc,0x039c}, -{0x13bc,0x13bc,0xab8c,0x13bc},{0xabbc,0x13ec,0xabbc,0x13ec},{0x03bd,0x039d,0x03bd,0x039d},{0xabbd,0x13ed,0xabbd,0x13ed}, -{0x13bd,0x13bd,0xab8d,0x13bd},{0x13be,0x13be,0xab8e,0x13be},{0x03be,0x039e,0x03be,0x039e},{0xabbe,0x13ee,0xabbe,0x13ee}, -{0x03bf,0x039f,0x03bf,0x039f},{0x13bf,0x13bf,0xab8f,0x13bf},{0xabbf,0x13ef,0xabbf,0x13ef},{0x03c0,0x03a0,0x03c0,0x03a0}, -{0x13c0,0x13c0,0xab90,0x13c0},{0x13c1,0x13c1,0xab91,0x13c1},{0x03c1,0x03a1,0x03c1,0x03a1},{0x13c2,0x13c2,0xab92,0x13c2}, -{0x03c2,0x03a3,0x03c2,0x03a3},{0x03c3,0x03a3,0x03c3,0x03a3},{0x13c3,0x13c3,0xab93,0x13c3},{0x03c4,0x03a4,0x03c4,0x03a4}, -{0x13c4,0x13c4,0xab94,0x13c4},{0x03c5,0x03a5,0x03c5,0x03a5},{0x13c5,0x13c5,0xab95,0x13c5},{0x13c6,0x13c6,0xab96,0x13c6}, -{0x03c6,0x03a6,0x03c6,0x03a6},{0x03c7,0x03a7,0x03c7,0x03a7},{0x13c7,0x13c7,0xab97,0x13c7},{0x03c8,0x03a8,0x03c8,0x03a8}, -{0x13c8,0x13c8,0xab98,0x13c8},{0x03c9,0x03a9,0x03c9,0x03a9},{0x13c9,0x13c9,0xab99,0x13c9},{0x03ca,0x03aa,0x03ca,0x03aa}, -{0x13ca,0x13ca,0xab9a,0x13ca},{0x03cb,0x03ab,0x03cb,0x03ab},{0x13cb,0x13cb,0xab9b,0x13cb},{0x13cc,0x13cc,0xab9c,0x13cc}, -{0x03cc,0x038c,0x03cc,0x038c},{0x03cd,0x038e,0x03cd,0x038e},{0x13cd,0x13cd,0xab9d,0x13cd},{0x13ce,0x13ce,0xab9e,0x13ce}, -{0x03ce,0x038f,0x03ce,0x038f},{0x03cf,0x03cf,0x03d7,0x03cf},{0x13cf,0x13cf,0xab9f,0x13cf},{0x13d0,0x13d0,0xaba0,0x13d0}, -{0x03d0,0x0392,0x03d0,0x0392},{0x13d1,0x13d1,0xaba1,0x13d1},{0x03d1,0x0398,0x03d1,0x0398},{0x13d2,0x13d2,0xaba2,0x13d2}, -{0x13d3,0x13d3,0xaba3,0x13d3},{0x13d4,0x13d4,0xaba4,0x13d4},{0x13d5,0x13d5,0xaba5,0x13d5},{0x03d5,0x03a6,0x03d5,0x03a6}, -{0x13d6,0x13d6,0xaba6,0x13d6},{0x03d6,0x03a0,0x03d6,0x03a0},{0x03d7,0x03cf,0x03d7,0x03cf},{0x13d7,0x13d7,0xaba7,0x13d7}, -{0x03d8,0x03d8,0x03d9,0x03d8},{0x13d8,0x13d8,0xaba8,0x13d8},{0x03d9,0x03d8,0x03d9,0x03d8},{0x13d9,0x13d9,0xaba9,0x13d9}, -{0x13da,0x13da,0xabaa,0x13da},{0x03da,0x03da,0x03db,0x03da},{0x13db,0x13db,0xabab,0x13db},{0x03db,0x03da,0x03db,0x03da}, +{0x13a5,0x13a5,0xab75,0x13a5},{0x03a5,0x03a5,0x03c5,0x03a5},{0xaba6,0x13d6,0xaba6,0x13d6},{0x13a6,0x13a6,0xab76,0x13a6}, +{0x03a6,0x03a6,0x03c6,0x03a6},{0x13a7,0x13a7,0xab77,0x13a7},{0xaba7,0x13d7,0xaba7,0x13d7},{0x03a7,0x03a7,0x03c7,0x03a7}, +{0xaba8,0x13d8,0xaba8,0x13d8},{0x13a8,0x13a8,0xab78,0x13a8},{0x03a8,0x03a8,0x03c8,0x03a8},{0xaba9,0x13d9,0xaba9,0x13d9}, +{0x03a9,0x03a9,0x03c9,0x03a9},{0x13a9,0x13a9,0xab79,0x13a9},{0x13aa,0x13aa,0xab7a,0x13aa},{0xabaa,0x13da,0xabaa,0x13da}, +{0x03aa,0x03aa,0x03ca,0x03aa},{0x13ab,0x13ab,0xab7b,0x13ab},{0xabab,0x13db,0xabab,0x13db},{0x03ab,0x03ab,0x03cb,0x03ab}, +{0xabac,0x13dc,0xabac,0x13dc},{0x13ac,0x13ac,0xab7c,0x13ac},{0x03ac,0x0386,0x03ac,0x0386},{0x03ad,0x0388,0x03ad,0x0388}, +{0x13ad,0x13ad,0xab7d,0x13ad},{0xabad,0x13dd,0xabad,0x13dd},{0xabae,0x13de,0xabae,0x13de},{0x03ae,0x0389,0x03ae,0x0389}, +{0x13ae,0x13ae,0xab7e,0x13ae},{0x13af,0x13af,0xab7f,0x13af},{0xabaf,0x13df,0xabaf,0x13df},{0x03af,0x038a,0x03af,0x038a}, +{0x13b0,0x13b0,0xab80,0x13b0},{0xabb0,0x13e0,0xabb0,0x13e0},{0x13b1,0x13b1,0xab81,0x13b1},{0x03b1,0x0391,0x03b1,0x0391}, +{0xabb1,0x13e1,0xabb1,0x13e1},{0x13b2,0x13b2,0xab82,0x13b2},{0xabb2,0x13e2,0xabb2,0x13e2},{0x03b2,0x0392,0x03b2,0x0392}, +{0x03b3,0x0393,0x03b3,0x0393},{0xabb3,0x13e3,0xabb3,0x13e3},{0x13b3,0x13b3,0xab83,0x13b3},{0x13b4,0x13b4,0xab84,0x13b4}, +{0xabb4,0x13e4,0xabb4,0x13e4},{0x03b4,0x0394,0x03b4,0x0394},{0x13b5,0x13b5,0xab85,0x13b5},{0x03b5,0x0395,0x03b5,0x0395}, +{0xabb5,0x13e5,0xabb5,0x13e5},{0x13b6,0x13b6,0xab86,0x13b6},{0xabb6,0x13e6,0xabb6,0x13e6},{0x03b6,0x0396,0x03b6,0x0396}, +{0x03b7,0x0397,0x03b7,0x0397},{0xabb7,0x13e7,0xabb7,0x13e7},{0x13b7,0x13b7,0xab87,0x13b7},{0x03b8,0x0398,0x03b8,0x0398}, +{0x13b8,0x13b8,0xab88,0x13b8},{0xabb8,0x13e8,0xabb8,0x13e8},{0xabb9,0x13e9,0xabb9,0x13e9},{0x13b9,0x13b9,0xab89,0x13b9}, +{0x03b9,0x0399,0x03b9,0x0399},{0x03ba,0x039a,0x03ba,0x039a},{0x13ba,0x13ba,0xab8a,0x13ba},{0xabba,0x13ea,0xabba,0x13ea}, +{0xabbb,0x13eb,0xabbb,0x13eb},{0x03bb,0x039b,0x03bb,0x039b},{0x13bb,0x13bb,0xab8b,0x13bb},{0xabbc,0x13ec,0xabbc,0x13ec}, +{0x13bc,0x13bc,0xab8c,0x13bc},{0x03bc,0x039c,0x03bc,0x039c},{0x03bd,0x039d,0x03bd,0x039d},{0x13bd,0x13bd,0xab8d,0x13bd}, +{0xabbd,0x13ed,0xabbd,0x13ed},{0x03be,0x039e,0x03be,0x039e},{0x13be,0x13be,0xab8e,0x13be},{0xabbe,0x13ee,0xabbe,0x13ee}, +{0x13bf,0x13bf,0xab8f,0x13bf},{0x03bf,0x039f,0x03bf,0x039f},{0xabbf,0x13ef,0xabbf,0x13ef},{0x13c0,0x13c0,0xab90,0x13c0}, +{0x03c0,0x03a0,0x03c0,0x03a0},{0x13c1,0x13c1,0xab91,0x13c1},{0x03c1,0x03a1,0x03c1,0x03a1},{0x13c2,0x13c2,0xab92,0x13c2}, +{0x03c2,0x03a3,0x03c2,0x03a3},{0x13c3,0x13c3,0xab93,0x13c3},{0x03c3,0x03a3,0x03c3,0x03a3},{0x03c4,0x03a4,0x03c4,0x03a4}, +{0x13c4,0x13c4,0xab94,0x13c4},{0x13c5,0x13c5,0xab95,0x13c5},{0x03c5,0x03a5,0x03c5,0x03a5},{0x03c6,0x03a6,0x03c6,0x03a6}, +{0x13c6,0x13c6,0xab96,0x13c6},{0x03c7,0x03a7,0x03c7,0x03a7},{0x13c7,0x13c7,0xab97,0x13c7},{0x13c8,0x13c8,0xab98,0x13c8}, +{0x03c8,0x03a8,0x03c8,0x03a8},{0x03c9,0x03a9,0x03c9,0x03a9},{0x13c9,0x13c9,0xab99,0x13c9},{0x13ca,0x13ca,0xab9a,0x13ca}, +{0x03ca,0x03aa,0x03ca,0x03aa},{0x13cb,0x13cb,0xab9b,0x13cb},{0x03cb,0x03ab,0x03cb,0x03ab},{0x13cc,0x13cc,0xab9c,0x13cc}, +{0x03cc,0x038c,0x03cc,0x038c},{0x13cd,0x13cd,0xab9d,0x13cd},{0x03cd,0x038e,0x03cd,0x038e},{0x03ce,0x038f,0x03ce,0x038f}, +{0x13ce,0x13ce,0xab9e,0x13ce},{0x03cf,0x03cf,0x03d7,0x03cf},{0x13cf,0x13cf,0xab9f,0x13cf},{0x03d0,0x0392,0x03d0,0x0392}, +{0x13d0,0x13d0,0xaba0,0x13d0},{0x13d1,0x13d1,0xaba1,0x13d1},{0x03d1,0x0398,0x03d1,0x0398},{0x13d2,0x13d2,0xaba2,0x13d2}, +{0x13d3,0x13d3,0xaba3,0x13d3},{0x13d4,0x13d4,0xaba4,0x13d4},{0x03d5,0x03a6,0x03d5,0x03a6},{0x13d5,0x13d5,0xaba5,0x13d5}, +{0x03d6,0x03a0,0x03d6,0x03a0},{0x13d6,0x13d6,0xaba6,0x13d6},{0x13d7,0x13d7,0xaba7,0x13d7},{0x03d7,0x03cf,0x03d7,0x03cf}, +{0x03d8,0x03d8,0x03d9,0x03d8},{0x13d8,0x13d8,0xaba8,0x13d8},{0x13d9,0x13d9,0xaba9,0x13d9},{0x03d9,0x03d8,0x03d9,0x03d8}, +{0x03da,0x03da,0x03db,0x03da},{0x13da,0x13da,0xabaa,0x13da},{0x13db,0x13db,0xabab,0x13db},{0x03db,0x03da,0x03db,0x03da},  {0x13dc,0x13dc,0xabac,0x13dc},{0x03dc,0x03dc,0x03dd,0x03dc},{0x03dd,0x03dc,0x03dd,0x03dc},{0x13dd,0x13dd,0xabad,0x13dd}, -{0x03de,0x03de,0x03df,0x03de},{0x13de,0x13de,0xabae,0x13de},{0x13df,0x13df,0xabaf,0x13df},{0x03df,0x03de,0x03df,0x03de}, +{0x13de,0x13de,0xabae,0x13de},{0x03de,0x03de,0x03df,0x03de},{0x03df,0x03de,0x03df,0x03de},{0x13df,0x13df,0xabaf,0x13df},  {0x03e0,0x03e0,0x03e1,0x03e0},{0x13e0,0x13e0,0xabb0,0x13e0},{0x03e1,0x03e0,0x03e1,0x03e0},{0x13e1,0x13e1,0xabb1,0x13e1}, -{0x13e2,0x13e2,0xabb2,0x13e2},{0x03e2,0x03e2,0x03e3,0x03e2},{0x03e3,0x03e2,0x03e3,0x03e2},{0x13e3,0x13e3,0xabb3,0x13e3}, -{0x13e4,0x13e4,0xabb4,0x13e4},{0x03e4,0x03e4,0x03e5,0x03e4},{0x03e5,0x03e4,0x03e5,0x03e4},{0x13e5,0x13e5,0xabb5,0x13e5}, -{0x03e6,0x03e6,0x03e7,0x03e6},{0x13e6,0x13e6,0xabb6,0x13e6},{0x13e7,0x13e7,0xabb7,0x13e7},{0x03e7,0x03e6,0x03e7,0x03e6}, -{0x13e8,0x13e8,0xabb8,0x13e8},{0x03e8,0x03e8,0x03e9,0x03e8},{0x03e9,0x03e8,0x03e9,0x03e8},{0x13e9,0x13e9,0xabb9,0x13e9}, -{0x13ea,0x13ea,0xabba,0x13ea},{0x03ea,0x03ea,0x03eb,0x03ea},{0x13eb,0x13eb,0xabbb,0x13eb},{0x03eb,0x03ea,0x03eb,0x03ea}, -{0x03ec,0x03ec,0x03ed,0x03ec},{0x13ec,0x13ec,0xabbc,0x13ec},{0x03ed,0x03ec,0x03ed,0x03ec},{0x13ed,0x13ed,0xabbd,0x13ed}, -{0x03ee,0x03ee,0x03ef,0x03ee},{0x13ee,0x13ee,0xabbe,0x13ee},{0x13ef,0x13ef,0xabbf,0x13ef},{0x03ef,0x03ee,0x03ef,0x03ee}, -{0x03f0,0x039a,0x03f0,0x039a},{0x13f0,0x13f0,0x13f8,0x13f0},{0x13f1,0x13f1,0x13f9,0x13f1},{0x03f1,0x03a1,0x03f1,0x03a1}, -{0x13f2,0x13f2,0x13fa,0x13f2},{0x03f2,0x03f9,0x03f2,0x03f9},{0x13f3,0x13f3,0x13fb,0x13f3},{0x03f3,0x037f,0x03f3,0x037f}, -{0x03f4,0x03f4,0x03b8,0x03f4},{0x13f4,0x13f4,0x13fc,0x13f4},{0x13f5,0x13f5,0x13fd,0x13f5},{0x03f5,0x0395,0x03f5,0x0395}, +{0x03e2,0x03e2,0x03e3,0x03e2},{0x13e2,0x13e2,0xabb2,0x13e2},{0x03e3,0x03e2,0x03e3,0x03e2},{0x13e3,0x13e3,0xabb3,0x13e3}, +{0x13e4,0x13e4,0xabb4,0x13e4},{0x03e4,0x03e4,0x03e5,0x03e4},{0x13e5,0x13e5,0xabb5,0x13e5},{0x03e5,0x03e4,0x03e5,0x03e4}, +{0x13e6,0x13e6,0xabb6,0x13e6},{0x03e6,0x03e6,0x03e7,0x03e6},{0x13e7,0x13e7,0xabb7,0x13e7},{0x03e7,0x03e6,0x03e7,0x03e6}, +{0x03e8,0x03e8,0x03e9,0x03e8},{0x13e8,0x13e8,0xabb8,0x13e8},{0x03e9,0x03e8,0x03e9,0x03e8},{0x13e9,0x13e9,0xabb9,0x13e9}, +{0x03ea,0x03ea,0x03eb,0x03ea},{0x13ea,0x13ea,0xabba,0x13ea},{0x13eb,0x13eb,0xabbb,0x13eb},{0x03eb,0x03ea,0x03eb,0x03ea}, +{0x03ec,0x03ec,0x03ed,0x03ec},{0x13ec,0x13ec,0xabbc,0x13ec},{0x13ed,0x13ed,0xabbd,0x13ed},{0x03ed,0x03ec,0x03ed,0x03ec}, +{0x13ee,0x13ee,0xabbe,0x13ee},{0x03ee,0x03ee,0x03ef,0x03ee},{0x13ef,0x13ef,0xabbf,0x13ef},{0x03ef,0x03ee,0x03ef,0x03ee}, +{0x13f0,0x13f0,0x13f8,0x13f0},{0x03f0,0x039a,0x03f0,0x039a},{0x13f1,0x13f1,0x13f9,0x13f1},{0x03f1,0x03a1,0x03f1,0x03a1}, +{0x03f2,0x03f9,0x03f2,0x03f9},{0x13f2,0x13f2,0x13fa,0x13f2},{0x13f3,0x13f3,0x13fb,0x13f3},{0x03f3,0x037f,0x03f3,0x037f}, +{0x03f4,0x03f4,0x03b8,0x03f4},{0x13f4,0x13f4,0x13fc,0x13f4},{0x03f5,0x0395,0x03f5,0x0395},{0x13f5,0x13f5,0x13fd,0x13f5},  {0x03f7,0x03f7,0x03f8,0x03f7},{0x03f8,0x03f7,0x03f8,0x03f7},{0x13f8,0x13f0,0x13f8,0x13f0},{0x03f9,0x03f9,0x03f2,0x03f9}, -{0x13f9,0x13f1,0x13f9,0x13f1},{0x03fa,0x03fa,0x03fb,0x03fa},{0x13fa,0x13f2,0x13fa,0x13f2},{0x13fb,0x13f3,0x13fb,0x13f3}, +{0x13f9,0x13f1,0x13f9,0x13f1},{0x13fa,0x13f2,0x13fa,0x13f2},{0x03fa,0x03fa,0x03fb,0x03fa},{0x13fb,0x13f3,0x13fb,0x13f3},  {0x03fb,0x03fa,0x03fb,0x03fa},{0x13fc,0x13f4,0x13fc,0x13f4},{0x03fd,0x03fd,0x037b,0x03fd},{0x13fd,0x13f5,0x13fd,0x13f5}, -{0x03fe,0x03fe,0x037c,0x03fe},{0x03ff,0x03ff,0x037d,0x03ff},{0x2c00,0x2c00,0x2c30,0x2c00},{0x10400,0x10400,0x10428,0x10400}, -{0x0400,0x0400,0x0450,0x0400},{0x2c01,0x2c01,0x2c31,0x2c01},{0x0401,0x0401,0x0451,0x0401},{0x10401,0x10401,0x10429,0x10401}, -{0x0402,0x0402,0x0452,0x0402},{0x2c02,0x2c02,0x2c32,0x2c02},{0x10402,0x10402,0x1042a,0x10402},{0x10403,0x10403,0x1042b,0x10403}, -{0x2c03,0x2c03,0x2c33,0x2c03},{0x0403,0x0403,0x0453,0x0403},{0x10404,0x10404,0x1042c,0x10404},{0x2c04,0x2c04,0x2c34,0x2c04}, -{0x0404,0x0404,0x0454,0x0404},{0x10405,0x10405,0x1042d,0x10405},{0x2c05,0x2c05,0x2c35,0x2c05},{0x0405,0x0405,0x0455,0x0405}, -{0x0406,0x0406,0x0456,0x0406},{0x2c06,0x2c06,0x2c36,0x2c06},{0x10406,0x10406,0x1042e,0x10406},{0x2c07,0x2c07,0x2c37,0x2c07}, -{0x0407,0x0407,0x0457,0x0407},{0x10407,0x10407,0x1042f,0x10407},{0x10408,0x10408,0x10430,0x10408},{0x0408,0x0408,0x0458,0x0408}, -{0x2c08,0x2c08,0x2c38,0x2c08},{0x2c09,0x2c09,0x2c39,0x2c09},{0x10409,0x10409,0x10431,0x10409},{0x0409,0x0409,0x0459,0x0409}, -{0x2c0a,0x2c0a,0x2c3a,0x2c0a},{0x040a,0x040a,0x045a,0x040a},{0x1040a,0x1040a,0x10432,0x1040a},{0x1040b,0x1040b,0x10433,0x1040b}, -{0x2c0b,0x2c0b,0x2c3b,0x2c0b},{0x040b,0x040b,0x045b,0x040b},{0x1040c,0x1040c,0x10434,0x1040c},{0x040c,0x040c,0x045c,0x040c}, -{0x2c0c,0x2c0c,0x2c3c,0x2c0c},{0x040d,0x040d,0x045d,0x040d},{0x2c0d,0x2c0d,0x2c3d,0x2c0d},{0x1040d,0x1040d,0x10435,0x1040d}, -{0x1040e,0x1040e,0x10436,0x1040e},{0x040e,0x040e,0x045e,0x040e},{0x2c0e,0x2c0e,0x2c3e,0x2c0e},{0x2c0f,0x2c0f,0x2c3f,0x2c0f}, -{0x1040f,0x1040f,0x10437,0x1040f},{0x040f,0x040f,0x045f,0x040f},{0x0410,0x0410,0x0430,0x0410},{0x2c10,0x2c10,0x2c40,0x2c10}, +{0x03fe,0x03fe,0x037c,0x03fe},{0x03ff,0x03ff,0x037d,0x03ff},{0x0400,0x0400,0x0450,0x0400},{0x2c00,0x2c00,0x2c30,0x2c00}, +{0x10400,0x10400,0x10428,0x10400},{0x0401,0x0401,0x0451,0x0401},{0x10401,0x10401,0x10429,0x10401},{0x2c01,0x2c01,0x2c31,0x2c01}, +{0x0402,0x0402,0x0452,0x0402},{0x10402,0x10402,0x1042a,0x10402},{0x2c02,0x2c02,0x2c32,0x2c02},{0x10403,0x10403,0x1042b,0x10403}, +{0x0403,0x0403,0x0453,0x0403},{0x2c03,0x2c03,0x2c33,0x2c03},{0x0404,0x0404,0x0454,0x0404},{0x2c04,0x2c04,0x2c34,0x2c04}, +{0x10404,0x10404,0x1042c,0x10404},{0x0405,0x0405,0x0455,0x0405},{0x10405,0x10405,0x1042d,0x10405},{0x2c05,0x2c05,0x2c35,0x2c05}, +{0x10406,0x10406,0x1042e,0x10406},{0x0406,0x0406,0x0456,0x0406},{0x2c06,0x2c06,0x2c36,0x2c06},{0x0407,0x0407,0x0457,0x0407}, +{0x2c07,0x2c07,0x2c37,0x2c07},{0x10407,0x10407,0x1042f,0x10407},{0x0408,0x0408,0x0458,0x0408},{0x2c08,0x2c08,0x2c38,0x2c08}, +{0x10408,0x10408,0x10430,0x10408},{0x2c09,0x2c09,0x2c39,0x2c09},{0x0409,0x0409,0x0459,0x0409},{0x10409,0x10409,0x10431,0x10409}, +{0x1040a,0x1040a,0x10432,0x1040a},{0x040a,0x040a,0x045a,0x040a},{0x2c0a,0x2c0a,0x2c3a,0x2c0a},{0x1040b,0x1040b,0x10433,0x1040b}, +{0x040b,0x040b,0x045b,0x040b},{0x2c0b,0x2c0b,0x2c3b,0x2c0b},{0x040c,0x040c,0x045c,0x040c},{0x2c0c,0x2c0c,0x2c3c,0x2c0c}, +{0x1040c,0x1040c,0x10434,0x1040c},{0x040d,0x040d,0x045d,0x040d},{0x1040d,0x1040d,0x10435,0x1040d},{0x2c0d,0x2c0d,0x2c3d,0x2c0d}, +{0x040e,0x040e,0x045e,0x040e},{0x2c0e,0x2c0e,0x2c3e,0x2c0e},{0x1040e,0x1040e,0x10436,0x1040e},{0x2c0f,0x2c0f,0x2c3f,0x2c0f}, +{0x1040f,0x1040f,0x10437,0x1040f},{0x040f,0x040f,0x045f,0x040f},{0x2c10,0x2c10,0x2c40,0x2c10},{0x0410,0x0410,0x0430,0x0410},  {0x10410,0x10410,0x10438,0x10410},{0x2c11,0x2c11,0x2c41,0x2c11},{0x10411,0x10411,0x10439,0x10411},{0x0411,0x0411,0x0431,0x0411}, -{0x10412,0x10412,0x1043a,0x10412},{0x2c12,0x2c12,0x2c42,0x2c12},{0x0412,0x0412,0x0432,0x0412},{0x0413,0x0413,0x0433,0x0413}, -{0x10413,0x10413,0x1043b,0x10413},{0x2c13,0x2c13,0x2c43,0x2c13},{0x2c14,0x2c14,0x2c44,0x2c14},{0x10414,0x10414,0x1043c,0x10414}, -{0x0414,0x0414,0x0434,0x0414},{0x10415,0x10415,0x1043d,0x10415},{0x0415,0x0415,0x0435,0x0415},{0x2c15,0x2c15,0x2c45,0x2c15}, -{0x2c16,0x2c16,0x2c46,0x2c16},{0x0416,0x0416,0x0436,0x0416},{0x10416,0x10416,0x1043e,0x10416},{0x0417,0x0417,0x0437,0x0417}, -{0x10417,0x10417,0x1043f,0x10417},{0x2c17,0x2c17,0x2c47,0x2c17},{0x2c18,0x2c18,0x2c48,0x2c18},{0x0418,0x0418,0x0438,0x0418}, -{0x10418,0x10418,0x10440,0x10418},{0x10419,0x10419,0x10441,0x10419},{0x0419,0x0419,0x0439,0x0419},{0x2c19,0x2c19,0x2c49,0x2c19}, -{0x1041a,0x1041a,0x10442,0x1041a},{0x041a,0x041a,0x043a,0x041a},{0x2c1a,0x2c1a,0x2c4a,0x2c1a},{0x2c1b,0x2c1b,0x2c4b,0x2c1b}, -{0x1041b,0x1041b,0x10443,0x1041b},{0x041b,0x041b,0x043b,0x041b},{0x2c1c,0x2c1c,0x2c4c,0x2c1c},{0x1041c,0x1041c,0x10444,0x1041c}, -{0x041c,0x041c,0x043c,0x041c},{0x041d,0x041d,0x043d,0x041d},{0x2c1d,0x2c1d,0x2c4d,0x2c1d},{0x1041d,0x1041d,0x10445,0x1041d}, -{0x041e,0x041e,0x043e,0x041e},{0x1041e,0x1041e,0x10446,0x1041e},{0x2c1e,0x2c1e,0x2c4e,0x2c1e},{0x1041f,0x1041f,0x10447,0x1041f}, -{0x041f,0x041f,0x043f,0x041f},{0x2c1f,0x2c1f,0x2c4f,0x2c1f},{0x2c20,0x2c20,0x2c50,0x2c20},{0x10420,0x10420,0x10448,0x10420}, -{0x0420,0x0420,0x0440,0x0420},{0x2c21,0x2c21,0x2c51,0x2c21},{0x10421,0x10421,0x10449,0x10421},{0x0421,0x0421,0x0441,0x0421}, -{0x10422,0x10422,0x1044a,0x10422},{0x2c22,0x2c22,0x2c52,0x2c22},{0x0422,0x0422,0x0442,0x0422},{0x2c23,0x2c23,0x2c53,0x2c23}, -{0x0423,0x0423,0x0443,0x0423},{0x10423,0x10423,0x1044b,0x10423},{0x0424,0x0424,0x0444,0x0424},{0x2c24,0x2c24,0x2c54,0x2c24}, -{0x10424,0x10424,0x1044c,0x10424},{0x2c25,0x2c25,0x2c55,0x2c25},{0x0425,0x0425,0x0445,0x0425},{0x10425,0x10425,0x1044d,0x10425}, -{0x0426,0x0426,0x0446,0x0426},{0x2c26,0x2c26,0x2c56,0x2c26},{0x10426,0x10426,0x1044e,0x10426},{0x10427,0x10427,0x1044f,0x10427}, -{0x0427,0x0427,0x0447,0x0427},{0x2c27,0x2c27,0x2c57,0x2c27},{0x10428,0x10400,0x10428,0x10400},{0x0428,0x0428,0x0448,0x0428}, -{0x2c28,0x2c28,0x2c58,0x2c28},{0x2c29,0x2c29,0x2c59,0x2c29},{0x10429,0x10401,0x10429,0x10401},{0x0429,0x0429,0x0449,0x0429}, -{0x1042a,0x10402,0x1042a,0x10402},{0x2c2a,0x2c2a,0x2c5a,0x2c2a},{0x042a,0x042a,0x044a,0x042a},{0x042b,0x042b,0x044b,0x042b}, -{0x2c2b,0x2c2b,0x2c5b,0x2c2b},{0x1042b,0x10403,0x1042b,0x10403},{0x2c2c,0x2c2c,0x2c5c,0x2c2c},{0x042c,0x042c,0x044c,0x042c}, -{0x1042c,0x10404,0x1042c,0x10404},{0x2c2d,0x2c2d,0x2c5d,0x2c2d},{0x042d,0x042d,0x044d,0x042d},{0x1042d,0x10405,0x1042d,0x10405}, -{0x1042e,0x10406,0x1042e,0x10406},{0x042e,0x042e,0x044e,0x042e},{0x2c2e,0x2c2e,0x2c5e,0x2c2e},{0x1042f,0x10407,0x1042f,0x10407}, +{0x2c12,0x2c12,0x2c42,0x2c12},{0x10412,0x10412,0x1043a,0x10412},{0x0412,0x0412,0x0432,0x0412},{0x10413,0x10413,0x1043b,0x10413}, +{0x2c13,0x2c13,0x2c43,0x2c13},{0x0413,0x0413,0x0433,0x0413},{0x10414,0x10414,0x1043c,0x10414},{0x2c14,0x2c14,0x2c44,0x2c14}, +{0x0414,0x0414,0x0434,0x0414},{0x0415,0x0415,0x0435,0x0415},{0x2c15,0x2c15,0x2c45,0x2c15},{0x10415,0x10415,0x1043d,0x10415}, +{0x10416,0x10416,0x1043e,0x10416},{0x2c16,0x2c16,0x2c46,0x2c16},{0x0416,0x0416,0x0436,0x0416},{0x2c17,0x2c17,0x2c47,0x2c17}, +{0x10417,0x10417,0x1043f,0x10417},{0x0417,0x0417,0x0437,0x0417},{0x10418,0x10418,0x10440,0x10418},{0x0418,0x0418,0x0438,0x0418}, +{0x2c18,0x2c18,0x2c48,0x2c18},{0x2c19,0x2c19,0x2c49,0x2c19},{0x10419,0x10419,0x10441,0x10419},{0x0419,0x0419,0x0439,0x0419}, +{0x041a,0x041a,0x043a,0x041a},{0x2c1a,0x2c1a,0x2c4a,0x2c1a},{0x1041a,0x1041a,0x10442,0x1041a},{0x1041b,0x1041b,0x10443,0x1041b}, +{0x2c1b,0x2c1b,0x2c4b,0x2c1b},{0x041b,0x041b,0x043b,0x041b},{0x041c,0x041c,0x043c,0x041c},{0x2c1c,0x2c1c,0x2c4c,0x2c1c}, +{0x1041c,0x1041c,0x10444,0x1041c},{0x041d,0x041d,0x043d,0x041d},{0x1041d,0x1041d,0x10445,0x1041d},{0x2c1d,0x2c1d,0x2c4d,0x2c1d}, +{0x041e,0x041e,0x043e,0x041e},{0x1041e,0x1041e,0x10446,0x1041e},{0x2c1e,0x2c1e,0x2c4e,0x2c1e},{0x2c1f,0x2c1f,0x2c4f,0x2c1f}, +{0x1041f,0x1041f,0x10447,0x1041f},{0x041f,0x041f,0x043f,0x041f},{0x0420,0x0420,0x0440,0x0420},{0x10420,0x10420,0x10448,0x10420}, +{0x2c20,0x2c20,0x2c50,0x2c20},{0x10421,0x10421,0x10449,0x10421},{0x0421,0x0421,0x0441,0x0421},{0x2c21,0x2c21,0x2c51,0x2c21}, +{0x0422,0x0422,0x0442,0x0422},{0x2c22,0x2c22,0x2c52,0x2c22},{0x10422,0x10422,0x1044a,0x10422},{0x10423,0x10423,0x1044b,0x10423}, +{0x2c23,0x2c23,0x2c53,0x2c23},{0x0423,0x0423,0x0443,0x0423},{0x2c24,0x2c24,0x2c54,0x2c24},{0x0424,0x0424,0x0444,0x0424}, +{0x10424,0x10424,0x1044c,0x10424},{0x10425,0x10425,0x1044d,0x10425},{0x2c25,0x2c25,0x2c55,0x2c25},{0x0425,0x0425,0x0445,0x0425}, +{0x10426,0x10426,0x1044e,0x10426},{0x0426,0x0426,0x0446,0x0426},{0x2c26,0x2c26,0x2c56,0x2c26},{0x0427,0x0427,0x0447,0x0427}, +{0x10427,0x10427,0x1044f,0x10427},{0x2c27,0x2c27,0x2c57,0x2c27},{0x2c28,0x2c28,0x2c58,0x2c28},{0x0428,0x0428,0x0448,0x0428}, +{0x10428,0x10400,0x10428,0x10400},{0x0429,0x0429,0x0449,0x0429},{0x2c29,0x2c29,0x2c59,0x2c29},{0x10429,0x10401,0x10429,0x10401}, +{0x042a,0x042a,0x044a,0x042a},{0x1042a,0x10402,0x1042a,0x10402},{0x2c2a,0x2c2a,0x2c5a,0x2c2a},{0x1042b,0x10403,0x1042b,0x10403}, +{0x042b,0x042b,0x044b,0x042b},{0x2c2b,0x2c2b,0x2c5b,0x2c2b},{0x042c,0x042c,0x044c,0x042c},{0x1042c,0x10404,0x1042c,0x10404}, +{0x2c2c,0x2c2c,0x2c5c,0x2c2c},{0x042d,0x042d,0x044d,0x042d},{0x2c2d,0x2c2d,0x2c5d,0x2c2d},{0x1042d,0x10405,0x1042d,0x10405}, +{0x042e,0x042e,0x044e,0x042e},{0x1042e,0x10406,0x1042e,0x10406},{0x2c2e,0x2c2e,0x2c5e,0x2c2e},{0x1042f,0x10407,0x1042f,0x10407},  {0x042f,0x042f,0x044f,0x042f},{0x2c30,0x2c00,0x2c30,0x2c00},{0x10430,0x10408,0x10430,0x10408},{0x0430,0x0410,0x0430,0x0410}, -{0x10431,0x10409,0x10431,0x10409},{0x0431,0x0411,0x0431,0x0411},{0x2c31,0x2c01,0x2c31,0x2c01},{0x0432,0x0412,0x0432,0x0412}, +{0x10431,0x10409,0x10431,0x10409},{0x2c31,0x2c01,0x2c31,0x2c01},{0x0431,0x0411,0x0431,0x0411},{0x0432,0x0412,0x0432,0x0412},  {0x10432,0x1040a,0x10432,0x1040a},{0x2c32,0x2c02,0x2c32,0x2c02},{0x0433,0x0413,0x0433,0x0413},{0x10433,0x1040b,0x10433,0x1040b}, -{0x2c33,0x2c03,0x2c33,0x2c03},{0x0434,0x0414,0x0434,0x0414},{0x2c34,0x2c04,0x2c34,0x2c04},{0x10434,0x1040c,0x10434,0x1040c}, -{0x10435,0x1040d,0x10435,0x1040d},{0x0435,0x0415,0x0435,0x0415},{0x2c35,0x2c05,0x2c35,0x2c05},{0x10436,0x1040e,0x10436,0x1040e}, -{0x2c36,0x2c06,0x2c36,0x2c06},{0x0436,0x0416,0x0436,0x0416},{0x10437,0x1040f,0x10437,0x1040f},{0x0437,0x0417,0x0437,0x0417}, -{0x2c37,0x2c07,0x2c37,0x2c07},{0x0438,0x0418,0x0438,0x0418},{0x2c38,0x2c08,0x2c38,0x2c08},{0x10438,0x10410,0x10438,0x10410}, -{0x2c39,0x2c09,0x2c39,0x2c09},{0x10439,0x10411,0x10439,0x10411},{0x0439,0x0419,0x0439,0x0419},{0x043a,0x041a,0x043a,0x041a}, -{0x1043a,0x10412,0x1043a,0x10412},{0x2c3a,0x2c0a,0x2c3a,0x2c0a},{0x1043b,0x10413,0x1043b,0x10413},{0x043b,0x041b,0x043b,0x041b}, -{0x2c3b,0x2c0b,0x2c3b,0x2c0b},{0x1043c,0x10414,0x1043c,0x10414},{0x2c3c,0x2c0c,0x2c3c,0x2c0c},{0x043c,0x041c,0x043c,0x041c}, -{0x043d,0x041d,0x043d,0x041d},{0x1043d,0x10415,0x1043d,0x10415},{0x2c3d,0x2c0d,0x2c3d,0x2c0d},{0x2c3e,0x2c0e,0x2c3e,0x2c0e}, -{0x043e,0x041e,0x043e,0x041e},{0x1043e,0x10416,0x1043e,0x10416},{0x2c3f,0x2c0f,0x2c3f,0x2c0f},{0x1043f,0x10417,0x1043f,0x10417}, -{0x043f,0x041f,0x043f,0x041f},{0x10440,0x10418,0x10440,0x10418},{0x2c40,0x2c10,0x2c40,0x2c10},{0x0440,0x0420,0x0440,0x0420}, -{0x2c41,0x2c11,0x2c41,0x2c11},{0x10441,0x10419,0x10441,0x10419},{0x0441,0x0421,0x0441,0x0421},{0x10442,0x1041a,0x10442,0x1041a}, -{0x2c42,0x2c12,0x2c42,0x2c12},{0x0442,0x0422,0x0442,0x0422},{0x0443,0x0423,0x0443,0x0423},{0x2c43,0x2c13,0x2c43,0x2c13}, +{0x2c33,0x2c03,0x2c33,0x2c03},{0x10434,0x1040c,0x10434,0x1040c},{0x0434,0x0414,0x0434,0x0414},{0x2c34,0x2c04,0x2c34,0x2c04}, +{0x10435,0x1040d,0x10435,0x1040d},{0x2c35,0x2c05,0x2c35,0x2c05},{0x0435,0x0415,0x0435,0x0415},{0x2c36,0x2c06,0x2c36,0x2c06}, +{0x0436,0x0416,0x0436,0x0416},{0x10436,0x1040e,0x10436,0x1040e},{0x2c37,0x2c07,0x2c37,0x2c07},{0x10437,0x1040f,0x10437,0x1040f}, +{0x0437,0x0417,0x0437,0x0417},{0x2c38,0x2c08,0x2c38,0x2c08},{0x10438,0x10410,0x10438,0x10410},{0x0438,0x0418,0x0438,0x0418}, +{0x2c39,0x2c09,0x2c39,0x2c09},{0x0439,0x0419,0x0439,0x0419},{0x10439,0x10411,0x10439,0x10411},{0x1043a,0x10412,0x1043a,0x10412}, +{0x2c3a,0x2c0a,0x2c3a,0x2c0a},{0x043a,0x041a,0x043a,0x041a},{0x2c3b,0x2c0b,0x2c3b,0x2c0b},{0x1043b,0x10413,0x1043b,0x10413}, +{0x043b,0x041b,0x043b,0x041b},{0x043c,0x041c,0x043c,0x041c},{0x2c3c,0x2c0c,0x2c3c,0x2c0c},{0x1043c,0x10414,0x1043c,0x10414}, +{0x043d,0x041d,0x043d,0x041d},{0x2c3d,0x2c0d,0x2c3d,0x2c0d},{0x1043d,0x10415,0x1043d,0x10415},{0x043e,0x041e,0x043e,0x041e}, +{0x2c3e,0x2c0e,0x2c3e,0x2c0e},{0x1043e,0x10416,0x1043e,0x10416},{0x2c3f,0x2c0f,0x2c3f,0x2c0f},{0x043f,0x041f,0x043f,0x041f}, +{0x1043f,0x10417,0x1043f,0x10417},{0x10440,0x10418,0x10440,0x10418},{0x0440,0x0420,0x0440,0x0420},{0x2c40,0x2c10,0x2c40,0x2c10}, +{0x10441,0x10419,0x10441,0x10419},{0x2c41,0x2c11,0x2c41,0x2c11},{0x0441,0x0421,0x0441,0x0421},{0x2c42,0x2c12,0x2c42,0x2c12}, +{0x10442,0x1041a,0x10442,0x1041a},{0x0442,0x0422,0x0442,0x0422},{0x0443,0x0423,0x0443,0x0423},{0x2c43,0x2c13,0x2c43,0x2c13},  {0x10443,0x1041b,0x10443,0x1041b},{0x0444,0x0424,0x0444,0x0424},{0x2c44,0x2c14,0x2c44,0x2c14},{0x10444,0x1041c,0x10444,0x1041c}, -{0x2c45,0x2c15,0x2c45,0x2c15},{0x10445,0x1041d,0x10445,0x1041d},{0x0445,0x0425,0x0445,0x0425},{0x2c46,0x2c16,0x2c46,0x2c16}, -{0x0446,0x0426,0x0446,0x0426},{0x10446,0x1041e,0x10446,0x1041e},{0x10447,0x1041f,0x10447,0x1041f},{0x2c47,0x2c17,0x2c47,0x2c17}, -{0x0447,0x0427,0x0447,0x0427},{0x10448,0x10420,0x10448,0x10420},{0x0448,0x0428,0x0448,0x0428},{0x2c48,0x2c18,0x2c48,0x2c18}, -{0x10449,0x10421,0x10449,0x10421},{0x2c49,0x2c19,0x2c49,0x2c19},{0x0449,0x0429,0x0449,0x0429},{0x2c4a,0x2c1a,0x2c4a,0x2c1a}, -{0x044a,0x042a,0x044a,0x042a},{0x1044a,0x10422,0x1044a,0x10422},{0x1044b,0x10423,0x1044b,0x10423},{0x2c4b,0x2c1b,0x2c4b,0x2c1b}, -{0x044b,0x042b,0x044b,0x042b},{0x1044c,0x10424,0x1044c,0x10424},{0x044c,0x042c,0x044c,0x042c},{0x2c4c,0x2c1c,0x2c4c,0x2c1c}, -{0x2c4d,0x2c1d,0x2c4d,0x2c1d},{0x044d,0x042d,0x044d,0x042d},{0x1044d,0x10425,0x1044d,0x10425},{0x2c4e,0x2c1e,0x2c4e,0x2c1e}, -{0x1044e,0x10426,0x1044e,0x10426},{0x044e,0x042e,0x044e,0x042e},{0x1044f,0x10427,0x1044f,0x10427},{0x044f,0x042f,0x044f,0x042f}, +{0x2c45,0x2c15,0x2c45,0x2c15},{0x10445,0x1041d,0x10445,0x1041d},{0x0445,0x0425,0x0445,0x0425},{0x10446,0x1041e,0x10446,0x1041e}, +{0x0446,0x0426,0x0446,0x0426},{0x2c46,0x2c16,0x2c46,0x2c16},{0x2c47,0x2c17,0x2c47,0x2c17},{0x10447,0x1041f,0x10447,0x1041f}, +{0x0447,0x0427,0x0447,0x0427},{0x0448,0x0428,0x0448,0x0428},{0x2c48,0x2c18,0x2c48,0x2c18},{0x10448,0x10420,0x10448,0x10420}, +{0x2c49,0x2c19,0x2c49,0x2c19},{0x0449,0x0429,0x0449,0x0429},{0x10449,0x10421,0x10449,0x10421},{0x2c4a,0x2c1a,0x2c4a,0x2c1a}, +{0x044a,0x042a,0x044a,0x042a},{0x1044a,0x10422,0x1044a,0x10422},{0x1044b,0x10423,0x1044b,0x10423},{0x044b,0x042b,0x044b,0x042b}, +{0x2c4b,0x2c1b,0x2c4b,0x2c1b},{0x1044c,0x10424,0x1044c,0x10424},{0x044c,0x042c,0x044c,0x042c},{0x2c4c,0x2c1c,0x2c4c,0x2c1c}, +{0x2c4d,0x2c1d,0x2c4d,0x2c1d},{0x1044d,0x10425,0x1044d,0x10425},{0x044d,0x042d,0x044d,0x042d},{0x2c4e,0x2c1e,0x2c4e,0x2c1e}, +{0x044e,0x042e,0x044e,0x042e},{0x1044e,0x10426,0x1044e,0x10426},{0x1044f,0x10427,0x1044f,0x10427},{0x044f,0x042f,0x044f,0x042f},  {0x2c4f,0x2c1f,0x2c4f,0x2c1f},{0x0450,0x0400,0x0450,0x0400},{0x2c50,0x2c20,0x2c50,0x2c20},{0x2c51,0x2c21,0x2c51,0x2c21}, -{0x0451,0x0401,0x0451,0x0401},{0x2c52,0x2c22,0x2c52,0x2c22},{0x0452,0x0402,0x0452,0x0402},{0x2c53,0x2c23,0x2c53,0x2c23}, -{0x0453,0x0403,0x0453,0x0403},{0x0454,0x0404,0x0454,0x0404},{0x2c54,0x2c24,0x2c54,0x2c24},{0x2c55,0x2c25,0x2c55,0x2c25}, -{0x0455,0x0405,0x0455,0x0405},{0x0456,0x0406,0x0456,0x0406},{0x2c56,0x2c26,0x2c56,0x2c26},{0x0457,0x0407,0x0457,0x0407}, -{0x2c57,0x2c27,0x2c57,0x2c27},{0x2c58,0x2c28,0x2c58,0x2c28},{0x0458,0x0408,0x0458,0x0408},{0x2c59,0x2c29,0x2c59,0x2c29}, -{0x0459,0x0409,0x0459,0x0409},{0x045a,0x040a,0x045a,0x040a},{0x2c5a,0x2c2a,0x2c5a,0x2c2a},{0x045b,0x040b,0x045b,0x040b}, -{0x2c5b,0x2c2b,0x2c5b,0x2c2b},{0x2c5c,0x2c2c,0x2c5c,0x2c2c},{0x045c,0x040c,0x045c,0x040c},{0x045d,0x040d,0x045d,0x040d}, -{0x2c5d,0x2c2d,0x2c5d,0x2c2d},{0x2c5e,0x2c2e,0x2c5e,0x2c2e},{0x045e,0x040e,0x045e,0x040e},{0x045f,0x040f,0x045f,0x040f}, -{0x0460,0x0460,0x0461,0x0460},{0x2c60,0x2c60,0x2c61,0x2c60},{0x0461,0x0460,0x0461,0x0460},{0x2c61,0x2c60,0x2c61,0x2c60}, -{0x0462,0x0462,0x0463,0x0462},{0x2c62,0x2c62,0x026b,0x2c62},{0x0463,0x0462,0x0463,0x0462},{0x2c63,0x2c63,0x1d7d,0x2c63}, -{0x0464,0x0464,0x0465,0x0464},{0x2c64,0x2c64,0x027d,0x2c64},{0x0465,0x0464,0x0465,0x0464},{0x2c65,0x023a,0x2c65,0x023a}, +{0x0451,0x0401,0x0451,0x0401},{0x0452,0x0402,0x0452,0x0402},{0x2c52,0x2c22,0x2c52,0x2c22},{0x2c53,0x2c23,0x2c53,0x2c23}, +{0x0453,0x0403,0x0453,0x0403},{0x2c54,0x2c24,0x2c54,0x2c24},{0x0454,0x0404,0x0454,0x0404},{0x0455,0x0405,0x0455,0x0405}, +{0x2c55,0x2c25,0x2c55,0x2c25},{0x0456,0x0406,0x0456,0x0406},{0x2c56,0x2c26,0x2c56,0x2c26},{0x0457,0x0407,0x0457,0x0407}, +{0x2c57,0x2c27,0x2c57,0x2c27},{0x2c58,0x2c28,0x2c58,0x2c28},{0x0458,0x0408,0x0458,0x0408},{0x0459,0x0409,0x0459,0x0409}, +{0x2c59,0x2c29,0x2c59,0x2c29},{0x2c5a,0x2c2a,0x2c5a,0x2c2a},{0x045a,0x040a,0x045a,0x040a},{0x045b,0x040b,0x045b,0x040b}, +{0x2c5b,0x2c2b,0x2c5b,0x2c2b},{0x2c5c,0x2c2c,0x2c5c,0x2c2c},{0x045c,0x040c,0x045c,0x040c},{0x2c5d,0x2c2d,0x2c5d,0x2c2d}, +{0x045d,0x040d,0x045d,0x040d},{0x045e,0x040e,0x045e,0x040e},{0x2c5e,0x2c2e,0x2c5e,0x2c2e},{0x045f,0x040f,0x045f,0x040f}, +{0x2c60,0x2c60,0x2c61,0x2c60},{0x0460,0x0460,0x0461,0x0460},{0x2c61,0x2c60,0x2c61,0x2c60},{0x0461,0x0460,0x0461,0x0460}, +{0x2c62,0x2c62,0x026b,0x2c62},{0x0462,0x0462,0x0463,0x0462},{0x0463,0x0462,0x0463,0x0462},{0x2c63,0x2c63,0x1d7d,0x2c63}, +{0x2c64,0x2c64,0x027d,0x2c64},{0x0464,0x0464,0x0465,0x0464},{0x0465,0x0464,0x0465,0x0464},{0x2c65,0x023a,0x2c65,0x023a},  {0x2c66,0x023e,0x2c66,0x023e},{0x0466,0x0466,0x0467,0x0466},{0x0467,0x0466,0x0467,0x0466},{0x2c67,0x2c67,0x2c68,0x2c67},  {0x2c68,0x2c67,0x2c68,0x2c67},{0x0468,0x0468,0x0469,0x0468},{0x0469,0x0468,0x0469,0x0468},{0x2c69,0x2c69,0x2c6a,0x2c69}, -{0x046a,0x046a,0x046b,0x046a},{0x2c6a,0x2c69,0x2c6a,0x2c69},{0x2c6b,0x2c6b,0x2c6c,0x2c6b},{0x046b,0x046a,0x046b,0x046a}, -{0x2c6c,0x2c6b,0x2c6c,0x2c6b},{0x046c,0x046c,0x046d,0x046c},{0x046d,0x046c,0x046d,0x046c},{0x2c6d,0x2c6d,0x0251,0x2c6d}, +{0x2c6a,0x2c69,0x2c6a,0x2c69},{0x046a,0x046a,0x046b,0x046a},{0x046b,0x046a,0x046b,0x046a},{0x2c6b,0x2c6b,0x2c6c,0x2c6b}, +{0x2c6c,0x2c6b,0x2c6c,0x2c6b},{0x046c,0x046c,0x046d,0x046c},{0x2c6d,0x2c6d,0x0251,0x2c6d},{0x046d,0x046c,0x046d,0x046c},  {0x2c6e,0x2c6e,0x0271,0x2c6e},{0x046e,0x046e,0x046f,0x046e},{0x046f,0x046e,0x046f,0x046e},{0x2c6f,0x2c6f,0x0250,0x2c6f}, -{0x2c70,0x2c70,0x0252,0x2c70},{0x0470,0x0470,0x0471,0x0470},{0x0471,0x0470,0x0471,0x0470},{0x0472,0x0472,0x0473,0x0472}, -{0x2c72,0x2c72,0x2c73,0x2c72},{0x2c73,0x2c72,0x2c73,0x2c72},{0x0473,0x0472,0x0473,0x0472},{0x0474,0x0474,0x0475,0x0474}, -{0x0475,0x0474,0x0475,0x0474},{0x2c75,0x2c75,0x2c76,0x2c75},{0x2c76,0x2c75,0x2c76,0x2c75},{0x0476,0x0476,0x0477,0x0476}, +{0x2c70,0x2c70,0x0252,0x2c70},{0x0470,0x0470,0x0471,0x0470},{0x0471,0x0470,0x0471,0x0470},{0x2c72,0x2c72,0x2c73,0x2c72}, +{0x0472,0x0472,0x0473,0x0472},{0x2c73,0x2c72,0x2c73,0x2c72},{0x0473,0x0472,0x0473,0x0472},{0x0474,0x0474,0x0475,0x0474}, +{0x2c75,0x2c75,0x2c76,0x2c75},{0x0475,0x0474,0x0475,0x0474},{0x0476,0x0476,0x0477,0x0476},{0x2c76,0x2c75,0x2c76,0x2c75},  {0x0477,0x0476,0x0477,0x0476},{0x0478,0x0478,0x0479,0x0478},{0x0479,0x0478,0x0479,0x0478},{0x047a,0x047a,0x047b,0x047a}, -{0x047b,0x047a,0x047b,0x047a},{0x047c,0x047c,0x047d,0x047c},{0x047d,0x047c,0x047d,0x047c},{0x047e,0x047e,0x047f,0x047e}, -{0x2c7e,0x2c7e,0x023f,0x2c7e},{0x047f,0x047e,0x047f,0x047e},{0x2c7f,0x2c7f,0x0240,0x2c7f},{0x10c80,0x10c80,0x10cc0,0x10c80}, -{0x2c80,0x2c80,0x2c81,0x2c80},{0x0480,0x0480,0x0481,0x0480},{0x2c81,0x2c80,0x2c81,0x2c80},{0x10c81,0x10c81,0x10cc1,0x10c81}, -{0x0481,0x0480,0x0481,0x0480},{0x2c82,0x2c82,0x2c83,0x2c82},{0x10c82,0x10c82,0x10cc2,0x10c82},{0x2c83,0x2c82,0x2c83,0x2c82}, -{0x10c83,0x10c83,0x10cc3,0x10c83},{0x10c84,0x10c84,0x10cc4,0x10c84},{0x2c84,0x2c84,0x2c85,0x2c84},{0x10c85,0x10c85,0x10cc5,0x10c85}, -{0x2c85,0x2c84,0x2c85,0x2c84},{0x10c86,0x10c86,0x10cc6,0x10c86},{0x2c86,0x2c86,0x2c87,0x2c86},{0x10c87,0x10c87,0x10cc7,0x10c87}, -{0x2c87,0x2c86,0x2c87,0x2c86},{0x2c88,0x2c88,0x2c89,0x2c88},{0x10c88,0x10c88,0x10cc8,0x10c88},{0x10c89,0x10c89,0x10cc9,0x10c89}, -{0x2c89,0x2c88,0x2c89,0x2c88},{0x2c8a,0x2c8a,0x2c8b,0x2c8a},{0x10c8a,0x10c8a,0x10cca,0x10c8a},{0x048a,0x048a,0x048b,0x048a}, +{0x047b,0x047a,0x047b,0x047a},{0x047c,0x047c,0x047d,0x047c},{0x047d,0x047c,0x047d,0x047c},{0x2c7e,0x2c7e,0x023f,0x2c7e}, +{0x047e,0x047e,0x047f,0x047e},{0x047f,0x047e,0x047f,0x047e},{0x2c7f,0x2c7f,0x0240,0x2c7f},{0x10c80,0x10c80,0x10cc0,0x10c80}, +{0x2c80,0x2c80,0x2c81,0x2c80},{0x0480,0x0480,0x0481,0x0480},{0x2c81,0x2c80,0x2c81,0x2c80},{0x0481,0x0480,0x0481,0x0480}, +{0x10c81,0x10c81,0x10cc1,0x10c81},{0x10c82,0x10c82,0x10cc2,0x10c82},{0x2c82,0x2c82,0x2c83,0x2c82},{0x2c83,0x2c82,0x2c83,0x2c82}, +{0x10c83,0x10c83,0x10cc3,0x10c83},{0x2c84,0x2c84,0x2c85,0x2c84},{0x10c84,0x10c84,0x10cc4,0x10c84},{0x2c85,0x2c84,0x2c85,0x2c84}, +{0x10c85,0x10c85,0x10cc5,0x10c85},{0x10c86,0x10c86,0x10cc6,0x10c86},{0x2c86,0x2c86,0x2c87,0x2c86},{0x2c87,0x2c86,0x2c87,0x2c86}, +{0x10c87,0x10c87,0x10cc7,0x10c87},{0x10c88,0x10c88,0x10cc8,0x10c88},{0x2c88,0x2c88,0x2c89,0x2c88},{0x2c89,0x2c88,0x2c89,0x2c88}, +{0x10c89,0x10c89,0x10cc9,0x10c89},{0x048a,0x048a,0x048b,0x048a},{0x2c8a,0x2c8a,0x2c8b,0x2c8a},{0x10c8a,0x10c8a,0x10cca,0x10c8a},  {0x10c8b,0x10c8b,0x10ccb,0x10c8b},{0x048b,0x048a,0x048b,0x048a},{0x2c8b,0x2c8a,0x2c8b,0x2c8a},{0x048c,0x048c,0x048d,0x048c}, -{0x2c8c,0x2c8c,0x2c8d,0x2c8c},{0x10c8c,0x10c8c,0x10ccc,0x10c8c},{0x048d,0x048c,0x048d,0x048c},{0x10c8d,0x10c8d,0x10ccd,0x10c8d}, -{0x2c8d,0x2c8c,0x2c8d,0x2c8c},{0x2c8e,0x2c8e,0x2c8f,0x2c8e},{0x048e,0x048e,0x048f,0x048e},{0x10c8e,0x10c8e,0x10cce,0x10c8e}, -{0x10c8f,0x10c8f,0x10ccf,0x10c8f},{0x2c8f,0x2c8e,0x2c8f,0x2c8e},{0x048f,0x048e,0x048f,0x048e},{0x2c90,0x2c90,0x2c91,0x2c90}, -{0x0490,0x0490,0x0491,0x0490},{0x10c90,0x10c90,0x10cd0,0x10c90},{0x10c91,0x10c91,0x10cd1,0x10c91},{0x2c91,0x2c90,0x2c91,0x2c90}, -{0x0491,0x0490,0x0491,0x0490},{0x10c92,0x10c92,0x10cd2,0x10c92},{0x2c92,0x2c92,0x2c93,0x2c92},{0x0492,0x0492,0x0493,0x0492}, -{0x0493,0x0492,0x0493,0x0492},{0x10c93,0x10c93,0x10cd3,0x10c93},{0x2c93,0x2c92,0x2c93,0x2c92},{0x2c94,0x2c94,0x2c95,0x2c94}, -{0x0494,0x0494,0x0495,0x0494},{0x10c94,0x10c94,0x10cd4,0x10c94},{0x0495,0x0494,0x0495,0x0494},{0x2c95,0x2c94,0x2c95,0x2c94}, +{0x2c8c,0x2c8c,0x2c8d,0x2c8c},{0x10c8c,0x10c8c,0x10ccc,0x10c8c},{0x2c8d,0x2c8c,0x2c8d,0x2c8c},{0x10c8d,0x10c8d,0x10ccd,0x10c8d}, +{0x048d,0x048c,0x048d,0x048c},{0x048e,0x048e,0x048f,0x048e},{0x2c8e,0x2c8e,0x2c8f,0x2c8e},{0x10c8e,0x10c8e,0x10cce,0x10c8e}, +{0x2c8f,0x2c8e,0x2c8f,0x2c8e},{0x10c8f,0x10c8f,0x10ccf,0x10c8f},{0x048f,0x048e,0x048f,0x048e},{0x10c90,0x10c90,0x10cd0,0x10c90}, +{0x0490,0x0490,0x0491,0x0490},{0x2c90,0x2c90,0x2c91,0x2c90},{0x0491,0x0490,0x0491,0x0490},{0x2c91,0x2c90,0x2c91,0x2c90}, +{0x10c91,0x10c91,0x10cd1,0x10c91},{0x0492,0x0492,0x0493,0x0492},{0x2c92,0x2c92,0x2c93,0x2c92},{0x10c92,0x10c92,0x10cd2,0x10c92}, +{0x10c93,0x10c93,0x10cd3,0x10c93},{0x2c93,0x2c92,0x2c93,0x2c92},{0x0493,0x0492,0x0493,0x0492},{0x10c94,0x10c94,0x10cd4,0x10c94}, +{0x2c94,0x2c94,0x2c95,0x2c94},{0x0494,0x0494,0x0495,0x0494},{0x0495,0x0494,0x0495,0x0494},{0x2c95,0x2c94,0x2c95,0x2c94},  {0x10c95,0x10c95,0x10cd5,0x10c95},{0x0496,0x0496,0x0497,0x0496},{0x10c96,0x10c96,0x10cd6,0x10c96},{0x2c96,0x2c96,0x2c97,0x2c96}, -{0x0497,0x0496,0x0497,0x0496},{0x2c97,0x2c96,0x2c97,0x2c96},{0x10c97,0x10c97,0x10cd7,0x10c97},{0x2c98,0x2c98,0x2c99,0x2c98}, -{0x0498,0x0498,0x0499,0x0498},{0x10c98,0x10c98,0x10cd8,0x10c98},{0x10c99,0x10c99,0x10cd9,0x10c99},{0x2c99,0x2c98,0x2c99,0x2c98}, -{0x0499,0x0498,0x0499,0x0498},{0x2c9a,0x2c9a,0x2c9b,0x2c9a},{0x10c9a,0x10c9a,0x10cda,0x10c9a},{0x049a,0x049a,0x049b,0x049a}, -{0x2c9b,0x2c9a,0x2c9b,0x2c9a},{0x049b,0x049a,0x049b,0x049a},{0x10c9b,0x10c9b,0x10cdb,0x10c9b},{0x10c9c,0x10c9c,0x10cdc,0x10c9c}, -{0x2c9c,0x2c9c,0x2c9d,0x2c9c},{0x049c,0x049c,0x049d,0x049c},{0x2c9d,0x2c9c,0x2c9d,0x2c9c},{0x049d,0x049c,0x049d,0x049c}, -{0x10c9d,0x10c9d,0x10cdd,0x10c9d},{0x2c9e,0x2c9e,0x2c9f,0x2c9e},{0x10c9e,0x10c9e,0x10cde,0x10c9e},{0x049e,0x049e,0x049f,0x049e}, -{0x049f,0x049e,0x049f,0x049e},{0x2c9f,0x2c9e,0x2c9f,0x2c9e},{0x10c9f,0x10c9f,0x10cdf,0x10c9f},{0x10ca0,0x10ca0,0x10ce0,0x10ca0}, -{0x2ca0,0x2ca0,0x2ca1,0x2ca0},{0x04a0,0x04a0,0x04a1,0x04a0},{0x10ca1,0x10ca1,0x10ce1,0x10ca1},{0x2ca1,0x2ca0,0x2ca1,0x2ca0}, -{0x04a1,0x04a0,0x04a1,0x04a0},{0x04a2,0x04a2,0x04a3,0x04a2},{0x2ca2,0x2ca2,0x2ca3,0x2ca2},{0x10ca2,0x10ca2,0x10ce2,0x10ca2}, -{0x2ca3,0x2ca2,0x2ca3,0x2ca2},{0x10ca3,0x10ca3,0x10ce3,0x10ca3},{0x04a3,0x04a2,0x04a3,0x04a2},{0x2ca4,0x2ca4,0x2ca5,0x2ca4}, -{0x04a4,0x04a4,0x04a5,0x04a4},{0x10ca4,0x10ca4,0x10ce4,0x10ca4},{0x2ca5,0x2ca4,0x2ca5,0x2ca4},{0x10ca5,0x10ca5,0x10ce5,0x10ca5}, -{0x04a5,0x04a4,0x04a5,0x04a4},{0x04a6,0x04a6,0x04a7,0x04a6},{0x2ca6,0x2ca6,0x2ca7,0x2ca6},{0x10ca6,0x10ca6,0x10ce6,0x10ca6}, -{0x10ca7,0x10ca7,0x10ce7,0x10ca7},{0x2ca7,0x2ca6,0x2ca7,0x2ca6},{0x04a7,0x04a6,0x04a7,0x04a6},{0x2ca8,0x2ca8,0x2ca9,0x2ca8}, -{0x10ca8,0x10ca8,0x10ce8,0x10ca8},{0x04a8,0x04a8,0x04a9,0x04a8},{0x2ca9,0x2ca8,0x2ca9,0x2ca8},{0x04a9,0x04a8,0x04a9,0x04a8}, -{0x10ca9,0x10ca9,0x10ce9,0x10ca9},{0x04aa,0x04aa,0x04ab,0x04aa},{0x2caa,0x2caa,0x2cab,0x2caa},{0x10caa,0x10caa,0x10cea,0x10caa}, -{0x2cab,0x2caa,0x2cab,0x2caa},{0x04ab,0x04aa,0x04ab,0x04aa},{0x10cab,0x10cab,0x10ceb,0x10cab},{0x2cac,0x2cac,0x2cad,0x2cac}, -{0x04ac,0x04ac,0x04ad,0x04ac},{0x10cac,0x10cac,0x10cec,0x10cac},{0x04ad,0x04ac,0x04ad,0x04ac},{0x2cad,0x2cac,0x2cad,0x2cac}, -{0x10cad,0x10cad,0x10ced,0x10cad},{0x10cae,0x10cae,0x10cee,0x10cae},{0x04ae,0x04ae,0x04af,0x04ae},{0x2cae,0x2cae,0x2caf,0x2cae}, -{0x04af,0x04ae,0x04af,0x04ae},{0x10caf,0x10caf,0x10cef,0x10caf},{0x2caf,0x2cae,0x2caf,0x2cae},{0x2cb0,0x2cb0,0x2cb1,0x2cb0}, -{0x10cb0,0x10cb0,0x10cf0,0x10cb0},{0x04b0,0x04b0,0x04b1,0x04b0},{0x2cb1,0x2cb0,0x2cb1,0x2cb0},{0x10cb1,0x10cb1,0x10cf1,0x10cb1}, -{0x04b1,0x04b0,0x04b1,0x04b0},{0x2cb2,0x2cb2,0x2cb3,0x2cb2},{0x04b2,0x04b2,0x04b3,0x04b2},{0x10cb2,0x10cb2,0x10cf2,0x10cb2}, +{0x0497,0x0496,0x0497,0x0496},{0x2c97,0x2c96,0x2c97,0x2c96},{0x10c97,0x10c97,0x10cd7,0x10c97},{0x0498,0x0498,0x0499,0x0498}, +{0x10c98,0x10c98,0x10cd8,0x10c98},{0x2c98,0x2c98,0x2c99,0x2c98},{0x2c99,0x2c98,0x2c99,0x2c98},{0x10c99,0x10c99,0x10cd9,0x10c99}, +{0x0499,0x0498,0x0499,0x0498},{0x049a,0x049a,0x049b,0x049a},{0x2c9a,0x2c9a,0x2c9b,0x2c9a},{0x10c9a,0x10c9a,0x10cda,0x10c9a}, +{0x10c9b,0x10c9b,0x10cdb,0x10c9b},{0x049b,0x049a,0x049b,0x049a},{0x2c9b,0x2c9a,0x2c9b,0x2c9a},{0x049c,0x049c,0x049d,0x049c}, +{0x10c9c,0x10c9c,0x10cdc,0x10c9c},{0x2c9c,0x2c9c,0x2c9d,0x2c9c},{0x2c9d,0x2c9c,0x2c9d,0x2c9c},{0x049d,0x049c,0x049d,0x049c}, +{0x10c9d,0x10c9d,0x10cdd,0x10c9d},{0x049e,0x049e,0x049f,0x049e},{0x2c9e,0x2c9e,0x2c9f,0x2c9e},{0x10c9e,0x10c9e,0x10cde,0x10c9e}, +{0x049f,0x049e,0x049f,0x049e},{0x2c9f,0x2c9e,0x2c9f,0x2c9e},{0x10c9f,0x10c9f,0x10cdf,0x10c9f},{0x04a0,0x04a0,0x04a1,0x04a0}, +{0x10ca0,0x10ca0,0x10ce0,0x10ca0},{0x2ca0,0x2ca0,0x2ca1,0x2ca0},{0x2ca1,0x2ca0,0x2ca1,0x2ca0},{0x10ca1,0x10ca1,0x10ce1,0x10ca1}, +{0x04a1,0x04a0,0x04a1,0x04a0},{0x2ca2,0x2ca2,0x2ca3,0x2ca2},{0x10ca2,0x10ca2,0x10ce2,0x10ca2},{0x04a2,0x04a2,0x04a3,0x04a2}, +{0x04a3,0x04a2,0x04a3,0x04a2},{0x10ca3,0x10ca3,0x10ce3,0x10ca3},{0x2ca3,0x2ca2,0x2ca3,0x2ca2},{0x10ca4,0x10ca4,0x10ce4,0x10ca4}, +{0x04a4,0x04a4,0x04a5,0x04a4},{0x2ca4,0x2ca4,0x2ca5,0x2ca4},{0x10ca5,0x10ca5,0x10ce5,0x10ca5},{0x2ca5,0x2ca4,0x2ca5,0x2ca4}, +{0x04a5,0x04a4,0x04a5,0x04a4},{0x10ca6,0x10ca6,0x10ce6,0x10ca6},{0x2ca6,0x2ca6,0x2ca7,0x2ca6},{0x04a6,0x04a6,0x04a7,0x04a6}, +{0x10ca7,0x10ca7,0x10ce7,0x10ca7},{0x2ca7,0x2ca6,0x2ca7,0x2ca6},{0x04a7,0x04a6,0x04a7,0x04a6},{0x04a8,0x04a8,0x04a9,0x04a8}, +{0x2ca8,0x2ca8,0x2ca9,0x2ca8},{0x10ca8,0x10ca8,0x10ce8,0x10ca8},{0x04a9,0x04a8,0x04a9,0x04a8},{0x10ca9,0x10ca9,0x10ce9,0x10ca9}, +{0x2ca9,0x2ca8,0x2ca9,0x2ca8},{0x2caa,0x2caa,0x2cab,0x2caa},{0x10caa,0x10caa,0x10cea,0x10caa},{0x04aa,0x04aa,0x04ab,0x04aa}, +{0x04ab,0x04aa,0x04ab,0x04aa},{0x2cab,0x2caa,0x2cab,0x2caa},{0x10cab,0x10cab,0x10ceb,0x10cab},{0x10cac,0x10cac,0x10cec,0x10cac}, +{0x04ac,0x04ac,0x04ad,0x04ac},{0x2cac,0x2cac,0x2cad,0x2cac},{0x04ad,0x04ac,0x04ad,0x04ac},{0x2cad,0x2cac,0x2cad,0x2cac}, +{0x10cad,0x10cad,0x10ced,0x10cad},{0x2cae,0x2cae,0x2caf,0x2cae},{0x10cae,0x10cae,0x10cee,0x10cae},{0x04ae,0x04ae,0x04af,0x04ae}, +{0x04af,0x04ae,0x04af,0x04ae},{0x2caf,0x2cae,0x2caf,0x2cae},{0x10caf,0x10caf,0x10cef,0x10caf},{0x2cb0,0x2cb0,0x2cb1,0x2cb0}, +{0x04b0,0x04b0,0x04b1,0x04b0},{0x10cb0,0x10cb0,0x10cf0,0x10cb0},{0x04b1,0x04b0,0x04b1,0x04b0},{0x2cb1,0x2cb0,0x2cb1,0x2cb0}, +{0x10cb1,0x10cb1,0x10cf1,0x10cb1},{0x2cb2,0x2cb2,0x2cb3,0x2cb2},{0x10cb2,0x10cb2,0x10cf2,0x10cb2},{0x04b2,0x04b2,0x04b3,0x04b2},  {0x04b3,0x04b2,0x04b3,0x04b2},{0x2cb3,0x2cb2,0x2cb3,0x2cb2},{0x04b4,0x04b4,0x04b5,0x04b4},{0x2cb4,0x2cb4,0x2cb5,0x2cb4}, -{0x04b5,0x04b4,0x04b5,0x04b4},{0x2cb5,0x2cb4,0x2cb5,0x2cb4},{0x04b6,0x04b6,0x04b7,0x04b6},{0x24b6,0x24b6,0x24d0,0x24b6}, -{0x2cb6,0x2cb6,0x2cb7,0x2cb6},{0x04b7,0x04b6,0x04b7,0x04b6},{0x24b7,0x24b7,0x24d1,0x24b7},{0x2cb7,0x2cb6,0x2cb7,0x2cb6}, -{0x24b8,0x24b8,0x24d2,0x24b8},{0x04b8,0x04b8,0x04b9,0x04b8},{0x2cb8,0x2cb8,0x2cb9,0x2cb8},{0x04b9,0x04b8,0x04b9,0x04b8}, -{0x24b9,0x24b9,0x24d3,0x24b9},{0x2cb9,0x2cb8,0x2cb9,0x2cb8},{0x2cba,0x2cba,0x2cbb,0x2cba},{0x24ba,0x24ba,0x24d4,0x24ba}, -{0x04ba,0x04ba,0x04bb,0x04ba},{0x2cbb,0x2cba,0x2cbb,0x2cba},{0x24bb,0x24bb,0x24d5,0x24bb},{0x04bb,0x04ba,0x04bb,0x04ba}, -{0x2cbc,0x2cbc,0x2cbd,0x2cbc},{0x24bc,0x24bc,0x24d6,0x24bc},{0x04bc,0x04bc,0x04bd,0x04bc},{0x04bd,0x04bc,0x04bd,0x04bc}, -{0x24bd,0x24bd,0x24d7,0x24bd},{0x2cbd,0x2cbc,0x2cbd,0x2cbc},{0x04be,0x04be,0x04bf,0x04be},{0x24be,0x24be,0x24d8,0x24be}, -{0x2cbe,0x2cbe,0x2cbf,0x2cbe},{0x24bf,0x24bf,0x24d9,0x24bf},{0x04bf,0x04be,0x04bf,0x04be},{0x2cbf,0x2cbe,0x2cbf,0x2cbe}, -{0x10cc0,0x10c80,0x10cc0,0x10c80},{0x2cc0,0x2cc0,0x2cc1,0x2cc0},{0x04c0,0x04c0,0x04cf,0x04c0},{0x24c0,0x24c0,0x24da,0x24c0}, -{0x04c1,0x04c1,0x04c2,0x04c1},{0x24c1,0x24c1,0x24db,0x24c1},{0x10cc1,0x10c81,0x10cc1,0x10c81},{0x2cc1,0x2cc0,0x2cc1,0x2cc0}, -{0x10cc2,0x10c82,0x10cc2,0x10c82},{0x24c2,0x24c2,0x24dc,0x24c2},{0x2cc2,0x2cc2,0x2cc3,0x2cc2},{0x04c2,0x04c1,0x04c2,0x04c1}, -{0x10cc3,0x10c83,0x10cc3,0x10c83},{0x04c3,0x04c3,0x04c4,0x04c3},{0x24c3,0x24c3,0x24dd,0x24c3},{0x2cc3,0x2cc2,0x2cc3,0x2cc2}, -{0x10cc4,0x10c84,0x10cc4,0x10c84},{0x2cc4,0x2cc4,0x2cc5,0x2cc4},{0x24c4,0x24c4,0x24de,0x24c4},{0x04c4,0x04c3,0x04c4,0x04c3}, -{0x10cc5,0x10c85,0x10cc5,0x10c85},{0x2cc5,0x2cc4,0x2cc5,0x2cc4},{0x24c5,0x24c5,0x24df,0x24c5},{0x04c5,0x04c5,0x04c6,0x04c5}, -{0x24c6,0x24c6,0x24e0,0x24c6},{0x2cc6,0x2cc6,0x2cc7,0x2cc6},{0x10cc6,0x10c86,0x10cc6,0x10c86},{0x04c6,0x04c5,0x04c6,0x04c5}, +{0x2cb5,0x2cb4,0x2cb5,0x2cb4},{0x04b5,0x04b4,0x04b5,0x04b4},{0x04b6,0x04b6,0x04b7,0x04b6},{0x2cb6,0x2cb6,0x2cb7,0x2cb6}, +{0x24b6,0x24b6,0x24d0,0x24b6},{0x04b7,0x04b6,0x04b7,0x04b6},{0x2cb7,0x2cb6,0x2cb7,0x2cb6},{0x24b7,0x24b7,0x24d1,0x24b7}, +{0x04b8,0x04b8,0x04b9,0x04b8},{0x2cb8,0x2cb8,0x2cb9,0x2cb8},{0x24b8,0x24b8,0x24d2,0x24b8},{0x24b9,0x24b9,0x24d3,0x24b9}, +{0x04b9,0x04b8,0x04b9,0x04b8},{0x2cb9,0x2cb8,0x2cb9,0x2cb8},{0x04ba,0x04ba,0x04bb,0x04ba},{0x24ba,0x24ba,0x24d4,0x24ba}, +{0x2cba,0x2cba,0x2cbb,0x2cba},{0x24bb,0x24bb,0x24d5,0x24bb},{0x2cbb,0x2cba,0x2cbb,0x2cba},{0x04bb,0x04ba,0x04bb,0x04ba}, +{0x04bc,0x04bc,0x04bd,0x04bc},{0x2cbc,0x2cbc,0x2cbd,0x2cbc},{0x24bc,0x24bc,0x24d6,0x24bc},{0x04bd,0x04bc,0x04bd,0x04bc}, +{0x24bd,0x24bd,0x24d7,0x24bd},{0x2cbd,0x2cbc,0x2cbd,0x2cbc},{0x2cbe,0x2cbe,0x2cbf,0x2cbe},{0x04be,0x04be,0x04bf,0x04be}, +{0x24be,0x24be,0x24d8,0x24be},{0x2cbf,0x2cbe,0x2cbf,0x2cbe},{0x04bf,0x04be,0x04bf,0x04be},{0x24bf,0x24bf,0x24d9,0x24bf}, +{0x10cc0,0x10c80,0x10cc0,0x10c80},{0x2cc0,0x2cc0,0x2cc1,0x2cc0},{0x24c0,0x24c0,0x24da,0x24c0},{0x04c0,0x04c0,0x04cf,0x04c0}, +{0x10cc1,0x10c81,0x10cc1,0x10c81},{0x04c1,0x04c1,0x04c2,0x04c1},{0x24c1,0x24c1,0x24db,0x24c1},{0x2cc1,0x2cc0,0x2cc1,0x2cc0}, +{0x2cc2,0x2cc2,0x2cc3,0x2cc2},{0x10cc2,0x10c82,0x10cc2,0x10c82},{0x24c2,0x24c2,0x24dc,0x24c2},{0x04c2,0x04c1,0x04c2,0x04c1}, +{0x24c3,0x24c3,0x24dd,0x24c3},{0x2cc3,0x2cc2,0x2cc3,0x2cc2},{0x04c3,0x04c3,0x04c4,0x04c3},{0x10cc3,0x10c83,0x10cc3,0x10c83}, +{0x2cc4,0x2cc4,0x2cc5,0x2cc4},{0x04c4,0x04c3,0x04c4,0x04c3},{0x24c4,0x24c4,0x24de,0x24c4},{0x10cc4,0x10c84,0x10cc4,0x10c84}, +{0x04c5,0x04c5,0x04c6,0x04c5},{0x10cc5,0x10c85,0x10cc5,0x10c85},{0x24c5,0x24c5,0x24df,0x24c5},{0x2cc5,0x2cc4,0x2cc5,0x2cc4}, +{0x24c6,0x24c6,0x24e0,0x24c6},{0x2cc6,0x2cc6,0x2cc7,0x2cc6},{0x04c6,0x04c5,0x04c6,0x04c5},{0x10cc6,0x10c86,0x10cc6,0x10c86},  {0x04c7,0x04c7,0x04c8,0x04c7},{0x24c7,0x24c7,0x24e1,0x24c7},{0x10cc7,0x10c87,0x10cc7,0x10c87},{0x2cc7,0x2cc6,0x2cc7,0x2cc6},  {0x24c8,0x24c8,0x24e2,0x24c8},{0x04c8,0x04c7,0x04c8,0x04c7},{0x2cc8,0x2cc8,0x2cc9,0x2cc8},{0x10cc8,0x10c88,0x10cc8,0x10c88}, -{0x10cc9,0x10c89,0x10cc9,0x10c89},{0x24c9,0x24c9,0x24e3,0x24c9},{0x2cc9,0x2cc8,0x2cc9,0x2cc8},{0x04c9,0x04c9,0x04ca,0x04c9}, -{0x2cca,0x2cca,0x2ccb,0x2cca},{0x10cca,0x10c8a,0x10cca,0x10c8a},{0x24ca,0x24ca,0x24e4,0x24ca},{0x04ca,0x04c9,0x04ca,0x04c9}, -{0x2ccb,0x2cca,0x2ccb,0x2cca},{0x10ccb,0x10c8b,0x10ccb,0x10c8b},{0x24cb,0x24cb,0x24e5,0x24cb},{0x04cb,0x04cb,0x04cc,0x04cb}, -{0x24cc,0x24cc,0x24e6,0x24cc},{0x04cc,0x04cb,0x04cc,0x04cb},{0x10ccc,0x10c8c,0x10ccc,0x10c8c},{0x2ccc,0x2ccc,0x2ccd,0x2ccc}, -{0x2ccd,0x2ccc,0x2ccd,0x2ccc},{0x04cd,0x04cd,0x04ce,0x04cd},{0x10ccd,0x10c8d,0x10ccd,0x10c8d},{0x24cd,0x24cd,0x24e7,0x24cd}, -{0x24ce,0x24ce,0x24e8,0x24ce},{0x04ce,0x04cd,0x04ce,0x04cd},{0x2cce,0x2cce,0x2ccf,0x2cce},{0x10cce,0x10c8e,0x10cce,0x10c8e}, -{0x10ccf,0x10c8f,0x10ccf,0x10c8f},{0x04cf,0x04c0,0x04cf,0x04c0},{0x2ccf,0x2cce,0x2ccf,0x2cce},{0x24cf,0x24cf,0x24e9,0x24cf}, -{0x2cd0,0x2cd0,0x2cd1,0x2cd0},{0x24d0,0x24b6,0x24d0,0x24b6},{0x10cd0,0x10c90,0x10cd0,0x10c90},{0x04d0,0x04d0,0x04d1,0x04d0}, -{0x04d1,0x04d0,0x04d1,0x04d0},{0x10cd1,0x10c91,0x10cd1,0x10c91},{0x24d1,0x24b7,0x24d1,0x24b7},{0x2cd1,0x2cd0,0x2cd1,0x2cd0}, -{0x2cd2,0x2cd2,0x2cd3,0x2cd2},{0x10cd2,0x10c92,0x10cd2,0x10c92},{0x24d2,0x24b8,0x24d2,0x24b8},{0x04d2,0x04d2,0x04d3,0x04d2}, -{0x04d3,0x04d2,0x04d3,0x04d2},{0x24d3,0x24b9,0x24d3,0x24b9},{0x2cd3,0x2cd2,0x2cd3,0x2cd2},{0x10cd3,0x10c93,0x10cd3,0x10c93}, -{0x2cd4,0x2cd4,0x2cd5,0x2cd4},{0x10cd4,0x10c94,0x10cd4,0x10c94},{0x24d4,0x24ba,0x24d4,0x24ba},{0x04d4,0x04d4,0x04d5,0x04d4}, -{0x24d5,0x24bb,0x24d5,0x24bb},{0x10cd5,0x10c95,0x10cd5,0x10c95},{0x2cd5,0x2cd4,0x2cd5,0x2cd4},{0x04d5,0x04d4,0x04d5,0x04d4}, -{0x24d6,0x24bc,0x24d6,0x24bc},{0x04d6,0x04d6,0x04d7,0x04d6},{0x10cd6,0x10c96,0x10cd6,0x10c96},{0x2cd6,0x2cd6,0x2cd7,0x2cd6}, -{0x04d7,0x04d6,0x04d7,0x04d6},{0x10cd7,0x10c97,0x10cd7,0x10c97},{0x2cd7,0x2cd6,0x2cd7,0x2cd6},{0x24d7,0x24bd,0x24d7,0x24bd}, -{0x24d8,0x24be,0x24d8,0x24be},{0x10cd8,0x10c98,0x10cd8,0x10c98},{0x04d8,0x04d8,0x04d9,0x04d8},{0x2cd8,0x2cd8,0x2cd9,0x2cd8}, -{0x24d9,0x24bf,0x24d9,0x24bf},{0x10cd9,0x10c99,0x10cd9,0x10c99},{0x04d9,0x04d8,0x04d9,0x04d8},{0x2cd9,0x2cd8,0x2cd9,0x2cd8}, -{0x2cda,0x2cda,0x2cdb,0x2cda},{0x04da,0x04da,0x04db,0x04da},{0x24da,0x24c0,0x24da,0x24c0},{0x10cda,0x10c9a,0x10cda,0x10c9a}, -{0x24db,0x24c1,0x24db,0x24c1},{0x10cdb,0x10c9b,0x10cdb,0x10c9b},{0x2cdb,0x2cda,0x2cdb,0x2cda},{0x04db,0x04da,0x04db,0x04da}, -{0x2cdc,0x2cdc,0x2cdd,0x2cdc},{0x04dc,0x04dc,0x04dd,0x04dc},{0x10cdc,0x10c9c,0x10cdc,0x10c9c},{0x24dc,0x24c2,0x24dc,0x24c2}, -{0x04dd,0x04dc,0x04dd,0x04dc},{0x2cdd,0x2cdc,0x2cdd,0x2cdc},{0x10cdd,0x10c9d,0x10cdd,0x10c9d},{0x24dd,0x24c3,0x24dd,0x24c3}, -{0x24de,0x24c4,0x24de,0x24c4},{0x04de,0x04de,0x04df,0x04de},{0x10cde,0x10c9e,0x10cde,0x10c9e},{0x2cde,0x2cde,0x2cdf,0x2cde}, -{0x04df,0x04de,0x04df,0x04de},{0x24df,0x24c5,0x24df,0x24c5},{0x10cdf,0x10c9f,0x10cdf,0x10c9f},{0x2cdf,0x2cde,0x2cdf,0x2cde}, -{0x24e0,0x24c6,0x24e0,0x24c6},{0x2ce0,0x2ce0,0x2ce1,0x2ce0},{0x10ce0,0x10ca0,0x10ce0,0x10ca0},{0x04e0,0x04e0,0x04e1,0x04e0}, +{0x04c9,0x04c9,0x04ca,0x04c9},{0x2cc9,0x2cc8,0x2cc9,0x2cc8},{0x24c9,0x24c9,0x24e3,0x24c9},{0x10cc9,0x10c89,0x10cc9,0x10c89}, +{0x04ca,0x04c9,0x04ca,0x04c9},{0x10cca,0x10c8a,0x10cca,0x10c8a},{0x2cca,0x2cca,0x2ccb,0x2cca},{0x24ca,0x24ca,0x24e4,0x24ca}, +{0x10ccb,0x10c8b,0x10ccb,0x10c8b},{0x24cb,0x24cb,0x24e5,0x24cb},{0x2ccb,0x2cca,0x2ccb,0x2cca},{0x04cb,0x04cb,0x04cc,0x04cb}, +{0x10ccc,0x10c8c,0x10ccc,0x10c8c},{0x2ccc,0x2ccc,0x2ccd,0x2ccc},{0x04cc,0x04cb,0x04cc,0x04cb},{0x24cc,0x24cc,0x24e6,0x24cc}, +{0x24cd,0x24cd,0x24e7,0x24cd},{0x2ccd,0x2ccc,0x2ccd,0x2ccc},{0x04cd,0x04cd,0x04ce,0x04cd},{0x10ccd,0x10c8d,0x10ccd,0x10c8d}, +{0x24ce,0x24ce,0x24e8,0x24ce},{0x10cce,0x10c8e,0x10cce,0x10c8e},{0x2cce,0x2cce,0x2ccf,0x2cce},{0x04ce,0x04cd,0x04ce,0x04cd}, +{0x04cf,0x04c0,0x04cf,0x04c0},{0x2ccf,0x2cce,0x2ccf,0x2cce},{0x10ccf,0x10c8f,0x10ccf,0x10c8f},{0x24cf,0x24cf,0x24e9,0x24cf}, +{0x2cd0,0x2cd0,0x2cd1,0x2cd0},{0x10cd0,0x10c90,0x10cd0,0x10c90},{0x24d0,0x24b6,0x24d0,0x24b6},{0x04d0,0x04d0,0x04d1,0x04d0}, +{0x24d1,0x24b7,0x24d1,0x24b7},{0x2cd1,0x2cd0,0x2cd1,0x2cd0},{0x10cd1,0x10c91,0x10cd1,0x10c91},{0x04d1,0x04d0,0x04d1,0x04d0}, +{0x2cd2,0x2cd2,0x2cd3,0x2cd2},{0x04d2,0x04d2,0x04d3,0x04d2},{0x10cd2,0x10c92,0x10cd2,0x10c92},{0x24d2,0x24b8,0x24d2,0x24b8}, +{0x10cd3,0x10c93,0x10cd3,0x10c93},{0x04d3,0x04d2,0x04d3,0x04d2},{0x2cd3,0x2cd2,0x2cd3,0x2cd2},{0x24d3,0x24b9,0x24d3,0x24b9}, +{0x24d4,0x24ba,0x24d4,0x24ba},{0x04d4,0x04d4,0x04d5,0x04d4},{0x2cd4,0x2cd4,0x2cd5,0x2cd4},{0x10cd4,0x10c94,0x10cd4,0x10c94}, +{0x24d5,0x24bb,0x24d5,0x24bb},{0x2cd5,0x2cd4,0x2cd5,0x2cd4},{0x04d5,0x04d4,0x04d5,0x04d4},{0x10cd5,0x10c95,0x10cd5,0x10c95}, +{0x10cd6,0x10c96,0x10cd6,0x10c96},{0x04d6,0x04d6,0x04d7,0x04d6},{0x24d6,0x24bc,0x24d6,0x24bc},{0x2cd6,0x2cd6,0x2cd7,0x2cd6}, +{0x2cd7,0x2cd6,0x2cd7,0x2cd6},{0x10cd7,0x10c97,0x10cd7,0x10c97},{0x24d7,0x24bd,0x24d7,0x24bd},{0x04d7,0x04d6,0x04d7,0x04d6}, +{0x10cd8,0x10c98,0x10cd8,0x10c98},{0x24d8,0x24be,0x24d8,0x24be},{0x2cd8,0x2cd8,0x2cd9,0x2cd8},{0x04d8,0x04d8,0x04d9,0x04d8}, +{0x10cd9,0x10c99,0x10cd9,0x10c99},{0x04d9,0x04d8,0x04d9,0x04d8},{0x2cd9,0x2cd8,0x2cd9,0x2cd8},{0x24d9,0x24bf,0x24d9,0x24bf}, +{0x04da,0x04da,0x04db,0x04da},{0x10cda,0x10c9a,0x10cda,0x10c9a},{0x24da,0x24c0,0x24da,0x24c0},{0x2cda,0x2cda,0x2cdb,0x2cda}, +{0x04db,0x04da,0x04db,0x04da},{0x2cdb,0x2cda,0x2cdb,0x2cda},{0x10cdb,0x10c9b,0x10cdb,0x10c9b},{0x24db,0x24c1,0x24db,0x24c1}, +{0x2cdc,0x2cdc,0x2cdd,0x2cdc},{0x10cdc,0x10c9c,0x10cdc,0x10c9c},{0x24dc,0x24c2,0x24dc,0x24c2},{0x04dc,0x04dc,0x04dd,0x04dc}, +{0x10cdd,0x10c9d,0x10cdd,0x10c9d},{0x04dd,0x04dc,0x04dd,0x04dc},{0x24dd,0x24c3,0x24dd,0x24c3},{0x2cdd,0x2cdc,0x2cdd,0x2cdc}, +{0x04de,0x04de,0x04df,0x04de},{0x24de,0x24c4,0x24de,0x24c4},{0x2cde,0x2cde,0x2cdf,0x2cde},{0x10cde,0x10c9e,0x10cde,0x10c9e}, +{0x04df,0x04de,0x04df,0x04de},{0x2cdf,0x2cde,0x2cdf,0x2cde},{0x10cdf,0x10c9f,0x10cdf,0x10c9f},{0x24df,0x24c5,0x24df,0x24c5}, +{0x2ce0,0x2ce0,0x2ce1,0x2ce0},{0x24e0,0x24c6,0x24e0,0x24c6},{0x10ce0,0x10ca0,0x10ce0,0x10ca0},{0x04e0,0x04e0,0x04e1,0x04e0},  {0x04e1,0x04e0,0x04e1,0x04e0},{0x24e1,0x24c7,0x24e1,0x24c7},{0x10ce1,0x10ca1,0x10ce1,0x10ca1},{0x2ce1,0x2ce0,0x2ce1,0x2ce0}, -{0x04e2,0x04e2,0x04e3,0x04e2},{0x24e2,0x24c8,0x24e2,0x24c8},{0x10ce2,0x10ca2,0x10ce2,0x10ca2},{0x2ce2,0x2ce2,0x2ce3,0x2ce2}, -{0x2ce3,0x2ce2,0x2ce3,0x2ce2},{0x10ce3,0x10ca3,0x10ce3,0x10ca3},{0x24e3,0x24c9,0x24e3,0x24c9},{0x04e3,0x04e2,0x04e3,0x04e2}, +{0x24e2,0x24c8,0x24e2,0x24c8},{0x2ce2,0x2ce2,0x2ce3,0x2ce2},{0x04e2,0x04e2,0x04e3,0x04e2},{0x10ce2,0x10ca2,0x10ce2,0x10ca2}, +{0x04e3,0x04e2,0x04e3,0x04e2},{0x10ce3,0x10ca3,0x10ce3,0x10ca3},{0x24e3,0x24c9,0x24e3,0x24c9},{0x2ce3,0x2ce2,0x2ce3,0x2ce2},  {0x24e4,0x24ca,0x24e4,0x24ca},{0x04e4,0x04e4,0x04e5,0x04e4},{0x10ce4,0x10ca4,0x10ce4,0x10ca4},{0x24e5,0x24cb,0x24e5,0x24cb}, -{0x04e5,0x04e4,0x04e5,0x04e4},{0x10ce5,0x10ca5,0x10ce5,0x10ca5},{0x24e6,0x24cc,0x24e6,0x24cc},{0x10ce6,0x10ca6,0x10ce6,0x10ca6}, -{0x04e6,0x04e6,0x04e7,0x04e6},{0x04e7,0x04e6,0x04e7,0x04e6},{0x24e7,0x24cd,0x24e7,0x24cd},{0x10ce7,0x10ca7,0x10ce7,0x10ca7}, -{0x10ce8,0x10ca8,0x10ce8,0x10ca8},{0x24e8,0x24ce,0x24e8,0x24ce},{0x04e8,0x04e8,0x04e9,0x04e8},{0x24e9,0x24cf,0x24e9,0x24cf}, -{0x10ce9,0x10ca9,0x10ce9,0x10ca9},{0x04e9,0x04e8,0x04e9,0x04e8},{0x04ea,0x04ea,0x04eb,0x04ea},{0x10cea,0x10caa,0x10cea,0x10caa}, -{0x10ceb,0x10cab,0x10ceb,0x10cab},{0x2ceb,0x2ceb,0x2cec,0x2ceb},{0x04eb,0x04ea,0x04eb,0x04ea},{0x04ec,0x04ec,0x04ed,0x04ec}, -{0x10cec,0x10cac,0x10cec,0x10cac},{0x2cec,0x2ceb,0x2cec,0x2ceb},{0x2ced,0x2ced,0x2cee,0x2ced},{0x10ced,0x10cad,0x10ced,0x10cad}, -{0x04ed,0x04ec,0x04ed,0x04ec},{0x10cee,0x10cae,0x10cee,0x10cae},{0x2cee,0x2ced,0x2cee,0x2ced},{0x04ee,0x04ee,0x04ef,0x04ee}, -{0x04ef,0x04ee,0x04ef,0x04ee},{0x10cef,0x10caf,0x10cef,0x10caf},{0x10cf0,0x10cb0,0x10cf0,0x10cb0},{0x04f0,0x04f0,0x04f1,0x04f0}, +{0x10ce5,0x10ca5,0x10ce5,0x10ca5},{0x04e5,0x04e4,0x04e5,0x04e4},{0x24e6,0x24cc,0x24e6,0x24cc},{0x04e6,0x04e6,0x04e7,0x04e6}, +{0x10ce6,0x10ca6,0x10ce6,0x10ca6},{0x04e7,0x04e6,0x04e7,0x04e6},{0x10ce7,0x10ca7,0x10ce7,0x10ca7},{0x24e7,0x24cd,0x24e7,0x24cd}, +{0x10ce8,0x10ca8,0x10ce8,0x10ca8},{0x24e8,0x24ce,0x24e8,0x24ce},{0x04e8,0x04e8,0x04e9,0x04e8},{0x04e9,0x04e8,0x04e9,0x04e8}, +{0x10ce9,0x10ca9,0x10ce9,0x10ca9},{0x24e9,0x24cf,0x24e9,0x24cf},{0x04ea,0x04ea,0x04eb,0x04ea},{0x10cea,0x10caa,0x10cea,0x10caa}, +{0x04eb,0x04ea,0x04eb,0x04ea},{0x2ceb,0x2ceb,0x2cec,0x2ceb},{0x10ceb,0x10cab,0x10ceb,0x10cab},{0x04ec,0x04ec,0x04ed,0x04ec}, +{0x2cec,0x2ceb,0x2cec,0x2ceb},{0x10cec,0x10cac,0x10cec,0x10cac},{0x04ed,0x04ec,0x04ed,0x04ec},{0x2ced,0x2ced,0x2cee,0x2ced}, +{0x10ced,0x10cad,0x10ced,0x10cad},{0x2cee,0x2ced,0x2cee,0x2ced},{0x04ee,0x04ee,0x04ef,0x04ee},{0x10cee,0x10cae,0x10cee,0x10cae}, +{0x04ef,0x04ee,0x04ef,0x04ee},{0x10cef,0x10caf,0x10cef,0x10caf},{0x04f0,0x04f0,0x04f1,0x04f0},{0x10cf0,0x10cb0,0x10cf0,0x10cb0},  {0x04f1,0x04f0,0x04f1,0x04f0},{0x10cf1,0x10cb1,0x10cf1,0x10cb1},{0x04f2,0x04f2,0x04f3,0x04f2},{0x10cf2,0x10cb2,0x10cf2,0x10cb2}, -{0x2cf2,0x2cf2,0x2cf3,0x2cf2},{0x2cf3,0x2cf2,0x2cf3,0x2cf2},{0x04f3,0x04f2,0x04f3,0x04f2},{0x04f4,0x04f4,0x04f5,0x04f4}, +{0x2cf2,0x2cf2,0x2cf3,0x2cf2},{0x04f3,0x04f2,0x04f3,0x04f2},{0x2cf3,0x2cf2,0x2cf3,0x2cf2},{0x04f4,0x04f4,0x04f5,0x04f4},  {0x04f5,0x04f4,0x04f5,0x04f4},{0x04f6,0x04f6,0x04f7,0x04f6},{0x04f7,0x04f6,0x04f7,0x04f6},{0x04f8,0x04f8,0x04f9,0x04f8},  {0x04f9,0x04f8,0x04f9,0x04f8},{0x04fa,0x04fa,0x04fb,0x04fa},{0x04fb,0x04fa,0x04fb,0x04fa},{0x04fc,0x04fc,0x04fd,0x04fc}, -{0x04fd,0x04fc,0x04fd,0x04fc},{0x04fe,0x04fe,0x04ff,0x04fe},{0x04ff,0x04fe,0x04ff,0x04fe},{0x2d00,0x10a0,0x2d00,0x10a0}, -{0x0500,0x0500,0x0501,0x0500},{0x2d01,0x10a1,0x2d01,0x10a1},{0x0501,0x0500,0x0501,0x0500},{0x2d02,0x10a2,0x2d02,0x10a2}, -{0x0502,0x0502,0x0503,0x0502},{0x0503,0x0502,0x0503,0x0502},{0x2d03,0x10a3,0x2d03,0x10a3},{0x0504,0x0504,0x0505,0x0504}, -{0x2d04,0x10a4,0x2d04,0x10a4},{0x2d05,0x10a5,0x2d05,0x10a5},{0x0505,0x0504,0x0505,0x0504},{0x0506,0x0506,0x0507,0x0506}, -{0x2d06,0x10a6,0x2d06,0x10a6},{0x2d07,0x10a7,0x2d07,0x10a7},{0x0507,0x0506,0x0507,0x0506},{0x2d08,0x10a8,0x2d08,0x10a8}, -{0x0508,0x0508,0x0509,0x0508},{0x2d09,0x10a9,0x2d09,0x10a9},{0x0509,0x0508,0x0509,0x0508},{0x050a,0x050a,0x050b,0x050a}, -{0x2d0a,0x10aa,0x2d0a,0x10aa},{0x2d0b,0x10ab,0x2d0b,0x10ab},{0x050b,0x050a,0x050b,0x050a},{0x050c,0x050c,0x050d,0x050c}, -{0x2d0c,0x10ac,0x2d0c,0x10ac},{0x2d0d,0x10ad,0x2d0d,0x10ad},{0x050d,0x050c,0x050d,0x050c},{0x2d0e,0x10ae,0x2d0e,0x10ae}, -{0x050e,0x050e,0x050f,0x050e},{0x2d0f,0x10af,0x2d0f,0x10af},{0x050f,0x050e,0x050f,0x050e},{0x2d10,0x10b0,0x2d10,0x10b0}, -{0x0510,0x0510,0x0511,0x0510},{0x0511,0x0510,0x0511,0x0510},{0x2d11,0x10b1,0x2d11,0x10b1},{0x0512,0x0512,0x0513,0x0512}, +{0x04fd,0x04fc,0x04fd,0x04fc},{0x04fe,0x04fe,0x04ff,0x04fe},{0x04ff,0x04fe,0x04ff,0x04fe},{0x0500,0x0500,0x0501,0x0500}, +{0x2d00,0x10a0,0x2d00,0x10a0},{0x2d01,0x10a1,0x2d01,0x10a1},{0x0501,0x0500,0x0501,0x0500},{0x2d02,0x10a2,0x2d02,0x10a2}, +{0x0502,0x0502,0x0503,0x0502},{0x2d03,0x10a3,0x2d03,0x10a3},{0x0503,0x0502,0x0503,0x0502},{0x2d04,0x10a4,0x2d04,0x10a4}, +{0x0504,0x0504,0x0505,0x0504},{0x0505,0x0504,0x0505,0x0504},{0x2d05,0x10a5,0x2d05,0x10a5},{0x2d06,0x10a6,0x2d06,0x10a6}, +{0x0506,0x0506,0x0507,0x0506},{0x0507,0x0506,0x0507,0x0506},{0x2d07,0x10a7,0x2d07,0x10a7},{0x0508,0x0508,0x0509,0x0508}, +{0x2d08,0x10a8,0x2d08,0x10a8},{0x2d09,0x10a9,0x2d09,0x10a9},{0x0509,0x0508,0x0509,0x0508},{0x2d0a,0x10aa,0x2d0a,0x10aa}, +{0x050a,0x050a,0x050b,0x050a},{0x050b,0x050a,0x050b,0x050a},{0x2d0b,0x10ab,0x2d0b,0x10ab},{0x2d0c,0x10ac,0x2d0c,0x10ac}, +{0x050c,0x050c,0x050d,0x050c},{0x050d,0x050c,0x050d,0x050c},{0x2d0d,0x10ad,0x2d0d,0x10ad},{0x050e,0x050e,0x050f,0x050e}, +{0x2d0e,0x10ae,0x2d0e,0x10ae},{0x050f,0x050e,0x050f,0x050e},{0x2d0f,0x10af,0x2d0f,0x10af},{0x0510,0x0510,0x0511,0x0510}, +{0x2d10,0x10b0,0x2d10,0x10b0},{0x2d11,0x10b1,0x2d11,0x10b1},{0x0511,0x0510,0x0511,0x0510},{0x0512,0x0512,0x0513,0x0512},  {0x2d12,0x10b2,0x2d12,0x10b2},{0x0513,0x0512,0x0513,0x0512},{0x2d13,0x10b3,0x2d13,0x10b3},{0x2d14,0x10b4,0x2d14,0x10b4}, -{0x0514,0x0514,0x0515,0x0514},{0x0515,0x0514,0x0515,0x0514},{0x2d15,0x10b5,0x2d15,0x10b5},{0x2d16,0x10b6,0x2d16,0x10b6}, -{0x0516,0x0516,0x0517,0x0516},{0x0517,0x0516,0x0517,0x0516},{0x2d17,0x10b7,0x2d17,0x10b7},{0x0518,0x0518,0x0519,0x0518}, -{0x2d18,0x10b8,0x2d18,0x10b8},{0x0519,0x0518,0x0519,0x0518},{0x2d19,0x10b9,0x2d19,0x10b9},{0x2d1a,0x10ba,0x2d1a,0x10ba}, -{0x051a,0x051a,0x051b,0x051a},{0x051b,0x051a,0x051b,0x051a},{0x2d1b,0x10bb,0x2d1b,0x10bb},{0x051c,0x051c,0x051d,0x051c}, -{0x2d1c,0x10bc,0x2d1c,0x10bc},{0x2d1d,0x10bd,0x2d1d,0x10bd},{0x051d,0x051c,0x051d,0x051c},{0x2d1e,0x10be,0x2d1e,0x10be}, +{0x0514,0x0514,0x0515,0x0514},{0x2d15,0x10b5,0x2d15,0x10b5},{0x0515,0x0514,0x0515,0x0514},{0x0516,0x0516,0x0517,0x0516}, +{0x2d16,0x10b6,0x2d16,0x10b6},{0x0517,0x0516,0x0517,0x0516},{0x2d17,0x10b7,0x2d17,0x10b7},{0x2d18,0x10b8,0x2d18,0x10b8}, +{0x0518,0x0518,0x0519,0x0518},{0x0519,0x0518,0x0519,0x0518},{0x2d19,0x10b9,0x2d19,0x10b9},{0x051a,0x051a,0x051b,0x051a}, +{0x2d1a,0x10ba,0x2d1a,0x10ba},{0x051b,0x051a,0x051b,0x051a},{0x2d1b,0x10bb,0x2d1b,0x10bb},{0x2d1c,0x10bc,0x2d1c,0x10bc}, +{0x051c,0x051c,0x051d,0x051c},{0x051d,0x051c,0x051d,0x051c},{0x2d1d,0x10bd,0x2d1d,0x10bd},{0x2d1e,0x10be,0x2d1e,0x10be},  {0x051e,0x051e,0x051f,0x051e},{0x051f,0x051e,0x051f,0x051e},{0x2d1f,0x10bf,0x2d1f,0x10bf},{0x0520,0x0520,0x0521,0x0520}, -{0x2d20,0x10c0,0x2d20,0x10c0},{0x2d21,0x10c1,0x2d21,0x10c1},{0x0521,0x0520,0x0521,0x0520},{0x0522,0x0522,0x0523,0x0522}, -{0x2d22,0x10c2,0x2d22,0x10c2},{0x2d23,0x10c3,0x2d23,0x10c3},{0x0523,0x0522,0x0523,0x0522},{0x2d24,0x10c4,0x2d24,0x10c4}, -{0x0524,0x0524,0x0525,0x0524},{0x2d25,0x10c5,0x2d25,0x10c5},{0x0525,0x0524,0x0525,0x0524},{0x0526,0x0526,0x0527,0x0526}, +{0x2d20,0x10c0,0x2d20,0x10c0},{0x0521,0x0520,0x0521,0x0520},{0x2d21,0x10c1,0x2d21,0x10c1},{0x0522,0x0522,0x0523,0x0522}, +{0x2d22,0x10c2,0x2d22,0x10c2},{0x0523,0x0522,0x0523,0x0522},{0x2d23,0x10c3,0x2d23,0x10c3},{0x0524,0x0524,0x0525,0x0524}, +{0x2d24,0x10c4,0x2d24,0x10c4},{0x2d25,0x10c5,0x2d25,0x10c5},{0x0525,0x0524,0x0525,0x0524},{0x0526,0x0526,0x0527,0x0526},  {0x2d27,0x10c7,0x2d27,0x10c7},{0x0527,0x0526,0x0527,0x0526},{0x0528,0x0528,0x0529,0x0528},{0x0529,0x0528,0x0529,0x0528}, -{0x052a,0x052a,0x052b,0x052a},{0x052b,0x052a,0x052b,0x052a},{0x052c,0x052c,0x052d,0x052c},{0x2d2d,0x10cd,0x2d2d,0x10cd}, -{0x052d,0x052c,0x052d,0x052c},{0x052e,0x052e,0x052f,0x052e},{0x052f,0x052e,0x052f,0x052e},{0x0531,0x0531,0x0561,0x0531}, +{0x052a,0x052a,0x052b,0x052a},{0x052b,0x052a,0x052b,0x052a},{0x052c,0x052c,0x052d,0x052c},{0x052d,0x052c,0x052d,0x052c}, +{0x2d2d,0x10cd,0x2d2d,0x10cd},{0x052e,0x052e,0x052f,0x052e},{0x052f,0x052e,0x052f,0x052e},{0x0531,0x0531,0x0561,0x0531},  {0x0532,0x0532,0x0562,0x0532},{0x0533,0x0533,0x0563,0x0533},{0x0534,0x0534,0x0564,0x0534},{0x0535,0x0535,0x0565,0x0535},  {0x0536,0x0536,0x0566,0x0536},{0x0537,0x0537,0x0567,0x0537},{0x0538,0x0538,0x0568,0x0538},{0x0539,0x0539,0x0569,0x0539},  {0x053a,0x053a,0x056a,0x053a},{0x053b,0x053b,0x056b,0x053b},{0x053c,0x053c,0x056c,0x053c},{0x053d,0x053d,0x056d,0x053d}, @@ -468,45 +468,45 @@ const unicode_char unicode_case_tab[][4]={  {0x1e33,0x1e32,0x1e33,0x1e32},{0x1e34,0x1e34,0x1e35,0x1e34},{0x1e35,0x1e34,0x1e35,0x1e34},{0x1e36,0x1e36,0x1e37,0x1e36},  {0x1e37,0x1e36,0x1e37,0x1e36},{0x1e38,0x1e38,0x1e39,0x1e38},{0x1e39,0x1e38,0x1e39,0x1e38},{0x1e3a,0x1e3a,0x1e3b,0x1e3a},  {0x1e3b,0x1e3a,0x1e3b,0x1e3a},{0x1e3c,0x1e3c,0x1e3d,0x1e3c},{0x1e3d,0x1e3c,0x1e3d,0x1e3c},{0x1e3e,0x1e3e,0x1e3f,0x1e3e}, -{0x1e3f,0x1e3e,0x1e3f,0x1e3e},{0xa640,0xa640,0xa641,0xa640},{0x1e40,0x1e40,0x1e41,0x1e40},{0xa641,0xa640,0xa641,0xa640}, -{0x1e41,0x1e40,0x1e41,0x1e40},{0x1e42,0x1e42,0x1e43,0x1e42},{0xa642,0xa642,0xa643,0xa642},{0x1e43,0x1e42,0x1e43,0x1e42}, -{0xa643,0xa642,0xa643,0xa642},{0xa644,0xa644,0xa645,0xa644},{0x1e44,0x1e44,0x1e45,0x1e44},{0x1e45,0x1e44,0x1e45,0x1e44}, -{0xa645,0xa644,0xa645,0xa644},{0xa646,0xa646,0xa647,0xa646},{0x1e46,0x1e46,0x1e47,0x1e46},{0x1e47,0x1e46,0x1e47,0x1e46}, -{0xa647,0xa646,0xa647,0xa646},{0xa648,0xa648,0xa649,0xa648},{0x1e48,0x1e48,0x1e49,0x1e48},{0x1e49,0x1e48,0x1e49,0x1e48}, -{0xa649,0xa648,0xa649,0xa648},{0xa64a,0xa64a,0xa64b,0xa64a},{0x1e4a,0x1e4a,0x1e4b,0x1e4a},{0x1e4b,0x1e4a,0x1e4b,0x1e4a}, -{0xa64b,0xa64a,0xa64b,0xa64a},{0x1e4c,0x1e4c,0x1e4d,0x1e4c},{0xa64c,0xa64c,0xa64d,0xa64c},{0x1e4d,0x1e4c,0x1e4d,0x1e4c}, -{0xa64d,0xa64c,0xa64d,0xa64c},{0xa64e,0xa64e,0xa64f,0xa64e},{0x1e4e,0x1e4e,0x1e4f,0x1e4e},{0xa64f,0xa64e,0xa64f,0xa64e}, -{0x1e4f,0x1e4e,0x1e4f,0x1e4e},{0x1e50,0x1e50,0x1e51,0x1e50},{0xa650,0xa650,0xa651,0xa650},{0xa651,0xa650,0xa651,0xa650}, -{0x1e51,0x1e50,0x1e51,0x1e50},{0xa652,0xa652,0xa653,0xa652},{0x1e52,0x1e52,0x1e53,0x1e52},{0x1e53,0x1e52,0x1e53,0x1e52}, +{0x1e3f,0x1e3e,0x1e3f,0x1e3e},{0xa640,0xa640,0xa641,0xa640},{0x1e40,0x1e40,0x1e41,0x1e40},{0x1e41,0x1e40,0x1e41,0x1e40}, +{0xa641,0xa640,0xa641,0xa640},{0xa642,0xa642,0xa643,0xa642},{0x1e42,0x1e42,0x1e43,0x1e42},{0xa643,0xa642,0xa643,0xa642}, +{0x1e43,0x1e42,0x1e43,0x1e42},{0x1e44,0x1e44,0x1e45,0x1e44},{0xa644,0xa644,0xa645,0xa644},{0xa645,0xa644,0xa645,0xa644}, +{0x1e45,0x1e44,0x1e45,0x1e44},{0x1e46,0x1e46,0x1e47,0x1e46},{0xa646,0xa646,0xa647,0xa646},{0xa647,0xa646,0xa647,0xa646}, +{0x1e47,0x1e46,0x1e47,0x1e46},{0x1e48,0x1e48,0x1e49,0x1e48},{0xa648,0xa648,0xa649,0xa648},{0x1e49,0x1e48,0x1e49,0x1e48}, +{0xa649,0xa648,0xa649,0xa648},{0xa64a,0xa64a,0xa64b,0xa64a},{0x1e4a,0x1e4a,0x1e4b,0x1e4a},{0xa64b,0xa64a,0xa64b,0xa64a}, +{0x1e4b,0x1e4a,0x1e4b,0x1e4a},{0xa64c,0xa64c,0xa64d,0xa64c},{0x1e4c,0x1e4c,0x1e4d,0x1e4c},{0x1e4d,0x1e4c,0x1e4d,0x1e4c}, +{0xa64d,0xa64c,0xa64d,0xa64c},{0x1e4e,0x1e4e,0x1e4f,0x1e4e},{0xa64e,0xa64e,0xa64f,0xa64e},{0x1e4f,0x1e4e,0x1e4f,0x1e4e}, +{0xa64f,0xa64e,0xa64f,0xa64e},{0xa650,0xa650,0xa651,0xa650},{0x1e50,0x1e50,0x1e51,0x1e50},{0xa651,0xa650,0xa651,0xa650}, +{0x1e51,0x1e50,0x1e51,0x1e50},{0x1e52,0x1e52,0x1e53,0x1e52},{0xa652,0xa652,0xa653,0xa652},{0x1e53,0x1e52,0x1e53,0x1e52},  {0xa653,0xa652,0xa653,0xa652},{0x1e54,0x1e54,0x1e55,0x1e54},{0xa654,0xa654,0xa655,0xa654},{0x1e55,0x1e54,0x1e55,0x1e54}, -{0xa655,0xa654,0xa655,0xa654},{0x1e56,0x1e56,0x1e57,0x1e56},{0xa656,0xa656,0xa657,0xa656},{0x1e57,0x1e56,0x1e57,0x1e56}, -{0xa657,0xa656,0xa657,0xa656},{0xa658,0xa658,0xa659,0xa658},{0x1e58,0x1e58,0x1e59,0x1e58},{0xa659,0xa658,0xa659,0xa658}, -{0x1e59,0x1e58,0x1e59,0x1e58},{0x1e5a,0x1e5a,0x1e5b,0x1e5a},{0xa65a,0xa65a,0xa65b,0xa65a},{0x1e5b,0x1e5a,0x1e5b,0x1e5a}, -{0xa65b,0xa65a,0xa65b,0xa65a},{0xa65c,0xa65c,0xa65d,0xa65c},{0x1e5c,0x1e5c,0x1e5d,0x1e5c},{0xa65d,0xa65c,0xa65d,0xa65c}, -{0x1e5d,0x1e5c,0x1e5d,0x1e5c},{0x1e5e,0x1e5e,0x1e5f,0x1e5e},{0xa65e,0xa65e,0xa65f,0xa65e},{0xa65f,0xa65e,0xa65f,0xa65e}, -{0x1e5f,0x1e5e,0x1e5f,0x1e5e},{0xa660,0xa660,0xa661,0xa660},{0x1e60,0x1e60,0x1e61,0x1e60},{0x1e61,0x1e60,0x1e61,0x1e60}, -{0xa661,0xa660,0xa661,0xa660},{0x1e62,0x1e62,0x1e63,0x1e62},{0xa662,0xa662,0xa663,0xa662},{0x1e63,0x1e62,0x1e63,0x1e62}, -{0xa663,0xa662,0xa663,0xa662},{0xa664,0xa664,0xa665,0xa664},{0x1e64,0x1e64,0x1e65,0x1e64},{0x1e65,0x1e64,0x1e65,0x1e64}, -{0xa665,0xa664,0xa665,0xa664},{0xa666,0xa666,0xa667,0xa666},{0x1e66,0x1e66,0x1e67,0x1e66},{0x1e67,0x1e66,0x1e67,0x1e66}, -{0xa667,0xa666,0xa667,0xa666},{0x1e68,0x1e68,0x1e69,0x1e68},{0xa668,0xa668,0xa669,0xa668},{0xa669,0xa668,0xa669,0xa668}, -{0x1e69,0x1e68,0x1e69,0x1e68},{0xa66a,0xa66a,0xa66b,0xa66a},{0x1e6a,0x1e6a,0x1e6b,0x1e6a},{0x1e6b,0x1e6a,0x1e6b,0x1e6a}, -{0xa66b,0xa66a,0xa66b,0xa66a},{0xa66c,0xa66c,0xa66d,0xa66c},{0x1e6c,0x1e6c,0x1e6d,0x1e6c},{0xa66d,0xa66c,0xa66d,0xa66c}, -{0x1e6d,0x1e6c,0x1e6d,0x1e6c},{0x1e6e,0x1e6e,0x1e6f,0x1e6e},{0x1e6f,0x1e6e,0x1e6f,0x1e6e},{0x1e70,0x1e70,0x1e71,0x1e70}, +{0xa655,0xa654,0xa655,0xa654},{0x1e56,0x1e56,0x1e57,0x1e56},{0xa656,0xa656,0xa657,0xa656},{0xa657,0xa656,0xa657,0xa656}, +{0x1e57,0x1e56,0x1e57,0x1e56},{0x1e58,0x1e58,0x1e59,0x1e58},{0xa658,0xa658,0xa659,0xa658},{0xa659,0xa658,0xa659,0xa658}, +{0x1e59,0x1e58,0x1e59,0x1e58},{0xa65a,0xa65a,0xa65b,0xa65a},{0x1e5a,0x1e5a,0x1e5b,0x1e5a},{0x1e5b,0x1e5a,0x1e5b,0x1e5a}, +{0xa65b,0xa65a,0xa65b,0xa65a},{0x1e5c,0x1e5c,0x1e5d,0x1e5c},{0xa65c,0xa65c,0xa65d,0xa65c},{0xa65d,0xa65c,0xa65d,0xa65c}, +{0x1e5d,0x1e5c,0x1e5d,0x1e5c},{0x1e5e,0x1e5e,0x1e5f,0x1e5e},{0xa65e,0xa65e,0xa65f,0xa65e},{0x1e5f,0x1e5e,0x1e5f,0x1e5e}, +{0xa65f,0xa65e,0xa65f,0xa65e},{0xa660,0xa660,0xa661,0xa660},{0x1e60,0x1e60,0x1e61,0x1e60},{0x1e61,0x1e60,0x1e61,0x1e60}, +{0xa661,0xa660,0xa661,0xa660},{0x1e62,0x1e62,0x1e63,0x1e62},{0xa662,0xa662,0xa663,0xa662},{0xa663,0xa662,0xa663,0xa662}, +{0x1e63,0x1e62,0x1e63,0x1e62},{0xa664,0xa664,0xa665,0xa664},{0x1e64,0x1e64,0x1e65,0x1e64},{0xa665,0xa664,0xa665,0xa664}, +{0x1e65,0x1e64,0x1e65,0x1e64},{0x1e66,0x1e66,0x1e67,0x1e66},{0xa666,0xa666,0xa667,0xa666},{0xa667,0xa666,0xa667,0xa666}, +{0x1e67,0x1e66,0x1e67,0x1e66},{0x1e68,0x1e68,0x1e69,0x1e68},{0xa668,0xa668,0xa669,0xa668},{0x1e69,0x1e68,0x1e69,0x1e68}, +{0xa669,0xa668,0xa669,0xa668},{0x1e6a,0x1e6a,0x1e6b,0x1e6a},{0xa66a,0xa66a,0xa66b,0xa66a},{0xa66b,0xa66a,0xa66b,0xa66a}, +{0x1e6b,0x1e6a,0x1e6b,0x1e6a},{0xa66c,0xa66c,0xa66d,0xa66c},{0x1e6c,0x1e6c,0x1e6d,0x1e6c},{0x1e6d,0x1e6c,0x1e6d,0x1e6c}, +{0xa66d,0xa66c,0xa66d,0xa66c},{0x1e6e,0x1e6e,0x1e6f,0x1e6e},{0x1e6f,0x1e6e,0x1e6f,0x1e6e},{0x1e70,0x1e70,0x1e71,0x1e70},  {0x1e71,0x1e70,0x1e71,0x1e70},{0x1e72,0x1e72,0x1e73,0x1e72},{0x1e73,0x1e72,0x1e73,0x1e72},{0x1e74,0x1e74,0x1e75,0x1e74},  {0x1e75,0x1e74,0x1e75,0x1e74},{0x1e76,0x1e76,0x1e77,0x1e76},{0x1e77,0x1e76,0x1e77,0x1e76},{0x1e78,0x1e78,0x1e79,0x1e78},  {0x1e79,0x1e78,0x1e79,0x1e78},{0x1e7a,0x1e7a,0x1e7b,0x1e7a},{0x1e7b,0x1e7a,0x1e7b,0x1e7a},{0x1e7c,0x1e7c,0x1e7d,0x1e7c}, -{0x1e7d,0x1e7c,0x1e7d,0x1e7c},{0x1e7e,0x1e7e,0x1e7f,0x1e7e},{0x1e7f,0x1e7e,0x1e7f,0x1e7e},{0x1e80,0x1e80,0x1e81,0x1e80}, -{0xa680,0xa680,0xa681,0xa680},{0xa681,0xa680,0xa681,0xa680},{0x1e81,0x1e80,0x1e81,0x1e80},{0x1e82,0x1e82,0x1e83,0x1e82}, -{0xa682,0xa682,0xa683,0xa682},{0xa683,0xa682,0xa683,0xa682},{0x1e83,0x1e82,0x1e83,0x1e82},{0xa684,0xa684,0xa685,0xa684}, -{0x1e84,0x1e84,0x1e85,0x1e84},{0xa685,0xa684,0xa685,0xa684},{0x1e85,0x1e84,0x1e85,0x1e84},{0x1e86,0x1e86,0x1e87,0x1e86}, -{0xa686,0xa686,0xa687,0xa686},{0xa687,0xa686,0xa687,0xa686},{0x1e87,0x1e86,0x1e87,0x1e86},{0x1e88,0x1e88,0x1e89,0x1e88}, -{0xa688,0xa688,0xa689,0xa688},{0xa689,0xa688,0xa689,0xa688},{0x1e89,0x1e88,0x1e89,0x1e88},{0x1e8a,0x1e8a,0x1e8b,0x1e8a}, +{0x1e7d,0x1e7c,0x1e7d,0x1e7c},{0x1e7e,0x1e7e,0x1e7f,0x1e7e},{0x1e7f,0x1e7e,0x1e7f,0x1e7e},{0xa680,0xa680,0xa681,0xa680}, +{0x1e80,0x1e80,0x1e81,0x1e80},{0xa681,0xa680,0xa681,0xa680},{0x1e81,0x1e80,0x1e81,0x1e80},{0xa682,0xa682,0xa683,0xa682}, +{0x1e82,0x1e82,0x1e83,0x1e82},{0xa683,0xa682,0xa683,0xa682},{0x1e83,0x1e82,0x1e83,0x1e82},{0xa684,0xa684,0xa685,0xa684}, +{0x1e84,0x1e84,0x1e85,0x1e84},{0x1e85,0x1e84,0x1e85,0x1e84},{0xa685,0xa684,0xa685,0xa684},{0x1e86,0x1e86,0x1e87,0x1e86}, +{0xa686,0xa686,0xa687,0xa686},{0xa687,0xa686,0xa687,0xa686},{0x1e87,0x1e86,0x1e87,0x1e86},{0xa688,0xa688,0xa689,0xa688}, +{0x1e88,0x1e88,0x1e89,0x1e88},{0x1e89,0x1e88,0x1e89,0x1e88},{0xa689,0xa688,0xa689,0xa688},{0x1e8a,0x1e8a,0x1e8b,0x1e8a},  {0xa68a,0xa68a,0xa68b,0xa68a},{0xa68b,0xa68a,0xa68b,0xa68a},{0x1e8b,0x1e8a,0x1e8b,0x1e8a},{0x1e8c,0x1e8c,0x1e8d,0x1e8c}, -{0xa68c,0xa68c,0xa68d,0xa68c},{0xa68d,0xa68c,0xa68d,0xa68c},{0x1e8d,0x1e8c,0x1e8d,0x1e8c},{0x1e8e,0x1e8e,0x1e8f,0x1e8e}, -{0xa68e,0xa68e,0xa68f,0xa68e},{0xa68f,0xa68e,0xa68f,0xa68e},{0x1e8f,0x1e8e,0x1e8f,0x1e8e},{0xa690,0xa690,0xa691,0xa690}, +{0xa68c,0xa68c,0xa68d,0xa68c},{0x1e8d,0x1e8c,0x1e8d,0x1e8c},{0xa68d,0xa68c,0xa68d,0xa68c},{0xa68e,0xa68e,0xa68f,0xa68e}, +{0x1e8e,0x1e8e,0x1e8f,0x1e8e},{0x1e8f,0x1e8e,0x1e8f,0x1e8e},{0xa68f,0xa68e,0xa68f,0xa68e},{0xa690,0xa690,0xa691,0xa690},  {0x1e90,0x1e90,0x1e91,0x1e90},{0xa691,0xa690,0xa691,0xa690},{0x1e91,0x1e90,0x1e91,0x1e90},{0x1e92,0x1e92,0x1e93,0x1e92}, -{0xa692,0xa692,0xa693,0xa692},{0x1e93,0x1e92,0x1e93,0x1e92},{0xa693,0xa692,0xa693,0xa692},{0xa694,0xa694,0xa695,0xa694}, -{0x1e94,0x1e94,0x1e95,0x1e94},{0xa695,0xa694,0xa695,0xa694},{0x1e95,0x1e94,0x1e95,0x1e94},{0xa696,0xa696,0xa697,0xa696}, +{0xa692,0xa692,0xa693,0xa692},{0xa693,0xa692,0xa693,0xa692},{0x1e93,0x1e92,0x1e93,0x1e92},{0xa694,0xa694,0xa695,0xa694}, +{0x1e94,0x1e94,0x1e95,0x1e94},{0x1e95,0x1e94,0x1e95,0x1e94},{0xa695,0xa694,0xa695,0xa694},{0xa696,0xa696,0xa697,0xa696},  {0xa697,0xa696,0xa697,0xa696},{0xa698,0xa698,0xa699,0xa698},{0xa699,0xa698,0xa699,0xa698},{0xa69a,0xa69a,0xa69b,0xa69a},  {0x1e9b,0x1e60,0x1e9b,0x1e60},{0xa69b,0xa69a,0xa69b,0xa69a},{0x1e9e,0x1e9e,0x00df,0x1e9e},{0x1ea0,0x1ea0,0x1ea1,0x1ea0},  {0x1ea1,0x1ea0,0x1ea1,0x1ea0},{0x1ea2,0x1ea2,0x1ea3,0x1ea2},{0x1ea3,0x1ea2,0x1ea3,0x1ea2},{0x1ea4,0x1ea4,0x1ea5,0x1ea4}, @@ -540,82 +540,82 @@ const unicode_char unicode_case_tab[][4]={  {0x1f11,0x1f19,0x1f11,0x1f19},{0x1f12,0x1f1a,0x1f12,0x1f1a},{0x1f13,0x1f1b,0x1f13,0x1f1b},{0x1f14,0x1f1c,0x1f14,0x1f1c},  {0x1f15,0x1f1d,0x1f15,0x1f1d},{0x1f18,0x1f18,0x1f10,0x1f18},{0x1f19,0x1f19,0x1f11,0x1f19},{0x1f1a,0x1f1a,0x1f12,0x1f1a},  {0x1f1b,0x1f1b,0x1f13,0x1f1b},{0x1f1c,0x1f1c,0x1f14,0x1f1c},{0x1f1d,0x1f1d,0x1f15,0x1f1d},{0x1f20,0x1f28,0x1f20,0x1f28}, -{0xff21,0xff21,0xff41,0xff21},{0x1f21,0x1f29,0x1f21,0x1f29},{0xa722,0xa722,0xa723,0xa722},{0x1f22,0x1f2a,0x1f22,0x1f2a}, -{0xff22,0xff22,0xff42,0xff22},{0x1f23,0x1f2b,0x1f23,0x1f2b},{0xa723,0xa722,0xa723,0xa722},{0xff23,0xff23,0xff43,0xff23}, -{0x1f24,0x1f2c,0x1f24,0x1f2c},{0xff24,0xff24,0xff44,0xff24},{0xa724,0xa724,0xa725,0xa724},{0x1f25,0x1f2d,0x1f25,0x1f2d}, -{0xff25,0xff25,0xff45,0xff25},{0xa725,0xa724,0xa725,0xa724},{0x1f26,0x1f2e,0x1f26,0x1f2e},{0xa726,0xa726,0xa727,0xa726}, -{0xff26,0xff26,0xff46,0xff26},{0x1f27,0x1f2f,0x1f27,0x1f2f},{0xff27,0xff27,0xff47,0xff27},{0xa727,0xa726,0xa727,0xa726}, -{0xa728,0xa728,0xa729,0xa728},{0x1f28,0x1f28,0x1f20,0x1f28},{0xff28,0xff28,0xff48,0xff28},{0x1f29,0x1f29,0x1f21,0x1f29}, +{0x1f21,0x1f29,0x1f21,0x1f29},{0xff21,0xff21,0xff41,0xff21},{0xff22,0xff22,0xff42,0xff22},{0xa722,0xa722,0xa723,0xa722}, +{0x1f22,0x1f2a,0x1f22,0x1f2a},{0x1f23,0x1f2b,0x1f23,0x1f2b},{0xa723,0xa722,0xa723,0xa722},{0xff23,0xff23,0xff43,0xff23}, +{0xa724,0xa724,0xa725,0xa724},{0xff24,0xff24,0xff44,0xff24},{0x1f24,0x1f2c,0x1f24,0x1f2c},{0xff25,0xff25,0xff45,0xff25}, +{0x1f25,0x1f2d,0x1f25,0x1f2d},{0xa725,0xa724,0xa725,0xa724},{0x1f26,0x1f2e,0x1f26,0x1f2e},{0xa726,0xa726,0xa727,0xa726}, +{0xff26,0xff26,0xff46,0xff26},{0xff27,0xff27,0xff47,0xff27},{0x1f27,0x1f2f,0x1f27,0x1f2f},{0xa727,0xa726,0xa727,0xa726}, +{0xff28,0xff28,0xff48,0xff28},{0xa728,0xa728,0xa729,0xa728},{0x1f28,0x1f28,0x1f20,0x1f28},{0x1f29,0x1f29,0x1f21,0x1f29},  {0xa729,0xa728,0xa729,0xa728},{0xff29,0xff29,0xff49,0xff29},{0x1f2a,0x1f2a,0x1f22,0x1f2a},{0xff2a,0xff2a,0xff4a,0xff2a},  {0xa72a,0xa72a,0xa72b,0xa72a},{0xa72b,0xa72a,0xa72b,0xa72a},{0x1f2b,0x1f2b,0x1f23,0x1f2b},{0xff2b,0xff2b,0xff4b,0xff2b}, -{0x1f2c,0x1f2c,0x1f24,0x1f2c},{0xff2c,0xff2c,0xff4c,0xff2c},{0xa72c,0xa72c,0xa72d,0xa72c},{0x1f2d,0x1f2d,0x1f25,0x1f2d}, -{0xa72d,0xa72c,0xa72d,0xa72c},{0xff2d,0xff2d,0xff4d,0xff2d},{0x1f2e,0x1f2e,0x1f26,0x1f2e},{0xa72e,0xa72e,0xa72f,0xa72e}, -{0xff2e,0xff2e,0xff4e,0xff2e},{0xff2f,0xff2f,0xff4f,0xff2f},{0xa72f,0xa72e,0xa72f,0xa72e},{0x1f2f,0x1f2f,0x1f27,0x1f2f}, +{0xff2c,0xff2c,0xff4c,0xff2c},{0x1f2c,0x1f2c,0x1f24,0x1f2c},{0xa72c,0xa72c,0xa72d,0xa72c},{0xff2d,0xff2d,0xff4d,0xff2d}, +{0x1f2d,0x1f2d,0x1f25,0x1f2d},{0xa72d,0xa72c,0xa72d,0xa72c},{0xff2e,0xff2e,0xff4e,0xff2e},{0xa72e,0xa72e,0xa72f,0xa72e}, +{0x1f2e,0x1f2e,0x1f26,0x1f2e},{0xff2f,0xff2f,0xff4f,0xff2f},{0xa72f,0xa72e,0xa72f,0xa72e},{0x1f2f,0x1f2f,0x1f27,0x1f2f},  {0x1f30,0x1f38,0x1f30,0x1f38},{0xff30,0xff30,0xff50,0xff30},{0x1f31,0x1f39,0x1f31,0x1f39},{0xff31,0xff31,0xff51,0xff31}, -{0x1f32,0x1f3a,0x1f32,0x1f3a},{0xa732,0xa732,0xa733,0xa732},{0xff32,0xff32,0xff52,0xff32},{0x1f33,0x1f3b,0x1f33,0x1f3b}, -{0xff33,0xff33,0xff53,0xff33},{0xa733,0xa732,0xa733,0xa732},{0xff34,0xff34,0xff54,0xff34},{0xa734,0xa734,0xa735,0xa734}, -{0x1f34,0x1f3c,0x1f34,0x1f3c},{0xa735,0xa734,0xa735,0xa734},{0x1f35,0x1f3d,0x1f35,0x1f3d},{0xff35,0xff35,0xff55,0xff35}, -{0x1f36,0x1f3e,0x1f36,0x1f3e},{0xff36,0xff36,0xff56,0xff36},{0xa736,0xa736,0xa737,0xa736},{0x1f37,0x1f3f,0x1f37,0x1f3f}, -{0xa737,0xa736,0xa737,0xa736},{0xff37,0xff37,0xff57,0xff37},{0x1f38,0x1f38,0x1f30,0x1f38},{0xa738,0xa738,0xa739,0xa738}, -{0xff38,0xff38,0xff58,0xff38},{0xa739,0xa738,0xa739,0xa738},{0x1f39,0x1f39,0x1f31,0x1f39},{0xff39,0xff39,0xff59,0xff39}, -{0xa73a,0xa73a,0xa73b,0xa73a},{0x1f3a,0x1f3a,0x1f32,0x1f3a},{0xff3a,0xff3a,0xff5a,0xff3a},{0xa73b,0xa73a,0xa73b,0xa73a}, -{0x1f3b,0x1f3b,0x1f33,0x1f3b},{0x1f3c,0x1f3c,0x1f34,0x1f3c},{0xa73c,0xa73c,0xa73d,0xa73c},{0xa73d,0xa73c,0xa73d,0xa73c}, -{0x1f3d,0x1f3d,0x1f35,0x1f3d},{0xa73e,0xa73e,0xa73f,0xa73e},{0x1f3e,0x1f3e,0x1f36,0x1f3e},{0xa73f,0xa73e,0xa73f,0xa73e}, +{0xff32,0xff32,0xff52,0xff32},{0xa732,0xa732,0xa733,0xa732},{0x1f32,0x1f3a,0x1f32,0x1f3a},{0xff33,0xff33,0xff53,0xff33}, +{0xa733,0xa732,0xa733,0xa732},{0x1f33,0x1f3b,0x1f33,0x1f3b},{0x1f34,0x1f3c,0x1f34,0x1f3c},{0xa734,0xa734,0xa735,0xa734}, +{0xff34,0xff34,0xff54,0xff34},{0xff35,0xff35,0xff55,0xff35},{0x1f35,0x1f3d,0x1f35,0x1f3d},{0xa735,0xa734,0xa735,0xa734}, +{0xa736,0xa736,0xa737,0xa736},{0x1f36,0x1f3e,0x1f36,0x1f3e},{0xff36,0xff36,0xff56,0xff36},{0xa737,0xa736,0xa737,0xa736}, +{0xff37,0xff37,0xff57,0xff37},{0x1f37,0x1f3f,0x1f37,0x1f3f},{0xa738,0xa738,0xa739,0xa738},{0x1f38,0x1f38,0x1f30,0x1f38}, +{0xff38,0xff38,0xff58,0xff38},{0xff39,0xff39,0xff59,0xff39},{0xa739,0xa738,0xa739,0xa738},{0x1f39,0x1f39,0x1f31,0x1f39}, +{0x1f3a,0x1f3a,0x1f32,0x1f3a},{0xff3a,0xff3a,0xff5a,0xff3a},{0xa73a,0xa73a,0xa73b,0xa73a},{0x1f3b,0x1f3b,0x1f33,0x1f3b}, +{0xa73b,0xa73a,0xa73b,0xa73a},{0x1f3c,0x1f3c,0x1f34,0x1f3c},{0xa73c,0xa73c,0xa73d,0xa73c},{0xa73d,0xa73c,0xa73d,0xa73c}, +{0x1f3d,0x1f3d,0x1f35,0x1f3d},{0x1f3e,0x1f3e,0x1f36,0x1f3e},{0xa73e,0xa73e,0xa73f,0xa73e},{0xa73f,0xa73e,0xa73f,0xa73e},  {0x1f3f,0x1f3f,0x1f37,0x1f3f},{0xa740,0xa740,0xa741,0xa740},{0x1f40,0x1f48,0x1f40,0x1f48},{0xa741,0xa740,0xa741,0xa740}, -{0x1f41,0x1f49,0x1f41,0x1f49},{0xff41,0xff21,0xff41,0xff21},{0xff42,0xff22,0xff42,0xff22},{0xa742,0xa742,0xa743,0xa742}, -{0x1f42,0x1f4a,0x1f42,0x1f4a},{0xff43,0xff23,0xff43,0xff23},{0xa743,0xa742,0xa743,0xa742},{0x1f43,0x1f4b,0x1f43,0x1f4b}, -{0xff44,0xff24,0xff44,0xff24},{0x1f44,0x1f4c,0x1f44,0x1f4c},{0xa744,0xa744,0xa745,0xa744},{0x1f45,0x1f4d,0x1f45,0x1f4d}, -{0xa745,0xa744,0xa745,0xa744},{0xff45,0xff25,0xff45,0xff25},{0xa746,0xa746,0xa747,0xa746},{0xff46,0xff26,0xff46,0xff26}, -{0xa747,0xa746,0xa747,0xa746},{0xff47,0xff27,0xff47,0xff27},{0xff48,0xff28,0xff48,0xff28},{0xa748,0xa748,0xa749,0xa748}, -{0x1f48,0x1f48,0x1f40,0x1f48},{0xa749,0xa748,0xa749,0xa748},{0xff49,0xff29,0xff49,0xff29},{0x1f49,0x1f49,0x1f41,0x1f49}, -{0xff4a,0xff2a,0xff4a,0xff2a},{0x1f4a,0x1f4a,0x1f42,0x1f4a},{0xa74a,0xa74a,0xa74b,0xa74a},{0xff4b,0xff2b,0xff4b,0xff2b}, -{0x1f4b,0x1f4b,0x1f43,0x1f4b},{0xa74b,0xa74a,0xa74b,0xa74a},{0xa74c,0xa74c,0xa74d,0xa74c},{0x1f4c,0x1f4c,0x1f44,0x1f4c}, -{0xff4c,0xff2c,0xff4c,0xff2c},{0xff4d,0xff2d,0xff4d,0xff2d},{0x1f4d,0x1f4d,0x1f45,0x1f4d},{0xa74d,0xa74c,0xa74d,0xa74c}, -{0xa74e,0xa74e,0xa74f,0xa74e},{0xff4e,0xff2e,0xff4e,0xff2e},{0xa74f,0xa74e,0xa74f,0xa74e},{0xff4f,0xff2f,0xff4f,0xff2f}, -{0xa750,0xa750,0xa751,0xa750},{0xff50,0xff30,0xff50,0xff30},{0xa751,0xa750,0xa751,0xa750},{0xff51,0xff31,0xff51,0xff31}, +{0xff41,0xff21,0xff41,0xff21},{0x1f41,0x1f49,0x1f41,0x1f49},{0x1f42,0x1f4a,0x1f42,0x1f4a},{0xff42,0xff22,0xff42,0xff22}, +{0xa742,0xa742,0xa743,0xa742},{0xff43,0xff23,0xff43,0xff23},{0x1f43,0x1f4b,0x1f43,0x1f4b},{0xa743,0xa742,0xa743,0xa742}, +{0xff44,0xff24,0xff44,0xff24},{0x1f44,0x1f4c,0x1f44,0x1f4c},{0xa744,0xa744,0xa745,0xa744},{0xff45,0xff25,0xff45,0xff25}, +{0xa745,0xa744,0xa745,0xa744},{0x1f45,0x1f4d,0x1f45,0x1f4d},{0xff46,0xff26,0xff46,0xff26},{0xa746,0xa746,0xa747,0xa746}, +{0xa747,0xa746,0xa747,0xa746},{0xff47,0xff27,0xff47,0xff27},{0x1f48,0x1f48,0x1f40,0x1f48},{0xff48,0xff28,0xff48,0xff28}, +{0xa748,0xa748,0xa749,0xa748},{0xff49,0xff29,0xff49,0xff29},{0xa749,0xa748,0xa749,0xa748},{0x1f49,0x1f49,0x1f41,0x1f49}, +{0xff4a,0xff2a,0xff4a,0xff2a},{0x1f4a,0x1f4a,0x1f42,0x1f4a},{0xa74a,0xa74a,0xa74b,0xa74a},{0xa74b,0xa74a,0xa74b,0xa74a}, +{0x1f4b,0x1f4b,0x1f43,0x1f4b},{0xff4b,0xff2b,0xff4b,0xff2b},{0x1f4c,0x1f4c,0x1f44,0x1f4c},{0xff4c,0xff2c,0xff4c,0xff2c}, +{0xa74c,0xa74c,0xa74d,0xa74c},{0xff4d,0xff2d,0xff4d,0xff2d},{0x1f4d,0x1f4d,0x1f45,0x1f4d},{0xa74d,0xa74c,0xa74d,0xa74c}, +{0xff4e,0xff2e,0xff4e,0xff2e},{0xa74e,0xa74e,0xa74f,0xa74e},{0xff4f,0xff2f,0xff4f,0xff2f},{0xa74f,0xa74e,0xa74f,0xa74e}, +{0xa750,0xa750,0xa751,0xa750},{0xff50,0xff30,0xff50,0xff30},{0xff51,0xff31,0xff51,0xff31},{0xa751,0xa750,0xa751,0xa750},  {0x1f51,0x1f59,0x1f51,0x1f59},{0xa752,0xa752,0xa753,0xa752},{0xff52,0xff32,0xff52,0xff32},{0x1f53,0x1f5b,0x1f53,0x1f5b},  {0xff53,0xff33,0xff53,0xff33},{0xa753,0xa752,0xa753,0xa752},{0xff54,0xff34,0xff54,0xff34},{0xa754,0xa754,0xa755,0xa754}, -{0x1f55,0x1f5d,0x1f55,0x1f5d},{0xa755,0xa754,0xa755,0xa754},{0xff55,0xff35,0xff55,0xff35},{0xa756,0xa756,0xa757,0xa756}, -{0xff56,0xff36,0xff56,0xff36},{0xa757,0xa756,0xa757,0xa756},{0xff57,0xff37,0xff57,0xff37},{0x1f57,0x1f5f,0x1f57,0x1f5f}, -{0xff58,0xff38,0xff58,0xff38},{0xa758,0xa758,0xa759,0xa758},{0xa759,0xa758,0xa759,0xa758},{0xff59,0xff39,0xff59,0xff39}, +{0xff55,0xff35,0xff55,0xff35},{0x1f55,0x1f5d,0x1f55,0x1f5d},{0xa755,0xa754,0xa755,0xa754},{0xff56,0xff36,0xff56,0xff36}, +{0xa756,0xa756,0xa757,0xa756},{0x1f57,0x1f5f,0x1f57,0x1f5f},{0xff57,0xff37,0xff57,0xff37},{0xa757,0xa756,0xa757,0xa756}, +{0xa758,0xa758,0xa759,0xa758},{0xff58,0xff38,0xff58,0xff38},{0xff59,0xff39,0xff59,0xff39},{0xa759,0xa758,0xa759,0xa758},  {0x1f59,0x1f59,0x1f51,0x1f59},{0xff5a,0xff3a,0xff5a,0xff3a},{0xa75a,0xa75a,0xa75b,0xa75a},{0x1f5b,0x1f5b,0x1f53,0x1f5b},  {0xa75b,0xa75a,0xa75b,0xa75a},{0xa75c,0xa75c,0xa75d,0xa75c},{0xa75d,0xa75c,0xa75d,0xa75c},{0x1f5d,0x1f5d,0x1f55,0x1f5d}, -{0xa75e,0xa75e,0xa75f,0xa75e},{0x1f5f,0x1f5f,0x1f57,0x1f5f},{0xa75f,0xa75e,0xa75f,0xa75e},{0x1f60,0x1f68,0x1f60,0x1f68}, -{0xa760,0xa760,0xa761,0xa760},{0xa761,0xa760,0xa761,0xa760},{0x1f61,0x1f69,0x1f61,0x1f69},{0x1f62,0x1f6a,0x1f62,0x1f6a}, -{0xa762,0xa762,0xa763,0xa762},{0x1f63,0x1f6b,0x1f63,0x1f6b},{0xa763,0xa762,0xa763,0xa762},{0xa764,0xa764,0xa765,0xa764}, +{0xa75e,0xa75e,0xa75f,0xa75e},{0xa75f,0xa75e,0xa75f,0xa75e},{0x1f5f,0x1f5f,0x1f57,0x1f5f},{0x1f60,0x1f68,0x1f60,0x1f68}, +{0xa760,0xa760,0xa761,0xa760},{0x1f61,0x1f69,0x1f61,0x1f69},{0xa761,0xa760,0xa761,0xa760},{0xa762,0xa762,0xa763,0xa762}, +{0x1f62,0x1f6a,0x1f62,0x1f6a},{0x1f63,0x1f6b,0x1f63,0x1f6b},{0xa763,0xa762,0xa763,0xa762},{0xa764,0xa764,0xa765,0xa764},  {0x1f64,0x1f6c,0x1f64,0x1f6c},{0x1f65,0x1f6d,0x1f65,0x1f6d},{0xa765,0xa764,0xa765,0xa764},{0xa766,0xa766,0xa767,0xa766}, -{0x1f66,0x1f6e,0x1f66,0x1f6e},{0x1f67,0x1f6f,0x1f67,0x1f6f},{0xa767,0xa766,0xa767,0xa766},{0xa768,0xa768,0xa769,0xa768}, -{0x1f68,0x1f68,0x1f60,0x1f68},{0x1f69,0x1f69,0x1f61,0x1f69},{0xa769,0xa768,0xa769,0xa768},{0x1f6a,0x1f6a,0x1f62,0x1f6a}, -{0xa76a,0xa76a,0xa76b,0xa76a},{0xa76b,0xa76a,0xa76b,0xa76a},{0x1f6b,0x1f6b,0x1f63,0x1f6b},{0xa76c,0xa76c,0xa76d,0xa76c}, -{0x1f6c,0x1f6c,0x1f64,0x1f6c},{0x1f6d,0x1f6d,0x1f65,0x1f6d},{0xa76d,0xa76c,0xa76d,0xa76c},{0x1f6e,0x1f6e,0x1f66,0x1f6e}, -{0xa76e,0xa76e,0xa76f,0xa76e},{0xa76f,0xa76e,0xa76f,0xa76e},{0x1f6f,0x1f6f,0x1f67,0x1f6f},{0x1f70,0x1fba,0x1f70,0x1fba}, +{0x1f66,0x1f6e,0x1f66,0x1f6e},{0x1f67,0x1f6f,0x1f67,0x1f6f},{0xa767,0xa766,0xa767,0xa766},{0x1f68,0x1f68,0x1f60,0x1f68}, +{0xa768,0xa768,0xa769,0xa768},{0xa769,0xa768,0xa769,0xa768},{0x1f69,0x1f69,0x1f61,0x1f69},{0xa76a,0xa76a,0xa76b,0xa76a}, +{0x1f6a,0x1f6a,0x1f62,0x1f6a},{0x1f6b,0x1f6b,0x1f63,0x1f6b},{0xa76b,0xa76a,0xa76b,0xa76a},{0x1f6c,0x1f6c,0x1f64,0x1f6c}, +{0xa76c,0xa76c,0xa76d,0xa76c},{0xa76d,0xa76c,0xa76d,0xa76c},{0x1f6d,0x1f6d,0x1f65,0x1f6d},{0xa76e,0xa76e,0xa76f,0xa76e}, +{0x1f6e,0x1f6e,0x1f66,0x1f6e},{0x1f6f,0x1f6f,0x1f67,0x1f6f},{0xa76f,0xa76e,0xa76f,0xa76e},{0x1f70,0x1fba,0x1f70,0x1fba},  {0x1f71,0x1fbb,0x1f71,0x1fbb},{0x1f72,0x1fc8,0x1f72,0x1fc8},{0x1f73,0x1fc9,0x1f73,0x1fc9},{0x1f74,0x1fca,0x1f74,0x1fca},  {0x1f75,0x1fcb,0x1f75,0x1fcb},{0x1f76,0x1fda,0x1f76,0x1fda},{0x1f77,0x1fdb,0x1f77,0x1fdb},{0x1f78,0x1ff8,0x1f78,0x1ff8}, -{0x1f79,0x1ff9,0x1f79,0x1ff9},{0xa779,0xa779,0xa77a,0xa779},{0xa77a,0xa779,0xa77a,0xa779},{0x1f7a,0x1fea,0x1f7a,0x1fea}, -{0xa77b,0xa77b,0xa77c,0xa77b},{0x1f7b,0x1feb,0x1f7b,0x1feb},{0x1f7c,0x1ffa,0x1f7c,0x1ffa},{0xa77c,0xa77b,0xa77c,0xa77b}, -{0xa77d,0xa77d,0x1d79,0xa77d},{0x1f7d,0x1ffb,0x1f7d,0x1ffb},{0xa77e,0xa77e,0xa77f,0xa77e},{0xa77f,0xa77e,0xa77f,0xa77e}, +{0xa779,0xa779,0xa77a,0xa779},{0x1f79,0x1ff9,0x1f79,0x1ff9},{0x1f7a,0x1fea,0x1f7a,0x1fea},{0xa77a,0xa779,0xa77a,0xa779}, +{0xa77b,0xa77b,0xa77c,0xa77b},{0x1f7b,0x1feb,0x1f7b,0x1feb},{0xa77c,0xa77b,0xa77c,0xa77b},{0x1f7c,0x1ffa,0x1f7c,0x1ffa}, +{0x1f7d,0x1ffb,0x1f7d,0x1ffb},{0xa77d,0xa77d,0x1d79,0xa77d},{0xa77e,0xa77e,0xa77f,0xa77e},{0xa77f,0xa77e,0xa77f,0xa77e},  {0xa780,0xa780,0xa781,0xa780},{0x1f80,0x1f88,0x1f80,0x1f88},{0xa781,0xa780,0xa781,0xa780},{0x1f81,0x1f89,0x1f81,0x1f89}, -{0x1f82,0x1f8a,0x1f82,0x1f8a},{0xa782,0xa782,0xa783,0xa782},{0xa783,0xa782,0xa783,0xa782},{0x1f83,0x1f8b,0x1f83,0x1f8b}, -{0x1f84,0x1f8c,0x1f84,0x1f8c},{0xa784,0xa784,0xa785,0xa784},{0xa785,0xa784,0xa785,0xa784},{0x1f85,0x1f8d,0x1f85,0x1f8d}, -{0xa786,0xa786,0xa787,0xa786},{0x1f86,0x1f8e,0x1f86,0x1f8e},{0x1f87,0x1f8f,0x1f87,0x1f8f},{0xa787,0xa786,0xa787,0xa786}, -{0x1f88,0x1f88,0x1f80,0x1f88},{0x1f89,0x1f89,0x1f81,0x1f89},{0x1f8a,0x1f8a,0x1f82,0x1f8a},{0xa78b,0xa78b,0xa78c,0xa78b}, -{0x1f8b,0x1f8b,0x1f83,0x1f8b},{0x1f8c,0x1f8c,0x1f84,0x1f8c},{0xa78c,0xa78b,0xa78c,0xa78b},{0x1f8d,0x1f8d,0x1f85,0x1f8d}, -{0xa78d,0xa78d,0x0265,0xa78d},{0x1f8e,0x1f8e,0x1f86,0x1f8e},{0x1f8f,0x1f8f,0x1f87,0x1f8f},{0xa790,0xa790,0xa791,0xa790}, -{0x1f90,0x1f98,0x1f90,0x1f98},{0x1f91,0x1f99,0x1f91,0x1f99},{0xa791,0xa790,0xa791,0xa790},{0xa792,0xa792,0xa793,0xa792}, -{0x1f92,0x1f9a,0x1f92,0x1f9a},{0xa793,0xa792,0xa793,0xa792},{0x1f93,0x1f9b,0x1f93,0x1f9b},{0x1f94,0x1f9c,0x1f94,0x1f9c}, -{0x1f95,0x1f9d,0x1f95,0x1f9d},{0xa796,0xa796,0xa797,0xa796},{0x1f96,0x1f9e,0x1f96,0x1f9e},{0x1f97,0x1f9f,0x1f97,0x1f9f}, -{0xa797,0xa796,0xa797,0xa796},{0xa798,0xa798,0xa799,0xa798},{0x1f98,0x1f98,0x1f90,0x1f98},{0x1f99,0x1f99,0x1f91,0x1f99}, -{0xa799,0xa798,0xa799,0xa798},{0xa79a,0xa79a,0xa79b,0xa79a},{0x1f9a,0x1f9a,0x1f92,0x1f9a},{0x1f9b,0x1f9b,0x1f93,0x1f9b}, -{0xa79b,0xa79a,0xa79b,0xa79a},{0xa79c,0xa79c,0xa79d,0xa79c},{0x1f9c,0x1f9c,0x1f94,0x1f9c},{0xa79d,0xa79c,0xa79d,0xa79c}, -{0x1f9d,0x1f9d,0x1f95,0x1f9d},{0xa79e,0xa79e,0xa79f,0xa79e},{0x1f9e,0x1f9e,0x1f96,0x1f9e},{0x1f9f,0x1f9f,0x1f97,0x1f9f}, -{0xa79f,0xa79e,0xa79f,0xa79e},{0x1fa0,0x1fa8,0x1fa0,0x1fa8},{0xa7a0,0xa7a0,0xa7a1,0xa7a0},{0x1fa1,0x1fa9,0x1fa1,0x1fa9}, -{0xa7a1,0xa7a0,0xa7a1,0xa7a0},{0x1fa2,0x1faa,0x1fa2,0x1faa},{0xa7a2,0xa7a2,0xa7a3,0xa7a2},{0x1fa3,0x1fab,0x1fa3,0x1fab}, -{0xa7a3,0xa7a2,0xa7a3,0xa7a2},{0xa7a4,0xa7a4,0xa7a5,0xa7a4},{0x1fa4,0x1fac,0x1fa4,0x1fac},{0x1fa5,0x1fad,0x1fa5,0x1fad}, -{0xa7a5,0xa7a4,0xa7a5,0xa7a4},{0xa7a6,0xa7a6,0xa7a7,0xa7a6},{0x1fa6,0x1fae,0x1fa6,0x1fae},{0x1fa7,0x1faf,0x1fa7,0x1faf}, -{0xa7a7,0xa7a6,0xa7a7,0xa7a6},{0xa7a8,0xa7a8,0xa7a9,0xa7a8},{0x1fa8,0x1fa8,0x1fa0,0x1fa8},{0xa7a9,0xa7a8,0xa7a9,0xa7a8}, -{0x1fa9,0x1fa9,0x1fa1,0x1fa9},{0xa7aa,0xa7aa,0x0266,0xa7aa},{0x1faa,0x1faa,0x1fa2,0x1faa},{0xa7ab,0xa7ab,0x025c,0xa7ab}, -{0x1fab,0x1fab,0x1fa3,0x1fab},{0x1fac,0x1fac,0x1fa4,0x1fac},{0xa7ac,0xa7ac,0x0261,0xa7ac},{0xa7ad,0xa7ad,0x026c,0xa7ad}, -{0x1fad,0x1fad,0x1fa5,0x1fad},{0x1fae,0x1fae,0x1fa6,0x1fae},{0x1faf,0x1faf,0x1fa7,0x1faf},{0xa7b0,0xa7b0,0x029e,0xa7b0}, +{0x1f82,0x1f8a,0x1f82,0x1f8a},{0xa782,0xa782,0xa783,0xa782},{0x1f83,0x1f8b,0x1f83,0x1f8b},{0xa783,0xa782,0xa783,0xa782}, +{0xa784,0xa784,0xa785,0xa784},{0x1f84,0x1f8c,0x1f84,0x1f8c},{0xa785,0xa784,0xa785,0xa784},{0x1f85,0x1f8d,0x1f85,0x1f8d}, +{0x1f86,0x1f8e,0x1f86,0x1f8e},{0xa786,0xa786,0xa787,0xa786},{0x1f87,0x1f8f,0x1f87,0x1f8f},{0xa787,0xa786,0xa787,0xa786}, +{0x1f88,0x1f88,0x1f80,0x1f88},{0x1f89,0x1f89,0x1f81,0x1f89},{0x1f8a,0x1f8a,0x1f82,0x1f8a},{0x1f8b,0x1f8b,0x1f83,0x1f8b}, +{0xa78b,0xa78b,0xa78c,0xa78b},{0x1f8c,0x1f8c,0x1f84,0x1f8c},{0xa78c,0xa78b,0xa78c,0xa78b},{0xa78d,0xa78d,0x0265,0xa78d}, +{0x1f8d,0x1f8d,0x1f85,0x1f8d},{0x1f8e,0x1f8e,0x1f86,0x1f8e},{0x1f8f,0x1f8f,0x1f87,0x1f8f},{0x1f90,0x1f98,0x1f90,0x1f98}, +{0xa790,0xa790,0xa791,0xa790},{0x1f91,0x1f99,0x1f91,0x1f99},{0xa791,0xa790,0xa791,0xa790},{0x1f92,0x1f9a,0x1f92,0x1f9a}, +{0xa792,0xa792,0xa793,0xa792},{0xa793,0xa792,0xa793,0xa792},{0x1f93,0x1f9b,0x1f93,0x1f9b},{0x1f94,0x1f9c,0x1f94,0x1f9c}, +{0x1f95,0x1f9d,0x1f95,0x1f9d},{0x1f96,0x1f9e,0x1f96,0x1f9e},{0xa796,0xa796,0xa797,0xa796},{0x1f97,0x1f9f,0x1f97,0x1f9f}, +{0xa797,0xa796,0xa797,0xa796},{0x1f98,0x1f98,0x1f90,0x1f98},{0xa798,0xa798,0xa799,0xa798},{0xa799,0xa798,0xa799,0xa798}, +{0x1f99,0x1f99,0x1f91,0x1f99},{0xa79a,0xa79a,0xa79b,0xa79a},{0x1f9a,0x1f9a,0x1f92,0x1f9a},{0x1f9b,0x1f9b,0x1f93,0x1f9b}, +{0xa79b,0xa79a,0xa79b,0xa79a},{0x1f9c,0x1f9c,0x1f94,0x1f9c},{0xa79c,0xa79c,0xa79d,0xa79c},{0xa79d,0xa79c,0xa79d,0xa79c}, +{0x1f9d,0x1f9d,0x1f95,0x1f9d},{0xa79e,0xa79e,0xa79f,0xa79e},{0x1f9e,0x1f9e,0x1f96,0x1f9e},{0xa79f,0xa79e,0xa79f,0xa79e}, +{0x1f9f,0x1f9f,0x1f97,0x1f9f},{0x1fa0,0x1fa8,0x1fa0,0x1fa8},{0xa7a0,0xa7a0,0xa7a1,0xa7a0},{0xa7a1,0xa7a0,0xa7a1,0xa7a0}, +{0x1fa1,0x1fa9,0x1fa1,0x1fa9},{0x1fa2,0x1faa,0x1fa2,0x1faa},{0xa7a2,0xa7a2,0xa7a3,0xa7a2},{0x1fa3,0x1fab,0x1fa3,0x1fab}, +{0xa7a3,0xa7a2,0xa7a3,0xa7a2},{0x1fa4,0x1fac,0x1fa4,0x1fac},{0xa7a4,0xa7a4,0xa7a5,0xa7a4},{0x1fa5,0x1fad,0x1fa5,0x1fad}, +{0xa7a5,0xa7a4,0xa7a5,0xa7a4},{0xa7a6,0xa7a6,0xa7a7,0xa7a6},{0x1fa6,0x1fae,0x1fa6,0x1fae},{0xa7a7,0xa7a6,0xa7a7,0xa7a6}, +{0x1fa7,0x1faf,0x1fa7,0x1faf},{0x1fa8,0x1fa8,0x1fa0,0x1fa8},{0xa7a8,0xa7a8,0xa7a9,0xa7a8},{0x1fa9,0x1fa9,0x1fa1,0x1fa9}, +{0xa7a9,0xa7a8,0xa7a9,0xa7a8},{0x1faa,0x1faa,0x1fa2,0x1faa},{0xa7aa,0xa7aa,0x0266,0xa7aa},{0xa7ab,0xa7ab,0x025c,0xa7ab}, +{0x1fab,0x1fab,0x1fa3,0x1fab},{0xa7ac,0xa7ac,0x0261,0xa7ac},{0x1fac,0x1fac,0x1fa4,0x1fac},{0x1fad,0x1fad,0x1fa5,0x1fad}, +{0xa7ad,0xa7ad,0x026c,0xa7ad},{0x1fae,0x1fae,0x1fa6,0x1fae},{0x1faf,0x1faf,0x1fa7,0x1faf},{0xa7b0,0xa7b0,0x029e,0xa7b0},  {0x1fb0,0x1fb8,0x1fb0,0x1fb8},{0x1fb1,0x1fb9,0x1fb1,0x1fb9},{0xa7b1,0xa7b1,0x0287,0xa7b1},{0xa7b2,0xa7b2,0x029d,0xa7b2},  {0x1fb3,0x1fbc,0x1fb3,0x1fbc},{0xa7b3,0xa7b3,0xab53,0xa7b3},{0xa7b4,0xa7b4,0xa7b5,0xa7b4},{0xa7b5,0xa7b4,0xa7b5,0xa7b4},  {0xa7b6,0xa7b6,0xa7b7,0xa7b6},{0xa7b7,0xa7b6,0xa7b7,0xa7b6},{0x1fb8,0x1fb8,0x1fb0,0x1fb8},{0x1fb9,0x1fb9,0x1fb1,0x1fb9}, diff --git a/unicode/unicode_wcwidth.c b/unicode/unicode_wcwidth.c index bea01f5..5266552 100644 --- a/unicode/unicode_wcwidth.c +++ b/unicode/unicode_wcwidth.c @@ -6,7 +6,7 @@  #include <stdlib.h> -int unicode_wcwidth(unicode_char c) +int unicode_wcwidth(char32_t c)  {  	size_t b=0;  	size_t e=sizeof(unicode_wcwidth_tab)/sizeof(unicode_wcwidth_tab[0]); @@ -42,7 +42,7 @@ int unicode_wcwidth(unicode_char c)  	return 1;  } -size_t unicode_wcwidth_str(const unicode_char *c) +size_t unicode_wcwidth_str(const char32_t *c)  {  	size_t w=0; diff --git a/unicode/unicode_wordbreak.c b/unicode/unicode_wordbreak.c index b4c4f89..991f0ba 100644 --- a/unicode/unicode_wordbreak.c +++ b/unicode/unicode_wordbreak.c @@ -74,7 +74,7 @@ int unicode_wb_end(unicode_wb_info_t i)  }  int unicode_wb_next_cnt(unicode_wb_info_t i, -			const unicode_char *chars, +			const char32_t *chars,  			size_t cnt)  {  	int rc; @@ -89,7 +89,7 @@ int unicode_wb_next_cnt(unicode_wb_info_t i,  	return 0;  } -int unicode_wb_next(unicode_wb_info_t i, unicode_char ch) +int unicode_wb_next(unicode_wb_info_t i, char32_t ch)  {  	return (*i->next_handler)  		(i, unicode_tab_lookup(ch, @@ -529,7 +529,7 @@ unicode_wbscan_info_t unicode_wbscan_init()  	return i;  } -int unicode_wbscan_next(unicode_wbscan_info_t i, unicode_char ch) +int unicode_wbscan_next(unicode_wbscan_info_t i, char32_t ch)  {  	if (!i->found)  		unicode_wb_next(i->wb_handle, ch); diff --git a/unicode/unicodebuf.c b/unicode/unicodebuf.c index a221e3b..eb64543 100644 --- a/unicode/unicodebuf.c +++ b/unicode/unicodebuf.c @@ -24,7 +24,7 @@ void unicode_buf_deinit(struct unicode_buf *p)  }  int unicode_buf_append(struct unicode_buf *p, -		       const unicode_char *uc, size_t l) +		       const char32_t *uc, size_t l)  {  	if (l > p->max-p->len)  		l=p->max-p->len; @@ -32,7 +32,7 @@ int unicode_buf_append(struct unicode_buf *p,  	if (p->len + l > p->size)  	{  		size_t n=(p->len + l) * 2; -		unicode_char *newp; +		char32_t *newp;  		if (n < 256)  			n=256; @@ -40,8 +40,8 @@ int unicode_buf_append(struct unicode_buf *p,  		if (n > p->max)  			n=p->max; -		newp=p->ptr ? realloc(p->ptr, n * sizeof(unicode_char)) -			: malloc(n * sizeof(unicode_char)); +		newp=p->ptr ? realloc(p->ptr, n * sizeof(char32_t)) +			: malloc(n * sizeof(char32_t));  		if (!newp)  			return -1; @@ -50,7 +50,7 @@ int unicode_buf_append(struct unicode_buf *p,  		p->size=n;  	} -	memcpy(p->ptr + p->len, uc, l * sizeof(unicode_char)); +	memcpy(p->ptr + p->len, uc, l * sizeof(char32_t));  	p->len += l;  	return 0; @@ -60,7 +60,7 @@ void unicode_buf_append_char(struct unicode_buf *dst,  			     const char *str,  			     size_t cnt)  { -	unicode_char unicode_buf[256]; +	char32_t unicode_buf[256];  	while (cnt)  	{ diff --git a/unicode/unicodecpp.C b/unicode/unicodecpp.C index ac08285..1cec379 100644 --- a/unicode/unicodecpp.C +++ b/unicode/unicodecpp.C @@ -23,7 +23,7 @@ extern "C" {  			(ptr)).callback(value);  	} -	int unicode::linebreakc_trampoline(int value, unicode_char ch, void *ptr) +	int unicode::linebreakc_trampoline(int value, char32_t ch, void *ptr)  	{  		return (*reinterpret_cast<unicode::linebreakc_callback_base *>  			(ptr)).callback(value, ch); @@ -72,11 +72,11 @@ unicode::init_chset::init_chset()  	unicode_default_chset();  } -size_t unicode_wcwidth(const std::vector<unicode_char> &uc) +size_t unicode_wcwidth(const std::u32string &uc)  {  	size_t w=0; -	for (std::vector<unicode_char>::const_iterator +	for (std::u32string::const_iterator  		     b(uc.begin()), e(uc.end()); b != e; ++b)  		w += unicode_wcwidth(*b);  	return w; @@ -134,7 +134,7 @@ bool unicode::iconvert::operator()(const char *str, size_t cnt)  	return (unicode_convert(handle, str, cnt) == 0);  } -bool unicode::iconvert::operator()(const unicode_char *str, size_t cnt) +bool unicode::iconvert::operator()(const char32_t *str, size_t cnt)  {  	if (!handle)  		return false; @@ -169,7 +169,7 @@ std::string unicode::iconvert::convert(const std::string &text,  } -std::string unicode::iconvert::convert(const std::vector<unicode_char> &uc, +std::string unicode::iconvert::convert(const std::u32string &uc,  				    const std::string &dstcharset,  				    bool &errflag)  { @@ -206,11 +206,11 @@ std::string unicode::iconvert::convert(const std::vector<unicode_char> &uc,  bool unicode::iconvert::convert(const std::string &text,  			     const std::string &charset, -			     std::vector<unicode_char> &uc) +			     std::u32string &uc)  {  	int err; -	unicode_char *ucbuf; +	char32_t *ucbuf;  	size_t ucsize;  	if (unicode_convert_tou_tobuf(text.c_str(), @@ -235,7 +235,7 @@ bool unicode::iconvert::convert(const std::string &text,  	return err == 0;  } -int unicode::iconvert::tou::converted(const unicode_char *, size_t) +int unicode::iconvert::tou::converted(const char32_t *, size_t)  {  	return 0;  } @@ -247,15 +247,15 @@ bool unicode::iconvert::tou::begin(const std::string &chset)  int unicode::iconvert::tou::converted(const char *ptr, size_t cnt)  { -	return converted(reinterpret_cast<const unicode_char *>(ptr), -			 cnt/sizeof(unicode_char)); +	return converted(reinterpret_cast<const char32_t *>(ptr), +			 cnt/sizeof(char32_t));  } -std::pair<std::vector<unicode_char>, bool> +std::pair<std::u32string, bool>  unicode::iconvert::tou::convert(const std::string &str,  				const std::string &chset)  { -	std::pair<std::vector<unicode_char>, bool> ret; +	std::pair<std::u32string, bool> ret;  	ret.second=convert(str.begin(), str.end(), chset, ret.first);  	return ret; @@ -267,7 +267,7 @@ bool unicode::iconvert::fromu::begin(const std::string &chset)  }  std::pair<std::string, bool> -unicode::iconvert::fromu::convert(const std::vector<unicode_char> &ubuf, +unicode::iconvert::fromu::convert(const std::u32string &ubuf,  				  const std::string &chset)  {  	std::pair<std::string, bool> ret; @@ -281,8 +281,8 @@ unicode::iconvert::fromu::convert(const std::vector<unicode_char> &ubuf,  std::string unicode::iconvert::convert_tocase(const std::string &text,  					   const std::string &charset,  					   bool &err, -					   unicode_char (*first_char_func)(unicode_char), -					   unicode_char (*char_func)(unicode_char)) +					   char32_t (*first_char_func)(char32_t), +					   char32_t (*char_func)(char32_t))  {  	err=false;  	std::string s; @@ -333,7 +333,7 @@ int unicode::linebreak_callback_base::callback(int ignore)  }  unicode::linebreak_callback_base -&unicode::linebreak_callback_base::operator<<(unicode_char uc) +&unicode::linebreak_callback_base::operator<<(char32_t uc)  {  	if (!handle)  	{ @@ -382,7 +382,7 @@ unicode::linebreakc_callback_base::~linebreakc_callback_base()  	finish();  } -int unicode::linebreakc_callback_base::callback(int dummy1, unicode_char dummy2) +int unicode::linebreakc_callback_base::callback(int dummy1, char32_t dummy2)  {  	return 0;  } @@ -396,7 +396,7 @@ void unicode::linebreakc_callback_base::set_opts(int optsArg)  }  unicode::linebreakc_callback_base -&unicode::linebreakc_callback_base::operator<<(unicode_char uc) +&unicode::linebreakc_callback_base::operator<<(char32_t uc)  {  	if (handle == NULL)  	{ @@ -429,7 +429,7 @@ unicode::linebreakc_callback_save_buf::~linebreakc_callback_save_buf()  {  } -int unicode::linebreakc_callback_save_buf::callback(int c, unicode_char ch) +int unicode::linebreakc_callback_save_buf::callback(int c, char32_t ch)  {  	lb_buf.push_back(std::make_pair(c, ch));  	return 0; @@ -451,7 +451,7 @@ int unicode::wordbreak_callback_base::callback(bool ignore)  }  unicode::wordbreak_callback_base -&unicode::wordbreak_callback_base::operator<<(unicode_char uc) +&unicode::wordbreak_callback_base::operator<<(char32_t uc)  {  	if (!handle)  	{ @@ -485,7 +485,7 @@ unicode::wordbreakscan::~wordbreakscan()  	finish();  } -bool unicode::wordbreakscan::operator<<(unicode_char uc) +bool unicode::wordbreakscan::operator<<(char32_t uc)  {  	if (!handle)  		handle=unicode_wbscan_init(); @@ -516,16 +516,16 @@ std::string unicode::tolower(const std::string &string)  std::string unicode::tolower(const std::string &string,  			     const std::string &charset)  { -	std::vector<unicode_char> uc; +	std::u32string uc;  	unicode::iconvert::convert(string, charset, uc);  	return unicode::iconvert::convert(tolower(uc), charset);  } -std::vector<unicode_char> unicode::tolower(const std::vector<unicode_char> &u) +std::u32string unicode::tolower(const std::u32string &u)  { -	std::vector<unicode_char> copy=u; +	std::u32string copy=u;  	std::transform(copy.begin(), copy.end(), copy.begin(), unicode_lc);  	return copy; @@ -539,16 +539,16 @@ std::string unicode::toupper(const std::string &string)  std::string unicode::toupper(const std::string &string,  			     const std::string &charset)  { -	std::vector<unicode_char> uc; +	std::u32string uc;  	unicode::iconvert::convert(string, charset, uc);  	return unicode::iconvert::convert(toupper(uc), charset);  } -std::vector<unicode_char> unicode::toupper(const std::vector<unicode_char> &u) +std::u32string unicode::toupper(const std::u32string &u)  { -	std::vector<unicode_char> copy=u; +	std::u32string copy=u;  	std::transform(copy.begin(), copy.end(), copy.begin(), unicode_uc); diff --git a/unicode/unicodetest.c b/unicode/unicodetest.c index 7048f51..b59fab3 100644 --- a/unicode/unicodetest.c +++ b/unicode/unicodetest.c @@ -70,7 +70,7 @@ static void test1()  static void test2()  { -	unicode_char *ucptr; +	char32_t *ucptr;  	size_t ucsize;  	unicode_convert_handle_t h=  		unicode_convert_tou_init("utf-8", &ucptr, &ucsize, 1); diff --git a/unicode/wordbreaktest.C b/unicode/wordbreaktest.C index 72d2b14..91e3c31 100644 --- a/unicode/wordbreaktest.C +++ b/unicode/wordbreaktest.C @@ -78,7 +78,7 @@ static void testsuite()  			words.push_back(std::string(p, b));  		} -		std::vector<unicode_char> ubuf; +		std::u32string ubuf;  		std::vector<bool> status;  		while (1) @@ -102,7 +102,7 @@ static void testsuite()  				std::istringstream i(words.front()); -				unicode_char uc; +				uint32_t uc;  				i >> std::hex >> uc; | 
