]> git.kaiwu.me - quickjs.git/commitdiff
2020-03-16 release
authorbellard <6490144+bellard@users.noreply.github.com>
Sun, 6 Sep 2020 17:02:03 +0000 (19:02 +0200)
committerbellard <6490144+bellard@users.noreply.github.com>
Sun, 6 Sep 2020 17:02:03 +0000 (19:02 +0200)
26 files changed:
Changelog
TODO
VERSION
doc/jsbignum.html
doc/jsbignum.pdf
doc/jsbignum.texi
doc/quickjs.html
doc/quickjs.pdf
doc/quickjs.texi
libbf.c
libbf.h
libregexp.c
libunicode-table.h
quickjs-libc.c
quickjs-opcode.h
quickjs.c
quickjs.h
release.sh
run-test262.c
test262.conf
test262_errors.txt
tests/microbench.js
tests/test_builtin.js
tests/test_std.js
unicode_download.sh
unicode_gen_def.h

index 637dce18aa2c4af0ada572c65a7d4a38ae2ba759..435b39fbe7cc9aee06f4a0bfa6c63f86ee3e4c83 100644 (file)
--- a/Changelog
+++ b/Changelog
@@ -1,3 +1,14 @@
+2020-03-16:
+
+- reworked error handling in std and os libraries: suppressed I/O
+  exceptions in std FILE functions and return a positive errno value
+  when it is explicit
+- output exception messages to stderr
+- added std.loadFile(), std.strerror(), std.FILE.prototype.tello()
+- added JS_GetRuntimeOpaque(), JS_SetRuntimeOpaque(), JS_NewUint32()
+- updated to Unicode 13.0.0
+- misc bug fixes
+
 2020-01-19:
 
 - keep CONFIG_BIGNUM in the makefile
diff --git a/TODO b/TODO
index 33a9b9ddf6e7e6621394474d10922b33f666d4e2..2f6133897c38562b66782ab289b2906dd36000bb 100644 (file)
--- a/TODO
+++ b/TODO
@@ -73,5 +73,6 @@ REPL:
 Test262o:   0/11262 errors, 463 excluded
 Test262o commit: 7da91bceb9ce7613f87db47ddd1292a2dda58b42 (es5-tests branch)
 
-Test262:   17/69942 errors, 855 excluded, 581 skipped
-test262 commit: 28b4fcca4b1b1d278dfe0cc0e69c7d9d59b31aab
+Test262:   22/70040 errors, 860 excluded, 581 skipped
+test262 commit: 25c9e334d301944537215caba1d7f44319f3e0da
+
diff --git a/VERSION b/VERSION
index ceac5568949598644d806d1022ca31827bb93d47..81b7bb9c01c2180fd1b6cbbb6a35ae79fa8b7819 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-2020-01-19
+2020-03-16
index 096dc04235cf8cf7bee7081c27f2fb12a7c04023..ab31612bd8195f175b69677a3bba786b8c320cdc 100644 (file)
@@ -1,8 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 <html>
-<!-- Created by GNU Texinfo 6.5, http://www.gnu.org/software/texinfo/ -->
+<!-- Created by GNU Texinfo 6.1, http://www.gnu.org/software/texinfo/ -->
 <head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
 <title>Javascript Bignum Extensions</title>
 
 <meta name="description" content="Javascript Bignum Extensions">
@@ -10,6 +9,7 @@
 <meta name="resource-type" content="document">
 <meta name="distribution" content="global">
 <meta name="Generator" content="makeinfo">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
 <link href="#SEC_Contents" rel="contents" title="Table of Contents">
 <style type="text/css">
 <!--
@@ -121,7 +121,7 @@ changes were done in order to simplify the implementation.
 <ul>
 <li> <code>with operators from</code> is not supported. Operator overloading is always enabled.
 
-</li><li> The dispatch is not based on a static <code>[[OperatorSet]]</code> field in all instances. Instead, a dynamic lookup the of the <code>Symbol.operatorSet</code> property is done. This property is typically added in the prototype of each object.
+</li><li> The dispatch is not based on a static <code>[[OperatorSet]]</code> field in all instances. Instead, a dynamic lookup of the <code>Symbol.operatorSet</code> property is done. This property is typically added in the prototype of each object.
 
 </li><li> <code>Operators.create(...dictionaries)</code> is used to create a new OperatorSet object. The <code>Operators</code> function is supported as an helper to be closer to the TC39 proposal.
 
@@ -194,7 +194,7 @@ raised if <em>a &lt; 0</em>.
 <h3 class="section">4.1 Introduction</h3>
 
 <p>This extension adds the <code>BigFloat</code> primitive type. The
-<code>BigFloat</code> type represents floating point numbers are in base 2
+<code>BigFloat</code> type represents floating point numbers in base 2
 with the IEEE 754 semantics. A floating
 point number is represented as a sign, mantissa and exponent. The
 special values <code>NaN</code>, <code>+/-Infinity</code>, <code>+0</code> and <code>-0</code>
@@ -216,15 +216,13 @@ point environment is used.
 <code>RNDN</code> (&ldquo;round to nearest with ties to even&rdquo;)<a name="DOCF1" href="#FOOT1"><sup>1</sup></a>. The status flags of the global environment cannot be
 read<a name="DOCF2" href="#FOOT2"><sup>2</sup></a>. The precision of the global environment is
 <code>BigFloatEnv.prec</code>. The number of exponent bits of the global
-environment is <code>BigFloatEnv.expBits</code>.  If <code>BigFloatEnv.expBits</code> is
-strictly smaller than the maximum allowed number of exponent bits
-(<code>BigFloatEnv.expBitsMax</code>), then the global environment subnormal
-flag is set to <code>true</code>. Otherwise it is set to <code>false</code>;
+environment is <code>BigFloatEnv.expBits</code>. The global environment
+subnormal flag is set to <code>true</code>.
 </p>
-<p>For example, <code>prec = 53</code> and <code> expBits = 11</code> give exactly
-the same precision as the IEEE 754 64 bit floating point. The
+<p>For example, <code>prec = 53</code> and <code> expBits = 11</code> exactly give
+the same precision as the IEEE 754 64 bit floating point format. The
 default precision is <code>prec = 113</code> and <code> expBits = 15</code> (IEEE
-754 128 bit floating point).
+754 128 bit floating point format).
 </p>
 <p>The global floating point environment can only be modified temporarily
 when calling a function (see <code>BigFloatEnv.setPrec</code>). Hence a
@@ -433,9 +431,8 @@ environment. The initial value is <code>113</code>.
 </dd>
 <dt><code>expBits</code></dt>
 <dd><p>Getter. Return the exponent size in bits of the global floating point
-environment assuming an IEEE 754 representation. If <code>expBits &lt;
-expBitsMax</code>, then subnormal numbers are supported. The initial value
-is <code>15</code>.
+environment assuming an IEEE 754 representation. The initial value is
+<code>15</code>.
 </p>
 </dd>
 <dt><code>setPrec(f, p[, e])</code></dt>
@@ -608,7 +605,7 @@ Number value.
 
 <p>It returns <code>0m</code> if no parameter is provided. Otherwise the first
 parameter is converted to a bigdecimal by using ToString(). Hence
-Number value are not converted to their exact numerical value as
+Number values are not converted to their exact numerical value as
 BigDecimal.
 </p>
 <a name="Properties-of-the-BigDecimal-object"></a>
@@ -702,11 +699,11 @@ always represented as BigFloat.
 
 </li><li> The logical xor operator is still available with the <code>^^</code> operator.
 
-</li><li> The integer division operator can be overloaded by modifying the corresponding operator in <code>BigInt.prototype.[[OperatorSet]]</code>.
+</li><li> The modulo operator (<code>%</code>) returns the Euclidian remainder (always positive) instead of the truncated remainder.
 
-</li><li> The integer power operator with a non zero negative exponent can be overloaded by modifying the corresponding operator in <code>BigInt.prototype.[[OperatorSet]]</code>.
+</li><li> The integer division operator can be overloaded with <code>Operators.updateBigIntOperators(dictionary)</code>.
 
-</li><li> The modulo operator (<code>%</code>) returns the Euclidian remainder (always positive) instead of the truncated remainder.
+</li><li> The integer power operator with a non zero negative exponent can be overloaded with <code>Operators.updateBigIntOperators(dictionary)</code>.
 
 </li></ul>
 
index 09d414251b729c5b4cddbd3149a7f6fb4cd55e8d..442a8c04d7e527dbb778a81f9d72795be4523313 100644 (file)
Binary files a/doc/jsbignum.pdf and b/doc/jsbignum.pdf differ
index 70455ec1c24abb3659d248f16950f01cc08cf2e3..079d920173c8ecc8f55910f383671bbef6464ee3 100644 (file)
@@ -57,7 +57,7 @@ More precisely, the following modifications were made:
 
 @item @code{with operators from} is not supported. Operator overloading is always enabled.
 
-@item The dispatch is not based on a static @code{[[OperatorSet]]} field in all instances. Instead, a dynamic lookup the of the @code{Symbol.operatorSet} property is done. This property is typically added in the prototype of each object.
+@item The dispatch is not based on a static @code{[[OperatorSet]]} field in all instances. Instead, a dynamic lookup of the @code{Symbol.operatorSet} property is done. This property is typically added in the prototype of each object.
 
 @item @code{Operators.create(...dictionaries)} is used to create a new OperatorSet object. The @code{Operators} function is supported as an helper to be closer to the TC39 proposal.
 
@@ -119,7 +119,7 @@ Return the number of trailing zeros in the two's complement binary representatio
 @section Introduction
 
 This extension adds the @code{BigFloat} primitive type. The
-@code{BigFloat} type represents floating point numbers are in base 2
+@code{BigFloat} type represents floating point numbers in base 2
 with the IEEE 754 semantics. A floating
 point number is represented as a sign, mantissa and exponent. The
 special values @code{NaN}, @code{+/-Infinity}, @code{+0} and @code{-0}
@@ -143,15 +143,13 @@ explicit.}. The status flags of the global environment cannot be
 read@footnote{The rationale is to avoid side effects for the built-in
 operators.}. The precision of the global environment is
 @code{BigFloatEnv.prec}. The number of exponent bits of the global
-environment is @code{BigFloatEnv.expBits}.  If @code{BigFloatEnv.expBits} is
-strictly smaller than the maximum allowed number of exponent bits
-(@code{BigFloatEnv.expBitsMax}), then the global environment subnormal
-flag is set to @code{true}. Otherwise it is set to @code{false};
+environment is @code{BigFloatEnv.expBits}. The global environment
+subnormal flag is set to @code{true}.
 
-For example, @code{prec = 53} and @code{ expBits = 11} give exactly
-the same precision as the IEEE 754 64 bit floating point. The
+For example, @code{prec = 53} and @code{ expBits = 11} exactly give
+the same precision as the IEEE 754 64 bit floating point format. The
 default precision is @code{prec = 113} and @code{ expBits = 15} (IEEE
-754 128 bit floating point).
+754 128 bit floating point format).
 
 The global floating point environment can only be modified temporarily
 when calling a function (see @code{BigFloatEnv.setPrec}). Hence a
@@ -345,9 +343,8 @@ environment. The initial value is @code{113}.
 
 @item expBits
 Getter. Return the exponent size in bits of the global floating point
-environment assuming an IEEE 754 representation. If @code{expBits <
-expBitsMax}, then subnormal numbers are supported. The initial value
-is @code{15}.
+environment assuming an IEEE 754 representation. The initial value is
+@code{15}.
 
 @item setPrec(f, p[, e])
 Set the precision of the global floating point environment to @code{p}
@@ -492,7 +489,7 @@ BigDecimal literals are decimal floating point numbers with a trailing
 
 It returns @code{0m} if no parameter is provided. Otherwise the first
 parameter is converted to a bigdecimal by using ToString(). Hence
-Number value are not converted to their exact numerical value as
+Number values are not converted to their exact numerical value as
 BigDecimal.
 
 @subsection Properties of the @code{BigDecimal} object
@@ -581,11 +578,11 @@ The following changes are made to the Javascript semantics:
 
 @item The logical xor operator is still available with the @code{^^} operator.
 
-@item The integer division operator can be overloaded by modifying the corresponding operator in @code{BigInt.prototype.[[OperatorSet]]}.
+@item The modulo operator (@code{%}) returns the Euclidian remainder (always positive) instead of the truncated remainder.
 
-@item The integer power operator with a non zero negative exponent can be overloaded by modifying the corresponding operator in @code{BigInt.prototype.[[OperatorSet]]}.
+@item The integer division operator can be overloaded with @code{Operators.updateBigIntOperators(dictionary)}.
 
-@item The modulo operator (@code{%}) returns the Euclidian remainder (always positive) instead of the truncated remainder.
+@item The integer power operator with a non zero negative exponent can be overloaded with @code{Operators.updateBigIntOperators(dictionary)}.
 
 @end itemize
 
index 11657a3b481ccde5f55490af823acc3d5c1eece1..b5c9287ce3ca8aea4f7d252829f8bf456cf7cbd9 100644 (file)
@@ -1,8 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 <html>
-<!-- Created by GNU Texinfo 6.5, http://www.gnu.org/software/texinfo/ -->
+<!-- Created by GNU Texinfo 6.1, http://www.gnu.org/software/texinfo/ -->
 <head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
 <title>QuickJS Javascript Engine</title>
 
 <meta name="description" content="QuickJS Javascript Engine">
@@ -10,6 +9,7 @@
 <meta name="resource-type" content="document">
 <meta name="distribution" content="global">
 <meta name="Generator" content="makeinfo">
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
 <link href="#SEC_Contents" rel="contents" title="Table of Contents">
 <style type="text/css">
 <!--
@@ -519,50 +519,39 @@ optional properties:
 <dd><p>Evaluate the file <code>filename</code> as a script (global eval).
 </p>
 </dd>
-<dt><code>Error(errno)</code></dt>
-<dd>
-<p><code>std.Error</code> constructor. Error instances contain the field
-<code>errno</code> (error code) and <code>message</code> (result of
-<code>std.Error.strerror(errno)</code>).
+<dt><code>loadFile(filename)</code></dt>
+<dd><p>Load the file <code>filename</code> and return it as a string assuming UTF-8
+encoding. Return <code>null</code> in case of I/O error.
 </p>
-<p>The constructor contains the following fields:
-</p>
-<dl compact="compact">
-<dt><code>EINVAL</code></dt>
-<dt><code>EIO</code></dt>
-<dt><code>EACCES</code></dt>
-<dt><code>EEXIST</code></dt>
-<dt><code>ENOSPC</code></dt>
-<dt><code>ENOSYS</code></dt>
-<dt><code>EBUSY</code></dt>
-<dt><code>ENOENT</code></dt>
-<dt><code>EPERM</code></dt>
-<dt><code>EPIPE</code></dt>
-<dd><p>Integer value of common errors (additional error codes may be defined).
-  </p></dd>
-<dt><code>strerror(errno)</code></dt>
-<dd><p>Return a string that describes the error <code>errno</code>.
-  </p></dd>
-</dl>
-
 </dd>
-<dt><code>open(filename, flags)</code></dt>
-<dd><p>Open a file (wrapper to the libc <code>fopen()</code>). Throws 
-<code>std.Error</code> in case of I/O error.
+<dt><code>open(filename, flags, errorObj = undefined)</code></dt>
+<dd><p>Open a file (wrapper to the libc <code>fopen()</code>). Return the FILE
+object or <code>null</code> in case of I/O error. If <code>errorObj</code> is not
+undefined, set its <code>errno</code> property to the error code or to 0 if
+no error occured.
 </p>
 </dd>
-<dt><code>popen(command, flags)</code></dt>
-<dd><p>Open a process by creating a pipe (wrapper to the libc <code>popen()</code>). Throws 
-<code>std.Error</code> in case of I/O error.
+<dt><code>popen(command, flags, errorObj = undefined)</code></dt>
+<dd><p>Open a process by creating a pipe (wrapper to the libc
+<code>popen()</code>). Return the FILE
+object or <code>null</code> in case of I/O error. If <code>errorObj</code> is not
+undefined, set its <code>errno</code> property to the error code or to 0 if
+no error occured.
 </p>
 </dd>
-<dt><code>fdopen(fd, flags)</code></dt>
+<dt><code>fdopen(fd, flags, errorObj = undefined)</code></dt>
 <dd><p>Open a file from a file handle (wrapper to the libc
-<code>fdopen()</code>). Throws <code>std.Error</code> in case of I/O error.
+<code>fdopen()</code>). Return the FILE
+object or <code>null</code> in case of I/O error. If <code>errorObj</code> is not
+undefined, set its <code>errno</code> property to the error code or to 0 if
+no error occured.
 </p>
 </dd>
-<dt><code>tmpfile()</code></dt>
-<dd><p>Open a temporary file. Throws <code>std.Error</code> in case of I/O error.
+<dt><code>tmpfile(errorObj = undefined)</code></dt>
+<dd><p>Open a temporary file. Return the FILE
+object or <code>null</code> in case of I/O error. If <code>errorObj</code> is not
+undefined, set its <code>errno</code> property to the error code or to 0 if
+no error occured.
 </p>
 </dd>
 <dt><code>puts(str)</code></dt>
@@ -589,6 +578,29 @@ optional properties:
 <dd><p>Constants for seek().
 </p>
 </dd>
+<dt><code>Error</code></dt>
+<dd>
+<p>Enumeration object containing the integer value of common errors
+(additional error codes may be defined):
+</p>
+<dl compact="compact">
+<dt><code>EINVAL</code></dt>
+<dt><code>EIO</code></dt>
+<dt><code>EACCES</code></dt>
+<dt><code>EEXIST</code></dt>
+<dt><code>ENOSPC</code></dt>
+<dt><code>ENOSYS</code></dt>
+<dt><code>EBUSY</code></dt>
+<dt><code>ENOENT</code></dt>
+<dt><code>EPERM</code></dt>
+<dt><code>EPIPE</code></dt>
+</dl>
+
+</dd>
+<dt><code>strerror(errno)</code></dt>
+<dd><p>Return a string that describes the error <code>errno</code>.
+</p>
+</dd>
 <dt><code>gc()</code></dt>
 <dd><p>Manually invoke the cycle removal algorithm. The cycle removal
 algorithm is automatically started when needed, so this function is
@@ -614,12 +626,14 @@ optional properties:
 </p>
 </dd>
 <dt><code>full</code></dt>
-<dd><p>Boolean (default = false). If true, return the an object contains
+<dd>  
+<p>Boolean (default = false). If true, return the an object contains
   the properties <code>response</code> (response content),
   <code>responseHeaders</code> (headers separated by CRLF), <code>status</code>
-  (status code). If <code>full</code> is false, only the response is
-  returned if the status is between 200 and 299. Otherwise an
-  <code>std.Error</code> exception is raised.
+  (status code). <code>response</code> is <code>null</code> is case of protocol or
+  network error. If <code>full</code> is false, only the response is
+  returned if the status is between 200 and 299. Otherwise <code>null</code>
+  is returned.
 </p>
 </dd>
 </dl>
@@ -631,7 +645,7 @@ optional properties:
 </p>
 <dl compact="compact">
 <dt><code>close()</code></dt>
-<dd><p>Close the file.
+<dd><p>Close the file. Return 0 if OK or <code>-errno</code> in case of I/O error.
 </p></dd>
 <dt><code>puts(str)</code></dt>
 <dd><p>Outputs the string with the UTF-8 encoding.
@@ -643,17 +657,27 @@ optional properties:
 <dd><p>Flush the buffered file.
 </p></dd>
 <dt><code>seek(offset, whence)</code></dt>
-<dd><p>Seek to a give file position (whence is <code>std.SEEK_*</code>). Throws a
-<code>std.Error</code> in case of I/O error.
+<dd><p>Seek to a give file position (whence is
+<code>std.SEEK_*</code>). <code>offset</code> can be a number or a bigint. Return
+0 if OK or <code>-errno</code> in case of I/O error.
 </p></dd>
 <dt><code>tell()</code></dt>
 <dd><p>Return the current file position.
 </p></dd>
+<dt><code>tello()</code></dt>
+<dd><p>Return the current file position as a bigint.
+</p></dd>
 <dt><code>eof()</code></dt>
 <dd><p>Return true if end of file.
 </p></dd>
 <dt><code>fileno()</code></dt>
 <dd><p>Return the associated OS handle.
+</p></dd>
+<dt><code>error()</code></dt>
+<dd><p>Return true if there was an error.
+</p></dd>
+<dt><code>clearerr()</code></dt>
+<dd><p>Clear the error indication.
 </p>
 </dd>
 <dt><code>read(buffer, position, length)</code></dt>
@@ -727,7 +751,9 @@ error code.
 </p>
 </dd>
 <dt><code>seek(fd, offset, whence)</code></dt>
-<dd><p>Seek in the file. Use <code>std.SEEK_*</code> for <code>whence</code>.
+<dd><p>Seek in the file. Use <code>std.SEEK_*</code> for
+<code>whence</code>. <code>offset</code> is either a number or a bigint. If
+<code>offset</code> is a bigint, a bigint is returned too.
 </p>
 </dd>
 <dt><code>read(fd, buffer, offset, length)</code></dt>
@@ -755,11 +781,11 @@ Return the number of written bytes or &lt; 0 if error.
 </p>
 </dd>
 <dt><code>remove(filename)</code></dt>
-<dd><p>Remove a file. Return 0 if OK or &lt; 0 if error.
+<dd><p>Remove a file. Return 0 if OK or <code>-errno</code>.
 </p>
 </dd>
 <dt><code>rename(oldname, newname)</code></dt>
-<dd><p>Rename a file. Return 0 if OK or &lt; 0 if error.
+<dd><p>Rename a file. Return 0 if OK or <code>-errno</code>.
 </p>
 </dd>
 <dt><code>realpath(path)</code></dt>
@@ -773,11 +799,11 @@ and <code>err</code> the error code.
 </p>
 </dd>
 <dt><code>chdir(path)</code></dt>
-<dd><p>Change the current directory. Return the error code.
+<dd><p>Change the current directory. Return 0 if OK or <code>-errno</code>.
 </p>
 </dd>
 <dt><code>mkdir(path, mode = 0o777)</code></dt>
-<dd><p>Create a directory at <code>path</code>. Return the error code.
+<dd><p>Create a directory at <code>path</code>. Return 0 if OK or <code>-errno</code>.
 </p>
 </dd>
 <dt><code>stat(path)</code></dt>
@@ -809,11 +835,11 @@ itself.
 </dd>
 <dt><code>utimes(path, atime, mtime)</code></dt>
 <dd><p>Change the access and modification times of the file <code>path</code>. The
-times are specified in milliseconds since 1970.
+times are specified in milliseconds since 1970. Return 0 if OK or <code>-errno</code>.
 </p>
 </dd>
 <dt><code>symlink(target, linkpath)</code></dt>
-<dd><p>Create a link at <code>linkpath</code> containing the string <code>target</code>.
+<dd><p>Create a link at <code>linkpath</code> containing the string <code>target</code>. Return 0 if OK or <code>-errno</code>.
 </p>
 </dd>
 <dt><code>readlink(path)</code></dt>
@@ -896,7 +922,8 @@ object containing optional parameters:
 
 </dd>
 <dt><code>waitpid(pid, options)</code></dt>
-<dd><p><code>waitpid</code> Unix system call. Return the array <code>[ret, status]</code>.
+<dd><p><code>waitpid</code> Unix system call. Return the array <code>[ret,
+status]</code>. <code>ret</code> contains <code>-errno</code> in case of error.
 </p>
 </dd>
 <dt><code>WNOHANG</code></dt>
index 99bebfc108d2eb2c026aa7c50c7b84ae4cacc255..c0e4f4f1c9abc16de8dea66c188155d925a27c15 100644 (file)
Binary files a/doc/quickjs.pdf and b/doc/quickjs.pdf differ
index aba1ab53e69165a1b8db0d87557f1202532bda7d..10152bce20dc39ea088c8459b0204c33049d2b96 100644 (file)
@@ -373,44 +373,35 @@ optional properties:
 @item loadScript(filename)
 Evaluate the file @code{filename} as a script (global eval).
 
-@item Error(errno)
-
-@code{std.Error} constructor. Error instances contain the field
-@code{errno} (error code) and @code{message} (result of
-@code{std.Error.strerror(errno)}).
-
-The constructor contains the following fields:
-
-  @table @code
-  @item EINVAL
-  @item EIO
-  @item EACCES
-  @item EEXIST
-  @item ENOSPC
-  @item ENOSYS
-  @item EBUSY
-  @item ENOENT
-  @item EPERM
-  @item EPIPE
-    Integer value of common errors (additional error codes may be defined).
-  @item strerror(errno)
-    Return a string that describes the error @code{errno}.
-  @end table
-
-@item open(filename, flags)
-Open a file (wrapper to the libc @code{fopen()}). Throws 
-@code{std.Error} in case of I/O error.
-
-@item popen(command, flags)
-Open a process by creating a pipe (wrapper to the libc @code{popen()}). Throws 
-@code{std.Error} in case of I/O error.
-
-@item fdopen(fd, flags)
+@item loadFile(filename)
+Load the file @code{filename} and return it as a string assuming UTF-8
+encoding. Return @code{null} in case of I/O error.
+
+@item open(filename, flags, errorObj = undefined)
+Open a file (wrapper to the libc @code{fopen()}). Return the FILE
+object or @code{null} in case of I/O error. If @code{errorObj} is not
+undefined, set its @code{errno} property to the error code or to 0 if
+no error occured.
+
+@item popen(command, flags, errorObj = undefined)
+Open a process by creating a pipe (wrapper to the libc
+@code{popen()}). Return the FILE
+object or @code{null} in case of I/O error. If @code{errorObj} is not
+undefined, set its @code{errno} property to the error code or to 0 if
+no error occured.
+
+@item fdopen(fd, flags, errorObj = undefined)
 Open a file from a file handle (wrapper to the libc
-@code{fdopen()}). Throws @code{std.Error} in case of I/O error.
+@code{fdopen()}). Return the FILE
+object or @code{null} in case of I/O error. If @code{errorObj} is not
+undefined, set its @code{errno} property to the error code or to 0 if
+no error occured.
 
-@item tmpfile()
-Open a temporary file. Throws @code{std.Error} in case of I/O error.
+@item tmpfile(errorObj = undefined)
+Open a temporary file. Return the FILE
+object or @code{null} in case of I/O error. If @code{errorObj} is not
+undefined, set its @code{errno} property to the error code or to 0 if
+no error occured.
 
 @item puts(str)
 Equivalent to @code{std.out.puts(str)}.
@@ -431,6 +422,27 @@ Wrappers to the libc file @code{stdin}, @code{stdout}, @code{stderr}.
 @item SEEK_END
 Constants for seek().
 
+@item Error
+
+Enumeration object containing the integer value of common errors
+(additional error codes may be defined):
+
+  @table @code
+  @item EINVAL
+  @item EIO
+  @item EACCES
+  @item EEXIST
+  @item ENOSPC
+  @item ENOSYS
+  @item EBUSY
+  @item ENOENT
+  @item EPERM
+  @item EPIPE
+  @end table
+
+@item strerror(errno)
+Return a string that describes the error @code{errno}.
+
 @item gc()
 Manually invoke the cycle removal algorithm. The cycle removal
 algorithm is automatically started when needed, so this function is
@@ -453,12 +465,14 @@ optional properties:
   to be UTF-8 encoded.
 
   @item full
+  
   Boolean (default = false). If true, return the an object contains
   the properties @code{response} (response content),
   @code{responseHeaders} (headers separated by CRLF), @code{status}
-  (status code). If @code{full} is false, only the response is
-  returned if the status is between 200 and 299. Otherwise an
-  @code{std.Error} exception is raised.
+  (status code). @code{response} is @code{null} is case of protocol or
+  network error. If @code{full} is false, only the response is
+  returned if the status is between 200 and 299. Otherwise @code{null}
+  is returned.
 
   @end table
 
@@ -468,7 +482,7 @@ FILE prototype:
 
 @table @code
 @item close()
-Close the file.
+Close the file. Return 0 if OK or @code{-errno} in case of I/O error.
 @item puts(str)
 Outputs the string with the UTF-8 encoding.
 @item printf(fmt, ...args)
@@ -476,14 +490,21 @@ Formatted printf, same formats as the libc printf.
 @item flush()
 Flush the buffered file.
 @item seek(offset, whence)
-Seek to a give file position (whence is @code{std.SEEK_*}). Throws a
-@code{std.Error} in case of I/O error.
+Seek to a give file position (whence is
+@code{std.SEEK_*}). @code{offset} can be a number or a bigint. Return
+0 if OK or @code{-errno} in case of I/O error.
 @item tell()
 Return the current file position.
+@item tello()
+Return the current file position as a bigint.
 @item eof()
 Return true if end of file.
 @item fileno()
 Return the associated OS handle.
+@item error()
+Return true if there was an error.
+@item clearerr()
+Clear the error indication.
 
 @item read(buffer, position, length)
 Read @code{length} bytes from the file to the ArrayBuffer @code{buffer} at byte
@@ -545,7 +566,9 @@ POSIX open flags.
 Close the file handle @code{fd}.
 
 @item seek(fd, offset, whence)
-Seek in the file. Use @code{std.SEEK_*} for @code{whence}.
+Seek in the file. Use @code{std.SEEK_*} for
+@code{whence}. @code{offset} is either a number or a bigint. If
+@code{offset} is a bigint, a bigint is returned too.
 
 @item read(fd, buffer, offset, length)
 Read @code{length} bytes from the file handle @code{fd} to the
@@ -567,10 +590,10 @@ Return the TTY size as @code{[width, height]} or @code{null} if not available.
 Set the TTY in raw mode.
 
 @item remove(filename)
-Remove a file. Return 0 if OK or < 0 if error.
+Remove a file. Return 0 if OK or @code{-errno}.
 
 @item rename(oldname, newname)
-Rename a file. Return 0 if OK or < 0 if error.
+Rename a file. Return 0 if OK or @code{-errno}.
 
 @item realpath(path)
 Return @code{[str, err]} where @code{str} is the canonicalized absolute
@@ -581,10 +604,10 @@ Return @code{[str, err]} where @code{str} is the current working directory
 and @code{err} the error code.
 
 @item chdir(path)
-Change the current directory. Return the error code.
+Change the current directory. Return 0 if OK or @code{-errno}.
 
 @item mkdir(path, mode = 0o777)
-Create a directory at @code{path}. Return the error code.
+Create a directory at @code{path}. Return 0 if OK or @code{-errno}.
 
 @item stat(path)
 @item lstat(path)
@@ -613,10 +636,10 @@ Constants to interpret the @code{mode} property returned by
 
 @item utimes(path, atime, mtime)
 Change the access and modification times of the file @code{path}. The
-times are specified in milliseconds since 1970.
+times are specified in milliseconds since 1970. Return 0 if OK or @code{-errno}.
 
 @item symlink(target, linkpath)
-Create a link at @code{linkpath} containing the string @code{target}.
+Create a link at @code{linkpath} containing the string @code{target}. Return 0 if OK or @code{-errno}.
 
 @item readlink(path)
 Return @code{[str, err]} where @code{str} is the link target and @code{err}
@@ -685,7 +708,8 @@ object containing optional parameters:
   @end table
 
 @item waitpid(pid, options)
-@code{waitpid} Unix system call. Return the array @code{[ret, status]}.
+@code{waitpid} Unix system call. Return the array @code{[ret,
+status]}. @code{ret} contains @code{-errno} in case of error.
 
 @item WNOHANG
 Constant for the @code{options} argument of @code{waitpid}.
diff --git a/libbf.c b/libbf.c
index 829d8031c1948bc3548f493c15aa33b7b9583cfd..14aff8f7fd0cd961a77b29affe8152d4eeb9be22 100644 (file)
--- a/libbf.c
+++ b/libbf.c
@@ -2526,19 +2526,18 @@ fail:
     return BF_ST_MEM_ERROR;
 }
 
-/* The rounding mode is always BF_RNDZ. Return BF_ST_OVERFLOW if there
+/* The rounding mode is always BF_RNDZ. Return BF_ST_INVALID_OP if there
    is an overflow and 0 otherwise. */
 int bf_get_int32(int *pres, const bf_t *a, int flags)
 {
     uint32_t v;
     int ret;
     if (a->expn >= BF_EXP_INF) {
-        ret = 0;
+        ret = BF_ST_INVALID_OP;
         if (flags & BF_GET_INT_MOD) {
             v = 0;
         } else if (a->expn == BF_EXP_INF) {
             v = (uint32_t)INT32_MAX + a->sign;
-            /* XXX: return overflow ? */
         } else {
             v = INT32_MAX;
         }
@@ -2551,7 +2550,7 @@ int bf_get_int32(int *pres, const bf_t *a, int flags)
             v = -v;
         ret = 0;
     } else if (!(flags & BF_GET_INT_MOD)) {
-        ret = BF_ST_OVERFLOW;
+        ret = BF_ST_INVALID_OP;
         if (a->sign) {
             v = (uint32_t)INT32_MAX + 1;
             if (a->expn == 32 && 
@@ -2571,14 +2570,14 @@ int bf_get_int32(int *pres, const bf_t *a, int flags)
     return ret;
 }
 
-/* The rounding mode is always BF_RNDZ. Return BF_ST_OVERFLOW if there
+/* The rounding mode is always BF_RNDZ. Return BF_ST_INVALID_OP if there
    is an overflow and 0 otherwise. */
 int bf_get_int64(int64_t *pres, const bf_t *a, int flags)
 {
     uint64_t v;
     int ret;
     if (a->expn >= BF_EXP_INF) {
-        ret = 0;
+        ret = BF_ST_INVALID_OP;
         if (flags & BF_GET_INT_MOD) {
             v = 0;
         } else if (a->expn == BF_EXP_INF) {
@@ -2603,7 +2602,7 @@ int bf_get_int64(int64_t *pres, const bf_t *a, int flags)
             v = -v;
         ret = 0;
     } else if (!(flags & BF_GET_INT_MOD)) {
-        ret = BF_ST_OVERFLOW;
+        ret = BF_ST_INVALID_OP;
         if (a->sign) {
             uint64_t v1;
             v = (uint64_t)INT64_MAX + 1;
@@ -2632,6 +2631,40 @@ int bf_get_int64(int64_t *pres, const bf_t *a, int flags)
     return ret;
 }
 
+/* The rounding mode is always BF_RNDZ. Return BF_ST_INVALID_OP if there
+   is an overflow and 0 otherwise. */
+int bf_get_uint64(uint64_t *pres, const bf_t *a)
+{
+    uint64_t v;
+    int ret;
+    if (a->expn == BF_EXP_NAN) {
+        goto overflow;
+    } else if (a->expn <= 0) {
+        v = 0;
+        ret = 0;
+    } else if (a->sign) {
+        v = 0;
+        ret = BF_ST_INVALID_OP;
+    } else if (a->expn <= 64) {
+#if LIMB_BITS == 32
+        if (a->expn <= 32)
+            v = a->tab[a->len - 1] >> (LIMB_BITS - a->expn);
+        else
+            v = (((uint64_t)a->tab[a->len - 1] << 32) |
+                 get_limbz(a, a->len - 2)) >> (64 - a->expn);
+#else
+        v = a->tab[a->len - 1] >> (LIMB_BITS - a->expn);
+#endif
+        ret = 0;
+    } else {
+    overflow:
+        v = UINT64_MAX;
+        ret = BF_ST_INVALID_OP;
+    }
+    *pres = v;
+    return ret;
+}
+
 /* base conversion from radix */
 
 static const uint8_t digits_per_limb_table[BF_RADIX_MAX - 1] = {
diff --git a/libbf.h b/libbf.h
index 60439dcac1b3342ca05ee30e3728fb8b9fbd6107..6749b35c6907aa46c7ad9e225afdde5905fe82d1 100644 (file)
--- a/libbf.h
+++ b/libbf.h
@@ -376,6 +376,7 @@ char *bf_ftoa(size_t *plen, const bf_t *a, int radix, limb_t prec,
 #define BF_GET_INT_MOD (1 << 0) 
 int bf_get_int32(int *pres, const bf_t *a, int flags);
 int bf_get_int64(int64_t *pres, const bf_t *a, int flags);
+int bf_get_uint64(uint64_t *pres, const bf_t *a);
 
 /* the following functions are exported for testing only. */
 void mp_print_str(const char *str, const limb_t *tab, limb_t n);
index 4425ce55b8c52e26c01d992ba43f7561d6d0db22..7f6eef42a8fa35c122c59316fb4324ecc59eb719 100644 (file)
@@ -434,8 +434,9 @@ static int __attribute__((format(printf, 2, 3))) re_parse_error(REParseState *s,
     return -1;
 }
 
-/* Return -1 in case of overflow */
-static int parse_digits(const uint8_t **pp)
+/* If allow_overflow is false, return -1 in case of
+   overflow. Otherwise return INT32_MAX. */
+static int parse_digits(const uint8_t **pp, BOOL allow_overflow)
 {
     const uint8_t *p;
     uint64_t v;
@@ -448,8 +449,12 @@ static int parse_digits(const uint8_t **pp)
         if (c < '0' || c > '9')
             break;
         v = v * 10 + c - '0';
-        if (v >= INT32_MAX)
-            return -1;
+        if (v >= INT32_MAX) {
+            if (allow_overflow)
+                v = INT32_MAX;
+            else
+                return -1;
+        }
         p++;
     }
     *pp = p;
@@ -1225,14 +1230,27 @@ static int re_parse_term(REParseState *s, BOOL is_backward_dir)
             re_emit_op(s, REOP_prev);
         break;
     case '{':
-        /* As an extension (see ES6 annex B), we accept '{' not
-           followed by digits as a normal atom */
-        if (!is_digit(p[1])) {
-            if (s->is_utf16)
-                goto invalid_quant_count;
+        if (s->is_utf16) {
+            return re_parse_error(s, "syntax error");
+        } else if (!is_digit(p[1])) {
+            /* Annex B: we accept '{' not followed by digits as a
+               normal atom */
             goto parse_class_atom;
+        } else {
+            const uint8_t *p1 = p + 1;
+            /* Annex B: error if it is like a repetition count */
+            parse_digits(&p1, TRUE);
+            if (*p1 == ',') {
+                p1++;
+                if (is_digit(*p1)) {
+                    parse_digits(&p1, TRUE);
+                }
+            }
+            if (*p1 != '}') {
+                goto parse_class_atom;
+            }
         }
-        /* fall tru */
+        /* fall thru */
     case '*':
     case '+':
     case '?':
@@ -1387,7 +1405,7 @@ static int re_parse_term(REParseState *s, BOOL is_backward_dir)
             {
                 const uint8_t *q = ++p;
                 
-                c = parse_digits(&p);
+                c = parse_digits(&p, FALSE);
                 if (c < 0 || (c >= s->capture_count && c >= re_count_captures(s))) {
                     if (!s->is_utf16) {
                         /* Annex B.1.4: accept legacy octal */
@@ -1484,32 +1502,38 @@ static int re_parse_term(REParseState *s, BOOL is_backward_dir)
             quant_max = 1;
             goto quantifier;
         case '{':
-            /* As an extension (see ES6 annex B), we accept '{' not
-               followed by digits as a normal atom */
-            if (!is_digit(p[1])) {
-                if (s->is_utf16)
-                    goto invalid_quant_count;
-                break;
-            }
-            p++;
-            quant_min = parse_digits(&p);
-            if (quant_min < 0) {
-            invalid_quant_count:
-                return re_parse_error(s, "invalid repetition count");
-            }
-            quant_max = quant_min;
-            if (*p == ',') {
-                p++;
-                if (is_digit(*p)) {
-                    quant_max = parse_digits(&p);
-                    if (quant_max < 0 || quant_max < quant_min)
+            {
+                const uint8_t *p1 = p;
+                /* As an extension (see ES6 annex B), we accept '{' not
+                   followed by digits as a normal atom */
+                if (!is_digit(p[1])) {
+                    if (s->is_utf16)
                         goto invalid_quant_count;
-                } else {
-                    quant_max = INT32_MAX; /* infinity */
+                    break;
+                }
+                p++;
+                quant_min = parse_digits(&p, TRUE);
+                quant_max = quant_min;
+                if (*p == ',') {
+                    p++;
+                    if (is_digit(*p)) {
+                        quant_max = parse_digits(&p, TRUE);
+                        if (quant_max < quant_min) {
+                        invalid_quant_count:
+                            return re_parse_error(s, "invalid repetition count");
+                        }
+                    } else {
+                        quant_max = INT32_MAX; /* infinity */
+                    }
                 }
+                if (*p != '}' && !s->is_utf16) {
+                    /* Annex B: normal atom if invalid '{' syntax */
+                    p = p1;
+                    break;
+                }
+                if (re_parse_expect(s, &p, '}'))
+                    return -1;
             }
-            if (re_parse_expect(s, &p, '}'))
-                return -1;
         quantifier:
             greedy = TRUE;
             if (*p == '?') {
index 521f2f3190a2c7f933d0147a9dea5379264d9463..0ef21135604fd4ade02382f6e8d00454c5057483 100644 (file)
@@ -3,7 +3,7 @@
 
 #include <stdint.h>
 
-static const uint32_t case_conv_table1[359] = {
+static const uint32_t case_conv_table1[361] = {
     0x00209a30, 0x00309a00, 0x005a8173, 0x00601730,
     0x006c0730, 0x006f81b3, 0x00701700, 0x007c0700,
     0x007f8100, 0x00803040, 0x009801c3, 0x00988190,
@@ -86,17 +86,18 @@ static const uint32_t case_conv_table1[359] = {
     0x53cb1440, 0x53d50130, 0x53d58130, 0x53d60130,
     0x53d68130, 0x53d70130, 0x53d80130, 0x53d88130,
     0x53d90130, 0x53d98131, 0x53da0c40, 0x53e10240,
-    0x53e20131, 0x53e28130, 0x53e30130, 0x55a98101,
-    0x55b85020, 0x7d8001b2, 0x7d8081b2, 0x7d8101b2,
-    0x7d8181da, 0x7d8201da, 0x7d8281b3, 0x7d8301b3,
-    0x7d8981bb, 0x7d8a01bb, 0x7d8a81bb, 0x7d8b01bc,
-    0x7d8b81bb, 0x7f909a31, 0x7fa09a01, 0x82002831,
-    0x82142801, 0x82582431, 0x826c2401, 0x86403331,
-    0x86603301, 0x8c502031, 0x8c602001, 0xb7202031,
-    0xb7302001, 0xf4802231, 0xf4912201,
+    0x53e20131, 0x53e28130, 0x53e30130, 0x53e38440,
+    0x53fa8240, 0x55a98101, 0x55b85020, 0x7d8001b2,
+    0x7d8081b2, 0x7d8101b2, 0x7d8181da, 0x7d8201da,
+    0x7d8281b3, 0x7d8301b3, 0x7d8981bb, 0x7d8a01bb,
+    0x7d8a81bb, 0x7d8b01bc, 0x7d8b81bb, 0x7f909a31,
+    0x7fa09a01, 0x82002831, 0x82142801, 0x82582431,
+    0x826c2401, 0x86403331, 0x86603301, 0x8c502031,
+    0x8c602001, 0xb7202031, 0xb7302001, 0xf4802231,
+    0xf4912201,
 };
 
-static const uint8_t case_conv_table2[359] = {
+static const uint8_t case_conv_table2[361] = {
     0x01, 0x00, 0x9c, 0x06, 0x07, 0x4d, 0x03, 0x04,
     0x10, 0x00, 0x8f, 0x0b, 0x00, 0x00, 0x11, 0x00,
     0x08, 0x00, 0x53, 0x4a, 0x51, 0x00, 0x52, 0x00,
@@ -118,7 +119,7 @@ static const uint8_t case_conv_table2[359] = {
     0x33, 0x95, 0x00, 0x8e, 0x00, 0x74, 0x99, 0x98,
     0x97, 0x96, 0x00, 0x00, 0x9e, 0x00, 0x9c, 0x00,
     0xa1, 0xa0, 0x15, 0x2e, 0x2f, 0x30, 0xb4, 0xb5,
-    0x4c, 0xaa, 0xa9, 0x12, 0x14, 0x1e, 0x21, 0x22,
+    0x4e, 0xaa, 0xa9, 0x12, 0x14, 0x1e, 0x21, 0x22,
     0x22, 0x2a, 0x34, 0x35, 0xa6, 0xa7, 0x36, 0x1f,
     0x4a, 0x00, 0x00, 0x97, 0x01, 0x5a, 0xda, 0x1d,
     0x36, 0x05, 0x00, 0xc4, 0xc3, 0xc6, 0xc5, 0xc8,
@@ -137,11 +138,12 @@ static const uint8_t case_conv_table2[359] = {
     0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0xa3, 0xa4,
     0xa5, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb6, 0x00,
     0x00, 0x5a, 0x00, 0x48, 0x00, 0x5b, 0x56, 0x58,
-    0x60, 0x5e, 0x70, 0x69, 0x6f, 0x4b, 0x00, 0x00,
-    0x3b, 0x67, 0xb8, 0x45, 0xa8, 0x8a, 0x8b, 0x8c,
-    0xab, 0xac, 0x58, 0x58, 0xaf, 0x94, 0xb0, 0x6f,
-    0xb2, 0x5a, 0x59, 0x5c, 0x5b, 0x5e, 0x5d, 0x60,
-    0x5f, 0x62, 0x61, 0x64, 0x63, 0x66, 0x65,
+    0x60, 0x5e, 0x70, 0x69, 0x6f, 0x4d, 0x00, 0x00,
+    0x3b, 0x67, 0xb8, 0x00, 0x00, 0x45, 0xa8, 0x8a,
+    0x8b, 0x8c, 0xab, 0xac, 0x58, 0x58, 0xaf, 0x94,
+    0xb0, 0x6f, 0xb2, 0x5c, 0x5b, 0x5e, 0x5d, 0x60,
+    0x5f, 0x62, 0x61, 0x64, 0x63, 0x66, 0x65, 0x68,
+    0x67,
 };
 
 static const uint16_t case_conv_ext[58] = {
@@ -170,7 +172,7 @@ static const uint8_t unicode_prop_Cased1_table[172] = {
     0x26, 0x01, 0x01, 0x86, 0xe5, 0x80, 0x60, 0x79,
     0xb6, 0x81, 0x40, 0x91, 0x81, 0xbd, 0x88, 0x94,
     0x05, 0x80, 0x98, 0x80, 0xc7, 0x82, 0x43, 0x34,
-    0xa2, 0x06, 0x80, 0x8b, 0x61, 0x28, 0x97, 0xd4,
+    0xa2, 0x06, 0x80, 0x8c, 0x61, 0x28, 0x96, 0xd4,
     0x80, 0xc6, 0x01, 0x08, 0x09, 0x0b, 0x80, 0x8b,
     0x00, 0x06, 0x80, 0xc0, 0x03, 0x0f, 0x06, 0x80,
     0x9b, 0x03, 0x04, 0x00, 0x16, 0x80, 0x41, 0x53,
@@ -186,107 +188,109 @@ static const uint8_t unicode_prop_Cased1_index[18] = {
     0xf1, 0x01,
 };
 
-static const uint8_t unicode_prop_Case_Ignorable_table[678] = {
+static const uint8_t unicode_prop_Case_Ignorable_table[692] = {
     0xa6, 0x05, 0x80, 0x8a, 0x80, 0xa2, 0x00, 0x80,
     0xc6, 0x03, 0x00, 0x03, 0x01, 0x81, 0x41, 0xf6,
     0x40, 0xbf, 0x19, 0x18, 0x88, 0x08, 0x80, 0x40,
-    0xfa, 0x86, 0x40, 0xce, 0x80, 0xb6, 0xac, 0x00,
-    0x01, 0x01, 0x00, 0xab, 0x80, 0x8a, 0x85, 0x89,
-    0x8a, 0x00, 0xa2, 0x80, 0x89, 0x94, 0x8f, 0x80,
-    0xe4, 0x38, 0x89, 0x03, 0xa0, 0x00, 0x80, 0x9d,
-    0x9a, 0xda, 0x8a, 0xb9, 0x8a, 0x18, 0x08, 0x97,
-    0x97, 0xaa, 0x82, 0xf6, 0xaf, 0xb6, 0x00, 0x03,
-    0x3b, 0x02, 0x86, 0x89, 0x81, 0x8c, 0x80, 0x8e,
-    0x80, 0xb9, 0x03, 0x1f, 0x80, 0x93, 0x81, 0x99,
-    0x01, 0x81, 0xb8, 0x03, 0x0b, 0x09, 0x12, 0x80,
-    0x9d, 0x0a, 0x80, 0x8a, 0x81, 0xb8, 0x03, 0x20,
-    0x0b, 0x80, 0x93, 0x81, 0x95, 0x28, 0x80, 0xb9,
-    0x01, 0x00, 0x1f, 0x07, 0x80, 0x8a, 0x81, 0x9d,
-    0x80, 0xbc, 0x80, 0x8b, 0x80, 0xb1, 0x02, 0x80,
-    0xb8, 0x14, 0x10, 0x1e, 0x81, 0x8a, 0x81, 0x9c,
-    0x80, 0xb9, 0x01, 0x05, 0x04, 0x81, 0x93, 0x81,
-    0x9b, 0x81, 0xb8, 0x0b, 0x1f, 0x80, 0x93, 0x81,
-    0xe5, 0x06, 0x10, 0x80, 0xd9, 0x01, 0x86, 0x8a,
-    0x88, 0xe1, 0x01, 0x88, 0x88, 0x00, 0x85, 0xc9,
-    0x81, 0x9a, 0x00, 0x00, 0x80, 0xb6, 0x8d, 0x04,
-    0x01, 0x84, 0x8a, 0x80, 0xa3, 0x88, 0x80, 0xe5,
-    0x18, 0x28, 0x09, 0x81, 0x98, 0x0b, 0x82, 0x8f,
-    0x83, 0x8c, 0x01, 0x0d, 0x80, 0x8e, 0x80, 0xdd,
-    0x80, 0x42, 0x5f, 0x82, 0x43, 0xb1, 0x82, 0x9c,
-    0x82, 0x9c, 0x81, 0x9d, 0x81, 0xbf, 0x08, 0x37,
-    0x01, 0x8a, 0x10, 0x20, 0xac, 0x83, 0xb3, 0x80,
-    0xc0, 0x81, 0xa1, 0x80, 0xf5, 0x13, 0x81, 0x88,
-    0x05, 0x82, 0x40, 0xda, 0x09, 0x80, 0xb9, 0x00,
-    0x30, 0x00, 0x01, 0x3d, 0x89, 0x08, 0xa6, 0x07,
-    0x8e, 0xc0, 0x83, 0xaf, 0x00, 0x20, 0x04, 0x80,
-    0xa7, 0x88, 0x8b, 0x81, 0x9f, 0x19, 0x08, 0x82,
-    0xb7, 0x00, 0x0a, 0x00, 0x82, 0xb9, 0x39, 0x81,
-    0xbf, 0x85, 0xd1, 0x10, 0x8c, 0x06, 0x18, 0x28,
-    0x11, 0xb1, 0xbe, 0x8c, 0x80, 0xa1, 0xde, 0x04,
-    0x41, 0xbc, 0x00, 0x82, 0x8a, 0x82, 0x8c, 0x82,
-    0x8c, 0x82, 0x8c, 0x81, 0x8b, 0x27, 0x81, 0x89,
-    0x01, 0x01, 0x84, 0xb0, 0x20, 0x89, 0x00, 0x8c,
-    0x80, 0x8f, 0x8c, 0xb2, 0xa0, 0x4b, 0x8a, 0x81,
-    0xf0, 0x82, 0xfc, 0x80, 0x8e, 0x80, 0xdf, 0x9f,
-    0xae, 0x80, 0x41, 0xd4, 0x80, 0xa3, 0x1a, 0x24,
-    0x80, 0xdc, 0x85, 0xdc, 0x82, 0x60, 0x6f, 0x15,
-    0x80, 0x44, 0xe1, 0x85, 0x41, 0x0d, 0x80, 0xe1,
-    0x18, 0x89, 0x00, 0x9b, 0x83, 0xcf, 0x81, 0x8d,
-    0xa1, 0xcd, 0x80, 0x96, 0x82, 0xec, 0x0f, 0x02,
-    0x03, 0x80, 0x98, 0x81, 0x40, 0x9c, 0x81, 0x99,
-    0x91, 0x8c, 0x80, 0xa5, 0x87, 0x98, 0x8a, 0xad,
-    0x82, 0xaf, 0x01, 0x19, 0x81, 0x90, 0x80, 0x94,
-    0x81, 0xc1, 0x29, 0x09, 0x81, 0x8b, 0x07, 0x80,
-    0xa2, 0x80, 0x8a, 0x80, 0xb2, 0x00, 0x11, 0x0c,
-    0x08, 0x80, 0x9a, 0x80, 0x8d, 0x0c, 0x08, 0x80,
-    0xe3, 0x84, 0x40, 0x84, 0x01, 0x03, 0x80, 0x60,
-    0x4f, 0x2f, 0x80, 0x40, 0x92, 0x8f, 0x42, 0x3d,
-    0x8f, 0x10, 0x8b, 0x8f, 0xa1, 0x01, 0x80, 0x40,
-    0xa8, 0x06, 0x05, 0x80, 0x8a, 0x80, 0xa2, 0x00,
-    0x80, 0xae, 0x80, 0xac, 0x81, 0xc2, 0x80, 0x94,
-    0x82, 0x42, 0x00, 0x80, 0x40, 0xe1, 0x80, 0x40,
-    0x94, 0x84, 0x46, 0x85, 0x10, 0x0c, 0x83, 0xa7,
-    0x13, 0x80, 0x40, 0xa4, 0x81, 0x42, 0x3c, 0x83,
-    0x42, 0x1d, 0x8a, 0x40, 0xaf, 0x80, 0xb5, 0x8e,
+    0xfa, 0x86, 0x40, 0xce, 0x04, 0x80, 0xb0, 0xac,
+    0x00, 0x01, 0x01, 0x00, 0xab, 0x80, 0x8a, 0x85,
+    0x89, 0x8a, 0x00, 0xa2, 0x80, 0x89, 0x94, 0x8f,
+    0x80, 0xe4, 0x38, 0x89, 0x03, 0xa0, 0x00, 0x80,
+    0x9d, 0x9a, 0xda, 0x8a, 0xb9, 0x8a, 0x18, 0x08,
+    0x97, 0x97, 0xaa, 0x82, 0xf6, 0xaf, 0xb6, 0x00,
+    0x03, 0x3b, 0x02, 0x86, 0x89, 0x81, 0x8c, 0x80,
+    0x8e, 0x80, 0xb9, 0x03, 0x1f, 0x80, 0x93, 0x81,
+    0x99, 0x01, 0x81, 0xb8, 0x03, 0x0b, 0x09, 0x12,
+    0x80, 0x9d, 0x0a, 0x80, 0x8a, 0x81, 0xb8, 0x03,
+    0x20, 0x0b, 0x80, 0x93, 0x81, 0x95, 0x28, 0x80,
+    0xb9, 0x01, 0x00, 0x1f, 0x06, 0x81, 0x8a, 0x81,
+    0x9d, 0x80, 0xbc, 0x80, 0x8b, 0x80, 0xb1, 0x02,
+    0x80, 0xb8, 0x14, 0x10, 0x1e, 0x81, 0x8a, 0x81,
+    0x9c, 0x80, 0xb9, 0x01, 0x05, 0x04, 0x81, 0x93,
+    0x81, 0x9b, 0x81, 0xb8, 0x0b, 0x1f, 0x80, 0x93,
+    0x81, 0x9c, 0x80, 0xc7, 0x06, 0x10, 0x80, 0xd9,
+    0x01, 0x86, 0x8a, 0x88, 0xe1, 0x01, 0x88, 0x88,
+    0x00, 0x85, 0xc9, 0x81, 0x9a, 0x00, 0x00, 0x80,
+    0xb6, 0x8d, 0x04, 0x01, 0x84, 0x8a, 0x80, 0xa3,
+    0x88, 0x80, 0xe5, 0x18, 0x28, 0x09, 0x81, 0x98,
+    0x0b, 0x82, 0x8f, 0x83, 0x8c, 0x01, 0x0d, 0x80,
+    0x8e, 0x80, 0xdd, 0x80, 0x42, 0x5f, 0x82, 0x43,
+    0xb1, 0x82, 0x9c, 0x82, 0x9c, 0x81, 0x9d, 0x81,
+    0xbf, 0x08, 0x37, 0x01, 0x8a, 0x10, 0x20, 0xac,
+    0x83, 0xb3, 0x80, 0xc0, 0x81, 0xa1, 0x80, 0xf5,
+    0x13, 0x81, 0x88, 0x05, 0x82, 0x40, 0xda, 0x09,
+    0x80, 0xb9, 0x00, 0x30, 0x00, 0x01, 0x3d, 0x89,
+    0x08, 0xa6, 0x07, 0x90, 0xbe, 0x83, 0xaf, 0x00,
+    0x20, 0x04, 0x80, 0xa7, 0x88, 0x8b, 0x81, 0x9f,
+    0x19, 0x08, 0x82, 0xb7, 0x00, 0x0a, 0x00, 0x82,
+    0xb9, 0x39, 0x81, 0xbf, 0x85, 0xd1, 0x10, 0x8c,
+    0x06, 0x18, 0x28, 0x11, 0xb1, 0xbe, 0x8c, 0x80,
+    0xa1, 0xde, 0x04, 0x41, 0xbc, 0x00, 0x82, 0x8a,
+    0x82, 0x8c, 0x82, 0x8c, 0x82, 0x8c, 0x81, 0x8b,
+    0x27, 0x81, 0x89, 0x01, 0x01, 0x84, 0xb0, 0x20,
+    0x89, 0x00, 0x8c, 0x80, 0x8f, 0x8c, 0xb2, 0xa0,
+    0x4b, 0x8a, 0x81, 0xf0, 0x82, 0xfc, 0x80, 0x8e,
+    0x80, 0xdf, 0x9f, 0xae, 0x80, 0x41, 0xd4, 0x80,
+    0xa3, 0x1a, 0x24, 0x80, 0xdc, 0x85, 0xdc, 0x82,
+    0x60, 0x6f, 0x15, 0x80, 0x44, 0xe1, 0x85, 0x41,
+    0x0d, 0x80, 0xe1, 0x18, 0x89, 0x00, 0x9b, 0x83,
+    0xcf, 0x81, 0x8d, 0xa1, 0xcd, 0x80, 0x96, 0x82,
+    0xec, 0x0f, 0x02, 0x03, 0x80, 0x98, 0x0c, 0x80,
+    0x40, 0x96, 0x81, 0x99, 0x91, 0x8c, 0x80, 0xa5,
+    0x87, 0x98, 0x8a, 0xad, 0x82, 0xaf, 0x01, 0x19,
+    0x81, 0x90, 0x80, 0x94, 0x81, 0xc1, 0x29, 0x09,
+    0x81, 0x8b, 0x07, 0x80, 0xa2, 0x80, 0x8a, 0x80,
+    0xb2, 0x00, 0x11, 0x0c, 0x08, 0x80, 0x9a, 0x80,
+    0x8d, 0x0c, 0x08, 0x80, 0xe3, 0x84, 0x88, 0x82,
+    0xf8, 0x01, 0x03, 0x80, 0x60, 0x4f, 0x2f, 0x80,
+    0x40, 0x92, 0x8f, 0x42, 0x3d, 0x8f, 0x10, 0x8b,
+    0x8f, 0xa1, 0x01, 0x80, 0x40, 0xa8, 0x06, 0x05,
+    0x80, 0x8a, 0x80, 0xa2, 0x00, 0x80, 0xae, 0x80,
+    0xac, 0x81, 0xc2, 0x80, 0x94, 0x82, 0x42, 0x00,
+    0x80, 0x40, 0xe1, 0x80, 0x40, 0x94, 0x84, 0x46,
+    0x85, 0x10, 0x0c, 0x83, 0xa7, 0x13, 0x80, 0x40,
+    0xa4, 0x81, 0x42, 0x3c, 0x83, 0x41, 0x82, 0x81,
+    0x40, 0x98, 0x8a, 0x40, 0xaf, 0x80, 0xb5, 0x8e,
     0xb7, 0x82, 0xb0, 0x19, 0x09, 0x80, 0x8e, 0x80,
     0xb1, 0x82, 0xa3, 0x20, 0x87, 0xbd, 0x80, 0x8b,
-    0x81, 0xb3, 0x88, 0x89, 0x83, 0xe1, 0x11, 0x00,
-    0x0d, 0x80, 0x40, 0x9f, 0x02, 0x87, 0x94, 0x81,
-    0xb8, 0x0a, 0x80, 0xa4, 0x32, 0x84, 0x40, 0xc2,
-    0x39, 0x10, 0x80, 0x96, 0x80, 0xd3, 0x28, 0x03,
-    0x08, 0x81, 0x40, 0xed, 0x1d, 0x08, 0x81, 0x9a,
-    0x81, 0xd4, 0x39, 0x00, 0x81, 0xe9, 0x00, 0x01,
-    0x28, 0x80, 0xe4, 0x11, 0x18, 0x84, 0x41, 0x02,
-    0x88, 0x01, 0x41, 0x98, 0x19, 0x0b, 0x80, 0x9f,
-    0x89, 0xa7, 0x29, 0x1f, 0x80, 0x88, 0x29, 0x82,
-    0xad, 0x8c, 0x01, 0x41, 0x95, 0x30, 0x28, 0x80,
-    0xd1, 0x95, 0x0e, 0x01, 0x01, 0xf9, 0x2a, 0x00,
-    0x08, 0x30, 0x80, 0xc7, 0x0a, 0x00, 0x80, 0x41,
-    0x5a, 0x81, 0x55, 0x3a, 0x88, 0x60, 0x36, 0xb6,
-    0x84, 0xba, 0x86, 0x88, 0x83, 0x44, 0x0a, 0x80,
-    0xbe, 0x90, 0xbf, 0x08, 0x80, 0x60, 0x4c, 0xb8,
-    0x08, 0x83, 0x54, 0xc2, 0x82, 0x88, 0x8f, 0x0e,
-    0x9d, 0x83, 0x40, 0x93, 0x82, 0x47, 0xba, 0xb6,
-    0x83, 0xb1, 0x38, 0x8d, 0x80, 0x95, 0x20, 0x8e,
-    0x45, 0x4f, 0x30, 0x90, 0x0e, 0x01, 0x04, 0x41,
-    0x04, 0x8d, 0x41, 0xad, 0x83, 0x45, 0xdf, 0x86,
-    0xec, 0x87, 0x4a, 0xae, 0x84, 0x6c, 0x0c, 0x00,
-    0x80, 0x9d, 0xdf, 0xff, 0x40, 0xef,
+    0x81, 0xb3, 0x88, 0x89, 0x19, 0x80, 0xde, 0x11,
+    0x00, 0x0d, 0x80, 0x40, 0x9f, 0x02, 0x87, 0x94,
+    0x81, 0xb8, 0x0a, 0x80, 0xa4, 0x32, 0x84, 0x40,
+    0xc2, 0x39, 0x10, 0x80, 0x96, 0x80, 0xd3, 0x28,
+    0x03, 0x08, 0x81, 0x40, 0xed, 0x1d, 0x08, 0x81,
+    0x9a, 0x81, 0xd4, 0x39, 0x00, 0x81, 0xe9, 0x00,
+    0x01, 0x28, 0x80, 0xe4, 0x11, 0x18, 0x84, 0x41,
+    0x02, 0x88, 0x01, 0x40, 0xff, 0x08, 0x03, 0x80,
+    0x40, 0x8f, 0x19, 0x0b, 0x80, 0x9f, 0x89, 0xa7,
+    0x29, 0x1f, 0x80, 0x88, 0x29, 0x82, 0xad, 0x8c,
+    0x01, 0x41, 0x95, 0x30, 0x28, 0x80, 0xd1, 0x95,
+    0x0e, 0x01, 0x01, 0xf9, 0x2a, 0x00, 0x08, 0x30,
+    0x80, 0xc7, 0x0a, 0x00, 0x80, 0x41, 0x5a, 0x81,
+    0x55, 0x3a, 0x88, 0x60, 0x36, 0xb6, 0x84, 0xba,
+    0x86, 0x88, 0x83, 0x44, 0x0a, 0x80, 0xbe, 0x90,
+    0xbf, 0x08, 0x81, 0x60, 0x4c, 0xb7, 0x08, 0x83,
+    0x54, 0xc2, 0x82, 0x88, 0x8f, 0x0e, 0x9d, 0x83,
+    0x40, 0x93, 0x82, 0x47, 0xba, 0xb6, 0x83, 0xb1,
+    0x38, 0x8d, 0x80, 0x95, 0x20, 0x8e, 0x45, 0x4f,
+    0x30, 0x90, 0x0e, 0x01, 0x04, 0x41, 0x04, 0x8d,
+    0x41, 0xad, 0x83, 0x45, 0xdf, 0x86, 0xec, 0x87,
+    0x4a, 0xae, 0x84, 0x6c, 0x0c, 0x00, 0x80, 0x9d,
+    0xdf, 0xff, 0x40, 0xef,
 };
 
 static const uint8_t unicode_prop_Case_Ignorable_index[66] = {
-    0xc0, 0x05, 0x00, 0x2e, 0x08, 0x20, 0x52, 0x0a,
-    0x00, 0x05, 0x0c, 0x00, 0x4f, 0x0e, 0x20, 0x75,
-    0x10, 0x20, 0x44, 0x18, 0x00, 0x43, 0x1b, 0x00,
-    0x00, 0x1e, 0x00, 0x7e, 0x2c, 0x00, 0x7e, 0xa6,
-    0x40, 0x83, 0xa9, 0x20, 0xf7, 0xaa, 0x00, 0x41,
-    0xff, 0x20, 0x28, 0x0d, 0x01, 0x3f, 0x12, 0x41,
-    0xde, 0x15, 0x21, 0x5c, 0x1a, 0x01, 0xf5, 0x6a,
-    0x21, 0x37, 0xda, 0x01, 0x02, 0x00, 0x2e, 0xf0,
+    0xbe, 0x05, 0x00, 0xfe, 0x07, 0x00, 0x52, 0x0a,
+    0x20, 0x05, 0x0c, 0x20, 0x3b, 0x0e, 0x40, 0x61,
+    0x10, 0x40, 0x0f, 0x18, 0x20, 0x43, 0x1b, 0x60,
+    0x79, 0x1d, 0x00, 0xf1, 0x20, 0x00, 0x0d, 0xa6,
+    0x40, 0x2e, 0xa9, 0x20, 0xde, 0xaa, 0x00, 0x0f,
+    0xff, 0x20, 0xe7, 0x0a, 0x41, 0x82, 0x11, 0x21,
+    0xc4, 0x14, 0x61, 0x44, 0x19, 0x01, 0x48, 0x1d,
+    0x21, 0xa4, 0xbc, 0x01, 0x3e, 0xe1, 0x01, 0xf0,
     0x01, 0x0e,
 };
 
-static const uint8_t unicode_prop_ID_Start_table[1024] = {
+static const uint8_t unicode_prop_ID_Start_table[1045] = {
     0xc0, 0x99, 0x85, 0x99, 0xae, 0x80, 0x89, 0x03,
     0x04, 0x96, 0x80, 0x9e, 0x80, 0x41, 0xc9, 0x83,
     0x8b, 0x8d, 0x26, 0x00, 0x80, 0x40, 0x80, 0x20,
@@ -297,142 +301,146 @@ static const uint8_t unicode_prop_ID_Start_table[1024] = {
     0x89, 0x11, 0x80, 0x8f, 0x00, 0x9d, 0x9c, 0xd8,
     0x8a, 0x80, 0x97, 0xa0, 0x88, 0x0b, 0x04, 0x95,
     0x18, 0x88, 0x02, 0x80, 0x96, 0x98, 0x86, 0x8a,
-    0xb4, 0x94, 0x07, 0xc5, 0xb5, 0x10, 0x91, 0x06,
-    0x89, 0x8e, 0x8f, 0x1f, 0x09, 0x81, 0x95, 0x06,
-    0x00, 0x13, 0x10, 0x8f, 0x80, 0x8c, 0x08, 0x82,
-    0x8d, 0x81, 0x89, 0x07, 0x2b, 0x09, 0x95, 0x06,
-    0x01, 0x01, 0x01, 0x9e, 0x18, 0x80, 0x92, 0x82,
-    0x8f, 0x88, 0x02, 0x80, 0x95, 0x06, 0x01, 0x04,
-    0x10, 0x91, 0x80, 0x8e, 0x81, 0x96, 0x80, 0x8a,
-    0x39, 0x09, 0x95, 0x06, 0x01, 0x04, 0x10, 0x9d,
-    0x08, 0x82, 0x8e, 0x80, 0x90, 0x00, 0x2a, 0x10,
-    0x1a, 0x08, 0x00, 0x0a, 0x0a, 0x12, 0x8b, 0x95,
-    0x80, 0xb3, 0x38, 0x10, 0x96, 0x80, 0x8f, 0x10,
-    0x99, 0x14, 0x81, 0x9d, 0x03, 0x38, 0x10, 0x96,
-    0x80, 0x89, 0x04, 0x10, 0x9f, 0x00, 0x81, 0x8e,
-    0x81, 0x91, 0x38, 0x10, 0xa8, 0x08, 0x8f, 0x04,
-    0x17, 0x82, 0x97, 0x2c, 0x91, 0x82, 0x97, 0x80,
-    0x88, 0x00, 0x0e, 0xb9, 0xaf, 0x01, 0x8b, 0x86,
-    0xb9, 0x08, 0x00, 0x20, 0x97, 0x00, 0x80, 0x89,
-    0x01, 0x88, 0x01, 0x20, 0x80, 0x94, 0x83, 0x9f,
-    0x80, 0xbe, 0x38, 0xa3, 0x9a, 0x84, 0xf2, 0xaa,
-    0x93, 0x80, 0x8f, 0x2b, 0x1a, 0x02, 0x0e, 0x13,
-    0x8c, 0x8b, 0x80, 0x90, 0xa5, 0x00, 0x20, 0x81,
-    0xaa, 0x80, 0x41, 0x4c, 0x03, 0x0e, 0x00, 0x03,
-    0x81, 0xa8, 0x03, 0x81, 0xa0, 0x03, 0x0e, 0x00,
-    0x03, 0x81, 0x8e, 0x80, 0xb8, 0x03, 0x81, 0xc2,
-    0xa4, 0x8f, 0x8f, 0xd5, 0x0d, 0x82, 0x42, 0x6b,
-    0x81, 0x90, 0x80, 0x99, 0x84, 0xca, 0x82, 0x8a,
-    0x86, 0x8c, 0x03, 0x8d, 0x91, 0x8d, 0x91, 0x8d,
-    0x8c, 0x02, 0x8e, 0xb3, 0xa2, 0x03, 0x80, 0xc2,
-    0xd8, 0x86, 0xa8, 0x00, 0x84, 0xc5, 0x89, 0x9e,
-    0xb0, 0x9d, 0x0c, 0x8a, 0xab, 0x83, 0x99, 0xb5,
-    0x96, 0x88, 0xb4, 0xd1, 0x80, 0xdc, 0xae, 0x90,
-    0x86, 0xb6, 0x9d, 0x8c, 0x81, 0x89, 0xab, 0x99,
-    0xa3, 0xa8, 0x82, 0x89, 0xa3, 0x81, 0x88, 0x86,
-    0xaa, 0x0a, 0xa8, 0x18, 0x28, 0x0a, 0x04, 0x40,
-    0xbf, 0xbf, 0x41, 0x15, 0x0d, 0x81, 0xa5, 0x0d,
-    0x0f, 0x00, 0x00, 0x00, 0x80, 0x9e, 0x81, 0xb4,
-    0x06, 0x00, 0x12, 0x06, 0x13, 0x0d, 0x83, 0x8c,
-    0x22, 0x06, 0xf3, 0x80, 0x8c, 0x80, 0x8f, 0x8c,
-    0xe4, 0x03, 0x01, 0x89, 0x00, 0x0d, 0x28, 0x00,
-    0x00, 0x80, 0x8f, 0x0b, 0x24, 0x18, 0x90, 0xa8,
-    0x4a, 0x76, 0xae, 0x80, 0xae, 0x80, 0x40, 0x84,
-    0x2b, 0x11, 0x8b, 0xa5, 0x00, 0x20, 0x81, 0xb7,
-    0x30, 0x8f, 0x96, 0x88, 0x30, 0x30, 0x30, 0x30,
-    0x30, 0x30, 0x30, 0x86, 0x42, 0x25, 0x82, 0x98,
-    0x88, 0x34, 0x0c, 0x83, 0xd5, 0x1c, 0x80, 0xd9,
-    0x03, 0x84, 0xaa, 0x80, 0xdd, 0x90, 0x9a, 0xb4,
-    0x8f, 0x41, 0xff, 0x59, 0xb5, 0xc9, 0x60, 0x51,
-    0xef, 0x8f, 0x44, 0x8c, 0xc2, 0xad, 0x81, 0x41,
-    0x0c, 0x82, 0x8f, 0x89, 0x81, 0x93, 0xae, 0x8f,
-    0x9e, 0x81, 0xcf, 0xa6, 0x88, 0x81, 0xe6, 0x81,
-    0xb4, 0x0c, 0xaf, 0x8a, 0x02, 0x03, 0x80, 0x96,
-    0x9c, 0xb3, 0x8d, 0xb1, 0xbd, 0x2a, 0x00, 0x81,
-    0x8a, 0x9b, 0x89, 0x96, 0x98, 0x9c, 0x86, 0xae,
-    0x9b, 0x80, 0x8f, 0x20, 0x89, 0x89, 0x20, 0xa8,
-    0x96, 0x10, 0x87, 0x93, 0x96, 0x10, 0x82, 0xb1,
-    0x00, 0x11, 0x0c, 0x08, 0x00, 0x97, 0x11, 0x8a,
-    0x32, 0x8b, 0x29, 0x29, 0x85, 0x88, 0x30, 0x30,
-    0xaa, 0x80, 0x8b, 0x87, 0xf2, 0x9c, 0x60, 0x2b,
-    0xa3, 0x8b, 0x96, 0x83, 0xb0, 0x60, 0x21, 0x03,
-    0x41, 0x6d, 0x81, 0xe9, 0xa5, 0x86, 0x8b, 0x24,
-    0x00, 0x89, 0x80, 0x8c, 0x04, 0x00, 0x01, 0x01,
-    0x80, 0xeb, 0xa0, 0x41, 0x6a, 0x91, 0xbf, 0x81,
-    0xb5, 0xa7, 0x8b, 0xf3, 0x20, 0x40, 0x86, 0xa3,
-    0x99, 0x85, 0x99, 0x8a, 0xd8, 0x15, 0x0d, 0x0d,
-    0x0a, 0xa2, 0x8b, 0x80, 0x99, 0x80, 0x92, 0x01,
-    0x80, 0x8e, 0x81, 0x8d, 0xa1, 0xfa, 0xc4, 0xb4,
-    0x41, 0x0a, 0x9c, 0x82, 0xb0, 0xae, 0x9f, 0x8c,
-    0x9d, 0x84, 0xa5, 0x89, 0x9d, 0x81, 0xa3, 0x1f,
-    0x04, 0xa9, 0x40, 0x9d, 0x91, 0xa3, 0x83, 0xa3,
-    0x83, 0xa7, 0x87, 0xb3, 0x40, 0x9b, 0x41, 0x36,
-    0x88, 0x95, 0x89, 0x87, 0x40, 0x97, 0x29, 0x00,
-    0xab, 0x01, 0x10, 0x81, 0x96, 0x89, 0x96, 0x88,
-    0x9e, 0xc0, 0x92, 0x01, 0x89, 0x95, 0x89, 0x99,
-    0xc5, 0xb7, 0x29, 0xbf, 0x80, 0x8e, 0x18, 0x10,
-    0x9c, 0xa9, 0x9c, 0x82, 0x9c, 0xa2, 0x38, 0x9b,
-    0x9a, 0xb5, 0x89, 0x95, 0x89, 0x92, 0x8c, 0x91,
-    0xed, 0xc8, 0xb6, 0xb2, 0x8c, 0xb2, 0x8c, 0xa3,
-    0x41, 0xdb, 0x9c, 0x89, 0x07, 0x95, 0x40, 0x99,
-    0x96, 0x8b, 0xb4, 0xca, 0xac, 0x9f, 0x98, 0x99,
-    0xa3, 0x9c, 0x80, 0x8a, 0xa2, 0x10, 0x8b, 0xaf,
-    0x8d, 0x83, 0x94, 0x00, 0x80, 0xa2, 0x91, 0x80,
-    0x98, 0xd3, 0x30, 0x00, 0x18, 0x8e, 0x80, 0x89,
-    0x86, 0xae, 0xa5, 0x39, 0x09, 0x95, 0x06, 0x01,
-    0x04, 0x10, 0x91, 0x80, 0x8b, 0x84, 0x40, 0x9d,
-    0xb4, 0x91, 0x83, 0x93, 0x80, 0x9f, 0xaf, 0x93,
-    0x08, 0x80, 0x40, 0xb7, 0xae, 0xa8, 0x83, 0xa3,
-    0xaf, 0x93, 0x80, 0xba, 0xaa, 0x8c, 0x80, 0xc6,
-    0x9a, 0x40, 0xe4, 0xab, 0xf3, 0xbf, 0x9e, 0x80,
-    0x40, 0x9f, 0x39, 0xa6, 0x8f, 0x00, 0x80, 0x9b,
-    0x80, 0x89, 0xa7, 0x30, 0x94, 0x80, 0x8a, 0xad,
-    0x92, 0x80, 0xa1, 0xb8, 0x41, 0x06, 0x88, 0x80,
-    0xa4, 0x90, 0x80, 0xb0, 0x9d, 0xef, 0x30, 0x08,
-    0xa5, 0x94, 0x80, 0x98, 0x28, 0x08, 0x9f, 0x8d,
-    0x80, 0x41, 0x46, 0x92, 0x41, 0x0c, 0x43, 0x99,
-    0xe5, 0xee, 0x90, 0x40, 0xc3, 0x4a, 0xbb, 0x44,
-    0x2e, 0x4f, 0xd0, 0x42, 0x46, 0x60, 0x21, 0xb8,
-    0x42, 0x38, 0x86, 0x9e, 0xf0, 0x9d, 0x91, 0xaf,
-    0x8f, 0x83, 0x9e, 0x94, 0x84, 0x92, 0x42, 0xaf,
-    0xbf, 0xff, 0xca, 0x20, 0xc1, 0x8c, 0xbf, 0x08,
-    0x80, 0x9b, 0x57, 0xf7, 0x87, 0x42, 0xf2, 0x60,
-    0x25, 0x0c, 0x41, 0x1e, 0xb0, 0x82, 0x90, 0x1f,
-    0x41, 0x8b, 0x49, 0x03, 0xea, 0x84, 0x8c, 0x82,
-    0x88, 0x86, 0x89, 0x57, 0x65, 0xd4, 0x80, 0xc6,
-    0x01, 0x08, 0x09, 0x0b, 0x80, 0x8b, 0x00, 0x06,
-    0x80, 0xc0, 0x03, 0x0f, 0x06, 0x80, 0x9b, 0x03,
-    0x04, 0x00, 0x16, 0x80, 0x41, 0x53, 0x81, 0x98,
-    0x80, 0x98, 0x80, 0x9e, 0x80, 0x98, 0x80, 0x9e,
-    0x80, 0x98, 0x80, 0x9e, 0x80, 0x98, 0x80, 0x9e,
-    0x80, 0x98, 0x07, 0x49, 0x33, 0xac, 0x89, 0x86,
-    0x8f, 0x80, 0x41, 0x70, 0xab, 0x45, 0x13, 0x40,
-    0xc4, 0xba, 0xc3, 0x30, 0x44, 0xb3, 0x18, 0x9a,
-    0x01, 0x00, 0x08, 0x80, 0x89, 0x03, 0x00, 0x00,
-    0x28, 0x18, 0x00, 0x00, 0x02, 0x01, 0x00, 0x08,
-    0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0b, 0x06,
-    0x03, 0x03, 0x00, 0x80, 0x89, 0x80, 0x90, 0x22,
-    0x04, 0x80, 0x90, 0x51, 0x43, 0x60, 0xa6, 0xd6,
-    0xa8, 0x50, 0x34, 0x8a, 0x40, 0xdd, 0x81, 0x56,
-    0x81, 0x8d, 0x5d, 0x30, 0x4c, 0x1e, 0x42, 0x1d,
+    0xb4, 0x94, 0x80, 0x91, 0xbb, 0xb5, 0x10, 0x91,
+    0x06, 0x89, 0x8e, 0x8f, 0x1f, 0x09, 0x81, 0x95,
+    0x06, 0x00, 0x13, 0x10, 0x8f, 0x80, 0x8c, 0x08,
+    0x82, 0x8d, 0x81, 0x89, 0x07, 0x2b, 0x09, 0x95,
+    0x06, 0x01, 0x01, 0x01, 0x9e, 0x18, 0x80, 0x92,
+    0x82, 0x8f, 0x88, 0x02, 0x80, 0x95, 0x06, 0x01,
+    0x04, 0x10, 0x91, 0x80, 0x8e, 0x81, 0x96, 0x80,
+    0x8a, 0x39, 0x09, 0x95, 0x06, 0x01, 0x04, 0x10,
+    0x9d, 0x08, 0x82, 0x8e, 0x80, 0x90, 0x00, 0x2a,
+    0x10, 0x1a, 0x08, 0x00, 0x0a, 0x0a, 0x12, 0x8b,
+    0x95, 0x80, 0xb3, 0x38, 0x10, 0x96, 0x80, 0x8f,
+    0x10, 0x99, 0x14, 0x81, 0x9d, 0x03, 0x38, 0x10,
+    0x96, 0x80, 0x89, 0x04, 0x10, 0x9f, 0x00, 0x81,
+    0x8e, 0x81, 0x90, 0x88, 0x02, 0x80, 0xa8, 0x08,
+    0x8f, 0x04, 0x17, 0x82, 0x97, 0x2c, 0x91, 0x82,
+    0x97, 0x80, 0x88, 0x00, 0x0e, 0xb9, 0xaf, 0x01,
+    0x8b, 0x86, 0xb9, 0x08, 0x00, 0x20, 0x97, 0x00,
+    0x80, 0x89, 0x01, 0x88, 0x01, 0x20, 0x80, 0x94,
+    0x83, 0x9f, 0x80, 0xbe, 0x38, 0xa3, 0x9a, 0x84,
+    0xf2, 0xaa, 0x93, 0x80, 0x8f, 0x2b, 0x1a, 0x02,
+    0x0e, 0x13, 0x8c, 0x8b, 0x80, 0x90, 0xa5, 0x00,
+    0x20, 0x81, 0xaa, 0x80, 0x41, 0x4c, 0x03, 0x0e,
+    0x00, 0x03, 0x81, 0xa8, 0x03, 0x81, 0xa0, 0x03,
+    0x0e, 0x00, 0x03, 0x81, 0x8e, 0x80, 0xb8, 0x03,
+    0x81, 0xc2, 0xa4, 0x8f, 0x8f, 0xd5, 0x0d, 0x82,
+    0x42, 0x6b, 0x81, 0x90, 0x80, 0x99, 0x84, 0xca,
+    0x82, 0x8a, 0x86, 0x8c, 0x03, 0x8d, 0x91, 0x8d,
+    0x91, 0x8d, 0x8c, 0x02, 0x8e, 0xb3, 0xa2, 0x03,
+    0x80, 0xc2, 0xd8, 0x86, 0xa8, 0x00, 0x84, 0xc5,
+    0x89, 0x9e, 0xb0, 0x9d, 0x0c, 0x8a, 0xab, 0x83,
+    0x99, 0xb5, 0x96, 0x88, 0xb4, 0xd1, 0x80, 0xdc,
+    0xae, 0x90, 0x86, 0xb6, 0x9d, 0x8c, 0x81, 0x89,
+    0xab, 0x99, 0xa3, 0xa8, 0x82, 0x89, 0xa3, 0x81,
+    0x88, 0x86, 0xaa, 0x0a, 0xa8, 0x18, 0x28, 0x0a,
+    0x04, 0x40, 0xbf, 0xbf, 0x41, 0x15, 0x0d, 0x81,
+    0xa5, 0x0d, 0x0f, 0x00, 0x00, 0x00, 0x80, 0x9e,
+    0x81, 0xb4, 0x06, 0x00, 0x12, 0x06, 0x13, 0x0d,
+    0x83, 0x8c, 0x22, 0x06, 0xf3, 0x80, 0x8c, 0x80,
+    0x8f, 0x8c, 0xe4, 0x03, 0x01, 0x89, 0x00, 0x0d,
+    0x28, 0x00, 0x00, 0x80, 0x8f, 0x0b, 0x24, 0x18,
+    0x90, 0xa8, 0x4a, 0x76, 0xae, 0x80, 0xae, 0x80,
+    0x40, 0x84, 0x2b, 0x11, 0x8b, 0xa5, 0x00, 0x20,
+    0x81, 0xb7, 0x30, 0x8f, 0x96, 0x88, 0x30, 0x30,
+    0x30, 0x30, 0x30, 0x30, 0x30, 0x86, 0x42, 0x25,
+    0x82, 0x98, 0x88, 0x34, 0x0c, 0x83, 0xd5, 0x1c,
+    0x80, 0xd9, 0x03, 0x84, 0xaa, 0x80, 0xdd, 0x90,
+    0x9f, 0xaf, 0x8f, 0x41, 0xff, 0x59, 0xbf, 0xbf,
+    0x60, 0x51, 0xfc, 0x82, 0x44, 0x8c, 0xc2, 0xad,
+    0x81, 0x41, 0x0c, 0x82, 0x8f, 0x89, 0x81, 0x93,
+    0xae, 0x8f, 0x9e, 0x81, 0xcf, 0xa6, 0x88, 0x81,
+    0xe6, 0x81, 0xb4, 0x81, 0x88, 0xa9, 0x8c, 0x02,
+    0x03, 0x80, 0x96, 0x9c, 0xb3, 0x8d, 0xb1, 0xbd,
+    0x2a, 0x00, 0x81, 0x8a, 0x9b, 0x89, 0x96, 0x98,
+    0x9c, 0x86, 0xae, 0x9b, 0x80, 0x8f, 0x20, 0x89,
+    0x89, 0x20, 0xa8, 0x96, 0x10, 0x87, 0x93, 0x96,
+    0x10, 0x82, 0xb1, 0x00, 0x11, 0x0c, 0x08, 0x00,
+    0x97, 0x11, 0x8a, 0x32, 0x8b, 0x29, 0x29, 0x85,
+    0x88, 0x30, 0x30, 0xaa, 0x80, 0x8d, 0x85, 0xf2,
+    0x9c, 0x60, 0x2b, 0xa3, 0x8b, 0x96, 0x83, 0xb0,
+    0x60, 0x21, 0x03, 0x41, 0x6d, 0x81, 0xe9, 0xa5,
+    0x86, 0x8b, 0x24, 0x00, 0x89, 0x80, 0x8c, 0x04,
+    0x00, 0x01, 0x01, 0x80, 0xeb, 0xa0, 0x41, 0x6a,
+    0x91, 0xbf, 0x81, 0xb5, 0xa7, 0x8b, 0xf3, 0x20,
+    0x40, 0x86, 0xa3, 0x99, 0x85, 0x99, 0x8a, 0xd8,
+    0x15, 0x0d, 0x0d, 0x0a, 0xa2, 0x8b, 0x80, 0x99,
+    0x80, 0x92, 0x01, 0x80, 0x8e, 0x81, 0x8d, 0xa1,
+    0xfa, 0xc4, 0xb4, 0x41, 0x0a, 0x9c, 0x82, 0xb0,
+    0xae, 0x9f, 0x8c, 0x9d, 0x84, 0xa5, 0x89, 0x9d,
+    0x81, 0xa3, 0x1f, 0x04, 0xa9, 0x40, 0x9d, 0x91,
+    0xa3, 0x83, 0xa3, 0x83, 0xa7, 0x87, 0xb3, 0x40,
+    0x9b, 0x41, 0x36, 0x88, 0x95, 0x89, 0x87, 0x40,
+    0x97, 0x29, 0x00, 0xab, 0x01, 0x10, 0x81, 0x96,
+    0x89, 0x96, 0x88, 0x9e, 0xc0, 0x92, 0x01, 0x89,
+    0x95, 0x89, 0x99, 0xc5, 0xb7, 0x29, 0xbf, 0x80,
+    0x8e, 0x18, 0x10, 0x9c, 0xa9, 0x9c, 0x82, 0x9c,
+    0xa2, 0x38, 0x9b, 0x9a, 0xb5, 0x89, 0x95, 0x89,
+    0x92, 0x8c, 0x91, 0xed, 0xc8, 0xb6, 0xb2, 0x8c,
+    0xb2, 0x8c, 0xa3, 0x41, 0x5b, 0xa9, 0x29, 0xcd,
+    0x9c, 0x89, 0x07, 0x95, 0xe9, 0x94, 0x9a, 0x96,
+    0x8b, 0xb4, 0xca, 0xac, 0x9f, 0x98, 0x99, 0xa3,
+    0x9c, 0x01, 0x07, 0xa2, 0x10, 0x8b, 0xaf, 0x8d,
+    0x83, 0x94, 0x00, 0x80, 0xa2, 0x91, 0x80, 0x98,
+    0xd3, 0x30, 0x00, 0x18, 0x8e, 0x80, 0x89, 0x86,
+    0xae, 0xa5, 0x39, 0x09, 0x95, 0x06, 0x01, 0x04,
+    0x10, 0x91, 0x80, 0x8b, 0x84, 0x40, 0x9d, 0xb4,
+    0x91, 0x83, 0x93, 0x82, 0x9d, 0xaf, 0x93, 0x08,
+    0x80, 0x40, 0xb7, 0xae, 0xa8, 0x83, 0xa3, 0xaf,
+    0x93, 0x80, 0xba, 0xaa, 0x8c, 0x80, 0xc6, 0x9a,
+    0x40, 0xe4, 0xab, 0xf3, 0xbf, 0x9e, 0x39, 0x01,
+    0x38, 0x08, 0x97, 0x8e, 0x00, 0x80, 0xdd, 0x39,
+    0xa6, 0x8f, 0x00, 0x80, 0x9b, 0x80, 0x89, 0xa7,
+    0x30, 0x94, 0x80, 0x8a, 0xad, 0x92, 0x80, 0xa1,
+    0xb8, 0x41, 0x06, 0x88, 0x80, 0xa4, 0x90, 0x80,
+    0xb0, 0x9d, 0xef, 0x30, 0x08, 0xa5, 0x94, 0x80,
+    0x98, 0x28, 0x08, 0x9f, 0x8d, 0x80, 0x41, 0x46,
+    0x92, 0x40, 0xbc, 0x80, 0xce, 0x43, 0x99, 0xe5,
+    0xee, 0x90, 0x40, 0xc3, 0x4a, 0xbb, 0x44, 0x2e,
+    0x4f, 0xd0, 0x42, 0x46, 0x60, 0x21, 0xb8, 0x42,
+    0x38, 0x86, 0x9e, 0xf0, 0x9d, 0x91, 0xaf, 0x8f,
+    0x83, 0x9e, 0x94, 0x84, 0x92, 0x42, 0xaf, 0xbf,
+    0xff, 0xca, 0x20, 0xc1, 0x8c, 0xbf, 0x08, 0x80,
+    0x9b, 0x57, 0xf7, 0x87, 0x44, 0xd5, 0xa9, 0x88,
+    0x60, 0x22, 0xf6, 0x41, 0x1e, 0xb0, 0x82, 0x90,
+    0x1f, 0x41, 0x8b, 0x49, 0x03, 0xea, 0x84, 0x8c,
+    0x82, 0x88, 0x86, 0x89, 0x57, 0x65, 0xd4, 0x80,
+    0xc6, 0x01, 0x08, 0x09, 0x0b, 0x80, 0x8b, 0x00,
+    0x06, 0x80, 0xc0, 0x03, 0x0f, 0x06, 0x80, 0x9b,
+    0x03, 0x04, 0x00, 0x16, 0x80, 0x41, 0x53, 0x81,
+    0x98, 0x80, 0x98, 0x80, 0x9e, 0x80, 0x98, 0x80,
+    0x9e, 0x80, 0x98, 0x80, 0x9e, 0x80, 0x98, 0x80,
+    0x9e, 0x80, 0x98, 0x07, 0x49, 0x33, 0xac, 0x89,
+    0x86, 0x8f, 0x80, 0x41, 0x70, 0xab, 0x45, 0x13,
+    0x40, 0xc4, 0xba, 0xc3, 0x30, 0x44, 0xb3, 0x18,
+    0x9a, 0x01, 0x00, 0x08, 0x80, 0x89, 0x03, 0x00,
+    0x00, 0x28, 0x18, 0x00, 0x00, 0x02, 0x01, 0x00,
+    0x08, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0b,
+    0x06, 0x03, 0x03, 0x00, 0x80, 0x89, 0x80, 0x90,
+    0x22, 0x04, 0x80, 0x90, 0x51, 0x43, 0x60, 0xa6,
+    0xdd, 0xa1, 0x50, 0x34, 0x8a, 0x40, 0xdd, 0x81,
+    0x56, 0x81, 0x8d, 0x5d, 0x30, 0x4c, 0x1e, 0x42,
+    0x1d, 0x45, 0xe1, 0x53, 0x4a,
 };
 
-static const uint8_t unicode_prop_ID_Start_index[96] = {
-    0xf6, 0x03, 0x20, 0xa6, 0x07, 0x00, 0xb1, 0x09,
-    0x00, 0xba, 0x0a, 0x00, 0xd1, 0x0b, 0x20, 0x62,
-    0x0d, 0x40, 0x01, 0x0f, 0x20, 0x5e, 0x12, 0x00,
-    0xf9, 0x16, 0x00, 0x17, 0x1a, 0x20, 0xc0, 0x1d,
-    0x20, 0x9d, 0x20, 0x00, 0x68, 0x2d, 0x00, 0x00,
-    0x32, 0x20, 0xc0, 0xa7, 0x20, 0x29, 0xaa, 0x00,
-    0xa4, 0xd7, 0x20, 0xc8, 0xfd, 0x20, 0x75, 0x01,
-    0x01, 0x37, 0x07, 0x01, 0x36, 0x0a, 0x21, 0xf7,
-    0x0f, 0x21, 0xa9, 0x12, 0x01, 0x30, 0x16, 0x21,
-    0x8a, 0x1a, 0x01, 0x9a, 0x23, 0x01, 0x80, 0x6e,
-    0x21, 0x89, 0xbc, 0x21, 0xc1, 0xd6, 0x01, 0xc5,
-    0xe8, 0x21, 0x73, 0xee, 0x01, 0x1e, 0xfa, 0x02,
+static const uint8_t unicode_prop_ID_Start_index[99] = {
+    0xf6, 0x03, 0x20, 0xa6, 0x07, 0x00, 0xa9, 0x09,
+    0x00, 0xb4, 0x0a, 0x00, 0xba, 0x0b, 0x00, 0x3e,
+    0x0d, 0x00, 0xe0, 0x0e, 0x20, 0x57, 0x12, 0x00,
+    0xeb, 0x16, 0x00, 0xca, 0x19, 0x20, 0xc0, 0x1d,
+    0x60, 0x80, 0x20, 0x00, 0x2e, 0x2d, 0x00, 0xc0,
+    0x31, 0x20, 0x89, 0xa7, 0x20, 0xf0, 0xa9, 0x00,
+    0xe3, 0xab, 0x00, 0x3e, 0xfd, 0x00, 0xfb, 0x00,
+    0x21, 0x37, 0x07, 0x61, 0x01, 0x0a, 0x01, 0x1d,
+    0x0f, 0x21, 0x2c, 0x12, 0x01, 0xc8, 0x14, 0x21,
+    0xd1, 0x19, 0x21, 0x47, 0x1d, 0x01, 0x39, 0x6a,
+    0x21, 0x09, 0x8d, 0x01, 0xbc, 0xd4, 0x01, 0xa9,
+    0xd7, 0x21, 0x3a, 0xee, 0x01, 0xde, 0xa6, 0x22,
+    0x4b, 0x13, 0x03,
 };
 
-static const uint8_t unicode_prop_ID_Continue1_table[607] = {
+static const uint8_t unicode_prop_ID_Continue1_table[626] = {
     0xaf, 0x89, 0xa4, 0x80, 0xd6, 0x80, 0x42, 0x47,
     0xef, 0x96, 0x80, 0x40, 0xfa, 0x84, 0x41, 0x08,
     0xac, 0x00, 0x01, 0x01, 0x00, 0xc7, 0x8a, 0xaf,
@@ -445,14 +453,14 @@ static const uint8_t unicode_prop_ID_Continue1_table[607] = {
     0x09, 0x89, 0x8d, 0x01, 0x82, 0xb7, 0x00, 0x23,
     0x09, 0x12, 0x80, 0x93, 0x8b, 0x10, 0x8a, 0x82,
     0xb7, 0x00, 0x38, 0x10, 0x82, 0x93, 0x09, 0x89,
-    0x89, 0x28, 0x82, 0xb7, 0x00, 0x31, 0x09, 0x17,
-    0x81, 0x89, 0x09, 0x89, 0x91, 0x80, 0xba, 0x22,
+    0x89, 0x28, 0x82, 0xb7, 0x00, 0x31, 0x09, 0x16,
+    0x82, 0x89, 0x09, 0x89, 0x91, 0x80, 0xba, 0x22,
     0x10, 0x83, 0x88, 0x80, 0x8d, 0x89, 0x8f, 0x84,
     0xb8, 0x30, 0x10, 0x1e, 0x81, 0x8a, 0x09, 0x89,
     0x90, 0x82, 0xb7, 0x00, 0x30, 0x10, 0x1e, 0x81,
     0x8a, 0x09, 0x89, 0x8f, 0x83, 0xb6, 0x08, 0x30,
-    0x10, 0x83, 0x88, 0x80, 0x89, 0x09, 0x89, 0x91,
-    0x81, 0xc5, 0x03, 0x28, 0x00, 0x3d, 0x89, 0x09,
+    0x10, 0x83, 0x88, 0x80, 0x89, 0x09, 0x89, 0x90,
+    0x82, 0xc5, 0x03, 0x28, 0x00, 0x3d, 0x89, 0x09,
     0xbc, 0x01, 0x86, 0x8b, 0x38, 0x89, 0xd6, 0x01,
     0x88, 0x8a, 0x29, 0x89, 0xbd, 0x0d, 0x89, 0x8a,
     0x00, 0x00, 0x03, 0x81, 0xb0, 0x93, 0x01, 0x84,
@@ -464,67 +472,70 @@ static const uint8_t unicode_prop_ID_Continue1_table[607] = {
     0x89, 0x40, 0x8e, 0x80, 0xf5, 0x8b, 0x83, 0x8b,
     0x89, 0x89, 0xff, 0x8a, 0xbb, 0x84, 0xb8, 0x89,
     0x80, 0x9c, 0x81, 0x8a, 0x85, 0x89, 0x95, 0x8d,
-    0xc1, 0x84, 0xae, 0x90, 0x8a, 0x89, 0x90, 0x88,
-    0x8b, 0x82, 0x9d, 0x8c, 0x81, 0x89, 0xab, 0x8d,
-    0xaf, 0x93, 0x87, 0x89, 0x85, 0x89, 0xf5, 0x10,
-    0x94, 0x18, 0x28, 0x0a, 0x40, 0xc5, 0xb9, 0x04,
-    0x42, 0x3e, 0x81, 0x92, 0x80, 0xfa, 0x8c, 0x18,
-    0x82, 0x8b, 0x4b, 0xfd, 0x82, 0x40, 0x8c, 0x80,
-    0xdf, 0x9f, 0x42, 0x29, 0x85, 0xe8, 0x81, 0x60,
-    0x75, 0x84, 0x89, 0xc4, 0x03, 0x89, 0x9f, 0x81,
-    0xcf, 0x81, 0x41, 0x0f, 0x02, 0x03, 0x80, 0x96,
-    0x84, 0xd7, 0x81, 0xb1, 0x91, 0x89, 0x89, 0x85,
-    0x91, 0x8c, 0x8a, 0x9b, 0x87, 0x98, 0x8c, 0xab,
-    0x83, 0xae, 0x8d, 0x8e, 0x89, 0x8a, 0x80, 0x89,
-    0x89, 0xae, 0x8d, 0x8b, 0x07, 0x09, 0x89, 0xa0,
-    0x82, 0xb1, 0x00, 0x11, 0x0c, 0x08, 0x80, 0xa8,
-    0x24, 0x81, 0x40, 0xeb, 0x38, 0x09, 0x89, 0x60,
-    0x4f, 0x23, 0x80, 0x42, 0xe0, 0x8f, 0x8f, 0x8f,
-    0x11, 0x97, 0x82, 0x40, 0xbf, 0x89, 0xa4, 0x80,
-    0x42, 0xbc, 0x80, 0x40, 0xe1, 0x80, 0x40, 0x94,
-    0x84, 0x41, 0x24, 0x89, 0x45, 0x56, 0x10, 0x0c,
-    0x83, 0xa7, 0x13, 0x80, 0x40, 0xa4, 0x81, 0x42,
-    0x3c, 0x1f, 0x89, 0x42, 0x0b, 0x8a, 0x40, 0xae,
-    0x82, 0xb4, 0x8e, 0x9e, 0x89, 0x8e, 0x83, 0xac,
-    0x8a, 0xb4, 0x89, 0x2a, 0xa3, 0x8d, 0x80, 0x89,
-    0x21, 0xab, 0x80, 0x8b, 0x82, 0xaf, 0x8d, 0x3b,
-    0x82, 0x89, 0xd1, 0x8b, 0x28, 0x40, 0x9f, 0x8b,
-    0x84, 0x89, 0x2b, 0xb6, 0x08, 0x31, 0x09, 0x82,
-    0x88, 0x80, 0x89, 0x09, 0x32, 0x84, 0x40, 0xbf,
-    0x91, 0x88, 0x89, 0x18, 0xd0, 0x93, 0x8b, 0x89,
-    0x40, 0xd4, 0x31, 0x88, 0x9a, 0x81, 0xd1, 0x90,
-    0x8e, 0x89, 0xd0, 0x8c, 0x87, 0x89, 0xd2, 0x8e,
-    0x83, 0x89, 0x40, 0xf1, 0x8e, 0x40, 0xa4, 0x89,
-    0x40, 0xe6, 0x31, 0x32, 0x80, 0x9b, 0x89, 0xa7,
-    0x30, 0x1f, 0x80, 0x88, 0x8a, 0xad, 0x8f, 0x41,
-    0x94, 0x38, 0x87, 0x8f, 0x89, 0xb7, 0x95, 0x80,
-    0x8d, 0xf9, 0x2a, 0x00, 0x08, 0x30, 0x07, 0x89,
-    0xaf, 0x20, 0x08, 0x27, 0x89, 0x41, 0x48, 0x83,
-    0x60, 0x4b, 0x68, 0x89, 0x40, 0x85, 0x84, 0xba,
-    0x86, 0x98, 0x89, 0x43, 0xf4, 0x00, 0xb6, 0x33,
-    0x60, 0x4d, 0x09, 0x81, 0x54, 0xc5, 0x22, 0x2f,
+    0x01, 0xbe, 0x84, 0xae, 0x90, 0x8a, 0x89, 0x90,
+    0x88, 0x8b, 0x82, 0x9d, 0x8c, 0x81, 0x89, 0xab,
+    0x8d, 0xaf, 0x93, 0x87, 0x89, 0x85, 0x89, 0xf5,
+    0x10, 0x94, 0x18, 0x28, 0x0a, 0x40, 0xc5, 0xb9,
+    0x04, 0x42, 0x3e, 0x81, 0x92, 0x80, 0xfa, 0x8c,
+    0x18, 0x82, 0x8b, 0x4b, 0xfd, 0x82, 0x40, 0x8c,
+    0x80, 0xdf, 0x9f, 0x42, 0x29, 0x85, 0xe8, 0x81,
+    0x60, 0x75, 0x84, 0x89, 0xc4, 0x03, 0x89, 0x9f,
+    0x81, 0xcf, 0x81, 0x41, 0x0f, 0x02, 0x03, 0x80,
+    0x96, 0x23, 0x80, 0xd2, 0x81, 0xb1, 0x91, 0x89,
+    0x89, 0x85, 0x91, 0x8c, 0x8a, 0x9b, 0x87, 0x98,
+    0x8c, 0xab, 0x83, 0xae, 0x8d, 0x8e, 0x89, 0x8a,
+    0x80, 0x89, 0x89, 0xae, 0x8d, 0x8b, 0x07, 0x09,
+    0x89, 0xa0, 0x82, 0xb1, 0x00, 0x11, 0x0c, 0x08,
+    0x80, 0xa8, 0x24, 0x81, 0x40, 0xeb, 0x38, 0x09,
+    0x89, 0x60, 0x4f, 0x23, 0x80, 0x42, 0xe0, 0x8f,
+    0x8f, 0x8f, 0x11, 0x97, 0x82, 0x40, 0xbf, 0x89,
+    0xa4, 0x80, 0x42, 0xbc, 0x80, 0x40, 0xe1, 0x80,
+    0x40, 0x94, 0x84, 0x41, 0x24, 0x89, 0x45, 0x56,
+    0x10, 0x0c, 0x83, 0xa7, 0x13, 0x80, 0x40, 0xa4,
+    0x81, 0x42, 0x3c, 0x1f, 0x89, 0x41, 0x70, 0x81,
+    0x40, 0x98, 0x8a, 0x40, 0xae, 0x82, 0xb4, 0x8e,
+    0x9e, 0x89, 0x8e, 0x83, 0xac, 0x8a, 0xb4, 0x89,
+    0x2a, 0xa3, 0x8d, 0x80, 0x89, 0x21, 0xab, 0x80,
+    0x8b, 0x82, 0xaf, 0x8d, 0x3b, 0x80, 0x8b, 0xd1,
+    0x8b, 0x28, 0x40, 0x9f, 0x8b, 0x84, 0x89, 0x2b,
+    0xb6, 0x08, 0x31, 0x09, 0x82, 0x88, 0x80, 0x89,
+    0x09, 0x32, 0x84, 0x40, 0xbf, 0x91, 0x88, 0x89,
+    0x18, 0xd0, 0x93, 0x8b, 0x89, 0x40, 0xd4, 0x31,
+    0x88, 0x9a, 0x81, 0xd1, 0x90, 0x8e, 0x89, 0xd0,
+    0x8c, 0x87, 0x89, 0xd2, 0x8e, 0x83, 0x89, 0x40,
+    0xf1, 0x8e, 0x40, 0xa4, 0x89, 0xc5, 0x28, 0x09,
+    0x18, 0x00, 0x81, 0x8b, 0x89, 0xf6, 0x31, 0x32,
+    0x80, 0x9b, 0x89, 0xa7, 0x30, 0x1f, 0x80, 0x88,
+    0x8a, 0xad, 0x8f, 0x41, 0x94, 0x38, 0x87, 0x8f,
+    0x89, 0xb7, 0x95, 0x80, 0x8d, 0xf9, 0x2a, 0x00,
+    0x08, 0x30, 0x07, 0x89, 0xaf, 0x20, 0x08, 0x27,
+    0x89, 0x41, 0x48, 0x83, 0x60, 0x4b, 0x68, 0x89,
+    0x40, 0x85, 0x84, 0xba, 0x86, 0x98, 0x89, 0x43,
+    0xf4, 0x00, 0xb6, 0x33, 0xd0, 0x80, 0x8a, 0x81,
+    0x60, 0x4c, 0xaa, 0x81, 0x54, 0xc5, 0x22, 0x2f,
     0x39, 0x86, 0x9d, 0x83, 0x40, 0x93, 0x82, 0x45,
     0x88, 0xb1, 0x41, 0xff, 0xb6, 0x83, 0xb1, 0x38,
     0x8d, 0x80, 0x95, 0x20, 0x8e, 0x45, 0x4f, 0x30,
     0x90, 0x0e, 0x01, 0x04, 0x41, 0x04, 0x86, 0x88,
     0x89, 0x41, 0xa1, 0x8d, 0x45, 0xd5, 0x86, 0xec,
-    0x34, 0x89, 0x6c, 0x17, 0xa5, 0x40, 0xef,
+    0x34, 0x89, 0x52, 0x95, 0x89, 0x6c, 0x05, 0x05,
+    0x40, 0xef,
 };
 
-static const uint8_t unicode_prop_ID_Continue1_index[57] = {
+static const uint8_t unicode_prop_ID_Continue1_index[60] = {
     0xfa, 0x06, 0x00, 0x84, 0x09, 0x00, 0xf0, 0x0a,
     0x00, 0x70, 0x0c, 0x00, 0xf4, 0x0d, 0x00, 0x4a,
-    0x10, 0x20, 0x1a, 0x18, 0x20, 0x74, 0x1b, 0x00,
-    0xe2, 0x20, 0x00, 0x28, 0xa8, 0x20, 0x7e, 0xaa,
-    0x20, 0x40, 0xff, 0x00, 0x03, 0x10, 0x21, 0xeb,
-    0x12, 0x01, 0x41, 0x16, 0x01, 0x40, 0x1c, 0x61,
-    0x37, 0x6b, 0x21, 0x76, 0xda, 0x01, 0xf0, 0x01,
-    0x0e,
+    0x10, 0x20, 0x1a, 0x18, 0x20, 0x74, 0x1b, 0x20,
+    0xdd, 0x20, 0x00, 0x0c, 0xa8, 0x00, 0x5a, 0xaa,
+    0x20, 0x1a, 0xff, 0x00, 0xad, 0x0e, 0x01, 0x38,
+    0x12, 0x21, 0xc1, 0x15, 0x21, 0xe5, 0x19, 0x21,
+    0xaa, 0x1d, 0x21, 0x8c, 0xd1, 0x41, 0x4a, 0xe1,
+    0x21, 0xf0, 0x01, 0x0e,
 };
 
 #ifdef CONFIG_ALL_UNICODE
 
-static const uint8_t unicode_cc_table[831] = {
+static const uint8_t unicode_cc_table[851] = {
     0xb2, 0xcf, 0xd4, 0x00, 0xe8, 0x03, 0xdc, 0x00,
     0xe8, 0x00, 0xd8, 0x04, 0xdc, 0x01, 0xca, 0x03,
     0xdc, 0x01, 0xca, 0x0a, 0xdc, 0x04, 0x01, 0x03,
@@ -574,77 +585,81 @@ static const uint8_t unicode_cc_table[831] = {
     0x9a, 0x00, 0xe4, 0xb0, 0x5e, 0x00, 0xde, 0xc0,
     0x00, 0xdc, 0xb0, 0xaa, 0xc0, 0x00, 0xdc, 0xb0,
     0x16, 0x00, 0x09, 0x93, 0xc7, 0x81, 0x00, 0xdc,
-    0xaf, 0xc4, 0x05, 0xdc, 0xc1, 0x00, 0xdc, 0xb0,
-    0x45, 0x00, 0x07, 0x8e, 0x00, 0x09, 0xa5, 0xc0,
-    0x00, 0xdc, 0xc6, 0xb0, 0x05, 0x01, 0x09, 0xb0,
-    0x09, 0x00, 0x07, 0x8a, 0x01, 0x09, 0xb0, 0x12,
-    0x00, 0x07, 0xb0, 0x67, 0xc2, 0x41, 0x00, 0x04,
-    0xdc, 0xc1, 0x03, 0xdc, 0xc0, 0x41, 0x00, 0x05,
-    0x01, 0x83, 0x00, 0xdc, 0x85, 0xc0, 0x82, 0xc1,
-    0xb0, 0x95, 0xc1, 0x00, 0xdc, 0xc6, 0x00, 0xdc,
-    0xc1, 0x00, 0xea, 0x00, 0xd6, 0x00, 0xdc, 0x00,
-    0xca, 0xe4, 0x00, 0xe8, 0x01, 0xe4, 0x00, 0xdc,
-    0x80, 0xc0, 0x00, 0xe9, 0x00, 0xdc, 0xc0, 0x00,
-    0xdc, 0xb2, 0x9f, 0xc1, 0x01, 0x01, 0xc3, 0x02,
-    0x01, 0xc1, 0x83, 0xc0, 0x82, 0x01, 0x01, 0xc0,
-    0x00, 0xdc, 0xc0, 0x01, 0x01, 0x03, 0xdc, 0xc0,
-    0xb8, 0x03, 0xcd, 0xc2, 0xb0, 0x5c, 0x00, 0x09,
-    0xb0, 0x2f, 0xdf, 0xb1, 0xf9, 0x00, 0xda, 0x00,
-    0xe4, 0x00, 0xe8, 0x00, 0xde, 0x01, 0xe0, 0xb0,
-    0x38, 0x01, 0x08, 0xb8, 0x6d, 0xa3, 0xc0, 0x83,
-    0xc9, 0x9f, 0xc1, 0xb0, 0x1f, 0xc1, 0xb0, 0xe3,
-    0x00, 0x09, 0xb0, 0x8c, 0x00, 0x09, 0x9a, 0xd1,
-    0xb0, 0x08, 0x02, 0xdc, 0xa4, 0x00, 0x09, 0xb0,
-    0x2e, 0x00, 0x07, 0x8b, 0x00, 0x09, 0xb0, 0xbe,
-    0xc0, 0x80, 0xc1, 0x00, 0xdc, 0x81, 0xc1, 0x84,
-    0xc1, 0x80, 0xc0, 0xb0, 0x03, 0x00, 0x09, 0xb0,
-    0xc5, 0x00, 0x09, 0xb8, 0x46, 0xff, 0x00, 0x1a,
-    0xb2, 0xd0, 0xc6, 0x06, 0xdc, 0xc1, 0xb3, 0x9c,
-    0x00, 0xdc, 0xb0, 0xb1, 0x00, 0xdc, 0xb0, 0x64,
-    0xc4, 0xb6, 0x61, 0x00, 0xdc, 0x80, 0xc0, 0xa7,
-    0xc0, 0x00, 0x01, 0x00, 0xdc, 0x83, 0x00, 0x09,
-    0xb0, 0x74, 0xc0, 0x00, 0xdc, 0xb2, 0x0c, 0xc3,
-    0xb1, 0xed, 0x01, 0xdc, 0xc2, 0x00, 0xdc, 0xc0,
-    0x03, 0xdc, 0xb0, 0xc4, 0x00, 0x09, 0xb0, 0x07,
-    0x00, 0x09, 0xb0, 0x08, 0x00, 0x09, 0x00, 0x07,
-    0xb0, 0x14, 0xc2, 0xaf, 0x01, 0x09, 0xb0, 0x0d,
-    0x00, 0x07, 0xb0, 0x1b, 0x00, 0x09, 0x88, 0x00,
-    0x07, 0xb0, 0x39, 0x00, 0x09, 0x00, 0x07, 0xb0,
-    0x81, 0x00, 0x07, 0x00, 0x09, 0xb0, 0x1f, 0x01,
-    0x07, 0x8f, 0x00, 0x09, 0x97, 0xc6, 0x82, 0xc4,
-    0xb0, 0x9c, 0x00, 0x09, 0x82, 0x00, 0x07, 0x96,
-    0xc0, 0xb0, 0x32, 0x00, 0x09, 0x00, 0x07, 0xb0,
-    0xca, 0x00, 0x09, 0x00, 0x07, 0xb0, 0x4d, 0x00,
-    0x09, 0xb0, 0x45, 0x00, 0x09, 0x00, 0x07, 0xb0,
-    0x42, 0x00, 0x09, 0xb0, 0xdc, 0x00, 0x09, 0x00,
-    0x07, 0xb1, 0x74, 0x00, 0x09, 0xb0, 0x22, 0x00,
+    0xaf, 0xc4, 0x05, 0xdc, 0xc1, 0x00, 0xdc, 0x80,
+    0x01, 0xdc, 0xb0, 0x42, 0x00, 0x07, 0x8e, 0x00,
+    0x09, 0xa5, 0xc0, 0x00, 0xdc, 0xc6, 0xb0, 0x05,
+    0x01, 0x09, 0xb0, 0x09, 0x00, 0x07, 0x8a, 0x01,
+    0x09, 0xb0, 0x12, 0x00, 0x07, 0xb0, 0x67, 0xc2,
+    0x41, 0x00, 0x04, 0xdc, 0xc1, 0x03, 0xdc, 0xc0,
+    0x41, 0x00, 0x05, 0x01, 0x83, 0x00, 0xdc, 0x85,
+    0xc0, 0x82, 0xc1, 0xb0, 0x95, 0xc1, 0x00, 0xdc,
+    0xc6, 0x00, 0xdc, 0xc1, 0x00, 0xea, 0x00, 0xd6,
+    0x00, 0xdc, 0x00, 0xca, 0xe4, 0x00, 0xe8, 0x01,
+    0xe4, 0x00, 0xdc, 0x80, 0xc0, 0x00, 0xe9, 0x00,
+    0xdc, 0xc0, 0x00, 0xdc, 0xb2, 0x9f, 0xc1, 0x01,
+    0x01, 0xc3, 0x02, 0x01, 0xc1, 0x83, 0xc0, 0x82,
+    0x01, 0x01, 0xc0, 0x00, 0xdc, 0xc0, 0x01, 0x01,
+    0x03, 0xdc, 0xc0, 0xb8, 0x03, 0xcd, 0xc2, 0xb0,
+    0x5c, 0x00, 0x09, 0xb0, 0x2f, 0xdf, 0xb1, 0xf9,
+    0x00, 0xda, 0x00, 0xe4, 0x00, 0xe8, 0x00, 0xde,
+    0x01, 0xe0, 0xb0, 0x38, 0x01, 0x08, 0xb8, 0x6d,
+    0xa3, 0xc0, 0x83, 0xc9, 0x9f, 0xc1, 0xb0, 0x1f,
+    0xc1, 0xb0, 0xe3, 0x00, 0x09, 0xa4, 0x00, 0x09,
+    0xb0, 0x66, 0x00, 0x09, 0x9a, 0xd1, 0xb0, 0x08,
+    0x02, 0xdc, 0xa4, 0x00, 0x09, 0xb0, 0x2e, 0x00,
+    0x07, 0x8b, 0x00, 0x09, 0xb0, 0xbe, 0xc0, 0x80,
+    0xc1, 0x00, 0xdc, 0x81, 0xc1, 0x84, 0xc1, 0x80,
+    0xc0, 0xb0, 0x03, 0x00, 0x09, 0xb0, 0xc5, 0x00,
+    0x09, 0xb8, 0x46, 0xff, 0x00, 0x1a, 0xb2, 0xd0,
+    0xc6, 0x06, 0xdc, 0xc1, 0xb3, 0x9c, 0x00, 0xdc,
+    0xb0, 0xb1, 0x00, 0xdc, 0xb0, 0x64, 0xc4, 0xb6,
+    0x61, 0x00, 0xdc, 0x80, 0xc0, 0xa7, 0xc0, 0x00,
+    0x01, 0x00, 0xdc, 0x83, 0x00, 0x09, 0xb0, 0x74,
+    0xc0, 0x00, 0xdc, 0xb2, 0x0c, 0xc3, 0xb1, 0x52,
+    0xc1, 0xb0, 0x68, 0x01, 0xdc, 0xc2, 0x00, 0xdc,
+    0xc0, 0x03, 0xdc, 0xb0, 0xc4, 0x00, 0x09, 0xb0,
+    0x07, 0x00, 0x09, 0xb0, 0x08, 0x00, 0x09, 0x00,
+    0x07, 0xb0, 0x14, 0xc2, 0xaf, 0x01, 0x09, 0xb0,
+    0x0d, 0x00, 0x07, 0xb0, 0x1b, 0x00, 0x09, 0x88,
+    0x00, 0x07, 0xb0, 0x39, 0x00, 0x09, 0x00, 0x07,
+    0xb0, 0x81, 0x00, 0x07, 0x00, 0x09, 0xb0, 0x1f,
+    0x01, 0x07, 0x8f, 0x00, 0x09, 0x97, 0xc6, 0x82,
+    0xc4, 0xb0, 0x9c, 0x00, 0x09, 0x82, 0x00, 0x07,
+    0x96, 0xc0, 0xb0, 0x32, 0x00, 0x09, 0x00, 0x07,
+    0xb0, 0xca, 0x00, 0x09, 0x00, 0x07, 0xb0, 0x4d,
+    0x00, 0x09, 0xb0, 0x45, 0x00, 0x09, 0x00, 0x07,
+    0xb0, 0x42, 0x00, 0x09, 0xb0, 0xdc, 0x00, 0x09,
+    0x00, 0x07, 0xb0, 0xd1, 0x01, 0x09, 0x83, 0x00,
+    0x07, 0xb0, 0x6b, 0x00, 0x09, 0xb0, 0x22, 0x00,
     0x09, 0x91, 0x00, 0x09, 0xb0, 0x20, 0x00, 0x09,
     0xb1, 0x74, 0x00, 0x09, 0xb0, 0xd1, 0x00, 0x07,
     0x80, 0x01, 0x09, 0xb0, 0x20, 0x00, 0x09, 0xb8,
-    0x45, 0x27, 0x04, 0x01, 0xb0, 0x0a, 0xc6, 0xb8,
-    0x49, 0x36, 0x00, 0x01, 0xb8, 0x0c, 0x95, 0x01,
-    0xd8, 0x02, 0x01, 0x82, 0x00, 0xe2, 0x04, 0xd8,
-    0x87, 0x07, 0xdc, 0x81, 0xc4, 0x01, 0xdc, 0x9d,
-    0xc3, 0xb0, 0x63, 0xc2, 0xb8, 0x05, 0x8a, 0xc6,
-    0x80, 0xd0, 0x81, 0xc6, 0x80, 0xc1, 0x80, 0xc4,
-    0xb0, 0xd4, 0xc6, 0xb1, 0x84, 0xc3, 0xb5, 0xaf,
-    0x06, 0xdc, 0xb0, 0x3c, 0xc5, 0x00, 0x07,
+    0x45, 0x27, 0x04, 0x01, 0xb0, 0x0a, 0xc6, 0xb4,
+    0x88, 0x01, 0x06, 0xb8, 0x44, 0x7b, 0x00, 0x01,
+    0xb8, 0x0c, 0x95, 0x01, 0xd8, 0x02, 0x01, 0x82,
+    0x00, 0xe2, 0x04, 0xd8, 0x87, 0x07, 0xdc, 0x81,
+    0xc4, 0x01, 0xdc, 0x9d, 0xc3, 0xb0, 0x63, 0xc2,
+    0xb8, 0x05, 0x8a, 0xc6, 0x80, 0xd0, 0x81, 0xc6,
+    0x80, 0xc1, 0x80, 0xc4, 0xb0, 0xd4, 0xc6, 0xb1,
+    0x84, 0xc3, 0xb5, 0xaf, 0x06, 0xdc, 0xb0, 0x3c,
+    0xc5, 0x00, 0x07,
 };
 
-static const uint8_t unicode_cc_index[78] = {
+static const uint8_t unicode_cc_index[81] = {
     0x4d, 0x03, 0x00, 0x97, 0x05, 0x20, 0xc6, 0x05,
     0x00, 0xe7, 0x06, 0x00, 0x45, 0x07, 0x00, 0xe2,
     0x08, 0x00, 0x53, 0x09, 0x00, 0xcd, 0x0b, 0x20,
     0x38, 0x0e, 0x00, 0x73, 0x0f, 0x20, 0x5d, 0x13,
-    0x20, 0x60, 0x1a, 0x20, 0xe6, 0x1b, 0x20, 0xfa,
-    0x1c, 0x00, 0x00, 0x1e, 0x20, 0x80, 0x2d, 0x00,
-    0x06, 0xa8, 0x00, 0xbe, 0xaa, 0x00, 0x76, 0x03,
-    0x01, 0x4d, 0x0f, 0x01, 0xcb, 0x11, 0x21, 0x5e,
-    0x14, 0x01, 0x3b, 0x18, 0x21, 0xf0, 0x6a, 0x41,
-    0xaa, 0xd1, 0x01, 0x4b, 0xe9, 0x01,
+    0x20, 0x60, 0x1a, 0x20, 0xaa, 0x1b, 0x00, 0xf4,
+    0x1c, 0x00, 0xfe, 0x1d, 0x20, 0x7f, 0x2d, 0x20,
+    0xf0, 0xa6, 0x00, 0xb2, 0xaa, 0x00, 0xfe, 0x01,
+    0x01, 0xab, 0x0e, 0x01, 0x73, 0x11, 0x21, 0x70,
+    0x13, 0x01, 0xb8, 0x16, 0x01, 0x9a, 0x1a, 0x01,
+    0x9f, 0xbc, 0x01, 0x22, 0xe0, 0x01, 0x4b, 0xe9,
+    0x01,
 };
 
-static const uint32_t unicode_decomp_table1[687] = {
+static const uint32_t unicode_decomp_table1[690] = {
     0x00280081, 0x002a0097, 0x002a8081, 0x002bc097,
     0x002c8115, 0x002d0097, 0x002d4081, 0x002e0097,
     0x002e4115, 0x002f0199, 0x00302016, 0x00400842,
@@ -771,55 +786,56 @@ static const uint32_t unicode_decomp_table1[687] = {
     0x0cf54119, 0x0cf5c097, 0x0cf6009b, 0x0cf64099,
     0x0cf68217, 0x0cf78119, 0x0cf804a1, 0x0cfa4525,
     0x0cfcc525, 0x0cff4125, 0x0cffc099, 0x29a70103,
-    0x29dc0081, 0x29fe0103, 0x2ad70203, 0x3e401482,
-    0x3e4a7f82, 0x3e6a3f82, 0x3e8aa102, 0x3e9b0110,
-    0x3e9c2f82, 0x3eb3c590, 0x3ec00197, 0x3ec0c119,
-    0x3ec1413f, 0x3ec4c2af, 0x3ec74184, 0x3ec804ad,
-    0x3eca4081, 0x3eca8304, 0x3ecc03a0, 0x3ece02a0,
-    0x3ecf8084, 0x3ed00120, 0x3ed0c120, 0x3ed184ae,
-    0x3ed3c085, 0x3ed4312d, 0x3ef4cbad, 0x3efa892f,
-    0x3eff022d, 0x3f002f2f, 0x3f1782a5, 0x3f18c0b1,
-    0x3f1907af, 0x3f1cffaf, 0x3f3c81a5, 0x3f3d64af,
-    0x3f542031, 0x3f649b31, 0x3f7c0131, 0x3f7c83b3,
-    0x3f7e40b1, 0x3f7e80bd, 0x3f7ec0bb, 0x3f7f00b3,
-    0x3f840503, 0x3f8c01ad, 0x3f8cc315, 0x3f8e462d,
-    0x3f91cc03, 0x3f97c695, 0x3f9c01af, 0x3f9d0085,
-    0x3f9d852f, 0x3fa03aad, 0x3fbd442f, 0x3fc06f1f,
-    0x3fd7c11f, 0x3fd85fad, 0x3fe80081, 0x3fe84f1f,
-    0x3ff0831f, 0x3ff2831f, 0x3ff4831f, 0x3ff6819f,
-    0x3ff80783, 0x44268192, 0x442ac092, 0x444b8112,
-    0x44d2c112, 0x452ec212, 0x456e8112, 0x74578392,
-    0x746ec312, 0x75000d1f, 0x75068d1f, 0x750d0d1f,
-    0x7513839f, 0x7515891f, 0x751a0d1f, 0x75208d1f,
-    0x75271015, 0x752f439f, 0x7531459f, 0x75340d1f,
-    0x753a8d1f, 0x75410395, 0x7543441f, 0x7545839f,
-    0x75478d1f, 0x754e0795, 0x7552839f, 0x75548d1f,
-    0x755b0d1f, 0x75618d1f, 0x75680d1f, 0x756e8d1f,
-    0x75750d1f, 0x757b8d1f, 0x75820d1f, 0x75888d1f,
-    0x758f0d1f, 0x75958d1f, 0x759c0d1f, 0x75a28d1f,
-    0x75a90103, 0x75aa089f, 0x75ae4081, 0x75ae839f,
-    0x75b04081, 0x75b08c9f, 0x75b6c081, 0x75b7032d,
-    0x75b8889f, 0x75bcc081, 0x75bd039f, 0x75bec081,
-    0x75bf0c9f, 0x75c54081, 0x75c5832d, 0x75c7089f,
-    0x75cb4081, 0x75cb839f, 0x75cd4081, 0x75cd8c9f,
-    0x75d3c081, 0x75d4032d, 0x75d5889f, 0x75d9c081,
-    0x75da039f, 0x75dbc081, 0x75dc0c9f, 0x75e24081,
-    0x75e2832d, 0x75e4089f, 0x75e84081, 0x75e8839f,
-    0x75ea4081, 0x75ea8c9f, 0x75f0c081, 0x75f1042d,
-    0x75f3851f, 0x75f6051f, 0x75f8851f, 0x75fb051f,
-    0x75fd851f, 0x7b80022d, 0x7b814dad, 0x7b884203,
-    0x7b89c081, 0x7b8a452d, 0x7b8d0403, 0x7b908081,
-    0x7b91dc03, 0x7ba0052d, 0x7ba2c8ad, 0x7ba84483,
-    0x7baac8ad, 0x7c400097, 0x7c404521, 0x7c440d25,
-    0x7c4a8087, 0x7c4ac115, 0x7c4b4117, 0x7c4c0d1f,
-    0x7c528217, 0x7c538099, 0x7c53c097, 0x7c5a8197,
-    0x7c640097, 0x7c80012f, 0x7c808081, 0x7c841603,
-    0x7c9004c1, 0x7c940103, 0xbe0001ac, 0xbe00d110,
-    0xbe0947ac, 0xbe0d3910, 0xbe29872c, 0xbe2d022c,
-    0xbe2e3790, 0xbe49ff90, 0xbe69bc10,
+    0x29dc0081, 0x29fe0103, 0x2ad70203, 0x2ada4081,
+    0x3e401482, 0x3e4a7f82, 0x3e6a3f82, 0x3e8aa102,
+    0x3e9b0110, 0x3e9c2f82, 0x3eb3c590, 0x3ec00197,
+    0x3ec0c119, 0x3ec1413f, 0x3ec4c2af, 0x3ec74184,
+    0x3ec804ad, 0x3eca4081, 0x3eca8304, 0x3ecc03a0,
+    0x3ece02a0, 0x3ecf8084, 0x3ed00120, 0x3ed0c120,
+    0x3ed184ae, 0x3ed3c085, 0x3ed4312d, 0x3ef4cbad,
+    0x3efa892f, 0x3eff022d, 0x3f002f2f, 0x3f1782a5,
+    0x3f18c0b1, 0x3f1907af, 0x3f1cffaf, 0x3f3c81a5,
+    0x3f3d64af, 0x3f542031, 0x3f649b31, 0x3f7c0131,
+    0x3f7c83b3, 0x3f7e40b1, 0x3f7e80bd, 0x3f7ec0bb,
+    0x3f7f00b3, 0x3f840503, 0x3f8c01ad, 0x3f8cc315,
+    0x3f8e462d, 0x3f91cc03, 0x3f97c695, 0x3f9c01af,
+    0x3f9d0085, 0x3f9d852f, 0x3fa03aad, 0x3fbd442f,
+    0x3fc06f1f, 0x3fd7c11f, 0x3fd85fad, 0x3fe80081,
+    0x3fe84f1f, 0x3ff0831f, 0x3ff2831f, 0x3ff4831f,
+    0x3ff6819f, 0x3ff80783, 0x44268192, 0x442ac092,
+    0x444b8112, 0x44d2c112, 0x452ec212, 0x456e8112,
+    0x464e0092, 0x74578392, 0x746ec312, 0x75000d1f,
+    0x75068d1f, 0x750d0d1f, 0x7513839f, 0x7515891f,
+    0x751a0d1f, 0x75208d1f, 0x75271015, 0x752f439f,
+    0x7531459f, 0x75340d1f, 0x753a8d1f, 0x75410395,
+    0x7543441f, 0x7545839f, 0x75478d1f, 0x754e0795,
+    0x7552839f, 0x75548d1f, 0x755b0d1f, 0x75618d1f,
+    0x75680d1f, 0x756e8d1f, 0x75750d1f, 0x757b8d1f,
+    0x75820d1f, 0x75888d1f, 0x758f0d1f, 0x75958d1f,
+    0x759c0d1f, 0x75a28d1f, 0x75a90103, 0x75aa089f,
+    0x75ae4081, 0x75ae839f, 0x75b04081, 0x75b08c9f,
+    0x75b6c081, 0x75b7032d, 0x75b8889f, 0x75bcc081,
+    0x75bd039f, 0x75bec081, 0x75bf0c9f, 0x75c54081,
+    0x75c5832d, 0x75c7089f, 0x75cb4081, 0x75cb839f,
+    0x75cd4081, 0x75cd8c9f, 0x75d3c081, 0x75d4032d,
+    0x75d5889f, 0x75d9c081, 0x75da039f, 0x75dbc081,
+    0x75dc0c9f, 0x75e24081, 0x75e2832d, 0x75e4089f,
+    0x75e84081, 0x75e8839f, 0x75ea4081, 0x75ea8c9f,
+    0x75f0c081, 0x75f1042d, 0x75f3851f, 0x75f6051f,
+    0x75f8851f, 0x75fb051f, 0x75fd851f, 0x7b80022d,
+    0x7b814dad, 0x7b884203, 0x7b89c081, 0x7b8a452d,
+    0x7b8d0403, 0x7b908081, 0x7b91dc03, 0x7ba0052d,
+    0x7ba2c8ad, 0x7ba84483, 0x7baac8ad, 0x7c400097,
+    0x7c404521, 0x7c440d25, 0x7c4a8087, 0x7c4ac115,
+    0x7c4b4117, 0x7c4c0d1f, 0x7c528217, 0x7c538099,
+    0x7c53c097, 0x7c5a8197, 0x7c640097, 0x7c80012f,
+    0x7c808081, 0x7c841603, 0x7c9004c1, 0x7c940103,
+    0x7efc051f, 0xbe0001ac, 0xbe00d110, 0xbe0947ac,
+    0xbe0d3910, 0xbe29872c, 0xbe2d022c, 0xbe2e3790,
+    0xbe49ff90, 0xbe69bc10,
 };
 
-static const uint16_t unicode_decomp_table2[687] = {
+static const uint16_t unicode_decomp_table2[690] = {
     0x0020, 0x0000, 0x0061, 0x0002, 0x0004, 0x0006, 0x03bc, 0x0008,
     0x000a, 0x000c, 0x0015, 0x0095, 0x00a5, 0x00b9, 0x00c1, 0x00c3,
     0x00c7, 0x00cb, 0x00d1, 0x00d7, 0x00dd, 0x00e0, 0x00e6, 0x00f8,
@@ -883,32 +899,33 @@ static const uint16_t unicode_decomp_table2[687] = {
     0x10f4, 0x1100, 0x1105, 0x1111, 0x1141, 0x1149, 0x114d, 0x1153,
     0x1157, 0x115a, 0x116e, 0x1171, 0x1175, 0x117b, 0x117d, 0x1181,
     0x1184, 0x118c, 0x1192, 0x1196, 0x119c, 0x11a2, 0x11a8, 0x11ab,
-    0xa76f, 0x11af, 0x11b3, 0x11bb, 0x120d, 0x130b, 0x1409, 0x148d,
-    0x1492, 0x1550, 0x1569, 0x156f, 0x1575, 0x157b, 0x1587, 0x1593,
-    0x002b, 0x159e, 0x15b6, 0x15ba, 0x15be, 0x15c2, 0x15c6, 0x15ca,
-    0x15de, 0x15e2, 0x1646, 0x165f, 0x1685, 0x168b, 0x1749, 0x174f,
-    0x1754, 0x1774, 0x1874, 0x187a, 0x190e, 0x19d0, 0x1a74, 0x1a7c,
-    0x1a9a, 0x1a9f, 0x1ab3, 0x1abd, 0x1ac3, 0x1ad7, 0x1adc, 0x1ae2,
-    0x1af0, 0x1b20, 0x1b2d, 0x1b35, 0x1b39, 0x1b4f, 0x1bc6, 0x1bd8,
-    0x1bda, 0x1bdc, 0x3164, 0x1c1d, 0x1c1f, 0x1c21, 0x1c23, 0x1c25,
-    0x1c27, 0x1c45, 0x1c53, 0x1c58, 0x1c61, 0x1c6a, 0x1c7c, 0x1c85,
-    0x1ca5, 0x1cc0, 0x1cc2, 0x1cc4, 0x1cc6, 0x1cc8, 0x1cca, 0x1ccc,
-    0x1cce, 0x1cee, 0x1cf0, 0x1cf2, 0x1cf4, 0x1cf6, 0x1cfd, 0x1cff,
-    0x1d01, 0x1d03, 0x1d12, 0x1d14, 0x1d16, 0x1d18, 0x1d1a, 0x1d1c,
-    0x1d1e, 0x1d20, 0x1d22, 0x1d24, 0x1d26, 0x1d28, 0x1d2a, 0x1d2c,
-    0x1d2e, 0x1d32, 0x03f4, 0x1d34, 0x2207, 0x1d36, 0x2202, 0x1d38,
-    0x1d40, 0x03f4, 0x1d42, 0x2207, 0x1d44, 0x2202, 0x1d46, 0x1d4e,
-    0x03f4, 0x1d50, 0x2207, 0x1d52, 0x2202, 0x1d54, 0x1d5c, 0x03f4,
-    0x1d5e, 0x2207, 0x1d60, 0x2202, 0x1d62, 0x1d6a, 0x03f4, 0x1d6c,
-    0x2207, 0x1d6e, 0x2202, 0x1d70, 0x1d7a, 0x1d7c, 0x1d7e, 0x1d80,
-    0x1d82, 0x1d84, 0x1d8a, 0x1da7, 0x062d, 0x1daf, 0x1dbb, 0x062c,
-    0x1dcb, 0x1e3b, 0x1e47, 0x1e5a, 0x1e6c, 0x1e7f, 0x1e81, 0x1e85,
-    0x1e8b, 0x1e91, 0x1e93, 0x1e97, 0x1e99, 0x1ea1, 0x1ea4, 0x1ea6,
-    0x1eac, 0x1eae, 0x30b5, 0x1eb4, 0x1f0c, 0x1f22, 0x1f26, 0x1f2b,
-    0x1f78, 0x1f89, 0x208a, 0x209a, 0x20a0, 0x219a, 0x22b8,
+    0xa76f, 0x11af, 0x11b3, 0x028d, 0x11bb, 0x120d, 0x130b, 0x1409,
+    0x148d, 0x1492, 0x1550, 0x1569, 0x156f, 0x1575, 0x157b, 0x1587,
+    0x1593, 0x002b, 0x159e, 0x15b6, 0x15ba, 0x15be, 0x15c2, 0x15c6,
+    0x15ca, 0x15de, 0x15e2, 0x1646, 0x165f, 0x1685, 0x168b, 0x1749,
+    0x174f, 0x1754, 0x1774, 0x1874, 0x187a, 0x190e, 0x19d0, 0x1a74,
+    0x1a7c, 0x1a9a, 0x1a9f, 0x1ab3, 0x1abd, 0x1ac3, 0x1ad7, 0x1adc,
+    0x1ae2, 0x1af0, 0x1b20, 0x1b2d, 0x1b35, 0x1b39, 0x1b4f, 0x1bc6,
+    0x1bd8, 0x1bda, 0x1bdc, 0x3164, 0x1c1d, 0x1c1f, 0x1c21, 0x1c23,
+    0x1c25, 0x1c27, 0x1c45, 0x1c53, 0x1c58, 0x1c61, 0x1c6a, 0x1c7c,
+    0x1c85, 0x1c8a, 0x1caa, 0x1cc5, 0x1cc7, 0x1cc9, 0x1ccb, 0x1ccd,
+    0x1ccf, 0x1cd1, 0x1cd3, 0x1cf3, 0x1cf5, 0x1cf7, 0x1cf9, 0x1cfb,
+    0x1d02, 0x1d04, 0x1d06, 0x1d08, 0x1d17, 0x1d19, 0x1d1b, 0x1d1d,
+    0x1d1f, 0x1d21, 0x1d23, 0x1d25, 0x1d27, 0x1d29, 0x1d2b, 0x1d2d,
+    0x1d2f, 0x1d31, 0x1d33, 0x1d37, 0x03f4, 0x1d39, 0x2207, 0x1d3b,
+    0x2202, 0x1d3d, 0x1d45, 0x03f4, 0x1d47, 0x2207, 0x1d49, 0x2202,
+    0x1d4b, 0x1d53, 0x03f4, 0x1d55, 0x2207, 0x1d57, 0x2202, 0x1d59,
+    0x1d61, 0x03f4, 0x1d63, 0x2207, 0x1d65, 0x2202, 0x1d67, 0x1d6f,
+    0x03f4, 0x1d71, 0x2207, 0x1d73, 0x2202, 0x1d75, 0x1d7f, 0x1d81,
+    0x1d83, 0x1d85, 0x1d87, 0x1d89, 0x1d8f, 0x1dac, 0x062d, 0x1db4,
+    0x1dc0, 0x062c, 0x1dd0, 0x1e40, 0x1e4c, 0x1e5f, 0x1e71, 0x1e84,
+    0x1e86, 0x1e8a, 0x1e90, 0x1e96, 0x1e98, 0x1e9c, 0x1e9e, 0x1ea6,
+    0x1ea9, 0x1eab, 0x1eb1, 0x1eb3, 0x30b5, 0x1eb9, 0x1f11, 0x1f27,
+    0x1f2b, 0x1f2d, 0x1f32, 0x1f7f, 0x1f90, 0x2091, 0x20a1, 0x20a7,
+    0x21a1, 0x22bf,
 };
 
-static const uint8_t unicode_decomp_data[9158] = {
+static const uint8_t unicode_decomp_data[9165] = {
     0x20, 0x88, 0x20, 0x84, 0x32, 0x33, 0x20, 0x81,
     0x20, 0xa7, 0x31, 0x6f, 0x31, 0xd0, 0x34, 0x31,
     0xd0, 0x32, 0x33, 0xd0, 0x34, 0x41, 0x80, 0x41,
@@ -1821,242 +1838,243 @@ static const uint8_t unicode_decomp_data[9158] = {
     0x13, 0x55, 0xb9, 0x14, 0xba, 0x14, 0xb9, 0x14,
     0xb0, 0x14, 0x00, 0x00, 0x00, 0x00, 0xb9, 0x14,
     0xbd, 0x14, 0x55, 0x50, 0xb8, 0x15, 0xaf, 0x15,
-    0xb9, 0x15, 0xaf, 0x15, 0x55, 0x57, 0xd1, 0x65,
-    0xd1, 0x58, 0xd1, 0x65, 0xd1, 0x5f, 0xd1, 0x6e,
-    0xd1, 0x5f, 0xd1, 0x6f, 0xd1, 0x5f, 0xd1, 0x70,
-    0xd1, 0x5f, 0xd1, 0x71, 0xd1, 0x5f, 0xd1, 0x72,
-    0xd1, 0x55, 0x55, 0x55, 0x05, 0xb9, 0xd1, 0x65,
-    0xd1, 0xba, 0xd1, 0x65, 0xd1, 0xbb, 0xd1, 0x6e,
-    0xd1, 0xbc, 0xd1, 0x6e, 0xd1, 0xbb, 0xd1, 0x6f,
-    0xd1, 0xbc, 0xd1, 0x6f, 0xd1, 0x55, 0x55, 0x55,
-    0x41, 0x00, 0x61, 0x00, 0x41, 0x00, 0x61, 0x00,
-    0x69, 0x00, 0x41, 0x00, 0x61, 0x00, 0x41, 0x00,
-    0x43, 0x44, 0x00, 0x00, 0x47, 0x00, 0x00, 0x4a,
-    0x4b, 0x00, 0x00, 0x4e, 0x4f, 0x50, 0x51, 0x00,
-    0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a,
-    0x61, 0x62, 0x63, 0x64, 0x00, 0x66, 0x68, 0x00,
-    0x70, 0x00, 0x41, 0x00, 0x61, 0x00, 0x41, 0x42,
-    0x00, 0x44, 0x45, 0x46, 0x47, 0x4a, 0x00, 0x53,
+    0xb9, 0x15, 0xaf, 0x15, 0x55, 0x35, 0x19, 0x30,
+    0x19, 0x05, 0x57, 0xd1, 0x65, 0xd1, 0x58, 0xd1,
+    0x65, 0xd1, 0x5f, 0xd1, 0x6e, 0xd1, 0x5f, 0xd1,
+    0x6f, 0xd1, 0x5f, 0xd1, 0x70, 0xd1, 0x5f, 0xd1,
+    0x71, 0xd1, 0x5f, 0xd1, 0x72, 0xd1, 0x55, 0x55,
+    0x55, 0x05, 0xb9, 0xd1, 0x65, 0xd1, 0xba, 0xd1,
+    0x65, 0xd1, 0xbb, 0xd1, 0x6e, 0xd1, 0xbc, 0xd1,
+    0x6e, 0xd1, 0xbb, 0xd1, 0x6f, 0xd1, 0xbc, 0xd1,
+    0x6f, 0xd1, 0x55, 0x55, 0x55, 0x41, 0x00, 0x61,
+    0x00, 0x41, 0x00, 0x61, 0x00, 0x69, 0x00, 0x41,
+    0x00, 0x61, 0x00, 0x41, 0x00, 0x43, 0x44, 0x00,
+    0x00, 0x47, 0x00, 0x00, 0x4a, 0x4b, 0x00, 0x00,
+    0x4e, 0x4f, 0x50, 0x51, 0x00, 0x53, 0x54, 0x55,
+    0x56, 0x57, 0x58, 0x59, 0x5a, 0x61, 0x62, 0x63,
+    0x64, 0x00, 0x66, 0x68, 0x00, 0x70, 0x00, 0x41,
     0x00, 0x61, 0x00, 0x41, 0x42, 0x00, 0x44, 0x45,
-    0x46, 0x47, 0x00, 0x49, 0x4a, 0x4b, 0x4c, 0x4d,
-    0x00, 0x4f, 0x53, 0x00, 0x61, 0x00, 0x41, 0x00,
-    0x61, 0x00, 0x41, 0x00, 0x61, 0x00, 0x41, 0x00,
-    0x61, 0x00, 0x41, 0x00, 0x61, 0x00, 0x41, 0x00,
-    0x61, 0x00, 0x41, 0x00, 0x61, 0x00, 0x31, 0x01,
-    0x37, 0x02, 0x91, 0x03, 0xa3, 0x03, 0xb1, 0x03,
-    0xd1, 0x03, 0x24, 0x00, 0x1f, 0x04, 0x20, 0x05,
-    0x91, 0x03, 0xa3, 0x03, 0xb1, 0x03, 0xd1, 0x03,
-    0x24, 0x00, 0x1f, 0x04, 0x20, 0x05, 0x91, 0x03,
-    0xa3, 0x03, 0xb1, 0x03, 0xd1, 0x03, 0x24, 0x00,
-    0x1f, 0x04, 0x20, 0x05, 0x91, 0x03, 0xa3, 0x03,
-    0xb1, 0x03, 0xd1, 0x03, 0x24, 0x00, 0x1f, 0x04,
-    0x20, 0x05, 0x91, 0x03, 0xa3, 0x03, 0xb1, 0x03,
-    0xd1, 0x03, 0x24, 0x00, 0x1f, 0x04, 0x20, 0x05,
-    0x0b, 0x0c, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00,
-    0x30, 0x00, 0x30, 0x00, 0x27, 0x06, 0x00, 0x01,
-    0x05, 0x08, 0x2a, 0x06, 0x1e, 0x08, 0x03, 0x0d,
-    0x20, 0x19, 0x1a, 0x1b, 0x1c, 0x09, 0x0f, 0x17,
-    0x0b, 0x18, 0x07, 0x0a, 0x00, 0x01, 0x04, 0x06,
-    0x0c, 0x0e, 0x10, 0x44, 0x90, 0x77, 0x45, 0x28,
-    0x06, 0x2c, 0x06, 0x00, 0x00, 0x47, 0x06, 0x33,
-    0x06, 0x17, 0x10, 0x11, 0x12, 0x13, 0x00, 0x06,
-    0x0e, 0x02, 0x0f, 0x34, 0x06, 0x2a, 0x06, 0x2b,
-    0x06, 0x2e, 0x06, 0x00, 0x00, 0x36, 0x06, 0x00,
-    0x00, 0x3a, 0x06, 0x2d, 0x06, 0x00, 0x00, 0x4a,
-    0x06, 0x00, 0x00, 0x44, 0x06, 0x00, 0x00, 0x46,
-    0x06, 0x33, 0x06, 0x39, 0x06, 0x00, 0x00, 0x35,
-    0x06, 0x42, 0x06, 0x00, 0x00, 0x34, 0x06, 0x00,
-    0x00, 0x00, 0x00, 0x2e, 0x06, 0x00, 0x00, 0x36,
-    0x06, 0x00, 0x00, 0x3a, 0x06, 0x00, 0x00, 0xba,
-    0x06, 0x00, 0x00, 0x6f, 0x06, 0x00, 0x00, 0x28,
-    0x06, 0x2c, 0x06, 0x00, 0x00, 0x47, 0x06, 0x00,
-    0x00, 0x00, 0x00, 0x2d, 0x06, 0x37, 0x06, 0x4a,
-    0x06, 0x43, 0x06, 0x00, 0x00, 0x45, 0x06, 0x46,
-    0x06, 0x33, 0x06, 0x39, 0x06, 0x41, 0x06, 0x35,
-    0x06, 0x42, 0x06, 0x00, 0x00, 0x34, 0x06, 0x2a,
-    0x06, 0x2b, 0x06, 0x2e, 0x06, 0x00, 0x00, 0x36,
-    0x06, 0x38, 0x06, 0x3a, 0x06, 0x6e, 0x06, 0x00,
-    0x00, 0xa1, 0x06, 0x27, 0x06, 0x00, 0x01, 0x05,
-    0x08, 0x20, 0x21, 0x0b, 0x06, 0x10, 0x23, 0x2a,
-    0x06, 0x1a, 0x1b, 0x1c, 0x09, 0x0f, 0x17, 0x0b,
-    0x18, 0x07, 0x0a, 0x00, 0x01, 0x04, 0x06, 0x0c,
-    0x0e, 0x10, 0x28, 0x06, 0x2c, 0x06, 0x2f, 0x06,
-    0x00, 0x00, 0x48, 0x06, 0x32, 0x06, 0x2d, 0x06,
-    0x37, 0x06, 0x4a, 0x06, 0x2a, 0x06, 0x1a, 0x1b,
+    0x46, 0x47, 0x4a, 0x00, 0x53, 0x00, 0x61, 0x00,
+    0x41, 0x42, 0x00, 0x44, 0x45, 0x46, 0x47, 0x00,
+    0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x00, 0x4f, 0x53,
+    0x00, 0x61, 0x00, 0x41, 0x00, 0x61, 0x00, 0x41,
+    0x00, 0x61, 0x00, 0x41, 0x00, 0x61, 0x00, 0x41,
+    0x00, 0x61, 0x00, 0x41, 0x00, 0x61, 0x00, 0x41,
+    0x00, 0x61, 0x00, 0x31, 0x01, 0x37, 0x02, 0x91,
+    0x03, 0xa3, 0x03, 0xb1, 0x03, 0xd1, 0x03, 0x24,
+    0x00, 0x1f, 0x04, 0x20, 0x05, 0x91, 0x03, 0xa3,
+    0x03, 0xb1, 0x03, 0xd1, 0x03, 0x24, 0x00, 0x1f,
+    0x04, 0x20, 0x05, 0x91, 0x03, 0xa3, 0x03, 0xb1,
+    0x03, 0xd1, 0x03, 0x24, 0x00, 0x1f, 0x04, 0x20,
+    0x05, 0x91, 0x03, 0xa3, 0x03, 0xb1, 0x03, 0xd1,
+    0x03, 0x24, 0x00, 0x1f, 0x04, 0x20, 0x05, 0x91,
+    0x03, 0xa3, 0x03, 0xb1, 0x03, 0xd1, 0x03, 0x24,
+    0x00, 0x1f, 0x04, 0x20, 0x05, 0x0b, 0x0c, 0x30,
+    0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30,
+    0x00, 0x27, 0x06, 0x00, 0x01, 0x05, 0x08, 0x2a,
+    0x06, 0x1e, 0x08, 0x03, 0x0d, 0x20, 0x19, 0x1a,
+    0x1b, 0x1c, 0x09, 0x0f, 0x17, 0x0b, 0x18, 0x07,
+    0x0a, 0x00, 0x01, 0x04, 0x06, 0x0c, 0x0e, 0x10,
+    0x44, 0x90, 0x77, 0x45, 0x28, 0x06, 0x2c, 0x06,
+    0x00, 0x00, 0x47, 0x06, 0x33, 0x06, 0x17, 0x10,
+    0x11, 0x12, 0x13, 0x00, 0x06, 0x0e, 0x02, 0x0f,
+    0x34, 0x06, 0x2a, 0x06, 0x2b, 0x06, 0x2e, 0x06,
+    0x00, 0x00, 0x36, 0x06, 0x00, 0x00, 0x3a, 0x06,
+    0x2d, 0x06, 0x00, 0x00, 0x4a, 0x06, 0x00, 0x00,
+    0x44, 0x06, 0x00, 0x00, 0x46, 0x06, 0x33, 0x06,
+    0x39, 0x06, 0x00, 0x00, 0x35, 0x06, 0x42, 0x06,
+    0x00, 0x00, 0x34, 0x06, 0x00, 0x00, 0x00, 0x00,
+    0x2e, 0x06, 0x00, 0x00, 0x36, 0x06, 0x00, 0x00,
+    0x3a, 0x06, 0x00, 0x00, 0xba, 0x06, 0x00, 0x00,
+    0x6f, 0x06, 0x00, 0x00, 0x28, 0x06, 0x2c, 0x06,
+    0x00, 0x00, 0x47, 0x06, 0x00, 0x00, 0x00, 0x00,
+    0x2d, 0x06, 0x37, 0x06, 0x4a, 0x06, 0x43, 0x06,
+    0x00, 0x00, 0x45, 0x06, 0x46, 0x06, 0x33, 0x06,
+    0x39, 0x06, 0x41, 0x06, 0x35, 0x06, 0x42, 0x06,
+    0x00, 0x00, 0x34, 0x06, 0x2a, 0x06, 0x2b, 0x06,
+    0x2e, 0x06, 0x00, 0x00, 0x36, 0x06, 0x38, 0x06,
+    0x3a, 0x06, 0x6e, 0x06, 0x00, 0x00, 0xa1, 0x06,
+    0x27, 0x06, 0x00, 0x01, 0x05, 0x08, 0x20, 0x21,
+    0x0b, 0x06, 0x10, 0x23, 0x2a, 0x06, 0x1a, 0x1b,
     0x1c, 0x09, 0x0f, 0x17, 0x0b, 0x18, 0x07, 0x0a,
-    0x00, 0x01, 0x04, 0x06, 0x0c, 0x0e, 0x10, 0x30,
-    0x2e, 0x30, 0x00, 0x2c, 0x00, 0x28, 0x00, 0x41,
-    0x00, 0x29, 0x00, 0x14, 0x30, 0x53, 0x00, 0x15,
-    0x30, 0x43, 0x52, 0x43, 0x44, 0x57, 0x5a, 0x41,
-    0x00, 0x48, 0x56, 0x4d, 0x56, 0x53, 0x44, 0x53,
-    0x53, 0x50, 0x50, 0x56, 0x57, 0x43, 0x4d, 0x43,
-    0x4d, 0x44, 0x4d, 0x52, 0x44, 0x4a, 0x4b, 0x30,
-    0x30, 0x00, 0x68, 0x68, 0x4b, 0x62, 0x57, 0x5b,
-    0xcc, 0x53, 0xc7, 0x30, 0x8c, 0x4e, 0x1a, 0x59,
-    0xe3, 0x89, 0x29, 0x59, 0xa4, 0x4e, 0x20, 0x66,
-    0x21, 0x71, 0x99, 0x65, 0x4d, 0x52, 0x8c, 0x5f,
-    0x8d, 0x51, 0xb0, 0x65, 0x1d, 0x52, 0x42, 0x7d,
-    0x1f, 0x75, 0xa9, 0x8c, 0xf0, 0x58, 0x39, 0x54,
-    0x14, 0x6f, 0x95, 0x62, 0x55, 0x63, 0x00, 0x4e,
-    0x09, 0x4e, 0x4a, 0x90, 0xe6, 0x5d, 0x2d, 0x4e,
-    0xf3, 0x53, 0x07, 0x63, 0x70, 0x8d, 0x53, 0x62,
-    0x81, 0x79, 0x7a, 0x7a, 0x08, 0x54, 0x80, 0x6e,
-    0x09, 0x67, 0x08, 0x67, 0x33, 0x75, 0x72, 0x52,
-    0xb6, 0x55, 0x4d, 0x91, 0x14, 0x30, 0x15, 0x30,
-    0x2c, 0x67, 0x09, 0x4e, 0x8c, 0x4e, 0x89, 0x5b,
-    0xb9, 0x70, 0x53, 0x62, 0xd7, 0x76, 0xdd, 0x52,
-    0x57, 0x65, 0x97, 0x5f, 0xef, 0x53, 0x38, 0x4e,
-    0x05, 0x00, 0x09, 0x22, 0x01, 0x60, 0x4f, 0xae,
-    0x4f, 0xbb, 0x4f, 0x02, 0x50, 0x7a, 0x50, 0x99,
-    0x50, 0xe7, 0x50, 0xcf, 0x50, 0x9e, 0x34, 0x3a,
-    0x06, 0x4d, 0x51, 0x54, 0x51, 0x64, 0x51, 0x77,
-    0x51, 0x1c, 0x05, 0xb9, 0x34, 0x67, 0x51, 0x8d,
-    0x51, 0x4b, 0x05, 0x97, 0x51, 0xa4, 0x51, 0xcc,
-    0x4e, 0xac, 0x51, 0xb5, 0x51, 0xdf, 0x91, 0xf5,
-    0x51, 0x03, 0x52, 0xdf, 0x34, 0x3b, 0x52, 0x46,
-    0x52, 0x72, 0x52, 0x77, 0x52, 0x15, 0x35, 0x02,
-    0x00, 0x20, 0x80, 0x80, 0x00, 0x08, 0x00, 0x00,
-    0xc7, 0x52, 0x00, 0x02, 0x1d, 0x33, 0x3e, 0x3f,
-    0x50, 0x82, 0x8a, 0x93, 0xac, 0xb6, 0xb8, 0xb8,
-    0xb8, 0x2c, 0x0a, 0x70, 0x70, 0xca, 0x53, 0xdf,
-    0x53, 0x63, 0x0b, 0xeb, 0x53, 0xf1, 0x53, 0x06,
-    0x54, 0x9e, 0x54, 0x38, 0x54, 0x48, 0x54, 0x68,
-    0x54, 0xa2, 0x54, 0xf6, 0x54, 0x10, 0x55, 0x53,
-    0x55, 0x63, 0x55, 0x84, 0x55, 0x84, 0x55, 0x99,
-    0x55, 0xab, 0x55, 0xb3, 0x55, 0xc2, 0x55, 0x16,
-    0x57, 0x06, 0x56, 0x17, 0x57, 0x51, 0x56, 0x74,
-    0x56, 0x07, 0x52, 0xee, 0x58, 0xce, 0x57, 0xf4,
-    0x57, 0x0d, 0x58, 0x8b, 0x57, 0x32, 0x58, 0x31,
-    0x58, 0xac, 0x58, 0xe4, 0x14, 0xf2, 0x58, 0xf7,
-    0x58, 0x06, 0x59, 0x1a, 0x59, 0x22, 0x59, 0x62,
-    0x59, 0xa8, 0x16, 0xea, 0x16, 0xec, 0x59, 0x1b,
-    0x5a, 0x27, 0x5a, 0xd8, 0x59, 0x66, 0x5a, 0xee,
-    0x36, 0xfc, 0x36, 0x08, 0x5b, 0x3e, 0x5b, 0x3e,
-    0x5b, 0xc8, 0x19, 0xc3, 0x5b, 0xd8, 0x5b, 0xe7,
-    0x5b, 0xf3, 0x5b, 0x18, 0x1b, 0xff, 0x5b, 0x06,
-    0x5c, 0x53, 0x5f, 0x22, 0x5c, 0x81, 0x37, 0x60,
-    0x5c, 0x6e, 0x5c, 0xc0, 0x5c, 0x8d, 0x5c, 0xe4,
-    0x1d, 0x43, 0x5d, 0xe6, 0x1d, 0x6e, 0x5d, 0x6b,
-    0x5d, 0x7c, 0x5d, 0xe1, 0x5d, 0xe2, 0x5d, 0x2f,
-    0x38, 0xfd, 0x5d, 0x28, 0x5e, 0x3d, 0x5e, 0x69,
-    0x5e, 0x62, 0x38, 0x83, 0x21, 0x7c, 0x38, 0xb0,
-    0x5e, 0xb3, 0x5e, 0xb6, 0x5e, 0xca, 0x5e, 0x92,
-    0xa3, 0xfe, 0x5e, 0x31, 0x23, 0x31, 0x23, 0x01,
-    0x82, 0x22, 0x5f, 0x22, 0x5f, 0xc7, 0x38, 0xb8,
-    0x32, 0xda, 0x61, 0x62, 0x5f, 0x6b, 0x5f, 0xe3,
-    0x38, 0x9a, 0x5f, 0xcd, 0x5f, 0xd7, 0x5f, 0xf9,
-    0x5f, 0x81, 0x60, 0x3a, 0x39, 0x1c, 0x39, 0x94,
-    0x60, 0xd4, 0x26, 0xc7, 0x60, 0x02, 0x02, 0x00,
-    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00,
-    0x0a, 0x00, 0x00, 0x02, 0x08, 0x00, 0x80, 0x08,
-    0x00, 0x00, 0x08, 0x80, 0x28, 0x80, 0x02, 0x00,
-    0x00, 0x02, 0x48, 0x61, 0x00, 0x04, 0x06, 0x04,
-    0x32, 0x46, 0x6a, 0x5c, 0x67, 0x96, 0xaa, 0xae,
-    0xc8, 0xd3, 0x5d, 0x62, 0x00, 0x54, 0x77, 0xf3,
-    0x0c, 0x2b, 0x3d, 0x63, 0xfc, 0x62, 0x68, 0x63,
-    0x83, 0x63, 0xe4, 0x63, 0xf1, 0x2b, 0x22, 0x64,
-    0xc5, 0x63, 0xa9, 0x63, 0x2e, 0x3a, 0x69, 0x64,
-    0x7e, 0x64, 0x9d, 0x64, 0x77, 0x64, 0x6c, 0x3a,
-    0x4f, 0x65, 0x6c, 0x65, 0x0a, 0x30, 0xe3, 0x65,
-    0xf8, 0x66, 0x49, 0x66, 0x19, 0x3b, 0x91, 0x66,
-    0x08, 0x3b, 0xe4, 0x3a, 0x92, 0x51, 0x95, 0x51,
-    0x00, 0x67, 0x9c, 0x66, 0xad, 0x80, 0xd9, 0x43,
-    0x17, 0x67, 0x1b, 0x67, 0x21, 0x67, 0x5e, 0x67,
-    0x53, 0x67, 0xc3, 0x33, 0x49, 0x3b, 0xfa, 0x67,
-    0x85, 0x67, 0x52, 0x68, 0x85, 0x68, 0x6d, 0x34,
-    0x8e, 0x68, 0x1f, 0x68, 0x14, 0x69, 0x9d, 0x3b,
-    0x42, 0x69, 0xa3, 0x69, 0xea, 0x69, 0xa8, 0x6a,
-    0xa3, 0x36, 0xdb, 0x6a, 0x18, 0x3c, 0x21, 0x6b,
-    0xa7, 0x38, 0x54, 0x6b, 0x4e, 0x3c, 0x72, 0x6b,
-    0x9f, 0x6b, 0xba, 0x6b, 0xbb, 0x6b, 0x8d, 0x3a,
-    0x0b, 0x1d, 0xfa, 0x3a, 0x4e, 0x6c, 0xbc, 0x3c,
-    0xbf, 0x6c, 0xcd, 0x6c, 0x67, 0x6c, 0x16, 0x6d,
-    0x3e, 0x6d, 0x77, 0x6d, 0x41, 0x6d, 0x69, 0x6d,
-    0x78, 0x6d, 0x85, 0x6d, 0x1e, 0x3d, 0x34, 0x6d,
-    0x2f, 0x6e, 0x6e, 0x6e, 0x33, 0x3d, 0xcb, 0x6e,
-    0xc7, 0x6e, 0xd1, 0x3e, 0xf9, 0x6d, 0x6e, 0x6f,
-    0x5e, 0x3f, 0x8e, 0x3f, 0xc6, 0x6f, 0x39, 0x70,
-    0x1e, 0x70, 0x1b, 0x70, 0x96, 0x3d, 0x4a, 0x70,
-    0x7d, 0x70, 0x77, 0x70, 0xad, 0x70, 0x25, 0x05,
-    0x45, 0x71, 0x63, 0x42, 0x9c, 0x71, 0xab, 0x43,
-    0x28, 0x72, 0x35, 0x72, 0x50, 0x72, 0x08, 0x46,
-    0x80, 0x72, 0x95, 0x72, 0x35, 0x47, 0x02, 0x20,
-    0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x08,
-    0x80, 0x00, 0x00, 0x02, 0x02, 0x80, 0x8a, 0x00,
-    0x00, 0x20, 0x00, 0x08, 0x0a, 0x00, 0x80, 0x88,
-    0x80, 0x20, 0x14, 0x48, 0x7a, 0x73, 0x8b, 0x73,
-    0xac, 0x3e, 0xa5, 0x73, 0xb8, 0x3e, 0xb8, 0x3e,
-    0x47, 0x74, 0x5c, 0x74, 0x71, 0x74, 0x85, 0x74,
-    0xca, 0x74, 0x1b, 0x3f, 0x24, 0x75, 0x36, 0x4c,
-    0x3e, 0x75, 0x92, 0x4c, 0x70, 0x75, 0x9f, 0x21,
-    0x10, 0x76, 0xa1, 0x4f, 0xb8, 0x4f, 0x44, 0x50,
-    0xfc, 0x3f, 0x08, 0x40, 0xf4, 0x76, 0xf3, 0x50,
-    0xf2, 0x50, 0x19, 0x51, 0x33, 0x51, 0x1e, 0x77,
-    0x1f, 0x77, 0x1f, 0x77, 0x4a, 0x77, 0x39, 0x40,
-    0x8b, 0x77, 0x46, 0x40, 0x96, 0x40, 0x1d, 0x54,
-    0x4e, 0x78, 0x8c, 0x78, 0xcc, 0x78, 0xe3, 0x40,
-    0x26, 0x56, 0x56, 0x79, 0x9a, 0x56, 0xc5, 0x56,
-    0x8f, 0x79, 0xeb, 0x79, 0x2f, 0x41, 0x40, 0x7a,
-    0x4a, 0x7a, 0x4f, 0x7a, 0x7c, 0x59, 0xa7, 0x5a,
-    0xa7, 0x5a, 0xee, 0x7a, 0x02, 0x42, 0xab, 0x5b,
-    0xc6, 0x7b, 0xc9, 0x7b, 0x27, 0x42, 0x80, 0x5c,
-    0xd2, 0x7c, 0xa0, 0x42, 0xe8, 0x7c, 0xe3, 0x7c,
-    0x00, 0x7d, 0x86, 0x5f, 0x63, 0x7d, 0x01, 0x43,
-    0xc7, 0x7d, 0x02, 0x7e, 0x45, 0x7e, 0x34, 0x43,
-    0x28, 0x62, 0x47, 0x62, 0x59, 0x43, 0xd9, 0x62,
-    0x7a, 0x7f, 0x3e, 0x63, 0x95, 0x7f, 0xfa, 0x7f,
-    0x05, 0x80, 0xda, 0x64, 0x23, 0x65, 0x60, 0x80,
-    0xa8, 0x65, 0x70, 0x80, 0x5f, 0x33, 0xd5, 0x43,
-    0xb2, 0x80, 0x03, 0x81, 0x0b, 0x44, 0x3e, 0x81,
-    0xb5, 0x5a, 0xa7, 0x67, 0xb5, 0x67, 0x93, 0x33,
-    0x9c, 0x33, 0x01, 0x82, 0x04, 0x82, 0x9e, 0x8f,
-    0x6b, 0x44, 0x91, 0x82, 0x8b, 0x82, 0x9d, 0x82,
-    0xb3, 0x52, 0xb1, 0x82, 0xb3, 0x82, 0xbd, 0x82,
-    0xe6, 0x82, 0x3c, 0x6b, 0xe5, 0x82, 0x1d, 0x83,
-    0x63, 0x83, 0xad, 0x83, 0x23, 0x83, 0xbd, 0x83,
-    0xe7, 0x83, 0x57, 0x84, 0x53, 0x83, 0xca, 0x83,
-    0xcc, 0x83, 0xdc, 0x83, 0x36, 0x6c, 0x6b, 0x6d,
-    0x02, 0x00, 0x00, 0x20, 0x22, 0x2a, 0xa0, 0x0a,
-    0x00, 0x20, 0x80, 0x28, 0x00, 0xa8, 0x20, 0x20,
-    0x00, 0x02, 0x80, 0x22, 0x02, 0x8a, 0x08, 0x00,
-    0xaa, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x28,
-    0xd5, 0x6c, 0x2b, 0x45, 0xf1, 0x84, 0xf3, 0x84,
-    0x16, 0x85, 0xca, 0x73, 0x64, 0x85, 0x2c, 0x6f,
-    0x5d, 0x45, 0x61, 0x45, 0xb1, 0x6f, 0xd2, 0x70,
-    0x6b, 0x45, 0x50, 0x86, 0x5c, 0x86, 0x67, 0x86,
-    0x69, 0x86, 0xa9, 0x86, 0x88, 0x86, 0x0e, 0x87,
-    0xe2, 0x86, 0x79, 0x87, 0x28, 0x87, 0x6b, 0x87,
-    0x86, 0x87, 0xd7, 0x45, 0xe1, 0x87, 0x01, 0x88,
-    0xf9, 0x45, 0x60, 0x88, 0x63, 0x88, 0x67, 0x76,
-    0xd7, 0x88, 0xde, 0x88, 0x35, 0x46, 0xfa, 0x88,
-    0xbb, 0x34, 0xae, 0x78, 0x66, 0x79, 0xbe, 0x46,
-    0xc7, 0x46, 0xa0, 0x8a, 0xed, 0x8a, 0x8a, 0x8b,
-    0x55, 0x8c, 0xa8, 0x7c, 0xab, 0x8c, 0xc1, 0x8c,
-    0x1b, 0x8d, 0x77, 0x8d, 0x2f, 0x7f, 0x04, 0x08,
-    0xcb, 0x8d, 0xbc, 0x8d, 0xf0, 0x8d, 0xde, 0x08,
-    0xd4, 0x8e, 0x38, 0x8f, 0xd2, 0x85, 0xed, 0x85,
-    0x94, 0x90, 0xf1, 0x90, 0x11, 0x91, 0x2e, 0x87,
-    0x1b, 0x91, 0x38, 0x92, 0xd7, 0x92, 0xd8, 0x92,
-    0x7c, 0x92, 0xf9, 0x93, 0x15, 0x94, 0xfa, 0x8b,
-    0x8b, 0x95, 0x95, 0x49, 0xb7, 0x95, 0x77, 0x8d,
-    0xe6, 0x49, 0xc3, 0x96, 0xb2, 0x5d, 0x23, 0x97,
-    0x45, 0x91, 0x1a, 0x92, 0x6e, 0x4a, 0x76, 0x4a,
-    0xe0, 0x97, 0x0a, 0x94, 0xb2, 0x4a, 0x96, 0x94,
-    0x0b, 0x98, 0x0b, 0x98, 0x29, 0x98, 0xb6, 0x95,
-    0xe2, 0x98, 0x33, 0x4b, 0x29, 0x99, 0xa7, 0x99,
-    0xc2, 0x99, 0xfe, 0x99, 0xce, 0x4b, 0x30, 0x9b,
-    0x12, 0x9b, 0x40, 0x9c, 0xfd, 0x9c, 0xce, 0x4c,
-    0xed, 0x4c, 0x67, 0x9d, 0xce, 0xa0, 0xf8, 0x4c,
-    0x05, 0xa1, 0x0e, 0xa2, 0x91, 0xa2, 0xbb, 0x9e,
-    0x56, 0x4d, 0xf9, 0x9e, 0xfe, 0x9e, 0x05, 0x9f,
-    0x0f, 0x9f, 0x16, 0x9f, 0x3b, 0x9f, 0x00, 0xa6,
-    0x02, 0x88, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x80,
-    0x00, 0x28, 0x00, 0x08, 0xa0, 0x80, 0xa0, 0x80,
-    0x00, 0x80, 0x80, 0x00, 0x0a, 0x88, 0x80, 0x00,
-    0x80, 0x00, 0x20, 0x2a, 0x00, 0x80,
+    0x00, 0x01, 0x04, 0x06, 0x0c, 0x0e, 0x10, 0x28,
+    0x06, 0x2c, 0x06, 0x2f, 0x06, 0x00, 0x00, 0x48,
+    0x06, 0x32, 0x06, 0x2d, 0x06, 0x37, 0x06, 0x4a,
+    0x06, 0x2a, 0x06, 0x1a, 0x1b, 0x1c, 0x09, 0x0f,
+    0x17, 0x0b, 0x18, 0x07, 0x0a, 0x00, 0x01, 0x04,
+    0x06, 0x0c, 0x0e, 0x10, 0x30, 0x2e, 0x30, 0x00,
+    0x2c, 0x00, 0x28, 0x00, 0x41, 0x00, 0x29, 0x00,
+    0x14, 0x30, 0x53, 0x00, 0x15, 0x30, 0x43, 0x52,
+    0x43, 0x44, 0x57, 0x5a, 0x41, 0x00, 0x48, 0x56,
+    0x4d, 0x56, 0x53, 0x44, 0x53, 0x53, 0x50, 0x50,
+    0x56, 0x57, 0x43, 0x4d, 0x43, 0x4d, 0x44, 0x4d,
+    0x52, 0x44, 0x4a, 0x4b, 0x30, 0x30, 0x00, 0x68,
+    0x68, 0x4b, 0x62, 0x57, 0x5b, 0xcc, 0x53, 0xc7,
+    0x30, 0x8c, 0x4e, 0x1a, 0x59, 0xe3, 0x89, 0x29,
+    0x59, 0xa4, 0x4e, 0x20, 0x66, 0x21, 0x71, 0x99,
+    0x65, 0x4d, 0x52, 0x8c, 0x5f, 0x8d, 0x51, 0xb0,
+    0x65, 0x1d, 0x52, 0x42, 0x7d, 0x1f, 0x75, 0xa9,
+    0x8c, 0xf0, 0x58, 0x39, 0x54, 0x14, 0x6f, 0x95,
+    0x62, 0x55, 0x63, 0x00, 0x4e, 0x09, 0x4e, 0x4a,
+    0x90, 0xe6, 0x5d, 0x2d, 0x4e, 0xf3, 0x53, 0x07,
+    0x63, 0x70, 0x8d, 0x53, 0x62, 0x81, 0x79, 0x7a,
+    0x7a, 0x08, 0x54, 0x80, 0x6e, 0x09, 0x67, 0x08,
+    0x67, 0x33, 0x75, 0x72, 0x52, 0xb6, 0x55, 0x4d,
+    0x91, 0x14, 0x30, 0x15, 0x30, 0x2c, 0x67, 0x09,
+    0x4e, 0x8c, 0x4e, 0x89, 0x5b, 0xb9, 0x70, 0x53,
+    0x62, 0xd7, 0x76, 0xdd, 0x52, 0x57, 0x65, 0x97,
+    0x5f, 0xef, 0x53, 0x30, 0x00, 0x38, 0x4e, 0x05,
+    0x00, 0x09, 0x22, 0x01, 0x60, 0x4f, 0xae, 0x4f,
+    0xbb, 0x4f, 0x02, 0x50, 0x7a, 0x50, 0x99, 0x50,
+    0xe7, 0x50, 0xcf, 0x50, 0x9e, 0x34, 0x3a, 0x06,
+    0x4d, 0x51, 0x54, 0x51, 0x64, 0x51, 0x77, 0x51,
+    0x1c, 0x05, 0xb9, 0x34, 0x67, 0x51, 0x8d, 0x51,
+    0x4b, 0x05, 0x97, 0x51, 0xa4, 0x51, 0xcc, 0x4e,
+    0xac, 0x51, 0xb5, 0x51, 0xdf, 0x91, 0xf5, 0x51,
+    0x03, 0x52, 0xdf, 0x34, 0x3b, 0x52, 0x46, 0x52,
+    0x72, 0x52, 0x77, 0x52, 0x15, 0x35, 0x02, 0x00,
+    0x20, 0x80, 0x80, 0x00, 0x08, 0x00, 0x00, 0xc7,
+    0x52, 0x00, 0x02, 0x1d, 0x33, 0x3e, 0x3f, 0x50,
+    0x82, 0x8a, 0x93, 0xac, 0xb6, 0xb8, 0xb8, 0xb8,
+    0x2c, 0x0a, 0x70, 0x70, 0xca, 0x53, 0xdf, 0x53,
+    0x63, 0x0b, 0xeb, 0x53, 0xf1, 0x53, 0x06, 0x54,
+    0x9e, 0x54, 0x38, 0x54, 0x48, 0x54, 0x68, 0x54,
+    0xa2, 0x54, 0xf6, 0x54, 0x10, 0x55, 0x53, 0x55,
+    0x63, 0x55, 0x84, 0x55, 0x84, 0x55, 0x99, 0x55,
+    0xab, 0x55, 0xb3, 0x55, 0xc2, 0x55, 0x16, 0x57,
+    0x06, 0x56, 0x17, 0x57, 0x51, 0x56, 0x74, 0x56,
+    0x07, 0x52, 0xee, 0x58, 0xce, 0x57, 0xf4, 0x57,
+    0x0d, 0x58, 0x8b, 0x57, 0x32, 0x58, 0x31, 0x58,
+    0xac, 0x58, 0xe4, 0x14, 0xf2, 0x58, 0xf7, 0x58,
+    0x06, 0x59, 0x1a, 0x59, 0x22, 0x59, 0x62, 0x59,
+    0xa8, 0x16, 0xea, 0x16, 0xec, 0x59, 0x1b, 0x5a,
+    0x27, 0x5a, 0xd8, 0x59, 0x66, 0x5a, 0xee, 0x36,
+    0xfc, 0x36, 0x08, 0x5b, 0x3e, 0x5b, 0x3e, 0x5b,
+    0xc8, 0x19, 0xc3, 0x5b, 0xd8, 0x5b, 0xe7, 0x5b,
+    0xf3, 0x5b, 0x18, 0x1b, 0xff, 0x5b, 0x06, 0x5c,
+    0x53, 0x5f, 0x22, 0x5c, 0x81, 0x37, 0x60, 0x5c,
+    0x6e, 0x5c, 0xc0, 0x5c, 0x8d, 0x5c, 0xe4, 0x1d,
+    0x43, 0x5d, 0xe6, 0x1d, 0x6e, 0x5d, 0x6b, 0x5d,
+    0x7c, 0x5d, 0xe1, 0x5d, 0xe2, 0x5d, 0x2f, 0x38,
+    0xfd, 0x5d, 0x28, 0x5e, 0x3d, 0x5e, 0x69, 0x5e,
+    0x62, 0x38, 0x83, 0x21, 0x7c, 0x38, 0xb0, 0x5e,
+    0xb3, 0x5e, 0xb6, 0x5e, 0xca, 0x5e, 0x92, 0xa3,
+    0xfe, 0x5e, 0x31, 0x23, 0x31, 0x23, 0x01, 0x82,
+    0x22, 0x5f, 0x22, 0x5f, 0xc7, 0x38, 0xb8, 0x32,
+    0xda, 0x61, 0x62, 0x5f, 0x6b, 0x5f, 0xe3, 0x38,
+    0x9a, 0x5f, 0xcd, 0x5f, 0xd7, 0x5f, 0xf9, 0x5f,
+    0x81, 0x60, 0x3a, 0x39, 0x1c, 0x39, 0x94, 0x60,
+    0xd4, 0x26, 0xc7, 0x60, 0x02, 0x02, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x0a,
+    0x00, 0x00, 0x02, 0x08, 0x00, 0x80, 0x08, 0x00,
+    0x00, 0x08, 0x80, 0x28, 0x80, 0x02, 0x00, 0x00,
+    0x02, 0x48, 0x61, 0x00, 0x04, 0x06, 0x04, 0x32,
+    0x46, 0x6a, 0x5c, 0x67, 0x96, 0xaa, 0xae, 0xc8,
+    0xd3, 0x5d, 0x62, 0x00, 0x54, 0x77, 0xf3, 0x0c,
+    0x2b, 0x3d, 0x63, 0xfc, 0x62, 0x68, 0x63, 0x83,
+    0x63, 0xe4, 0x63, 0xf1, 0x2b, 0x22, 0x64, 0xc5,
+    0x63, 0xa9, 0x63, 0x2e, 0x3a, 0x69, 0x64, 0x7e,
+    0x64, 0x9d, 0x64, 0x77, 0x64, 0x6c, 0x3a, 0x4f,
+    0x65, 0x6c, 0x65, 0x0a, 0x30, 0xe3, 0x65, 0xf8,
+    0x66, 0x49, 0x66, 0x19, 0x3b, 0x91, 0x66, 0x08,
+    0x3b, 0xe4, 0x3a, 0x92, 0x51, 0x95, 0x51, 0x00,
+    0x67, 0x9c, 0x66, 0xad, 0x80, 0xd9, 0x43, 0x17,
+    0x67, 0x1b, 0x67, 0x21, 0x67, 0x5e, 0x67, 0x53,
+    0x67, 0xc3, 0x33, 0x49, 0x3b, 0xfa, 0x67, 0x85,
+    0x67, 0x52, 0x68, 0x85, 0x68, 0x6d, 0x34, 0x8e,
+    0x68, 0x1f, 0x68, 0x14, 0x69, 0x9d, 0x3b, 0x42,
+    0x69, 0xa3, 0x69, 0xea, 0x69, 0xa8, 0x6a, 0xa3,
+    0x36, 0xdb, 0x6a, 0x18, 0x3c, 0x21, 0x6b, 0xa7,
+    0x38, 0x54, 0x6b, 0x4e, 0x3c, 0x72, 0x6b, 0x9f,
+    0x6b, 0xba, 0x6b, 0xbb, 0x6b, 0x8d, 0x3a, 0x0b,
+    0x1d, 0xfa, 0x3a, 0x4e, 0x6c, 0xbc, 0x3c, 0xbf,
+    0x6c, 0xcd, 0x6c, 0x67, 0x6c, 0x16, 0x6d, 0x3e,
+    0x6d, 0x77, 0x6d, 0x41, 0x6d, 0x69, 0x6d, 0x78,
+    0x6d, 0x85, 0x6d, 0x1e, 0x3d, 0x34, 0x6d, 0x2f,
+    0x6e, 0x6e, 0x6e, 0x33, 0x3d, 0xcb, 0x6e, 0xc7,
+    0x6e, 0xd1, 0x3e, 0xf9, 0x6d, 0x6e, 0x6f, 0x5e,
+    0x3f, 0x8e, 0x3f, 0xc6, 0x6f, 0x39, 0x70, 0x1e,
+    0x70, 0x1b, 0x70, 0x96, 0x3d, 0x4a, 0x70, 0x7d,
+    0x70, 0x77, 0x70, 0xad, 0x70, 0x25, 0x05, 0x45,
+    0x71, 0x63, 0x42, 0x9c, 0x71, 0xab, 0x43, 0x28,
+    0x72, 0x35, 0x72, 0x50, 0x72, 0x08, 0x46, 0x80,
+    0x72, 0x95, 0x72, 0x35, 0x47, 0x02, 0x20, 0x00,
+    0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80,
+    0x00, 0x00, 0x02, 0x02, 0x80, 0x8a, 0x00, 0x00,
+    0x20, 0x00, 0x08, 0x0a, 0x00, 0x80, 0x88, 0x80,
+    0x20, 0x14, 0x48, 0x7a, 0x73, 0x8b, 0x73, 0xac,
+    0x3e, 0xa5, 0x73, 0xb8, 0x3e, 0xb8, 0x3e, 0x47,
+    0x74, 0x5c, 0x74, 0x71, 0x74, 0x85, 0x74, 0xca,
+    0x74, 0x1b, 0x3f, 0x24, 0x75, 0x36, 0x4c, 0x3e,
+    0x75, 0x92, 0x4c, 0x70, 0x75, 0x9f, 0x21, 0x10,
+    0x76, 0xa1, 0x4f, 0xb8, 0x4f, 0x44, 0x50, 0xfc,
+    0x3f, 0x08, 0x40, 0xf4, 0x76, 0xf3, 0x50, 0xf2,
+    0x50, 0x19, 0x51, 0x33, 0x51, 0x1e, 0x77, 0x1f,
+    0x77, 0x1f, 0x77, 0x4a, 0x77, 0x39, 0x40, 0x8b,
+    0x77, 0x46, 0x40, 0x96, 0x40, 0x1d, 0x54, 0x4e,
+    0x78, 0x8c, 0x78, 0xcc, 0x78, 0xe3, 0x40, 0x26,
+    0x56, 0x56, 0x79, 0x9a, 0x56, 0xc5, 0x56, 0x8f,
+    0x79, 0xeb, 0x79, 0x2f, 0x41, 0x40, 0x7a, 0x4a,
+    0x7a, 0x4f, 0x7a, 0x7c, 0x59, 0xa7, 0x5a, 0xa7,
+    0x5a, 0xee, 0x7a, 0x02, 0x42, 0xab, 0x5b, 0xc6,
+    0x7b, 0xc9, 0x7b, 0x27, 0x42, 0x80, 0x5c, 0xd2,
+    0x7c, 0xa0, 0x42, 0xe8, 0x7c, 0xe3, 0x7c, 0x00,
+    0x7d, 0x86, 0x5f, 0x63, 0x7d, 0x01, 0x43, 0xc7,
+    0x7d, 0x02, 0x7e, 0x45, 0x7e, 0x34, 0x43, 0x28,
+    0x62, 0x47, 0x62, 0x59, 0x43, 0xd9, 0x62, 0x7a,
+    0x7f, 0x3e, 0x63, 0x95, 0x7f, 0xfa, 0x7f, 0x05,
+    0x80, 0xda, 0x64, 0x23, 0x65, 0x60, 0x80, 0xa8,
+    0x65, 0x70, 0x80, 0x5f, 0x33, 0xd5, 0x43, 0xb2,
+    0x80, 0x03, 0x81, 0x0b, 0x44, 0x3e, 0x81, 0xb5,
+    0x5a, 0xa7, 0x67, 0xb5, 0x67, 0x93, 0x33, 0x9c,
+    0x33, 0x01, 0x82, 0x04, 0x82, 0x9e, 0x8f, 0x6b,
+    0x44, 0x91, 0x82, 0x8b, 0x82, 0x9d, 0x82, 0xb3,
+    0x52, 0xb1, 0x82, 0xb3, 0x82, 0xbd, 0x82, 0xe6,
+    0x82, 0x3c, 0x6b, 0xe5, 0x82, 0x1d, 0x83, 0x63,
+    0x83, 0xad, 0x83, 0x23, 0x83, 0xbd, 0x83, 0xe7,
+    0x83, 0x57, 0x84, 0x53, 0x83, 0xca, 0x83, 0xcc,
+    0x83, 0xdc, 0x83, 0x36, 0x6c, 0x6b, 0x6d, 0x02,
+    0x00, 0x00, 0x20, 0x22, 0x2a, 0xa0, 0x0a, 0x00,
+    0x20, 0x80, 0x28, 0x00, 0xa8, 0x20, 0x20, 0x00,
+    0x02, 0x80, 0x22, 0x02, 0x8a, 0x08, 0x00, 0xaa,
+    0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x28, 0xd5,
+    0x6c, 0x2b, 0x45, 0xf1, 0x84, 0xf3, 0x84, 0x16,
+    0x85, 0xca, 0x73, 0x64, 0x85, 0x2c, 0x6f, 0x5d,
+    0x45, 0x61, 0x45, 0xb1, 0x6f, 0xd2, 0x70, 0x6b,
+    0x45, 0x50, 0x86, 0x5c, 0x86, 0x67, 0x86, 0x69,
+    0x86, 0xa9, 0x86, 0x88, 0x86, 0x0e, 0x87, 0xe2,
+    0x86, 0x79, 0x87, 0x28, 0x87, 0x6b, 0x87, 0x86,
+    0x87, 0xd7, 0x45, 0xe1, 0x87, 0x01, 0x88, 0xf9,
+    0x45, 0x60, 0x88, 0x63, 0x88, 0x67, 0x76, 0xd7,
+    0x88, 0xde, 0x88, 0x35, 0x46, 0xfa, 0x88, 0xbb,
+    0x34, 0xae, 0x78, 0x66, 0x79, 0xbe, 0x46, 0xc7,
+    0x46, 0xa0, 0x8a, 0xed, 0x8a, 0x8a, 0x8b, 0x55,
+    0x8c, 0xa8, 0x7c, 0xab, 0x8c, 0xc1, 0x8c, 0x1b,
+    0x8d, 0x77, 0x8d, 0x2f, 0x7f, 0x04, 0x08, 0xcb,
+    0x8d, 0xbc, 0x8d, 0xf0, 0x8d, 0xde, 0x08, 0xd4,
+    0x8e, 0x38, 0x8f, 0xd2, 0x85, 0xed, 0x85, 0x94,
+    0x90, 0xf1, 0x90, 0x11, 0x91, 0x2e, 0x87, 0x1b,
+    0x91, 0x38, 0x92, 0xd7, 0x92, 0xd8, 0x92, 0x7c,
+    0x92, 0xf9, 0x93, 0x15, 0x94, 0xfa, 0x8b, 0x8b,
+    0x95, 0x95, 0x49, 0xb7, 0x95, 0x77, 0x8d, 0xe6,
+    0x49, 0xc3, 0x96, 0xb2, 0x5d, 0x23, 0x97, 0x45,
+    0x91, 0x1a, 0x92, 0x6e, 0x4a, 0x76, 0x4a, 0xe0,
+    0x97, 0x0a, 0x94, 0xb2, 0x4a, 0x96, 0x94, 0x0b,
+    0x98, 0x0b, 0x98, 0x29, 0x98, 0xb6, 0x95, 0xe2,
+    0x98, 0x33, 0x4b, 0x29, 0x99, 0xa7, 0x99, 0xc2,
+    0x99, 0xfe, 0x99, 0xce, 0x4b, 0x30, 0x9b, 0x12,
+    0x9b, 0x40, 0x9c, 0xfd, 0x9c, 0xce, 0x4c, 0xed,
+    0x4c, 0x67, 0x9d, 0xce, 0xa0, 0xf8, 0x4c, 0x05,
+    0xa1, 0x0e, 0xa2, 0x91, 0xa2, 0xbb, 0x9e, 0x56,
+    0x4d, 0xf9, 0x9e, 0xfe, 0x9e, 0x05, 0x9f, 0x0f,
+    0x9f, 0x16, 0x9f, 0x3b, 0x9f, 0x00, 0xa6, 0x02,
+    0x88, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00,
+    0x28, 0x00, 0x08, 0xa0, 0x80, 0xa0, 0x80, 0x00,
+    0x80, 0x80, 0x00, 0x0a, 0x88, 0x80, 0x00, 0x80,
+    0x00, 0x20, 0x2a, 0x00, 0x80,
 };
 
-static const uint16_t unicode_comp_table[944] = {
+static const uint16_t unicode_comp_table[945] = {
     0x4a01, 0x49c0, 0x4a02, 0x0280, 0x0281, 0x0282, 0x0283, 0x02c0,
     0x02c2, 0x0a00, 0x0284, 0x2442, 0x0285, 0x07c0, 0x0980, 0x0982,
     0x2440, 0x2280, 0x02c4, 0x2282, 0x2284, 0x2286, 0x02c6, 0x02c8,
@@ -2173,8 +2191,9 @@ static const uint16_t unicode_comp_table[944] = {
     0x5704, 0x5706, 0x5708, 0x570a, 0x570c, 0x570e, 0x5710, 0x5712,
     0x5714, 0x5716, 0x5740, 0x5742, 0x5744, 0x5780, 0x5781, 0x57c0,
     0x57c1, 0x5800, 0x5801, 0x5840, 0x5841, 0x5880, 0x5881, 0x5900,
-    0x5901, 0x5902, 0x5903, 0x5940, 0x8e40, 0x8e42, 0x8e80, 0x8ec0,
-    0x8ec1, 0x8f00, 0x8f01, 0x8f41, 0x8f40, 0x8f43, 0x8f80, 0x8f81,
+    0x5901, 0x5902, 0x5903, 0x5940, 0x8e80, 0x8e82, 0x8ec0, 0x8f00,
+    0x8f01, 0x8f40, 0x8f41, 0x8f81, 0x8f80, 0x8f83, 0x8fc0, 0x8fc1,
+    0x9000,
 };
 
 typedef enum {
@@ -2260,7 +2279,7 @@ static const char unicode_gc_name_table[] =
     "C,Other"                  "\0"
 ;
 
-static const uint8_t unicode_gc_table[3719] = {
+static const uint8_t unicode_gc_table[3790] = {
     0xfa, 0x18, 0x17, 0x56, 0x0d, 0x56, 0x12, 0x13,
     0x16, 0x0c, 0x16, 0x11, 0x36, 0xe9, 0x02, 0x36,
     0x4c, 0x36, 0xe1, 0x12, 0x12, 0x16, 0x13, 0x0e,
@@ -2304,8 +2323,8 @@ static const uint8_t unicode_gc_table[3719] = {
     0x06, 0x2d, 0xe5, 0x0e, 0x66, 0x04, 0xe6, 0x01,
     0x04, 0x46, 0x04, 0x86, 0x20, 0xf6, 0x07, 0x00,
     0xe5, 0x11, 0x46, 0x20, 0x16, 0x00, 0xe5, 0x03,
-    0xe0, 0x2d, 0xe5, 0x0d, 0x00, 0xe5, 0x00, 0xe0,
-    0x0d, 0xe6, 0x07, 0x1b, 0xe6, 0x18, 0x07, 0xe5,
+    0xe0, 0x2d, 0xe5, 0x0d, 0x00, 0xe5, 0x0a, 0xe0,
+    0x03, 0xe6, 0x07, 0x1b, 0xe6, 0x18, 0x07, 0xe5,
     0x2e, 0x06, 0x07, 0x06, 0x05, 0x47, 0xe6, 0x00,
     0x67, 0x06, 0x27, 0x05, 0xc6, 0xe5, 0x02, 0x26,
     0x36, 0xe9, 0x02, 0x16, 0x04, 0xe5, 0x07, 0x06,
@@ -2328,80 +2347,80 @@ static const uint8_t unicode_gc_table[3719] = {
     0x00, 0x06, 0x27, 0x00, 0xe5, 0x00, 0x20, 0x25,
     0x20, 0xe5, 0x0e, 0x00, 0xc5, 0x00, 0x25, 0x00,
     0x85, 0x20, 0x06, 0x05, 0x07, 0x06, 0x07, 0x66,
-    0x20, 0x27, 0x20, 0x27, 0x06, 0xe0, 0x00, 0x06,
-    0x07, 0x60, 0x25, 0x00, 0x45, 0x26, 0x20, 0xe9,
-    0x02, 0x0f, 0x05, 0xab, 0xe0, 0x02, 0x06, 0x05,
-    0x00, 0xa5, 0x40, 0x45, 0x00, 0x65, 0x40, 0x25,
-    0x00, 0x05, 0x00, 0x25, 0x40, 0x25, 0x40, 0x45,
-    0x40, 0xe5, 0x04, 0x60, 0x27, 0x06, 0x27, 0x40,
-    0x47, 0x00, 0x47, 0x06, 0x20, 0x05, 0xa0, 0x07,
-    0xe0, 0x06, 0xe9, 0x02, 0x4b, 0xaf, 0x0d, 0x0f,
-    0x80, 0x06, 0x47, 0x06, 0xe5, 0x00, 0x00, 0x45,
-    0x00, 0xe5, 0x0f, 0x00, 0xe5, 0x08, 0x40, 0x05,
-    0x46, 0x67, 0x00, 0x46, 0x00, 0x66, 0xc0, 0x26,
-    0x00, 0x45, 0x80, 0x25, 0x26, 0x20, 0xe9, 0x02,
-    0xc0, 0x16, 0xcb, 0x0f, 0x05, 0x06, 0x27, 0x16,
-    0xe5, 0x00, 0x00, 0x45, 0x00, 0xe5, 0x0f, 0x00,
-    0xe5, 0x02, 0x00, 0x85, 0x20, 0x06, 0x05, 0x07,
-    0x06, 0x87, 0x00, 0x06, 0x27, 0x00, 0x27, 0x26,
-    0xc0, 0x27, 0xc0, 0x05, 0x00, 0x25, 0x26, 0x20,
-    0xe9, 0x02, 0x00, 0x25, 0xe0, 0x05, 0x26, 0x27,
-    0x00, 0xe5, 0x00, 0x00, 0x45, 0x00, 0xe5, 0x21,
-    0x26, 0x05, 0x47, 0x66, 0x00, 0x47, 0x00, 0x47,
-    0x06, 0x05, 0x0f, 0x60, 0x45, 0x07, 0xcb, 0x45,
-    0x26, 0x20, 0xe9, 0x02, 0xeb, 0x01, 0x0f, 0xa5,
-    0x20, 0x27, 0x00, 0xe5, 0x0a, 0x40, 0xe5, 0x10,
-    0x00, 0xe5, 0x01, 0x00, 0x05, 0x20, 0xc5, 0x40,
-    0x06, 0x60, 0x47, 0x46, 0x00, 0x06, 0x00, 0xe7,
-    0x00, 0xa0, 0xe9, 0x02, 0x20, 0x27, 0x16, 0xe0,
-    0x04, 0xe5, 0x28, 0x06, 0x25, 0xc6, 0x60, 0x0d,
-    0xa5, 0x04, 0xe6, 0x00, 0x16, 0xe9, 0x02, 0x36,
-    0xe0, 0x1d, 0x25, 0x00, 0x05, 0x00, 0x85, 0x00,
-    0xe5, 0x10, 0x00, 0x05, 0x00, 0xe5, 0x02, 0x06,
-    0x25, 0xe6, 0x01, 0x05, 0x20, 0x85, 0x00, 0x04,
-    0x00, 0xa6, 0x20, 0xe9, 0x02, 0x20, 0x65, 0xe0,
-    0x18, 0x05, 0x4f, 0xf6, 0x07, 0x0f, 0x16, 0x4f,
-    0x26, 0xaf, 0xe9, 0x02, 0xeb, 0x02, 0x0f, 0x06,
-    0x0f, 0x06, 0x0f, 0x06, 0x12, 0x13, 0x12, 0x13,
-    0x27, 0xe5, 0x00, 0x00, 0xe5, 0x1c, 0x60, 0xe6,
-    0x06, 0x07, 0x86, 0x16, 0x26, 0x85, 0xe6, 0x03,
-    0x00, 0xe6, 0x1c, 0x00, 0xef, 0x00, 0x06, 0xaf,
-    0x00, 0x2f, 0x96, 0x6f, 0x36, 0xe0, 0x1d, 0xe5,
-    0x23, 0x27, 0x66, 0x07, 0xa6, 0x07, 0x26, 0x27,
-    0x26, 0x05, 0xe9, 0x02, 0xb6, 0xa5, 0x27, 0x26,
-    0x65, 0x46, 0x05, 0x47, 0x25, 0xc7, 0x45, 0x66,
-    0xe5, 0x05, 0x06, 0x27, 0x26, 0xa7, 0x06, 0x05,
-    0x07, 0xe9, 0x02, 0x47, 0x06, 0x2f, 0xe1, 0x1e,
-    0x00, 0x01, 0x80, 0x01, 0x20, 0xe2, 0x23, 0x16,
-    0x04, 0x42, 0xe5, 0x80, 0xc1, 0x00, 0x65, 0x20,
-    0xc5, 0x00, 0x05, 0x00, 0x65, 0x20, 0xe5, 0x21,
-    0x00, 0x65, 0x20, 0xe5, 0x19, 0x00, 0x65, 0x20,
-    0xc5, 0x00, 0x05, 0x00, 0x65, 0x20, 0xe5, 0x07,
-    0x00, 0xe5, 0x31, 0x00, 0x65, 0x20, 0xe5, 0x3b,
-    0x20, 0x46, 0xf6, 0x01, 0xeb, 0x0c, 0x40, 0xe5,
-    0x08, 0xef, 0x02, 0xa0, 0xe1, 0x4e, 0x20, 0xa2,
-    0x20, 0x11, 0xe5, 0x81, 0xe4, 0x0f, 0x16, 0xe5,
-    0x09, 0x17, 0xe5, 0x12, 0x12, 0x13, 0x40, 0xe5,
-    0x43, 0x56, 0x4a, 0xe5, 0x00, 0xc0, 0xe5, 0x05,
-    0x00, 0x65, 0x46, 0xe0, 0x03, 0xe5, 0x0a, 0x46,
-    0x36, 0xe0, 0x01, 0xe5, 0x0a, 0x26, 0xe0, 0x04,
-    0xe5, 0x05, 0x00, 0x45, 0x00, 0x26, 0xe0, 0x04,
-    0xe5, 0x2c, 0x26, 0x07, 0xc6, 0xe7, 0x00, 0x06,
-    0x27, 0xe6, 0x03, 0x56, 0x04, 0x56, 0x0d, 0x05,
-    0x06, 0x20, 0xe9, 0x02, 0xa0, 0xeb, 0x02, 0xa0,
-    0xb6, 0x11, 0x76, 0x46, 0x1b, 0x00, 0xe9, 0x02,
-    0xa0, 0xe5, 0x1b, 0x04, 0xe5, 0x2d, 0xc0, 0x85,
-    0x26, 0xe5, 0x1a, 0x06, 0x05, 0x80, 0xe5, 0x3e,
-    0xe0, 0x02, 0xe5, 0x17, 0x00, 0x46, 0x67, 0x26,
-    0x47, 0x60, 0x27, 0x06, 0xa7, 0x46, 0x60, 0x0f,
-    0x40, 0x36, 0xe9, 0x02, 0xe5, 0x16, 0x20, 0x85,
-    0xe0, 0x03, 0xe5, 0x24, 0x60, 0xe5, 0x12, 0xa0,
-    0xe9, 0x02, 0x0b, 0x40, 0xef, 0x1a, 0xe5, 0x0f,
-    0x26, 0x27, 0x06, 0x20, 0x36, 0xe5, 0x2d, 0x07,
-    0x06, 0x07, 0xc6, 0x00, 0x06, 0x07, 0x06, 0x27,
-    0xe6, 0x00, 0xa7, 0xe6, 0x02, 0x20, 0x06, 0xe9,
-    0x02, 0xa0, 0xe9, 0x02, 0xa0, 0xd6, 0x04, 0xb6,
-    0x20, 0xe6, 0x06, 0x08, 0xe0, 0x39, 0x66, 0x07,
+    0x20, 0x27, 0x20, 0x27, 0x06, 0xc0, 0x26, 0x07,
+    0x60, 0x25, 0x00, 0x45, 0x26, 0x20, 0xe9, 0x02,
+    0x0f, 0x05, 0xab, 0xe0, 0x02, 0x06, 0x05, 0x00,
+    0xa5, 0x40, 0x45, 0x00, 0x65, 0x40, 0x25, 0x00,
+    0x05, 0x00, 0x25, 0x40, 0x25, 0x40, 0x45, 0x40,
+    0xe5, 0x04, 0x60, 0x27, 0x06, 0x27, 0x40, 0x47,
+    0x00, 0x47, 0x06, 0x20, 0x05, 0xa0, 0x07, 0xe0,
+    0x06, 0xe9, 0x02, 0x4b, 0xaf, 0x0d, 0x0f, 0x80,
+    0x06, 0x47, 0x06, 0xe5, 0x00, 0x00, 0x45, 0x00,
+    0xe5, 0x0f, 0x00, 0xe5, 0x08, 0x40, 0x05, 0x46,
+    0x67, 0x00, 0x46, 0x00, 0x66, 0xc0, 0x26, 0x00,
+    0x45, 0x80, 0x25, 0x26, 0x20, 0xe9, 0x02, 0xc0,
+    0x16, 0xcb, 0x0f, 0x05, 0x06, 0x27, 0x16, 0xe5,
+    0x00, 0x00, 0x45, 0x00, 0xe5, 0x0f, 0x00, 0xe5,
+    0x02, 0x00, 0x85, 0x20, 0x06, 0x05, 0x07, 0x06,
+    0x87, 0x00, 0x06, 0x27, 0x00, 0x27, 0x26, 0xc0,
+    0x27, 0xc0, 0x05, 0x00, 0x25, 0x26, 0x20, 0xe9,
+    0x02, 0x00, 0x25, 0xe0, 0x05, 0x26, 0x27, 0xe5,
+    0x01, 0x00, 0x45, 0x00, 0xe5, 0x21, 0x26, 0x05,
+    0x47, 0x66, 0x00, 0x47, 0x00, 0x47, 0x06, 0x05,
+    0x0f, 0x60, 0x45, 0x07, 0xcb, 0x45, 0x26, 0x20,
+    0xe9, 0x02, 0xeb, 0x01, 0x0f, 0xa5, 0x00, 0x06,
+    0x27, 0x00, 0xe5, 0x0a, 0x40, 0xe5, 0x10, 0x00,
+    0xe5, 0x01, 0x00, 0x05, 0x20, 0xc5, 0x40, 0x06,
+    0x60, 0x47, 0x46, 0x00, 0x06, 0x00, 0xe7, 0x00,
+    0xa0, 0xe9, 0x02, 0x20, 0x27, 0x16, 0xe0, 0x04,
+    0xe5, 0x28, 0x06, 0x25, 0xc6, 0x60, 0x0d, 0xa5,
+    0x04, 0xe6, 0x00, 0x16, 0xe9, 0x02, 0x36, 0xe0,
+    0x1d, 0x25, 0x00, 0x05, 0x00, 0x85, 0x00, 0xe5,
+    0x10, 0x00, 0x05, 0x00, 0xe5, 0x02, 0x06, 0x25,
+    0xe6, 0x01, 0x05, 0x20, 0x85, 0x00, 0x04, 0x00,
+    0xa6, 0x20, 0xe9, 0x02, 0x20, 0x65, 0xe0, 0x18,
+    0x05, 0x4f, 0xf6, 0x07, 0x0f, 0x16, 0x4f, 0x26,
+    0xaf, 0xe9, 0x02, 0xeb, 0x02, 0x0f, 0x06, 0x0f,
+    0x06, 0x0f, 0x06, 0x12, 0x13, 0x12, 0x13, 0x27,
+    0xe5, 0x00, 0x00, 0xe5, 0x1c, 0x60, 0xe6, 0x06,
+    0x07, 0x86, 0x16, 0x26, 0x85, 0xe6, 0x03, 0x00,
+    0xe6, 0x1c, 0x00, 0xef, 0x00, 0x06, 0xaf, 0x00,
+    0x2f, 0x96, 0x6f, 0x36, 0xe0, 0x1d, 0xe5, 0x23,
+    0x27, 0x66, 0x07, 0xa6, 0x07, 0x26, 0x27, 0x26,
+    0x05, 0xe9, 0x02, 0xb6, 0xa5, 0x27, 0x26, 0x65,
+    0x46, 0x05, 0x47, 0x25, 0xc7, 0x45, 0x66, 0xe5,
+    0x05, 0x06, 0x27, 0x26, 0xa7, 0x06, 0x05, 0x07,
+    0xe9, 0x02, 0x47, 0x06, 0x2f, 0xe1, 0x1e, 0x00,
+    0x01, 0x80, 0x01, 0x20, 0xe2, 0x23, 0x16, 0x04,
+    0x42, 0xe5, 0x80, 0xc1, 0x00, 0x65, 0x20, 0xc5,
+    0x00, 0x05, 0x00, 0x65, 0x20, 0xe5, 0x21, 0x00,
+    0x65, 0x20, 0xe5, 0x19, 0x00, 0x65, 0x20, 0xc5,
+    0x00, 0x05, 0x00, 0x65, 0x20, 0xe5, 0x07, 0x00,
+    0xe5, 0x31, 0x00, 0x65, 0x20, 0xe5, 0x3b, 0x20,
+    0x46, 0xf6, 0x01, 0xeb, 0x0c, 0x40, 0xe5, 0x08,
+    0xef, 0x02, 0xa0, 0xe1, 0x4e, 0x20, 0xa2, 0x20,
+    0x11, 0xe5, 0x81, 0xe4, 0x0f, 0x16, 0xe5, 0x09,
+    0x17, 0xe5, 0x12, 0x12, 0x13, 0x40, 0xe5, 0x43,
+    0x56, 0x4a, 0xe5, 0x00, 0xc0, 0xe5, 0x05, 0x00,
+    0x65, 0x46, 0xe0, 0x03, 0xe5, 0x0a, 0x46, 0x36,
+    0xe0, 0x01, 0xe5, 0x0a, 0x26, 0xe0, 0x04, 0xe5,
+    0x05, 0x00, 0x45, 0x00, 0x26, 0xe0, 0x04, 0xe5,
+    0x2c, 0x26, 0x07, 0xc6, 0xe7, 0x00, 0x06, 0x27,
+    0xe6, 0x03, 0x56, 0x04, 0x56, 0x0d, 0x05, 0x06,
+    0x20, 0xe9, 0x02, 0xa0, 0xeb, 0x02, 0xa0, 0xb6,
+    0x11, 0x76, 0x46, 0x1b, 0x00, 0xe9, 0x02, 0xa0,
+    0xe5, 0x1b, 0x04, 0xe5, 0x2d, 0xc0, 0x85, 0x26,
+    0xe5, 0x1a, 0x06, 0x05, 0x80, 0xe5, 0x3e, 0xe0,
+    0x02, 0xe5, 0x17, 0x00, 0x46, 0x67, 0x26, 0x47,
+    0x60, 0x27, 0x06, 0xa7, 0x46, 0x60, 0x0f, 0x40,
+    0x36, 0xe9, 0x02, 0xe5, 0x16, 0x20, 0x85, 0xe0,
+    0x03, 0xe5, 0x24, 0x60, 0xe5, 0x12, 0xa0, 0xe9,
+    0x02, 0x0b, 0x40, 0xef, 0x1a, 0xe5, 0x0f, 0x26,
+    0x27, 0x06, 0x20, 0x36, 0xe5, 0x2d, 0x07, 0x06,
+    0x07, 0xc6, 0x00, 0x06, 0x07, 0x06, 0x27, 0xe6,
+    0x00, 0xa7, 0xe6, 0x02, 0x20, 0x06, 0xe9, 0x02,
+    0xa0, 0xe9, 0x02, 0xa0, 0xd6, 0x04, 0xb6, 0x20,
+    0xe6, 0x06, 0x08, 0x26, 0xe0, 0x37, 0x66, 0x07,
     0xe5, 0x27, 0x06, 0x07, 0x86, 0x07, 0x06, 0x87,
     0x06, 0x27, 0xc5, 0x60, 0xe9, 0x02, 0xd6, 0xef,
     0x02, 0xe6, 0x01, 0xef, 0x01, 0x40, 0x26, 0x07,
@@ -2461,7 +2480,7 @@ static const uint8_t unicode_gc_table[3719] = {
     0x13, 0x12, 0x13, 0x12, 0x13, 0xec, 0x37, 0x12,
     0x13, 0x12, 0x13, 0xec, 0x18, 0x12, 0x13, 0xec,
     0x80, 0x7a, 0xef, 0x28, 0xec, 0x0d, 0x2f, 0xac,
-    0xef, 0x1f, 0x20, 0xef, 0x18, 0x20, 0xef, 0x60,
+    0xef, 0x1f, 0x20, 0xef, 0x18, 0x00, 0xef, 0x61,
     0xe1, 0x27, 0x00, 0xe2, 0x27, 0x00, 0x5f, 0x21,
     0x22, 0xdf, 0x41, 0x02, 0x3f, 0x02, 0x3f, 0x82,
     0x24, 0x41, 0x02, 0xff, 0x5a, 0x02, 0xaf, 0x7f,
@@ -2475,257 +2494,266 @@ static const uint8_t unicode_gc_table[3719] = {
     0x11, 0x36, 0x11, 0x16, 0x14, 0x15, 0x36, 0x14,
     0x15, 0x12, 0x13, 0x12, 0x13, 0x12, 0x13, 0x12,
     0x13, 0x96, 0x04, 0xf6, 0x02, 0x31, 0x76, 0x11,
-    0x16, 0x12, 0xf6, 0x05, 0xe0, 0x28, 0xef, 0x12,
-    0x00, 0xef, 0x51, 0xe0, 0x04, 0xef, 0x80, 0x4e,
-    0xe0, 0x12, 0xef, 0x04, 0x60, 0x17, 0x56, 0x0f,
-    0x04, 0x05, 0x0a, 0x12, 0x13, 0x12, 0x13, 0x12,
-    0x13, 0x12, 0x13, 0x12, 0x13, 0x2f, 0x12, 0x13,
-    0x12, 0x13, 0x12, 0x13, 0x12, 0x13, 0x11, 0x12,
-    0x33, 0x0f, 0xea, 0x01, 0x66, 0x27, 0x11, 0x84,
-    0x2f, 0x4a, 0x04, 0x05, 0x16, 0x2f, 0x00, 0xe5,
-    0x4e, 0x20, 0x26, 0x2e, 0x24, 0x05, 0x11, 0xe5,
-    0x52, 0x16, 0x44, 0x05, 0x80, 0xe5, 0x23, 0x00,
-    0xe5, 0x56, 0x00, 0x2f, 0x6b, 0xef, 0x02, 0xe5,
-    0x13, 0x80, 0xef, 0x1c, 0xe0, 0x04, 0xe5, 0x08,
-    0xef, 0x17, 0x00, 0xeb, 0x02, 0xef, 0x16, 0xeb,
-    0x00, 0x0f, 0xeb, 0x07, 0xef, 0x18, 0xeb, 0x02,
-    0xef, 0x1f, 0xeb, 0x07, 0xef, 0x80, 0xb8, 0xe5,
-    0x99, 0x2e, 0xe0, 0x02, 0xef, 0x38, 0xe5, 0xc0,
-    0x11, 0x68, 0xe0, 0x08, 0xe5, 0x0d, 0x04, 0xe5,
-    0x83, 0xef, 0x40, 0xef, 0x2f, 0xe0, 0x01, 0xe5,
-    0x20, 0xa4, 0x36, 0xe5, 0x80, 0x84, 0x04, 0x56,
-    0xe5, 0x08, 0xe9, 0x02, 0x25, 0xe0, 0x0c, 0xff,
-    0x26, 0x05, 0x06, 0x48, 0x16, 0xe6, 0x02, 0x16,
-    0x04, 0xff, 0x14, 0x24, 0x26, 0xe5, 0x3e, 0xea,
-    0x02, 0x26, 0xb6, 0xe0, 0x00, 0xee, 0x0f, 0xe4,
-    0x01, 0x2e, 0xff, 0x06, 0x22, 0xff, 0x36, 0x04,
-    0xe2, 0x00, 0x9f, 0xff, 0x02, 0x04, 0x2e, 0x7f,
-    0x05, 0x7f, 0x22, 0xff, 0x0d, 0x61, 0x02, 0x81,
-    0x02, 0xff, 0x02, 0x20, 0x5f, 0x21, 0xe0, 0x28,
-    0x05, 0x24, 0x02, 0xc5, 0x06, 0x45, 0x06, 0x65,
-    0x06, 0xe5, 0x0f, 0x27, 0x26, 0x07, 0x6f, 0x60,
-    0xab, 0x2f, 0x0d, 0x0f, 0xa0, 0xe5, 0x2c, 0x76,
-    0xe0, 0x00, 0x27, 0xe5, 0x2a, 0xe7, 0x08, 0x26,
-    0xe0, 0x00, 0x36, 0xe9, 0x02, 0xa0, 0xe6, 0x0a,
-    0xa5, 0x56, 0x05, 0x16, 0x25, 0x06, 0xe9, 0x02,
-    0xe5, 0x14, 0xe6, 0x00, 0x36, 0xe5, 0x0f, 0xe6,
-    0x03, 0x27, 0xe0, 0x03, 0x16, 0xe5, 0x15, 0x40,
-    0x46, 0x07, 0xe5, 0x27, 0x06, 0x27, 0x66, 0x27,
-    0x26, 0x47, 0xf6, 0x05, 0x00, 0x04, 0xe9, 0x02,
-    0x60, 0x36, 0x85, 0x06, 0x04, 0xe5, 0x01, 0xe9,
-    0x02, 0x85, 0x00, 0xe5, 0x21, 0xa6, 0x27, 0x26,
-    0x27, 0x26, 0xe0, 0x01, 0x45, 0x06, 0xe5, 0x00,
-    0x06, 0x07, 0x20, 0xe9, 0x02, 0x20, 0x76, 0xe5,
-    0x08, 0x04, 0xa5, 0x4f, 0x05, 0x07, 0x06, 0x07,
-    0xe5, 0x2a, 0x06, 0x05, 0x46, 0x25, 0x26, 0x85,
-    0x26, 0x05, 0x06, 0x05, 0xe0, 0x10, 0x25, 0x04,
-    0x36, 0xe5, 0x03, 0x07, 0x26, 0x27, 0x36, 0x05,
-    0x24, 0x07, 0x06, 0xe0, 0x02, 0xa5, 0x20, 0xa5,
-    0x20, 0xa5, 0xe0, 0x01, 0xc5, 0x00, 0xc5, 0x00,
-    0xe2, 0x23, 0x0e, 0x64, 0xe2, 0x00, 0xe0, 0x00,
-    0xe2, 0x48, 0xe5, 0x1b, 0x27, 0x06, 0x27, 0x06,
-    0x27, 0x16, 0x07, 0x06, 0x20, 0xe9, 0x02, 0xa0,
-    0xe5, 0xab, 0x1c, 0xe0, 0x04, 0xe5, 0x0f, 0x60,
-    0xe5, 0x29, 0x60, 0xfc, 0x87, 0x78, 0xfd, 0x98,
-    0x78, 0xe5, 0x80, 0xe6, 0x20, 0xe5, 0x62, 0xe0,
-    0x1e, 0xc2, 0xe0, 0x04, 0x82, 0x80, 0x05, 0x06,
-    0xe5, 0x02, 0x0c, 0xe5, 0x05, 0x00, 0x85, 0x00,
-    0x05, 0x00, 0x25, 0x00, 0x25, 0x00, 0xe5, 0x64,
-    0xee, 0x08, 0xe0, 0x09, 0xe5, 0x80, 0xe3, 0x13,
-    0x12, 0xe0, 0x08, 0xe5, 0x38, 0x20, 0xe5, 0x2e,
-    0xe0, 0x20, 0xe5, 0x04, 0x0d, 0x0f, 0x20, 0xe6,
-    0x08, 0xd6, 0x12, 0x13, 0x16, 0xa0, 0xe6, 0x08,
-    0x16, 0x31, 0x30, 0x12, 0x13, 0x12, 0x13, 0x12,
-    0x13, 0x12, 0x13, 0x12, 0x13, 0x12, 0x13, 0x12,
-    0x13, 0x12, 0x13, 0x36, 0x12, 0x13, 0x76, 0x50,
-    0x56, 0x00, 0x76, 0x11, 0x12, 0x13, 0x12, 0x13,
-    0x12, 0x13, 0x56, 0x0c, 0x11, 0x4c, 0x00, 0x16,
-    0x0d, 0x36, 0x60, 0x85, 0x00, 0xe5, 0x7f, 0x20,
-    0x1b, 0x00, 0x56, 0x0d, 0x56, 0x12, 0x13, 0x16,
-    0x0c, 0x16, 0x11, 0x36, 0xe9, 0x02, 0x36, 0x4c,
-    0x36, 0xe1, 0x12, 0x12, 0x16, 0x13, 0x0e, 0x10,
-    0x0e, 0xe2, 0x12, 0x12, 0x0c, 0x13, 0x0c, 0x12,
-    0x13, 0x16, 0x12, 0x13, 0x36, 0xe5, 0x02, 0x04,
-    0xe5, 0x25, 0x24, 0xe5, 0x17, 0x40, 0xa5, 0x20,
-    0xa5, 0x20, 0xa5, 0x20, 0x45, 0x40, 0x2d, 0x0c,
-    0x0e, 0x0f, 0x2d, 0x00, 0x0f, 0x6c, 0x2f, 0xe0,
-    0x02, 0x5b, 0x2f, 0x20, 0xe5, 0x04, 0x00, 0xe5,
-    0x12, 0x00, 0xe5, 0x0b, 0x00, 0x25, 0x00, 0xe5,
-    0x07, 0x20, 0xe5, 0x06, 0xe0, 0x1a, 0xe5, 0x73,
-    0x80, 0x56, 0x60, 0xeb, 0x25, 0x40, 0xef, 0x01,
-    0xea, 0x2d, 0x6b, 0xef, 0x09, 0x2b, 0x4f, 0x00,
-    0xef, 0x04, 0x60, 0x0f, 0xe0, 0x27, 0xef, 0x25,
-    0x06, 0xe0, 0x7a, 0xe5, 0x15, 0x40, 0xe5, 0x29,
-    0xe0, 0x07, 0x06, 0xeb, 0x13, 0x60, 0xe5, 0x18,
-    0x6b, 0xe0, 0x01, 0xe5, 0x0c, 0x0a, 0xe5, 0x00,
-    0x0a, 0x80, 0xe5, 0x1e, 0x86, 0x80, 0xe5, 0x16,
-    0x00, 0x16, 0xe5, 0x1c, 0x60, 0xe5, 0x00, 0x16,
-    0x8a, 0xe0, 0x22, 0xe1, 0x20, 0xe2, 0x20, 0xe5,
-    0x46, 0x20, 0xe9, 0x02, 0xa0, 0xe1, 0x1c, 0x60,
-    0xe2, 0x1c, 0x60, 0xe5, 0x20, 0xe0, 0x00, 0xe5,
-    0x2c, 0xe0, 0x03, 0x16, 0xe0, 0x80, 0x08, 0xe5,
-    0x80, 0xaf, 0xe0, 0x01, 0xe5, 0x0e, 0xe0, 0x02,
-    0xe5, 0x00, 0xe0, 0x80, 0x10, 0xa5, 0x20, 0x05,
-    0x00, 0xe5, 0x24, 0x00, 0x25, 0x40, 0x05, 0x20,
-    0xe5, 0x0f, 0x00, 0x16, 0xeb, 0x00, 0xe5, 0x0f,
-    0x2f, 0xcb, 0xe5, 0x17, 0xe0, 0x00, 0xeb, 0x01,
-    0xe0, 0x28, 0xe5, 0x0b, 0x00, 0x25, 0x80, 0x8b,
-    0xe5, 0x0e, 0xab, 0x40, 0x16, 0xe5, 0x12, 0x80,
-    0x16, 0xe0, 0x38, 0xe5, 0x30, 0x60, 0x2b, 0x25,
-    0xeb, 0x08, 0x20, 0xeb, 0x26, 0x05, 0x46, 0x00,
-    0x26, 0x80, 0x66, 0x65, 0x00, 0x45, 0x00, 0xe5,
-    0x15, 0x20, 0x46, 0x60, 0x06, 0xeb, 0x01, 0xc0,
-    0xf6, 0x01, 0xc0, 0xe5, 0x15, 0x2b, 0x16, 0xe5,
-    0x15, 0x4b, 0xe0, 0x18, 0xe5, 0x00, 0x0f, 0xe5,
-    0x14, 0x26, 0x60, 0x8b, 0xd6, 0xe0, 0x01, 0xe5,
-    0x2e, 0x40, 0xd6, 0xe5, 0x0e, 0x20, 0xeb, 0x00,
-    0xe5, 0x0b, 0x80, 0xeb, 0x00, 0xe5, 0x0a, 0xc0,
-    0x76, 0xe0, 0x04, 0xcb, 0xe0, 0x48, 0xe5, 0x41,
-    0xe0, 0x2f, 0xe1, 0x2b, 0xe0, 0x05, 0xe2, 0x2b,
-    0xc0, 0xab, 0xe5, 0x1c, 0x66, 0xe0, 0x00, 0xe9,
-    0x02, 0xe0, 0x80, 0x9e, 0xeb, 0x17, 0xe0, 0x79,
-    0xe5, 0x15, 0xeb, 0x02, 0x05, 0xe0, 0x00, 0xe5,
-    0x0e, 0xe6, 0x03, 0x6b, 0x96, 0xe0, 0x7e, 0xe5,
+    0x16, 0x12, 0xf6, 0x05, 0x2f, 0x16, 0xe0, 0x25,
+    0xef, 0x12, 0x00, 0xef, 0x51, 0xe0, 0x04, 0xef,
+    0x80, 0x4e, 0xe0, 0x12, 0xef, 0x04, 0x60, 0x17,
+    0x56, 0x0f, 0x04, 0x05, 0x0a, 0x12, 0x13, 0x12,
+    0x13, 0x12, 0x13, 0x12, 0x13, 0x12, 0x13, 0x2f,
+    0x12, 0x13, 0x12, 0x13, 0x12, 0x13, 0x12, 0x13,
+    0x11, 0x12, 0x33, 0x0f, 0xea, 0x01, 0x66, 0x27,
+    0x11, 0x84, 0x2f, 0x4a, 0x04, 0x05, 0x16, 0x2f,
+    0x00, 0xe5, 0x4e, 0x20, 0x26, 0x2e, 0x24, 0x05,
+    0x11, 0xe5, 0x52, 0x16, 0x44, 0x05, 0x80, 0xe5,
+    0x23, 0x00, 0xe5, 0x56, 0x00, 0x2f, 0x6b, 0xef,
+    0x02, 0xe5, 0x18, 0xef, 0x1c, 0xe0, 0x04, 0xe5,
+    0x08, 0xef, 0x17, 0x00, 0xeb, 0x02, 0xef, 0x16,
+    0xeb, 0x00, 0x0f, 0xeb, 0x07, 0xef, 0x18, 0xeb,
+    0x02, 0xef, 0x1f, 0xeb, 0x07, 0xef, 0x80, 0xb8,
+    0xe5, 0x99, 0x38, 0xef, 0x38, 0xe5, 0xc0, 0x11,
+    0x75, 0x40, 0xe5, 0x0d, 0x04, 0xe5, 0x83, 0xef,
+    0x40, 0xef, 0x2f, 0xe0, 0x01, 0xe5, 0x20, 0xa4,
+    0x36, 0xe5, 0x80, 0x84, 0x04, 0x56, 0xe5, 0x08,
+    0xe9, 0x02, 0x25, 0xe0, 0x0c, 0xff, 0x26, 0x05,
+    0x06, 0x48, 0x16, 0xe6, 0x02, 0x16, 0x04, 0xff,
+    0x14, 0x24, 0x26, 0xe5, 0x3e, 0xea, 0x02, 0x26,
+    0xb6, 0xe0, 0x00, 0xee, 0x0f, 0xe4, 0x01, 0x2e,
+    0xff, 0x06, 0x22, 0xff, 0x36, 0x04, 0xe2, 0x00,
+    0x9f, 0xff, 0x02, 0x04, 0x2e, 0x7f, 0x05, 0x7f,
+    0x22, 0xff, 0x0d, 0x61, 0x02, 0x81, 0x02, 0xff,
+    0x02, 0x20, 0x5f, 0x41, 0x02, 0x3f, 0xe0, 0x22,
+    0x3f, 0x05, 0x24, 0x02, 0xc5, 0x06, 0x45, 0x06,
+    0x65, 0x06, 0xe5, 0x0f, 0x27, 0x26, 0x07, 0x6f,
+    0x06, 0x40, 0xab, 0x2f, 0x0d, 0x0f, 0xa0, 0xe5,
+    0x2c, 0x76, 0xe0, 0x00, 0x27, 0xe5, 0x2a, 0xe7,
+    0x08, 0x26, 0xe0, 0x00, 0x36, 0xe9, 0x02, 0xa0,
+    0xe6, 0x0a, 0xa5, 0x56, 0x05, 0x16, 0x25, 0x06,
+    0xe9, 0x02, 0xe5, 0x14, 0xe6, 0x00, 0x36, 0xe5,
+    0x0f, 0xe6, 0x03, 0x27, 0xe0, 0x03, 0x16, 0xe5,
+    0x15, 0x40, 0x46, 0x07, 0xe5, 0x27, 0x06, 0x27,
+    0x66, 0x27, 0x26, 0x47, 0xf6, 0x05, 0x00, 0x04,
+    0xe9, 0x02, 0x60, 0x36, 0x85, 0x06, 0x04, 0xe5,
+    0x01, 0xe9, 0x02, 0x85, 0x00, 0xe5, 0x21, 0xa6,
+    0x27, 0x26, 0x27, 0x26, 0xe0, 0x01, 0x45, 0x06,
+    0xe5, 0x00, 0x06, 0x07, 0x20, 0xe9, 0x02, 0x20,
+    0x76, 0xe5, 0x08, 0x04, 0xa5, 0x4f, 0x05, 0x07,
+    0x06, 0x07, 0xe5, 0x2a, 0x06, 0x05, 0x46, 0x25,
+    0x26, 0x85, 0x26, 0x05, 0x06, 0x05, 0xe0, 0x10,
+    0x25, 0x04, 0x36, 0xe5, 0x03, 0x07, 0x26, 0x27,
+    0x36, 0x05, 0x24, 0x07, 0x06, 0xe0, 0x02, 0xa5,
+    0x20, 0xa5, 0x20, 0xa5, 0xe0, 0x01, 0xc5, 0x00,
+    0xc5, 0x00, 0xe2, 0x23, 0x0e, 0x64, 0xe2, 0x01,
+    0x04, 0x2e, 0x60, 0xe2, 0x48, 0xe5, 0x1b, 0x27,
+    0x06, 0x27, 0x06, 0x27, 0x16, 0x07, 0x06, 0x20,
+    0xe9, 0x02, 0xa0, 0xe5, 0xab, 0x1c, 0xe0, 0x04,
+    0xe5, 0x0f, 0x60, 0xe5, 0x29, 0x60, 0xfc, 0x87,
+    0x78, 0xfd, 0x98, 0x78, 0xe5, 0x80, 0xe6, 0x20,
+    0xe5, 0x62, 0xe0, 0x1e, 0xc2, 0xe0, 0x04, 0x82,
+    0x80, 0x05, 0x06, 0xe5, 0x02, 0x0c, 0xe5, 0x05,
+    0x00, 0x85, 0x00, 0x05, 0x00, 0x25, 0x00, 0x25,
+    0x00, 0xe5, 0x64, 0xee, 0x08, 0xe0, 0x09, 0xe5,
+    0x80, 0xe3, 0x13, 0x12, 0xe0, 0x08, 0xe5, 0x38,
+    0x20, 0xe5, 0x2e, 0xe0, 0x20, 0xe5, 0x04, 0x0d,
+    0x0f, 0x20, 0xe6, 0x08, 0xd6, 0x12, 0x13, 0x16,
+    0xa0, 0xe6, 0x08, 0x16, 0x31, 0x30, 0x12, 0x13,
+    0x12, 0x13, 0x12, 0x13, 0x12, 0x13, 0x12, 0x13,
+    0x12, 0x13, 0x12, 0x13, 0x12, 0x13, 0x36, 0x12,
+    0x13, 0x76, 0x50, 0x56, 0x00, 0x76, 0x11, 0x12,
+    0x13, 0x12, 0x13, 0x12, 0x13, 0x56, 0x0c, 0x11,
+    0x4c, 0x00, 0x16, 0x0d, 0x36, 0x60, 0x85, 0x00,
+    0xe5, 0x7f, 0x20, 0x1b, 0x00, 0x56, 0x0d, 0x56,
+    0x12, 0x13, 0x16, 0x0c, 0x16, 0x11, 0x36, 0xe9,
+    0x02, 0x36, 0x4c, 0x36, 0xe1, 0x12, 0x12, 0x16,
+    0x13, 0x0e, 0x10, 0x0e, 0xe2, 0x12, 0x12, 0x0c,
+    0x13, 0x0c, 0x12, 0x13, 0x16, 0x12, 0x13, 0x36,
+    0xe5, 0x02, 0x04, 0xe5, 0x25, 0x24, 0xe5, 0x17,
+    0x40, 0xa5, 0x20, 0xa5, 0x20, 0xa5, 0x20, 0x45,
+    0x40, 0x2d, 0x0c, 0x0e, 0x0f, 0x2d, 0x00, 0x0f,
+    0x6c, 0x2f, 0xe0, 0x02, 0x5b, 0x2f, 0x20, 0xe5,
+    0x04, 0x00, 0xe5, 0x12, 0x00, 0xe5, 0x0b, 0x00,
+    0x25, 0x00, 0xe5, 0x07, 0x20, 0xe5, 0x06, 0xe0,
+    0x1a, 0xe5, 0x73, 0x80, 0x56, 0x60, 0xeb, 0x25,
+    0x40, 0xef, 0x01, 0xea, 0x2d, 0x6b, 0xef, 0x09,
+    0x2b, 0x4f, 0x00, 0xef, 0x05, 0x40, 0x0f, 0xe0,
+    0x27, 0xef, 0x25, 0x06, 0xe0, 0x7a, 0xe5, 0x15,
+    0x40, 0xe5, 0x29, 0xe0, 0x07, 0x06, 0xeb, 0x13,
+    0x60, 0xe5, 0x18, 0x6b, 0xe0, 0x01, 0xe5, 0x0c,
+    0x0a, 0xe5, 0x00, 0x0a, 0x80, 0xe5, 0x1e, 0x86,
+    0x80, 0xe5, 0x16, 0x00, 0x16, 0xe5, 0x1c, 0x60,
+    0xe5, 0x00, 0x16, 0x8a, 0xe0, 0x22, 0xe1, 0x20,
+    0xe2, 0x20, 0xe5, 0x46, 0x20, 0xe9, 0x02, 0xa0,
+    0xe1, 0x1c, 0x60, 0xe2, 0x1c, 0x60, 0xe5, 0x20,
+    0xe0, 0x00, 0xe5, 0x2c, 0xe0, 0x03, 0x16, 0xe0,
+    0x80, 0x08, 0xe5, 0x80, 0xaf, 0xe0, 0x01, 0xe5,
+    0x0e, 0xe0, 0x02, 0xe5, 0x00, 0xe0, 0x80, 0x10,
+    0xa5, 0x20, 0x05, 0x00, 0xe5, 0x24, 0x00, 0x25,
+    0x40, 0x05, 0x20, 0xe5, 0x0f, 0x00, 0x16, 0xeb,
+    0x00, 0xe5, 0x0f, 0x2f, 0xcb, 0xe5, 0x17, 0xe0,
+    0x00, 0xeb, 0x01, 0xe0, 0x28, 0xe5, 0x0b, 0x00,
+    0x25, 0x80, 0x8b, 0xe5, 0x0e, 0xab, 0x40, 0x16,
+    0xe5, 0x12, 0x80, 0x16, 0xe0, 0x38, 0xe5, 0x30,
+    0x60, 0x2b, 0x25, 0xeb, 0x08, 0x20, 0xeb, 0x26,
+    0x05, 0x46, 0x00, 0x26, 0x80, 0x66, 0x65, 0x00,
+    0x45, 0x00, 0xe5, 0x15, 0x20, 0x46, 0x60, 0x06,
+    0xeb, 0x01, 0xc0, 0xf6, 0x01, 0xc0, 0xe5, 0x15,
+    0x2b, 0x16, 0xe5, 0x15, 0x4b, 0xe0, 0x18, 0xe5,
+    0x00, 0x0f, 0xe5, 0x14, 0x26, 0x60, 0x8b, 0xd6,
+    0xe0, 0x01, 0xe5, 0x2e, 0x40, 0xd6, 0xe5, 0x0e,
+    0x20, 0xeb, 0x00, 0xe5, 0x0b, 0x80, 0xeb, 0x00,
+    0xe5, 0x0a, 0xc0, 0x76, 0xe0, 0x04, 0xcb, 0xe0,
+    0x48, 0xe5, 0x41, 0xe0, 0x2f, 0xe1, 0x2b, 0xe0,
+    0x05, 0xe2, 0x2b, 0xc0, 0xab, 0xe5, 0x1c, 0x66,
+    0xe0, 0x00, 0xe9, 0x02, 0xe0, 0x80, 0x9e, 0xeb,
+    0x17, 0x00, 0xe5, 0x22, 0x00, 0x26, 0x11, 0x20,
+    0x25, 0xe0, 0x46, 0xe5, 0x15, 0xeb, 0x02, 0x05,
+    0xe0, 0x00, 0xe5, 0x0e, 0xe6, 0x03, 0x6b, 0x96,
+    0xe0, 0x4e, 0xe5, 0x0d, 0xcb, 0xe0, 0x0c, 0xe5,
     0x0f, 0xe0, 0x01, 0x07, 0x06, 0x07, 0xe5, 0x2d,
     0xe6, 0x07, 0xd6, 0x60, 0xeb, 0x0c, 0xe9, 0x02,
     0xe0, 0x07, 0x46, 0x07, 0xe5, 0x25, 0x47, 0x66,
     0x27, 0x26, 0x36, 0x1b, 0x76, 0xe0, 0x03, 0x1b,
     0x20, 0xe5, 0x11, 0xc0, 0xe9, 0x02, 0xa0, 0x46,
     0xe5, 0x1c, 0x86, 0x07, 0xe6, 0x00, 0x00, 0xe9,
-    0x02, 0x76, 0x05, 0x27, 0xe0, 0x01, 0xe5, 0x1b,
-    0x06, 0x36, 0x05, 0xe0, 0x01, 0x26, 0x07, 0xe5,
-    0x28, 0x47, 0xe6, 0x01, 0x27, 0x65, 0x76, 0x66,
-    0x16, 0x20, 0xe9, 0x02, 0x05, 0x16, 0x05, 0x56,
-    0x00, 0xeb, 0x0c, 0xe0, 0x03, 0xe5, 0x0a, 0x00,
-    0xe5, 0x11, 0x47, 0x46, 0x27, 0x06, 0x07, 0x26,
-    0xb6, 0x06, 0xe0, 0x39, 0xc5, 0x00, 0x05, 0x00,
-    0x65, 0x00, 0xe5, 0x07, 0x00, 0xe5, 0x02, 0x16,
-    0xa0, 0xe5, 0x27, 0x06, 0x47, 0xe6, 0x00, 0x80,
-    0xe9, 0x02, 0xa0, 0x26, 0x27, 0x00, 0xe5, 0x00,
-    0x20, 0x25, 0x20, 0xe5, 0x0e, 0x00, 0xc5, 0x00,
-    0x25, 0x00, 0x85, 0x00, 0x26, 0x05, 0x27, 0x06,
-    0x67, 0x20, 0x27, 0x20, 0x47, 0x20, 0x05, 0xa0,
-    0x07, 0x80, 0x85, 0x27, 0x20, 0xc6, 0x40, 0x86,
-    0xe0, 0x80, 0x03, 0xe5, 0x2d, 0x47, 0xe6, 0x00,
-    0x27, 0x46, 0x07, 0x06, 0x65, 0x96, 0xe9, 0x02,
-    0x00, 0x16, 0x00, 0x16, 0x06, 0x05, 0xe0, 0x18,
-    0xe5, 0x28, 0x47, 0xa6, 0x07, 0x06, 0x67, 0x26,
-    0x07, 0x26, 0x25, 0x16, 0x05, 0xe0, 0x00, 0xe9,
-    0x02, 0xe0, 0x80, 0x1e, 0xe5, 0x27, 0x47, 0x66,
-    0x20, 0x67, 0x26, 0x07, 0x26, 0xf6, 0x0f, 0x65,
-    0x26, 0xe0, 0x1a, 0xe5, 0x28, 0x47, 0xe6, 0x00,
-    0x27, 0x06, 0x07, 0x26, 0x56, 0x05, 0xe0, 0x03,
-    0xe9, 0x02, 0xa0, 0xf6, 0x05, 0xe0, 0x0b, 0xe5,
-    0x23, 0x06, 0x07, 0x06, 0x27, 0xa6, 0x07, 0x06,
-    0x05, 0xc0, 0xe9, 0x02, 0xe0, 0x2e, 0xe5, 0x13,
-    0x20, 0x46, 0x27, 0x66, 0x07, 0x86, 0x60, 0xe9,
-    0x02, 0x2b, 0x56, 0x0f, 0xe0, 0x80, 0x38, 0xe5,
-    0x24, 0x47, 0xe6, 0x01, 0x07, 0x26, 0x16, 0xe0,
-    0x5c, 0xe1, 0x18, 0xe2, 0x18, 0xe9, 0x02, 0xeb,
-    0x01, 0xe0, 0x04, 0x05, 0xe0, 0x80, 0x18, 0xe5,
-    0x00, 0x20, 0xe5, 0x1f, 0x47, 0x66, 0x20, 0x26,
-    0x67, 0x06, 0x05, 0x16, 0x05, 0x07, 0xe0, 0x13,
-    0x05, 0xe6, 0x02, 0xe5, 0x20, 0xa6, 0x07, 0x05,
-    0x66, 0xf6, 0x00, 0x06, 0xe0, 0x00, 0x05, 0xa6,
-    0x27, 0x46, 0xe5, 0x26, 0xe6, 0x05, 0x07, 0x26,
-    0x56, 0x05, 0x96, 0xe0, 0x15, 0xe5, 0x31, 0xe0,
-    0x80, 0x7f, 0xe5, 0x01, 0x00, 0xe5, 0x1d, 0x07,
-    0xc6, 0x00, 0xa6, 0x07, 0x06, 0x05, 0x96, 0xe0,
-    0x02, 0xe9, 0x02, 0xeb, 0x0b, 0x40, 0x36, 0xe5,
-    0x16, 0x20, 0xe6, 0x0e, 0x00, 0x07, 0xc6, 0x07,
-    0x26, 0x07, 0x26, 0xe0, 0x41, 0xc5, 0x00, 0x25,
-    0x00, 0xe5, 0x1e, 0xa6, 0x40, 0x06, 0x00, 0x26,
-    0x00, 0xc6, 0x05, 0x06, 0xe0, 0x00, 0xe9, 0x02,
-    0xa0, 0xa5, 0x00, 0x25, 0x00, 0xe5, 0x18, 0x87,
-    0x00, 0x26, 0x00, 0x27, 0x06, 0x07, 0x06, 0x05,
-    0xc0, 0xe9, 0x02, 0xe0, 0x80, 0xae, 0xe5, 0x0b,
-    0x26, 0x27, 0x36, 0xe0, 0x80, 0x3f, 0xeb, 0x0d,
-    0xef, 0x00, 0x6d, 0xef, 0x09, 0xe0, 0x05, 0x16,
-    0xe5, 0x83, 0x12, 0xe0, 0x5e, 0xea, 0x67, 0x00,
-    0x96, 0xe0, 0x03, 0xe5, 0x80, 0x3c, 0xe0, 0x8a,
-    0x34, 0xe5, 0x83, 0xa7, 0x00, 0xfb, 0x01, 0xe0,
-    0x8f, 0x3f, 0xe5, 0x81, 0xbf, 0xe0, 0xa1, 0x31,
-    0xe5, 0x81, 0xb1, 0xc0, 0xe5, 0x17, 0x00, 0xe9,
-    0x02, 0x60, 0x36, 0xe0, 0x58, 0xe5, 0x16, 0x20,
-    0x86, 0x16, 0xe0, 0x02, 0xe5, 0x28, 0xc6, 0x96,
-    0x6f, 0x64, 0x16, 0x0f, 0xe0, 0x02, 0xe9, 0x02,
-    0x00, 0xcb, 0x00, 0xe5, 0x0d, 0x80, 0xe5, 0x0b,
-    0xe0, 0x82, 0x28, 0xe1, 0x18, 0xe2, 0x18, 0xeb,
-    0x0f, 0x76, 0xe0, 0x5d, 0xe5, 0x43, 0x60, 0x06,
-    0x05, 0xe7, 0x2f, 0xc0, 0x66, 0xe4, 0x05, 0xe0,
-    0x38, 0x24, 0x16, 0x04, 0xe0, 0x14, 0xe5, 0x97,
-    0x70, 0xe0, 0x00, 0xe5, 0x82, 0x6b, 0xe0, 0xa4,
-    0x85, 0xe5, 0x80, 0x97, 0xe0, 0x29, 0x45, 0xe0,
-    0x09, 0x65, 0xe0, 0x00, 0xe5, 0x81, 0x04, 0xe0,
-    0x88, 0x7c, 0xe5, 0x63, 0x80, 0xe5, 0x05, 0x40,
-    0xe5, 0x01, 0xc0, 0xe5, 0x02, 0x20, 0x0f, 0x26,
-    0x16, 0x7b, 0xe0, 0x92, 0xd4, 0xef, 0x80, 0x6e,
-    0xe0, 0x02, 0xef, 0x1f, 0x20, 0xef, 0x34, 0x27,
-    0x46, 0x4f, 0xa7, 0xfb, 0x00, 0xe6, 0x00, 0x2f,
-    0xc6, 0xef, 0x16, 0x66, 0xef, 0x33, 0xe0, 0x0f,
-    0xef, 0x3a, 0x46, 0x0f, 0xe0, 0x80, 0x12, 0xeb,
-    0x0c, 0xe0, 0x04, 0xef, 0x4f, 0xe0, 0x01, 0xeb,
-    0x11, 0xe0, 0x7f, 0xe1, 0x12, 0xe2, 0x12, 0xe1,
-    0x12, 0xc2, 0x00, 0xe2, 0x0a, 0xe1, 0x12, 0xe2,
-    0x12, 0x01, 0x00, 0x21, 0x20, 0x01, 0x20, 0x21,
-    0x20, 0x61, 0x00, 0xe1, 0x00, 0x62, 0x00, 0x02,
-    0x00, 0xc2, 0x00, 0xe2, 0x03, 0xe1, 0x12, 0xe2,
-    0x12, 0x21, 0x00, 0x61, 0x20, 0xe1, 0x00, 0x00,
-    0xc1, 0x00, 0xe2, 0x12, 0x21, 0x00, 0x61, 0x00,
-    0x81, 0x00, 0x01, 0x40, 0xc1, 0x00, 0xe2, 0x12,
-    0xe1, 0x12, 0xe2, 0x12, 0xe1, 0x12, 0xe2, 0x12,
-    0xe1, 0x12, 0xe2, 0x12, 0xe1, 0x12, 0xe2, 0x12,
-    0xe1, 0x12, 0xe2, 0x12, 0xe1, 0x12, 0xe2, 0x14,
-    0x20, 0xe1, 0x11, 0x0c, 0xe2, 0x11, 0x0c, 0xa2,
+    0x02, 0x76, 0x05, 0x27, 0x05, 0xe0, 0x00, 0xe5,
+    0x1b, 0x06, 0x36, 0x05, 0xe0, 0x01, 0x26, 0x07,
+    0xe5, 0x28, 0x47, 0xe6, 0x01, 0x27, 0x65, 0x76,
+    0x66, 0x16, 0x07, 0x06, 0xe9, 0x02, 0x05, 0x16,
+    0x05, 0x56, 0x00, 0xeb, 0x0c, 0xe0, 0x03, 0xe5,
+    0x0a, 0x00, 0xe5, 0x11, 0x47, 0x46, 0x27, 0x06,
+    0x07, 0x26, 0xb6, 0x06, 0xe0, 0x39, 0xc5, 0x00,
+    0x05, 0x00, 0x65, 0x00, 0xe5, 0x07, 0x00, 0xe5,
+    0x02, 0x16, 0xa0, 0xe5, 0x27, 0x06, 0x47, 0xe6,
+    0x00, 0x80, 0xe9, 0x02, 0xa0, 0x26, 0x27, 0x00,
+    0xe5, 0x00, 0x20, 0x25, 0x20, 0xe5, 0x0e, 0x00,
+    0xc5, 0x00, 0x25, 0x00, 0x85, 0x00, 0x26, 0x05,
+    0x27, 0x06, 0x67, 0x20, 0x27, 0x20, 0x47, 0x20,
+    0x05, 0xa0, 0x07, 0x80, 0x85, 0x27, 0x20, 0xc6,
+    0x40, 0x86, 0xe0, 0x80, 0x03, 0xe5, 0x2d, 0x47,
+    0xe6, 0x00, 0x27, 0x46, 0x07, 0x06, 0x65, 0x96,
+    0xe9, 0x02, 0x36, 0x00, 0x16, 0x06, 0x45, 0xe0,
+    0x16, 0xe5, 0x28, 0x47, 0xa6, 0x07, 0x06, 0x67,
+    0x26, 0x07, 0x26, 0x25, 0x16, 0x05, 0xe0, 0x00,
+    0xe9, 0x02, 0xe0, 0x80, 0x1e, 0xe5, 0x27, 0x47,
+    0x66, 0x20, 0x67, 0x26, 0x07, 0x26, 0xf6, 0x0f,
+    0x65, 0x26, 0xe0, 0x1a, 0xe5, 0x28, 0x47, 0xe6,
+    0x00, 0x27, 0x06, 0x07, 0x26, 0x56, 0x05, 0xe0,
+    0x03, 0xe9, 0x02, 0xa0, 0xf6, 0x05, 0xe0, 0x0b,
+    0xe5, 0x23, 0x06, 0x07, 0x06, 0x27, 0xa6, 0x07,
+    0x06, 0x05, 0xc0, 0xe9, 0x02, 0xe0, 0x2e, 0xe5,
+    0x13, 0x20, 0x46, 0x27, 0x66, 0x07, 0x86, 0x60,
+    0xe9, 0x02, 0x2b, 0x56, 0x0f, 0xe0, 0x80, 0x38,
+    0xe5, 0x24, 0x47, 0xe6, 0x01, 0x07, 0x26, 0x16,
+    0xe0, 0x5c, 0xe1, 0x18, 0xe2, 0x18, 0xe9, 0x02,
+    0xeb, 0x01, 0xe0, 0x04, 0xe5, 0x00, 0x20, 0x05,
+    0x20, 0xe5, 0x00, 0x00, 0x25, 0x00, 0xe5, 0x10,
+    0xa7, 0x00, 0x27, 0x20, 0x26, 0x07, 0x06, 0x05,
+    0x07, 0x05, 0x07, 0x06, 0x56, 0xe0, 0x01, 0xe9,
+    0x02, 0xe0, 0x3e, 0xe5, 0x00, 0x20, 0xe5, 0x1f,
+    0x47, 0x66, 0x20, 0x26, 0x67, 0x06, 0x05, 0x16,
+    0x05, 0x07, 0xe0, 0x13, 0x05, 0xe6, 0x02, 0xe5,
+    0x20, 0xa6, 0x07, 0x05, 0x66, 0xf6, 0x00, 0x06,
+    0xe0, 0x00, 0x05, 0xa6, 0x27, 0x46, 0xe5, 0x26,
+    0xe6, 0x05, 0x07, 0x26, 0x56, 0x05, 0x96, 0xe0,
+    0x15, 0xe5, 0x31, 0xe0, 0x80, 0x7f, 0xe5, 0x01,
+    0x00, 0xe5, 0x1d, 0x07, 0xc6, 0x00, 0xa6, 0x07,
+    0x06, 0x05, 0x96, 0xe0, 0x02, 0xe9, 0x02, 0xeb,
+    0x0b, 0x40, 0x36, 0xe5, 0x16, 0x20, 0xe6, 0x0e,
+    0x00, 0x07, 0xc6, 0x07, 0x26, 0x07, 0x26, 0xe0,
+    0x41, 0xc5, 0x00, 0x25, 0x00, 0xe5, 0x1e, 0xa6,
+    0x40, 0x06, 0x00, 0x26, 0x00, 0xc6, 0x05, 0x06,
+    0xe0, 0x00, 0xe9, 0x02, 0xa0, 0xa5, 0x00, 0x25,
+    0x00, 0xe5, 0x18, 0x87, 0x00, 0x26, 0x00, 0x27,
+    0x06, 0x07, 0x06, 0x05, 0xc0, 0xe9, 0x02, 0xe0,
+    0x80, 0xae, 0xe5, 0x0b, 0x26, 0x27, 0x36, 0xe0,
+    0x80, 0x2f, 0x05, 0xe0, 0x07, 0xeb, 0x0d, 0xef,
+    0x00, 0x6d, 0xef, 0x09, 0xe0, 0x05, 0x16, 0xe5,
+    0x83, 0x12, 0xe0, 0x5e, 0xea, 0x67, 0x00, 0x96,
+    0xe0, 0x03, 0xe5, 0x80, 0x3c, 0xe0, 0x8a, 0x34,
+    0xe5, 0x83, 0xa7, 0x00, 0xfb, 0x01, 0xe0, 0x8f,
+    0x3f, 0xe5, 0x81, 0xbf, 0xe0, 0xa1, 0x31, 0xe5,
+    0x81, 0xb1, 0xc0, 0xe5, 0x17, 0x00, 0xe9, 0x02,
+    0x60, 0x36, 0xe0, 0x58, 0xe5, 0x16, 0x20, 0x86,
+    0x16, 0xe0, 0x02, 0xe5, 0x28, 0xc6, 0x96, 0x6f,
+    0x64, 0x16, 0x0f, 0xe0, 0x02, 0xe9, 0x02, 0x00,
+    0xcb, 0x00, 0xe5, 0x0d, 0x80, 0xe5, 0x0b, 0xe0,
+    0x82, 0x28, 0xe1, 0x18, 0xe2, 0x18, 0xeb, 0x0f,
+    0x76, 0xe0, 0x5d, 0xe5, 0x43, 0x60, 0x06, 0x05,
+    0xe7, 0x2f, 0xc0, 0x66, 0xe4, 0x05, 0xe0, 0x38,
+    0x24, 0x16, 0x04, 0x06, 0xe0, 0x03, 0x27, 0xe0,
+    0x06, 0xe5, 0x97, 0x70, 0xe0, 0x00, 0xe5, 0x84,
+    0x4e, 0xe0, 0x22, 0xe5, 0x01, 0xe0, 0xa2, 0x6f,
+    0xe5, 0x80, 0x97, 0xe0, 0x29, 0x45, 0xe0, 0x09,
+    0x65, 0xe0, 0x00, 0xe5, 0x81, 0x04, 0xe0, 0x88,
+    0x7c, 0xe5, 0x63, 0x80, 0xe5, 0x05, 0x40, 0xe5,
+    0x01, 0xc0, 0xe5, 0x02, 0x20, 0x0f, 0x26, 0x16,
+    0x7b, 0xe0, 0x92, 0xd4, 0xef, 0x80, 0x6e, 0xe0,
+    0x02, 0xef, 0x1f, 0x20, 0xef, 0x34, 0x27, 0x46,
+    0x4f, 0xa7, 0xfb, 0x00, 0xe6, 0x00, 0x2f, 0xc6,
+    0xef, 0x16, 0x66, 0xef, 0x33, 0xe0, 0x0f, 0xef,
+    0x3a, 0x46, 0x0f, 0xe0, 0x80, 0x12, 0xeb, 0x0c,
+    0xe0, 0x04, 0xef, 0x4f, 0xe0, 0x01, 0xeb, 0x11,
+    0xe0, 0x7f, 0xe1, 0x12, 0xe2, 0x12, 0xe1, 0x12,
+    0xc2, 0x00, 0xe2, 0x0a, 0xe1, 0x12, 0xe2, 0x12,
+    0x01, 0x00, 0x21, 0x20, 0x01, 0x20, 0x21, 0x20,
+    0x61, 0x00, 0xe1, 0x00, 0x62, 0x00, 0x02, 0x00,
+    0xc2, 0x00, 0xe2, 0x03, 0xe1, 0x12, 0xe2, 0x12,
+    0x21, 0x00, 0x61, 0x20, 0xe1, 0x00, 0x00, 0xc1,
+    0x00, 0xe2, 0x12, 0x21, 0x00, 0x61, 0x00, 0x81,
+    0x00, 0x01, 0x40, 0xc1, 0x00, 0xe2, 0x12, 0xe1,
+    0x12, 0xe2, 0x12, 0xe1, 0x12, 0xe2, 0x12, 0xe1,
+    0x12, 0xe2, 0x12, 0xe1, 0x12, 0xe2, 0x12, 0xe1,
+    0x12, 0xe2, 0x12, 0xe1, 0x12, 0xe2, 0x14, 0x20,
     0xe1, 0x11, 0x0c, 0xe2, 0x11, 0x0c, 0xa2, 0xe1,
     0x11, 0x0c, 0xe2, 0x11, 0x0c, 0xa2, 0xe1, 0x11,
     0x0c, 0xe2, 0x11, 0x0c, 0xa2, 0xe1, 0x11, 0x0c,
-    0xe2, 0x11, 0x0c, 0xa2, 0x3f, 0x20, 0xe9, 0x2a,
-    0xef, 0x81, 0x78, 0xe6, 0x2f, 0x6f, 0xe6, 0x2a,
-    0xef, 0x00, 0x06, 0xef, 0x06, 0x06, 0x2f, 0x96,
-    0xe0, 0x07, 0x86, 0x00, 0xe6, 0x07, 0xe0, 0x84,
-    0xc8, 0xc6, 0x00, 0xe6, 0x09, 0x20, 0xc6, 0x00,
-    0x26, 0x00, 0x86, 0xe0, 0x80, 0x4d, 0xe5, 0x25,
-    0x40, 0xc6, 0xc4, 0x20, 0xe9, 0x02, 0x60, 0x05,
-    0x0f, 0xe0, 0x80, 0xe8, 0xe5, 0x24, 0x66, 0xe9,
-    0x02, 0x80, 0x0d, 0xe0, 0x84, 0x78, 0xe5, 0x80,
-    0x3d, 0x20, 0xeb, 0x01, 0xc6, 0xe0, 0x21, 0xe1,
-    0x1a, 0xe2, 0x1a, 0xc6, 0x04, 0x60, 0xe9, 0x02,
-    0x60, 0x36, 0xe0, 0x82, 0x89, 0xeb, 0x33, 0x0f,
-    0x4b, 0x0d, 0x6b, 0xe0, 0x44, 0xeb, 0x25, 0x0f,
-    0xeb, 0x07, 0xe0, 0x80, 0x3a, 0x65, 0x00, 0xe5,
-    0x13, 0x00, 0x25, 0x00, 0x05, 0x20, 0x05, 0x00,
-    0xe5, 0x02, 0x00, 0x65, 0x00, 0x05, 0x00, 0x05,
-    0xa0, 0x05, 0x60, 0x05, 0x00, 0x05, 0x00, 0x05,
-    0x00, 0x45, 0x00, 0x25, 0x00, 0x05, 0x20, 0x05,
-    0x00, 0x05, 0x00, 0x05, 0x00, 0x05, 0x00, 0x05,
-    0x00, 0x25, 0x00, 0x05, 0x20, 0x65, 0x00, 0xc5,
-    0x00, 0x65, 0x00, 0x65, 0x00, 0x05, 0x00, 0xe5,
-    0x02, 0x00, 0xe5, 0x09, 0x80, 0x45, 0x00, 0x85,
-    0x00, 0xe5, 0x09, 0xe0, 0x2c, 0x2c, 0xe0, 0x80,
-    0x86, 0xef, 0x24, 0x60, 0xef, 0x5c, 0xe0, 0x04,
-    0xef, 0x07, 0x20, 0xef, 0x07, 0x00, 0xef, 0x07,
-    0x00, 0xef, 0x1d, 0xe0, 0x02, 0xeb, 0x05, 0x40,
-    0xef, 0x55, 0x40, 0xef, 0x35, 0xe0, 0x31, 0xef,
-    0x15, 0xe0, 0x05, 0xef, 0x24, 0x60, 0xef, 0x01,
-    0xc0, 0x2f, 0xe0, 0x06, 0xaf, 0xe0, 0x80, 0x12,
-    0xef, 0x80, 0x73, 0x8e, 0xef, 0x82, 0x4e, 0xe0,
-    0x02, 0xef, 0x05, 0x40, 0xef, 0x03, 0x80, 0xef,
-    0x6c, 0xe0, 0x04, 0xef, 0x51, 0xc0, 0xef, 0x04,
-    0xe0, 0x0c, 0xef, 0x04, 0x60, 0xef, 0x30, 0xe0,
-    0x00, 0xef, 0x02, 0xa0, 0xef, 0x20, 0xe0, 0x00,
-    0xef, 0x16, 0xe0, 0x4a, 0xef, 0x04, 0x00, 0xef,
-    0x5d, 0x00, 0x6f, 0x40, 0xef, 0x21, 0x20, 0xaf,
-    0x40, 0xef, 0x15, 0x20, 0xef, 0x7f, 0xe0, 0x04,
-    0xef, 0x06, 0x20, 0x6f, 0x60, 0x4f, 0x80, 0x4f,
-    0xe0, 0x05, 0xaf, 0xe0, 0x84, 0xe2, 0xe5, 0xc0,
-    0x66, 0x4f, 0xe0, 0x21, 0xe5, 0x8f, 0xad, 0xe0,
-    0x03, 0xe5, 0x80, 0x56, 0x20, 0xe5, 0x95, 0xfa,
-    0xe0, 0x06, 0xe5, 0x9c, 0xa9, 0xe0, 0x8b, 0x97,
-    0xe5, 0x81, 0x96, 0xe0, 0xca, 0xc5, 0x5b, 0x1b,
-    0xe0, 0x16, 0xfb, 0x58, 0xe0, 0x78, 0xe6, 0x80,
-    0x68, 0xe0, 0xc0, 0xbd, 0x88, 0xfd, 0xc0, 0xbf,
-    0x76, 0x20, 0xfd, 0xc0, 0xbf, 0x76, 0x20,
+    0xe2, 0x11, 0x0c, 0xa2, 0xe1, 0x11, 0x0c, 0xe2,
+    0x11, 0x0c, 0xa2, 0x3f, 0x20, 0xe9, 0x2a, 0xef,
+    0x81, 0x78, 0xe6, 0x2f, 0x6f, 0xe6, 0x2a, 0xef,
+    0x00, 0x06, 0xef, 0x06, 0x06, 0x2f, 0x96, 0xe0,
+    0x07, 0x86, 0x00, 0xe6, 0x07, 0xe0, 0x84, 0xc8,
+    0xc6, 0x00, 0xe6, 0x09, 0x20, 0xc6, 0x00, 0x26,
+    0x00, 0x86, 0xe0, 0x80, 0x4d, 0xe5, 0x25, 0x40,
+    0xc6, 0xc4, 0x20, 0xe9, 0x02, 0x60, 0x05, 0x0f,
+    0xe0, 0x80, 0xe8, 0xe5, 0x24, 0x66, 0xe9, 0x02,
+    0x80, 0x0d, 0xe0, 0x84, 0x78, 0xe5, 0x80, 0x3d,
+    0x20, 0xeb, 0x01, 0xc6, 0xe0, 0x21, 0xe1, 0x1a,
+    0xe2, 0x1a, 0xc6, 0x04, 0x60, 0xe9, 0x02, 0x60,
+    0x36, 0xe0, 0x82, 0x89, 0xeb, 0x33, 0x0f, 0x4b,
+    0x0d, 0x6b, 0xe0, 0x44, 0xeb, 0x25, 0x0f, 0xeb,
+    0x07, 0xe0, 0x80, 0x3a, 0x65, 0x00, 0xe5, 0x13,
+    0x00, 0x25, 0x00, 0x05, 0x20, 0x05, 0x00, 0xe5,
+    0x02, 0x00, 0x65, 0x00, 0x05, 0x00, 0x05, 0xa0,
+    0x05, 0x60, 0x05, 0x00, 0x05, 0x00, 0x05, 0x00,
+    0x45, 0x00, 0x25, 0x00, 0x05, 0x20, 0x05, 0x00,
+    0x05, 0x00, 0x05, 0x00, 0x05, 0x00, 0x05, 0x00,
+    0x25, 0x00, 0x05, 0x20, 0x65, 0x00, 0xc5, 0x00,
+    0x65, 0x00, 0x65, 0x00, 0x05, 0x00, 0xe5, 0x02,
+    0x00, 0xe5, 0x09, 0x80, 0x45, 0x00, 0x85, 0x00,
+    0xe5, 0x09, 0xe0, 0x2c, 0x2c, 0xe0, 0x80, 0x86,
+    0xef, 0x24, 0x60, 0xef, 0x5c, 0xe0, 0x04, 0xef,
+    0x07, 0x20, 0xef, 0x07, 0x00, 0xef, 0x07, 0x00,
+    0xef, 0x1d, 0xe0, 0x02, 0xeb, 0x05, 0xef, 0x80,
+    0x19, 0xe0, 0x30, 0xef, 0x15, 0xe0, 0x05, 0xef,
+    0x24, 0x60, 0xef, 0x01, 0xc0, 0x2f, 0xe0, 0x06,
+    0xaf, 0xe0, 0x80, 0x12, 0xef, 0x80, 0x73, 0x8e,
+    0xef, 0x82, 0x50, 0xe0, 0x00, 0xef, 0x05, 0x40,
+    0xef, 0x05, 0x40, 0xef, 0x6c, 0xe0, 0x04, 0xef,
+    0x51, 0xc0, 0xef, 0x04, 0xe0, 0x0c, 0xef, 0x04,
+    0x60, 0xef, 0x30, 0xe0, 0x00, 0xef, 0x02, 0xa0,
+    0xef, 0x20, 0xe0, 0x00, 0xef, 0x16, 0x20, 0x2f,
+    0xe0, 0x46, 0xef, 0x71, 0x00, 0xef, 0x4a, 0x00,
+    0xef, 0x7f, 0xe0, 0x04, 0xef, 0x06, 0x20, 0x8f,
+    0x40, 0x4f, 0x80, 0xcf, 0xe0, 0x01, 0xef, 0x11,
+    0xc0, 0xcf, 0xe0, 0x01, 0x4f, 0xe0, 0x05, 0xcf,
+    0xe0, 0x21, 0xef, 0x80, 0x0b, 0x00, 0xef, 0x2f,
+    0xe0, 0x1d, 0xe9, 0x02, 0xe0, 0x83, 0x7e, 0xe5,
+    0xc0, 0x66, 0x56, 0xe0, 0x1a, 0xe5, 0x8f, 0xad,
+    0xe0, 0x03, 0xe5, 0x80, 0x56, 0x20, 0xe5, 0x95,
+    0xfa, 0xe0, 0x06, 0xe5, 0x9c, 0xa9, 0xe0, 0x8b,
+    0x97, 0xe5, 0x81, 0x96, 0xe0, 0x85, 0x5a, 0xe5,
+    0x92, 0xc3, 0xe0, 0xca, 0xac, 0x2e, 0x1b, 0xe0,
+    0x16, 0xfb, 0x58, 0xe0, 0x78, 0xe6, 0x80, 0x68,
+    0xe0, 0xc0, 0xbd, 0x88, 0xfd, 0xc0, 0xbf, 0x76,
+    0x20, 0xfd, 0xc0, 0xbf, 0x76, 0x20,
 };
 
 typedef enum {
@@ -2753,6 +2781,7 @@ typedef enum {
     UNICODE_SCRIPT_Chakma,
     UNICODE_SCRIPT_Cham,
     UNICODE_SCRIPT_Cherokee,
+    UNICODE_SCRIPT_Chorasmian,
     UNICODE_SCRIPT_Common,
     UNICODE_SCRIPT_Coptic,
     UNICODE_SCRIPT_Cuneiform,
@@ -2760,6 +2789,7 @@ typedef enum {
     UNICODE_SCRIPT_Cyrillic,
     UNICODE_SCRIPT_Deseret,
     UNICODE_SCRIPT_Devanagari,
+    UNICODE_SCRIPT_Dives_Akuru,
     UNICODE_SCRIPT_Dogra,
     UNICODE_SCRIPT_Duployan,
     UNICODE_SCRIPT_Egyptian_Hieroglyphs,
@@ -2793,6 +2823,7 @@ typedef enum {
     UNICODE_SCRIPT_Kharoshthi,
     UNICODE_SCRIPT_Khmer,
     UNICODE_SCRIPT_Khojki,
+    UNICODE_SCRIPT_Khitan_Small_Script,
     UNICODE_SCRIPT_Khudawadi,
     UNICODE_SCRIPT_Lao,
     UNICODE_SCRIPT_Latin,
@@ -2880,6 +2911,7 @@ typedef enum {
     UNICODE_SCRIPT_Vai,
     UNICODE_SCRIPT_Wancho,
     UNICODE_SCRIPT_Warang_Citi,
+    UNICODE_SCRIPT_Yezidi,
     UNICODE_SCRIPT_Yi,
     UNICODE_SCRIPT_Zanabazar_Square,
     UNICODE_SCRIPT_COUNT,
@@ -2909,6 +2941,7 @@ static const char unicode_script_name_table[] =
     "Chakma,Cakm"                 "\0"
     "Cham,Cham"                   "\0"
     "Cherokee,Cher"               "\0"
+    "Chorasmian,Chrs"             "\0"
     "Common,Zyyy"                 "\0"
     "Coptic,Copt,Qaac"            "\0"
     "Cuneiform,Xsux"              "\0"
@@ -2916,6 +2949,7 @@ static const char unicode_script_name_table[] =
     "Cyrillic,Cyrl"               "\0"
     "Deseret,Dsrt"                "\0"
     "Devanagari,Deva"             "\0"
+    "Dives_Akuru,Diak"            "\0"
     "Dogra,Dogr"                  "\0"
     "Duployan,Dupl"               "\0"
     "Egyptian_Hieroglyphs,Egyp"   "\0"
@@ -2949,6 +2983,7 @@ static const char unicode_script_name_table[] =
     "Kharoshthi,Khar"             "\0"
     "Khmer,Khmr"                  "\0"
     "Khojki,Khoj"                 "\0"
+    "Khitan_Small_Script,Kits"    "\0"
     "Khudawadi,Sind"              "\0"
     "Lao,Laoo"                    "\0"
     "Latin,Latn"                  "\0"
@@ -3036,434 +3071,442 @@ static const char unicode_script_name_table[] =
     "Vai,Vaii"                    "\0"
     "Wancho,Wcho"                 "\0"
     "Warang_Citi,Wara"            "\0"
+    "Yezidi,Yezi"                 "\0"
     "Yi,Yiii"                     "\0"
     "Zanabazar_Square,Zanb"       "\0"
 ;
 
-static const uint8_t unicode_script_table[2565] = {
-    0xc0, 0x18, 0x99, 0x42, 0x85, 0x18, 0x99, 0x42,
-    0xae, 0x18, 0x80, 0x42, 0x8e, 0x18, 0x80, 0x42,
-    0x84, 0x18, 0x96, 0x42, 0x80, 0x18, 0x9e, 0x42,
-    0x80, 0x18, 0xe1, 0x60, 0x42, 0xa6, 0x18, 0x84,
-    0x42, 0x84, 0x18, 0x81, 0x0d, 0x93, 0x18, 0xe0,
-    0x0f, 0x35, 0x83, 0x29, 0x80, 0x18, 0x82, 0x29,
-    0x01, 0x83, 0x29, 0x80, 0x18, 0x80, 0x29, 0x03,
-    0x80, 0x29, 0x80, 0x18, 0x80, 0x29, 0x80, 0x18,
-    0x82, 0x29, 0x00, 0x80, 0x29, 0x00, 0x93, 0x29,
-    0x00, 0xbe, 0x29, 0x8d, 0x19, 0x8f, 0x29, 0xe0,
-    0x24, 0x1c, 0x81, 0x35, 0xe0, 0x48, 0x1c, 0x00,
-    0xa5, 0x05, 0x01, 0xaf, 0x05, 0x80, 0x18, 0x80,
-    0x05, 0x01, 0x82, 0x05, 0x00, 0xb6, 0x32, 0x07,
-    0x9a, 0x32, 0x03, 0x85, 0x32, 0x0a, 0x84, 0x04,
-    0x80, 0x18, 0x85, 0x04, 0x80, 0x18, 0x8d, 0x04,
-    0x80, 0x18, 0x80, 0x04, 0x00, 0x80, 0x04, 0x80,
-    0x18, 0x9f, 0x04, 0x80, 0x18, 0x89, 0x04, 0x8a,
-    0x35, 0x99, 0x04, 0x80, 0x35, 0xe0, 0x0b, 0x04,
-    0x80, 0x18, 0xa1, 0x04, 0x8d, 0x84, 0x00, 0xbb,
-    0x84, 0x01, 0x82, 0x84, 0xaf, 0x04, 0xb1, 0x8e,
-    0x0d, 0xba, 0x60, 0x01, 0x82, 0x60, 0xad, 0x78,
-    0x01, 0x8e, 0x78, 0x00, 0x9b, 0x4d, 0x01, 0x80,
-    0x4d, 0x00, 0x8a, 0x84, 0x34, 0x94, 0x04, 0x00,
-    0x87, 0x04, 0x14, 0x8e, 0x04, 0x80, 0x18, 0x9c,
-    0x04, 0xd0, 0x1e, 0x83, 0x35, 0x8e, 0x1e, 0x81,
-    0x18, 0x99, 0x1e, 0x83, 0x0b, 0x00, 0x87, 0x0b,
-    0x01, 0x81, 0x0b, 0x01, 0x95, 0x0b, 0x00, 0x86,
-    0x0b, 0x00, 0x80, 0x0b, 0x02, 0x83, 0x0b, 0x01,
-    0x88, 0x0b, 0x01, 0x81, 0x0b, 0x01, 0x83, 0x0b,
-    0x07, 0x80, 0x0b, 0x03, 0x81, 0x0b, 0x00, 0x84,
-    0x0b, 0x01, 0x98, 0x0b, 0x01, 0x82, 0x2c, 0x00,
-    0x85, 0x2c, 0x03, 0x81, 0x2c, 0x01, 0x95, 0x2c,
-    0x00, 0x86, 0x2c, 0x00, 0x81, 0x2c, 0x00, 0x81,
-    0x2c, 0x00, 0x81, 0x2c, 0x01, 0x80, 0x2c, 0x00,
-    0x84, 0x2c, 0x03, 0x81, 0x2c, 0x01, 0x82, 0x2c,
-    0x02, 0x80, 0x2c, 0x06, 0x83, 0x2c, 0x00, 0x80,
-    0x2c, 0x06, 0x90, 0x2c, 0x09, 0x82, 0x2a, 0x00,
-    0x88, 0x2a, 0x00, 0x82, 0x2a, 0x00, 0x95, 0x2a,
-    0x00, 0x86, 0x2a, 0x00, 0x81, 0x2a, 0x00, 0x84,
-    0x2a, 0x01, 0x89, 0x2a, 0x00, 0x82, 0x2a, 0x00,
-    0x82, 0x2a, 0x01, 0x80, 0x2a, 0x0e, 0x83, 0x2a,
-    0x01, 0x8b, 0x2a, 0x06, 0x86, 0x2a, 0x00, 0x82,
-    0x6d, 0x00, 0x87, 0x6d, 0x01, 0x81, 0x6d, 0x01,
-    0x95, 0x6d, 0x00, 0x86, 0x6d, 0x00, 0x81, 0x6d,
-    0x00, 0x84, 0x6d, 0x01, 0x88, 0x6d, 0x01, 0x81,
-    0x6d, 0x01, 0x82, 0x6d, 0x07, 0x81, 0x6d, 0x03,
-    0x81, 0x6d, 0x00, 0x84, 0x6d, 0x01, 0x91, 0x6d,
-    0x09, 0x81, 0x8b, 0x00, 0x85, 0x8b, 0x02, 0x82,
-    0x8b, 0x00, 0x83, 0x8b, 0x02, 0x81, 0x8b, 0x00,
-    0x80, 0x8b, 0x00, 0x81, 0x8b, 0x02, 0x81, 0x8b,
-    0x02, 0x82, 0x8b, 0x02, 0x8b, 0x8b, 0x03, 0x84,
-    0x8b, 0x02, 0x82, 0x8b, 0x00, 0x83, 0x8b, 0x01,
-    0x80, 0x8b, 0x05, 0x80, 0x8b, 0x0d, 0x94, 0x8b,
-    0x04, 0x8c, 0x8d, 0x00, 0x82, 0x8d, 0x00, 0x96,
-    0x8d, 0x00, 0x8f, 0x8d, 0x02, 0x87, 0x8d, 0x00,
-    0x82, 0x8d, 0x00, 0x83, 0x8d, 0x06, 0x81, 0x8d,
-    0x00, 0x82, 0x8d, 0x04, 0x83, 0x8d, 0x01, 0x89,
-    0x8d, 0x06, 0x88, 0x8d, 0x8c, 0x3a, 0x00, 0x82,
-    0x3a, 0x00, 0x96, 0x3a, 0x00, 0x89, 0x3a, 0x00,
-    0x84, 0x3a, 0x01, 0x88, 0x3a, 0x00, 0x82, 0x3a,
-    0x00, 0x83, 0x3a, 0x06, 0x81, 0x3a, 0x06, 0x80,
-    0x3a, 0x00, 0x83, 0x3a, 0x01, 0x89, 0x3a, 0x00,
-    0x81, 0x3a, 0x0c, 0x83, 0x4c, 0x00, 0x87, 0x4c,
-    0x00, 0x82, 0x4c, 0x00, 0xb2, 0x4c, 0x00, 0x82,
-    0x4c, 0x00, 0x85, 0x4c, 0x03, 0x8f, 0x4c, 0x01,
-    0x99, 0x4c, 0x01, 0x81, 0x7e, 0x00, 0x91, 0x7e,
-    0x02, 0x97, 0x7e, 0x00, 0x88, 0x7e, 0x00, 0x80,
-    0x7e, 0x01, 0x86, 0x7e, 0x02, 0x80, 0x7e, 0x03,
-    0x85, 0x7e, 0x00, 0x80, 0x7e, 0x00, 0x87, 0x7e,
-    0x05, 0x89, 0x7e, 0x01, 0x82, 0x7e, 0x0b, 0xb9,
-    0x8f, 0x03, 0x80, 0x18, 0x9b, 0x8f, 0x24, 0x81,
-    0x41, 0x00, 0x80, 0x41, 0x00, 0x84, 0x41, 0x00,
-    0x97, 0x41, 0x00, 0x80, 0x41, 0x00, 0x96, 0x41,
-    0x01, 0x84, 0x41, 0x00, 0x80, 0x41, 0x00, 0x85,
-    0x41, 0x01, 0x89, 0x41, 0x01, 0x83, 0x41, 0x1f,
-    0xc7, 0x90, 0x00, 0xa3, 0x90, 0x03, 0xa6, 0x90,
-    0x00, 0xa3, 0x90, 0x00, 0x8e, 0x90, 0x00, 0x86,
-    0x90, 0x83, 0x18, 0x81, 0x90, 0x24, 0xe0, 0x3f,
-    0x5b, 0xa5, 0x25, 0x00, 0x80, 0x25, 0x04, 0x80,
-    0x25, 0x01, 0xaa, 0x25, 0x80, 0x18, 0x83, 0x25,
-    0xe0, 0x9f, 0x2e, 0xc8, 0x24, 0x00, 0x83, 0x24,
-    0x01, 0x86, 0x24, 0x00, 0x80, 0x24, 0x00, 0x83,
-    0x24, 0x01, 0xa8, 0x24, 0x00, 0x83, 0x24, 0x01,
-    0xa0, 0x24, 0x00, 0x83, 0x24, 0x01, 0x86, 0x24,
-    0x00, 0x80, 0x24, 0x00, 0x83, 0x24, 0x01, 0x8e,
-    0x24, 0x00, 0xb8, 0x24, 0x00, 0x83, 0x24, 0x01,
-    0xc2, 0x24, 0x01, 0x9f, 0x24, 0x02, 0x99, 0x24,
-    0x05, 0xd5, 0x17, 0x01, 0x85, 0x17, 0x01, 0xe2,
-    0x1f, 0x12, 0x9c, 0x63, 0x02, 0xca, 0x77, 0x82,
-    0x18, 0x8a, 0x77, 0x06, 0x8c, 0x85, 0x00, 0x86,
-    0x85, 0x0a, 0x94, 0x30, 0x81, 0x18, 0x08, 0x93,
-    0x11, 0x0b, 0x8c, 0x86, 0x00, 0x82, 0x86, 0x00,
-    0x81, 0x86, 0x0b, 0xdd, 0x3e, 0x01, 0x89, 0x3e,
-    0x05, 0x89, 0x3e, 0x05, 0x81, 0x58, 0x81, 0x18,
-    0x80, 0x58, 0x80, 0x18, 0x88, 0x58, 0x00, 0x89,
-    0x58, 0x05, 0xd8, 0x58, 0x06, 0xaa, 0x58, 0x04,
-    0xc5, 0x12, 0x09, 0x9e, 0x44, 0x00, 0x8b, 0x44,
-    0x03, 0x8b, 0x44, 0x03, 0x80, 0x44, 0x02, 0x8b,
-    0x44, 0x9d, 0x87, 0x01, 0x84, 0x87, 0x0a, 0xab,
-    0x5e, 0x03, 0x99, 0x5e, 0x05, 0x8a, 0x5e, 0x02,
-    0x81, 0x5e, 0x9f, 0x3e, 0x9b, 0x10, 0x01, 0x81,
-    0x10, 0xbe, 0x88, 0x00, 0x9c, 0x88, 0x01, 0x8a,
-    0x88, 0x05, 0x89, 0x88, 0x05, 0x8d, 0x88, 0x01,
-    0x8e, 0x35, 0x40, 0xcb, 0x07, 0x03, 0xac, 0x07,
-    0x02, 0xbf, 0x82, 0xb3, 0x0a, 0x07, 0x83, 0x0a,
-    0xb7, 0x43, 0x02, 0x8e, 0x43, 0x02, 0x82, 0x43,
-    0xaf, 0x64, 0x88, 0x1c, 0x06, 0xaa, 0x25, 0x01,
-    0x82, 0x25, 0x87, 0x82, 0x07, 0x82, 0x35, 0x80,
-    0x18, 0x8c, 0x35, 0x80, 0x18, 0x86, 0x35, 0x83,
-    0x18, 0x80, 0x35, 0x85, 0x18, 0x80, 0x35, 0x82,
-    0x18, 0x81, 0x35, 0x80, 0x18, 0x04, 0xa5, 0x42,
-    0x84, 0x29, 0x80, 0x1c, 0xb0, 0x42, 0x84, 0x29,
-    0x83, 0x42, 0x84, 0x29, 0x8c, 0x42, 0x80, 0x1c,
-    0xc5, 0x42, 0x80, 0x29, 0xb9, 0x35, 0x00, 0x84,
-    0x35, 0xe0, 0x9f, 0x42, 0x95, 0x29, 0x01, 0x85,
-    0x29, 0x01, 0xa5, 0x29, 0x01, 0x85, 0x29, 0x01,
-    0x87, 0x29, 0x00, 0x80, 0x29, 0x00, 0x80, 0x29,
-    0x00, 0x80, 0x29, 0x00, 0x9e, 0x29, 0x01, 0xb4,
-    0x29, 0x00, 0x8e, 0x29, 0x00, 0x8d, 0x29, 0x01,
-    0x85, 0x29, 0x00, 0x92, 0x29, 0x01, 0x82, 0x29,
-    0x00, 0x88, 0x29, 0x00, 0x8b, 0x18, 0x81, 0x35,
-    0xd6, 0x18, 0x00, 0x8a, 0x18, 0x80, 0x42, 0x01,
-    0x8a, 0x18, 0x80, 0x42, 0x8e, 0x18, 0x00, 0x8c,
-    0x42, 0x02, 0x9f, 0x18, 0x0f, 0xa0, 0x35, 0x0e,
-    0xa5, 0x18, 0x80, 0x29, 0x82, 0x18, 0x81, 0x42,
-    0x85, 0x18, 0x80, 0x42, 0x9a, 0x18, 0x80, 0x42,
-    0x90, 0x18, 0xa8, 0x42, 0x82, 0x18, 0x03, 0xe2,
-    0x36, 0x18, 0x18, 0x8a, 0x18, 0x14, 0xe3, 0x3f,
-    0x18, 0xe0, 0x9f, 0x0f, 0xe2, 0x13, 0x18, 0x01,
-    0x9f, 0x18, 0x01, 0xe0, 0x07, 0x18, 0xae, 0x26,
-    0x00, 0xae, 0x26, 0x00, 0x9f, 0x42, 0xe0, 0x13,
-    0x19, 0x04, 0x86, 0x19, 0xa5, 0x25, 0x00, 0x80,
-    0x25, 0x04, 0x80, 0x25, 0x01, 0xb7, 0x91, 0x06,
-    0x81, 0x91, 0x0d, 0x80, 0x91, 0x96, 0x24, 0x08,
-    0x86, 0x24, 0x00, 0x86, 0x24, 0x00, 0x86, 0x24,
-    0x00, 0x86, 0x24, 0x00, 0x86, 0x24, 0x00, 0x86,
-    0x24, 0x00, 0x86, 0x24, 0x00, 0x86, 0x24, 0x00,
-    0x9f, 0x1c, 0xcf, 0x18, 0x2f, 0x99, 0x2d, 0x00,
-    0xd8, 0x2d, 0x0b, 0xe0, 0x75, 0x2d, 0x19, 0x8b,
-    0x18, 0x03, 0x84, 0x18, 0x80, 0x2d, 0x80, 0x18,
-    0x80, 0x2d, 0x98, 0x18, 0x88, 0x2d, 0x83, 0x35,
-    0x81, 0x2e, 0x87, 0x18, 0x83, 0x2d, 0x83, 0x18,
-    0x00, 0xd5, 0x33, 0x01, 0x81, 0x35, 0x81, 0x18,
-    0x82, 0x33, 0x80, 0x18, 0xd9, 0x3b, 0x81, 0x18,
-    0x82, 0x3b, 0x04, 0xaa, 0x0d, 0x00, 0xdd, 0x2e,
-    0x00, 0x8f, 0x18, 0x9a, 0x0d, 0x04, 0xa3, 0x18,
-    0x0b, 0x8f, 0x3b, 0x9e, 0x2e, 0x00, 0xbf, 0x18,
-    0x9e, 0x2e, 0xd0, 0x18, 0xae, 0x3b, 0x80, 0x18,
-    0xd7, 0x3b, 0xe0, 0x47, 0x18, 0xf0, 0x09, 0x55,
-    0x2d, 0x09, 0xbf, 0x18, 0xf0, 0x41, 0x8f, 0x2d,
-    0x0f, 0xe4, 0x2c, 0x97, 0x02, 0xb6, 0x97, 0x08,
-    0xaf, 0x47, 0xe0, 0xcb, 0x94, 0x13, 0xdf, 0x1c,
-    0xd7, 0x08, 0x07, 0xa1, 0x18, 0xe0, 0x05, 0x42,
-    0x82, 0x18, 0xb4, 0x42, 0x01, 0x84, 0x42, 0x2f,
-    0x88, 0x42, 0xab, 0x83, 0x03, 0x89, 0x18, 0x05,
-    0xb7, 0x73, 0x07, 0xc5, 0x79, 0x07, 0x8b, 0x79,
-    0x05, 0x9f, 0x1e, 0xad, 0x3c, 0x80, 0x18, 0x80,
-    0x3c, 0xa3, 0x76, 0x0a, 0x80, 0x76, 0x9c, 0x2e,
-    0x02, 0xcd, 0x38, 0x00, 0x80, 0x18, 0x89, 0x38,
-    0x03, 0x81, 0x38, 0x9e, 0x5b, 0x00, 0xb6, 0x16,
-    0x08, 0x8d, 0x16, 0x01, 0x89, 0x16, 0x01, 0x83,
-    0x16, 0x9f, 0x5b, 0xc2, 0x89, 0x17, 0x84, 0x89,
-    0x96, 0x52, 0x09, 0x85, 0x24, 0x01, 0x85, 0x24,
-    0x01, 0x85, 0x24, 0x08, 0x86, 0x24, 0x00, 0x86,
-    0x24, 0x00, 0xaa, 0x42, 0x80, 0x18, 0x88, 0x42,
-    0x80, 0x29, 0x81, 0x42, 0x07, 0xcf, 0x17, 0xad,
-    0x52, 0x01, 0x89, 0x52, 0x05, 0xf0, 0x1b, 0x43,
-    0x2e, 0x0b, 0x96, 0x2e, 0x03, 0xb0, 0x2e, 0x70,
-    0x10, 0xa3, 0xe1, 0x0d, 0x2d, 0x01, 0xe0, 0x09,
-    0x2d, 0x25, 0x86, 0x42, 0x0b, 0x84, 0x05, 0x04,
-    0x99, 0x32, 0x00, 0x84, 0x32, 0x00, 0x80, 0x32,
-    0x00, 0x81, 0x32, 0x00, 0x81, 0x32, 0x00, 0x89,
-    0x32, 0xe0, 0x11, 0x04, 0x10, 0xe1, 0x0a, 0x04,
-    0x81, 0x18, 0x0f, 0xbf, 0x04, 0x01, 0xb5, 0x04,
-    0x27, 0x8d, 0x04, 0x01, 0x8f, 0x35, 0x89, 0x18,
-    0x05, 0x8d, 0x35, 0x81, 0x1c, 0xa2, 0x18, 0x00,
-    0x92, 0x18, 0x00, 0x83, 0x18, 0x03, 0x84, 0x04,
-    0x00, 0xe0, 0x26, 0x04, 0x01, 0x80, 0x18, 0x00,
-    0x9f, 0x18, 0x99, 0x42, 0x85, 0x18, 0x99, 0x42,
-    0x8a, 0x18, 0x89, 0x3b, 0x80, 0x18, 0xac, 0x3b,
-    0x81, 0x18, 0x9e, 0x2e, 0x02, 0x85, 0x2e, 0x01,
-    0x85, 0x2e, 0x01, 0x85, 0x2e, 0x01, 0x82, 0x2e,
-    0x02, 0x86, 0x18, 0x00, 0x86, 0x18, 0x09, 0x84,
-    0x18, 0x01, 0x8b, 0x46, 0x00, 0x99, 0x46, 0x00,
-    0x92, 0x46, 0x00, 0x81, 0x46, 0x00, 0x8e, 0x46,
-    0x01, 0x8d, 0x46, 0x21, 0xe0, 0x1a, 0x46, 0x04,
-    0x82, 0x18, 0x03, 0xac, 0x18, 0x02, 0x88, 0x18,
-    0xce, 0x29, 0x00, 0x8b, 0x18, 0x03, 0x80, 0x29,
-    0x2e, 0xac, 0x18, 0x80, 0x35, 0x60, 0x21, 0x9c,
-    0x48, 0x02, 0xb0, 0x13, 0x0e, 0x80, 0x35, 0x9a,
-    0x18, 0x03, 0xa3, 0x66, 0x08, 0x82, 0x66, 0x9a,
-    0x27, 0x04, 0xaa, 0x68, 0x04, 0x9d, 0x93, 0x00,
-    0x80, 0x93, 0xa3, 0x69, 0x03, 0x8d, 0x69, 0x29,
-    0xcf, 0x1d, 0xaf, 0x7b, 0x9d, 0x6f, 0x01, 0x89,
-    0x6f, 0x05, 0xa3, 0x6e, 0x03, 0xa3, 0x6e, 0x03,
-    0xa7, 0x22, 0x07, 0xb3, 0x14, 0x0a, 0x80, 0x14,
-    0x60, 0x2f, 0xe0, 0xd6, 0x45, 0x08, 0x95, 0x45,
-    0x09, 0x87, 0x45, 0x60, 0x37, 0x85, 0x1b, 0x01,
-    0x80, 0x1b, 0x00, 0xab, 0x1b, 0x00, 0x81, 0x1b,
-    0x02, 0x80, 0x1b, 0x01, 0x80, 0x1b, 0x95, 0x34,
-    0x00, 0x88, 0x34, 0x9f, 0x71, 0x9e, 0x5c, 0x07,
-    0x88, 0x5c, 0x2f, 0x92, 0x31, 0x00, 0x81, 0x31,
-    0x04, 0x84, 0x31, 0x9b, 0x74, 0x02, 0x80, 0x74,
-    0x99, 0x49, 0x04, 0x80, 0x49, 0x3f, 0x9f, 0x55,
-    0x97, 0x54, 0x03, 0x93, 0x54, 0x01, 0xad, 0x54,
-    0x83, 0x3d, 0x00, 0x81, 0x3d, 0x04, 0x87, 0x3d,
-    0x00, 0x82, 0x3d, 0x00, 0x9c, 0x3d, 0x01, 0x82,
-    0x3d, 0x03, 0x89, 0x3d, 0x06, 0x88, 0x3d, 0x06,
-    0x9f, 0x6b, 0x9f, 0x67, 0x1f, 0xa6, 0x4e, 0x03,
-    0x8b, 0x4e, 0x08, 0xb5, 0x06, 0x02, 0x86, 0x06,
-    0x95, 0x37, 0x01, 0x87, 0x37, 0x92, 0x36, 0x04,
-    0x87, 0x36, 0x91, 0x75, 0x06, 0x83, 0x75, 0x0b,
-    0x86, 0x75, 0x4f, 0xc8, 0x6c, 0x36, 0xb2, 0x65,
-    0x0c, 0xb2, 0x65, 0x06, 0x85, 0x65, 0xa7, 0x2f,
-    0x07, 0x89, 0x2f, 0x60, 0xc5, 0x9e, 0x04, 0x60,
-    0x20, 0xa7, 0x6a, 0x07, 0xa9, 0x7f, 0x60, 0x25,
-    0x96, 0x23, 0x08, 0xcd, 0x0e, 0x03, 0x9d, 0x0e,
-    0x0e, 0x80, 0x0e, 0xc1, 0x39, 0x0a, 0x80, 0x39,
-    0x01, 0x98, 0x80, 0x06, 0x89, 0x80, 0x05, 0xb4,
-    0x15, 0x00, 0x90, 0x15, 0x08, 0xa6, 0x4b, 0x08,
-    0xcd, 0x7a, 0x01, 0x8f, 0x7a, 0x00, 0x93, 0x7e,
-    0x0a, 0x91, 0x3f, 0x00, 0xab, 0x3f, 0x40, 0x86,
-    0x5a, 0x00, 0x80, 0x5a, 0x00, 0x83, 0x5a, 0x00,
-    0x8e, 0x5a, 0x00, 0x8a, 0x5a, 0x05, 0xba, 0x40,
-    0x04, 0x89, 0x40, 0x05, 0x83, 0x28, 0x00, 0x87,
-    0x28, 0x01, 0x81, 0x28, 0x01, 0x95, 0x28, 0x00,
-    0x86, 0x28, 0x00, 0x81, 0x28, 0x00, 0x84, 0x28,
-    0x00, 0x80, 0x35, 0x88, 0x28, 0x01, 0x81, 0x28,
-    0x01, 0x82, 0x28, 0x01, 0x80, 0x28, 0x05, 0x80,
-    0x28, 0x04, 0x86, 0x28, 0x01, 0x86, 0x28, 0x02,
-    0x84, 0x28, 0x60, 0x2a, 0xd9, 0x5f, 0x00, 0x80,
-    0x5f, 0x00, 0x82, 0x5f, 0x1f, 0xc7, 0x92, 0x07,
-    0x89, 0x92, 0x60, 0x45, 0xb5, 0x7c, 0x01, 0xa5,
-    0x7c, 0x21, 0xc4, 0x57, 0x0a, 0x89, 0x57, 0x05,
-    0x8c, 0x58, 0x12, 0xb8, 0x8a, 0x06, 0x89, 0x8a,
-    0x35, 0x9a, 0x02, 0x01, 0x8e, 0x02, 0x03, 0x8f,
-    0x02, 0x60, 0x5f, 0xbb, 0x1f, 0x60, 0x03, 0xd2,
-    0x96, 0x0b, 0x80, 0x96, 0x60, 0x3f, 0x87, 0x5d,
-    0x01, 0xad, 0x5d, 0x01, 0x8a, 0x5d, 0x1a, 0xc7,
-    0x98, 0x07, 0xd2, 0x81, 0x1c, 0xb8, 0x72, 0x60,
-    0xa6, 0x88, 0x0c, 0x00, 0xac, 0x0c, 0x00, 0x8d,
-    0x0c, 0x09, 0x9c, 0x0c, 0x02, 0x9f, 0x4f, 0x01,
-    0x95, 0x4f, 0x00, 0x8d, 0x4f, 0x48, 0x86, 0x50,
-    0x00, 0x81, 0x50, 0x00, 0xab, 0x50, 0x02, 0x80,
-    0x50, 0x00, 0x81, 0x50, 0x00, 0x88, 0x50, 0x07,
-    0x89, 0x50, 0x05, 0x85, 0x2b, 0x00, 0x81, 0x2b,
-    0x00, 0xa4, 0x2b, 0x00, 0x81, 0x2b, 0x00, 0x85,
-    0x2b, 0x06, 0x89, 0x2b, 0x60, 0xd5, 0x98, 0x4a,
-    0x60, 0x66, 0xb1, 0x8b, 0x0c, 0x80, 0x8b, 0xe3,
-    0x39, 0x1a, 0x60, 0x05, 0xe0, 0x0e, 0x1a, 0x00,
-    0x84, 0x1a, 0x0a, 0xe0, 0x63, 0x1a, 0x6a, 0x5b,
-    0xe3, 0xce, 0x21, 0x00, 0x88, 0x21, 0x6f, 0x66,
-    0xe1, 0xe6, 0x03, 0x70, 0x11, 0x58, 0xe1, 0xd8,
-    0x08, 0x06, 0x9e, 0x59, 0x00, 0x89, 0x59, 0x03,
-    0x81, 0x59, 0x5f, 0x9d, 0x09, 0x01, 0x85, 0x09,
-    0x09, 0xc5, 0x70, 0x09, 0x89, 0x70, 0x00, 0x86,
-    0x70, 0x00, 0x94, 0x70, 0x04, 0x92, 0x70, 0x62,
-    0x4f, 0xda, 0x51, 0x60, 0x04, 0xca, 0x56, 0x03,
-    0xb8, 0x56, 0x06, 0x90, 0x56, 0x3f, 0x80, 0x8c,
-    0x80, 0x61, 0x81, 0x18, 0x1b, 0xf0, 0x07, 0x97,
-    0x8c, 0x07, 0xe2, 0x92, 0x8c, 0x70, 0x14, 0xac,
-    0x80, 0x3b, 0xe0, 0xbd, 0x33, 0x30, 0x82, 0x33,
-    0x10, 0x83, 0x3b, 0x07, 0xe1, 0x2b, 0x61, 0x68,
-    0xa3, 0xe0, 0x0a, 0x20, 0x04, 0x8c, 0x20, 0x02,
-    0x88, 0x20, 0x06, 0x89, 0x20, 0x01, 0x83, 0x20,
-    0x83, 0x18, 0x70, 0x02, 0xfb, 0xe0, 0x95, 0x18,
-    0x09, 0xa6, 0x18, 0x01, 0xbd, 0x18, 0x82, 0x35,
-    0x90, 0x18, 0x87, 0x35, 0x81, 0x18, 0x86, 0x35,
-    0x9d, 0x18, 0x83, 0x35, 0xba, 0x18, 0x16, 0xc5,
-    0x29, 0x60, 0x39, 0x93, 0x18, 0x0b, 0xd6, 0x18,
-    0x08, 0x98, 0x18, 0x60, 0x26, 0xd4, 0x18, 0x00,
-    0xc6, 0x18, 0x00, 0x81, 0x18, 0x01, 0x80, 0x18,
-    0x01, 0x81, 0x18, 0x01, 0x83, 0x18, 0x00, 0x8b,
-    0x18, 0x00, 0x80, 0x18, 0x00, 0x86, 0x18, 0x00,
-    0xc0, 0x18, 0x00, 0x83, 0x18, 0x01, 0x87, 0x18,
-    0x00, 0x86, 0x18, 0x00, 0x9b, 0x18, 0x00, 0x83,
-    0x18, 0x00, 0x84, 0x18, 0x00, 0x80, 0x18, 0x02,
-    0x86, 0x18, 0x00, 0xe0, 0xf3, 0x18, 0x01, 0xe0,
-    0xc3, 0x18, 0x01, 0xb1, 0x18, 0xe2, 0x2b, 0x7d,
-    0x0e, 0x84, 0x7d, 0x00, 0x8e, 0x7d, 0x64, 0xef,
-    0x86, 0x26, 0x00, 0x90, 0x26, 0x01, 0x86, 0x26,
-    0x00, 0x81, 0x26, 0x00, 0x84, 0x26, 0x60, 0x74,
-    0xac, 0x62, 0x02, 0x8d, 0x62, 0x01, 0x89, 0x62,
-    0x03, 0x81, 0x62, 0x61, 0x0f, 0xb9, 0x95, 0x04,
-    0x80, 0x95, 0x64, 0x9f, 0xe0, 0x64, 0x53, 0x01,
-    0x8f, 0x53, 0x28, 0xcb, 0x01, 0x03, 0x89, 0x01,
-    0x03, 0x81, 0x01, 0x62, 0xb0, 0xc3, 0x18, 0x4b,
-    0xbc, 0x18, 0x60, 0x61, 0x83, 0x04, 0x00, 0x9a,
-    0x04, 0x00, 0x81, 0x04, 0x00, 0x80, 0x04, 0x01,
-    0x80, 0x04, 0x00, 0x89, 0x04, 0x00, 0x83, 0x04,
-    0x00, 0x80, 0x04, 0x00, 0x80, 0x04, 0x05, 0x80,
-    0x04, 0x03, 0x80, 0x04, 0x00, 0x80, 0x04, 0x00,
-    0x80, 0x04, 0x00, 0x82, 0x04, 0x00, 0x81, 0x04,
-    0x00, 0x80, 0x04, 0x01, 0x80, 0x04, 0x00, 0x80,
-    0x04, 0x00, 0x80, 0x04, 0x00, 0x80, 0x04, 0x00,
-    0x80, 0x04, 0x00, 0x81, 0x04, 0x00, 0x80, 0x04,
-    0x01, 0x83, 0x04, 0x00, 0x86, 0x04, 0x00, 0x83,
-    0x04, 0x00, 0x83, 0x04, 0x00, 0x80, 0x04, 0x00,
-    0x89, 0x04, 0x00, 0x90, 0x04, 0x04, 0x82, 0x04,
-    0x00, 0x84, 0x04, 0x00, 0x90, 0x04, 0x33, 0x81,
-    0x04, 0x60, 0xad, 0xab, 0x18, 0x03, 0xe0, 0x03,
-    0x18, 0x0b, 0x8e, 0x18, 0x01, 0x8e, 0x18, 0x00,
-    0x8e, 0x18, 0x00, 0xa4, 0x18, 0x09, 0x8c, 0x18,
-    0x02, 0xdc, 0x18, 0x02, 0xbc, 0x18, 0x38, 0x99,
-    0x18, 0x80, 0x33, 0x81, 0x18, 0x0c, 0xab, 0x18,
-    0x03, 0x88, 0x18, 0x06, 0x81, 0x18, 0x0d, 0x85,
-    0x18, 0x60, 0x39, 0xe3, 0x75, 0x18, 0x09, 0x8c,
-    0x18, 0x02, 0x8a, 0x18, 0x04, 0xe0, 0x13, 0x18,
-    0x0b, 0xd8, 0x18, 0x06, 0x8b, 0x18, 0x13, 0x8b,
-    0x18, 0x03, 0xb7, 0x18, 0x07, 0x89, 0x18, 0x05,
-    0xa7, 0x18, 0x07, 0x9d, 0x18, 0x51, 0x8b, 0x18,
-    0x00, 0xe0, 0x04, 0x18, 0x00, 0x83, 0x18, 0x02,
-    0xa8, 0x18, 0x01, 0x85, 0x18, 0x02, 0x9c, 0x18,
-    0x01, 0xe0, 0x26, 0x18, 0x0b, 0x8d, 0x18, 0x01,
-    0x83, 0x18, 0x03, 0x82, 0x18, 0x04, 0x82, 0x18,
-    0x0c, 0x85, 0x18, 0x65, 0x09, 0xf0, 0x96, 0x76,
-    0x2d, 0x28, 0xef, 0xd4, 0x2d, 0x0a, 0xe0, 0x7d,
-    0x2d, 0x01, 0xf0, 0x06, 0x21, 0x2d, 0x0d, 0xf0,
-    0x0c, 0xd0, 0x2d, 0x6b, 0xbe, 0xe1, 0xbd, 0x2d,
-    0x7a, 0xf5, 0x82, 0x80, 0x18, 0x1d, 0xdf, 0x18,
-    0x60, 0x1f, 0xe0, 0x8f, 0x35,
+static const uint8_t unicode_script_table[2609] = {
+    0xc0, 0x19, 0x99, 0x45, 0x85, 0x19, 0x99, 0x45,
+    0xae, 0x19, 0x80, 0x45, 0x8e, 0x19, 0x80, 0x45,
+    0x84, 0x19, 0x96, 0x45, 0x80, 0x19, 0x9e, 0x45,
+    0x80, 0x19, 0xe1, 0x60, 0x45, 0xa6, 0x19, 0x84,
+    0x45, 0x84, 0x19, 0x81, 0x0d, 0x93, 0x19, 0xe0,
+    0x0f, 0x37, 0x83, 0x2b, 0x80, 0x19, 0x82, 0x2b,
+    0x01, 0x83, 0x2b, 0x80, 0x19, 0x80, 0x2b, 0x03,
+    0x80, 0x2b, 0x80, 0x19, 0x80, 0x2b, 0x80, 0x19,
+    0x82, 0x2b, 0x00, 0x80, 0x2b, 0x00, 0x93, 0x2b,
+    0x00, 0xbe, 0x2b, 0x8d, 0x1a, 0x8f, 0x2b, 0xe0,
+    0x24, 0x1d, 0x81, 0x37, 0xe0, 0x48, 0x1d, 0x00,
+    0xa5, 0x05, 0x01, 0xb1, 0x05, 0x01, 0x82, 0x05,
+    0x00, 0xb6, 0x34, 0x07, 0x9a, 0x34, 0x03, 0x85,
+    0x34, 0x0a, 0x84, 0x04, 0x80, 0x19, 0x85, 0x04,
+    0x80, 0x19, 0x8d, 0x04, 0x80, 0x19, 0x80, 0x04,
+    0x00, 0x80, 0x04, 0x80, 0x19, 0x9f, 0x04, 0x80,
+    0x19, 0x89, 0x04, 0x8a, 0x37, 0x99, 0x04, 0x80,
+    0x37, 0xe0, 0x0b, 0x04, 0x80, 0x19, 0xa1, 0x04,
+    0x8d, 0x87, 0x00, 0xbb, 0x87, 0x01, 0x82, 0x87,
+    0xaf, 0x04, 0xb1, 0x91, 0x0d, 0xba, 0x63, 0x01,
+    0x82, 0x63, 0xad, 0x7b, 0x01, 0x8e, 0x7b, 0x00,
+    0x9b, 0x50, 0x01, 0x80, 0x50, 0x00, 0x8a, 0x87,
+    0x34, 0x94, 0x04, 0x00, 0x91, 0x04, 0x0a, 0x8e,
+    0x04, 0x80, 0x19, 0x9c, 0x04, 0xd0, 0x1f, 0x83,
+    0x37, 0x8e, 0x1f, 0x81, 0x19, 0x99, 0x1f, 0x83,
+    0x0b, 0x00, 0x87, 0x0b, 0x01, 0x81, 0x0b, 0x01,
+    0x95, 0x0b, 0x00, 0x86, 0x0b, 0x00, 0x80, 0x0b,
+    0x02, 0x83, 0x0b, 0x01, 0x88, 0x0b, 0x01, 0x81,
+    0x0b, 0x01, 0x83, 0x0b, 0x07, 0x80, 0x0b, 0x03,
+    0x81, 0x0b, 0x00, 0x84, 0x0b, 0x01, 0x98, 0x0b,
+    0x01, 0x82, 0x2e, 0x00, 0x85, 0x2e, 0x03, 0x81,
+    0x2e, 0x01, 0x95, 0x2e, 0x00, 0x86, 0x2e, 0x00,
+    0x81, 0x2e, 0x00, 0x81, 0x2e, 0x00, 0x81, 0x2e,
+    0x01, 0x80, 0x2e, 0x00, 0x84, 0x2e, 0x03, 0x81,
+    0x2e, 0x01, 0x82, 0x2e, 0x02, 0x80, 0x2e, 0x06,
+    0x83, 0x2e, 0x00, 0x80, 0x2e, 0x06, 0x90, 0x2e,
+    0x09, 0x82, 0x2c, 0x00, 0x88, 0x2c, 0x00, 0x82,
+    0x2c, 0x00, 0x95, 0x2c, 0x00, 0x86, 0x2c, 0x00,
+    0x81, 0x2c, 0x00, 0x84, 0x2c, 0x01, 0x89, 0x2c,
+    0x00, 0x82, 0x2c, 0x00, 0x82, 0x2c, 0x01, 0x80,
+    0x2c, 0x0e, 0x83, 0x2c, 0x01, 0x8b, 0x2c, 0x06,
+    0x86, 0x2c, 0x00, 0x82, 0x70, 0x00, 0x87, 0x70,
+    0x01, 0x81, 0x70, 0x01, 0x95, 0x70, 0x00, 0x86,
+    0x70, 0x00, 0x81, 0x70, 0x00, 0x84, 0x70, 0x01,
+    0x88, 0x70, 0x01, 0x81, 0x70, 0x01, 0x82, 0x70,
+    0x06, 0x82, 0x70, 0x03, 0x81, 0x70, 0x00, 0x84,
+    0x70, 0x01, 0x91, 0x70, 0x09, 0x81, 0x8e, 0x00,
+    0x85, 0x8e, 0x02, 0x82, 0x8e, 0x00, 0x83, 0x8e,
+    0x02, 0x81, 0x8e, 0x00, 0x80, 0x8e, 0x00, 0x81,
+    0x8e, 0x02, 0x81, 0x8e, 0x02, 0x82, 0x8e, 0x02,
+    0x8b, 0x8e, 0x03, 0x84, 0x8e, 0x02, 0x82, 0x8e,
+    0x00, 0x83, 0x8e, 0x01, 0x80, 0x8e, 0x05, 0x80,
+    0x8e, 0x0d, 0x94, 0x8e, 0x04, 0x8c, 0x90, 0x00,
+    0x82, 0x90, 0x00, 0x96, 0x90, 0x00, 0x8f, 0x90,
+    0x02, 0x87, 0x90, 0x00, 0x82, 0x90, 0x00, 0x83,
+    0x90, 0x06, 0x81, 0x90, 0x00, 0x82, 0x90, 0x04,
+    0x83, 0x90, 0x01, 0x89, 0x90, 0x06, 0x88, 0x90,
+    0x8c, 0x3c, 0x00, 0x82, 0x3c, 0x00, 0x96, 0x3c,
+    0x00, 0x89, 0x3c, 0x00, 0x84, 0x3c, 0x01, 0x88,
+    0x3c, 0x00, 0x82, 0x3c, 0x00, 0x83, 0x3c, 0x06,
+    0x81, 0x3c, 0x06, 0x80, 0x3c, 0x00, 0x83, 0x3c,
+    0x01, 0x89, 0x3c, 0x00, 0x81, 0x3c, 0x0c, 0x8c,
+    0x4f, 0x00, 0x82, 0x4f, 0x00, 0xb2, 0x4f, 0x00,
+    0x82, 0x4f, 0x00, 0x85, 0x4f, 0x03, 0x8f, 0x4f,
+    0x01, 0x99, 0x4f, 0x00, 0x82, 0x81, 0x00, 0x91,
+    0x81, 0x02, 0x97, 0x81, 0x00, 0x88, 0x81, 0x00,
+    0x80, 0x81, 0x01, 0x86, 0x81, 0x02, 0x80, 0x81,
+    0x03, 0x85, 0x81, 0x00, 0x80, 0x81, 0x00, 0x87,
+    0x81, 0x05, 0x89, 0x81, 0x01, 0x82, 0x81, 0x0b,
+    0xb9, 0x92, 0x03, 0x80, 0x19, 0x9b, 0x92, 0x24,
+    0x81, 0x44, 0x00, 0x80, 0x44, 0x00, 0x84, 0x44,
+    0x00, 0x97, 0x44, 0x00, 0x80, 0x44, 0x00, 0x96,
+    0x44, 0x01, 0x84, 0x44, 0x00, 0x80, 0x44, 0x00,
+    0x85, 0x44, 0x01, 0x89, 0x44, 0x01, 0x83, 0x44,
+    0x1f, 0xc7, 0x93, 0x00, 0xa3, 0x93, 0x03, 0xa6,
+    0x93, 0x00, 0xa3, 0x93, 0x00, 0x8e, 0x93, 0x00,
+    0x86, 0x93, 0x83, 0x19, 0x81, 0x93, 0x24, 0xe0,
+    0x3f, 0x5e, 0xa5, 0x27, 0x00, 0x80, 0x27, 0x04,
+    0x80, 0x27, 0x01, 0xaa, 0x27, 0x80, 0x19, 0x83,
+    0x27, 0xe0, 0x9f, 0x30, 0xc8, 0x26, 0x00, 0x83,
+    0x26, 0x01, 0x86, 0x26, 0x00, 0x80, 0x26, 0x00,
+    0x83, 0x26, 0x01, 0xa8, 0x26, 0x00, 0x83, 0x26,
+    0x01, 0xa0, 0x26, 0x00, 0x83, 0x26, 0x01, 0x86,
+    0x26, 0x00, 0x80, 0x26, 0x00, 0x83, 0x26, 0x01,
+    0x8e, 0x26, 0x00, 0xb8, 0x26, 0x00, 0x83, 0x26,
+    0x01, 0xc2, 0x26, 0x01, 0x9f, 0x26, 0x02, 0x99,
+    0x26, 0x05, 0xd5, 0x17, 0x01, 0x85, 0x17, 0x01,
+    0xe2, 0x1f, 0x12, 0x9c, 0x66, 0x02, 0xca, 0x7a,
+    0x82, 0x19, 0x8a, 0x7a, 0x06, 0x8c, 0x88, 0x00,
+    0x86, 0x88, 0x0a, 0x94, 0x32, 0x81, 0x19, 0x08,
+    0x93, 0x11, 0x0b, 0x8c, 0x89, 0x00, 0x82, 0x89,
+    0x00, 0x81, 0x89, 0x0b, 0xdd, 0x40, 0x01, 0x89,
+    0x40, 0x05, 0x89, 0x40, 0x05, 0x81, 0x5b, 0x81,
+    0x19, 0x80, 0x5b, 0x80, 0x19, 0x88, 0x5b, 0x00,
+    0x89, 0x5b, 0x05, 0xd8, 0x5b, 0x06, 0xaa, 0x5b,
+    0x04, 0xc5, 0x12, 0x09, 0x9e, 0x47, 0x00, 0x8b,
+    0x47, 0x03, 0x8b, 0x47, 0x03, 0x80, 0x47, 0x02,
+    0x8b, 0x47, 0x9d, 0x8a, 0x01, 0x84, 0x8a, 0x0a,
+    0xab, 0x61, 0x03, 0x99, 0x61, 0x05, 0x8a, 0x61,
+    0x02, 0x81, 0x61, 0x9f, 0x40, 0x9b, 0x10, 0x01,
+    0x81, 0x10, 0xbe, 0x8b, 0x00, 0x9c, 0x8b, 0x01,
+    0x8a, 0x8b, 0x05, 0x89, 0x8b, 0x05, 0x8d, 0x8b,
+    0x01, 0x90, 0x37, 0x3e, 0xcb, 0x07, 0x03, 0xac,
+    0x07, 0x02, 0xbf, 0x85, 0xb3, 0x0a, 0x07, 0x83,
+    0x0a, 0xb7, 0x46, 0x02, 0x8e, 0x46, 0x02, 0x82,
+    0x46, 0xaf, 0x67, 0x88, 0x1d, 0x06, 0xaa, 0x27,
+    0x01, 0x82, 0x27, 0x87, 0x85, 0x07, 0x82, 0x37,
+    0x80, 0x19, 0x8c, 0x37, 0x80, 0x19, 0x86, 0x37,
+    0x83, 0x19, 0x80, 0x37, 0x85, 0x19, 0x80, 0x37,
+    0x82, 0x19, 0x81, 0x37, 0x80, 0x19, 0x04, 0xa5,
+    0x45, 0x84, 0x2b, 0x80, 0x1d, 0xb0, 0x45, 0x84,
+    0x2b, 0x83, 0x45, 0x84, 0x2b, 0x8c, 0x45, 0x80,
+    0x1d, 0xc5, 0x45, 0x80, 0x2b, 0xb9, 0x37, 0x00,
+    0x84, 0x37, 0xe0, 0x9f, 0x45, 0x95, 0x2b, 0x01,
+    0x85, 0x2b, 0x01, 0xa5, 0x2b, 0x01, 0x85, 0x2b,
+    0x01, 0x87, 0x2b, 0x00, 0x80, 0x2b, 0x00, 0x80,
+    0x2b, 0x00, 0x80, 0x2b, 0x00, 0x9e, 0x2b, 0x01,
+    0xb4, 0x2b, 0x00, 0x8e, 0x2b, 0x00, 0x8d, 0x2b,
+    0x01, 0x85, 0x2b, 0x00, 0x92, 0x2b, 0x01, 0x82,
+    0x2b, 0x00, 0x88, 0x2b, 0x00, 0x8b, 0x19, 0x81,
+    0x37, 0xd6, 0x19, 0x00, 0x8a, 0x19, 0x80, 0x45,
+    0x01, 0x8a, 0x19, 0x80, 0x45, 0x8e, 0x19, 0x00,
+    0x8c, 0x45, 0x02, 0x9f, 0x19, 0x0f, 0xa0, 0x37,
+    0x0e, 0xa5, 0x19, 0x80, 0x2b, 0x82, 0x19, 0x81,
+    0x45, 0x85, 0x19, 0x80, 0x45, 0x9a, 0x19, 0x80,
+    0x45, 0x90, 0x19, 0xa8, 0x45, 0x82, 0x19, 0x03,
+    0xe2, 0x36, 0x19, 0x18, 0x8a, 0x19, 0x14, 0xe3,
+    0x3f, 0x19, 0xe0, 0x9f, 0x0f, 0xe2, 0x13, 0x19,
+    0x01, 0x9f, 0x19, 0x00, 0xe0, 0x08, 0x19, 0xae,
+    0x28, 0x00, 0xae, 0x28, 0x00, 0x9f, 0x45, 0xe0,
+    0x13, 0x1a, 0x04, 0x86, 0x1a, 0xa5, 0x27, 0x00,
+    0x80, 0x27, 0x04, 0x80, 0x27, 0x01, 0xb7, 0x94,
+    0x06, 0x81, 0x94, 0x0d, 0x80, 0x94, 0x96, 0x26,
+    0x08, 0x86, 0x26, 0x00, 0x86, 0x26, 0x00, 0x86,
+    0x26, 0x00, 0x86, 0x26, 0x00, 0x86, 0x26, 0x00,
+    0x86, 0x26, 0x00, 0x86, 0x26, 0x00, 0x86, 0x26,
+    0x00, 0x9f, 0x1d, 0xd2, 0x19, 0x2c, 0x99, 0x2f,
+    0x00, 0xd8, 0x2f, 0x0b, 0xe0, 0x75, 0x2f, 0x19,
+    0x8b, 0x19, 0x03, 0x84, 0x19, 0x80, 0x2f, 0x80,
+    0x19, 0x80, 0x2f, 0x98, 0x19, 0x88, 0x2f, 0x83,
+    0x37, 0x81, 0x30, 0x87, 0x19, 0x83, 0x2f, 0x83,
+    0x19, 0x00, 0xd5, 0x35, 0x01, 0x81, 0x37, 0x81,
+    0x19, 0x82, 0x35, 0x80, 0x19, 0xd9, 0x3d, 0x81,
+    0x19, 0x82, 0x3d, 0x04, 0xaa, 0x0d, 0x00, 0xdd,
+    0x30, 0x00, 0x8f, 0x19, 0x9f, 0x0d, 0xa3, 0x19,
+    0x0b, 0x8f, 0x3d, 0x9e, 0x30, 0x00, 0xbf, 0x19,
+    0x9e, 0x30, 0xd0, 0x19, 0xae, 0x3d, 0x80, 0x19,
+    0xd7, 0x3d, 0xe0, 0x47, 0x19, 0xf0, 0x09, 0x5f,
+    0x2f, 0xbf, 0x19, 0xf0, 0x41, 0x9c, 0x2f, 0x02,
+    0xe4, 0x2c, 0x9b, 0x02, 0xb6, 0x9b, 0x08, 0xaf,
+    0x4a, 0xe0, 0xcb, 0x97, 0x13, 0xdf, 0x1d, 0xd7,
+    0x08, 0x07, 0xa1, 0x19, 0xe0, 0x05, 0x45, 0x82,
+    0x19, 0xb4, 0x45, 0x01, 0x88, 0x45, 0x29, 0x8a,
+    0x45, 0xac, 0x86, 0x02, 0x89, 0x19, 0x05, 0xb7,
+    0x76, 0x07, 0xc5, 0x7c, 0x07, 0x8b, 0x7c, 0x05,
+    0x9f, 0x1f, 0xad, 0x3e, 0x80, 0x19, 0x80, 0x3e,
+    0xa3, 0x79, 0x0a, 0x80, 0x79, 0x9c, 0x30, 0x02,
+    0xcd, 0x3a, 0x00, 0x80, 0x19, 0x89, 0x3a, 0x03,
+    0x81, 0x3a, 0x9e, 0x5e, 0x00, 0xb6, 0x16, 0x08,
+    0x8d, 0x16, 0x01, 0x89, 0x16, 0x01, 0x83, 0x16,
+    0x9f, 0x5e, 0xc2, 0x8c, 0x17, 0x84, 0x8c, 0x96,
+    0x55, 0x09, 0x85, 0x26, 0x01, 0x85, 0x26, 0x01,
+    0x85, 0x26, 0x08, 0x86, 0x26, 0x00, 0x86, 0x26,
+    0x00, 0xaa, 0x45, 0x80, 0x19, 0x88, 0x45, 0x80,
+    0x2b, 0x83, 0x45, 0x81, 0x19, 0x03, 0xcf, 0x17,
+    0xad, 0x55, 0x01, 0x89, 0x55, 0x05, 0xf0, 0x1b,
+    0x43, 0x30, 0x0b, 0x96, 0x30, 0x03, 0xb0, 0x30,
+    0x70, 0x10, 0xa3, 0xe1, 0x0d, 0x2f, 0x01, 0xe0,
+    0x09, 0x2f, 0x25, 0x86, 0x45, 0x0b, 0x84, 0x05,
+    0x04, 0x99, 0x34, 0x00, 0x84, 0x34, 0x00, 0x80,
+    0x34, 0x00, 0x81, 0x34, 0x00, 0x81, 0x34, 0x00,
+    0x89, 0x34, 0xe0, 0x11, 0x04, 0x10, 0xe1, 0x0a,
+    0x04, 0x81, 0x19, 0x0f, 0xbf, 0x04, 0x01, 0xb5,
+    0x04, 0x27, 0x8d, 0x04, 0x01, 0x8f, 0x37, 0x89,
+    0x19, 0x05, 0x8d, 0x37, 0x81, 0x1d, 0xa2, 0x19,
+    0x00, 0x92, 0x19, 0x00, 0x83, 0x19, 0x03, 0x84,
+    0x04, 0x00, 0xe0, 0x26, 0x04, 0x01, 0x80, 0x19,
+    0x00, 0x9f, 0x19, 0x99, 0x45, 0x85, 0x19, 0x99,
+    0x45, 0x8a, 0x19, 0x89, 0x3d, 0x80, 0x19, 0xac,
+    0x3d, 0x81, 0x19, 0x9e, 0x30, 0x02, 0x85, 0x30,
+    0x01, 0x85, 0x30, 0x01, 0x85, 0x30, 0x01, 0x82,
+    0x30, 0x02, 0x86, 0x19, 0x00, 0x86, 0x19, 0x09,
+    0x84, 0x19, 0x01, 0x8b, 0x49, 0x00, 0x99, 0x49,
+    0x00, 0x92, 0x49, 0x00, 0x81, 0x49, 0x00, 0x8e,
+    0x49, 0x01, 0x8d, 0x49, 0x21, 0xe0, 0x1a, 0x49,
+    0x04, 0x82, 0x19, 0x03, 0xac, 0x19, 0x02, 0x88,
+    0x19, 0xce, 0x2b, 0x00, 0x8c, 0x19, 0x02, 0x80,
+    0x2b, 0x2e, 0xac, 0x19, 0x80, 0x37, 0x60, 0x21,
+    0x9c, 0x4b, 0x02, 0xb0, 0x13, 0x0e, 0x80, 0x37,
+    0x9a, 0x19, 0x03, 0xa3, 0x69, 0x08, 0x82, 0x69,
+    0x9a, 0x29, 0x04, 0xaa, 0x6b, 0x04, 0x9d, 0x96,
+    0x00, 0x80, 0x96, 0xa3, 0x6c, 0x03, 0x8d, 0x6c,
+    0x29, 0xcf, 0x1e, 0xaf, 0x7e, 0x9d, 0x72, 0x01,
+    0x89, 0x72, 0x05, 0xa3, 0x71, 0x03, 0xa3, 0x71,
+    0x03, 0xa7, 0x24, 0x07, 0xb3, 0x14, 0x0a, 0x80,
+    0x14, 0x60, 0x2f, 0xe0, 0xd6, 0x48, 0x08, 0x95,
+    0x48, 0x09, 0x87, 0x48, 0x60, 0x37, 0x85, 0x1c,
+    0x01, 0x80, 0x1c, 0x00, 0xab, 0x1c, 0x00, 0x81,
+    0x1c, 0x02, 0x80, 0x1c, 0x01, 0x80, 0x1c, 0x95,
+    0x36, 0x00, 0x88, 0x36, 0x9f, 0x74, 0x9e, 0x5f,
+    0x07, 0x88, 0x5f, 0x2f, 0x92, 0x33, 0x00, 0x81,
+    0x33, 0x04, 0x84, 0x33, 0x9b, 0x77, 0x02, 0x80,
+    0x77, 0x99, 0x4c, 0x04, 0x80, 0x4c, 0x3f, 0x9f,
+    0x58, 0x97, 0x57, 0x03, 0x93, 0x57, 0x01, 0xad,
+    0x57, 0x83, 0x3f, 0x00, 0x81, 0x3f, 0x04, 0x87,
+    0x3f, 0x00, 0x82, 0x3f, 0x00, 0x9c, 0x3f, 0x01,
+    0x82, 0x3f, 0x03, 0x89, 0x3f, 0x06, 0x88, 0x3f,
+    0x06, 0x9f, 0x6e, 0x9f, 0x6a, 0x1f, 0xa6, 0x51,
+    0x03, 0x8b, 0x51, 0x08, 0xb5, 0x06, 0x02, 0x86,
+    0x06, 0x95, 0x39, 0x01, 0x87, 0x39, 0x92, 0x38,
+    0x04, 0x87, 0x38, 0x91, 0x78, 0x06, 0x83, 0x78,
+    0x0b, 0x86, 0x78, 0x4f, 0xc8, 0x6f, 0x36, 0xb2,
+    0x68, 0x0c, 0xb2, 0x68, 0x06, 0x85, 0x68, 0xa7,
+    0x31, 0x07, 0x89, 0x31, 0x60, 0xc5, 0x9e, 0x04,
+    0x00, 0xa9, 0x9a, 0x00, 0x82, 0x9a, 0x01, 0x81,
+    0x9a, 0x4d, 0xa7, 0x6d, 0x07, 0xa9, 0x82, 0x55,
+    0x9b, 0x18, 0x13, 0x96, 0x25, 0x08, 0xcd, 0x0e,
+    0x03, 0x9d, 0x0e, 0x0e, 0x80, 0x0e, 0xc1, 0x3b,
+    0x0a, 0x80, 0x3b, 0x01, 0x98, 0x83, 0x06, 0x89,
+    0x83, 0x05, 0xb4, 0x15, 0x00, 0x91, 0x15, 0x07,
+    0xa6, 0x4e, 0x08, 0xdf, 0x7d, 0x00, 0x93, 0x81,
+    0x0a, 0x91, 0x41, 0x00, 0xab, 0x41, 0x40, 0x86,
+    0x5d, 0x00, 0x80, 0x5d, 0x00, 0x83, 0x5d, 0x00,
+    0x8e, 0x5d, 0x00, 0x8a, 0x5d, 0x05, 0xba, 0x43,
+    0x04, 0x89, 0x43, 0x05, 0x83, 0x2a, 0x00, 0x87,
+    0x2a, 0x01, 0x81, 0x2a, 0x01, 0x95, 0x2a, 0x00,
+    0x86, 0x2a, 0x00, 0x81, 0x2a, 0x00, 0x84, 0x2a,
+    0x00, 0x80, 0x37, 0x88, 0x2a, 0x01, 0x81, 0x2a,
+    0x01, 0x82, 0x2a, 0x01, 0x80, 0x2a, 0x05, 0x80,
+    0x2a, 0x04, 0x86, 0x2a, 0x01, 0x86, 0x2a, 0x02,
+    0x84, 0x2a, 0x60, 0x2a, 0xdb, 0x62, 0x00, 0x84,
+    0x62, 0x1d, 0xc7, 0x95, 0x07, 0x89, 0x95, 0x60,
+    0x45, 0xb5, 0x7f, 0x01, 0xa5, 0x7f, 0x21, 0xc4,
+    0x5a, 0x0a, 0x89, 0x5a, 0x05, 0x8c, 0x5b, 0x12,
+    0xb8, 0x8d, 0x06, 0x89, 0x8d, 0x35, 0x9a, 0x02,
+    0x01, 0x8e, 0x02, 0x03, 0x8f, 0x02, 0x60, 0x5f,
+    0xbb, 0x21, 0x60, 0x03, 0xd2, 0x99, 0x0b, 0x80,
+    0x99, 0x86, 0x20, 0x01, 0x80, 0x20, 0x01, 0x87,
+    0x20, 0x00, 0x81, 0x20, 0x00, 0x9d, 0x20, 0x00,
+    0x81, 0x20, 0x01, 0x8b, 0x20, 0x08, 0x89, 0x20,
+    0x45, 0x87, 0x60, 0x01, 0xad, 0x60, 0x01, 0x8a,
+    0x60, 0x1a, 0xc7, 0x9c, 0x07, 0xd2, 0x84, 0x1c,
+    0xb8, 0x75, 0x60, 0xa6, 0x88, 0x0c, 0x00, 0xac,
+    0x0c, 0x00, 0x8d, 0x0c, 0x09, 0x9c, 0x0c, 0x02,
+    0x9f, 0x52, 0x01, 0x95, 0x52, 0x00, 0x8d, 0x52,
+    0x48, 0x86, 0x53, 0x00, 0x81, 0x53, 0x00, 0xab,
+    0x53, 0x02, 0x80, 0x53, 0x00, 0x81, 0x53, 0x00,
+    0x88, 0x53, 0x07, 0x89, 0x53, 0x05, 0x85, 0x2d,
+    0x00, 0x81, 0x2d, 0x00, 0xa4, 0x2d, 0x00, 0x81,
+    0x2d, 0x00, 0x85, 0x2d, 0x06, 0x89, 0x2d, 0x60,
+    0xd5, 0x98, 0x4d, 0x60, 0x56, 0x80, 0x4a, 0x0e,
+    0xb1, 0x8e, 0x0c, 0x80, 0x8e, 0xe3, 0x39, 0x1b,
+    0x60, 0x05, 0xe0, 0x0e, 0x1b, 0x00, 0x84, 0x1b,
+    0x0a, 0xe0, 0x63, 0x1b, 0x6a, 0x5b, 0xe3, 0xce,
+    0x23, 0x00, 0x88, 0x23, 0x6f, 0x66, 0xe1, 0xe6,
+    0x03, 0x70, 0x11, 0x58, 0xe1, 0xd8, 0x08, 0x06,
+    0x9e, 0x5c, 0x00, 0x89, 0x5c, 0x03, 0x81, 0x5c,
+    0x5f, 0x9d, 0x09, 0x01, 0x85, 0x09, 0x09, 0xc5,
+    0x73, 0x09, 0x89, 0x73, 0x00, 0x86, 0x73, 0x00,
+    0x94, 0x73, 0x04, 0x92, 0x73, 0x62, 0x4f, 0xda,
+    0x54, 0x60, 0x04, 0xca, 0x59, 0x03, 0xb8, 0x59,
+    0x06, 0x90, 0x59, 0x3f, 0x80, 0x8f, 0x80, 0x64,
+    0x81, 0x19, 0x80, 0x42, 0x0a, 0x81, 0x2f, 0x0d,
+    0xf0, 0x07, 0x97, 0x8f, 0x07, 0xe2, 0x9f, 0x8f,
+    0xe1, 0x75, 0x42, 0x29, 0x88, 0x8f, 0x70, 0x12,
+    0x96, 0x80, 0x3d, 0xe0, 0xbd, 0x35, 0x30, 0x82,
+    0x35, 0x10, 0x83, 0x3d, 0x07, 0xe1, 0x2b, 0x64,
+    0x68, 0xa3, 0xe0, 0x0a, 0x22, 0x04, 0x8c, 0x22,
+    0x02, 0x88, 0x22, 0x06, 0x89, 0x22, 0x01, 0x83,
+    0x22, 0x83, 0x19, 0x70, 0x02, 0xfb, 0xe0, 0x95,
+    0x19, 0x09, 0xa6, 0x19, 0x01, 0xbd, 0x19, 0x82,
+    0x37, 0x90, 0x19, 0x87, 0x37, 0x81, 0x19, 0x86,
+    0x37, 0x9d, 0x19, 0x83, 0x37, 0xba, 0x19, 0x16,
+    0xc5, 0x2b, 0x60, 0x39, 0x93, 0x19, 0x0b, 0xd6,
+    0x19, 0x08, 0x98, 0x19, 0x60, 0x26, 0xd4, 0x19,
+    0x00, 0xc6, 0x19, 0x00, 0x81, 0x19, 0x01, 0x80,
+    0x19, 0x01, 0x81, 0x19, 0x01, 0x83, 0x19, 0x00,
+    0x8b, 0x19, 0x00, 0x80, 0x19, 0x00, 0x86, 0x19,
+    0x00, 0xc0, 0x19, 0x00, 0x83, 0x19, 0x01, 0x87,
+    0x19, 0x00, 0x86, 0x19, 0x00, 0x9b, 0x19, 0x00,
+    0x83, 0x19, 0x00, 0x84, 0x19, 0x00, 0x80, 0x19,
+    0x02, 0x86, 0x19, 0x00, 0xe0, 0xf3, 0x19, 0x01,
+    0xe0, 0xc3, 0x19, 0x01, 0xb1, 0x19, 0xe2, 0x2b,
+    0x80, 0x0e, 0x84, 0x80, 0x00, 0x8e, 0x80, 0x64,
+    0xef, 0x86, 0x28, 0x00, 0x90, 0x28, 0x01, 0x86,
+    0x28, 0x00, 0x81, 0x28, 0x00, 0x84, 0x28, 0x60,
+    0x74, 0xac, 0x65, 0x02, 0x8d, 0x65, 0x01, 0x89,
+    0x65, 0x03, 0x81, 0x65, 0x61, 0x0f, 0xb9, 0x98,
+    0x04, 0x80, 0x98, 0x64, 0x9f, 0xe0, 0x64, 0x56,
+    0x01, 0x8f, 0x56, 0x28, 0xcb, 0x01, 0x03, 0x89,
+    0x01, 0x03, 0x81, 0x01, 0x62, 0xb0, 0xc3, 0x19,
+    0x4b, 0xbc, 0x19, 0x60, 0x61, 0x83, 0x04, 0x00,
+    0x9a, 0x04, 0x00, 0x81, 0x04, 0x00, 0x80, 0x04,
+    0x01, 0x80, 0x04, 0x00, 0x89, 0x04, 0x00, 0x83,
+    0x04, 0x00, 0x80, 0x04, 0x00, 0x80, 0x04, 0x05,
+    0x80, 0x04, 0x03, 0x80, 0x04, 0x00, 0x80, 0x04,
+    0x00, 0x80, 0x04, 0x00, 0x82, 0x04, 0x00, 0x81,
+    0x04, 0x00, 0x80, 0x04, 0x01, 0x80, 0x04, 0x00,
+    0x80, 0x04, 0x00, 0x80, 0x04, 0x00, 0x80, 0x04,
+    0x00, 0x80, 0x04, 0x00, 0x81, 0x04, 0x00, 0x80,
+    0x04, 0x01, 0x83, 0x04, 0x00, 0x86, 0x04, 0x00,
+    0x83, 0x04, 0x00, 0x83, 0x04, 0x00, 0x80, 0x04,
+    0x00, 0x89, 0x04, 0x00, 0x90, 0x04, 0x04, 0x82,
+    0x04, 0x00, 0x84, 0x04, 0x00, 0x90, 0x04, 0x33,
+    0x81, 0x04, 0x60, 0xad, 0xab, 0x19, 0x03, 0xe0,
+    0x03, 0x19, 0x0b, 0x8e, 0x19, 0x01, 0x8e, 0x19,
+    0x00, 0x8e, 0x19, 0x00, 0xa4, 0x19, 0x09, 0xe0,
+    0x4d, 0x19, 0x37, 0x99, 0x19, 0x80, 0x35, 0x81,
+    0x19, 0x0c, 0xab, 0x19, 0x03, 0x88, 0x19, 0x06,
+    0x81, 0x19, 0x0d, 0x85, 0x19, 0x60, 0x39, 0xe3,
+    0x77, 0x19, 0x07, 0x8c, 0x19, 0x02, 0x8c, 0x19,
+    0x02, 0xe0, 0x13, 0x19, 0x0b, 0xd8, 0x19, 0x06,
+    0x8b, 0x19, 0x13, 0x8b, 0x19, 0x03, 0xb7, 0x19,
+    0x07, 0x89, 0x19, 0x05, 0xa7, 0x19, 0x07, 0x9d,
+    0x19, 0x01, 0x81, 0x19, 0x4d, 0xe0, 0x18, 0x19,
+    0x00, 0xd1, 0x19, 0x00, 0xe0, 0x26, 0x19, 0x0b,
+    0x8d, 0x19, 0x01, 0x84, 0x19, 0x02, 0x82, 0x19,
+    0x04, 0x86, 0x19, 0x08, 0x98, 0x19, 0x06, 0x86,
+    0x19, 0x08, 0x82, 0x19, 0x0c, 0x86, 0x19, 0x28,
+    0xe0, 0x32, 0x19, 0x00, 0xb6, 0x19, 0x24, 0x89,
+    0x19, 0x63, 0xa5, 0xf0, 0x96, 0x7d, 0x2f, 0x21,
+    0xef, 0xd4, 0x2f, 0x0a, 0xe0, 0x7d, 0x2f, 0x01,
+    0xf0, 0x06, 0x21, 0x2f, 0x0d, 0xf0, 0x0c, 0xd0,
+    0x2f, 0x6b, 0xbe, 0xe1, 0xbd, 0x2f, 0x65, 0x81,
+    0xf0, 0x02, 0xea, 0x2f, 0x7a, 0xdc, 0x55, 0x80,
+    0x19, 0x1d, 0xdf, 0x19, 0x60, 0x1f, 0xe0, 0x8f,
+    0x37,
 };
 
-static const uint8_t unicode_script_ext_table[789] = {
-    0x82, 0xc1, 0x00, 0x00, 0x01, 0x29, 0x01, 0x00,
-    0x00, 0x01, 0x29, 0x1c, 0x00, 0x0c, 0x01, 0x42,
-    0x80, 0x92, 0x00, 0x00, 0x02, 0x1c, 0x68, 0x00,
-    0x02, 0x1c, 0x26, 0x01, 0x02, 0x1c, 0x42, 0x00,
-    0x02, 0x1c, 0x26, 0x80, 0x80, 0x00, 0x00, 0x02,
-    0x05, 0x25, 0x80, 0x01, 0x00, 0x00, 0x04, 0x04,
-    0x2f, 0x84, 0x8e, 0x0d, 0x00, 0x00, 0x04, 0x04,
-    0x2f, 0x84, 0x8e, 0x00, 0x03, 0x04, 0x84, 0x8e,
-    0x01, 0x00, 0x00, 0x04, 0x04, 0x2f, 0x84, 0x8e,
-    0x1f, 0x00, 0x00, 0x08, 0x01, 0x04, 0x4d, 0x4e,
-    0x75, 0x2f, 0x7f, 0x84, 0x09, 0x00, 0x0a, 0x02,
-    0x04, 0x84, 0x09, 0x00, 0x09, 0x02, 0x04, 0x8e,
-    0x05, 0x00, 0x00, 0x02, 0x04, 0x84, 0x62, 0x00,
-    0x00, 0x02, 0x04, 0x2f, 0x81, 0xfb, 0x00, 0x00,
-    0x0d, 0x0b, 0x1e, 0x28, 0x2a, 0x2c, 0x3a, 0x42,
-    0x4c, 0x6d, 0x7a, 0x8b, 0x8d, 0x92, 0x00, 0x0c,
-    0x0b, 0x1e, 0x28, 0x2a, 0x2c, 0x3a, 0x42, 0x4c,
-    0x6d, 0x8b, 0x8d, 0x92, 0x10, 0x00, 0x00, 0x14,
-    0x0b, 0x1e, 0x1f, 0x2b, 0x50, 0x28, 0x2a, 0x2c,
-    0x3a, 0x4b, 0x4c, 0x5d, 0x6d, 0x40, 0x7e, 0x83,
-    0x8a, 0x8b, 0x8d, 0x92, 0x00, 0x15, 0x0b, 0x1e,
-    0x1f, 0x2b, 0x50, 0x28, 0x2a, 0x2c, 0x3a, 0x44,
-    0x4b, 0x4c, 0x5d, 0x6d, 0x40, 0x7e, 0x83, 0x8a,
-    0x8b, 0x8d, 0x92, 0x09, 0x04, 0x1e, 0x1f, 0x39,
-    0x4b, 0x75, 0x00, 0x09, 0x03, 0x0b, 0x15, 0x83,
-    0x75, 0x00, 0x09, 0x02, 0x2c, 0x5a, 0x75, 0x00,
-    0x09, 0x02, 0x2a, 0x3f, 0x80, 0x75, 0x00, 0x0d,
-    0x02, 0x28, 0x8b, 0x80, 0x71, 0x00, 0x09, 0x02,
-    0x3a, 0x5d, 0x82, 0xcf, 0x00, 0x09, 0x03, 0x15,
-    0x5b, 0x87, 0x80, 0x30, 0x00, 0x00, 0x02, 0x25,
-    0x42, 0x85, 0xb8, 0x00, 0x01, 0x04, 0x11, 0x30,
-    0x86, 0x85, 0x80, 0x4a, 0x00, 0x01, 0x02, 0x58,
-    0x73, 0x00, 0x00, 0x00, 0x02, 0x58, 0x73, 0x84,
-    0x49, 0x00, 0x00, 0x04, 0x0b, 0x1e, 0x28, 0x3a,
-    0x00, 0x01, 0x1e, 0x00, 0x04, 0x0b, 0x1e, 0x28,
-    0x3a, 0x00, 0x02, 0x1e, 0x28, 0x00, 0x01, 0x1e,
-    0x01, 0x02, 0x0b, 0x1e, 0x00, 0x02, 0x1e, 0x7a,
-    0x00, 0x02, 0x0b, 0x1e, 0x00, 0x02, 0x1e, 0x7a,
-    0x00, 0x06, 0x1e, 0x3a, 0x4c, 0x6d, 0x8b, 0x8d,
-    0x00, 0x01, 0x1e, 0x01, 0x02, 0x1e, 0x7a, 0x01,
-    0x01, 0x1e, 0x00, 0x02, 0x1e, 0x7a, 0x00, 0x02,
-    0x0b, 0x1e, 0x06, 0x01, 0x1e, 0x00, 0x02, 0x1e,
-    0x5d, 0x00, 0x02, 0x0b, 0x1e, 0x01, 0x01, 0x1e,
-    0x00, 0x02, 0x0b, 0x1e, 0x03, 0x01, 0x1e, 0x00,
-    0x08, 0x0b, 0x1e, 0x28, 0x3a, 0x5d, 0x6d, 0x8d,
-    0x92, 0x00, 0x02, 0x1e, 0x28, 0x00, 0x03, 0x1e,
-    0x28, 0x3a, 0x01, 0x02, 0x0b, 0x1e, 0x00, 0x01,
-    0x0b, 0x01, 0x02, 0x1e, 0x28, 0x00, 0x01, 0x5d,
-    0x80, 0x44, 0x00, 0x01, 0x01, 0x29, 0x81, 0xec,
-    0x00, 0x00, 0x02, 0x42, 0x58, 0x80, 0x3f, 0x00,
-    0x00, 0x03, 0x1e, 0x28, 0x42, 0x8c, 0xd1, 0x00,
-    0x00, 0x02, 0x1c, 0x26, 0x81, 0x3c, 0x00, 0x01,
-    0x06, 0x0d, 0x2e, 0x2d, 0x33, 0x3b, 0x97, 0x00,
-    0x05, 0x0d, 0x2e, 0x2d, 0x33, 0x3b, 0x01, 0x00,
-    0x00, 0x01, 0x2d, 0x00, 0x00, 0x09, 0x06, 0x0d,
-    0x2e, 0x2d, 0x33, 0x3b, 0x97, 0x00, 0x00, 0x00,
-    0x05, 0x0d, 0x2e, 0x2d, 0x33, 0x3b, 0x07, 0x06,
-    0x0d, 0x2e, 0x2d, 0x33, 0x3b, 0x97, 0x03, 0x05,
-    0x0d, 0x2e, 0x2d, 0x33, 0x3b, 0x09, 0x00, 0x03,
-    0x02, 0x0d, 0x2d, 0x01, 0x00, 0x00, 0x05, 0x0d,
-    0x2e, 0x2d, 0x33, 0x3b, 0x04, 0x02, 0x33, 0x3b,
-    0x00, 0x00, 0x00, 0x05, 0x0d, 0x2e, 0x2d, 0x33,
-    0x3b, 0x03, 0x00, 0x01, 0x03, 0x2d, 0x33, 0x3b,
-    0x01, 0x01, 0x2d, 0x58, 0x00, 0x03, 0x02, 0x33,
-    0x3b, 0x02, 0x00, 0x00, 0x02, 0x33, 0x3b, 0x59,
-    0x00, 0x00, 0x06, 0x0d, 0x2e, 0x2d, 0x33, 0x3b,
-    0x97, 0x00, 0x02, 0x33, 0x3b, 0x80, 0x12, 0x00,
-    0x0f, 0x01, 0x2d, 0x1f, 0x00, 0x23, 0x01, 0x2d,
-    0x3b, 0x00, 0x27, 0x01, 0x2d, 0x37, 0x00, 0x30,
-    0x01, 0x2d, 0x0e, 0x00, 0x0b, 0x01, 0x2d, 0x32,
-    0x00, 0x00, 0x01, 0x2d, 0x57, 0x00, 0x18, 0x01,
-    0x2d, 0x09, 0x00, 0x04, 0x01, 0x2d, 0x5f, 0x00,
-    0x1e, 0x01, 0x2d, 0xc0, 0x31, 0xef, 0x00, 0x00,
-    0x02, 0x1c, 0x26, 0x81, 0x3f, 0x00, 0x02, 0x0e,
-    0x1e, 0x1f, 0x2a, 0x2c, 0x3f, 0x3a, 0x39, 0x4b,
-    0x4c, 0x57, 0x5d, 0x40, 0x8a, 0x92, 0x02, 0x0d,
-    0x1e, 0x1f, 0x2a, 0x2c, 0x3f, 0x3a, 0x39, 0x4b,
-    0x57, 0x5d, 0x40, 0x8a, 0x92, 0x03, 0x0b, 0x1e,
-    0x1f, 0x2a, 0x2c, 0x3f, 0x39, 0x4b, 0x57, 0x40,
-    0x8a, 0x92, 0x80, 0x36, 0x00, 0x00, 0x02, 0x0b,
-    0x1e, 0x00, 0x00, 0x00, 0x02, 0x1e, 0x8b, 0x39,
-    0x00, 0x00, 0x03, 0x3c, 0x42, 0x5b, 0x80, 0x1f,
-    0x00, 0x00, 0x02, 0x10, 0x38, 0xc0, 0x13, 0xa1,
-    0x00, 0x00, 0x02, 0x04, 0x8e, 0x09, 0x00, 0x00,
-    0x02, 0x04, 0x8e, 0x46, 0x00, 0x01, 0x05, 0x0d,
-    0x2e, 0x2d, 0x33, 0x3b, 0x80, 0x99, 0x00, 0x04,
-    0x06, 0x0d, 0x2e, 0x2d, 0x33, 0x3b, 0x97, 0x09,
-    0x00, 0x00, 0x02, 0x33, 0x3b, 0x2c, 0x00, 0x01,
-    0x02, 0x33, 0x3b, 0x80, 0xdf, 0x00, 0x02, 0x02,
-    0x1b, 0x46, 0x03, 0x00, 0x2c, 0x03, 0x1b, 0x45,
-    0x46, 0x02, 0x00, 0x08, 0x02, 0x1b, 0x46, 0x81,
-    0x1f, 0x00, 0x1b, 0x02, 0x04, 0x19, 0x8f, 0x84,
-    0x00, 0x00, 0x02, 0x28, 0x8b, 0x00, 0x00, 0x00,
-    0x02, 0x28, 0x8b, 0x36, 0x00, 0x01, 0x02, 0x28,
-    0x8b, 0x8c, 0x12, 0x00, 0x01, 0x02, 0x28, 0x8b,
-    0x00, 0x00, 0x00, 0x02, 0x28, 0x8b, 0xc0, 0x5c,
-    0x4b, 0x00, 0x03, 0x01, 0x20, 0x96, 0x3b, 0x00,
-    0x11, 0x01, 0x2d, 0x9e, 0x5d, 0x00, 0x01, 0x01,
-    0x2d, 0xce, 0xcd, 0x2d, 0x00,
+static const uint8_t unicode_script_ext_table[799] = {
+    0x82, 0xc1, 0x00, 0x00, 0x01, 0x2b, 0x01, 0x00,
+    0x00, 0x01, 0x2b, 0x1c, 0x00, 0x0c, 0x01, 0x45,
+    0x80, 0x92, 0x00, 0x00, 0x02, 0x1d, 0x6b, 0x00,
+    0x02, 0x1d, 0x28, 0x01, 0x02, 0x1d, 0x45, 0x00,
+    0x02, 0x1d, 0x28, 0x81, 0x03, 0x00, 0x00, 0x05,
+    0x04, 0x31, 0x87, 0x91, 0x9a, 0x0d, 0x00, 0x00,
+    0x05, 0x04, 0x31, 0x87, 0x91, 0x9a, 0x00, 0x03,
+    0x04, 0x87, 0x91, 0x01, 0x00, 0x00, 0x05, 0x04,
+    0x31, 0x87, 0x91, 0x9a, 0x1f, 0x00, 0x00, 0x08,
+    0x01, 0x04, 0x50, 0x51, 0x78, 0x31, 0x82, 0x87,
+    0x09, 0x00, 0x0a, 0x02, 0x04, 0x87, 0x09, 0x00,
+    0x09, 0x03, 0x04, 0x91, 0x9a, 0x05, 0x00, 0x00,
+    0x02, 0x04, 0x87, 0x62, 0x00, 0x00, 0x02, 0x04,
+    0x31, 0x81, 0xfb, 0x00, 0x00, 0x0d, 0x0b, 0x1f,
+    0x2a, 0x2c, 0x2e, 0x3c, 0x45, 0x4f, 0x70, 0x7d,
+    0x8e, 0x90, 0x95, 0x00, 0x0c, 0x0b, 0x1f, 0x2a,
+    0x2c, 0x2e, 0x3c, 0x45, 0x4f, 0x70, 0x8e, 0x90,
+    0x95, 0x10, 0x00, 0x00, 0x14, 0x0b, 0x1f, 0x21,
+    0x2d, 0x53, 0x2a, 0x2c, 0x2e, 0x3c, 0x4e, 0x4f,
+    0x60, 0x70, 0x43, 0x81, 0x86, 0x8d, 0x8e, 0x90,
+    0x95, 0x00, 0x15, 0x0b, 0x1f, 0x21, 0x2d, 0x53,
+    0x2a, 0x2c, 0x2e, 0x3c, 0x47, 0x4e, 0x4f, 0x60,
+    0x70, 0x43, 0x81, 0x86, 0x8d, 0x8e, 0x90, 0x95,
+    0x09, 0x04, 0x1f, 0x21, 0x3b, 0x4e, 0x75, 0x00,
+    0x09, 0x03, 0x0b, 0x15, 0x86, 0x75, 0x00, 0x09,
+    0x02, 0x2e, 0x5d, 0x75, 0x00, 0x09, 0x02, 0x2c,
+    0x41, 0x80, 0x75, 0x00, 0x0d, 0x02, 0x2a, 0x8e,
+    0x80, 0x71, 0x00, 0x09, 0x02, 0x3c, 0x60, 0x82,
+    0xcf, 0x00, 0x09, 0x03, 0x15, 0x5e, 0x8a, 0x80,
+    0x30, 0x00, 0x00, 0x02, 0x27, 0x45, 0x85, 0xb8,
+    0x00, 0x01, 0x04, 0x11, 0x32, 0x89, 0x88, 0x80,
+    0x4a, 0x00, 0x01, 0x02, 0x5b, 0x76, 0x00, 0x00,
+    0x00, 0x02, 0x5b, 0x76, 0x84, 0x49, 0x00, 0x00,
+    0x04, 0x0b, 0x1f, 0x2a, 0x3c, 0x00, 0x01, 0x1f,
+    0x00, 0x04, 0x0b, 0x1f, 0x2a, 0x3c, 0x00, 0x02,
+    0x1f, 0x2a, 0x00, 0x01, 0x1f, 0x01, 0x02, 0x0b,
+    0x1f, 0x00, 0x02, 0x1f, 0x7d, 0x00, 0x02, 0x0b,
+    0x1f, 0x00, 0x02, 0x1f, 0x7d, 0x00, 0x06, 0x1f,
+    0x3c, 0x4f, 0x70, 0x8e, 0x90, 0x00, 0x01, 0x1f,
+    0x01, 0x02, 0x1f, 0x7d, 0x01, 0x01, 0x1f, 0x00,
+    0x02, 0x1f, 0x7d, 0x00, 0x02, 0x0b, 0x1f, 0x06,
+    0x01, 0x1f, 0x00, 0x02, 0x1f, 0x60, 0x00, 0x02,
+    0x0b, 0x1f, 0x01, 0x01, 0x1f, 0x00, 0x02, 0x0b,
+    0x1f, 0x03, 0x01, 0x1f, 0x00, 0x08, 0x0b, 0x1f,
+    0x2a, 0x3c, 0x60, 0x70, 0x90, 0x95, 0x00, 0x02,
+    0x1f, 0x2a, 0x00, 0x03, 0x1f, 0x2a, 0x3c, 0x01,
+    0x02, 0x0b, 0x1f, 0x00, 0x01, 0x0b, 0x01, 0x02,
+    0x1f, 0x2a, 0x00, 0x01, 0x60, 0x80, 0x44, 0x00,
+    0x01, 0x01, 0x2b, 0x35, 0x00, 0x00, 0x02, 0x1d,
+    0x87, 0x81, 0xb5, 0x00, 0x00, 0x02, 0x45, 0x5b,
+    0x80, 0x3f, 0x00, 0x00, 0x03, 0x1f, 0x2a, 0x45,
+    0x8c, 0xd1, 0x00, 0x00, 0x02, 0x1d, 0x28, 0x81,
+    0x3c, 0x00, 0x01, 0x06, 0x0d, 0x30, 0x2f, 0x35,
+    0x3d, 0x9b, 0x00, 0x05, 0x0d, 0x30, 0x2f, 0x35,
+    0x3d, 0x01, 0x00, 0x00, 0x01, 0x2f, 0x00, 0x00,
+    0x09, 0x06, 0x0d, 0x30, 0x2f, 0x35, 0x3d, 0x9b,
+    0x00, 0x00, 0x00, 0x05, 0x0d, 0x30, 0x2f, 0x35,
+    0x3d, 0x07, 0x06, 0x0d, 0x30, 0x2f, 0x35, 0x3d,
+    0x9b, 0x03, 0x05, 0x0d, 0x30, 0x2f, 0x35, 0x3d,
+    0x09, 0x00, 0x03, 0x02, 0x0d, 0x2f, 0x01, 0x00,
+    0x00, 0x05, 0x0d, 0x30, 0x2f, 0x35, 0x3d, 0x04,
+    0x02, 0x35, 0x3d, 0x00, 0x00, 0x00, 0x05, 0x0d,
+    0x30, 0x2f, 0x35, 0x3d, 0x03, 0x00, 0x01, 0x03,
+    0x2f, 0x35, 0x3d, 0x01, 0x01, 0x2f, 0x58, 0x00,
+    0x03, 0x02, 0x35, 0x3d, 0x02, 0x00, 0x00, 0x02,
+    0x35, 0x3d, 0x59, 0x00, 0x00, 0x06, 0x0d, 0x30,
+    0x2f, 0x35, 0x3d, 0x9b, 0x00, 0x02, 0x35, 0x3d,
+    0x80, 0x12, 0x00, 0x0f, 0x01, 0x2f, 0x1f, 0x00,
+    0x23, 0x01, 0x2f, 0x3b, 0x00, 0x27, 0x01, 0x2f,
+    0x37, 0x00, 0x30, 0x01, 0x2f, 0x0e, 0x00, 0x0b,
+    0x01, 0x2f, 0x32, 0x00, 0x00, 0x01, 0x2f, 0x57,
+    0x00, 0x18, 0x01, 0x2f, 0x09, 0x00, 0x04, 0x01,
+    0x2f, 0x5f, 0x00, 0x1e, 0x01, 0x2f, 0xc0, 0x31,
+    0xef, 0x00, 0x00, 0x02, 0x1d, 0x28, 0x80, 0x0f,
+    0x00, 0x07, 0x02, 0x2f, 0x45, 0x80, 0xa7, 0x00,
+    0x02, 0x0e, 0x1f, 0x21, 0x2c, 0x2e, 0x41, 0x3c,
+    0x3b, 0x4e, 0x4f, 0x5a, 0x60, 0x43, 0x8d, 0x95,
+    0x02, 0x0d, 0x1f, 0x21, 0x2c, 0x2e, 0x41, 0x3c,
+    0x3b, 0x4e, 0x5a, 0x60, 0x43, 0x8d, 0x95, 0x03,
+    0x0b, 0x1f, 0x21, 0x2c, 0x2e, 0x41, 0x3b, 0x4e,
+    0x5a, 0x43, 0x8d, 0x95, 0x80, 0x36, 0x00, 0x00,
+    0x02, 0x0b, 0x1f, 0x00, 0x00, 0x00, 0x02, 0x1f,
+    0x8e, 0x39, 0x00, 0x00, 0x03, 0x3e, 0x45, 0x5e,
+    0x80, 0x1f, 0x00, 0x00, 0x02, 0x10, 0x3a, 0xc0,
+    0x13, 0xa1, 0x00, 0x00, 0x02, 0x04, 0x91, 0x09,
+    0x00, 0x00, 0x02, 0x04, 0x91, 0x46, 0x00, 0x01,
+    0x05, 0x0d, 0x30, 0x2f, 0x35, 0x3d, 0x80, 0x99,
+    0x00, 0x04, 0x06, 0x0d, 0x30, 0x2f, 0x35, 0x3d,
+    0x9b, 0x09, 0x00, 0x00, 0x02, 0x35, 0x3d, 0x2c,
+    0x00, 0x01, 0x02, 0x35, 0x3d, 0x80, 0xdf, 0x00,
+    0x02, 0x02, 0x1c, 0x49, 0x03, 0x00, 0x2c, 0x03,
+    0x1c, 0x48, 0x49, 0x02, 0x00, 0x08, 0x02, 0x1c,
+    0x49, 0x81, 0x1f, 0x00, 0x1b, 0x02, 0x04, 0x1a,
+    0x8f, 0x84, 0x00, 0x00, 0x02, 0x2a, 0x8e, 0x00,
+    0x00, 0x00, 0x02, 0x2a, 0x8e, 0x36, 0x00, 0x01,
+    0x02, 0x2a, 0x8e, 0x8c, 0x12, 0x00, 0x01, 0x02,
+    0x2a, 0x8e, 0x00, 0x00, 0x00, 0x02, 0x2a, 0x8e,
+    0xc0, 0x5c, 0x4b, 0x00, 0x03, 0x01, 0x22, 0x96,
+    0x3b, 0x00, 0x11, 0x01, 0x2f, 0x9e, 0x5d, 0x00,
+    0x01, 0x01, 0x2f, 0xce, 0xcd, 0x2d, 0x00,
 };
 
 static const uint8_t unicode_prop_Hyphen_table[28] = {
@@ -3501,7 +3544,7 @@ static const uint8_t unicode_prop_Other_Math_table[200] = {
     0x80, 0x89, 0x80, 0x90, 0x22, 0x04, 0x80, 0x90,
 };
 
-static const uint8_t unicode_prop_Other_Alphabetic_table[396] = {
+static const uint8_t unicode_prop_Other_Alphabetic_table[411] = {
     0x43, 0x44, 0x80, 0x42, 0x69, 0x8d, 0x00, 0x01,
     0x01, 0x00, 0xc7, 0x8a, 0xaf, 0x8c, 0x06, 0x8f,
     0x80, 0xe4, 0x33, 0x19, 0x0b, 0x80, 0xa2, 0x80,
@@ -3517,7 +3560,7 @@ static const uint8_t unicode_prop_Other_Alphabetic_table[396] = {
     0x30, 0x10, 0x17, 0x81, 0x8a, 0x81, 0x9c, 0x82,
     0xb9, 0x30, 0x10, 0x17, 0x81, 0x8a, 0x81, 0x9b,
     0x83, 0xb9, 0x30, 0x10, 0x82, 0x89, 0x80, 0x89,
-    0x81, 0x9d, 0x81, 0xca, 0x28, 0x00, 0x87, 0x91,
+    0x81, 0x9c, 0x82, 0xca, 0x28, 0x00, 0x87, 0x91,
     0x81, 0xbc, 0x01, 0x86, 0x91, 0x80, 0xe2, 0x01,
     0x28, 0x81, 0x8f, 0x80, 0x40, 0xa2, 0x90, 0x8a,
     0x8a, 0x80, 0xa3, 0xed, 0x8b, 0x00, 0x0b, 0x96,
@@ -3525,33 +3568,35 @@ static const uint8_t unicode_prop_Other_Alphabetic_table[396] = {
     0x89, 0x83, 0x46, 0x73, 0x81, 0x9d, 0x81, 0x9d,
     0x81, 0x9d, 0x81, 0xc1, 0x92, 0x40, 0xbb, 0x81,
     0xa1, 0x80, 0xf5, 0x8b, 0x83, 0x88, 0x40, 0xdd,
-    0x84, 0xb8, 0x89, 0x81, 0x93, 0x40, 0x8a, 0x84,
-    0xaf, 0x8e, 0xbb, 0x82, 0x9d, 0x88, 0x09, 0xb8,
-    0x8a, 0xb1, 0x92, 0x41, 0xaf, 0x8d, 0x46, 0xc0,
-    0xb3, 0x48, 0xf5, 0x9f, 0x60, 0x78, 0x73, 0x87,
-    0xa1, 0x81, 0x41, 0x61, 0x07, 0x80, 0x96, 0x84,
-    0xd7, 0x81, 0xb1, 0x8f, 0x00, 0xb8, 0x80, 0xa5,
-    0x84, 0x9b, 0x8b, 0xac, 0x83, 0xaf, 0x8b, 0xa4,
-    0x80, 0xc2, 0x8d, 0x8b, 0x07, 0x81, 0xac, 0x82,
-    0xb1, 0x00, 0x11, 0x0c, 0x80, 0xab, 0x24, 0x80,
-    0x40, 0xec, 0x87, 0x60, 0x4f, 0x32, 0x80, 0x48,
-    0x56, 0x84, 0x46, 0x85, 0x10, 0x0c, 0x83, 0x43,
-    0x13, 0x83, 0x42, 0xd7, 0x82, 0xb4, 0x8d, 0xbb,
-    0x80, 0xac, 0x88, 0xc6, 0x82, 0xa3, 0x8b, 0x91,
-    0x81, 0xb8, 0x82, 0xaf, 0x8c, 0xeb, 0x88, 0x08,
-    0x28, 0x40, 0x9f, 0x89, 0x96, 0x83, 0xb9, 0x31,
-    0x09, 0x81, 0x89, 0x80, 0x89, 0x81, 0x40, 0xd0,
-    0x8c, 0x02, 0xe9, 0x91, 0x40, 0xec, 0x31, 0x86,
-    0x9c, 0x81, 0xd1, 0x8e, 0x00, 0xe9, 0x8a, 0xe6,
-    0x8d, 0x41, 0x00, 0x8c, 0x41, 0x97, 0x31, 0x2b,
-    0x80, 0x9b, 0x89, 0xa9, 0x20, 0x83, 0x91, 0x8a,
-    0xad, 0x8d, 0x41, 0x96, 0x38, 0x86, 0xd2, 0x95,
-    0x80, 0x8d, 0xf9, 0x2a, 0x00, 0x08, 0x10, 0x02,
-    0x80, 0xc1, 0x20, 0x08, 0x83, 0x41, 0x5b, 0x83,
-    0x60, 0x50, 0x57, 0x00, 0xb6, 0x33, 0x60, 0x4d,
-    0x0a, 0x80, 0x60, 0x23, 0x60, 0x30, 0x90, 0x0e,
-    0x01, 0x04, 0x49, 0x1b, 0x80, 0x47, 0xe7, 0x99,
-    0x85, 0x99, 0x85, 0x99,
+    0x84, 0xb8, 0x89, 0x81, 0x93, 0xc9, 0x81, 0xbe,
+    0x84, 0xaf, 0x8e, 0xbb, 0x82, 0x9d, 0x88, 0x09,
+    0xb8, 0x8a, 0xb1, 0x92, 0x41, 0xaf, 0x8d, 0x46,
+    0xc0, 0xb3, 0x48, 0xf5, 0x9f, 0x60, 0x78, 0x73,
+    0x87, 0xa1, 0x81, 0x41, 0x61, 0x07, 0x80, 0x96,
+    0x84, 0xd7, 0x81, 0xb1, 0x8f, 0x00, 0xb8, 0x80,
+    0xa5, 0x84, 0x9b, 0x8b, 0xac, 0x83, 0xaf, 0x8b,
+    0xa4, 0x80, 0xc2, 0x8d, 0x8b, 0x07, 0x81, 0xac,
+    0x82, 0xb1, 0x00, 0x11, 0x0c, 0x80, 0xab, 0x24,
+    0x80, 0x40, 0xec, 0x87, 0x60, 0x4f, 0x32, 0x80,
+    0x48, 0x56, 0x84, 0x46, 0x85, 0x10, 0x0c, 0x83,
+    0x43, 0x13, 0x83, 0x41, 0x82, 0x81, 0x41, 0x52,
+    0x82, 0xb4, 0x8d, 0xbb, 0x80, 0xac, 0x88, 0xc6,
+    0x82, 0xa3, 0x8b, 0x91, 0x81, 0xb8, 0x82, 0xaf,
+    0x8c, 0x8d, 0x81, 0xdb, 0x88, 0x08, 0x28, 0x40,
+    0x9f, 0x89, 0x96, 0x83, 0xb9, 0x31, 0x09, 0x81,
+    0x89, 0x80, 0x89, 0x81, 0x40, 0xd0, 0x8c, 0x02,
+    0xe9, 0x91, 0x40, 0xec, 0x31, 0x86, 0x9c, 0x81,
+    0xd1, 0x8e, 0x00, 0xe9, 0x8a, 0xe6, 0x8d, 0x41,
+    0x00, 0x8c, 0x40, 0xf6, 0x28, 0x09, 0x0a, 0x00,
+    0x80, 0x40, 0x8d, 0x31, 0x2b, 0x80, 0x9b, 0x89,
+    0xa9, 0x20, 0x83, 0x91, 0x8a, 0xad, 0x8d, 0x41,
+    0x96, 0x38, 0x86, 0xd2, 0x95, 0x80, 0x8d, 0xf9,
+    0x2a, 0x00, 0x08, 0x10, 0x02, 0x80, 0xc1, 0x20,
+    0x08, 0x83, 0x41, 0x5b, 0x83, 0x60, 0x50, 0x57,
+    0x00, 0xb6, 0x33, 0xdc, 0x81, 0x60, 0x4c, 0xab,
+    0x80, 0x60, 0x23, 0x60, 0x30, 0x90, 0x0e, 0x01,
+    0x04, 0x49, 0x1b, 0x80, 0x47, 0xe7, 0x99, 0x85,
+    0x99, 0x85, 0x99,
 };
 
 static const uint8_t unicode_prop_Other_Lowercase_table[51] = {
@@ -3569,15 +3614,16 @@ static const uint8_t unicode_prop_Other_Uppercase_table[15] = {
     0xcc, 0x5f, 0x99, 0x85, 0x99, 0x85, 0x99,
 };
 
-static const uint8_t unicode_prop_Other_Grapheme_Extend_table[62] = {
+static const uint8_t unicode_prop_Other_Grapheme_Extend_table[65] = {
     0x49, 0xbd, 0x80, 0x97, 0x80, 0x41, 0x65, 0x80,
     0x97, 0x80, 0xe5, 0x80, 0x97, 0x80, 0x40, 0xe9,
     0x80, 0x91, 0x81, 0xe6, 0x80, 0x97, 0x80, 0xf6,
     0x80, 0x8e, 0x80, 0x4d, 0x54, 0x80, 0x44, 0xd5,
     0x80, 0x50, 0x20, 0x81, 0x60, 0xcf, 0x6d, 0x81,
     0x53, 0x9d, 0x80, 0x97, 0x80, 0x41, 0x57, 0x80,
-    0x8b, 0x80, 0x40, 0xf0, 0x80, 0x60, 0xbb, 0xb4,
-    0x07, 0x84, 0x6c, 0x2e, 0xac, 0xdf,
+    0x8b, 0x80, 0x40, 0xf0, 0x80, 0x43, 0x7f, 0x80,
+    0x60, 0xb8, 0x33, 0x07, 0x84, 0x6c, 0x2e, 0xac,
+    0xdf,
 };
 
 static const uint8_t unicode_prop_Other_Default_Ignorable_Code_Point_table[32] = {
@@ -3630,7 +3676,7 @@ static const uint8_t unicode_prop_Changes_When_Casefolded1_table[33] = {
     0x84,
 };
 
-static const uint8_t unicode_prop_Changes_When_NFKC_Casefolded1_table[436] = {
+static const uint8_t unicode_prop_Changes_When_NFKC_Casefolded1_table[441] = {
     0x40, 0x9f, 0x06, 0x00, 0x01, 0x00, 0x01, 0x12,
     0x10, 0x82, 0x9f, 0x80, 0xcf, 0x01, 0x80, 0x8b,
     0x07, 0x80, 0xfb, 0x01, 0x01, 0x80, 0xa5, 0x80,
@@ -3663,29 +3709,30 @@ static const uint8_t unicode_prop_Changes_When_NFKC_Casefolded1_table[436] = {
     0x80, 0xde, 0x80, 0xb0, 0xdd, 0x82, 0x8d, 0xdf,
     0x9e, 0x80, 0xa7, 0x87, 0xae, 0x80, 0x41, 0x7f,
     0x60, 0x72, 0x9b, 0x81, 0x40, 0xd1, 0x80, 0x40,
-    0x86, 0x81, 0x43, 0x61, 0x83, 0x60, 0x4d, 0x9f,
-    0x41, 0x0d, 0x08, 0x00, 0x81, 0x89, 0x00, 0x00,
-    0x09, 0x82, 0xc3, 0x81, 0xe9, 0xa5, 0x86, 0x8b,
-    0x24, 0x00, 0x97, 0x04, 0x00, 0x01, 0x01, 0x80,
-    0xeb, 0xa0, 0x41, 0x6a, 0x91, 0xbf, 0x81, 0xb5,
-    0xa7, 0x8c, 0x82, 0x99, 0x95, 0x94, 0x81, 0x8b,
-    0x80, 0x92, 0x03, 0x1a, 0x00, 0x80, 0x40, 0x86,
-    0x08, 0x80, 0x9f, 0x99, 0x40, 0x83, 0x15, 0x0d,
-    0x0d, 0x0a, 0x16, 0x06, 0x80, 0x88, 0x60, 0xbc,
-    0xa6, 0x83, 0x54, 0xb9, 0x86, 0x8d, 0x87, 0xbf,
-    0x85, 0x42, 0x3e, 0xd4, 0x80, 0xc6, 0x01, 0x08,
-    0x09, 0x0b, 0x80, 0x8b, 0x00, 0x06, 0x80, 0xc0,
-    0x03, 0x0f, 0x06, 0x80, 0x9b, 0x03, 0x04, 0x00,
-    0x16, 0x80, 0x41, 0x53, 0x81, 0x41, 0x23, 0x81,
-    0xb1, 0x55, 0xff, 0x18, 0x9a, 0x01, 0x00, 0x08,
-    0x80, 0x89, 0x03, 0x00, 0x00, 0x28, 0x18, 0x00,
-    0x00, 0x02, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00,
-    0x00, 0x01, 0x00, 0x0b, 0x06, 0x03, 0x03, 0x00,
-    0x80, 0x89, 0x80, 0x90, 0x22, 0x04, 0x80, 0x90,
-    0x42, 0x43, 0x8a, 0x84, 0x9e, 0x80, 0x9f, 0x99,
-    0x82, 0xa2, 0x80, 0xee, 0x82, 0x8c, 0xab, 0x83,
-    0x88, 0x31, 0x61, 0x05, 0xad, 0x42, 0x1d, 0x6b,
-    0x05, 0xe1, 0x4f, 0xff,
+    0x86, 0x81, 0x43, 0x61, 0x83, 0x88, 0x80, 0x60,
+    0x4d, 0x95, 0x41, 0x0d, 0x08, 0x00, 0x81, 0x89,
+    0x00, 0x00, 0x09, 0x82, 0xc3, 0x81, 0xe9, 0xa5,
+    0x86, 0x8b, 0x24, 0x00, 0x97, 0x04, 0x00, 0x01,
+    0x01, 0x80, 0xeb, 0xa0, 0x41, 0x6a, 0x91, 0xbf,
+    0x81, 0xb5, 0xa7, 0x8c, 0x82, 0x99, 0x95, 0x94,
+    0x81, 0x8b, 0x80, 0x92, 0x03, 0x1a, 0x00, 0x80,
+    0x40, 0x86, 0x08, 0x80, 0x9f, 0x99, 0x40, 0x83,
+    0x15, 0x0d, 0x0d, 0x0a, 0x16, 0x06, 0x80, 0x88,
+    0x60, 0xbc, 0xa6, 0x83, 0x54, 0xb9, 0x86, 0x8d,
+    0x87, 0xbf, 0x85, 0x42, 0x3e, 0xd4, 0x80, 0xc6,
+    0x01, 0x08, 0x09, 0x0b, 0x80, 0x8b, 0x00, 0x06,
+    0x80, 0xc0, 0x03, 0x0f, 0x06, 0x80, 0x9b, 0x03,
+    0x04, 0x00, 0x16, 0x80, 0x41, 0x53, 0x81, 0x41,
+    0x23, 0x81, 0xb1, 0x55, 0xff, 0x18, 0x9a, 0x01,
+    0x00, 0x08, 0x80, 0x89, 0x03, 0x00, 0x00, 0x28,
+    0x18, 0x00, 0x00, 0x02, 0x01, 0x00, 0x08, 0x00,
+    0x00, 0x00, 0x00, 0x01, 0x00, 0x0b, 0x06, 0x03,
+    0x03, 0x00, 0x80, 0x89, 0x80, 0x90, 0x22, 0x04,
+    0x80, 0x90, 0x42, 0x43, 0x8a, 0x84, 0x9e, 0x80,
+    0x9f, 0x99, 0x82, 0xa2, 0x80, 0xee, 0x82, 0x8c,
+    0xab, 0x83, 0x88, 0x31, 0x49, 0x9d, 0x89, 0x60,
+    0xfc, 0x05, 0x42, 0x1d, 0x6b, 0x05, 0xe1, 0x4f,
+    0xff,
 };
 
 static const uint8_t unicode_prop_ASCII_Hex_Digit_table[5] = {
@@ -3697,14 +3744,14 @@ static const uint8_t unicode_prop_Bidi_Control_table[10] = {
     0xb6, 0x83,
 };
 
-static const uint8_t unicode_prop_Dash_table[50] = {
+static const uint8_t unicode_prop_Dash_table[53] = {
     0xac, 0x80, 0x45, 0x5b, 0x80, 0xb2, 0x80, 0x4e,
     0x40, 0x80, 0x44, 0x04, 0x80, 0x48, 0x08, 0x85,
     0xbc, 0x80, 0xa6, 0x80, 0x8e, 0x80, 0x41, 0x85,
     0x80, 0x4c, 0x03, 0x01, 0x80, 0x9e, 0x0b, 0x80,
     0x41, 0xda, 0x80, 0x92, 0x80, 0xee, 0x80, 0x60,
     0xcd, 0x8f, 0x81, 0xa4, 0x80, 0x89, 0x80, 0x40,
-    0xa8, 0x80,
+    0xa8, 0x80, 0x4f, 0x9e, 0x80,
 };
 
 static const uint8_t unicode_prop_Deprecated_table[23] = {
@@ -3713,7 +3760,7 @@ static const uint8_t unicode_prop_Deprecated_table[23] = {
     0x42, 0xb8, 0x81, 0x6d, 0xdc, 0xd5, 0x80,
 };
 
-static const uint8_t unicode_prop_Diacritic_table[350] = {
+static const uint8_t unicode_prop_Diacritic_table[358] = {
     0xdd, 0x00, 0x80, 0xc6, 0x05, 0x03, 0x01, 0x81,
     0x41, 0xf6, 0x40, 0x9e, 0x07, 0x25, 0x90, 0x0b,
     0x80, 0x88, 0x81, 0x40, 0xfc, 0x84, 0x40, 0xd0,
@@ -3723,55 +3770,57 @@ static const uint8_t unicode_prop_Diacritic_table[350] = {
     0x81, 0x40, 0xc8, 0x9b, 0xbc, 0x80, 0x8f, 0x02,
     0x83, 0x9b, 0x80, 0xc9, 0x80, 0x8f, 0x80, 0xed,
     0x80, 0x8f, 0x80, 0xed, 0x80, 0x8f, 0x80, 0xae,
-    0x82, 0xbb, 0x80, 0x8f, 0x80, 0xfe, 0x80, 0xfe,
-    0x80, 0xed, 0x80, 0x8f, 0x80, 0xec, 0x81, 0x8f,
-    0x80, 0xfb, 0x80, 0xfb, 0x28, 0x80, 0xea, 0x80,
-    0x8c, 0x84, 0xca, 0x81, 0x9a, 0x00, 0x00, 0x03,
-    0x81, 0xc1, 0x10, 0x81, 0xbd, 0x80, 0xef, 0x00,
-    0x81, 0xa7, 0x0b, 0x84, 0x98, 0x30, 0x80, 0x89,
-    0x81, 0x42, 0xc0, 0x82, 0x44, 0x68, 0x8a, 0x88,
-    0x80, 0x41, 0x5a, 0x82, 0x41, 0x38, 0x39, 0x80,
-    0xaf, 0x8d, 0xf5, 0x80, 0x8e, 0x80, 0xa5, 0x88,
-    0xb5, 0x81, 0x40, 0x89, 0x81, 0xbf, 0x85, 0xd1,
-    0x98, 0x18, 0x28, 0x0a, 0xb1, 0xbe, 0xd8, 0x8b,
-    0xa4, 0x22, 0x82, 0x41, 0xbc, 0x00, 0x82, 0x8a,
-    0x82, 0x8c, 0x82, 0x8c, 0x82, 0x8c, 0x81, 0x4c,
-    0xef, 0x82, 0x41, 0x3c, 0x80, 0x41, 0xf9, 0x85,
-    0xe8, 0x83, 0xde, 0x80, 0x60, 0x75, 0x71, 0x80,
-    0x8b, 0x08, 0x80, 0x9b, 0x81, 0xd1, 0x81, 0x8d,
-    0xa1, 0xe5, 0x82, 0xec, 0x81, 0x40, 0xc9, 0x80,
-    0x9a, 0x91, 0xb8, 0x83, 0xa3, 0x80, 0xde, 0x80,
-    0x8b, 0x80, 0xa3, 0x80, 0x40, 0x94, 0x82, 0xc0,
-    0x83, 0xb2, 0x80, 0xe3, 0x84, 0x40, 0x8b, 0x81,
-    0x60, 0x4f, 0x2f, 0x80, 0x43, 0x00, 0x8f, 0x41,
-    0x0d, 0x00, 0x80, 0xae, 0x80, 0xac, 0x81, 0xc2,
-    0x80, 0x42, 0xfb, 0x80, 0x48, 0x03, 0x81, 0x42,
-    0x3a, 0x85, 0x42, 0x1d, 0x8a, 0x41, 0x67, 0x81,
-    0xf7, 0x81, 0xbd, 0x80, 0xcb, 0x80, 0x88, 0x82,
-    0xe7, 0x81, 0x40, 0xb1, 0x81, 0xd0, 0x80, 0x8f,
-    0x80, 0x97, 0x32, 0x84, 0x40, 0xcc, 0x02, 0x80,
-    0xfa, 0x81, 0x40, 0xfa, 0x81, 0xfd, 0x80, 0xf5,
-    0x81, 0xf2, 0x80, 0x41, 0x0c, 0x81, 0x41, 0xa4,
-    0x80, 0xd2, 0x80, 0x91, 0x80, 0xd0, 0x80, 0x41,
-    0xa4, 0x80, 0x41, 0x01, 0x00, 0x81, 0xd0, 0x80,
-    0x60, 0x4d, 0x57, 0x84, 0xba, 0x86, 0x44, 0x57,
-    0x90, 0x60, 0x61, 0xc6, 0x12, 0x2f, 0x39, 0x86,
+    0x82, 0xbb, 0x80, 0x8f, 0x06, 0x80, 0xf6, 0x80,
+    0xfe, 0x80, 0xed, 0x80, 0x8f, 0x80, 0xec, 0x81,
+    0x8f, 0x80, 0xfb, 0x80, 0xfb, 0x28, 0x80, 0xea,
+    0x80, 0x8c, 0x84, 0xca, 0x81, 0x9a, 0x00, 0x00,
+    0x03, 0x81, 0xc1, 0x10, 0x81, 0xbd, 0x80, 0xef,
+    0x00, 0x81, 0xa7, 0x0b, 0x84, 0x98, 0x30, 0x80,
+    0x89, 0x81, 0x42, 0xc0, 0x82, 0x44, 0x68, 0x8a,
+    0x88, 0x80, 0x41, 0x5a, 0x82, 0x41, 0x38, 0x39,
+    0x80, 0xaf, 0x8d, 0xf5, 0x80, 0x8e, 0x80, 0xa5,
+    0x88, 0xb5, 0x81, 0x40, 0x89, 0x81, 0xbf, 0x85,
+    0xd1, 0x98, 0x18, 0x28, 0x0a, 0xb1, 0xbe, 0xd8,
+    0x8b, 0xa4, 0x22, 0x82, 0x41, 0xbc, 0x00, 0x82,
+    0x8a, 0x82, 0x8c, 0x82, 0x8c, 0x82, 0x8c, 0x81,
+    0x4c, 0xef, 0x82, 0x41, 0x3c, 0x80, 0x41, 0xf9,
+    0x85, 0xe8, 0x83, 0xde, 0x80, 0x60, 0x75, 0x71,
+    0x80, 0x8b, 0x08, 0x80, 0x9b, 0x81, 0xd1, 0x81,
+    0x8d, 0xa1, 0xe5, 0x82, 0xec, 0x81, 0x40, 0xc9,
+    0x80, 0x9a, 0x91, 0xb8, 0x83, 0xa3, 0x80, 0xde,
+    0x80, 0x8b, 0x80, 0xa3, 0x80, 0x40, 0x94, 0x82,
+    0xc0, 0x83, 0xb2, 0x80, 0xe3, 0x84, 0x88, 0x82,
+    0xff, 0x81, 0x60, 0x4f, 0x2f, 0x80, 0x43, 0x00,
+    0x8f, 0x41, 0x0d, 0x00, 0x80, 0xae, 0x80, 0xac,
+    0x81, 0xc2, 0x80, 0x42, 0xfb, 0x80, 0x48, 0x03,
+    0x81, 0x42, 0x3a, 0x85, 0x42, 0x1d, 0x8a, 0x41,
+    0x67, 0x81, 0xf7, 0x81, 0xbd, 0x80, 0xcb, 0x80,
+    0x88, 0x82, 0xe7, 0x81, 0x40, 0xb1, 0x81, 0xd0,
+    0x80, 0x8f, 0x80, 0x97, 0x32, 0x84, 0x40, 0xcc,
+    0x02, 0x80, 0xfa, 0x81, 0x40, 0xfa, 0x81, 0xfd,
+    0x80, 0xf5, 0x81, 0xf2, 0x80, 0x41, 0x0c, 0x81,
+    0x41, 0x01, 0x0b, 0x80, 0x40, 0x9b, 0x80, 0xd2,
+    0x80, 0x91, 0x80, 0xd0, 0x80, 0x41, 0xa4, 0x80,
+    0x41, 0x01, 0x00, 0x81, 0xd0, 0x80, 0x60, 0x4d,
+    0x57, 0x84, 0xba, 0x86, 0x44, 0x57, 0x90, 0xcf,
+    0x81, 0x60, 0x61, 0x74, 0x12, 0x2f, 0x39, 0x86,
     0x9d, 0x83, 0x4f, 0x81, 0x86, 0x41, 0xb4, 0x83,
     0x45, 0xdf, 0x86, 0xec, 0x10, 0x82,
 };
 
-static const uint8_t unicode_prop_Extender_table[86] = {
+static const uint8_t unicode_prop_Extender_table[89] = {
     0x40, 0xb6, 0x80, 0x42, 0x17, 0x81, 0x43, 0x6d,
-    0x80, 0x41, 0xb8, 0x80, 0x46, 0x4a, 0x80, 0xfe,
-    0x80, 0x49, 0x42, 0x80, 0xb7, 0x80, 0x42, 0x62,
-    0x80, 0x41, 0x8d, 0x80, 0xc3, 0x80, 0x53, 0x88,
-    0x80, 0xaa, 0x84, 0xe6, 0x81, 0xdc, 0x82, 0x60,
-    0x6f, 0x15, 0x80, 0x45, 0xf5, 0x80, 0x43, 0xc1,
-    0x80, 0x95, 0x80, 0x40, 0x88, 0x80, 0xeb, 0x80,
-    0x94, 0x81, 0x60, 0x54, 0x7a, 0x80, 0x53, 0xeb,
-    0x80, 0x42, 0x67, 0x82, 0x44, 0xce, 0x80, 0x60,
-    0x50, 0xa8, 0x81, 0x44, 0x9b, 0x08, 0x80, 0x60,
-    0x71, 0x57, 0x81, 0x48, 0x05, 0x82,
+    0x80, 0x41, 0xb8, 0x80, 0x43, 0x59, 0x80, 0x42,
+    0xef, 0x80, 0xfe, 0x80, 0x49, 0x42, 0x80, 0xb7,
+    0x80, 0x42, 0x62, 0x80, 0x41, 0x8d, 0x80, 0xc3,
+    0x80, 0x53, 0x88, 0x80, 0xaa, 0x84, 0xe6, 0x81,
+    0xdc, 0x82, 0x60, 0x6f, 0x15, 0x80, 0x45, 0xf5,
+    0x80, 0x43, 0xc1, 0x80, 0x95, 0x80, 0x40, 0x88,
+    0x80, 0xeb, 0x80, 0x94, 0x81, 0x60, 0x54, 0x7a,
+    0x80, 0x53, 0xeb, 0x80, 0x42, 0x67, 0x82, 0x44,
+    0xce, 0x80, 0x60, 0x50, 0xa8, 0x81, 0x44, 0x9b,
+    0x08, 0x80, 0x60, 0x71, 0x57, 0x81, 0x48, 0x05,
+    0x82,
 };
 
 static const uint8_t unicode_prop_Hex_Digit_table[12] = {
@@ -3787,15 +3836,16 @@ static const uint8_t unicode_prop_IDS_Trinary_Operator_table[4] = {
     0x60, 0x2f, 0xf1, 0x81,
 };
 
-static const uint8_t unicode_prop_Ideographic_table[58] = {
+static const uint8_t unicode_prop_Ideographic_table[66] = {
     0x60, 0x30, 0x05, 0x81, 0x98, 0x88, 0x8d, 0x82,
-    0x43, 0xc4, 0x59, 0xb5, 0xc9, 0x60, 0x51, 0xef,
-    0x60, 0x59, 0x0f, 0x41, 0x6d, 0x81, 0xe9, 0x60,
-    0x75, 0x25, 0x57, 0xf7, 0x87, 0x42, 0xf2, 0x60,
-    0x26, 0x7c, 0x41, 0x8b, 0x60, 0x4d, 0x03, 0x60,
-    0xa6, 0xd6, 0xa8, 0x50, 0x34, 0x8a, 0x40, 0xdd,
-    0x81, 0x56, 0x81, 0x8d, 0x5d, 0x30, 0x4c, 0x1e,
-    0x42, 0x1d,
+    0x43, 0xc4, 0x59, 0xbf, 0xbf, 0x60, 0x51, 0xfc,
+    0x60, 0x59, 0x02, 0x41, 0x6d, 0x81, 0xe9, 0x60,
+    0x75, 0x09, 0x80, 0x9a, 0x57, 0xf7, 0x87, 0x44,
+    0xd5, 0xa9, 0x88, 0x60, 0x24, 0x66, 0x41, 0x8b,
+    0x60, 0x4d, 0x03, 0x60, 0xa6, 0xdd, 0xa1, 0x50,
+    0x34, 0x8a, 0x40, 0xdd, 0x81, 0x56, 0x81, 0x8d,
+    0x5d, 0x30, 0x4c, 0x1e, 0x42, 0x1d, 0x45, 0xe1,
+    0x53, 0x4a,
 };
 
 static const uint8_t unicode_prop_Join_Control_table[4] = {
@@ -3851,7 +3901,7 @@ static const uint8_t unicode_prop_Regional_Indicator_table[4] = {
     0x61, 0xf1, 0xe5, 0x99,
 };
 
-static const uint8_t unicode_prop_Sentence_Terminal_table[184] = {
+static const uint8_t unicode_prop_Sentence_Terminal_table[188] = {
     0xa0, 0x80, 0x8b, 0x80, 0x8f, 0x80, 0x45, 0x48,
     0x80, 0x40, 0x93, 0x81, 0x40, 0xb3, 0x80, 0xaa,
     0x82, 0x40, 0xf5, 0x80, 0xbc, 0x00, 0x02, 0x81,
@@ -3871,10 +3921,11 @@ static const uint8_t unicode_prop_Sentence_Terminal_table[184] = {
     0x82, 0x40, 0x80, 0x0d, 0x80, 0x8f, 0x81, 0xd7,
     0x08, 0x81, 0xeb, 0x80, 0x41, 0xa0, 0x81, 0x41,
     0x74, 0x0c, 0x8e, 0xe8, 0x81, 0x40, 0xf8, 0x82,
-    0x43, 0x02, 0x81, 0xd6, 0x81, 0x41, 0xa3, 0x81,
-    0x42, 0xb3, 0x81, 0x60, 0x4b, 0x74, 0x81, 0x40,
-    0x84, 0x80, 0xc0, 0x81, 0x8a, 0x80, 0x43, 0x52,
-    0x80, 0x60, 0x4e, 0x05, 0x80, 0x5d, 0xe7, 0x80,
+    0x42, 0x04, 0x00, 0x80, 0x40, 0xfa, 0x81, 0xd6,
+    0x81, 0x41, 0xa3, 0x81, 0x42, 0xb3, 0x81, 0x60,
+    0x4b, 0x74, 0x81, 0x40, 0x84, 0x80, 0xc0, 0x81,
+    0x8a, 0x80, 0x43, 0x52, 0x80, 0x60, 0x4e, 0x05,
+    0x80, 0x5d, 0xe7, 0x80,
 };
 
 static const uint8_t unicode_prop_Soft_Dotted_table[71] = {
@@ -3889,7 +3940,7 @@ static const uint8_t unicode_prop_Soft_Dotted_table[71] = {
     0x81, 0xb1, 0x81, 0xb1, 0x81, 0xb1, 0x81,
 };
 
-static const uint8_t unicode_prop_Terminal_Punctuation_table[237] = {
+static const uint8_t unicode_prop_Terminal_Punctuation_table[241] = {
     0xa0, 0x80, 0x89, 0x00, 0x80, 0x8a, 0x0a, 0x80,
     0x43, 0x3d, 0x07, 0x80, 0x42, 0x00, 0x80, 0xb8,
     0x80, 0xc7, 0x80, 0x8d, 0x01, 0x81, 0x40, 0xb3,
@@ -3913,21 +3964,23 @@ static const uint8_t unicode_prop_Terminal_Punctuation_table[237] = {
     0x85, 0xc3, 0x85, 0xd8, 0x83, 0x43, 0xb7, 0x84,
     0x40, 0xec, 0x86, 0xef, 0x83, 0xfe, 0x82, 0x40,
     0x80, 0x0d, 0x80, 0x8f, 0x81, 0xd7, 0x84, 0xeb,
-    0x80, 0x41, 0xa0, 0x82, 0x8c, 0x80, 0x41, 0x65,
-    0x1a, 0x8e, 0xe8, 0x81, 0x40, 0xf8, 0x82, 0x43,
-    0x02, 0x81, 0xd6, 0x0b, 0x81, 0x41, 0x9d, 0x82,
-    0xac, 0x80, 0x42, 0x84, 0x81, 0x45, 0x76, 0x84,
-    0x60, 0x45, 0xf8, 0x81, 0x40, 0x84, 0x80, 0xc0,
-    0x82, 0x89, 0x80, 0x43, 0x51, 0x81, 0x60, 0x4e,
-    0x05, 0x80, 0x5d, 0xe6, 0x83,
+    0x80, 0x41, 0xa0, 0x82, 0x8b, 0x81, 0x41, 0x65,
+    0x1a, 0x8e, 0xe8, 0x81, 0x40, 0xf8, 0x82, 0x42,
+    0x04, 0x00, 0x80, 0x40, 0xfa, 0x81, 0xd6, 0x0b,
+    0x81, 0x41, 0x9d, 0x82, 0xac, 0x80, 0x42, 0x84,
+    0x81, 0x45, 0x76, 0x84, 0x60, 0x45, 0xf8, 0x81,
+    0x40, 0x84, 0x80, 0xc0, 0x82, 0x89, 0x80, 0x43,
+    0x51, 0x81, 0x60, 0x4e, 0x05, 0x80, 0x5d, 0xe6,
+    0x83,
 };
 
-static const uint8_t unicode_prop_Unified_Ideograph_table[38] = {
-    0x60, 0x33, 0xff, 0x59, 0xb5, 0xc9, 0x60, 0x51,
-    0xef, 0x60, 0x5a, 0x1d, 0x08, 0x00, 0x81, 0x89,
+static const uint8_t unicode_prop_Unified_Ideograph_table[42] = {
+    0x60, 0x33, 0xff, 0x59, 0xbf, 0xbf, 0x60, 0x51,
+    0xfc, 0x60, 0x5a, 0x10, 0x08, 0x00, 0x81, 0x89,
     0x00, 0x00, 0x09, 0x82, 0x61, 0x05, 0xd5, 0x60,
-    0xa6, 0xd6, 0xa8, 0x50, 0x34, 0x8a, 0x40, 0xdd,
-    0x81, 0x56, 0x81, 0x8d, 0x5d, 0x30,
+    0xa6, 0xdd, 0xa1, 0x50, 0x34, 0x8a, 0x40, 0xdd,
+    0x81, 0x56, 0x81, 0x8d, 0x5d, 0x30, 0x54, 0x1e,
+    0x53, 0x4a,
 };
 
 static const uint8_t unicode_prop_Variation_Selector_table[12] = {
@@ -3966,7 +4019,7 @@ static const uint8_t unicode_prop_Bidi_Mirrored_table[171] = {
     0x80, 0xb8, 0x80,
 };
 
-static const uint8_t unicode_prop_Emoji_table[236] = {
+static const uint8_t unicode_prop_Emoji_table[238] = {
     0xa2, 0x05, 0x04, 0x89, 0xee, 0x03, 0x80, 0x5f,
     0x8c, 0x80, 0x8b, 0x80, 0x40, 0xd7, 0x80, 0x95,
     0x80, 0xd9, 0x85, 0x8e, 0x81, 0x41, 0x6e, 0x81,
@@ -3976,27 +4029,27 @@ static const uint8_t unicode_prop_Emoji_table[236] = {
     0x09, 0x03, 0x01, 0x00, 0x09, 0x02, 0x02, 0x0f,
     0x14, 0x00, 0x04, 0x8b, 0x8a, 0x09, 0x00, 0x08,
     0x80, 0x91, 0x01, 0x81, 0x91, 0x28, 0x00, 0x0a,
-    0x0f, 0x0b, 0x81, 0x8a, 0x0c, 0x09, 0x04, 0x08,
-    0x00, 0x81, 0x93, 0x0c, 0x28, 0x19, 0x03, 0x01,
-    0x01, 0x28, 0x01, 0x00, 0x00, 0x05, 0x02, 0x05,
-    0x80, 0x89, 0x81, 0x8e, 0x01, 0x03, 0x00, 0x03,
-    0x10, 0x80, 0x8a, 0x81, 0xaf, 0x82, 0x88, 0x80,
-    0x8d, 0x80, 0x8d, 0x80, 0x41, 0x73, 0x81, 0x41,
-    0xce, 0x82, 0x92, 0x81, 0xb2, 0x03, 0x80, 0x44,
-    0xd9, 0x80, 0x8b, 0x80, 0x42, 0x58, 0x00, 0x80,
-    0x61, 0xbd, 0x69, 0x80, 0x40, 0xc9, 0x80, 0x40,
-    0x9f, 0x81, 0x8b, 0x81, 0x8d, 0x01, 0x89, 0xca,
-    0x99, 0x01, 0x96, 0x80, 0x93, 0x01, 0x88, 0x94,
-    0x81, 0x40, 0xad, 0xa1, 0x81, 0xef, 0x09, 0x02,
-    0x81, 0xd2, 0x0a, 0x80, 0x41, 0x06, 0x80, 0xbe,
-    0x8a, 0x28, 0x97, 0x31, 0x0f, 0x8b, 0x01, 0x19,
-    0x03, 0x81, 0x8c, 0x09, 0x07, 0x81, 0x88, 0x04,
-    0x82, 0x8b, 0x17, 0x11, 0x00, 0x03, 0x05, 0x02,
-    0x05, 0xd5, 0xaf, 0xc5, 0x27, 0x08, 0x89, 0x2a,
-    0x00, 0x0a, 0x01, 0x87, 0x40, 0xe4, 0x8b, 0x41,
-    0x20, 0xad, 0x80, 0x89, 0x80, 0xaa, 0x03, 0x82,
-    0xa8, 0x0d, 0x82, 0x9c, 0x81, 0xb2, 0xef, 0x1b,
-    0x14, 0x82, 0x8c, 0x85,
+    0x0c, 0x01, 0x0b, 0x81, 0x8a, 0x0c, 0x09, 0x04,
+    0x08, 0x00, 0x81, 0x93, 0x0c, 0x28, 0x19, 0x03,
+    0x01, 0x01, 0x28, 0x01, 0x00, 0x00, 0x05, 0x02,
+    0x05, 0x80, 0x89, 0x81, 0x8e, 0x01, 0x03, 0x00,
+    0x03, 0x10, 0x80, 0x8a, 0x81, 0xaf, 0x82, 0x88,
+    0x80, 0x8d, 0x80, 0x8d, 0x80, 0x41, 0x73, 0x81,
+    0x41, 0xce, 0x82, 0x92, 0x81, 0xb2, 0x03, 0x80,
+    0x44, 0xd9, 0x80, 0x8b, 0x80, 0x42, 0x58, 0x00,
+    0x80, 0x61, 0xbd, 0x69, 0x80, 0x40, 0xc9, 0x80,
+    0x40, 0x9f, 0x81, 0x8b, 0x81, 0x8d, 0x01, 0x89,
+    0xca, 0x99, 0x01, 0x96, 0x80, 0x93, 0x01, 0x88,
+    0x94, 0x81, 0x40, 0xad, 0xa1, 0x81, 0xef, 0x09,
+    0x02, 0x81, 0xd2, 0x0a, 0x80, 0x41, 0x06, 0x80,
+    0xbe, 0x8a, 0x28, 0x97, 0x31, 0x0f, 0x8b, 0x01,
+    0x19, 0x03, 0x81, 0x8c, 0x09, 0x07, 0x81, 0x88,
+    0x04, 0x82, 0x8b, 0x17, 0x11, 0x00, 0x03, 0x05,
+    0x02, 0x05, 0xd5, 0xaf, 0xc5, 0x27, 0x0a, 0x3d,
+    0x10, 0x01, 0x10, 0x81, 0x89, 0x40, 0xe2, 0x8b,
+    0x41, 0x1f, 0xae, 0x80, 0x89, 0x80, 0xb1, 0x80,
+    0xd1, 0x80, 0xb2, 0xef, 0x22, 0x14, 0x86, 0x88,
+    0x98, 0x36, 0x88, 0x82, 0x8c, 0x86,
 };
 
 static const uint8_t unicode_prop_Emoji_Component_table[28] = {
@@ -4010,18 +4063,19 @@ static const uint8_t unicode_prop_Emoji_Modifier_table[4] = {
     0x61, 0xf3, 0xfa, 0x84,
 };
 
-static const uint8_t unicode_prop_Emoji_Modifier_Base_table[63] = {
+static const uint8_t unicode_prop_Emoji_Modifier_Base_table[66] = {
     0x60, 0x26, 0x1c, 0x80, 0x40, 0xda, 0x80, 0x8f,
     0x83, 0x61, 0xcc, 0x76, 0x80, 0xbb, 0x11, 0x01,
     0x82, 0xf4, 0x09, 0x8a, 0x94, 0x92, 0x10, 0x1a,
     0x02, 0x30, 0x00, 0x97, 0x80, 0x40, 0xc8, 0x0b,
     0x80, 0x94, 0x03, 0x81, 0x40, 0xad, 0x12, 0x84,
     0xd2, 0x80, 0x8f, 0x82, 0x88, 0x80, 0x8a, 0x80,
-    0x42, 0x41, 0x07, 0x3d, 0x80, 0x88, 0x89, 0x0a,
-    0xf5, 0x08, 0x08, 0x80, 0x90, 0x10, 0x8c,
+    0x42, 0x3e, 0x01, 0x07, 0x3d, 0x80, 0x88, 0x89,
+    0x0a, 0xb7, 0x80, 0xbc, 0x08, 0x08, 0x80, 0x90,
+    0x10, 0x8c,
 };
 
-static const uint8_t unicode_prop_Emoji_Presentation_table[143] = {
+static const uint8_t unicode_prop_Emoji_Presentation_table[144] = {
     0x60, 0x23, 0x19, 0x81, 0x40, 0xcc, 0x1a, 0x01,
     0x80, 0x42, 0x08, 0x81, 0x94, 0x81, 0xb1, 0x8b,
     0xaa, 0x80, 0x92, 0x80, 0x8c, 0x07, 0x81, 0x90,
@@ -4036,13 +4090,13 @@ static const uint8_t unicode_prop_Emoji_Presentation_table[143] = {
     0x1c, 0x8b, 0x90, 0x10, 0x82, 0xc6, 0x00, 0x80,
     0x40, 0xba, 0x81, 0xbe, 0x8c, 0x18, 0x97, 0x91,
     0x80, 0x99, 0x81, 0x8c, 0x80, 0xd5, 0xd4, 0xaf,
-    0xc5, 0x28, 0x12, 0x08, 0x94, 0x0e, 0x86, 0x40,
-    0xe4, 0x8b, 0x41, 0x20, 0xad, 0x80, 0x89, 0x80,
-    0xaa, 0x03, 0x82, 0xa8, 0x0d, 0x82, 0x9c, 0x81,
-    0xb2, 0xef, 0x1b, 0x14, 0x82, 0x8c, 0x85,
+    0xc5, 0x28, 0x12, 0x0a, 0x92, 0x0e, 0x88, 0x40,
+    0xe2, 0x8b, 0x41, 0x1f, 0xae, 0x80, 0x89, 0x80,
+    0xb1, 0x80, 0xd1, 0x80, 0xb2, 0xef, 0x22, 0x14,
+    0x86, 0x88, 0x98, 0x36, 0x88, 0x82, 0x8c, 0x86,
 };
 
-static const uint8_t unicode_prop_Extended_Pictographic_table[152] = {
+static const uint8_t unicode_prop_Extended_Pictographic_table[156] = {
     0x40, 0xa8, 0x03, 0x80, 0x5f, 0x8c, 0x80, 0x8b,
     0x80, 0x40, 0xd7, 0x80, 0x95, 0x80, 0xd9, 0x85,
     0x8e, 0x81, 0x41, 0x6e, 0x81, 0x8b, 0x80, 0xde,
@@ -4061,7 +4115,8 @@ static const uint8_t unicode_prop_Extended_Pictographic_table[152] = {
     0x88, 0x41, 0xb1, 0x84, 0x41, 0x3d, 0x87, 0x41,
     0x09, 0xaf, 0xff, 0xf3, 0x8b, 0xd4, 0xaa, 0x8b,
     0x83, 0xb7, 0x87, 0x89, 0x85, 0xa7, 0x87, 0x9d,
-    0xd1, 0x8b, 0xae, 0x80, 0x89, 0x80, 0x46, 0xb6,
+    0xd1, 0x8b, 0xae, 0x80, 0x89, 0x80, 0x41, 0xb8,
+    0x40, 0xff, 0x43, 0xfd,
 };
 
 static const uint8_t unicode_prop_Default_Ignorable_Code_Point_table[51] = {
@@ -4175,11 +4230,11 @@ static const char unicode_prop_name_table[] =
     "White_Space,space"                  "\0"
     "Bidi_Mirrored,Bidi_M"               "\0"
     "Emoji"                              "\0"
-    "Emoji_Component"                    "\0"
-    "Emoji_Modifier"                     "\0"
-    "Emoji_Modifier_Base"                "\0"
-    "Emoji_Presentation"                 "\0"
-    "Extended_Pictographic"              "\0"
+    "Emoji_Component,EComp"              "\0"
+    "Emoji_Modifier,EMod"                "\0"
+    "Emoji_Modifier_Base,EBase"          "\0"
+    "Emoji_Presentation,EPres"           "\0"
+    "Extended_Pictographic,ExtPict"      "\0"
     "Default_Ignorable_Code_Point,DI"    "\0"
     "ID_Start,IDS"                       "\0"
     "Case_Ignorable,CI"                  "\0"
index aff1b8911ac69e2c2fb460c18fc646b49e9945cc..3ff5168a79223c0e6b63be200097f498293af6bc 100644 (file)
@@ -224,17 +224,15 @@ static JSValue js_printf_internal(JSContext *ctx,
                 case 'X':
                     if (i >= argc)
                         goto missing;
+                    if (JS_ToInt64Ext(ctx, &int64_arg, argv[i++]))
+                        goto fail;
                     if (modsize > 0) {
-                        if (JS_ToInt64(ctx, &int64_arg, argv[i++]))
-                            goto fail;
                         q[1] = q[-1];
                         q[-1] = q[0] = 'l';
                         q[2] = '\0';
                         dbuf_printf_fun(&dbuf, fmtbuf, (long long)int64_arg);
                     } else {
-                        if (JS_ToInt32(ctx, &int32_arg, argv[i++]))
-                            goto fail;
-                        dbuf_printf_fun(&dbuf, fmtbuf, int32_arg);
+                        dbuf_printf_fun(&dbuf, fmtbuf, (int)int64_arg);
                     }
                     break;
 
@@ -369,6 +367,27 @@ static JSValue js_loadScript(JSContext *ctx, JSValueConst this_val,
     return ret;
 }
 
+/* load a file as a UTF-8 encoded string */
+static JSValue js_std_loadFile(JSContext *ctx, JSValueConst this_val,
+                               int argc, JSValueConst *argv)
+{
+    uint8_t *buf;
+    const char *filename;
+    JSValue ret;
+    size_t buf_len;
+    
+    filename = JS_ToCString(ctx, argv[0]);
+    if (!filename)
+        return JS_EXCEPTION;
+    buf = js_load_file(ctx, &buf_len, filename);
+    JS_FreeCString(ctx, filename);
+    if (!buf)
+        return JS_NULL;
+    ret = JS_NewStringLen(ctx, (char *)buf, buf_len);
+    js_free(ctx, buf);
+    return ret;
+}
+
 typedef JSModuleDef *(JSInitModuleFunc)(JSContext *ctx,
                                         const char *module_name);
 
@@ -633,30 +652,14 @@ static void js_std_file_finalizer(JSRuntime *rt, JSValue val)
     }
 }
 
-static JSValue js_new_std_error(JSContext *ctx, int err)
+static ssize_t js_get_errno(ssize_t ret)
 {
-    JSValue obj;
-    /* XXX: could add a specific Error prototype */
-    obj = JS_NewError(ctx);
-    JS_DefinePropertyValueStr(ctx, obj, "message",
-                              JS_NewString(ctx, strerror(err)),
-                              JS_PROP_WRITABLE | JS_PROP_CONFIGURABLE);
-    JS_DefinePropertyValueStr(ctx, obj, "errno",
-                              JS_NewInt32(ctx, err),
-                              JS_PROP_WRITABLE | JS_PROP_CONFIGURABLE);
-    return obj;
-}
-
-static JSValue js_std_error_constructor(JSContext *ctx, JSValueConst new_target,
-                                        int argc, JSValueConst *argv)
-{
-    int err;
-    if (JS_ToInt32(ctx, &err, argv[0]))
-        return JS_EXCEPTION;
-    return js_new_std_error(ctx, err);
+    if (ret == -1)
+        ret = -errno;
+    return ret;
 }
 
-static JSValue js_std_error_strerror(JSContext *ctx, JSValueConst this_val,
+static JSValue js_std_strerror(JSContext *ctx, JSValueConst this_val,
                                      int argc, JSValueConst *argv)
 {
     int err;
@@ -665,15 +668,6 @@ static JSValue js_std_error_strerror(JSContext *ctx, JSValueConst this_val,
     return JS_NewString(ctx, strerror(err));
 }
 
-static JSValue js_std_throw_errno(JSContext *ctx, int err)
-{
-    JSValue obj;
-    obj = js_new_std_error(ctx, err);
-    if (JS_IsException(obj))
-        obj = JS_NULL;
-    return JS_Throw(ctx, obj);
-}
-
 static JSValue js_new_std_file(JSContext *ctx, FILE *f,
                                BOOL close_in_finalizer,
                                BOOL is_popen)
@@ -695,12 +689,20 @@ static JSValue js_new_std_file(JSContext *ctx, FILE *f,
     return obj;
 }
 
+static void js_set_error_object(JSContext *ctx, JSValue obj, int err)
+{
+    if (!JS_IsUndefined(obj)) {
+        JS_SetPropertyStr(ctx, obj, "errno", JS_NewInt32(ctx, err));
+    }
+}
+
 static JSValue js_std_open(JSContext *ctx, JSValueConst this_val,
                            int argc, JSValueConst *argv)
 {
     const char *filename, *mode = NULL;
     FILE *f;
-
+    int err;
+    
     filename = JS_ToCString(ctx, argv[0]);
     if (!filename)
         goto fail;
@@ -708,15 +710,21 @@ static JSValue js_std_open(JSContext *ctx, JSValueConst this_val,
     if (!mode)
         goto fail;
     if (mode[strspn(mode, "rwa+b")] != '\0') {
-        js_std_throw_errno(ctx, EINVAL);
+        JS_ThrowTypeError(ctx, "invalid file mode");
         goto fail;
     }
 
     f = fopen(filename, mode);
+    if (!f)
+        err = errno;
+    else
+        err = 0;
+    if (argc >= 3)
+        js_set_error_object(ctx, argv[2], err);
     JS_FreeCString(ctx, filename);
     JS_FreeCString(ctx, mode);
     if (!f)
-        return js_std_throw_errno(ctx, errno);
+        return JS_NULL;
     return js_new_std_file(ctx, f, TRUE, FALSE);
  fail:
     JS_FreeCString(ctx, filename);
@@ -729,7 +737,8 @@ static JSValue js_std_popen(JSContext *ctx, JSValueConst this_val,
 {
     const char *filename, *mode = NULL;
     FILE *f;
-
+    int err;
+    
     filename = JS_ToCString(ctx, argv[0]);
     if (!filename)
         goto fail;
@@ -737,15 +746,21 @@ static JSValue js_std_popen(JSContext *ctx, JSValueConst this_val,
     if (!mode)
         goto fail;
     if (mode[strspn(mode, "rw")] != '\0') {
-        js_std_throw_errno(ctx, EINVAL);
+        JS_ThrowTypeError(ctx, "invalid file mode");
         goto fail;
     }
 
     f = popen(filename, mode);
+    if (!f)
+        err = errno;
+    else
+        err = 0;
+    if (argc >= 3)
+        js_set_error_object(ctx, argv[2], err);
     JS_FreeCString(ctx, filename);
     JS_FreeCString(ctx, mode);
     if (!f)
-        return js_std_throw_errno(ctx, errno);
+        return JS_NULL;
     return js_new_std_file(ctx, f, TRUE, TRUE);
  fail:
     JS_FreeCString(ctx, filename);
@@ -758,7 +773,7 @@ static JSValue js_std_fdopen(JSContext *ctx, JSValueConst this_val,
 {
     const char *mode;
     FILE *f;
-    int fd;
+    int fd, err;
 
     if (JS_ToInt32(ctx, &fd, argv[0]))
         return JS_EXCEPTION;
@@ -766,14 +781,20 @@ static JSValue js_std_fdopen(JSContext *ctx, JSValueConst this_val,
     if (!mode)
         goto fail;
     if (mode[strspn(mode, "rwa+")] != '\0') {
-        js_std_throw_errno(ctx, EINVAL);
+        JS_ThrowTypeError(ctx, "invalid file mode");
         goto fail;
     }
 
     f = fdopen(fd, mode);
+    if (!f)
+        err = errno;
+    else
+        err = 0;
+    if (argc >= 3)
+        js_set_error_object(ctx, argv[2], err);
     JS_FreeCString(ctx, mode);
     if (!f)
-        return js_std_throw_errno(ctx, errno);
+        return JS_NULL;
     return js_new_std_file(ctx, f, TRUE, FALSE);
  fail:
     JS_FreeCString(ctx, mode);
@@ -785,8 +806,10 @@ static JSValue js_std_tmpfile(JSContext *ctx, JSValueConst this_val,
 {
     FILE *f;
     f = tmpfile();
+    if (argc >= 1)
+        js_set_error_object(ctx, argv[0], f ? 0 : errno);
     if (!f)
-        return js_std_throw_errno(ctx, errno);
+        return JS_NULL;
     return js_new_std_file(ctx, f, TRUE, FALSE);
 }
 
@@ -808,7 +831,7 @@ static FILE *js_std_file_get(JSContext *ctx, JSValueConst obj)
     if (!s)
         return NULL;
     if (!s->f) {
-        js_std_throw_errno(ctx, EBADF);
+        JS_ThrowTypeError(ctx, "invalid file handle");
         return NULL;
     }
     return s->f;
@@ -843,17 +866,17 @@ static JSValue js_std_file_close(JSContext *ctx, JSValueConst this_val,
                                  int argc, JSValueConst *argv)
 {
     JSSTDFile *s = JS_GetOpaque2(ctx, this_val, js_std_file_class_id);
+    int err;
     if (!s)
         return JS_EXCEPTION;
     if (!s->f)
-        return js_std_throw_errno(ctx, EBADF);
-    /* XXX: could return exit code */
+        return JS_ThrowTypeError(ctx, "invalid file handle");
     if (s->is_popen)
-        pclose(s->f);
+        err = js_get_errno(pclose(s->f));
     else
-        fclose(s->f);
+        err = js_get_errno(fclose(s->f));
     s->f = NULL;
-    return JS_UNDEFINED;
+    return JS_NewInt32(ctx, err);
 }
 
 static JSValue js_std_file_printf(JSContext *ctx, JSValueConst this_val,
@@ -876,7 +899,7 @@ static JSValue js_std_file_flush(JSContext *ctx, JSValueConst this_val,
 }
 
 static JSValue js_std_file_tell(JSContext *ctx, JSValueConst this_val,
-                                int argc, JSValueConst *argv)
+                                int argc, JSValueConst *argv, int is_bigint)
 {
     FILE *f = js_std_file_get(ctx, this_val);
     int64_t pos;
@@ -887,7 +910,10 @@ static JSValue js_std_file_tell(JSContext *ctx, JSValueConst this_val,
 #else
     pos = ftell(f);
 #endif
-    return JS_NewInt64(ctx, pos);
+    if (is_bigint)
+        return JS_NewBigInt64(ctx, pos);
+    else
+        return JS_NewInt64(ctx, pos);
 }
 
 static JSValue js_std_file_seek(JSContext *ctx, JSValueConst this_val,
@@ -898,7 +924,7 @@ static JSValue js_std_file_seek(JSContext *ctx, JSValueConst this_val,
     int whence, ret;
     if (!f)
         return JS_EXCEPTION;
-    if (JS_ToInt64(ctx, &pos, argv[0]))
+    if (JS_ToInt64Ext(ctx, &pos, argv[0]))
         return JS_EXCEPTION;
     if (JS_ToInt32(ctx, &whence, argv[1]))
         return JS_EXCEPTION;
@@ -908,8 +934,8 @@ static JSValue js_std_file_seek(JSContext *ctx, JSValueConst this_val,
     ret = fseek(f, pos, whence);
 #endif
     if (ret < 0)
-        return js_std_throw_errno(ctx, EBADF);
-    return JS_UNDEFINED;
+        ret = -errno;
+    return JS_NewInt32(ctx, ret);
 }
 
 static JSValue js_std_file_eof(JSContext *ctx, JSValueConst this_val,
@@ -921,6 +947,25 @@ static JSValue js_std_file_eof(JSContext *ctx, JSValueConst this_val,
     return JS_NewBool(ctx, feof(f));
 }
 
+static JSValue js_std_file_error(JSContext *ctx, JSValueConst this_val,
+                               int argc, JSValueConst *argv)
+{
+    FILE *f = js_std_file_get(ctx, this_val);
+    if (!f)
+        return JS_EXCEPTION;
+    return JS_NewBool(ctx, ferror(f));
+}
+
+static JSValue js_std_file_clearerr(JSContext *ctx, JSValueConst this_val,
+                                    int argc, JSValueConst *argv)
+{
+    FILE *f = js_std_file_get(ctx, this_val);
+    if (!f)
+        return JS_EXCEPTION;
+    clearerr(f);
+    return JS_UNDEFINED;
+}
+
 static JSValue js_std_file_fileno(JSContext *ctx, JSValueConst this_val,
                                   int argc, JSValueConst *argv)
 {
@@ -1151,7 +1196,7 @@ static JSValue js_std_urlGet(JSContext *ctx, JSValueConst this_val,
     f = popen((char *)cmd_buf.buf, "r");
     dbuf_free(&cmd_buf);
     if (!f) {
-        return js_std_throw_errno(ctx, errno);
+        return JS_ThrowTypeError(ctx, "could not start curl");
     }
 
     js_std_dbuf_init(ctx, data_buf);
@@ -1162,20 +1207,21 @@ static JSValue js_std_urlGet(JSContext *ctx, JSValueConst this_val,
         goto fail;
 
     /* get the HTTP status */
-    if (http_get_header_line(f, buf, URL_GET_BUF_SIZE, NULL) < 0)
+    if (http_get_header_line(f, buf, URL_GET_BUF_SIZE, NULL) < 0) {
+        status = 0;
         goto bad_header;
+    }
     status = http_get_status(buf);
     if (!full_flag && !(status >= 200 && status <= 299)) {
-        js_std_throw_errno(ctx, ENOENT);
-        goto fail;
+        goto bad_header;
     }
     
     /* wait until there is an empty line */
     for(;;) {
         if (http_get_header_line(f, buf, URL_GET_BUF_SIZE, header_buf) < 0) {
         bad_header:
-            js_std_throw_errno(ctx, EINVAL);
-            goto fail;
+            response = JS_NULL;
+            goto done;
         }
         if (!strcmp(buf, "\r\n"))
             break;
@@ -1191,11 +1237,6 @@ static JSValue js_std_urlGet(JSContext *ctx, JSValueConst this_val,
             break;
         dbuf_put(data_buf, (uint8_t *)buf, len);
     }
-    js_free(ctx, buf);
-    buf = NULL;
-    pclose(f);
-    f = NULL;
-
     if (dbuf_error(data_buf))
         goto fail;
     if (binary_flag) {
@@ -1204,10 +1245,15 @@ static JSValue js_std_urlGet(JSContext *ctx, JSValueConst this_val,
     } else {
         response = JS_NewStringLen(ctx, (char *)data_buf->buf, data_buf->size);
     }
-    dbuf_free(data_buf);
-    data_buf = NULL;
     if (JS_IsException(response))
         goto fail;
+ done:
+    js_free(ctx, buf);
+    buf = NULL;
+    pclose(f);
+    f = NULL;
+    dbuf_free(data_buf);
+    data_buf = NULL;
 
     if (full_flag) {
         ret_obj = JS_NewObject(ctx);
@@ -1216,13 +1262,15 @@ static JSValue js_std_urlGet(JSContext *ctx, JSValueConst this_val,
         JS_DefinePropertyValueStr(ctx, ret_obj, "response",
                                   response,
                                   JS_PROP_C_W_E);
-        JS_DefinePropertyValueStr(ctx, ret_obj, "responseHeaders",
-                                  JS_NewStringLen(ctx, (char *)header_buf->buf,
-                                                  header_buf->size),
-                                  JS_PROP_C_W_E);
-        JS_DefinePropertyValueStr(ctx, ret_obj, "status",
-                                  JS_NewInt32(ctx, status),
-                                  JS_PROP_C_W_E);
+        if (!JS_IsNull(response)) {
+            JS_DefinePropertyValueStr(ctx, ret_obj, "responseHeaders",
+                                      JS_NewStringLen(ctx, (char *)header_buf->buf,
+                                                      header_buf->size),
+                                      JS_PROP_C_W_E);
+            JS_DefinePropertyValueStr(ctx, ret_obj, "status",
+                                      JS_NewInt32(ctx, status),
+                                      JS_PROP_C_W_E);
+        }
     } else {
         ret_obj = response;
     }
@@ -1245,6 +1293,23 @@ static JSClassDef js_std_file_class = {
     .finalizer = js_std_file_finalizer,
 }; 
 
+static const JSCFunctionListEntry js_std_error_props[] = {
+    /* various errno values */
+#define DEF(x) JS_PROP_INT32_DEF(#x, x, JS_PROP_CONFIGURABLE )
+    DEF(EINVAL),
+    DEF(EIO),
+    DEF(EACCES),
+    DEF(EEXIST),
+    DEF(ENOSPC),
+    DEF(ENOSYS),
+    DEF(EBUSY),
+    DEF(ENOENT),
+    DEF(EPERM),
+    DEF(EPIPE),
+    DEF(EBADF),
+#undef DEF
+};
+
 static const JSCFunctionListEntry js_std_funcs[] = {
     JS_CFUNC_DEF("exit", 1, js_std_exit ),
     JS_CFUNC_DEF("gc", 0, js_std_gc ),
@@ -1252,7 +1317,9 @@ static const JSCFunctionListEntry js_std_funcs[] = {
     JS_CFUNC_DEF("loadScript", 1, js_loadScript ),
     JS_CFUNC_DEF("getenv", 1, js_std_getenv ),
     JS_CFUNC_DEF("urlGet", 1, js_std_urlGet ),
-
+    JS_CFUNC_DEF("loadFile", 1, js_std_loadFile ),
+    JS_CFUNC_DEF("strerror", 1, js_std_strerror ),
+    
     /* FILE I/O */
     JS_CFUNC_DEF("open", 2, js_std_open ),
     JS_CFUNC_DEF("popen", 2, js_std_popen ),
@@ -1264,49 +1331,34 @@ static const JSCFunctionListEntry js_std_funcs[] = {
     JS_PROP_INT32_DEF("SEEK_SET", SEEK_SET, JS_PROP_CONFIGURABLE ),
     JS_PROP_INT32_DEF("SEEK_CUR", SEEK_CUR, JS_PROP_CONFIGURABLE ),
     JS_PROP_INT32_DEF("SEEK_END", SEEK_END, JS_PROP_CONFIGURABLE ),
-
+    JS_OBJECT_DEF("Error", js_std_error_props, countof(js_std_error_props), JS_PROP_CONFIGURABLE),
     /* setenv, ... */
 };
-
-static const JSCFunctionListEntry js_std_error_funcs[] = {
-    JS_CFUNC_DEF("strerror", 1, js_std_error_strerror ),
-    /* various errno values */
-#define DEF(x) JS_PROP_INT32_DEF(#x, x, JS_PROP_CONFIGURABLE )
-    DEF(EINVAL),
-    DEF(EIO),
-    DEF(EACCES),
-    DEF(EEXIST),
-    DEF(ENOSPC),
-    DEF(ENOSYS),
-    DEF(EBUSY),
-    DEF(ENOENT),
-    DEF(EPERM),
-    DEF(EPIPE),
-    DEF(EBADF),
-#undef DEF
-};
-
+    
 static const JSCFunctionListEntry js_std_file_proto_funcs[] = {
     JS_CFUNC_DEF("close", 0, js_std_file_close ),
     JS_CFUNC_MAGIC_DEF("puts", 1, js_std_file_puts, 1 ),
     JS_CFUNC_DEF("printf", 1, js_std_file_printf ),
     JS_CFUNC_DEF("flush", 0, js_std_file_flush ),
-    JS_CFUNC_DEF("tell", 0, js_std_file_tell ),
+    JS_CFUNC_MAGIC_DEF("tell", 0, js_std_file_tell, 0 ),
+    JS_CFUNC_MAGIC_DEF("tello", 0, js_std_file_tell, 1 ),
     JS_CFUNC_DEF("seek", 2, js_std_file_seek ),
     JS_CFUNC_DEF("eof", 0, js_std_file_eof ),
     JS_CFUNC_DEF("fileno", 0, js_std_file_fileno ),
+    JS_CFUNC_DEF("error", 0, js_std_file_error ),
+    JS_CFUNC_DEF("clearerr", 0, js_std_file_clearerr ),
     JS_CFUNC_MAGIC_DEF("read", 3, js_std_file_read_write, 0 ),
     JS_CFUNC_MAGIC_DEF("write", 3, js_std_file_read_write, 1 ),
     JS_CFUNC_DEF("getline", 0, js_std_file_getline ),
     JS_CFUNC_DEF("readAsString", 0, js_std_file_readAsString ),
     JS_CFUNC_DEF("getByte", 0, js_std_file_getByte ),
     JS_CFUNC_DEF("putByte", 1, js_std_file_putByte ),
-    /* setvbuf, ferror, clearerr, ...  */
+    /* setvbuf, ...  */
 };
 
 static int js_std_init(JSContext *ctx, JSModuleDef *m)
 {
-    JSValue proto, obj;
+    JSValue proto;
     
     /* FILE class */
     /* the class ID is created once */
@@ -1323,13 +1375,6 @@ static int js_std_init(JSContext *ctx, JSModuleDef *m)
     JS_SetModuleExport(ctx, m, "in", js_new_std_file(ctx, stdin, FALSE, FALSE));
     JS_SetModuleExport(ctx, m, "out", js_new_std_file(ctx, stdout, FALSE, FALSE));
     JS_SetModuleExport(ctx, m, "err", js_new_std_file(ctx, stderr, FALSE, FALSE));
-    
-    obj = JS_NewCFunction2(ctx, js_std_error_constructor,
-                           "Error", 1, JS_CFUNC_constructor, 0);
-    JS_SetPropertyFunctionList(ctx, obj, js_std_error_funcs,
-                               countof(js_std_error_funcs));
-    JS_SetModuleExport(ctx, m, "Error", obj);
-
     return 0;
 }
 
@@ -1343,20 +1388,12 @@ JSModuleDef *js_init_module_std(JSContext *ctx, const char *module_name)
     JS_AddModuleExport(ctx, m, "in");
     JS_AddModuleExport(ctx, m, "out");
     JS_AddModuleExport(ctx, m, "err");
-    JS_AddModuleExport(ctx, m, "Error");
     return m;
 }
 
 /**********************************************************/
 /* 'os' object */
 
-static JSValue js_os_return(JSContext *ctx, ssize_t ret)
-{
-    if (ret < 0)
-        ret = -errno;
-    return JS_NewInt64(ctx, ret);
-}
-
 static JSValue js_os_open(JSContext *ctx, JSValueConst this_val,
                           int argc, JSValueConst *argv)
 {
@@ -1382,9 +1419,9 @@ static JSValue js_os_open(JSContext *ctx, JSValueConst this_val,
     if (!(flags & O_TEXT))
         flags |= O_BINARY;
 #endif
-    ret = open(filename, flags, mode);
+    ret = js_get_errno(open(filename, flags, mode));
     JS_FreeCString(ctx, filename);
-    return js_os_return(ctx, ret);
+    return JS_NewInt32(ctx, ret);
 }
 
 static JSValue js_os_close(JSContext *ctx, JSValueConst this_val,
@@ -1393,24 +1430,31 @@ static JSValue js_os_close(JSContext *ctx, JSValueConst this_val,
     int fd, ret;
     if (JS_ToInt32(ctx, &fd, argv[0]))
         return JS_EXCEPTION;
-    ret = close(fd);
-    return js_os_return(ctx, ret);
+    ret = js_get_errno(close(fd));
+    return JS_NewInt32(ctx, ret);
 }
 
 static JSValue js_os_seek(JSContext *ctx, JSValueConst this_val,
                           int argc, JSValueConst *argv)
 {
-    int fd, whence, ret;
-    int64_t pos;
+    int fd, whence;
+    int64_t pos, ret;
+    BOOL is_bigint;
     
     if (JS_ToInt32(ctx, &fd, argv[0]))
         return JS_EXCEPTION;
-    if (JS_ToInt64(ctx, &pos, argv[1]))
+    is_bigint = JS_IsBigInt(ctx, argv[1]);
+    if (JS_ToInt64Ext(ctx, &pos, argv[1]))
         return JS_EXCEPTION;
     if (JS_ToInt32(ctx, &whence, argv[2]))
         return JS_EXCEPTION;
     ret = lseek(fd, pos, whence);
-    return js_os_return(ctx, ret);
+    if (ret == -1)
+        ret = -errno;
+    if (is_bigint)
+        return JS_NewBigInt64(ctx, ret);
+    else
+        return JS_NewInt64(ctx, ret);
 }
 
 static JSValue js_os_read_write(JSContext *ctx, JSValueConst this_val,
@@ -1434,10 +1478,10 @@ static JSValue js_os_read_write(JSContext *ctx, JSValueConst this_val,
     if (pos + len > size)
         return JS_ThrowRangeError(ctx, "read/write array buffer overflow");
     if (magic)
-        ret = write(fd, buf + pos, len);
+        ret = js_get_errno(write(fd, buf + pos, len));
     else
-        ret = read(fd, buf + pos, len);
-    return js_os_return(ctx, ret);
+        ret = js_get_errno(read(fd, buf + pos, len));
+    return JS_NewInt64(ctx, ret);
 }
 
 static JSValue js_os_isatty(JSContext *ctx, JSValueConst this_val,
@@ -1555,9 +1599,9 @@ static JSValue js_os_remove(JSContext *ctx, JSValueConst this_val,
     filename = JS_ToCString(ctx, argv[0]);
     if (!filename)
         return JS_EXCEPTION;
-    ret = remove(filename);
+    ret = js_get_errno(remove(filename));
     JS_FreeCString(ctx, filename);
-    return js_os_return(ctx, ret);
+    return JS_NewInt32(ctx, ret);
 }
 
 static JSValue js_os_rename(JSContext *ctx, JSValueConst this_val,
@@ -1574,10 +1618,10 @@ static JSValue js_os_rename(JSContext *ctx, JSValueConst this_val,
         JS_FreeCString(ctx, oldpath);
         return JS_EXCEPTION;
     }
-    ret = rename(oldpath, newpath);
+    ret = js_get_errno(rename(oldpath, newpath));
     JS_FreeCString(ctx, oldpath);
     JS_FreeCString(ctx, newpath);
-    return js_os_return(ctx, ret);
+    return JS_NewInt32(ctx, ret);
 }
 
 static JSOSRWHandler *find_rh(int fd)
@@ -2018,7 +2062,7 @@ static JSValue js_os_getcwd(JSContext *ctx, JSValueConst this_val,
     
     if (!getcwd(buf, sizeof(buf))) {
         buf[0] = '\0';
-        err = -errno;
+        err = errno;
     } else {
         err = 0;
     }
@@ -2036,9 +2080,9 @@ static JSValue js_os_chdir(JSContext *ctx, JSValueConst this_val,
     target = JS_ToCString(ctx, argv[0]);
     if (!target)
         return JS_EXCEPTION;
-    err = chdir(target);
+    err = js_get_errno(chdir(target));
     JS_FreeCString(ctx, target);
-    return js_os_return(ctx, err);
+    return JS_NewInt32(ctx, err);
 }
 
 /* return [path, errorcode] */
@@ -2056,7 +2100,7 @@ static JSValue js_os_realpath(JSContext *ctx, JSValueConst this_val,
     JS_FreeCString(ctx, path);
     if (!res) {
         buf[0] = '\0';
-        err = -errno;
+        err = errno;
     } else {
         err = 0;
     }
@@ -2078,9 +2122,9 @@ static JSValue js_os_mkdir(JSContext *ctx, JSValueConst this_val,
     path = JS_ToCString(ctx, argv[0]);
     if (!path)
         return JS_EXCEPTION;
-    ret = mkdir(path, mode);
+    ret = js_get_errno(mkdir(path, mode));
     JS_FreeCString(ctx, path);
-    return js_os_return(ctx, ret);
+    return JS_NewInt32(ctx, ret);
 }
 
 static int64_t timespec_to_ms(const struct timespec *tv)
@@ -2106,7 +2150,7 @@ static JSValue js_os_stat(JSContext *ctx, JSValueConst this_val,
         res = stat(path, &st);
     JS_FreeCString(ctx, path);
     if (res < 0) {
-        err = -errno;
+        err = errno;
         obj = JS_NULL;
     } else {
         err = 0;
@@ -2179,10 +2223,10 @@ static JSValue js_os_symlink(JSContext *ctx, JSValueConst this_val,
         JS_FreeCString(ctx, target);
         return JS_EXCEPTION;
     }
-    err = symlink(target, linkpath);
+    err = js_get_errno(symlink(target, linkpath));
     JS_FreeCString(ctx, target);
     JS_FreeCString(ctx, linkpath);
-    return js_os_return(ctx, err);
+    return JS_NewInt32(ctx, err);
 }
 
 /* return [path, errorcode] */
@@ -2198,14 +2242,14 @@ static JSValue js_os_readlink(JSContext *ctx, JSValueConst this_val,
     if (!path)
         return JS_EXCEPTION;
     res = readlink(path, buf, sizeof(buf) - 1);
-    JS_FreeCString(ctx, path);
     if (res < 0) {
         buf[0] = '\0';
-        err = -errno;
+        err = errno;
     } else {
         buf[res] = '\0';
         err = 0;
     }
+    JS_FreeCString(ctx, path);
     return make_string_error(ctx, buf, err);
 }
 
@@ -2229,18 +2273,19 @@ static JSValue js_os_readdir(JSContext *ctx, JSValueConst this_val,
         return JS_EXCEPTION;
     }
     f = opendir(path);
+    if (!f)
+        err = errno;
+    else
+        err = 0;
     JS_FreeCString(ctx, path);
-    err = 0;
-    if (!f) {
-        err = -errno;
+    if (!f)
         goto done;
-    }
     len = 0;
     for(;;) {
         errno = 0;
         d = readdir(f);
         if (!d) {
-            err = -errno;
+            err = errno;
             break;
         }
         JS_DefinePropertyValueUint32(ctx, obj, len++,
@@ -2275,9 +2320,9 @@ static JSValue js_os_utimes(JSContext *ctx, JSValueConst this_val,
         return JS_EXCEPTION;
     ms_to_timeval(&times[0], atime);
     ms_to_timeval(&times[1], mtime);
-    ret = utimes(path, times);
+    ret = js_get_errno(utimes(path, times));
     JS_FreeCString(ctx, path);
-    return js_os_return(ctx, ret);
+    return JS_NewInt32(ctx, ret);
 }
 
 /* exec(args[, options]) -> exitcode */
@@ -2486,8 +2531,8 @@ static JSValue js_os_kill(JSContext *ctx, JSValueConst this_val,
         return JS_EXCEPTION;
     if (JS_ToInt32(ctx, &sig, argv[1]))
         return JS_EXCEPTION;
-    ret = kill(pid, sig);
-    return js_os_return(ctx, ret);
+    ret = js_get_errno(kill(pid, sig));
+    return JS_NewInt32(ctx, ret);
 }
 
 /* sleep(delay_ms) */
@@ -2502,8 +2547,8 @@ static JSValue js_os_sleep(JSContext *ctx, JSValueConst this_val,
         return JS_EXCEPTION;
     ts.tv_sec = delay / 1000;
     ts.tv_nsec = (delay % 1000) * 1000000;
-    ret = nanosleep(&ts, NULL);
-    return js_os_return(ctx, ret);
+    ret = js_get_errno(nanosleep(&ts, NULL));
+    return JS_NewInt32(ctx, ret);
 }
 
 /* dup(fd) */
@@ -2514,8 +2559,8 @@ static JSValue js_os_dup(JSContext *ctx, JSValueConst this_val,
     
     if (JS_ToInt32(ctx, &fd, argv[0]))
         return JS_EXCEPTION;
-    ret = dup(fd);
-    return js_os_return(ctx, ret);
+    ret = js_get_errno(dup(fd));
+    return JS_NewInt32(ctx, ret);
 }
 
 /* dup2(fd) */
@@ -2528,8 +2573,8 @@ static JSValue js_os_dup2(JSContext *ctx, JSValueConst this_val,
         return JS_EXCEPTION;
     if (JS_ToInt32(ctx, &fd2, argv[1]))
         return JS_EXCEPTION;
-    ret = dup2(fd, fd2);
-    return js_os_return(ctx, ret);
+    ret = js_get_errno(dup2(fd, fd2));
+    return JS_NewInt32(ctx, ret);
 }
 
 #endif /* !_WIN32 */
@@ -2725,23 +2770,30 @@ void js_std_free_handlers(JSRuntime *rt)
     }
 }
 
-static void js_std_dump_error1(JSContext *ctx, JSValueConst exception_val,
-                               BOOL is_throw)
+static void js_dump_obj(JSContext *ctx, FILE *f, JSValueConst val)
+{
+    const char *str;
+    
+    str = JS_ToCString(ctx, val);
+    if (str) {
+        fprintf(f, "%s\n", str);
+        JS_FreeCString(ctx, str);
+    } else {
+        fprintf(f, "[exception]\n");
+    }
+}
+
+static void js_std_dump_error1(JSContext *ctx, JSValueConst exception_val)
 {
     JSValue val;
-    const char *stack;
     BOOL is_error;
     
     is_error = JS_IsError(ctx, exception_val);
-    if (is_throw && !is_error)
-        printf("Throw: ");
-    js_print(ctx, JS_NULL, 1, (JSValueConst *)&exception_val);
+    js_dump_obj(ctx, stderr, exception_val);
     if (is_error) {
         val = JS_GetPropertyStr(ctx, exception_val, "stack");
         if (!JS_IsUndefined(val)) {
-            stack = JS_ToCString(ctx, val);
-            printf("%s\n", stack);
-            JS_FreeCString(ctx, stack);
+            js_dump_obj(ctx, stderr, val);
         }
         JS_FreeValue(ctx, val);
     }
@@ -2752,7 +2804,7 @@ void js_std_dump_error(JSContext *ctx)
     JSValue exception_val;
     
     exception_val = JS_GetException(ctx);
-    js_std_dump_error1(ctx, exception_val, TRUE);
+    js_std_dump_error1(ctx, exception_val);
     JS_FreeValue(ctx, exception_val);
 }
 
@@ -2761,8 +2813,8 @@ void js_std_promise_rejection_tracker(JSContext *ctx, JSValueConst promise,
                                       BOOL is_handled, void *opaque)
 {
     if (!is_handled) {
-        printf("Possibly unhandled promise rejection: ");
-        js_std_dump_error1(ctx, reason, FALSE);
+        fprintf(stderr, "Possibly unhandled promise rejection: ");
+        js_std_dump_error1(ctx, reason);
     }
 }
 
index 57f6969b1eaa825aa04d9c439db1cc9e21820b3f..230f6e47715578aed90bf2b19914d71757e0fd2a 100644 (file)
@@ -119,7 +119,6 @@ DEF(           eval, 5, 1, 1, npop_u16) /* func args... -> ret_val */
 DEF(     apply_eval, 3, 2, 1, u16) /* func array -> ret_eval */
 DEF(         regexp, 1, 2, 1, none) /* create a RegExp object from the pattern and a
                                        bytecode string */
-DEF( get_super_ctor, 1, 1, 1, none)
 DEF(      get_super, 1, 1, 1, none)
 DEF(         import, 1, 1, 1, none) /* dynamic module import */
 
index b19a4d9fdb1ee1e64cbbe308a448b0d5332fa014..cabb82b084608a3bf963b38b999164f7c91c1a01 100644 (file)
--- a/quickjs.c
+++ b/quickjs.c
@@ -284,6 +284,7 @@ struct JSRuntime {
     JSNumericOperations bigdecimal_ops;
     uint32_t operator_count;
 #endif
+    void *user_opaque;
 };
 
 struct JSClass {
@@ -1537,6 +1538,16 @@ JSRuntime *JS_NewRuntime2(const JSMallocFunctions *mf, void *opaque)
     return NULL;
 }
 
+void *JS_GetRuntimeOpaque(JSRuntime *rt)
+{
+    return rt->user_opaque;
+}
+
+void JS_SetRuntimeOpaque(JSRuntime *rt, void *opaque)
+{
+    rt->user_opaque = opaque;
+}
+
 /* default memory allocation functions with memory limitation */
 static inline size_t js_def_malloc_usable_size(void *ptr)
 {
@@ -2198,26 +2209,6 @@ static inline BOOL is_math_mode(JSContext *ctx)
 }
 #endif
 
-JSValue JS_NewInt64(JSContext *ctx, int64_t v)
-{
-    if (v == (int32_t)v) {
-        return JS_NewInt32(ctx, v);
-    } else {
-        return __JS_NewFloat64(ctx, (double)v);
-    }
-}
-
-static force_inline JSValue JS_NewUint32(JSContext *ctx, uint32_t val)
-{
-    JSValue v;
-    if (val <= 0x7fffffff) {
-        v = JS_MKVAL(JS_TAG_INT, val);
-    } else {
-        v = __JS_NewFloat64(ctx, val);
-    }
-    return v;
-}
-
 /* JSAtom support */
 
 #define JS_ATOM_TAG_INT (1U << 31)
@@ -9794,6 +9785,8 @@ static JSValue js_atof(JSContext *ctx, const char *str, const char **pp,
         if (*p == '.' && (p > p_start || to_digit((uint8_t)p[1]) < radix)) {
             is_float = TRUE;
             p++;
+            if (*p == sep)
+                goto fail;
             while (to_digit((uint8_t)*p) < radix ||
                    (*p == sep && to_digit((uint8_t)p[1]) < radix))
                 p++;
@@ -10129,7 +10122,6 @@ static __maybe_unused JSValue JS_ToIntegerFree(JSContext *ctx, JSValue val)
                 ret = JS_NewInt32(ctx, 0);
             } else {
                 /* convert -0 to +0 */
-                /* XXX: should not be done here ? */
                 d = trunc(d) + 0.0;
                 ret = JS_NewFloat64(ctx, d);
             }
@@ -10385,6 +10377,14 @@ int JS_ToInt64(JSContext *ctx, int64_t *pres, JSValueConst val)
     return JS_ToInt64Free(ctx, pres, JS_DupValue(ctx, val));
 }
 
+int JS_ToInt64Ext(JSContext *ctx, int64_t *pres, JSValueConst val)
+{
+    if (JS_IsBigInt(ctx, val))
+        return JS_ToBigInt64(ctx, pres, val);
+    else
+        return JS_ToInt64(ctx, pres, val);
+}
+
 /* return (<0, 0) in case of exception */
 static int JS_ToInt32Free(JSContext *ctx, int32_t *pres, JSValue val)
 {
@@ -11840,7 +11840,8 @@ static JSValue JS_CompactBigInt(JSContext *ctx, JSValue val)
 }
 
 /* must be kept in sync with JSOverloadableOperatorEnum */
-static const char *js_overloadable_operator_names[JS_OVOP_COUNT] = {
+/* XXX: use atoms ? */
+static const char js_overloadable_operator_names[JS_OVOP_COUNT][4] = {
     "+",
     "-",
     "*",
@@ -12894,7 +12895,7 @@ static no_inline __exception int js_binary_arith_slow(JSContext *ctx, JSValue *s
     handle_bigint:
         if (ctx->rt->bigint_ops.binary_arith(ctx, op, sp - 2, op1, op2))
             goto exception;
-    } else if (tag1 == JS_TAG_FLOAT64 || tag2 == JS_TAG_FLOAT64) {
+    } else {
         double dr;
         /* float64 result */
         if (JS_ToFloat64Free(ctx, &d1, op1)) {
@@ -13031,7 +13032,11 @@ static no_inline __exception int js_add_slow(JSContext *ctx, JSValue *sp)
     } else if (tag1 == JS_TAG_BIG_FLOAT || tag2 == JS_TAG_BIG_FLOAT) {
         if (ctx->rt->bigfloat_ops.binary_arith(ctx, OP_add, sp - 2, op1, op2))
             goto exception;
-    } else if (tag1 == JS_TAG_FLOAT64 || tag2 == JS_TAG_FLOAT64) {
+    } else if (tag1 == JS_TAG_BIG_INT || tag2 == JS_TAG_BIG_INT) {
+    handle_bigint:
+        if (ctx->rt->bigint_ops.binary_arith(ctx, OP_add, sp - 2, op1, op2))
+            goto exception;
+    } else {
         double d1, d2;
         /* float64 result */
         if (JS_ToFloat64Free(ctx, &d1, op1)) {
@@ -13040,10 +13045,9 @@ static no_inline __exception int js_add_slow(JSContext *ctx, JSValue *sp)
         }
         if (JS_ToFloat64Free(ctx, &d2, op2))
             goto exception;
+        if (is_math_mode(ctx) && is_safe_integer(d1) && is_safe_integer(d2))
+            goto handle_bigint;
         sp[-2] = __JS_NewFloat64(ctx, d1 + d2);
-    } else {
-        if (ctx->rt->bigint_ops.binary_arith(ctx, OP_add, sp - 2, op1, op2))
-            goto exception;
     }
     return 0;
  exception:
@@ -13642,6 +13646,28 @@ static no_inline int js_mul_pow10(JSContext *ctx, JSValue *sp)
 
 #else /* !CONFIG_BIGNUM */
 
+static JSValue JS_ThrowUnsupportedBigint(JSContext *ctx)
+{
+    return JS_ThrowTypeError(ctx, "bigint is not supported");
+}
+
+JSValue JS_NewBigInt64(JSContext *ctx, int64_t v)
+{
+    return JS_ThrowUnsupportedBigint(ctx);
+}
+
+JSValue JS_NewBigUint64(JSContext *ctx, uint64_t v)
+{
+    return JS_ThrowUnsupportedBigint(ctx);
+}
+
+int JS_ToBigInt64(JSContext *ctx, int64_t *pres, JSValueConst val)
+{
+    JS_ThrowUnsupportedBigint(ctx);
+    *pres = 0;
+    return -1;
+}
+
 static no_inline __exception int js_unary_arith_slow(JSContext *ctx,
                                                      JSValue *sp,
                                                      OPCodeEnum op)
@@ -16280,22 +16306,6 @@ static JSValue JS_CallInternal(JSContext *ctx, JSValueConst func_obj,
             }
             BREAK;
 
-        CASE(OP_get_super_ctor):
-            {
-                JSValue proto;
-                proto = JS_DupValue(ctx, JS_GetPrototype(ctx, sp[-1]));
-                if (JS_IsException(proto))
-                    goto exception;
-                if (!JS_IsConstructor(ctx, proto)) {
-                    JS_FreeValue(ctx, proto);
-                    JS_ThrowTypeError(ctx, "not a constructor");
-                    goto exception;
-                }
-                JS_FreeValue(ctx, sp[-1]);
-                sp[-1] = proto;
-            }
-            BREAK;
-
         CASE(OP_get_super):
             {
                 JSValue proto;
@@ -23821,7 +23831,7 @@ static __exception int js_parse_postfix_expr(JSParseState *s, BOOL accept_lparen
                 emit_atom(s, JS_ATOM_this_active_func);
                 emit_u16(s, 0);
 
-                emit_op(s, OP_get_super_ctor);
+                emit_op(s, OP_get_super);
 
                 emit_op(s, OP_scope_get_var);
                 emit_atom(s, JS_ATOM_new_target);
@@ -31993,10 +32003,10 @@ static __exception int js_parse_function_decl2(JSParseState *s,
                 js_parse_expect(s, ')');
                 goto fail;
             }
-            if (s->token.val == ',') {
-                if (next_token(s))
-                    goto fail;
-            }
+            if (s->token.val == ')')
+                break;
+            if (js_parse_expect(s, ','))
+                goto fail;
         }
         if ((func_type == JS_PARSE_FUNC_GETTER && fd->arg_count != 0) ||
             (func_type == JS_PARSE_FUNC_SETTER && fd->arg_count != 1)) {
@@ -34381,6 +34391,10 @@ int JS_SetModuleExportList(JSContext *ctx, JSModuleDef *m,
         case JS_DEF_PROP_DOUBLE:
             val = __JS_NewFloat64(ctx, e->u.f64);
             break;
+        case JS_DEF_OBJECT:
+            val = JS_NewObject(ctx);
+            JS_SetPropertyFunctionList(ctx, val, e->u.prop_list.tab, e->u.prop_list.len);
+            break;
         default:
             abort();
         }
@@ -37357,7 +37371,8 @@ static int64_t JS_FlattenIntoArray(JSContext *ctx, JSValueConst target,
             JS_ThrowTypeError(ctx, "Array too long");
             goto fail;
         }
-        if (JS_SetPropertyInt64(ctx, target, targetIndex, element) < 0)
+        if (JS_DefinePropertyValueInt64(ctx, target, targetIndex, element,
+                                        JS_PROP_C_W_E | JS_PROP_THROW) < 0)
             return -1;
         targetIndex++;
     }
@@ -37754,7 +37769,6 @@ static const JSCFunctionListEntry js_array_proto_funcs[] = {
     JS_CFUNC_DEF("copyWithin", 2, js_array_copyWithin ),
     JS_CFUNC_MAGIC_DEF("flatMap", 1, js_array_flatten, 1 ),
     JS_CFUNC_MAGIC_DEF("flat", 0, js_array_flatten, 0 ),
-    JS_CFUNC_MAGIC_DEF("flatten", 0, js_array_flatten, 0 ),
     JS_CFUNC_MAGIC_DEF("values", 0, js_create_array_iterator, JS_ITERATOR_KIND_VALUE ),
     JS_ALIAS_DEF("[Symbol.iterator]", "values" ),
     JS_CFUNC_MAGIC_DEF("keys", 0, js_create_array_iterator, JS_ITERATOR_KIND_KEY ),
@@ -39918,14 +39932,36 @@ static JSValue js_math_hypot(JSContext *ctx, JSValueConst this_val,
         if (JS_ToFloat64(ctx, &b, argv[1]))
             return JS_EXCEPTION;
         r = hypot(a, b);
-    } else {
+    } else if (argc == 0) {
         r = 0;
+    } else {
+        double *tab, a_max;
+        tab = js_malloc(ctx, sizeof(tab[0]) * argc);
+        if (!tab)
+            return JS_EXCEPTION;
+        /* avoid overflow by taking the maximum */
+        a_max = 0;
         for(i = 0; i < argc; i++) {
-            if (JS_ToFloat64(ctx, &a, argv[i]))
+            if (JS_ToFloat64(ctx, &a, argv[i])) {
+                js_free(ctx, tab);
                 return JS_EXCEPTION;
-            r += a;
+            }
+            a = fabs(a);
+            tab[i] = a;
+            if (a > a_max)
+                a_max = a;
+        }
+        if (a_max == 0 || !isfinite(a_max)) {
+            r = a_max;
+        } else {
+            r = 0;
+            for(i = 0; i < argc; i++) {
+                a = tab[i] / a_max;
+                r += a * a;
+            }
+            r = a_max * sqrt(r);
         }
-        r = sqrt(r);
+        js_free(ctx, tab);
     }
     return JS_NewFloat64(ctx, r);
 }
@@ -45234,10 +45270,10 @@ static JSValue js_promise_then_finally_func(JSContext *ctx, JSValueConst this_va
     }
     JS_FreeValue(ctx, ret);
     if (magic == 0) {
-        then_func = JS_NewCFunctionData(ctx, js_promise_finally_value_thunk, 1,
+        then_func = JS_NewCFunctionData(ctx, js_promise_finally_value_thunk, 0,
                                         0, 1, argv);
     } else {
-        then_func = JS_NewCFunctionData(ctx, js_promise_finally_thrower, 1,
+        then_func = JS_NewCFunctionData(ctx, js_promise_finally_thrower, 0,
                                         0, 1, argv);
     }
     if (JS_IsException(then_func)) {
@@ -50037,7 +50073,7 @@ static JSValue js_typed_array_indexOf(JSContext *ctx, JSValueConst this_val,
                                       int argc, JSValueConst *argv, int special)
 {
     JSObject *p;
-    int len, tag, is_int, is_big, k, stop, inc, res = -1;
+    int len, tag, is_int, is_bigint, k, stop, inc, res = -1;
     int64_t v64;
     double d;
     float f;
@@ -50080,7 +50116,11 @@ static JSValue js_typed_array_indexOf(JSContext *ctx, JSValueConst this_val,
         inc = 1;
     }
 
-    is_big = 0;
+    if (validate_typed_array(ctx, this_val))
+        goto exception;
+    p = JS_VALUE_GET_OBJ(this_val);
+
+    is_bigint = 0;
     is_int = 0; /* avoid warning */
     v64 = 0; /* avoid warning */
     tag = JS_VALUE_GET_NORM_TAG(argv[0]);
@@ -50095,10 +50135,20 @@ static JSValue js_typed_array_indexOf(JSContext *ctx, JSValueConst this_val,
         is_int = (v64 == d);
     } else
 #ifdef CONFIG_BIGNUM
-    if (tag == JS_TAG_BIG_INT || tag == JS_TAG_BIG_FLOAT) {
-        /* will a generic loop for bigint and bigfloat */
-        /* XXX: should use the generic loop in math_mode? */
-        is_big = 1;
+    if (tag == JS_TAG_BIG_INT) {
+        JSBigFloat *p1 = JS_VALUE_GET_PTR(argv[0]);
+        
+        if (p->class_id == JS_CLASS_BIG_INT64_ARRAY) {
+            if (bf_get_int64(&v64, &p1->num, 0) != 0)
+                goto done;
+        } else if (p->class_id == JS_CLASS_BIG_UINT64_ARRAY) {
+            if (bf_get_uint64((uint64_t *)&v64, &p1->num) != 0)
+                goto done;
+        } else {
+            goto done;
+        }
+        d = 0;
+        is_bigint = 1;
     } else
 #endif
     {
@@ -50172,7 +50222,7 @@ static JSValue js_typed_array_indexOf(JSContext *ctx, JSValueConst this_val,
         }
         break;
     case JS_CLASS_FLOAT32_ARRAY:
-        if (is_big)
+        if (is_bigint)
             break;
         if (isnan(d)) {
             const float *pv = p->u.array.u.float_ptr;
@@ -50196,7 +50246,7 @@ static JSValue js_typed_array_indexOf(JSContext *ctx, JSValueConst this_val,
         }
         break;
     case JS_CLASS_FLOAT64_ARRAY:
-        if (is_big)
+        if (is_bigint)
             break;
         if (isnan(d)) {
             const double *pv = p->u.array.u.double_ptr;
@@ -50221,20 +50271,22 @@ static JSValue js_typed_array_indexOf(JSContext *ctx, JSValueConst this_val,
         break;
 #ifdef CONFIG_BIGNUM
     case JS_CLASS_BIG_INT64_ARRAY:
+        if (is_bigint || (is_math_mode(ctx) && is_int &&
+                          v64 >= -MAX_SAFE_INTEGER &&
+                          v64 <= MAX_SAFE_INTEGER)) {
+            goto scan64;
+        }
+        break;
     case JS_CLASS_BIG_UINT64_ARRAY:
-        if (is_big || is_strict_mode(ctx)) {
-            /* generic loop for bignums, argv[0] is a bignum != NaN */
-            /* XXX: optimize with explicit values */
+        if (is_bigint || (is_math_mode(ctx) && is_int &&
+                          v64 >= 0 && v64 <= MAX_SAFE_INTEGER)) {
+            const uint64_t *pv;
+            uint64_t v;
+        scan64:
+            pv = p->u.array.u.uint64_ptr;
+            v = v64;
             for (; k != stop; k += inc) {
-                JSValue v = JS_GetPropertyUint32(ctx, this_val, k);
-                int ret;
-                if (JS_IsException(v))
-                    goto exception;
-                ret = js_same_value_zero(ctx, v, argv[0]);
-                JS_FreeValue(ctx, v);
-                if (ret) {
-                    if (ret < 0)
-                        goto exception;
+                if (pv[k] == v) {
                     res = k;
                     break;
                 }
index 57eded89f8adffc43d5bd8e3662811b1049e0efa..abf4d83bfcd81e348ba03d5a4282564770643fe9 100644 (file)
--- a/quickjs.h
+++ b/quickjs.h
@@ -335,6 +335,8 @@ void JS_SetMemoryLimit(JSRuntime *rt, size_t limit);
 void JS_SetGCThreshold(JSRuntime *rt, size_t gc_threshold);
 JSRuntime *JS_NewRuntime2(const JSMallocFunctions *mf, void *opaque);
 void JS_FreeRuntime(JSRuntime *rt);
+void *JS_GetRuntimeOpaque(JSRuntime *rt);
+void JS_SetRuntimeOpaque(JSRuntime *rt, void *opaque);
 typedef void JS_MarkFunc(JSRuntime *rt, JSGCObjectHeader *gp);
 void JS_MarkValue(JSRuntime *rt, JSValueConst val, JS_MarkFunc *mark_func);
 void JS_RunGC(JSRuntime *rt);
@@ -508,7 +510,28 @@ static js_force_inline JSValue JS_NewCatchOffset(JSContext *ctx, int32_t val)
     return JS_MKVAL(JS_TAG_CATCH_OFFSET, val);
 }
 
-JSValue JS_NewInt64(JSContext *ctx, int64_t v);
+static js_force_inline JSValue JS_NewInt64(JSContext *ctx, int64_t val)
+{
+    JSValue v;
+    if (val == (int32_t)val) {
+        v = JS_NewInt32(ctx, val);
+    } else {
+        v = __JS_NewFloat64(ctx, val);
+    }
+    return v;
+}
+
+static js_force_inline JSValue JS_NewUint32(JSContext *ctx, uint32_t val)
+{
+    JSValue v;
+    if (val <= 0x7fffffff) {
+        v = JS_NewInt32(ctx, val);
+    } else {
+        v = __JS_NewFloat64(ctx, val);
+    }
+    return v;
+}
+
 JSValue JS_NewBigInt64(JSContext *ctx, int64_t v);
 JSValue JS_NewBigUint64(JSContext *ctx, uint64_t v);
 
@@ -657,7 +680,10 @@ static int inline JS_ToUint32(JSContext *ctx, uint32_t *pres, JSValueConst val)
 int JS_ToInt64(JSContext *ctx, int64_t *pres, JSValueConst val);
 int JS_ToIndex(JSContext *ctx, uint64_t *plen, JSValueConst val);
 int JS_ToFloat64(JSContext *ctx, double *pres, JSValueConst val);
+/* return an exception if 'val' is a Number */
 int JS_ToBigInt64(JSContext *ctx, int64_t *pres, JSValueConst val);
+/* same as JS_ToInt64() but allow BigInt */
+int JS_ToInt64Ext(JSContext *ctx, int64_t *pres, JSValueConst val);
 
 JSValue JS_NewStringLen(JSContext *ctx, const char *str1, size_t len1);
 JSValue JS_NewString(JSContext *ctx, const char *str);
index 7c59b87df531a9a44bab95c94035a73f9c2cbc28..a0bd6ebfd51ec6b2b71de69abde9bb05fda6ec0a 100755 (executable)
@@ -50,21 +50,30 @@ fi
 
 if [ "$binary" = "yes" ] ; then
 
+make -j4 qjs run-test262
+make -j4 CONFIG_M32=y qjs32 run-test262-32
+strip qjs run-test262 qjs32 run-test262-32
+
 d="quickjs-linux-x86_64-${version}"
-name="quickjs-linux-x86_64-${version}"
 outdir="/tmp/${d}"
 
 rm -rf $outdir
 mkdir -p $outdir
 
-files="qjs run-test262"
+cp qjs run-test262 $outdir
+
+( cd /tmp/$d && rm -f ../${d}.zip && zip -r ../${d}.zip . )
+
+d="quickjs-linux-i686-${version}"
+outdir="/tmp/${d}"
 
-make -j4 $files
+rm -rf $outdir
+mkdir -p $outdir
 
-strip $files
-cp $files $outdir
+cp qjs32 $outdir/qjs
+cp run-test262-32 $outdir/run-test262
 
-( cd /tmp/$d && rm -f ../${name}.zip && zip -r ../${name}.zip . )
+( cd /tmp/$d && rm -f ../${d}.zip && zip -r ../${d}.zip . )
 
 fi
 
index 626520046a83fe406a7cfa2ef3ce8086cbbdb5cf..8eeecd1f631b97c1096a6c5f487840472dc62ce0 100644 (file)
@@ -385,8 +385,11 @@ static JSValue js_print(JSContext *ctx, JSValueConst this_val,
             str = JS_ToCString(ctx, argv[i]);
             if (!str)
                 return JS_EXCEPTION;
-            if (!strcmp(str, "Test262:AsyncTestComplete"))
+            if (!strcmp(str, "Test262:AsyncTestComplete")) {
                 async_done++;
+            } else if (strstart(str, "Test262:AsyncTestFailure", NULL)) {
+                async_done = 2; /* force an error */
+            }
             fputs(str, outfile);
             JS_FreeCString(ctx, str);
         }
index 91d3218573ee9302b95bda8b7fc22e848dba65a7..b6d385253f714d029b13f7331901fe55d4e9476f 100644 (file)
@@ -87,6 +87,7 @@ destructuring-binding
 dynamic-import
 export-star-as-namespace-from-module
 FinalizationGroup=skip
+FinalizationRegistry=skip
 Float32Array
 Float64Array
 for-in-order
index 4b20792d6ccfbf714d6137d17262d809ff127941..41521ae1ad387d54979cb66babeca1fbc7dcd6a0 100644 (file)
@@ -1,17 +1,22 @@
 test262/test/language/expressions/arrow-function/eval-var-scope-syntax-err.js:47: Test262Error: Expected a SyntaxError to be thrown but no exception was thrown at all
+test262/test/language/expressions/async-arrow-function/eval-var-scope-syntax-err.js:49: TypeError: $DONE() not called
+test262/test/language/expressions/async-function/named-eval-var-scope-syntax-err.js:33: TypeError: $DONE() not called
+test262/test/language/expressions/async-function/nameless-eval-var-scope-syntax-err.js:33: TypeError: $DONE() not called
 test262/test/language/expressions/async-generator/eval-var-scope-syntax-err.js:28: Test262Error: Expected a SyntaxError to be thrown but no exception was thrown at all
 test262/test/language/expressions/async-generator/named-eval-var-scope-syntax-err.js:28: Test262Error: Expected a SyntaxError to be thrown but no exception was thrown at all
-test262/test/language/expressions/class/super-evaluation-order.js:26: Test262Error: via ArgumentListEvaluation Expected SameValue(«0», «123») to be true
-test262/test/language/expressions/class/super-evaluation-order.js:26: strict mode: Test262Error: via ArgumentListEvaluation Expected SameValue(«0», «123») to be true
 test262/test/language/expressions/dynamic-import/usage-from-eval.js:26: TypeError: $DONE() not called
 test262/test/language/expressions/dynamic-import/usage-from-eval.js:26: strict mode: TypeError: $DONE() not called
 test262/test/language/expressions/function/eval-var-scope-syntax-err.js:48: Test262Error: Expected a SyntaxError to be thrown but no exception was thrown at all
 test262/test/language/expressions/generators/eval-var-scope-syntax-err.js:49: Test262Error: Expected a SyntaxError to be thrown but no exception was thrown at all
 test262/test/language/expressions/object/method-definition/async-gen-meth-eval-var-scope-syntax-err.js:32: Test262Error: Expected a SyntaxError to be thrown but no exception was thrown at all
+test262/test/language/expressions/object/method-definition/async-meth-eval-var-scope-syntax-err.js:36: TypeError: $DONE() not called
 test262/test/language/expressions/object/method-definition/gen-meth-eval-var-scope-syntax-err.js:54: Test262Error: Expected a SyntaxError to be thrown but no exception was thrown at all
 test262/test/language/expressions/object/method-definition/meth-eval-var-scope-syntax-err.js:50: Test262Error: Expected a SyntaxError to be thrown but no exception was thrown at all
 test262/test/language/expressions/optional-chaining/optional-call-preserves-this.js:21: TypeError: value has no property
 test262/test/language/expressions/optional-chaining/optional-call-preserves-this.js:15: strict mode: TypeError: value has no property
+test262/test/language/statements/async-function/eval-var-scope-syntax-err.js:33: TypeError: $DONE() not called
 test262/test/language/statements/async-generator/eval-var-scope-syntax-err.js:28: Test262Error: Expected a SyntaxError to be thrown but no exception was thrown at all
+test262/test/language/statements/for-await-of/async-gen-decl-dstr-array-elem-iter-rtrn-close-null.js:81: TypeError: $DONE() not called
+test262/test/language/statements/for-await-of/async-gen-decl-dstr-array-elem-iter-rtrn-close-null.js:81: strict mode: TypeError: $DONE() not called
 test262/test/language/statements/function/eval-var-scope-syntax-err.js:49: Test262Error: Expected a SyntaxError to be thrown but no exception was thrown at all
 test262/test/language/statements/generators/eval-var-scope-syntax-err.js:49: Test262Error: Expected a SyntaxError to be thrown but no exception was thrown at all
index b79444d43ad9c62e22d088812f417e0b97f7034d..0f05584a33c0d2d6c1c397b9f322668dcb2c707b 100644 (file)
@@ -917,11 +917,9 @@ function load_result(filename)
     var f, str, res;
     if (typeof std === "undefined")
         return null;
-    try {
-        f = std.open(filename, "r");
-    } catch(e) {
+    f = std.open(filename, "r");
+    if (!f)
         return null;
-    }
     str = f.readAsString();
     res = JSON.parse(str);
     f.close();
index edd5df30870b42011a998372293f61522e215ea4..bbb6629e3985d377c445e8924ecb46f5312cbd9f 100644 (file)
@@ -501,6 +501,10 @@ function test_regexp()
     a = eval("/\0a/");
     assert(a.toString(), "/\0a/");
     assert(a.exec("\0a")[0], "\0a");
+
+    assert(/{1a}/.toString(), "/{1a}/");
+    a = /a{1+/.exec("a{11");
+    assert(a, ["a{11"] );
 }
 
 function test_symbol()
index b5b1bd058cf29e1f7a6a657bf4466617f75deeaa..94a4d2a91babd4e4bad0e2dc3c945aa1274ce60f 100644 (file)
@@ -106,6 +106,9 @@ function test_popen()
     f.puts(content);
     f.close();
 
+    /* test loadFile */
+    assert(std.loadFile(fname), content);
+    
     /* execute the 'cat' shell command */
     f = std.popen("cat " + fname, "r");
     str = f.readAsString();
@@ -142,13 +145,19 @@ function test_os()
         buf[i] = i;
     assert(os.write(fd, buf.buffer, 0, buf.length) === buf.length);
 
-    assert(os.seek(fd, 0, os.SEEK_SET) === 0);
+    assert(os.seek(fd, 0, std.SEEK_SET) === 0);
     buf2 = new Uint8Array(buf.length);
     assert(os.read(fd, buf2.buffer, 0, buf2.length) === buf2.length);
     
     for(i = 0; i < buf.length; i++)
         assert(buf[i] == buf2[i]);
     
+    if (typeof BigInt !== "undefined") {
+        assert(os.seek(fd, BigInt(6), std.SEEK_SET), BigInt(6));
+        assert(os.read(fd, buf2.buffer, 0, 1) === 1);
+        assert(buf[6] == buf2[0]);
+    }
+    
     assert(os.close(fd) === 0);
 
     [files, err] = os.readdir(fdir);
index a72d9ae597ad352dc178b1936b5b29dc7d87cfbc..87bb2956ccf7b0b2a4906969f22ffcc6730de82a 100755 (executable)
@@ -1,8 +1,8 @@
 #!/bin/sh
 set -e
 
-url="ftp://ftp.unicode.org/Public/12.1.0/ucd"
-emoji_url="ftp://ftp.unicode.org/Public/emoji/12.0/emoji-data.txt"
+url="ftp://ftp.unicode.org/Public/13.0.0/ucd"
+emoji_url="${url}/emoji/emoji-data.txt"
 
 files="CaseFolding.txt DerivedNormalizationProps.txt PropList.txt \
 SpecialCasing.txt CompositionExclusions.txt ScriptExtensions.txt \
@@ -11,9 +11,9 @@ PropertyValueAliases.txt"
 
 mkdir -p unicode
 
-for f in $files; do
-    g="${url}/${f}"
-    wget $g -O unicode/$f
-done
+#for f in $files; do
+#    g="${url}/${f}"
+#    wget $g -O unicode/$f
+#done
     
 wget $emoji_url -O unicode/emoji-data.txt
index 08dd8d78a39777225d02cc04bdc8407ed2c33414..47b0e391b4b13280fd1b05eae6340f1219982fee 100644 (file)
@@ -66,6 +66,7 @@ DEF(Caucasian_Albanian, "Aghb")
 DEF(Chakma, "Cakm")
 DEF(Cham, "Cham")
 DEF(Cherokee, "Cher")
+DEF(Chorasmian, "Chrs")
 DEF(Common, "Zyyy")
 DEF(Coptic, "Copt,Qaac")
 DEF(Cuneiform, "Xsux")
@@ -73,6 +74,7 @@ DEF(Cypriot, "Cprt")
 DEF(Cyrillic, "Cyrl")
 DEF(Deseret, "Dsrt")
 DEF(Devanagari, "Deva")
+DEF(Dives_Akuru, "Diak")
 DEF(Dogra, "Dogr")
 DEF(Duployan, "Dupl")
 DEF(Egyptian_Hieroglyphs, "Egyp")
@@ -106,6 +108,7 @@ DEF(Kayah_Li, "Kali")
 DEF(Kharoshthi, "Khar")
 DEF(Khmer, "Khmr")
 DEF(Khojki, "Khoj")
+DEF(Khitan_Small_Script, "Kits")
 DEF(Khudawadi, "Sind")
 DEF(Lao, "Laoo")
 DEF(Latin, "Latn")
@@ -193,6 +196,7 @@ DEF(Ugaritic, "Ugar")
 DEF(Vai, "Vaii")
 DEF(Wancho, "Wcho")
 DEF(Warang_Citi, "Wara")
+DEF(Yezidi, "Yezi")
 DEF(Yi, "Yiii")
 DEF(Zanabazar_Square, "Zanb")
 #endif
@@ -244,11 +248,11 @@ DEF(Variation_Selector, "VS")
 DEF(White_Space, "space")
 DEF(Bidi_Mirrored, "Bidi_M")
 DEF(Emoji, "")
-DEF(Emoji_Component, "")
-DEF(Emoji_Modifier, "")
-DEF(Emoji_Modifier_Base, "")
-DEF(Emoji_Presentation, "")
-DEF(Extended_Pictographic, "")
+DEF(Emoji_Component, "EComp")
+DEF(Emoji_Modifier, "EMod")
+DEF(Emoji_Modifier_Base, "EBase")
+DEF(Emoji_Presentation, "EPres")
+DEF(Extended_Pictographic, "ExtPict")
 DEF(Default_Ignorable_Code_Point, "DI")
 DEF(ID_Start, "IDS")
 DEF(Case_Ignorable, "CI")