summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Bruederli <thomas@roundcube.net>2014-08-27 17:45:21 +0200
committerThomas Bruederli <thomas@roundcube.net>2014-08-27 17:45:21 +0200
commita98a4f8bb56eacffff1765ff09dd29af26e5fc12 (patch)
tree68101a1906303dbd0255c77e61fb058a52296294
parent812f37c5d1baa077f22a35240c5488f65d054260 (diff)
Remove 3rd party libs from our repository and define the dependencies in composer.json-dist.
Also remove the ancient utf8 lib and replace it with 'Patchwork UTF-8 for PHP'. For direct git checkouts, copy composer.json-dist into composer.json and run `php composer.phar install` to install the dependencies.
-rw-r--r--composer.json-dist39
-rw-r--r--installer/check.php15
-rw-r--r--installer/index.php9
-rw-r--r--program/include/iniset.php15
-rw-r--r--program/lib/Auth/SASL.php125
-rw-r--r--program/lib/Auth/SASL/Anonymous.php71
-rw-r--r--program/lib/Auth/SASL/Common.php105
-rw-r--r--program/lib/Auth/SASL/CramMD5.php68
-rw-r--r--program/lib/Auth/SASL/DigestMD5.php197
-rw-r--r--program/lib/Auth/SASL/External.php63
-rw-r--r--program/lib/Auth/SASL/Login.php65
-rw-r--r--program/lib/Auth/SASL/Plain.php63
-rw-r--r--program/lib/Auth/SASL/SCRAM.php306
-rw-r--r--program/lib/Crypt/GPG.php2386
-rw-r--r--program/lib/Crypt/GPG/ByteUtils.php105
-rw-r--r--program/lib/Crypt/GPG/DecryptStatusHandler.php344
-rw-r--r--program/lib/Crypt/GPG/Engine.php2006
-rw-r--r--program/lib/Crypt/GPG/Exceptions.php598
-rw-r--r--program/lib/Crypt/GPG/Key.php223
-rw-r--r--program/lib/Crypt/GPG/KeyGenerator.php790
-rw-r--r--program/lib/Crypt/GPG/KeyGeneratorErrorHandler.php121
-rw-r--r--program/lib/Crypt/GPG/KeyGeneratorStatusHandler.php173
-rw-r--r--program/lib/Crypt/GPG/PinEntry.php875
-rw-r--r--program/lib/Crypt/GPG/ProcessControl.php150
-rw-r--r--program/lib/Crypt/GPG/Signature.php427
-rw-r--r--program/lib/Crypt/GPG/SubKey.php672
-rw-r--r--program/lib/Crypt/GPG/UserId.php373
-rw-r--r--program/lib/Crypt/GPG/VerifyStatusHandler.php216
-rw-r--r--program/lib/Crypt/GPGAbstract.php508
-rw-r--r--program/lib/Mail/mime.php1499
-rw-r--r--program/lib/Mail/mimeDecode.php1003
-rw-r--r--program/lib/Mail/mimePart.php1260
-rw-r--r--program/lib/Net/IDNA2.php3402
-rw-r--r--program/lib/Net/IDNA2/Exception.php4
-rw-r--r--program/lib/Net/IDNA2/Exception/Nameprep.php6
-rw-r--r--program/lib/Net/LDAP3.php2618
-rw-r--r--program/lib/Net/LDAP3/Result.php152
-rw-r--r--program/lib/Net/SMTP.php1338
-rw-r--r--program/lib/Net/Sieve.php1274
-rw-r--r--program/lib/Net/Socket.php686
-rw-r--r--program/lib/PEAR.php1137
-rw-r--r--program/lib/PEAR5.php33
-rw-r--r--program/lib/Roundcube/bootstrap.php6
-rw-r--r--program/lib/Roundcube/rcube_charset.php26
-rw-r--r--program/lib/encoding/CP1250.map274
-rw-r--r--program/lib/encoding/CP1251.map274
-rw-r--r--program/lib/encoding/CP1252.map274
-rw-r--r--program/lib/encoding/CP1253.map274
-rw-r--r--program/lib/encoding/CP1254.map274
-rw-r--r--program/lib/encoding/CP1255.map274
-rw-r--r--program/lib/encoding/CP1256.map274
-rw-r--r--program/lib/encoding/CP1257.map274
-rw-r--r--program/lib/encoding/CP1258.map274
-rw-r--r--program/lib/encoding/ISO-8859-1.map303
-rw-r--r--program/lib/encoding/ISO-8859-10.map303
-rw-r--r--program/lib/encoding/ISO-8859-11.map297
-rw-r--r--program/lib/encoding/ISO-8859-13.map299
-rw-r--r--program/lib/encoding/ISO-8859-14.map301
-rw-r--r--program/lib/encoding/ISO-8859-15.map303
-rw-r--r--program/lib/encoding/ISO-8859-16.map299
-rw-r--r--program/lib/encoding/ISO-8859-2.map303
-rw-r--r--program/lib/encoding/ISO-8859-3.map296
-rw-r--r--program/lib/encoding/ISO-8859-4.map303
-rw-r--r--program/lib/encoding/ISO-8859-5.map303
-rw-r--r--program/lib/encoding/ISO-8859-6.map260
-rw-r--r--program/lib/encoding/ISO-8859-7.map308
-rw-r--r--program/lib/encoding/ISO-8859-8.map270
-rw-r--r--program/lib/encoding/ISO-8859-9.map307
-rw-r--r--program/lib/encoding/KOI8R.map302
-rw-r--r--program/lib/encoding/KSC5601.map17078
-rw-r--r--program/lib/utf8.class.php171
71 files changed, 70 insertions, 49954 deletions
diff --git a/composer.json-dist b/composer.json-dist
index e7462038d..7791ca907 100644
--- a/composer.json-dist
+++ b/composer.json-dist
@@ -4,13 +4,50 @@
"license": "GPL-3.0+",
"repositories": [
{
+ "type": "pear",
+ "url": "http://pear.php.net/"
+ },
+ {
"type": "composer",
"url": "http://plugins.roundcube.net/"
+ },
+ {
+ "type": "vcs",
+ "url": "git@github.com:roundcube/sample-plugin.git"
+ },
+ {
+ "type": "vcs",
+ "url": "git://git.kolab.org/git/pear/Net_LDAP3"
+ },
+ {
+ "type": "package",
+ "package": {
+ "name": "Net_SMTP",
+ "version": "dev-master",
+ "source": {
+ "url": "http://github.com/pear/Net_SMTP",
+ "type": "git",
+ "reference": "master"
+ }
+ }
}
],
"require": {
"php": ">=5.3.0",
- "roundcube/plugin-installer": ">=0.1.3"
+ "roundcube/plugin-installer": ">=0.1.3",
+ "pear/mail_mime": ">=1.8.9",
+ "pear/mail_mime-decode": ">=1.5.5",
+ "pear/net_smtp": "dev-master",
+ "pear-pear.php.net/auth_sasl": ">=1.0.6",
+ "pear-pear.php.net/net_idna2": ">=0.1.1",
+ "pear-pear.php.net/net_sieve": ">=1.3.2",
+ "pear-pear.php.net/net_ldap2": ">=2.0.12",
+ "kolab/Net_LDAP3": "dev-master",
+ "patchwork/utf8": "1.2.x"
+ },
+ "require-dev": {
+ "pear-pear.php.net/crypt_gpg": "*",
+ "phpunit/phpunit": "*"
},
"minimum-stability": "dev"
}
diff --git a/installer/check.php b/installer/check.php
index 31b4c2955..6974d3720 100644
--- a/installer/check.php
+++ b/installer/check.php
@@ -28,10 +28,13 @@ $optional_php_exts = array(
);
$required_libs = array(
- 'PEAR' => 'PEAR.php',
- 'Net_SMTP' => 'Net/SMTP.php',
- 'Net_IDNA2' => 'Net/IDNA2.php',
- 'Mail_mime' => 'Mail/mime.php',
+ 'PEAR' => 'pear.php.net',
+ 'Auth_SASL' => 'pear.php.net',
+ 'Net_SMTP' => 'pear.php.net',
+ 'Net_IDNA2' => 'pear.php.net',
+ 'Net_LDAP3' => 'git.kolab.org',
+ 'Mail_mime' => 'pear.php.net',
+ 'Mail_mimeDecode' => 'pear.php.net',
);
$ini_checks = array(
@@ -160,13 +163,13 @@ if (empty($found_db_driver)) {
<?php
-foreach ($required_libs as $classname => $file) {
+foreach ($required_libs as $classname => $vendor) {
@include_once $file;
if (class_exists($classname)) {
$RCI->pass($classname);
}
else {
- $RCI->fail($classname, "Failed to load $file", $source_urls[$classname]);
+ $RCI->fail($classname, "Failed to load class $classname from $vendor", $source_urls[$classname]);
}
echo "<br />";
}
diff --git a/installer/index.php b/installer/index.php
index 044eb3f57..b93ad2f94 100644
--- a/installer/index.php
+++ b/installer/index.php
@@ -3,9 +3,9 @@
/*
+-------------------------------------------------------------------------+
| Roundcube Webmail setup tool |
- | Version 0.9-git |
+ | Version 1.1-git |
| |
- | Copyright (C) 2009-2013, The Roundcube Dev Team |
+ | Copyright (C) 2009-2014, The Roundcube Dev Team |
| |
| This program is free software: you can redistribute it and/or modify |
| it under the terms of the GNU General Public License (with exceptions |
@@ -49,6 +49,11 @@ $include_path .= ini_get('include_path');
set_include_path($include_path);
+// include composer autoloader (if available)
+if (@file_exists(INSTALL_PATH . 'vendor/autoload.php')) {
+ require INSTALL_PATH . 'vendor/autoload.php';
+}
+
require_once 'Roundcube/bootstrap.php';
// deprecated aliases (to be removed)
require_once 'bc.php';
diff --git a/program/include/iniset.php b/program/include/iniset.php
index 5c3065489..b2cad4292 100644
--- a/program/include/iniset.php
+++ b/program/include/iniset.php
@@ -54,20 +54,25 @@ if (set_include_path($include_path) === false) {
// (does not work in safe mode)
@set_time_limit(120);
+// include composer autoloader (if available)
+if (@file_exists('vendor/autoload.php')) {
+ require 'vendor/autoload.php';
+}
+
// include Roundcube Framework
require_once 'Roundcube/bootstrap.php';
// register autoloader for rcmail app classes
spl_autoload_register('rcmail_autoload');
-// include composer autoloader (if available)
-if (@file_exists('vendor/autoload.php')) {
- require 'vendor/autoload.php';
-}
-
// backward compatybility (to be removed)
require_once INSTALL_PATH . 'program/include/bc.php';
+// load the UTF-8 portablity layer from Patchwor
+if (!function_exists('iconv') || !function_exists('utf8_encode') || !extension_loaded('mbstring')) {
+ \Patchwork\Utf8\Bootup::initAll();
+}
+
/**
* PHP5 autoloader routine for dynamic class loading
diff --git a/program/lib/Auth/SASL.php b/program/lib/Auth/SASL.php
deleted file mode 100644
index 5bd6eb096..000000000
--- a/program/lib/Auth/SASL.php
+++ /dev/null
@@ -1,125 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Copyright (c) 2002-2003 Richard Heyes |
-// | All rights reserved. |
-// | |
-// | Redistribution and use in source and binary forms, with or without |
-// | modification, are permitted provided that the following conditions |
-// | are met: |
-// | |
-// | o Redistributions of source code must retain the above copyright |
-// | notice, this list of conditions and the following disclaimer. |
-// | o Redistributions in binary form must reproduce the above copyright |
-// | notice, this list of conditions and the following disclaimer in the |
-// | documentation and/or other materials provided with the distribution.|
-// | o The names of the authors may not be used to endorse or promote |
-// | products derived from this software without specific prior written |
-// | permission. |
-// | |
-// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
-// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
-// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
-// | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
-// | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
-// | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
-// | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
-// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
-// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
-// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
-// | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
-// | |
-// +-----------------------------------------------------------------------+
-// | Author: Richard Heyes <richard@php.net> |
-// +-----------------------------------------------------------------------+
-//
-// $Id$
-
-/**
-* Client implementation of various SASL mechanisms
-*
-* @author Richard Heyes <richard@php.net>
-* @access public
-* @version 1.0
-* @package Auth_SASL
-*/
-
-require_once('PEAR.php');
-
-class Auth_SASL
-{
- /**
- * Factory class. Returns an object of the request
- * type.
- *
- * @param string $type One of: Anonymous
- * Plain
- * CramMD5
- * DigestMD5
- * SCRAM-* (any mechanism of the SCRAM family)
- * Types are not case sensitive
- */
- function &factory($type)
- {
- switch (strtolower($type)) {
- case 'anonymous':
- $filename = 'Auth/SASL/Anonymous.php';
- $classname = 'Auth_SASL_Anonymous';
- break;
-
- case 'login':
- $filename = 'Auth/SASL/Login.php';
- $classname = 'Auth_SASL_Login';
- break;
-
- case 'plain':
- $filename = 'Auth/SASL/Plain.php';
- $classname = 'Auth_SASL_Plain';
- break;
-
- case 'external':
- $filename = 'Auth/SASL/External.php';
- $classname = 'Auth_SASL_External';
- break;
-
- case 'crammd5':
- // $msg = 'Deprecated mechanism name. Use IANA-registered name: CRAM-MD5.';
- // trigger_error($msg, E_USER_DEPRECATED);
- case 'cram-md5':
- $filename = 'Auth/SASL/CramMD5.php';
- $classname = 'Auth_SASL_CramMD5';
- break;
-
- case 'digestmd5':
- // $msg = 'Deprecated mechanism name. Use IANA-registered name: DIGEST-MD5.';
- // trigger_error($msg, E_USER_DEPRECATED);
- case 'digest-md5':
- // $msg = 'DIGEST-MD5 is a deprecated SASL mechanism as per RFC-6331. Using it could be a security risk.';
- // trigger_error($msg, E_USER_NOTICE);
- $filename = 'Auth/SASL/DigestMD5.php';
- $classname = 'Auth_SASL_DigestMD5';
- break;
-
- default:
- $scram = '/^SCRAM-(.{1,9})$/i';
- if (preg_match($scram, $type, $matches))
- {
- $hash = $matches[1];
- $filename = dirname(__FILE__) .'/SASL/SCRAM.php';
- $classname = 'Auth_SASL_SCRAM';
- $parameter = $hash;
- break;
- }
- return PEAR::raiseError('Invalid SASL mechanism type');
- break;
- }
-
- require_once($filename);
- if (isset($parameter))
- $obj = new $classname($parameter);
- else
- $obj = new $classname();
- return $obj;
- }
-}
-
-?>
diff --git a/program/lib/Auth/SASL/Anonymous.php b/program/lib/Auth/SASL/Anonymous.php
deleted file mode 100644
index 081190936..000000000
--- a/program/lib/Auth/SASL/Anonymous.php
+++ /dev/null
@@ -1,71 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Copyright (c) 2002-2003 Richard Heyes |
-// | All rights reserved. |
-// | |
-// | Redistribution and use in source and binary forms, with or without |
-// | modification, are permitted provided that the following conditions |
-// | are met: |
-// | |
-// | o Redistributions of source code must retain the above copyright |
-// | notice, this list of conditions and the following disclaimer. |
-// | o Redistributions in binary form must reproduce the above copyright |
-// | notice, this list of conditions and the following disclaimer in the |
-// | documentation and/or other materials provided with the distribution.|
-// | o The names of the authors may not be used to endorse or promote |
-// | products derived from this software without specific prior written |
-// | permission. |
-// | |
-// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
-// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
-// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
-// | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
-// | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
-// | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
-// | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
-// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
-// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
-// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
-// | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
-// | |
-// +-----------------------------------------------------------------------+
-// | Author: Richard Heyes <richard@php.net> |
-// +-----------------------------------------------------------------------+
-//
-// $Id$
-
-/**
-* Implmentation of ANONYMOUS SASL mechanism
-*
-* @author Richard Heyes <richard@php.net>
-* @access public
-* @version 1.0
-* @package Auth_SASL
-*/
-
-require_once('Auth/SASL/Common.php');
-
-class Auth_SASL_Anonymous extends Auth_SASL_Common
-{
- /**
- * Not much to do here except return the token supplied.
- * No encoding, hashing or encryption takes place for this
- * mechanism, simply one of:
- * o An email address
- * o An opaque string not containing "@" that can be interpreted
- * by the sysadmin
- * o Nothing
- *
- * We could have some logic here for the second option, but this
- * would by no means create something interpretable.
- *
- * @param string $token Optional email address or string to provide
- * as trace information.
- * @return string The unaltered input token
- */
- function getResponse($token = '')
- {
- return $token;
- }
-}
-?> \ No newline at end of file
diff --git a/program/lib/Auth/SASL/Common.php b/program/lib/Auth/SASL/Common.php
deleted file mode 100644
index d8c5610d1..000000000
--- a/program/lib/Auth/SASL/Common.php
+++ /dev/null
@@ -1,105 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Copyright (c) 2002-2003 Richard Heyes |
-// | All rights reserved. |
-// | |
-// | Redistribution and use in source and binary forms, with or without |
-// | modification, are permitted provided that the following conditions |
-// | are met: |
-// | |
-// | o Redistributions of source code must retain the above copyright |
-// | notice, this list of conditions and the following disclaimer. |
-// | o Redistributions in binary form must reproduce the above copyright |
-// | notice, this list of conditions and the following disclaimer in the |
-// | documentation and/or other materials provided with the distribution.|
-// | o The names of the authors may not be used to endorse or promote |
-// | products derived from this software without specific prior written |
-// | permission. |
-// | |
-// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
-// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
-// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
-// | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
-// | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
-// | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
-// | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
-// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
-// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
-// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
-// | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
-// | |
-// +-----------------------------------------------------------------------+
-// | Author: Richard Heyes <richard@php.net> |
-// +-----------------------------------------------------------------------+
-//
-// $Id$
-
-/**
-* Common functionality to SASL mechanisms
-*
-* @author Richard Heyes <richard@php.net>
-* @access public
-* @version 1.0
-* @package Auth_SASL
-*/
-
-class Auth_SASL_Common
-{
- /**
- * Function which implements HMAC MD5 digest
- *
- * @param string $key The secret key
- * @param string $data The data to hash
- * @param bool $raw_output Whether the digest is returned in binary or hexadecimal format.
- *
- * @return string The HMAC-MD5 digest
- */
- function _HMAC_MD5($key, $data, $raw_output = FALSE)
- {
- if (strlen($key) > 64) {
- $key = pack('H32', md5($key));
- }
-
- if (strlen($key) < 64) {
- $key = str_pad($key, 64, chr(0));
- }
-
- $k_ipad = substr($key, 0, 64) ^ str_repeat(chr(0x36), 64);
- $k_opad = substr($key, 0, 64) ^ str_repeat(chr(0x5C), 64);
-
- $inner = pack('H32', md5($k_ipad . $data));
- $digest = md5($k_opad . $inner, $raw_output);
-
- return $digest;
- }
-
- /**
- * Function which implements HMAC-SHA-1 digest
- *
- * @param string $key The secret key
- * @param string $data The data to hash
- * @param bool $raw_output Whether the digest is returned in binary or hexadecimal format.
- * @return string The HMAC-SHA-1 digest
- * @author Jehan <jehan.marmottard@gmail.com>
- * @access protected
- */
- protected function _HMAC_SHA1($key, $data, $raw_output = FALSE)
- {
- if (strlen($key) > 64) {
- $key = sha1($key, TRUE);
- }
-
- if (strlen($key) < 64) {
- $key = str_pad($key, 64, chr(0));
- }
-
- $k_ipad = substr($key, 0, 64) ^ str_repeat(chr(0x36), 64);
- $k_opad = substr($key, 0, 64) ^ str_repeat(chr(0x5C), 64);
-
- $inner = pack('H40', sha1($k_ipad . $data));
- $digest = sha1($k_opad . $inner, $raw_output);
-
- return $digest;
- }
-}
-?>
diff --git a/program/lib/Auth/SASL/CramMD5.php b/program/lib/Auth/SASL/CramMD5.php
deleted file mode 100644
index d3fbf179b..000000000
--- a/program/lib/Auth/SASL/CramMD5.php
+++ /dev/null
@@ -1,68 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Copyright (c) 2002-2003 Richard Heyes |
-// | All rights reserved. |
-// | |
-// | Redistribution and use in source and binary forms, with or without |
-// | modification, are permitted provided that the following conditions |
-// | are met: |
-// | |
-// | o Redistributions of source code must retain the above copyright |
-// | notice, this list of conditions and the following disclaimer. |
-// | o Redistributions in binary form must reproduce the above copyright |
-// | notice, this list of conditions and the following disclaimer in the |
-// | documentation and/or other materials provided with the distribution.|
-// | o The names of the authors may not be used to endorse or promote |
-// | products derived from this software without specific prior written |
-// | permission. |
-// | |
-// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
-// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
-// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
-// | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
-// | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
-// | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
-// | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
-// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
-// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
-// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
-// | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
-// | |
-// +-----------------------------------------------------------------------+
-// | Author: Richard Heyes <richard@php.net> |
-// +-----------------------------------------------------------------------+
-//
-// $Id$
-
-/**
-* Implmentation of CRAM-MD5 SASL mechanism
-*
-* @author Richard Heyes <richard@php.net>
-* @access public
-* @version 1.0
-* @package Auth_SASL
-*/
-
-require_once('Auth/SASL/Common.php');
-
-class Auth_SASL_CramMD5 extends Auth_SASL_Common
-{
- /**
- * Implements the CRAM-MD5 SASL mechanism
- * This DOES NOT base64 encode the return value,
- * you will need to do that yourself.
- *
- * @param string $user Username
- * @param string $pass Password
- * @param string $challenge The challenge supplied by the server.
- * this should be already base64_decoded.
- *
- * @return string The string to pass back to the server, of the form
- * "<user> <digest>". This is NOT base64_encoded.
- */
- function getResponse($user, $pass, $challenge)
- {
- return $user . ' ' . $this->_HMAC_MD5($pass, $challenge);
- }
-}
-?> \ No newline at end of file
diff --git a/program/lib/Auth/SASL/DigestMD5.php b/program/lib/Auth/SASL/DigestMD5.php
deleted file mode 100644
index 07007b7c9..000000000
--- a/program/lib/Auth/SASL/DigestMD5.php
+++ /dev/null
@@ -1,197 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Copyright (c) 2002-2003 Richard Heyes |
-// | All rights reserved. |
-// | |
-// | Redistribution and use in source and binary forms, with or without |
-// | modification, are permitted provided that the following conditions |
-// | are met: |
-// | |
-// | o Redistributions of source code must retain the above copyright |
-// | notice, this list of conditions and the following disclaimer. |
-// | o Redistributions in binary form must reproduce the above copyright |
-// | notice, this list of conditions and the following disclaimer in the |
-// | documentation and/or other materials provided with the distribution.|
-// | o The names of the authors may not be used to endorse or promote |
-// | products derived from this software without specific prior written |
-// | permission. |
-// | |
-// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
-// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
-// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
-// | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
-// | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
-// | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
-// | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
-// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
-// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
-// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
-// | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
-// | |
-// +-----------------------------------------------------------------------+
-// | Author: Richard Heyes <richard@php.net> |
-// +-----------------------------------------------------------------------+
-//
-// $Id$
-
-/**
-* Implmentation of DIGEST-MD5 SASL mechanism
-*
-* @author Richard Heyes <richard@php.net>
-* @access public
-* @version 1.0
-* @package Auth_SASL
-*/
-
-require_once('Auth/SASL/Common.php');
-
-class Auth_SASL_DigestMD5 extends Auth_SASL_Common
-{
- /**
- * Provides the (main) client response for DIGEST-MD5
- * requires a few extra parameters than the other
- * mechanisms, which are unavoidable.
- *
- * @param string $authcid Authentication id (username)
- * @param string $pass Password
- * @param string $challenge The digest challenge sent by the server
- * @param string $hostname The hostname of the machine you're connecting to
- * @param string $service The servicename (eg. imap, pop, acap etc)
- * @param string $authzid Authorization id (username to proxy as)
- * @return string The digest response (NOT base64 encoded)
- * @access public
- */
- function getResponse($authcid, $pass, $challenge, $hostname, $service, $authzid = '')
- {
- $challenge = $this->_parseChallenge($challenge);
- $authzid_string = '';
- if ($authzid != '') {
- $authzid_string = ',authzid="' . $authzid . '"';
- }
-
- if (!empty($challenge)) {
- $cnonce = $this->_getCnonce();
- $digest_uri = sprintf('%s/%s', $service, $hostname);
- $response_value = $this->_getResponseValue($authcid, $pass, $challenge['realm'], $challenge['nonce'], $cnonce, $digest_uri, $authzid);
-
- if ($challenge['realm']) {
- return sprintf('username="%s",realm="%s"' . $authzid_string .
-',nonce="%s",cnonce="%s",nc=00000001,qop=auth,digest-uri="%s",response=%s,maxbuf=%d', $authcid, $challenge['realm'], $challenge['nonce'], $cnonce, $digest_uri, $response_value, $challenge['maxbuf']);
- } else {
- return sprintf('username="%s"' . $authzid_string . ',nonce="%s",cnonce="%s",nc=00000001,qop=auth,digest-uri="%s",response=%s,maxbuf=%d', $authcid, $challenge['nonce'], $cnonce, $digest_uri, $response_value, $challenge['maxbuf']);
- }
- } else {
- return PEAR::raiseError('Invalid digest challenge');
- }
- }
-
- /**
- * Parses and verifies the digest challenge*
- *
- * @param string $challenge The digest challenge
- * @return array The parsed challenge as an assoc
- * array in the form "directive => value".
- * @access private
- */
- function _parseChallenge($challenge)
- {
- $tokens = array();
- while (preg_match('/^([a-z-]+)=("[^"]+(?<!\\\)"|[^,]+)/i', $challenge, $matches)) {
-
- // Ignore these as per rfc2831
- if ($matches[1] == 'opaque' OR $matches[1] == 'domain') {
- $challenge = substr($challenge, strlen($matches[0]) + 1);
- continue;
- }
-
- // Allowed multiple "realm" and "auth-param"
- if (!empty($tokens[$matches[1]]) AND ($matches[1] == 'realm' OR $matches[1] == 'auth-param')) {
- if (is_array($tokens[$matches[1]])) {
- $tokens[$matches[1]][] = preg_replace('/^"(.*)"$/', '\\1', $matches[2]);
- } else {
- $tokens[$matches[1]] = array($tokens[$matches[1]], preg_replace('/^"(.*)"$/', '\\1', $matches[2]));
- }
-
- // Any other multiple instance = failure
- } elseif (!empty($tokens[$matches[1]])) {
- $tokens = array();
- break;
-
- } else {
- $tokens[$matches[1]] = preg_replace('/^"(.*)"$/', '\\1', $matches[2]);
- }
-
- // Remove the just parsed directive from the challenge
- $challenge = substr($challenge, strlen($matches[0]) + 1);
- }
-
- /**
- * Defaults and required directives
- */
- // Realm
- if (empty($tokens['realm'])) {
- $tokens['realm'] = "";
- }
-
- // Maxbuf
- if (empty($tokens['maxbuf'])) {
- $tokens['maxbuf'] = 65536;
- }
-
- // Required: nonce, algorithm
- if (empty($tokens['nonce']) OR empty($tokens['algorithm'])) {
- return array();
- }
-
- return $tokens;
- }
-
- /**
- * Creates the response= part of the digest response
- *
- * @param string $authcid Authentication id (username)
- * @param string $pass Password
- * @param string $realm Realm as provided by the server
- * @param string $nonce Nonce as provided by the server
- * @param string $cnonce Client nonce
- * @param string $digest_uri The digest-uri= value part of the response
- * @param string $authzid Authorization id
- * @return string The response= part of the digest response
- * @access private
- */
- function _getResponseValue($authcid, $pass, $realm, $nonce, $cnonce, $digest_uri, $authzid = '')
- {
- if ($authzid == '') {
- $A1 = sprintf('%s:%s:%s', pack('H32', md5(sprintf('%s:%s:%s', $authcid, $realm, $pass))), $nonce, $cnonce);
- } else {
- $A1 = sprintf('%s:%s:%s:%s', pack('H32', md5(sprintf('%s:%s:%s', $authcid, $realm, $pass))), $nonce, $cnonce, $authzid);
- }
- $A2 = 'AUTHENTICATE:' . $digest_uri;
- return md5(sprintf('%s:%s:00000001:%s:auth:%s', md5($A1), $nonce, $cnonce, md5($A2)));
- }
-
- /**
- * Creates the client nonce for the response
- *
- * @return string The cnonce value
- * @access private
- */
- function _getCnonce()
- {
- if (@file_exists('/dev/urandom') && $fd = @fopen('/dev/urandom', 'r')) {
- return base64_encode(fread($fd, 32));
-
- } elseif (@file_exists('/dev/random') && $fd = @fopen('/dev/random', 'r')) {
- return base64_encode(fread($fd, 32));
-
- } else {
- $str = '';
- for ($i=0; $i<32; $i++) {
- $str .= chr(mt_rand(0, 255));
- }
-
- return base64_encode($str);
- }
- }
-}
-?>
diff --git a/program/lib/Auth/SASL/External.php b/program/lib/Auth/SASL/External.php
deleted file mode 100644
index c5ae25e75..000000000
--- a/program/lib/Auth/SASL/External.php
+++ /dev/null
@@ -1,63 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Copyright (c) 2008 Christoph Schulz |
-// | All rights reserved. |
-// | |
-// | Redistribution and use in source and binary forms, with or without |
-// | modification, are permitted provided that the following conditions |
-// | are met: |
-// | |
-// | o Redistributions of source code must retain the above copyright |
-// | notice, this list of conditions and the following disclaimer. |
-// | o Redistributions in binary form must reproduce the above copyright |
-// | notice, this list of conditions and the following disclaimer in the |
-// | documentation and/or other materials provided with the distribution.|
-// | o The names of the authors may not be used to endorse or promote |
-// | products derived from this software without specific prior written |
-// | permission. |
-// | |
-// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
-// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
-// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
-// | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
-// | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
-// | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
-// | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
-// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
-// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
-// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
-// | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
-// | |
-// +-----------------------------------------------------------------------+
-// | Author: Christoph Schulz <develop@kristov.de> |
-// +-----------------------------------------------------------------------+
-//
-// $Id$
-
-/**
-* Implmentation of EXTERNAL SASL mechanism
-*
-* @author Christoph Schulz <develop@kristov.de>
-* @access public
-* @version 1.0.3
-* @package Auth_SASL
-*/
-
-require_once('Auth/SASL/Common.php');
-
-class Auth_SASL_External extends Auth_SASL_Common
-{
- /**
- * Returns EXTERNAL response
- *
- * @param string $authcid Authentication id (username)
- * @param string $pass Password
- * @param string $authzid Autorization id
- * @return string EXTERNAL Response
- */
- function getResponse($authcid, $pass, $authzid = '')
- {
- return $authzid;
- }
-}
-?>
diff --git a/program/lib/Auth/SASL/Login.php b/program/lib/Auth/SASL/Login.php
deleted file mode 100644
index 918daeedd..000000000
--- a/program/lib/Auth/SASL/Login.php
+++ /dev/null
@@ -1,65 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Copyright (c) 2002-2003 Richard Heyes |
-// | All rights reserved. |
-// | |
-// | Redistribution and use in source and binary forms, with or without |
-// | modification, are permitted provided that the following conditions |
-// | are met: |
-// | |
-// | o Redistributions of source code must retain the above copyright |
-// | notice, this list of conditions and the following disclaimer. |
-// | o Redistributions in binary form must reproduce the above copyright |
-// | notice, this list of conditions and the following disclaimer in the |
-// | documentation and/or other materials provided with the distribution.|
-// | o The names of the authors may not be used to endorse or promote |
-// | products derived from this software without specific prior written |
-// | permission. |
-// | |
-// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
-// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
-// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
-// | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
-// | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
-// | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
-// | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
-// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
-// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
-// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
-// | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
-// | |
-// +-----------------------------------------------------------------------+
-// | Author: Richard Heyes <richard@php.net> |
-// +-----------------------------------------------------------------------+
-//
-// $Id$
-
-/**
-* This is technically not a SASL mechanism, however
-* it's used by Net_Sieve, Net_Cyrus and potentially
-* other protocols , so here is a good place to abstract
-* it.
-*
-* @author Richard Heyes <richard@php.net>
-* @access public
-* @version 1.0
-* @package Auth_SASL
-*/
-
-require_once('Auth/SASL/Common.php');
-
-class Auth_SASL_Login extends Auth_SASL_Common
-{
- /**
- * Pseudo SASL LOGIN mechanism
- *
- * @param string $user Username
- * @param string $pass Password
- * @return string LOGIN string
- */
- function getResponse($user, $pass)
- {
- return sprintf('LOGIN %s %s', $user, $pass);
- }
-}
-?> \ No newline at end of file
diff --git a/program/lib/Auth/SASL/Plain.php b/program/lib/Auth/SASL/Plain.php
deleted file mode 100644
index 57894d042..000000000
--- a/program/lib/Auth/SASL/Plain.php
+++ /dev/null
@@ -1,63 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Copyright (c) 2002-2003 Richard Heyes |
-// | All rights reserved. |
-// | |
-// | Redistribution and use in source and binary forms, with or without |
-// | modification, are permitted provided that the following conditions |
-// | are met: |
-// | |
-// | o Redistributions of source code must retain the above copyright |
-// | notice, this list of conditions and the following disclaimer. |
-// | o Redistributions in binary form must reproduce the above copyright |
-// | notice, this list of conditions and the following disclaimer in the |
-// | documentation and/or other materials provided with the distribution.|
-// | o The names of the authors may not be used to endorse or promote |
-// | products derived from this software without specific prior written |
-// | permission. |
-// | |
-// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
-// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
-// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
-// | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
-// | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
-// | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
-// | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
-// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
-// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
-// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
-// | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
-// | |
-// +-----------------------------------------------------------------------+
-// | Author: Richard Heyes <richard@php.net> |
-// +-----------------------------------------------------------------------+
-//
-// $Id$
-
-/**
-* Implmentation of PLAIN SASL mechanism
-*
-* @author Richard Heyes <richard@php.net>
-* @access public
-* @version 1.0
-* @package Auth_SASL
-*/
-
-require_once('Auth/SASL/Common.php');
-
-class Auth_SASL_Plain extends Auth_SASL_Common
-{
- /**
- * Returns PLAIN response
- *
- * @param string $authcid Authentication id (username)
- * @param string $pass Password
- * @param string $authzid Autorization id
- * @return string PLAIN Response
- */
- function getResponse($authcid, $pass, $authzid = '')
- {
- return $authzid . chr(0) . $authcid . chr(0) . $pass;
- }
-}
-?>
diff --git a/program/lib/Auth/SASL/SCRAM.php b/program/lib/Auth/SASL/SCRAM.php
deleted file mode 100644
index cbca500e4..000000000
--- a/program/lib/Auth/SASL/SCRAM.php
+++ /dev/null
@@ -1,306 +0,0 @@
-<?php
-// +-----------------------------------------------------------------------+
-// | Copyright (c) 2011 Jehan |
-// | All rights reserved. |
-// | |
-// | Redistribution and use in source and binary forms, with or without |
-// | modification, are permitted provided that the following conditions |
-// | are met: |
-// | |
-// | o Redistributions of source code must retain the above copyright |
-// | notice, this list of conditions and the following disclaimer. |
-// | o Redistributions in binary form must reproduce the above copyright |
-// | notice, this list of conditions and the following disclaimer in the |
-// | documentation and/or other materials provided with the distribution.|
-// | o The names of the authors may not be used to endorse or promote |
-// | products derived from this software without specific prior written |
-// | permission. |
-// | |
-// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
-// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
-// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
-// | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
-// | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
-// | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
-// | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
-// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
-// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
-// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
-// | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
-// | |
-// +-----------------------------------------------------------------------+
-// | Author: Jehan <jehan.marmottard@gmail.com |
-// +-----------------------------------------------------------------------+
-//
-// $Id$
-
-/**
-* Implementation of SCRAM-* SASL mechanisms.
-* SCRAM mechanisms have 3 main steps (initial response, response to the server challenge, then server signature
-* verification) which keep state-awareness. Therefore a single class instanciation must be done and reused for the whole
-* authentication process.
-*
-* @author Jehan <jehan.marmottard@gmail.com>
-* @access public
-* @version 1.0
-* @package Auth_SASL
-*/
-
-require_once('Auth/SASL/Common.php');
-
-class Auth_SASL_SCRAM extends Auth_SASL_Common
-{
- /**
- * Construct a SCRAM-H client where 'H' is a cryptographic hash function.
- *
- * @param string $hash The name cryptographic hash function 'H' as registered by IANA in the "Hash Function Textual
- * Names" registry.
- * @link http://www.iana.org/assignments/hash-function-text-names/hash-function-text-names.xml "Hash Function Textual
- * Names"
- * format of core PHP hash function.
- * @access public
- */
- function __construct($hash)
- {
- // Though I could be strict, I will actually also accept the naming used in the PHP core hash framework.
- // For instance "sha1" is accepted, while the registered hash name should be "SHA-1".
- $hash = strtolower($hash);
- $hashes = array('md2' => 'md2',
- 'md5' => 'md5',
- 'sha-1' => 'sha1',
- 'sha1' => 'sha1',
- 'sha-224' > 'sha224',
- 'sha224' > 'sha224',
- 'sha-256' => 'sha256',
- 'sha256' => 'sha256',
- 'sha-384' => 'sha384',
- 'sha384' => 'sha384',
- 'sha-512' => 'sha512',
- 'sha512' => 'sha512');
- if (function_exists('hash_hmac') && isset($hashes[$hash]))
- {
- $this->hash = create_function('$data', 'return hash("' . $hashes[$hash] . '", $data, TRUE);');
- $this->hmac = create_function('$key,$str,$raw', 'return hash_hmac("' . $hashes[$hash] . '", $str, $key, $raw);');
- }
- elseif ($hash == 'md5')
- {
- $this->hash = create_function('$data', 'return md5($data, true);');
- $this->hmac = array($this, '_HMAC_MD5');
- }
- elseif (in_array($hash, array('sha1', 'sha-1')))
- {
- $this->hash = create_function('$data', 'return sha1($data, true);');
- $this->hmac = array($this, '_HMAC_SHA1');
- }
- else
- return PEAR::raiseError('Invalid SASL mechanism type');
- }
-
- /**
- * Provides the (main) client response for SCRAM-H.
- *
- * @param string $authcid Authentication id (username)
- * @param string $pass Password
- * @param string $challenge The challenge sent by the server.
- * If the challenge is NULL or an empty string, the result will be the "initial response".
- * @param string $authzid Authorization id (username to proxy as)
- * @return string|false The response (binary, NOT base64 encoded)
- * @access public
- */
- public function getResponse($authcid, $pass, $challenge = NULL, $authzid = NULL)
- {
- $authcid = $this->_formatName($authcid);
- if (empty($authcid))
- {
- return false;
- }
- if (!empty($authzid))
- {
- $authzid = $this->_formatName($authzid);
- if (empty($authzid))
- {
- return false;
- }
- }
-
- if (empty($challenge))
- {
- return $this->_generateInitialResponse($authcid, $authzid);
- }
- else
- {
- return $this->_generateResponse($challenge, $pass);
- }
-
- }
-
- /**
- * Prepare a name for inclusion in a SCRAM response.
- *
- * @param string $username a name to be prepared.
- * @return string the reformated name.
- * @access private
- */
- private function _formatName($username)
- {
- // TODO: prepare through the SASLprep profile of the stringprep algorithm.
- // See RFC-4013.
-
- $username = str_replace('=', '=3D', $username);
- $username = str_replace(',', '=2C', $username);
- return $username;
- }
-
- /**
- * Generate the initial response which can be either sent directly in the first message or as a response to an empty
- * server challenge.
- *
- * @param string $authcid Prepared authentication identity.
- * @param string $authzid Prepared authorization identity.
- * @return string The SCRAM response to send.
- * @access private
- */
- private function _generateInitialResponse($authcid, $authzid)
- {
- $init_rep = '';
- $gs2_cbind_flag = 'n,'; // TODO: support channel binding.
- $this->gs2_header = $gs2_cbind_flag . (!empty($authzid)? 'a=' . $authzid : '') . ',';
-
- // I must generate a client nonce and "save" it for later comparison on second response.
- $this->cnonce = $this->_getCnonce();
- // XXX: in the future, when mandatory and/or optional extensions are defined in any updated RFC,
- // this message can be updated.
- $this->first_message_bare = 'n=' . $authcid . ',r=' . $this->cnonce;
- return $this->gs2_header . $this->first_message_bare;
- }
-
- /**
- * Parses and verifies a non-empty SCRAM challenge.
- *
- * @param string $challenge The SCRAM challenge
- * @return string|false The response to send; false in case of wrong challenge or if an initial response has not
- * been generated first.
- * @access private
- */
- private function _generateResponse($challenge, $password)
- {
- // XXX: as I don't support mandatory extension, I would fail on them.
- // And I simply ignore any optional extension.
- $server_message_regexp = "#^r=([\x21-\x2B\x2D-\x7E]+),s=((?:[A-Za-z0-9/+]{4})*(?:[A-Za-z0-9]{3}=|[A-Xa-z0-9]{2}==)?),i=([0-9]*)(,[A-Za-z]=[^,])*$#";
- if (!isset($this->cnonce, $this->gs2_header)
- || !preg_match($server_message_regexp, $challenge, $matches))
- {
- return false;
- }
- $nonce = $matches[1];
- $salt = base64_decode($matches[2]);
- if (!$salt)
- {
- // Invalid Base64.
- return false;
- }
- $i = intval($matches[3]);
-
- $cnonce = substr($nonce, 0, strlen($this->cnonce));
- if ($cnonce <> $this->cnonce)
- {
- // Invalid challenge! Are we under attack?
- return false;
- }
-
- $channel_binding = 'c=' . base64_encode($this->gs2_header); // TODO: support channel binding.
- $final_message = $channel_binding . ',r=' . $nonce; // XXX: no extension.
-
- // TODO: $password = $this->normalize($password); // SASLprep profile of stringprep.
- $saltedPassword = $this->hi($password, $salt, $i);
- $this->saltedPassword = $saltedPassword;
- $clientKey = call_user_func($this->hmac, $saltedPassword, "Client Key", TRUE);
- $storedKey = call_user_func($this->hash, $clientKey, TRUE);
- $authMessage = $this->first_message_bare . ',' . $challenge . ',' . $final_message;
- $this->authMessage = $authMessage;
- $clientSignature = call_user_func($this->hmac, $storedKey, $authMessage, TRUE);
- $clientProof = $clientKey ^ $clientSignature;
- $proof = ',p=' . base64_encode($clientProof);
-
- return $final_message . $proof;
- }
-
- /**
- * SCRAM has also a server verification step. On a successful outcome, it will send additional data which must
- * absolutely be checked against this function. If this fails, the entity which we are communicating with is probably
- * not the server as it has not access to your ServerKey.
- *
- * @param string $data The additional data sent along a successful outcome.
- * @return bool Whether the server has been authenticated.
- * If false, the client must close the connection and consider to be under a MITM attack.
- * @access public
- */
- public function processOutcome($data)
- {
- $verifier_regexp = '#^v=((?:[A-Za-z0-9/+]{4})*(?:[A-Za-z0-9]{3}=|[A-Xa-z0-9]{2}==)?)$#';
- if (!isset($this->saltedPassword, $this->authMessage)
- || !preg_match($verifier_regexp, $data, $matches))
- {
- // This cannot be an outcome, you never sent the challenge's response.
- return false;
- }
-
- $verifier = $matches[1];
- $proposed_serverSignature = base64_decode($verifier);
- $serverKey = call_user_func($this->hmac, $this->saltedPassword, "Server Key", true);
- $serverSignature = call_user_func($this->hmac, $serverKey, $this->authMessage, TRUE);
- return ($proposed_serverSignature === $serverSignature);
- }
-
- /**
- * Hi() call, which is essentially PBKDF2 (RFC-2898) with HMAC-H() as the pseudorandom function.
- *
- * @param string $str The string to hash.
- * @param string $hash The hash value.
- * @param int $i The iteration count.
- * @access private
- */
- private function hi($str, $salt, $i)
- {
- $int1 = "\0\0\0\1";
- $ui = call_user_func($this->hmac, $str, $salt . $int1, true);
- $result = $ui;
- for ($k = 1; $k < $i; $k++)
- {
- $ui = call_user_func($this->hmac, $str, $ui, true);
- $result = $result ^ $ui;
- }
- return $result;
- }
-
-
- /**
- * Creates the client nonce for the response
- *
- * @return string The cnonce value
- * @access private
- * @author Richard Heyes <richard@php.net>
- */
- private function _getCnonce()
- {
- // TODO: I reused the nonce function from the DigestMD5 class.
- // I should probably make this a protected function in Common.
- if (@file_exists('/dev/urandom') && $fd = @fopen('/dev/urandom', 'r')) {
- return base64_encode(fread($fd, 32));
-
- } elseif (@file_exists('/dev/random') && $fd = @fopen('/dev/random', 'r')) {
- return base64_encode(fread($fd, 32));
-
- } else {
- $str = '';
- for ($i=0; $i<32; $i++) {
- $str .= chr(mt_rand(0, 255));
- }
-
- return base64_encode($str);
- }
- }
-
-}
-
-?>
diff --git a/program/lib/Crypt/GPG.php b/program/lib/Crypt/GPG.php
deleted file mode 100644
index 5c2231289..000000000
--- a/program/lib/Crypt/GPG.php
+++ /dev/null
@@ -1,2386 +0,0 @@
-<?php
-
-/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
-
-/**
- * Crypt_GPG is a package to use GPG from PHP
- *
- * This package provides an object oriented interface to GNU Privacy
- * Guard (GPG). It requires the GPG executable to be on the system.
- *
- * Though GPG can support symmetric-key cryptography, this package is intended
- * only to facilitate public-key cryptography.
- *
- * This file contains the main GPG class. The class in this file lets you
- * encrypt, decrypt, sign and verify data; import and delete keys; and perform
- * other useful GPG tasks.
- *
- * Example usage:
- * <code>
- * <?php
- * // encrypt some data
- * $gpg = new Crypt_GPG();
- * $gpg->addEncryptKey($mySecretKeyId);
- * $encryptedData = $gpg->encrypt($data);
- * ?>
- * </code>
- *
- * PHP version 5
- *
- * LICENSE:
- *
- * This library is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of the
- * License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * @category Encryption
- * @package Crypt_GPG
- * @author Nathan Fredrickson <nathan@silverorange.com>
- * @author Michael Gauthier <mike@silverorange.com>
- * @copyright 2005-2013 silverorange
- * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
- * @version CVS: $Id$
- * @link http://pear.php.net/package/Crypt_GPG
- * @link http://pear.php.net/manual/en/package.encryption.crypt-gpg.php
- * @link http://www.gnupg.org/
- */
-
-/**
- * Base class for GPG methods
- */
-require_once 'Crypt/GPGAbstract.php';
-
-/**
- * Signature handler class
- */
-require_once 'Crypt/GPG/VerifyStatusHandler.php';
-
-/**
- * Decryption handler class
- */
-require_once 'Crypt/GPG/DecryptStatusHandler.php';
-
-// {{{ class Crypt_GPG
-
-/**
- * A class to use GPG from PHP
- *
- * This class provides an object oriented interface to GNU Privacy Guard (GPG).
- *
- * Though GPG can support symmetric-key cryptography, this class is intended
- * only to facilitate public-key cryptography.
- *
- * @category Encryption
- * @package Crypt_GPG
- * @author Nathan Fredrickson <nathan@silverorange.com>
- * @author Michael Gauthier <mike@silverorange.com>
- * @copyright 2005-2013 silverorange
- * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
- * @link http://pear.php.net/package/Crypt_GPG
- * @link http://www.gnupg.org/
- */
-class Crypt_GPG extends Crypt_GPGAbstract
-{
- // {{{ class constants for data signing modes
-
- /**
- * Signing mode for normal signing of data. The signed message will not
- * be readable without special software.
- *
- * This is the default signing mode.
- *
- * @see Crypt_GPG::sign()
- * @see Crypt_GPG::signFile()
- */
- const SIGN_MODE_NORMAL = 1;
-
- /**
- * Signing mode for clearsigning data. Clearsigned signatures are ASCII
- * armored data and are readable without special software. If the signed
- * message is unencrypted, the message will still be readable. The message
- * text will be in the original encoding.
- *
- * @see Crypt_GPG::sign()
- * @see Crypt_GPG::signFile()
- */
- const SIGN_MODE_CLEAR = 2;
-
- /**
- * Signing mode for creating a detached signature. When using detached
- * signatures, only the signature data is returned. The original message
- * text may be distributed separately from the signature data. This is
- * useful for miltipart/signed email messages as per
- * {@link http://www.ietf.org/rfc/rfc3156.txt RFC 3156}.
- *
- * @see Crypt_GPG::sign()
- * @see Crypt_GPG::signFile()
- */
- const SIGN_MODE_DETACHED = 3;
-
- // }}}
- // {{{ class constants for fingerprint formats
-
- /**
- * No formatting is performed.
- *
- * Example: C3BC615AD9C766E5A85C1F2716D27458B1BBA1C4
- *
- * @see Crypt_GPG::getFingerprint()
- */
- const FORMAT_NONE = 1;
-
- /**
- * Fingerprint is formatted in the format used by the GnuPG gpg command's
- * default output.
- *
- * Example: C3BC 615A D9C7 66E5 A85C 1F27 16D2 7458 B1BB A1C4
- *
- * @see Crypt_GPG::getFingerprint()
- */
- const FORMAT_CANONICAL = 2;
-
- /**
- * Fingerprint is formatted in the format used when displaying X.509
- * certificates
- *
- * Example: C3:BC:61:5A:D9:C7:66:E5:A8:5C:1F:27:16:D2:74:58:B1:BB:A1:C4
- *
- * @see Crypt_GPG::getFingerprint()
- */
- const FORMAT_X509 = 3;
-
- // }}}
- // {{{ class constants for boolean options
-
- /**
- * Use to specify ASCII armored mode for returned data
- */
- const ARMOR_ASCII = true;
-
- /**
- * Use to specify binary mode for returned data
- */
- const ARMOR_BINARY = false;
-
- /**
- * Use to specify that line breaks in signed text should be normalized
- */
- const TEXT_NORMALIZED = true;
-
- /**
- * Use to specify that line breaks in signed text should not be normalized
- */
- const TEXT_RAW = false;
-
- // }}}
- // {{{ protected class properties
-
- /**
- * Engine used to control the GPG subprocess
- *
- * @var Crypt_GPG_Engine
- *
- * @see Crypt_GPG::setEngine()
- */
- protected $engine = null;
-
- /**
- * Keys used to encrypt
- *
- * The array is of the form:
- * <code>
- * array(
- * $key_id => array(
- * 'fingerprint' => $fingerprint,
- * 'passphrase' => null
- * )
- * );
- * </code>
- *
- * @var array
- * @see Crypt_GPG::addEncryptKey()
- * @see Crypt_GPG::clearEncryptKeys()
- */
- protected $encryptKeys = array();
-
- /**
- * Keys used to decrypt
- *
- * The array is of the form:
- * <code>
- * array(
- * $key_id => array(
- * 'fingerprint' => $fingerprint,
- * 'passphrase' => $passphrase
- * )
- * );
- * </code>
- *
- * @var array
- * @see Crypt_GPG::addSignKey()
- * @see Crypt_GPG::clearSignKeys()
- */
- protected $signKeys = array();
-
- /**
- * Keys used to sign
- *
- * The array is of the form:
- * <code>
- * array(
- * $key_id => array(
- * 'fingerprint' => $fingerprint,
- * 'passphrase' => $passphrase
- * )
- * );
- * </code>
- *
- * @var array
- * @see Crypt_GPG::addDecryptKey()
- * @see Crypt_GPG::clearDecryptKeys()
- */
- protected $decryptKeys = array();
-
- // }}}
- // {{{ importKey()
-
- /**
- * Imports a public or private key into the keyring
- *
- * Keys may be removed from the keyring using
- * {@link Crypt_GPG::deletePublicKey()} or
- * {@link Crypt_GPG::deletePrivateKey()}.
- *
- * @param string $data the key data to be imported.
- *
- * @return array an associative array containing the following elements:
- * - <kbd>fingerprint</kbd> - the fingerprint of the
- * imported key,
- * - <kbd>public_imported</kbd> - the number of public
- * keys imported,
- * - <kbd>public_unchanged</kbd> - the number of unchanged
- * public keys,
- * - <kbd>private_imported</kbd> - the number of private
- * keys imported,
- * - <kbd>private_unchanged</kbd> - the number of unchanged
- * private keys.
- *
- * @throws Crypt_GPG_NoDataException if the key data is missing or if the
- * data is is not valid key data.
- *
- * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
- * Use the <kbd>debug</kbd> option and file a bug report if these
- * exceptions occur.
- */
- public function importKey($data)
- {
- return $this->_importKey($data, false);
- }
-
- // }}}
- // {{{ importKeyFile()
-
- /**
- * Imports a public or private key file into the keyring
- *
- * Keys may be removed from the keyring using
- * {@link Crypt_GPG::deletePublicKey()} or
- * {@link Crypt_GPG::deletePrivateKey()}.
- *
- * @param string $filename the key file to be imported.
- *
- * @return array an associative array containing the following elements:
- * - <kbd>fingerprint</kbd> - the fingerprint of the
- * imported key,
- * - <kbd>public_imported</kbd> - the number of public
- * keys imported,
- * - <kbd>public_unchanged</kbd> - the number of unchanged
- * public keys,
- * - <kbd>private_imported</kbd> - the number of private
- * keys imported,
- * - <kbd>private_unchanged</kbd> - the number of unchanged
- * private keys.
- * private keys.
- *
- * @throws Crypt_GPG_NoDataException if the key data is missing or if the
- * data is is not valid key data.
- *
- * @throws Crypt_GPG_FileException if the key file is not readable.
- *
- * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
- * Use the <kbd>debug</kbd> option and file a bug report if these
- * exceptions occur.
- */
- public function importKeyFile($filename)
- {
- return $this->_importKey($filename, true);
- }
-
- // }}}
- // {{{ exportPublicKey()
-
- /**
- * Exports a public key from the keyring
- *
- * The exported key remains on the keyring. To delete the public key, use
- * {@link Crypt_GPG::deletePublicKey()}.
- *
- * If more than one key fingerprint is available for the specified
- * <kbd>$keyId</kbd> (for example, if you use a non-unique uid) only the
- * first public key is exported.
- *
- * @param string $keyId either the full uid of the public key, the email
- * part of the uid of the public key or the key id of
- * the public key. For example,
- * "Test User (example) <test@example.com>",
- * "test@example.com" or a hexadecimal string.
- * @param boolean $armor optional. If true, ASCII armored data is returned;
- * otherwise, binary data is returned. Defaults to
- * true.
- *
- * @return string the public key data.
- *
- * @throws Crypt_GPG_KeyNotFoundException if a public key with the given
- * <kbd>$keyId</kbd> is not found.
- *
- * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
- * Use the <kbd>debug</kbd> option and file a bug report if these
- * exceptions occur.
- */
- public function exportPublicKey($keyId, $armor = true)
- {
- $fingerprint = $this->getFingerprint($keyId);
-
- if ($fingerprint === null) {
- throw new Crypt_GPG_KeyNotFoundException(
- 'Public key not found: ' . $keyId,
- self::ERROR_KEY_NOT_FOUND,
- $keyId
- );
- }
-
- $keyData = '';
- $operation = '--export ' . escapeshellarg($fingerprint);
- $arguments = ($armor) ? array('--armor') : array();
-
- $this->engine->reset();
- $this->engine->setOutput($keyData);
- $this->engine->setOperation($operation, $arguments);
- $this->engine->run();
-
- $code = $this->engine->getErrorCode();
-
- if ($code !== self::ERROR_NONE) {
- throw new Crypt_GPG_Exception(
- 'Unknown error exporting public key. Please use the ' .
- '\'debug\' option when creating the Crypt_GPG object, and ' .
- 'file a bug report at ' . self::BUG_URI,
- $code
- );
- }
-
- return $keyData;
- }
-
- // }}}
- // {{{ deletePublicKey()
-
- /**
- * Deletes a public key from the keyring
- *
- * If more than one key fingerprint is available for the specified
- * <kbd>$keyId</kbd> (for example, if you use a non-unique uid) only the
- * first public key is deleted.
- *
- * The private key must be deleted first or an exception will be thrown.
- * See {@link Crypt_GPG::deletePrivateKey()}.
- *
- * @param string $keyId either the full uid of the public key, the email
- * part of the uid of the public key or the key id of
- * the public key. For example,
- * "Test User (example) <test@example.com>",
- * "test@example.com" or a hexadecimal string.
- *
- * @return void
- *
- * @throws Crypt_GPG_KeyNotFoundException if a public key with the given
- * <kbd>$keyId</kbd> is not found.
- *
- * @throws Crypt_GPG_DeletePrivateKeyException if the specified public key
- * has an associated private key on the keyring. The private key
- * must be deleted first.
- *
- * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
- * Use the <kbd>debug</kbd> option and file a bug report if these
- * exceptions occur.
- */
- public function deletePublicKey($keyId)
- {
- $fingerprint = $this->getFingerprint($keyId);
-
- if ($fingerprint === null) {
- throw new Crypt_GPG_KeyNotFoundException(
- 'Public key not found: ' . $keyId,
- self::ERROR_KEY_NOT_FOUND,
- $keyId
- );
- }
-
- $operation = '--delete-key ' . escapeshellarg($fingerprint);
- $arguments = array(
- '--batch',
- '--yes'
- );
-
- $this->engine->reset();
- $this->engine->setOperation($operation, $arguments);
- $this->engine->run();
-
- $code = $this->engine->getErrorCode();
-
- switch ($code) {
- case self::ERROR_NONE:
- break;
- case self::ERROR_DELETE_PRIVATE_KEY:
- throw new Crypt_GPG_DeletePrivateKeyException(
- 'Private key must be deleted before public key can be ' .
- 'deleted.',
- $code,
- $keyId
- );
- default:
- throw new Crypt_GPG_Exception(
- 'Unknown error deleting public key. Please use the ' .
- '\'debug\' option when creating the Crypt_GPG object, and ' .
- 'file a bug report at ' . self::BUG_URI,
- $code
- );
- }
- }
-
- // }}}
- // {{{ deletePrivateKey()
-
- /**
- * Deletes a private key from the keyring
- *
- * If more than one key fingerprint is available for the specified
- * <kbd>$keyId</kbd> (for example, if you use a non-unique uid) only the
- * first private key is deleted.
- *
- * Calls GPG with the <kbd>--delete-secret-key</kbd> command.
- *
- * @param string $keyId either the full uid of the private key, the email
- * part of the uid of the private key or the key id of
- * the private key. For example,
- * "Test User (example) <test@example.com>",
- * "test@example.com" or a hexadecimal string.
- *
- * @return void
- *
- * @throws Crypt_GPG_KeyNotFoundException if a private key with the given
- * <kbd>$keyId</kbd> is not found.
- *
- * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
- * Use the <kbd>debug</kbd> option and file a bug report if these
- * exceptions occur.
- */
- public function deletePrivateKey($keyId)
- {
- $fingerprint = $this->getFingerprint($keyId);
-
- if ($fingerprint === null) {
- throw new Crypt_GPG_KeyNotFoundException(
- 'Private key not found: ' . $keyId,
- self::ERROR_KEY_NOT_FOUND,
- $keyId
- );
- }
-
- $operation = '--delete-secret-key ' . escapeshellarg($fingerprint);
- $arguments = array(
- '--batch',
- '--yes'
- );
-
- $this->engine->reset();
- $this->engine->setOperation($operation, $arguments);
- $this->engine->run();
-
- $code = $this->engine->getErrorCode();
-
- switch ($code) {
- case self::ERROR_NONE:
- break;
- case self::ERROR_KEY_NOT_FOUND:
- throw new Crypt_GPG_KeyNotFoundException(
- 'Private key not found: ' . $keyId,
- $code,
- $keyId
- );
- default:
- throw new Crypt_GPG_Exception(
- 'Unknown error deleting private key. Please use the ' .
- '\'debug\' option when creating the Crypt_GPG object, and ' .
- 'file a bug report at ' . self::BUG_URI,
- $code
- );
- }
- }
-
- // }}}
- // {{{ getKeys()
-
- /**
- * Gets the available keys in the keyring
- *
- * Calls GPG with the <kbd>--list-keys</kbd> command and grabs keys. See
- * the first section of <b>doc/DETAILS</b> in the
- * {@link http://www.gnupg.org/download/ GPG package} for a detailed
- * description of how the GPG command output is parsed.
- *
- * @param string $keyId optional. Only keys with that match the specified
- * pattern are returned. The pattern may be part of
- * a user id, a key id or a key fingerprint. If not
- * specified, all keys are returned.
- *
- * @return array an array of {@link Crypt_GPG_Key} objects. If no keys
- * match the specified <kbd>$keyId</kbd> an empty array is
- * returned.
- *
- * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
- * Use the <kbd>debug</kbd> option and file a bug report if these
- * exceptions occur.
- *
- * @see Crypt_GPG_Key
- */
- public function getKeys($keyId = '')
- {
- return parent::_getKeys($keyId);
- }
-
- // }}}
- // {{{ getFingerprint()
-
- /**
- * Gets a key fingerprint from the keyring
- *
- * If more than one key fingerprint is available (for example, if you use
- * a non-unique user id) only the first key fingerprint is returned.
- *
- * Calls the GPG <kbd>--list-keys</kbd> command with the
- * <kbd>--with-fingerprint</kbd> option to retrieve a public key
- * fingerprint.
- *
- * @param string $keyId either the full user id of the key, the email
- * part of the user id of the key, or the key id of
- * the key. For example,
- * "Test User (example) <test@example.com>",
- * "test@example.com" or a hexadecimal string.
- * @param integer $format optional. How the fingerprint should be formatted.
- * Use {@link Crypt_GPG::FORMAT_X509} for X.509
- * certificate format,
- * {@link Crypt_GPG::FORMAT_CANONICAL} for the format
- * used by GnuPG output and
- * {@link Crypt_GPG::FORMAT_NONE} for no formatting.
- * Defaults to <code>Crypt_GPG::FORMAT_NONE</code>.
- *
- * @return string the fingerprint of the key, or null if no fingerprint
- * is found for the given <kbd>$keyId</kbd>.
- *
- * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
- * Use the <kbd>debug</kbd> option and file a bug report if these
- * exceptions occur.
- */
- public function getFingerprint($keyId, $format = self::FORMAT_NONE)
- {
- $output = '';
- $operation = '--list-keys ' . escapeshellarg($keyId);
- $arguments = array(
- '--with-colons',
- '--with-fingerprint'
- );
-
- $this->engine->reset();
- $this->engine->setOutput($output);
- $this->engine->setOperation($operation, $arguments);
- $this->engine->run();
-
- $code = $this->engine->getErrorCode();
-
- switch ($code) {
- case self::ERROR_NONE:
- case self::ERROR_KEY_NOT_FOUND:
- // ignore not found key errors
- break;
- default:
- throw new Crypt_GPG_Exception(
- 'Unknown error getting key fingerprint. Please use the ' .
- '\'debug\' option when creating the Crypt_GPG object, and ' .
- 'file a bug report at ' . self::BUG_URI,
- $code
- );
- }
-
- $fingerprint = null;
-
- $lines = explode(PHP_EOL, $output);
- foreach ($lines as $line) {
- if (substr($line, 0, 3) == 'fpr') {
- $lineExp = explode(':', $line);
- $fingerprint = $lineExp[9];
-
- switch ($format) {
- case self::FORMAT_CANONICAL:
- $fingerprintExp = str_split($fingerprint, 4);
- $format = '%s %s %s %s %s %s %s %s %s %s';
- $fingerprint = vsprintf($format, $fingerprintExp);
- break;
-
- case self::FORMAT_X509:
- $fingerprintExp = str_split($fingerprint, 2);
- $fingerprint = implode(':', $fingerprintExp);
- break;
- }
-
- break;
- }
- }
-
- return $fingerprint;
- }
-
- // }}}
- // {{{ encrypt()
-
- /**
- * Encrypts string data
- *
- * Data is ASCII armored by default but may optionally be returned as
- * binary.
- *
- * @param string $data the data to be encrypted.
- * @param boolean $armor optional. If true, ASCII armored data is returned;
- * otherwise, binary data is returned. Defaults to
- * true.
- *
- * @return string the encrypted data.
- *
- * @throws Crypt_GPG_KeyNotFoundException if no encryption key is specified.
- * See {@link Crypt_GPG::addEncryptKey()}.
- *
- * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
- * Use the <kbd>debug</kbd> option and file a bug report if these
- * exceptions occur.
- *
- * @sensitive $data
- */
- public function encrypt($data, $armor = self::ARMOR_ASCII)
- {
- return $this->_encrypt($data, false, null, $armor);
- }
-
- // }}}
- // {{{ encryptFile()
-
- /**
- * Encrypts a file
- *
- * Encrypted data is ASCII armored by default but may optionally be saved
- * as binary.
- *
- * @param string $filename the filename of the file to encrypt.
- * @param string $encryptedFile optional. The filename of the file in
- * which to store the encrypted data. If null
- * or unspecified, the encrypted data is
- * returned as a string.
- * @param boolean $armor optional. If true, ASCII armored data is
- * returned; otherwise, binary data is
- * returned. Defaults to true.
- *
- * @return void|string if the <kbd>$encryptedFile</kbd> parameter is null,
- * a string containing the encrypted data is returned.
- *
- * @throws Crypt_GPG_KeyNotFoundException if no encryption key is specified.
- * See {@link Crypt_GPG::addEncryptKey()}.
- *
- * @throws Crypt_GPG_FileException if the output file is not writeable or
- * if the input file is not readable.
- *
- * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
- * Use the <kbd>debug</kbd> option and file a bug report if these
- * exceptions occur.
- */
- public function encryptFile(
- $filename,
- $encryptedFile = null,
- $armor = self::ARMOR_ASCII
- ) {
- return $this->_encrypt($filename, true, $encryptedFile, $armor);
- }
-
- // }}}
- // {{{ encryptAndSign()
-
- /**
- * Encrypts and signs data
- *
- * Data is encrypted and signed in a single pass.
- *
- * NOTE: Until GnuPG version 1.4.10, it was not possible to verify
- * encrypted-signed data without decrypting it at the same time. If you try
- * to use {@link Crypt_GPG::verify()} method on encrypted-signed data with
- * earlier GnuPG versions, you will get an error. Please use
- * {@link Crypt_GPG::decryptAndVerify()} to verify encrypted-signed data.
- *
- * @param string $data the data to be encrypted and signed.
- * @param boolean $armor optional. If true, ASCII armored data is returned;
- * otherwise, binary data is returned. Defaults to
- * true.
- *
- * @return string the encrypted signed data.
- *
- * @throws Crypt_GPG_KeyNotFoundException if no encryption key is specified
- * or if no signing key is specified. See
- * {@link Crypt_GPG::addEncryptKey()} and
- * {@link Crypt_GPG::addSignKey()}.
- *
- * @throws Crypt_GPG_BadPassphraseException if a specified passphrase is
- * incorrect or if a required passphrase is not specified.
- *
- * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
- * Use the <kbd>debug</kbd> option and file a bug report if these
- * exceptions occur.
- *
- * @see Crypt_GPG::decryptAndVerify()
- */
- public function encryptAndSign($data, $armor = self::ARMOR_ASCII)
- {
- return $this->_encryptAndSign($data, false, null, $armor);
- }
-
- // }}}
- // {{{ encryptAndSignFile()
-
- /**
- * Encrypts and signs a file
- *
- * The file is encrypted and signed in a single pass.
- *
- * NOTE: Until GnuPG version 1.4.10, it was not possible to verify
- * encrypted-signed files without decrypting them at the same time. If you
- * try to use {@link Crypt_GPG::verify()} method on encrypted-signed files
- * with earlier GnuPG versions, you will get an error. Please use
- * {@link Crypt_GPG::decryptAndVerifyFile()} to verify encrypted-signed
- * files.
- *
- * @param string $filename the name of the file containing the data to
- * be encrypted and signed.
- * @param string $signedFile optional. The name of the file in which the
- * encrypted, signed data should be stored. If
- * null or unspecified, the encrypted, signed
- * data is returned as a string.
- * @param boolean $armor optional. If true, ASCII armored data is
- * returned; otherwise, binary data is returned.
- * Defaults to true.
- *
- * @return void|string if the <kbd>$signedFile</kbd> parameter is null, a
- * string containing the encrypted, signed data is
- * returned.
- *
- * @throws Crypt_GPG_KeyNotFoundException if no encryption key is specified
- * or if no signing key is specified. See
- * {@link Crypt_GPG::addEncryptKey()} and
- * {@link Crypt_GPG::addSignKey()}.
- *
- * @throws Crypt_GPG_BadPassphraseException if a specified passphrase is
- * incorrect or if a required passphrase is not specified.
- *
- * @throws Crypt_GPG_FileException if the output file is not writeable or
- * if the input file is not readable.
- *
- * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
- * Use the <kbd>debug</kbd> option and file a bug report if these
- * exceptions occur.
- *
- * @see Crypt_GPG::decryptAndVerifyFile()
- */
- public function encryptAndSignFile(
- $filename,
- $signedFile = null,
- $armor = self::ARMOR_ASCII
- ) {
- return $this->_encryptAndSign($filename, true, $signedFile, $armor);
- }
-
- // }}}
- // {{{ decrypt()
-
- /**
- * Decrypts string data
- *
- * This method assumes the required private key is available in the keyring
- * and throws an exception if the private key is not available. To add a
- * private key to the keyring, use the {@link Crypt_GPG::importKey()} or
- * {@link Crypt_GPG::importKeyFile()} methods.
- *
- * @param string $encryptedData the data to be decrypted.
- *
- * @return string the decrypted data.
- *
- * @throws Crypt_GPG_KeyNotFoundException if the private key needed to
- * decrypt the data is not in the user's keyring.
- *
- * @throws Crypt_GPG_NoDataException if specified data does not contain
- * GPG encrypted data.
- *
- * @throws Crypt_GPG_BadPassphraseException if a required passphrase is
- * incorrect or if a required passphrase is not specified. See
- * {@link Crypt_GPG::addDecryptKey()}.
- *
- * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
- * Use the <kbd>debug</kbd> option and file a bug report if these
- * exceptions occur.
- */
- public function decrypt($encryptedData)
- {
- return $this->_decrypt($encryptedData, false, null);
- }
-
- // }}}
- // {{{ decryptFile()
-
- /**
- * Decrypts a file
- *
- * This method assumes the required private key is available in the keyring
- * and throws an exception if the private key is not available. To add a
- * private key to the keyring, use the {@link Crypt_GPG::importKey()} or
- * {@link Crypt_GPG::importKeyFile()} methods.
- *
- * @param string $encryptedFile the name of the encrypted file data to
- * decrypt.
- * @param string $decryptedFile optional. The name of the file to which the
- * decrypted data should be written. If null
- * or unspecified, the decrypted data is
- * returned as a string.
- *
- * @return void|string if the <kbd>$decryptedFile</kbd> parameter is null,
- * a string containing the decrypted data is returned.
- *
- * @throws Crypt_GPG_KeyNotFoundException if the private key needed to
- * decrypt the data is not in the user's keyring.
- *
- * @throws Crypt_GPG_NoDataException if specified data does not contain
- * GPG encrypted data.
- *
- * @throws Crypt_GPG_BadPassphraseException if a required passphrase is
- * incorrect or if a required passphrase is not specified. See
- * {@link Crypt_GPG::addDecryptKey()}.
- *
- * @throws Crypt_GPG_FileException if the output file is not writeable or
- * if the input file is not readable.
- *
- * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
- * Use the <kbd>debug</kbd> option and file a bug report if these
- * exceptions occur.
- */
- public function decryptFile($encryptedFile, $decryptedFile = null)
- {
- return $this->_decrypt($encryptedFile, true, $decryptedFile);
- }
-
- // }}}
- // {{{ decryptAndVerify()
-
- /**
- * Decrypts and verifies string data
- *
- * This method assumes the required private key is available in the keyring
- * and throws an exception if the private key is not available. To add a
- * private key to the keyring, use the {@link Crypt_GPG::importKey()} or
- * {@link Crypt_GPG::importKeyFile()} methods.
- *
- * @param string $encryptedData the encrypted, signed data to be decrypted
- * and verified.
- *
- * @return array two element array. The array has an element 'data'
- * containing the decrypted data and an element
- * 'signatures' containing an array of
- * {@link Crypt_GPG_Signature} objects for the signed data.
- *
- * @throws Crypt_GPG_KeyNotFoundException if the private key needed to
- * decrypt the data is not in the user's keyring.
- *
- * @throws Crypt_GPG_NoDataException if specified data does not contain
- * GPG encrypted data.
- *
- * @throws Crypt_GPG_BadPassphraseException if a required passphrase is
- * incorrect or if a required passphrase is not specified. See
- * {@link Crypt_GPG::addDecryptKey()}.
- *
- * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
- * Use the <kbd>debug</kbd> option and file a bug report if these
- * exceptions occur.
- */
- public function decryptAndVerify($encryptedData)
- {
- return $this->_decryptAndVerify($encryptedData, false, null);
- }
-
- // }}}
- // {{{ decryptAndVerifyFile()
-
- /**
- * Decrypts and verifies a signed, encrypted file
- *
- * This method assumes the required private key is available in the keyring
- * and throws an exception if the private key is not available. To add a
- * private key to the keyring, use the {@link Crypt_GPG::importKey()} or
- * {@link Crypt_GPG::importKeyFile()} methods.
- *
- * @param string $encryptedFile the name of the signed, encrypted file to
- * to decrypt and verify.
- * @param string $decryptedFile optional. The name of the file to which the
- * decrypted data should be written. If null
- * or unspecified, the decrypted data is
- * returned in the results array.
- *
- * @return array two element array. The array has an element 'data'
- * containing the decrypted data and an element
- * 'signatures' containing an array of
- * {@link Crypt_GPG_Signature} objects for the signed data.
- * If the decrypted data is written to a file, the 'data'
- * element is null.
- *
- * @throws Crypt_GPG_KeyNotFoundException if the private key needed to
- * decrypt the data is not in the user's keyring.
- *
- * @throws Crypt_GPG_NoDataException if specified data does not contain
- * GPG encrypted data.
- *
- * @throws Crypt_GPG_BadPassphraseException if a required passphrase is
- * incorrect or if a required passphrase is not specified. See
- * {@link Crypt_GPG::addDecryptKey()}.
- *
- * @throws Crypt_GPG_FileException if the output file is not writeable or
- * if the input file is not readable.
- *
- * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
- * Use the <kbd>debug</kbd> option and file a bug report if these
- * exceptions occur.
- */
- public function decryptAndVerifyFile($encryptedFile, $decryptedFile = null)
- {
- return $this->_decryptAndVerify($encryptedFile, true, $decryptedFile);
- }
-
- // }}}
- // {{{ sign()
-
- /**
- * Signs data
- *
- * Data may be signed using any one of the three available signing modes:
- * - {@link Crypt_GPG::SIGN_MODE_NORMAL}
- * - {@link Crypt_GPG::SIGN_MODE_CLEAR}
- * - {@link Crypt_GPG::SIGN_MODE_DETACHED}
- *
- * @param string $data the data to be signed.
- * @param boolean $mode optional. The data signing mode to use. Should
- * be one of {@link Crypt_GPG::SIGN_MODE_NORMAL},
- * {@link Crypt_GPG::SIGN_MODE_CLEAR} or
- * {@link Crypt_GPG::SIGN_MODE_DETACHED}. If not
- * specified, defaults to
- * <kbd>Crypt_GPG::SIGN_MODE_NORMAL</kbd>.
- * @param boolean $armor optional. If true, ASCII armored data is
- * returned; otherwise, binary data is returned.
- * Defaults to true. This has no effect if the
- * mode <kbd>Crypt_GPG::SIGN_MODE_CLEAR</kbd> is
- * used.
- * @param boolean $textmode optional. If true, line-breaks in signed data
- * are normalized. Use this option when signing
- * e-mail, or for greater compatibility between
- * systems with different line-break formats.
- * Defaults to false. This has no effect if the
- * mode <kbd>Crypt_GPG::SIGN_MODE_CLEAR</kbd> is
- * used as clear-signing always uses textmode.
- *
- * @return string the signed data, or the signature data if a detached
- * signature is requested.
- *
- * @throws Crypt_GPG_KeyNotFoundException if no signing key is specified.
- * See {@link Crypt_GPG::addSignKey()}.
- *
- * @throws Crypt_GPG_BadPassphraseException if a specified passphrase is
- * incorrect or if a required passphrase is not specified.
- *
- * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
- * Use the <kbd>debug</kbd> option and file a bug report if these
- * exceptions occur.
- */
- public function sign(
- $data,
- $mode = self::SIGN_MODE_NORMAL,
- $armor = self::ARMOR_ASCII,
- $textmode = self::TEXT_RAW
- ) {
- return $this->_sign($data, false, null, $mode, $armor, $textmode);
- }
-
- // }}}
- // {{{ signFile()
-
- /**
- * Signs a file
- *
- * The file may be signed using any one of the three available signing
- * modes:
- * - {@link Crypt_GPG::SIGN_MODE_NORMAL}
- * - {@link Crypt_GPG::SIGN_MODE_CLEAR}
- * - {@link Crypt_GPG::SIGN_MODE_DETACHED}
- *
- * @param string $filename the name of the file containing the data to
- * be signed.
- * @param string $signedFile optional. The name of the file in which the
- * signed data should be stored. If null or
- * unspecified, the signed data is returned as a
- * string.
- * @param boolean $mode optional. The data signing mode to use. Should
- * be one of {@link Crypt_GPG::SIGN_MODE_NORMAL},
- * {@link Crypt_GPG::SIGN_MODE_CLEAR} or
- * {@link Crypt_GPG::SIGN_MODE_DETACHED}. If not
- * specified, defaults to
- * <kbd>Crypt_GPG::SIGN_MODE_NORMAL</kbd>.
- * @param boolean $armor optional. If true, ASCII armored data is
- * returned; otherwise, binary data is returned.
- * Defaults to true. This has no effect if the
- * mode <kbd>Crypt_GPG::SIGN_MODE_CLEAR</kbd> is
- * used.
- * @param boolean $textmode optional. If true, line-breaks in signed data
- * are normalized. Use this option when signing
- * e-mail, or for greater compatibility between
- * systems with different line-break formats.
- * Defaults to false. This has no effect if the
- * mode <kbd>Crypt_GPG::SIGN_MODE_CLEAR</kbd> is
- * used as clear-signing always uses textmode.
- *
- * @return void|string if the <kbd>$signedFile</kbd> parameter is null, a
- * string containing the signed data (or the signature
- * data if a detached signature is requested) is
- * returned.
- *
- * @throws Crypt_GPG_KeyNotFoundException if no signing key is specified.
- * See {@link Crypt_GPG::addSignKey()}.
- *
- * @throws Crypt_GPG_BadPassphraseException if a specified passphrase is
- * incorrect or if a required passphrase is not specified.
- *
- * @throws Crypt_GPG_FileException if the output file is not writeable or
- * if the input file is not readable.
- *
- * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
- * Use the <kbd>debug</kbd> option and file a bug report if these
- * exceptions occur.
- */
- public function signFile(
- $filename,
- $signedFile = null,
- $mode = self::SIGN_MODE_NORMAL,
- $armor = self::ARMOR_ASCII,
- $textmode = self::TEXT_RAW
- ) {
- return $this->_sign(
- $filename,
- true,
- $signedFile,
- $mode,
- $armor,
- $textmode
- );
- }
-
- // }}}
- // {{{ verify()
-
- /**
- * Verifies signed data
- *
- * The {@link Crypt_GPG::decrypt()} method may be used to get the original
- * message if the signed data is not clearsigned and does not use a
- * detached signature.
- *
- * @param string $signedData the signed data to be verified.
- * @param string $signature optional. If verifying data signed using a
- * detached signature, this must be the detached
- * signature data. The data that was signed is
- * specified in <kbd>$signedData</kbd>.
- *
- * @return array an array of {@link Crypt_GPG_Signature} objects for the
- * signed data. For each signature that is valid, the
- * {@link Crypt_GPG_Signature::isValid()} will return true.
- *
- * @throws Crypt_GPG_NoDataException if the provided data is not signed
- * data.
- *
- * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
- * Use the <kbd>debug</kbd> option and file a bug report if these
- * exceptions occur.
- *
- * @see Crypt_GPG_Signature
- */
- public function verify($signedData, $signature = '')
- {
- return $this->_verify($signedData, false, $signature);
- }
-
- // }}}
- // {{{ verifyFile()
-
- /**
- * Verifies a signed file
- *
- * The {@link Crypt_GPG::decryptFile()} method may be used to get the
- * original message if the signed data is not clearsigned and does not use
- * a detached signature.
- *
- * @param string $filename the signed file to be verified.
- * @param string $signature optional. If verifying a file signed using a
- * detached signature, this must be the detached
- * signature data. The file that was signed is
- * specified in <kbd>$filename</kbd>.
- *
- * @return array an array of {@link Crypt_GPG_Signature} objects for the
- * signed data. For each signature that is valid, the
- * {@link Crypt_GPG_Signature::isValid()} will return true.
- *
- * @throws Crypt_GPG_NoDataException if the provided data is not signed
- * data.
- *
- * @throws Crypt_GPG_FileException if the input file is not readable.
- *
- * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
- * Use the <kbd>debug</kbd> option and file a bug report if these
- * exceptions occur.
- *
- * @see Crypt_GPG_Signature
- */
- public function verifyFile($filename, $signature = '')
- {
- return $this->_verify($filename, true, $signature);
- }
-
- // }}}
- // {{{ addDecryptKey()
-
- /**
- * Adds a key to use for decryption
- *
- * @param mixed $key the key to use. This may be a key identifier,
- * user id, fingerprint, {@link Crypt_GPG_Key} or
- * {@link Crypt_GPG_SubKey}. The key must be able
- * to encrypt.
- * @param string $passphrase optional. The passphrase of the key required
- * for decryption.
- *
- * @return Crypt_GPG the current object, for fluent interface.
- *
- * @see Crypt_GPG::decrypt()
- * @see Crypt_GPG::decryptFile()
- * @see Crypt_GPG::clearDecryptKeys()
- * @see Crypt_GPG::_addKey()
- * @see Crypt_GPG_DecryptStatusHandler
- *
- * @sensitive $passphrase
- */
- public function addDecryptKey($key, $passphrase = null)
- {
- $this->_addKey($this->decryptKeys, true, false, $key, $passphrase);
- return $this;
- }
-
- // }}}
- // {{{ addEncryptKey()
-
- /**
- * Adds a key to use for encryption
- *
- * @param mixed $key the key to use. This may be a key identifier, user id
- * user id, fingerprint, {@link Crypt_GPG_Key} or
- * {@link Crypt_GPG_SubKey}. The key must be able to
- * encrypt.
- *
- * @return Crypt_GPG the current object, for fluent interface.
- *
- * @see Crypt_GPG::encrypt()
- * @see Crypt_GPG::encryptFile()
- * @see Crypt_GPG::clearEncryptKeys()
- * @see Crypt_GPG::_addKey()
- */
- public function addEncryptKey($key)
- {
- $this->_addKey($this->encryptKeys, true, false, $key);
- return $this;
- }
-
- // }}}
- // {{{ addSignKey()
-
- /**
- * Adds a key to use for signing
- *
- * @param mixed $key the key to use. This may be a key identifier,
- * user id, fingerprint, {@link Crypt_GPG_Key} or
- * {@link Crypt_GPG_SubKey}. The key must be able
- * to sign.
- * @param string $passphrase optional. The passphrase of the key required
- * for signing.
- *
- * @return Crypt_GPG the current object, for fluent interface.
- *
- * @see Crypt_GPG::sign()
- * @see Crypt_GPG::signFile()
- * @see Crypt_GPG::clearSignKeys()
- * @see Crypt_GPG::handleSignStatus()
- * @see Crypt_GPG::_addKey()
- *
- * @sensitive $passphrase
- */
- public function addSignKey($key, $passphrase = null)
- {
- $this->_addKey($this->signKeys, false, true, $key, $passphrase);
- return $this;
- }
-
- // }}}
- // {{{ clearDecryptKeys()
-
- /**
- * Clears all decryption keys
- *
- * @return Crypt_GPG the current object, for fluent interface.
- *
- * @see Crypt_GPG::decrypt()
- * @see Crypt_GPG::addDecryptKey()
- */
- public function clearDecryptKeys()
- {
- $this->decryptKeys = array();
- return $this;
- }
-
- // }}}
- // {{{ clearEncryptKeys()
-
- /**
- * Clears all encryption keys
- *
- * @return Crypt_GPG the current object, for fluent interface.
- *
- * @see Crypt_GPG::encrypt()
- * @see Crypt_GPG::addEncryptKey()
- */
- public function clearEncryptKeys()
- {
- $this->encryptKeys = array();
- return $this;
- }
-
- // }}}
- // {{{ clearSignKeys()
-
- /**
- * Clears all signing keys
- *
- * @return Crypt_GPG the current object, for fluent interface.
- *
- * @see Crypt_GPG::sign()
- * @see Crypt_GPG::addSignKey()
- */
- public function clearSignKeys()
- {
- $this->signKeys = array();
- return $this;
- }
-
- // }}}
- // {{{ handleSignStatus()
-
- /**
- * Handles the status output from GPG for the sign operation
- *
- * This method is responsible for sending the passphrase commands when
- * required by the {@link Crypt_GPG::sign()} method. See <b>doc/DETAILS</b>
- * in the {@link http://www.gnupg.org/download/ GPG distribution} for
- * detailed information on GPG's status output.
- *
- * @param string $line the status line to handle.
- *
- * @return void
- *
- * @see Crypt_GPG::sign()
- */
- public function handleSignStatus($line)
- {
- $tokens = explode(' ', $line);
- switch ($tokens[0]) {
- case 'NEED_PASSPHRASE':
- $subKeyId = $tokens[1];
- if (array_key_exists($subKeyId, $this->signKeys)) {
- $passphrase = $this->signKeys[$subKeyId]['passphrase'];
- $this->engine->sendCommand($passphrase);
- } else {
- $this->engine->sendCommand('');
- }
- break;
- }
- }
-
- // }}}
- // {{{ handleImportKeyStatus()
-
- /**
- * Handles the status output from GPG for the import operation
- *
- * This method is responsible for building the result array that is
- * returned from the {@link Crypt_GPG::importKey()} method. See
- * <b>doc/DETAILS</b> in the
- * {@link http://www.gnupg.org/download/ GPG distribution} for detailed
- * information on GPG's status output.
- *
- * @param string $line the status line to handle.
- * @param array &$result the current result array being processed.
- *
- * @return void
- *
- * @see Crypt_GPG::importKey()
- * @see Crypt_GPG::importKeyFile()
- * @see Crypt_GPG_Engine::addStatusHandler()
- */
- public function handleImportKeyStatus($line, array &$result)
- {
- $tokens = explode(' ', $line);
- switch ($tokens[0]) {
- case 'IMPORT_OK':
- $result['fingerprint'] = $tokens[2];
- break;
-
- case 'IMPORT_RES':
- $result['public_imported'] = intval($tokens[3]);
- $result['public_unchanged'] = intval($tokens[5]);
- $result['private_imported'] = intval($tokens[11]);
- $result['private_unchanged'] = intval($tokens[12]);
- break;
- }
- }
-
- // }}}
- // {{{ _addKey()
-
- /**
- * Adds a key to one of the internal key arrays
- *
- * This handles resolving full key objects from the provided
- * <kbd>$key</kbd> value.
- *
- * @param array &$array the array to which the key should be added.
- * @param boolean $encrypt whether or not the key must be able to
- * encrypt.
- * @param boolean $sign whether or not the key must be able to sign.
- * @param mixed $key the key to add. This may be a key identifier,
- * user id, fingerprint, {@link Crypt_GPG_Key} or
- * {@link Crypt_GPG_SubKey}.
- * @param string $passphrase optional. The passphrase associated with the
- * key.
- *
- * @return void
- *
- * @sensitive $passphrase
- */
- protected function _addKey(array &$array, $encrypt, $sign, $key,
- $passphrase = null
- ) {
- $subKeys = array();
-
- if (is_scalar($key)) {
- $keys = $this->getKeys($key);
- if (count($keys) == 0) {
- throw new Crypt_GPG_KeyNotFoundException(
- 'Key "' . $key . '" not found.',
- 0,
- $key
- );
- }
- $key = $keys[0];
- }
-
- if ($key instanceof Crypt_GPG_Key) {
- if ($encrypt && !$key->canEncrypt()) {
- throw new InvalidArgumentException(
- 'Key "' . $key . '" cannot encrypt.'
- );
- }
-
- if ($sign && !$key->canSign()) {
- throw new InvalidArgumentException(
- 'Key "' . $key . '" cannot sign.'
- );
- }
-
- foreach ($key->getSubKeys() as $subKey) {
- $canEncrypt = $subKey->canEncrypt();
- $canSign = $subKey->canSign();
- if ( ($encrypt && $sign && $canEncrypt && $canSign)
- || ($encrypt && !$sign && $canEncrypt)
- || (!$encrypt && $sign && $canSign)
- ) {
- // We add all subkeys that meet the requirements because we
- // were not told which subkey is required.
- $subKeys[] = $subKey;
- }
- }
- } elseif ($key instanceof Crypt_GPG_SubKey) {
- $subKeys[] = $key;
- }
-
- if (count($subKeys) === 0) {
- throw new InvalidArgumentException(
- 'Key "' . $key . '" is not in a recognized format.'
- );
- }
-
- foreach ($subKeys as $subKey) {
- if ($encrypt && !$subKey->canEncrypt()) {
- throw new InvalidArgumentException(
- 'Key "' . $key . '" cannot encrypt.'
- );
- }
-
- if ($sign && !$subKey->canSign()) {
- throw new InvalidArgumentException(
- 'Key "' . $key . '" cannot sign.'
- );
- }
-
- $array[$subKey->getId()] = array(
- 'fingerprint' => $subKey->getFingerprint(),
- 'passphrase' => $passphrase
- );
- }
- }
-
- // }}}
- // {{{ _setPinEntryEnv()
-
- /**
- * Sets the PINENTRY_USER_DATA environment variable with the currently
- * added keys and passphrases
- *
- * Keys and pasphrases are stored as an indexed array of associative
- * arrays that is JSON encoded to a flat string.
- *
- * For GnuPG 2.x this is how passphrases are passed. For GnuPG 1.x the
- * environment variable is set but not used.
- *
- * @param array $keys the internal key array to use.
- *
- * @return void
- */
- protected function _setPinEntryEnv(array $keys)
- {
- $envKeys = array();
- foreach ($keys as $id => $key) {
- $envKeys[] = array(
- 'keyId' => $id,
- 'fingerprint' => $key['fingerprint'],
- 'passphrase' => $key['passphrase']
- );
- }
- $envKeys = json_encode($envKeys);
- $_ENV['PINENTRY_USER_DATA'] = $envKeys;
- }
-
- // }}}
- // {{{ _importKey()
-
- /**
- * Imports a public or private key into the keyring
- *
- * @param string $key the key to be imported.
- * @param boolean $isFile whether or not the input is a filename.
- *
- * @return array an associative array containing the following elements:
- * - <kbd>fingerprint</kbd> - the fingerprint of the
- * imported key,
- * - <kbd>public_imported</kbd> - the number of public
- * keys imported,
- * - <kbd>public_unchanged</kbd> - the number of unchanged
- * public keys,
- * - <kbd>private_imported</kbd> - the number of private
- * keys imported,
- * - <kbd>private_unchanged</kbd> - the number of unchanged
- * private keys.
- *
- * @throws Crypt_GPG_NoDataException if the key data is missing or if the
- * data is is not valid key data.
- *
- * @throws Crypt_GPG_FileException if the key file is not readable.
- *
- * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
- * Use the <kbd>debug</kbd> option and file a bug report if these
- * exceptions occur.
- */
- protected function _importKey($key, $isFile)
- {
- $result = array();
-
- if ($isFile) {
- $input = @fopen($key, 'rb');
- if ($input === false) {
- throw new Crypt_GPG_FileException(
- 'Could not open key file "' . $key . '" for importing.',
- 0,
- $key
- );
- }
- } else {
- $input = strval($key);
- if ($input == '') {
- throw new Crypt_GPG_NoDataException(
- 'No valid GPG key data found.',
- self::ERROR_NO_DATA
- );
- }
- }
-
- $arguments = array();
- $version = $this->engine->getVersion();
-
- if ( version_compare($version, '1.0.5', 'ge')
- && version_compare($version, '1.0.7', 'lt')
- ) {
- $arguments[] = '--allow-secret-key-import';
- }
-
- $this->engine->reset();
- $this->engine->addStatusHandler(
- array($this, 'handleImportKeyStatus'),
- array(&$result)
- );
-
- $this->engine->setOperation('--import', $arguments);
- $this->engine->setInput($input);
- $this->engine->run();
-
- if ($isFile) {
- fclose($input);
- }
-
- $code = $this->engine->getErrorCode();
-
- switch ($code) {
- case self::ERROR_DUPLICATE_KEY:
- case self::ERROR_NONE:
- // ignore duplicate key import errors
- break;
- case self::ERROR_NO_DATA:
- throw new Crypt_GPG_NoDataException(
- 'No valid GPG key data found.',
- $code
- );
- default:
- throw new Crypt_GPG_Exception(
- 'Unknown error importing GPG key. Please use the \'debug\' ' .
- 'option when creating the Crypt_GPG object, and file a bug ' .
- 'report at ' . self::BUG_URI,
- $code
- );
- }
-
- return $result;
- }
-
- // }}}
- // {{{ _encrypt()
-
- /**
- * Encrypts data
- *
- * @param string $data the data to encrypt.
- * @param boolean $isFile whether or not the data is a filename.
- * @param string $outputFile the filename of the file in which to store
- * the encrypted data. If null, the encrypted
- * data is returned as a string.
- * @param boolean $armor if true, ASCII armored data is returned;
- * otherwise, binary data is returned.
- *
- * @return void|string if the <kbd>$outputFile</kbd> parameter is null, a
- * string containing the encrypted data is returned.
- *
- * @throws Crypt_GPG_KeyNotFoundException if no encryption key is specified.
- * See {@link Crypt_GPG::addEncryptKey()}.
- *
- * @throws Crypt_GPG_FileException if the output file is not writeable or
- * if the input file is not readable.
- *
- * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
- * Use the <kbd>debug</kbd> option and file a bug report if these
- * exceptions occur.
- */
- protected function _encrypt($data, $isFile, $outputFile, $armor)
- {
- if (count($this->encryptKeys) === 0) {
- throw new Crypt_GPG_KeyNotFoundException(
- 'No encryption keys specified.'
- );
- }
-
- if ($isFile) {
- $input = @fopen($data, 'rb');
- if ($input === false) {
- throw new Crypt_GPG_FileException(
- 'Could not open input file "' . $data .
- '" for encryption.',
- 0,
- $data
- );
- }
- } else {
- $input = strval($data);
- }
-
- if ($outputFile === null) {
- $output = '';
- } else {
- $output = @fopen($outputFile, 'wb');
- if ($output === false) {
- if ($isFile) {
- fclose($input);
- }
- throw new Crypt_GPG_FileException(
- 'Could not open output file "' . $outputFile .
- '" for storing encrypted data.',
- 0,
- $outputFile
- );
- }
- }
-
- $arguments = ($armor) ? array('--armor') : array();
- foreach ($this->encryptKeys as $key) {
- $arguments[] = '--recipient ' . escapeshellarg($key['fingerprint']);
- }
-
- $this->engine->reset();
- $this->engine->setInput($input);
- $this->engine->setOutput($output);
- $this->engine->setOperation('--encrypt', $arguments);
- $this->engine->run();
-
- if ($isFile) {
- fclose($input);
- }
-
- if ($outputFile !== null) {
- fclose($output);
- }
-
- $code = $this->engine->getErrorCode();
-
- if ($code !== self::ERROR_NONE) {
- throw new Crypt_GPG_Exception(
- 'Unknown error encrypting data. Please use the \'debug\' ' .
- 'option when creating the Crypt_GPG object, and file a bug ' .
- 'report at ' . self::BUG_URI,
- $code
- );
- }
-
- if ($outputFile === null) {
- return $output;
- }
- }
-
- // }}}
- // {{{ _decrypt()
-
- /**
- * Decrypts data
- *
- * @param string $data the data to be decrypted.
- * @param boolean $isFile whether or not the data is a filename.
- * @param string $outputFile the name of the file to which the decrypted
- * data should be written. If null, the decrypted
- * data is returned as a string.
- *
- * @return void|string if the <kbd>$outputFile</kbd> parameter is null, a
- * string containing the decrypted data is returned.
- *
- * @throws Crypt_GPG_KeyNotFoundException if the private key needed to
- * decrypt the data is not in the user's keyring.
- *
- * @throws Crypt_GPG_NoDataException if specified data does not contain
- * GPG encrypted data.
- *
- * @throws Crypt_GPG_BadPassphraseException if a required passphrase is
- * incorrect or if a required passphrase is not specified. See
- * {@link Crypt_GPG::addDecryptKey()}.
- *
- * @throws Crypt_GPG_FileException if the output file is not writeable or
- * if the input file is not readable.
- *
- * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
- * Use the <kbd>debug</kbd> option and file a bug report if these
- * exceptions occur.
- */
- protected function _decrypt($data, $isFile, $outputFile)
- {
- if ($isFile) {
- $input = @fopen($data, 'rb');
- if ($input === false) {
- throw new Crypt_GPG_FileException(
- 'Could not open input file "' . $data .
- '" for decryption.',
- 0,
- $data
- );
- }
- } else {
- $input = strval($data);
- if ($input == '') {
- throw new Crypt_GPG_NoDataException(
- 'Cannot decrypt data. No PGP encrypted data was found in '.
- 'the provided data.',
- self::ERROR_NO_DATA
- );
- }
- }
-
- if ($outputFile === null) {
- $output = '';
- } else {
- $output = @fopen($outputFile, 'wb');
- if ($output === false) {
- if ($isFile) {
- fclose($input);
- }
- throw new Crypt_GPG_FileException(
- 'Could not open output file "' . $outputFile .
- '" for storing decrypted data.',
- 0,
- $outputFile
- );
- }
- }
-
- $handler = new Crypt_GPG_DecryptStatusHandler(
- $this->engine,
- $this->decryptKeys
- );
-
- // If using gpg-agent, set the decrypt pins used by the pinentry
- $this->_setPinEntryEnv($this->decryptKeys);
-
- $this->engine->reset();
- $this->engine->addStatusHandler(array($handler, 'handle'));
- $this->engine->setOperation('--decrypt');
- $this->engine->setInput($input);
- $this->engine->setOutput($output);
- $this->engine->run();
-
- if ($isFile) {
- fclose($input);
- }
-
- if ($outputFile !== null) {
- fclose($output);
- }
-
- // if there was any problem decrypting the data, the handler will
- // deal with it here.
- $handler->throwException();
-
- if ($outputFile === null) {
- return $output;
- }
- }
-
- // }}}
- // {{{ _sign()
-
- /**
- * Signs data
- *
- * @param string $data the data to be signed.
- * @param boolean $isFile whether or not the data is a filename.
- * @param string $outputFile the name of the file in which the signed data
- * should be stored. If null, the signed data is
- * returned as a string.
- * @param boolean $mode the data signing mode to use. Should be one of
- * {@link Crypt_GPG::SIGN_MODE_NORMAL},
- * {@link Crypt_GPG::SIGN_MODE_CLEAR} or
- * {@link Crypt_GPG::SIGN_MODE_DETACHED}.
- * @param boolean $armor if true, ASCII armored data is returned;
- * otherwise, binary data is returned. This has
- * no effect if the mode
- * <kbd>Crypt_GPG::SIGN_MODE_CLEAR</kbd> is
- * used.
- * @param boolean $textmode if true, line-breaks in signed data be
- * normalized. Use this option when signing
- * e-mail, or for greater compatibility between
- * systems with different line-break formats.
- * Defaults to false. This has no effect if the
- * mode <kbd>Crypt_GPG::SIGN_MODE_CLEAR</kbd> is
- * used as clear-signing always uses textmode.
- *
- * @return void|string if the <kbd>$outputFile</kbd> parameter is null, a
- * string containing the signed data (or the signature
- * data if a detached signature is requested) is
- * returned.
- *
- * @throws Crypt_GPG_KeyNotFoundException if no signing key is specified.
- * See {@link Crypt_GPG::addSignKey()}.
- *
- * @throws Crypt_GPG_BadPassphraseException if a specified passphrase is
- * incorrect or if a required passphrase is not specified.
- *
- * @throws Crypt_GPG_FileException if the output file is not writeable or
- * if the input file is not readable.
- *
- * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
- * Use the <kbd>debug</kbd> option and file a bug report if these
- * exceptions occur.
- */
- protected function _sign($data, $isFile, $outputFile, $mode, $armor,
- $textmode
- ) {
- if (count($this->signKeys) === 0) {
- throw new Crypt_GPG_KeyNotFoundException(
- 'No signing keys specified.'
- );
- }
-
- if ($isFile) {
- $input = @fopen($data, 'rb');
- if ($input === false) {
- throw new Crypt_GPG_FileException(
- 'Could not open input file "' . $data . '" for signing.',
- 0,
- $data
- );
- }
- } else {
- $input = strval($data);
- }
-
- if ($outputFile === null) {
- $output = '';
- } else {
- $output = @fopen($outputFile, 'wb');
- if ($output === false) {
- if ($isFile) {
- fclose($input);
- }
- throw new Crypt_GPG_FileException(
- 'Could not open output file "' . $outputFile .
- '" for storing signed data.',
- 0,
- $outputFile
- );
- }
- }
-
- switch ($mode) {
- case self::SIGN_MODE_DETACHED:
- $operation = '--detach-sign';
- break;
- case self::SIGN_MODE_CLEAR:
- $operation = '--clearsign';
- break;
- case self::SIGN_MODE_NORMAL:
- default:
- $operation = '--sign';
- break;
- }
-
- $arguments = array();
-
- if ($armor) {
- $arguments[] = '--armor';
- }
- if ($textmode) {
- $arguments[] = '--textmode';
- }
-
- foreach ($this->signKeys as $key) {
- $arguments[] = '--local-user ' .
- escapeshellarg($key['fingerprint']);
- }
-
- // If using gpg-agent, set the sign pins used by the pinentry
- $this->_setPinEntryEnv($this->signKeys);
-
- $this->engine->reset();
- $this->engine->addStatusHandler(array($this, 'handleSignStatus'));
- $this->engine->setInput($input);
- $this->engine->setOutput($output);
- $this->engine->setOperation($operation, $arguments);
- $this->engine->run();
-
- if ($isFile) {
- fclose($input);
- }
-
- if ($outputFile !== null) {
- fclose($output);
- }
-
- $code = $this->engine->getErrorCode();
-
- switch ($code) {
- case self::ERROR_NONE:
- break;
- case self::ERROR_KEY_NOT_FOUND:
- throw new Crypt_GPG_KeyNotFoundException(
- 'Cannot sign data. Private key not found. Import the '.
- 'private key before trying to sign data.',
- $code,
- $this->engine->getErrorKeyId()
- );
- case self::ERROR_BAD_PASSPHRASE:
- throw new Crypt_GPG_BadPassphraseException(
- 'Cannot sign data. Incorrect passphrase provided.',
- $code
- );
- case self::ERROR_MISSING_PASSPHRASE:
- throw new Crypt_GPG_BadPassphraseException(
- 'Cannot sign data. No passphrase provided.',
- $code
- );
- default:
- throw new Crypt_GPG_Exception(
- 'Unknown error signing data. Please use the \'debug\' option ' .
- 'when creating the Crypt_GPG object, and file a bug report ' .
- 'at ' . self::BUG_URI,
- $code
- );
- }
-
- if ($outputFile === null) {
- return $output;
- }
- }
-
- // }}}
- // {{{ _encryptAndSign()
-
- /**
- * Encrypts and signs data
- *
- * @param string $data the data to be encrypted and signed.
- * @param boolean $isFile whether or not the data is a filename.
- * @param string $outputFile the name of the file in which the encrypted,
- * signed data should be stored. If null, the
- * encrypted, signed data is returned as a
- * string.
- * @param boolean $armor if true, ASCII armored data is returned;
- * otherwise, binary data is returned.
- *
- * @return void|string if the <kbd>$outputFile</kbd> parameter is null, a
- * string containing the encrypted, signed data is
- * returned.
- *
- * @throws Crypt_GPG_KeyNotFoundException if no encryption key is specified
- * or if no signing key is specified. See
- * {@link Crypt_GPG::addEncryptKey()} and
- * {@link Crypt_GPG::addSignKey()}.
- *
- * @throws Crypt_GPG_BadPassphraseException if a specified passphrase is
- * incorrect or if a required passphrase is not specified.
- *
- * @throws Crypt_GPG_FileException if the output file is not writeable or
- * if the input file is not readable.
- *
- * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
- * Use the <kbd>debug</kbd> option and file a bug report if these
- * exceptions occur.
- */
- protected function _encryptAndSign($data, $isFile, $outputFile, $armor)
- {
- if (count($this->signKeys) === 0) {
- throw new Crypt_GPG_KeyNotFoundException(
- 'No signing keys specified.'
- );
- }
-
- if (count($this->encryptKeys) === 0) {
- throw new Crypt_GPG_KeyNotFoundException(
- 'No encryption keys specified.'
- );
- }
-
-
- if ($isFile) {
- $input = @fopen($data, 'rb');
- if ($input === false) {
- throw new Crypt_GPG_FileException(
- 'Could not open input file "' . $data .
- '" for encrypting and signing.',
- 0,
- $data
- );
- }
- } else {
- $input = strval($data);
- }
-
- if ($outputFile === null) {
- $output = '';
- } else {
- $output = @fopen($outputFile, 'wb');
- if ($output === false) {
- if ($isFile) {
- fclose($input);
- }
- throw new Crypt_GPG_FileException(
- 'Could not open output file "' . $outputFile .
- '" for storing encrypted, signed data.',
- 0,
- $outputFile
- );
- }
- }
-
- $arguments = ($armor) ? array('--armor') : array();
-
- foreach ($this->signKeys as $key) {
- $arguments[] = '--local-user ' .
- escapeshellarg($key['fingerprint']);
- }
-
- // If using gpg-agent, set the sign pins used by the pinentry
- $this->_setPinEntryEnv($this->signKeys);
-
- foreach ($this->encryptKeys as $key) {
- $arguments[] = '--recipient ' . escapeshellarg($key['fingerprint']);
- }
-
- $this->engine->reset();
- $this->engine->addStatusHandler(array($this, 'handleSignStatus'));
- $this->engine->setInput($input);
- $this->engine->setOutput($output);
- $this->engine->setOperation('--encrypt --sign', $arguments);
- $this->engine->run();
-
- if ($isFile) {
- fclose($input);
- }
-
- if ($outputFile !== null) {
- fclose($output);
- }
-
- $code = $this->engine->getErrorCode();
-
- switch ($code) {
- case self::ERROR_NONE:
- break;
- case self::ERROR_KEY_NOT_FOUND:
- throw new Crypt_GPG_KeyNotFoundException(
- 'Cannot sign encrypted data. Private key not found. Import '.
- 'the private key before trying to sign the encrypted data.',
- $code,
- $this->engine->getErrorKeyId()
- );
- case self::ERROR_BAD_PASSPHRASE:
- throw new Crypt_GPG_BadPassphraseException(
- 'Cannot sign encrypted data. Incorrect passphrase provided.',
- $code
- );
- case self::ERROR_MISSING_PASSPHRASE:
- throw new Crypt_GPG_BadPassphraseException(
- 'Cannot sign encrypted data. No passphrase provided.',
- $code
- );
- default:
- throw new Crypt_GPG_Exception(
- 'Unknown error encrypting and signing data. Please use the ' .
- '\'debug\' option when creating the Crypt_GPG object, and ' .
- 'file a bug report at ' . self::BUG_URI,
- $code
- );
- }
-
- if ($outputFile === null) {
- return $output;
- }
- }
-
- // }}}
- // {{{ _verify()
-
- /**
- * Verifies data
- *
- * @param string $data the signed data to be verified.
- * @param boolean $isFile whether or not the data is a filename.
- * @param string $signature if verifying a file signed using a detached
- * signature, this must be the detached signature
- * data. Otherwise, specify ''.
- *
- * @return array an array of {@link Crypt_GPG_Signature} objects for the
- * signed data.
- *
- * @throws Crypt_GPG_NoDataException if the provided data is not signed
- * data.
- *
- * @throws Crypt_GPG_FileException if the input file is not readable.
- *
- * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
- * Use the <kbd>debug</kbd> option and file a bug report if these
- * exceptions occur.
- *
- * @see Crypt_GPG_Signature
- */
- protected function _verify($data, $isFile, $signature)
- {
- if ($signature == '') {
- $operation = '--verify';
- $arguments = array();
- } else {
- // Signed data goes in FD_MESSAGE, detached signature data goes in
- // FD_INPUT.
- $operation = '--verify - "-&' . Crypt_GPG_Engine::FD_MESSAGE. '"';
- $arguments = array('--enable-special-filenames');
- }
-
- $handler = new Crypt_GPG_VerifyStatusHandler();
-
- if ($isFile) {
- $input = @fopen($data, 'rb');
- if ($input === false) {
- throw new Crypt_GPG_FileException(
- 'Could not open input file "' . $data . '" for verifying.',
- 0,
- $data
- );
- }
- } else {
- $input = strval($data);
- if ($input == '') {
- throw new Crypt_GPG_NoDataException(
- 'No valid signature data found.',
- self::ERROR_NO_DATA
- );
- }
- }
-
- $this->engine->reset();
- $this->engine->addStatusHandler(array($handler, 'handle'));
-
- if ($signature == '') {
- // signed or clearsigned data
- $this->engine->setInput($input);
- } else {
- // detached signature
- $this->engine->setInput($signature);
- $this->engine->setMessage($input);
- }
-
- $this->engine->setOperation($operation, $arguments);
- $this->engine->run();
-
- if ($isFile) {
- fclose($input);
- }
-
- $code = $this->engine->getErrorCode();
-
- switch ($code) {
- case self::ERROR_NONE:
- case self::ERROR_BAD_SIGNATURE:
- break;
- case self::ERROR_NO_DATA:
- throw new Crypt_GPG_NoDataException(
- 'No valid signature data found.',
- $code
- );
- case self::ERROR_KEY_NOT_FOUND:
- throw new Crypt_GPG_KeyNotFoundException(
- 'Public key required for data verification not in keyring.',
- $code,
- $this->engine->getErrorKeyId()
- );
- default:
- throw new Crypt_GPG_Exception(
- 'Unknown error validating signature details. Please use the ' .
- '\'debug\' option when creating the Crypt_GPG object, and ' .
- 'file a bug report at ' . self::BUG_URI,
- $code
- );
- }
-
- return $handler->getSignatures();
- }
-
- // }}}
- // {{{ _decryptAndVerify()
-
- /**
- * Decrypts and verifies encrypted, signed data
- *
- * @param string $data the encrypted signed data to be decrypted and
- * verified.
- * @param boolean $isFile whether or not the data is a filename.
- * @param string $outputFile the name of the file to which the decrypted
- * data should be written. If null, the decrypted
- * data is returned in the results array.
- *
- * @return array two element array. The array has an element 'data'
- * containing the decrypted data and an element
- * 'signatures' containing an array of
- * {@link Crypt_GPG_Signature} objects for the signed data.
- * If the decrypted data is written to a file, the 'data'
- * element is null.
- *
- * @throws Crypt_GPG_KeyNotFoundException if the private key needed to
- * decrypt the data is not in the user's keyring or it the public
- * key needed for verification is not in the user's keyring.
- *
- * @throws Crypt_GPG_NoDataException if specified data does not contain
- * GPG signed, encrypted data.
- *
- * @throws Crypt_GPG_BadPassphraseException if a required passphrase is
- * incorrect or if a required passphrase is not specified. See
- * {@link Crypt_GPG::addDecryptKey()}.
- *
- * @throws Crypt_GPG_FileException if the output file is not writeable or
- * if the input file is not readable.
- *
- * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
- * Use the <kbd>debug</kbd> option and file a bug report if these
- * exceptions occur.
- *
- * @see Crypt_GPG_Signature
- */
- protected function _decryptAndVerify($data, $isFile, $outputFile)
- {
- if ($isFile) {
- $input = @fopen($data, 'rb');
- if ($input === false) {
- throw new Crypt_GPG_FileException(
- 'Could not open input file "' . $data .
- '" for decrypting and verifying.',
- 0,
- $data
- );
- }
- } else {
- $input = strval($data);
- if ($input == '') {
- throw new Crypt_GPG_NoDataException(
- 'No valid encrypted signed data found.',
- self::ERROR_NO_DATA
- );
- }
- }
-
- if ($outputFile === null) {
- $output = '';
- } else {
- $output = @fopen($outputFile, 'wb');
- if ($output === false) {
- if ($isFile) {
- fclose($input);
- }
- throw new Crypt_GPG_FileException(
- 'Could not open output file "' . $outputFile .
- '" for storing decrypted data.',
- 0,
- $outputFile
- );
- }
- }
-
- $verifyHandler = new Crypt_GPG_VerifyStatusHandler();
-
- $decryptHandler = new Crypt_GPG_DecryptStatusHandler(
- $this->engine,
- $this->decryptKeys
- );
-
- // If using gpg-agent, set the decrypt pins used by the pinentry
- $this->_setPinEntryEnv($this->decryptKeys);
-
- $this->engine->reset();
- $this->engine->addStatusHandler(array($verifyHandler, 'handle'));
- $this->engine->addStatusHandler(array($decryptHandler, 'handle'));
- $this->engine->setInput($input);
- $this->engine->setOutput($output);
- $this->engine->setOperation('--decrypt');
- $this->engine->run();
-
- if ($isFile) {
- fclose($input);
- }
-
- if ($outputFile !== null) {
- fclose($output);
- }
-
- $return = array(
- 'data' => null,
- 'signatures' => $verifyHandler->getSignatures()
- );
-
- // if there was any problem decrypting the data, the handler will
- // deal with it here.
- try {
- $decryptHandler->throwException();
- } catch (Exception $e) {
- if ($e instanceof Crypt_GPG_KeyNotFoundException) {
- throw new Crypt_GPG_KeyNotFoundException(
- 'Public key required for data verification not in ',
- 'the keyring. Either no suitable private decryption key ' .
- 'is in the keyring or the public key required for data ' .
- 'verification is not in the keyring. Import a suitable ' .
- 'key before trying to decrypt and verify this data.',
- self::ERROR_KEY_NOT_FOUND,
- $this->engine->getErrorKeyId()
- );
- }
-
- if ($e instanceof Crypt_GPG_NoDataException) {
- throw new Crypt_GPG_NoDataException(
- 'Cannot decrypt and verify data. No PGP encrypted data ' .
- 'was found in the provided data.',
- self::ERROR_NO_DATA
- );
- }
-
- throw $e;
- }
-
- if ($outputFile === null) {
- $return['data'] = $output;
- }
-
- return $return;
- }
-
- // }}}
-}
-
-// }}}
-
-?>
diff --git a/program/lib/Crypt/GPG/ByteUtils.php b/program/lib/Crypt/GPG/ByteUtils.php
deleted file mode 100644
index 342905471..000000000
--- a/program/lib/Crypt/GPG/ByteUtils.php
+++ /dev/null
@@ -1,105 +0,0 @@
-<?php
-
-/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
-
-/**
- * A class for performing byte-wise string operations
- *
- * GPG I/O streams are managed using bytes rather than characters.
- *
- * PHP version 5
- *
- * LICENSE:
- *
- * This library is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of the
- * License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * @category Encryption
- * @package Crypt_GPG
- * @author Michael Gauthier <mike@silverorange.com>
- * @copyright 2013 silverorange
- * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
- * @version CVS: $Id$
- * @link http://pear.php.net/package/Crypt_GPG
- */
-
-// {{{ class Crypt_GPG_ByteUtils
-
-/**
- * A class for performing byte-wise string operations
- *
- * GPG I/O streams are managed using bytes rather than characters. This class
- * requires the mbstring extension to be available.
- *
- * @category Encryption
- * @package Crypt_GPG
- * @author Michael Gauthier <mike@silverorange.com>
- * @copyright 2013 silverorange
- * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
- * @link http://pear.php.net/package/Crypt_GPG
- * @link http://php.net/mbstring
- */
-class Crypt_GPG_ByteUtils
-{
- // {{{ strlen()
-
- /**
- * Gets the length of a string in bytes
- *
- * This is used for stream-based communication with the GPG subprocess.
- *
- * @param string $string the string for which to get the length.
- *
- * @return integer the length of the string in bytes.
- */
- public static function strlen($string)
- {
- return mb_strlen($string, '8bit');
- }
-
- // }}}
- // {{{ substr()
-
- /**
- * Gets the substring of a string in bytes
- *
- * This is used for stream-based communication with the GPG subprocess.
- *
- * @param string $string the input string.
- * @param integer $start the starting point at which to get the substring.
- * @param integer $length optional. The length of the substring.
- *
- * @return string the extracted part of the string. Unlike the default PHP
- * <kbd>substr()</kbd> function, the returned value is
- * always a string and never false.
- */
- public static function substr($string, $start, $length = null)
- {
- if ($length === null) {
- return mb_substr(
- $string,
- $start,
- self::strlen($string) - $start, '8bit'
- );
- }
-
- return mb_substr($string, $start, $length, '8bit');
- }
-
- // }}}
-}
-
-// }}}
-
-?>
diff --git a/program/lib/Crypt/GPG/DecryptStatusHandler.php b/program/lib/Crypt/GPG/DecryptStatusHandler.php
deleted file mode 100644
index 67c0dd74b..000000000
--- a/program/lib/Crypt/GPG/DecryptStatusHandler.php
+++ /dev/null
@@ -1,344 +0,0 @@
-<?php
-
-/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
-
-/**
- * Crypt_GPG is a package to use GnuPG from PHP
- *
- * This file contains an object that handles GnuPG's status output for the
- * decrypt operation.
- *
- * PHP version 5
- *
- * LICENSE:
- *
- * This library is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of the
- * License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * @category Encryption
- * @package Crypt_GPG
- * @author Michael Gauthier <mike@silverorange.com>
- * @copyright 2008-2013 silverorange
- * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
- * @version CVS: $Id$
- * @link http://pear.php.net/package/Crypt_GPG
- * @link http://www.gnupg.org/
- */
-
-/**
- * Crypt_GPG base class
- */
-require_once 'Crypt/GPG.php';
-
-/**
- * Crypt_GPG exception classes
- */
-require_once 'Crypt/GPG/Exceptions.php';
-
-
-/**
- * Status line handler for the decrypt operation
- *
- * This class is used internally by Crypt_GPG and does not need be used
- * directly. See the {@link Crypt_GPG} class for end-user API.
- *
- * This class is responsible for sending the passphrase commands when required
- * by the {@link Crypt_GPG::decrypt()} method. See <b>doc/DETAILS</b> in the
- * {@link http://www.gnupg.org/download/ GnuPG distribution} for detailed
- * information on GnuPG's status output for the decrypt operation.
- *
- * This class is also responsible for parsing error status and throwing a
- * meaningful exception in the event that decryption fails.
- *
- * @category Encryption
- * @package Crypt_GPG
- * @author Michael Gauthier <mike@silverorange.com>
- * @copyright 2008-2013 silverorange
- * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
- * @link http://pear.php.net/package/Crypt_GPG
- * @link http://www.gnupg.org/
- */
-class Crypt_GPG_DecryptStatusHandler
-{
- // {{{ protected properties
-
- /**
- * Keys used to decrypt
- *
- * The array is of the form:
- * <code>
- * array(
- * $key_id => array(
- * 'fingerprint' => $fingerprint,
- * 'passphrase' => $passphrase
- * )
- * );
- * </code>
- *
- * @var array
- */
- protected $keys = array();
-
- /**
- * Engine used to which passphrases are passed
- *
- * @var Crypt_GPG_Engine
- */
- protected $engine = null;
-
- /**
- * The id of the current sub-key used for decryption
- *
- * @var string
- */
- protected $currentSubKey = '';
-
- /**
- * Whether or not decryption succeeded
- *
- * If the message is only signed (compressed) and not encrypted, this is
- * always true. If the message is encrypted, this flag is set to false
- * until we know the decryption succeeded.
- *
- * @var boolean
- */
- protected $decryptionOkay = true;
-
- /**
- * Whether or not there was no data for decryption
- *
- * @var boolean
- */
- protected $noData = false;
-
- /**
- * Keys for which the passhprase is missing
- *
- * This contains primary user ids indexed by sub-key id and is used to
- * create helpful exception messages.
- *
- * @var array
- */
- protected $missingPassphrases = array();
-
- /**
- * Keys for which the passhprase is incorrect
- *
- * This contains primary user ids indexed by sub-key id and is used to
- * create helpful exception messages.
- *
- * @var array
- */
- protected $badPassphrases = array();
-
- /**
- * Keys that can be used to decrypt the data but are missing from the
- * keychain
- *
- * This is an array with both the key and value being the sub-key id of
- * the missing keys.
- *
- * @var array
- */
- protected $missingKeys = array();
-
- // }}}
- // {{{ __construct()
-
- /**
- * Creates a new decryption status handler
- *
- * @param Crypt_GPG_Engine $engine the GPG engine to which passphrases are
- * passed.
- * @param array $keys the decryption keys to use.
- */
- public function __construct(Crypt_GPG_Engine $engine, array $keys)
- {
- $this->engine = $engine;
- $this->keys = $keys;
- }
-
- // }}}
- // {{{ handle()
-
- /**
- * Handles a status line
- *
- * @param string $line the status line to handle.
- *
- * @return void
- */
- public function handle($line)
- {
- $tokens = explode(' ', $line);
- switch ($tokens[0]) {
- case 'ENC_TO':
- // Now we know the message is encrypted. Set flag to check if
- // decryption succeeded.
- $this->decryptionOkay = false;
-
- // this is the new key message
- $this->currentSubKeyId = $tokens[1];
- break;
-
- case 'NEED_PASSPHRASE':
- // send passphrase to the GPG engine
- $subKeyId = $tokens[1];
- if (array_key_exists($subKeyId, $this->keys)) {
- $passphrase = $this->keys[$subKeyId]['passphrase'];
- $this->engine->sendCommand($passphrase);
- } else {
- $this->engine->sendCommand('');
- }
- break;
-
- case 'USERID_HINT':
- // remember the user id for pretty exception messages
- $this->badPassphrases[$tokens[1]]
- = implode(' ', array_splice($tokens, 2));
-
- break;
-
- case 'GOOD_PASSPHRASE':
- // if we got a good passphrase, remove the key from the list of
- // bad passphrases.
- unset($this->badPassphrases[$this->currentSubKeyId]);
- break;
-
- case 'MISSING_PASSPHRASE':
- $this->missingPassphrases[$this->currentSubKeyId]
- = $this->currentSubKeyId;
-
- break;
-
- case 'NO_SECKEY':
- // note: this message is also received if there are multiple
- // recipients and a previous key had a correct passphrase.
- $this->missingKeys[$tokens[1]] = $tokens[1];
- break;
-
- case 'NODATA':
- $this->noData = true;
- break;
-
- case 'DECRYPTION_OKAY':
- // If the message is encrypted, this is the all-clear signal.
- $this->decryptionOkay = true;
- break;
- }
- }
-
- // }}}
- // {{{ throwException()
-
- /**
- * Takes the final status of the decrypt operation and throws an
- * appropriate exception
- *
- * If decryption was successful, no exception is thrown.
- *
- * @return void
- *
- * @throws Crypt_GPG_KeyNotFoundException if the private key needed to
- * decrypt the data is not in the user's keyring.
- *
- * @throws Crypt_GPG_NoDataException if specified data does not contain
- * GPG encrypted data.
- *
- * @throws Crypt_GPG_BadPassphraseException if a required passphrase is
- * incorrect or if a required passphrase is not specified. See
- * {@link Crypt_GPG::addDecryptKey()}.
- *
- * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
- * Use the <i>debug</i> option and file a bug report if these
- * exceptions occur.
- */
- public function throwException()
- {
- $code = Crypt_GPG::ERROR_NONE;
-
- if (!$this->decryptionOkay) {
- if (count($this->badPassphrases) > 0) {
- $code = Crypt_GPG::ERROR_BAD_PASSPHRASE;
- } elseif (count($this->missingKeys) > 0) {
- $code = Crypt_GPG::ERROR_KEY_NOT_FOUND;
- } else {
- $code = Crypt_GPG::ERROR_UNKNOWN;
- }
- } elseif ($this->noData) {
- $code = Crypt_GPG::ERROR_NO_DATA;
- }
-
- switch ($code) {
- case Crypt_GPG::ERROR_NONE:
- break;
-
- case Crypt_GPG::ERROR_KEY_NOT_FOUND:
- if (count($this->missingKeys) > 0) {
- $keyId = reset($this->missingKeys);
- } else {
- $keyId = '';
- }
- throw new Crypt_GPG_KeyNotFoundException(
- 'Cannot decrypt data. No suitable private key is in the ' .
- 'keyring. Import a suitable private key before trying to ' .
- 'decrypt this data.',
- $code,
- $keyId
- );
- case Crypt_GPG::ERROR_BAD_PASSPHRASE:
- $badPassphrases = array_diff_key(
- $this->badPassphrases,
- $this->missingPassphrases
- );
-
- $missingPassphrases = array_intersect_key(
- $this->badPassphrases,
- $this->missingPassphrases
- );
-
- $message = 'Cannot decrypt data.';
- if (count($badPassphrases) > 0) {
- $message = ' Incorrect passphrase provided for keys: "' .
- implode('", "', $badPassphrases) . '".';
- }
- if (count($missingPassphrases) > 0) {
- $message = ' No passphrase provided for keys: "' .
- implode('", "', $badPassphrases) . '".';
- }
-
- throw new Crypt_GPG_BadPassphraseException(
- $message,
- $code,
- $badPassphrases,
- $missingPassphrases
- );
- case Crypt_GPG::ERROR_NO_DATA:
- throw new Crypt_GPG_NoDataException(
- 'Cannot decrypt data. No PGP encrypted data was found in '.
- 'the provided data.',
- $code
- );
- default:
- throw new Crypt_GPG_Exception(
- 'Unknown error decrypting data.',
- $code
- );
- }
- }
-
- // }}}
-}
-
-?>
diff --git a/program/lib/Crypt/GPG/Engine.php b/program/lib/Crypt/GPG/Engine.php
deleted file mode 100644
index 601541443..000000000
--- a/program/lib/Crypt/GPG/Engine.php
+++ /dev/null
@@ -1,2006 +0,0 @@
-<?php
-
-/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
-
-/**
- * Crypt_GPG is a package to use GPG from PHP
- *
- * This file contains an engine that handles GPG subprocess control and I/O.
- * PHP's process manipulation functions are used to handle the GPG subprocess.
- *
- * PHP version 5
- *
- * LICENSE:
- *
- * This library is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of the
- * License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * @category Encryption
- * @package Crypt_GPG
- * @author Nathan Fredrickson <nathan@silverorange.com>
- * @author Michael Gauthier <mike@silverorange.com>
- * @copyright 2005-2013 silverorange
- * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
- * @version CVS: $Id$
- * @link http://pear.php.net/package/Crypt_GPG
- * @link http://www.gnupg.org/
- */
-
-/**
- * Crypt_GPG base class.
- */
-require_once 'Crypt/GPG.php';
-
-/**
- * GPG exception classes.
- */
-require_once 'Crypt/GPG/Exceptions.php';
-
-/**
- * Byte string operations.
- */
-require_once 'Crypt/GPG/ByteUtils.php';
-
-/**
- * Process control methods.
- */
-require_once 'Crypt/GPG/ProcessControl.php';
-
-/**
- * Standard PEAR exception is used if GPG binary is not found.
- */
-require_once 'PEAR/Exception.php';
-
-// {{{ class Crypt_GPG_Engine
-
-/**
- * Native PHP Crypt_GPG I/O engine
- *
- * This class is used internally by Crypt_GPG and does not need be used
- * directly. See the {@link Crypt_GPG} class for end-user API.
- *
- * This engine uses PHP's native process control functions to directly control
- * the GPG process. The GPG executable is required to be on the system.
- *
- * All data is passed to the GPG subprocess using file descriptors. This is the
- * most secure method of passing data to the GPG subprocess.
- *
- * @category Encryption
- * @package Crypt_GPG
- * @author Nathan Fredrickson <nathan@silverorange.com>
- * @author Michael Gauthier <mike@silverorange.com>
- * @copyright 2005-2013 silverorange
- * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
- * @link http://pear.php.net/package/Crypt_GPG
- * @link http://www.gnupg.org/
- */
-class Crypt_GPG_Engine
-{
- // {{{ constants
-
- /**
- * Size of data chunks that are sent to and retrieved from the IPC pipes.
- *
- * PHP reads 8192 bytes. If this is set to less than 8192, PHP reads 8192
- * and buffers the rest so we might as well just read 8192.
- *
- * Using values other than 8192 also triggers PHP bugs.
- *
- * @see http://bugs.php.net/bug.php?id=35224
- */
- const CHUNK_SIZE = 8192;
-
- /**
- * Standard input file descriptor. This is used to pass data to the GPG
- * process.
- */
- const FD_INPUT = 0;
-
- /**
- * Standard output file descriptor. This is used to receive normal output
- * from the GPG process.
- */
- const FD_OUTPUT = 1;
-
- /**
- * Standard output file descriptor. This is used to receive error output
- * from the GPG process.
- */
- const FD_ERROR = 2;
-
- /**
- * GPG status output file descriptor. The status file descriptor outputs
- * detailed information for many GPG commands. See the second section of
- * the file <b>doc/DETAILS</b> in the
- * {@link http://www.gnupg.org/download/ GPG package} for a detailed
- * description of GPG's status output.
- */
- const FD_STATUS = 3;
-
- /**
- * Command input file descriptor. This is used for methods requiring
- * passphrases.
- */
- const FD_COMMAND = 4;
-
- /**
- * Extra message input file descriptor. This is used for passing signed
- * data when verifying a detached signature.
- */
- const FD_MESSAGE = 5;
-
- /**
- * Minimum version of GnuPG that is supported.
- */
- const MIN_VERSION = '1.0.2';
-
- // }}}
- // {{{ private class properties
-
- /**
- * Whether or not to use debugging mode
- *
- * When set to true, every GPG command is echoed before it is run. Sensitive
- * data is always handled using pipes and is not specified as part of the
- * command. As a result, sensitive data is never displayed when debug is
- * enabled. Sensitive data includes private key data and passphrases.
- *
- * Debugging is off by default.
- *
- * @var boolean
- * @see Crypt_GPG_Engine::__construct()
- */
- private $_debug = false;
-
- /**
- * Location of GPG binary
- *
- * @var string
- * @see Crypt_GPG_Engine::__construct()
- * @see Crypt_GPG_Engine::_getBinary()
- */
- private $_binary = '';
-
- /**
- * Location of GnuPG agent binary
- *
- * Only used for GnuPG 2.x
- *
- * @var string
- * @see Crypt_GPG_Engine::__construct()
- * @see Crypt_GPG_Engine::_getAgent()
- */
- private $_agent = '';
-
- /**
- * Directory containing the GPG key files
- *
- * This property only contains the path when the <i>homedir</i> option
- * is specified in the constructor.
- *
- * @var string
- * @see Crypt_GPG_Engine::__construct()
- */
- private $_homedir = '';
-
- /**
- * File path of the public keyring
- *
- * This property only contains the file path when the <i>public_keyring</i>
- * option is specified in the constructor.
- *
- * If the specified file path starts with <kbd>~/</kbd>, the path is
- * relative to the <i>homedir</i> if specified, otherwise to
- * <kbd>~/.gnupg</kbd>.
- *
- * @var string
- * @see Crypt_GPG_Engine::__construct()
- */
- private $_publicKeyring = '';
-
- /**
- * File path of the private (secret) keyring
- *
- * This property only contains the file path when the <i>private_keyring</i>
- * option is specified in the constructor.
- *
- * If the specified file path starts with <kbd>~/</kbd>, the path is
- * relative to the <i>homedir</i> if specified, otherwise to
- * <kbd>~/.gnupg</kbd>.
- *
- * @var string
- * @see Crypt_GPG_Engine::__construct()
- */
- private $_privateKeyring = '';
-
- /**
- * File path of the trust database
- *
- * This property only contains the file path when the <i>trust_db</i>
- * option is specified in the constructor.
- *
- * If the specified file path starts with <kbd>~/</kbd>, the path is
- * relative to the <i>homedir</i> if specified, otherwise to
- * <kbd>~/.gnupg</kbd>.
- *
- * @var string
- * @see Crypt_GPG_Engine::__construct()
- */
- private $_trustDb = '';
-
- /**
- * Array of pipes used for communication with the GPG binary
- *
- * This is an array of file descriptor resources.
- *
- * @var array
- */
- private $_pipes = array();
-
- /**
- * Array of pipes used for communication with the gpg-agent binary
- *
- * This is an array of file descriptor resources.
- *
- * @var array
- */
- private $_agentPipes = array();
-
- /**
- * Array of currently opened pipes
- *
- * This array is used to keep track of remaining opened pipes so they can
- * be closed when the GPG subprocess is finished. This array is a subset of
- * the {@link Crypt_GPG_Engine::$_pipes} array and contains opened file
- * descriptor resources.
- *
- * @var array
- * @see Crypt_GPG_Engine::_closePipe()
- */
- private $_openPipes = array();
-
- /**
- * A handle for the GPG process
- *
- * @var resource
- */
- private $_process = null;
-
- /**
- * A handle for the gpg-agent process
- *
- * @var resource
- */
- private $_agentProcess = null;
-
- /**
- * GPG agent daemon socket and PID for running gpg-agent
- *
- * @var string
- */
- private $_agentInfo = null;
-
- /**
- * Whether or not the operating system is Darwin (OS X)
- *
- * @var boolean
- */
- private $_isDarwin = false;
-
- /**
- * Commands to be sent to GPG's command input stream
- *
- * @var string
- * @see Crypt_GPG_Engine::sendCommand()
- */
- private $_commandBuffer = '';
-
- /**
- * Array of status line handlers
- *
- * @var array
- * @see Crypt_GPG_Engine::addStatusHandler()
- */
- private $_statusHandlers = array();
-
- /**
- * Array of error line handlers
- *
- * @var array
- * @see Crypt_GPG_Engine::addErrorHandler()
- */
- private $_errorHandlers = array();
-
- /**
- * The error code of the current operation
- *
- * @var integer
- * @see Crypt_GPG_Engine::getErrorCode()
- */
- private $_errorCode = Crypt_GPG::ERROR_NONE;
-
- /**
- * File related to the error code of the current operation
- *
- * @var string
- * @see Crypt_GPG_Engine::getErrorFilename()
- */
- private $_errorFilename = '';
-
- /**
- * Key id related to the error code of the current operation
- *
- * @var string
- * @see Crypt_GPG_Engine::getErrorKeyId()
- */
- private $_errorkeyId = '';
-
- /**
- * The number of currently needed passphrases
- *
- * If this is not zero when the GPG command is completed, the error code is
- * set to {@link Crypt_GPG::ERROR_MISSING_PASSPHRASE}.
- *
- * @var integer
- */
- private $_needPassphrase = 0;
-
- /**
- * The input source
- *
- * This is data to send to GPG. Either a string or a stream resource.
- *
- * @var string|resource
- * @see Crypt_GPG_Engine::setInput()
- */
- private $_input = null;
-
- /**
- * The extra message input source
- *
- * Either a string or a stream resource.
- *
- * @var string|resource
- * @see Crypt_GPG_Engine::setMessage()
- */
- private $_message = null;
-
- /**
- * The output location
- *
- * This is where the output from GPG is sent. Either a string or a stream
- * resource.
- *
- * @var string|resource
- * @see Crypt_GPG_Engine::setOutput()
- */
- private $_output = '';
-
- /**
- * The GPG operation to execute
- *
- * @var string
- * @see Crypt_GPG_Engine::setOperation()
- */
- private $_operation;
-
- /**
- * Arguments for the current operation
- *
- * @var array
- * @see Crypt_GPG_Engine::setOperation()
- */
- private $_arguments = array();
-
- /**
- * The version number of the GPG binary
- *
- * @var string
- * @see Crypt_GPG_Engine::getVersion()
- */
- private $_version = '';
-
- // }}}
- // {{{ __construct()
-
- /**
- * Creates a new GPG engine
- *
- * Available options are:
- *
- * - <kbd>string homedir</kbd> - the directory where the GPG
- * keyring files are stored. If not
- * specified, Crypt_GPG uses the
- * default of <kbd>~/.gnupg</kbd>.
- * - <kbd>string publicKeyring</kbd> - the file path of the public
- * keyring. Use this if the public
- * keyring is not in the homedir, or
- * if the keyring is in a directory
- * not writable by the process
- * invoking GPG (like Apache). Then
- * you can specify the path to the
- * keyring with this option
- * (/foo/bar/pubring.gpg), and specify
- * a writable directory (like /tmp)
- * using the <i>homedir</i> option.
- * - <kbd>string privateKeyring</kbd> - the file path of the private
- * keyring. Use this if the private
- * keyring is not in the homedir, or
- * if the keyring is in a directory
- * not writable by the process
- * invoking GPG (like Apache). Then
- * you can specify the path to the
- * keyring with this option
- * (/foo/bar/secring.gpg), and specify
- * a writable directory (like /tmp)
- * using the <i>homedir</i> option.
- * - <kbd>string trustDb</kbd> - the file path of the web-of-trust
- * database. Use this if the trust
- * database is not in the homedir, or
- * if the database is in a directory
- * not writable by the process
- * invoking GPG (like Apache). Then
- * you can specify the path to the
- * trust database with this option
- * (/foo/bar/trustdb.gpg), and specify
- * a writable directory (like /tmp)
- * using the <i>homedir</i> option.
- * - <kbd>string binary</kbd> - the location of the GPG binary. If
- * not specified, the driver attempts
- * to auto-detect the GPG binary
- * location using a list of known
- * default locations for the current
- * operating system. The option
- * <kbd>gpgBinary</kbd> is a
- * deprecated alias for this option.
- * - <kbd>string agent</kbd> - the location of the GnuPG agent
- * binary. The gpg-agent is only
- * used for GnuPG 2.x. If not
- * specified, the engine attempts
- * to auto-detect the gpg-agent
- * binary location using a list of
- * know default locations for the
- * current operating system.
- * - <kbd>boolean debug</kbd> - whether or not to use debug mode.
- * When debug mode is on, all
- * communication to and from the GPG
- * subprocess is logged. This can be
- * useful to diagnose errors when
- * using Crypt_GPG.
- *
- * @param array $options optional. An array of options used to create the
- * GPG object. All options are optional and are
- * represented as key-value pairs.
- *
- * @throws Crypt_GPG_FileException if the <kbd>homedir</kbd> does not exist
- * and cannot be created. This can happen if <kbd>homedir</kbd> is
- * not specified, Crypt_GPG is run as the web user, and the web
- * user has no home directory. This exception is also thrown if any
- * of the options <kbd>publicKeyring</kbd>,
- * <kbd>privateKeyring</kbd> or <kbd>trustDb</kbd> options are
- * specified but the files do not exist or are are not readable.
- * This can happen if the user running the Crypt_GPG process (for
- * example, the Apache user) does not have permission to read the
- * files.
- *
- * @throws PEAR_Exception if the provided <kbd>binary</kbd> is invalid, or
- * if no <kbd>binary</kbd> is provided and no suitable binary could
- * be found.
- *
- * @throws PEAR_Exception if the provided <kbd>agent</kbd> is invalid, or
- * if no <kbd>agent</kbd> is provided and no suitable gpg-agent
- * cound be found.
- */
- public function __construct(array $options = array())
- {
- $this->_isDarwin = (strncmp(strtoupper(PHP_OS), 'DARWIN', 6) === 0);
-
- // get homedir
- if (array_key_exists('homedir', $options)) {
- $this->_homedir = (string)$options['homedir'];
- } else {
- if (extension_loaded('posix')) {
- // note: this requires the package OS dep exclude 'windows'
- $info = posix_getpwuid(posix_getuid());
- $this->_homedir = $info['dir'].'/.gnupg';
- } else {
- if (isset($_SERVER['HOME'])) {
- $this->_homedir = $_SERVER['HOME'];
- } else {
- $this->_homedir = getenv('HOME');
- }
- }
-
- if ($this->_homedir === false) {
- throw new Crypt_GPG_FileException(
- 'Could not locate homedir. Please specify the homedir ' .
- 'to use with the \'homedir\' option when instantiating ' .
- 'the Crypt_GPG object.'
- );
- }
- }
-
- // attempt to create homedir if it does not exist
- if (!is_dir($this->_homedir)) {
- if (@mkdir($this->_homedir, 0777, true)) {
- // Set permissions on homedir. Parent directories are created
- // with 0777, homedir is set to 0700.
- chmod($this->_homedir, 0700);
- } else {
- throw new Crypt_GPG_FileException(
- 'The \'homedir\' "' . $this->_homedir . '" is not ' .
- 'readable or does not exist and cannot be created. This ' .
- 'can happen if \'homedir\' is not specified in the ' .
- 'Crypt_GPG options, Crypt_GPG is run as the web user, ' .
- 'and the web user has no home directory.',
- 0,
- $this->_homedir
- );
- }
- }
-
- // check homedir permissions (See Bug #19833)
- if (!is_executable($this->_homedir)) {
- throw new Crypt_GPG_FileException(
- 'The \'homedir\' "' . $this->_homedir . '" is not enterable ' .
- 'by the current user. Please check the permissions on your ' .
- 'homedir and make sure the current user can both enter and ' .
- 'write to the directory.',
- 0,
- $this->_homedir
- );
- }
- if (!is_writeable($this->_homedir)) {
- throw new Crypt_GPG_FileException(
- 'The \'homedir\' "' . $this->_homedir . '" is not writable ' .
- 'by the current user. Please check the permissions on your ' .
- 'homedir and make sure the current user can both enter and ' .
- 'write to the directory.',
- 0,
- $this->_homedir
- );
- }
-
- // get binary
- if (array_key_exists('binary', $options)) {
- $this->_binary = (string)$options['binary'];
- } elseif (array_key_exists('gpgBinary', $options)) {
- // deprecated alias
- $this->_binary = (string)$options['gpgBinary'];
- } else {
- $this->_binary = $this->_getBinary();
- }
-
- if ($this->_binary == '' || !is_executable($this->_binary)) {
- throw new PEAR_Exception(
- 'GPG binary not found. If you are sure the GPG binary is ' .
- 'installed, please specify the location of the GPG binary ' .
- 'using the \'binary\' driver option.'
- );
- }
-
- // get agent
- if (array_key_exists('agent', $options)) {
- $this->_agent = (string)$options['agent'];
- } else {
- $this->_agent = $this->_getAgent();
- }
-
- if ($this->_agent == '' || !is_executable($this->_agent)) {
- throw new PEAR_Exception(
- 'gpg-agent binary not found. If you are sure the gpg-agent ' .
- 'is installed, please specify the location of the gpg-agent ' .
- 'binary using the \'agent\' driver option.'
- );
- }
-
- /*
- * Note:
- *
- * Normally, GnuPG expects keyrings to be in the homedir and expects
- * to be able to write temporary files in the homedir. Sometimes,
- * keyrings are not in the homedir, or location of the keyrings does
- * not allow writing temporary files. In this case, the <i>homedir</i>
- * option by itself is not enough to specify the keyrings because GnuPG
- * can not write required temporary files. Additional options are
- * provided so you can specify the location of the keyrings separately
- * from the homedir.
- */
-
- // get public keyring
- if (array_key_exists('publicKeyring', $options)) {
- $this->_publicKeyring = (string)$options['publicKeyring'];
- if (!is_readable($this->_publicKeyring)) {
- throw new Crypt_GPG_FileException('The \'publicKeyring\' "' .
- $this->_publicKeyring . '" does not exist or is ' .
- 'not readable. Check the location and ensure the file ' .
- 'permissions are correct.', 0, $this->_publicKeyring);
- }
- }
-
- // get private keyring
- if (array_key_exists('privateKeyring', $options)) {
- $this->_privateKeyring = (string)$options['privateKeyring'];
- if (!is_readable($this->_privateKeyring)) {
- throw new Crypt_GPG_FileException('The \'privateKeyring\' "' .
- $this->_privateKeyring . '" does not exist or is ' .
- 'not readable. Check the location and ensure the file ' .
- 'permissions are correct.', 0, $this->_privateKeyring);
- }
- }
-
- // get trust database
- if (array_key_exists('trustDb', $options)) {
- $this->_trustDb = (string)$options['trustDb'];
- if (!is_readable($this->_trustDb)) {
- throw new Crypt_GPG_FileException('The \'trustDb\' "' .
- $this->_trustDb . '" does not exist or is not readable. ' .
- 'Check the location and ensure the file permissions are ' .
- 'correct.', 0, $this->_trustDb);
- }
- }
-
- if (array_key_exists('debug', $options)) {
- $this->_debug = (boolean)$options['debug'];
- }
- }
-
- // }}}
- // {{{ __destruct()
-
- /**
- * Closes open GPG subprocesses when this object is destroyed
- *
- * Subprocesses should never be left open by this class unless there is
- * an unknown error and unexpected script termination occurs.
- */
- public function __destruct()
- {
- $this->_closeSubprocess();
- }
-
- // }}}
- // {{{ addErrorHandler()
-
- /**
- * Adds an error handler method
- *
- * The method is run every time a new error line is received from the GPG
- * subprocess. The handler method must accept the error line to be handled
- * as its first parameter.
- *
- * @param callback $callback the callback method to use.
- * @param array $args optional. Additional arguments to pass as
- * parameters to the callback method.
- *
- * @return void
- */
- public function addErrorHandler($callback, array $args = array())
- {
- $this->_errorHandlers[] = array(
- 'callback' => $callback,
- 'args' => $args
- );
- }
-
- // }}}
- // {{{ addStatusHandler()
-
- /**
- * Adds a status handler method
- *
- * The method is run every time a new status line is received from the
- * GPG subprocess. The handler method must accept the status line to be
- * handled as its first parameter.
- *
- * @param callback $callback the callback method to use.
- * @param array $args optional. Additional arguments to pass as
- * parameters to the callback method.
- *
- * @return void
- */
- public function addStatusHandler($callback, array $args = array())
- {
- $this->_statusHandlers[] = array(
- 'callback' => $callback,
- 'args' => $args
- );
- }
-
- // }}}
- // {{{ sendCommand()
-
- /**
- * Sends a command to the GPG subprocess over the command file-descriptor
- * pipe
- *
- * @param string $command the command to send.
- *
- * @return void
- *
- * @sensitive $command
- */
- public function sendCommand($command)
- {
- if (array_key_exists(self::FD_COMMAND, $this->_openPipes)) {
- $this->_commandBuffer .= $command . PHP_EOL;
- }
- }
-
- // }}}
- // {{{ reset()
-
- /**
- * Resets the GPG engine, preparing it for a new operation
- *
- * @return void
- *
- * @see Crypt_GPG_Engine::run()
- * @see Crypt_GPG_Engine::setOperation()
- */
- public function reset()
- {
- $this->_operation = '';
- $this->_arguments = array();
- $this->_input = null;
- $this->_message = null;
- $this->_output = '';
- $this->_errorCode = Crypt_GPG::ERROR_NONE;
- $this->_needPassphrase = 0;
- $this->_commandBuffer = '';
-
- $this->_statusHandlers = array();
- $this->_errorHandlers = array();
-
- $this->addStatusHandler(array($this, '_handleErrorStatus'));
- $this->addErrorHandler(array($this, '_handleErrorError'));
-
- if ($this->_debug) {
- $this->addStatusHandler(array($this, '_handleDebugStatus'));
- $this->addErrorHandler(array($this, '_handleDebugError'));
- }
- }
-
- // }}}
- // {{{ run()
-
- /**
- * Runs the current GPG operation
- *
- * This creates and manages the GPG subprocess.
- *
- * The operation must be set with {@link Crypt_GPG_Engine::setOperation()}
- * before this method is called.
- *
- * @return void
- *
- * @throws Crypt_GPG_InvalidOperationException if no operation is specified.
- *
- * @see Crypt_GPG_Engine::reset()
- * @see Crypt_GPG_Engine::setOperation()
- */
- public function run()
- {
- if ($this->_operation === '') {
- throw new Crypt_GPG_InvalidOperationException('No GPG operation ' .
- 'specified. Use Crypt_GPG_Engine::setOperation() before ' .
- 'calling Crypt_GPG_Engine::run().');
- }
-
- $this->_openSubprocess();
- $this->_process();
- $this->_closeSubprocess();
- }
-
- // }}}
- // {{{ getErrorCode()
-
- /**
- * Gets the error code of the last executed operation
- *
- * This value is only meaningful after {@link Crypt_GPG_Engine::run()} has
- * been executed.
- *
- * @return integer the error code of the last executed operation.
- */
- public function getErrorCode()
- {
- return $this->_errorCode;
- }
-
- // }}}
- // {{{ getErrorFilename()
-
- /**
- * Gets the file related to the error code of the last executed operation
- *
- * This value is only meaningful after {@link Crypt_GPG_Engine::run()} has
- * been executed. If there is no file related to the error, an empty string
- * is returned.
- *
- * @return string the file related to the error code of the last executed
- * operation.
- */
- public function getErrorFilename()
- {
- return $this->_errorFilename;
- }
-
- // }}}
- // {{{ getErrorKeyId()
-
- /**
- * Gets the key id related to the error code of the last executed operation
- *
- * This value is only meaningful after {@link Crypt_GPG_Engine::run()} has
- * been executed. If there is no key id related to the error, an empty
- * string is returned.
- *
- * @return string the key id related to the error code of the last executed
- * operation.
- */
- public function getErrorKeyId()
- {
- return $this->_errorKeyId;
- }
-
- // }}}
- // {{{ setInput()
-
- /**
- * Sets the input source for the current GPG operation
- *
- * @param string|resource &$input either a reference to the string
- * containing the input data or an open
- * stream resource containing the input
- * data.
- *
- * @return void
- */
- public function setInput(&$input)
- {
- $this->_input =& $input;
- }
-
- // }}}
- // {{{ setMessage()
-
- /**
- * Sets the message source for the current GPG operation
- *
- * Detached signature data should be specified here.
- *
- * @param string|resource &$message either a reference to the string
- * containing the message data or an open
- * stream resource containing the message
- * data.
- *
- * @return void
- */
- public function setMessage(&$message)
- {
- $this->_message =& $message;
- }
-
- // }}}
- // {{{ setOutput()
-
- /**
- * Sets the output destination for the current GPG operation
- *
- * @param string|resource &$output either a reference to the string in
- * which to store GPG output or an open
- * stream resource to which the output data
- * should be written.
- *
- * @return void
- */
- public function setOutput(&$output)
- {
- $this->_output =& $output;
- }
-
- // }}}
- // {{{ setOperation()
-
- /**
- * Sets the operation to perform
- *
- * @param string $operation the operation to perform. This should be one
- * of GPG's operations. For example,
- * <kbd>--encrypt</kbd>, <kbd>--decrypt</kbd>,
- * <kbd>--sign</kbd>, etc.
- * @param array $arguments optional. Additional arguments for the GPG
- * subprocess. See the GPG manual for specific
- * values.
- *
- * @return void
- *
- * @see Crypt_GPG_Engine::reset()
- * @see Crypt_GPG_Engine::run()
- */
- public function setOperation($operation, array $arguments = array())
- {
- $this->_operation = $operation;
- $this->_arguments = $arguments;
- }
-
- // }}}
- // {{{ getVersion()
-
- /**
- * Gets the version of the GnuPG binary
- *
- * @return string a version number string containing the version of GnuPG
- * being used. This value is suitable to use with PHP's
- * version_compare() function.
- *
- * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
- * Use the <kbd>debug</kbd> option and file a bug report if these
- * exceptions occur.
- *
- * @throws Crypt_GPG_UnsupportedException if the provided binary is not
- * GnuPG or if the GnuPG version is less than 1.0.2.
- */
- public function getVersion()
- {
- if ($this->_version == '') {
-
- $options = array(
- 'homedir' => $this->_homedir,
- 'binary' => $this->_binary,
- 'debug' => $this->_debug
- );
-
- $engine = new self($options);
- $info = '';
-
- // Set a garbage version so we do not end up looking up the version
- // recursively.
- $engine->_version = '1.0.0';
-
- $engine->reset();
- $engine->setOutput($info);
- $engine->setOperation('--version');
- $engine->run();
-
- $code = $this->getErrorCode();
-
- if ($code !== Crypt_GPG::ERROR_NONE) {
- throw new Crypt_GPG_Exception(
- 'Unknown error getting GnuPG version information. Please ' .
- 'use the \'debug\' option when creating the Crypt_GPG ' .
- 'object, and file a bug report at ' . Crypt_GPG::BUG_URI,
- $code);
- }
-
- $matches = array();
- $expression = '#gpg \(GnuPG[A-Za-z0-9/]*?\) (\S+)#';
-
- if (preg_match($expression, $info, $matches) === 1) {
- $this->_version = $matches[1];
- } else {
- throw new Crypt_GPG_Exception(
- 'No GnuPG version information provided by the binary "' .
- $this->_binary . '". Are you sure it is GnuPG?');
- }
-
- if (version_compare($this->_version, self::MIN_VERSION, 'lt')) {
- throw new Crypt_GPG_Exception(
- 'The version of GnuPG being used (' . $this->_version .
- ') is not supported by Crypt_GPG. The minimum version ' .
- 'required by Crypt_GPG is ' . self::MIN_VERSION);
- }
- }
-
-
- return $this->_version;
- }
-
- // }}}
- // {{{ _handleErrorStatus()
-
- /**
- * Handles error values in the status output from GPG
- *
- * This method is responsible for setting the
- * {@link Crypt_GPG_Engine::$_errorCode}. See <b>doc/DETAILS</b> in the
- * {@link http://www.gnupg.org/download/ GPG distribution} for detailed
- * information on GPG's status output.
- *
- * @param string $line the status line to handle.
- *
- * @return void
- */
- private function _handleErrorStatus($line)
- {
- $tokens = explode(' ', $line);
- switch ($tokens[0]) {
- case 'BAD_PASSPHRASE':
- $this->_errorCode = Crypt_GPG::ERROR_BAD_PASSPHRASE;
- break;
-
- case 'MISSING_PASSPHRASE':
- $this->_errorCode = Crypt_GPG::ERROR_MISSING_PASSPHRASE;
- break;
-
- case 'NODATA':
- $this->_errorCode = Crypt_GPG::ERROR_NO_DATA;
- break;
-
- case 'DELETE_PROBLEM':
- if ($tokens[1] == '1') {
- $this->_errorCode = Crypt_GPG::ERROR_KEY_NOT_FOUND;
- break;
- } elseif ($tokens[1] == '2') {
- $this->_errorCode = Crypt_GPG::ERROR_DELETE_PRIVATE_KEY;
- break;
- }
- break;
-
- case 'IMPORT_RES':
- if ($tokens[12] > 0) {
- $this->_errorCode = Crypt_GPG::ERROR_DUPLICATE_KEY;
- }
- break;
-
- case 'NO_PUBKEY':
- case 'NO_SECKEY':
- $this->_errorKeyId = $tokens[1];
- $this->_errorCode = Crypt_GPG::ERROR_KEY_NOT_FOUND;
- break;
-
- case 'NEED_PASSPHRASE':
- $this->_needPassphrase++;
- break;
-
- case 'GOOD_PASSPHRASE':
- $this->_needPassphrase--;
- break;
-
- case 'EXPSIG':
- case 'EXPKEYSIG':
- case 'REVKEYSIG':
- case 'BADSIG':
- $this->_errorCode = Crypt_GPG::ERROR_BAD_SIGNATURE;
- break;
-
- }
- }
-
- // }}}
- // {{{ _handleErrorError()
-
- /**
- * Handles error values in the error output from GPG
- *
- * This method is responsible for setting the
- * {@link Crypt_GPG_Engine::$_errorCode}.
- *
- * @param string $line the error line to handle.
- *
- * @return void
- */
- private function _handleErrorError($line)
- {
- if ($this->_errorCode === Crypt_GPG::ERROR_NONE) {
- $pattern = '/no valid OpenPGP data found/';
- if (preg_match($pattern, $line) === 1) {
- $this->_errorCode = Crypt_GPG::ERROR_NO_DATA;
- }
- }
-
- if ($this->_errorCode === Crypt_GPG::ERROR_NONE) {
- $pattern = '/No secret key|secret key not available/';
- if (preg_match($pattern, $line) === 1) {
- $this->_errorCode = Crypt_GPG::ERROR_KEY_NOT_FOUND;
- }
- }
-
- if ($this->_errorCode === Crypt_GPG::ERROR_NONE) {
- $pattern = '/No public key|public key not found/';
- if (preg_match($pattern, $line) === 1) {
- $this->_errorCode = Crypt_GPG::ERROR_KEY_NOT_FOUND;
- }
- }
-
- if ($this->_errorCode === Crypt_GPG::ERROR_NONE) {
- $matches = array();
- $pattern = '/can\'t (?:access|open) `(.*?)\'/';
- if (preg_match($pattern, $line, $matches) === 1) {
- $this->_errorFilename = $matches[1];
- $this->_errorCode = Crypt_GPG::ERROR_FILE_PERMISSIONS;
- }
- }
- }
-
- // }}}
- // {{{ _handleDebugStatus()
-
- /**
- * Displays debug output for status lines
- *
- * @param string $line the status line to handle.
- *
- * @return void
- */
- private function _handleDebugStatus($line)
- {
- $this->_debug('STATUS: ' . $line);
- }
-
- // }}}
- // {{{ _handleDebugError()
-
- /**
- * Displays debug output for error lines
- *
- * @param string $line the error line to handle.
- *
- * @return void
- */
- private function _handleDebugError($line)
- {
- $this->_debug('ERROR: ' . $line);
- }
-
- // }}}
- // {{{ _process()
-
- /**
- * Performs internal streaming operations for the subprocess using either
- * strings or streams as input / output points
- *
- * This is the main I/O loop for streaming to and from the GPG subprocess.
- *
- * The implementation of this method is verbose mainly for performance
- * reasons. Adding streams to a lookup array and looping the array inside
- * the main I/O loop would be siginficantly slower for large streams.
- *
- * @return void
- *
- * @throws Crypt_GPG_Exception if there is an error selecting streams for
- * reading or writing. If this occurs, please file a bug report at
- * http://pear.php.net/bugs/report.php?package=Crypt_GPG.
- */
- private function _process()
- {
- $this->_debug('BEGIN PROCESSING');
-
- $this->_commandBuffer = ''; // buffers input to GPG
- $messageBuffer = ''; // buffers input to GPG
- $inputBuffer = ''; // buffers input to GPG
- $outputBuffer = ''; // buffers output from GPG
- $statusBuffer = ''; // buffers output from GPG
- $errorBuffer = ''; // buffers output from GPG
- $inputComplete = false; // input stream is completely buffered
- $messageComplete = false; // message stream is completely buffered
-
- if (is_string($this->_input)) {
- $inputBuffer = $this->_input;
- $inputComplete = true;
- }
-
- if (is_string($this->_message)) {
- $messageBuffer = $this->_message;
- $messageComplete = true;
- }
-
- if (is_string($this->_output)) {
- $outputBuffer =& $this->_output;
- }
-
- // convenience variables
- $fdInput = $this->_pipes[self::FD_INPUT];
- $fdOutput = $this->_pipes[self::FD_OUTPUT];
- $fdError = $this->_pipes[self::FD_ERROR];
- $fdStatus = $this->_pipes[self::FD_STATUS];
- $fdCommand = $this->_pipes[self::FD_COMMAND];
- $fdMessage = $this->_pipes[self::FD_MESSAGE];
-
- // select loop delay in milliseconds
- $delay = 0;
-
- while (true) {
-
- $inputStreams = array();
- $outputStreams = array();
- $exceptionStreams = array();
-
- // set up input streams
- if (is_resource($this->_input) && !$inputComplete) {
- if (feof($this->_input)) {
- $inputComplete = true;
- } else {
- $inputStreams[] = $this->_input;
- }
- }
-
- // close GPG input pipe if there is no more data
- if ($inputBuffer == '' && $inputComplete) {
- $this->_debug('=> closing GPG input pipe');
- $this->_closePipe(self::FD_INPUT);
- }
-
- if (is_resource($this->_message) && !$messageComplete) {
- if (feof($this->_message)) {
- $messageComplete = true;
- } else {
- $inputStreams[] = $this->_message;
- }
- }
-
- // close GPG message pipe if there is no more data
- if ($messageBuffer == '' && $messageComplete) {
- $this->_debug('=> closing GPG message pipe');
- $this->_closePipe(self::FD_MESSAGE);
- }
-
- if (!feof($fdOutput)) {
- $inputStreams[] = $fdOutput;
- }
-
- if (!feof($fdStatus)) {
- $inputStreams[] = $fdStatus;
- }
-
- if (!feof($fdError)) {
- $inputStreams[] = $fdError;
- }
-
- // set up output streams
- if ($outputBuffer != '' && is_resource($this->_output)) {
- $outputStreams[] = $this->_output;
- }
-
- if ($this->_commandBuffer != '' && is_resource($fdCommand)) {
- $outputStreams[] = $fdCommand;
- }
-
- if ($messageBuffer != '' && is_resource($fdMessage)) {
- $outputStreams[] = $fdMessage;
- }
-
- if ($inputBuffer != '' && is_resource($fdInput)) {
- $outputStreams[] = $fdInput;
- }
-
- // no streams left to read or write, we're all done
- if (count($inputStreams) === 0 && count($outputStreams) === 0) {
- break;
- }
-
- $this->_debug('selecting streams');
-
- $ready = stream_select(
- $inputStreams,
- $outputStreams,
- $exceptionStreams,
- null
- );
-
- $this->_debug('=> got ' . $ready);
-
- if ($ready === false) {
- throw new Crypt_GPG_Exception(
- 'Error selecting stream for communication with GPG ' .
- 'subprocess. Please file a bug report at: ' .
- 'http://pear.php.net/bugs/report.php?package=Crypt_GPG');
- }
-
- if ($ready === 0) {
- throw new Crypt_GPG_Exception(
- 'stream_select() returned 0. This can not happen! Please ' .
- 'file a bug report at: ' .
- 'http://pear.php.net/bugs/report.php?package=Crypt_GPG');
- }
-
- // write input (to GPG)
- if (in_array($fdInput, $outputStreams, true)) {
- $this->_debug('GPG is ready for input');
-
- $chunk = Crypt_GPG_ByteUtils::substr(
- $inputBuffer,
- 0,
- self::CHUNK_SIZE
- );
-
- $length = Crypt_GPG_ByteUtils::strlen($chunk);
-
- $this->_debug(
- '=> about to write ' . $length . ' bytes to GPG input'
- );
-
- $length = fwrite($fdInput, $chunk, $length);
- if ($length === 0) {
- // If we wrote 0 bytes it was either EAGAIN or EPIPE. Since
- // the pipe was seleted for writing, we assume it was EPIPE.
- // There's no way to get the actual erorr code in PHP. See
- // PHP Bug #39598. https://bugs.php.net/bug.php?id=39598
- $this->_debug('=> broken pipe on GPG input');
- $this->_debug('=> closing pipe GPG input');
- $this->_closePipe(self::FD_INPUT);
- } else {
- $this->_debug('=> wrote ' . $length . ' bytes');
- $inputBuffer = Crypt_GPG_ByteUtils::substr(
- $inputBuffer,
- $length
- );
- }
- }
-
- // read input (from PHP stream)
- if (in_array($this->_input, $inputStreams, true)) {
- $this->_debug('input stream is ready for reading');
- $this->_debug(
- '=> about to read ' . self::CHUNK_SIZE .
- ' bytes from input stream'
- );
-
- $chunk = fread($this->_input, self::CHUNK_SIZE);
- $length = Crypt_GPG_ByteUtils::strlen($chunk);
- $inputBuffer .= $chunk;
-
- $this->_debug('=> read ' . $length . ' bytes');
- }
-
- // write message (to GPG)
- if (in_array($fdMessage, $outputStreams, true)) {
- $this->_debug('GPG is ready for message data');
-
- $chunk = Crypt_GPG_ByteUtils::substr(
- $messageBuffer,
- 0,
- self::CHUNK_SIZE
- );
-
- $length = Crypt_GPG_ByteUtils::strlen($chunk);
-
- $this->_debug(
- '=> about to write ' . $length . ' bytes to GPG message'
- );
-
- $length = fwrite($fdMessage, $chunk, $length);
- if ($length === 0) {
- // If we wrote 0 bytes it was either EAGAIN or EPIPE. Since
- // the pipe was seleted for writing, we assume it was EPIPE.
- // There's no way to get the actual erorr code in PHP. See
- // PHP Bug #39598. https://bugs.php.net/bug.php?id=39598
- $this->_debug('=> broken pipe on GPG message');
- $this->_debug('=> closing pipe GPG message');
- $this->_closePipe(self::FD_MESSAGE);
- } else {
- $this->_debug('=> wrote ' . $length . ' bytes');
- $messageBuffer = Crypt_GPG_ByteUtils::substr(
- $messageBuffer,
- $length
- );
- }
- }
-
- // read message (from PHP stream)
- if (in_array($this->_message, $inputStreams, true)) {
- $this->_debug('message stream is ready for reading');
- $this->_debug(
- '=> about to read ' . self::CHUNK_SIZE .
- ' bytes from message stream'
- );
-
- $chunk = fread($this->_message, self::CHUNK_SIZE);
- $length = Crypt_GPG_ByteUtils::strlen($chunk);
- $messageBuffer .= $chunk;
-
- $this->_debug('=> read ' . $length . ' bytes');
- }
-
- // read output (from GPG)
- if (in_array($fdOutput, $inputStreams, true)) {
- $this->_debug('GPG output stream ready for reading');
- $this->_debug(
- '=> about to read ' . self::CHUNK_SIZE .
- ' bytes from GPG output'
- );
-
- $chunk = fread($fdOutput, self::CHUNK_SIZE);
- $length = Crypt_GPG_ByteUtils::strlen($chunk);
- $outputBuffer .= $chunk;
-
- $this->_debug('=> read ' . $length . ' bytes');
- }
-
- // write output (to PHP stream)
- if (in_array($this->_output, $outputStreams, true)) {
- $this->_debug('output stream is ready for data');
-
- $chunk = Crypt_GPG_ByteUtils::substr(
- $outputBuffer,
- 0,
- self::CHUNK_SIZE
- );
-
- $length = Crypt_GPG_ByteUtils::strlen($chunk);
-
- $this->_debug(
- '=> about to write ' . $length . ' bytes to output stream'
- );
-
- $length = fwrite($this->_output, $chunk, $length);
-
- $this->_debug('=> wrote ' . $length . ' bytes');
-
- $outputBuffer = Crypt_GPG_ByteUtils::substr(
- $outputBuffer,
- $length
- );
- }
-
- // read error (from GPG)
- if (in_array($fdError, $inputStreams, true)) {
- $this->_debug('GPG error stream ready for reading');
- $this->_debug(
- '=> about to read ' . self::CHUNK_SIZE .
- ' bytes from GPG error'
- );
-
- $chunk = fread($fdError, self::CHUNK_SIZE);
- $length = Crypt_GPG_ByteUtils::strlen($chunk);
- $errorBuffer .= $chunk;
-
- $this->_debug('=> read ' . $length . ' bytes');
-
- // pass lines to error handlers
- while (($pos = strpos($errorBuffer, PHP_EOL)) !== false) {
- $line = Crypt_GPG_ByteUtils::substr($errorBuffer, 0, $pos);
- foreach ($this->_errorHandlers as $handler) {
- array_unshift($handler['args'], $line);
- call_user_func_array(
- $handler['callback'],
- $handler['args']
- );
-
- array_shift($handler['args']);
- }
- $errorBuffer = Crypt_GPG_ByteUtils::substr(
- $errorBuffer,
- $pos + Crypt_GPG_ByteUtils::strlen(PHP_EOL)
- );
- }
- }
-
- // read status (from GPG)
- if (in_array($fdStatus, $inputStreams, true)) {
- $this->_debug('GPG status stream ready for reading');
- $this->_debug(
- '=> about to read ' . self::CHUNK_SIZE .
- ' bytes from GPG status'
- );
-
- $chunk = fread($fdStatus, self::CHUNK_SIZE);
- $length = Crypt_GPG_ByteUtils::strlen($chunk);
- $statusBuffer .= $chunk;
-
- $this->_debug('=> read ' . $length . ' bytes');
-
- // pass lines to status handlers
- while (($pos = strpos($statusBuffer, PHP_EOL)) !== false) {
- $line = Crypt_GPG_ByteUtils::substr($statusBuffer, 0, $pos);
- // only pass lines beginning with magic prefix
- if (Crypt_GPG_ByteUtils::substr($line, 0, 9) == '[GNUPG:] ') {
- $line = Crypt_GPG_ByteUtils::substr($line, 9);
- foreach ($this->_statusHandlers as $handler) {
- array_unshift($handler['args'], $line);
- call_user_func_array(
- $handler['callback'],
- $handler['args']
- );
-
- array_shift($handler['args']);
- }
- }
- $statusBuffer = Crypt_GPG_ByteUtils::substr(
- $statusBuffer,
- $pos + Crypt_GPG_ByteUtils::strlen(PHP_EOL)
- );
- }
- }
-
- // write command (to GPG)
- if (in_array($fdCommand, $outputStreams, true)) {
- $this->_debug('GPG is ready for command data');
-
- // send commands
- $chunk = Crypt_GPG_ByteUtils::substr(
- $this->_commandBuffer,
- 0,
- self::CHUNK_SIZE
- );
-
- $length = Crypt_GPG_ByteUtils::strlen($chunk);
-
- $this->_debug(
- '=> about to write ' . $length . ' bytes to GPG command'
- );
-
- $length = fwrite($fdCommand, $chunk, $length);
- if ($length === 0) {
- // If we wrote 0 bytes it was either EAGAIN or EPIPE. Since
- // the pipe was seleted for writing, we assume it was EPIPE.
- // There's no way to get the actual erorr code in PHP. See
- // PHP Bug #39598. https://bugs.php.net/bug.php?id=39598
- $this->_debug('=> broken pipe on GPG command');
- $this->_debug('=> closing pipe GPG command');
- $this->_closePipe(self::FD_COMMAND);
- } else {
- $this->_debug('=> wrote ' . $length);
- $this->_commandBuffer = Crypt_GPG_ByteUtils::substr(
- $this->_commandBuffer,
- $length
- );
- }
- }
-
- if (count($outputStreams) === 0 || count($inputStreams) === 0) {
- // we have an I/O imbalance, increase the select loop delay
- // to smooth things out
- $delay += 10;
- } else {
- // things are running smoothly, decrease the delay
- $delay -= 8;
- $delay = max(0, $delay);
- }
-
- if ($delay > 0) {
- usleep($delay);
- }
-
- } // end loop while streams are open
-
- $this->_debug('END PROCESSING');
- }
-
- // }}}
- // {{{ _openSubprocess()
-
- /**
- * Opens an internal GPG subprocess for the current operation
- *
- * Opens a GPG subprocess, then connects the subprocess to some pipes. Sets
- * the private class property {@link Crypt_GPG_Engine::$_process} to
- * the new subprocess.
- *
- * @return void
- *
- * @throws Crypt_GPG_OpenSubprocessException if the subprocess could not be
- * opened.
- *
- * @see Crypt_GPG_Engine::setOperation()
- * @see Crypt_GPG_Engine::_closeSubprocess()
- * @see Crypt_GPG_Engine::$_process
- */
- private function _openSubprocess()
- {
- $version = $this->getVersion();
-
- // Binary operations will not work on Windows with PHP < 5.2.6. This is
- // in case stream_select() ever works on Windows.
- $rb = (version_compare(PHP_VERSION, '5.2.6') < 0) ? 'r' : 'rb';
- $wb = (version_compare(PHP_VERSION, '5.2.6') < 0) ? 'w' : 'wb';
-
- $env = $_ENV;
-
- // Newer versions of GnuPG return localized results. Crypt_GPG only
- // works with English, so set the locale to 'C' for the subprocess.
- $env['LC_ALL'] = 'C';
-
- // If using GnuPG 2.x start the gpg-agent
- if (version_compare($version, '2.0.0', 'ge')) {
- $agentCommandLine = $this->_agent;
-
- $agentArguments = array(
- '--options /dev/null', // ignore any saved options
- '--csh', // output is easier to parse
- '--keep-display', // prevent passing --display to pinentry
- '--no-grab',
- '--ignore-cache-for-signing',
- '--pinentry-touch-file /dev/null',
- '--disable-scdaemon',
- '--no-use-standard-socket',
- '--pinentry-program ' . escapeshellarg($this->_getPinEntry())
- );
-
- if ($this->_homedir) {
- $agentArguments[] = '--homedir ' .
- escapeshellarg($this->_homedir);
- }
-
-
- $agentCommandLine .= ' ' . implode(' ', $agentArguments)
- . ' --daemon';
-
- $agentDescriptorSpec = array(
- self::FD_INPUT => array('pipe', $rb), // stdin
- self::FD_OUTPUT => array('pipe', $wb), // stdout
- self::FD_ERROR => array('pipe', $wb) // stderr
- );
-
- $this->_debug('OPENING GPG-AGENT SUBPROCESS WITH THE FOLLOWING COMMAND:');
- $this->_debug($agentCommandLine);
-
- $this->_agentProcess = proc_open(
- $agentCommandLine,
- $agentDescriptorSpec,
- $this->_agentPipes,
- null,
- $env,
- array('binary_pipes' => true)
- );
-
- if (!is_resource($this->_agentProcess)) {
- throw new Crypt_GPG_OpenSubprocessException(
- 'Unable to open gpg-agent subprocess.',
- 0,
- $agentCommandLine
- );
- }
-
- // Get GPG_AGENT_INFO and set environment variable for gpg process.
- // This is a blocking read, but is only 1 line.
- $agentInfo = fread(
- $this->_agentPipes[self::FD_OUTPUT],
- self::CHUNK_SIZE
- );
-
- $agentInfo = explode(' ', $agentInfo, 3);
- $this->_agentInfo = $agentInfo[2];
- $env['GPG_AGENT_INFO'] = $this->_agentInfo;
-
- // gpg-agent daemon is started, we can close the launching process
- $this->_closeAgentLaunchProcess();
- }
-
- $commandLine = $this->_binary;
-
- $defaultArguments = array(
- '--status-fd ' . escapeshellarg(self::FD_STATUS),
- '--command-fd ' . escapeshellarg(self::FD_COMMAND),
- '--no-secmem-warning',
- '--no-tty',
- '--no-default-keyring', // ignored if keying files are not specified
- '--no-options' // prevent creation of ~/.gnupg directory
- );
-
- if (version_compare($version, '1.0.7', 'ge')) {
- if (version_compare($version, '2.0.0', 'lt')) {
- $defaultArguments[] = '--no-use-agent';
- }
- $defaultArguments[] = '--no-permission-warning';
- }
-
- if (version_compare($version, '1.4.2', 'ge')) {
- $defaultArguments[] = '--exit-on-status-write-error';
- }
-
- if (version_compare($version, '1.3.2', 'ge')) {
- $defaultArguments[] = '--trust-model always';
- } else {
- $defaultArguments[] = '--always-trust';
- }
-
- $arguments = array_merge($defaultArguments, $this->_arguments);
-
- if ($this->_homedir) {
- $arguments[] = '--homedir ' . escapeshellarg($this->_homedir);
-
- // the random seed file makes subsequent actions faster so only
- // disable it if we have to.
- if (!is_writeable($this->_homedir)) {
- $arguments[] = '--no-random-seed-file';
- }
- }
-
- if ($this->_publicKeyring) {
- $arguments[] = '--keyring ' . escapeshellarg($this->_publicKeyring);
- }
-
- if ($this->_privateKeyring) {
- $arguments[] = '--secret-keyring ' .
- escapeshellarg($this->_privateKeyring);
- }
-
- if ($this->_trustDb) {
- $arguments[] = '--trustdb-name ' . escapeshellarg($this->_trustDb);
- }
-
- $commandLine .= ' ' . implode(' ', $arguments) . ' ' .
- $this->_operation;
-
- $descriptorSpec = array(
- self::FD_INPUT => array('pipe', $rb), // stdin
- self::FD_OUTPUT => array('pipe', $wb), // stdout
- self::FD_ERROR => array('pipe', $wb), // stderr
- self::FD_STATUS => array('pipe', $wb), // status
- self::FD_COMMAND => array('pipe', $rb), // command
- self::FD_MESSAGE => array('pipe', $rb) // message
- );
-
- $this->_debug('OPENING GPG SUBPROCESS WITH THE FOLLOWING COMMAND:');
- $this->_debug($commandLine);
-
- $this->_process = proc_open(
- $commandLine,
- $descriptorSpec,
- $this->_pipes,
- null,
- $env,
- array('binary_pipes' => true)
- );
-
- if (!is_resource($this->_process)) {
- throw new Crypt_GPG_OpenSubprocessException(
- 'Unable to open GPG subprocess.', 0, $commandLine);
- }
-
- // Set streams as non-blocking. See Bug #18618.
- foreach ($this->_pipes as $pipe) {
- stream_set_blocking($pipe, 0);
- }
-
- $this->_openPipes = $this->_pipes;
- $this->_errorCode = Crypt_GPG::ERROR_NONE;
- }
-
- // }}}
- // {{{ _closeSubprocess()
-
- /**
- * Closes a the internal GPG subprocess
- *
- * Closes the internal GPG subprocess. Sets the private class property
- * {@link Crypt_GPG_Engine::$_process} to null.
- *
- * @return void
- *
- * @see Crypt_GPG_Engine::_openSubprocess()
- * @see Crypt_GPG_Engine::$_process
- */
- private function _closeSubprocess()
- {
- // clear PINs from environment if they were set
- $_ENV['PINENTRY_USER_DATA'] = null;
-
- if (is_resource($this->_process)) {
- $this->_debug('CLOSING GPG SUBPROCESS');
-
- // close remaining open pipes
- foreach (array_keys($this->_openPipes) as $pipeNumber) {
- $this->_closePipe($pipeNumber);
- }
-
- $exitCode = proc_close($this->_process);
-
- if ($exitCode != 0) {
- $this->_debug(
- '=> subprocess returned an unexpected exit code: ' .
- $exitCode
- );
-
- if ($this->_errorCode === Crypt_GPG::ERROR_NONE) {
- if ($this->_needPassphrase > 0) {
- $this->_errorCode = Crypt_GPG::ERROR_MISSING_PASSPHRASE;
- } else {
- $this->_errorCode = Crypt_GPG::ERROR_UNKNOWN;
- }
- }
- }
-
- $this->_process = null;
- $this->_pipes = array();
- }
-
- $this->_closeAgentLaunchProcess();
-
- if ($this->_agentInfo !== null) {
- $this->_debug('STOPPING GPG-AGENT DAEMON');
-
- $parts = explode(':', $this->_agentInfo, 3);
- $pid = $parts[1];
- $process = new Crypt_GPG_ProcessControl($pid);
-
- // terminate agent daemon
- $process->terminate();
-
- while ($process->isRunning()) {
- usleep(10000); // 10 ms
- $process->terminate();
- }
-
- $this->_agentInfo = null;
-
- $this->_debug('GPG-AGENT DAEMON STOPPED');
- }
- }
-
- // }}}
- // {{ _closeAgentLaunchProcess()
-
- private function _closeAgentLaunchProcess()
- {
- if (is_resource($this->_agentProcess)) {
- $this->_debug('CLOSING GPG-AGENT LAUNCH PROCESS');
-
- // close agent pipes
- foreach ($this->_agentPipes as $pipe) {
- fflush($pipe);
- fclose($pipe);
- }
-
- // close agent launching process
- proc_close($this->_agentProcess);
-
- $this->_agentProcess = null;
- $this->_agentPipes = array();
-
- $this->_debug('GPG-AGENT LAUNCH PROCESS CLOSED');
- }
- }
-
- // }}
- // {{{ _closePipe()
-
- /**
- * Closes an opened pipe used to communicate with the GPG subprocess
- *
- * If the pipe is already closed, it is ignored. If the pipe is open, it
- * is flushed and then closed.
- *
- * @param integer $pipeNumber the file descriptor number of the pipe to
- * close.
- *
- * @return void
- */
- private function _closePipe($pipeNumber)
- {
- $pipeNumber = intval($pipeNumber);
- if (array_key_exists($pipeNumber, $this->_openPipes)) {
- fflush($this->_openPipes[$pipeNumber]);
- fclose($this->_openPipes[$pipeNumber]);
- unset($this->_openPipes[$pipeNumber]);
- }
- }
-
- // }}}
- // {{{ _getBinary()
-
- /**
- * Gets the name of the GPG binary for the current operating system
- *
- * This method is called if the '<kbd>binary</kbd>' option is <i>not</i>
- * specified when creating this driver.
- *
- * @return string the name of the GPG binary for the current operating
- * system. If no suitable binary could be found, an empty
- * string is returned.
- */
- private function _getBinary()
- {
- $binary = '';
-
- if ($this->_isDarwin) {
- $binaryFiles = array(
- '/opt/local/bin/gpg', // MacPorts
- '/usr/local/bin/gpg', // Mac GPG
- '/sw/bin/gpg', // Fink
- '/usr/bin/gpg'
- );
- } else {
- $binaryFiles = array(
- '/usr/bin/gpg',
- '/usr/local/bin/gpg'
- );
- }
-
- foreach ($binaryFiles as $binaryFile) {
- if (is_executable($binaryFile)) {
- $binary = $binaryFile;
- break;
- }
- }
-
- return $binary;
- }
-
- // }}}
- // {{ _getAgent()
-
- private function _getAgent()
- {
- $agent = '';
-
- if ($this->_isDarwin) {
- $agentFiles = array(
- '/opt/local/bin/gpg-agent', // MacPorts
- '/usr/local/bin/gpg-agent', // Mac GPG
- '/sw/bin/gpg-agent', // Fink
- '/usr/bin/gpg-agent'
- );
- } else {
- $agentFiles = array(
- '/usr/bin/gpg-agent',
- '/usr/local/bin/gpg-agent'
- );
- }
-
- foreach ($agentFiles as $agentFile) {
- if (is_executable($agentFile)) {
- $agent = $agentFile;
- break;
- }
- }
-
- return $agent;
- }
-
- // }}
- // {{ _getPinEntry()
-
- private function _getPinEntry()
- {
- // Check if we're running directly from git or if we're using a
- // PEAR-packaged version
- $pinEntry = '@bin-dir@' . DIRECTORY_SEPARATOR . 'crypt-gpg-pinentry';
-
- if ($pinEntry[0] === '@') {
- $pinEntry = dirname(__FILE__) . DIRECTORY_SEPARATOR . '..'
- . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'scripts'
- . DIRECTORY_SEPARATOR . 'crypt-gpg-pinentry';
- }
-
- return $pinEntry;
- }
-
- // }}
- // {{{ _debug()
-
- /**
- * Displays debug text if debugging is turned on
- *
- * Debugging text is prepended with a debug identifier and echoed to stdout.
- *
- * @param string $text the debugging text to display.
- *
- * @return void
- */
- private function _debug($text)
- {
- if ($this->_debug) {
- if (php_sapi_name() === 'cli') {
- foreach (explode(PHP_EOL, $text) as $line) {
- echo "Crypt_GPG DEBUG: ", $line, PHP_EOL;
- }
- } else {
- // running on a web server, format debug output nicely
- foreach (explode(PHP_EOL, $text) as $line) {
- echo "Crypt_GPG DEBUG: <strong>", $line,
- '</strong><br />', PHP_EOL;
- }
- }
- }
- }
-
- // }}}
-}
-
-// }}}
-
-?>
diff --git a/program/lib/Crypt/GPG/Exceptions.php b/program/lib/Crypt/GPG/Exceptions.php
deleted file mode 100644
index 0ca917db6..000000000
--- a/program/lib/Crypt/GPG/Exceptions.php
+++ /dev/null
@@ -1,598 +0,0 @@
-<?php
-
-/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
-
-/**
- * Various exception handling classes for Crypt_GPG
- *
- * Crypt_GPG provides an object oriented interface to GNU Privacy
- * Guard (GPG). It requires the GPG executable to be on the system.
- *
- * This file contains various exception classes used by the Crypt_GPG package.
- *
- * PHP version 5
- *
- * LICENSE:
- *
- * This library is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of the
- * License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * @category Encryption
- * @package Crypt_GPG
- * @author Nathan Fredrickson <nathan@silverorange.com>
- * @author Michael Gauthier <mike@silverorange.com>
- * @copyright 2005-2011 silverorange
- * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
- * @version CVS: $Id$
- * @link http://pear.php.net/package/Crypt_GPG
- */
-
-/**
- * PEAR Exception handler and base class
- */
-require_once 'PEAR/Exception.php';
-
-// {{{ class Crypt_GPG_Exception
-
-/**
- * An exception thrown by the Crypt_GPG package
- *
- * @category Encryption
- * @package Crypt_GPG
- * @author Michael Gauthier <mike@silverorange.com>
- * @copyright 2005 silverorange
- * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
- * @link http://pear.php.net/package/Crypt_GPG
- */
-class Crypt_GPG_Exception extends PEAR_Exception
-{
-}
-
-// }}}
-// {{{ class Crypt_GPG_FileException
-
-/**
- * An exception thrown when a file is used in ways it cannot be used
- *
- * For example, if an output file is specified and the file is not writeable, or
- * if an input file is specified and the file is not readable, this exception
- * is thrown.
- *
- * @category Encryption
- * @package Crypt_GPG
- * @author Michael Gauthier <mike@silverorange.com>
- * @copyright 2007-2008 silverorange
- * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
- * @link http://pear.php.net/package/Crypt_GPG
- */
-class Crypt_GPG_FileException extends Crypt_GPG_Exception
-{
- // {{{ private class properties
-
- /**
- * The name of the file that caused this exception
- *
- * @var string
- */
- private $_filename = '';
-
- // }}}
- // {{{ __construct()
-
- /**
- * Creates a new Crypt_GPG_FileException
- *
- * @param string $message an error message.
- * @param integer $code a user defined error code.
- * @param string $filename the name of the file that caused this exception.
- */
- public function __construct($message, $code = 0, $filename = '')
- {
- $this->_filename = $filename;
- parent::__construct($message, $code);
- }
-
- // }}}
- // {{{ getFilename()
-
- /**
- * Returns the filename of the file that caused this exception
- *
- * @return string the filename of the file that caused this exception.
- *
- * @see Crypt_GPG_FileException::$_filename
- */
- public function getFilename()
- {
- return $this->_filename;
- }
-
- // }}}
-}
-
-// }}}
-// {{{ class Crypt_GPG_OpenSubprocessException
-
-/**
- * An exception thrown when the GPG subprocess cannot be opened
- *
- * This exception is thrown when the {@link Crypt_GPG_Engine} tries to open a
- * new subprocess and fails.
- *
- * @category Encryption
- * @package Crypt_GPG
- * @author Michael Gauthier <mike@silverorange.com>
- * @copyright 2005 silverorange
- * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
- * @link http://pear.php.net/package/Crypt_GPG
- */
-class Crypt_GPG_OpenSubprocessException extends Crypt_GPG_Exception
-{
- // {{{ private class properties
-
- /**
- * The command used to try to open the subprocess
- *
- * @var string
- */
- private $_command = '';
-
- // }}}
- // {{{ __construct()
-
- /**
- * Creates a new Crypt_GPG_OpenSubprocessException
- *
- * @param string $message an error message.
- * @param integer $code a user defined error code.
- * @param string $command the command that was called to open the
- * new subprocess.
- *
- * @see Crypt_GPG::_openSubprocess()
- */
- public function __construct($message, $code = 0, $command = '')
- {
- $this->_command = $command;
- parent::__construct($message, $code);
- }
-
- // }}}
- // {{{ getCommand()
-
- /**
- * Returns the contents of the internal _command property
- *
- * @return string the command used to open the subprocess.
- *
- * @see Crypt_GPG_OpenSubprocessException::$_command
- */
- public function getCommand()
- {
- return $this->_command;
- }
-
- // }}}
-}
-
-// }}}
-// {{{ class Crypt_GPG_InvalidOperationException
-
-/**
- * An exception thrown when an invalid GPG operation is attempted
- *
- * @category Encryption
- * @package Crypt_GPG
- * @author Michael Gauthier <mike@silverorange.com>
- * @copyright 2008 silverorange
- * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
- * @link http://pear.php.net/package/Crypt_GPG
- */
-class Crypt_GPG_InvalidOperationException extends Crypt_GPG_Exception
-{
- // {{{ private class properties
-
- /**
- * The attempted operation
- *
- * @var string
- */
- private $_operation = '';
-
- // }}}
- // {{{ __construct()
-
- /**
- * Creates a new Crypt_GPG_OpenSubprocessException
- *
- * @param string $message an error message.
- * @param integer $code a user defined error code.
- * @param string $operation the operation.
- */
- public function __construct($message, $code = 0, $operation = '')
- {
- $this->_operation = $operation;
- parent::__construct($message, $code);
- }
-
- // }}}
- // {{{ getOperation()
-
- /**
- * Returns the contents of the internal _operation property
- *
- * @return string the attempted operation.
- *
- * @see Crypt_GPG_InvalidOperationException::$_operation
- */
- public function getOperation()
- {
- return $this->_operation;
- }
-
- // }}}
-}
-
-// }}}
-// {{{ class Crypt_GPG_KeyNotFoundException
-
-/**
- * An exception thrown when Crypt_GPG fails to find the key for various
- * operations
- *
- * @category Encryption
- * @package Crypt_GPG
- * @author Michael Gauthier <mike@silverorange.com>
- * @copyright 2005 silverorange
- * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
- * @link http://pear.php.net/package/Crypt_GPG
- */
-class Crypt_GPG_KeyNotFoundException extends Crypt_GPG_Exception
-{
- // {{{ private class properties
-
- /**
- * The key identifier that was searched for
- *
- * @var string
- */
- private $_keyId = '';
-
- // }}}
- // {{{ __construct()
-
- /**
- * Creates a new Crypt_GPG_KeyNotFoundException
- *
- * @param string $message an error message.
- * @param integer $code a user defined error code.
- * @param string $keyId the key identifier of the key.
- */
- public function __construct($message, $code = 0, $keyId= '')
- {
- $this->_keyId = $keyId;
- parent::__construct($message, $code);
- }
-
- // }}}
- // {{{ getKeyId()
-
- /**
- * Gets the key identifier of the key that was not found
- *
- * @return string the key identifier of the key that was not found.
- */
- public function getKeyId()
- {
- return $this->_keyId;
- }
-
- // }}}
-}
-
-// }}}
-// {{{ class Crypt_GPG_NoDataException
-
-/**
- * An exception thrown when Crypt_GPG cannot find valid data for various
- * operations
- *
- * @category Encryption
- * @package Crypt_GPG
- * @author Michael Gauthier <mike@silverorange.com>
- * @copyright 2006 silverorange
- * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
- * @link http://pear.php.net/package/Crypt_GPG
- */
-class Crypt_GPG_NoDataException extends Crypt_GPG_Exception
-{
-}
-
-// }}}
-// {{{ class Crypt_GPG_BadPassphraseException
-
-/**
- * An exception thrown when a required passphrase is incorrect or missing
- *
- * @category Encryption
- * @package Crypt_GPG
- * @author Michael Gauthier <mike@silverorange.com>
- * @copyright 2006-2008 silverorange
- * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
- * @link http://pear.php.net/package/Crypt_GPG
- */
-class Crypt_GPG_BadPassphraseException extends Crypt_GPG_Exception
-{
- // {{{ private class properties
-
- /**
- * Keys for which the passhprase is missing
- *
- * This contains primary user ids indexed by sub-key id.
- *
- * @var array
- */
- private $_missingPassphrases = array();
-
- /**
- * Keys for which the passhprase is incorrect
- *
- * This contains primary user ids indexed by sub-key id.
- *
- * @var array
- */
- private $_badPassphrases = array();
-
- // }}}
- // {{{ __construct()
-
- /**
- * Creates a new Crypt_GPG_BadPassphraseException
- *
- * @param string $message an error message.
- * @param integer $code a user defined error code.
- * @param string $badPassphrases an array containing user ids of keys
- * for which the passphrase is incorrect.
- * @param string $missingPassphrases an array containing user ids of keys
- * for which the passphrase is missing.
- */
- public function __construct($message, $code = 0,
- array $badPassphrases = array(), array $missingPassphrases = array()
- ) {
- $this->_badPassphrases = $badPassphrases;
- $this->_missingPassphrases = $missingPassphrases;
-
- parent::__construct($message, $code);
- }
-
- // }}}
- // {{{ getBadPassphrases()
-
- /**
- * Gets keys for which the passhprase is incorrect
- *
- * @return array an array of keys for which the passphrase is incorrect.
- * The array contains primary user ids indexed by the sub-key
- * id.
- */
- public function getBadPassphrases()
- {
- return $this->_badPassphrases;
- }
-
- // }}}
- // {{{ getMissingPassphrases()
-
- /**
- * Gets keys for which the passhprase is missing
- *
- * @return array an array of keys for which the passphrase is missing.
- * The array contains primary user ids indexed by the sub-key
- * id.
- */
- public function getMissingPassphrases()
- {
- return $this->_missingPassphrases;
- }
-
- // }}}
-}
-
-// }}}
-// {{{ class Crypt_GPG_DeletePrivateKeyException
-
-/**
- * An exception thrown when an attempt is made to delete public key that has an
- * associated private key on the keyring
- *
- * @category Encryption
- * @package Crypt_GPG
- * @author Michael Gauthier <mike@silverorange.com>
- * @copyright 2008 silverorange
- * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
- * @link http://pear.php.net/package/Crypt_GPG
- */
-class Crypt_GPG_DeletePrivateKeyException extends Crypt_GPG_Exception
-{
- // {{{ private class properties
-
- /**
- * The key identifier the deletion attempt was made upon
- *
- * @var string
- */
- private $_keyId = '';
-
- // }}}
- // {{{ __construct()
-
- /**
- * Creates a new Crypt_GPG_DeletePrivateKeyException
- *
- * @param string $message an error message.
- * @param integer $code a user defined error code.
- * @param string $keyId the key identifier of the public key that was
- * attempted to delete.
- *
- * @see Crypt_GPG::deletePublicKey()
- */
- public function __construct($message, $code = 0, $keyId = '')
- {
- $this->_keyId = $keyId;
- parent::__construct($message, $code);
- }
-
- // }}}
- // {{{ getKeyId()
-
- /**
- * Gets the key identifier of the key that was not found
- *
- * @return string the key identifier of the key that was not found.
- */
- public function getKeyId()
- {
- return $this->_keyId;
- }
-
- // }}}
-}
-
-// }}}
-// {{{ class Crypt_GPG_KeyNotCreatedException
-
-/**
- * An exception thrown when an attempt is made to generate a key and the
- * attempt fails
- *
- * @category Encryption
- * @package Crypt_GPG
- * @author Michael Gauthier <mike@silverorange.com>
- * @copyright 2011 silverorange
- * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
- * @link http://pear.php.net/package/Crypt_GPG
- */
-class Crypt_GPG_KeyNotCreatedException extends Crypt_GPG_Exception
-{
-}
-
-// }}}
-// {{{ class Crypt_GPG_InvalidKeyParamsException
-
-/**
- * An exception thrown when an attempt is made to generate a key and the
- * key parameters set on the key generator are invalid
- *
- * @category Encryption
- * @package Crypt_GPG
- * @author Michael Gauthier <mike@silverorange.com>
- * @copyright 2011 silverorange
- * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
- * @link http://pear.php.net/package/Crypt_GPG
- */
-class Crypt_GPG_InvalidKeyParamsException extends Crypt_GPG_Exception
-{
- // {{{ private class properties
-
- /**
- * The key algorithm
- *
- * @var integer
- */
- private $_algorithm = 0;
-
- /**
- * The key size
- *
- * @var integer
- */
- private $_size = 0;
-
- /**
- * The key usage
- *
- * @var integer
- */
- private $_usage = 0;
-
- // }}}
- // {{{ __construct()
-
- /**
- * Creates a new Crypt_GPG_InvalidKeyParamsException
- *
- * @param string $message an error message.
- * @param integer $code a user defined error code.
- * @param string $algorithm the key algorithm.
- * @param string $size the key size.
- * @param string $usage the key usage.
- */
- public function __construct(
- $message,
- $code = 0,
- $algorithm = 0,
- $size = 0,
- $usage = 0
- ) {
- parent::__construct($message, $code);
-
- $this->_algorithm = $algorithm;
- $this->_size = $size;
- $this->_usage = $usage;
- }
-
- // }}}
- // {{{ getAlgorithm()
-
- /**
- * Gets the key algorithm
- *
- * @return integer the key algorithm.
- */
- public function getAlgorithm()
- {
- return $this->_algorithm;
- }
-
- // }}}
- // {{{ getSize()
-
- /**
- * Gets the key size
- *
- * @return integer the key size.
- */
- public function getSize()
- {
- return $this->_size;
- }
-
- // }}}
- // {{{ getUsage()
-
- /**
- * Gets the key usage
- *
- * @return integer the key usage.
- */
- public function getUsage()
- {
- return $this->_usage;
- }
-
- // }}}
-}
-
-// }}}
-
-?>
diff --git a/program/lib/Crypt/GPG/Key.php b/program/lib/Crypt/GPG/Key.php
deleted file mode 100644
index 6ecb538bc..000000000
--- a/program/lib/Crypt/GPG/Key.php
+++ /dev/null
@@ -1,223 +0,0 @@
-<?php
-
-/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
-
-/**
- * Contains a class representing GPG keys
- *
- * PHP version 5
- *
- * LICENSE:
- *
- * This library is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of the
- * License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * @category Encryption
- * @package Crypt_GPG
- * @author Michael Gauthier <mike@silverorange.com>
- * @copyright 2008-2010 silverorange
- * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
- * @version CVS: $Id$
- * @link http://pear.php.net/package/Crypt_GPG
- */
-
-/**
- * Sub-key class definition
- */
-require_once 'Crypt/GPG/SubKey.php';
-
-/**
- * User id class definition
- */
-require_once 'Crypt/GPG/UserId.php';
-
-// {{{ class Crypt_GPG_Key
-
-/**
- * A data class for GPG key information
- *
- * This class is used to store the results of the {@link Crypt_GPG::getKeys()}
- * method.
- *
- * @category Encryption
- * @package Crypt_GPG
- * @author Michael Gauthier <mike@silverorange.com>
- * @copyright 2008-2010 silverorange
- * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
- * @link http://pear.php.net/package/Crypt_GPG
- * @see Crypt_GPG::getKeys()
- */
-class Crypt_GPG_Key
-{
- // {{{ class properties
-
- /**
- * The user ids associated with this key
- *
- * This is an array of {@link Crypt_GPG_UserId} objects.
- *
- * @var array
- *
- * @see Crypt_GPG_Key::addUserId()
- * @see Crypt_GPG_Key::getUserIds()
- */
- private $_userIds = array();
-
- /**
- * The subkeys of this key
- *
- * This is an array of {@link Crypt_GPG_SubKey} objects.
- *
- * @var array
- *
- * @see Crypt_GPG_Key::addSubKey()
- * @see Crypt_GPG_Key::getSubKeys()
- */
- private $_subKeys = array();
-
- // }}}
- // {{{ getSubKeys()
-
- /**
- * Gets the sub-keys of this key
- *
- * @return array the sub-keys of this key.
- *
- * @see Crypt_GPG_Key::addSubKey()
- */
- public function getSubKeys()
- {
- return $this->_subKeys;
- }
-
- // }}}
- // {{{ getUserIds()
-
- /**
- * Gets the user ids of this key
- *
- * @return array the user ids of this key.
- *
- * @see Crypt_GPG_Key::addUserId()
- */
- public function getUserIds()
- {
- return $this->_userIds;
- }
-
- // }}}
- // {{{ getPrimaryKey()
-
- /**
- * Gets the primary sub-key of this key
- *
- * The primary key is the first added sub-key.
- *
- * @return Crypt_GPG_SubKey the primary sub-key of this key.
- */
- public function getPrimaryKey()
- {
- $primary_key = null;
- if (count($this->_subKeys) > 0) {
- $primary_key = $this->_subKeys[0];
- }
- return $primary_key;
- }
-
- // }}}
- // {{{ canSign()
-
- /**
- * Gets whether or not this key can sign data
- *
- * This key can sign data if any sub-key of this key can sign data.
- *
- * @return boolean true if this key can sign data and false if this key
- * cannot sign data.
- */
- public function canSign()
- {
- $canSign = false;
- foreach ($this->_subKeys as $subKey) {
- if ($subKey->canSign()) {
- $canSign = true;
- break;
- }
- }
- return $canSign;
- }
-
- // }}}
- // {{{ canEncrypt()
-
- /**
- * Gets whether or not this key can encrypt data
- *
- * This key can encrypt data if any sub-key of this key can encrypt data.
- *
- * @return boolean true if this key can encrypt data and false if this
- * key cannot encrypt data.
- */
- public function canEncrypt()
- {
- $canEncrypt = false;
- foreach ($this->_subKeys as $subKey) {
- if ($subKey->canEncrypt()) {
- $canEncrypt = true;
- break;
- }
- }
- return $canEncrypt;
- }
-
- // }}}
- // {{{ addSubKey()
-
- /**
- * Adds a sub-key to this key
- *
- * The first added sub-key will be the primary key of this key.
- *
- * @param Crypt_GPG_SubKey $subKey the sub-key to add.
- *
- * @return Crypt_GPG_Key the current object, for fluent interface.
- */
- public function addSubKey(Crypt_GPG_SubKey $subKey)
- {
- $this->_subKeys[] = $subKey;
- return $this;
- }
-
- // }}}
- // {{{ addUserId()
-
- /**
- * Adds a user id to this key
- *
- * @param Crypt_GPG_UserId $userId the user id to add.
- *
- * @return Crypt_GPG_Key the current object, for fluent interface.
- */
- public function addUserId(Crypt_GPG_UserId $userId)
- {
- $this->_userIds[] = $userId;
- return $this;
- }
-
- // }}}
-}
-
-// }}}
-
-?>
diff --git a/program/lib/Crypt/GPG/KeyGenerator.php b/program/lib/Crypt/GPG/KeyGenerator.php
deleted file mode 100644
index f59c0ee3a..000000000
--- a/program/lib/Crypt/GPG/KeyGenerator.php
+++ /dev/null
@@ -1,790 +0,0 @@
-<?php
-
-/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
-
-/**
- * Crypt_GPG is a package to use GPG from PHP
- *
- * This file contains an object that handles GnuPG key generation.
- *
- * PHP version 5
- *
- * LICENSE:
- *
- * This library is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of the
- * License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * @category Encryption
- * @package Crypt_GPG
- * @author Michael Gauthier <mike@silverorange.com>
- * @copyright 2011-2013 silverorange
- * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
- * @version CVS: $Id:$
- * @link http://pear.php.net/package/Crypt_GPG
- * @link http://www.gnupg.org/
- */
-
-/**
- * Base class for GPG methods
- */
-require_once 'Crypt/GPGAbstract.php';
-
-/**
- * Status output handler for key generation
- */
-require_once 'Crypt/GPG/KeyGeneratorStatusHandler.php';
-
-/**
- * Error output handler for key generation
- */
-require_once 'Crypt/GPG/KeyGeneratorErrorHandler.php';
-
-// {{{ class Crypt_GPG_KeyGenerator
-
-/**
- * GnuPG key generator
- *
- * This class provides an object oriented interface for generating keys with
- * the GNU Privacy Guard (GPG).
- *
- * Secure key generation requires true random numbers, and as such can be slow.
- * If the operating system runs out of entropy, key generation will block until
- * more entropy is available.
- *
- * If quick key generation is important, a hardware entropy generator, or an
- * entropy gathering daemon may be installed. For example, administrators of
- * Debian systems may want to install the 'randomsound' package.
- *
- * This class uses the experimental automated key generation support available
- * in GnuPG. See <b>doc/DETAILS</b> in the
- * {@link http://www.gnupg.org/download/ GPG distribution} for detailed
- * information on the key generation format.
- *
- * @category Encryption
- * @package Crypt_GPG
- * @author Nathan Fredrickson <nathan@silverorange.com>
- * @author Michael Gauthier <mike@silverorange.com>
- * @copyright 2005-2013 silverorange
- * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
- * @link http://pear.php.net/package/Crypt_GPG
- * @link http://www.gnupg.org/
- */
-class Crypt_GPG_KeyGenerator extends Crypt_GPGAbstract
-{
- // {{{ protected properties
-
- /**
- * The expiration date of generated keys
- *
- * @var integer
- *
- * @see Crypt_GPG_KeyGenerator::setExpirationDate()
- */
- protected $expirationDate = 0;
-
- /**
- * The passphrase of generated keys
- *
- * @var string
- *
- * @see Crypt_GPG_KeyGenerator::setPassphrase()
- */
- protected $passphrase = '';
-
- /**
- * The algorithm for generated primary keys
- *
- * @var integer
- *
- * @see Crypt_GPG_KeyGenerator::setKeyParams()
- */
- protected $keyAlgorithm = Crypt_GPG_SubKey::ALGORITHM_DSA;
-
- /**
- * The size of generated primary keys
- *
- * @var integer
- *
- * @see Crypt_GPG_KeyGenerator::setKeyParams()
- */
- protected $keySize = 1024;
-
- /**
- * The usages of generated primary keys
- *
- * This is a bitwise combination of the usage constants in
- * {@link Crypt_GPG_SubKey}.
- *
- * @var integer
- *
- * @see Crypt_GPG_KeyGenerator::setKeyParams()
- */
- protected $keyUsage = 6; // USAGE_SIGN | USAGE_CERTIFY
-
- /**
- * The algorithm for generated sub-keys
- *
- * @var integer
- *
- * @see Crypt_GPG_KeyGenerator::setSubKeyParams()
- */
- protected $subKeyAlgorithm = Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC;
-
- /**
- * The size of generated sub-keys
- *
- * @var integer
- *
- * @see Crypt_GPG_KeyGenerator::setSubKeyParams()
- */
- protected $subKeySize = 2048;
-
- /**
- * The usages of generated sub-keys
- *
- * This is a bitwise combination of the usage constants in
- * {@link Crypt_GPG_SubKey}.
- *
- * @var integer
- *
- * @see Crypt_GPG_KeyGenerator::setSubKeyParams()
- */
- protected $subKeyUsage = Crypt_GPG_SubKey::USAGE_ENCRYPT;
-
- /**
- * The GnuPG status handler to use for key generation
- *
- * @var Crypt_GPG_KeyGeneratorStatusHandler
- *
- * @see Crypt_GPG_KeyGenerator::setStatusHandler()
- */
- protected $statusHandler = null;
-
- /**
- * The GnuPG error handler to use for key generation
- *
- * @var Crypt_GPG_KeyGeneratorErrorHandler
- *
- * @see Crypt_GPG_KeyGenerator::setErrorHandler()
- */
- protected $errorHandler = null;
-
- // }}}
- // {{{ __construct()
-
- /**
- * Creates a new GnuPG key generator
- *
- * Available options are:
- *
- * - <kbd>string homedir</kbd> - the directory where the GPG
- * keyring files are stored. If not
- * specified, Crypt_GPG uses the
- * default of <kbd>~/.gnupg</kbd>.
- * - <kbd>string publicKeyring</kbd> - the file path of the public
- * keyring. Use this if the public
- * keyring is not in the homedir, or
- * if the keyring is in a directory
- * not writable by the process
- * invoking GPG (like Apache). Then
- * you can specify the path to the
- * keyring with this option
- * (/foo/bar/pubring.gpg), and specify
- * a writable directory (like /tmp)
- * using the <i>homedir</i> option.
- * - <kbd>string privateKeyring</kbd> - the file path of the private
- * keyring. Use this if the private
- * keyring is not in the homedir, or
- * if the keyring is in a directory
- * not writable by the process
- * invoking GPG (like Apache). Then
- * you can specify the path to the
- * keyring with this option
- * (/foo/bar/secring.gpg), and specify
- * a writable directory (like /tmp)
- * using the <i>homedir</i> option.
- * - <kbd>string trustDb</kbd> - the file path of the web-of-trust
- * database. Use this if the trust
- * database is not in the homedir, or
- * if the database is in a directory
- * not writable by the process
- * invoking GPG (like Apache). Then
- * you can specify the path to the
- * trust database with this option
- * (/foo/bar/trustdb.gpg), and specify
- * a writable directory (like /tmp)
- * using the <i>homedir</i> option.
- * - <kbd>string binary</kbd> - the location of the GPG binary. If
- * not specified, the driver attempts
- * to auto-detect the GPG binary
- * location using a list of known
- * default locations for the current
- * operating system. The option
- * <kbd>gpgBinary</kbd> is a
- * deprecated alias for this option.
- * - <kbd>string agent</kbd> - the location of the GnuPG agent
- * binary. The gpg-agent is only
- * used for GnuPG 2.x. If not
- * specified, the engine attempts
- * to auto-detect the gpg-agent
- * binary location using a list of
- * know default locations for the
- * current operating system.
- * - <kbd>boolean debug</kbd> - whether or not to use debug mode.
- * When debug mode is on, all
- * communication to and from the GPG
- * subprocess is logged. This can be
- *
- * @param array $options optional. An array of options used to create the
- * GPG object. All options are optional and are
- * represented as key-value pairs.
- *
- * @throws Crypt_GPG_FileException if the <kbd>homedir</kbd> does not exist
- * and cannot be created. This can happen if <kbd>homedir</kbd> is
- * not specified, Crypt_GPG is run as the web user, and the web
- * user has no home directory. This exception is also thrown if any
- * of the options <kbd>publicKeyring</kbd>,
- * <kbd>privateKeyring</kbd> or <kbd>trustDb</kbd> options are
- * specified but the files do not exist or are are not readable.
- * This can happen if the user running the Crypt_GPG process (for
- * example, the Apache user) does not have permission to read the
- * files.
- *
- * @throws PEAR_Exception if the provided <kbd>binary</kbd> is invalid, or
- * if no <kbd>binary</kbd> is provided and no suitable binary could
- * be found.
- *
- * @throws PEAR_Exception if the provided <kbd>agent</kbd> is invalid, or
- * if no <kbd>agent</kbd> is provided and no suitable gpg-agent
- * cound be found.
- */
- public function __construct(array $options = array())
- {
- parent::__construct($options);
-
- $this->statusHandler = new Crypt_GPG_KeyGeneratorStatusHandler();
- $this->errorHandler = new Crypt_GPG_KeyGeneratorErrorHandler();
- }
-
- // }}}
- // {{{ setExpirationDate()
-
- /**
- * Sets the expiration date of generated keys
- *
- * @param string|integer $date either a string that may be parsed by
- * PHP's strtotime() function, or an integer
- * timestamp representing the number of seconds
- * since the UNIX epoch. This date must be at
- * least one date in the future. Keys that
- * expire in the past may not be generated. Use
- * an expiration date of 0 for keys that do not
- * expire.
- *
- * @throws InvalidArgumentException if the date is not a valid format, or
- * if the date is not at least one day in
- * the future, or if the date is greater
- * than 2038-01-19T03:14:07.
- *
- * @return Crypt_GPG_KeyGenerator the current object, for fluent interface.
- */
- public function setExpirationDate($date)
- {
- if (is_int($date) || ctype_digit(strval($date))) {
- $expirationDate = intval($date);
- } else {
- $expirationDate = strtotime($date);
- }
-
- if ($expirationDate === false) {
- throw new InvalidArgumentException(
- sprintf(
- 'Invalid expiration date format: "%s". Please use a ' .
- 'format compatible with PHP\'s strtotime().',
- $date
- )
- );
- }
-
- if ($expirationDate !== 0 && $expirationDate < time() + 86400) {
- throw new InvalidArgumentException(
- 'Expiration date must be at least a day in the future.'
- );
- }
-
- // GnuPG suffers from the 2038 bug
- if ($expirationDate > 2147483647) {
- throw new InvalidArgumentException(
- 'Expiration date must not be greater than 2038-01-19T03:14:07.'
- );
- }
-
- $this->expirationDate = $expirationDate;
-
- return $this;
- }
-
- // }}}
- // {{{ setPassphrase()
-
- /**
- * Sets the passphrase of generated keys
- *
- * @param string $passphrase the passphrase to use for generated keys. Use
- * null or an empty string for no passphrase.
- *
- * @return Crypt_GPG_KeyGenerator the current object, for fluent interface.
- */
- public function setPassphrase($passphrase)
- {
- $this->passphrase = strval($passphrase);
- return $this;
- }
-
- // }}}
- // {{{ setKeyParams()
-
- /**
- * Sets the parameters for the primary key of generated key-pairs
- *
- * @param integer $algorithm the algorithm used by the key. This should be
- * one of the Crypt_GPG_SubKey::ALGORITHM_*
- * constants.
- * @param integer $size optional. The size of the key. Different
- * algorithms have different size requirements.
- * If not specified, the default size for the
- * specified algorithm will be used. If an
- * invalid key size is used, GnuPG will do its
- * best to round it to a valid size.
- * @param integer $usage optional. A bitwise combination of key usages.
- * If not specified, the primary key will be used
- * only to sign and certify. This is the default
- * behavior of GnuPG in interactive mode. Use
- * the Crypt_GPG_SubKey::USAGE_* constants here.
- * The primary key may be used to certify even
- * if the certify usage is not specified.
- *
- * @return Crypt_GPG_KeyGenerator the current object, for fluent interface.
- */
- public function setKeyParams($algorithm, $size = 0, $usage = 0)
- {
- $apgorithm = intval($algorithm);
-
- if ($algorithm === Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC) {
- throw new Crypt_GPG_InvalidKeyParamsException(
- 'Primary key algorithm must be capable of signing. The ' .
- 'Elgamal algorithm can only encrypt.',
- 0,
- $algorithm,
- $size,
- $usage
- );
- }
-
- if ($size != 0) {
- $size = intval($size);
- }
-
- if ($usage != 0) {
- $usage = intval($usage);
- }
-
- $usageEncrypt = Crypt_GPG_SubKey::USAGE_ENCRYPT;
-
- if ( $algorithm === Crypt_GPG_SubKey::ALGORITHM_DSA
- && ($usage & $usageEncrypt) === $usageEncrypt
- ) {
- throw new Crypt_GPG_InvalidKeyParamsException(
- 'The DSA algorithm is not capable of encrypting. Please ' .
- 'specify a different algorithm or do not include encryption ' .
- 'as a usage for the primary key.',
- 0,
- $algorithm,
- $size,
- $usage
- );
- }
-
- $this->keyAlgorithm = $algorithm;
-
- if ($size != 0) {
- $this->keySize = $size;
- }
-
- if ($usage != 0) {
- $this->keyUsage = $usage;
- }
-
- return $this;
- }
-
- // }}}
- // {{{ setSubKeyParams()
-
- /**
- * Sets the parameters for the sub-key of generated key-pairs
- *
- * @param integer $algorithm the algorithm used by the key. This should be
- * one of the Crypt_GPG_SubKey::ALGORITHM_*
- * constants.
- * @param integer $size optional. The size of the key. Different
- * algorithms have different size requirements.
- * If not specified, the default size for the
- * specified algorithm will be used. If an
- * invalid key size is used, GnuPG will do its
- * best to round it to a valid size.
- * @param integer $usage optional. A bitwise combination of key usages.
- * If not specified, the sub-key will be used
- * only to encrypt. This is the default behavior
- * of GnuPG in interactive mode. Use the
- * Crypt_GPG_SubKey::USAGE_* constants here.
- *
- * @return Crypt_GPG_KeyGenerator the current object, for fluent interface.
- */
- public function setSubKeyParams($algorithm, $size = '', $usage = 0)
- {
- $apgorithm = intval($algorithm);
-
- if ($size != 0) {
- $size = intval($size);
- }
-
- if ($usage != 0) {
- $usage = intval($usage);
- }
-
- $usageSign = Crypt_GPG_SubKey::USAGE_SIGN;
-
- if ( $algorithm === Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC
- && ($usage & $usageSign) === $usageSign
- ) {
- throw new Crypt_GPG_InvalidKeyParamsException(
- 'The Elgamal algorithm is not capable of signing. Please ' .
- 'specify a different algorithm or do not include signing ' .
- 'as a usage for the sub-key.',
- 0,
- $algorithm,
- $size,
- $usage
- );
- }
-
- $usageEncrypt = Crypt_GPG_SubKey::USAGE_ENCRYPT;
-
- if ( $algorithm === Crypt_GPG_SubKey::ALGORITHM_DSA
- && ($usage & $usageEncrypt) === $usageEncrypt
- ) {
- throw new Crypt_GPG_InvalidKeyParamsException(
- 'The DSA algorithm is not capable of encrypting. Please ' .
- 'specify a different algorithm or do not include encryption ' .
- 'as a usage for the sub-key.',
- 0,
- $algorithm,
- $size,
- $usage
- );
- }
-
- $this->subKeyAlgorithm = $algorithm;
-
- if ($size != 0) {
- $this->subKeySize = $size;
- }
-
- if ($usage != 0) {
- $this->subKeyUsage = $usage;
- }
-
- return $this;
- }
-
- // }}}
- // {{{ setStatusHandler()
-
- /**
- * Sets the status handler to use for key generation
- *
- * Normally this method does not need to be used. It provides a means for
- * dependency injection.
- *
- * @param Crypt_GPG_KeyStatusHandler $handler the key status handler to
- * use.
- *
- * @return Crypt_GPG_KeyGenerator the current object, for fluent interface.
- */
- public function setStatusHandler(
- Crypt_GPG_KeyGeneratorStatusHandler $handler
- ) {
- $this->statusHandler = $handler;
- return $this;
- }
-
- // }}}
- // {{{ setErrorHandler()
-
- /**
- * Sets the error handler to use for key generation
- *
- * Normally this method does not need to be used. It provides a means for
- * dependency injection.
- *
- * @param Crypt_GPG_KeyErrorHandler $handler the key error handler to
- * use.
- *
- * @return Crypt_GPG_KeyGenerator the current object, for fluent interface.
- */
- public function setErrorHandler(
- Crypt_GPG_KeyGeneratorErrorHandler $handler
- ) {
- $this->errorHandler = $handler;
- return $this;
- }
-
- // }}}
- // {{{ generateKey()
-
- /**
- * Generates a new key-pair in the current keyring
- *
- * Secure key generation requires true random numbers, and as such can be
- * solw. If the operating system runs out of entropy, key generation will
- * block until more entropy is available.
- *
- * If quick key generation is important, a hardware entropy generator, or
- * an entropy gathering daemon may be installed. For example,
- * administrators of Debian systems may want to install the 'randomsound'
- * package.
- *
- * @param string|Crypt_GPG_UserId $name either a {@link Crypt_GPG_UserId}
- * object, or a string containing
- * the name of the user id.
- * @param string $email optional. If <i>$name</i> is
- * specified as a string, this is
- * the email address of the user id.
- * @param string $comment optional. If <i>$name</i> is
- * specified as a string, this is
- * the comment of the user id.
- *
- * @return Crypt_GPG_Key the newly generated key.
- *
- * @throws Crypt_GPG_KeyNotCreatedException if the key parameters are
- * incorrect, if an unknown error occurs during key generation, or
- * if the newly generated key is not found in the keyring.
- *
- * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
- * Use the <kbd>debug</kbd> option and file a bug report if these
- * exceptions occur.
- */
- public function generateKey($name, $email = '', $comment = '')
- {
- $handle = uniqid('key', true);
-
- $userId = $this->getUserId($name, $email, $comment);
-
- $keyParams = array(
- 'Key-Type' => $this->keyAlgorithm,
- 'Key-Length' => $this->keySize,
- 'Key-Usage' => $this->getUsage($this->keyUsage),
- 'Subkey-Type' => $this->subKeyAlgorithm,
- 'Subkey-Length' => $this->subKeySize,
- 'Subkey-Usage' => $this->getUsage($this->subKeyUsage),
- 'Name-Real' => $userId->getName(),
- 'Handle' => $handle,
- );
-
- if ($this->expirationDate != 0) {
- // GnuPG only accepts granularity of days
- $expirationDate = date('Y-m-d', $this->expirationDate);
- $keyParams['Expire-Date'] = $expirationDate;
- }
-
- if ($this->passphrase != '') {
- $keyParams['Passphrase'] = $this->passphrase;
- }
-
- if ($userId->getEmail() != '') {
- $keyParams['Name-Email'] = $userId->getEmail();
- }
-
- if ($userId->getComment() != '') {
- $keyParams['Name-Comment'] = $userId->getComment();
- }
-
-
- $keyParamsFormatted = array();
- foreach ($keyParams as $name => $value) {
- $keyParamsFormatted[] = $name . ': ' . $value;
- }
-
- $input = implode("\n", $keyParamsFormatted) . "\n%commit\n";
-
- $statusHandler = clone $this->statusHandler;
- $statusHandler->setHandle($handle);
-
- $errorHandler = clone $this->errorHandler;
-
- $this->engine->reset();
- $this->engine->addStatusHandler(array($statusHandler, 'handle'));
- $this->engine->addErrorHandler(array($errorHandler, 'handle'));
- $this->engine->setInput($input);
- $this->engine->setOutput($output);
- $this->engine->setOperation('--gen-key', array('--batch'));
- $this->engine->run();
-
- $code = $errorHandler->getErrorCode();
- switch ($code) {
- case self::ERROR_BAD_KEY_PARAMS:
- switch ($errorHandler->getLineNumber()) {
- case 1:
- throw new Crypt_GPG_InvalidKeyParamsException(
- 'Invalid primary key algorithm specified.',
- 0,
- $this->keyAlgorithm,
- $this->keySize,
- $this->keyUsage
- );
- case 4:
- throw new Crypt_GPG_InvalidKeyParamsException(
- 'Invalid sub-key algorithm specified.',
- 0,
- $this->subKeyAlgorithm,
- $this->subKeySize,
- $this->subKeyUsage
- );
- default:
- throw new Crypt_GPG_InvalidKeyParamsException(
- 'Invalid key algorithm specified.'
- );
- }
- }
-
- $code = $this->engine->getErrorCode();
-
- switch ($code) {
- case self::ERROR_NONE:
- break;
- default:
- throw new Crypt_GPG_Exception(
- 'Unknown error generating key-pair. Please use the \'debug\' ' .
- 'option when creating the Crypt_GPG object, and file a bug ' .
- 'report at ' . self::BUG_URI,
- $code
- );
- }
-
- $code = $statusHandler->getErrorCode();
-
- switch ($code) {
- case self::ERROR_NONE:
- break;
- case self::ERROR_KEY_NOT_CREATED:
- throw new Crypt_GPG_KeyNotCreatedException(
- 'Unable to create new key-pair. Invalid key parameters. ' .
- 'Make sure the specified key algorithms and sizes are ' .
- 'correct.',
- $code
- );
- }
-
- $fingerprint = $statusHandler->getKeyFingerprint();
- $keys = $this->_getKeys($fingerprint);
-
- if (count($keys) === 0) {
- throw new Crypt_GPG_KeyNotCreatedException(
- sprintf(
- 'Newly created key "%s" not found in keyring.',
- $fingerprint
- )
- );
- }
-
- return $keys[0];
- }
-
- // }}}
- // {{{ getUsage()
-
- /**
- * Builds a GnuPG key usage string suitable for key generation
- *
- * See <b>doc/DETAILS</b> in the
- * {@link http://www.gnupg.org/download/ GPG distribution} for detailed
- * information on the key usage format.
- *
- * @param integer $usage a bitwise combination of the key usages. This is
- * a combination of the Crypt_GPG_SubKey::USAGE_*
- * constants.
- *
- * @return string the key usage string.
- */
- protected function getUsage($usage)
- {
- $map = array(
- Crypt_GPG_SubKey::USAGE_ENCRYPT => 'encrypt',
- Crypt_GPG_SubKey::USAGE_SIGN => 'sign',
- Crypt_GPG_SubKey::USAGE_CERTIFY => 'cert',
- Crypt_GPG_SubKey::USAGE_AUTHENTICATION => 'auth',
- );
-
- // cert is always used for primary keys and does not need to be
- // specified
- $usage &= ~Crypt_GPG_SubKey::USAGE_CERTIFY;
-
- $usageArray = array();
-
- foreach ($map as $key => $value) {
- if (($usage & $key) === $key) {
- $usageArray[] = $value;
- }
- }
-
- return implode(',', $usageArray);
- }
-
- // }}}
- // {{{ getUserId()
-
- /**
- * Gets a user id object from parameters
- *
- * @param string|Crypt_GPG_UserId $name either a {@link Crypt_GPG_UserId}
- * object, or a string containing
- * the name of the user id.
- * @param string $email optional. If <i>$name</i> is
- * specified as a string, this is
- * the email address of the user id.
- * @param string $comment optional. If <i>$name</i> is
- * specified as a string, this is
- * the comment of the user id.
- *
- * @return Crypt_GPG_UserId a user id object for the specified parameters.
- */
- protected function getUserId($name, $email = '', $comment = '')
- {
- if ($name instanceof Crypt_GPG_UserId) {
- $userId = $name;
- } else {
- $userId = new Crypt_GPG_UserId();
- $userId->setName($name)->setEmail($email)->setComment($comment);
- }
-
- return $userId;
- }
-
- // }}}
-}
-
-// }}}
-
-?>
diff --git a/program/lib/Crypt/GPG/KeyGeneratorErrorHandler.php b/program/lib/Crypt/GPG/KeyGeneratorErrorHandler.php
deleted file mode 100644
index ad9ebf395..000000000
--- a/program/lib/Crypt/GPG/KeyGeneratorErrorHandler.php
+++ /dev/null
@@ -1,121 +0,0 @@
-<?php
-
-/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
-
-/**
- * Crypt_GPG is a package to use GPG from PHP
- *
- * This file contains an object that handles GPG's error output for the
- * key generation operation.
- *
- * PHP version 5
- *
- * LICENSE:
- *
- * This library is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of the
- * License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * @category Encryption
- * @package Crypt_GPG
- * @author Michael Gauthier <mike@silverorange.com>
- * @copyright 2011-2013 silverorange
- * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
- * @version CVS: $Id:$
- * @link http://pear.php.net/package/Crypt_GPG
- * @link http://www.gnupg.org/
- */
-
-/**
- * Error line handler for the key generation operation
- *
- * This class is used internally by Crypt_GPG and does not need be used
- * directly. See the {@link Crypt_GPG} class for end-user API.
- *
- * @category Encryption
- * @package Crypt_GPG
- * @author Michael Gauthier <mike@silverorange.com>
- * @copyright 2011-2013 silverorange
- * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
- * @link http://pear.php.net/package/Crypt_GPG
- * @link http://www.gnupg.org/
- */
-class Crypt_GPG_KeyGeneratorErrorHandler
-{
- // {{{ protected properties
-
- /**
- * Error code (if any) caused by key generation
- *
- * @var integer
- */
- protected $errorCode = Crypt_GPG::ERROR_NONE;
-
- /**
- * Line number at which the error occurred
- *
- * @var integer
- */
- protected $lineNumber = null;
-
- // }}}
- // {{{ handle()
-
- /**
- * Handles an error line
- *
- * @param string $line the error line to handle.
- *
- * @return void
- */
- public function handle($line)
- {
- $matches = array();
- $pattern = '/:([0-9]+): invalid algorithm$/';
- if (preg_match($pattern, $line, $matches) === 1) {
- $this->errorCode = Crypt_GPG::ERROR_BAD_KEY_PARAMS;
- $this->lineNumber = intval($matches[1]);
- }
- }
-
- // }}}
- // {{{ getErrorCode()
-
- /**
- * Gets the error code resulting from key gneration
- *
- * @return integer the error code resulting from key generation.
- */
- public function getErrorCode()
- {
- return $this->errorCode;
- }
-
- // }}}
- // {{{ getLineNumber()
-
- /**
- * Gets the line number at which the error occurred
- *
- * @return integer the line number at which the error occurred. Null if
- * no error occurred.
- */
- public function getLineNumber()
- {
- return $this->lineNumber;
- }
-
- // }}}
-}
-
-?>
diff --git a/program/lib/Crypt/GPG/KeyGeneratorStatusHandler.php b/program/lib/Crypt/GPG/KeyGeneratorStatusHandler.php
deleted file mode 100644
index 8b4c85c7a..000000000
--- a/program/lib/Crypt/GPG/KeyGeneratorStatusHandler.php
+++ /dev/null
@@ -1,173 +0,0 @@
-<?php
-
-/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
-
-/**
- * Crypt_GPG is a package to use GPG from PHP
- *
- * This file contains an object that handles GPG's status output for the
- * key generation operation.
- *
- * PHP version 5
- *
- * LICENSE:
- *
- * This library is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of the
- * License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * @category Encryption
- * @package Crypt_GPG
- * @author Michael Gauthier <mike@silverorange.com>
- * @copyright 2011-2013 silverorange
- * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
- * @version CVS: $Id:$
- * @link http://pear.php.net/package/Crypt_GPG
- * @link http://www.gnupg.org/
- */
-
-/**
- * Status line handler for the key generation operation
- *
- * This class is used internally by Crypt_GPG and does not need be used
- * directly. See the {@link Crypt_GPG} class for end-user API.
- *
- * This class is responsible for parsing the final key fingerprint from the
- * status output and for updating the key generation progress file. See
- * <b>doc/DETAILS</b> in the
- * {@link http://www.gnupg.org/download/ GPG distribution} for detailed
- * information on GPG's status output for the batch key generation operation.
- *
- * @category Encryption
- * @package Crypt_GPG
- * @author Michael Gauthier <mike@silverorange.com>
- * @copyright 2011-2013 silverorange
- * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
- * @link http://pear.php.net/package/Crypt_GPG
- * @link http://www.gnupg.org/
- */
-class Crypt_GPG_KeyGeneratorStatusHandler
-{
- // {{{ protected properties
-
- /**
- * The key fingerprint
- *
- * Ths key fingerprint is emitted by GPG after the key generation is
- * complete.
- *
- * @var string
- */
- protected $keyFingerprint = '';
-
- /**
- * The unique key handle used by this handler
- *
- * The key handle is used to track GPG status output for a particular key
- * before the key has its own identifier.
- *
- * @var string
- *
- * @see Crypt_GPG_KeyGeneratorStatusHandler::setHandle()
- */
- protected $handle = '';
-
- /**
- * Error code (if any) caused by key generation
- *
- * @var integer
- */
- protected $errorCode = Crypt_GPG::ERROR_NONE;
-
- // }}}
- // {{{ setHandle()
-
- /**
- * Sets the unique key handle used by this handler
- *
- * The key handle is used to track GPG status output for a particular key
- * before the key has its own identifier.
- *
- * @param string $handle the key handle this status handle will use.
- *
- * @return Crypt_GPG_KeyGeneratorStatusHandler the current object, for
- * fluent interface.
- */
- public function setHandle($handle)
- {
- $this->handle = strval($handle);
- return $this;
- }
-
- // }}}
- // {{{ handle()
-
- /**
- * Handles a status line
- *
- * @param string $line the status line to handle.
- *
- * @return void
- */
- public function handle($line)
- {
- $tokens = explode(' ', $line);
- switch ($tokens[0]) {
- case 'KEY_CREATED':
- if ($tokens[3] == $this->handle) {
- $this->keyFingerprint = $tokens[2];
- }
- break;
-
- case 'KEY_NOT_CREATED':
- if ($tokens[1] == $this->handle) {
- $this->errorCode = Crypt_GPG::ERROR_KEY_NOT_CREATED;
- }
- break;
-
- case 'PROGRESS':
- // todo: at some point, support reporting status async
- break;
- }
- }
-
- // }}}
- // {{{ getKeyFingerprint()
-
- /**
- * Gets the key fingerprint parsed by this handler
- *
- * @return array the key fingerprint parsed by this handler.
- */
- public function getKeyFingerprint()
- {
- return $this->keyFingerprint;
- }
-
- // }}}
- // {{{ getErrorCode()
-
- /**
- * Gets the error code resulting from key gneration
- *
- * @return integer the error code resulting from key generation.
- */
- public function getErrorCode()
- {
- return $this->errorCode;
- }
-
- // }}}
-}
-
-?>
diff --git a/program/lib/Crypt/GPG/PinEntry.php b/program/lib/Crypt/GPG/PinEntry.php
deleted file mode 100644
index c09703617..000000000
--- a/program/lib/Crypt/GPG/PinEntry.php
+++ /dev/null
@@ -1,875 +0,0 @@
-<?php
-
-/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
-
-/**
- * Contains a class implementing automatic pinentry for gpg-agent
- *
- * PHP version 5
- *
- * LICENSE:
- *
- * This library is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of the
- * License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * @category Encryption
- * @package Crypt_GPG
- * @author Michael Gauthier <mike@silverorange.com>
- * @copyright 2013 silverorange
- * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
- * @version CVS: $Id$
- * @link http://pear.php.net/package/Crypt_GPG
- */
-
-/**
- * CLI user-interface and parser.
- */
-require_once 'Console/CommandLine.php';
-
-// {{{ class Crypt_GPG_PinEntry
-
-/**
- * A command-line dummy pinentry program for use with gpg-agent and Crypt_GPG
- *
- * This pinentry receives passphrases through en environment variable and
- * automatically enters the PIN in response to gpg-agent requests. No user-
- * interaction required.
- *
- * Thie pinentry can be run independently for testing and debugging with the
- * following syntax:
- *
- * <pre>
- * Usage:
- * crypt-gpg-pinentry [options]
- *
- * Options:
- * -l log, --log=log Optional location to log pinentry activity.
- * -v, --verbose Sets verbosity level. Use multiples for more detail
- * (e.g. "-vv").
- * -h, --help show this help message and exit
- * --version show the program version and exit
- * </pre>
- *
- * @category Encryption
- * @package Crypt_GPG
- * @author Michael Gauthier <mike@silverorange.com>
- * @copyright 2013 silverorange
- * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
- * @link http://pear.php.net/package/Crypt_GPG
- * @see Crypt_GPG::getKeys()
- */
-class Crypt_GPG_PinEntry
-{
- // {{{ class constants
-
- /**
- * Verbosity level for showing no output.
- */
- const VERBOSITY_NONE = 0;
-
- /**
- * Verbosity level for showing error output.
- */
- const VERBOSITY_ERRORS = 1;
-
- /**
- * Verbosity level for showing all output, including Assuan protocol
- * messages.
- */
- const VERBOSITY_ALL = 2;
-
- /**
- * Length of buffer for reading lines from the Assuan server.
- *
- * PHP reads 8192 bytes. If this is set to less than 8192, PHP reads 8192
- * and buffers the rest so we might as well just read 8192.
- *
- * Using values other than 8192 also triggers PHP bugs.
- *
- * @see http://bugs.php.net/bug.php?id=35224
- */
- const CHUNK_SIZE = 8192;
-
- // }}}
- // {{{ protected properties
-
- /**
- * File handle for the input stream
- *
- * @var resource
- */
- protected $stdin = null;
-
- /**
- * File handle for the output stream
- *
- * @var resource
- */
- protected $stdout = null;
-
- /**
- * File handle for the log file if a log file is used
- *
- * @var resource
- */
- protected $logFile = null;
-
- /**
- * Whether or not this pinentry is finished and is exiting
- *
- * @var boolean
- */
- protected $moribund = false;
-
- /**
- * Verbosity level
- *
- * One of:
- * - {@link Crypt_GPG_PinEntry::VERBOSITY_NONE},
- * - {@link Crypt_GPG_PinEntry::VERBOSITY_ERRORS}, or
- * - {@link Crypt_GPG_PinEntry::VERBOSITY_ALL}
- *
- * @var integer
- */
- protected $verbosity = self::VERBOSITY_NONE;
-
- /**
- * The command-line interface parser for this pinentry
- *
- * @var Console_CommandLine
- *
- * @see Crypt_GPG_PinEntry::getParser()
- */
- protected $parser = null;
-
- /**
- * PINs to be entered by this pinentry
- *
- * An indexed array of associative arrays in the form:
- * <code>
- * <?php
- * array(
- * array(
- * 'keyId' => $keyId,
- * 'passphrase' => $passphrase
- * ),
- * ...
- * );
- * ?>
- * </code>
- *
- * This array is parsed from the environment variable
- * <kbd>PINENTRY_USER_DATA</kbd>.
- *
- * @var array
- *
- * @see Crypt_GPG_PinEntry::initPinsFromENV()
- */
- protected $pins = array();
-
- /**
- * PINs that have been tried for the current PIN
- *
- * This is an associative array indexed by the key identifier with
- * values being the same as elements in the {@link Crypt_GPG_PinEntry::$pins}
- * array.
- *
- * @var array
- */
- protected $triedPins = array();
-
- /**
- * The PIN currently being requested by the Assuan server
- *
- * If set, this is an associative array in the form:
- * <code>
- * <?php
- * array(
- * 'keyId' => $shortKeyId,
- * 'userId' => $userIdString
- * );
- * ?>
- * </code>
- *
- * @var array|null
- */
- protected $currentPin = null;
-
- // }}}
- // {{{ __invoke()
-
- /**
- * Runs this pinentry
- *
- * @return void
- */
- public function __invoke()
- {
- $this->parser = $this->getCommandLineParser();
-
- try {
- $result = $this->parser->parse();
-
- $this->setVerbosity($result->options['verbose']);
- $this->setLogFilename($result->options['log']);
-
- $this->connect();
- $this->initPinsFromENV();
-
- while (($line = fgets($this->stdin, self::CHUNK_SIZE)) !== false) {
- $this->parseCommand(mb_substr($line, 0, -1, '8bit'));
- if ($this->moribund) {
- break;
- }
- }
-
- $this->disconnect();
-
- } catch (Console_CommandLineException $e) {
- $this->log($e->getMessage() . PHP_EOL, slf::VERBOSITY_ERRORS);
- exit(1);
- } catch (Exception $e) {
- $this->log($e->getMessage() . PHP_EOL, self::VERBOSITY_ERRORS);
- $this->log($e->getTraceAsString() . PHP_EOL, self::VERBOSITY_ERRORS);
- exit(1);
- }
- }
-
- // }}}
- // {{{ setVerbosity()
-
- /**
- * Sets the verbosity of logging for this pinentry
- *
- * Verbosity levels are:
- *
- * - {@link Crypt_GPG_PinEntry::VERBOSITY_NONE} - no logging.
- * - {@link Crypt_GPG_PinEntry::VERBOSITY_ERRORS} - log errors only.
- * - {@link Crypt_GPG_PinEntry::VERBOSITY_ALL} - log everything, including
- * the assuan protocol.
- *
- * @param integer $verbosity the level of verbosity of this pinentry.
- *
- * @return Crypt_GPG_PinEntry the current object, for fluent interface.
- */
- public function setVerbosity($verbosity)
- {
- $this->verbosity = (integer)$verbosity;
- return $this;
- }
-
- // }}}
- // {{{ setLogFilename()
-
- /**
- * Sets the log file location
- *
- * @param string $filename the new log filename to use. If an empty string
- * is used, file-based logging is disabled.
- *
- * @return Crypt_GPG_PinEntry the current object, for fluent interface.
- */
- public function setLogFilename($filename)
- {
- if (is_resource($this->logFile)) {
- fflush($this->logFile);
- fclose($this->logFile);
- $this->logFile = null;
- }
-
- if ($filename != '') {
- if (($this->logFile = fopen($filename, 'w')) === false) {
- $this->log(
- 'Unable to open log file "' . $filename . '" '
- . 'for writing.' . PHP_EOL,
- self::VERBOSITY_ERRORS
- );
- exit(1);
- } else {
- stream_set_write_buffer($this->logFile, 0);
- }
- }
-
- return $this;
- }
-
- // }}}
- // {{{ getUIXML()
-
- /**
- * Gets the CLI user-interface definition for this pinentry
- *
- * Detects whether or not this package is PEAR-installed and appropriately
- * locates the XML UI definition.
- *
- * @return string the location of the CLI user-interface definition XML.
- */
- protected function getUIXML()
- {
- $dir = '@data-dir@' . DIRECTORY_SEPARATOR
- . '@package-name@' . DIRECTORY_SEPARATOR . 'data';
-
- // Check if we're running directly from a git checkout or if we're
- // running from a PEAR-packaged version.
- if ($dir[0] == '@') {
- $dir = dirname(__FILE__) . DIRECTORY_SEPARATOR . '..'
- . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'data';
- }
-
- return $dir . DIRECTORY_SEPARATOR . 'pinentry-cli.xml';
- }
-
- // }}}
- // {{{ getCommandLineParser()
-
- /**
- * Gets the CLI parser for this pinentry
- *
- * @return Console_CommandLine the CLI parser for this pinentry.
- */
- protected function getCommandLineParser()
- {
- return Console_CommandLine::fromXmlFile($this->getUIXML());
- }
-
- // }}}
- // {{{ log()
-
- /**
- * Logs a message at the specified verbosity level
- *
- * If a log file is used, the message is written to the log. Otherwise,
- * the message is sent to STDERR.
- *
- * @param string $data the message to log.
- * @param integer $level the verbosity level above which the message should
- * be logged.
- *
- * @return Crypt_GPG_PinEntry the current object, for fluent interface.
- */
- protected function log($data, $level)
- {
- if ($this->verbosity >= $level) {
- if (is_resource($this->logFile)) {
- fwrite($this->logFile, $data);
- fflush($this->logFile);
- } else {
- $this->parser->outputter->stderr($data);
- }
- }
-
- return $this;
- }
-
- // }}}
- // {{{ connect()
-
- /**
- * Connects this pinentry to the assuan server
- *
- * Opens I/O streams and sends initial handshake.
- *
- * @return Crypt_GPG_PinEntry the current object, for fluent interface.
- */
- protected function connect()
- {
- // Binary operations will not work on Windows with PHP < 5.2.6.
- $rb = (version_compare(PHP_VERSION, '5.2.6') < 0) ? 'r' : 'rb';
- $wb = (version_compare(PHP_VERSION, '5.2.6') < 0) ? 'w' : 'wb';
-
- $this->stdin = fopen('php://stdin', $rb);
- $this->stdout = fopen('php://stdout', $wb);
-
- if (function_exists('stream_set_read_buffer')) {
- stream_set_read_buffer($this->stdin, 0);
- }
- stream_set_write_buffer($this->stdout, 0);
-
- // initial handshake
- $this->send($this->getOK('Crypt_GPG pinentry ready and waiting'));
-
- return $this;
- }
-
- // }}}
- // {{{ parseCommand()
-
- /**
- * Parses an assuan command and performs the appropriate action
- *
- * Documentation of the assuan commands for pinentry is limited to
- * non-existent. Most of these commands were taken from the C source code
- * to gpg-agent and pinentry.
- *
- * Additional context was provided by using strace -f when calling the
- * gpg-agent.
- *
- * @param string $line the assuan command line to parse
- *
- * @return Crypt_GPG_PinEntry the current object, for fluent interface.
- */
- protected function parseCommand($line)
- {
- $this->log('<- ' . $line . PHP_EOL, self::VERBOSITY_ALL);
-
- $parts = explode(' ', $line, 2);
-
- $command = $parts[0];
-
- if (count($parts) === 2) {
- $data = $parts[1];
- } else {
- $data = null;
- }
-
- switch ($command) {
- case 'SETDESC':
- return $this->sendSetDescription($data);
-
- case 'SETPROMPT':
- case 'SETERROR':
- case 'SETOK':
- case 'SETNOTOK':
- case 'SETCANCEL':
- case 'SETQUALITYBAR':
- case 'SETQUALITYBAR_TT':
- case 'OPTION':
- return $this->sendNotImplementedOK();
-
- case 'MESSAGE':
- return $this->sendMessage();
-
- case 'CONFIRM':
- return $this->sendConfirm();
-
- case 'GETINFO':
- return $this->sendGetInfo($data);
-
- case 'GETPIN':
- return $this->sendGetPin($data);
-
- case 'RESET':
- return $this->sendReset();
-
- case 'BYE':
- return $this->sendBye();
- }
- }
-
- // }}}
- // {{{ initPinsFromENV()
-
- /**
- * Initializes the PINs to be entered by this pinentry from the environment
- * variable PINENTRY_USER_DATA
- *
- * The PINs are parsed from a JSON-encoded string.
- *
- * @return Crypt_GPG_PinEntry the current object, for fluent interface.
- */
- protected function initPinsFromENV()
- {
- if (($userData = getenv('PINENTRY_USER_DATA')) !== false) {
- $pins = json_decode($userData, true);
- if ($pins === null) {
- $this->log(
- '-- failed to parse user data' . PHP_EOL,
- self::VERBOSITY_ERRORS
- );
- } else {
- $this->pins = $pins;
- $this->log(
- '-- got user data [not showing passphrases]' . PHP_EOL,
- self::VERBOSITY_ALL
- );
- }
- }
-
- return $this;
- }
-
- // }}}
- // {{{ disconnect()
-
- /**
- * Disconnects this pinentry from the Assuan server
- *
- * @return Crypt_GPG_PinEntry the current object, for fluent interface.
- */
- protected function disconnect()
- {
- $this->log('-- disconnecting' . PHP_EOL, self::VERBOSITY_ALL);
-
- fflush($this->stdout);
- fclose($this->stdout);
- fclose($this->stdin);
-
- $this->stdin = null;
- $this->stdout = null;
-
- $this->log('-- disconnected' . PHP_EOL, self::VERBOSITY_ALL);
-
- if (is_resource($this->logFile)) {
- fflush($this->logFile);
- fclose($this->logFile);
- $this->logFile = null;
- }
-
- return $this;
- }
-
- // }}}
- // {{{ sendNotImplementedOK()
-
- /**
- * Sends an OK response for a not implemented feature
- *
- * @return Crypt_GPG_PinEntry the current object, for fluent interface.
- */
- protected function sendNotImplementedOK()
- {
- return $this->send($this->getOK());
- }
-
- // }}}
- // {{{ sendSetDescription()
-
- /**
- * Parses the currently requested key identifier and user identifier from
- * the description passed to this pinentry
- *
- * @param string $text the raw description sent from gpg-agent.
- *
- * @return Crypt_GPG_PinEntry the current object, for fluent interface.
- */
- protected function sendSetDescription($text)
- {
- $text = rawurldecode($text);
- $matches = array();
- // TODO: handle user id with quotation marks
- $exp = '/\n"(.+)"\n.*\sID ([A-Z0-9]+),\n/mu';
- if (preg_match($exp, $text, $matches) === 1) {
- $userId = $matches[1];
- $keyId = $matches[2];
-
- // only reset tried pins for new requested pin
- if ( $this->currentPin === null
- || $this->currentPin['keyId'] !== $keyId
- ) {
- $this->currentPin = array(
- 'userId' => $userId,
- 'keyId' => $keyId
- );
- $this->triedPins = array();
- $this->log(
- '-- looking for PIN for ' . $keyId . PHP_EOL,
- self::VERBOSITY_ALL
- );
- }
- }
-
- return $this->send($this->getOK());
- }
-
- // }}}
- // {{{ sendConfirm()
-
- /**
- * Tells the assuan server the PIN entry was confirmed (not cancelled)
- * by pressing the fake 'close' button
- *
- * @return Crypt_GPG_PinEntry the current object, for fluent interface.
- */
- protected function sendConfirm()
- {
- return $this->sendButtonInfo('close');
- }
-
- // }}}
- // {{{ sendMessage()
-
- /**
- * Tells the assuan server that any requested pop-up messages were confirmed
- * by pressing the fake 'close' button
- *
- * @return Crypt_GPG_PinEntry the current object, for fluent interface.
- */
- protected function sendMessage()
- {
- return $this->sendButtonInfo('close');
- }
-
- // }}}
- // {{{ sendButtonInfo()
-
- /**
- * Sends information about pressed buttons to the assuan server
- *
- * This is used to fake a user-interface for this pinentry.
- *
- * @param string $text the button status to send.
- *
- * @return Crypt_GPG_PinEntry the current object, for fluent interface.
- */
- protected function sendButtonInfo($text)
- {
- return $this->send('BUTTON_INFO ' . $text . "\n");
- }
-
- // }}}
- // {{{ sendGetPin()
-
- /**
- * Sends the PIN value for the currently requested key
- *
- * @return Crypt_GPG_PinEntry the current object, for fluent interface.
- */
- protected function sendGetPin()
- {
- $foundPin = '';
-
- if (is_array($this->currentPin)) {
- $keyIdLength = mb_strlen($this->currentPin['keyId'], '8bit');
-
- // search for the pin
- foreach ($this->pins as $pin) {
- // only check pins we haven't tried
- if (!isset($this->triedPins[$pin['keyId']])) {
-
- // get last X characters of key identifier to compare
- $keyId = mb_substr(
- $pin['keyId'],
- -$keyIdLength,
- mb_strlen($pin['keyId'], '8bit'),
- '8bit'
- );
-
- if ($keyId === $this->currentPin['keyId']) {
- $foundPin = $pin['passphrase'];
- $this->triedPins[$pin['keyId']] = $pin;
- break;
- }
- }
- }
- }
-
- return $this
- ->send($this->getData($foundPin))
- ->send($this->getOK());
- }
-
- // }}}
- // {{{ sendGetInfo()
-
- /**
- * Sends information about this pinentry
- *
- * @param string $data the information requested by the assuan server.
- * Currently only 'pid' is supported. Other requests
- * return no information.
- *
- * @return Crypt_GPG_PinEntry the current object, for fluent interface.
- */
- protected function sendGetInfo($data)
- {
- $parts = explode(' ', $data, 2);
- $command = reset($parts);
-
- switch ($command) {
- case 'pid':
- return $this->sendGetInfoPID();
- default:
- return $this->send($this->getOK());
- }
-
- return $this;
- }
- // }}}
- // {{{ sendGetInfoPID()
-
- /**
- * Sends the PID of this pinentry to the assuan server
- *
- * @return Crypt_GPG_PinEntry the current object, for fluent interface.
- */
- protected function sendGetInfoPID()
- {
- return $this
- ->send($this->getData(getmypid()))
- ->send($this->getOK());
- }
-
- // }}}
- // {{{ sendBye()
-
- /**
- * Flags this pinentry for disconnection and sends an OK response
- *
- * @return Crypt_GPG_PinEntry the current object, for fluent interface.
- */
- protected function sendBye()
- {
- $return = $this->send($this->getOK('closing connection'));
- $this->moribund = true;
- return $return;
- }
-
- // }}}
- // {{{ sendReset()
-
- /**
- * Resets this pinentry and sends an OK response
- *
- * @return Crypt_GPG_PinEntry the current object, for fluent interface.
- */
- protected function sendReset()
- {
- $this->currentPin = null;
- $this->triedPins = array();
- return $this->send($this->getOK());
- }
-
- // }}}
- // {{{ getOK()
-
- /**
- * Gets an OK response to send to the assuan server
- *
- * @param string $data an optional message to include with the OK response.
- *
- * @return string the OK response.
- */
- protected function getOK($data = null)
- {
- $return = 'OK';
-
- if ($data) {
- $return .= ' ' . $data;
- }
-
- return $return . "\n";
- }
-
- // }}}
- // {{{ getData()
-
- /**
- * Gets data ready to send to the assuan server
- *
- * Data is appropriately escaped and long lines are wrapped.
- *
- * @param string $data the data to send to the assuan server.
- *
- * @return string the properly escaped, formatted data.
- *
- * @see http://www.gnupg.org/documentation/manuals/assuan/Server-responses.html
- */
- protected function getData($data)
- {
- // Escape data. Only %, \n and \r need to be escaped but other
- // values are allowed to be escaped. See
- // http://www.gnupg.org/documentation/manuals/assuan/Server-responses.html
- $data = rawurlencode($data);
- $data = $this->getWordWrappedData($data, 'D');
- return $data;
- }
-
- // }}}
- // {{{ getComment()
-
- /**
- * Gets a comment ready to send to the assuan server
- *
- * @param string $data the comment to send to the assuan server.
- *
- * @return string the properly formatted comment.
- *
- * @see http://www.gnupg.org/documentation/manuals/assuan/Server-responses.html
- */
- protected function getComment($data)
- {
- return $this->getWordWrappedData($data, '#');
- }
-
- // }}}
- // {{{ getWordWrappedData()
-
- /**
- * Wraps strings at 1,000 bytes without splitting UTF-8 multibyte
- * characters
- *
- * Each line is prepended with the specified line prefix. Wrapped lines
- * are automatically appended with \ characters.
- *
- * Protocol strings are UTF-8 but maximum line length is 1,000 bytes.
- * <kbd>mb_strcut()</kbd> is used so we can limit line length by bytes
- * and not split characters across multiple lines.
- *
- * @param string $data the data to wrap.
- * @param string $prefix a single character to use as the line prefix. For
- * example, 'D' or '#'.
- *
- * @return string the word-wrapped, prefixed string.
- *
- * @see http://www.gnupg.org/documentation/manuals/assuan/Server-responses.html
- */
- protected function getWordWrappedData($data, $prefix)
- {
- $lines = array();
-
- do {
- if (mb_strlen($data, '8bit') > 997) {
- $line = $prefix . ' ' . mb_strcut($data, 0, 996, 'utf-8') . "\\\n";
- $lines[] = $line;
- $lineLength = mb_strlen($line, '8bit') - 1;
- $dataLength = mb_substr($data, '8bit');
- $data = mb_substr(
- $data,
- $lineLength,
- $dataLength - $lineLength,
- '8bit'
- );
- } else {
- $lines[] = $prefix . ' ' . $data . "\n";
- $data = '';
- }
- } while ($data != '');
-
- return implode('', $lines);
- }
-
- // }}}
- // {{{ send()
-
- /**
- * Sends raw data to the assuan server
- *
- * @param string $data the data to send.
- *
- * @return Crypt_GPG_PinEntry the current object, for fluent interface.
- */
- protected function send($data)
- {
- $this->log('-> ' . $data, self::VERBOSITY_ALL);
- fwrite($this->stdout, $data);
- fflush($this->stdout);
- return $this;
- }
-
- // }}}
-}
-
-// }}}
-
-?>
diff --git a/program/lib/Crypt/GPG/ProcessControl.php b/program/lib/Crypt/GPG/ProcessControl.php
deleted file mode 100644
index d6dae0325..000000000
--- a/program/lib/Crypt/GPG/ProcessControl.php
+++ /dev/null
@@ -1,150 +0,0 @@
-<?php
-
-/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
-
-/**
- * A class for monitoring and terminating processes
- *
- * PHP version 5
- *
- * LICENSE:
- *
- * This library is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of the
- * License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * @category Encryption
- * @package Crypt_GPG
- * @author Michael Gauthier <mike@silverorange.com>
- * @copyright 2013 silverorange
- * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
- * @version CVS: $Id$
- * @link http://pear.php.net/package/Crypt_GPG
- */
-
-// {{{ class Crypt_GPG_ProcessControl
-
-/**
- * A class for monitoring and terminating processes by PID
- *
- * This is used to safely terminate the gpg-agent for GnuPG 2.x. This class
- * is limited in its abilities and can only check if a PID is running and
- * send a PID SIGTERM.
- *
- * @category Encryption
- * @package Crypt_GPG
- * @author Michael Gauthier <mike@silverorange.com>
- * @copyright 2013 silverorange
- * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
- * @link http://pear.php.net/package/Crypt_GPG
- */
-class Crypt_GPG_ProcessControl
-{
- // {{{ protected properties
-
- /**
- * The PID (process identifier) being monitored
- *
- * @var integer
- */
- protected $pid;
-
- // }}}
- // {{{ __construct()
-
- /**
- * Creates a new process controller from the given PID (process identifier)
- *
- * @param integer $pid the PID (process identifier).
- */
- public function __construct($pid)
- {
- $this->pid = $pid;
- }
-
- // }}}
- // {{{ public function getPid()
-
- /**
- * Gets the PID (process identifier) being controlled
- *
- * @return integer the PID being controlled.
- */
- public function getPid()
- {
- return $this->pid;
- }
-
- // }}}
- // {{{ isRunning()
-
- /**
- * Checks if the process is running
- *
- * Uses <kbd>ps</kbd> on UNIX-like systems and <kbd>tasklist</kbd> on
- * Windows.
- *
- * @return boolean true if the process is running, false if not.
- */
- public function isRunning()
- {
- $running = false;
-
- if (PHP_OS === 'WINNT') {
- $command = 'tasklist /fo csv /nh /fi '
- . escapeshellarg('PID eq ' . $this->pid);
-
- $result = exec($command);
- $parts = explode(',', $result);
- $running = (count($parts) > 1 && trim($parts[1], '"') == $this->pid);
- } else {
- $result = exec('ps -p ' . escapeshellarg($this->pid) . ' -o pid=');
- $running = (trim($result) == $this->pid);
- }
-
- return $running;
- }
-
- // }}}
- // {{{ terminate()
-
- /**
- * Ends the process gracefully
- *
- * The signal SIGTERM is sent to the process. The gpg-agent process will
- * end gracefully upon receiving the SIGTERM signal. Upon 3 consecutive
- * SIGTERM signals the gpg-agent will forcefully shut down.
- *
- * If the <kbd>posix</kbd> extension is available, <kbd>posix_kill()</kbd>
- * is used. Otherwise <kbd>kill</kbd> is used on UNIX-like systems and
- * <kbd>taskkill</kbd> is used in Windows.
- *
- * @return void
- */
- public function terminate()
- {
- if (function_exists('posix_kill')) {
- posix_kill($this->pid, 15);
- } elseif (PHP_OS === 'WINNT') {
- exec('taskkill /PID ' . escapeshellarg($this->pid));
- } else {
- exec('kill -15 ' . escapeshellarg($this->pid));
- }
- }
-
- // }}}
-}
-
-// }}}
-
-?>
diff --git a/program/lib/Crypt/GPG/Signature.php b/program/lib/Crypt/GPG/Signature.php
deleted file mode 100644
index 1d28a1188..000000000
--- a/program/lib/Crypt/GPG/Signature.php
+++ /dev/null
@@ -1,427 +0,0 @@
-<?php
-
-/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
-
-/**
- * A class representing GPG signatures
- *
- * This file contains a data class representing a GPG signature.
- *
- * PHP version 5
- *
- * LICENSE:
- *
- * This library is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of the
- * License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * @category Encryption
- * @package Crypt_GPG
- * @author Nathan Fredrickson <nathan@silverorange.com>
- * @author Michael Gauthier <mike@silverorange.com>
- * @copyright 2005-2013 silverorange
- * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
- * @version CVS: $Id$
- * @link http://pear.php.net/package/Crypt_GPG
- */
-
-/**
- * User id class definition
- */
-require_once 'Crypt/GPG/UserId.php';
-
-// {{{ class Crypt_GPG_Signature
-
-/**
- * A class for GPG signature information
- *
- * This class is used to store the results of the Crypt_GPG::verify() method.
- *
- * @category Encryption
- * @package Crypt_GPG
- * @author Nathan Fredrickson <nathan@silverorange.com>
- * @author Michael Gauthier <mike@silverorange.com>
- * @copyright 2005-2013 silverorange
- * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
- * @link http://pear.php.net/package/Crypt_GPG
- * @see Crypt_GPG::verify()
- */
-class Crypt_GPG_Signature
-{
- // {{{ class properties
-
- /**
- * A base64-encoded string containing a unique id for this signature if
- * this signature has been verified as ok
- *
- * This id is used to prevent replay attacks and is not present for all
- * types of signatures.
- *
- * @var string
- */
- private $_id = '';
-
- /**
- * The fingerprint of the key used to create the signature
- *
- * @var string
- */
- private $_keyFingerprint = '';
-
- /**
- * The id of the key used to create the signature
- *
- * @var string
- */
- private $_keyId = '';
-
- /**
- * The creation date of this signature
- *
- * This is a Unix timestamp.
- *
- * @var integer
- */
- private $_creationDate = 0;
-
- /**
- * The expiration date of the signature
- *
- * This is a Unix timestamp. If this signature does not expire, this will
- * be zero.
- *
- * @var integer
- */
- private $_expirationDate = 0;
-
- /**
- * The user id associated with this signature
- *
- * @var Crypt_GPG_UserId
- */
- private $_userId = null;
-
- /**
- * Whether or not this signature is valid
- *
- * @var boolean
- */
- private $_isValid = false;
-
- // }}}
- // {{{ __construct()
-
- /**
- * Creates a new signature
- *
- * Signatures can be initialized from an array of named values. Available
- * names are:
- *
- * - <kbd>string id</kbd> - the unique id of this signature.
- * - <kbd>string fingerprint</kbd> - the fingerprint of the key used to
- * create the signature. The fingerprint
- * should not contain formatting
- * characters.
- * - <kbd>string keyId</kbd> - the id of the key used to create the
- * the signature.
- * - <kbd>integer creation</kbd> - the date the signature was created.
- * This is a UNIX timestamp.
- * - <kbd>integer expiration</kbd> - the date the signature expired. This
- * is a UNIX timestamp. If the signature
- * does not expire, use 0.
- * - <kbd>boolean valid</kbd> - whether or not the signature is valid.
- * - <kbd>string userId</kbd> - the user id associated with the
- * signature. This may also be a
- * {@link Crypt_GPG_UserId} object.
- *
- * @param Crypt_GPG_Signature|array $signature optional. Either an existing
- * signature object, which is copied; or an array of initial values.
- */
- public function __construct($signature = null)
- {
- // copy from object
- if ($signature instanceof Crypt_GPG_Signature) {
- $this->_id = $signature->_id;
- $this->_keyFingerprint = $signature->_keyFingerprint;
- $this->_keyId = $signature->_keyId;
- $this->_creationDate = $signature->_creationDate;
- $this->_expirationDate = $signature->_expirationDate;
- $this->_isValid = $signature->_isValid;
-
- if ($signature->_userId instanceof Crypt_GPG_UserId) {
- $this->_userId = clone $signature->_userId;
- }
- }
-
- // initialize from array
- if (is_array($signature)) {
- if (array_key_exists('id', $signature)) {
- $this->setId($signature['id']);
- }
-
- if (array_key_exists('fingerprint', $signature)) {
- $this->setKeyFingerprint($signature['fingerprint']);
- }
-
- if (array_key_exists('keyId', $signature)) {
- $this->setKeyId($signature['keyId']);
- }
-
- if (array_key_exists('creation', $signature)) {
- $this->setCreationDate($signature['creation']);
- }
-
- if (array_key_exists('expiration', $signature)) {
- $this->setExpirationDate($signature['expiration']);
- }
-
- if (array_key_exists('valid', $signature)) {
- $this->setValid($signature['valid']);
- }
-
- if (array_key_exists('userId', $signature)) {
- $userId = new Crypt_GPG_UserId($signature['userId']);
- $this->setUserId($userId);
- }
- }
- }
-
- // }}}
- // {{{ getId()
-
- /**
- * Gets the id of this signature
- *
- * @return string a base64-encoded string containing a unique id for this
- * signature. This id is used to prevent replay attacks and
- * is not present for all types of signatures.
- */
- public function getId()
- {
- return $this->_id;
- }
-
- // }}}
- // {{{ getKeyFingerprint()
-
- /**
- * Gets the fingerprint of the key used to create this signature
- *
- * @return string the fingerprint of the key used to create this signature.
- */
- public function getKeyFingerprint()
- {
- return $this->_keyFingerprint;
- }
-
- // }}}
- // {{{ getKeyId()
-
- /**
- * Gets the id of the key used to create this signature
- *
- * Whereas the fingerprint of the signing key may not always be available
- * (for example if the signature is bad), the id should always be
- * available.
- *
- * @return string the id of the key used to create this signature.
- */
- public function getKeyId()
- {
- return $this->_keyId;
- }
-
- // }}}
- // {{{ getCreationDate()
-
- /**
- * Gets the creation date of this signature
- *
- * @return integer the creation date of this signature. This is a Unix
- * timestamp.
- */
- public function getCreationDate()
- {
- return $this->_creationDate;
- }
-
- // }}}
- // {{{ getExpirationDate()
-
- /**
- * Gets the expiration date of the signature
- *
- * @return integer the expiration date of this signature. This is a Unix
- * timestamp. If this signature does not expire, this will
- * be zero.
- */
- public function getExpirationDate()
- {
- return $this->_expirationDate;
- }
-
- // }}}
- // {{{ getUserId()
-
- /**
- * Gets the user id associated with this signature
- *
- * @return Crypt_GPG_UserId the user id associated with this signature.
- */
- public function getUserId()
- {
- return $this->_userId;
- }
-
- // }}}
- // {{{ isValid()
-
- /**
- * Gets whether or no this signature is valid
- *
- * @return boolean true if this signature is valid and false if it is not.
- */
- public function isValid()
- {
- return $this->_isValid;
- }
-
- // }}}
- // {{{ setId()
-
- /**
- * Sets the id of this signature
- *
- * @param string $id a base64-encoded string containing a unique id for
- * this signature.
- *
- * @return Crypt_GPG_Signature the current object, for fluent interface.
- *
- * @see Crypt_GPG_Signature::getId()
- */
- public function setId($id)
- {
- $this->_id = strval($id);
- return $this;
- }
-
- // }}}
- // {{{ setKeyFingerprint()
-
- /**
- * Sets the key fingerprint of this signature
- *
- * @param string $fingerprint the key fingerprint of this signature. This
- * is the fingerprint of the primary key used to
- * create this signature.
- *
- * @return Crypt_GPG_Signature the current object, for fluent interface.
- */
- public function setKeyFingerprint($fingerprint)
- {
- $this->_keyFingerprint = strval($fingerprint);
- return $this;
- }
-
- // }}}
- // {{{ setKeyId()
-
- /**
- * Sets the key id of this signature
- *
- * @param string $id the key id of this signature. This is the id of the
- * primary key used to create this signature.
- *
- * @return Crypt_GPG_Signature the current object, for fluent interface.
- */
- public function setKeyId($id)
- {
- $this->_keyId = strval($id);
- return $this;
- }
-
- // }}}
- // {{{ setCreationDate()
-
- /**
- * Sets the creation date of this signature
- *
- * @param integer $creationDate the creation date of this signature. This
- * is a Unix timestamp.
- *
- * @return Crypt_GPG_Signature the current object, for fluent interface.
- */
- public function setCreationDate($creationDate)
- {
- $this->_creationDate = intval($creationDate);
- return $this;
- }
-
- // }}}
- // {{{ setExpirationDate()
-
- /**
- * Sets the expiration date of this signature
- *
- * @param integer $expirationDate the expiration date of this signature.
- * This is a Unix timestamp. Specify zero if
- * this signature does not expire.
- *
- * @return Crypt_GPG_Signature the current object, for fluent interface.
- */
- public function setExpirationDate($expirationDate)
- {
- $this->_expirationDate = intval($expirationDate);
- return $this;
- }
-
- // }}}
- // {{{ setUserId()
-
- /**
- * Sets the user id associated with this signature
- *
- * @param Crypt_GPG_UserId $userId the user id associated with this
- * signature.
- *
- * @return Crypt_GPG_Signature the current object, for fluent interface.
- */
- public function setUserId(Crypt_GPG_UserId $userId)
- {
- $this->_userId = $userId;
- return $this;
- }
-
- // }}}
- // {{{ setValid()
-
- /**
- * Sets whether or not this signature is valid
- *
- * @param boolean $isValid true if this signature is valid and false if it
- * is not.
- *
- * @return Crypt_GPG_Signature the current object, for fluent interface.
- */
- public function setValid($isValid)
- {
- $this->_isValid = ($isValid) ? true : false;
- return $this;
- }
-
- // }}}
-}
-
-// }}}
-
-?>
diff --git a/program/lib/Crypt/GPG/SubKey.php b/program/lib/Crypt/GPG/SubKey.php
deleted file mode 100644
index 59245cac1..000000000
--- a/program/lib/Crypt/GPG/SubKey.php
+++ /dev/null
@@ -1,672 +0,0 @@
-<?php
-
-/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
-
-/**
- * Contains a class representing GPG sub-keys and constants for GPG algorithms
- *
- * PHP version 5
- *
- * LICENSE:
- *
- * This library is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of the
- * License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * @category Encryption
- * @package Crypt_GPG
- * @author Michael Gauthier <mike@silverorange.com>
- * @author Nathan Fredrickson <nathan@silverorange.com>
- * @copyright 2005-2010 silverorange
- * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
- * @version CVS: $Id$
- * @link http://pear.php.net/package/Crypt_GPG
- */
-
-// {{{ class Crypt_GPG_SubKey
-
-/**
- * A class for GPG sub-key information
- *
- * This class is used to store the results of the {@link Crypt_GPG::getKeys()}
- * method. Sub-key objects are members of a {@link Crypt_GPG_Key} object.
- *
- * @category Encryption
- * @package Crypt_GPG
- * @author Michael Gauthier <mike@silverorange.com>
- * @author Nathan Fredrickson <nathan@silverorange.com>
- * @copyright 2005-2010 silverorange
- * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
- * @link http://pear.php.net/package/Crypt_GPG
- * @see Crypt_GPG::getKeys()
- * @see Crypt_GPG_Key::getSubKeys()
- */
-class Crypt_GPG_SubKey
-{
- // {{{ algorithm class constants
-
- /**
- * RSA encryption algorithm.
- */
- const ALGORITHM_RSA = 1;
-
- /**
- * Elgamal encryption algorithm (encryption only).
- */
- const ALGORITHM_ELGAMAL_ENC = 16;
-
- /**
- * DSA encryption algorithm (sometimes called DH, sign only).
- */
- const ALGORITHM_DSA = 17;
-
- /**
- * Elgamal encryption algorithm (signage and encryption - should not be
- * used).
- */
- const ALGORITHM_ELGAMAL_ENC_SGN = 20;
-
- // }}}
- // {{{ usage class constants
-
- /**
- * Key can be used to encrypt
- */
- const USAGE_ENCRYPT = 1;
-
- /**
- * Key can be used to sign
- */
- const USAGE_SIGN = 2;
-
- /**
- * Key can be used to certify other keys
- */
- const USAGE_CERTIFY = 4;
-
- /**
- * Key can be used for authentication
- */
- const USAGE_AUTHENTICATION = 8;
-
- // }}}
- // {{{ class properties
-
- /**
- * The id of this sub-key
- *
- * @var string
- */
- private $_id = '';
-
- /**
- * The algorithm used to create this sub-key
- *
- * The value is one of the Crypt_GPG_SubKey::ALGORITHM_* constants.
- *
- * @var integer
- */
- private $_algorithm = 0;
-
- /**
- * The fingerprint of this sub-key
- *
- * @var string
- */
- private $_fingerprint = '';
-
- /**
- * Length of this sub-key in bits
- *
- * @var integer
- */
- private $_length = 0;
-
- /**
- * Date this sub-key was created
- *
- * This is a Unix timestamp.
- *
- * @var integer
- */
- private $_creationDate = 0;
-
- /**
- * Date this sub-key expires
- *
- * This is a Unix timestamp. If this sub-key does not expire, this will be
- * zero.
- *
- * @var integer
- */
- private $_expirationDate = 0;
-
- /**
- * Whether or not this sub-key can sign data
- *
- * @var boolean
- */
- private $_canSign = false;
-
- /**
- * Whether or not this sub-key can encrypt data
- *
- * @var boolean
- */
- private $_canEncrypt = false;
-
- /**
- * Whether or not the private key for this sub-key exists in the keyring
- *
- * @var boolean
- */
- private $_hasPrivate = false;
-
- /**
- * Whether or not this sub-key is revoked
- *
- * @var boolean
- */
- private $_isRevoked = false;
-
- // }}}
- // {{{ __construct()
-
- /**
- * Creates a new sub-key object
- *
- * Sub-keys can be initialized from an array of named values. Available
- * names are:
- *
- * - <kbd>string id</kbd> - the key id of the sub-key.
- * - <kbd>integer algorithm</kbd> - the encryption algorithm of the
- * sub-key.
- * - <kbd>string fingerprint</kbd> - the fingerprint of the sub-key. The
- * fingerprint should not contain
- * formatting characters.
- * - <kbd>integer length</kbd> - the length of the sub-key in bits.
- * - <kbd>integer creation</kbd> - the date the sub-key was created.
- * This is a UNIX timestamp.
- * - <kbd>integer expiration</kbd> - the date the sub-key expires. This
- * is a UNIX timestamp. If the sub-key
- * does not expire, use 0.
- * - <kbd>boolean canSign</kbd> - whether or not the sub-key can be
- * used to sign data.
- * - <kbd>boolean canEncrypt</kbd> - whether or not the sub-key can be
- * used to encrypt data.
- * - <kbd>boolean hasPrivate</kbd> - whether or not the private key for
- * the sub-key exists in the keyring.
- * - <kbd>boolean isRevoked</kbd> - whether or not this sub-key is
- * revoked.
- *
- * @param Crypt_GPG_SubKey|string|array $key optional. Either an existing
- * sub-key object, which is copied; a sub-key string, which is
- * parsed; or an array of initial values.
- */
- public function __construct($key = null)
- {
- // parse from string
- if (is_string($key)) {
- $key = self::parse($key);
- }
-
- // copy from object
- if ($key instanceof Crypt_GPG_SubKey) {
- $this->_id = $key->_id;
- $this->_algorithm = $key->_algorithm;
- $this->_fingerprint = $key->_fingerprint;
- $this->_length = $key->_length;
- $this->_creationDate = $key->_creationDate;
- $this->_expirationDate = $key->_expirationDate;
- $this->_canSign = $key->_canSign;
- $this->_canEncrypt = $key->_canEncrypt;
- $this->_hasPrivate = $key->_hasPrivate;
- $this->_isRevoked = $key->_isRevoked;
- }
-
- // initialize from array
- if (is_array($key)) {
- if (array_key_exists('id', $key)) {
- $this->setId($key['id']);
- }
-
- if (array_key_exists('algorithm', $key)) {
- $this->setAlgorithm($key['algorithm']);
- }
-
- if (array_key_exists('fingerprint', $key)) {
- $this->setFingerprint($key['fingerprint']);
- }
-
- if (array_key_exists('length', $key)) {
- $this->setLength($key['length']);
- }
-
- if (array_key_exists('creation', $key)) {
- $this->setCreationDate($key['creation']);
- }
-
- if (array_key_exists('expiration', $key)) {
- $this->setExpirationDate($key['expiration']);
- }
-
- if (array_key_exists('canSign', $key)) {
- $this->setCanSign($key['canSign']);
- }
-
- if (array_key_exists('canEncrypt', $key)) {
- $this->setCanEncrypt($key['canEncrypt']);
- }
-
- if (array_key_exists('hasPrivate', $key)) {
- $this->setHasPrivate($key['hasPrivate']);
- }
-
- if (array_key_exists('isRevoked', $key)) {
- $this->setRevoked($key['isRevoked']);
- }
- }
- }
-
- // }}}
- // {{{ getId()
-
- /**
- * Gets the id of this sub-key
- *
- * @return string the id of this sub-key.
- */
- public function getId()
- {
- return $this->_id;
- }
-
- // }}}
- // {{{ getAlgorithm()
-
- /**
- * Gets the algorithm used by this sub-key
- *
- * The algorithm should be one of the Crypt_GPG_SubKey::ALGORITHM_*
- * constants.
- *
- * @return integer the algorithm used by this sub-key.
- */
- public function getAlgorithm()
- {
- return $this->_algorithm;
- }
-
- // }}}
- // {{{ getCreationDate()
-
- /**
- * Gets the creation date of this sub-key
- *
- * This is a Unix timestamp.
- *
- * @return integer the creation date of this sub-key.
- */
- public function getCreationDate()
- {
- return $this->_creationDate;
- }
-
- // }}}
- // {{{ getExpirationDate()
-
- /**
- * Gets the date this sub-key expires
- *
- * This is a Unix timestamp. If this sub-key does not expire, this will be
- * zero.
- *
- * @return integer the date this sub-key expires.
- */
- public function getExpirationDate()
- {
- return $this->_expirationDate;
- }
-
- // }}}
- // {{{ getFingerprint()
-
- /**
- * Gets the fingerprint of this sub-key
- *
- * @return string the fingerprint of this sub-key.
- */
- public function getFingerprint()
- {
- return $this->_fingerprint;
- }
-
- // }}}
- // {{{ getLength()
-
- /**
- * Gets the length of this sub-key in bits
- *
- * @return integer the length of this sub-key in bits.
- */
- public function getLength()
- {
- return $this->_length;
- }
-
- // }}}
- // {{{ canSign()
-
- /**
- * Gets whether or not this sub-key can sign data
- *
- * @return boolean true if this sub-key can sign data and false if this
- * sub-key can not sign data.
- */
- public function canSign()
- {
- return $this->_canSign;
- }
-
- // }}}
- // {{{ canEncrypt()
-
- /**
- * Gets whether or not this sub-key can encrypt data
- *
- * @return boolean true if this sub-key can encrypt data and false if this
- * sub-key can not encrypt data.
- */
- public function canEncrypt()
- {
- return $this->_canEncrypt;
- }
-
- // }}}
- // {{{ hasPrivate()
-
- /**
- * Gets whether or not the private key for this sub-key exists in the
- * keyring
- *
- * @return boolean true the private key for this sub-key exists in the
- * keyring and false if it does not.
- */
- public function hasPrivate()
- {
- return $this->_hasPrivate;
- }
-
- // }}}
- // {{{ isRevoked()
-
- /**
- * Gets whether or not this sub-key is revoked
- *
- * @return boolean true if this sub-key is revoked and false if it is not.
- */
- public function isRevoked()
- {
- return $this->_isRevoked;
- }
-
- // }}}
- // {{{ setCreationDate()
-
- /**
- * Sets the creation date of this sub-key
- *
- * The creation date is a Unix timestamp.
- *
- * @param integer $creationDate the creation date of this sub-key.
- *
- * @return Crypt_GPG_SubKey the current object, for fluent interface.
- */
- public function setCreationDate($creationDate)
- {
- $this->_creationDate = intval($creationDate);
- return $this;
- }
-
- // }}}
- // {{{ setExpirationDate()
-
- /**
- * Sets the expiration date of this sub-key
- *
- * The expiration date is a Unix timestamp. Specify zero if this sub-key
- * does not expire.
- *
- * @param integer $expirationDate the expiration date of this sub-key.
- *
- * @return Crypt_GPG_SubKey the current object, for fluent interface.
- */
- public function setExpirationDate($expirationDate)
- {
- $this->_expirationDate = intval($expirationDate);
- return $this;
- }
-
- // }}}
- // {{{ setId()
-
- /**
- * Sets the id of this sub-key
- *
- * @param string $id the id of this sub-key.
- *
- * @return Crypt_GPG_SubKey the current object, for fluent interface.
- */
- public function setId($id)
- {
- $this->_id = strval($id);
- return $this;
- }
-
- // }}}
- // {{{ setAlgorithm()
-
- /**
- * Sets the algorithm used by this sub-key
- *
- * @param integer $algorithm the algorithm used by this sub-key.
- *
- * @return Crypt_GPG_SubKey the current object, for fluent interface.
- */
- public function setAlgorithm($algorithm)
- {
- $this->_algorithm = intval($algorithm);
- return $this;
- }
-
- // }}}
- // {{{ setFingerprint()
-
- /**
- * Sets the fingerprint of this sub-key
- *
- * @param string $fingerprint the fingerprint of this sub-key.
- *
- * @return Crypt_GPG_SubKey the current object, for fluent interface.
- */
- public function setFingerprint($fingerprint)
- {
- $this->_fingerprint = strval($fingerprint);
- return $this;
- }
-
- // }}}
- // {{{ setLength()
-
- /**
- * Sets the length of this sub-key in bits
- *
- * @param integer $length the length of this sub-key in bits.
- *
- * @return Crypt_GPG_SubKey the current object, for fluent interface.
- */
- public function setLength($length)
- {
- $this->_length = intval($length);
- return $this;
- }
-
- // }}}
- // {{{ setCanSign()
-
- /**
- * Sets whether of not this sub-key can sign data
- *
- * @param boolean $canSign true if this sub-key can sign data and false if
- * it can not.
- *
- * @return Crypt_GPG_SubKey the current object, for fluent interface.
- */
- public function setCanSign($canSign)
- {
- $this->_canSign = ($canSign) ? true : false;
- return $this;
- }
-
- // }}}
- // {{{ setCanEncrypt()
-
- /**
- * Sets whether of not this sub-key can encrypt data
- *
- * @param boolean $canEncrypt true if this sub-key can encrypt data and
- * false if it can not.
- *
- * @return Crypt_GPG_SubKey the current object, for fluent interface.
- */
- public function setCanEncrypt($canEncrypt)
- {
- $this->_canEncrypt = ($canEncrypt) ? true : false;
- return $this;
- }
-
- // }}}
- // {{{ setHasPrivate()
-
- /**
- * Sets whether of not the private key for this sub-key exists in the
- * keyring
- *
- * @param boolean $hasPrivate true if the private key for this sub-key
- * exists in the keyring and false if it does
- * not.
- *
- * @return Crypt_GPG_SubKey the current object, for fluent interface.
- */
- public function setHasPrivate($hasPrivate)
- {
- $this->_hasPrivate = ($hasPrivate) ? true : false;
- return $this;
- }
-
- // }}}
- // {{{ setRevoked()
-
- /**
- * Sets whether or not this sub-key is revoked
- *
- * @param boolean $isRevoked whether or not this sub-key is revoked.
- *
- * @return Crypt_GPG_SubKey the current object, for fluent interface.
- */
- public function setRevoked($isRevoked)
- {
- $this->_isRevoked = ($isRevoked) ? true : false;
- return $this;
- }
-
- // }}}
- // {{{ parse()
-
- /**
- * Parses a sub-key object from a sub-key string
- *
- * See <b>doc/DETAILS</b> in the
- * {@link http://www.gnupg.org/download/ GPG distribution} for information
- * on how the sub-key string is parsed.
- *
- * @param string $string the string containing the sub-key.
- *
- * @return Crypt_GPG_SubKey the sub-key object parsed from the string.
- */
- public static function parse($string)
- {
- $tokens = explode(':', $string);
-
- $subKey = new Crypt_GPG_SubKey();
-
- $subKey->setId($tokens[4]);
- $subKey->setLength($tokens[2]);
- $subKey->setAlgorithm($tokens[3]);
- $subKey->setCreationDate(self::_parseDate($tokens[5]));
- $subKey->setExpirationDate(self::_parseDate($tokens[6]));
-
- if ($tokens[1] == 'r') {
- $subKey->setRevoked(true);
- }
-
- if (strpos($tokens[11], 's') !== false) {
- $subKey->setCanSign(true);
- }
-
- if (strpos($tokens[11], 'e') !== false) {
- $subKey->setCanEncrypt(true);
- }
-
- return $subKey;
- }
-
- // }}}
- // {{{ _parseDate()
-
- /**
- * Parses a date string as provided by GPG into a UNIX timestamp
- *
- * @param string $string the date string.
- *
- * @return integer the UNIX timestamp corresponding to the provided date
- * string.
- */
- private static function _parseDate($string)
- {
- if ($string == '') {
- $timestamp = 0;
- } else {
- // all times are in UTC according to GPG documentation
- $timeZone = new DateTimeZone('UTC');
-
- if (strpos($string, 'T') === false) {
- // interpret as UNIX timestamp
- $string = '@' . $string;
- }
-
- $date = new DateTime($string, $timeZone);
-
- // convert to UNIX timestamp
- $timestamp = intval($date->format('U'));
- }
-
- return $timestamp;
- }
-
- // }}}
-}
-
-// }}}
-
-?>
diff --git a/program/lib/Crypt/GPG/UserId.php b/program/lib/Crypt/GPG/UserId.php
deleted file mode 100644
index a367bceb3..000000000
--- a/program/lib/Crypt/GPG/UserId.php
+++ /dev/null
@@ -1,373 +0,0 @@
-<?php
-
-/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
-
-/**
- * Contains a data class representing a GPG user id
- *
- * PHP version 5
- *
- * LICENSE:
- *
- * This library is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of the
- * License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * @category Encryption
- * @package Crypt_GPG
- * @author Michael Gauthier <mike@silverorange.com>
- * @copyright 2008-2010 silverorange
- * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
- * @version CVS: $Id$
- * @link http://pear.php.net/package/Crypt_GPG
- */
-
-// {{{ class Crypt_GPG_UserId
-
-/**
- * A class for GPG user id information
- *
- * This class is used to store the results of the {@link Crypt_GPG::getKeys()}
- * method. User id objects are members of a {@link Crypt_GPG_Key} object.
- *
- * @category Encryption
- * @package Crypt_GPG
- * @author Michael Gauthier <mike@silverorange.com>
- * @copyright 2008-2010 silverorange
- * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
- * @link http://pear.php.net/package/Crypt_GPG
- * @see Crypt_GPG::getKeys()
- * @see Crypt_GPG_Key::getUserIds()
- */
-class Crypt_GPG_UserId
-{
- // {{{ class properties
-
- /**
- * The name field of this user id
- *
- * @var string
- */
- private $_name = '';
-
- /**
- * The comment field of this user id
- *
- * @var string
- */
- private $_comment = '';
-
- /**
- * The email field of this user id
- *
- * @var string
- */
- private $_email = '';
-
- /**
- * Whether or not this user id is revoked
- *
- * @var boolean
- */
- private $_isRevoked = false;
-
- /**
- * Whether or not this user id is valid
- *
- * @var boolean
- */
- private $_isValid = true;
-
- // }}}
- // {{{ __construct()
-
- /**
- * Creates a new user id
- *
- * User ids can be initialized from an array of named values. Available
- * names are:
- *
- * - <kbd>string name</kbd> - the name field of the user id.
- * - <kbd>string comment</kbd> - the comment field of the user id.
- * - <kbd>string email</kbd> - the email field of the user id.
- * - <kbd>boolean valid</kbd> - whether or not the user id is valid.
- * - <kbd>boolean revoked</kbd> - whether or not the user id is revoked.
- *
- * @param Crypt_GPG_UserId|string|array $userId optional. Either an
- * existing user id object, which is copied; a user id string, which
- * is parsed; or an array of initial values.
- */
- public function __construct($userId = null)
- {
- // parse from string
- if (is_string($userId)) {
- $userId = self::parse($userId);
- }
-
- // copy from object
- if ($userId instanceof Crypt_GPG_UserId) {
- $this->_name = $userId->_name;
- $this->_comment = $userId->_comment;
- $this->_email = $userId->_email;
- $this->_isRevoked = $userId->_isRevoked;
- $this->_isValid = $userId->_isValid;
- }
-
- // initialize from array
- if (is_array($userId)) {
- if (array_key_exists('name', $userId)) {
- $this->setName($userId['name']);
- }
-
- if (array_key_exists('comment', $userId)) {
- $this->setComment($userId['comment']);
- }
-
- if (array_key_exists('email', $userId)) {
- $this->setEmail($userId['email']);
- }
-
- if (array_key_exists('revoked', $userId)) {
- $this->setRevoked($userId['revoked']);
- }
-
- if (array_key_exists('valid', $userId)) {
- $this->setValid($userId['valid']);
- }
- }
- }
-
- // }}}
- // {{{ getName()
-
- /**
- * Gets the name field of this user id
- *
- * @return string the name field of this user id.
- */
- public function getName()
- {
- return $this->_name;
- }
-
- // }}}
- // {{{ getComment()
-
- /**
- * Gets the comments field of this user id
- *
- * @return string the comments field of this user id.
- */
- public function getComment()
- {
- return $this->_comment;
- }
-
- // }}}
- // {{{ getEmail()
-
- /**
- * Gets the email field of this user id
- *
- * @return string the email field of this user id.
- */
- public function getEmail()
- {
- return $this->_email;
- }
-
- // }}}
- // {{{ isRevoked()
-
- /**
- * Gets whether or not this user id is revoked
- *
- * @return boolean true if this user id is revoked and false if it is not.
- */
- public function isRevoked()
- {
- return $this->_isRevoked;
- }
-
- // }}}
- // {{{ isValid()
-
- /**
- * Gets whether or not this user id is valid
- *
- * @return boolean true if this user id is valid and false if it is not.
- */
- public function isValid()
- {
- return $this->_isValid;
- }
-
- // }}}
- // {{{ __toString()
-
- /**
- * Gets a string representation of this user id
- *
- * The string is formatted as:
- * <b><kbd>name (comment) <email-address></kbd></b>.
- *
- * @return string a string representation of this user id.
- */
- public function __toString()
- {
- $components = array();
-
- if (strlen($this->_name) > 0) {
- $components[] = $this->_name;
- }
-
- if (strlen($this->_comment) > 0) {
- $components[] = '(' . $this->_comment . ')';
- }
-
- if (strlen($this->_email) > 0) {
- $components[] = '<' . $this->_email. '>';
- }
-
- return implode(' ', $components);
- }
-
- // }}}
- // {{{ setName()
-
- /**
- * Sets the name field of this user id
- *
- * @param string $name the name field of this user id.
- *
- * @return Crypt_GPG_UserId the current object, for fluent interface.
- */
- public function setName($name)
- {
- $this->_name = strval($name);
- return $this;
- }
-
- // }}}
- // {{{ setComment()
-
- /**
- * Sets the comment field of this user id
- *
- * @param string $comment the comment field of this user id.
- *
- * @return Crypt_GPG_UserId the current object, for fluent interface.
- */
- public function setComment($comment)
- {
- $this->_comment = strval($comment);
- return $this;
- }
-
- // }}}
- // {{{ setEmail()
-
- /**
- * Sets the email field of this user id
- *
- * @param string $email the email field of this user id.
- *
- * @return Crypt_GPG_UserId the current object, for fluent interface.
- */
- public function setEmail($email)
- {
- $this->_email = strval($email);
- return $this;
- }
-
- // }}}
- // {{{ setRevoked()
-
- /**
- * Sets whether or not this user id is revoked
- *
- * @param boolean $isRevoked whether or not this user id is revoked.
- *
- * @return Crypt_GPG_UserId the current object, for fluent interface.
- */
- public function setRevoked($isRevoked)
- {
- $this->_isRevoked = ($isRevoked) ? true : false;
- return $this;
- }
-
- // }}}
- // {{{ setValid()
-
- /**
- * Sets whether or not this user id is valid
- *
- * @param boolean $isValid whether or not this user id is valid.
- *
- * @return Crypt_GPG_UserId the current object, for fluent interface.
- */
- public function setValid($isValid)
- {
- $this->_isValid = ($isValid) ? true : false;
- return $this;
- }
-
- // }}}
- // {{{ parse()
-
- /**
- * Parses a user id object from a user id string
- *
- * A user id string is of the form:
- * <b><kbd>name (comment) <email-address></kbd></b> with the <i>comment</i>
- * and <i>email-address</i> fields being optional.
- *
- * @param string $string the user id string to parse.
- *
- * @return Crypt_GPG_UserId the user id object parsed from the string.
- */
- public static function parse($string)
- {
- $userId = new Crypt_GPG_UserId();
- $email = '';
- $comment = '';
-
- // get email address from end of string if it exists
- $matches = array();
- if (preg_match('/^(.+?) <([^>]+)>$/', $string, $matches) === 1) {
- $string = $matches[1];
- $email = $matches[2];
- }
-
- // get comment from end of string if it exists
- $matches = array();
- if (preg_match('/^(.+?) \(([^\)]+)\)$/', $string, $matches) === 1) {
- $string = $matches[1];
- $comment = $matches[2];
- }
-
- $name = $string;
-
- $userId->setName($name);
- $userId->setComment($comment);
- $userId->setEmail($email);
-
- return $userId;
- }
-
- // }}}
-}
-
-// }}}
-
-?>
diff --git a/program/lib/Crypt/GPG/VerifyStatusHandler.php b/program/lib/Crypt/GPG/VerifyStatusHandler.php
deleted file mode 100644
index 8904be149..000000000
--- a/program/lib/Crypt/GPG/VerifyStatusHandler.php
+++ /dev/null
@@ -1,216 +0,0 @@
-<?php
-
-/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
-
-/**
- * Crypt_GPG is a package to use GPG from PHP
- *
- * This file contains an object that handles GPG's status output for the verify
- * operation.
- *
- * PHP version 5
- *
- * LICENSE:
- *
- * This library is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of the
- * License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * @category Encryption
- * @package Crypt_GPG
- * @author Michael Gauthier <mike@silverorange.com>
- * @copyright 2008 silverorange
- * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
- * @version CVS: $Id$
- * @link http://pear.php.net/package/Crypt_GPG
- * @link http://www.gnupg.org/
- */
-
-/**
- * Signature object class definition
- */
-require_once 'Crypt/GPG/Signature.php';
-
-/**
- * Status line handler for the verify operation
- *
- * This class is used internally by Crypt_GPG and does not need be used
- * directly. See the {@link Crypt_GPG} class for end-user API.
- *
- * This class is responsible for building signature objects that are returned
- * by the {@link Crypt_GPG::verify()} method. See <b>doc/DETAILS</b> in the
- * {@link http://www.gnupg.org/download/ GPG distribution} for detailed
- * information on GPG's status output for the verify operation.
- *
- * @category Encryption
- * @package Crypt_GPG
- * @author Michael Gauthier <mike@silverorange.com>
- * @copyright 2008 silverorange
- * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
- * @link http://pear.php.net/package/Crypt_GPG
- * @link http://www.gnupg.org/
- */
-class Crypt_GPG_VerifyStatusHandler
-{
- // {{{ protected properties
-
- /**
- * The current signature id
- *
- * Ths signature id is emitted by GPG before the new signature line so we
- * must remember it temporarily.
- *
- * @var string
- */
- protected $signatureId = '';
-
- /**
- * List of parsed {@link Crypt_GPG_Signature} objects
- *
- * @var array
- */
- protected $signatures = array();
-
- /**
- * Array index of the current signature
- *
- * @var integer
- */
- protected $index = -1;
-
- // }}}
- // {{{ handle()
-
- /**
- * Handles a status line
- *
- * @param string $line the status line to handle.
- *
- * @return void
- */
- public function handle($line)
- {
- $tokens = explode(' ', $line);
- switch ($tokens[0]) {
- case 'GOODSIG':
- case 'EXPSIG':
- case 'EXPKEYSIG':
- case 'REVKEYSIG':
- case 'BADSIG':
- $signature = new Crypt_GPG_Signature();
-
- // if there was a signature id, set it on the new signature
- if ($this->signatureId != '') {
- $signature->setId($this->signatureId);
- $this->signatureId = '';
- }
-
- // Detect whether fingerprint or key id was returned and set
- // signature values appropriately. Key ids are strings of either
- // 16 or 8 hexadecimal characters. Fingerprints are strings of 40
- // hexadecimal characters. The key id is the last 16 characters of
- // the key fingerprint.
- if (strlen($tokens[1]) > 16) {
- $signature->setKeyFingerprint($tokens[1]);
- $signature->setKeyId(substr($tokens[1], -16));
- } else {
- $signature->setKeyId($tokens[1]);
- }
-
- // get user id string
- $string = implode(' ', array_splice($tokens, 2));
- $string = rawurldecode($string);
-
- $signature->setUserId(Crypt_GPG_UserId::parse($string));
-
- $this->index++;
- $this->signatures[$this->index] = $signature;
- break;
-
- case 'ERRSIG':
- $signature = new Crypt_GPG_Signature();
-
- // if there was a signature id, set it on the new signature
- if ($this->signatureId != '') {
- $signature->setId($this->signatureId);
- $this->signatureId = '';
- }
-
- // Detect whether fingerprint or key id was returned and set
- // signature values appropriately. Key ids are strings of either
- // 16 or 8 hexadecimal characters. Fingerprints are strings of 40
- // hexadecimal characters. The key id is the last 16 characters of
- // the key fingerprint.
- if (strlen($tokens[1]) > 16) {
- $signature->setKeyFingerprint($tokens[1]);
- $signature->setKeyId(substr($tokens[1], -16));
- } else {
- $signature->setKeyId($tokens[1]);
- }
-
- $this->index++;
- $this->signatures[$this->index] = $signature;
-
- break;
-
- case 'VALIDSIG':
- if (!array_key_exists($this->index, $this->signatures)) {
- break;
- }
-
- $signature = $this->signatures[$this->index];
-
- $signature->setValid(true);
- $signature->setKeyFingerprint($tokens[1]);
-
- if (strpos($tokens[3], 'T') === false) {
- $signature->setCreationDate($tokens[3]);
- } else {
- $signature->setCreationDate(strtotime($tokens[3]));
- }
-
- if (array_key_exists(4, $tokens)) {
- if (strpos($tokens[4], 'T') === false) {
- $signature->setExpirationDate($tokens[4]);
- } else {
- $signature->setExpirationDate(strtotime($tokens[4]));
- }
- }
-
- break;
-
- case 'SIG_ID':
- // note: signature id comes before new signature line and may not
- // exist for some signature types
- $this->signatureId = $tokens[1];
- break;
- }
- }
-
- // }}}
- // {{{ getSignatures()
-
- /**
- * Gets the {@link Crypt_GPG_Signature} objects parsed by this handler
- *
- * @return array the signature objects parsed by this handler.
- */
- public function getSignatures()
- {
- return $this->signatures;
- }
-
- // }}}
-}
-
-?>
diff --git a/program/lib/Crypt/GPGAbstract.php b/program/lib/Crypt/GPGAbstract.php
deleted file mode 100644
index 214133936..000000000
--- a/program/lib/Crypt/GPGAbstract.php
+++ /dev/null
@@ -1,508 +0,0 @@
-<?php
-
-/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
-
-/**
- * Crypt_GPG is a package to use GPG from PHP
- *
- * This package provides an object oriented interface to GNU Privacy
- * Guard (GPG). It requires the GPG executable to be on the system.
- *
- * Though GPG can support symmetric-key cryptography, this package is intended
- * only to facilitate public-key cryptography.
- *
- * This file contains an abstract implementation of a user of the
- * {@link Crypt_GPG_Engine} class.
- *
- * PHP version 5
- *
- * LICENSE:
- *
- * This library is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of the
- * License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * @category Encryption
- * @package Crypt_GPG
- * @author Nathan Fredrickson <nathan@silverorange.com>
- * @author Michael Gauthier <mike@silverorange.com>
- * @copyright 2005-2013 silverorange
- * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
- * @version CVS: $Id: GPG.php 305428 2010-11-17 02:47:56Z gauthierm $
- * @link http://pear.php.net/package/Crypt_GPG
- * @link http://pear.php.net/manual/en/package.encryption.crypt-gpg.php
- * @link http://www.gnupg.org/
- */
-
-/**
- * GPG key class
- */
-require_once 'Crypt/GPG/Key.php';
-
-/**
- * GPG sub-key class
- */
-require_once 'Crypt/GPG/SubKey.php';
-
-/**
- * GPG user id class
- */
-require_once 'Crypt/GPG/UserId.php';
-
-/**
- * GPG process and I/O engine class
- */
-require_once 'Crypt/GPG/Engine.php';
-
-/**
- * GPG exception classes
- */
-require_once 'Crypt/GPG/Exceptions.php';
-
-// {{{ class Crypt_GPGAbstract
-
-/**
- * Base class for implementing a user of {@link Crypt_GPG_Engine}
- *
- * @category Encryption
- * @package Crypt_GPG
- * @author Nathan Fredrickson <nathan@silverorange.com>
- * @author Michael Gauthier <mike@silverorange.com>
- * @copyright 2005-2013 silverorange
- * @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
- * @link http://pear.php.net/package/Crypt_GPG
- * @link http://www.gnupg.org/
- */
-abstract class Crypt_GPGAbstract
-{
- // {{{ class error constants
-
- /**
- * Error code returned when there is no error.
- */
- const ERROR_NONE = 0;
-
- /**
- * Error code returned when an unknown or unhandled error occurs.
- */
- const ERROR_UNKNOWN = 1;
-
- /**
- * Error code returned when a bad passphrase is used.
- */
- const ERROR_BAD_PASSPHRASE = 2;
-
- /**
- * Error code returned when a required passphrase is missing.
- */
- const ERROR_MISSING_PASSPHRASE = 3;
-
- /**
- * Error code returned when a key that is already in the keyring is
- * imported.
- */
- const ERROR_DUPLICATE_KEY = 4;
-
- /**
- * Error code returned the required data is missing for an operation.
- *
- * This could be missing key data, missing encrypted data or missing
- * signature data.
- */
- const ERROR_NO_DATA = 5;
-
- /**
- * Error code returned when an unsigned key is used.
- */
- const ERROR_UNSIGNED_KEY = 6;
-
- /**
- * Error code returned when a key that is not self-signed is used.
- */
- const ERROR_NOT_SELF_SIGNED = 7;
-
- /**
- * Error code returned when a public or private key that is not in the
- * keyring is used.
- */
- const ERROR_KEY_NOT_FOUND = 8;
-
- /**
- * Error code returned when an attempt to delete public key having a
- * private key is made.
- */
- const ERROR_DELETE_PRIVATE_KEY = 9;
-
- /**
- * Error code returned when one or more bad signatures are detected.
- */
- const ERROR_BAD_SIGNATURE = 10;
-
- /**
- * Error code returned when there is a problem reading GnuPG data files.
- */
- const ERROR_FILE_PERMISSIONS = 11;
-
- /**
- * Error code returned when a key could not be created.
- */
- const ERROR_KEY_NOT_CREATED = 12;
-
- /**
- * Error code returned when bad key parameters are used during key
- * generation.
- */
- const ERROR_BAD_KEY_PARAMS = 13;
-
- // }}}
- // {{{ other class constants
-
- /**
- * URI at which package bugs may be reported.
- */
- const BUG_URI = 'http://pear.php.net/bugs/report.php?package=Crypt_GPG';
-
- // }}}
- // {{{ protected class properties
-
- /**
- * Engine used to control the GPG subprocess
- *
- * @var Crypt_GPG_Engine
- *
- * @see Crypt_GPGAbstract::setEngine()
- */
- protected $engine = null;
-
- // }}}
- // {{{ __construct()
-
- /**
- * Creates a new GPG object
- *
- * Available options are:
- *
- * - <kbd>string homedir</kbd> - the directory where the GPG
- * keyring files are stored. If not
- * specified, Crypt_GPG uses the
- * default of <kbd>~/.gnupg</kbd>.
- * - <kbd>string publicKeyring</kbd> - the file path of the public
- * keyring. Use this if the public
- * keyring is not in the homedir, or
- * if the keyring is in a directory
- * not writable by the process
- * invoking GPG (like Apache). Then
- * you can specify the path to the
- * keyring with this option
- * (/foo/bar/pubring.gpg), and specify
- * a writable directory (like /tmp)
- * using the <i>homedir</i> option.
- * - <kbd>string privateKeyring</kbd> - the file path of the private
- * keyring. Use this if the private
- * keyring is not in the homedir, or
- * if the keyring is in a directory
- * not writable by the process
- * invoking GPG (like Apache). Then
- * you can specify the path to the
- * keyring with this option
- * (/foo/bar/secring.gpg), and specify
- * a writable directory (like /tmp)
- * using the <i>homedir</i> option.
- * - <kbd>string trustDb</kbd> - the file path of the web-of-trust
- * database. Use this if the trust
- * database is not in the homedir, or
- * if the database is in a directory
- * not writable by the process
- * invoking GPG (like Apache). Then
- * you can specify the path to the
- * trust database with this option
- * (/foo/bar/trustdb.gpg), and specify
- * a writable directory (like /tmp)
- * using the <i>homedir</i> option.
- * - <kbd>string binary</kbd> - the location of the GPG binary. If
- * not specified, the driver attempts
- * to auto-detect the GPG binary
- * location using a list of known
- * default locations for the current
- * operating system. The option
- * <kbd>gpgBinary</kbd> is a
- * deprecated alias for this option.
- * - <kbd>string agent</kbd> - the location of the GnuPG agent
- * binary. The gpg-agent is only
- * used for GnuPG 2.x. If not
- * specified, the engine attempts
- * to auto-detect the gpg-agent
- * binary location using a list of
- * know default locations for the
- * current operating system.
- * - <kbd>boolean debug</kbd> - whether or not to use debug mode.
- * When debug mode is on, all
- * communication to and from the GPG
- * subprocess is logged. This can be
- *
- * @param array $options optional. An array of options used to create the
- * GPG object. All options are optional and are
- * represented as key-value pairs.
- *
- * @throws Crypt_GPG_FileException if the <kbd>homedir</kbd> does not exist
- * and cannot be created. This can happen if <kbd>homedir</kbd> is
- * not specified, Crypt_GPG is run as the web user, and the web
- * user has no home directory. This exception is also thrown if any
- * of the options <kbd>publicKeyring</kbd>,
- * <kbd>privateKeyring</kbd> or <kbd>trustDb</kbd> options are
- * specified but the files do not exist or are are not readable.
- * This can happen if the user running the Crypt_GPG process (for
- * example, the Apache user) does not have permission to read the
- * files.
- *
- * @throws PEAR_Exception if the provided <kbd>binary</kbd> is invalid, or
- * if no <kbd>binary</kbd> is provided and no suitable binary could
- * be found.
- *
- * @throws PEAR_Exception if the provided <kbd>agent</kbd> is invalid, or
- * if no <kbd>agent</kbd> is provided and no suitable gpg-agent
- * cound be found.
- */
- public function __construct(array $options = array())
- {
- $this->setEngine(new Crypt_GPG_Engine($options));
- }
-
- // }}}
- // {{{ setEngine()
-
- /**
- * Sets the I/O engine to use for GnuPG operations
- *
- * Normally this method does not need to be used. It provides a means for
- * dependency injection.
- *
- * @param Crypt_GPG_Engine $engine the engine to use.
- *
- * @return Crypt_GPGAbstract the current object, for fluent interface.
- */
- public function setEngine(Crypt_GPG_Engine $engine)
- {
- $this->engine = $engine;
- return $this;
- }
-
- // }}}
- // {{{ _getKeys()
-
- /**
- * Gets the available keys in the keyring
- *
- * Calls GPG with the <kbd>--list-keys</kbd> command and grabs keys. See
- * the first section of <b>doc/DETAILS</b> in the
- * {@link http://www.gnupg.org/download/ GPG package} for a detailed
- * description of how the GPG command output is parsed.
- *
- * @param string $keyId optional. Only keys with that match the specified
- * pattern are returned. The pattern may be part of
- * a user id, a key id or a key fingerprint. If not
- * specified, all keys are returned.
- *
- * @return array an array of {@link Crypt_GPG_Key} objects. If no keys
- * match the specified <kbd>$keyId</kbd> an empty array is
- * returned.
- *
- * @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
- * Use the <kbd>debug</kbd> option and file a bug report if these
- * exceptions occur.
- *
- * @see Crypt_GPG_Key
- */
- protected function _getKeys($keyId = '')
- {
- // get private key fingerprints
- if ($keyId == '') {
- $operation = '--list-secret-keys';
- } else {
- $operation = '--list-secret-keys ' . escapeshellarg($keyId);
- }
-
- // According to The file 'doc/DETAILS' in the GnuPG distribution, using
- // double '--with-fingerprint' also prints the fingerprint for subkeys.
- $arguments = array(
- '--with-colons',
- '--with-fingerprint',
- '--with-fingerprint',
- '--fixed-list-mode'
- );
-
- $output = '';
-
- $this->engine->reset();
- $this->engine->setOutput($output);
- $this->engine->setOperation($operation, $arguments);
- $this->engine->run();
-
- $code = $this->engine->getErrorCode();
-
- switch ($code) {
- case self::ERROR_NONE:
- case self::ERROR_KEY_NOT_FOUND:
- // ignore not found key errors
- break;
- case self::ERROR_FILE_PERMISSIONS:
- $filename = $this->engine->getErrorFilename();
- if ($filename) {
- throw new Crypt_GPG_FileException(
- sprintf(
- 'Error reading GnuPG data file \'%s\'. Check to make ' .
- 'sure it is readable by the current user.',
- $filename
- ),
- $code,
- $filename
- );
- }
- throw new Crypt_GPG_FileException(
- 'Error reading GnuPG data file. Check to make GnuPG data ' .
- 'files are readable by the current user.',
- $code
- );
- default:
- throw new Crypt_GPG_Exception(
- 'Unknown error getting keys. Please use the \'debug\' option ' .
- 'when creating the Crypt_GPG object, and file a bug report ' .
- 'at ' . self::BUG_URI,
- $code
- );
- }
-
- $privateKeyFingerprints = array();
-
- $lines = explode(PHP_EOL, $output);
- foreach ($lines as $line) {
- $lineExp = explode(':', $line);
- if ($lineExp[0] == 'fpr') {
- $privateKeyFingerprints[] = $lineExp[9];
- }
- }
-
- // get public keys
- if ($keyId == '') {
- $operation = '--list-public-keys';
- } else {
- $operation = '--list-public-keys ' . escapeshellarg($keyId);
- }
-
- $output = '';
-
- $this->engine->reset();
- $this->engine->setOutput($output);
- $this->engine->setOperation($operation, $arguments);
- $this->engine->run();
-
- $code = $this->engine->getErrorCode();
-
- switch ($code) {
- case self::ERROR_NONE:
- case self::ERROR_KEY_NOT_FOUND:
- // ignore not found key errors
- break;
- case self::ERROR_FILE_PERMISSIONS:
- $filename = $this->engine->getErrorFilename();
- if ($filename) {
- throw new Crypt_GPG_FileException(
- sprintf(
- 'Error reading GnuPG data file \'%s\'. Check to make ' .
- 'sure it is readable by the current user.',
- $filename
- ),
- $code,
- $filename
- );
- }
- throw new Crypt_GPG_FileException(
- 'Error reading GnuPG data file. Check to make GnuPG data ' .
- 'files are readable by the current user.',
- $code
- );
- default:
- throw new Crypt_GPG_Exception(
- 'Unknown error getting keys. Please use the \'debug\' option ' .
- 'when creating the Crypt_GPG object, and file a bug report ' .
- 'at ' . self::BUG_URI,
- $code
- );
- }
-
- $keys = array();
-
- $key = null; // current key
- $subKey = null; // current sub-key
-
- $lines = explode(PHP_EOL, $output);
- foreach ($lines as $line) {
- $lineExp = explode(':', $line);
-
- if ($lineExp[0] == 'pub') {
-
- // new primary key means last key should be added to the array
- if ($key !== null) {
- $keys[] = $key;
- }
-
- $key = new Crypt_GPG_Key();
-
- $subKey = Crypt_GPG_SubKey::parse($line);
- $key->addSubKey($subKey);
-
- } elseif ($lineExp[0] == 'sub') {
-
- $subKey = Crypt_GPG_SubKey::parse($line);
- $key->addSubKey($subKey);
-
- } elseif ($lineExp[0] == 'fpr') {
-
- $fingerprint = $lineExp[9];
-
- // set current sub-key fingerprint
- $subKey->setFingerprint($fingerprint);
-
- // if private key exists, set has private to true
- if (in_array($fingerprint, $privateKeyFingerprints)) {
- $subKey->setHasPrivate(true);
- }
-
- } elseif ($lineExp[0] == 'uid') {
-
- $string = stripcslashes($lineExp[9]); // as per documentation
- $userId = new Crypt_GPG_UserId($string);
-
- if ($lineExp[1] == 'r') {
- $userId->setRevoked(true);
- }
-
- $key->addUserId($userId);
-
- }
- }
-
- // add last key
- if ($key !== null) {
- $keys[] = $key;
- }
-
- return $keys;
- }
-
- // }}}
-}
-
-// }}}
-
-?>
diff --git a/program/lib/Mail/mime.php b/program/lib/Mail/mime.php
deleted file mode 100644
index db0fd1fc2..000000000
--- a/program/lib/Mail/mime.php
+++ /dev/null
@@ -1,1499 +0,0 @@
-<?php
-/**
- * The Mail_Mime class is used to create MIME E-mail messages
- *
- * The Mail_Mime class provides an OO interface to create MIME
- * enabled email messages. This way you can create emails that
- * contain plain-text bodies, HTML bodies, attachments, inline
- * images and specific headers.
- *
- * Compatible with PHP versions 4 and 5
- *
- * LICENSE: This LICENSE is in the BSD license style.
- * Copyright (c) 2002-2003, Richard Heyes <richard@phpguru.org>
- * Copyright (c) 2003-2006, PEAR <pear-group@php.net>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or
- * without modification, are permitted provided that the following
- * conditions are met:
- *
- * - Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * - Neither the name of the authors, nor the names of its contributors
- * may be used to endorse or promote products derived from this
- * software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- *
- * @category Mail
- * @package Mail_Mime
- * @author Richard Heyes <richard@phpguru.org>
- * @author Tomas V.V. Cox <cox@idecnet.com>
- * @author Cipriano Groenendal <cipri@php.net>
- * @author Sean Coates <sean@php.net>
- * @author Aleksander Machniak <alec@php.net>
- * @copyright 2003-2006 PEAR <pear-group@php.net>
- * @license http://www.opensource.org/licenses/bsd-license.php BSD License
- * @version CVS: $Id$
- * @link http://pear.php.net/package/Mail_mime
- *
- * This class is based on HTML Mime Mail class from
- * Richard Heyes <richard@phpguru.org> which was based also
- * in the mime_mail.class by Tobias Ratschiller <tobias@dnet.it>
- * and Sascha Schumann <sascha@schumann.cx>
- */
-
-
-/**
- * require PEAR
- *
- * This package depends on PEAR to raise errors.
- */
-require_once 'PEAR.php';
-
-/**
- * require Mail_mimePart
- *
- * Mail_mimePart contains the code required to
- * create all the different parts a mail can
- * consist of.
- */
-require_once 'Mail/mimePart.php';
-
-
-/**
- * The Mail_Mime class provides an OO interface to create MIME
- * enabled email messages. This way you can create emails that
- * contain plain-text bodies, HTML bodies, attachments, inline
- * images and specific headers.
- *
- * @category Mail
- * @package Mail_Mime
- * @author Richard Heyes <richard@phpguru.org>
- * @author Tomas V.V. Cox <cox@idecnet.com>
- * @author Cipriano Groenendal <cipri@php.net>
- * @author Sean Coates <sean@php.net>
- * @copyright 2003-2006 PEAR <pear-group@php.net>
- * @license http://www.opensource.org/licenses/bsd-license.php BSD License
- * @version Release: @package_version@
- * @link http://pear.php.net/package/Mail_mime
- */
-class Mail_mime
-{
- /**
- * Contains the plain text part of the email
- *
- * @var string
- * @access private
- */
- var $_txtbody;
-
- /**
- * Contains the html part of the email
- *
- * @var string
- * @access private
- */
- var $_htmlbody;
-
- /**
- * list of the attached images
- *
- * @var array
- * @access private
- */
- var $_html_images = array();
-
- /**
- * list of the attachements
- *
- * @var array
- * @access private
- */
- var $_parts = array();
-
- /**
- * Headers for the mail
- *
- * @var array
- * @access private
- */
- var $_headers = array();
-
- /**
- * Build parameters
- *
- * @var array
- * @access private
- */
- var $_build_params = array(
- // What encoding to use for the headers
- // Options: quoted-printable or base64
- 'head_encoding' => 'quoted-printable',
- // What encoding to use for plain text
- // Options: 7bit, 8bit, base64, or quoted-printable
- 'text_encoding' => 'quoted-printable',
- // What encoding to use for html
- // Options: 7bit, 8bit, base64, or quoted-printable
- 'html_encoding' => 'quoted-printable',
- // The character set to use for html
- 'html_charset' => 'ISO-8859-1',
- // The character set to use for text
- 'text_charset' => 'ISO-8859-1',
- // The character set to use for headers
- 'head_charset' => 'ISO-8859-1',
- // End-of-line sequence
- 'eol' => "\r\n",
- // Delay attachment files IO until building the message
- 'delay_file_io' => false
- );
-
- /**
- * Constructor function
- *
- * @param mixed $params Build parameters that change the way the email
- * is built. Should be an associative array.
- * See $_build_params.
- *
- * @return void
- * @access public
- */
- function Mail_mime($params = array())
- {
- // Backward-compatible EOL setting
- if (is_string($params)) {
- $this->_build_params['eol'] = $params;
- } else if (defined('MAIL_MIME_CRLF') && !isset($params['eol'])) {
- $this->_build_params['eol'] = MAIL_MIME_CRLF;
- }
-
- // Update build parameters
- if (!empty($params) && is_array($params)) {
- while (list($key, $value) = each($params)) {
- $this->_build_params[$key] = $value;
- }
- }
- }
-
- /**
- * Set build parameter value
- *
- * @param string $name Parameter name
- * @param string $value Parameter value
- *
- * @return void
- * @access public
- * @since 1.6.0
- */
- function setParam($name, $value)
- {
- $this->_build_params[$name] = $value;
- }
-
- /**
- * Get build parameter value
- *
- * @param string $name Parameter name
- *
- * @return mixed Parameter value
- * @access public
- * @since 1.6.0
- */
- function getParam($name)
- {
- return isset($this->_build_params[$name]) ? $this->_build_params[$name] : null;
- }
-
- /**
- * Accessor function to set the body text. Body text is used if
- * it's not an html mail being sent or else is used to fill the
- * text/plain part that emails clients who don't support
- * html should show.
- *
- * @param string $data Either a string or
- * the file name with the contents
- * @param bool $isfile If true the first param should be treated
- * as a file name, else as a string (default)
- * @param bool $append If true the text or file is appended to
- * the existing body, else the old body is
- * overwritten
- *
- * @return mixed True on success or PEAR_Error object
- * @access public
- */
- function setTXTBody($data, $isfile = false, $append = false)
- {
- if (!$isfile) {
- if (!$append) {
- $this->_txtbody = $data;
- } else {
- $this->_txtbody .= $data;
- }
- } else {
- $cont = $this->_file2str($data);
- if ($this->_isError($cont)) {
- return $cont;
- }
- if (!$append) {
- $this->_txtbody = $cont;
- } else {
- $this->_txtbody .= $cont;
- }
- }
-
- return true;
- }
-
- /**
- * Get message text body
- *
- * @return string Text body
- * @access public
- * @since 1.6.0
- */
- function getTXTBody()
- {
- return $this->_txtbody;
- }
-
- /**
- * Adds a html part to the mail.
- *
- * @param string $data Either a string or the file name with the
- * contents
- * @param bool $isfile A flag that determines whether $data is a
- * filename, or a string(false, default)
- *
- * @return bool True on success
- * @access public
- */
- function setHTMLBody($data, $isfile = false)
- {
- if (!$isfile) {
- $this->_htmlbody = $data;
- } else {
- $cont = $this->_file2str($data);
- if ($this->_isError($cont)) {
- return $cont;
- }
- $this->_htmlbody = $cont;
- }
-
- return true;
- }
-
- /**
- * Get message HTML body
- *
- * @return string HTML body
- * @access public
- * @since 1.6.0
- */
- function getHTMLBody()
- {
- return $this->_htmlbody;
- }
-
- /**
- * Adds an image to the list of embedded images.
- *
- * @param string $file The image file name OR image data itself
- * @param string $c_type The content type
- * @param string $name The filename of the image.
- * Only used if $file is the image data.
- * @param bool $isfile Whether $file is a filename or not.
- * Defaults to true
- * @param string $content_id Desired Content-ID of MIME part
- * Defaults to generated unique ID
- *
- * @return bool True on success
- * @access public
- */
- function addHTMLImage($file,
- $c_type='application/octet-stream',
- $name = '',
- $isfile = true,
- $content_id = null
- ) {
- $bodyfile = null;
-
- if ($isfile) {
- // Don't load file into memory
- if ($this->_build_params['delay_file_io']) {
- $filedata = null;
- $bodyfile = $file;
- } else {
- if ($this->_isError($filedata = $this->_file2str($file))) {
- return $filedata;
- }
- }
- $filename = ($name ? $name : $file);
- } else {
- $filedata = $file;
- $filename = $name;
- }
-
- if (!$content_id) {
- $content_id = preg_replace('/[^0-9a-zA-Z]/', '', uniqid(time(), true));
- }
-
- $this->_html_images[] = array(
- 'body' => $filedata,
- 'body_file' => $bodyfile,
- 'name' => $filename,
- 'c_type' => $c_type,
- 'cid' => $content_id
- );
-
- return true;
- }
-
- /**
- * Adds a file to the list of attachments.
- *
- * @param string $file The file name of the file to attach
- * or the file contents itself
- * @param string $c_type The content type
- * @param string $name The filename of the attachment
- * Only use if $file is the contents
- * @param bool $isfile Whether $file is a filename or not. Defaults to true
- * @param string $encoding The type of encoding to use. Defaults to base64.
- * Possible values: 7bit, 8bit, base64 or quoted-printable.
- * @param string $disposition The content-disposition of this file
- * Defaults to attachment.
- * Possible values: attachment, inline.
- * @param string $charset The character set of attachment's content.
- * @param string $language The language of the attachment
- * @param string $location The RFC 2557.4 location of the attachment
- * @param string $n_encoding Encoding of the attachment's name in Content-Type
- * By default filenames are encoded using RFC2231 method
- * Here you can set RFC2047 encoding (quoted-printable
- * or base64) instead
- * @param string $f_encoding Encoding of the attachment's filename
- * in Content-Disposition header.
- * @param string $description Content-Description header
- * @param string $h_charset The character set of the headers e.g. filename
- * If not specified, $charset will be used
- * @param array $add_headers Additional part headers. Array keys can be in form
- * of <header_name>:<parameter_name>
- *
- * @return mixed True on success or PEAR_Error object
- * @access public
- */
- function addAttachment($file,
- $c_type = 'application/octet-stream',
- $name = '',
- $isfile = true,
- $encoding = 'base64',
- $disposition = 'attachment',
- $charset = '',
- $language = '',
- $location = '',
- $n_encoding = null,
- $f_encoding = null,
- $description = '',
- $h_charset = null,
- $add_headers = array()
- ) {
- $bodyfile = null;
-
- if ($isfile) {
- // Don't load file into memory
- if ($this->_build_params['delay_file_io']) {
- $filedata = null;
- $bodyfile = $file;
- } else {
- if ($this->_isError($filedata = $this->_file2str($file))) {
- return $filedata;
- }
- }
- // Force the name the user supplied, otherwise use $file
- $filename = ($name ? $name : $this->_basename($file));
- } else {
- $filedata = $file;
- $filename = $name;
- }
-
- if (!strlen($filename)) {
- $msg = "The supplied filename for the attachment can't be empty";
- return $this->_raiseError($msg);
- }
-
- $this->_parts[] = array(
- 'body' => $filedata,
- 'body_file' => $bodyfile,
- 'name' => $filename,
- 'c_type' => $c_type,
- 'charset' => $charset,
- 'encoding' => $encoding,
- 'language' => $language,
- 'location' => $location,
- 'disposition' => $disposition,
- 'description' => $description,
- 'add_headers' => $add_headers,
- 'name_encoding' => $n_encoding,
- 'filename_encoding' => $f_encoding,
- 'headers_charset' => $h_charset,
- );
-
- return true;
- }
-
- /**
- * Get the contents of the given file name as string
- *
- * @param string $file_name Path of file to process
- *
- * @return string Contents of $file_name
- * @access private
- */
- function _file2str($file_name)
- {
- // Check state of file and raise an error properly
- if (!file_exists($file_name)) {
- return $this->_raiseError('File not found: ' . $file_name);
- }
- if (!is_file($file_name)) {
- return $this->_raiseError('Not a regular file: ' . $file_name);
- }
- if (!is_readable($file_name)) {
- return $this->_raiseError('File is not readable: ' . $file_name);
- }
-
- // Temporarily reset magic_quotes_runtime and read file contents
- if ($magic_quote_setting = get_magic_quotes_runtime()) {
- @ini_set('magic_quotes_runtime', 0);
- }
- $cont = file_get_contents($file_name);
- if ($magic_quote_setting) {
- @ini_set('magic_quotes_runtime', $magic_quote_setting);
- }
-
- return $cont;
- }
-
- /**
- * Adds a text subpart to the mimePart object and
- * returns it during the build process.
- *
- * @param mixed &$obj The object to add the part to, or
- * anything else if a new object is to be created.
- * @param string $text The text to add.
- *
- * @return object The text mimePart object
- * @access private
- */
- function &_addTextPart(&$obj, $text = '')
- {
- $params['content_type'] = 'text/plain';
- $params['encoding'] = $this->_build_params['text_encoding'];
- $params['charset'] = $this->_build_params['text_charset'];
- $params['eol'] = $this->_build_params['eol'];
-
- if (is_object($obj)) {
- $ret = $obj->addSubpart($text, $params);
- } else {
- $ret = new Mail_mimePart($text, $params);
- }
-
- return $ret;
- }
-
- /**
- * Adds a html subpart to the mimePart object and
- * returns it during the build process.
- *
- * @param mixed &$obj The object to add the part to, or
- * anything else if a new object is to be created.
- *
- * @return object The html mimePart object
- * @access private
- */
- function &_addHtmlPart(&$obj)
- {
- $params['content_type'] = 'text/html';
- $params['encoding'] = $this->_build_params['html_encoding'];
- $params['charset'] = $this->_build_params['html_charset'];
- $params['eol'] = $this->_build_params['eol'];
-
- if (is_object($obj)) {
- $ret = $obj->addSubpart($this->_htmlbody, $params);
- } else {
- $ret = new Mail_mimePart($this->_htmlbody, $params);
- }
-
- return $ret;
- }
-
- /**
- * Creates a new mimePart object, using multipart/mixed as
- * the initial content-type and returns it during the
- * build process.
- *
- * @return object The multipart/mixed mimePart object
- * @access private
- */
- function &_addMixedPart()
- {
- $params['content_type'] = 'multipart/mixed';
- $params['eol'] = $this->_build_params['eol'];
-
- // Create empty multipart/mixed Mail_mimePart object to return
- $ret = new Mail_mimePart('', $params);
- return $ret;
- }
-
- /**
- * Adds a multipart/alternative part to a mimePart
- * object (or creates one), and returns it during
- * the build process.
- *
- * @param mixed &$obj The object to add the part to, or
- * anything else if a new object is to be created.
- *
- * @return object The multipart/mixed mimePart object
- * @access private
- */
- function &_addAlternativePart(&$obj)
- {
- $params['content_type'] = 'multipart/alternative';
- $params['eol'] = $this->_build_params['eol'];
-
- if (is_object($obj)) {
- $ret = $obj->addSubpart('', $params);
- } else {
- $ret = new Mail_mimePart('', $params);
- }
-
- return $ret;
- }
-
- /**
- * Adds a multipart/related part to a mimePart
- * object (or creates one), and returns it during
- * the build process.
- *
- * @param mixed &$obj The object to add the part to, or
- * anything else if a new object is to be created
- *
- * @return object The multipart/mixed mimePart object
- * @access private
- */
- function &_addRelatedPart(&$obj)
- {
- $params['content_type'] = 'multipart/related';
- $params['eol'] = $this->_build_params['eol'];
-
- if (is_object($obj)) {
- $ret = $obj->addSubpart('', $params);
- } else {
- $ret = new Mail_mimePart('', $params);
- }
-
- return $ret;
- }
-
- /**
- * Adds an html image subpart to a mimePart object
- * and returns it during the build process.
- *
- * @param object &$obj The mimePart to add the image to
- * @param array $value The image information
- *
- * @return object The image mimePart object
- * @access private
- */
- function &_addHtmlImagePart(&$obj, $value)
- {
- $params['content_type'] = $value['c_type'];
- $params['encoding'] = 'base64';
- $params['disposition'] = 'inline';
- $params['filename'] = $value['name'];
- $params['cid'] = $value['cid'];
- $params['body_file'] = $value['body_file'];
- $params['eol'] = $this->_build_params['eol'];
-
- if (!empty($value['name_encoding'])) {
- $params['name_encoding'] = $value['name_encoding'];
- }
- if (!empty($value['filename_encoding'])) {
- $params['filename_encoding'] = $value['filename_encoding'];
- }
-
- $ret = $obj->addSubpart($value['body'], $params);
- return $ret;
- }
-
- /**
- * Adds an attachment subpart to a mimePart object
- * and returns it during the build process.
- *
- * @param object &$obj The mimePart to add the image to
- * @param array $value The attachment information
- *
- * @return object The image mimePart object
- * @access private
- */
- function &_addAttachmentPart(&$obj, $value)
- {
- $params['eol'] = $this->_build_params['eol'];
- $params['filename'] = $value['name'];
- $params['encoding'] = $value['encoding'];
- $params['content_type'] = $value['c_type'];
- $params['body_file'] = $value['body_file'];
- $params['disposition'] = isset($value['disposition']) ?
- $value['disposition'] : 'attachment';
-
- // content charset
- if (!empty($value['charset'])) {
- $params['charset'] = $value['charset'];
- }
- // headers charset (filename, description)
- if (!empty($value['headers_charset'])) {
- $params['headers_charset'] = $value['headers_charset'];
- }
- if (!empty($value['language'])) {
- $params['language'] = $value['language'];
- }
- if (!empty($value['location'])) {
- $params['location'] = $value['location'];
- }
- if (!empty($value['name_encoding'])) {
- $params['name_encoding'] = $value['name_encoding'];
- }
- if (!empty($value['filename_encoding'])) {
- $params['filename_encoding'] = $value['filename_encoding'];
- }
- if (!empty($value['description'])) {
- $params['description'] = $value['description'];
- }
- if (is_array($value['add_headers'])) {
- $params['headers'] = $value['add_headers'];
- }
-
- $ret = $obj->addSubpart($value['body'], $params);
- return $ret;
- }
-
- /**
- * Returns the complete e-mail, ready to send using an alternative
- * mail delivery method. Note that only the mailpart that is made
- * with Mail_Mime is created. This means that,
- * YOU WILL HAVE NO TO: HEADERS UNLESS YOU SET IT YOURSELF
- * using the $headers parameter!
- *
- * @param string $separation The separation between these two parts.
- * @param array $params The Build parameters passed to the
- * get() function. See get() for more info.
- * @param array $headers The extra headers that should be passed
- * to the headers() method.
- * See that function for more info.
- * @param bool $overwrite Overwrite the existing headers with new.
- *
- * @return mixed The complete e-mail or PEAR error object
- * @access public
- */
- function getMessage($separation = null, $params = null, $headers = null,
- $overwrite = false
- ) {
- if ($separation === null) {
- $separation = $this->_build_params['eol'];
- }
-
- $body = $this->get($params);
-
- if ($this->_isError($body)) {
- return $body;
- }
-
- return $this->txtHeaders($headers, $overwrite) . $separation . $body;
- }
-
- /**
- * Returns the complete e-mail body, ready to send using an alternative
- * mail delivery method.
- *
- * @param array $params The Build parameters passed to the
- * get() method. See get() for more info.
- *
- * @return mixed The e-mail body or PEAR error object
- * @access public
- * @since 1.6.0
- */
- function getMessageBody($params = null)
- {
- return $this->get($params, null, true);
- }
-
- /**
- * Writes (appends) the complete e-mail into file.
- *
- * @param string $filename Output file location
- * @param array $params The Build parameters passed to the
- * get() method. See get() for more info.
- * @param array $headers The extra headers that should be passed
- * to the headers() function.
- * See that function for more info.
- * @param bool $overwrite Overwrite the existing headers with new.
- *
- * @return mixed True or PEAR error object
- * @access public
- * @since 1.6.0
- */
- function saveMessage($filename, $params = null, $headers = null, $overwrite = false)
- {
- // Check state of file and raise an error properly
- if (file_exists($filename) && !is_writable($filename)) {
- return $this->_raiseError('File is not writable: ' . $filename);
- }
-
- // Temporarily reset magic_quotes_runtime and read file contents
- if ($magic_quote_setting = get_magic_quotes_runtime()) {
- @ini_set('magic_quotes_runtime', 0);
- }
-
- if (!($fh = fopen($filename, 'ab'))) {
- return $this->_raiseError('Unable to open file: ' . $filename);
- }
-
- // Write message headers into file (skipping Content-* headers)
- $head = $this->txtHeaders($headers, $overwrite, true);
- if (fwrite($fh, $head) === false) {
- return $this->_raiseError('Error writing to file: ' . $filename);
- }
-
- fclose($fh);
-
- if ($magic_quote_setting) {
- @ini_set('magic_quotes_runtime', $magic_quote_setting);
- }
-
- // Write the rest of the message into file
- $res = $this->get($params, $filename);
-
- return $res ? $res : true;
- }
-
- /**
- * Writes (appends) the complete e-mail body into file.
- *
- * @param string $filename Output file location
- * @param array $params The Build parameters passed to the
- * get() method. See get() for more info.
- *
- * @return mixed True or PEAR error object
- * @access public
- * @since 1.6.0
- */
- function saveMessageBody($filename, $params = null)
- {
- // Check state of file and raise an error properly
- if (file_exists($filename) && !is_writable($filename)) {
- return $this->_raiseError('File is not writable: ' . $filename);
- }
-
- // Temporarily reset magic_quotes_runtime and read file contents
- if ($magic_quote_setting = get_magic_quotes_runtime()) {
- @ini_set('magic_quotes_runtime', 0);
- }
-
- if (!($fh = fopen($filename, 'ab'))) {
- return $this->_raiseError('Unable to open file: ' . $filename);
- }
-
- // Write the rest of the message into file
- $res = $this->get($params, $filename, true);
-
- return $res ? $res : true;
- }
-
- /**
- * Builds the multipart message from the list ($this->_parts) and
- * returns the mime content.
- *
- * @param array $params Build parameters that change the way the email
- * is built. Should be associative. See $_build_params.
- * @param resource $filename Output file where to save the message instead of
- * returning it
- * @param boolean $skip_head True if you want to return/save only the message
- * without headers
- *
- * @return mixed The MIME message content string, null or PEAR error object
- * @access public
- */
- function get($params = null, $filename = null, $skip_head = false)
- {
- if (isset($params)) {
- while (list($key, $value) = each($params)) {
- $this->_build_params[$key] = $value;
- }
- }
-
- if (isset($this->_headers['From'])) {
- // Bug #11381: Illegal characters in domain ID
- if (preg_match('#(@[0-9a-zA-Z\-\.]+)#', $this->_headers['From'], $matches)) {
- $domainID = $matches[1];
- } else {
- $domainID = '@localhost';
- }
- foreach ($this->_html_images as $i => $img) {
- $cid = $this->_html_images[$i]['cid'];
- if (!preg_match('#'.preg_quote($domainID).'$#', $cid)) {
- $this->_html_images[$i]['cid'] = $cid . $domainID;
- }
- }
- }
-
- if (count($this->_html_images) && isset($this->_htmlbody)) {
- foreach ($this->_html_images as $key => $value) {
- $regex = array();
- $regex[] = '#(\s)((?i)src|background|href(?-i))\s*=\s*(["\']?)' .
- preg_quote($value['name'], '#') . '\3#';
- $regex[] = '#(?i)url(?-i)\(\s*(["\']?)' .
- preg_quote($value['name'], '#') . '\1\s*\)#';
-
- $rep = array();
- $rep[] = '\1\2=\3cid:' . $value['cid'] .'\3';
- $rep[] = 'url(\1cid:' . $value['cid'] . '\1)';
-
- $this->_htmlbody = preg_replace($regex, $rep, $this->_htmlbody);
- $this->_html_images[$key]['name']
- = $this->_basename($this->_html_images[$key]['name']);
- }
- }
-
- $this->_checkParams();
-
- $null = -1;
- $attachments = count($this->_parts) > 0;
- $html_images = count($this->_html_images) > 0;
- $html = strlen($this->_htmlbody) > 0;
- $text = !$html && strlen($this->_txtbody);
-
- switch (true) {
- case $text && !$attachments:
- $message =& $this->_addTextPart($null, $this->_txtbody);
- break;
-
- case !$text && !$html && $attachments:
- $message =& $this->_addMixedPart();
- for ($i = 0; $i < count($this->_parts); $i++) {
- $this->_addAttachmentPart($message, $this->_parts[$i]);
- }
- break;
-
- case $text && $attachments:
- $message =& $this->_addMixedPart();
- $this->_addTextPart($message, $this->_txtbody);
- for ($i = 0; $i < count($this->_parts); $i++) {
- $this->_addAttachmentPart($message, $this->_parts[$i]);
- }
- break;
-
- case $html && !$attachments && !$html_images:
- if (isset($this->_txtbody)) {
- $message =& $this->_addAlternativePart($null);
- $this->_addTextPart($message, $this->_txtbody);
- $this->_addHtmlPart($message);
- } else {
- $message =& $this->_addHtmlPart($null);
- }
- break;
-
- case $html && !$attachments && $html_images:
- // * Content-Type: multipart/alternative;
- // * text
- // * Content-Type: multipart/related;
- // * html
- // * image...
- if (isset($this->_txtbody)) {
- $message =& $this->_addAlternativePart($null);
- $this->_addTextPart($message, $this->_txtbody);
-
- $ht =& $this->_addRelatedPart($message);
- $this->_addHtmlPart($ht);
- for ($i = 0; $i < count($this->_html_images); $i++) {
- $this->_addHtmlImagePart($ht, $this->_html_images[$i]);
- }
- } else {
- // * Content-Type: multipart/related;
- // * html
- // * image...
- $message =& $this->_addRelatedPart($null);
- $this->_addHtmlPart($message);
- for ($i = 0; $i < count($this->_html_images); $i++) {
- $this->_addHtmlImagePart($message, $this->_html_images[$i]);
- }
- }
- /*
- // #13444, #9725: the code below was a non-RFC compliant hack
- // * Content-Type: multipart/related;
- // * Content-Type: multipart/alternative;
- // * text
- // * html
- // * image...
- $message =& $this->_addRelatedPart($null);
- if (isset($this->_txtbody)) {
- $alt =& $this->_addAlternativePart($message);
- $this->_addTextPart($alt, $this->_txtbody);
- $this->_addHtmlPart($alt);
- } else {
- $this->_addHtmlPart($message);
- }
- for ($i = 0; $i < count($this->_html_images); $i++) {
- $this->_addHtmlImagePart($message, $this->_html_images[$i]);
- }
- */
- break;
-
- case $html && $attachments && !$html_images:
- $message =& $this->_addMixedPart();
- if (isset($this->_txtbody)) {
- $alt =& $this->_addAlternativePart($message);
- $this->_addTextPart($alt, $this->_txtbody);
- $this->_addHtmlPart($alt);
- } else {
- $this->_addHtmlPart($message);
- }
- for ($i = 0; $i < count($this->_parts); $i++) {
- $this->_addAttachmentPart($message, $this->_parts[$i]);
- }
- break;
-
- case $html && $attachments && $html_images:
- $message =& $this->_addMixedPart();
- if (isset($this->_txtbody)) {
- $alt =& $this->_addAlternativePart($message);
- $this->_addTextPart($alt, $this->_txtbody);
- $rel =& $this->_addRelatedPart($alt);
- } else {
- $rel =& $this->_addRelatedPart($message);
- }
- $this->_addHtmlPart($rel);
- for ($i = 0; $i < count($this->_html_images); $i++) {
- $this->_addHtmlImagePart($rel, $this->_html_images[$i]);
- }
- for ($i = 0; $i < count($this->_parts); $i++) {
- $this->_addAttachmentPart($message, $this->_parts[$i]);
- }
- break;
- }
-
- if (!isset($message)) {
- return null;
- }
-
- // Use saved boundary
- if (!empty($this->_build_params['boundary'])) {
- $boundary = $this->_build_params['boundary'];
- } else {
- $boundary = null;
- }
-
- // Write output to file
- if ($filename) {
- // Append mimePart message headers and body into file
- $headers = $message->encodeToFile($filename, $boundary, $skip_head);
- if ($this->_isError($headers)) {
- return $headers;
- }
- $this->_headers = array_merge($this->_headers, $headers);
- return null;
- } else {
- $output = $message->encode($boundary, $skip_head);
- if ($this->_isError($output)) {
- return $output;
- }
- $this->_headers = array_merge($this->_headers, $output['headers']);
- return $output['body'];
- }
- }
-
- /**
- * Returns an array with the headers needed to prepend to the email
- * (MIME-Version and Content-Type). Format of argument is:
- * $array['header-name'] = 'header-value';
- *
- * @param array $xtra_headers Assoc array with any extra headers (optional)
- * (Don't set Content-Type for multipart messages here!)
- * @param bool $overwrite Overwrite already existing headers.
- * @param bool $skip_content Don't return content headers: Content-Type,
- * Content-Disposition and Content-Transfer-Encoding
- *
- * @return array Assoc array with the mime headers
- * @access public
- */
- function headers($xtra_headers = null, $overwrite = false, $skip_content = false)
- {
- // Add mime version header
- $headers['MIME-Version'] = '1.0';
-
- // Content-Type and Content-Transfer-Encoding headers should already
- // be present if get() was called, but we'll re-set them to make sure
- // we got them when called before get() or something in the message
- // has been changed after get() [#14780]
- if (!$skip_content) {
- $headers += $this->_contentHeaders();
- }
-
- if (!empty($xtra_headers)) {
- $headers = array_merge($headers, $xtra_headers);
- }
-
- if ($overwrite) {
- $this->_headers = array_merge($this->_headers, $headers);
- } else {
- $this->_headers = array_merge($headers, $this->_headers);
- }
-
- $headers = $this->_headers;
-
- if ($skip_content) {
- unset($headers['Content-Type']);
- unset($headers['Content-Transfer-Encoding']);
- unset($headers['Content-Disposition']);
- } else if (!empty($this->_build_params['ctype'])) {
- $headers['Content-Type'] = $this->_build_params['ctype'];
- }
-
- $encodedHeaders = $this->_encodeHeaders($headers);
- return $encodedHeaders;
- }
-
- /**
- * Get the text version of the headers
- * (usefull if you want to use the PHP mail() function)
- *
- * @param array $xtra_headers Assoc array with any extra headers (optional)
- * (Don't set Content-Type for multipart messages here!)
- * @param bool $overwrite Overwrite the existing headers with new.
- * @param bool $skip_content Don't return content headers: Content-Type,
- * Content-Disposition and Content-Transfer-Encoding
- *
- * @return string Plain text headers
- * @access public
- */
- function txtHeaders($xtra_headers = null, $overwrite = false, $skip_content = false)
- {
- $headers = $this->headers($xtra_headers, $overwrite, $skip_content);
-
- // Place Received: headers at the beginning of the message
- // Spam detectors often flag messages with it after the Subject: as spam
- if (isset($headers['Received'])) {
- $received = $headers['Received'];
- unset($headers['Received']);
- $headers = array('Received' => $received) + $headers;
- }
-
- $ret = '';
- $eol = $this->_build_params['eol'];
-
- foreach ($headers as $key => $val) {
- if (is_array($val)) {
- foreach ($val as $value) {
- $ret .= "$key: $value" . $eol;
- }
- } else {
- $ret .= "$key: $val" . $eol;
- }
- }
-
- return $ret;
- }
-
- /**
- * Sets message Content-Type header.
- * Use it to build messages with various content-types e.g. miltipart/raport
- * not supported by _contentHeaders() function.
- *
- * @param string $type Type name
- * @param array $params Hash array of header parameters
- *
- * @return void
- * @access public
- * @since 1.7.0
- */
- function setContentType($type, $params = array())
- {
- $header = $type;
-
- $eol = !empty($this->_build_params['eol'])
- ? $this->_build_params['eol'] : "\r\n";
-
- // add parameters
- $token_regexp = '#([^\x21\x23-\x27\x2A\x2B\x2D'
- . '\x2E\x30-\x39\x41-\x5A\x5E-\x7E])#';
- if (is_array($params)) {
- foreach ($params as $name => $value) {
- if ($name == 'boundary') {
- $this->_build_params['boundary'] = $value;
- }
- if (!preg_match($token_regexp, $value)) {
- $header .= ";$eol $name=$value";
- } else {
- $value = addcslashes($value, '\\"');
- $header .= ";$eol $name=\"$value\"";
- }
- }
- }
-
- // add required boundary parameter if not defined
- if (preg_match('/^multipart\//i', $type)) {
- if (empty($this->_build_params['boundary'])) {
- $this->_build_params['boundary'] = '=_' . md5(rand() . microtime());
- }
-
- $header .= ";$eol boundary=\"".$this->_build_params['boundary']."\"";
- }
-
- $this->_build_params['ctype'] = $header;
- }
-
- /**
- * Sets the Subject header
- *
- * @param string $subject String to set the subject to.
- *
- * @return void
- * @access public
- */
- function setSubject($subject)
- {
- $this->_headers['Subject'] = $subject;
- }
-
- /**
- * Set an email to the From (the sender) header
- *
- * @param string $email The email address to use
- *
- * @return void
- * @access public
- */
- function setFrom($email)
- {
- $this->_headers['From'] = $email;
- }
-
- /**
- * Add an email to the To header
- * (multiple calls to this method are allowed)
- *
- * @param string $email The email direction to add
- *
- * @return void
- * @access public
- */
- function addTo($email)
- {
- if (isset($this->_headers['To'])) {
- $this->_headers['To'] .= ", $email";
- } else {
- $this->_headers['To'] = $email;
- }
- }
-
- /**
- * Add an email to the Cc (carbon copy) header
- * (multiple calls to this method are allowed)
- *
- * @param string $email The email direction to add
- *
- * @return void
- * @access public
- */
- function addCc($email)
- {
- if (isset($this->_headers['Cc'])) {
- $this->_headers['Cc'] .= ", $email";
- } else {
- $this->_headers['Cc'] = $email;
- }
- }
-
- /**
- * Add an email to the Bcc (blank carbon copy) header
- * (multiple calls to this method are allowed)
- *
- * @param string $email The email direction to add
- *
- * @return void
- * @access public
- */
- function addBcc($email)
- {
- if (isset($this->_headers['Bcc'])) {
- $this->_headers['Bcc'] .= ", $email";
- } else {
- $this->_headers['Bcc'] = $email;
- }
- }
-
- /**
- * Since the PHP send function requires you to specify
- * recipients (To: header) separately from the other
- * headers, the To: header is not properly encoded.
- * To fix this, you can use this public method to
- * encode your recipients before sending to the send
- * function
- *
- * @param string $recipients A comma-delimited list of recipients
- *
- * @return string Encoded data
- * @access public
- */
- function encodeRecipients($recipients)
- {
- $input = array("To" => $recipients);
- $retval = $this->_encodeHeaders($input);
- return $retval["To"] ;
- }
-
- /**
- * Encodes headers as per RFC2047
- *
- * @param array $input The header data to encode
- * @param array $params Extra build parameters
- *
- * @return array Encoded data
- * @access private
- */
- function _encodeHeaders($input, $params = array())
- {
- $build_params = $this->_build_params;
- while (list($key, $value) = each($params)) {
- $build_params[$key] = $value;
- }
-
- foreach ($input as $hdr_name => $hdr_value) {
- if (is_array($hdr_value)) {
- foreach ($hdr_value as $idx => $value) {
- $input[$hdr_name][$idx] = $this->encodeHeader(
- $hdr_name, $value,
- $build_params['head_charset'], $build_params['head_encoding']
- );
- }
- } else {
- $input[$hdr_name] = $this->encodeHeader(
- $hdr_name, $hdr_value,
- $build_params['head_charset'], $build_params['head_encoding']
- );
- }
- }
-
- return $input;
- }
-
- /**
- * Encodes a header as per RFC2047
- *
- * @param string $name The header name
- * @param string $value The header data to encode
- * @param string $charset Character set name
- * @param string $encoding Encoding name (base64 or quoted-printable)
- *
- * @return string Encoded header data (without a name)
- * @access public
- * @since 1.5.3
- */
- function encodeHeader($name, $value, $charset, $encoding)
- {
- $mime_part = new Mail_mimePart;
- return $mime_part->encodeHeader(
- $name, $value, $charset, $encoding, $this->_build_params['eol']
- );
- }
-
- /**
- * Get file's basename (locale independent)
- *
- * @param string $filename Filename
- *
- * @return string Basename
- * @access private
- */
- function _basename($filename)
- {
- // basename() is not unicode safe and locale dependent
- if (stristr(PHP_OS, 'win') || stristr(PHP_OS, 'netware')) {
- return preg_replace('/^.*[\\\\\\/]/', '', $filename);
- } else {
- return preg_replace('/^.*[\/]/', '', $filename);
- }
- }
-
- /**
- * Get Content-Type and Content-Transfer-Encoding headers of the message
- *
- * @return array Headers array
- * @access private
- */
- function _contentHeaders()
- {
- $attachments = count($this->_parts) ? true : false;
- $html_images = count($this->_html_images) ? true : false;
- $html = strlen($this->_htmlbody) ? true : false;
- $text = (!$html && strlen($this->_txtbody)) ? true : false;
- $headers = array();
-
- // See get()
- switch (true) {
- case $text && !$attachments:
- $headers['Content-Type'] = 'text/plain';
- break;
-
- case !$text && !$html && $attachments:
- case $text && $attachments:
- case $html && $attachments && !$html_images:
- case $html && $attachments && $html_images:
- $headers['Content-Type'] = 'multipart/mixed';
- break;
-
- case $html && !$attachments && !$html_images && isset($this->_txtbody):
- case $html && !$attachments && $html_images && isset($this->_txtbody):
- $headers['Content-Type'] = 'multipart/alternative';
- break;
-
- case $html && !$attachments && !$html_images && !isset($this->_txtbody):
- $headers['Content-Type'] = 'text/html';
- break;
-
- case $html && !$attachments && $html_images && !isset($this->_txtbody):
- $headers['Content-Type'] = 'multipart/related';
- break;
-
- default:
- return $headers;
- }
-
- $this->_checkParams();
-
- $eol = !empty($this->_build_params['eol'])
- ? $this->_build_params['eol'] : "\r\n";
-
- if ($headers['Content-Type'] == 'text/plain') {
- // single-part message: add charset and encoding
- if ($this->_build_params['text_charset']) {
- $charset = 'charset=' . $this->_build_params['text_charset'];
- // place charset parameter in the same line, if possible
- // 26 = strlen("Content-Type: text/plain; ")
- $headers['Content-Type']
- .= (strlen($charset) + 26 <= 76) ? "; $charset" : ";$eol $charset";
- }
-
- $headers['Content-Transfer-Encoding']
- = $this->_build_params['text_encoding'];
- } else if ($headers['Content-Type'] == 'text/html') {
- // single-part message: add charset and encoding
- if ($this->_build_params['html_charset']) {
- $charset = 'charset=' . $this->_build_params['html_charset'];
- // place charset parameter in the same line, if possible
- $headers['Content-Type']
- .= (strlen($charset) + 25 <= 76) ? "; $charset" : ";$eol $charset";
- }
- $headers['Content-Transfer-Encoding']
- = $this->_build_params['html_encoding'];
- } else {
- // multipart message: and boundary
- if (!empty($this->_build_params['boundary'])) {
- $boundary = $this->_build_params['boundary'];
- } else if (!empty($this->_headers['Content-Type'])
- && preg_match('/boundary="([^"]+)"/', $this->_headers['Content-Type'], $m)
- ) {
- $boundary = $m[1];
- } else {
- $boundary = '=_' . md5(rand() . microtime());
- }
-
- $this->_build_params['boundary'] = $boundary;
- $headers['Content-Type'] .= ";$eol boundary=\"$boundary\"";
- }
-
- return $headers;
- }
-
- /**
- * Validate and set build parameters
- *
- * @return void
- * @access private
- */
- function _checkParams()
- {
- $encodings = array('7bit', '8bit', 'base64', 'quoted-printable');
-
- $this->_build_params['text_encoding']
- = strtolower($this->_build_params['text_encoding']);
- $this->_build_params['html_encoding']
- = strtolower($this->_build_params['html_encoding']);
-
- if (!in_array($this->_build_params['text_encoding'], $encodings)) {
- $this->_build_params['text_encoding'] = '7bit';
- }
- if (!in_array($this->_build_params['html_encoding'], $encodings)) {
- $this->_build_params['html_encoding'] = '7bit';
- }
-
- // text body
- if ($this->_build_params['text_encoding'] == '7bit'
- && !preg_match('/ascii/i', $this->_build_params['text_charset'])
- && preg_match('/[^\x00-\x7F]/', $this->_txtbody)
- ) {
- $this->_build_params['text_encoding'] = 'quoted-printable';
- }
- // html body
- if ($this->_build_params['html_encoding'] == '7bit'
- && !preg_match('/ascii/i', $this->_build_params['html_charset'])
- && preg_match('/[^\x00-\x7F]/', $this->_htmlbody)
- ) {
- $this->_build_params['html_encoding'] = 'quoted-printable';
- }
- }
-
- /**
- * PEAR::isError implementation
- *
- * @param mixed $data Object
- *
- * @return bool True if object is an instance of PEAR_Error
- * @access private
- */
- function _isError($data)
- {
- // PEAR::isError() is not PHP 5.4 compatible (see Bug #19473)
- if (is_object($data) && is_a($data, 'PEAR_Error')) {
- return true;
- }
-
- return false;
- }
-
- /**
- * PEAR::raiseError implementation
- *
- * @param $message A text error message
- *
- * @return PEAR_Error Instance of PEAR_Error
- * @access private
- */
- function _raiseError($message)
- {
- // PEAR::raiseError() is not PHP 5.4 compatible
- return new PEAR_Error($message);
- }
-
-} // End of class
diff --git a/program/lib/Mail/mimeDecode.php b/program/lib/Mail/mimeDecode.php
deleted file mode 100644
index 9f4589441..000000000
--- a/program/lib/Mail/mimeDecode.php
+++ /dev/null
@@ -1,1003 +0,0 @@
-<?php
-/**
- * The Mail_mimeDecode class is used to decode mail/mime messages
- *
- * This class will parse a raw mime email and return
- * the structure. Returned structure is similar to
- * that returned by imap_fetchstructure().
- *
- * +----------------------------- IMPORTANT ------------------------------+
- * | Usage of this class compared to native php extensions such as |
- * | mailparse or imap, is slow and may be feature deficient. If available|
- * | you are STRONGLY recommended to use the php extensions. |
- * +----------------------------------------------------------------------+
- *
- * Compatible with PHP versions 4 and 5
- *
- * LICENSE: This LICENSE is in the BSD license style.
- * Copyright (c) 2002-2003, Richard Heyes <richard@phpguru.org>
- * Copyright (c) 2003-2006, PEAR <pear-group@php.net>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or
- * without modification, are permitted provided that the following
- * conditions are met:
- *
- * - Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * - Neither the name of the authors, nor the names of its contributors
- * may be used to endorse or promote products derived from this
- * software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- *
- * @category Mail
- * @package Mail_Mime
- * @author Richard Heyes <richard@phpguru.org>
- * @author George Schlossnagle <george@omniti.com>
- * @author Cipriano Groenendal <cipri@php.net>
- * @author Sean Coates <sean@php.net>
- * @copyright 2003-2006 PEAR <pear-group@php.net>
- * @license http://www.opensource.org/licenses/bsd-license.php BSD License
- * @version CVS: $Id: mimeDecode.php 305875 2010-12-01 07:17:10Z alan_k $
- * @link http://pear.php.net/package/Mail_mime
- */
-
-
-/**
- * require PEAR
- *
- * This package depends on PEAR to raise errors.
- */
-require_once 'PEAR.php';
-
-
-/**
- * The Mail_mimeDecode class is used to decode mail/mime messages
- *
- * This class will parse a raw mime email and return the structure.
- * Returned structure is similar to that returned by imap_fetchstructure().
- *
- * +----------------------------- IMPORTANT ------------------------------+
- * | Usage of this class compared to native php extensions such as |
- * | mailparse or imap, is slow and may be feature deficient. If available|
- * | you are STRONGLY recommended to use the php extensions. |
- * +----------------------------------------------------------------------+
- *
- * @category Mail
- * @package Mail_Mime
- * @author Richard Heyes <richard@phpguru.org>
- * @author George Schlossnagle <george@omniti.com>
- * @author Cipriano Groenendal <cipri@php.net>
- * @author Sean Coates <sean@php.net>
- * @copyright 2003-2006 PEAR <pear-group@php.net>
- * @license http://www.opensource.org/licenses/bsd-license.php BSD License
- * @version Release: 1.5.5
- * @link http://pear.php.net/package/Mail_mime
- */
-class Mail_mimeDecode extends PEAR
-{
- /**
- * The raw email to decode
- *
- * @var string
- * @access private
- */
- var $_input;
-
- /**
- * The header part of the input
- *
- * @var string
- * @access private
- */
- var $_header;
-
- /**
- * The body part of the input
- *
- * @var string
- * @access private
- */
- var $_body;
-
- /**
- * If an error occurs, this is used to store the message
- *
- * @var string
- * @access private
- */
- var $_error;
-
- /**
- * Flag to determine whether to include bodies in the
- * returned object.
- *
- * @var boolean
- * @access private
- */
- var $_include_bodies;
-
- /**
- * Flag to determine whether to decode bodies
- *
- * @var boolean
- * @access private
- */
- var $_decode_bodies;
-
- /**
- * Flag to determine whether to decode headers
- *
- * @var boolean
- * @access private
- */
- var $_decode_headers;
-
- /**
- * Flag to determine whether to include attached messages
- * as body in the returned object. Depends on $_include_bodies
- *
- * @var boolean
- * @access private
- */
- var $_rfc822_bodies;
-
- /**
- * Constructor.
- *
- * Sets up the object, initialise the variables, and splits and
- * stores the header and body of the input.
- *
- * @param string The input to decode
- * @access public
- */
- function Mail_mimeDecode($input)
- {
- list($header, $body) = $this->_splitBodyHeader($input);
-
- $this->_input = $input;
- $this->_header = $header;
- $this->_body = $body;
- $this->_decode_bodies = false;
- $this->_include_bodies = true;
- $this->_rfc822_bodies = false;
- }
-
- /**
- * Begins the decoding process. If called statically
- * it will create an object and call the decode() method
- * of it.
- *
- * @param array An array of various parameters that determine
- * various things:
- * include_bodies - Whether to include the body in the returned
- * object.
- * decode_bodies - Whether to decode the bodies
- * of the parts. (Transfer encoding)
- * decode_headers - Whether to decode headers
- * input - If called statically, this will be treated
- * as the input
- * @return object Decoded results
- * @access public
- */
- function decode($params = null)
- {
- // determine if this method has been called statically
- $isStatic = empty($this) || !is_a($this, __CLASS__);
-
- // Have we been called statically?
- // If so, create an object and pass details to that.
- if ($isStatic AND isset($params['input'])) {
-
- $obj = new Mail_mimeDecode($params['input']);
- $structure = $obj->decode($params);
-
- // Called statically but no input
- } elseif ($isStatic) {
- return PEAR::raiseError('Called statically and no input given');
-
- // Called via an object
- } else {
- $this->_include_bodies = isset($params['include_bodies']) ?
- $params['include_bodies'] : false;
- $this->_decode_bodies = isset($params['decode_bodies']) ?
- $params['decode_bodies'] : false;
- $this->_decode_headers = isset($params['decode_headers']) ?
- $params['decode_headers'] : false;
- $this->_rfc822_bodies = isset($params['rfc_822bodies']) ?
- $params['rfc_822bodies'] : false;
-
- $structure = $this->_decode($this->_header, $this->_body);
- if ($structure === false) {
- $structure = $this->raiseError($this->_error);
- }
- }
-
- return $structure;
- }
-
- /**
- * Performs the decoding. Decodes the body string passed to it
- * If it finds certain content-types it will call itself in a
- * recursive fashion
- *
- * @param string Header section
- * @param string Body section
- * @return object Results of decoding process
- * @access private
- */
- function _decode($headers, $body, $default_ctype = 'text/plain')
- {
- $return = new stdClass;
- $return->headers = array();
- $headers = $this->_parseHeaders($headers);
-
- foreach ($headers as $value) {
- $value['value'] = $this->_decode_headers ? $this->_decodeHeader($value['value']) : $value['value'];
- if (isset($return->headers[strtolower($value['name'])]) AND !is_array($return->headers[strtolower($value['name'])])) {
- $return->headers[strtolower($value['name'])] = array($return->headers[strtolower($value['name'])]);
- $return->headers[strtolower($value['name'])][] = $value['value'];
-
- } elseif (isset($return->headers[strtolower($value['name'])])) {
- $return->headers[strtolower($value['name'])][] = $value['value'];
-
- } else {
- $return->headers[strtolower($value['name'])] = $value['value'];
- }
- }
-
-
- foreach ($headers as $key => $value) {
- $headers[$key]['name'] = strtolower($headers[$key]['name']);
- switch ($headers[$key]['name']) {
-
- case 'content-type':
- $content_type = $this->_parseHeaderValue($headers[$key]['value']);
-
- if (preg_match('/([0-9a-z+.-]+)\/([0-9a-z+.-]+)/i', $content_type['value'], $regs)) {
- $return->ctype_primary = $regs[1];
- $return->ctype_secondary = $regs[2];
- }
-
- if (isset($content_type['other'])) {
- foreach($content_type['other'] as $p_name => $p_value) {
- $return->ctype_parameters[$p_name] = $p_value;
- }
- }
- break;
-
- case 'content-disposition':
- $content_disposition = $this->_parseHeaderValue($headers[$key]['value']);
- $return->disposition = $content_disposition['value'];
- if (isset($content_disposition['other'])) {
- foreach($content_disposition['other'] as $p_name => $p_value) {
- $return->d_parameters[$p_name] = $p_value;
- }
- }
- break;
-
- case 'content-transfer-encoding':
- $content_transfer_encoding = $this->_parseHeaderValue($headers[$key]['value']);
- break;
- }
- }
-
- if (isset($content_type)) {
- switch (strtolower($content_type['value'])) {
- case 'text/plain':
- $encoding = isset($content_transfer_encoding) ? $content_transfer_encoding['value'] : '7bit';
- $this->_include_bodies ? $return->body = ($this->_decode_bodies ? $this->_decodeBody($body, $encoding) : $body) : null;
- break;
-
- case 'text/html':
- $encoding = isset($content_transfer_encoding) ? $content_transfer_encoding['value'] : '7bit';
- $this->_include_bodies ? $return->body = ($this->_decode_bodies ? $this->_decodeBody($body, $encoding) : $body) : null;
- break;
-
- case 'multipart/parallel':
- case 'multipart/appledouble': // Appledouble mail
- case 'multipart/report': // RFC1892
- case 'multipart/signed': // PGP
- case 'multipart/digest':
- case 'multipart/alternative':
- case 'multipart/related':
- case 'multipart/mixed':
- case 'application/vnd.wap.multipart.related':
- if(!isset($content_type['other']['boundary'])){
- $this->_error = 'No boundary found for ' . $content_type['value'] . ' part';
- return false;
- }
-
- $default_ctype = (strtolower($content_type['value']) === 'multipart/digest') ? 'message/rfc822' : 'text/plain';
-
- $parts = $this->_boundarySplit($body, $content_type['other']['boundary']);
- for ($i = 0; $i < count($parts); $i++) {
- list($part_header, $part_body) = $this->_splitBodyHeader($parts[$i]);
- $part = $this->_decode($part_header, $part_body, $default_ctype);
- if($part === false)
- $part = $this->raiseError($this->_error);
- $return->parts[] = $part;
- }
- break;
-
- case 'message/rfc822':
- if ($this->_rfc822_bodies) {
- $encoding = isset($content_transfer_encoding) ? $content_transfer_encoding['value'] : '7bit';
- $return->body = ($this->_decode_bodies ? $this->_decodeBody($body, $encoding) : $body);
- }
- $obj = new Mail_mimeDecode($body);
- $return->parts[] = $obj->decode(array('include_bodies' => $this->_include_bodies,
- 'decode_bodies' => $this->_decode_bodies,
- 'decode_headers' => $this->_decode_headers));
- unset($obj);
- break;
-
- default:
- if(!isset($content_transfer_encoding['value']))
- $content_transfer_encoding['value'] = '7bit';
- $this->_include_bodies ? $return->body = ($this->_decode_bodies ? $this->_decodeBody($body, $content_transfer_encoding['value']) : $body) : null;
- break;
- }
-
- } else {
- $ctype = explode('/', $default_ctype);
- $return->ctype_primary = $ctype[0];
- $return->ctype_secondary = $ctype[1];
- $this->_include_bodies ? $return->body = ($this->_decode_bodies ? $this->_decodeBody($body) : $body) : null;
- }
-
- return $return;
- }
-
- /**
- * Given the output of the above function, this will return an
- * array of references to the parts, indexed by mime number.
- *
- * @param object $structure The structure to go through
- * @param string $mime_number Internal use only.
- * @return array Mime numbers
- */
- function &getMimeNumbers(&$structure, $no_refs = false, $mime_number = '', $prepend = '')
- {
- $return = array();
- if (!empty($structure->parts)) {
- if ($mime_number != '') {
- $structure->mime_id = $prepend . $mime_number;
- $return[$prepend . $mime_number] = &$structure;
- }
- for ($i = 0; $i < count($structure->parts); $i++) {
-
-
- if (!empty($structure->headers['content-type']) AND substr(strtolower($structure->headers['content-type']), 0, 8) == 'message/') {
- $prepend = $prepend . $mime_number . '.';
- $_mime_number = '';
- } else {
- $_mime_number = ($mime_number == '' ? $i + 1 : sprintf('%s.%s', $mime_number, $i + 1));
- }
-
- $arr = &Mail_mimeDecode::getMimeNumbers($structure->parts[$i], $no_refs, $_mime_number, $prepend);
- foreach ($arr as $key => $val) {
- $no_refs ? $return[$key] = '' : $return[$key] = &$arr[$key];
- }
- }
- } else {
- if ($mime_number == '') {
- $mime_number = '1';
- }
- $structure->mime_id = $prepend . $mime_number;
- $no_refs ? $return[$prepend . $mime_number] = '' : $return[$prepend . $mime_number] = &$structure;
- }
-
- return $return;
- }
-
- /**
- * Given a string containing a header and body
- * section, this function will split them (at the first
- * blank line) and return them.
- *
- * @param string Input to split apart
- * @return array Contains header and body section
- * @access private
- */
- function _splitBodyHeader($input)
- {
- if (preg_match("/^(.*?)\r?\n\r?\n(.*)/s", $input, $match)) {
- return array($match[1], $match[2]);
- }
- // bug #17325 - empty bodies are allowed. - we just check that at least one line
- // of headers exist..
- if (count(explode("\n",$input))) {
- return array($input, '');
- }
- $this->_error = 'Could not split header and body';
- return false;
- }
-
- /**
- * Parse headers given in $input and return
- * as assoc array.
- *
- * @param string Headers to parse
- * @return array Contains parsed headers
- * @access private
- */
- function _parseHeaders($input)
- {
-
- if ($input !== '') {
- // Unfold the input
- $input = preg_replace("/\r?\n/", "\r\n", $input);
- //#7065 - wrapping.. with encoded stuff.. - probably not needed,
- // wrapping space should only get removed if the trailing item on previous line is a
- // encoded character
- $input = preg_replace("/=\r\n(\t| )+/", '=', $input);
- $input = preg_replace("/\r\n(\t| )+/", ' ', $input);
-
- $headers = explode("\r\n", trim($input));
-
- foreach ($headers as $value) {
- $hdr_name = substr($value, 0, $pos = strpos($value, ':'));
- $hdr_value = substr($value, $pos+1);
- if($hdr_value[0] == ' ')
- $hdr_value = substr($hdr_value, 1);
-
- $return[] = array(
- 'name' => $hdr_name,
- 'value' => $hdr_value
- );
- }
- } else {
- $return = array();
- }
-
- return $return;
- }
-
- /**
- * Function to parse a header value,
- * extract first part, and any secondary
- * parts (after ;) This function is not as
- * robust as it could be. Eg. header comments
- * in the wrong place will probably break it.
- *
- * @param string Header value to parse
- * @return array Contains parsed result
- * @access private
- */
- function _parseHeaderValue($input)
- {
-
- if (($pos = strpos($input, ';')) === false) {
- $input = $this->_decode_headers ? $this->_decodeHeader($input) : $input;
- $return['value'] = trim($input);
- return $return;
- }
-
-
-
- $value = substr($input, 0, $pos);
- $value = $this->_decode_headers ? $this->_decodeHeader($value) : $value;
- $return['value'] = trim($value);
- $input = trim(substr($input, $pos+1));
-
- if (!strlen($input) > 0) {
- return $return;
- }
- // at this point input contains xxxx=".....";zzzz="...."
- // since we are dealing with quoted strings, we need to handle this properly..
- $i = 0;
- $l = strlen($input);
- $key = '';
- $val = false; // our string - including quotes..
- $q = false; // in quote..
- $lq = ''; // last quote..
-
- while ($i < $l) {
-
- $c = $input[$i];
- //var_dump(array('i'=>$i,'c'=>$c,'q'=>$q, 'lq'=>$lq, 'key'=>$key, 'val' =>$val));
-
- $escaped = false;
- if ($c == '\\') {
- $i++;
- if ($i == $l-1) { // end of string.
- break;
- }
- $escaped = true;
- $c = $input[$i];
- }
-
-
- // state - in key..
- if ($val === false) {
- if (!$escaped && $c == '=') {
- $val = '';
- $key = trim($key);
- $i++;
- continue;
- }
- if (!$escaped && $c == ';') {
- if ($key) { // a key without a value..
- $key= trim($key);
- $return['other'][$key] = '';
- $return['other'][strtolower($key)] = '';
- }
- $key = '';
- }
- $key .= $c;
- $i++;
- continue;
- }
-
- // state - in value.. (as $val is set..)
-
- if ($q === false) {
- // not in quote yet.
- if ((!strlen($val) || $lq !== false) && $c == ' ' || $c == "\t") {
- $i++;
- continue; // skip leading spaces after '=' or after '"'
- }
- if (!$escaped && ($c == '"' || $c == "'")) {
- // start quoted area..
- $q = $c;
- // in theory should not happen raw text in value part..
- // but we will handle it as a merged part of the string..
- $val = !strlen(trim($val)) ? '' : trim($val);
- $i++;
- continue;
- }
- // got end....
- if (!$escaped && $c == ';') {
-
- $val = trim($val);
- $added = false;
- if (preg_match('/\*[0-9]+$/', $key)) {
- // this is the extended aaa*0=...;aaa*1=.... code
- // it assumes the pieces arrive in order, and are valid...
- $key = preg_replace('/\*[0-9]+$/', '', $key);
- if (isset($return['other'][$key])) {
- $return['other'][$key] .= $val;
- if (strtolower($key) != $key) {
- $return['other'][strtolower($key)] .= $val;
- }
- $added = true;
- }
- // continue and use standard setters..
- }
- if (!$added) {
- $return['other'][$key] = $val;
- $return['other'][strtolower($key)] = $val;
- }
- $val = false;
- $key = '';
- $lq = false;
- $i++;
- continue;
- }
-
- $val .= $c;
- $i++;
- continue;
- }
-
- // state - in quote..
- if (!$escaped && $c == $q) { // potential exit state..
-
- // end of quoted string..
- $lq = $q;
- $q = false;
- $i++;
- continue;
- }
-
- // normal char inside of quoted string..
- $val.= $c;
- $i++;
- }
-
- // do we have anything left..
- if (strlen(trim($key)) || $val !== false) {
-
- $val = trim($val);
- $added = false;
- if ($val !== false && preg_match('/\*[0-9]+$/', $key)) {
- // no dupes due to our crazy regexp.
- $key = preg_replace('/\*[0-9]+$/', '', $key);
- if (isset($return['other'][$key])) {
- $return['other'][$key] .= $val;
- if (strtolower($key) != $key) {
- $return['other'][strtolower($key)] .= $val;
- }
- $added = true;
- }
- // continue and use standard setters..
- }
- if (!$added) {
- $return['other'][$key] = $val;
- $return['other'][strtolower($key)] = $val;
- }
- }
- // decode values.
- foreach($return['other'] as $key =>$val) {
- $return['other'][$key] = $this->_decode_headers ? $this->_decodeHeader($val) : $val;
- }
- //print_r($return);
- return $return;
- }
-
- /**
- * This function splits the input based
- * on the given boundary
- *
- * @param string Input to parse
- * @return array Contains array of resulting mime parts
- * @access private
- */
- function _boundarySplit($input, $boundary)
- {
- $parts = array();
-
- $bs_possible = substr($boundary, 2, -2);
- $bs_check = '\"' . $bs_possible . '\"';
-
- if ($boundary == $bs_check) {
- $boundary = $bs_possible;
- }
- $tmp = preg_split("/--".preg_quote($boundary, '/')."((?=\s)|--)/", $input);
-
- $len = count($tmp) -1;
- for ($i = 1; $i < $len; $i++) {
- if (strlen(trim($tmp[$i]))) {
- $parts[] = $tmp[$i];
- }
- }
-
- // add the last part on if it does not end with the 'closing indicator'
- if (!empty($tmp[$len]) && strlen(trim($tmp[$len])) && $tmp[$len][0] != '-') {
- $parts[] = $tmp[$len];
- }
- return $parts;
- }
-
- /**
- * Given a header, this function will decode it
- * according to RFC2047. Probably not *exactly*
- * conformant, but it does pass all the given
- * examples (in RFC2047).
- *
- * @param string Input header value to decode
- * @return string Decoded header value
- * @access private
- */
- function _decodeHeader($input)
- {
- // Remove white space between encoded-words
- $input = preg_replace('/(=\?[^?]+\?(q|b)\?[^?]*\?=)(\s)+=\?/i', '\1=?', $input);
-
- // For each encoded-word...
- while (preg_match('/(=\?([^?]+)\?(q|b)\?([^?]*)\?=)/i', $input, $matches)) {
-
- $encoded = $matches[1];
- $charset = $matches[2];
- $encoding = $matches[3];
- $text = $matches[4];
-
- switch (strtolower($encoding)) {
- case 'b':
- $text = base64_decode($text);
- break;
-
- case 'q':
- $text = str_replace('_', ' ', $text);
- preg_match_all('/=([a-f0-9]{2})/i', $text, $matches);
- foreach($matches[1] as $value)
- $text = str_replace('='.$value, chr(hexdec($value)), $text);
- break;
- }
-
- $input = str_replace($encoded, $text, $input);
- }
-
- return $input;
- }
-
- /**
- * Given a body string and an encoding type,
- * this function will decode and return it.
- *
- * @param string Input body to decode
- * @param string Encoding type to use.
- * @return string Decoded body
- * @access private
- */
- function _decodeBody($input, $encoding = '7bit')
- {
- switch (strtolower($encoding)) {
- case '7bit':
- return $input;
- break;
-
- case 'quoted-printable':
- return $this->_quotedPrintableDecode($input);
- break;
-
- case 'base64':
- return base64_decode($input);
- break;
-
- default:
- return $input;
- }
- }
-
- /**
- * Given a quoted-printable string, this
- * function will decode and return it.
- *
- * @param string Input body to decode
- * @return string Decoded body
- * @access private
- */
- function _quotedPrintableDecode($input)
- {
- // Remove soft line breaks
- $input = preg_replace("/=\r?\n/", '', $input);
-
- // Replace encoded characters
- $input = preg_replace('/=([a-f0-9]{2})/ie', "chr(hexdec('\\1'))", $input);
-
- return $input;
- }
-
- /**
- * Checks the input for uuencoded files and returns
- * an array of them. Can be called statically, eg:
- *
- * $files =& Mail_mimeDecode::uudecode($some_text);
- *
- * It will check for the begin 666 ... end syntax
- * however and won't just blindly decode whatever you
- * pass it.
- *
- * @param string Input body to look for attahcments in
- * @return array Decoded bodies, filenames and permissions
- * @access public
- * @author Unknown
- */
- function &uudecode($input)
- {
- // Find all uuencoded sections
- preg_match_all("/begin ([0-7]{3}) (.+)\r?\n(.+)\r?\nend/Us", $input, $matches);
-
- for ($j = 0; $j < count($matches[3]); $j++) {
-
- $str = $matches[3][$j];
- $filename = $matches[2][$j];
- $fileperm = $matches[1][$j];
-
- $file = '';
- $str = preg_split("/\r?\n/", trim($str));
- $strlen = count($str);
-
- for ($i = 0; $i < $strlen; $i++) {
- $pos = 1;
- $d = 0;
- $len=(int)(((ord(substr($str[$i],0,1)) -32) - ' ') & 077);
-
- while (($d + 3 <= $len) AND ($pos + 4 <= strlen($str[$i]))) {
- $c0 = (ord(substr($str[$i],$pos,1)) ^ 0x20);
- $c1 = (ord(substr($str[$i],$pos+1,1)) ^ 0x20);
- $c2 = (ord(substr($str[$i],$pos+2,1)) ^ 0x20);
- $c3 = (ord(substr($str[$i],$pos+3,1)) ^ 0x20);
- $file .= chr(((($c0 - ' ') & 077) << 2) | ((($c1 - ' ') & 077) >> 4));
-
- $file .= chr(((($c1 - ' ') & 077) << 4) | ((($c2 - ' ') & 077) >> 2));
-
- $file .= chr(((($c2 - ' ') & 077) << 6) | (($c3 - ' ') & 077));
-
- $pos += 4;
- $d += 3;
- }
-
- if (($d + 2 <= $len) && ($pos + 3 <= strlen($str[$i]))) {
- $c0 = (ord(substr($str[$i],$pos,1)) ^ 0x20);
- $c1 = (ord(substr($str[$i],$pos+1,1)) ^ 0x20);
- $c2 = (ord(substr($str[$i],$pos+2,1)) ^ 0x20);
- $file .= chr(((($c0 - ' ') & 077) << 2) | ((($c1 - ' ') & 077) >> 4));
-
- $file .= chr(((($c1 - ' ') & 077) << 4) | ((($c2 - ' ') & 077) >> 2));
-
- $pos += 3;
- $d += 2;
- }
-
- if (($d + 1 <= $len) && ($pos + 2 <= strlen($str[$i]))) {
- $c0 = (ord(substr($str[$i],$pos,1)) ^ 0x20);
- $c1 = (ord(substr($str[$i],$pos+1,1)) ^ 0x20);
- $file .= chr(((($c0 - ' ') & 077) << 2) | ((($c1 - ' ') & 077) >> 4));
-
- }
- }
- $files[] = array('filename' => $filename, 'fileperm' => $fileperm, 'filedata' => $file);
- }
-
- return $files;
- }
-
- /**
- * getSendArray() returns the arguments required for Mail::send()
- * used to build the arguments for a mail::send() call
- *
- * Usage:
- * $mailtext = Full email (for example generated by a template)
- * $decoder = new Mail_mimeDecode($mailtext);
- * $parts = $decoder->getSendArray();
- * if (!PEAR::isError($parts) {
- * list($recipents,$headers,$body) = $parts;
- * $mail = Mail::factory('smtp');
- * $mail->send($recipents,$headers,$body);
- * } else {
- * echo $parts->message;
- * }
- * @return mixed array of recipeint, headers,body or Pear_Error
- * @access public
- * @author Alan Knowles <alan@akbkhome.com>
- */
- function getSendArray()
- {
- // prevent warning if this is not set
- $this->_decode_headers = FALSE;
- $headerlist =$this->_parseHeaders($this->_header);
- $to = "";
- if (!$headerlist) {
- return $this->raiseError("Message did not contain headers");
- }
- foreach($headerlist as $item) {
- $header[$item['name']] = $item['value'];
- switch (strtolower($item['name'])) {
- case "to":
- case "cc":
- case "bcc":
- $to .= ",".$item['value'];
- default:
- break;
- }
- }
- if ($to == "") {
- return $this->raiseError("Message did not contain any recipents");
- }
- $to = substr($to,1);
- return array($to,$header,$this->_body);
- }
-
- /**
- * Returns a xml copy of the output of
- * Mail_mimeDecode::decode. Pass the output in as the
- * argument. This function can be called statically. Eg:
- *
- * $output = $obj->decode();
- * $xml = Mail_mimeDecode::getXML($output);
- *
- * The DTD used for this should have been in the package. Or
- * alternatively you can get it from cvs, or here:
- * http://www.phpguru.org/xmail/xmail.dtd.
- *
- * @param object Input to convert to xml. This should be the
- * output of the Mail_mimeDecode::decode function
- * @return string XML version of input
- * @access public
- */
- function getXML($input)
- {
- $crlf = "\r\n";
- $output = '<?xml version=\'1.0\'?>' . $crlf .
- '<!DOCTYPE email SYSTEM "http://www.phpguru.org/xmail/xmail.dtd">' . $crlf .
- '<email>' . $crlf .
- Mail_mimeDecode::_getXML($input) .
- '</email>';
-
- return $output;
- }
-
- /**
- * Function that does the actual conversion to xml. Does a single
- * mimepart at a time.
- *
- * @param object Input to convert to xml. This is a mimepart object.
- * It may or may not contain subparts.
- * @param integer Number of tabs to indent
- * @return string XML version of input
- * @access private
- */
- function _getXML($input, $indent = 1)
- {
- $htab = "\t";
- $crlf = "\r\n";
- $output = '';
- $headers = @(array)$input->headers;
-
- foreach ($headers as $hdr_name => $hdr_value) {
-
- // Multiple headers with this name
- if (is_array($headers[$hdr_name])) {
- for ($i = 0; $i < count($hdr_value); $i++) {
- $output .= Mail_mimeDecode::_getXML_helper($hdr_name, $hdr_value[$i], $indent);
- }
-
- // Only one header of this sort
- } else {
- $output .= Mail_mimeDecode::_getXML_helper($hdr_name, $hdr_value, $indent);
- }
- }
-
- if (!empty($input->parts)) {
- for ($i = 0; $i < count($input->parts); $i++) {
- $output .= $crlf . str_repeat($htab, $indent) . '<mimepart>' . $crlf .
- Mail_mimeDecode::_getXML($input->parts[$i], $indent+1) .
- str_repeat($htab, $indent) . '</mimepart>' . $crlf;
- }
- } elseif (isset($input->body)) {
- $output .= $crlf . str_repeat($htab, $indent) . '<body><![CDATA[' .
- $input->body . ']]></body>' . $crlf;
- }
-
- return $output;
- }
-
- /**
- * Helper function to _getXML(). Returns xml of a header.
- *
- * @param string Name of header
- * @param string Value of header
- * @param integer Number of tabs to indent
- * @return string XML version of input
- * @access private
- */
- function _getXML_helper($hdr_name, $hdr_value, $indent)
- {
- $htab = "\t";
- $crlf = "\r\n";
- $return = '';
-
- $new_hdr_value = ($hdr_name != 'received') ? Mail_mimeDecode::_parseHeaderValue($hdr_value) : array('value' => $hdr_value);
- $new_hdr_name = str_replace(' ', '-', ucwords(str_replace('-', ' ', $hdr_name)));
-
- // Sort out any parameters
- if (!empty($new_hdr_value['other'])) {
- foreach ($new_hdr_value['other'] as $paramname => $paramvalue) {
- $params[] = str_repeat($htab, $indent) . $htab . '<parameter>' . $crlf .
- str_repeat($htab, $indent) . $htab . $htab . '<paramname>' . htmlspecialchars($paramname) . '</paramname>' . $crlf .
- str_repeat($htab, $indent) . $htab . $htab . '<paramvalue>' . htmlspecialchars($paramvalue) . '</paramvalue>' . $crlf .
- str_repeat($htab, $indent) . $htab . '</parameter>' . $crlf;
- }
-
- $params = implode('', $params);
- } else {
- $params = '';
- }
-
- $return = str_repeat($htab, $indent) . '<header>' . $crlf .
- str_repeat($htab, $indent) . $htab . '<headername>' . htmlspecialchars($new_hdr_name) . '</headername>' . $crlf .
- str_repeat($htab, $indent) . $htab . '<headervalue>' . htmlspecialchars($new_hdr_value['value']) . '</headervalue>' . $crlf .
- $params .
- str_repeat($htab, $indent) . '</header>' . $crlf;
-
- return $return;
- }
-
-} // End of class
diff --git a/program/lib/Mail/mimePart.php b/program/lib/Mail/mimePart.php
deleted file mode 100644
index 93e891bc6..000000000
--- a/program/lib/Mail/mimePart.php
+++ /dev/null
@@ -1,1260 +0,0 @@
-<?php
-/**
- * The Mail_mimePart class is used to create MIME E-mail messages
- *
- * This class enables you to manipulate and build a mime email
- * from the ground up. The Mail_Mime class is a userfriendly api
- * to this class for people who aren't interested in the internals
- * of mime mail.
- * This class however allows full control over the email.
- *
- * Compatible with PHP versions 4 and 5
- *
- * LICENSE: This LICENSE is in the BSD license style.
- * Copyright (c) 2002-2003, Richard Heyes <richard@phpguru.org>
- * Copyright (c) 2003-2006, PEAR <pear-group@php.net>
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or
- * without modification, are permitted provided that the following
- * conditions are met:
- *
- * - Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * - Neither the name of the authors, nor the names of its contributors
- * may be used to endorse or promote products derived from this
- * software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- *
- * @category Mail
- * @package Mail_Mime
- * @author Richard Heyes <richard@phpguru.org>
- * @author Cipriano Groenendal <cipri@php.net>
- * @author Sean Coates <sean@php.net>
- * @author Aleksander Machniak <alec@php.net>
- * @copyright 2003-2006 PEAR <pear-group@php.net>
- * @license http://www.opensource.org/licenses/bsd-license.php BSD License
- * @version CVS: $Id$
- * @link http://pear.php.net/package/Mail_mime
- */
-
-
-/**
- * The Mail_mimePart class is used to create MIME E-mail messages
- *
- * This class enables you to manipulate and build a mime email
- * from the ground up. The Mail_Mime class is a userfriendly api
- * to this class for people who aren't interested in the internals
- * of mime mail.
- * This class however allows full control over the email.
- *
- * @category Mail
- * @package Mail_Mime
- * @author Richard Heyes <richard@phpguru.org>
- * @author Cipriano Groenendal <cipri@php.net>
- * @author Sean Coates <sean@php.net>
- * @author Aleksander Machniak <alec@php.net>
- * @copyright 2003-2006 PEAR <pear-group@php.net>
- * @license http://www.opensource.org/licenses/bsd-license.php BSD License
- * @version Release: @package_version@
- * @link http://pear.php.net/package/Mail_mime
- */
-class Mail_mimePart
-{
- /**
- * The encoding type of this part
- *
- * @var string
- * @access private
- */
- var $_encoding;
-
- /**
- * An array of subparts
- *
- * @var array
- * @access private
- */
- var $_subparts;
-
- /**
- * The output of this part after being built
- *
- * @var string
- * @access private
- */
- var $_encoded;
-
- /**
- * Headers for this part
- *
- * @var array
- * @access private
- */
- var $_headers;
-
- /**
- * The body of this part (not encoded)
- *
- * @var string
- * @access private
- */
- var $_body;
-
- /**
- * The location of file with body of this part (not encoded)
- *
- * @var string
- * @access private
- */
- var $_body_file;
-
- /**
- * The end-of-line sequence
- *
- * @var string
- * @access private
- */
- var $_eol = "\r\n";
-
-
- /**
- * Constructor.
- *
- * Sets up the object.
- *
- * @param string $body The body of the mime part if any.
- * @param array $params An associative array of optional parameters:
- * content_type - The content type for this part eg multipart/mixed
- * encoding - The encoding to use, 7bit, 8bit,
- * base64, or quoted-printable
- * charset - Content character set
- * cid - Content ID to apply
- * disposition - Content disposition, inline or attachment
- * filename - Filename parameter for content disposition
- * description - Content description
- * name_encoding - Encoding of the attachment name (Content-Type)
- * By default filenames are encoded using RFC2231
- * Here you can set RFC2047 encoding (quoted-printable
- * or base64) instead
- * filename_encoding - Encoding of the attachment filename (Content-Disposition)
- * See 'name_encoding'
- * headers_charset - Charset of the headers e.g. filename, description.
- * If not set, 'charset' will be used
- * eol - End of line sequence. Default: "\r\n"
- * headers - Hash array with additional part headers. Array keys can be
- * in form of <header_name>:<parameter_name>
- * body_file - Location of file with part's body (instead of $body)
- *
- * @access public
- */
- function Mail_mimePart($body = '', $params = array())
- {
- if (!empty($params['eol'])) {
- $this->_eol = $params['eol'];
- } else if (defined('MAIL_MIMEPART_CRLF')) { // backward-copat.
- $this->_eol = MAIL_MIMEPART_CRLF;
- }
-
- // Additional part headers
- if (!empty($params['headers']) && is_array($params['headers'])) {
- $headers = $params['headers'];
- }
-
- foreach ($params as $key => $value) {
- switch ($key) {
- case 'encoding':
- $this->_encoding = $value;
- $headers['Content-Transfer-Encoding'] = $value;
- break;
-
- case 'cid':
- $headers['Content-ID'] = '<' . $value . '>';
- break;
-
- case 'location':
- $headers['Content-Location'] = $value;
- break;
-
- case 'body_file':
- $this->_body_file = $value;
- break;
-
- // for backward compatibility
- case 'dfilename':
- $params['filename'] = $value;
- break;
- }
- }
-
- // Default content-type
- if (empty($params['content_type'])) {
- $params['content_type'] = 'text/plain';
- }
-
- // Content-Type
- $headers['Content-Type'] = $params['content_type'];
- if (!empty($params['charset'])) {
- $charset = "charset={$params['charset']}";
- // place charset parameter in the same line, if possible
- if ((strlen($headers['Content-Type']) + strlen($charset) + 16) <= 76) {
- $headers['Content-Type'] .= '; ';
- } else {
- $headers['Content-Type'] .= ';' . $this->_eol . ' ';
- }
- $headers['Content-Type'] .= $charset;
-
- // Default headers charset
- if (!isset($params['headers_charset'])) {
- $params['headers_charset'] = $params['charset'];
- }
- }
-
- // header values encoding parameters
- $h_charset = !empty($params['headers_charset']) ? $params['headers_charset'] : 'US-ASCII';
- $h_language = !empty($params['language']) ? $params['language'] : null;
- $h_encoding = !empty($params['name_encoding']) ? $params['name_encoding'] : null;
-
-
- if (!empty($params['filename'])) {
- $headers['Content-Type'] .= ';' . $this->_eol;
- $headers['Content-Type'] .= $this->_buildHeaderParam(
- 'name', $params['filename'], $h_charset, $h_language, $h_encoding
- );
- }
-
- // Content-Disposition
- if (!empty($params['disposition'])) {
- $headers['Content-Disposition'] = $params['disposition'];
- if (!empty($params['filename'])) {
- $headers['Content-Disposition'] .= ';' . $this->_eol;
- $headers['Content-Disposition'] .= $this->_buildHeaderParam(
- 'filename', $params['filename'], $h_charset, $h_language,
- !empty($params['filename_encoding']) ? $params['filename_encoding'] : null
- );
- }
-
- // add attachment size
- $size = $this->_body_file ? filesize($this->_body_file) : strlen($body);
- if ($size) {
- $headers['Content-Disposition'] .= ';' . $this->_eol . ' size=' . $size;
- }
- }
-
- if (!empty($params['description'])) {
- $headers['Content-Description'] = $this->encodeHeader(
- 'Content-Description', $params['description'], $h_charset, $h_encoding,
- $this->_eol
- );
- }
-
- // Search and add existing headers' parameters
- foreach ($headers as $key => $value) {
- $items = explode(':', $key);
- if (count($items) == 2) {
- $header = $items[0];
- $param = $items[1];
- if (isset($headers[$header])) {
- $headers[$header] .= ';' . $this->_eol;
- }
- $headers[$header] .= $this->_buildHeaderParam(
- $param, $value, $h_charset, $h_language, $h_encoding
- );
- unset($headers[$key]);
- }
- }
-
- // Default encoding
- if (!isset($this->_encoding)) {
- $this->_encoding = '7bit';
- }
-
- // Assign stuff to member variables
- $this->_encoded = array();
- $this->_headers = $headers;
- $this->_body = $body;
- }
-
- /**
- * Encodes and returns the email. Also stores
- * it in the encoded member variable
- *
- * @param string $boundary Pre-defined boundary string
- *
- * @return An associative array containing two elements,
- * body and headers. The headers element is itself
- * an indexed array. On error returns PEAR error object.
- * @access public
- */
- function encode($boundary=null)
- {
- $encoded =& $this->_encoded;
-
- if (count($this->_subparts)) {
- $boundary = $boundary ? $boundary : '=_' . md5(rand() . microtime());
- $eol = $this->_eol;
-
- $this->_headers['Content-Type'] .= ";$eol boundary=\"$boundary\"";
-
- $encoded['body'] = '';
-
- for ($i = 0; $i < count($this->_subparts); $i++) {
- $encoded['body'] .= '--' . $boundary . $eol;
- $tmp = $this->_subparts[$i]->encode();
- if ($this->_isError($tmp)) {
- return $tmp;
- }
- foreach ($tmp['headers'] as $key => $value) {
- $encoded['body'] .= $key . ': ' . $value . $eol;
- }
- $encoded['body'] .= $eol . $tmp['body'] . $eol;
- }
-
- $encoded['body'] .= '--' . $boundary . '--' . $eol;
-
- } else if ($this->_body) {
- $encoded['body'] = $this->_getEncodedData($this->_body, $this->_encoding);
- } else if ($this->_body_file) {
- // Temporarily reset magic_quotes_runtime for file reads and writes
- if ($magic_quote_setting = get_magic_quotes_runtime()) {
- @ini_set('magic_quotes_runtime', 0);
- }
- $body = $this->_getEncodedDataFromFile($this->_body_file, $this->_encoding);
- if ($magic_quote_setting) {
- @ini_set('magic_quotes_runtime', $magic_quote_setting);
- }
-
- if ($this->_isError($body)) {
- return $body;
- }
- $encoded['body'] = $body;
- } else {
- $encoded['body'] = '';
- }
-
- // Add headers to $encoded
- $encoded['headers'] =& $this->_headers;
-
- return $encoded;
- }
-
- /**
- * Encodes and saves the email into file. File must exist.
- * Data will be appended to the file.
- *
- * @param string $filename Output file location
- * @param string $boundary Pre-defined boundary string
- * @param boolean $skip_head True if you don't want to save headers
- *
- * @return array An associative array containing message headers
- * or PEAR error object
- * @access public
- * @since 1.6.0
- */
- function encodeToFile($filename, $boundary=null, $skip_head=false)
- {
- if (file_exists($filename) && !is_writable($filename)) {
- $err = $this->_raiseError('File is not writeable: ' . $filename);
- return $err;
- }
-
- if (!($fh = fopen($filename, 'ab'))) {
- $err = $this->_raiseError('Unable to open file: ' . $filename);
- return $err;
- }
-
- // Temporarily reset magic_quotes_runtime for file reads and writes
- if ($magic_quote_setting = get_magic_quotes_runtime()) {
- @ini_set('magic_quotes_runtime', 0);
- }
-
- $res = $this->_encodePartToFile($fh, $boundary, $skip_head);
-
- fclose($fh);
-
- if ($magic_quote_setting) {
- @ini_set('magic_quotes_runtime', $magic_quote_setting);
- }
-
- return $this->_isError($res) ? $res : $this->_headers;
- }
-
- /**
- * Encodes given email part into file
- *
- * @param string $fh Output file handle
- * @param string $boundary Pre-defined boundary string
- * @param boolean $skip_head True if you don't want to save headers
- *
- * @return array True on sucess or PEAR error object
- * @access private
- */
- function _encodePartToFile($fh, $boundary=null, $skip_head=false)
- {
- $eol = $this->_eol;
-
- if (count($this->_subparts)) {
- $boundary = $boundary ? $boundary : '=_' . md5(rand() . microtime());
- $this->_headers['Content-Type'] .= ";$eol boundary=\"$boundary\"";
- }
-
- if (!$skip_head) {
- foreach ($this->_headers as $key => $value) {
- fwrite($fh, $key . ': ' . $value . $eol);
- }
- $f_eol = $eol;
- } else {
- $f_eol = '';
- }
-
- if (count($this->_subparts)) {
- for ($i = 0; $i < count($this->_subparts); $i++) {
- fwrite($fh, $f_eol . '--' . $boundary . $eol);
- $res = $this->_subparts[$i]->_encodePartToFile($fh);
- if ($this->_isError($res)) {
- return $res;
- }
- $f_eol = $eol;
- }
-
- fwrite($fh, $eol . '--' . $boundary . '--' . $eol);
-
- } else if ($this->_body) {
- fwrite($fh, $f_eol . $this->_getEncodedData($this->_body, $this->_encoding));
- } else if ($this->_body_file) {
- fwrite($fh, $f_eol);
- $res = $this->_getEncodedDataFromFile(
- $this->_body_file, $this->_encoding, $fh
- );
- if ($this->_isError($res)) {
- return $res;
- }
- }
-
- return true;
- }
-
- /**
- * Adds a subpart to current mime part and returns
- * a reference to it
- *
- * @param string $body The body of the subpart, if any.
- * @param array $params The parameters for the subpart, same
- * as the $params argument for constructor.
- *
- * @return Mail_mimePart A reference to the part you just added. In PHP4, it is
- * crucial if using multipart/* in your subparts that
- * you use =& in your script when calling this function,
- * otherwise you will not be able to add further subparts.
- * @access public
- */
- function &addSubpart($body, $params)
- {
- $this->_subparts[] = $part = new Mail_mimePart($body, $params);
- return $part;
- }
-
- /**
- * Returns encoded data based upon encoding passed to it
- *
- * @param string $data The data to encode.
- * @param string $encoding The encoding type to use, 7bit, base64,
- * or quoted-printable.
- *
- * @return string
- * @access private
- */
- function _getEncodedData($data, $encoding)
- {
- switch ($encoding) {
- case 'quoted-printable':
- return $this->_quotedPrintableEncode($data);
- break;
-
- case 'base64':
- return rtrim(chunk_split(base64_encode($data), 76, $this->_eol));
- break;
-
- case '8bit':
- case '7bit':
- default:
- return $data;
- }
- }
-
- /**
- * Returns encoded data based upon encoding passed to it
- *
- * @param string $filename Data file location
- * @param string $encoding The encoding type to use, 7bit, base64,
- * or quoted-printable.
- * @param resource $fh Output file handle. If set, data will be
- * stored into it instead of returning it
- *
- * @return string Encoded data or PEAR error object
- * @access private
- */
- function _getEncodedDataFromFile($filename, $encoding, $fh=null)
- {
- if (!is_readable($filename)) {
- $err = $this->_raiseError('Unable to read file: ' . $filename);
- return $err;
- }
-
- if (!($fd = fopen($filename, 'rb'))) {
- $err = $this->_raiseError('Could not open file: ' . $filename);
- return $err;
- }
-
- $data = '';
-
- switch ($encoding) {
- case 'quoted-printable':
- while (!feof($fd)) {
- $buffer = $this->_quotedPrintableEncode(fgets($fd));
- if ($fh) {
- fwrite($fh, $buffer);
- } else {
- $data .= $buffer;
- }
- }
- break;
-
- case 'base64':
- while (!feof($fd)) {
- // Should read in a multiple of 57 bytes so that
- // the output is 76 bytes per line. Don't use big chunks
- // because base64 encoding is memory expensive
- $buffer = fread($fd, 57 * 9198); // ca. 0.5 MB
- $buffer = base64_encode($buffer);
- $buffer = chunk_split($buffer, 76, $this->_eol);
- if (feof($fd)) {
- $buffer = rtrim($buffer);
- }
-
- if ($fh) {
- fwrite($fh, $buffer);
- } else {
- $data .= $buffer;
- }
- }
- break;
-
- case '8bit':
- case '7bit':
- default:
- while (!feof($fd)) {
- $buffer = fread($fd, 1048576); // 1 MB
- if ($fh) {
- fwrite($fh, $buffer);
- } else {
- $data .= $buffer;
- }
- }
- }
-
- fclose($fd);
-
- if (!$fh) {
- return $data;
- }
- }
-
- /**
- * Encodes data to quoted-printable standard.
- *
- * @param string $input The data to encode
- * @param int $line_max Optional max line length. Should
- * not be more than 76 chars
- *
- * @return string Encoded data
- *
- * @access private
- */
- function _quotedPrintableEncode($input , $line_max = 76)
- {
- $eol = $this->_eol;
- /*
- // imap_8bit() is extremely fast, but doesn't handle properly some characters
- if (function_exists('imap_8bit') && $line_max == 76) {
- $input = preg_replace('/\r?\n/', "\r\n", $input);
- $input = imap_8bit($input);
- if ($eol != "\r\n") {
- $input = str_replace("\r\n", $eol, $input);
- }
- return $input;
- }
- */
- $lines = preg_split("/\r?\n/", $input);
- $escape = '=';
- $output = '';
-
- while (list($idx, $line) = each($lines)) {
- $newline = '';
- $i = 0;
-
- while (isset($line[$i])) {
- $char = $line[$i];
- $dec = ord($char);
- $i++;
-
- if (($dec == 32) && (!isset($line[$i]))) {
- // convert space at eol only
- $char = '=20';
- } elseif ($dec == 9 && isset($line[$i])) {
- ; // Do nothing if a TAB is not on eol
- } elseif (($dec == 61) || ($dec < 32) || ($dec > 126)) {
- $char = $escape . sprintf('%02X', $dec);
- } elseif (($dec == 46) && (($newline == '')
- || ((strlen($newline) + strlen("=2E")) >= $line_max))
- ) {
- // Bug #9722: convert full-stop at bol,
- // some Windows servers need this, won't break anything (cipri)
- // Bug #11731: full-stop at bol also needs to be encoded
- // if this line would push us over the line_max limit.
- $char = '=2E';
- }
-
- // Note, when changing this line, also change the ($dec == 46)
- // check line, as it mimics this line due to Bug #11731
- // EOL is not counted
- if ((strlen($newline) + strlen($char)) >= $line_max) {
- // soft line break; " =\r\n" is okay
- $output .= $newline . $escape . $eol;
- $newline = '';
- }
- $newline .= $char;
- } // end of for
- $output .= $newline . $eol;
- unset($lines[$idx]);
- }
- // Don't want last crlf
- $output = substr($output, 0, -1 * strlen($eol));
- return $output;
- }
-
- /**
- * Encodes the parameter of a header.
- *
- * @param string $name The name of the header-parameter
- * @param string $value The value of the paramter
- * @param string $charset The characterset of $value
- * @param string $language The language used in $value
- * @param string $encoding Parameter encoding. If not set, parameter value
- * is encoded according to RFC2231
- * @param int $maxLength The maximum length of a line. Defauls to 75
- *
- * @return string
- *
- * @access private
- */
- function _buildHeaderParam($name, $value, $charset=null, $language=null,
- $encoding=null, $maxLength=75
- ) {
- // RFC 2045:
- // value needs encoding if contains non-ASCII chars or is longer than 78 chars
- if (!preg_match('#[^\x20-\x7E]#', $value)) {
- $token_regexp = '#([^\x21\x23-\x27\x2A\x2B\x2D'
- . '\x2E\x30-\x39\x41-\x5A\x5E-\x7E])#';
- if (!preg_match($token_regexp, $value)) {
- // token
- if (strlen($name) + strlen($value) + 3 <= $maxLength) {
- return " {$name}={$value}";
- }
- } else {
- // quoted-string
- $quoted = addcslashes($value, '\\"');
- if (strlen($name) + strlen($quoted) + 5 <= $maxLength) {
- return " {$name}=\"{$quoted}\"";
- }
- }
- }
-
- // RFC2047: use quoted-printable/base64 encoding
- if ($encoding == 'quoted-printable' || $encoding == 'base64') {
- return $this->_buildRFC2047Param($name, $value, $charset, $encoding);
- }
-
- // RFC2231:
- $encValue = preg_replace_callback(
- '/([^\x21\x23\x24\x26\x2B\x2D\x2E\x30-\x39\x41-\x5A\x5E-\x7E])/',
- array($this, '_encodeReplaceCallback'), $value
- );
- $value = "$charset'$language'$encValue";
-
- $header = " {$name}*={$value}";
- if (strlen($header) <= $maxLength) {
- return $header;
- }
-
- $preLength = strlen(" {$name}*0*=");
- $maxLength = max(16, $maxLength - $preLength - 3);
- $maxLengthReg = "|(.{0,$maxLength}[^\%][^\%])|";
-
- $headers = array();
- $headCount = 0;
- while ($value) {
- $matches = array();
- $found = preg_match($maxLengthReg, $value, $matches);
- if ($found) {
- $headers[] = " {$name}*{$headCount}*={$matches[0]}";
- $value = substr($value, strlen($matches[0]));
- } else {
- $headers[] = " {$name}*{$headCount}*={$value}";
- $value = '';
- }
- $headCount++;
- }
-
- $headers = implode(';' . $this->_eol, $headers);
- return $headers;
- }
-
- /**
- * Encodes header parameter as per RFC2047 if needed
- *
- * @param string $name The parameter name
- * @param string $value The parameter value
- * @param string $charset The parameter charset
- * @param string $encoding Encoding type (quoted-printable or base64)
- * @param int $maxLength Encoded parameter max length. Default: 76
- *
- * @return string Parameter line
- * @access private
- */
- function _buildRFC2047Param($name, $value, $charset,
- $encoding='quoted-printable', $maxLength=76
- ) {
- // WARNING: RFC 2047 says: "An 'encoded-word' MUST NOT be used in
- // parameter of a MIME Content-Type or Content-Disposition field",
- // but... it's supported by many clients/servers
- $quoted = '';
-
- if ($encoding == 'base64') {
- $value = base64_encode($value);
- $prefix = '=?' . $charset . '?B?';
- $suffix = '?=';
-
- // 2 x SPACE, 2 x '"', '=', ';'
- $add_len = strlen($prefix . $suffix) + strlen($name) + 6;
- $len = $add_len + strlen($value);
-
- while ($len > $maxLength) {
- // We can cut base64-encoded string every 4 characters
- $real_len = floor(($maxLength - $add_len) / 4) * 4;
- $_quote = substr($value, 0, $real_len);
- $value = substr($value, $real_len);
-
- $quoted .= $prefix . $_quote . $suffix . $this->_eol . ' ';
- $add_len = strlen($prefix . $suffix) + 4; // 2 x SPACE, '"', ';'
- $len = strlen($value) + $add_len;
- }
- $quoted .= $prefix . $value . $suffix;
-
- } else {
- // quoted-printable
- $value = $this->encodeQP($value);
- $prefix = '=?' . $charset . '?Q?';
- $suffix = '?=';
-
- // 2 x SPACE, 2 x '"', '=', ';'
- $add_len = strlen($prefix . $suffix) + strlen($name) + 6;
- $len = $add_len + strlen($value);
-
- while ($len > $maxLength) {
- $length = $maxLength - $add_len;
- // don't break any encoded letters
- if (preg_match("/^(.{0,$length}[^\=][^\=])/", $value, $matches)) {
- $_quote = $matches[1];
- }
-
- $quoted .= $prefix . $_quote . $suffix . $this->_eol . ' ';
- $value = substr($value, strlen($_quote));
- $add_len = strlen($prefix . $suffix) + 4; // 2 x SPACE, '"', ';'
- $len = strlen($value) + $add_len;
- }
-
- $quoted .= $prefix . $value . $suffix;
- }
-
- return " {$name}=\"{$quoted}\"";
- }
-
- /**
- * Encodes a header as per RFC2047
- *
- * @param string $name The header name
- * @param string $value The header data to encode
- * @param string $charset Character set name
- * @param string $encoding Encoding name (base64 or quoted-printable)
- * @param string $eol End-of-line sequence. Default: "\r\n"
- *
- * @return string Encoded header data (without a name)
- * @access public
- * @since 1.6.1
- */
- function encodeHeader($name, $value, $charset='ISO-8859-1',
- $encoding='quoted-printable', $eol="\r\n"
- ) {
- // Structured headers
- $comma_headers = array(
- 'from', 'to', 'cc', 'bcc', 'sender', 'reply-to',
- 'resent-from', 'resent-to', 'resent-cc', 'resent-bcc',
- 'resent-sender', 'resent-reply-to',
- 'mail-reply-to', 'mail-followup-to',
- 'return-receipt-to', 'disposition-notification-to',
- );
- $other_headers = array(
- 'references', 'in-reply-to', 'message-id', 'resent-message-id',
- );
-
- $name = strtolower($name);
-
- if (in_array($name, $comma_headers)) {
- $separator = ',';
- } else if (in_array($name, $other_headers)) {
- $separator = ' ';
- }
-
- if (!$charset) {
- $charset = 'ISO-8859-1';
- }
-
- // Structured header (make sure addr-spec inside is not encoded)
- if (!empty($separator)) {
- // Simple e-mail address regexp
- $email_regexp = '([^\s<]+|("[^\r\n"]+"))@\S+';
-
- $parts = Mail_mimePart::_explodeQuotedString("[\t$separator]", $value);
- $value = '';
-
- foreach ($parts as $part) {
- $part = preg_replace('/\r?\n[\s\t]*/', $eol . ' ', $part);
- $part = trim($part);
-
- if (!$part) {
- continue;
- }
- if ($value) {
- $value .= $separator == ',' ? $separator . ' ' : ' ';
- } else {
- $value = $name . ': ';
- }
-
- // let's find phrase (name) and/or addr-spec
- if (preg_match('/^<' . $email_regexp . '>$/', $part)) {
- $value .= $part;
- } else if (preg_match('/^' . $email_regexp . '$/', $part)) {
- // address without brackets and without name
- $value .= $part;
- } else if (preg_match('/<*' . $email_regexp . '>*$/', $part, $matches)) {
- // address with name (handle name)
- $address = $matches[0];
- $word = str_replace($address, '', $part);
- $word = trim($word);
- // check if phrase requires quoting
- if ($word) {
- // non-ASCII: require encoding
- if (preg_match('#([^\s\x21-\x7E]){1}#', $word)) {
- if ($word[0] == '"' && $word[strlen($word)-1] == '"') {
- // de-quote quoted-string, encoding changes
- // string to atom
- $search = array("\\\"", "\\\\");
- $replace = array("\"", "\\");
- $word = str_replace($search, $replace, $word);
- $word = substr($word, 1, -1);
- }
- // find length of last line
- if (($pos = strrpos($value, $eol)) !== false) {
- $last_len = strlen($value) - $pos;
- } else {
- $last_len = strlen($value);
- }
- $word = Mail_mimePart::encodeHeaderValue(
- $word, $charset, $encoding, $last_len, $eol
- );
- } else if (($word[0] != '"' || $word[strlen($word)-1] != '"')
- && preg_match('/[\(\)\<\>\\\.\[\]@,;:"]/', $word)
- ) {
- // ASCII: quote string if needed
- $word = '"'.addcslashes($word, '\\"').'"';
- }
- }
- $value .= $word.' '.$address;
- } else {
- // addr-spec not found, don't encode (?)
- $value .= $part;
- }
-
- // RFC2822 recommends 78 characters limit, use 76 from RFC2047
- $value = wordwrap($value, 76, $eol . ' ');
- }
-
- // remove header name prefix (there could be EOL too)
- $value = preg_replace(
- '/^'.$name.':('.preg_quote($eol, '/').')* /', '', $value
- );
- } else {
- // Unstructured header
- // non-ASCII: require encoding
- if (preg_match('#([^\s\x21-\x7E]){1}#', $value)) {
- if ($value[0] == '"' && $value[strlen($value)-1] == '"') {
- // de-quote quoted-string, encoding changes
- // string to atom
- $search = array("\\\"", "\\\\");
- $replace = array("\"", "\\");
- $value = str_replace($search, $replace, $value);
- $value = substr($value, 1, -1);
- }
- $value = Mail_mimePart::encodeHeaderValue(
- $value, $charset, $encoding, strlen($name) + 2, $eol
- );
- } else if (strlen($name.': '.$value) > 78) {
- // ASCII: check if header line isn't too long and use folding
- $value = preg_replace('/\r?\n[\s\t]*/', $eol . ' ', $value);
- $tmp = wordwrap($name.': '.$value, 78, $eol . ' ');
- $value = preg_replace('/^'.$name.':\s*/', '', $tmp);
- // hard limit 998 (RFC2822)
- $value = wordwrap($value, 998, $eol . ' ', true);
- }
- }
-
- return $value;
- }
-
- /**
- * Explode quoted string
- *
- * @param string $delimiter Delimiter expression string for preg_match()
- * @param string $string Input string
- *
- * @return array String tokens array
- * @access private
- */
- function _explodeQuotedString($delimiter, $string)
- {
- $result = array();
- $strlen = strlen($string);
-
- for ($q=$p=$i=0; $i < $strlen; $i++) {
- if ($string[$i] == "\""
- && (empty($string[$i-1]) || $string[$i-1] != "\\")
- ) {
- $q = $q ? false : true;
- } else if (!$q && preg_match("/$delimiter/", $string[$i])) {
- $result[] = substr($string, $p, $i - $p);
- $p = $i + 1;
- }
- }
-
- $result[] = substr($string, $p);
- return $result;
- }
-
- /**
- * Encodes a header value as per RFC2047
- *
- * @param string $value The header data to encode
- * @param string $charset Character set name
- * @param string $encoding Encoding name (base64 or quoted-printable)
- * @param int $prefix_len Prefix length. Default: 0
- * @param string $eol End-of-line sequence. Default: "\r\n"
- *
- * @return string Encoded header data
- * @access public
- * @since 1.6.1
- */
- function encodeHeaderValue($value, $charset, $encoding, $prefix_len=0, $eol="\r\n")
- {
- // #17311: Use multibyte aware method (requires mbstring extension)
- if ($result = Mail_mimePart::encodeMB($value, $charset, $encoding, $prefix_len, $eol)) {
- return $result;
- }
-
- // Generate the header using the specified params and dynamicly
- // determine the maximum length of such strings.
- // 75 is the value specified in the RFC.
- $encoding = $encoding == 'base64' ? 'B' : 'Q';
- $prefix = '=?' . $charset . '?' . $encoding .'?';
- $suffix = '?=';
- $maxLength = 75 - strlen($prefix . $suffix);
- $maxLength1stLine = $maxLength - $prefix_len;
-
- if ($encoding == 'B') {
- // Base64 encode the entire string
- $value = base64_encode($value);
-
- // We can cut base64 every 4 characters, so the real max
- // we can get must be rounded down.
- $maxLength = $maxLength - ($maxLength % 4);
- $maxLength1stLine = $maxLength1stLine - ($maxLength1stLine % 4);
-
- $cutpoint = $maxLength1stLine;
- $output = '';
-
- while ($value) {
- // Split translated string at every $maxLength
- $part = substr($value, 0, $cutpoint);
- $value = substr($value, $cutpoint);
- $cutpoint = $maxLength;
- // RFC 2047 specifies that any split header should
- // be separated by a CRLF SPACE.
- if ($output) {
- $output .= $eol . ' ';
- }
- $output .= $prefix . $part . $suffix;
- }
- $value = $output;
- } else {
- // quoted-printable encoding has been selected
- $value = Mail_mimePart::encodeQP($value);
-
- // This regexp will break QP-encoded text at every $maxLength
- // but will not break any encoded letters.
- $reg1st = "|(.{0,$maxLength1stLine}[^\=][^\=])|";
- $reg2nd = "|(.{0,$maxLength}[^\=][^\=])|";
-
- if (strlen($value) > $maxLength1stLine) {
- // Begin with the regexp for the first line.
- $reg = $reg1st;
- $output = '';
- while ($value) {
- // Split translated string at every $maxLength
- // But make sure not to break any translated chars.
- $found = preg_match($reg, $value, $matches);
-
- // After this first line, we need to use a different
- // regexp for the first line.
- $reg = $reg2nd;
-
- // Save the found part and encapsulate it in the
- // prefix & suffix. Then remove the part from the
- // $value_out variable.
- if ($found) {
- $part = $matches[0];
- $len = strlen($matches[0]);
- $value = substr($value, $len);
- } else {
- $part = $value;
- $value = '';
- }
-
- // RFC 2047 specifies that any split header should
- // be separated by a CRLF SPACE
- if ($output) {
- $output .= $eol . ' ';
- }
- $output .= $prefix . $part . $suffix;
- }
- $value = $output;
- } else {
- $value = $prefix . $value . $suffix;
- }
- }
-
- return $value;
- }
-
- /**
- * Encodes the given string using quoted-printable
- *
- * @param string $str String to encode
- *
- * @return string Encoded string
- * @access public
- * @since 1.6.0
- */
- function encodeQP($str)
- {
- // Bug #17226 RFC 2047 restricts some characters
- // if the word is inside a phrase, permitted chars are only:
- // ASCII letters, decimal digits, "!", "*", "+", "-", "/", "=", and "_"
-
- // "=", "_", "?" must be encoded
- $regexp = '/([\x22-\x29\x2C\x2E\x3A-\x40\x5B-\x60\x7B-\x7E\x80-\xFF])/';
- $str = preg_replace_callback(
- $regexp, array('Mail_mimePart', '_qpReplaceCallback'), $str
- );
-
- return str_replace(' ', '_', $str);
- }
-
- /**
- * Encodes the given string using base64 or quoted-printable.
- * This method makes sure that encoded-word represents an integral
- * number of characters as per RFC2047.
- *
- * @param string $str String to encode
- * @param string $charset Character set name
- * @param string $encoding Encoding name (base64 or quoted-printable)
- * @param int $prefix_len Prefix length. Default: 0
- * @param string $eol End-of-line sequence. Default: "\r\n"
- *
- * @return string Encoded string
- * @access public
- * @since 1.8.0
- */
- function encodeMB($str, $charset, $encoding, $prefix_len=0, $eol="\r\n")
- {
- if (!function_exists('mb_substr') || !function_exists('mb_strlen')) {
- return;
- }
-
- $encoding = $encoding == 'base64' ? 'B' : 'Q';
- // 75 is the value specified in the RFC
- $prefix = '=?' . $charset . '?'.$encoding.'?';
- $suffix = '?=';
- $maxLength = 75 - strlen($prefix . $suffix);
-
- // A multi-octet character may not be split across adjacent encoded-words
- // So, we'll loop over each character
- // mb_stlen() with wrong charset will generate a warning here and return null
- $length = mb_strlen($str, $charset);
- $result = '';
- $line_length = $prefix_len;
-
- if ($encoding == 'B') {
- // base64
- $start = 0;
- $prev = '';
-
- for ($i=1; $i<=$length; $i++) {
- // See #17311
- $chunk = mb_substr($str, $start, $i-$start, $charset);
- $chunk = base64_encode($chunk);
- $chunk_len = strlen($chunk);
-
- if ($line_length + $chunk_len == $maxLength || $i == $length) {
- if ($result) {
- $result .= "\n";
- }
- $result .= $chunk;
- $line_length = 0;
- $start = $i;
- } else if ($line_length + $chunk_len > $maxLength) {
- if ($result) {
- $result .= "\n";
- }
- if ($prev) {
- $result .= $prev;
- }
- $line_length = 0;
- $start = $i - 1;
- } else {
- $prev = $chunk;
- }
- }
- } else {
- // quoted-printable
- // see encodeQP()
- $regexp = '/([\x22-\x29\x2C\x2E\x3A-\x40\x5B-\x60\x7B-\x7E\x80-\xFF])/';
-
- for ($i=0; $i<=$length; $i++) {
- $char = mb_substr($str, $i, 1, $charset);
- // RFC recommends underline (instead of =20) in place of the space
- // that's one of the reasons why we're not using iconv_mime_encode()
- if ($char == ' ') {
- $char = '_';
- $char_len = 1;
- } else {
- $char = preg_replace_callback(
- $regexp, array('Mail_mimePart', '_qpReplaceCallback'), $char
- );
- $char_len = strlen($char);
- }
-
- if ($line_length + $char_len > $maxLength) {
- if ($result) {
- $result .= "\n";
- }
- $line_length = 0;
- }
-
- $result .= $char;
- $line_length += $char_len;
- }
- }
-
- if ($result) {
- $result = $prefix
- .str_replace("\n", $suffix.$eol.' '.$prefix, $result).$suffix;
- }
-
- return $result;
- }
-
- /**
- * Callback function to replace extended characters (\x80-xFF) with their
- * ASCII values (RFC2047: quoted-printable)
- *
- * @param array $matches Preg_replace's matches array
- *
- * @return string Encoded character string
- * @access private
- */
- function _qpReplaceCallback($matches)
- {
- return sprintf('=%02X', ord($matches[1]));
- }
-
- /**
- * Callback function to replace extended characters (\x80-xFF) with their
- * ASCII values (RFC2231)
- *
- * @param array $matches Preg_replace's matches array
- *
- * @return string Encoded character string
- * @access private
- */
- function _encodeReplaceCallback($matches)
- {
- return sprintf('%%%02X', ord($matches[1]));
- }
-
- /**
- * PEAR::isError implementation
- *
- * @param mixed $data Object
- *
- * @return bool True if object is an instance of PEAR_Error
- * @access private
- */
- function _isError($data)
- {
- // PEAR::isError() is not PHP 5.4 compatible (see Bug #19473)
- if (is_object($data) && is_a($data, 'PEAR_Error')) {
- return true;
- }
-
- return false;
- }
-
- /**
- * PEAR::raiseError implementation
- *
- * @param $message A text error message
- *
- * @return PEAR_Error Instance of PEAR_Error
- * @access private
- */
- function _raiseError($message)
- {
- // PEAR::raiseError() is not PHP 5.4 compatible
- return new PEAR_Error($message);
- }
-
-} // End of class
diff --git a/program/lib/Net/IDNA2.php b/program/lib/Net/IDNA2.php
deleted file mode 100644
index 8c366fb8a..000000000
--- a/program/lib/Net/IDNA2.php
+++ /dev/null
@@ -1,3402 +0,0 @@
-<?php
-
-// {{{ license
-
-/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4 foldmethod=marker: */
-//
-// +----------------------------------------------------------------------+
-// | This library is free software; you can redistribute it and/or modify |
-// | it under the terms of the GNU Lesser General Public License as |
-// | published by the Free Software Foundation; either version 2.1 of the |
-// | License, or (at your option) any later version. |
-// | |
-// | This library is distributed in the hope that it will be useful, but |
-// | WITHOUT ANY WARRANTY; without even the implied warranty of |
-// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
-// | Lesser General Public License for more details. |
-// | |
-// | You should have received a copy of the GNU Lesser General Public |
-// | License along with this library; if not, write to the Free Software |
-// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 |
-// | USA. |
-// +----------------------------------------------------------------------+
-//
-
-// }}}
-require_once 'Net/IDNA2/Exception.php';
-require_once 'Net/IDNA2/Exception/Nameprep.php';
-
-/**
- * Encode/decode Internationalized Domain Names.
- *
- * The class allows to convert internationalized domain names
- * (see RFC 3490 for details) as they can be used with various registries worldwide
- * to be translated between their original (localized) form and their encoded form
- * as it will be used in the DNS (Domain Name System).
- *
- * The class provides two public methods, encode() and decode(), which do exactly
- * what you would expect them to do. You are allowed to use complete domain names,
- * simple strings and complete email addresses as well. That means, that you might
- * use any of the following notations:
- *
- * - www.n�rgler.com
- * - xn--nrgler-wxa
- * - xn--brse-5qa.xn--knrz-1ra.info
- *
- * Unicode input might be given as either UTF-8 string, UCS-4 string or UCS-4
- * array. Unicode output is available in the same formats.
- * You can select your preferred format via {@link set_paramter()}.
- *
- * ACE input and output is always expected to be ASCII.
- *
- * @package Net
- * @author Markus Nix <mnix@docuverse.de>
- * @author Matthias Sommerfeld <mso@phlylabs.de>
- * @author Stefan Neufeind <pear.neufeind@speedpartner.de>
- * @version $Id: IDNA2.php 305344 2010-11-14 23:52:42Z neufeind $
- */
-class Net_IDNA2
-{
- // {{{ npdata
- /**
- * These Unicode codepoints are
- * mapped to nothing, See RFC3454 for details
- *
- * @static
- * @var array
- * @access private
- */
- private static $_np_map_nothing = array(
- 0xAD,
- 0x34F,
- 0x1806,
- 0x180B,
- 0x180C,
- 0x180D,
- 0x200B,
- 0x200C,
- 0x200D,
- 0x2060,
- 0xFE00,
- 0xFE01,
- 0xFE02,
- 0xFE03,
- 0xFE04,
- 0xFE05,
- 0xFE06,
- 0xFE07,
- 0xFE08,
- 0xFE09,
- 0xFE0A,
- 0xFE0B,
- 0xFE0C,
- 0xFE0D,
- 0xFE0E,
- 0xFE0F,
- 0xFEFF
- );
-
- /**
- * Prohibited codepints
- *
- * @static
- * @var array
- * @access private
- */
- private static $_general_prohibited = array(
- 0,
- 1,
- 2,
- 3,
- 4,
- 5,
- 6,
- 7,
- 8,
- 9,
- 0xA,
- 0xB,
- 0xC,
- 0xD,
- 0xE,
- 0xF,
- 0x10,
- 0x11,
- 0x12,
- 0x13,
- 0x14,
- 0x15,
- 0x16,
- 0x17,
- 0x18,
- 0x19,
- 0x1A,
- 0x1B,
- 0x1C,
- 0x1D,
- 0x1E,
- 0x1F,
- 0x20,
- 0x21,
- 0x22,
- 0x23,
- 0x24,
- 0x25,
- 0x26,
- 0x27,
- 0x28,
- 0x29,
- 0x2A,
- 0x2B,
- 0x2C,
- 0x2F,
- 0x3B,
- 0x3C,
- 0x3D,
- 0x3E,
- 0x3F,
- 0x40,
- 0x5B,
- 0x5C,
- 0x5D,
- 0x5E,
- 0x5F,
- 0x60,
- 0x7B,
- 0x7C,
- 0x7D,
- 0x7E,
- 0x7F,
- 0x3002
- );
-
- /**
- * Codepints prohibited by Nameprep
- * @static
- * @var array
- * @access private
- */
- private static $_np_prohibit = array(
- 0xA0,
- 0x1680,
- 0x2000,
- 0x2001,
- 0x2002,
- 0x2003,
- 0x2004,
- 0x2005,
- 0x2006,
- 0x2007,
- 0x2008,
- 0x2009,
- 0x200A,
- 0x200B,
- 0x202F,
- 0x205F,
- 0x3000,
- 0x6DD,
- 0x70F,
- 0x180E,
- 0x200C,
- 0x200D,
- 0x2028,
- 0x2029,
- 0xFEFF,
- 0xFFF9,
- 0xFFFA,
- 0xFFFB,
- 0xFFFC,
- 0xFFFE,
- 0xFFFF,
- 0x1FFFE,
- 0x1FFFF,
- 0x2FFFE,
- 0x2FFFF,
- 0x3FFFE,
- 0x3FFFF,
- 0x4FFFE,
- 0x4FFFF,
- 0x5FFFE,
- 0x5FFFF,
- 0x6FFFE,
- 0x6FFFF,
- 0x7FFFE,
- 0x7FFFF,
- 0x8FFFE,
- 0x8FFFF,
- 0x9FFFE,
- 0x9FFFF,
- 0xAFFFE,
- 0xAFFFF,
- 0xBFFFE,
- 0xBFFFF,
- 0xCFFFE,
- 0xCFFFF,
- 0xDFFFE,
- 0xDFFFF,
- 0xEFFFE,
- 0xEFFFF,
- 0xFFFFE,
- 0xFFFFF,
- 0x10FFFE,
- 0x10FFFF,
- 0xFFF9,
- 0xFFFA,
- 0xFFFB,
- 0xFFFC,
- 0xFFFD,
- 0x340,
- 0x341,
- 0x200E,
- 0x200F,
- 0x202A,
- 0x202B,
- 0x202C,
- 0x202D,
- 0x202E,
- 0x206A,
- 0x206B,
- 0x206C,
- 0x206D,
- 0x206E,
- 0x206F,
- 0xE0001
- );
-
- /**
- * Codepoint ranges prohibited by nameprep
- *
- * @static
- * @var array
- * @access private
- */
- private static $_np_prohibit_ranges = array(
- array(0x80, 0x9F ),
- array(0x2060, 0x206F ),
- array(0x1D173, 0x1D17A ),
- array(0xE000, 0xF8FF ),
- array(0xF0000, 0xFFFFD ),
- array(0x100000, 0x10FFFD),
- array(0xFDD0, 0xFDEF ),
- array(0xD800, 0xDFFF ),
- array(0x2FF0, 0x2FFB ),
- array(0xE0020, 0xE007F )
- );
-
- /**
- * Replacement mappings (casemapping, replacement sequences, ...)
- *
- * @static
- * @var array
- * @access private
- */
- private static $_np_replacemaps = array(
- 0x41 => array(0x61),
- 0x42 => array(0x62),
- 0x43 => array(0x63),
- 0x44 => array(0x64),
- 0x45 => array(0x65),
- 0x46 => array(0x66),
- 0x47 => array(0x67),
- 0x48 => array(0x68),
- 0x49 => array(0x69),
- 0x4A => array(0x6A),
- 0x4B => array(0x6B),
- 0x4C => array(0x6C),
- 0x4D => array(0x6D),
- 0x4E => array(0x6E),
- 0x4F => array(0x6F),
- 0x50 => array(0x70),
- 0x51 => array(0x71),
- 0x52 => array(0x72),
- 0x53 => array(0x73),
- 0x54 => array(0x74),
- 0x55 => array(0x75),
- 0x56 => array(0x76),
- 0x57 => array(0x77),
- 0x58 => array(0x78),
- 0x59 => array(0x79),
- 0x5A => array(0x7A),
- 0xB5 => array(0x3BC),
- 0xC0 => array(0xE0),
- 0xC1 => array(0xE1),
- 0xC2 => array(0xE2),
- 0xC3 => array(0xE3),
- 0xC4 => array(0xE4),
- 0xC5 => array(0xE5),
- 0xC6 => array(0xE6),
- 0xC7 => array(0xE7),
- 0xC8 => array(0xE8),
- 0xC9 => array(0xE9),
- 0xCA => array(0xEA),
- 0xCB => array(0xEB),
- 0xCC => array(0xEC),
- 0xCD => array(0xED),
- 0xCE => array(0xEE),
- 0xCF => array(0xEF),
- 0xD0 => array(0xF0),
- 0xD1 => array(0xF1),
- 0xD2 => array(0xF2),
- 0xD3 => array(0xF3),
- 0xD4 => array(0xF4),
- 0xD5 => array(0xF5),
- 0xD6 => array(0xF6),
- 0xD8 => array(0xF8),
- 0xD9 => array(0xF9),
- 0xDA => array(0xFA),
- 0xDB => array(0xFB),
- 0xDC => array(0xFC),
- 0xDD => array(0xFD),
- 0xDE => array(0xFE),
- 0xDF => array(0x73, 0x73),
- 0x100 => array(0x101),
- 0x102 => array(0x103),
- 0x104 => array(0x105),
- 0x106 => array(0x107),
- 0x108 => array(0x109),
- 0x10A => array(0x10B),
- 0x10C => array(0x10D),
- 0x10E => array(0x10F),
- 0x110 => array(0x111),
- 0x112 => array(0x113),
- 0x114 => array(0x115),
- 0x116 => array(0x117),
- 0x118 => array(0x119),
- 0x11A => array(0x11B),
- 0x11C => array(0x11D),
- 0x11E => array(0x11F),
- 0x120 => array(0x121),
- 0x122 => array(0x123),
- 0x124 => array(0x125),
- 0x126 => array(0x127),
- 0x128 => array(0x129),
- 0x12A => array(0x12B),
- 0x12C => array(0x12D),
- 0x12E => array(0x12F),
- 0x130 => array(0x69, 0x307),
- 0x132 => array(0x133),
- 0x134 => array(0x135),
- 0x136 => array(0x137),
- 0x139 => array(0x13A),
- 0x13B => array(0x13C),
- 0x13D => array(0x13E),
- 0x13F => array(0x140),
- 0x141 => array(0x142),
- 0x143 => array(0x144),
- 0x145 => array(0x146),
- 0x147 => array(0x148),
- 0x149 => array(0x2BC, 0x6E),
- 0x14A => array(0x14B),
- 0x14C => array(0x14D),
- 0x14E => array(0x14F),
- 0x150 => array(0x151),
- 0x152 => array(0x153),
- 0x154 => array(0x155),
- 0x156 => array(0x157),
- 0x158 => array(0x159),
- 0x15A => array(0x15B),
- 0x15C => array(0x15D),
- 0x15E => array(0x15F),
- 0x160 => array(0x161),
- 0x162 => array(0x163),
- 0x164 => array(0x165),
- 0x166 => array(0x167),
- 0x168 => array(0x169),
- 0x16A => array(0x16B),
- 0x16C => array(0x16D),
- 0x16E => array(0x16F),
- 0x170 => array(0x171),
- 0x172 => array(0x173),
- 0x174 => array(0x175),
- 0x176 => array(0x177),
- 0x178 => array(0xFF),
- 0x179 => array(0x17A),
- 0x17B => array(0x17C),
- 0x17D => array(0x17E),
- 0x17F => array(0x73),
- 0x181 => array(0x253),
- 0x182 => array(0x183),
- 0x184 => array(0x185),
- 0x186 => array(0x254),
- 0x187 => array(0x188),
- 0x189 => array(0x256),
- 0x18A => array(0x257),
- 0x18B => array(0x18C),
- 0x18E => array(0x1DD),
- 0x18F => array(0x259),
- 0x190 => array(0x25B),
- 0x191 => array(0x192),
- 0x193 => array(0x260),
- 0x194 => array(0x263),
- 0x196 => array(0x269),
- 0x197 => array(0x268),
- 0x198 => array(0x199),
- 0x19C => array(0x26F),
- 0x19D => array(0x272),
- 0x19F => array(0x275),
- 0x1A0 => array(0x1A1),
- 0x1A2 => array(0x1A3),
- 0x1A4 => array(0x1A5),
- 0x1A6 => array(0x280),
- 0x1A7 => array(0x1A8),
- 0x1A9 => array(0x283),
- 0x1AC => array(0x1AD),
- 0x1AE => array(0x288),
- 0x1AF => array(0x1B0),
- 0x1B1 => array(0x28A),
- 0x1B2 => array(0x28B),
- 0x1B3 => array(0x1B4),
- 0x1B5 => array(0x1B6),
- 0x1B7 => array(0x292),
- 0x1B8 => array(0x1B9),
- 0x1BC => array(0x1BD),
- 0x1C4 => array(0x1C6),
- 0x1C5 => array(0x1C6),
- 0x1C7 => array(0x1C9),
- 0x1C8 => array(0x1C9),
- 0x1CA => array(0x1CC),
- 0x1CB => array(0x1CC),
- 0x1CD => array(0x1CE),
- 0x1CF => array(0x1D0),
- 0x1D1 => array(0x1D2),
- 0x1D3 => array(0x1D4),
- 0x1D5 => array(0x1D6),
- 0x1D7 => array(0x1D8),
- 0x1D9 => array(0x1DA),
- 0x1DB => array(0x1DC),
- 0x1DE => array(0x1DF),
- 0x1E0 => array(0x1E1),
- 0x1E2 => array(0x1E3),
- 0x1E4 => array(0x1E5),
- 0x1E6 => array(0x1E7),
- 0x1E8 => array(0x1E9),
- 0x1EA => array(0x1EB),
- 0x1EC => array(0x1ED),
- 0x1EE => array(0x1EF),
- 0x1F0 => array(0x6A, 0x30C),
- 0x1F1 => array(0x1F3),
- 0x1F2 => array(0x1F3),
- 0x1F4 => array(0x1F5),
- 0x1F6 => array(0x195),
- 0x1F7 => array(0x1BF),
- 0x1F8 => array(0x1F9),
- 0x1FA => array(0x1FB),
- 0x1FC => array(0x1FD),
- 0x1FE => array(0x1FF),
- 0x200 => array(0x201),
- 0x202 => array(0x203),
- 0x204 => array(0x205),
- 0x206 => array(0x207),
- 0x208 => array(0x209),
- 0x20A => array(0x20B),
- 0x20C => array(0x20D),
- 0x20E => array(0x20F),
- 0x210 => array(0x211),
- 0x212 => array(0x213),
- 0x214 => array(0x215),
- 0x216 => array(0x217),
- 0x218 => array(0x219),
- 0x21A => array(0x21B),
- 0x21C => array(0x21D),
- 0x21E => array(0x21F),
- 0x220 => array(0x19E),
- 0x222 => array(0x223),
- 0x224 => array(0x225),
- 0x226 => array(0x227),
- 0x228 => array(0x229),
- 0x22A => array(0x22B),
- 0x22C => array(0x22D),
- 0x22E => array(0x22F),
- 0x230 => array(0x231),
- 0x232 => array(0x233),
- 0x345 => array(0x3B9),
- 0x37A => array(0x20, 0x3B9),
- 0x386 => array(0x3AC),
- 0x388 => array(0x3AD),
- 0x389 => array(0x3AE),
- 0x38A => array(0x3AF),
- 0x38C => array(0x3CC),
- 0x38E => array(0x3CD),
- 0x38F => array(0x3CE),
- 0x390 => array(0x3B9, 0x308, 0x301),
- 0x391 => array(0x3B1),
- 0x392 => array(0x3B2),
- 0x393 => array(0x3B3),
- 0x394 => array(0x3B4),
- 0x395 => array(0x3B5),
- 0x396 => array(0x3B6),
- 0x397 => array(0x3B7),
- 0x398 => array(0x3B8),
- 0x399 => array(0x3B9),
- 0x39A => array(0x3BA),
- 0x39B => array(0x3BB),
- 0x39C => array(0x3BC),
- 0x39D => array(0x3BD),
- 0x39E => array(0x3BE),
- 0x39F => array(0x3BF),
- 0x3A0 => array(0x3C0),
- 0x3A1 => array(0x3C1),
- 0x3A3 => array(0x3C3),
- 0x3A4 => array(0x3C4),
- 0x3A5 => array(0x3C5),
- 0x3A6 => array(0x3C6),
- 0x3A7 => array(0x3C7),
- 0x3A8 => array(0x3C8),
- 0x3A9 => array(0x3C9),
- 0x3AA => array(0x3CA),
- 0x3AB => array(0x3CB),
- 0x3B0 => array(0x3C5, 0x308, 0x301),
- 0x3C2 => array(0x3C3),
- 0x3D0 => array(0x3B2),
- 0x3D1 => array(0x3B8),
- 0x3D2 => array(0x3C5),
- 0x3D3 => array(0x3CD),
- 0x3D4 => array(0x3CB),
- 0x3D5 => array(0x3C6),
- 0x3D6 => array(0x3C0),
- 0x3D8 => array(0x3D9),
- 0x3DA => array(0x3DB),
- 0x3DC => array(0x3DD),
- 0x3DE => array(0x3DF),
- 0x3E0 => array(0x3E1),
- 0x3E2 => array(0x3E3),
- 0x3E4 => array(0x3E5),
- 0x3E6 => array(0x3E7),
- 0x3E8 => array(0x3E9),
- 0x3EA => array(0x3EB),
- 0x3EC => array(0x3ED),
- 0x3EE => array(0x3EF),
- 0x3F0 => array(0x3BA),
- 0x3F1 => array(0x3C1),
- 0x3F2 => array(0x3C3),
- 0x3F4 => array(0x3B8),
- 0x3F5 => array(0x3B5),
- 0x400 => array(0x450),
- 0x401 => array(0x451),
- 0x402 => array(0x452),
- 0x403 => array(0x453),
- 0x404 => array(0x454),
- 0x405 => array(0x455),
- 0x406 => array(0x456),
- 0x407 => array(0x457),
- 0x408 => array(0x458),
- 0x409 => array(0x459),
- 0x40A => array(0x45A),
- 0x40B => array(0x45B),
- 0x40C => array(0x45C),
- 0x40D => array(0x45D),
- 0x40E => array(0x45E),
- 0x40F => array(0x45F),
- 0x410 => array(0x430),
- 0x411 => array(0x431),
- 0x412 => array(0x432),
- 0x413 => array(0x433),
- 0x414 => array(0x434),
- 0x415 => array(0x435),
- 0x416 => array(0x436),
- 0x417 => array(0x437),
- 0x418 => array(0x438),
- 0x419 => array(0x439),
- 0x41A => array(0x43A),
- 0x41B => array(0x43B),
- 0x41C => array(0x43C),
- 0x41D => array(0x43D),
- 0x41E => array(0x43E),
- 0x41F => array(0x43F),
- 0x420 => array(0x440),
- 0x421 => array(0x441),
- 0x422 => array(0x442),
- 0x423 => array(0x443),
- 0x424 => array(0x444),
- 0x425 => array(0x445),
- 0x426 => array(0x446),
- 0x427 => array(0x447),
- 0x428 => array(0x448),
- 0x429 => array(0x449),
- 0x42A => array(0x44A),
- 0x42B => array(0x44B),
- 0x42C => array(0x44C),
- 0x42D => array(0x44D),
- 0x42E => array(0x44E),
- 0x42F => array(0x44F),
- 0x460 => array(0x461),
- 0x462 => array(0x463),
- 0x464 => array(0x465),
- 0x466 => array(0x467),
- 0x468 => array(0x469),
- 0x46A => array(0x46B),
- 0x46C => array(0x46D),
- 0x46E => array(0x46F),
- 0x470 => array(0x471),
- 0x472 => array(0x473),
- 0x474 => array(0x475),
- 0x476 => array(0x477),
- 0x478 => array(0x479),
- 0x47A => array(0x47B),
- 0x47C => array(0x47D),
- 0x47E => array(0x47F),
- 0x480 => array(0x481),
- 0x48A => array(0x48B),
- 0x48C => array(0x48D),
- 0x48E => array(0x48F),
- 0x490 => array(0x491),
- 0x492 => array(0x493),
- 0x494 => array(0x495),
- 0x496 => array(0x497),
- 0x498 => array(0x499),
- 0x49A => array(0x49B),
- 0x49C => array(0x49D),
- 0x49E => array(0x49F),
- 0x4A0 => array(0x4A1),
- 0x4A2 => array(0x4A3),
- 0x4A4 => array(0x4A5),
- 0x4A6 => array(0x4A7),
- 0x4A8 => array(0x4A9),
- 0x4AA => array(0x4AB),
- 0x4AC => array(0x4AD),
- 0x4AE => array(0x4AF),
- 0x4B0 => array(0x4B1),
- 0x4B2 => array(0x4B3),
- 0x4B4 => array(0x4B5),
- 0x4B6 => array(0x4B7),
- 0x4B8 => array(0x4B9),
- 0x4BA => array(0x4BB),
- 0x4BC => array(0x4BD),
- 0x4BE => array(0x4BF),
- 0x4C1 => array(0x4C2),
- 0x4C3 => array(0x4C4),
- 0x4C5 => array(0x4C6),
- 0x4C7 => array(0x4C8),
- 0x4C9 => array(0x4CA),
- 0x4CB => array(0x4CC),
- 0x4CD => array(0x4CE),
- 0x4D0 => array(0x4D1),
- 0x4D2 => array(0x4D3),
- 0x4D4 => array(0x4D5),
- 0x4D6 => array(0x4D7),
- 0x4D8 => array(0x4D9),
- 0x4DA => array(0x4DB),
- 0x4DC => array(0x4DD),
- 0x4DE => array(0x4DF),
- 0x4E0 => array(0x4E1),
- 0x4E2 => array(0x4E3),
- 0x4E4 => array(0x4E5),
- 0x4E6 => array(0x4E7),
- 0x4E8 => array(0x4E9),
- 0x4EA => array(0x4EB),
- 0x4EC => array(0x4ED),
- 0x4EE => array(0x4EF),
- 0x4F0 => array(0x4F1),
- 0x4F2 => array(0x4F3),
- 0x4F4 => array(0x4F5),
- 0x4F8 => array(0x4F9),
- 0x500 => array(0x501),
- 0x502 => array(0x503),
- 0x504 => array(0x505),
- 0x506 => array(0x507),
- 0x508 => array(0x509),
- 0x50A => array(0x50B),
- 0x50C => array(0x50D),
- 0x50E => array(0x50F),
- 0x531 => array(0x561),
- 0x532 => array(0x562),
- 0x533 => array(0x563),
- 0x534 => array(0x564),
- 0x535 => array(0x565),
- 0x536 => array(0x566),
- 0x537 => array(0x567),
- 0x538 => array(0x568),
- 0x539 => array(0x569),
- 0x53A => array(0x56A),
- 0x53B => array(0x56B),
- 0x53C => array(0x56C),
- 0x53D => array(0x56D),
- 0x53E => array(0x56E),
- 0x53F => array(0x56F),
- 0x540 => array(0x570),
- 0x541 => array(0x571),
- 0x542 => array(0x572),
- 0x543 => array(0x573),
- 0x544 => array(0x574),
- 0x545 => array(0x575),
- 0x546 => array(0x576),
- 0x547 => array(0x577),
- 0x548 => array(0x578),
- 0x549 => array(0x579),
- 0x54A => array(0x57A),
- 0x54B => array(0x57B),
- 0x54C => array(0x57C),
- 0x54D => array(0x57D),
- 0x54E => array(0x57E),
- 0x54F => array(0x57F),
- 0x550 => array(0x580),
- 0x551 => array(0x581),
- 0x552 => array(0x582),
- 0x553 => array(0x583),
- 0x554 => array(0x584),
- 0x555 => array(0x585),
- 0x556 => array(0x586),
- 0x587 => array(0x565, 0x582),
- 0x1E00 => array(0x1E01),
- 0x1E02 => array(0x1E03),
- 0x1E04 => array(0x1E05),
- 0x1E06 => array(0x1E07),
- 0x1E08 => array(0x1E09),
- 0x1E0A => array(0x1E0B),
- 0x1E0C => array(0x1E0D),
- 0x1E0E => array(0x1E0F),
- 0x1E10 => array(0x1E11),
- 0x1E12 => array(0x1E13),
- 0x1E14 => array(0x1E15),
- 0x1E16 => array(0x1E17),
- 0x1E18 => array(0x1E19),
- 0x1E1A => array(0x1E1B),
- 0x1E1C => array(0x1E1D),
- 0x1E1E => array(0x1E1F),
- 0x1E20 => array(0x1E21),
- 0x1E22 => array(0x1E23),
- 0x1E24 => array(0x1E25),
- 0x1E26 => array(0x1E27),
- 0x1E28 => array(0x1E29),
- 0x1E2A => array(0x1E2B),
- 0x1E2C => array(0x1E2D),
- 0x1E2E => array(0x1E2F),
- 0x1E30 => array(0x1E31),
- 0x1E32 => array(0x1E33),
- 0x1E34 => array(0x1E35),
- 0x1E36 => array(0x1E37),
- 0x1E38 => array(0x1E39),
- 0x1E3A => array(0x1E3B),
- 0x1E3C => array(0x1E3D),
- 0x1E3E => array(0x1E3F),
- 0x1E40 => array(0x1E41),
- 0x1E42 => array(0x1E43),
- 0x1E44 => array(0x1E45),
- 0x1E46 => array(0x1E47),
- 0x1E48 => array(0x1E49),
- 0x1E4A => array(0x1E4B),
- 0x1E4C => array(0x1E4D),
- 0x1E4E => array(0x1E4F),
- 0x1E50 => array(0x1E51),
- 0x1E52 => array(0x1E53),
- 0x1E54 => array(0x1E55),
- 0x1E56 => array(0x1E57),
- 0x1E58 => array(0x1E59),
- 0x1E5A => array(0x1E5B),
- 0x1E5C => array(0x1E5D),
- 0x1E5E => array(0x1E5F),
- 0x1E60 => array(0x1E61),
- 0x1E62 => array(0x1E63),
- 0x1E64 => array(0x1E65),
- 0x1E66 => array(0x1E67),
- 0x1E68 => array(0x1E69),
- 0x1E6A => array(0x1E6B),
- 0x1E6C => array(0x1E6D),
- 0x1E6E => array(0x1E6F),
- 0x1E70 => array(0x1E71),
- 0x1E72 => array(0x1E73),
- 0x1E74 => array(0x1E75),
- 0x1E76 => array(0x1E77),
- 0x1E78 => array(0x1E79),
- 0x1E7A => array(0x1E7B),
- 0x1E7C => array(0x1E7D),
- 0x1E7E => array(0x1E7F),
- 0x1E80 => array(0x1E81),
- 0x1E82 => array(0x1E83),
- 0x1E84 => array(0x1E85),
- 0x1E86 => array(0x1E87),
- 0x1E88 => array(0x1E89),
- 0x1E8A => array(0x1E8B),
- 0x1E8C => array(0x1E8D),
- 0x1E8E => array(0x1E8F),
- 0x1E90 => array(0x1E91),
- 0x1E92 => array(0x1E93),
- 0x1E94 => array(0x1E95),
- 0x1E96 => array(0x68, 0x331),
- 0x1E97 => array(0x74, 0x308),
- 0x1E98 => array(0x77, 0x30A),
- 0x1E99 => array(0x79, 0x30A),
- 0x1E9A => array(0x61, 0x2BE),
- 0x1E9B => array(0x1E61),
- 0x1EA0 => array(0x1EA1),
- 0x1EA2 => array(0x1EA3),
- 0x1EA4 => array(0x1EA5),
- 0x1EA6 => array(0x1EA7),
- 0x1EA8 => array(0x1EA9),
- 0x1EAA => array(0x1EAB),
- 0x1EAC => array(0x1EAD),
- 0x1EAE => array(0x1EAF),
- 0x1EB0 => array(0x1EB1),
- 0x1EB2 => array(0x1EB3),
- 0x1EB4 => array(0x1EB5),
- 0x1EB6 => array(0x1EB7),
- 0x1EB8 => array(0x1EB9),
- 0x1EBA => array(0x1EBB),
- 0x1EBC => array(0x1EBD),
- 0x1EBE => array(0x1EBF),
- 0x1EC0 => array(0x1EC1),
- 0x1EC2 => array(0x1EC3),
- 0x1EC4 => array(0x1EC5),
- 0x1EC6 => array(0x1EC7),
- 0x1EC8 => array(0x1EC9),
- 0x1ECA => array(0x1ECB),
- 0x1ECC => array(0x1ECD),
- 0x1ECE => array(0x1ECF),
- 0x1ED0 => array(0x1ED1),
- 0x1ED2 => array(0x1ED3),
- 0x1ED4 => array(0x1ED5),
- 0x1ED6 => array(0x1ED7),
- 0x1ED8 => array(0x1ED9),
- 0x1EDA => array(0x1EDB),
- 0x1EDC => array(0x1EDD),
- 0x1EDE => array(0x1EDF),
- 0x1EE0 => array(0x1EE1),
- 0x1EE2 => array(0x1EE3),
- 0x1EE4 => array(0x1EE5),
- 0x1EE6 => array(0x1EE7),
- 0x1EE8 => array(0x1EE9),
- 0x1EEA => array(0x1EEB),
- 0x1EEC => array(0x1EED),
- 0x1EEE => array(0x1EEF),
- 0x1EF0 => array(0x1EF1),
- 0x1EF2 => array(0x1EF3),
- 0x1EF4 => array(0x1EF5),
- 0x1EF6 => array(0x1EF7),
- 0x1EF8 => array(0x1EF9),
- 0x1F08 => array(0x1F00),
- 0x1F09 => array(0x1F01),
- 0x1F0A => array(0x1F02),
- 0x1F0B => array(0x1F03),
- 0x1F0C => array(0x1F04),
- 0x1F0D => array(0x1F05),
- 0x1F0E => array(0x1F06),
- 0x1F0F => array(0x1F07),
- 0x1F18 => array(0x1F10),
- 0x1F19 => array(0x1F11),
- 0x1F1A => array(0x1F12),
- 0x1F1B => array(0x1F13),
- 0x1F1C => array(0x1F14),
- 0x1F1D => array(0x1F15),
- 0x1F28 => array(0x1F20),
- 0x1F29 => array(0x1F21),
- 0x1F2A => array(0x1F22),
- 0x1F2B => array(0x1F23),
- 0x1F2C => array(0x1F24),
- 0x1F2D => array(0x1F25),
- 0x1F2E => array(0x1F26),
- 0x1F2F => array(0x1F27),
- 0x1F38 => array(0x1F30),
- 0x1F39 => array(0x1F31),
- 0x1F3A => array(0x1F32),
- 0x1F3B => array(0x1F33),
- 0x1F3C => array(0x1F34),
- 0x1F3D => array(0x1F35),
- 0x1F3E => array(0x1F36),
- 0x1F3F => array(0x1F37),
- 0x1F48 => array(0x1F40),
- 0x1F49 => array(0x1F41),
- 0x1F4A => array(0x1F42),
- 0x1F4B => array(0x1F43),
- 0x1F4C => array(0x1F44),
- 0x1F4D => array(0x1F45),
- 0x1F50 => array(0x3C5, 0x313),
- 0x1F52 => array(0x3C5, 0x313, 0x300),
- 0x1F54 => array(0x3C5, 0x313, 0x301),
- 0x1F56 => array(0x3C5, 0x313, 0x342),
- 0x1F59 => array(0x1F51),
- 0x1F5B => array(0x1F53),
- 0x1F5D => array(0x1F55),
- 0x1F5F => array(0x1F57),
- 0x1F68 => array(0x1F60),
- 0x1F69 => array(0x1F61),
- 0x1F6A => array(0x1F62),
- 0x1F6B => array(0x1F63),
- 0x1F6C => array(0x1F64),
- 0x1F6D => array(0x1F65),
- 0x1F6E => array(0x1F66),
- 0x1F6F => array(0x1F67),
- 0x1F80 => array(0x1F00, 0x3B9),
- 0x1F81 => array(0x1F01, 0x3B9),
- 0x1F82 => array(0x1F02, 0x3B9),
- 0x1F83 => array(0x1F03, 0x3B9),
- 0x1F84 => array(0x1F04, 0x3B9),
- 0x1F85 => array(0x1F05, 0x3B9),
- 0x1F86 => array(0x1F06, 0x3B9),
- 0x1F87 => array(0x1F07, 0x3B9),
- 0x1F88 => array(0x1F00, 0x3B9),
- 0x1F89 => array(0x1F01, 0x3B9),
- 0x1F8A => array(0x1F02, 0x3B9),
- 0x1F8B => array(0x1F03, 0x3B9),
- 0x1F8C => array(0x1F04, 0x3B9),
- 0x1F8D => array(0x1F05, 0x3B9),
- 0x1F8E => array(0x1F06, 0x3B9),
- 0x1F8F => array(0x1F07, 0x3B9),
- 0x1F90 => array(0x1F20, 0x3B9),
- 0x1F91 => array(0x1F21, 0x3B9),
- 0x1F92 => array(0x1F22, 0x3B9),
- 0x1F93 => array(0x1F23, 0x3B9),
- 0x1F94 => array(0x1F24, 0x3B9),
- 0x1F95 => array(0x1F25, 0x3B9),
- 0x1F96 => array(0x1F26, 0x3B9),
- 0x1F97 => array(0x1F27, 0x3B9),
- 0x1F98 => array(0x1F20, 0x3B9),
- 0x1F99 => array(0x1F21, 0x3B9),
- 0x1F9A => array(0x1F22, 0x3B9),
- 0x1F9B => array(0x1F23, 0x3B9),
- 0x1F9C => array(0x1F24, 0x3B9),
- 0x1F9D => array(0x1F25, 0x3B9),
- 0x1F9E => array(0x1F26, 0x3B9),
- 0x1F9F => array(0x1F27, 0x3B9),
- 0x1FA0 => array(0x1F60, 0x3B9),
- 0x1FA1 => array(0x1F61, 0x3B9),
- 0x1FA2 => array(0x1F62, 0x3B9),
- 0x1FA3 => array(0x1F63, 0x3B9),
- 0x1FA4 => array(0x1F64, 0x3B9),
- 0x1FA5 => array(0x1F65, 0x3B9),
- 0x1FA6 => array(0x1F66, 0x3B9),
- 0x1FA7 => array(0x1F67, 0x3B9),
- 0x1FA8 => array(0x1F60, 0x3B9),
- 0x1FA9 => array(0x1F61, 0x3B9),
- 0x1FAA => array(0x1F62, 0x3B9),
- 0x1FAB => array(0x1F63, 0x3B9),
- 0x1FAC => array(0x1F64, 0x3B9),
- 0x1FAD => array(0x1F65, 0x3B9),
- 0x1FAE => array(0x1F66, 0x3B9),
- 0x1FAF => array(0x1F67, 0x3B9),
- 0x1FB2 => array(0x1F70, 0x3B9),
- 0x1FB3 => array(0x3B1, 0x3B9),
- 0x1FB4 => array(0x3AC, 0x3B9),
- 0x1FB6 => array(0x3B1, 0x342),
- 0x1FB7 => array(0x3B1, 0x342, 0x3B9),
- 0x1FB8 => array(0x1FB0),
- 0x1FB9 => array(0x1FB1),
- 0x1FBA => array(0x1F70),
- 0x1FBB => array(0x1F71),
- 0x1FBC => array(0x3B1, 0x3B9),
- 0x1FBE => array(0x3B9),
- 0x1FC2 => array(0x1F74, 0x3B9),
- 0x1FC3 => array(0x3B7, 0x3B9),
- 0x1FC4 => array(0x3AE, 0x3B9),
- 0x1FC6 => array(0x3B7, 0x342),
- 0x1FC7 => array(0x3B7, 0x342, 0x3B9),
- 0x1FC8 => array(0x1F72),
- 0x1FC9 => array(0x1F73),
- 0x1FCA => array(0x1F74),
- 0x1FCB => array(0x1F75),
- 0x1FCC => array(0x3B7, 0x3B9),
- 0x1FD2 => array(0x3B9, 0x308, 0x300),
- 0x1FD3 => array(0x3B9, 0x308, 0x301),
- 0x1FD6 => array(0x3B9, 0x342),
- 0x1FD7 => array(0x3B9, 0x308, 0x342),
- 0x1FD8 => array(0x1FD0),
- 0x1FD9 => array(0x1FD1),
- 0x1FDA => array(0x1F76),
- 0x1FDB => array(0x1F77),
- 0x1FE2 => array(0x3C5, 0x308, 0x300),
- 0x1FE3 => array(0x3C5, 0x308, 0x301),
- 0x1FE4 => array(0x3C1, 0x313),
- 0x1FE6 => array(0x3C5, 0x342),
- 0x1FE7 => array(0x3C5, 0x308, 0x342),
- 0x1FE8 => array(0x1FE0),
- 0x1FE9 => array(0x1FE1),
- 0x1FEA => array(0x1F7A),
- 0x1FEB => array(0x1F7B),
- 0x1FEC => array(0x1FE5),
- 0x1FF2 => array(0x1F7C, 0x3B9),
- 0x1FF3 => array(0x3C9, 0x3B9),
- 0x1FF4 => array(0x3CE, 0x3B9),
- 0x1FF6 => array(0x3C9, 0x342),
- 0x1FF7 => array(0x3C9, 0x342, 0x3B9),
- 0x1FF8 => array(0x1F78),
- 0x1FF9 => array(0x1F79),
- 0x1FFA => array(0x1F7C),
- 0x1FFB => array(0x1F7D),
- 0x1FFC => array(0x3C9, 0x3B9),
- 0x20A8 => array(0x72, 0x73),
- 0x2102 => array(0x63),
- 0x2103 => array(0xB0, 0x63),
- 0x2107 => array(0x25B),
- 0x2109 => array(0xB0, 0x66),
- 0x210B => array(0x68),
- 0x210C => array(0x68),
- 0x210D => array(0x68),
- 0x2110 => array(0x69),
- 0x2111 => array(0x69),
- 0x2112 => array(0x6C),
- 0x2115 => array(0x6E),
- 0x2116 => array(0x6E, 0x6F),
- 0x2119 => array(0x70),
- 0x211A => array(0x71),
- 0x211B => array(0x72),
- 0x211C => array(0x72),
- 0x211D => array(0x72),
- 0x2120 => array(0x73, 0x6D),
- 0x2121 => array(0x74, 0x65, 0x6C),
- 0x2122 => array(0x74, 0x6D),
- 0x2124 => array(0x7A),
- 0x2126 => array(0x3C9),
- 0x2128 => array(0x7A),
- 0x212A => array(0x6B),
- 0x212B => array(0xE5),
- 0x212C => array(0x62),
- 0x212D => array(0x63),
- 0x2130 => array(0x65),
- 0x2131 => array(0x66),
- 0x2133 => array(0x6D),
- 0x213E => array(0x3B3),
- 0x213F => array(0x3C0),
- 0x2145 => array(0x64),
- 0x2160 => array(0x2170),
- 0x2161 => array(0x2171),
- 0x2162 => array(0x2172),
- 0x2163 => array(0x2173),
- 0x2164 => array(0x2174),
- 0x2165 => array(0x2175),
- 0x2166 => array(0x2176),
- 0x2167 => array(0x2177),
- 0x2168 => array(0x2178),
- 0x2169 => array(0x2179),
- 0x216A => array(0x217A),
- 0x216B => array(0x217B),
- 0x216C => array(0x217C),
- 0x216D => array(0x217D),
- 0x216E => array(0x217E),
- 0x216F => array(0x217F),
- 0x24B6 => array(0x24D0),
- 0x24B7 => array(0x24D1),
- 0x24B8 => array(0x24D2),
- 0x24B9 => array(0x24D3),
- 0x24BA => array(0x24D4),
- 0x24BB => array(0x24D5),
- 0x24BC => array(0x24D6),
- 0x24BD => array(0x24D7),
- 0x24BE => array(0x24D8),
- 0x24BF => array(0x24D9),
- 0x24C0 => array(0x24DA),
- 0x24C1 => array(0x24DB),
- 0x24C2 => array(0x24DC),
- 0x24C3 => array(0x24DD),
- 0x24C4 => array(0x24DE),
- 0x24C5 => array(0x24DF),
- 0x24C6 => array(0x24E0),
- 0x24C7 => array(0x24E1),
- 0x24C8 => array(0x24E2),
- 0x24C9 => array(0x24E3),
- 0x24CA => array(0x24E4),
- 0x24CB => array(0x24E5),
- 0x24CC => array(0x24E6),
- 0x24CD => array(0x24E7),
- 0x24CE => array(0x24E8),
- 0x24CF => array(0x24E9),
- 0x3371 => array(0x68, 0x70, 0x61),
- 0x3373 => array(0x61, 0x75),
- 0x3375 => array(0x6F, 0x76),
- 0x3380 => array(0x70, 0x61),
- 0x3381 => array(0x6E, 0x61),
- 0x3382 => array(0x3BC, 0x61),
- 0x3383 => array(0x6D, 0x61),
- 0x3384 => array(0x6B, 0x61),
- 0x3385 => array(0x6B, 0x62),
- 0x3386 => array(0x6D, 0x62),
- 0x3387 => array(0x67, 0x62),
- 0x338A => array(0x70, 0x66),
- 0x338B => array(0x6E, 0x66),
- 0x338C => array(0x3BC, 0x66),
- 0x3390 => array(0x68, 0x7A),
- 0x3391 => array(0x6B, 0x68, 0x7A),
- 0x3392 => array(0x6D, 0x68, 0x7A),
- 0x3393 => array(0x67, 0x68, 0x7A),
- 0x3394 => array(0x74, 0x68, 0x7A),
- 0x33A9 => array(0x70, 0x61),
- 0x33AA => array(0x6B, 0x70, 0x61),
- 0x33AB => array(0x6D, 0x70, 0x61),
- 0x33AC => array(0x67, 0x70, 0x61),
- 0x33B4 => array(0x70, 0x76),
- 0x33B5 => array(0x6E, 0x76),
- 0x33B6 => array(0x3BC, 0x76),
- 0x33B7 => array(0x6D, 0x76),
- 0x33B8 => array(0x6B, 0x76),
- 0x33B9 => array(0x6D, 0x76),
- 0x33BA => array(0x70, 0x77),
- 0x33BB => array(0x6E, 0x77),
- 0x33BC => array(0x3BC, 0x77),
- 0x33BD => array(0x6D, 0x77),
- 0x33BE => array(0x6B, 0x77),
- 0x33BF => array(0x6D, 0x77),
- 0x33C0 => array(0x6B, 0x3C9),
- 0x33C1 => array(0x6D, 0x3C9),
- /* 0x33C2 => array(0x61, 0x2E, 0x6D, 0x2E), */
- 0x33C3 => array(0x62, 0x71),
- 0x33C6 => array(0x63, 0x2215, 0x6B, 0x67),
- 0x33C7 => array(0x63, 0x6F, 0x2E),
- 0x33C8 => array(0x64, 0x62),
- 0x33C9 => array(0x67, 0x79),
- 0x33CB => array(0x68, 0x70),
- 0x33CD => array(0x6B, 0x6B),
- 0x33CE => array(0x6B, 0x6D),
- 0x33D7 => array(0x70, 0x68),
- 0x33D9 => array(0x70, 0x70, 0x6D),
- 0x33DA => array(0x70, 0x72),
- 0x33DC => array(0x73, 0x76),
- 0x33DD => array(0x77, 0x62),
- 0xFB00 => array(0x66, 0x66),
- 0xFB01 => array(0x66, 0x69),
- 0xFB02 => array(0x66, 0x6C),
- 0xFB03 => array(0x66, 0x66, 0x69),
- 0xFB04 => array(0x66, 0x66, 0x6C),
- 0xFB05 => array(0x73, 0x74),
- 0xFB06 => array(0x73, 0x74),
- 0xFB13 => array(0x574, 0x576),
- 0xFB14 => array(0x574, 0x565),
- 0xFB15 => array(0x574, 0x56B),
- 0xFB16 => array(0x57E, 0x576),
- 0xFB17 => array(0x574, 0x56D),
- 0xFF21 => array(0xFF41),
- 0xFF22 => array(0xFF42),
- 0xFF23 => array(0xFF43),
- 0xFF24 => array(0xFF44),
- 0xFF25 => array(0xFF45),
- 0xFF26 => array(0xFF46),
- 0xFF27 => array(0xFF47),
- 0xFF28 => array(0xFF48),
- 0xFF29 => array(0xFF49),
- 0xFF2A => array(0xFF4A),
- 0xFF2B => array(0xFF4B),
- 0xFF2C => array(0xFF4C),
- 0xFF2D => array(0xFF4D),
- 0xFF2E => array(0xFF4E),
- 0xFF2F => array(0xFF4F),
- 0xFF30 => array(0xFF50),
- 0xFF31 => array(0xFF51),
- 0xFF32 => array(0xFF52),
- 0xFF33 => array(0xFF53),
- 0xFF34 => array(0xFF54),
- 0xFF35 => array(0xFF55),
- 0xFF36 => array(0xFF56),
- 0xFF37 => array(0xFF57),
- 0xFF38 => array(0xFF58),
- 0xFF39 => array(0xFF59),
- 0xFF3A => array(0xFF5A),
- 0x10400 => array(0x10428),
- 0x10401 => array(0x10429),
- 0x10402 => array(0x1042A),
- 0x10403 => array(0x1042B),
- 0x10404 => array(0x1042C),
- 0x10405 => array(0x1042D),
- 0x10406 => array(0x1042E),
- 0x10407 => array(0x1042F),
- 0x10408 => array(0x10430),
- 0x10409 => array(0x10431),
- 0x1040A => array(0x10432),
- 0x1040B => array(0x10433),
- 0x1040C => array(0x10434),
- 0x1040D => array(0x10435),
- 0x1040E => array(0x10436),
- 0x1040F => array(0x10437),
- 0x10410 => array(0x10438),
- 0x10411 => array(0x10439),
- 0x10412 => array(0x1043A),
- 0x10413 => array(0x1043B),
- 0x10414 => array(0x1043C),
- 0x10415 => array(0x1043D),
- 0x10416 => array(0x1043E),
- 0x10417 => array(0x1043F),
- 0x10418 => array(0x10440),
- 0x10419 => array(0x10441),
- 0x1041A => array(0x10442),
- 0x1041B => array(0x10443),
- 0x1041C => array(0x10444),
- 0x1041D => array(0x10445),
- 0x1041E => array(0x10446),
- 0x1041F => array(0x10447),
- 0x10420 => array(0x10448),
- 0x10421 => array(0x10449),
- 0x10422 => array(0x1044A),
- 0x10423 => array(0x1044B),
- 0x10424 => array(0x1044C),
- 0x10425 => array(0x1044D),
- 0x1D400 => array(0x61),
- 0x1D401 => array(0x62),
- 0x1D402 => array(0x63),
- 0x1D403 => array(0x64),
- 0x1D404 => array(0x65),
- 0x1D405 => array(0x66),
- 0x1D406 => array(0x67),
- 0x1D407 => array(0x68),
- 0x1D408 => array(0x69),
- 0x1D409 => array(0x6A),
- 0x1D40A => array(0x6B),
- 0x1D40B => array(0x6C),
- 0x1D40C => array(0x6D),
- 0x1D40D => array(0x6E),
- 0x1D40E => array(0x6F),
- 0x1D40F => array(0x70),
- 0x1D410 => array(0x71),
- 0x1D411 => array(0x72),
- 0x1D412 => array(0x73),
- 0x1D413 => array(0x74),
- 0x1D414 => array(0x75),
- 0x1D415 => array(0x76),
- 0x1D416 => array(0x77),
- 0x1D417 => array(0x78),
- 0x1D418 => array(0x79),
- 0x1D419 => array(0x7A),
- 0x1D434 => array(0x61),
- 0x1D435 => array(0x62),
- 0x1D436 => array(0x63),
- 0x1D437 => array(0x64),
- 0x1D438 => array(0x65),
- 0x1D439 => array(0x66),
- 0x1D43A => array(0x67),
- 0x1D43B => array(0x68),
- 0x1D43C => array(0x69),
- 0x1D43D => array(0x6A),
- 0x1D43E => array(0x6B),
- 0x1D43F => array(0x6C),
- 0x1D440 => array(0x6D),
- 0x1D441 => array(0x6E),
- 0x1D442 => array(0x6F),
- 0x1D443 => array(0x70),
- 0x1D444 => array(0x71),
- 0x1D445 => array(0x72),
- 0x1D446 => array(0x73),
- 0x1D447 => array(0x74),
- 0x1D448 => array(0x75),
- 0x1D449 => array(0x76),
- 0x1D44A => array(0x77),
- 0x1D44B => array(0x78),
- 0x1D44C => array(0x79),
- 0x1D44D => array(0x7A),
- 0x1D468 => array(0x61),
- 0x1D469 => array(0x62),
- 0x1D46A => array(0x63),
- 0x1D46B => array(0x64),
- 0x1D46C => array(0x65),
- 0x1D46D => array(0x66),
- 0x1D46E => array(0x67),
- 0x1D46F => array(0x68),
- 0x1D470 => array(0x69),
- 0x1D471 => array(0x6A),
- 0x1D472 => array(0x6B),
- 0x1D473 => array(0x6C),
- 0x1D474 => array(0x6D),
- 0x1D475 => array(0x6E),
- 0x1D476 => array(0x6F),
- 0x1D477 => array(0x70),
- 0x1D478 => array(0x71),
- 0x1D479 => array(0x72),
- 0x1D47A => array(0x73),
- 0x1D47B => array(0x74),
- 0x1D47C => array(0x75),
- 0x1D47D => array(0x76),
- 0x1D47E => array(0x77),
- 0x1D47F => array(0x78),
- 0x1D480 => array(0x79),
- 0x1D481 => array(0x7A),
- 0x1D49C => array(0x61),
- 0x1D49E => array(0x63),
- 0x1D49F => array(0x64),
- 0x1D4A2 => array(0x67),
- 0x1D4A5 => array(0x6A),
- 0x1D4A6 => array(0x6B),
- 0x1D4A9 => array(0x6E),
- 0x1D4AA => array(0x6F),
- 0x1D4AB => array(0x70),
- 0x1D4AC => array(0x71),
- 0x1D4AE => array(0x73),
- 0x1D4AF => array(0x74),
- 0x1D4B0 => array(0x75),
- 0x1D4B1 => array(0x76),
- 0x1D4B2 => array(0x77),
- 0x1D4B3 => array(0x78),
- 0x1D4B4 => array(0x79),
- 0x1D4B5 => array(0x7A),
- 0x1D4D0 => array(0x61),
- 0x1D4D1 => array(0x62),
- 0x1D4D2 => array(0x63),
- 0x1D4D3 => array(0x64),
- 0x1D4D4 => array(0x65),
- 0x1D4D5 => array(0x66),
- 0x1D4D6 => array(0x67),
- 0x1D4D7 => array(0x68),
- 0x1D4D8 => array(0x69),
- 0x1D4D9 => array(0x6A),
- 0x1D4DA => array(0x6B),
- 0x1D4DB => array(0x6C),
- 0x1D4DC => array(0x6D),
- 0x1D4DD => array(0x6E),
- 0x1D4DE => array(0x6F),
- 0x1D4DF => array(0x70),
- 0x1D4E0 => array(0x71),
- 0x1D4E1 => array(0x72),
- 0x1D4E2 => array(0x73),
- 0x1D4E3 => array(0x74),
- 0x1D4E4 => array(0x75),
- 0x1D4E5 => array(0x76),
- 0x1D4E6 => array(0x77),
- 0x1D4E7 => array(0x78),
- 0x1D4E8 => array(0x79),
- 0x1D4E9 => array(0x7A),
- 0x1D504 => array(0x61),
- 0x1D505 => array(0x62),
- 0x1D507 => array(0x64),
- 0x1D508 => array(0x65),
- 0x1D509 => array(0x66),
- 0x1D50A => array(0x67),
- 0x1D50D => array(0x6A),
- 0x1D50E => array(0x6B),
- 0x1D50F => array(0x6C),
- 0x1D510 => array(0x6D),
- 0x1D511 => array(0x6E),
- 0x1D512 => array(0x6F),
- 0x1D513 => array(0x70),
- 0x1D514 => array(0x71),
- 0x1D516 => array(0x73),
- 0x1D517 => array(0x74),
- 0x1D518 => array(0x75),
- 0x1D519 => array(0x76),
- 0x1D51A => array(0x77),
- 0x1D51B => array(0x78),
- 0x1D51C => array(0x79),
- 0x1D538 => array(0x61),
- 0x1D539 => array(0x62),
- 0x1D53B => array(0x64),
- 0x1D53C => array(0x65),
- 0x1D53D => array(0x66),
- 0x1D53E => array(0x67),
- 0x1D540 => array(0x69),
- 0x1D541 => array(0x6A),
- 0x1D542 => array(0x6B),
- 0x1D543 => array(0x6C),
- 0x1D544 => array(0x6D),
- 0x1D546 => array(0x6F),
- 0x1D54A => array(0x73),
- 0x1D54B => array(0x74),
- 0x1D54C => array(0x75),
- 0x1D54D => array(0x76),
- 0x1D54E => array(0x77),
- 0x1D54F => array(0x78),
- 0x1D550 => array(0x79),
- 0x1D56C => array(0x61),
- 0x1D56D => array(0x62),
- 0x1D56E => array(0x63),
- 0x1D56F => array(0x64),
- 0x1D570 => array(0x65),
- 0x1D571 => array(0x66),
- 0x1D572 => array(0x67),
- 0x1D573 => array(0x68),
- 0x1D574 => array(0x69),
- 0x1D575 => array(0x6A),
- 0x1D576 => array(0x6B),
- 0x1D577 => array(0x6C),
- 0x1D578 => array(0x6D),
- 0x1D579 => array(0x6E),
- 0x1D57A => array(0x6F),
- 0x1D57B => array(0x70),
- 0x1D57C => array(0x71),
- 0x1D57D => array(0x72),
- 0x1D57E => array(0x73),
- 0x1D57F => array(0x74),
- 0x1D580 => array(0x75),
- 0x1D581 => array(0x76),
- 0x1D582 => array(0x77),
- 0x1D583 => array(0x78),
- 0x1D584 => array(0x79),
- 0x1D585 => array(0x7A),
- 0x1D5A0 => array(0x61),
- 0x1D5A1 => array(0x62),
- 0x1D5A2 => array(0x63),
- 0x1D5A3 => array(0x64),
- 0x1D5A4 => array(0x65),
- 0x1D5A5 => array(0x66),
- 0x1D5A6 => array(0x67),
- 0x1D5A7 => array(0x68),
- 0x1D5A8 => array(0x69),
- 0x1D5A9 => array(0x6A),
- 0x1D5AA => array(0x6B),
- 0x1D5AB => array(0x6C),
- 0x1D5AC => array(0x6D),
- 0x1D5AD => array(0x6E),
- 0x1D5AE => array(0x6F),
- 0x1D5AF => array(0x70),
- 0x1D5B0 => array(0x71),
- 0x1D5B1 => array(0x72),
- 0x1D5B2 => array(0x73),
- 0x1D5B3 => array(0x74),
- 0x1D5B4 => array(0x75),
- 0x1D5B5 => array(0x76),
- 0x1D5B6 => array(0x77),
- 0x1D5B7 => array(0x78),
- 0x1D5B8 => array(0x79),
- 0x1D5B9 => array(0x7A),
- 0x1D5D4 => array(0x61),
- 0x1D5D5 => array(0x62),
- 0x1D5D6 => array(0x63),
- 0x1D5D7 => array(0x64),
- 0x1D5D8 => array(0x65),
- 0x1D5D9 => array(0x66),
- 0x1D5DA => array(0x67),
- 0x1D5DB => array(0x68),
- 0x1D5DC => array(0x69),
- 0x1D5DD => array(0x6A),
- 0x1D5DE => array(0x6B),
- 0x1D5DF => array(0x6C),
- 0x1D5E0 => array(0x6D),
- 0x1D5E1 => array(0x6E),
- 0x1D5E2 => array(0x6F),
- 0x1D5E3 => array(0x70),
- 0x1D5E4 => array(0x71),
- 0x1D5E5 => array(0x72),
- 0x1D5E6 => array(0x73),
- 0x1D5E7 => array(0x74),
- 0x1D5E8 => array(0x75),
- 0x1D5E9 => array(0x76),
- 0x1D5EA => array(0x77),
- 0x1D5EB => array(0x78),
- 0x1D5EC => array(0x79),
- 0x1D5ED => array(0x7A),
- 0x1D608 => array(0x61),
- 0x1D609 => array(0x62),
- 0x1D60A => array(0x63),
- 0x1D60B => array(0x64),
- 0x1D60C => array(0x65),
- 0x1D60D => array(0x66),
- 0x1D60E => array(0x67),
- 0x1D60F => array(0x68),
- 0x1D610 => array(0x69),
- 0x1D611 => array(0x6A),
- 0x1D612 => array(0x6B),
- 0x1D613 => array(0x6C),
- 0x1D614 => array(0x6D),
- 0x1D615 => array(0x6E),
- 0x1D616 => array(0x6F),
- 0x1D617 => array(0x70),
- 0x1D618 => array(0x71),
- 0x1D619 => array(0x72),
- 0x1D61A => array(0x73),
- 0x1D61B => array(0x74),
- 0x1D61C => array(0x75),
- 0x1D61D => array(0x76),
- 0x1D61E => array(0x77),
- 0x1D61F => array(0x78),
- 0x1D620 => array(0x79),
- 0x1D621 => array(0x7A),
- 0x1D63C => array(0x61),
- 0x1D63D => array(0x62),
- 0x1D63E => array(0x63),
- 0x1D63F => array(0x64),
- 0x1D640 => array(0x65),
- 0x1D641 => array(0x66),
- 0x1D642 => array(0x67),
- 0x1D643 => array(0x68),
- 0x1D644 => array(0x69),
- 0x1D645 => array(0x6A),
- 0x1D646 => array(0x6B),
- 0x1D647 => array(0x6C),
- 0x1D648 => array(0x6D),
- 0x1D649 => array(0x6E),
- 0x1D64A => array(0x6F),
- 0x1D64B => array(0x70),
- 0x1D64C => array(0x71),
- 0x1D64D => array(0x72),
- 0x1D64E => array(0x73),
- 0x1D64F => array(0x74),
- 0x1D650 => array(0x75),
- 0x1D651 => array(0x76),
- 0x1D652 => array(0x77),
- 0x1D653 => array(0x78),
- 0x1D654 => array(0x79),
- 0x1D655 => array(0x7A),
- 0x1D670 => array(0x61),
- 0x1D671 => array(0x62),
- 0x1D672 => array(0x63),
- 0x1D673 => array(0x64),
- 0x1D674 => array(0x65),
- 0x1D675 => array(0x66),
- 0x1D676 => array(0x67),
- 0x1D677 => array(0x68),
- 0x1D678 => array(0x69),
- 0x1D679 => array(0x6A),
- 0x1D67A => array(0x6B),
- 0x1D67B => array(0x6C),
- 0x1D67C => array(0x6D),
- 0x1D67D => array(0x6E),
- 0x1D67E => array(0x6F),
- 0x1D67F => array(0x70),
- 0x1D680 => array(0x71),
- 0x1D681 => array(0x72),
- 0x1D682 => array(0x73),
- 0x1D683 => array(0x74),
- 0x1D684 => array(0x75),
- 0x1D685 => array(0x76),
- 0x1D686 => array(0x77),
- 0x1D687 => array(0x78),
- 0x1D688 => array(0x79),
- 0x1D689 => array(0x7A),
- 0x1D6A8 => array(0x3B1),
- 0x1D6A9 => array(0x3B2),
- 0x1D6AA => array(0x3B3),
- 0x1D6AB => array(0x3B4),
- 0x1D6AC => array(0x3B5),
- 0x1D6AD => array(0x3B6),
- 0x1D6AE => array(0x3B7),
- 0x1D6AF => array(0x3B8),
- 0x1D6B0 => array(0x3B9),
- 0x1D6B1 => array(0x3BA),
- 0x1D6B2 => array(0x3BB),
- 0x1D6B3 => array(0x3BC),
- 0x1D6B4 => array(0x3BD),
- 0x1D6B5 => array(0x3BE),
- 0x1D6B6 => array(0x3BF),
- 0x1D6B7 => array(0x3C0),
- 0x1D6B8 => array(0x3C1),
- 0x1D6B9 => array(0x3B8),
- 0x1D6BA => array(0x3C3),
- 0x1D6BB => array(0x3C4),
- 0x1D6BC => array(0x3C5),
- 0x1D6BD => array(0x3C6),
- 0x1D6BE => array(0x3C7),
- 0x1D6BF => array(0x3C8),
- 0x1D6C0 => array(0x3C9),
- 0x1D6D3 => array(0x3C3),
- 0x1D6E2 => array(0x3B1),
- 0x1D6E3 => array(0x3B2),
- 0x1D6E4 => array(0x3B3),
- 0x1D6E5 => array(0x3B4),
- 0x1D6E6 => array(0x3B5),
- 0x1D6E7 => array(0x3B6),
- 0x1D6E8 => array(0x3B7),
- 0x1D6E9 => array(0x3B8),
- 0x1D6EA => array(0x3B9),
- 0x1D6EB => array(0x3BA),
- 0x1D6EC => array(0x3BB),
- 0x1D6ED => array(0x3BC),
- 0x1D6EE => array(0x3BD),
- 0x1D6EF => array(0x3BE),
- 0x1D6F0 => array(0x3BF),
- 0x1D6F1 => array(0x3C0),
- 0x1D6F2 => array(0x3C1),
- 0x1D6F3 => array(0x3B8),
- 0x1D6F4 => array(0x3C3),
- 0x1D6F5 => array(0x3C4),
- 0x1D6F6 => array(0x3C5),
- 0x1D6F7 => array(0x3C6),
- 0x1D6F8 => array(0x3C7),
- 0x1D6F9 => array(0x3C8),
- 0x1D6FA => array(0x3C9),
- 0x1D70D => array(0x3C3),
- 0x1D71C => array(0x3B1),
- 0x1D71D => array(0x3B2),
- 0x1D71E => array(0x3B3),
- 0x1D71F => array(0x3B4),
- 0x1D720 => array(0x3B5),
- 0x1D721 => array(0x3B6),
- 0x1D722 => array(0x3B7),
- 0x1D723 => array(0x3B8),
- 0x1D724 => array(0x3B9),
- 0x1D725 => array(0x3BA),
- 0x1D726 => array(0x3BB),
- 0x1D727 => array(0x3BC),
- 0x1D728 => array(0x3BD),
- 0x1D729 => array(0x3BE),
- 0x1D72A => array(0x3BF),
- 0x1D72B => array(0x3C0),
- 0x1D72C => array(0x3C1),
- 0x1D72D => array(0x3B8),
- 0x1D72E => array(0x3C3),
- 0x1D72F => array(0x3C4),
- 0x1D730 => array(0x3C5),
- 0x1D731 => array(0x3C6),
- 0x1D732 => array(0x3C7),
- 0x1D733 => array(0x3C8),
- 0x1D734 => array(0x3C9),
- 0x1D747 => array(0x3C3),
- 0x1D756 => array(0x3B1),
- 0x1D757 => array(0x3B2),
- 0x1D758 => array(0x3B3),
- 0x1D759 => array(0x3B4),
- 0x1D75A => array(0x3B5),
- 0x1D75B => array(0x3B6),
- 0x1D75C => array(0x3B7),
- 0x1D75D => array(0x3B8),
- 0x1D75E => array(0x3B9),
- 0x1D75F => array(0x3BA),
- 0x1D760 => array(0x3BB),
- 0x1D761 => array(0x3BC),
- 0x1D762 => array(0x3BD),
- 0x1D763 => array(0x3BE),
- 0x1D764 => array(0x3BF),
- 0x1D765 => array(0x3C0),
- 0x1D766 => array(0x3C1),
- 0x1D767 => array(0x3B8),
- 0x1D768 => array(0x3C3),
- 0x1D769 => array(0x3C4),
- 0x1D76A => array(0x3C5),
- 0x1D76B => array(0x3C6),
- 0x1D76C => array(0x3C7),
- 0x1D76D => array(0x3C8),
- 0x1D76E => array(0x3C9),
- 0x1D781 => array(0x3C3),
- 0x1D790 => array(0x3B1),
- 0x1D791 => array(0x3B2),
- 0x1D792 => array(0x3B3),
- 0x1D793 => array(0x3B4),
- 0x1D794 => array(0x3B5),
- 0x1D795 => array(0x3B6),
- 0x1D796 => array(0x3B7),
- 0x1D797 => array(0x3B8),
- 0x1D798 => array(0x3B9),
- 0x1D799 => array(0x3BA),
- 0x1D79A => array(0x3BB),
- 0x1D79B => array(0x3BC),
- 0x1D79C => array(0x3BD),
- 0x1D79D => array(0x3BE),
- 0x1D79E => array(0x3BF),
- 0x1D79F => array(0x3C0),
- 0x1D7A0 => array(0x3C1),
- 0x1D7A1 => array(0x3B8),
- 0x1D7A2 => array(0x3C3),
- 0x1D7A3 => array(0x3C4),
- 0x1D7A4 => array(0x3C5),
- 0x1D7A5 => array(0x3C6),
- 0x1D7A6 => array(0x3C7),
- 0x1D7A7 => array(0x3C8),
- 0x1D7A8 => array(0x3C9),
- 0x1D7BB => array(0x3C3),
- 0x3F9 => array(0x3C3),
- 0x1D2C => array(0x61),
- 0x1D2D => array(0xE6),
- 0x1D2E => array(0x62),
- 0x1D30 => array(0x64),
- 0x1D31 => array(0x65),
- 0x1D32 => array(0x1DD),
- 0x1D33 => array(0x67),
- 0x1D34 => array(0x68),
- 0x1D35 => array(0x69),
- 0x1D36 => array(0x6A),
- 0x1D37 => array(0x6B),
- 0x1D38 => array(0x6C),
- 0x1D39 => array(0x6D),
- 0x1D3A => array(0x6E),
- 0x1D3C => array(0x6F),
- 0x1D3D => array(0x223),
- 0x1D3E => array(0x70),
- 0x1D3F => array(0x72),
- 0x1D40 => array(0x74),
- 0x1D41 => array(0x75),
- 0x1D42 => array(0x77),
- 0x213B => array(0x66, 0x61, 0x78),
- 0x3250 => array(0x70, 0x74, 0x65),
- 0x32CC => array(0x68, 0x67),
- 0x32CE => array(0x65, 0x76),
- 0x32CF => array(0x6C, 0x74, 0x64),
- 0x337A => array(0x69, 0x75),
- 0x33DE => array(0x76, 0x2215, 0x6D),
- 0x33DF => array(0x61, 0x2215, 0x6D)
- );
-
- /**
- * Normalization Combining Classes; Code Points not listed
- * got Combining Class 0.
- *
- * @static
- * @var array
- * @access private
- */
- private static $_np_norm_combcls = array(
- 0x334 => 1,
- 0x335 => 1,
- 0x336 => 1,
- 0x337 => 1,
- 0x338 => 1,
- 0x93C => 7,
- 0x9BC => 7,
- 0xA3C => 7,
- 0xABC => 7,
- 0xB3C => 7,
- 0xCBC => 7,
- 0x1037 => 7,
- 0x3099 => 8,
- 0x309A => 8,
- 0x94D => 9,
- 0x9CD => 9,
- 0xA4D => 9,
- 0xACD => 9,
- 0xB4D => 9,
- 0xBCD => 9,
- 0xC4D => 9,
- 0xCCD => 9,
- 0xD4D => 9,
- 0xDCA => 9,
- 0xE3A => 9,
- 0xF84 => 9,
- 0x1039 => 9,
- 0x1714 => 9,
- 0x1734 => 9,
- 0x17D2 => 9,
- 0x5B0 => 10,
- 0x5B1 => 11,
- 0x5B2 => 12,
- 0x5B3 => 13,
- 0x5B4 => 14,
- 0x5B5 => 15,
- 0x5B6 => 16,
- 0x5B7 => 17,
- 0x5B8 => 18,
- 0x5B9 => 19,
- 0x5BB => 20,
- 0x5Bc => 21,
- 0x5BD => 22,
- 0x5BF => 23,
- 0x5C1 => 24,
- 0x5C2 => 25,
- 0xFB1E => 26,
- 0x64B => 27,
- 0x64C => 28,
- 0x64D => 29,
- 0x64E => 30,
- 0x64F => 31,
- 0x650 => 32,
- 0x651 => 33,
- 0x652 => 34,
- 0x670 => 35,
- 0x711 => 36,
- 0xC55 => 84,
- 0xC56 => 91,
- 0xE38 => 103,
- 0xE39 => 103,
- 0xE48 => 107,
- 0xE49 => 107,
- 0xE4A => 107,
- 0xE4B => 107,
- 0xEB8 => 118,
- 0xEB9 => 118,
- 0xEC8 => 122,
- 0xEC9 => 122,
- 0xECA => 122,
- 0xECB => 122,
- 0xF71 => 129,
- 0xF72 => 130,
- 0xF7A => 130,
- 0xF7B => 130,
- 0xF7C => 130,
- 0xF7D => 130,
- 0xF80 => 130,
- 0xF74 => 132,
- 0x321 => 202,
- 0x322 => 202,
- 0x327 => 202,
- 0x328 => 202,
- 0x31B => 216,
- 0xF39 => 216,
- 0x1D165 => 216,
- 0x1D166 => 216,
- 0x1D16E => 216,
- 0x1D16F => 216,
- 0x1D170 => 216,
- 0x1D171 => 216,
- 0x1D172 => 216,
- 0x302A => 218,
- 0x316 => 220,
- 0x317 => 220,
- 0x318 => 220,
- 0x319 => 220,
- 0x31C => 220,
- 0x31D => 220,
- 0x31E => 220,
- 0x31F => 220,
- 0x320 => 220,
- 0x323 => 220,
- 0x324 => 220,
- 0x325 => 220,
- 0x326 => 220,
- 0x329 => 220,
- 0x32A => 220,
- 0x32B => 220,
- 0x32C => 220,
- 0x32D => 220,
- 0x32E => 220,
- 0x32F => 220,
- 0x330 => 220,
- 0x331 => 220,
- 0x332 => 220,
- 0x333 => 220,
- 0x339 => 220,
- 0x33A => 220,
- 0x33B => 220,
- 0x33C => 220,
- 0x347 => 220,
- 0x348 => 220,
- 0x349 => 220,
- 0x34D => 220,
- 0x34E => 220,
- 0x353 => 220,
- 0x354 => 220,
- 0x355 => 220,
- 0x356 => 220,
- 0x591 => 220,
- 0x596 => 220,
- 0x59B => 220,
- 0x5A3 => 220,
- 0x5A4 => 220,
- 0x5A5 => 220,
- 0x5A6 => 220,
- 0x5A7 => 220,
- 0x5AA => 220,
- 0x655 => 220,
- 0x656 => 220,
- 0x6E3 => 220,
- 0x6EA => 220,
- 0x6ED => 220,
- 0x731 => 220,
- 0x734 => 220,
- 0x737 => 220,
- 0x738 => 220,
- 0x739 => 220,
- 0x73B => 220,
- 0x73C => 220,
- 0x73E => 220,
- 0x742 => 220,
- 0x744 => 220,
- 0x746 => 220,
- 0x748 => 220,
- 0x952 => 220,
- 0xF18 => 220,
- 0xF19 => 220,
- 0xF35 => 220,
- 0xF37 => 220,
- 0xFC6 => 220,
- 0x193B => 220,
- 0x20E8 => 220,
- 0x1D17B => 220,
- 0x1D17C => 220,
- 0x1D17D => 220,
- 0x1D17E => 220,
- 0x1D17F => 220,
- 0x1D180 => 220,
- 0x1D181 => 220,
- 0x1D182 => 220,
- 0x1D18A => 220,
- 0x1D18B => 220,
- 0x59A => 222,
- 0x5AD => 222,
- 0x1929 => 222,
- 0x302D => 222,
- 0x302E => 224,
- 0x302F => 224,
- 0x1D16D => 226,
- 0x5AE => 228,
- 0x18A9 => 228,
- 0x302B => 228,
- 0x300 => 230,
- 0x301 => 230,
- 0x302 => 230,
- 0x303 => 230,
- 0x304 => 230,
- 0x305 => 230,
- 0x306 => 230,
- 0x307 => 230,
- 0x308 => 230,
- 0x309 => 230,
- 0x30A => 230,
- 0x30B => 230,
- 0x30C => 230,
- 0x30D => 230,
- 0x30E => 230,
- 0x30F => 230,
- 0x310 => 230,
- 0x311 => 230,
- 0x312 => 230,
- 0x313 => 230,
- 0x314 => 230,
- 0x33D => 230,
- 0x33E => 230,
- 0x33F => 230,
- 0x340 => 230,
- 0x341 => 230,
- 0x342 => 230,
- 0x343 => 230,
- 0x344 => 230,
- 0x346 => 230,
- 0x34A => 230,
- 0x34B => 230,
- 0x34C => 230,
- 0x350 => 230,
- 0x351 => 230,
- 0x352 => 230,
- 0x357 => 230,
- 0x363 => 230,
- 0x364 => 230,
- 0x365 => 230,
- 0x366 => 230,
- 0x367 => 230,
- 0x368 => 230,
- 0x369 => 230,
- 0x36A => 230,
- 0x36B => 230,
- 0x36C => 230,
- 0x36D => 230,
- 0x36E => 230,
- 0x36F => 230,
- 0x483 => 230,
- 0x484 => 230,
- 0x485 => 230,
- 0x486 => 230,
- 0x592 => 230,
- 0x593 => 230,
- 0x594 => 230,
- 0x595 => 230,
- 0x597 => 230,
- 0x598 => 230,
- 0x599 => 230,
- 0x59C => 230,
- 0x59D => 230,
- 0x59E => 230,
- 0x59F => 230,
- 0x5A0 => 230,
- 0x5A1 => 230,
- 0x5A8 => 230,
- 0x5A9 => 230,
- 0x5AB => 230,
- 0x5AC => 230,
- 0x5AF => 230,
- 0x5C4 => 230,
- 0x610 => 230,
- 0x611 => 230,
- 0x612 => 230,
- 0x613 => 230,
- 0x614 => 230,
- 0x615 => 230,
- 0x653 => 230,
- 0x654 => 230,
- 0x657 => 230,
- 0x658 => 230,
- 0x6D6 => 230,
- 0x6D7 => 230,
- 0x6D8 => 230,
- 0x6D9 => 230,
- 0x6DA => 230,
- 0x6DB => 230,
- 0x6DC => 230,
- 0x6DF => 230,
- 0x6E0 => 230,
- 0x6E1 => 230,
- 0x6E2 => 230,
- 0x6E4 => 230,
- 0x6E7 => 230,
- 0x6E8 => 230,
- 0x6EB => 230,
- 0x6EC => 230,
- 0x730 => 230,
- 0x732 => 230,
- 0x733 => 230,
- 0x735 => 230,
- 0x736 => 230,
- 0x73A => 230,
- 0x73D => 230,
- 0x73F => 230,
- 0x740 => 230,
- 0x741 => 230,
- 0x743 => 230,
- 0x745 => 230,
- 0x747 => 230,
- 0x749 => 230,
- 0x74A => 230,
- 0x951 => 230,
- 0x953 => 230,
- 0x954 => 230,
- 0xF82 => 230,
- 0xF83 => 230,
- 0xF86 => 230,
- 0xF87 => 230,
- 0x170D => 230,
- 0x193A => 230,
- 0x20D0 => 230,
- 0x20D1 => 230,
- 0x20D4 => 230,
- 0x20D5 => 230,
- 0x20D6 => 230,
- 0x20D7 => 230,
- 0x20DB => 230,
- 0x20DC => 230,
- 0x20E1 => 230,
- 0x20E7 => 230,
- 0x20E9 => 230,
- 0xFE20 => 230,
- 0xFE21 => 230,
- 0xFE22 => 230,
- 0xFE23 => 230,
- 0x1D185 => 230,
- 0x1D186 => 230,
- 0x1D187 => 230,
- 0x1D189 => 230,
- 0x1D188 => 230,
- 0x1D1AA => 230,
- 0x1D1AB => 230,
- 0x1D1AC => 230,
- 0x1D1AD => 230,
- 0x315 => 232,
- 0x31A => 232,
- 0x302C => 232,
- 0x35F => 233,
- 0x362 => 233,
- 0x35D => 234,
- 0x35E => 234,
- 0x360 => 234,
- 0x361 => 234,
- 0x345 => 240
- );
- // }}}
-
- // {{{ properties
- /**
- * @var string
- * @access private
- */
- private $_punycode_prefix = 'xn--';
-
- /**
- * @access private
- */
- private $_invalid_ucs = 0x80000000;
-
- /**
- * @access private
- */
- private $_max_ucs = 0x10FFFF;
-
- /**
- * @var int
- * @access private
- */
- private $_base = 36;
-
- /**
- * @var int
- * @access private
- */
- private $_tmin = 1;
-
- /**
- * @var int
- * @access private
- */
- private $_tmax = 26;
-
- /**
- * @var int
- * @access private
- */
- private $_skew = 38;
-
- /**
- * @var int
- * @access private
- */
- private $_damp = 700;
-
- /**
- * @var int
- * @access private
- */
- private $_initial_bias = 72;
-
- /**
- * @var int
- * @access private
- */
- private $_initial_n = 0x80;
-
- /**
- * @var int
- * @access private
- */
- private $_slast;
-
- /**
- * @access private
- */
- private $_sbase = 0xAC00;
-
- /**
- * @access private
- */
- private $_lbase = 0x1100;
-
- /**
- * @access private
- */
- private $_vbase = 0x1161;
-
- /**
- * @access private
- */
- private $_tbase = 0x11a7;
-
- /**
- * @var int
- * @access private
- */
- private $_lcount = 19;
-
- /**
- * @var int
- * @access private
- */
- private $_vcount = 21;
-
- /**
- * @var int
- * @access private
- */
- private $_tcount = 28;
-
- /**
- * vcount * tcount
- *
- * @var int
- * @access private
- */
- private $_ncount = 588;
-
- /**
- * lcount * tcount * vcount
- *
- * @var int
- * @access private
- */
- private $_scount = 11172;
-
- /**
- * Default encoding for encode()'s input and decode()'s output is UTF-8;
- * Other possible encodings are ucs4_string and ucs4_array
- * See {@link setParams()} for how to select these
- *
- * @var bool
- * @access private
- */
- private $_api_encoding = 'utf8';
-
- /**
- * Overlong UTF-8 encodings are forbidden
- *
- * @var bool
- * @access private
- */
- private $_allow_overlong = false;
-
- /**
- * Behave strict or not
- *
- * @var bool
- * @access private
- */
- private $_strict_mode = false;
-
- /**
- * IDNA-version to use
- *
- * Values are "2003" and "2008".
- * Defaults to "2003", since that was the original version and for
- * compatibility with previous versions of this library.
- * If you need to encode "new" characters like the German "Eszett",
- * please switch to 2008 first before encoding.
- *
- * @var bool
- * @access private
- */
- private $_version = '2003';
-
- /**
- * Cached value indicating whether or not mbstring function overloading is
- * on for strlen
- *
- * This is cached for optimal performance.
- *
- * @var boolean
- * @see Net_IDNA2::_byteLength()
- */
- private static $_mb_string_overload = null;
- // }}}
-
-
- // {{{ constructor
- /**
- * Constructor
- *
- * @param array $options Options to initialise the object with
- *
- * @access public
- * @see setParams()
- */
- public function __construct($options = null)
- {
- $this->_slast = $this->_sbase + $this->_lcount * $this->_vcount * $this->_tcount;
-
- if (is_array($options)) {
- $this->setParams($options);
- }
-
- // populate mbstring overloading cache if not set
- if (self::$_mb_string_overload === null) {
- self::$_mb_string_overload = (extension_loaded('mbstring')
- && (ini_get('mbstring.func_overload') & 0x02) === 0x02);
- }
- }
- // }}}
-
-
- /**
- * Sets a new option value. Available options and values:
- *
- * [utf8 - Use either UTF-8 or ISO-8859-1 as input (true for UTF-8, false
- * otherwise); The output is always UTF-8]
- * [overlong - Unicode does not allow unnecessarily long encodings of chars,
- * to allow this, set this parameter to true, else to false;
- * default is false.]
- * [strict - true: strict mode, good for registration purposes - Causes errors
- * on failures; false: loose mode, ideal for "wildlife" applications
- * by silently ignoring errors and returning the original input instead]
- *
- * @param mixed $option Parameter to set (string: single parameter; array of Parameter => Value pairs)
- * @param string $value Value to use (if parameter 1 is a string)
- *
- * @return boolean true on success, false otherwise
- * @access public
- */
- public function setParams($option, $value = false)
- {
- if (!is_array($option)) {
- $option = array($option => $value);
- }
-
- foreach ($option as $k => $v) {
- switch ($k) {
- case 'encoding':
- switch ($v) {
- case 'utf8':
- case 'ucs4_string':
- case 'ucs4_array':
- $this->_api_encoding = $v;
- break;
-
- default:
- throw new InvalidArgumentException('Set Parameter: Unknown parameter '.$v.' for option '.$k);
- }
-
- break;
-
- case 'overlong':
- $this->_allow_overlong = ($v) ? true : false;
- break;
-
- case 'strict':
- $this->_strict_mode = ($v) ? true : false;
- break;
-
- case 'version':
- if (in_array($v, array('2003', '2008'))) {
- $this->_version = $v;
- } else {
- throw new InvalidArgumentException('Set Parameter: Invalid parameter '.$v.' for option '.$k);
- }
- break;
-
- default:
- return false;
- }
- }
-
- return true;
- }
-
- /**
- * Encode a given UTF-8 domain name.
- *
- * @param string $decoded Domain name (UTF-8 or UCS-4)
- * @param string $one_time_encoding Desired input encoding, see {@link set_parameter}
- * If not given will use default-encoding
- *
- * @return string Encoded Domain name (ACE string)
- * @return mixed processed string
- * @throws Exception
- * @access public
- */
- public function encode($decoded, $one_time_encoding = false)
- {
- // Forcing conversion of input to UCS4 array
- // If one time encoding is given, use this, else the objects property
- switch (($one_time_encoding) ? $one_time_encoding : $this->_api_encoding) {
- case 'utf8':
- $decoded = $this->_utf8_to_ucs4($decoded);
- break;
- case 'ucs4_string':
- $decoded = $this->_ucs4_string_to_ucs4($decoded);
- case 'ucs4_array': // No break; before this line. Catch case, but do nothing
- break;
- default:
- throw new InvalidArgumentException('Unsupported input format');
- }
-
- // No input, no output, what else did you expect?
- if (empty($decoded)) return '';
-
- // Anchors for iteration
- $last_begin = 0;
- // Output string
- $output = '';
-
- foreach ($decoded as $k => $v) {
- // Make sure to use just the plain dot
- switch($v) {
- case 0x3002:
- case 0xFF0E:
- case 0xFF61:
- $decoded[$k] = 0x2E;
- // It's right, no break here
- // The codepoints above have to be converted to dots anyway
-
- // Stumbling across an anchoring character
- case 0x2E:
- case 0x2F:
- case 0x3A:
- case 0x3F:
- case 0x40:
- // Neither email addresses nor URLs allowed in strict mode
- if ($this->_strict_mode) {
- throw new InvalidArgumentException('Neither email addresses nor URLs are allowed in strict mode.');
- }
- // Skip first char
- if ($k) {
- $encoded = '';
- $encoded = $this->_encode(array_slice($decoded, $last_begin, (($k)-$last_begin)));
- if ($encoded) {
- $output .= $encoded;
- } else {
- $output .= $this->_ucs4_to_utf8(array_slice($decoded, $last_begin, (($k)-$last_begin)));
- }
- $output .= chr($decoded[$k]);
- }
- $last_begin = $k + 1;
- }
- }
- // Catch the rest of the string
- if ($last_begin) {
- $inp_len = sizeof($decoded);
- $encoded = '';
- $encoded = $this->_encode(array_slice($decoded, $last_begin, (($inp_len)-$last_begin)));
- if ($encoded) {
- $output .= $encoded;
- } else {
- $output .= $this->_ucs4_to_utf8(array_slice($decoded, $last_begin, (($inp_len)-$last_begin)));
- }
- return $output;
- }
-
- if ($output = $this->_encode($decoded)) {
- return $output;
- }
-
- return $this->_ucs4_to_utf8($decoded);
- }
-
- /**
- * Decode a given ACE domain name.
- *
- * @param string $input Domain name (ACE string)
- * @param string $one_time_encoding Desired output encoding, see {@link set_parameter}
- *
- * @return string Decoded Domain name (UTF-8 or UCS-4)
- * @throws Exception
- * @access public
- */
- public function decode($input, $one_time_encoding = false)
- {
- // Optionally set
- if ($one_time_encoding) {
- switch ($one_time_encoding) {
- case 'utf8':
- case 'ucs4_string':
- case 'ucs4_array':
- break;
- default:
- throw new InvalidArgumentException('Unknown encoding '.$one_time_encoding);
- }
- }
- // Make sure to drop any newline characters around
- $input = trim($input);
-
- // Negotiate input and try to determine, wether it is a plain string,
- // an email address or something like a complete URL
- if (strpos($input, '@')) { // Maybe it is an email address
- // No no in strict mode
- if ($this->_strict_mode) {
- throw new InvalidArgumentException('Only simple domain name parts can be handled in strict mode');
- }
- list($email_pref, $input) = explode('@', $input, 2);
- $arr = explode('.', $input);
- foreach ($arr as $k => $v) {
- $conv = $this->_decode($v);
- if ($conv) $arr[$k] = $conv;
- }
- $return = $email_pref . '@' . join('.', $arr);
- } elseif (preg_match('![:\./]!', $input)) { // Or a complete domain name (with or without paths / parameters)
- // No no in strict mode
- if ($this->_strict_mode) {
- throw new InvalidArgumentException('Only simple domain name parts can be handled in strict mode');
- }
-
- $parsed = parse_url($input);
- if (isset($parsed['host'])) {
- $arr = explode('.', $parsed['host']);
- foreach ($arr as $k => $v) {
- $conv = $this->_decode($v);
- if ($conv) $arr[$k] = $conv;
- }
- $parsed['host'] = join('.', $arr);
- if (isset($parsed['scheme'])) {
- $parsed['scheme'] .= (strtolower($parsed['scheme']) == 'mailto') ? ':' : '://';
- }
- $return = $this->_unparse_url($parsed);
- } else { // parse_url seems to have failed, try without it
- $arr = explode('.', $input);
- foreach ($arr as $k => $v) {
- $conv = $this->_decode($v);
- if ($conv) $arr[$k] = $conv;
- }
- $return = join('.', $arr);
- }
- } else { // Otherwise we consider it being a pure domain name string
- $return = $this->_decode($input);
- }
- // The output is UTF-8 by default, other output formats need conversion here
- // If one time encoding is given, use this, else the objects property
- switch (($one_time_encoding) ? $one_time_encoding : $this->_api_encoding) {
- case 'utf8':
- return $return;
- break;
- case 'ucs4_string':
- return $this->_ucs4_to_ucs4_string($this->_utf8_to_ucs4($return));
- break;
- case 'ucs4_array':
- return $this->_utf8_to_ucs4($return);
- break;
- default:
- throw new InvalidArgumentException('Unsupported output format');
- }
- }
-
-
- // {{{ private
- /**
- * Opposite function to parse_url()
- *
- * Inspired by code from comments of php.net-documentation for parse_url()
- *
- * @param array $parts_arr parts (strings) as returned by parse_url()
- *
- * @return string
- * @access private
- */
- private function _unparse_url($parts_arr)
- {
- if (!empty($parts_arr['scheme'])) {
- $ret_url = $parts_arr['scheme'];
- }
- if (!empty($parts_arr['user'])) {
- $ret_url .= $parts_arr['user'];
- if (!empty($parts_arr['pass'])) {
- $ret_url .= ':' . $parts_arr['pass'];
- }
- $ret_url .= '@';
- }
- $ret_url .= $parts_arr['host'];
- if (!empty($parts_arr['port'])) {
- $ret_url .= ':' . $parts_arr['port'];
- }
- $ret_url .= $parts_arr['path'];
- if (!empty($parts_arr['query'])) {
- $ret_url .= '?' . $parts_arr['query'];
- }
- if (!empty($parts_arr['fragment'])) {
- $ret_url .= '#' . $parts_arr['fragment'];
- }
- return $ret_url;
- }
-
- /**
- * The actual encoding algorithm.
- *
- * @param string $decoded Decoded string which should be encoded
- *
- * @return string Encoded string
- * @throws Exception
- * @access private
- */
- private function _encode($decoded)
- {
- // We cannot encode a domain name containing the Punycode prefix
- $extract = self::_byteLength($this->_punycode_prefix);
- $check_pref = $this->_utf8_to_ucs4($this->_punycode_prefix);
- $check_deco = array_slice($decoded, 0, $extract);
-
- if ($check_pref == $check_deco) {
- throw new InvalidArgumentException('This is already a punycode string');
- }
-
- // We will not try to encode strings consisting of basic code points only
- $encodable = false;
- foreach ($decoded as $k => $v) {
- if ($v > 0x7a) {
- $encodable = true;
- break;
- }
- }
- if (!$encodable) {
- if ($this->_strict_mode) {
- throw new InvalidArgumentException('The given string does not contain encodable chars');
- }
-
- return false;
- }
-
- // Do NAMEPREP
- $decoded = $this->_nameprep($decoded);
-
- $deco_len = count($decoded);
-
- // Empty array
- if (!$deco_len) {
- return false;
- }
-
- // How many chars have been consumed
- $codecount = 0;
-
- // Start with the prefix; copy it to output
- $encoded = $this->_punycode_prefix;
-
- $encoded = '';
- // Copy all basic code points to output
- for ($i = 0; $i < $deco_len; ++$i) {
- $test = $decoded[$i];
- // Will match [0-9a-zA-Z-]
- if ((0x2F < $test && $test < 0x40)
- || (0x40 < $test && $test < 0x5B)
- || (0x60 < $test && $test <= 0x7B)
- || (0x2D == $test)
- ) {
- $encoded .= chr($decoded[$i]);
- $codecount++;
- }
- }
-
- // All codepoints were basic ones
- if ($codecount == $deco_len) {
- return $encoded;
- }
-
- // Start with the prefix; copy it to output
- $encoded = $this->_punycode_prefix . $encoded;
-
- // If we have basic code points in output, add an hyphen to the end
- if ($codecount) {
- $encoded .= '-';
- }
-
- // Now find and encode all non-basic code points
- $is_first = true;
- $cur_code = $this->_initial_n;
- $bias = $this->_initial_bias;
- $delta = 0;
-
- while ($codecount < $deco_len) {
- // Find the smallest code point >= the current code point and
- // remember the last ouccrence of it in the input
- for ($i = 0, $next_code = $this->_max_ucs; $i < $deco_len; $i++) {
- if ($decoded[$i] >= $cur_code && $decoded[$i] <= $next_code) {
- $next_code = $decoded[$i];
- }
- }
-
- $delta += ($next_code - $cur_code) * ($codecount + 1);
- $cur_code = $next_code;
-
- // Scan input again and encode all characters whose code point is $cur_code
- for ($i = 0; $i < $deco_len; $i++) {
- if ($decoded[$i] < $cur_code) {
- $delta++;
- } else if ($decoded[$i] == $cur_code) {
- for ($q = $delta, $k = $this->_base; 1; $k += $this->_base) {
- $t = ($k <= $bias)?
- $this->_tmin :
- (($k >= $bias + $this->_tmax)? $this->_tmax : $k - $bias);
-
- if ($q < $t) {
- break;
- }
-
- $encoded .= $this->_encodeDigit(ceil($t + (($q - $t) % ($this->_base - $t))));
- $q = ($q - $t) / ($this->_base - $t);
- }
-
- $encoded .= $this->_encodeDigit($q);
- $bias = $this->_adapt($delta, $codecount + 1, $is_first);
- $codecount++;
- $delta = 0;
- $is_first = false;
- }
- }
-
- $delta++;
- $cur_code++;
- }
-
- return $encoded;
- }
-
- /**
- * The actual decoding algorithm.
- *
- * @param string $encoded Encoded string which should be decoded
- *
- * @return string Decoded string
- * @throws Exception
- * @access private
- */
- private function _decode($encoded)
- {
- // We do need to find the Punycode prefix
- if (!preg_match('!^' . preg_quote($this->_punycode_prefix, '!') . '!', $encoded)) {
- return false;
- }
-
- $encode_test = preg_replace('!^' . preg_quote($this->_punycode_prefix, '!') . '!', '', $encoded);
-
- // If nothing left after removing the prefix, it is hopeless
- if (!$encode_test) {
- return false;
- }
-
- // Find last occurence of the delimiter
- $delim_pos = strrpos($encoded, '-');
-
- if ($delim_pos > self::_byteLength($this->_punycode_prefix)) {
- for ($k = self::_byteLength($this->_punycode_prefix); $k < $delim_pos; ++$k) {
- $decoded[] = ord($encoded{$k});
- }
- } else {
- $decoded = array();
- }
-
- $deco_len = count($decoded);
- $enco_len = self::_byteLength($encoded);
-
- // Wandering through the strings; init
- $is_first = true;
- $bias = $this->_initial_bias;
- $idx = 0;
- $char = $this->_initial_n;
-
- for ($enco_idx = ($delim_pos)? ($delim_pos + 1) : 0; $enco_idx < $enco_len; ++$deco_len) {
- for ($old_idx = $idx, $w = 1, $k = $this->_base; 1 ; $k += $this->_base) {
- $digit = $this->_decodeDigit($encoded{$enco_idx++});
- $idx += $digit * $w;
-
- $t = ($k <= $bias) ?
- $this->_tmin :
- (($k >= $bias + $this->_tmax)? $this->_tmax : ($k - $bias));
-
- if ($digit < $t) {
- break;
- }
-
- $w = (int)($w * ($this->_base - $t));
- }
-
- $bias = $this->_adapt($idx - $old_idx, $deco_len + 1, $is_first);
- $is_first = false;
- $char += (int) ($idx / ($deco_len + 1));
- $idx %= ($deco_len + 1);
-
- if ($deco_len > 0) {
- // Make room for the decoded char
- for ($i = $deco_len; $i > $idx; $i--) {
- $decoded[$i] = $decoded[($i - 1)];
- }
- }
-
- $decoded[$idx++] = $char;
- }
-
- return $this->_ucs4_to_utf8($decoded);
- }
-
- /**
- * Adapt the bias according to the current code point and position.
- *
- * @param int $delta ...
- * @param int $npoints ...
- * @param boolean $is_first ...
- *
- * @return int
- * @access private
- */
- private function _adapt($delta, $npoints, $is_first)
- {
- $delta = (int) ($is_first ? ($delta / $this->_damp) : ($delta / 2));
- $delta += (int) ($delta / $npoints);
-
- for ($k = 0; $delta > (($this->_base - $this->_tmin) * $this->_tmax) / 2; $k += $this->_base) {
- $delta = (int) ($delta / ($this->_base - $this->_tmin));
- }
-
- return (int) ($k + ($this->_base - $this->_tmin + 1) * $delta / ($delta + $this->_skew));
- }
-
- /**
- * Encoding a certain digit.
- *
- * @param int $d One digit to encode
- *
- * @return char Encoded digit
- * @access private
- */
- private function _encodeDigit($d)
- {
- return chr($d + 22 + 75 * ($d < 26));
- }
-
- /**
- * Decode a certain digit.
- *
- * @param char $cp One digit (character) to decode
- *
- * @return int Decoded digit
- * @access private
- */
- private function _decodeDigit($cp)
- {
- $cp = ord($cp);
- return ($cp - 48 < 10)? $cp - 22 : (($cp - 65 < 26)? $cp - 65 : (($cp - 97 < 26)? $cp - 97 : $this->_base));
- }
-
- /**
- * Do Nameprep according to RFC3491 and RFC3454.
- *
- * @param array $input Unicode Characters
- *
- * @return string Unicode Characters, Nameprep'd
- * @throws Exception
- * @access private
- */
- private function _nameprep($input)
- {
- $output = array();
-
- // Walking through the input array, performing the required steps on each of
- // the input chars and putting the result into the output array
- // While mapping required chars we apply the cannonical ordering
-
- foreach ($input as $v) {
- // Map to nothing == skip that code point
- if (in_array($v, self::$_np_map_nothing)) {
- continue;
- }
-
- // Try to find prohibited input
- if (in_array($v, self::$_np_prohibit) || in_array($v, self::$_general_prohibited)) {
- throw new Net_IDNA2_Exception_Nameprep('Prohibited input U+' . sprintf('%08X', $v));
- }
-
- foreach (self::$_np_prohibit_ranges as $range) {
- if ($range[0] <= $v && $v <= $range[1]) {
- throw new Net_IDNA2_Exception_Nameprep('Prohibited input U+' . sprintf('%08X', $v));
- }
- }
-
- // Hangul syllable decomposition
- if (0xAC00 <= $v && $v <= 0xD7AF) {
- foreach ($this->_hangulDecompose($v) as $out) {
- $output[] = $out;
- }
- } else if (($this->_version == '2003') && isset(self::$_np_replacemaps[$v])) {
- // There's a decomposition mapping for that code point
- // Decompositions only in version 2003 (original) of IDNA
- foreach ($this->_applyCannonicalOrdering(self::$_np_replacemaps[$v]) as $out) {
- $output[] = $out;
- }
- } else {
- $output[] = $v;
- }
- }
-
- // Combine code points
-
- $last_class = 0;
- $last_starter = 0;
- $out_len = count($output);
-
- for ($i = 0; $i < $out_len; ++$i) {
- $class = $this->_getCombiningClass($output[$i]);
-
- if ((!$last_class || $last_class != $class) && $class) {
- // Try to match
- $seq_len = $i - $last_starter;
- $out = $this->_combine(array_slice($output, $last_starter, $seq_len));
-
- // On match: Replace the last starter with the composed character and remove
- // the now redundant non-starter(s)
- if ($out) {
- $output[$last_starter] = $out;
-
- if (count($out) != $seq_len) {
- for ($j = $i + 1; $j < $out_len; ++$j) {
- $output[$j - 1] = $output[$j];
- }
-
- unset($output[$out_len]);
- }
-
- // Rewind the for loop by one, since there can be more possible compositions
- $i--;
- $out_len--;
- $last_class = ($i == $last_starter)? 0 : $this->_getCombiningClass($output[$i - 1]);
-
- continue;
- }
- }
-
- // The current class is 0
- if (!$class) {
- $last_starter = $i;
- }
-
- $last_class = $class;
- }
-
- return $output;
- }
-
- /**
- * Decomposes a Hangul syllable
- * (see http://www.unicode.org/unicode/reports/tr15/#Hangul).
- *
- * @param integer $char 32bit UCS4 code point
- *
- * @return array Either Hangul Syllable decomposed or original 32bit
- * value as one value array
- * @access private
- */
- private function _hangulDecompose($char)
- {
- $sindex = $char - $this->_sbase;
-
- if ($sindex < 0 || $sindex >= $this->_scount) {
- return array($char);
- }
-
- $result = array();
- $T = $this->_tbase + $sindex % $this->_tcount;
- $result[] = (int)($this->_lbase + $sindex / $this->_ncount);
- $result[] = (int)($this->_vbase + ($sindex % $this->_ncount) / $this->_tcount);
-
- if ($T != $this->_tbase) {
- $result[] = $T;
- }
-
- return $result;
- }
-
- /**
- * Ccomposes a Hangul syllable
- * (see http://www.unicode.org/unicode/reports/tr15/#Hangul).
- *
- * @param array $input Decomposed UCS4 sequence
- *
- * @return array UCS4 sequence with syllables composed
- * @access private
- */
- private function _hangulCompose($input)
- {
- $inp_len = count($input);
-
- if (!$inp_len) {
- return array();
- }
-
- $result = array();
- $last = $input[0];
- $result[] = $last; // copy first char from input to output
-
- for ($i = 1; $i < $inp_len; ++$i) {
- $char = $input[$i];
-
- // Find out, wether two current characters from L and V
- $lindex = $last - $this->_lbase;
-
- if (0 <= $lindex && $lindex < $this->_lcount) {
- $vindex = $char - $this->_vbase;
-
- if (0 <= $vindex && $vindex < $this->_vcount) {
- // create syllable of form LV
- $last = ($this->_sbase + ($lindex * $this->_vcount + $vindex) * $this->_tcount);
- $out_off = count($result) - 1;
- $result[$out_off] = $last; // reset last
-
- // discard char
- continue;
- }
- }
-
- // Find out, wether two current characters are LV and T
- $sindex = $last - $this->_sbase;
-
- if (0 <= $sindex && $sindex < $this->_scount && ($sindex % $this->_tcount) == 0) {
- $tindex = $char - $this->_tbase;
-
- if (0 <= $tindex && $tindex <= $this->_tcount) {
- // create syllable of form LVT
- $last += $tindex;
- $out_off = count($result) - 1;
- $result[$out_off] = $last; // reset last
-
- // discard char
- continue;
- }
- }
-
- // if neither case was true, just add the character
- $last = $char;
- $result[] = $char;
- }
-
- return $result;
- }
-
- /**
- * Returns the combining class of a certain wide char.
- *
- * @param integer $char Wide char to check (32bit integer)
- *
- * @return integer Combining class if found, else 0
- * @access private
- */
- private function _getCombiningClass($char)
- {
- return isset(self::$_np_norm_combcls[$char])? self::$_np_norm_combcls[$char] : 0;
- }
-
- /**
- * Apllies the cannonical ordering of a decomposed UCS4 sequence.
- *
- * @param array $input Decomposed UCS4 sequence
- *
- * @return array Ordered USC4 sequence
- * @access private
- */
- private function _applyCannonicalOrdering($input)
- {
- $swap = true;
- $size = count($input);
-
- while ($swap) {
- $swap = false;
- $last = $this->_getCombiningClass($input[0]);
-
- for ($i = 0; $i < $size - 1; ++$i) {
- $next = $this->_getCombiningClass($input[$i + 1]);
-
- if ($next != 0 && $last > $next) {
- // Move item leftward until it fits
- for ($j = $i + 1; $j > 0; --$j) {
- if ($this->_getCombiningClass($input[$j - 1]) <= $next) {
- break;
- }
-
- $t = $input[$j];
- $input[$j] = $input[$j - 1];
- $input[$j - 1] = $t;
- $swap = 1;
- }
-
- // Reentering the loop looking at the old character again
- $next = $last;
- }
-
- $last = $next;
- }
- }
-
- return $input;
- }
-
- /**
- * Do composition of a sequence of starter and non-starter.
- *
- * @param array $input UCS4 Decomposed sequence
- *
- * @return array Ordered USC4 sequence
- * @access private
- */
- private function _combine($input)
- {
- $inp_len = count($input);
-
- // Is it a Hangul syllable?
- if (1 != $inp_len) {
- $hangul = $this->_hangulCompose($input);
-
- // This place is probably wrong
- if (count($hangul) != $inp_len) {
- return $hangul;
- }
- }
-
- foreach (self::$_np_replacemaps as $np_src => $np_target) {
- if ($np_target[0] != $input[0]) {
- continue;
- }
-
- if (count($np_target) != $inp_len) {
- continue;
- }
-
- $hit = false;
-
- foreach ($input as $k2 => $v2) {
- if ($v2 == $np_target[$k2]) {
- $hit = true;
- } else {
- $hit = false;
- break;
- }
- }
-
- if ($hit) {
- return $np_src;
- }
- }
-
- return false;
- }
-
- /**
- * This converts an UTF-8 encoded string to its UCS-4 (array) representation
- * By talking about UCS-4 we mean arrays of 32bit integers representing
- * each of the "chars". This is due to PHP not being able to handle strings with
- * bit depth different from 8. This applies to the reverse method _ucs4_to_utf8(), too.
- * The following UTF-8 encodings are supported:
- *
- * bytes bits representation
- * 1 7 0xxxxxxx
- * 2 11 110xxxxx 10xxxxxx
- * 3 16 1110xxxx 10xxxxxx 10xxxxxx
- * 4 21 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
- * 5 26 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
- * 6 31 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
- *
- * Each x represents a bit that can be used to store character data.
- *
- * @param string $input utf8-encoded string
- *
- * @return array ucs4-encoded array
- * @throws Exception
- * @access private
- */
- private function _utf8_to_ucs4($input)
- {
- $output = array();
- $out_len = 0;
- $inp_len = self::_byteLength($input, '8bit');
- $mode = 'next';
- $test = 'none';
- for ($k = 0; $k < $inp_len; ++$k) {
- $v = ord($input{$k}); // Extract byte from input string
-
- if ($v < 128) { // We found an ASCII char - put into stirng as is
- $output[$out_len] = $v;
- ++$out_len;
- if ('add' == $mode) {
- throw new UnexpectedValueException('Conversion from UTF-8 to UCS-4 failed: malformed input at byte '.$k);
- }
- continue;
- }
- if ('next' == $mode) { // Try to find the next start byte; determine the width of the Unicode char
- $start_byte = $v;
- $mode = 'add';
- $test = 'range';
- if ($v >> 5 == 6) { // &110xxxxx 10xxxxx
- $next_byte = 0; // Tells, how many times subsequent bitmasks must rotate 6bits to the left
- $v = ($v - 192) << 6;
- } elseif ($v >> 4 == 14) { // &1110xxxx 10xxxxxx 10xxxxxx
- $next_byte = 1;
- $v = ($v - 224) << 12;
- } elseif ($v >> 3 == 30) { // &11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
- $next_byte = 2;
- $v = ($v - 240) << 18;
- } elseif ($v >> 2 == 62) { // &111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
- $next_byte = 3;
- $v = ($v - 248) << 24;
- } elseif ($v >> 1 == 126) { // &1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
- $next_byte = 4;
- $v = ($v - 252) << 30;
- } else {
- throw new UnexpectedValueException('This might be UTF-8, but I don\'t understand it at byte '.$k);
- }
- if ('add' == $mode) {
- $output[$out_len] = (int) $v;
- ++$out_len;
- continue;
- }
- }
- if ('add' == $mode) {
- if (!$this->_allow_overlong && $test == 'range') {
- $test = 'none';
- if (($v < 0xA0 && $start_byte == 0xE0) || ($v < 0x90 && $start_byte == 0xF0) || ($v > 0x8F && $start_byte == 0xF4)) {
- throw new OutOfRangeException('Bogus UTF-8 character detected (out of legal range) at byte '.$k);
- }
- }
- if ($v >> 6 == 2) { // Bit mask must be 10xxxxxx
- $v = ($v - 128) << ($next_byte * 6);
- $output[($out_len - 1)] += $v;
- --$next_byte;
- } else {
- throw new UnexpectedValueException('Conversion from UTF-8 to UCS-4 failed: malformed input at byte '.$k);
- }
- if ($next_byte < 0) {
- $mode = 'next';
- }
- }
- } // for
- return $output;
- }
-
- /**
- * Convert UCS-4 array into UTF-8 string
- *
- * @param array $input ucs4-encoded array
- *
- * @return string utf8-encoded string
- * @throws Exception
- * @access private
- */
- private function _ucs4_to_utf8($input)
- {
- $output = '';
-
- foreach ($input as $v) {
- // $v = ord($v);
-
- if ($v < 128) {
- // 7bit are transferred literally
- $output .= chr($v);
- } else if ($v < 1 << 11) {
- // 2 bytes
- $output .= chr(192 + ($v >> 6))
- . chr(128 + ($v & 63));
- } else if ($v < 1 << 16) {
- // 3 bytes
- $output .= chr(224 + ($v >> 12))
- . chr(128 + (($v >> 6) & 63))
- . chr(128 + ($v & 63));
- } else if ($v < 1 << 21) {
- // 4 bytes
- $output .= chr(240 + ($v >> 18))
- . chr(128 + (($v >> 12) & 63))
- . chr(128 + (($v >> 6) & 63))
- . chr(128 + ($v & 63));
- } else if ($v < 1 << 26) {
- // 5 bytes
- $output .= chr(248 + ($v >> 24))
- . chr(128 + (($v >> 18) & 63))
- . chr(128 + (($v >> 12) & 63))
- . chr(128 + (($v >> 6) & 63))
- . chr(128 + ($v & 63));
- } else if ($v < 1 << 31) {
- // 6 bytes
- $output .= chr(252 + ($v >> 30))
- . chr(128 + (($v >> 24) & 63))
- . chr(128 + (($v >> 18) & 63))
- . chr(128 + (($v >> 12) & 63))
- . chr(128 + (($v >> 6) & 63))
- . chr(128 + ($v & 63));
- } else {
- throw new UnexpectedValueException('Conversion from UCS-4 to UTF-8 failed: malformed input');
- }
- }
-
- return $output;
- }
-
- /**
- * Convert UCS-4 array into UCS-4 string
- *
- * @param array $input ucs4-encoded array
- *
- * @return string ucs4-encoded string
- * @throws Exception
- * @access private
- */
- private function _ucs4_to_ucs4_string($input)
- {
- $output = '';
- // Take array values and split output to 4 bytes per value
- // The bit mask is 255, which reads &11111111
- foreach ($input as $v) {
- $output .= ($v & (255 << 24) >> 24) . ($v & (255 << 16) >> 16) . ($v & (255 << 8) >> 8) . ($v & 255);
- }
- return $output;
- }
-
- /**
- * Convert UCS-4 string into UCS-4 array
- *
- * @param string $input ucs4-encoded string
- *
- * @return array ucs4-encoded array
- * @throws InvalidArgumentException
- * @access private
- */
- private function _ucs4_string_to_ucs4($input)
- {
- $output = array();
-
- $inp_len = self::_byteLength($input);
- // Input length must be dividable by 4
- if ($inp_len % 4) {
- throw new InvalidArgumentException('Input UCS4 string is broken');
- }
-
- // Empty input - return empty output
- if (!$inp_len) {
- return $output;
- }
-
- for ($i = 0, $out_len = -1; $i < $inp_len; ++$i) {
- // Increment output position every 4 input bytes
- if (!$i % 4) {
- $out_len++;
- $output[$out_len] = 0;
- }
- $output[$out_len] += ord($input{$i}) << (8 * (3 - ($i % 4) ) );
- }
- return $output;
- }
-
- /**
- * Echo hex representation of UCS4 sequence.
- *
- * @param array $input UCS4 sequence
- * @param boolean $include_bit Include bitmask in output
- *
- * @return void
- * @static
- * @access private
- */
- private static function _showHex($input, $include_bit = false)
- {
- foreach ($input as $k => $v) {
- echo '[', $k, '] => ', sprintf('%X', $v);
-
- if ($include_bit) {
- echo ' (', Net_IDNA2::_showBitmask($v), ')';
- }
-
- echo "\n";
- }
- }
-
- /**
- * Gives you a bit representation of given Byte (8 bits), Word (16 bits) or DWord (32 bits)
- * Output width is automagically determined
- *
- * @param int $octet ...
- *
- * @return string Bitmask-representation
- * @static
- * @access private
- */
- private static function _showBitmask($octet)
- {
- if ($octet >= (1 << 16)) {
- $w = 31;
- } else if ($octet >= (1 << 8)) {
- $w = 15;
- } else {
- $w = 7;
- }
-
- $return = '';
-
- for ($i = $w; $i > -1; $i--) {
- $return .= ($octet & (1 << $i))? '1' : '0';
- }
-
- return $return;
- }
-
- /**
- * Gets the length of a string in bytes even if mbstring function
- * overloading is turned on
- *
- * @param string $string the string for which to get the length.
- *
- * @return integer the length of the string in bytes.
- *
- * @see Net_IDNA2::$_mb_string_overload
- */
- private static function _byteLength($string)
- {
- if (self::$_mb_string_overload) {
- return mb_strlen($string, '8bit');
- }
- return strlen((binary)$string);
- }
-
- // }}}}
-
- // {{{ factory
- /**
- * Attempts to return a concrete IDNA instance for either php4 or php5.
- *
- * @param array $params Set of paramaters
- *
- * @return Net_IDNA2
- * @access public
- */
- function getInstance($params = array())
- {
- return new Net_IDNA2($params);
- }
- // }}}
-
- // {{{ singleton
- /**
- * Attempts to return a concrete IDNA instance for either php4 or php5,
- * only creating a new instance if no IDNA instance with the same
- * parameters currently exists.
- *
- * @param array $params Set of paramaters
- *
- * @return object Net_IDNA2
- * @access public
- */
- function singleton($params = array())
- {
- static $instances;
- if (!isset($instances)) {
- $instances = array();
- }
-
- $signature = serialize($params);
- if (!isset($instances[$signature])) {
- $instances[$signature] = Net_IDNA2::getInstance($params);
- }
-
- return $instances[$signature];
- }
- // }}}
-}
-
-?>
diff --git a/program/lib/Net/IDNA2/Exception.php b/program/lib/Net/IDNA2/Exception.php
deleted file mode 100644
index 72cb1ae75..000000000
--- a/program/lib/Net/IDNA2/Exception.php
+++ /dev/null
@@ -1,4 +0,0 @@
-<?php
-class Net_IDNA2_Exception extends Exception
-{
-}
diff --git a/program/lib/Net/IDNA2/Exception/Nameprep.php b/program/lib/Net/IDNA2/Exception/Nameprep.php
deleted file mode 100644
index 44cbd6bb9..000000000
--- a/program/lib/Net/IDNA2/Exception/Nameprep.php
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-require_once 'Net/IDNA2/Exception.php';
-
-class Net_IDNA2_Exception_Nameprep extends Net_IDNA2_Exception
-{
-}
diff --git a/program/lib/Net/LDAP3.php b/program/lib/Net/LDAP3.php
deleted file mode 100644
index 3202f5aaf..000000000
--- a/program/lib/Net/LDAP3.php
+++ /dev/null
@@ -1,2618 +0,0 @@
-<?php
-/*
- +-----------------------------------------------------------------------+
- | Net/LDAP3.php |
- | |
- | Based on code created by the Roundcube Webmail team. |
- | |
- | Copyright (C) 2006-2014, The Roundcube Dev Team |
- | Copyright (C) 2012-2014, Kolab Systems AG |
- | |
- | Licensed under the GNU General Public License version 3 or |
- | any later version with exceptions for plugins. |
- | See the README file for a full license statement. |
- | |
- | PURPOSE: |
- | Provide advanced functionality for accessing LDAP directories |
- | |
- +-----------------------------------------------------------------------+
- | Authors: Thomas Bruederli <roundcube@gmail.com> |
- | Aleksander Machniak <machniak@kolabsys.com> |
- | Jeroen van Meeuwen <vanmeeuwen@kolabsys.com> |
- +-----------------------------------------------------------------------+
-*/
-
-require_once __DIR__ . '/LDAP3/Result.php';
-
-/**
- * Model class to access a LDAP directories
- *
- * @package Net_LDAP3
- */
-class Net_LDAP3
-{
- public $conn;
- public $vlv_active = false;
-
- private $attribute_level_rights_map = array(
- "r" => "read",
- "s" => "search",
- "w" => "write",
- "o" => "delete",
- "c" => "compare",
- "W" => "write",
- "O" => "delete"
- );
-
- private $entry_level_rights_map = array(
- "a" => "add",
- "d" => "delete",
- "n" => "modrdn",
- "v" => "read"
- );
-
- /*
- * Manipulate configuration through the config_set and config_get methods.
- * Available options:
- * 'debug' => false,
- * 'hosts' => array(),
- * 'port' => 389,
- * 'use_tls' => false,
- * 'ldap_version' => 3, // using LDAPv3
- * 'auth_method' => '', // SASL authentication method (for proxy auth), e.g. DIGEST-MD5
- * 'numsub_filter' => '(objectClass=organizationalUnit)', // with VLV, we also use numSubOrdinates to query the total number of records. Set this filter to get all numSubOrdinates attributes for counting
- * 'referrals' => false, // Sets the LDAP_OPT_REFERRALS option. Mostly used in multi-domain Active Directory setups
- * 'network_timeout' => 10, // The timeout (in seconds) for connect + bind arrempts. This is only supported in PHP >= 5.3.0 with OpenLDAP 2.x
- * 'sizelimit' => 0, // Enables you to limit the count of entries fetched. Setting this to 0 means no limit.
- * 'timelimit' => 0, // Sets the number of seconds how long is spend on the search. Setting this to 0 means no limit.
- * 'vlv' => false, // force VLV off
- * 'config_root_dn' => 'cn=config', // Root DN to read config (e.g. vlv indexes) from
- * 'service_bind_dn' => 'uid=kolab-service,ou=Special Users,dc=example,dc=org',
- * 'service_bind_pw' => 'Welcome2KolabSystems',
- * 'root_dn' => 'dc=example,dc=org',
- */
- protected $config = array(
- 'sizelimit' => 0,
- 'timelimit' => 0,
- );
-
- protected $debug_level = false;
- protected $list_page = 1;
- protected $page_size = 10;
- protected $cache;
-
- // Use public method config_set('log_hook', $callback) to have $callback be
- // call_user_func'ed instead of the local log functions.
- protected $_log_hook;
-
- // Use public method config_set('config_get_hook', $callback) to have
- // $callback be call_user_func'ed instead of the local config_get function.
- protected $_config_get_hook;
-
- // Use public method config_set('config_set_hook', $callback) to have
- // $callback be call_user_func'ed instead of the local config_set function.
- protected $_config_set_hook;
-
- // Not Yet Implemented
- // Intended to allow hooking in for the purpose of caching.
- protected $_result_hook;
-
- // Runtime. These are not the variables you're looking for.
- protected $_current_bind_dn;
- protected $_current_bind_pw;
- protected $_current_host;
- protected $_supported_control = array();
- protected $_vlv_indexes_and_searches;
-
- /**
- * Constructor
- *
- * @param array $config Configuration parameters that have not already
- * been initialized. For configuration parameters
- * that have in fact been set, use the config_set()
- * method after initialization.
- */
- public function __construct($config = array())
- {
- if (!empty($config) && is_array($config)) {
- foreach ($config as $key => $value) {
- if (empty($this->config[$key])) {
- $setter = 'config_set_' . $key;
- if (method_exists($this, $setter)) {
- $this->$setter($value);
- }
- else if (isset($this->$key)) {
- $this->$key = $value;
- }
- else {
- $this->config[$key] = $value;
- }
- }
- }
- }
- }
-
- /**
- * Add multiple entries to the directory information tree in one go.
- */
- public function add_entries($entries, $attributes = array())
- {
- // If $entries is an associative array, it's keys are DNs and its
- // values are the attributes for that DN.
- //
- // If $entries is a non-associative array, the attributes are expected
- // to be positional in $attributes.
-
- $result_set = array();
-
- if (array_keys($entries) == range(0, count($entries) - 1)) {
- // $entries is sequential
- if (count($entries) !== count($attributes)) {
- $this->_error("Wrong entry/attribute count in " . __FUNCTION__);
- return false;
- }
-
- for ($i = 0; $i < count($entries); $i++) {
- $result_set[$i] = $this->add_entry($entries[$i], $attributes[$i]);
- }
- }
- else {
- // $entries is associative
- foreach ($entries as $entry_dn => $entry_attributes) {
- if (array_keys($attributes) !== range(0, count($attributes)-1)) {
- // $attributes is associative as well, let's merge these
- //
- // $entry_attributes takes precedence, so is in the second
- // position in array_merge()
- $entry_attributes = array_merge($attributes, $entry_attributes);
- }
-
- $result_set[$entry_dn] = $this->add_entry($entry_dn, $entry_attributes);
- }
- }
-
- return $result_set;
- }
-
- /**
- * Add an entry to the directory information tree.
- */
- public function add_entry($entry_dn, $attributes)
- {
- // TODO:
- // - Get entry rdn attribute value from entry_dn and see if it exists in
- // attributes -> issue warning if so (but not block the operation).
- $this->_debug("Entry DN", $entry_dn);
- $this->_debug("Attributes", $attributes);
-
- foreach ($attributes as $attr_name => $attr_value) {
- if (empty($attr_value)) {
- unset($attributes[$attr_name]);
- }
- }
-
- $this->_debug("C: Add $entry_dn: " . json_encode($attributes));
-
- if (($add_result = ldap_add($this->conn, $entry_dn, $attributes)) == false) {
- $this->_debug("S: " . ldap_error($this->conn));
- $this->_debug("S: Adding entry $entry_dn failed. " . ldap_error($this->conn));
-
- return false;
- }
-
- $this->_debug("LDAP: S: OK");
-
- return true;
- }
-
- /**
- * Add replication agreements and initialize the consumer(s) for
- * $domain_root_dn.
- *
- * Searches the configured replicas for any of the current domain/config
- * databases, and uses this information to configure the additional
- * replication for the (new) domain database (at $domain_root_dn).
- *
- * Very specific to Netscape-based directory servers, and currently also
- * very specific to multi-master replication.
- */
- public function add_replication_agreements($domain_root_dn)
- {
- $replica_hosts = $this->list_replicas();
-
- if (empty($replica_hosts)) {
- return;
- }
-
- $result = $this->search($this->config_get('config_root_dn'), "(&(objectclass=nsDS5Replica)(nsDS5ReplicaType=3))", "sub");
-
- if (!$result) {
- $this->_debug("No replication configuration found.");
- return;
- }
-
- // Preserve the number of replicated databases we have, because the replication ID
- // can be calculated from the number of databases replicated, and the number of
- // servers.
- $num_replica_dbs = $result->count();
- $replicas = $result->entries(true);
- $max_replica_agreements = 0;
-
- foreach ($replicas as $replica_dn => $replica_attrs) {
- $result = $this->search($replica_dn, "(objectclass=nsDS5ReplicationAgreement)", "sub");
- if ($result) {
- if ($max_replica_agreements < $result->count()) {
- $max_replica_agreements = $result->count();
- $max_replica_agreements_dn = $replica_dn;
- }
- }
- }
-
- $max_repl_id = $num_replica_dbs * count($replica_hosts);
-
- $this->_debug("The current maximum replication ID is $max_repl_id");
- $this->_debug("The current maximum number of replication agreements for any database is $max_replica_agreements (for $max_replica_agreements_dn)");
- $this->_debug("With " . count($replica_hosts) . " replicas, the next is " . ($max_repl_id + 1) . " and the last one is " . ($max_repl_id + count($replica_hosts)));
-
- // Then add the replication agreements
- foreach ($replica_hosts as $num => $replica_host) {
- $ldap = new Net_LDAP3($this->config);
- $ldap->config_set('hosts', array($replica_host));
- $ldap->connect();
- $ldap->bind($this->_current_bind_dn, $this->_current_bind_pw);
-
- $replica_attrs = array(
- 'cn' => 'replica',
- 'objectclass' => array(
- 'top',
- 'nsds5replica',
- 'extensibleobject',
- ),
- 'nsDS5ReplicaBindDN' => $ldap->get_entry_attribute($replica_dn, "nsDS5ReplicaBindDN"),
- 'nsDS5ReplicaId' => ($max_repl_id + $num + 1),
- 'nsDS5ReplicaRoot' => $domain_root_dn,
- 'nsDS5ReplicaType' => $ldap->get_entry_attribute($replica_dn, "nsDS5ReplicaType"),
- 'nsds5ReplicaPurgeDelay' => $ldap->get_entry_attribute($replica_dn, "nsds5ReplicaPurgeDelay"),
- 'nsDS5Flags' => $ldap->get_entry_attribute($replica_dn, "nsDS5Flags")
- );
-
- $new_replica_dn = 'cn=replica,cn="' . $domain_root_dn . '",cn=mapping tree,cn=config';
-
- $this->_debug("Adding $new_replica_dn to $replica_host with attributes: " . var_export($replica_attrs, true));
-
- $result = $ldap->add_entry($new_replica_dn, $replica_attrs);
-
- if (!$result) {
- $this->_error("Could not add replication configuration to database for $domain_root_dn on $replica_host");
- continue;
- }
-
- $result = $ldap->search($replica_dn, "(objectclass=nsDS5ReplicationAgreement)", "sub");
-
- if (!$result) {
- $this->_error("Host $replica_host does not have any replication agreements");
- continue;
- }
-
- $entries = $result->entries(true);
- $replica_agreement_tpl_dn = key($entries);
-
- $this->_debug("Using " . var_export($replica_agreement_tpl_dn, true) . " as the template for new replication agreements");
-
- foreach ($replica_hosts as $replicate_to_host) {
- // Skip the current server
- if ($replicate_to_host == $replica_host) {
- continue;
- }
-
- $this->_debug("Adding a replication agreement for $domain_root_dn to $replicate_to_host on " . $replica_host);
-
- $attrs = array(
- 'objectclass',
- 'nsDS5ReplicaBindDN',
- 'nsDS5ReplicaCredentials',
- 'nsDS5ReplicaTransportInfo',
- 'nsDS5ReplicaBindMethod',
- 'nsDS5ReplicaHost',
- 'nsDS5ReplicaPort'
- );
-
- $replica_agreement_attrs = $ldap->get_entry_attributes($replica_agreement_tpl_dn, $attrs);
- $replica_agreement_attrs['cn'] = array_shift(explode('.', $replicate_to_host)) . str_replace(array('dc=',','), array('_',''), $domain_root_dn);
- $replica_agreement_attrs['nsDS5ReplicaRoot'] = $domain_root_dn;
- $replica_agreement_dn = "cn=" . $replica_agreement_attrs['cn'] . "," . $new_replica_dn;
-
- $this->_debug("Adding $replica_agreement_dn to $replica_host with attributes: " . var_export($replica_agreement_attrs, true));
-
- $result = $ldap->add_entry($replica_agreement_dn, $replica_agreement_attrs);
-
- if (!$result) {
- $this->_error("Failed adding $replica_agreement_dn");
- }
- }
- }
-
- $server_id = implode('', array_diff($replica_hosts, $this->_server_id_not));
-
- $this->_debug("About to trigger consumer initialization for replicas on current 'parent': $server_id");
-
- $result = $this->search($this->config_get('config_root_dn'), "(&(objectclass=nsDS5ReplicationAgreement)(nsds5replicaroot=$domain_root_dn))", "sub");
-
- if ($result) {
- foreach ($result->entries(true) as $agreement_dn => $agreement_attrs) {
- $this->modify_entry_attributes(
- $agreement_dn,
- array(
- 'replace' => array(
- 'nsds5BeginReplicaRefresh' => 'start',
- ),
- )
- );
- }
- }
- }
-
- public function attribute_details($attributes = array())
- {
- $schema = $this->init_schema();
-
- if (!$schema) {
- return array();
- }
-
- $attribs = $schema->getAll('attributes');
-
- $attributes_details = array();
-
- foreach ($attributes as $attribute) {
- if (array_key_exists($attribute, $attribs)) {
- $attrib_details = $attribs[$attribute];
-
- if (!empty($attrib_details['sup'])) {
- foreach ($attrib_details['sup'] as $super_attrib) {
- $_attrib_details = $attribs[$super_attrib];
- if (is_array($_attrib_details)) {
- $attrib_details = array_merge($_attrib_details, $attrib_details);
- }
- }
- }
- }
- else if (array_key_exists(strtolower($attribute), $attribs)) {
- $attrib_details = $attribs[strtolower($attribute)];
-
- if (!empty($attrib_details['sup'])) {
- foreach ($attrib_details['sup'] as $super_attrib) {
- $_attrib_details = $attribs[$super_attrib];
- if (is_array($_attrib_details)) {
- $attrib_details = array_merge($_attrib_details, $attrib_details);
- }
- }
- }
- }
- else {
- $this->_warning("LDAP: No schema details exist for attribute $attribute (which is strange)");
- }
-
- // The relevant parts only, please
- $attributes_details[$attribute] = array(
- 'type' => !empty($attrib_details['single-value']) ? 'text' : 'list',
- 'description' => $attrib_details['desc'],
- 'syntax' => $attrib_details['syntax'],
- 'max-length' => $attrib_details['max-length'] ?: false,
- );
- }
-
- return $attributes_details;
- }
-
- public function attributes_allowed($objectclasses = array())
- {
- $this->_debug("Listing allowed_attributes for objectclasses", $objectclasses);
-
- if (!is_array($objectclasses) || empty($objectclasses)) {
- return false;
- }
-
- $schema = $this->init_schema();
- if (!$schema) {
- return false;
- }
-
- $may = array();
- $must = array();
- $superclasses = array();
-
- foreach ($objectclasses as $objectclass) {
- $superclass = $schema->superclass($objectclass);
- if (!empty($superclass)) {
- $superclasses = array_merge($superclass, $superclasses);
- }
-
- $_may = $schema->may($objectclass);
- $_must = $schema->must($objectclass);
-
- if (is_array($_may)) {
- $may = array_merge($may, $_may);
- }
- if (is_array($_must)) {
- $must = array_merge($must, $_must);
- }
- }
-
- $may = array_unique($may);
- $must = array_unique($must);
- $superclasses = array_unique($superclasses);
-
- return array('may' => $may, 'must' => $must, 'super' => $superclasses);
- }
-
- public function classes_allowed()
- {
- $schema = $this->init_schema();
- if (!$schema) {
- return false;
- }
-
- $list = $schema->getAll('objectclasses');
- $classes = array();
-
- foreach ($list as $class) {
- $classes[] = $class['name'];
- }
-
- return $classes;
- }
-
- /**
- * Bind connection with DN and password
- *
- * @param string $dn Bind DN
- * @param string $pass Bind password
- *
- * @return boolean True on success, False on error
- */
- public function bind($bind_dn, $bind_pw)
- {
- if (!$this->conn) {
- return false;
- }
-
- if ($bind_dn == $this->_current_bind_dn) {
- return true;
- }
-
- $this->_debug("C: Bind [dn: $bind_dn]");
-
- if (@ldap_bind($this->conn, $bind_dn, $bind_pw)) {
- $this->_debug("S: OK");
- $this->_current_bind_dn = $bind_dn;
- $this->_current_bind_pw = $bind_pw;
-
- return true;
- }
-
- $this->_debug("S: ".ldap_error($this->conn));
- $this->_error("Bind failed for dn=$bind_dn: ".ldap_error($this->conn));
-
- return false;
- }
-
- /**
- * Close connection to LDAP server
- */
- public function close()
- {
- if ($this->conn) {
- $this->_debug("C: Close");
- ldap_unbind($this->conn);
-
- $this->_current_bind_dn = null;
- $this->_current_bind_pw = null;
- $this->conn = null;
- }
- }
-
- /**
- * Get the value of a configuration item.
- *
- * @param string $key Configuration key
- * @param mixed $default Default value to return
- */
- public function config_get($key, $default = null)
- {
- if (!empty($this->_config_get_hook)) {
- return call_user_func_array($this->_config_get_hook, array($key, $value));
- }
- else if (method_exists($this, "config_get_{$key}")) {
- return call_user_func(array($this, "config_get_$key"), $value);
- }
- else if (!isset($this->config[$key])) {
- return $default;
- }
- else {
- return $this->config[$key];
- }
- }
-
- /**
- * Set a configuration item to value.
- *
- * @param string $key Configuration key
- * @param mixed $value Configuration value
- */
- public function config_set($key, $value = null)
- {
- if (is_array($key)) {
- foreach ($key as $k => $v) {
- $this->config_set($k, $v);
- }
- return;
- }
-
- if (!empty($this->_config_set_hook)) {
- call_user_func($this->_config_set_hook, array($key, $value));
- }
- else if (method_exists($this, "config_set_{$key}")) {
- call_user_func_array(array($this, "config_set_$key"), array($value));
- }
- else if (isset($this->$key)) {
- $this->$key = $value;
- }
- else {
- // 'host' option is deprecated
- if ($key == 'host') {
- $this->config['hosts'] = (array) $value;
- }
- else {
- $this->config[$key] = $value;
- }
- }
- }
-
- /**
- * Establish a connection to the LDAP server
- */
- public function connect($host = null)
- {
- if (!function_exists('ldap_connect')) {
- $this->_error("No ldap support in this PHP installation");
- return false;
- }
-
- if (is_resource($this->conn)) {
- $this->_debug("Connection already exists");
- return true;
- }
-
- $hosts = !empty($host) ? $host : $this->config_get('hosts', array());
- $port = $this->config_get('port', 389);
-
- foreach ((array) $hosts as $host) {
- $this->_debug("C: Connect [$host:$port]");
-
- if ($lc = @ldap_connect($host, $port)) {
- if ($this->config_get('use_tls', false) === true) {
- if (!ldap_start_tls($lc)) {
- $this->_debug("S: Could not start TLS. " . ldap_error($lc));
- continue;
- }
- }
-
- $this->_debug("S: OK");
-
- $ldap_version = $this->config_get('ldap_version', 3);
- $timeout = $this->config_get('network_timeout');
- $referrals = $this->config_get('referrals');
-
- ldap_set_option($lc, LDAP_OPT_PROTOCOL_VERSION, $ldap_version);
-
- if ($timeout) {
- ldap_set_option($lc, LDAP_OPT_NETWORK_TIMEOUT, $timeout);
- }
-
- if ($referrals !== null) {
- ldap_set_option($lc, LDAP_OPT_REFERRALS, (bool) $referrals);
- }
-
- $this->_current_host = $host;
- $this->conn = $lc;
-
- break;
- }
-
- $this->_debug("S: NOT OK");
- }
-
- if (!is_resource($this->conn)) {
- $this->_error("Could not connect to LDAP");
- return false;
- }
-
- return true;
- }
-
- /**
- * Shortcut to ldap_delete()
- */
- public function delete_entry($entry_dn)
- {
- $this->_debug("LDAP: C: Delete $entry_dn");
-
- if (ldap_delete($this->conn, $entry_dn) === false) {
- $this->_debug("LDAP: S: " . ldap_error($this->conn));
- return false;
- }
-
- $this->_debug("LDAP: S: OK");
-
- return true;
- }
-
- /**
- * Deletes specified entry and all entries in the tree
- */
- public function delete_entry_recursive($entry_dn)
- {
- // searching for sub entries, but not scope sub, just one level
- $result = $this->search($entry_dn, '(objectclass=*)', 'one');
-
- if ($result) {
- $entries = $result->entries(true);
-
- foreach (array_keys($entries) as $sub_dn) {
- if (!$this->delete_entry_recursive($sub_dn)) {
- return false;
- }
- }
- }
-
- if (!$this->delete_entry($entry_dn)) {
- return false;
- }
-
- return true;
- }
-
- public function effective_rights($subject)
- {
- $effective_rights_control_oid = "1.3.6.1.4.1.42.2.27.9.5.2";
-
- $supported_controls = $this->supported_controls();
-
- if (!in_array($effective_rights_control_oid, $supported_controls)) {
- $this->_debug("LDAP: No getEffectiveRights control in supportedControls");
- return false;
- }
-
- $attributes = array(
- 'attributeLevelRights' => array(),
- 'entryLevelRights' => array(),
- );
-
- $output = array();
- $entry_dn = $this->entry_dn($subject);
-
- if (!$entry_dn) {
- $entry_dn = $this->config_get($subject . "_base_dn");
- }
- if (!$entry_dn) {
- $entry_dn = $this->config_get("base_dn");
- }
- if (!$entry_dn) {
- $entry_dn = $this->config_get("root_dn");
- }
-
- $this->_debug("effective_rights for subject $subject resolves to entry dn $entry_dn");
-
- $moz_ldapsearch = "/usr/lib64/mozldap/ldapsearch";
- if (!is_file($moz_ldapsearch)) {
- $moz_ldapsearch = "/usr/lib/mozldap/ldapsearch";
- }
- if (!is_file($moz_ldapsearch)) {
- $moz_ldapsearch = null;
- }
-
- if (empty($moz_ldapsearch)) {
- $this->_error("Mozilla LDAP C SDK binary ldapsearch not found, cannot get effective rights on subject $subject");
- return null;
- }
-
- $command = array(
- $moz_ldapsearch,
- '-x',
- '-h',
- $this->_ldap_server,
- '-p',
- $this->_ldap_port,
- '-b',
- escapeshellarg($entry_dn),
- '-D',
- escapeshellarg($this->_current_bind_dn),
- '-w',
- escapeshellarg($this->_current_bind_pw),
- '-J',
- escapeshellarg(implode(':', array(
- $effective_rights_control_oid, // OID
- 'true', // Criticality
- 'dn:' . $this->_current_bind_dn // User DN
- ))),
- '-s',
- 'base',
- '"(objectclass=*)"',
- '"*"',
- );
-
- $command = implode(' ', $command);
-
- $this->_debug("LDAP: Executing command: $command");
-
- exec($command, $output, $return_code);
-
- $this->_debug("LDAP: Command output:" . var_export($output, true));
- $this->_debug("Return code: " . $return_code);
-
- if ($return_code) {
- $this->_error("Command $moz_ldapsearch returned error code: $return_code");
- return null;
- }
-
- $lines = array();
- foreach ($output as $line_num => $line) {
- if (substr($line, 0, 1) == " ") {
- $lines[count($lines)-1] .= trim($line);
- }
- else {
- $lines[] = trim($line);
- }
- }
-
- foreach ($lines as $line) {
- $line_components = explode(':', $line);
- $attribute_name = array_shift($line_components);
- $attribute_value = trim(implode(':', $line_components));
-
- switch ($attribute_name) {
- case "attributeLevelRights":
- $attributes[$attribute_name] = $this->parse_attribute_level_rights($attribute_value);
- break;
- case "dn":
- $attributes[$attribute_name] = $attribute_value;
- break;
- case "entryLevelRights":
- $attributes[$attribute_name] = $this->parse_entry_level_rights($attribute_value);
- break;
-
- default:
- break;
- }
- }
-
- return $attributes;
- }
-
- /**
- * Resolve entry data to entry DN
- *
- * @param string $subject Entry string (e.g. entry DN or unique attribute value)
- * @param array $attributes Additional attributes
- * @param string $base_dn Optional base DN
- *
- * @return string Entry DN string
- */
- public function entry_dn($subject, $attributes = array(), $base_dn = null)
- {
- $this->_debug("entry_dn on subject $subject");
- $is_dn = ldap_explode_dn($subject, 1);
-
- if (is_array($is_dn) && array_key_exists("count", $is_dn) && $is_dn["count"] > 0) {
- $this->_debug("$subject is a dn");
- return $subject;
- }
-
- $this->_debug("$subject is not a dn");
-
- if (strlen($subject) < 32 || preg_match('/[^a-fA-F0-9-]/', $subject)) {
- $this->_debug("$subject is not a unique identifier");
- return;
- }
-
- $unique_attr = $this->config_get('unique_attribute', 'nsuniqueid');
-
- $this->_debug("Using unique_attribute " . var_export($unique_attr, true) . " at " . __FILE__ . ":" . __LINE__);
-
- $attributes = array_merge(array($unique_attr => $subject), (array)$attributes);
- $subject = $this->entry_find_by_attribute($attributes, $base_dn);
-
- if (!empty($subject)) {
- return key($subject);
- }
- }
-
- public function entry_find_by_attribute($attributes, $base_dn = null)
- {
- $this->_debug("Net_LDAP3::entry_find_by_attribute(\$attributes, \$base_dn) called with base_dn", $base_dn, "and attributes", $attributes);
-
- if (empty($attributes) || !is_array($attributes)) {
- return false;
- }
-
- if (empty($attributes[key($attributes)])) {
- return false;
- }
-
- $filter = count($attributes) ? "(&" : "";
-
- foreach ($attributes as $key => $value) {
- $filter .= "(" . $key . "=" . $value . ")";
- }
-
- $filter .= count($attributes) ? ")" : "";
-
- if (empty($base_dn)) {
- $base_dn = $this->config_get('root_dn');
- $this->_debug("Using base_dn from domain " . $this->domain . ": " . $base_dn);
- }
-
- $result = $this->search($base_dn, $filter, 'sub', array_keys($attributes));
-
- if ($result && $result->count() > 0) {
- $this->_debug("Results found: " . implode(', ', array_keys($result->entries(true))));
- return $result->entries(true);
- }
- else {
- $this->_debug("No result");
- return false;
- }
- }
-
- public function find_user_groups($member_dn)
- {
- $groups = array();
- $root_dn = $this->config_get('root_dn');
-
- // TODO: Do not query for both, it's either one or the other
- $entries = $this->search($root_dn, "(|" .
- "(&(objectclass=groupofnames)(member=$member_dn))" .
- "(&(objectclass=groupofuniquenames)(uniquemember=$member_dn))" .
- ")"
- );
-
- if ($entries) {
- $groups = array_keys($entries->entries(true));
- }
-
- return $groups;
- }
-
- public function get_entry_attribute($subject_dn, $attribute)
- {
- $entry = $this->get_entry_attributes($subject_dn, (array)$attribute);
-
- return $entry[strtolower($attribute)];
- }
-
- public function get_entry_attributes($subject_dn, $attributes)
- {
- // @TODO: use get_entry?
- $result = $this->search($subject_dn, '(objectclass=*)', 'base', $attributes);
-
- if (!$result) {
- return array();
- }
-
- $entries = $result->entries(true);
- $entry_dn = key($entries);
- $entry = $entries[$entry_dn];
-
- return $entry;
- }
-
- /**
- * Get a specific LDAP entry, identified by its DN
- *
- * @param string $dn Record identifier
- * @param array $attributes Attributes to return
- *
- * @return array Hash array
- */
- public function get_entry($dn, $attributes = array())
- {
- $rec = null;
-
- if ($this->conn && $dn) {
- $this->_debug("C: Read [dn: $dn] [(objectclass=*)]");
-
- if ($ldap_result = @ldap_read($this->conn, $dn, '(objectclass=*)', $attributes)) {
- $this->_debug("S: OK");
-
- if ($entry = ldap_first_entry($this->conn, $ldap_result)) {
- $rec = ldap_get_attributes($this->conn, $entry);
- }
- }
- else {
- $this->_debug("S: ".ldap_error($this->conn));
- }
-
- if (!empty($rec)) {
- $rec['dn'] = $dn; // Add in the dn for the entry.
- }
- }
-
- return $rec;
- }
-
- public function list_replicas()
- {
- $this->_debug("Finding replicas for this server.");
-
- // Search any host that is a replica for the current host
- $replica_hosts = $this->config_get('replica_hosts', array());
- $root_dn = $this->config_get('config_root_dn');
-
- if (!empty($replica_hosts)) {
- return $replica_hosts;
- }
-
- $ldap = new Net_LDAP3($this->config);
- $ldap->connect();
- $ldap->bind($this->_current_bind_dn, $this->_current_bind_pw);
-
- $result = $ldap->search($root_dn, '(objectclass=nsds5replicationagreement)', 'sub', array('nsds5replicahost'));
-
- if (!$result) {
- $this->_debug("No replicas configured");
- return $replica_hosts;
- }
-
- $this->_debug("Replication agreements found: " . var_export($result->entries(true), true));
-
- foreach ($result->entries(true) as $dn => $attrs) {
- if (!in_array($attrs['nsds5replicahost'], $replica_hosts)) {
- $replica_hosts[] = $attrs['nsds5replicahost'];
- }
- }
-
- // $replica_hosts now holds the IDs of servers we are currently NOT
- // connected to. We might need this later in order to set
- $this->_server_id_not = $replica_hosts;
-
- $this->_debug("So far, we have the following replicas: " . var_export($replica_hosts, true));
-
- $ldap->close();
-
- foreach ($replica_hosts as $replica_host) {
- $ldap->config_set('hosts', array($replica_host));
- $ldap->connect();
- $ldap->bind($this->_current_bind_dn, $this->_current_bind_pw);
-
- $result = $ldap->search($root_dn, '(objectclass=nsds5replicationagreement)', 'sub', array('nsds5replicahost'));
- if (!$result) {
- $this->_debug("No replicas configured");
- }
-
- foreach ($result->entries(true) as $dn => $attrs) {
- if (!in_array($attrs['nsds5replicahost'], $replica_hosts)) {
- $replica_hosts[] = $attrs['nsds5replicahost'];
- }
- }
-
- $ldap->close();
- }
-
- $this->config_set('replica_hosts', $replica_hosts);
-
- return $replica_hosts;
- }
-
- public function login($username, $password, $domain = null)
- {
- $this->_debug("Net_LDAP3::login(\$username = '" . $username . "', \$password = '****', \$domain = '" . $domain . "')");
-
- $_bind_dn = $this->config_get('service_bind_dn');
- $_bind_pw = $this->config_get('service_bind_pw');
-
- if (empty($_bind_dn)) {
- $this->_debug("No valid service bind dn found.");
- return null;
- }
-
- if (empty($_bind_pw)) {
- $this->_debug("No valid service bind password found.");
- return null;
- }
-
- $bound = $this->bind($_bind_dn, $_bind_pw);
-
- if (!$bound) {
- $this->_debug("Could not bind with service bind credentials.");
- return null;
- }
-
- $entry_dn = $this->entry_dn($username);
-
- if (!empty($entry_dn)) {
- $bound = $this->bind($entry_dn, $password);
-
- if (!$bound) {
- $this->_error("Could not bind with " . $entry_dn);
- return null;
- }
-
- return $entry_dn;
- }
-
- $base_dn = $this->config_get('root_dn');
-
- if (empty($base_dn)) {
- $this->_debug("Could not get a valid base dn to search.");
- return null;
- }
-
- $localpart = $username;
-
- if (empty($domain) ) {
- if (count(explode('@', $username)) > 1) {
- $_parts = explode('@', $username);
- $localpart = $_parts[0];
- $domain = $_parts[1];
- }
- else {
- $localpart = $username;
- $domain = '';
- }
- }
-
- $realm = $domain;
- $filter = $this->config_get("login_filter", null);
-
- if (empty($filter)) {
- $filter = $this->config_get("filter", null);
- }
- if (empty($filter)) {
- $filter = "(&(|(mail=%s)(mail=%U@%d)(alias=%s)(alias=%U@%d)(uid=%s))(objectclass=inetorgperson))";
- }
-
- $this->_debug("Net::LDAP3::login() original filter: " . $filter);
-
- $replace_patterns = array(
- '/%s/' => $username,
- '/%d/' => $domain,
- '/%U/' => $localpart,
- '/%r/' => $realm
- );
-
- $filter = preg_replace(array_keys($replace_patterns), array_values($replace_patterns), $filter);
-
- $this->_debug("Net::LDAP3::login() actual filter: " . $filter);
-
- $result = $this->search($base_dn, $filter, 'sub');
-
- if (!$result) {
- $this->_debug("Could not search $base_dn with $filter");
- return null;
- }
-
- if ($result->count() > 1) {
- $this->_debug("Multiple entries found.");
- return null;
- }
- else if ($result->count() < 1) {
- $this->_debug("No entries found.");
- return null;
- }
-
- $entries = $result->entries();
- $entry = self::normalize_result($entries);
- $entry_dn = key($entry);
-
- $bound = $this->bind($entry_dn, $password);
-
- if (!$bound) {
- $this->_debug("Could not bind with " . $entry_dn);
- return null;
- }
-
- return $entry_dn;
- }
-
- public function list_group_members($dn, $entry = null, $recurse = true)
- {
- $this->_debug("Called list_group_members(" . $dn . ")");
-
- if (is_array($entry) && in_array('objectclass', $entry)) {
- if (!in_array(array('groupofnames', 'groupofuniquenames', 'groupofurls'), $entry['objectclass'])) {
- $this->_debug("Called list_group_members on a non-group!");
- return array();
- }
- }
- else {
- $entry = $this->get_entry($dn, array('member', 'uniquemember', 'memberurl', 'objectclass'));
-
- if (!$entry) {
- return array();
- }
- }
-
- $group_members = array();
-
- foreach ((array)$entry['objectclass'] as $objectclass) {
- switch (strtolower($objectclass)) {
- case "groupofnames":
- case "kolabgroupofnames":
- $group_members = array_merge($group_members, $this->list_group_member($dn, $entry['member'], $recurse));
- break;
- case "groupofuniquenames":
- case "kolabgroupofuniquenames":
- $group_members = array_merge($group_members, $this->list_group_uniquemember($dn, $entry['uniquemember'], $recurse));
- break;
- case "groupofurls":
- $group_members = array_merge($group_members, $this->list_group_memberurl($dn, $entry['memberurl'], $recurse));
- break;
- }
- }
-
- return array_values(array_filter($group_members));
- }
-
- public function modify_entry($subject_dn, $old_attrs, $new_attrs)
- {
- $this->_debug("OLD ATTRIBUTES", $old_attrs);
- $this->_debug("NEW ATTRIBUTES", $new_attrs);
-
- // TODO: Get $rdn_attr - we have type_id in $new_attrs
- $dn_components = ldap_explode_dn($subject_dn, 0);
- $rdn_components = explode('=', $dn_components[0]);
- $rdn_attr = $rdn_components[0];
-
- $this->_debug("Net_LDAP3::modify_entry() using rdn attribute: " . $rdn_attr);
-
- $mod_array = array(
- 'add' => array(), // For use with ldap_mod_add()
- 'del' => array(), // For use with ldap_mod_del()
- 'replace' => array(), // For use with ldap_mod_replace()
- 'rename' => array(), // For use with ldap_rename()
- );
-
- // This is me cheating. Remove this special attribute.
- if (array_key_exists('ou', $old_attrs) || array_key_exists('ou', $new_attrs)) {
- $old_ou = $old_attrs['ou'];
- $new_ou = $new_attrs['ou'];
- unset($old_attrs['ou']);
- unset($new_attrs['ou']);
- }
- else {
- $old_ou = null;
- $new_ou = null;
- }
-
- // Compare each attribute value of the old attrs with the corresponding value
- // in the new attrs, if any.
- foreach ($old_attrs as $attr => $old_attr_value) {
- if (is_array($old_attr_value)) {
- if (count($old_attr_value) == 1) {
- $old_attrs[$attr] = $old_attr_value[0];
- $old_attr_value = $old_attrs[$attr];
- }
- }
-
- if (array_key_exists($attr, $new_attrs)) {
- if (is_array($new_attrs[$attr])) {
- if (count($new_attrs[$attr]) == 1) {
- $new_attrs[$attr] = $new_attrs[$attr][0];
- }
- }
-
- if (is_array($old_attrs[$attr]) && is_array($new_attrs[$attr])) {
- $_sort1 = $new_attrs[$attr];
- sort($_sort1);
- $_sort2 = $old_attr_value;
- sort($_sort2);
- }
- else {
- $_sort1 = true;
- $_sort2 = false;
- }
-
- if ($new_attrs[$attr] !== $old_attr_value && $_sort1 !== $_sort2) {
- $this->_debug("Attribute $attr changed from " . var_export($old_attr_value, true) . " to " . var_export($new_attrs[$attr], true));
- if ($attr === $rdn_attr) {
- $this->_debug("This attribute is the RDN attribute. Let's see if it is multi-valued, and if the original still exists in the new value.");
- if (is_array($old_attrs[$attr])) {
- if (!is_array($new_attrs[$attr])) {
- if (in_array($new_attrs[$attr], $old_attrs[$attr])) {
- // TODO: Need to remove all $old_attrs[$attr] values not equal to $new_attrs[$attr], and not equal to the current $rdn_attr value [0]
-
- $this->_debug("old attrs. is array, new attrs. is not array. new attr. exists in old attrs.");
-
- $rdn_attr_value = array_shift($old_attrs[$attr]);
- $_attr_to_remove = array();
-
- foreach ($old_attrs[$attr] as $value) {
- if (strtolower($value) != strtolower($new_attrs[$attr])) {
- $_attr_to_remove[] = $value;
- }
- }
-
- $this->_debug("Adding to delete attribute $attr values:" . implode(', ', $_attr_to_remove));
-
- $mod_array['del'][$attr] = $_attr_to_remove;
-
- if (strtolower($new_attrs[$attr]) !== strtolower($rdn_attr_value)) {
- $this->_debug("new attrs is not the same as the old rdn value, issuing a rename");
- $mod_array['rename']['dn'] = $subject_dn;
- $mod_array['rename']['new_rdn'] = $rdn_attr . '=' . $new_attrs[$attr][0];
- }
- }
- else {
- $this->_debug("new attrs is not the same as any of the old rdn value, issuing a full rename");
- $mod_array['rename']['dn'] = $subject_dn;
- $mod_array['rename']['new_rdn'] = $rdn_attr . '=' . $new_attrs[$attr];
- }
- }
- else {
- // TODO: See if the rdn attr. value is still in $new_attrs[$attr]
- if (in_array($old_attrs[$attr][0], $new_attrs[$attr])) {
- $this->_debug("Simply replacing attr $attr as rdn attr value is preserved.");
- $mod_array['replace'][$attr] = $new_attrs[$attr];
- }
- else {
- // TODO: This fails.
- $mod_array['rename']['dn'] = $subject_dn;
- $mod_array['rename']['new_rdn'] = $rdn_attr . '=' . $new_attrs[$attr][0];
- $mod_array['del'][$attr] = $old_attrs[$attr][0];
- }
- }
- }
- else {
- if (!is_array($new_attrs[$attr])) {
- $this->_debug("Renaming " . $old_attrs[$attr] . " to " . $new_attrs[$attr]);
- $mod_array['rename']['dn'] = $subject_dn;
- $mod_array['rename']['new_rdn'] = $rdn_attr . '=' . $new_attrs[$attr];
- }
- else {
- $this->_debug("Adding to replace");
- // An additional attribute value is being supplied. Just replace and continue.
- $mod_array['replace'][$attr] = $new_attrs[$attr];
- continue;
- }
- }
-
- }
- else {
- if (!isset($new_attrs[$attr]) || $new_attrs[$attr] === '' || (is_array($new_attrs[$attr]) && empty($new_attrs[$attr]))) {
- switch ($attr) {
- case "userpassword":
- break;
- default:
- $this->_debug("Adding to del: $attr");
- $mod_array['del'][$attr] = (array)($old_attr_value);
- break;
- }
- }
- else {
- $this->_debug("Adding to replace: $attr");
- $mod_array['replace'][$attr] = (array)($new_attrs[$attr]);
- }
- }
- }
- else {
- $this->_debug("Attribute $attr unchanged");
- }
- }
- else {
- // TODO: Since we're not shipping the entire object back and forth, and only post
- // part of the data... we don't know what is actually removed (think modifiedtimestamp, etc.)
- $this->_debug("Group attribute $attr not mentioned in \$new_attrs..., but not explicitly removed... by assumption");
- }
- }
-
- foreach ($new_attrs as $attr => $value) {
- // OU's parent base dn
- if ($attr == 'base_dn') {
- continue;
- }
-
- if (is_array($value)) {
- if (count($value) == 1) {
- $new_attrs[$attr] = $value[0];
- $value = $new_attrs[$attr];
- }
- }
-
- if (array_key_exists($attr, $old_attrs)) {
- if (is_array($old_attrs[$attr])) {
- if (count($old_attrs[$attr]) == 1) {
- $old_attrs[$attr] = $old_attrs[$attr][0];
- }
- }
-
- if (is_array($new_attrs[$attr]) && is_array($old_attrs[$attr])) {
- $_sort1 = $old_attrs[$attr];
- sort($_sort1);
- $_sort2 = $value;
- sort($_sort2);
- }
- else {
- $_sort1 = true;
- $_sort2 = false;
- }
-
- if ($value === null || $value === '' || (is_array($value) && empty($value))) {
- if (!array_key_exists($attr, $mod_array['del'])) {
- switch ($attr) {
- case 'userpassword':
- break;
- default:
- $this->_debug("Adding to del(2): $attr");
- $mod_array['del'][$attr] = (array)($old_attrs[$attr]);
- break;
- }
- }
- }
- else {
- if (!($old_attrs[$attr] === $value) && !($attr === $rdn_attr) && !($_sort1 === $_sort2)) {
- if (!array_key_exists($attr, $mod_array['replace'])) {
- $this->_debug("Adding to replace(2): $attr");
- $mod_array['replace'][$attr] = $value;
- }
- }
- }
- }
- else {
- if (!empty($value)) {
- $mod_array['add'][$attr] = $value;
- }
- }
- }
-
- if (empty($old_ou)) {
- $subject_dn_components = ldap_explode_dn($subject_dn, 0);
- unset($subject_dn_components["count"]);
- $subject_rdn = array_shift($subject_dn_components);
- $old_ou = implode(',', $subject_dn_components);
- }
-
- // object is an organizational unit
- if (strpos($subject_dn, 'ou=' . $old_ou) === 0) {
- $root = substr($subject_dn, strlen($old_ou) + 4); // remove ou=*,
-
- if ((!empty($new_attrs['base_dn']) && strtolower($new_attrs['base_dn']) !== strtolower($root))
- || (strtolower($old_ou) !== strtolower($new_ou))
- ) {
- if (!empty($new_attrs['base_dn'])) {
- $root = $new_attrs['base_dn'];
- }
-
- $mod_array['rename']['new_parent'] = $root;
- $mod_array['rename']['dn'] = $subject_dn;
- $mod_array['rename']['new_rdn'] = 'ou=' . $new_ou;
- }
- }
- // not OU object, but changed ou attribute
- else if ((!empty($old_ou) && !empty($new_ou)) && strtolower($old_ou) !== strtolower($new_ou)) {
- $mod_array['rename']['new_parent'] = $new_ou;
- if (empty($mod_array['rename']['dn']) || empty($mod_array['rename']['new_rdn'])) {
- $mod_array['rename']['dn'] = $subject_dn;
- $mod_array['rename']['new_rdn'] = $rdn_attr . '=' . $new_attrs[$rdn_attr];
- }
- }
-
- $this->_debug($mod_array);
-
- $result = $this->modify_entry_attributes($subject_dn, $mod_array);
-
- if ($result) {
- return $mod_array;
- }
- }
-
- /**
- * Bind connection with (SASL-) user and password
- *
- * @param string $authc Authentication user
- * @param string $pass Bind password
- * @param string $authz Autorization user
- *
- * @return boolean True on success, False on error
- */
- public function sasl_bind($authc, $pass, $authz=null)
- {
- if (!$this->conn) {
- return false;
- }
-
- if (!function_exists('ldap_sasl_bind')) {
- $this->_error("Unable to bind: ldap_sasl_bind() not exists");
- return false;
- }
-
- if (!empty($authz)) {
- $authz = 'u:' . $authz;
- }
-
- $method = $this->config_get('auth_method');
- if (empty($method)) {
- $method = 'DIGEST-MD5';
- }
-
- $this->_debug("C: Bind [mech: $method, authc: $authc, authz: $authz]");
-
- if (ldap_sasl_bind($this->conn, null, $pass, $method, null, $authc, $authz)) {
- $this->_debug("S: OK");
- return true;
- }
-
- $this->_debug("S: ".ldap_error($this->conn));
- $this->_error("Bind failed for authcid=$authc ".ldap_error($this->conn));
-
- return false;
- }
-
- /**
- * Execute LDAP search
- *
- * @param string $base_dn Base DN to use for searching
- * @param string $filter Filter string to query
- * @param string $scope The LDAP scope (list|sub|base)
- * @param array $attrs List of entry attributes to read
- * @param array $prop Hash array with query configuration properties:
- * - sort: array of sort attributes (has to be in sync with the VLV index)
- * - search: search string used for VLV controls
- * @param bool $count_only Set to true if only entry count is requested
- *
- * @return mixed Net_LDAP3_Result object or number of entries (if $count_only=true) or False on failure
- */
- public function search($base_dn, $filter = '(objectclass=*)', $scope = 'sub', $attrs = array('dn'), $props = array(), $count_only = false)
- {
- if (!$this->conn) {
- $this->_debug("No active connection for " . __CLASS__ . "::" . __FUNCTION__);
- return false;
- }
-
- $this->_debug("C: Search base dn: [$base_dn] scope [$scope] with filter [$filter]");
-
- // make sure attributes list is not empty
- if (empty($attrs)) {
- $attrs = array('dn');
- }
-
- if (!$count_only && ($sort = $this->find_vlv($base_dn, $filter, $scope, $props['sort']))) {
- // when using VLV, we get the total count by...
- // ...either reading numSubOrdinates attribute
- if (($sub_filter = $this->config_get('numsub_filter')) &&
- ($result_count = @$ns_function($this->conn, $base_dn, $sub_filter, array('numSubOrdinates'), 0, 0, 0))
- ) {
- $counts = ldap_get_entries($this->conn, $result_count);
- for ($vlv_count = $j = 0; $j < $counts['count']; $j++) {
- $vlv_count += $counts[$j]['numsubordinates'][0];
- }
- $this->_debug("D: total numsubordinates = " . $vlv_count);
- }
- // ...or by fetching all records dn and count them
- else if (!function_exists('ldap_parse_virtuallist_control')) {
- $vlv_count = $this->search($base_dn, $filter, $scope, array('dn'), $props, true);
- }
-
- $this->vlv_active = $this->_vlv_set_controls($sort, $this->list_page, $this->page_size,
- $this->_vlv_search($sort, $props['search']));
- }
- else {
- $this->vlv_active = false;
- }
-
- $function = self::scope_to_function($scope, $ns_function);
- $sizelimit = (int) $this->config['sizelimit'];
- $timelimit = (int) $this->config['timelimit'];
-
- $this->_debug("Using function $function on scope $scope (\$ns_function is $ns_function)");
-
- if ($this->vlv_active) {
- if (!empty($this->additional_filter)) {
- $filter = "(&" . $filter . $this->additional_filter . ")";
- $this->_debug("C: (With VLV) Setting a filter (with additional filter) of " . $filter);
- }
- else {
- $this->_debug("C: (With VLV) Setting a filter (without additional filter) of " . $filter);
- }
- }
- else {
- if (!empty($this->additional_filter)) {
- $filter = "(&" . $filter . $this->additional_filter . ")";
- }
- $this->_debug("C: (Without VLV) Setting a filter of " . $filter);
- }
-
- $this->_debug("Executing search with return attributes: " . var_export($attrs, true));
-
- $ldap_result = @$function($this->conn, $base_dn, $filter, $attrs, 0, $sizelimit, $timelimit);
-
- if (!$ldap_result) {
- $this->_debug("$function failed for dn=$base_dn: ".ldap_error($this->conn));
- return false;
- }
-
- // when running on a patched PHP we can use the extended functions
- // to retrieve the total count from the LDAP search result
- if ($this->vlv_active && function_exists('ldap_parse_virtuallist_control')) {
- if (ldap_parse_result($this->conn, $ldap_result, $errcode, $matcheddn, $errmsg, $referrals, $serverctrls)) {
- ldap_parse_virtuallist_control($this->conn, $serverctrls, $last_offset, $vlv_count, $vresult);
- $this->_debug("S: VLV result: last_offset=$last_offset; content_count=$vlv_count");
- }
- else {
- $this->_debug("S: ".($errmsg ? $errmsg : ldap_error($this->conn)));
- }
- }
- else if ($this->debug) {
- $this->_debug("S: ".ldap_count_entries($this->conn, $ldap_result)." record(s) found");
- }
-
- $result = new Net_LDAP3_Result($this->conn, $base_dn, $filter, $scope, $ldap_result);
- $result->set('offset', $last_offset);
- $result->set('count', $vlv_count);
- $result->set('vlv', true);
-
- return $count_only ? $result->count() : $result;
- }
-
- /**
- * Similar to Net_LDAP3::search() but using a search array with multiple
- * keys and values that to continue to use the VLV but with an original
- * filter adding the search stuff to an additional filter.
- *
- * @see Net_LDAP3::search()
- */
- public function search_entries($base_dn, $filter = '(objectclass=*)', $scope = 'sub', $attrs = array('dn'), $props = array())
- {
- $this->_debug("Net_LDAP3::search_entries with search " . var_export($props, true));
-
- if (is_array($props['search']) && array_key_exists('params', $props['search'])) {
- $_search = $this->search_filter($props['search']);
- $this->_debug("C: Search filter: $_search");
-
- if (!empty($_search)) {
- $this->additional_filter = $_search;
- }
- else {
- $this->additional_filter = "(|";
-
- foreach ($props['search'] as $attr => $value) {
- $this->additional_filter .= "(" . $attr . "=" . $this->_fuzzy_search_prefix() . $value . $this->_fuzzy_search_suffix() . ")";
- }
-
- $this->additional_filter .= ")";
- }
-
- $this->_debug("C: Setting an additional filter " . $this->additional_filter);
- }
-
- $search = $this->search($base_dn, $filter, $scope, $attrs, $props);
-
- $this->additional_filter = null;
-
- if (!$search) {
- $this->_debug("Net_LDAP3: Search did not succeed!");
- return false;
- }
-
- return $search;
- }
-
- /**
- * Create LDAP search filter string according to defined parameters.
- */
- public function search_filter($search)
- {
- if (empty($search) || !is_array($search) || empty($search['params'])) {
- return null;
- }
-
- $operators = array('=', '~=', '>=', '<=');
- $filter = '';
-
- foreach ((array) $search['params'] as $field => $param) {
- switch ((string)$param['type']) {
- case 'prefix':
- $prefix = '';
- $suffix = '*';
- break;
-
- case 'suffix':
- $prefix = '*';
- $suffix = '';
- break;
-
- case 'exact':
- case '=':
- case '~=':
- case '>=':
- case '<=':
- $prefix = '';
- $suffix = '';
- break;
-
- case 'exists':
- $prefix = '*';
- $suffix = '';
- $param['value'] = '';
- break;
-
- case 'both':
- default:
- $prefix = '*';
- $suffix = '*';
- break;
- }
-
- $operator = $param['type'] && in_array($param['type'], $operators) ? $param['type'] : '=';
-
- if (is_array($param['value'])) {
- $val_filter = array();
- foreach ($param['value'] as $val) {
- $value = self::quote_string($val);
- $val_filter[] = "(" . $field . $operator . $prefix . $value . $suffix . ")";
- }
- $filter .= "(|" . implode($val_filter, '') . ")";
- }
- else {
- $value = self::quote_string($param['value']);
- $filter .= "(" . $field . $operator . $prefix . $value . $suffix . ")";
- }
- }
-
- // join search parameters with specified operator ('OR' or 'AND')
- if (count($search['params']) > 1) {
- $filter = '(' . ($search['operator'] == 'AND' ? '&' : '|') . $filter . ')';
- }
-
- return $filter;
- }
-
- /**
- * Set properties for VLV-based paging
- *
- * @param number $page Page number to list (starting at 1)
- * @param number $size Number of entries to display on one page
- */
- public function set_vlv_page($page, $size = 10)
- {
- $this->list_page = $page;
- $this->page_size = $size;
- }
-
- /**
- * Turn an LDAP entry into a regular PHP array with attributes as keys.
- *
- * @param array $entry Attributes array as retrieved from ldap_get_attributes() or ldap_get_entries()
- *
- * @return array Hash array with attributes as keys
- */
- public static function normalize_entry($entry)
- {
- $rec = array();
- for ($i=0; $i < $entry['count']; $i++) {
- $attr = $entry[$i];
- for ($j=0; $j < $entry[$attr]['count']; $j++) {
- $rec[$attr][$j] = $entry[$attr][$j];
- }
- }
-
- return $rec;
- }
-
- /**
- * Normalize a ldap result by converting entry attribute arrays into single values
- */
- public static function normalize_result($_result)
- {
- if (!is_array($_result)) {
- return array();
- }
-
- $result = array();
-
- for ($x = 0; $x < $_result['count']; $x++) {
- $dn = $_result[$x]['dn'];
- $result[$dn] = array();
- for ($y = 0; $y < $_result[$x]['count']; $y++) {
- $attr = $_result[$x][$y];
- if ($_result[$x][$attr]['count'] == 1) {
- switch ($attr) {
- case 'objectclass':
- $result[$dn][$attr] = array(strtolower($_result[$x][$attr][0]));
- break;
- default:
- $result[$dn][$attr] = $_result[$x][$attr][0];
- break;
- }
- }
- else {
- $result[$dn][$attr] = array();
- for ($z = 0; $z < $_result[$x][$attr]['count']; $z++) {
- switch ($attr) {
- case 'objectclass':
- $result[$dn][$attr][] = strtolower($_result[$x][$attr][$z]);
- break;
- default:
- $result[$dn][$attr][] = $_result[$x][$attr][$z];
- break;
- }
- }
- }
- }
- }
-
- return $result;
- }
-
- public static function scopeint2str($scope)
- {
- switch ($scope) {
- case 2:
- return 'sub';
- break;
- case 1:
- return 'one';
- break;
- case 0:
- return 'base';
- break;
- default:
- $this->_debug("Scope $scope is not a valid scope integer");
- break;
- }
- }
-
- /**
- * Choose the right PHP function according to scope property
- *
- * @param string $scope The LDAP scope (sub|base|list)
- * @param string $ns_function Function to be used for numSubOrdinates queries
- * @return string PHP function to be used to query directory
- */
- public static function scope_to_function($scope, &$ns_function = null)
- {
- switch ($scope) {
- case 'sub':
- $function = $ns_function = 'ldap_search';
- break;
- case 'base':
- $function = $ns_function = 'ldap_read';
- break;
- case 'one':
- case 'list':
- default:
- $function = 'ldap_list';
- $ns_function = 'ldap_read';
- break;
- }
-
- return $function;
- }
-
- private function config_set_config_get_hook($callback)
- {
- $this->_config_get_hook = $callback;
- }
-
- private function config_set_config_set_hook($callback)
- {
- $this->_config_set_hook = $callback;
- }
-
- /**
- * Sets the debug level both for this class and the ldap connection.
- */
- private function config_set_debug($value)
- {
- $this->config['debug'] = (bool) $value;
- if ((int)($value) > 0) {
- ldap_set_option(null, LDAP_OPT_DEBUG_LEVEL, (int)($value));
- }
- }
-
- /**
- * Sets a log hook that is called with every log message in this module.
- */
- private function config_set_log_hook($callback)
- {
- $this->_log_hook = $callback;
- }
-
- /**
- * Find a matching VLV
- */
- protected function find_vlv($base_dn, $filter, $scope, $sort_attrs = null)
- {
- if ($scope == 'base') {
- return false;
- }
-
- $vlv_indexes = $this->find_vlv_indexes_and_searches();
-
- if (empty($vlv_indexes)) {
- return false;
- }
-
- $this->_debug("Existing vlv index and search information", $vlv_indexes);
-
- $filter = strtolower($filter);
-
- foreach ($vlv_indexes as $vlv_index) {
- if (!empty($vlv_index[$base_dn])) {
- $this->_debug("Found a VLV for base_dn: " . $base_dn);
- if ($vlv_index[$base_dn]['filter'] == $filter) {
- if ($vlv_index[$base_dn]['scope'] == $scope) {
- $this->_debug("Scope and filter matches");
-
- // Not passing any sort attributes means you don't care
- if (!empty($sort_attrs)) {
- $sort_attrs = (array) $sort_attrs;
- foreach ($vlv_index[$base_dn]['sort'] as $sss_config) {
- if (count(array_intersect($sort_attrs, $sss_config)) == count($sort_attrs)) {
- return $sort_attrs;
- }
- }
-
- $this->_error("The requested sorting does not match any server-side sorting configuration");
-
- return false;
- }
- else {
- return $vlv_index[$base_dn]['sort'][0];
- }
- }
- else {
- $this->_debug("Scope does not match. VLV: " . var_export($vlv_index[$base_dn]['scope'], true)
- . " while looking for " . var_export($scope, true));
- return false;
- }
- }
- else {
- $this->_debug("Filter does not match");
- }
- }
- }
-
- return false;
- }
-
- /**
- * Return VLV indexes and searches including necessary configuration
- * details.
- */
- protected function find_vlv_indexes_and_searches()
- {
- if ($this->config['vlv'] === false) {
- return false;
- }
-
- if (is_array($this->config['vlv'])) {
- return $this->config['vlv'];
- }
-
- if ($this->_vlv_indexes_and_searches !== null) {
- return $this->_vlv_indexes_and_searches;
- }
-
- $this->_vlv_indexes_and_searches = array();
-
- $config_root_dn = $this->config_get('config_root_dn');
-
- if (empty($config_root_dn)) {
- return array();
- }
-
- if ($this->cache && ($cached_config = $this->cache->get('vlvconfig'))) {
- $this->_vlv_indexes_and_searches = $cached_config;
- return $this->_vlv_indexes_and_searches;
- }
-
- $this->_debug("No VLV information available yet, refreshing");
-
- $search_filter = '(objectclass=vlvsearch)';
- $search_result = ldap_search($this->conn, $config_root_dn, $search_filter, array('*'), 0, 0, 0);
-
- if ($search_result === false) {
- $this->_debug("Search for '$search_filter' on '$config_root_dn' failed:".ldap_error($this->conn));
- return;
- }
-
- $vlv_searches = new Net_LDAP3_Result($this->conn, $config_root_dn, $search_filter, 'sub', $search_result);
-
- if ($vlv_searches->count() < 1) {
- $this->_debug("Empty result from search for '(objectclass=vlvsearch)' on '$config_root_dn'");
- return;
- }
-
- $index_filter = '(objectclass=vlvindex)';
-
- foreach ($vlv_searches->entries(true) as $vlv_search_dn => $vlv_search_attrs) {
- // The attributes we are interested in are as follows:
- $_vlv_base_dn = $vlv_search_attrs['vlvbase'];
- $_vlv_scope = $vlv_search_attrs['vlvscope'];
- $_vlv_filter = $vlv_search_attrs['vlvfilter'];
-
- // Multiple indexes may exist
- $index_result = ldap_search($this->conn, $vlv_search_dn, $index_filter, array('*'), 0, 0, 0);
-
- if ($index_result === false) {
- $this->_debug("Search for '$index_filter' on '$vlv_search_dn' failed:".ldap_error($this->conn));
- continue;
- }
-
- $vlv_indexes = new Net_LDAP3_Result($this->conn, $vlv_search_dn, $index_filter, 'sub', $index_result);
- $vlv_indexes = $vlv_indexes->entries(true);
-
- // Reset this one for each VLV search.
- $_vlv_sort = array();
-
- foreach ($vlv_indexes as $vlv_index_dn => $vlv_index_attrs) {
- $_vlv_sort[] = explode(' ', $vlv_index_attrs['vlvsort']);
- }
-
- $this->_vlv_indexes_and_searches[] = array(
- $_vlv_base_dn => array(
- 'scope' => self::scopeint2str($_vlv_scope),
- 'filter' => strtolower($_vlv_filter),
- 'sort' => $_vlv_sort,
- ),
- );
- }
-
- // cache this
- if ($this->cache) {
- $this->cache->set('vlvconfig', $this->_vlv_indexes_and_searches);
- }
-
- return $this->_vlv_indexes_and_searches;
- }
-
- private function init_schema()
- {
- // use PEAR include if autoloading failed
- if (!class_exists('Net_LDAP2')) {
- require_once('Net/LDAP2.php');
- }
-
- $port = $this->config_get('port', 389);
- $tls = $this->config_get('use_tls', false);
-
- foreach ((array) $this->config_get('hosts') as $host) {
- $this->_debug("C: Connect [$host:$port]");
-
- $_ldap_cfg = array(
- 'host' => $host,
- 'port' => $port,
- 'tls' => $tls,
- 'version' => 3,
- 'binddn' => $this->config_get('service_bind_dn'),
- 'bindpw' => $this->config_get('service_bind_pw')
- );
-
- $_ldap_schema_cache_cfg = array(
- 'path' => "/tmp/" . $host . ":" . ($port ? $port : '389') . "-Net_LDAP2_Schema.cache",
- 'max_age' => 86400,
- );
-
- $_ldap = Net_LDAP2::connect($_ldap_cfg);
-
- if (!is_a($_ldap, 'Net_LDAP2_Error')) {
- $this->_debug("S: OK");
- break;
- }
-
- $this->_debug("S: NOT OK");
- $this->_debug($_ldap->getMessage());
- }
-
- if (is_a($_ldap, 'Net_LDAP2_Error')) {
- return null;
- }
-
- $_ldap_schema_cache = new Net_LDAP2_SimpleFileSchemaCache($_ldap_schema_cache_cfg);
-
- $_ldap->registerSchemaCache($_ldap_schema_cache);
-
- // TODO: We should learn what LDAP tech. we're running against.
- // Perhaps with a scope base objectclass recognize rootdse entry
- $schema_root_dn = $this->config_get('schema_root_dn');
-
- if (!$schema_root_dn) {
- $_schema = $_ldap->schema();
- }
-
- return $_schema;
- }
-
- private function list_group_member($dn, $members, $recurse = true)
- {
- $this->_debug("Called list_group_member(" . $dn . ")");
-
- $members = (array) $members;
- $group_members = array();
-
- // remove possible 'count' item
- unset($members['count']);
-
- // Use the member attributes to return an array of member ldap objects
- // NOTE that the member attribute is supposed to contain a DN
- foreach ($members as $member) {
- $member_entry = $this->get_entry($member, array('member', 'uniquemember', 'memberurl', 'objectclass'));
-
- if (empty($member_entry)) {
- continue;
- }
-
- $group_members[$member] = $member;
-
- if ($recurse) {
- // Nested groups
- $group_group_members = $this->list_group_members($member, $member_entry);
- if ($group_group_members) {
- $group_members = array_merge($group_group_members, $group_members);
- }
- }
- }
-
- return array_filter($group_members);
- }
-
- private function list_group_uniquemember($dn, $uniquemembers, $recurse = true)
- {
- $this->_debug("Called list_group_uniquemember(" . $dn . ")", $entry);
-
- $uniquemembers = (array)($uniquemembers);
- $group_members = array();
-
- // remove possible 'count' item
- unset($uniquemembers['count']);
-
- foreach ($uniquemembers as $member) {
- $member_entry = $this->get_entry($member, array('member', 'uniquemember', 'memberurl', 'objectclass'));
-
- if (empty($member_entry)) {
- continue;
- }
-
- $group_members[$member] = $member;
-
- if ($recurse) {
- // Nested groups
- $group_group_members = $this->list_group_members($member, $member_entry);
- if ($group_group_members) {
- $group_members = array_merge($group_group_members, $group_members);
- }
- }
- }
-
- return array_filter($group_members);
- }
-
- private function list_group_memberurl($dn, $memberurls, $recurse = true)
- {
- $this->_debug("Called list_group_memberurl(" . $dn . ")");
-
- $group_members = array();
- $memberurls = (array) $memberurls;
- $attributes = array('member', 'uniquemember', 'memberurl', 'objectclass');
-
- // remove possible 'count' item
- unset($memberurls['count']);
-
- foreach ($memberurls as $url) {
- $ldap_uri = $this->parse_memberurl($url);
- $result = $this->search($ldap_uri[3], $ldap_uri[6], 'sub', $attributes);
-
- if (!$result) {
- continue;
- }
-
- foreach ($result->entries(true) as $entry_dn => $_entry) {
- $group_members[$entry_dn] = $entry_dn;
- $this->_debug("Found " . $entry_dn);
-
- if ($recurse) {
- // Nested group
- $group_group_members = $this->list_group_members($entry_dn, $_entry);
- if ($group_group_members) {
- $group_members = array_merge($group_members, $group_group_members);
- }
- }
- }
- }
-
- return array_filter($group_members);
- }
-
- /**
- * memberUrl attribute parser
- *
- * @param string $url URL string
- *
- * @return array URL elements
- */
- private function parse_memberurl($url)
- {
- preg_match('/(.*):\/\/(.*)\/(.*)\?(.*)\?(.*)\?(.*)/', $url, $matches);
- return $matches;
- }
-
- private function modify_entry_attributes($subject_dn, $attributes)
- {
- // Opportunities to set false include failed ldap commands.
- $result = true;
-
- if (is_array($attributes['rename']) && !empty($attributes['rename'])) {
- $olddn = $attributes['rename']['dn'];
- $newrdn = $attributes['rename']['new_rdn'];
-
- if (!empty($attributes['rename']['new_parent'])) {
- $new_parent = $attributes['rename']['new_parent'];
- }
- else {
- $new_parent = null;
- }
-
- $this->_debug("LDAP: C: Rename $olddn to $newrdn,$new_parent");
-
- $result = ldap_rename($this->conn, $olddn, $newrdn, $new_parent, true);
-
- if ($result) {
- $this->_debug("LDAP: S: OK");
-
- if ($new_parent) {
- $subject_dn = $newrdn . ',' . $new_parent;
- }
- else {
- $old_parent_dn_components = ldap_explode_dn($olddn, 0);
- unset($old_parent_dn_components["count"]);
- $old_rdn = array_shift($old_parent_dn_components);
- $old_parent_dn = implode(",", $old_parent_dn_components);
- $subject_dn = $newrdn . ',' . $old_parent_dn;
- }
- }
- else {
- $this->_debug("LDAP: S: " . ldap_error($this->conn));
- $this->_warning("LDAP: Failed to rename $olddn to $newrdn,$new_parent");
- return false;
- }
- }
-
- if (is_array($attributes['replace']) && !empty($attributes['replace'])) {
- $this->_debug("LDAP: C: Mod-Replace $subject_dn: " . json_encode($attributes['replace']));
-
- $result = ldap_mod_replace($this->conn, $subject_dn, $attributes['replace']);
-
- if ($result) {
- $this->_debug("LDAP: S: OK");
- }
- else {
- $this->_debug("LDAP: S: " . ldap_error($this->conn));
- $this->_warning("LDAP: Failed to replace attributes on $subject_dn: " . json_encode($attributes['replace']));
- return false;
- }
- }
-
- if (is_array($attributes['del']) && !empty($attributes['del'])) {
- $this->_debug("LDAP: C: Mod-Delete $subject_dn: " . json_encode($attributes['del']));
-
- $result = ldap_mod_del($this->conn, $subject_dn, $attributes['del']);
-
- if ($result) {
- $this->_debug("LDAP: S: OK");
- }
- else {
- $this->_debug("LDAP: S: " . ldap_error($this->conn));
- $this->_warning("LDAP: Failed to delete attributes on $subject_dn: " . json_encode($attributes['del']));
- return false;
- }
- }
-
- if (is_array($attributes['add']) && !empty($attributes['add'])) {
- $this->_debug("LDAP: C: Mod-Add $subject_dn: " . json_encode($attributes['add']));
-
- $result = ldap_mod_add($this->conn, $subject_dn, $attributes['add']);
-
- if ($result) {
- $this->_debug("LDAP: S: OK");
- }
- else {
- $this->_debug("LDAP: S: " . ldap_error($this->conn));
- $this->_warning("LDAP: Failed to add attributes on $subject_dn: " . json_encode($attributes['add']));
- return false;
- }
- }
-
- return true;
- }
-
- private function parse_attribute_level_rights($attribute_value)
- {
- $attribute_value = str_replace(", ", ",", $attribute_value);
- $attribute_values = explode(",", $attribute_value);
- $attribute_value = array();
-
- foreach ($attribute_values as $access_right) {
- $access_right_components = explode(":", $access_right);
- $access_attribute = strtolower(array_shift($access_right_components));
- $access_value = array_shift($access_right_components);
-
- $attribute_value[$access_attribute] = array();
-
- for ($i = 0; $i < strlen($access_value); $i++) {
- $method = $this->attribute_level_rights_map[substr($access_value, $i, 1)];
-
- if (!in_array($method, $attribute_value[$access_attribute])) {
- $attribute_value[$access_attribute][] = $method;
- }
- }
- }
-
- return $attribute_value;
- }
-
- private function parse_entry_level_rights($attribute_value)
- {
- $_attribute_value = array();
-
- for ($i = 0; $i < strlen($attribute_value); $i++) {
- $method = $this->entry_level_rights_map[substr($attribute_value, $i, 1)];
-
- if (!in_array($method, $_attribute_value)) {
- $_attribute_value[] = $method;
- }
- }
-
- return $_attribute_value;
- }
-
- private function supported_controls()
- {
- if (!empty($this->supported_controls)) {
- return $this->supported_controls;
- }
-
- $this->_info("Obtaining supported controls");
-
- if ($result = $this->search('', '(objectclass=*)', 'base', array('supportedcontrol'))) {
- $result = $result->entries(true);
- $control = $result['']['supportedcontrol'];
- }
- else {
- $control = array();
- }
-
- $this->_info("Obtained " . count($control) . " supported controls");
- $this->supported_controls = $control;
-
- return $control;
- }
-
- protected function _alert()
- {
- $this->__log(LOG_ALERT, func_get_args());
- }
-
- protected function _critical()
- {
- $this->__log(LOG_CRIT, func_get_args());
- }
-
- protected function _debug()
- {
- $this->__log(LOG_DEBUG, func_get_args());
- }
-
- protected function _emergency()
- {
- $this->__log(LOG_EMERG, func_get_args());
- }
-
- protected function _error()
- {
- $this->__log(LOG_ERR, func_get_args());
- }
-
- protected function _info()
- {
- $this->__log(LOG_INFO, func_get_args());
- }
-
- protected function _notice()
- {
- $this->__log(LOG_NOTICE, func_get_args());
- }
-
- protected function _warning()
- {
- $this->__log(LOG_WARNING, func_get_args());
- }
-
- /**
- * Log a message.
- */
- private function __log($level, $args)
- {
- $msg = array();
-
- foreach ($args as $arg) {
- $msg[] = !is_string($arg) ? var_export($arg, true) : $arg;
- }
-
- if (!empty($this->_log_hook)) {
- call_user_func_array($this->_log_hook, array($level, $msg));
- return;
- }
-
- if ($this->debug_level > 0) {
- syslog($level, implode("\n", $msg));
- }
- }
-
- /**
- * Add BER sequence with correct length and the given identifier
- */
- private static function _ber_addseq($str, $identifier)
- {
- $len = dechex(strlen($str)/2);
- if (strlen($len) % 2 != 0) {
- $len = '0'.$len;
- }
-
- return $identifier . $len . $str;
- }
-
- /**
- * Returns BER encoded integer value in hex format
- */
- private static function _ber_encode_int($offset)
- {
- $val = dechex($offset);
- $prefix = '';
-
- // check if bit 8 of high byte is 1
- if (preg_match('/^[89abcdef]/', $val)) {
- $prefix = '00';
- }
-
- if (strlen($val)%2 != 0) {
- $prefix .= '0';
- }
-
- return $prefix . $val;
- }
-
- /**
- * Quotes attribute value string
- *
- * @param string $str Attribute value
- * @param bool $dn True if the attribute is a DN
- *
- * @return string Quoted string
- */
- public static function quote_string($str, $is_dn = false)
- {
- // take firt entry if array given
- if (is_array($str)) {
- $str = reset($str);
- }
-
- if ($is_dn) {
- $replace = array(
- ',' => '\2c',
- '=' => '\3d',
- '+' => '\2b',
- '<' => '\3c',
- '>' => '\3e',
- ';' => '\3b',
- "\\"=> '\5c',
- '"' => '\22',
- '#' => '\23'
- );
- }
- else {
- $replace = array(
- '*' => '\2a',
- '(' => '\28',
- ')' => '\29',
- "\\" => '\5c',
- '/' => '\2f'
- );
- }
-
- return strtr($str, $replace);
- }
-
- /**
- * create ber encoding for sort control
- *
- * @param array List of cols to sort by
- * @return string BER encoded option value
- */
- private static function _sort_ber_encode($sortcols)
- {
- $str = '';
- foreach (array_reverse((array)$sortcols) as $col) {
- $ber_val = self::_string2hex($col);
-
- // 30 = ber sequence with a length of octet value
- // 04 = octet string with a length of the ascii value
- $oct = self::_ber_addseq($ber_val, '04');
- $str = self::_ber_addseq($oct, '30') . $str;
- }
-
- // now tack on sequence identifier and length
- $str = self::_ber_addseq($str, '30');
-
- return pack('H'.strlen($str), $str);
- }
-
- /**
- * Returns ascii string encoded in hex
- */
- private static function _string2hex($str)
- {
- $hex = '';
- for ($i=0; $i < strlen($str); $i++)
- $hex .= dechex(ord($str[$i]));
-
- return $hex;
- }
-
- /**
- * Generate BER encoded string for Virtual List View option
- *
- * @param integer List offset (first record)
- * @param integer Records per page
- * @return string BER encoded option value
- */
- private static function _vlv_ber_encode($offset, $rpp, $search = '')
- {
- // This string is ber-encoded, php will prefix this value with:
- // 04 (octet string) and 10 (length of 16 bytes)
- // the code behind this string is broken down as follows:
- // 30 = ber sequence with a length of 0e (14) bytes following
- // 02 = type integer (in two's complement form) with 2 bytes following (beforeCount): 01 00 (ie 0)
- // 02 = type integer (in two's complement form) with 2 bytes following (afterCount): 01 18 (ie 25-1=24)
- // a0 = type context-specific/constructed with a length of 06 (6) bytes following
- // 02 = type integer with 2 bytes following (offset): 01 01 (ie 1)
- // 02 = type integer with 2 bytes following (contentCount): 01 00
-
- // whith a search string present:
- // 81 = type context-specific/constructed with a length of 04 (4) bytes following (the length will change here)
- // 81 indicates a user string is present where as a a0 indicates just a offset search
- // 81 = type context-specific/constructed with a length of 06 (6) bytes following
-
- // the following info was taken from the ISO/IEC 8825-1:2003 x.690 standard re: the
- // encoding of integer values (note: these values are in
- // two-complement form so since offset will never be negative bit 8 of the
- // leftmost octet should never by set to 1):
- // 8.3.2: If the contents octets of an integer value encoding consist
- // of more than one octet, then the bits of the first octet (rightmost) and bit 8
- // of the second (to the left of first octet) octet:
- // a) shall not all be ones; and
- // b) shall not all be zero
-
- if ($search) {
- $search = preg_replace('/[^-[:alpha:] ,.()0-9]+/', '', $search);
- $ber_val = self::_string2hex($search);
- $str = self::_ber_addseq($ber_val, '81');
- }
- else {
- // construct the string from right to left
- $str = "020100"; # contentCount
-
- // returns encoded integer value in hex format
- $ber_val = self::_ber_encode_int($offset);
-
- // calculate octet length of $ber_val
- $str = self::_ber_addseq($ber_val, '02') . $str;
-
- // now compute length over $str
- $str = self::_ber_addseq($str, 'a0');
- }
-
- // now tack on records per page
- $str = "020100" . self::_ber_addseq(self::_ber_encode_int($rpp-1), '02') . $str;
-
- // now tack on sequence identifier and length
- $str = self::_ber_addseq($str, '30');
-
- return pack('H'.strlen($str), $str);
- }
-
- private function _fuzzy_search_prefix()
- {
- switch ($this->config_get("fuzzy_search", 2)) {
- case 2:
- return "*";
- break;
- case 1:
- case 0:
- default:
- return "";
- break;
- }
- }
-
- private function _fuzzy_search_suffix()
- {
- switch ($this->config_get("fuzzy_search", 2)) {
- case 2:
- return "*";
- break;
- case 1:
- return "*";
- case 0:
- default:
- return "";
- break;
- }
- }
-
- /**
- * Return the search string value to be used in VLV controls
- */
- private function _vlv_search($sort, $search)
- {
- if (!empty($this->additional_filter)) {
- $this->_debug("Not setting a VLV search filter because we already have a filter");
- return;
- }
-
- if (empty($search)) {
- return;
- }
-
- $search_suffix = $this->_fuzzy_search_suffix();
-
- foreach ($search as $attr => $value) {
- if (!in_array(strtolower($attr), $sort)) {
- $this->_debug("Cannot use VLV search using attribute not indexed: $attr (not in " . var_export($sort, true) . ")");
- return;
- }
- else {
- return $value . $search_suffix;
- }
- }
- }
-
- /**
- * Set server controls for Virtual List View (paginated listing)
- */
- private function _vlv_set_controls($sort, $list_page, $page_size, $search = null)
- {
- $sort_ctrl = array(
- 'oid' => "1.2.840.113556.1.4.473",
- 'value' => self::_sort_ber_encode($sort)
- );
-
- if (!empty($search)) {
- $this->_debug("_vlv_set_controls to include search: " . var_export($search, true));
- }
-
- $vlv_ctrl = array(
- 'oid' => "2.16.840.1.113730.3.4.9",
- 'value' => self::_vlv_ber_encode(
- $offset = ($list_page-1) * $page_size + 1,
- $page_size,
- $search
- ),
- 'iscritical' => true
- );
-
- $this->_debug("C: set controls sort=" . join(' ', unpack('H'.(strlen($sort_ctrl['value'])*2), $sort_ctrl['value']))
- . " (" . implode(',', (array) $sort) . ");"
- . " vlv=" . join(' ', (unpack('H'.(strlen($vlv_ctrl['value'])*2), $vlv_ctrl['value']))) . " ($offset/$page_size)");
-
- if (!ldap_set_option($this->conn, LDAP_OPT_SERVER_CONTROLS, array($sort_ctrl, $vlv_ctrl))) {
- $this->_debug("S: ".ldap_error($this->conn));
- $this->set_error(self::ERROR_SEARCH, 'vlvnotsupported');
-
- return false;
- }
-
- return true;
- }
-
-}
diff --git a/program/lib/Net/LDAP3/Result.php b/program/lib/Net/LDAP3/Result.php
deleted file mode 100644
index 0759df087..000000000
--- a/program/lib/Net/LDAP3/Result.php
+++ /dev/null
@@ -1,152 +0,0 @@
-<?php
-
-/*
- +-----------------------------------------------------------------------+
- | Net/LDAP3/Result.php |
- | |
- | Based on code created by the Roundcube Webmail team. |
- | |
- | Copyright (C) 2006-2014, The Roundcube Dev Team |
- | Copyright (C) 2012-2014, Kolab Systems AG |
- | |
- | Licensed under the GNU General Public License version 3 or |
- | any later version with exceptions for plugins. |
- | See the README file for a full license statement. |
- | |
- | PURPOSE: |
- | Provide advanced functionality for accessing LDAP directories |
- | |
- +-----------------------------------------------------------------------+
- | Authors: Thomas Bruederli <roundcube@gmail.com> |
- | Jeroen van Meeuwen <vanmeeuwen@kolabsys.com> |
- +-----------------------------------------------------------------------+
-*/
-
-/**
- * Model class representing an LDAP search result
- *
- * @package LDAP
- */
-class Net_LDAP3_Result implements Iterator
-{
- protected $conn;
- protected $base_dn;
- protected $filter;
- protected $scope;
-
- private $count;
- private $current;
- private $iteratorkey = 0;
-
- /**
- * Default constructor
- *
- * @param resource $conn LDAP link identifier
- * @param string $base_dn Base DN used to get this result
- * @param string $filter Filter query used to get this result
- * @param string $scope Scope of the result
- * @param resource $result LDAP result entry identifier
- */
- function __construct($conn, $base_dn, $filter, $scope, $result)
- {
- $this->conn = $conn;
- $this->base_dn = $base_dn;
- $this->filter = $filter;
- $this->scope = $scope;
- $this->result = $result;
- }
-
- public function get($property, $default = null)
- {
- if (isset($this->$property)) {
- return $this->$property;
- } else {
- return $default;
- }
- }
-
- public function set($property, $value)
- {
- $this->$property = $value;
- }
-
- /**
- * Wrapper for ldap_sort()
- */
- public function sort($attr)
- {
- return ldap_sort($this->conn, $this->result, $attr);
- }
-
- /**
- * Get entries count
- */
- public function count()
- {
- if (!isset($this->count)) {
- $this->count = ldap_count_entries($this->conn, $this->result);
- }
-
- return $this->count;
- }
-
- /**
- * Wrapper for ldap_get_entries()
- *
- * @param bool $normalize Optionally normalize the entries to a list of hash arrays
- *
- * @return array List of LDAP entries
- */
- public function entries($normalize = false)
- {
- $entries = ldap_get_entries($this->conn, $this->result);
-
- if ($normalize) {
- return Net_LDAP3::normalize_result($entries);
- }
-
- return $entries;
- }
-
- /**
- * Wrapper for ldap_get_dn() using the current entry pointer
- */
- public function get_dn()
- {
- return $this->current ? ldap_get_dn($this->conn, $this->current) : null;
- }
-
-
- /*** Implement PHP 5 Iterator interface to make foreach work ***/
-
- function current()
- {
- $attrib = ldap_get_attributes($this->conn, $this->current);
- $attrib['dn'] = ldap_get_dn($this->conn, $this->current);
-
- return $attrib;
- }
-
- function key()
- {
- return $this->iteratorkey;
- }
-
- function rewind()
- {
- $this->iteratorkey = 0;
- $this->current = ldap_first_entry($this->conn, $this->result);
- }
-
- function next()
- {
- $this->iteratorkey++;
- $this->current = ldap_next_entry($this->conn, $this->current);
- }
-
- function valid()
- {
- return (bool)$this->current;
- }
-
-}
diff --git a/program/lib/Net/SMTP.php b/program/lib/Net/SMTP.php
deleted file mode 100644
index 2c1ef5c55..000000000
--- a/program/lib/Net/SMTP.php
+++ /dev/null
@@ -1,1338 +0,0 @@
-<?php
-/* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */
-// +----------------------------------------------------------------------+
-// | PHP Version 4 |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2003 The PHP Group |
-// +----------------------------------------------------------------------+
-// | This source file is subject to version 2.02 of the PHP license, |
-// | that is bundled with this package in the file LICENSE, and is |
-// | available at through the world-wide-web at |
-// | http://www.php.net/license/2_02.txt. |
-// | If you did not receive a copy of the PHP license and are unable to |
-// | obtain it through the world-wide-web, please send a note to |
-// | license@php.net so we can mail you a copy immediately. |
-// +----------------------------------------------------------------------+
-// | Authors: Chuck Hagenbuch <chuck@horde.org> |
-// | Jon Parise <jon@php.net> |
-// | Damian Alejandro Fernandez Sosa <damlists@cnba.uba.ar> |
-// +----------------------------------------------------------------------+
-
-require_once 'PEAR.php';
-require_once 'Net/Socket.php';
-
-/**
- * Provides an implementation of the SMTP protocol using PEAR's
- * Net_Socket:: class.
- *
- * @package Net_SMTP
- * @author Chuck Hagenbuch <chuck@horde.org>
- * @author Jon Parise <jon@php.net>
- * @author Damian Alejandro Fernandez Sosa <damlists@cnba.uba.ar>
- *
- * @example basic.php A basic implementation of the Net_SMTP package.
- */
-class Net_SMTP
-{
- /**
- * The server to connect to.
- * @var string
- * @access public
- */
- var $host = 'localhost';
-
- /**
- * The port to connect to.
- * @var int
- * @access public
- */
- var $port = 25;
-
- /**
- * The value to give when sending EHLO or HELO.
- * @var string
- * @access public
- */
- var $localhost = 'localhost';
-
- /**
- * List of supported authentication methods, in preferential order.
- * @var array
- * @access public
- */
- var $auth_methods = array();
-
- /**
- * Use SMTP command pipelining (specified in RFC 2920) if the SMTP
- * server supports it.
- *
- * When pipeling is enabled, rcptTo(), mailFrom(), sendFrom(),
- * somlFrom() and samlFrom() do not wait for a response from the
- * SMTP server but return immediately.
- *
- * @var bool
- * @access public
- */
- var $pipelining = false;
-
- /**
- * Number of pipelined commands.
- * @var int
- * @access private
- */
- var $_pipelined_commands = 0;
-
- /**
- * Should debugging output be enabled?
- * @var boolean
- * @access private
- */
- var $_debug = false;
-
- /**
- * Debug output handler.
- * @var callback
- * @access private
- */
- var $_debug_handler = null;
-
- /**
- * The socket resource being used to connect to the SMTP server.
- * @var resource
- * @access private
- */
- var $_socket = null;
-
- /**
- * Array of socket options that will be passed to Net_Socket::connect().
- * @see stream_context_create()
- * @var array
- * @access private
- */
- var $_socket_options = null;
-
- /**
- * The socket I/O timeout value in seconds.
- * @var int
- * @access private
- */
- var $_timeout = 0;
-
- /**
- * The most recent server response code.
- * @var int
- * @access private
- */
- var $_code = -1;
-
- /**
- * The most recent server response arguments.
- * @var array
- * @access private
- */
- var $_arguments = array();
-
- /**
- * Stores the SMTP server's greeting string.
- * @var string
- * @access private
- */
- var $_greeting = null;
-
- /**
- * Stores detected features of the SMTP server.
- * @var array
- * @access private
- */
- var $_esmtp = array();
-
- /**
- * Instantiates a new Net_SMTP object, overriding any defaults
- * with parameters that are passed in.
- *
- * If you have SSL support in PHP, you can connect to a server
- * over SSL using an 'ssl://' prefix:
- *
- * // 465 is a common smtps port.
- * $smtp = new Net_SMTP('ssl://mail.host.com', 465);
- * $smtp->connect();
- *
- * @param string $host The server to connect to.
- * @param integer $port The port to connect to.
- * @param string $localhost The value to give when sending EHLO or HELO.
- * @param boolean $pipeling Use SMTP command pipelining
- * @param integer $timeout Socket I/O timeout in seconds.
- * @param array $socket_options Socket stream_context_create() options.
- *
- * @access public
- * @since 1.0
- */
- function Net_SMTP($host = null, $port = null, $localhost = null,
- $pipelining = false, $timeout = 0, $socket_options = null)
- {
- if (isset($host)) {
- $this->host = $host;
- }
- if (isset($port)) {
- $this->port = $port;
- }
- if (isset($localhost)) {
- $this->localhost = $localhost;
- }
- $this->pipelining = $pipelining;
-
- $this->_socket = new Net_Socket();
- $this->_socket_options = $socket_options;
- $this->_timeout = $timeout;
-
- /* Include the Auth_SASL package. If the package is available, we
- * enable the authentication methods that depend upon it. */
- if (@include_once 'Auth/SASL.php') {
- $this->setAuthMethod('CRAM-MD5', array($this, '_authCram_MD5'));
- $this->setAuthMethod('DIGEST-MD5', array($this, '_authDigest_MD5'));
- }
-
- /* These standard authentication methods are always available. */
- $this->setAuthMethod('LOGIN', array($this, '_authLogin'), false);
- $this->setAuthMethod('PLAIN', array($this, '_authPlain'), false);
- }
-
- /**
- * Set the socket I/O timeout value in seconds plus microseconds.
- *
- * @param integer $seconds Timeout value in seconds.
- * @param integer $microseconds Additional value in microseconds.
- *
- * @access public
- * @since 1.5.0
- */
- function setTimeout($seconds, $microseconds = 0) {
- return $this->_socket->setTimeout($seconds, $microseconds);
- }
-
- /**
- * Set the value of the debugging flag.
- *
- * @param boolean $debug New value for the debugging flag.
- *
- * @access public
- * @since 1.1.0
- */
- function setDebug($debug, $handler = null)
- {
- $this->_debug = $debug;
- $this->_debug_handler = $handler;
- }
-
- /**
- * Write the given debug text to the current debug output handler.
- *
- * @param string $message Debug mesage text.
- *
- * @access private
- * @since 1.3.3
- */
- function _debug($message)
- {
- if ($this->_debug) {
- if ($this->_debug_handler) {
- call_user_func_array($this->_debug_handler,
- array(&$this, $message));
- } else {
- echo "DEBUG: $message\n";
- }
- }
- }
-
- /**
- * Send the given string of data to the server.
- *
- * @param string $data The string of data to send.
- *
- * @return mixed The number of bytes that were actually written,
- * or a PEAR_Error object on failure.
- *
- * @access private
- * @since 1.1.0
- */
- function _send($data)
- {
- $this->_debug("Send: $data");
-
- $result = $this->_socket->write($data);
- if (!$result || PEAR::isError($result)) {
- $msg = ($result) ? $result->getMessage() : "unknown error";
- return PEAR::raiseError("Failed to write to socket: $msg",
- null, PEAR_ERROR_RETURN);
- }
-
- return $result;
- }
-
- /**
- * Send a command to the server with an optional string of
- * arguments. A carriage return / linefeed (CRLF) sequence will
- * be appended to each command string before it is sent to the
- * SMTP server - an error will be thrown if the command string
- * already contains any newline characters. Use _send() for
- * commands that must contain newlines.
- *
- * @param string $command The SMTP command to send to the server.
- * @param string $args A string of optional arguments to append
- * to the command.
- *
- * @return mixed The result of the _send() call.
- *
- * @access private
- * @since 1.1.0
- */
- function _put($command, $args = '')
- {
- if (!empty($args)) {
- $command .= ' ' . $args;
- }
-
- if (strcspn($command, "\r\n") !== strlen($command)) {
- return PEAR::raiseError('Commands cannot contain newlines',
- null, PEAR_ERROR_RETURN);
- }
-
- return $this->_send($command . "\r\n");
- }
-
- /**
- * Read a reply from the SMTP server. The reply consists of a response
- * code and a response message.
- *
- * @param mixed $valid The set of valid response codes. These
- * may be specified as an array of integer
- * values or as a single integer value.
- * @param bool $later Do not parse the response now, but wait
- * until the last command in the pipelined
- * command group
- *
- * @return mixed True if the server returned a valid response code or
- * a PEAR_Error object is an error condition is reached.
- *
- * @access private
- * @since 1.1.0
- *
- * @see getResponse
- */
- function _parseResponse($valid, $later = false)
- {
- $this->_code = -1;
- $this->_arguments = array();
-
- if ($later) {
- $this->_pipelined_commands++;
- return true;
- }
-
- for ($i = 0; $i <= $this->_pipelined_commands; $i++) {
- while ($line = $this->_socket->readLine()) {
- $this->_debug("Recv: $line");
-
- /* If we receive an empty line, the connection was closed. */
- if (empty($line)) {
- $this->disconnect();
- return PEAR::raiseError('Connection was closed',
- null, PEAR_ERROR_RETURN);
- }
-
- /* Read the code and store the rest in the arguments array. */
- $code = substr($line, 0, 3);
- $this->_arguments[] = trim(substr($line, 4));
-
- /* Check the syntax of the response code. */
- if (is_numeric($code)) {
- $this->_code = (int)$code;
- } else {
- $this->_code = -1;
- break;
- }
-
- /* If this is not a multiline response, we're done. */
- if (substr($line, 3, 1) != '-') {
- break;
- }
- }
- }
-
- $this->_pipelined_commands = 0;
-
- /* Compare the server's response code with the valid code/codes. */
- if (is_int($valid) && ($this->_code === $valid)) {
- return true;
- } elseif (is_array($valid) && in_array($this->_code, $valid, true)) {
- return true;
- }
-
- return PEAR::raiseError('Invalid response code received from server',
- $this->_code, PEAR_ERROR_RETURN);
- }
-
- /**
- * Issue an SMTP command and verify its response.
- *
- * @param string $command The SMTP command string or data.
- * @param mixed $valid The set of valid response codes. These
- * may be specified as an array of integer
- * values or as a single integer value.
- *
- * @return mixed True on success or a PEAR_Error object on failure.
- *
- * @access public
- * @since 1.6.0
- */
- function command($command, $valid)
- {
- if (PEAR::isError($error = $this->_put($command))) {
- return $error;
- }
- if (PEAR::isError($error = $this->_parseResponse($valid))) {
- return $error;
- }
-
- return true;
- }
-
- /**
- * Return a 2-tuple containing the last response from the SMTP server.
- *
- * @return array A two-element array: the first element contains the
- * response code as an integer and the second element
- * contains the response's arguments as a string.
- *
- * @access public
- * @since 1.1.0
- */
- function getResponse()
- {
- return array($this->_code, join("\n", $this->_arguments));
- }
-
- /**
- * Return the SMTP server's greeting string.
- *
- * @return string A string containing the greeting string, or null if a
- * greeting has not been received.
- *
- * @access public
- * @since 1.3.3
- */
- function getGreeting()
- {
- return $this->_greeting;
- }
-
- /**
- * Attempt to connect to the SMTP server.
- *
- * @param int $timeout The timeout value (in seconds) for the
- * socket connection attempt.
- * @param bool $persistent Should a persistent socket connection
- * be used?
- *
- * @return mixed Returns a PEAR_Error with an error message on any
- * kind of failure, or true on success.
- * @access public
- * @since 1.0
- */
- function connect($timeout = null, $persistent = false)
- {
- $this->_greeting = null;
- $result = $this->_socket->connect($this->host, $this->port,
- $persistent, $timeout,
- $this->_socket_options);
- if (PEAR::isError($result)) {
- return PEAR::raiseError('Failed to connect socket: ' .
- $result->getMessage());
- }
-
- /*
- * Now that we're connected, reset the socket's timeout value for
- * future I/O operations. This allows us to have different socket
- * timeout values for the initial connection (our $timeout parameter)
- * and all other socket operations.
- */
- if ($this->_timeout > 0) {
- if (PEAR::isError($error = $this->setTimeout($this->_timeout))) {
- return $error;
- }
- }
-
- if (PEAR::isError($error = $this->_parseResponse(220))) {
- return $error;
- }
-
- /* Extract and store a copy of the server's greeting string. */
- list(, $this->_greeting) = $this->getResponse();
-
- if (PEAR::isError($error = $this->_negotiate())) {
- return $error;
- }
-
- return true;
- }
-
- /**
- * Attempt to disconnect from the SMTP server.
- *
- * @return mixed Returns a PEAR_Error with an error message on any
- * kind of failure, or true on success.
- * @access public
- * @since 1.0
- */
- function disconnect()
- {
- if (PEAR::isError($error = $this->_put('QUIT'))) {
- return $error;
- }
- if (PEAR::isError($error = $this->_parseResponse(221))) {
- return $error;
- }
- if (PEAR::isError($error = $this->_socket->disconnect())) {
- return PEAR::raiseError('Failed to disconnect socket: ' .
- $error->getMessage());
- }
-
- return true;
- }
-
- /**
- * Attempt to send the EHLO command and obtain a list of ESMTP
- * extensions available, and failing that just send HELO.
- *
- * @return mixed Returns a PEAR_Error with an error message on any
- * kind of failure, or true on success.
- *
- * @access private
- * @since 1.1.0
- */
- function _negotiate()
- {
- if (PEAR::isError($error = $this->_put('EHLO', $this->localhost))) {
- return $error;
- }
-
- if (PEAR::isError($this->_parseResponse(250))) {
- /* If we receive a 503 response, we're already authenticated. */
- if ($this->_code === 503) {
- return true;
- }
-
- /* If the EHLO failed, try the simpler HELO command. */
- if (PEAR::isError($error = $this->_put('HELO', $this->localhost))) {
- return $error;
- }
- if (PEAR::isError($this->_parseResponse(250))) {
- return PEAR::raiseError('HELO was not accepted: ', $this->_code,
- PEAR_ERROR_RETURN);
- }
-
- return true;
- }
-
- foreach ($this->_arguments as $argument) {
- $verb = strtok($argument, ' ');
- $arguments = substr($argument, strlen($verb) + 1,
- strlen($argument) - strlen($verb) - 1);
- $this->_esmtp[$verb] = $arguments;
- }
-
- if (!isset($this->_esmtp['PIPELINING'])) {
- $this->pipelining = false;
- }
-
- return true;
- }
-
- /**
- * Returns the name of the best authentication method that the server
- * has advertised.
- *
- * @return mixed Returns a string containing the name of the best
- * supported authentication method or a PEAR_Error object
- * if a failure condition is encountered.
- * @access private
- * @since 1.1.0
- */
- function _getBestAuthMethod()
- {
- $available_methods = explode(' ', $this->_esmtp['AUTH']);
-
- foreach ($this->auth_methods as $method => $callback) {
- if (in_array($method, $available_methods)) {
- return $method;
- }
- }
-
- return PEAR::raiseError('No supported authentication methods',
- null, PEAR_ERROR_RETURN);
- }
-
- /**
- * Attempt to do SMTP authentication.
- *
- * @param string The userid to authenticate as.
- * @param string The password to authenticate with.
- * @param string The requested authentication method. If none is
- * specified, the best supported method will be used.
- * @param bool Flag indicating whether or not TLS should be attempted.
- * @param string An optional authorization identifier. If specified, this
- * identifier will be used as the authorization proxy.
- *
- * @return mixed Returns a PEAR_Error with an error message on any
- * kind of failure, or true on success.
- * @access public
- * @since 1.0
- */
- function auth($uid, $pwd , $method = '', $tls = true, $authz = '')
- {
- /* We can only attempt a TLS connection if one has been requested,
- * we're running PHP 5.1.0 or later, have access to the OpenSSL
- * extension, are connected to an SMTP server which supports the
- * STARTTLS extension, and aren't already connected over a secure
- * (SSL) socket connection. */
- if ($tls && version_compare(PHP_VERSION, '5.1.0', '>=') &&
- extension_loaded('openssl') && isset($this->_esmtp['STARTTLS']) &&
- strncasecmp($this->host, 'ssl://', 6) !== 0) {
- /* Start the TLS connection attempt. */
- if (PEAR::isError($result = $this->_put('STARTTLS'))) {
- return $result;
- }
- if (PEAR::isError($result = $this->_parseResponse(220))) {
- return $result;
- }
- if (PEAR::isError($result = $this->_socket->enableCrypto(true, STREAM_CRYPTO_METHOD_TLS_CLIENT))) {
- return $result;
- } elseif ($result !== true) {
- return PEAR::raiseError('STARTTLS failed');
- }
-
- /* Send EHLO again to recieve the AUTH string from the
- * SMTP server. */
- $this->_negotiate();
- }
-
- if (empty($this->_esmtp['AUTH'])) {
- return PEAR::raiseError('SMTP server does not support authentication');
- }
-
- /* If no method has been specified, get the name of the best
- * supported method advertised by the SMTP server. */
- if (empty($method)) {
- if (PEAR::isError($method = $this->_getBestAuthMethod())) {
- /* Return the PEAR_Error object from _getBestAuthMethod(). */
- return $method;
- }
- } else {
- $method = strtoupper($method);
- if (!array_key_exists($method, $this->auth_methods)) {
- return PEAR::raiseError("$method is not a supported authentication method");
- }
- }
-
- if (!isset($this->auth_methods[$method])) {
- return PEAR::raiseError("$method is not a supported authentication method");
- }
-
- if (!is_callable($this->auth_methods[$method], false)) {
- return PEAR::raiseError("$method authentication method cannot be called");
- }
-
- if (is_array($this->auth_methods[$method])) {
- list($object, $method) = $this->auth_methods[$method];
- $result = $object->{$method}($uid, $pwd, $authz, $this);
- } else {
- $func = $this->auth_methods[$method];
- $result = $func($uid, $pwd, $authz, $this);
- }
-
- /* If an error was encountered, return the PEAR_Error object. */
- if (PEAR::isError($result)) {
- return $result;
- }
-
- return true;
- }
-
- /**
- * Add a new authentication method.
- *
- * @param string The authentication method name (e.g. 'PLAIN')
- * @param mixed The authentication callback (given as the name of a
- * function or as an (object, method name) array).
- * @param bool Should the new method be prepended to the list of
- * available methods? This is the default behavior,
- * giving the new method the highest priority.
- *
- * @return mixed True on success or a PEAR_Error object on failure.
- *
- * @access public
- * @since 1.6.0
- */
- function setAuthMethod($name, $callback, $prepend = true)
- {
- if (!is_string($name)) {
- return PEAR::raiseError('Method name is not a string');
- }
-
- if (!is_string($callback) && !is_array($callback)) {
- return PEAR::raiseError('Method callback must be string or array');
- }
-
- if (is_array($callback)) {
- if (!is_object($callback[0]) || !is_string($callback[1]))
- return PEAR::raiseError('Bad mMethod callback array');
- }
-
- if ($prepend) {
- $this->auth_methods = array_merge(array($name => $callback),
- $this->auth_methods);
- } else {
- $this->auth_methods[$name] = $callback;
- }
-
- return true;
- }
-
- /**
- * Authenticates the user using the DIGEST-MD5 method.
- *
- * @param string The userid to authenticate as.
- * @param string The password to authenticate with.
- * @param string The optional authorization proxy identifier.
- *
- * @return mixed Returns a PEAR_Error with an error message on any
- * kind of failure, or true on success.
- * @access private
- * @since 1.1.0
- */
- function _authDigest_MD5($uid, $pwd, $authz = '')
- {
- if (PEAR::isError($error = $this->_put('AUTH', 'DIGEST-MD5'))) {
- return $error;
- }
- /* 334: Continue authentication request */
- if (PEAR::isError($error = $this->_parseResponse(334))) {
- /* 503: Error: already authenticated */
- if ($this->_code === 503) {
- return true;
- }
- return $error;
- }
-
- $challenge = base64_decode($this->_arguments[0]);
- $digest = &Auth_SASL::factory('digest-md5');
- $auth_str = base64_encode($digest->getResponse($uid, $pwd, $challenge,
- $this->host, "smtp",
- $authz));
-
- if (PEAR::isError($error = $this->_put($auth_str))) {
- return $error;
- }
- /* 334: Continue authentication request */
- if (PEAR::isError($error = $this->_parseResponse(334))) {
- return $error;
- }
-
- /* We don't use the protocol's third step because SMTP doesn't
- * allow subsequent authentication, so we just silently ignore
- * it. */
- if (PEAR::isError($error = $this->_put(''))) {
- return $error;
- }
- /* 235: Authentication successful */
- if (PEAR::isError($error = $this->_parseResponse(235))) {
- return $error;
- }
- }
-
- /**
- * Authenticates the user using the CRAM-MD5 method.
- *
- * @param string The userid to authenticate as.
- * @param string The password to authenticate with.
- * @param string The optional authorization proxy identifier.
- *
- * @return mixed Returns a PEAR_Error with an error message on any
- * kind of failure, or true on success.
- * @access private
- * @since 1.1.0
- */
- function _authCRAM_MD5($uid, $pwd, $authz = '')
- {
- if (PEAR::isError($error = $this->_put('AUTH', 'CRAM-MD5'))) {
- return $error;
- }
- /* 334: Continue authentication request */
- if (PEAR::isError($error = $this->_parseResponse(334))) {
- /* 503: Error: already authenticated */
- if ($this->_code === 503) {
- return true;
- }
- return $error;
- }
-
- $challenge = base64_decode($this->_arguments[0]);
- $cram = &Auth_SASL::factory('cram-md5');
- $auth_str = base64_encode($cram->getResponse($uid, $pwd, $challenge));
-
- if (PEAR::isError($error = $this->_put($auth_str))) {
- return $error;
- }
-
- /* 235: Authentication successful */
- if (PEAR::isError($error = $this->_parseResponse(235))) {
- return $error;
- }
- }
-
- /**
- * Authenticates the user using the LOGIN method.
- *
- * @param string The userid to authenticate as.
- * @param string The password to authenticate with.
- * @param string The optional authorization proxy identifier.
- *
- * @return mixed Returns a PEAR_Error with an error message on any
- * kind of failure, or true on success.
- * @access private
- * @since 1.1.0
- */
- function _authLogin($uid, $pwd, $authz = '')
- {
- if (PEAR::isError($error = $this->_put('AUTH', 'LOGIN'))) {
- return $error;
- }
- /* 334: Continue authentication request */
- if (PEAR::isError($error = $this->_parseResponse(334))) {
- /* 503: Error: already authenticated */
- if ($this->_code === 503) {
- return true;
- }
- return $error;
- }
-
- if (PEAR::isError($error = $this->_put(base64_encode($uid)))) {
- return $error;
- }
- /* 334: Continue authentication request */
- if (PEAR::isError($error = $this->_parseResponse(334))) {
- return $error;
- }
-
- if (PEAR::isError($error = $this->_put(base64_encode($pwd)))) {
- return $error;
- }
-
- /* 235: Authentication successful */
- if (PEAR::isError($error = $this->_parseResponse(235))) {
- return $error;
- }
-
- return true;
- }
-
- /**
- * Authenticates the user using the PLAIN method.
- *
- * @param string The userid to authenticate as.
- * @param string The password to authenticate with.
- * @param string The optional authorization proxy identifier.
- *
- * @return mixed Returns a PEAR_Error with an error message on any
- * kind of failure, or true on success.
- * @access private
- * @since 1.1.0
- */
- function _authPlain($uid, $pwd, $authz = '')
- {
- if (PEAR::isError($error = $this->_put('AUTH', 'PLAIN'))) {
- return $error;
- }
- /* 334: Continue authentication request */
- if (PEAR::isError($error = $this->_parseResponse(334))) {
- /* 503: Error: already authenticated */
- if ($this->_code === 503) {
- return true;
- }
- return $error;
- }
-
- $auth_str = base64_encode($authz . chr(0) . $uid . chr(0) . $pwd);
-
- if (PEAR::isError($error = $this->_put($auth_str))) {
- return $error;
- }
-
- /* 235: Authentication successful */
- if (PEAR::isError($error = $this->_parseResponse(235))) {
- return $error;
- }
-
- return true;
- }
-
- /**
- * Send the HELO command.
- *
- * @param string The domain name to say we are.
- *
- * @return mixed Returns a PEAR_Error with an error message on any
- * kind of failure, or true on success.
- * @access public
- * @since 1.0
- */
- function helo($domain)
- {
- if (PEAR::isError($error = $this->_put('HELO', $domain))) {
- return $error;
- }
- if (PEAR::isError($error = $this->_parseResponse(250))) {
- return $error;
- }
-
- return true;
- }
-
- /**
- * Return the list of SMTP service extensions advertised by the server.
- *
- * @return array The list of SMTP service extensions.
- * @access public
- * @since 1.3
- */
- function getServiceExtensions()
- {
- return $this->_esmtp;
- }
-
- /**
- * Send the MAIL FROM: command.
- *
- * @param string $sender The sender (reverse path) to set.
- * @param string $params String containing additional MAIL parameters,
- * such as the NOTIFY flags defined by RFC 1891
- * or the VERP protocol.
- *
- * If $params is an array, only the 'verp' option
- * is supported. If 'verp' is true, the XVERP
- * parameter is appended to the MAIL command. If
- * the 'verp' value is a string, the full
- * XVERP=value parameter is appended.
- *
- * @return mixed Returns a PEAR_Error with an error message on any
- * kind of failure, or true on success.
- * @access public
- * @since 1.0
- */
- function mailFrom($sender, $params = null)
- {
- $args = "FROM:<$sender>";
-
- /* Support the deprecated array form of $params. */
- if (is_array($params) && isset($params['verp'])) {
- /* XVERP */
- if ($params['verp'] === true) {
- $args .= ' XVERP';
-
- /* XVERP=something */
- } elseif (trim($params['verp'])) {
- $args .= ' XVERP=' . $params['verp'];
- }
- } elseif (is_string($params) && !empty($params)) {
- $args .= ' ' . $params;
- }
-
- if (PEAR::isError($error = $this->_put('MAIL', $args))) {
- return $error;
- }
- if (PEAR::isError($error = $this->_parseResponse(250, $this->pipelining))) {
- return $error;
- }
-
- return true;
- }
-
- /**
- * Send the RCPT TO: command.
- *
- * @param string $recipient The recipient (forward path) to add.
- * @param string $params String containing additional RCPT parameters,
- * such as the NOTIFY flags defined by RFC 1891.
- *
- * @return mixed Returns a PEAR_Error with an error message on any
- * kind of failure, or true on success.
- *
- * @access public
- * @since 1.0
- */
- function rcptTo($recipient, $params = null)
- {
- $args = "TO:<$recipient>";
- if (is_string($params)) {
- $args .= ' ' . $params;
- }
-
- if (PEAR::isError($error = $this->_put('RCPT', $args))) {
- return $error;
- }
- if (PEAR::isError($error = $this->_parseResponse(array(250, 251), $this->pipelining))) {
- return $error;
- }
-
- return true;
- }
-
- /**
- * Quote the data so that it meets SMTP standards.
- *
- * This is provided as a separate public function to facilitate
- * easier overloading for the cases where it is desirable to
- * customize the quoting behavior.
- *
- * @param string $data The message text to quote. The string must be passed
- * by reference, and the text will be modified in place.
- *
- * @access public
- * @since 1.2
- */
- function quotedata(&$data)
- {
- /* Because a single leading period (.) signifies an end to the
- * data, legitimate leading periods need to be "doubled" ('..'). */
- $data = preg_replace('/^\./m', '..', $data);
-
- /* Change Unix (\n) and Mac (\r) linefeeds into CRLF's (\r\n). */
- $data = preg_replace('/(?:\r\n|\n|\r(?!\n))/', "\r\n", $data);
- }
-
- /**
- * Send the DATA command.
- *
- * @param mixed $data The message data, either as a string or an open
- * file resource.
- * @param string $headers The message headers. If $headers is provided,
- * $data is assumed to contain only body data.
- *
- * @return mixed Returns a PEAR_Error with an error message on any
- * kind of failure, or true on success.
- * @access public
- * @since 1.0
- */
- function data($data, $headers = null)
- {
- /* Verify that $data is a supported type. */
- if (!is_string($data) && !is_resource($data)) {
- return PEAR::raiseError('Expected a string or file resource');
- }
-
- /* Start by considering the size of the optional headers string. We
- * also account for the addition 4 character "\r\n\r\n" separator
- * sequence. */
- $size = (is_null($headers)) ? 0 : strlen($headers) + 4;
-
- if (is_resource($data)) {
- $stat = fstat($data);
- if ($stat === false) {
- return PEAR::raiseError('Failed to get file size');
- }
- $size += $stat['size'];
- } else {
- $size += strlen($data);
- }
-
- /* RFC 1870, section 3, subsection 3 states "a value of zero indicates
- * that no fixed maximum message size is in force". Furthermore, it
- * says that if "the parameter is omitted no information is conveyed
- * about the server's fixed maximum message size". */
- $limit = (isset($this->_esmtp['SIZE'])) ? $this->_esmtp['SIZE'] : 0;
- if ($limit > 0 && $size >= $limit) {
- $this->disconnect();
- return PEAR::raiseError('Message size exceeds server limit');
- }
-
- /* Initiate the DATA command. */
- if (PEAR::isError($error = $this->_put('DATA'))) {
- return $error;
- }
- if (PEAR::isError($error = $this->_parseResponse(354))) {
- return $error;
- }
-
- /* If we have a separate headers string, send it first. */
- if (!is_null($headers)) {
- $this->quotedata($headers);
- if (PEAR::isError($result = $this->_send($headers . "\r\n\r\n"))) {
- return $result;
- }
- }
-
- /* Now we can send the message body data. */
- if (is_resource($data)) {
- /* Stream the contents of the file resource out over our socket
- * connection, line by line. Each line must be run through the
- * quoting routine. */
- while (strlen($line = fread($data, 8192)) > 0) {
- /* If the last character is an newline, we need to grab the
- * next character to check to see if it is a period. */
- while (!feof($data)) {
- $char = fread($data, 1);
- $line .= $char;
- if ($char != "\n") {
- break;
- }
- }
- $this->quotedata($line);
- if (PEAR::isError($result = $this->_send($line))) {
- return $result;
- }
- }
- } else {
- /*
- * Break up the data by sending one chunk (up to 512k) at a time.
- * This approach reduces our peak memory usage.
- */
- for ($offset = 0; $offset < $size;) {
- $end = $offset + 512000;
-
- /*
- * Ensure we don't read beyond our data size or span multiple
- * lines. quotedata() can't properly handle character data
- * that's split across two line break boundaries.
- */
- if ($end >= $size) {
- $end = $size;
- } else {
- for (; $end < $size; $end++) {
- if ($data[$end] != "\n") {
- break;
- }
- }
- }
-
- /* Extract our chunk and run it through the quoting routine. */
- $chunk = substr($data, $offset, $end - $offset);
- $this->quotedata($chunk);
-
- /* If we run into a problem along the way, abort. */
- if (PEAR::isError($result = $this->_send($chunk))) {
- return $result;
- }
-
- /* Advance the offset to the end of this chunk. */
- $offset = $end;
- }
- }
-
- /* Finally, send the DATA terminator sequence. */
- if (PEAR::isError($result = $this->_send("\r\n.\r\n"))) {
- return $result;
- }
-
- /* Verify that the data was successfully received by the server. */
- if (PEAR::isError($error = $this->_parseResponse(250, $this->pipelining))) {
- return $error;
- }
-
- return true;
- }
-
- /**
- * Send the SEND FROM: command.
- *
- * @param string The reverse path to send.
- *
- * @return mixed Returns a PEAR_Error with an error message on any
- * kind of failure, or true on success.
- * @access public
- * @since 1.2.6
- */
- function sendFrom($path)
- {
- if (PEAR::isError($error = $this->_put('SEND', "FROM:<$path>"))) {
- return $error;
- }
- if (PEAR::isError($error = $this->_parseResponse(250, $this->pipelining))) {
- return $error;
- }
-
- return true;
- }
-
- /**
- * Backwards-compatibility wrapper for sendFrom().
- *
- * @param string The reverse path to send.
- *
- * @return mixed Returns a PEAR_Error with an error message on any
- * kind of failure, or true on success.
- *
- * @access public
- * @since 1.0
- * @deprecated 1.2.6
- */
- function send_from($path)
- {
- return sendFrom($path);
- }
-
- /**
- * Send the SOML FROM: command.
- *
- * @param string The reverse path to send.
- *
- * @return mixed Returns a PEAR_Error with an error message on any
- * kind of failure, or true on success.
- * @access public
- * @since 1.2.6
- */
- function somlFrom($path)
- {
- if (PEAR::isError($error = $this->_put('SOML', "FROM:<$path>"))) {
- return $error;
- }
- if (PEAR::isError($error = $this->_parseResponse(250, $this->pipelining))) {
- return $error;
- }
-
- return true;
- }
-
- /**
- * Backwards-compatibility wrapper for somlFrom().
- *
- * @param string The reverse path to send.
- *
- * @return mixed Returns a PEAR_Error with an error message on any
- * kind of failure, or true on success.
- *
- * @access public
- * @since 1.0
- * @deprecated 1.2.6
- */
- function soml_from($path)
- {
- return somlFrom($path);
- }
-
- /**
- * Send the SAML FROM: command.
- *
- * @param string The reverse path to send.
- *
- * @return mixed Returns a PEAR_Error with an error message on any
- * kind of failure, or true on success.
- * @access public
- * @since 1.2.6
- */
- function samlFrom($path)
- {
- if (PEAR::isError($error = $this->_put('SAML', "FROM:<$path>"))) {
- return $error;
- }
- if (PEAR::isError($error = $this->_parseResponse(250, $this->pipelining))) {
- return $error;
- }
-
- return true;
- }
-
- /**
- * Backwards-compatibility wrapper for samlFrom().
- *
- * @param string The reverse path to send.
- *
- * @return mixed Returns a PEAR_Error with an error message on any
- * kind of failure, or true on success.
- *
- * @access public
- * @since 1.0
- * @deprecated 1.2.6
- */
- function saml_from($path)
- {
- return samlFrom($path);
- }
-
- /**
- * Send the RSET command.
- *
- * @return mixed Returns a PEAR_Error with an error message on any
- * kind of failure, or true on success.
- * @access public
- * @since 1.0
- */
- function rset()
- {
- if (PEAR::isError($error = $this->_put('RSET'))) {
- return $error;
- }
- if (PEAR::isError($error = $this->_parseResponse(250, $this->pipelining))) {
- return $error;
- }
-
- return true;
- }
-
- /**
- * Send the VRFY command.
- *
- * @param string The string to verify
- *
- * @return mixed Returns a PEAR_Error with an error message on any
- * kind of failure, or true on success.
- * @access public
- * @since 1.0
- */
- function vrfy($string)
- {
- /* Note: 251 is also a valid response code */
- if (PEAR::isError($error = $this->_put('VRFY', $string))) {
- return $error;
- }
- if (PEAR::isError($error = $this->_parseResponse(array(250, 252)))) {
- return $error;
- }
-
- return true;
- }
-
- /**
- * Send the NOOP command.
- *
- * @return mixed Returns a PEAR_Error with an error message on any
- * kind of failure, or true on success.
- * @access public
- * @since 1.0
- */
- function noop()
- {
- if (PEAR::isError($error = $this->_put('NOOP'))) {
- return $error;
- }
- if (PEAR::isError($error = $this->_parseResponse(250))) {
- return $error;
- }
-
- return true;
- }
-
- /**
- * Backwards-compatibility method. identifySender()'s functionality is
- * now handled internally.
- *
- * @return boolean This method always return true.
- *
- * @access public
- * @since 1.0
- */
- function identifySender()
- {
- return true;
- }
-
-}
diff --git a/program/lib/Net/Sieve.php b/program/lib/Net/Sieve.php
deleted file mode 100644
index 8ebdf0958..000000000
--- a/program/lib/Net/Sieve.php
+++ /dev/null
@@ -1,1274 +0,0 @@
-<?php
-/**
- * This file contains the Net_Sieve class.
- *
- * PHP version 4
- *
- * +-----------------------------------------------------------------------+
- * | All rights reserved. |
- * | |
- * | Redistribution and use in source and binary forms, with or without |
- * | modification, are permitted provided that the following conditions |
- * | are met: |
- * | |
- * | o Redistributions of source code must retain the above copyright |
- * | notice, this list of conditions and the following disclaimer. |
- * | o Redistributions in binary form must reproduce the above copyright |
- * | notice, this list of conditions and the following disclaimer in the |
- * | documentation and/or other materials provided with the distribution.|
- * | |
- * | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
- * | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
- * | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
- * | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
- * | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
- * | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
- * | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
- * | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
- * | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
- * | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
- * | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
- * +-----------------------------------------------------------------------+
- *
- * @category Networking
- * @package Net_Sieve
- * @author Richard Heyes <richard@phpguru.org>
- * @author Damian Fernandez Sosa <damlists@cnba.uba.ar>
- * @author Anish Mistry <amistry@am-productions.biz>
- * @author Jan Schneider <jan@horde.org>
- * @copyright 2002-2003 Richard Heyes
- * @copyright 2006-2008 Anish Mistry
- * @license http://www.opensource.org/licenses/bsd-license.php BSD
- * @version SVN: $Id$
- * @link http://pear.php.net/package/Net_Sieve
- */
-
-require_once 'PEAR.php';
-require_once 'Net/Socket.php';
-
-/**
- * TODO
- *
- * o supportsAuthMech()
- */
-
-/**
- * Disconnected state
- * @const NET_SIEVE_STATE_DISCONNECTED
- */
-define('NET_SIEVE_STATE_DISCONNECTED', 1, true);
-
-/**
- * Authorisation state
- * @const NET_SIEVE_STATE_AUTHORISATION
- */
-define('NET_SIEVE_STATE_AUTHORISATION', 2, true);
-
-/**
- * Transaction state
- * @const NET_SIEVE_STATE_TRANSACTION
- */
-define('NET_SIEVE_STATE_TRANSACTION', 3, true);
-
-
-/**
- * A class for talking to the timsieved server which comes with Cyrus IMAP.
- *
- * @category Networking
- * @package Net_Sieve
- * @author Richard Heyes <richard@phpguru.org>
- * @author Damian Fernandez Sosa <damlists@cnba.uba.ar>
- * @author Anish Mistry <amistry@am-productions.biz>
- * @author Jan Schneider <jan@horde.org>
- * @copyright 2002-2003 Richard Heyes
- * @copyright 2006-2008 Anish Mistry
- * @license http://www.opensource.org/licenses/bsd-license.php BSD
- * @version Release: 1.3.2
- * @link http://pear.php.net/package/Net_Sieve
- * @link http://tools.ietf.org/html/rfc5228 RFC 5228 (Sieve: An Email
- * Filtering Language)
- * @link http://tools.ietf.org/html/rfc5804 RFC 5804 A Protocol for
- * Remotely Managing Sieve Scripts
- */
-class Net_Sieve
-{
- /**
- * The authentication methods this class supports.
- *
- * Can be overwritten if having problems with certain methods.
- *
- * @var array
- */
- var $supportedAuthMethods = array('DIGEST-MD5', 'CRAM-MD5', 'EXTERNAL',
- 'PLAIN' , 'LOGIN');
-
- /**
- * SASL authentication methods that require Auth_SASL.
- *
- * @var array
- */
- var $supportedSASLAuthMethods = array('DIGEST-MD5', 'CRAM-MD5');
-
- /**
- * The socket handle.
- *
- * @var resource
- */
- var $_sock;
-
- /**
- * Parameters and connection information.
- *
- * @var array
- */
- var $_data;
-
- /**
- * Current state of the connection.
- *
- * One of the NET_SIEVE_STATE_* constants.
- *
- * @var integer
- */
- var $_state;
-
- /**
- * Constructor error.
- *
- * @var PEAR_Error
- */
- var $_error;
-
- /**
- * Whether to enable debugging.
- *
- * @var boolean
- */
- var $_debug = false;
-
- /**
- * Debug output handler.
- *
- * This has to be a valid callback.
- *
- * @var string|array
- */
- var $_debug_handler = null;
-
- /**
- * Whether to pick up an already established connection.
- *
- * @var boolean
- */
- var $_bypassAuth = false;
-
- /**
- * Whether to use TLS if available.
- *
- * @var boolean
- */
- var $_useTLS = true;
-
- /**
- * Additional options for stream_context_create().
- *
- * @var array
- */
- var $_options = null;
-
- /**
- * Maximum number of referral loops
- *
- * @var array
- */
- var $_maxReferralCount = 15;
-
- /**
- * Constructor.
- *
- * Sets up the object, connects to the server and logs in. Stores any
- * generated error in $this->_error, which can be retrieved using the
- * getError() method.
- *
- * @param string $user Login username.
- * @param string $pass Login password.
- * @param string $host Hostname of server.
- * @param string $port Port of server.
- * @param string $logintype Type of login to perform (see
- * $supportedAuthMethods).
- * @param string $euser Effective user. If authenticating as an
- * administrator, login as this user.
- * @param boolean $debug Whether to enable debugging (@see setDebug()).
- * @param string $bypassAuth Skip the authentication phase. Useful if the
- * socket is already open.
- * @param boolean $useTLS Use TLS if available.
- * @param array $options Additional options for
- * stream_context_create().
- * @param mixed $handler A callback handler for the debug output.
- */
- function Net_Sieve($user = null, $pass = null, $host = 'localhost',
- $port = 2000, $logintype = '', $euser = '',
- $debug = false, $bypassAuth = false, $useTLS = true,
- $options = null, $handler = null)
- {
- $this->_state = NET_SIEVE_STATE_DISCONNECTED;
- $this->_data['user'] = $user;
- $this->_data['pass'] = $pass;
- $this->_data['host'] = $host;
- $this->_data['port'] = $port;
- $this->_data['logintype'] = $logintype;
- $this->_data['euser'] = $euser;
- $this->_sock = new Net_Socket();
- $this->_bypassAuth = $bypassAuth;
- $this->_useTLS = $useTLS;
- $this->_options = $options;
- $this->setDebug($debug, $handler);
-
- /* Try to include the Auth_SASL package. If the package is not
- * available, we disable the authentication methods that depend upon
- * it. */
- if ((@include_once 'Auth/SASL.php') === false) {
- $this->_debug('Auth_SASL not present');
- foreach ($this->supportedSASLAuthMethods as $SASLMethod) {
- $pos = array_search($SASLMethod, $this->supportedAuthMethods);
- $this->_debug('Disabling method ' . $SASLMethod);
- unset($this->supportedAuthMethods[$pos]);
- }
- }
-
- if (strlen($user) && strlen($pass)) {
- $this->_error = $this->_handleConnectAndLogin();
- }
- }
-
- /**
- * Returns any error that may have been generated in the constructor.
- *
- * @return boolean|PEAR_Error False if no error, PEAR_Error otherwise.
- */
- function getError()
- {
- return PEAR::isError($this->_error) ? $this->_error : false;
- }
-
- /**
- * Sets the debug state and handler function.
- *
- * @param boolean $debug Whether to enable debugging.
- * @param string $handler A custom debug handler. Must be a valid callback.
- *
- * @return void
- */
- function setDebug($debug = true, $handler = null)
- {
- $this->_debug = $debug;
- $this->_debug_handler = $handler;
- }
-
- /**
- * Connects to the server and logs in.
- *
- * @return boolean True on success, PEAR_Error on failure.
- */
- function _handleConnectAndLogin()
- {
- if (PEAR::isError($res = $this->connect($this->_data['host'], $this->_data['port'], $this->_options, $this->_useTLS))) {
- return $res;
- }
- if ($this->_bypassAuth === false) {
- if (PEAR::isError($res = $this->login($this->_data['user'], $this->_data['pass'], $this->_data['logintype'], $this->_data['euser'], $this->_bypassAuth))) {
- return $res;
- }
- }
- return true;
- }
-
- /**
- * Handles connecting to the server and checks the response validity.
- *
- * @param string $host Hostname of server.
- * @param string $port Port of server.
- * @param array $options List of options to pass to
- * stream_context_create().
- * @param boolean $useTLS Use TLS if available.
- *
- * @return boolean True on success, PEAR_Error otherwise.
- */
- function connect($host, $port, $options = null, $useTLS = true)
- {
- $this->_data['host'] = $host;
- $this->_data['port'] = $port;
- $this->_useTLS = $useTLS;
- if (is_array($options)) {
- $this->_options = array_merge($this->_options, $options);
- }
-
- if (NET_SIEVE_STATE_DISCONNECTED != $this->_state) {
- return PEAR::raiseError('Not currently in DISCONNECTED state', 1);
- }
-
- if (PEAR::isError($res = $this->_sock->connect($host, $port, false, 5, $options))) {
- return $res;
- }
-
- if ($this->_bypassAuth) {
- $this->_state = NET_SIEVE_STATE_TRANSACTION;
- } else {
- $this->_state = NET_SIEVE_STATE_AUTHORISATION;
- if (PEAR::isError($res = $this->_doCmd())) {
- return $res;
- }
- }
-
- // Explicitly ask for the capabilities in case the connection is
- // picked up from an existing connection.
- if (PEAR::isError($res = $this->_cmdCapability())) {
- return PEAR::raiseError(
- 'Failed to connect, server said: ' . $res->getMessage(), 2
- );
- }
-
- // Check if we can enable TLS via STARTTLS.
- if ($useTLS && !empty($this->_capability['starttls'])
- && function_exists('stream_socket_enable_crypto')
- ) {
- if (PEAR::isError($res = $this->_startTLS())) {
- return $res;
- }
- }
-
- return true;
- }
-
- /**
- * Disconnect from the Sieve server.
- *
- * @param boolean $sendLogoutCMD Whether to send LOGOUT command before
- * disconnecting.
- *
- * @return boolean True on success, PEAR_Error otherwise.
- */
- function disconnect($sendLogoutCMD = true)
- {
- return $this->_cmdLogout($sendLogoutCMD);
- }
-
- /**
- * Logs into server.
- *
- * @param string $user Login username.
- * @param string $pass Login password.
- * @param string $logintype Type of login method to use.
- * @param string $euser Effective UID (perform on behalf of $euser).
- * @param boolean $bypassAuth Do not perform authentication.
- *
- * @return boolean True on success, PEAR_Error otherwise.
- */
- function login($user, $pass, $logintype = null, $euser = '', $bypassAuth = false)
- {
- $this->_data['user'] = $user;
- $this->_data['pass'] = $pass;
- $this->_data['logintype'] = $logintype;
- $this->_data['euser'] = $euser;
- $this->_bypassAuth = $bypassAuth;
-
- if (NET_SIEVE_STATE_AUTHORISATION != $this->_state) {
- return PEAR::raiseError('Not currently in AUTHORISATION state', 1);
- }
-
- if (!$bypassAuth ) {
- if (PEAR::isError($res = $this->_cmdAuthenticate($user, $pass, $logintype, $euser))) {
- return $res;
- }
- }
- $this->_state = NET_SIEVE_STATE_TRANSACTION;
-
- return true;
- }
-
- /**
- * Returns an indexed array of scripts currently on the server.
- *
- * @return array Indexed array of scriptnames.
- */
- function listScripts()
- {
- if (is_array($scripts = $this->_cmdListScripts())) {
- $this->_active = $scripts[1];
- return $scripts[0];
- } else {
- return $scripts;
- }
- }
-
- /**
- * Returns the active script.
- *
- * @return string The active scriptname.
- */
- function getActive()
- {
- if (!empty($this->_active)) {
- return $this->_active;
- }
- if (is_array($scripts = $this->_cmdListScripts())) {
- $this->_active = $scripts[1];
- return $scripts[1];
- }
- }
-
- /**
- * Sets the active script.
- *
- * @param string $scriptname The name of the script to be set as active.
- *
- * @return boolean True on success, PEAR_Error on failure.
- */
- function setActive($scriptname)
- {
- return $this->_cmdSetActive($scriptname);
- }
-
- /**
- * Retrieves a script.
- *
- * @param string $scriptname The name of the script to be retrieved.
- *
- * @return string The script on success, PEAR_Error on failure.
- */
- function getScript($scriptname)
- {
- return $this->_cmdGetScript($scriptname);
- }
-
- /**
- * Adds a script to the server.
- *
- * @param string $scriptname Name of the script.
- * @param string $script The script content.
- * @param boolean $makeactive Whether to make this the active script.
- *
- * @return boolean True on success, PEAR_Error on failure.
- */
- function installScript($scriptname, $script, $makeactive = false)
- {
- if (PEAR::isError($res = $this->_cmdPutScript($scriptname, $script))) {
- return $res;
- }
- if ($makeactive) {
- return $this->_cmdSetActive($scriptname);
- }
- return true;
- }
-
- /**
- * Removes a script from the server.
- *
- * @param string $scriptname Name of the script.
- *
- * @return boolean True on success, PEAR_Error on failure.
- */
- function removeScript($scriptname)
- {
- return $this->_cmdDeleteScript($scriptname);
- }
-
- /**
- * Checks if the server has space to store the script by the server.
- *
- * @param string $scriptname The name of the script to mark as active.
- * @param integer $size The size of the script.
- *
- * @return boolean|PEAR_Error True if there is space, PEAR_Error otherwise.
- *
- * @todo Rename to hasSpace()
- */
- function haveSpace($scriptname, $size)
- {
- if (NET_SIEVE_STATE_TRANSACTION != $this->_state) {
- return PEAR::raiseError('Not currently in TRANSACTION state', 1);
- }
-
- if (PEAR::isError($res = $this->_doCmd(sprintf('HAVESPACE %s %d', $this->_escape($scriptname), $size)))) {
- return $res;
- }
- return true;
- }
-
- /**
- * Returns the list of extensions the server supports.
- *
- * @return array List of extensions or PEAR_Error on failure.
- */
- function getExtensions()
- {
- if (NET_SIEVE_STATE_DISCONNECTED == $this->_state) {
- return PEAR::raiseError('Not currently connected', 7);
- }
- return $this->_capability['extensions'];
- }
-
- /**
- * Returns whether the server supports an extension.
- *
- * @param string $extension The extension to check.
- *
- * @return boolean Whether the extension is supported or PEAR_Error on
- * failure.
- */
- function hasExtension($extension)
- {
- if (NET_SIEVE_STATE_DISCONNECTED == $this->_state) {
- return PEAR::raiseError('Not currently connected', 7);
- }
-
- $extension = trim($this->_toUpper($extension));
- if (is_array($this->_capability['extensions'])) {
- foreach ($this->_capability['extensions'] as $ext) {
- if ($ext == $extension) {
- return true;
- }
- }
- }
-
- return false;
- }
-
- /**
- * Returns the list of authentication methods the server supports.
- *
- * @return array List of authentication methods or PEAR_Error on failure.
- */
- function getAuthMechs()
- {
- if (NET_SIEVE_STATE_DISCONNECTED == $this->_state) {
- return PEAR::raiseError('Not currently connected', 7);
- }
- return $this->_capability['sasl'];
- }
-
- /**
- * Returns whether the server supports an authentication method.
- *
- * @param string $method The method to check.
- *
- * @return boolean Whether the method is supported or PEAR_Error on
- * failure.
- */
- function hasAuthMech($method)
- {
- if (NET_SIEVE_STATE_DISCONNECTED == $this->_state) {
- return PEAR::raiseError('Not currently connected', 7);
- }
-
- $method = trim($this->_toUpper($method));
- if (is_array($this->_capability['sasl'])) {
- foreach ($this->_capability['sasl'] as $sasl) {
- if ($sasl == $method) {
- return true;
- }
- }
- }
-
- return false;
- }
-
- /**
- * Handles the authentication using any known method.
- *
- * @param string $uid The userid to authenticate as.
- * @param string $pwd The password to authenticate with.
- * @param string $userMethod The method to use. If empty, the class chooses
- * the best (strongest) available method.
- * @param string $euser The effective uid to authenticate as.
- *
- * @return void
- */
- function _cmdAuthenticate($uid, $pwd, $userMethod = null, $euser = '')
- {
- if (PEAR::isError($method = $this->_getBestAuthMethod($userMethod))) {
- return $method;
- }
- switch ($method) {
- case 'DIGEST-MD5':
- return $this->_authDigestMD5($uid, $pwd, $euser);
- case 'CRAM-MD5':
- $result = $this->_authCRAMMD5($uid, $pwd, $euser);
- break;
- case 'LOGIN':
- $result = $this->_authLOGIN($uid, $pwd, $euser);
- break;
- case 'PLAIN':
- $result = $this->_authPLAIN($uid, $pwd, $euser);
- break;
- case 'EXTERNAL':
- $result = $this->_authEXTERNAL($uid, $pwd, $euser);
- break;
- default :
- $result = PEAR::raiseError(
- $method . ' is not a supported authentication method'
- );
- break;
- }
-
- if (PEAR::isError($res = $this->_doCmd())) {
- return $res;
- }
-
- // Query the server capabilities again now that we are authenticated.
- if (PEAR::isError($res = $this->_cmdCapability())) {
- return PEAR::raiseError(
- 'Failed to connect, server said: ' . $res->getMessage(), 2
- );
- }
-
- return $result;
- }
-
- /**
- * Authenticates the user using the PLAIN method.
- *
- * @param string $user The userid to authenticate as.
- * @param string $pass The password to authenticate with.
- * @param string $euser The effective uid to authenticate as.
- *
- * @return void
- */
- function _authPLAIN($user, $pass, $euser)
- {
- return $this->_sendCmd(
- sprintf(
- 'AUTHENTICATE "PLAIN" "%s"',
- base64_encode($euser . chr(0) . $user . chr(0) . $pass)
- )
- );
- }
-
- /**
- * Authenticates the user using the LOGIN method.
- *
- * @param string $user The userid to authenticate as.
- * @param string $pass The password to authenticate with.
- * @param string $euser The effective uid to authenticate as.
- *
- * @return void
- */
- function _authLOGIN($user, $pass, $euser)
- {
- if (PEAR::isError($result = $this->_sendCmd('AUTHENTICATE "LOGIN"'))) {
- return $result;
- }
- if (PEAR::isError($result = $this->_doCmd('"' . base64_encode($user) . '"', true))) {
- return $result;
- }
- return $this->_doCmd('"' . base64_encode($pass) . '"', true);
- }
-
- /**
- * Authenticates the user using the CRAM-MD5 method.
- *
- * @param string $user The userid to authenticate as.
- * @param string $pass The password to authenticate with.
- * @param string $euser The effective uid to authenticate as.
- *
- * @return void
- */
- function _authCRAMMD5($user, $pass, $euser)
- {
- if (PEAR::isError($challenge = $this->_doCmd('AUTHENTICATE "CRAM-MD5"', true))) {
- return $challenge;
- }
-
- $challenge = base64_decode(trim($challenge));
- $cram = Auth_SASL::factory('crammd5');
- if (PEAR::isError($response = $cram->getResponse($user, $pass, $challenge))) {
- return $response;
- }
-
- return $this->_sendStringResponse(base64_encode($response));
- }
-
- /**
- * Authenticates the user using the DIGEST-MD5 method.
- *
- * @param string $user The userid to authenticate as.
- * @param string $pass The password to authenticate with.
- * @param string $euser The effective uid to authenticate as.
- *
- * @return void
- */
- function _authDigestMD5($user, $pass, $euser)
- {
- if (PEAR::isError($challenge = $this->_doCmd('AUTHENTICATE "DIGEST-MD5"', true))) {
- return $challenge;
- }
-
- $challenge = base64_decode(trim($challenge));
- $digest = Auth_SASL::factory('digestmd5');
- // @todo Really 'localhost'?
- if (PEAR::isError($response = $digest->getResponse($user, $pass, $challenge, 'localhost', 'sieve', $euser))) {
- return $response;
- }
-
- if (PEAR::isError($result = $this->_sendStringResponse(base64_encode($response)))) {
- return $result;
- }
- if (PEAR::isError($result = $this->_doCmd('', true))) {
- return $result;
- }
- if ($this->_toUpper(substr($result, 0, 2)) == 'OK') {
- return;
- }
-
- /* We don't use the protocol's third step because SIEVE doesn't allow
- * subsequent authentication, so we just silently ignore it. */
- if (PEAR::isError($result = $this->_sendStringResponse(''))) {
- return $result;
- }
-
- return $this->_doCmd();
- }
-
- /**
- * Authenticates the user using the EXTERNAL method.
- *
- * @param string $user The userid to authenticate as.
- * @param string $pass The password to authenticate with.
- * @param string $euser The effective uid to authenticate as.
- *
- * @return void
- *
- * @since 1.1.7
- */
- function _authEXTERNAL($user, $pass, $euser)
- {
- $cmd = sprintf(
- 'AUTHENTICATE "EXTERNAL" "%s"',
- base64_encode(strlen($euser) ? $euser : $user)
- );
- return $this->_sendCmd($cmd);
- }
-
- /**
- * Removes a script from the server.
- *
- * @param string $scriptname Name of the script to delete.
- *
- * @return boolean True on success, PEAR_Error otherwise.
- */
- function _cmdDeleteScript($scriptname)
- {
- if (NET_SIEVE_STATE_TRANSACTION != $this->_state) {
- return PEAR::raiseError('Not currently in AUTHORISATION state', 1);
- }
-
- if (PEAR::isError($res = $this->_doCmd(sprintf('DELETESCRIPT %s', $this->_escape($scriptname))))) {
- return $res;
- }
- return true;
- }
-
- /**
- * Retrieves the contents of the named script.
- *
- * @param string $scriptname Name of the script to retrieve.
- *
- * @return string The script if successful, PEAR_Error otherwise.
- */
- function _cmdGetScript($scriptname)
- {
- if (NET_SIEVE_STATE_TRANSACTION != $this->_state) {
- return PEAR::raiseError('Not currently in AUTHORISATION state', 1);
- }
-
- if (PEAR::isError($res = $this->_doCmd(sprintf('GETSCRIPT %s', $this->_escape($scriptname))))) {
- return $res;
- }
-
- return preg_replace('/^{[0-9]+}\r\n/', '', $res);
- }
-
- /**
- * Sets the active script, i.e. the one that gets run on new mail by the
- * server.
- *
- * @param string $scriptname The name of the script to mark as active.
- *
- * @return boolean True on success, PEAR_Error otherwise.
- */
- function _cmdSetActive($scriptname)
- {
- if (NET_SIEVE_STATE_TRANSACTION != $this->_state) {
- return PEAR::raiseError('Not currently in AUTHORISATION state', 1);
- }
-
- if (PEAR::isError($res = $this->_doCmd(sprintf('SETACTIVE %s', $this->_escape($scriptname))))) {
- return $res;
- }
-
- $this->_activeScript = $scriptname;
- return true;
- }
-
- /**
- * Returns the list of scripts on the server.
- *
- * @return array An array with the list of scripts in the first element
- * and the active script in the second element on success,
- * PEAR_Error otherwise.
- */
- function _cmdListScripts()
- {
- if (NET_SIEVE_STATE_TRANSACTION != $this->_state) {
- return PEAR::raiseError('Not currently in AUTHORISATION state', 1);
- }
-
- if (PEAR::isError($res = $this->_doCmd('LISTSCRIPTS'))) {
- return $res;
- }
-
- $scripts = array();
- $activescript = null;
- $res = explode("\r\n", $res);
- foreach ($res as $value) {
- if (preg_match('/^"(.*)"( ACTIVE)?$/i', $value, $matches)) {
- $script_name = stripslashes($matches[1]);
- $scripts[] = $script_name;
- if (!empty($matches[2])) {
- $activescript = $script_name;
- }
- }
- }
-
- return array($scripts, $activescript);
- }
-
- /**
- * Adds a script to the server.
- *
- * @param string $scriptname Name of the new script.
- * @param string $scriptdata The new script.
- *
- * @return boolean True on success, PEAR_Error otherwise.
- */
- function _cmdPutScript($scriptname, $scriptdata)
- {
- if (NET_SIEVE_STATE_TRANSACTION != $this->_state) {
- return PEAR::raiseError('Not currently in AUTHORISATION state', 1);
- }
-
- $stringLength = $this->_getLineLength($scriptdata);
- $command = sprintf("PUTSCRIPT %s {%d+}\r\n%s",
- $this->_escape($scriptname),
- $stringLength,
- $scriptdata);
- if (PEAR::isError($res = $this->_doCmd($command))) {
- return $res;
- }
-
- return true;
- }
-
- /**
- * Logs out of the server and terminates the connection.
- *
- * @param boolean $sendLogoutCMD Whether to send LOGOUT command before
- * disconnecting.
- *
- * @return boolean True on success, PEAR_Error otherwise.
- */
- function _cmdLogout($sendLogoutCMD = true)
- {
- if (NET_SIEVE_STATE_DISCONNECTED == $this->_state) {
- return PEAR::raiseError('Not currently connected', 1);
- }
-
- if ($sendLogoutCMD) {
- if (PEAR::isError($res = $this->_doCmd('LOGOUT'))) {
- return $res;
- }
- }
-
- $this->_sock->disconnect();
- $this->_state = NET_SIEVE_STATE_DISCONNECTED;
-
- return true;
- }
-
- /**
- * Sends the CAPABILITY command
- *
- * @return boolean True on success, PEAR_Error otherwise.
- */
- function _cmdCapability()
- {
- if (NET_SIEVE_STATE_DISCONNECTED == $this->_state) {
- return PEAR::raiseError('Not currently connected', 1);
- }
- if (PEAR::isError($res = $this->_doCmd('CAPABILITY'))) {
- return $res;
- }
- $this->_parseCapability($res);
- return true;
- }
-
- /**
- * Parses the response from the CAPABILITY command and stores the result
- * in $_capability.
- *
- * @param string $data The response from the capability command.
- *
- * @return void
- */
- function _parseCapability($data)
- {
- // Clear the cached capabilities.
- $this->_capability = array('sasl' => array(),
- 'extensions' => array());
-
- $data = preg_split('/\r?\n/', $this->_toUpper($data), -1, PREG_SPLIT_NO_EMPTY);
-
- for ($i = 0; $i < count($data); $i++) {
- if (!preg_match('/^"([A-Z]+)"( "(.*)")?$/', $data[$i], $matches)) {
- continue;
- }
- switch ($matches[1]) {
- case 'IMPLEMENTATION':
- $this->_capability['implementation'] = $matches[3];
- break;
-
- case 'SASL':
- $this->_capability['sasl'] = preg_split('/\s+/', $matches[3]);
- break;
-
- case 'SIEVE':
- $this->_capability['extensions'] = preg_split('/\s+/', $matches[3]);
- break;
-
- case 'STARTTLS':
- $this->_capability['starttls'] = true;
- break;
- }
- }
- }
-
- /**
- * Sends a command to the server
- *
- * @param string $cmd The command to send.
- *
- * @return void
- */
- function _sendCmd($cmd)
- {
- $status = $this->_sock->getStatus();
- if (PEAR::isError($status) || $status['eof']) {
- return PEAR::raiseError('Failed to write to socket: connection lost');
- }
- if (PEAR::isError($error = $this->_sock->write($cmd . "\r\n"))) {
- return PEAR::raiseError(
- 'Failed to write to socket: ' . $error->getMessage()
- );
- }
- $this->_debug("C: $cmd");
- }
-
- /**
- * Sends a string response to the server.
- *
- * @param string $str The string to send.
- *
- * @return void
- */
- function _sendStringResponse($str)
- {
- return $this->_sendCmd('{' . $this->_getLineLength($str) . "+}\r\n" . $str);
- }
-
- /**
- * Receives a single line from the server.
- *
- * @return string The server response line.
- */
- function _recvLn()
- {
- if (PEAR::isError($lastline = $this->_sock->gets(8192))) {
- return PEAR::raiseError(
- 'Failed to read from socket: ' . $lastline->getMessage()
- );
- }
-
- $lastline = rtrim($lastline);
- $this->_debug("S: $lastline");
-
- if ($lastline === '') {
- return PEAR::raiseError('Failed to read from socket');
- }
-
- return $lastline;
- }
-
- /**
- * Receives a number of bytes from the server.
- *
- * @param integer $length Number of bytes to read.
- *
- * @return string The server response.
- */
- function _recvBytes($length)
- {
- $response = '';
- $response_length = 0;
- while ($response_length < $length) {
- $response .= $this->_sock->read($length - $response_length);
- $response_length = $this->_getLineLength($response);
- }
- $this->_debug('S: ' . rtrim($response));
- return $response;
- }
-
- /**
- * Send a command and retrieves a response from the server.
- *
- * @param string $cmd The command to send.
- * @param boolean $auth Whether this is an authentication command.
- *
- * @return string|PEAR_Error Reponse string if an OK response, PEAR_Error
- * if a NO response.
- */
- function _doCmd($cmd = '', $auth = false)
- {
- $referralCount = 0;
- while ($referralCount < $this->_maxReferralCount) {
- if (strlen($cmd)) {
- if (PEAR::isError($error = $this->_sendCmd($cmd))) {
- return $error;
- }
- }
-
- $response = '';
- while (true) {
- if (PEAR::isError($line = $this->_recvLn())) {
- return $line;
- }
- $uc_line = $this->_toUpper($line);
-
- if ('OK' == substr($uc_line, 0, 2)) {
- $response .= $line;
- return rtrim($response);
- }
-
- if ('NO' == substr($uc_line, 0, 2)) {
- // Check for string literal error message.
- if (preg_match('/{([0-9]+)}$/', $line, $matches)) {
- $line = substr($line, 0, -(strlen($matches[1])+2))
- . str_replace(
- "\r\n", ' ', $this->_recvBytes($matches[1] + 2)
- );
- }
- return PEAR::raiseError(trim($response . substr($line, 2)), 3);
- }
-
- if ('BYE' == substr($uc_line, 0, 3)) {
- if (PEAR::isError($error = $this->disconnect(false))) {
- return PEAR::raiseError(
- 'Cannot handle BYE, the error was: '
- . $error->getMessage(),
- 4
- );
- }
- // Check for referral, then follow it. Otherwise, carp an
- // error.
- if (preg_match('/^bye \(referral "(sieve:\/\/)?([^"]+)/i', $line, $matches)) {
- // Replace the old host with the referral host
- // preserving any protocol prefix.
- $this->_data['host'] = preg_replace(
- '/\w+(?!(\w|\:\/\/)).*/', $matches[2],
- $this->_data['host']
- );
- if (PEAR::isError($error = $this->_handleConnectAndLogin())) {
- return PEAR::raiseError(
- 'Cannot follow referral to '
- . $this->_data['host'] . ', the error was: '
- . $error->getMessage(),
- 5
- );
- }
- break;
- }
- return PEAR::raiseError(trim($response . $line), 6);
- }
-
- if (preg_match('/^{([0-9]+)}/', $line, $matches)) {
- // Matches literal string responses.
- $line = $this->_recvBytes($matches[1] + 2);
- if (!$auth) {
- // Receive the pending OK only if we aren't
- // authenticating since string responses during
- // authentication don't need an OK.
- $this->_recvLn();
- }
- return $line;
- }
-
- if ($auth) {
- // String responses during authentication don't need an
- // OK.
- $response .= $line;
- return rtrim($response);
- }
-
- $response .= $line . "\r\n";
- $referralCount++;
- }
- }
-
- return PEAR::raiseError('Max referral count (' . $referralCount . ') reached. Cyrus murder loop error?', 7);
- }
-
- /**
- * Returns the name of the best authentication method that the server
- * has advertised.
- *
- * @param string $userMethod Only consider this method as available.
- *
- * @return string The name of the best supported authentication method or
- * a PEAR_Error object on failure.
- */
- function _getBestAuthMethod($userMethod = null)
- {
- if (!isset($this->_capability['sasl'])) {
- return PEAR::raiseError('This server doesn\'t support any authentication methods. SASL problem?');
- }
- if (!$this->_capability['sasl']) {
- return PEAR::raiseError('This server doesn\'t support any authentication methods.');
- }
-
- if ($userMethod) {
- if (in_array($userMethod, $this->_capability['sasl'])) {
- return $userMethod;
- }
- return PEAR::raiseError(
- sprintf('No supported authentication method found. The server supports these methods: %s, but we want to use: %s',
- implode(', ', $this->_capability['sasl']),
- $userMethod));
- }
-
- foreach ($this->supportedAuthMethods as $method) {
- if (in_array($method, $this->_capability['sasl'])) {
- return $method;
- }
- }
-
- return PEAR::raiseError(
- sprintf('No supported authentication method found. The server supports these methods: %s, but we only support: %s',
- implode(', ', $this->_capability['sasl']),
- implode(', ', $this->supportedAuthMethods)));
- }
-
- /**
- * Starts a TLS connection.
- *
- * @return boolean True on success, PEAR_Error on failure.
- */
- function _startTLS()
- {
- if (PEAR::isError($res = $this->_doCmd('STARTTLS'))) {
- return $res;
- }
-
- if (!stream_socket_enable_crypto($this->_sock->fp, true, STREAM_CRYPTO_METHOD_TLS_CLIENT)) {
- return PEAR::raiseError('Failed to establish TLS connection', 2);
- }
-
- $this->_debug('STARTTLS negotiation successful');
-
- // The server should be sending a CAPABILITY response after
- // negotiating TLS. Read it, and ignore if it doesn't.
- // Unfortunately old Cyrus versions are broken and don't send a
- // CAPABILITY response, thus we would wait here forever. Parse the
- // Cyrus version and work around this broken behavior.
- if (!preg_match('/^CYRUS TIMSIEVED V([0-9.]+)/', $this->_capability['implementation'], $matches) ||
- version_compare($matches[1], '2.3.10', '>=')) {
- $this->_doCmd();
- }
-
- // Query the server capabilities again now that we are under
- // encryption.
- if (PEAR::isError($res = $this->_cmdCapability())) {
- return PEAR::raiseError(
- 'Failed to connect, server said: ' . $res->getMessage(), 2
- );
- }
-
- return true;
- }
-
- /**
- * Returns the length of a string.
- *
- * @param string $string A string.
- *
- * @return integer The length of the string.
- */
- function _getLineLength($string)
- {
- if (extension_loaded('mbstring')) {
- return mb_strlen($string, 'latin1');
- } else {
- return strlen($string);
- }
- }
-
- /**
- * Locale independant strtoupper() implementation.
- *
- * @param string $string The string to convert to lowercase.
- *
- * @return string The lowercased string, based on ASCII encoding.
- */
- function _toUpper($string)
- {
- $language = setlocale(LC_CTYPE, 0);
- setlocale(LC_CTYPE, 'C');
- $string = strtoupper($string);
- setlocale(LC_CTYPE, $language);
- return $string;
- }
-
- /**
- * Converts strings into RFC's quoted-string or literal-c2s form.
- *
- * @param string $string The string to convert.
- *
- * @return string Result string.
- */
- function _escape($string)
- {
- // Some implementations don't allow UTF-8 characters in quoted-string,
- // use literal-c2s.
- if (preg_match('/[^\x01-\x09\x0B-\x0C\x0E-\x7F]/', $string)) {
- return sprintf("{%d+}\r\n%s", $this->_getLineLength($string), $string);
- }
-
- return '"' . addcslashes($string, '\\"') . '"';
- }
-
- /**
- * Write debug text to the current debug output handler.
- *
- * @param string $message Debug message text.
- *
- * @return void
- */
- function _debug($message)
- {
- if ($this->_debug) {
- if ($this->_debug_handler) {
- call_user_func_array($this->_debug_handler, array(&$this, $message));
- } else {
- echo "$message\n";
- }
- }
- }
-}
diff --git a/program/lib/Net/Socket.php b/program/lib/Net/Socket.php
deleted file mode 100644
index bf1d1bbcd..000000000
--- a/program/lib/Net/Socket.php
+++ /dev/null
@@ -1,686 +0,0 @@
-<?php
-/**
- * Net_Socket
- *
- * PHP Version 4
- *
- * Copyright (c) 1997-2013 The PHP Group
- *
- * This source file is subject to version 2.0 of the PHP license,
- * that is bundled with this package in the file LICENSE, and is
- * available at through the world-wide-web at
- * http://www.php.net/license/2_02.txt.
- * If you did not receive a copy of the PHP license and are unable to
- * obtain it through the world-wide-web, please send a note to
- * license@php.net so we can mail you a copy immediately.
- *
- * Authors: Stig Bakken <ssb@php.net>
- * Chuck Hagenbuch <chuck@horde.org>
- *
- * @category Net
- * @package Net_Socket
- * @author Stig Bakken <ssb@php.net>
- * @author Chuck Hagenbuch <chuck@horde.org>
- * @copyright 1997-2003 The PHP Group
- * @license http://www.php.net/license/2_02.txt PHP 2.02
- * @link http://pear.php.net/packages/Net_Socket
- */
-
-require_once 'PEAR.php';
-
-define('NET_SOCKET_READ', 1);
-define('NET_SOCKET_WRITE', 2);
-define('NET_SOCKET_ERROR', 4);
-
-/**
- * Generalized Socket class.
- *
- * @category Net
- * @package Net_Socket
- * @author Stig Bakken <ssb@php.net>
- * @author Chuck Hagenbuch <chuck@horde.org>
- * @copyright 1997-2003 The PHP Group
- * @license http://www.php.net/license/2_02.txt PHP 2.02
- * @link http://pear.php.net/packages/Net_Socket
- */
-class Net_Socket extends PEAR
-{
- /**
- * Socket file pointer.
- * @var resource $fp
- */
- var $fp = null;
-
- /**
- * Whether the socket is blocking. Defaults to true.
- * @var boolean $blocking
- */
- var $blocking = true;
-
- /**
- * Whether the socket is persistent. Defaults to false.
- * @var boolean $persistent
- */
- var $persistent = false;
-
- /**
- * The IP address to connect to.
- * @var string $addr
- */
- var $addr = '';
-
- /**
- * The port number to connect to.
- * @var integer $port
- */
- var $port = 0;
-
- /**
- * Number of seconds to wait on socket operations before assuming
- * there's no more data. Defaults to no timeout.
- * @var integer|float $timeout
- */
- var $timeout = null;
-
- /**
- * Number of bytes to read at a time in readLine() and
- * readAll(). Defaults to 2048.
- * @var integer $lineLength
- */
- var $lineLength = 2048;
-
- /**
- * The string to use as a newline terminator. Usually "\r\n" or "\n".
- * @var string $newline
- */
- var $newline = "\r\n";
-
- /**
- * Connect to the specified port. If called when the socket is
- * already connected, it disconnects and connects again.
- *
- * @param string $addr IP address or host name (may be with protocol prefix).
- * @param integer $port TCP port number.
- * @param boolean $persistent (optional) Whether the connection is
- * persistent (kept open between requests
- * by the web server).
- * @param integer $timeout (optional) Connection socket timeout.
- * @param array $options See options for stream_context_create.
- *
- * @access public
- *
- * @return boolean|PEAR_Error True on success or a PEAR_Error on failure.
- */
- function connect($addr, $port = 0, $persistent = null,
- $timeout = null, $options = null)
- {
- if (is_resource($this->fp)) {
- @fclose($this->fp);
- $this->fp = null;
- }
-
- if (!$addr) {
- return $this->raiseError('$addr cannot be empty');
- } else if (strspn($addr, ':.0123456789') == strlen($addr)) {
- $this->addr = strpos($addr, ':') !== false ? '['.$addr.']' : $addr;
- } else {
- $this->addr = $addr;
- }
-
- $this->port = $port % 65536;
-
- if ($persistent !== null) {
- $this->persistent = $persistent;
- }
-
- $openfunc = $this->persistent ? 'pfsockopen' : 'fsockopen';
- $errno = 0;
- $errstr = '';
-
- $old_track_errors = @ini_set('track_errors', 1);
-
- if ($timeout <= 0) {
- $timeout = @ini_get('default_socket_timeout');
- }
-
- if ($options && function_exists('stream_context_create')) {
- $context = stream_context_create($options);
-
- // Since PHP 5 fsockopen doesn't allow context specification
- if (function_exists('stream_socket_client')) {
- $flags = STREAM_CLIENT_CONNECT;
-
- if ($this->persistent) {
- $flags = STREAM_CLIENT_PERSISTENT;
- }
-
- $addr = $this->addr . ':' . $this->port;
- $fp = stream_socket_client($addr, $errno, $errstr,
- $timeout, $flags, $context);
- } else {
- $fp = @$openfunc($this->addr, $this->port, $errno,
- $errstr, $timeout, $context);
- }
- } else {
- $fp = @$openfunc($this->addr, $this->port, $errno, $errstr, $timeout);
- }
-
- if (!$fp) {
- if ($errno == 0 && !strlen($errstr) && isset($php_errormsg)) {
- $errstr = $php_errormsg;
- }
- @ini_set('track_errors', $old_track_errors);
- return $this->raiseError($errstr, $errno);
- }
-
- @ini_set('track_errors', $old_track_errors);
- $this->fp = $fp;
- $this->setTimeout();
- return $this->setBlocking($this->blocking);
- }
-
- /**
- * Disconnects from the peer, closes the socket.
- *
- * @access public
- * @return mixed true on success or a PEAR_Error instance otherwise
- */
- function disconnect()
- {
- if (!is_resource($this->fp)) {
- return $this->raiseError('not connected');
- }
-
- @fclose($this->fp);
- $this->fp = null;
- return true;
- }
-
- /**
- * Set the newline character/sequence to use.
- *
- * @param string $newline Newline character(s)
- * @return boolean True
- */
- function setNewline($newline)
- {
- $this->newline = $newline;
- return true;
- }
-
- /**
- * Find out if the socket is in blocking mode.
- *
- * @access public
- * @return boolean The current blocking mode.
- */
- function isBlocking()
- {
- return $this->blocking;
- }
-
- /**
- * Sets whether the socket connection should be blocking or
- * not. A read call to a non-blocking socket will return immediately
- * if there is no data available, whereas it will block until there
- * is data for blocking sockets.
- *
- * @param boolean $mode True for blocking sockets, false for nonblocking.
- *
- * @access public
- * @return mixed true on success or a PEAR_Error instance otherwise
- */
- function setBlocking($mode)
- {
- if (!is_resource($this->fp)) {
- return $this->raiseError('not connected');
- }
-
- $this->blocking = $mode;
- stream_set_blocking($this->fp, (int)$this->blocking);
- return true;
- }
-
- /**
- * Sets the timeout value on socket descriptor,
- * expressed in the sum of seconds and microseconds
- *
- * @param integer $seconds Seconds.
- * @param integer $microseconds Microseconds, optional.
- *
- * @access public
- * @return mixed True on success or false on failure or
- * a PEAR_Error instance when not connected
- */
- function setTimeout($seconds = null, $microseconds = null)
- {
- if (!is_resource($this->fp)) {
- return $this->raiseError('not connected');
- }
-
- if ($seconds === null && $microseconds === null) {
- $seconds = (int) $this->timeout;
- $microseconds = (int) (($this->timeout - $seconds) * 1000000);
- } else {
- $this->timeout = $seconds + $microseconds/1000000;
- }
-
- if ($this->timeout > 0) {
- return stream_set_timeout($this->fp, (int) $seconds, (int) $microseconds);
- }
- else {
- return false;
- }
- }
-
- /**
- * Sets the file buffering size on the stream.
- * See php's stream_set_write_buffer for more information.
- *
- * @param integer $size Write buffer size.
- *
- * @access public
- * @return mixed on success or an PEAR_Error object otherwise
- */
- function setWriteBuffer($size)
- {
- if (!is_resource($this->fp)) {
- return $this->raiseError('not connected');
- }
-
- $returned = stream_set_write_buffer($this->fp, $size);
- if ($returned == 0) {
- return true;
- }
- return $this->raiseError('Cannot set write buffer.');
- }
-
- /**
- * Returns information about an existing socket resource.
- * Currently returns four entries in the result array:
- *
- * <p>
- * timed_out (bool) - The socket timed out waiting for data<br>
- * blocked (bool) - The socket was blocked<br>
- * eof (bool) - Indicates EOF event<br>
- * unread_bytes (int) - Number of bytes left in the socket buffer<br>
- * </p>
- *
- * @access public
- * @return mixed Array containing information about existing socket
- * resource or a PEAR_Error instance otherwise
- */
- function getStatus()
- {
- if (!is_resource($this->fp)) {
- return $this->raiseError('not connected');
- }
-
- return stream_get_meta_data($this->fp);
- }
-
- /**
- * Get a specified line of data
- *
- * @param int $size Reading ends when size - 1 bytes have been read,
- * or a newline or an EOF (whichever comes first).
- * If no size is specified, it will keep reading from
- * the stream until it reaches the end of the line.
- *
- * @access public
- * @return mixed $size bytes of data from the socket, or a PEAR_Error if
- * not connected. If an error occurs, FALSE is returned.
- */
- function gets($size = null)
- {
- if (!is_resource($this->fp)) {
- return $this->raiseError('not connected');
- }
-
- if (is_null($size)) {
- return @fgets($this->fp);
- } else {
- return @fgets($this->fp, $size);
- }
- }
-
- /**
- * Read a specified amount of data. This is guaranteed to return,
- * and has the added benefit of getting everything in one fread()
- * chunk; if you know the size of the data you're getting
- * beforehand, this is definitely the way to go.
- *
- * @param integer $size The number of bytes to read from the socket.
- *
- * @access public
- * @return $size bytes of data from the socket, or a PEAR_Error if
- * not connected.
- */
- function read($size)
- {
- if (!is_resource($this->fp)) {
- return $this->raiseError('not connected');
- }
-
- return @fread($this->fp, $size);
- }
-
- /**
- * Write a specified amount of data.
- *
- * @param string $data Data to write.
- * @param integer $blocksize Amount of data to write at once.
- * NULL means all at once.
- *
- * @access public
- * @return mixed If the socket is not connected, returns an instance of
- * PEAR_Error.
- * If the write succeeds, returns the number of bytes written.
- * If the write fails, returns false.
- * If the socket times out, returns an instance of PEAR_Error.
- */
- function write($data, $blocksize = null)
- {
- if (!is_resource($this->fp)) {
- return $this->raiseError('not connected');
- }
-
- if (is_null($blocksize) && !OS_WINDOWS) {
- $written = @fwrite($this->fp, $data);
-
- // Check for timeout or lost connection
- if (!$written) {
- $meta_data = $this->getStatus();
-
- if (!is_array($meta_data)) {
- return $meta_data; // PEAR_Error
- }
-
- if (!empty($meta_data['timed_out'])) {
- return $this->raiseError('timed out');
- }
- }
-
- return $written;
- } else {
- if (is_null($blocksize)) {
- $blocksize = 1024;
- }
-
- $pos = 0;
- $size = strlen($data);
- while ($pos < $size) {
- $written = @fwrite($this->fp, substr($data, $pos, $blocksize));
-
- // Check for timeout or lost connection
- if (!$written) {
- $meta_data = $this->getStatus();
-
- if (!is_array($meta_data)) {
- return $meta_data; // PEAR_Error
- }
-
- if (!empty($meta_data['timed_out'])) {
- return $this->raiseError('timed out');
- }
-
- return $written;
- }
-
- $pos += $written;
- }
-
- return $pos;
- }
- }
-
- /**
- * Write a line of data to the socket, followed by a trailing newline.
- *
- * @param string $data Data to write
- *
- * @access public
- * @return mixed fwrite() result, or PEAR_Error when not connected
- */
- function writeLine($data)
- {
- if (!is_resource($this->fp)) {
- return $this->raiseError('not connected');
- }
-
- return fwrite($this->fp, $data . $this->newline);
- }
-
- /**
- * Tests for end-of-file on a socket descriptor.
- *
- * Also returns true if the socket is disconnected.
- *
- * @access public
- * @return bool
- */
- function eof()
- {
- return (!is_resource($this->fp) || feof($this->fp));
- }
-
- /**
- * Reads a byte of data
- *
- * @access public
- * @return 1 byte of data from the socket, or a PEAR_Error if
- * not connected.
- */
- function readByte()
- {
- if (!is_resource($this->fp)) {
- return $this->raiseError('not connected');
- }
-
- return ord(@fread($this->fp, 1));
- }
-
- /**
- * Reads a word of data
- *
- * @access public
- * @return 1 word of data from the socket, or a PEAR_Error if
- * not connected.
- */
- function readWord()
- {
- if (!is_resource($this->fp)) {
- return $this->raiseError('not connected');
- }
-
- $buf = @fread($this->fp, 2);
- return (ord($buf[0]) + (ord($buf[1]) << 8));
- }
-
- /**
- * Reads an int of data
- *
- * @access public
- * @return integer 1 int of data from the socket, or a PEAR_Error if
- * not connected.
- */
- function readInt()
- {
- if (!is_resource($this->fp)) {
- return $this->raiseError('not connected');
- }
-
- $buf = @fread($this->fp, 4);
- return (ord($buf[0]) + (ord($buf[1]) << 8) +
- (ord($buf[2]) << 16) + (ord($buf[3]) << 24));
- }
-
- /**
- * Reads a zero-terminated string of data
- *
- * @access public
- * @return string, or a PEAR_Error if
- * not connected.
- */
- function readString()
- {
- if (!is_resource($this->fp)) {
- return $this->raiseError('not connected');
- }
-
- $string = '';
- while (($char = @fread($this->fp, 1)) != "\x00") {
- $string .= $char;
- }
- return $string;
- }
-
- /**
- * Reads an IP Address and returns it in a dot formatted string
- *
- * @access public
- * @return Dot formatted string, or a PEAR_Error if
- * not connected.
- */
- function readIPAddress()
- {
- if (!is_resource($this->fp)) {
- return $this->raiseError('not connected');
- }
-
- $buf = @fread($this->fp, 4);
- return sprintf('%d.%d.%d.%d', ord($buf[0]), ord($buf[1]),
- ord($buf[2]), ord($buf[3]));
- }
-
- /**
- * Read until either the end of the socket or a newline, whichever
- * comes first. Strips the trailing newline from the returned data.
- *
- * @access public
- * @return All available data up to a newline, without that
- * newline, or until the end of the socket, or a PEAR_Error if
- * not connected.
- */
- function readLine()
- {
- if (!is_resource($this->fp)) {
- return $this->raiseError('not connected');
- }
-
- $line = '';
-
- $timeout = time() + $this->timeout;
-
- while (!feof($this->fp) && (!$this->timeout || time() < $timeout)) {
- $line .= @fgets($this->fp, $this->lineLength);
- if (substr($line, -1) == "\n") {
- return rtrim($line, $this->newline);
- }
- }
- return $line;
- }
-
- /**
- * Read until the socket closes, or until there is no more data in
- * the inner PHP buffer. If the inner buffer is empty, in blocking
- * mode we wait for at least 1 byte of data. Therefore, in
- * blocking mode, if there is no data at all to be read, this
- * function will never exit (unless the socket is closed on the
- * remote end).
- *
- * @access public
- *
- * @return string All data until the socket closes, or a PEAR_Error if
- * not connected.
- */
- function readAll()
- {
- if (!is_resource($this->fp)) {
- return $this->raiseError('not connected');
- }
-
- $data = '';
- while (!feof($this->fp)) {
- $data .= @fread($this->fp, $this->lineLength);
- }
- return $data;
- }
-
- /**
- * Runs the equivalent of the select() system call on the socket
- * with a timeout specified by tv_sec and tv_usec.
- *
- * @param integer $state Which of read/write/error to check for.
- * @param integer $tv_sec Number of seconds for timeout.
- * @param integer $tv_usec Number of microseconds for timeout.
- *
- * @access public
- * @return False if select fails, integer describing which of read/write/error
- * are ready, or PEAR_Error if not connected.
- */
- function select($state, $tv_sec, $tv_usec = 0)
- {
- if (!is_resource($this->fp)) {
- return $this->raiseError('not connected');
- }
-
- $read = null;
- $write = null;
- $except = null;
- if ($state & NET_SOCKET_READ) {
- $read[] = $this->fp;
- }
- if ($state & NET_SOCKET_WRITE) {
- $write[] = $this->fp;
- }
- if ($state & NET_SOCKET_ERROR) {
- $except[] = $this->fp;
- }
- if (false === ($sr = stream_select($read, $write, $except,
- $tv_sec, $tv_usec))) {
- return false;
- }
-
- $result = 0;
- if (count($read)) {
- $result |= NET_SOCKET_READ;
- }
- if (count($write)) {
- $result |= NET_SOCKET_WRITE;
- }
- if (count($except)) {
- $result |= NET_SOCKET_ERROR;
- }
- return $result;
- }
-
- /**
- * Turns encryption on/off on a connected socket.
- *
- * @param bool $enabled Set this parameter to true to enable encryption
- * and false to disable encryption.
- * @param integer $type Type of encryption. See stream_socket_enable_crypto()
- * for values.
- *
- * @see http://se.php.net/manual/en/function.stream-socket-enable-crypto.php
- * @access public
- * @return false on error, true on success and 0 if there isn't enough data
- * and the user should try again (non-blocking sockets only).
- * A PEAR_Error object is returned if the socket is not
- * connected
- */
- function enableCrypto($enabled, $type)
- {
- if (version_compare(phpversion(), "5.1.0", ">=")) {
- if (!is_resource($this->fp)) {
- return $this->raiseError('not connected');
- }
- return @stream_socket_enable_crypto($this->fp, $enabled, $type);
- } else {
- $msg = 'Net_Socket::enableCrypto() requires php version >= 5.1.0';
- return $this->raiseError($msg);
- }
- }
-
-}
diff --git a/program/lib/PEAR.php b/program/lib/PEAR.php
deleted file mode 100644
index f4dfd968a..000000000
--- a/program/lib/PEAR.php
+++ /dev/null
@@ -1,1137 +0,0 @@
-<?php
-/**
- * PEAR, the PHP Extension and Application Repository
- *
- * PEAR class and PEAR_Error class
- *
- * PHP versions 4 and 5
- *
- * @category pear
- * @package PEAR
- * @author Sterling Hughes <sterling@php.net>
- * @author Stig Bakken <ssb@php.net>
- * @author Tomas V.V.Cox <cox@idecnet.com>
- * @author Greg Beaver <cellog@php.net>
- * @copyright 1997-2009 The Authors
- * @license http://opensource.org/licenses/bsd-license.php New BSD License
- * @version CVS: $Id$
- * @link http://pear.php.net/package/PEAR
- * @since File available since Release 0.1
- */
-
-/**#@+
- * ERROR constants
- */
-define('PEAR_ERROR_RETURN', 1);
-define('PEAR_ERROR_PRINT', 2);
-define('PEAR_ERROR_TRIGGER', 4);
-define('PEAR_ERROR_DIE', 8);
-define('PEAR_ERROR_CALLBACK', 16);
-/**
- * WARNING: obsolete
- * @deprecated
- */
-define('PEAR_ERROR_EXCEPTION', 32);
-/**#@-*/
-define('PEAR_ZE2', (function_exists('version_compare') &&
- version_compare(zend_version(), "2-dev", "ge")));
-
-if (substr(PHP_OS, 0, 3) == 'WIN') {
- define('OS_WINDOWS', true);
- define('OS_UNIX', false);
- define('PEAR_OS', 'Windows');
-} else {
- define('OS_WINDOWS', false);
- define('OS_UNIX', true);
- define('PEAR_OS', 'Unix'); // blatant assumption
-}
-
-$GLOBALS['_PEAR_default_error_mode'] = PEAR_ERROR_RETURN;
-$GLOBALS['_PEAR_default_error_options'] = E_USER_NOTICE;
-$GLOBALS['_PEAR_destructor_object_list'] = array();
-$GLOBALS['_PEAR_shutdown_funcs'] = array();
-$GLOBALS['_PEAR_error_handler_stack'] = array();
-
-@ini_set('track_errors', true);
-
-/**
- * Base class for other PEAR classes. Provides rudimentary
- * emulation of destructors.
- *
- * If you want a destructor in your class, inherit PEAR and make a
- * destructor method called _yourclassname (same name as the
- * constructor, but with a "_" prefix). Also, in your constructor you
- * have to call the PEAR constructor: $this->PEAR();.
- * The destructor method will be called without parameters. Note that
- * at in some SAPI implementations (such as Apache), any output during
- * the request shutdown (in which destructors are called) seems to be
- * discarded. If you need to get any debug information from your
- * destructor, use error_log(), syslog() or something similar.
- *
- * IMPORTANT! To use the emulated destructors you need to create the
- * objects by reference: $obj =& new PEAR_child;
- *
- * @category pear
- * @package PEAR
- * @author Stig Bakken <ssb@php.net>
- * @author Tomas V.V. Cox <cox@idecnet.com>
- * @author Greg Beaver <cellog@php.net>
- * @copyright 1997-2006 The PHP Group
- * @license http://opensource.org/licenses/bsd-license.php New BSD License
- * @version Release: 1.9.0
- * @link http://pear.php.net/package/PEAR
- * @see PEAR_Error
- * @since Class available since PHP 4.0.2
- * @link http://pear.php.net/manual/en/core.pear.php#core.pear.pear
- */
-class PEAR
-{
- // {{{ properties
-
- /**
- * Whether to enable internal debug messages.
- *
- * @var bool
- * @access private
- */
- var $_debug = false;
-
- /**
- * Default error mode for this object.
- *
- * @var int
- * @access private
- */
- var $_default_error_mode = null;
-
- /**
- * Default error options used for this object when error mode
- * is PEAR_ERROR_TRIGGER.
- *
- * @var int
- * @access private
- */
- var $_default_error_options = null;
-
- /**
- * Default error handler (callback) for this object, if error mode is
- * PEAR_ERROR_CALLBACK.
- *
- * @var string
- * @access private
- */
- var $_default_error_handler = '';
-
- /**
- * Which class to use for error objects.
- *
- * @var string
- * @access private
- */
- var $_error_class = 'PEAR_Error';
-
- /**
- * An array of expected errors.
- *
- * @var array
- * @access private
- */
- var $_expected_errors = array();
-
- // }}}
-
- // {{{ constructor
-
- /**
- * Constructor. Registers this object in
- * $_PEAR_destructor_object_list for destructor emulation if a
- * destructor object exists.
- *
- * @param string $error_class (optional) which class to use for
- * error objects, defaults to PEAR_Error.
- * @access public
- * @return void
- */
- function PEAR($error_class = null)
- {
- $classname = strtolower(get_class($this));
- if ($this->_debug) {
- print "PEAR constructor called, class=$classname\n";
- }
- if ($error_class !== null) {
- $this->_error_class = $error_class;
- }
- while ($classname && strcasecmp($classname, "pear")) {
- $destructor = "_$classname";
- if (method_exists($this, $destructor)) {
- global $_PEAR_destructor_object_list;
- $_PEAR_destructor_object_list[] = &$this;
- if (!isset($GLOBALS['_PEAR_SHUTDOWN_REGISTERED'])) {
- register_shutdown_function("_PEAR_call_destructors");
- $GLOBALS['_PEAR_SHUTDOWN_REGISTERED'] = true;
- }
- break;
- } else {
- $classname = get_parent_class($classname);
- }
- }
- }
-
- // }}}
- // {{{ destructor
-
- /**
- * Destructor (the emulated type of...). Does nothing right now,
- * but is included for forward compatibility, so subclass
- * destructors should always call it.
- *
- * See the note in the class desciption about output from
- * destructors.
- *
- * @access public
- * @return void
- */
- function _PEAR() {
- if ($this->_debug) {
- printf("PEAR destructor called, class=%s\n", strtolower(get_class($this)));
- }
- }
-
- // }}}
- // {{{ getStaticProperty()
-
- /**
- * If you have a class that's mostly/entirely static, and you need static
- * properties, you can use this method to simulate them. Eg. in your method(s)
- * do this: $myVar = &PEAR::getStaticProperty('myclass', 'myVar');
- * You MUST use a reference, or they will not persist!
- *
- * @access public
- * @param string $class The calling classname, to prevent clashes
- * @param string $var The variable to retrieve.
- * @return mixed A reference to the variable. If not set it will be
- * auto initialised to NULL.
- */
- function &getStaticProperty($class, $var)
- {
- static $properties;
- if (!isset($properties[$class])) {
- $properties[$class] = array();
- }
-
- if (!array_key_exists($var, $properties[$class])) {
- $properties[$class][$var] = null;
- }
-
- return $properties[$class][$var];
- }
-
- // }}}
- // {{{ registerShutdownFunc()
-
- /**
- * Use this function to register a shutdown method for static
- * classes.
- *
- * @access public
- * @param mixed $func The function name (or array of class/method) to call
- * @param mixed $args The arguments to pass to the function
- * @return void
- */
- function registerShutdownFunc($func, $args = array())
- {
- // if we are called statically, there is a potential
- // that no shutdown func is registered. Bug #6445
- if (!isset($GLOBALS['_PEAR_SHUTDOWN_REGISTERED'])) {
- register_shutdown_function("_PEAR_call_destructors");
- $GLOBALS['_PEAR_SHUTDOWN_REGISTERED'] = true;
- }
- $GLOBALS['_PEAR_shutdown_funcs'][] = array($func, $args);
- }
-
- // }}}
- // {{{ isError()
-
- /**
- * Tell whether a value is a PEAR error.
- *
- * @param mixed $data the value to test
- * @param int $code if $data is an error object, return true
- * only if $code is a string and
- * $obj->getMessage() == $code or
- * $code is an integer and $obj->getCode() == $code
- * @access public
- * @return bool true if parameter is an error
- */
- static function isError($data, $code = null)
- {
- if (!is_object($data) || !is_a($data, 'PEAR_Error')) {
- return false;
- }
-
- if (is_null($code)) {
- return true;
- } elseif (is_string($code)) {
- return $data->getMessage() == $code;
- }
-
- return $data->getCode() == $code;
- }
-
- // }}}
- // {{{ setErrorHandling()
-
- /**
- * Sets how errors generated by this object should be handled.
- * Can be invoked both in objects and statically. If called
- * statically, setErrorHandling sets the default behaviour for all
- * PEAR objects. If called in an object, setErrorHandling sets
- * the default behaviour for that object.
- *
- * @param int $mode
- * One of PEAR_ERROR_RETURN, PEAR_ERROR_PRINT,
- * PEAR_ERROR_TRIGGER, PEAR_ERROR_DIE,
- * PEAR_ERROR_CALLBACK or PEAR_ERROR_EXCEPTION.
- *
- * @param mixed $options
- * When $mode is PEAR_ERROR_TRIGGER, this is the error level (one
- * of E_USER_NOTICE, E_USER_WARNING or E_USER_ERROR).
- *
- * When $mode is PEAR_ERROR_CALLBACK, this parameter is expected
- * to be the callback function or method. A callback
- * function is a string with the name of the function, a
- * callback method is an array of two elements: the element
- * at index 0 is the object, and the element at index 1 is
- * the name of the method to call in the object.
- *
- * When $mode is PEAR_ERROR_PRINT or PEAR_ERROR_DIE, this is
- * a printf format string used when printing the error
- * message.
- *
- * @access public
- * @return void
- * @see PEAR_ERROR_RETURN
- * @see PEAR_ERROR_PRINT
- * @see PEAR_ERROR_TRIGGER
- * @see PEAR_ERROR_DIE
- * @see PEAR_ERROR_CALLBACK
- * @see PEAR_ERROR_EXCEPTION
- *
- * @since PHP 4.0.5
- */
-
- function setErrorHandling($mode = null, $options = null)
- {
- if (isset($this) && is_a($this, 'PEAR')) {
- $setmode = &$this->_default_error_mode;
- $setoptions = &$this->_default_error_options;
- } else {
- $setmode = &$GLOBALS['_PEAR_default_error_mode'];
- $setoptions = &$GLOBALS['_PEAR_default_error_options'];
- }
-
- switch ($mode) {
- case PEAR_ERROR_EXCEPTION:
- case PEAR_ERROR_RETURN:
- case PEAR_ERROR_PRINT:
- case PEAR_ERROR_TRIGGER:
- case PEAR_ERROR_DIE:
- case null:
- $setmode = $mode;
- $setoptions = $options;
- break;
-
- case PEAR_ERROR_CALLBACK:
- $setmode = $mode;
- // class/object method callback
- if (is_callable($options)) {
- $setoptions = $options;
- } else {
- trigger_error("invalid error callback", E_USER_WARNING);
- }
- break;
-
- default:
- trigger_error("invalid error mode", E_USER_WARNING);
- break;
- }
- }
-
- // }}}
- // {{{ expectError()
-
- /**
- * This method is used to tell which errors you expect to get.
- * Expected errors are always returned with error mode
- * PEAR_ERROR_RETURN. Expected error codes are stored in a stack,
- * and this method pushes a new element onto it. The list of
- * expected errors are in effect until they are popped off the
- * stack with the popExpect() method.
- *
- * Note that this method can not be called statically
- *
- * @param mixed $code a single error code or an array of error codes to expect
- *
- * @return int the new depth of the "expected errors" stack
- * @access public
- */
- function expectError($code = '*')
- {
- if (is_array($code)) {
- array_push($this->_expected_errors, $code);
- } else {
- array_push($this->_expected_errors, array($code));
- }
- return sizeof($this->_expected_errors);
- }
-
- // }}}
- // {{{ popExpect()
-
- /**
- * This method pops one element off the expected error codes
- * stack.
- *
- * @return array the list of error codes that were popped
- */
- function popExpect()
- {
- return array_pop($this->_expected_errors);
- }
-
- // }}}
- // {{{ _checkDelExpect()
-
- /**
- * This method checks unsets an error code if available
- *
- * @param mixed error code
- * @return bool true if the error code was unset, false otherwise
- * @access private
- * @since PHP 4.3.0
- */
- function _checkDelExpect($error_code)
- {
- $deleted = false;
-
- foreach ($this->_expected_errors AS $key => $error_array) {
- if (in_array($error_code, $error_array)) {
- unset($this->_expected_errors[$key][array_search($error_code, $error_array)]);
- $deleted = true;
- }
-
- // clean up empty arrays
- if (0 == count($this->_expected_errors[$key])) {
- unset($this->_expected_errors[$key]);
- }
- }
- return $deleted;
- }
-
- // }}}
- // {{{ delExpect()
-
- /**
- * This method deletes all occurences of the specified element from
- * the expected error codes stack.
- *
- * @param mixed $error_code error code that should be deleted
- * @return mixed list of error codes that were deleted or error
- * @access public
- * @since PHP 4.3.0
- */
- function delExpect($error_code)
- {
- $deleted = false;
- if ((is_array($error_code) && (0 != count($error_code)))) {
- // $error_code is a non-empty array here;
- // we walk through it trying to unset all
- // values
- foreach($error_code as $key => $error) {
- if ($this->_checkDelExpect($error)) {
- $deleted = true;
- } else {
- $deleted = false;
- }
- }
- return $deleted ? true : PEAR::raiseError("The expected error you submitted does not exist"); // IMPROVE ME
- } elseif (!empty($error_code)) {
- // $error_code comes alone, trying to unset it
- if ($this->_checkDelExpect($error_code)) {
- return true;
- } else {
- return PEAR::raiseError("The expected error you submitted does not exist"); // IMPROVE ME
- }
- }
-
- // $error_code is empty
- return PEAR::raiseError("The expected error you submitted is empty"); // IMPROVE ME
- }
-
- // }}}
- // {{{ raiseError()
-
- /**
- * This method is a wrapper that returns an instance of the
- * configured error class with this object's default error
- * handling applied. If the $mode and $options parameters are not
- * specified, the object's defaults are used.
- *
- * @param mixed $message a text error message or a PEAR error object
- *
- * @param int $code a numeric error code (it is up to your class
- * to define these if you want to use codes)
- *
- * @param int $mode One of PEAR_ERROR_RETURN, PEAR_ERROR_PRINT,
- * PEAR_ERROR_TRIGGER, PEAR_ERROR_DIE,
- * PEAR_ERROR_CALLBACK, PEAR_ERROR_EXCEPTION.
- *
- * @param mixed $options If $mode is PEAR_ERROR_TRIGGER, this parameter
- * specifies the PHP-internal error level (one of
- * E_USER_NOTICE, E_USER_WARNING or E_USER_ERROR).
- * If $mode is PEAR_ERROR_CALLBACK, this
- * parameter specifies the callback function or
- * method. In other error modes this parameter
- * is ignored.
- *
- * @param string $userinfo If you need to pass along for example debug
- * information, this parameter is meant for that.
- *
- * @param string $error_class The returned error object will be
- * instantiated from this class, if specified.
- *
- * @param bool $skipmsg If true, raiseError will only pass error codes,
- * the error message parameter will be dropped.
- *
- * @access public
- * @return object a PEAR error object
- * @see PEAR::setErrorHandling
- * @since PHP 4.0.5
- */
- function &raiseError($message = null,
- $code = null,
- $mode = null,
- $options = null,
- $userinfo = null,
- $error_class = null,
- $skipmsg = false)
- {
- // The error is yet a PEAR error object
- if (is_object($message)) {
- $code = $message->getCode();
- $userinfo = $message->getUserInfo();
- $error_class = $message->getType();
- $message->error_message_prefix = '';
- $message = $message->getMessage();
- }
-
- if (isset($this) && isset($this->_expected_errors) && sizeof($this->_expected_errors) > 0 && sizeof($exp = end($this->_expected_errors))) {
- if ($exp[0] == "*" ||
- (is_int(reset($exp)) && in_array($code, $exp)) ||
- (is_string(reset($exp)) && in_array($message, $exp))) {
- $mode = PEAR_ERROR_RETURN;
- }
- }
-
- // No mode given, try global ones
- if ($mode === null) {
- // Class error handler
- if (isset($this) && isset($this->_default_error_mode)) {
- $mode = $this->_default_error_mode;
- $options = $this->_default_error_options;
- // Global error handler
- } elseif (isset($GLOBALS['_PEAR_default_error_mode'])) {
- $mode = $GLOBALS['_PEAR_default_error_mode'];
- $options = $GLOBALS['_PEAR_default_error_options'];
- }
- }
-
- if ($error_class !== null) {
- $ec = $error_class;
- } elseif (isset($this) && isset($this->_error_class)) {
- $ec = $this->_error_class;
- } else {
- $ec = 'PEAR_Error';
- }
-
- if (intval(PHP_VERSION) < 5) {
- // little non-eval hack to fix bug #12147
- include 'PEAR/FixPHP5PEARWarnings.php';
- return $a;
- }
-
- if ($skipmsg) {
- $a = new $ec($code, $mode, $options, $userinfo);
- } else {
- $a = new $ec($message, $code, $mode, $options, $userinfo);
- }
-
- return $a;
- }
-
- // }}}
- // {{{ throwError()
-
- /**
- * Simpler form of raiseError with fewer options. In most cases
- * message, code and userinfo are enough.
- *
- * @param string $message
- *
- */
- function &throwError($message = null,
- $code = null,
- $userinfo = null)
- {
- if (isset($this) && is_a($this, 'PEAR')) {
- $a = &$this->raiseError($message, $code, null, null, $userinfo);
- return $a;
- }
-
- $a = &PEAR::raiseError($message, $code, null, null, $userinfo);
- return $a;
- }
-
- // }}}
- function staticPushErrorHandling($mode, $options = null)
- {
- $stack = &$GLOBALS['_PEAR_error_handler_stack'];
- $def_mode = &$GLOBALS['_PEAR_default_error_mode'];
- $def_options = &$GLOBALS['_PEAR_default_error_options'];
- $stack[] = array($def_mode, $def_options);
- switch ($mode) {
- case PEAR_ERROR_EXCEPTION:
- case PEAR_ERROR_RETURN:
- case PEAR_ERROR_PRINT:
- case PEAR_ERROR_TRIGGER:
- case PEAR_ERROR_DIE:
- case null:
- $def_mode = $mode;
- $def_options = $options;
- break;
-
- case PEAR_ERROR_CALLBACK:
- $def_mode = $mode;
- // class/object method callback
- if (is_callable($options)) {
- $def_options = $options;
- } else {
- trigger_error("invalid error callback", E_USER_WARNING);
- }
- break;
-
- default:
- trigger_error("invalid error mode", E_USER_WARNING);
- break;
- }
- $stack[] = array($mode, $options);
- return true;
- }
-
- function staticPopErrorHandling()
- {
- $stack = &$GLOBALS['_PEAR_error_handler_stack'];
- $setmode = &$GLOBALS['_PEAR_default_error_mode'];
- $setoptions = &$GLOBALS['_PEAR_default_error_options'];
- array_pop($stack);
- list($mode, $options) = $stack[sizeof($stack) - 1];
- array_pop($stack);
- switch ($mode) {
- case PEAR_ERROR_EXCEPTION:
- case PEAR_ERROR_RETURN:
- case PEAR_ERROR_PRINT:
- case PEAR_ERROR_TRIGGER:
- case PEAR_ERROR_DIE:
- case null:
- $setmode = $mode;
- $setoptions = $options;
- break;
-
- case PEAR_ERROR_CALLBACK:
- $setmode = $mode;
- // class/object method callback
- if (is_callable($options)) {
- $setoptions = $options;
- } else {
- trigger_error("invalid error callback", E_USER_WARNING);
- }
- break;
-
- default:
- trigger_error("invalid error mode", E_USER_WARNING);
- break;
- }
- return true;
- }
-
- // {{{ pushErrorHandling()
-
- /**
- * Push a new error handler on top of the error handler options stack. With this
- * you can easily override the actual error handler for some code and restore
- * it later with popErrorHandling.
- *
- * @param mixed $mode (same as setErrorHandling)
- * @param mixed $options (same as setErrorHandling)
- *
- * @return bool Always true
- *
- * @see PEAR::setErrorHandling
- */
- function pushErrorHandling($mode, $options = null)
- {
- $stack = &$GLOBALS['_PEAR_error_handler_stack'];
- if (isset($this) && is_a($this, 'PEAR')) {
- $def_mode = &$this->_default_error_mode;
- $def_options = &$this->_default_error_options;
- } else {
- $def_mode = &$GLOBALS['_PEAR_default_error_mode'];
- $def_options = &$GLOBALS['_PEAR_default_error_options'];
- }
- $stack[] = array($def_mode, $def_options);
-
- if (isset($this) && is_a($this, 'PEAR')) {
- $this->setErrorHandling($mode, $options);
- } else {
- PEAR::setErrorHandling($mode, $options);
- }
- $stack[] = array($mode, $options);
- return true;
- }
-
- // }}}
- // {{{ popErrorHandling()
-
- /**
- * Pop the last error handler used
- *
- * @return bool Always true
- *
- * @see PEAR::pushErrorHandling
- */
- function popErrorHandling()
- {
- $stack = &$GLOBALS['_PEAR_error_handler_stack'];
- array_pop($stack);
- list($mode, $options) = $stack[sizeof($stack) - 1];
- array_pop($stack);
- if (isset($this) && is_a($this, 'PEAR')) {
- $this->setErrorHandling($mode, $options);
- } else {
- PEAR::setErrorHandling($mode, $options);
- }
- return true;
- }
-
- // }}}
- // {{{ loadExtension()
-
- /**
- * OS independant PHP extension load. Remember to take care
- * on the correct extension name for case sensitive OSes.
- *
- * @param string $ext The extension name
- * @return bool Success or not on the dl() call
- */
- function loadExtension($ext)
- {
- if (!extension_loaded($ext)) {
- // if either returns true dl() will produce a FATAL error, stop that
- if ((ini_get('enable_dl') != 1) || (ini_get('safe_mode') == 1)) {
- return false;
- }
-
- if (OS_WINDOWS) {
- $suffix = '.dll';
- } elseif (PHP_OS == 'HP-UX') {
- $suffix = '.sl';
- } elseif (PHP_OS == 'AIX') {
- $suffix = '.a';
- } elseif (PHP_OS == 'OSX') {
- $suffix = '.bundle';
- } else {
- $suffix = '.so';
- }
-
- return @dl('php_'.$ext.$suffix) || @dl($ext.$suffix);
- }
-
- return true;
- }
-
- // }}}
-}
-
-if (PEAR_ZE2) {
- include_once 'PEAR5.php';
-}
-
-// {{{ _PEAR_call_destructors()
-
-function _PEAR_call_destructors()
-{
- global $_PEAR_destructor_object_list;
- if (is_array($_PEAR_destructor_object_list) &&
- sizeof($_PEAR_destructor_object_list))
- {
- reset($_PEAR_destructor_object_list);
- if (PEAR_ZE2) {
- $destructLifoExists = PEAR5::getStaticProperty('PEAR', 'destructlifo');
- } else {
- $destructLifoExists = PEAR::getStaticProperty('PEAR', 'destructlifo');
- }
-
- if ($destructLifoExists) {
- $_PEAR_destructor_object_list = array_reverse($_PEAR_destructor_object_list);
- }
-
- while (list($k, $objref) = each($_PEAR_destructor_object_list)) {
- $classname = get_class($objref);
- while ($classname) {
- $destructor = "_$classname";
- if (method_exists($objref, $destructor)) {
- $objref->$destructor();
- break;
- } else {
- $classname = get_parent_class($classname);
- }
- }
- }
- // Empty the object list to ensure that destructors are
- // not called more than once.
- $_PEAR_destructor_object_list = array();
- }
-
- // Now call the shutdown functions
- if (isset($GLOBALS['_PEAR_shutdown_funcs']) AND is_array($GLOBALS['_PEAR_shutdown_funcs']) AND !empty($GLOBALS['_PEAR_shutdown_funcs'])) {
- foreach ($GLOBALS['_PEAR_shutdown_funcs'] as $value) {
- call_user_func_array($value[0], $value[1]);
- }
- }
-}
-
-// }}}
-/**
- * Standard PEAR error class for PHP 4
- *
- * This class is supserseded by {@link PEAR_Exception} in PHP 5
- *
- * @category pear
- * @package PEAR
- * @author Stig Bakken <ssb@php.net>
- * @author Tomas V.V. Cox <cox@idecnet.com>
- * @author Gregory Beaver <cellog@php.net>
- * @copyright 1997-2006 The PHP Group
- * @license http://opensource.org/licenses/bsd-license.php New BSD License
- * @version Release: 1.9.0
- * @link http://pear.php.net/manual/en/core.pear.pear-error.php
- * @see PEAR::raiseError(), PEAR::throwError()
- * @since Class available since PHP 4.0.2
- */
-class PEAR_Error
-{
- // {{{ properties
-
- var $error_message_prefix = '';
- var $mode = PEAR_ERROR_RETURN;
- var $level = E_USER_NOTICE;
- var $code = -1;
- var $message = '';
- var $userinfo = '';
- var $backtrace = null;
-
- // }}}
- // {{{ constructor
-
- /**
- * PEAR_Error constructor
- *
- * @param string $message message
- *
- * @param int $code (optional) error code
- *
- * @param int $mode (optional) error mode, one of: PEAR_ERROR_RETURN,
- * PEAR_ERROR_PRINT, PEAR_ERROR_DIE, PEAR_ERROR_TRIGGER,
- * PEAR_ERROR_CALLBACK or PEAR_ERROR_EXCEPTION
- *
- * @param mixed $options (optional) error level, _OR_ in the case of
- * PEAR_ERROR_CALLBACK, the callback function or object/method
- * tuple.
- *
- * @param string $userinfo (optional) additional user/debug info
- *
- * @access public
- *
- */
- function PEAR_Error($message = 'unknown error', $code = null,
- $mode = null, $options = null, $userinfo = null)
- {
- if ($mode === null) {
- $mode = PEAR_ERROR_RETURN;
- }
- $this->message = $message;
- $this->code = $code;
- $this->mode = $mode;
- $this->userinfo = $userinfo;
-
- if (PEAR_ZE2) {
- $skiptrace = PEAR5::getStaticProperty('PEAR_Error', 'skiptrace');
- } else {
- $skiptrace = PEAR::getStaticProperty('PEAR_Error', 'skiptrace');
- }
-
- if (!$skiptrace) {
- $this->backtrace = debug_backtrace();
- if (isset($this->backtrace[0]) && isset($this->backtrace[0]['object'])) {
- unset($this->backtrace[0]['object']);
- }
- }
-
- if ($mode & PEAR_ERROR_CALLBACK) {
- $this->level = E_USER_NOTICE;
- $this->callback = $options;
- } else {
- if ($options === null) {
- $options = E_USER_NOTICE;
- }
-
- $this->level = $options;
- $this->callback = null;
- }
-
- if ($this->mode & PEAR_ERROR_PRINT) {
- if (is_null($options) || is_int($options)) {
- $format = "%s";
- } else {
- $format = $options;
- }
-
- printf($format, $this->getMessage());
- }
-
- if ($this->mode & PEAR_ERROR_TRIGGER) {
- trigger_error($this->getMessage(), $this->level);
- }
-
- if ($this->mode & PEAR_ERROR_DIE) {
- $msg = $this->getMessage();
- if (is_null($options) || is_int($options)) {
- $format = "%s";
- if (substr($msg, -1) != "\n") {
- $msg .= "\n";
- }
- } else {
- $format = $options;
- }
- die(sprintf($format, $msg));
- }
-
- if ($this->mode & PEAR_ERROR_CALLBACK) {
- if (is_callable($this->callback)) {
- call_user_func($this->callback, $this);
- }
- }
-
- if ($this->mode & PEAR_ERROR_EXCEPTION) {
- trigger_error("PEAR_ERROR_EXCEPTION is obsolete, use class PEAR_Exception for exceptions", E_USER_WARNING);
- eval('$e = new Exception($this->message, $this->code);throw($e);');
- }
- }
-
- // }}}
- // {{{ getMode()
-
- /**
- * Get the error mode from an error object.
- *
- * @return int error mode
- * @access public
- */
- function getMode() {
- return $this->mode;
- }
-
- // }}}
- // {{{ getCallback()
-
- /**
- * Get the callback function/method from an error object.
- *
- * @return mixed callback function or object/method array
- * @access public
- */
- function getCallback() {
- return $this->callback;
- }
-
- // }}}
- // {{{ getMessage()
-
-
- /**
- * Get the error message from an error object.
- *
- * @return string full error message
- * @access public
- */
- function getMessage()
- {
- return ($this->error_message_prefix . $this->message);
- }
-
-
- // }}}
- // {{{ getCode()
-
- /**
- * Get error code from an error object
- *
- * @return int error code
- * @access public
- */
- function getCode()
- {
- return $this->code;
- }
-
- // }}}
- // {{{ getType()
-
- /**
- * Get the name of this error/exception.
- *
- * @return string error/exception name (type)
- * @access public
- */
- function getType()
- {
- return get_class($this);
- }
-
- // }}}
- // {{{ getUserInfo()
-
- /**
- * Get additional user-supplied information.
- *
- * @return string user-supplied information
- * @access public
- */
- function getUserInfo()
- {
- return $this->userinfo;
- }
-
- // }}}
- // {{{ getDebugInfo()
-
- /**
- * Get additional debug information supplied by the application.
- *
- * @return string debug information
- * @access public
- */
- function getDebugInfo()
- {
- return $this->getUserInfo();
- }
-
- // }}}
- // {{{ getBacktrace()
-
- /**
- * Get the call backtrace from where the error was generated.
- * Supported with PHP 4.3.0 or newer.
- *
- * @param int $frame (optional) what frame to fetch
- * @return array Backtrace, or NULL if not available.
- * @access public
- */
- function getBacktrace($frame = null)
- {
- if (defined('PEAR_IGNORE_BACKTRACE')) {
- return null;
- }
- if ($frame === null) {
- return $this->backtrace;
- }
- return $this->backtrace[$frame];
- }
-
- // }}}
- // {{{ addUserInfo()
-
- function addUserInfo($info)
- {
- if (empty($this->userinfo)) {
- $this->userinfo = $info;
- } else {
- $this->userinfo .= " ** $info";
- }
- }
-
- // }}}
- // {{{ toString()
- function __toString()
- {
- return $this->getMessage();
- }
- // }}}
- // {{{ toString()
-
- /**
- * Make a string representation of this object.
- *
- * @return string a string with an object summary
- * @access public
- */
- function toString() {
- $modes = array();
- $levels = array(E_USER_NOTICE => 'notice',
- E_USER_WARNING => 'warning',
- E_USER_ERROR => 'error');
- if ($this->mode & PEAR_ERROR_CALLBACK) {
- if (is_array($this->callback)) {
- $callback = (is_object($this->callback[0]) ?
- strtolower(get_class($this->callback[0])) :
- $this->callback[0]) . '::' .
- $this->callback[1];
- } else {
- $callback = $this->callback;
- }
- return sprintf('[%s: message="%s" code=%d mode=callback '.
- 'callback=%s prefix="%s" info="%s"]',
- strtolower(get_class($this)), $this->message, $this->code,
- $callback, $this->error_message_prefix,
- $this->userinfo);
- }
- if ($this->mode & PEAR_ERROR_PRINT) {
- $modes[] = 'print';
- }
- if ($this->mode & PEAR_ERROR_TRIGGER) {
- $modes[] = 'trigger';
- }
- if ($this->mode & PEAR_ERROR_DIE) {
- $modes[] = 'die';
- }
- if ($this->mode & PEAR_ERROR_RETURN) {
- $modes[] = 'return';
- }
- return sprintf('[%s: message="%s" code=%d mode=%s level=%s '.
- 'prefix="%s" info="%s"]',
- strtolower(get_class($this)), $this->message, $this->code,
- implode("|", $modes), $levels[$this->level],
- $this->error_message_prefix,
- $this->userinfo);
- }
-
- // }}}
-}
-
-/*
- * Local Variables:
- * mode: php
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- */
diff --git a/program/lib/PEAR5.php b/program/lib/PEAR5.php
deleted file mode 100644
index 428606780..000000000
--- a/program/lib/PEAR5.php
+++ /dev/null
@@ -1,33 +0,0 @@
-<?php
-/**
- * This is only meant for PHP 5 to get rid of certain strict warning
- * that doesn't get hidden since it's in the shutdown function
- */
-class PEAR5
-{
- /**
- * If you have a class that's mostly/entirely static, and you need static
- * properties, you can use this method to simulate them. Eg. in your method(s)
- * do this: $myVar = &PEAR5::getStaticProperty('myclass', 'myVar');
- * You MUST use a reference, or they will not persist!
- *
- * @access public
- * @param string $class The calling classname, to prevent clashes
- * @param string $var The variable to retrieve.
- * @return mixed A reference to the variable. If not set it will be
- * auto initialised to NULL.
- */
- static function &getStaticProperty($class, $var)
- {
- static $properties;
- if (!isset($properties[$class])) {
- $properties[$class] = array();
- }
-
- if (!array_key_exists($var, $properties[$class])) {
- $properties[$class][$var] = null;
- }
-
- return $properties[$class][$var];
- }
-} \ No newline at end of file
diff --git a/program/lib/Roundcube/bootstrap.php b/program/lib/Roundcube/bootstrap.php
index 65ef98ebd..0aa5cb1de 100644
--- a/program/lib/Roundcube/bootstrap.php
+++ b/program/lib/Roundcube/bootstrap.php
@@ -464,16 +464,14 @@ function rcube_autoload($classname)
'/Net_(.+)/',
'/Auth_(.+)/',
'/^html_.+/',
- '/^rcube(.*)/',
- '/^utf8$/',
+ '/^rcube(.*)/'
),
array(
'Mail/\\1',
'Net/\\1',
'Auth/\\1',
'Roundcube/html',
- 'Roundcube/rcube\\1',
- 'utf8.class',
+ 'Roundcube/rcube\\1'
),
$classname
);
diff --git a/program/lib/Roundcube/rcube_charset.php b/program/lib/Roundcube/rcube_charset.php
index ffec67376..d6ca3c052 100644
--- a/program/lib/Roundcube/rcube_charset.php
+++ b/program/lib/Roundcube/rcube_charset.php
@@ -273,17 +273,8 @@ class rcube_charset
else if ($from == 'ISO-8859-1' && function_exists('utf8_encode')) {
return utf8_encode($str);
}
- else if (class_exists('utf8')) {
- if (!$conv) {
- $conv = new utf8($from);
- }
- else {
- $conv->loadCharset($from);
- }
-
- if ($_str = $conv->strToUtf8($str)) {
- return $_str;
- }
+ else {
+ user_error("No suitable function found for UTF-8 encoding", E_USER_WARNING);
}
}
@@ -298,17 +289,8 @@ class rcube_charset
else if ($to == 'ISO-8859-1' && function_exists('utf8_decode')) {
return utf8_decode($str);
}
- else if (class_exists('utf8')) {
- if (!$conv) {
- $conv = new utf8($to);
- }
- else {
- $conv->loadCharset($from);
- }
-
- if ($_str = $conv->strToUtf8($str)) {
- return $_str;
- }
+ else {
+ user_error("No suitable function found for UTF-8 decoding", E_USER_WARNING);
}
}
diff --git a/program/lib/encoding/CP1250.map b/program/lib/encoding/CP1250.map
deleted file mode 100644
index 081d7763b..000000000
--- a/program/lib/encoding/CP1250.map
+++ /dev/null
@@ -1,274 +0,0 @@
-#
-# Name: cp1250 to Unicode table
-# Unicode version: 2.0
-# Table version: 2.01
-# Table format: Format A
-# Date: 04/15/98
-#
-# Contact: cpxlate@microsoft.com
-#
-# General notes: none
-#
-# Format: Three tab-separated columns
-# Column #1 is the cp1250 code (in hex)
-# Column #2 is the Unicode (in hex as 0xXXXX)
-# Column #3 is the Unicode name (follows a comment sign, '#')
-#
-# The entries are in cp1250 order
-#
-0x00 0x0000 #NULL
-0x01 0x0001 #START OF HEADING
-0x02 0x0002 #START OF TEXT
-0x03 0x0003 #END OF TEXT
-0x04 0x0004 #END OF TRANSMISSION
-0x05 0x0005 #ENQUIRY
-0x06 0x0006 #ACKNOWLEDGE
-0x07 0x0007 #BELL
-0x08 0x0008 #BACKSPACE
-0x09 0x0009 #HORIZONTAL TABULATION
-0x0A 0x000A #LINE FEED
-0x0B 0x000B #VERTICAL TABULATION
-0x0C 0x000C #FORM FEED
-0x0D 0x000D #CARRIAGE RETURN
-0x0E 0x000E #SHIFT OUT
-0x0F 0x000F #SHIFT IN
-0x10 0x0010 #DATA LINK ESCAPE
-0x11 0x0011 #DEVICE CONTROL ONE
-0x12 0x0012 #DEVICE CONTROL TWO
-0x13 0x0013 #DEVICE CONTROL THREE
-0x14 0x0014 #DEVICE CONTROL FOUR
-0x15 0x0015 #NEGATIVE ACKNOWLEDGE
-0x16 0x0016 #SYNCHRONOUS IDLE
-0x17 0x0017 #END OF TRANSMISSION BLOCK
-0x18 0x0018 #CANCEL
-0x19 0x0019 #END OF MEDIUM
-0x1A 0x001A #SUBSTITUTE
-0x1B 0x001B #ESCAPE
-0x1C 0x001C #FILE SEPARATOR
-0x1D 0x001D #GROUP SEPARATOR
-0x1E 0x001E #RECORD SEPARATOR
-0x1F 0x001F #UNIT SEPARATOR
-0x20 0x0020 #SPACE
-0x21 0x0021 #EXCLAMATION MARK
-0x22 0x0022 #QUOTATION MARK
-0x23 0x0023 #NUMBER SIGN
-0x24 0x0024 #DOLLAR SIGN
-0x25 0x0025 #PERCENT SIGN
-0x26 0x0026 #AMPERSAND
-0x27 0x0027 #APOSTROPHE
-0x28 0x0028 #LEFT PARENTHESIS
-0x29 0x0029 #RIGHT PARENTHESIS
-0x2A 0x002A #ASTERISK
-0x2B 0x002B #PLUS SIGN
-0x2C 0x002C #COMMA
-0x2D 0x002D #HYPHEN-MINUS
-0x2E 0x002E #FULL STOP
-0x2F 0x002F #SOLIDUS
-0x30 0x0030 #DIGIT ZERO
-0x31 0x0031 #DIGIT ONE
-0x32 0x0032 #DIGIT TWO
-0x33 0x0033 #DIGIT THREE
-0x34 0x0034 #DIGIT FOUR
-0x35 0x0035 #DIGIT FIVE
-0x36 0x0036 #DIGIT SIX
-0x37 0x0037 #DIGIT SEVEN
-0x38 0x0038 #DIGIT EIGHT
-0x39 0x0039 #DIGIT NINE
-0x3A 0x003A #COLON
-0x3B 0x003B #SEMICOLON
-0x3C 0x003C #LESS-THAN SIGN
-0x3D 0x003D #EQUALS SIGN
-0x3E 0x003E #GREATER-THAN SIGN
-0x3F 0x003F #QUESTION MARK
-0x40 0x0040 #COMMERCIAL AT
-0x41 0x0041 #LATIN CAPITAL LETTER A
-0x42 0x0042 #LATIN CAPITAL LETTER B
-0x43 0x0043 #LATIN CAPITAL LETTER C
-0x44 0x0044 #LATIN CAPITAL LETTER D
-0x45 0x0045 #LATIN CAPITAL LETTER E
-0x46 0x0046 #LATIN CAPITAL LETTER F
-0x47 0x0047 #LATIN CAPITAL LETTER G
-0x48 0x0048 #LATIN CAPITAL LETTER H
-0x49 0x0049 #LATIN CAPITAL LETTER I
-0x4A 0x004A #LATIN CAPITAL LETTER J
-0x4B 0x004B #LATIN CAPITAL LETTER K
-0x4C 0x004C #LATIN CAPITAL LETTER L
-0x4D 0x004D #LATIN CAPITAL LETTER M
-0x4E 0x004E #LATIN CAPITAL LETTER N
-0x4F 0x004F #LATIN CAPITAL LETTER O
-0x50 0x0050 #LATIN CAPITAL LETTER P
-0x51 0x0051 #LATIN CAPITAL LETTER Q
-0x52 0x0052 #LATIN CAPITAL LETTER R
-0x53 0x0053 #LATIN CAPITAL LETTER S
-0x54 0x0054 #LATIN CAPITAL LETTER T
-0x55 0x0055 #LATIN CAPITAL LETTER U
-0x56 0x0056 #LATIN CAPITAL LETTER V
-0x57 0x0057 #LATIN CAPITAL LETTER W
-0x58 0x0058 #LATIN CAPITAL LETTER X
-0x59 0x0059 #LATIN CAPITAL LETTER Y
-0x5A 0x005A #LATIN CAPITAL LETTER Z
-0x5B 0x005B #LEFT SQUARE BRACKET
-0x5C 0x005C #REVERSE SOLIDUS
-0x5D 0x005D #RIGHT SQUARE BRACKET
-0x5E 0x005E #CIRCUMFLEX ACCENT
-0x5F 0x005F #LOW LINE
-0x60 0x0060 #GRAVE ACCENT
-0x61 0x0061 #LATIN SMALL LETTER A
-0x62 0x0062 #LATIN SMALL LETTER B
-0x63 0x0063 #LATIN SMALL LETTER C
-0x64 0x0064 #LATIN SMALL LETTER D
-0x65 0x0065 #LATIN SMALL LETTER E
-0x66 0x0066 #LATIN SMALL LETTER F
-0x67 0x0067 #LATIN SMALL LETTER G
-0x68 0x0068 #LATIN SMALL LETTER H
-0x69 0x0069 #LATIN SMALL LETTER I
-0x6A 0x006A #LATIN SMALL LETTER J
-0x6B 0x006B #LATIN SMALL LETTER K
-0x6C 0x006C #LATIN SMALL LETTER L
-0x6D 0x006D #LATIN SMALL LETTER M
-0x6E 0x006E #LATIN SMALL LETTER N
-0x6F 0x006F #LATIN SMALL LETTER O
-0x70 0x0070 #LATIN SMALL LETTER P
-0x71 0x0071 #LATIN SMALL LETTER Q
-0x72 0x0072 #LATIN SMALL LETTER R
-0x73 0x0073 #LATIN SMALL LETTER S
-0x74 0x0074 #LATIN SMALL LETTER T
-0x75 0x0075 #LATIN SMALL LETTER U
-0x76 0x0076 #LATIN SMALL LETTER V
-0x77 0x0077 #LATIN SMALL LETTER W
-0x78 0x0078 #LATIN SMALL LETTER X
-0x79 0x0079 #LATIN SMALL LETTER Y
-0x7A 0x007A #LATIN SMALL LETTER Z
-0x7B 0x007B #LEFT CURLY BRACKET
-0x7C 0x007C #VERTICAL LINE
-0x7D 0x007D #RIGHT CURLY BRACKET
-0x7E 0x007E #TILDE
-0x7F 0x007F #DELETE
-0x80 0x20AC #EURO SIGN
-0x81 #UNDEFINED
-0x82 0x201A #SINGLE LOW-9 QUOTATION MARK
-0x83 #UNDEFINED
-0x84 0x201E #DOUBLE LOW-9 QUOTATION MARK
-0x85 0x2026 #HORIZONTAL ELLIPSIS
-0x86 0x2020 #DAGGER
-0x87 0x2021 #DOUBLE DAGGER
-0x88 #UNDEFINED
-0x89 0x2030 #PER MILLE SIGN
-0x8A 0x0160 #LATIN CAPITAL LETTER S WITH CARON
-0x8B 0x2039 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK
-0x8C 0x015A #LATIN CAPITAL LETTER S WITH ACUTE
-0x8D 0x0164 #LATIN CAPITAL LETTER T WITH CARON
-0x8E 0x017D #LATIN CAPITAL LETTER Z WITH CARON
-0x8F 0x0179 #LATIN CAPITAL LETTER Z WITH ACUTE
-0x90 #UNDEFINED
-0x91 0x2018 #LEFT SINGLE QUOTATION MARK
-0x92 0x2019 #RIGHT SINGLE QUOTATION MARK
-0x93 0x201C #LEFT DOUBLE QUOTATION MARK
-0x94 0x201D #RIGHT DOUBLE QUOTATION MARK
-0x95 0x2022 #BULLET
-0x96 0x2013 #EN DASH
-0x97 0x2014 #EM DASH
-0x98 #UNDEFINED
-0x99 0x2122 #TRADE MARK SIGN
-0x9A 0x0161 #LATIN SMALL LETTER S WITH CARON
-0x9B 0x203A #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
-0x9C 0x015B #LATIN SMALL LETTER S WITH ACUTE
-0x9D 0x0165 #LATIN SMALL LETTER T WITH CARON
-0x9E 0x017E #LATIN SMALL LETTER Z WITH CARON
-0x9F 0x017A #LATIN SMALL LETTER Z WITH ACUTE
-0xA0 0x00A0 #NO-BREAK SPACE
-0xA1 0x02C7 #CARON
-0xA2 0x02D8 #BREVE
-0xA3 0x0141 #LATIN CAPITAL LETTER L WITH STROKE
-0xA4 0x00A4 #CURRENCY SIGN
-0xA5 0x0104 #LATIN CAPITAL LETTER A WITH OGONEK
-0xA6 0x00A6 #BROKEN BAR
-0xA7 0x00A7 #SECTION SIGN
-0xA8 0x00A8 #DIAERESIS
-0xA9 0x00A9 #COPYRIGHT SIGN
-0xAA 0x015E #LATIN CAPITAL LETTER S WITH CEDILLA
-0xAB 0x00AB #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-0xAC 0x00AC #NOT SIGN
-0xAD 0x00AD #SOFT HYPHEN
-0xAE 0x00AE #REGISTERED SIGN
-0xAF 0x017B #LATIN CAPITAL LETTER Z WITH DOT ABOVE
-0xB0 0x00B0 #DEGREE SIGN
-0xB1 0x00B1 #PLUS-MINUS SIGN
-0xB2 0x02DB #OGONEK
-0xB3 0x0142 #LATIN SMALL LETTER L WITH STROKE
-0xB4 0x00B4 #ACUTE ACCENT
-0xB5 0x00B5 #MICRO SIGN
-0xB6 0x00B6 #PILCROW SIGN
-0xB7 0x00B7 #MIDDLE DOT
-0xB8 0x00B8 #CEDILLA
-0xB9 0x0105 #LATIN SMALL LETTER A WITH OGONEK
-0xBA 0x015F #LATIN SMALL LETTER S WITH CEDILLA
-0xBB 0x00BB #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-0xBC 0x013D #LATIN CAPITAL LETTER L WITH CARON
-0xBD 0x02DD #DOUBLE ACUTE ACCENT
-0xBE 0x013E #LATIN SMALL LETTER L WITH CARON
-0xBF 0x017C #LATIN SMALL LETTER Z WITH DOT ABOVE
-0xC0 0x0154 #LATIN CAPITAL LETTER R WITH ACUTE
-0xC1 0x00C1 #LATIN CAPITAL LETTER A WITH ACUTE
-0xC2 0x00C2 #LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-0xC3 0x0102 #LATIN CAPITAL LETTER A WITH BREVE
-0xC4 0x00C4 #LATIN CAPITAL LETTER A WITH DIAERESIS
-0xC5 0x0139 #LATIN CAPITAL LETTER L WITH ACUTE
-0xC6 0x0106 #LATIN CAPITAL LETTER C WITH ACUTE
-0xC7 0x00C7 #LATIN CAPITAL LETTER C WITH CEDILLA
-0xC8 0x010C #LATIN CAPITAL LETTER C WITH CARON
-0xC9 0x00C9 #LATIN CAPITAL LETTER E WITH ACUTE
-0xCA 0x0118 #LATIN CAPITAL LETTER E WITH OGONEK
-0xCB 0x00CB #LATIN CAPITAL LETTER E WITH DIAERESIS
-0xCC 0x011A #LATIN CAPITAL LETTER E WITH CARON
-0xCD 0x00CD #LATIN CAPITAL LETTER I WITH ACUTE
-0xCE 0x00CE #LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-0xCF 0x010E #LATIN CAPITAL LETTER D WITH CARON
-0xD0 0x0110 #LATIN CAPITAL LETTER D WITH STROKE
-0xD1 0x0143 #LATIN CAPITAL LETTER N WITH ACUTE
-0xD2 0x0147 #LATIN CAPITAL LETTER N WITH CARON
-0xD3 0x00D3 #LATIN CAPITAL LETTER O WITH ACUTE
-0xD4 0x00D4 #LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-0xD5 0x0150 #LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
-0xD6 0x00D6 #LATIN CAPITAL LETTER O WITH DIAERESIS
-0xD7 0x00D7 #MULTIPLICATION SIGN
-0xD8 0x0158 #LATIN CAPITAL LETTER R WITH CARON
-0xD9 0x016E #LATIN CAPITAL LETTER U WITH RING ABOVE
-0xDA 0x00DA #LATIN CAPITAL LETTER U WITH ACUTE
-0xDB 0x0170 #LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
-0xDC 0x00DC #LATIN CAPITAL LETTER U WITH DIAERESIS
-0xDD 0x00DD #LATIN CAPITAL LETTER Y WITH ACUTE
-0xDE 0x0162 #LATIN CAPITAL LETTER T WITH CEDILLA
-0xDF 0x00DF #LATIN SMALL LETTER SHARP S
-0xE0 0x0155 #LATIN SMALL LETTER R WITH ACUTE
-0xE1 0x00E1 #LATIN SMALL LETTER A WITH ACUTE
-0xE2 0x00E2 #LATIN SMALL LETTER A WITH CIRCUMFLEX
-0xE3 0x0103 #LATIN SMALL LETTER A WITH BREVE
-0xE4 0x00E4 #LATIN SMALL LETTER A WITH DIAERESIS
-0xE5 0x013A #LATIN SMALL LETTER L WITH ACUTE
-0xE6 0x0107 #LATIN SMALL LETTER C WITH ACUTE
-0xE7 0x00E7 #LATIN SMALL LETTER C WITH CEDILLA
-0xE8 0x010D #LATIN SMALL LETTER C WITH CARON
-0xE9 0x00E9 #LATIN SMALL LETTER E WITH ACUTE
-0xEA 0x0119 #LATIN SMALL LETTER E WITH OGONEK
-0xEB 0x00EB #LATIN SMALL LETTER E WITH DIAERESIS
-0xEC 0x011B #LATIN SMALL LETTER E WITH CARON
-0xED 0x00ED #LATIN SMALL LETTER I WITH ACUTE
-0xEE 0x00EE #LATIN SMALL LETTER I WITH CIRCUMFLEX
-0xEF 0x010F #LATIN SMALL LETTER D WITH CARON
-0xF0 0x0111 #LATIN SMALL LETTER D WITH STROKE
-0xF1 0x0144 #LATIN SMALL LETTER N WITH ACUTE
-0xF2 0x0148 #LATIN SMALL LETTER N WITH CARON
-0xF3 0x00F3 #LATIN SMALL LETTER O WITH ACUTE
-0xF4 0x00F4 #LATIN SMALL LETTER O WITH CIRCUMFLEX
-0xF5 0x0151 #LATIN SMALL LETTER O WITH DOUBLE ACUTE
-0xF6 0x00F6 #LATIN SMALL LETTER O WITH DIAERESIS
-0xF7 0x00F7 #DIVISION SIGN
-0xF8 0x0159 #LATIN SMALL LETTER R WITH CARON
-0xF9 0x016F #LATIN SMALL LETTER U WITH RING ABOVE
-0xFA 0x00FA #LATIN SMALL LETTER U WITH ACUTE
-0xFB 0x0171 #LATIN SMALL LETTER U WITH DOUBLE ACUTE
-0xFC 0x00FC #LATIN SMALL LETTER U WITH DIAERESIS
-0xFD 0x00FD #LATIN SMALL LETTER Y WITH ACUTE
-0xFE 0x0163 #LATIN SMALL LETTER T WITH CEDILLA
-0xFF 0x02D9 #DOT ABOVE
diff --git a/program/lib/encoding/CP1251.map b/program/lib/encoding/CP1251.map
deleted file mode 100644
index e7d4f2c5b..000000000
--- a/program/lib/encoding/CP1251.map
+++ /dev/null
@@ -1,274 +0,0 @@
-#
-# Name: cp1251 to Unicode table
-# Unicode version: 2.0
-# Table version: 2.01
-# Table format: Format A
-# Date: 04/15/98
-#
-# Contact: cpxlate@microsoft.com
-#
-# General notes: none
-#
-# Format: Three tab-separated columns
-# Column #1 is the cp1251 code (in hex)
-# Column #2 is the Unicode (in hex as 0xXXXX)
-# Column #3 is the Unicode name (follows a comment sign, '#')
-#
-# The entries are in cp1251 order
-#
-0x00 0x0000 #NULL
-0x01 0x0001 #START OF HEADING
-0x02 0x0002 #START OF TEXT
-0x03 0x0003 #END OF TEXT
-0x04 0x0004 #END OF TRANSMISSION
-0x05 0x0005 #ENQUIRY
-0x06 0x0006 #ACKNOWLEDGE
-0x07 0x0007 #BELL
-0x08 0x0008 #BACKSPACE
-0x09 0x0009 #HORIZONTAL TABULATION
-0x0A 0x000A #LINE FEED
-0x0B 0x000B #VERTICAL TABULATION
-0x0C 0x000C #FORM FEED
-0x0D 0x000D #CARRIAGE RETURN
-0x0E 0x000E #SHIFT OUT
-0x0F 0x000F #SHIFT IN
-0x10 0x0010 #DATA LINK ESCAPE
-0x11 0x0011 #DEVICE CONTROL ONE
-0x12 0x0012 #DEVICE CONTROL TWO
-0x13 0x0013 #DEVICE CONTROL THREE
-0x14 0x0014 #DEVICE CONTROL FOUR
-0x15 0x0015 #NEGATIVE ACKNOWLEDGE
-0x16 0x0016 #SYNCHRONOUS IDLE
-0x17 0x0017 #END OF TRANSMISSION BLOCK
-0x18 0x0018 #CANCEL
-0x19 0x0019 #END OF MEDIUM
-0x1A 0x001A #SUBSTITUTE
-0x1B 0x001B #ESCAPE
-0x1C 0x001C #FILE SEPARATOR
-0x1D 0x001D #GROUP SEPARATOR
-0x1E 0x001E #RECORD SEPARATOR
-0x1F 0x001F #UNIT SEPARATOR
-0x20 0x0020 #SPACE
-0x21 0x0021 #EXCLAMATION MARK
-0x22 0x0022 #QUOTATION MARK
-0x23 0x0023 #NUMBER SIGN
-0x24 0x0024 #DOLLAR SIGN
-0x25 0x0025 #PERCENT SIGN
-0x26 0x0026 #AMPERSAND
-0x27 0x0027 #APOSTROPHE
-0x28 0x0028 #LEFT PARENTHESIS
-0x29 0x0029 #RIGHT PARENTHESIS
-0x2A 0x002A #ASTERISK
-0x2B 0x002B #PLUS SIGN
-0x2C 0x002C #COMMA
-0x2D 0x002D #HYPHEN-MINUS
-0x2E 0x002E #FULL STOP
-0x2F 0x002F #SOLIDUS
-0x30 0x0030 #DIGIT ZERO
-0x31 0x0031 #DIGIT ONE
-0x32 0x0032 #DIGIT TWO
-0x33 0x0033 #DIGIT THREE
-0x34 0x0034 #DIGIT FOUR
-0x35 0x0035 #DIGIT FIVE
-0x36 0x0036 #DIGIT SIX
-0x37 0x0037 #DIGIT SEVEN
-0x38 0x0038 #DIGIT EIGHT
-0x39 0x0039 #DIGIT NINE
-0x3A 0x003A #COLON
-0x3B 0x003B #SEMICOLON
-0x3C 0x003C #LESS-THAN SIGN
-0x3D 0x003D #EQUALS SIGN
-0x3E 0x003E #GREATER-THAN SIGN
-0x3F 0x003F #QUESTION MARK
-0x40 0x0040 #COMMERCIAL AT
-0x41 0x0041 #LATIN CAPITAL LETTER A
-0x42 0x0042 #LATIN CAPITAL LETTER B
-0x43 0x0043 #LATIN CAPITAL LETTER C
-0x44 0x0044 #LATIN CAPITAL LETTER D
-0x45 0x0045 #LATIN CAPITAL LETTER E
-0x46 0x0046 #LATIN CAPITAL LETTER F
-0x47 0x0047 #LATIN CAPITAL LETTER G
-0x48 0x0048 #LATIN CAPITAL LETTER H
-0x49 0x0049 #LATIN CAPITAL LETTER I
-0x4A 0x004A #LATIN CAPITAL LETTER J
-0x4B 0x004B #LATIN CAPITAL LETTER K
-0x4C 0x004C #LATIN CAPITAL LETTER L
-0x4D 0x004D #LATIN CAPITAL LETTER M
-0x4E 0x004E #LATIN CAPITAL LETTER N
-0x4F 0x004F #LATIN CAPITAL LETTER O
-0x50 0x0050 #LATIN CAPITAL LETTER P
-0x51 0x0051 #LATIN CAPITAL LETTER Q
-0x52 0x0052 #LATIN CAPITAL LETTER R
-0x53 0x0053 #LATIN CAPITAL LETTER S
-0x54 0x0054 #LATIN CAPITAL LETTER T
-0x55 0x0055 #LATIN CAPITAL LETTER U
-0x56 0x0056 #LATIN CAPITAL LETTER V
-0x57 0x0057 #LATIN CAPITAL LETTER W
-0x58 0x0058 #LATIN CAPITAL LETTER X
-0x59 0x0059 #LATIN CAPITAL LETTER Y
-0x5A 0x005A #LATIN CAPITAL LETTER Z
-0x5B 0x005B #LEFT SQUARE BRACKET
-0x5C 0x005C #REVERSE SOLIDUS
-0x5D 0x005D #RIGHT SQUARE BRACKET
-0x5E 0x005E #CIRCUMFLEX ACCENT
-0x5F 0x005F #LOW LINE
-0x60 0x0060 #GRAVE ACCENT
-0x61 0x0061 #LATIN SMALL LETTER A
-0x62 0x0062 #LATIN SMALL LETTER B
-0x63 0x0063 #LATIN SMALL LETTER C
-0x64 0x0064 #LATIN SMALL LETTER D
-0x65 0x0065 #LATIN SMALL LETTER E
-0x66 0x0066 #LATIN SMALL LETTER F
-0x67 0x0067 #LATIN SMALL LETTER G
-0x68 0x0068 #LATIN SMALL LETTER H
-0x69 0x0069 #LATIN SMALL LETTER I
-0x6A 0x006A #LATIN SMALL LETTER J
-0x6B 0x006B #LATIN SMALL LETTER K
-0x6C 0x006C #LATIN SMALL LETTER L
-0x6D 0x006D #LATIN SMALL LETTER M
-0x6E 0x006E #LATIN SMALL LETTER N
-0x6F 0x006F #LATIN SMALL LETTER O
-0x70 0x0070 #LATIN SMALL LETTER P
-0x71 0x0071 #LATIN SMALL LETTER Q
-0x72 0x0072 #LATIN SMALL LETTER R
-0x73 0x0073 #LATIN SMALL LETTER S
-0x74 0x0074 #LATIN SMALL LETTER T
-0x75 0x0075 #LATIN SMALL LETTER U
-0x76 0x0076 #LATIN SMALL LETTER V
-0x77 0x0077 #LATIN SMALL LETTER W
-0x78 0x0078 #LATIN SMALL LETTER X
-0x79 0x0079 #LATIN SMALL LETTER Y
-0x7A 0x007A #LATIN SMALL LETTER Z
-0x7B 0x007B #LEFT CURLY BRACKET
-0x7C 0x007C #VERTICAL LINE
-0x7D 0x007D #RIGHT CURLY BRACKET
-0x7E 0x007E #TILDE
-0x7F 0x007F #DELETE
-0x80 0x0402 #CYRILLIC CAPITAL LETTER DJE
-0x81 0x0403 #CYRILLIC CAPITAL LETTER GJE
-0x82 0x201A #SINGLE LOW-9 QUOTATION MARK
-0x83 0x0453 #CYRILLIC SMALL LETTER GJE
-0x84 0x201E #DOUBLE LOW-9 QUOTATION MARK
-0x85 0x2026 #HORIZONTAL ELLIPSIS
-0x86 0x2020 #DAGGER
-0x87 0x2021 #DOUBLE DAGGER
-0x88 0x20AC #EURO SIGN
-0x89 0x2030 #PER MILLE SIGN
-0x8A 0x0409 #CYRILLIC CAPITAL LETTER LJE
-0x8B 0x2039 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK
-0x8C 0x040A #CYRILLIC CAPITAL LETTER NJE
-0x8D 0x040C #CYRILLIC CAPITAL LETTER KJE
-0x8E 0x040B #CYRILLIC CAPITAL LETTER TSHE
-0x8F 0x040F #CYRILLIC CAPITAL LETTER DZHE
-0x90 0x0452 #CYRILLIC SMALL LETTER DJE
-0x91 0x2018 #LEFT SINGLE QUOTATION MARK
-0x92 0x2019 #RIGHT SINGLE QUOTATION MARK
-0x93 0x201C #LEFT DOUBLE QUOTATION MARK
-0x94 0x201D #RIGHT DOUBLE QUOTATION MARK
-0x95 0x2022 #BULLET
-0x96 0x2013 #EN DASH
-0x97 0x2014 #EM DASH
-0x98 #UNDEFINED
-0x99 0x2122 #TRADE MARK SIGN
-0x9A 0x0459 #CYRILLIC SMALL LETTER LJE
-0x9B 0x203A #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
-0x9C 0x045A #CYRILLIC SMALL LETTER NJE
-0x9D 0x045C #CYRILLIC SMALL LETTER KJE
-0x9E 0x045B #CYRILLIC SMALL LETTER TSHE
-0x9F 0x045F #CYRILLIC SMALL LETTER DZHE
-0xA0 0x00A0 #NO-BREAK SPACE
-0xA1 0x040E #CYRILLIC CAPITAL LETTER SHORT U
-0xA2 0x045E #CYRILLIC SMALL LETTER SHORT U
-0xA3 0x0408 #CYRILLIC CAPITAL LETTER JE
-0xA4 0x00A4 #CURRENCY SIGN
-0xA5 0x0490 #CYRILLIC CAPITAL LETTER GHE WITH UPTURN
-0xA6 0x00A6 #BROKEN BAR
-0xA7 0x00A7 #SECTION SIGN
-0xA8 0x0401 #CYRILLIC CAPITAL LETTER IO
-0xA9 0x00A9 #COPYRIGHT SIGN
-0xAA 0x0404 #CYRILLIC CAPITAL LETTER UKRAINIAN IE
-0xAB 0x00AB #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-0xAC 0x00AC #NOT SIGN
-0xAD 0x00AD #SOFT HYPHEN
-0xAE 0x00AE #REGISTERED SIGN
-0xAF 0x0407 #CYRILLIC CAPITAL LETTER YI
-0xB0 0x00B0 #DEGREE SIGN
-0xB1 0x00B1 #PLUS-MINUS SIGN
-0xB2 0x0406 #CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
-0xB3 0x0456 #CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
-0xB4 0x0491 #CYRILLIC SMALL LETTER GHE WITH UPTURN
-0xB5 0x00B5 #MICRO SIGN
-0xB6 0x00B6 #PILCROW SIGN
-0xB7 0x00B7 #MIDDLE DOT
-0xB8 0x0451 #CYRILLIC SMALL LETTER IO
-0xB9 0x2116 #NUMERO SIGN
-0xBA 0x0454 #CYRILLIC SMALL LETTER UKRAINIAN IE
-0xBB 0x00BB #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-0xBC 0x0458 #CYRILLIC SMALL LETTER JE
-0xBD 0x0405 #CYRILLIC CAPITAL LETTER DZE
-0xBE 0x0455 #CYRILLIC SMALL LETTER DZE
-0xBF 0x0457 #CYRILLIC SMALL LETTER YI
-0xC0 0x0410 #CYRILLIC CAPITAL LETTER A
-0xC1 0x0411 #CYRILLIC CAPITAL LETTER BE
-0xC2 0x0412 #CYRILLIC CAPITAL LETTER VE
-0xC3 0x0413 #CYRILLIC CAPITAL LETTER GHE
-0xC4 0x0414 #CYRILLIC CAPITAL LETTER DE
-0xC5 0x0415 #CYRILLIC CAPITAL LETTER IE
-0xC6 0x0416 #CYRILLIC CAPITAL LETTER ZHE
-0xC7 0x0417 #CYRILLIC CAPITAL LETTER ZE
-0xC8 0x0418 #CYRILLIC CAPITAL LETTER I
-0xC9 0x0419 #CYRILLIC CAPITAL LETTER SHORT I
-0xCA 0x041A #CYRILLIC CAPITAL LETTER KA
-0xCB 0x041B #CYRILLIC CAPITAL LETTER EL
-0xCC 0x041C #CYRILLIC CAPITAL LETTER EM
-0xCD 0x041D #CYRILLIC CAPITAL LETTER EN
-0xCE 0x041E #CYRILLIC CAPITAL LETTER O
-0xCF 0x041F #CYRILLIC CAPITAL LETTER PE
-0xD0 0x0420 #CYRILLIC CAPITAL LETTER ER
-0xD1 0x0421 #CYRILLIC CAPITAL LETTER ES
-0xD2 0x0422 #CYRILLIC CAPITAL LETTER TE
-0xD3 0x0423 #CYRILLIC CAPITAL LETTER U
-0xD4 0x0424 #CYRILLIC CAPITAL LETTER EF
-0xD5 0x0425 #CYRILLIC CAPITAL LETTER HA
-0xD6 0x0426 #CYRILLIC CAPITAL LETTER TSE
-0xD7 0x0427 #CYRILLIC CAPITAL LETTER CHE
-0xD8 0x0428 #CYRILLIC CAPITAL LETTER SHA
-0xD9 0x0429 #CYRILLIC CAPITAL LETTER SHCHA
-0xDA 0x042A #CYRILLIC CAPITAL LETTER HARD SIGN
-0xDB 0x042B #CYRILLIC CAPITAL LETTER YERU
-0xDC 0x042C #CYRILLIC CAPITAL LETTER SOFT SIGN
-0xDD 0x042D #CYRILLIC CAPITAL LETTER E
-0xDE 0x042E #CYRILLIC CAPITAL LETTER YU
-0xDF 0x042F #CYRILLIC CAPITAL LETTER YA
-0xE0 0x0430 #CYRILLIC SMALL LETTER A
-0xE1 0x0431 #CYRILLIC SMALL LETTER BE
-0xE2 0x0432 #CYRILLIC SMALL LETTER VE
-0xE3 0x0433 #CYRILLIC SMALL LETTER GHE
-0xE4 0x0434 #CYRILLIC SMALL LETTER DE
-0xE5 0x0435 #CYRILLIC SMALL LETTER IE
-0xE6 0x0436 #CYRILLIC SMALL LETTER ZHE
-0xE7 0x0437 #CYRILLIC SMALL LETTER ZE
-0xE8 0x0438 #CYRILLIC SMALL LETTER I
-0xE9 0x0439 #CYRILLIC SMALL LETTER SHORT I
-0xEA 0x043A #CYRILLIC SMALL LETTER KA
-0xEB 0x043B #CYRILLIC SMALL LETTER EL
-0xEC 0x043C #CYRILLIC SMALL LETTER EM
-0xED 0x043D #CYRILLIC SMALL LETTER EN
-0xEE 0x043E #CYRILLIC SMALL LETTER O
-0xEF 0x043F #CYRILLIC SMALL LETTER PE
-0xF0 0x0440 #CYRILLIC SMALL LETTER ER
-0xF1 0x0441 #CYRILLIC SMALL LETTER ES
-0xF2 0x0442 #CYRILLIC SMALL LETTER TE
-0xF3 0x0443 #CYRILLIC SMALL LETTER U
-0xF4 0x0444 #CYRILLIC SMALL LETTER EF
-0xF5 0x0445 #CYRILLIC SMALL LETTER HA
-0xF6 0x0446 #CYRILLIC SMALL LETTER TSE
-0xF7 0x0447 #CYRILLIC SMALL LETTER CHE
-0xF8 0x0448 #CYRILLIC SMALL LETTER SHA
-0xF9 0x0449 #CYRILLIC SMALL LETTER SHCHA
-0xFA 0x044A #CYRILLIC SMALL LETTER HARD SIGN
-0xFB 0x044B #CYRILLIC SMALL LETTER YERU
-0xFC 0x044C #CYRILLIC SMALL LETTER SOFT SIGN
-0xFD 0x044D #CYRILLIC SMALL LETTER E
-0xFE 0x044E #CYRILLIC SMALL LETTER YU
-0xFF 0x044F #CYRILLIC SMALL LETTER YA
diff --git a/program/lib/encoding/CP1252.map b/program/lib/encoding/CP1252.map
deleted file mode 100644
index 2ca4486eb..000000000
--- a/program/lib/encoding/CP1252.map
+++ /dev/null
@@ -1,274 +0,0 @@
-#
-# Name: cp1252 to Unicode table
-# Unicode version: 2.0
-# Table version: 2.01
-# Table format: Format A
-# Date: 04/15/98
-#
-# Contact: cpxlate@microsoft.com
-#
-# General notes: none
-#
-# Format: Three tab-separated columns
-# Column #1 is the cp1252 code (in hex)
-# Column #2 is the Unicode (in hex as 0xXXXX)
-# Column #3 is the Unicode name (follows a comment sign, '#')
-#
-# The entries are in cp1252 order
-#
-0x00 0x0000 #NULL
-0x01 0x0001 #START OF HEADING
-0x02 0x0002 #START OF TEXT
-0x03 0x0003 #END OF TEXT
-0x04 0x0004 #END OF TRANSMISSION
-0x05 0x0005 #ENQUIRY
-0x06 0x0006 #ACKNOWLEDGE
-0x07 0x0007 #BELL
-0x08 0x0008 #BACKSPACE
-0x09 0x0009 #HORIZONTAL TABULATION
-0x0A 0x000A #LINE FEED
-0x0B 0x000B #VERTICAL TABULATION
-0x0C 0x000C #FORM FEED
-0x0D 0x000D #CARRIAGE RETURN
-0x0E 0x000E #SHIFT OUT
-0x0F 0x000F #SHIFT IN
-0x10 0x0010 #DATA LINK ESCAPE
-0x11 0x0011 #DEVICE CONTROL ONE
-0x12 0x0012 #DEVICE CONTROL TWO
-0x13 0x0013 #DEVICE CONTROL THREE
-0x14 0x0014 #DEVICE CONTROL FOUR
-0x15 0x0015 #NEGATIVE ACKNOWLEDGE
-0x16 0x0016 #SYNCHRONOUS IDLE
-0x17 0x0017 #END OF TRANSMISSION BLOCK
-0x18 0x0018 #CANCEL
-0x19 0x0019 #END OF MEDIUM
-0x1A 0x001A #SUBSTITUTE
-0x1B 0x001B #ESCAPE
-0x1C 0x001C #FILE SEPARATOR
-0x1D 0x001D #GROUP SEPARATOR
-0x1E 0x001E #RECORD SEPARATOR
-0x1F 0x001F #UNIT SEPARATOR
-0x20 0x0020 #SPACE
-0x21 0x0021 #EXCLAMATION MARK
-0x22 0x0022 #QUOTATION MARK
-0x23 0x0023 #NUMBER SIGN
-0x24 0x0024 #DOLLAR SIGN
-0x25 0x0025 #PERCENT SIGN
-0x26 0x0026 #AMPERSAND
-0x27 0x0027 #APOSTROPHE
-0x28 0x0028 #LEFT PARENTHESIS
-0x29 0x0029 #RIGHT PARENTHESIS
-0x2A 0x002A #ASTERISK
-0x2B 0x002B #PLUS SIGN
-0x2C 0x002C #COMMA
-0x2D 0x002D #HYPHEN-MINUS
-0x2E 0x002E #FULL STOP
-0x2F 0x002F #SOLIDUS
-0x30 0x0030 #DIGIT ZERO
-0x31 0x0031 #DIGIT ONE
-0x32 0x0032 #DIGIT TWO
-0x33 0x0033 #DIGIT THREE
-0x34 0x0034 #DIGIT FOUR
-0x35 0x0035 #DIGIT FIVE
-0x36 0x0036 #DIGIT SIX
-0x37 0x0037 #DIGIT SEVEN
-0x38 0x0038 #DIGIT EIGHT
-0x39 0x0039 #DIGIT NINE
-0x3A 0x003A #COLON
-0x3B 0x003B #SEMICOLON
-0x3C 0x003C #LESS-THAN SIGN
-0x3D 0x003D #EQUALS SIGN
-0x3E 0x003E #GREATER-THAN SIGN
-0x3F 0x003F #QUESTION MARK
-0x40 0x0040 #COMMERCIAL AT
-0x41 0x0041 #LATIN CAPITAL LETTER A
-0x42 0x0042 #LATIN CAPITAL LETTER B
-0x43 0x0043 #LATIN CAPITAL LETTER C
-0x44 0x0044 #LATIN CAPITAL LETTER D
-0x45 0x0045 #LATIN CAPITAL LETTER E
-0x46 0x0046 #LATIN CAPITAL LETTER F
-0x47 0x0047 #LATIN CAPITAL LETTER G
-0x48 0x0048 #LATIN CAPITAL LETTER H
-0x49 0x0049 #LATIN CAPITAL LETTER I
-0x4A 0x004A #LATIN CAPITAL LETTER J
-0x4B 0x004B #LATIN CAPITAL LETTER K
-0x4C 0x004C #LATIN CAPITAL LETTER L
-0x4D 0x004D #LATIN CAPITAL LETTER M
-0x4E 0x004E #LATIN CAPITAL LETTER N
-0x4F 0x004F #LATIN CAPITAL LETTER O
-0x50 0x0050 #LATIN CAPITAL LETTER P
-0x51 0x0051 #LATIN CAPITAL LETTER Q
-0x52 0x0052 #LATIN CAPITAL LETTER R
-0x53 0x0053 #LATIN CAPITAL LETTER S
-0x54 0x0054 #LATIN CAPITAL LETTER T
-0x55 0x0055 #LATIN CAPITAL LETTER U
-0x56 0x0056 #LATIN CAPITAL LETTER V
-0x57 0x0057 #LATIN CAPITAL LETTER W
-0x58 0x0058 #LATIN CAPITAL LETTER X
-0x59 0x0059 #LATIN CAPITAL LETTER Y
-0x5A 0x005A #LATIN CAPITAL LETTER Z
-0x5B 0x005B #LEFT SQUARE BRACKET
-0x5C 0x005C #REVERSE SOLIDUS
-0x5D 0x005D #RIGHT SQUARE BRACKET
-0x5E 0x005E #CIRCUMFLEX ACCENT
-0x5F 0x005F #LOW LINE
-0x60 0x0060 #GRAVE ACCENT
-0x61 0x0061 #LATIN SMALL LETTER A
-0x62 0x0062 #LATIN SMALL LETTER B
-0x63 0x0063 #LATIN SMALL LETTER C
-0x64 0x0064 #LATIN SMALL LETTER D
-0x65 0x0065 #LATIN SMALL LETTER E
-0x66 0x0066 #LATIN SMALL LETTER F
-0x67 0x0067 #LATIN SMALL LETTER G
-0x68 0x0068 #LATIN SMALL LETTER H
-0x69 0x0069 #LATIN SMALL LETTER I
-0x6A 0x006A #LATIN SMALL LETTER J
-0x6B 0x006B #LATIN SMALL LETTER K
-0x6C 0x006C #LATIN SMALL LETTER L
-0x6D 0x006D #LATIN SMALL LETTER M
-0x6E 0x006E #LATIN SMALL LETTER N
-0x6F 0x006F #LATIN SMALL LETTER O
-0x70 0x0070 #LATIN SMALL LETTER P
-0x71 0x0071 #LATIN SMALL LETTER Q
-0x72 0x0072 #LATIN SMALL LETTER R
-0x73 0x0073 #LATIN SMALL LETTER S
-0x74 0x0074 #LATIN SMALL LETTER T
-0x75 0x0075 #LATIN SMALL LETTER U
-0x76 0x0076 #LATIN SMALL LETTER V
-0x77 0x0077 #LATIN SMALL LETTER W
-0x78 0x0078 #LATIN SMALL LETTER X
-0x79 0x0079 #LATIN SMALL LETTER Y
-0x7A 0x007A #LATIN SMALL LETTER Z
-0x7B 0x007B #LEFT CURLY BRACKET
-0x7C 0x007C #VERTICAL LINE
-0x7D 0x007D #RIGHT CURLY BRACKET
-0x7E 0x007E #TILDE
-0x7F 0x007F #DELETE
-0x80 0x20AC #EURO SIGN
-0x81 #UNDEFINED
-0x82 0x201A #SINGLE LOW-9 QUOTATION MARK
-0x83 0x0192 #LATIN SMALL LETTER F WITH HOOK
-0x84 0x201E #DOUBLE LOW-9 QUOTATION MARK
-0x85 0x2026 #HORIZONTAL ELLIPSIS
-0x86 0x2020 #DAGGER
-0x87 0x2021 #DOUBLE DAGGER
-0x88 0x02C6 #MODIFIER LETTER CIRCUMFLEX ACCENT
-0x89 0x2030 #PER MILLE SIGN
-0x8A 0x0160 #LATIN CAPITAL LETTER S WITH CARON
-0x8B 0x2039 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK
-0x8C 0x0152 #LATIN CAPITAL LIGATURE OE
-0x8D #UNDEFINED
-0x8E 0x017D #LATIN CAPITAL LETTER Z WITH CARON
-0x8F #UNDEFINED
-0x90 #UNDEFINED
-0x91 0x2018 #LEFT SINGLE QUOTATION MARK
-0x92 0x2019 #RIGHT SINGLE QUOTATION MARK
-0x93 0x201C #LEFT DOUBLE QUOTATION MARK
-0x94 0x201D #RIGHT DOUBLE QUOTATION MARK
-0x95 0x2022 #BULLET
-0x96 0x2013 #EN DASH
-0x97 0x2014 #EM DASH
-0x98 0x02DC #SMALL TILDE
-0x99 0x2122 #TRADE MARK SIGN
-0x9A 0x0161 #LATIN SMALL LETTER S WITH CARON
-0x9B 0x203A #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
-0x9C 0x0153 #LATIN SMALL LIGATURE OE
-0x9D #UNDEFINED
-0x9E 0x017E #LATIN SMALL LETTER Z WITH CARON
-0x9F 0x0178 #LATIN CAPITAL LETTER Y WITH DIAERESIS
-0xA0 0x00A0 #NO-BREAK SPACE
-0xA1 0x00A1 #INVERTED EXCLAMATION MARK
-0xA2 0x00A2 #CENT SIGN
-0xA3 0x00A3 #POUND SIGN
-0xA4 0x00A4 #CURRENCY SIGN
-0xA5 0x00A5 #YEN SIGN
-0xA6 0x00A6 #BROKEN BAR
-0xA7 0x00A7 #SECTION SIGN
-0xA8 0x00A8 #DIAERESIS
-0xA9 0x00A9 #COPYRIGHT SIGN
-0xAA 0x00AA #FEMININE ORDINAL INDICATOR
-0xAB 0x00AB #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-0xAC 0x00AC #NOT SIGN
-0xAD 0x00AD #SOFT HYPHEN
-0xAE 0x00AE #REGISTERED SIGN
-0xAF 0x00AF #MACRON
-0xB0 0x00B0 #DEGREE SIGN
-0xB1 0x00B1 #PLUS-MINUS SIGN
-0xB2 0x00B2 #SUPERSCRIPT TWO
-0xB3 0x00B3 #SUPERSCRIPT THREE
-0xB4 0x00B4 #ACUTE ACCENT
-0xB5 0x00B5 #MICRO SIGN
-0xB6 0x00B6 #PILCROW SIGN
-0xB7 0x00B7 #MIDDLE DOT
-0xB8 0x00B8 #CEDILLA
-0xB9 0x00B9 #SUPERSCRIPT ONE
-0xBA 0x00BA #MASCULINE ORDINAL INDICATOR
-0xBB 0x00BB #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-0xBC 0x00BC #VULGAR FRACTION ONE QUARTER
-0xBD 0x00BD #VULGAR FRACTION ONE HALF
-0xBE 0x00BE #VULGAR FRACTION THREE QUARTERS
-0xBF 0x00BF #INVERTED QUESTION MARK
-0xC0 0x00C0 #LATIN CAPITAL LETTER A WITH GRAVE
-0xC1 0x00C1 #LATIN CAPITAL LETTER A WITH ACUTE
-0xC2 0x00C2 #LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-0xC3 0x00C3 #LATIN CAPITAL LETTER A WITH TILDE
-0xC4 0x00C4 #LATIN CAPITAL LETTER A WITH DIAERESIS
-0xC5 0x00C5 #LATIN CAPITAL LETTER A WITH RING ABOVE
-0xC6 0x00C6 #LATIN CAPITAL LETTER AE
-0xC7 0x00C7 #LATIN CAPITAL LETTER C WITH CEDILLA
-0xC8 0x00C8 #LATIN CAPITAL LETTER E WITH GRAVE
-0xC9 0x00C9 #LATIN CAPITAL LETTER E WITH ACUTE
-0xCA 0x00CA #LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-0xCB 0x00CB #LATIN CAPITAL LETTER E WITH DIAERESIS
-0xCC 0x00CC #LATIN CAPITAL LETTER I WITH GRAVE
-0xCD 0x00CD #LATIN CAPITAL LETTER I WITH ACUTE
-0xCE 0x00CE #LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-0xCF 0x00CF #LATIN CAPITAL LETTER I WITH DIAERESIS
-0xD0 0x00D0 #LATIN CAPITAL LETTER ETH
-0xD1 0x00D1 #LATIN CAPITAL LETTER N WITH TILDE
-0xD2 0x00D2 #LATIN CAPITAL LETTER O WITH GRAVE
-0xD3 0x00D3 #LATIN CAPITAL LETTER O WITH ACUTE
-0xD4 0x00D4 #LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-0xD5 0x00D5 #LATIN CAPITAL LETTER O WITH TILDE
-0xD6 0x00D6 #LATIN CAPITAL LETTER O WITH DIAERESIS
-0xD7 0x00D7 #MULTIPLICATION SIGN
-0xD8 0x00D8 #LATIN CAPITAL LETTER O WITH STROKE
-0xD9 0x00D9 #LATIN CAPITAL LETTER U WITH GRAVE
-0xDA 0x00DA #LATIN CAPITAL LETTER U WITH ACUTE
-0xDB 0x00DB #LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-0xDC 0x00DC #LATIN CAPITAL LETTER U WITH DIAERESIS
-0xDD 0x00DD #LATIN CAPITAL LETTER Y WITH ACUTE
-0xDE 0x00DE #LATIN CAPITAL LETTER THORN
-0xDF 0x00DF #LATIN SMALL LETTER SHARP S
-0xE0 0x00E0 #LATIN SMALL LETTER A WITH GRAVE
-0xE1 0x00E1 #LATIN SMALL LETTER A WITH ACUTE
-0xE2 0x00E2 #LATIN SMALL LETTER A WITH CIRCUMFLEX
-0xE3 0x00E3 #LATIN SMALL LETTER A WITH TILDE
-0xE4 0x00E4 #LATIN SMALL LETTER A WITH DIAERESIS
-0xE5 0x00E5 #LATIN SMALL LETTER A WITH RING ABOVE
-0xE6 0x00E6 #LATIN SMALL LETTER AE
-0xE7 0x00E7 #LATIN SMALL LETTER C WITH CEDILLA
-0xE8 0x00E8 #LATIN SMALL LETTER E WITH GRAVE
-0xE9 0x00E9 #LATIN SMALL LETTER E WITH ACUTE
-0xEA 0x00EA #LATIN SMALL LETTER E WITH CIRCUMFLEX
-0xEB 0x00EB #LATIN SMALL LETTER E WITH DIAERESIS
-0xEC 0x00EC #LATIN SMALL LETTER I WITH GRAVE
-0xED 0x00ED #LATIN SMALL LETTER I WITH ACUTE
-0xEE 0x00EE #LATIN SMALL LETTER I WITH CIRCUMFLEX
-0xEF 0x00EF #LATIN SMALL LETTER I WITH DIAERESIS
-0xF0 0x00F0 #LATIN SMALL LETTER ETH
-0xF1 0x00F1 #LATIN SMALL LETTER N WITH TILDE
-0xF2 0x00F2 #LATIN SMALL LETTER O WITH GRAVE
-0xF3 0x00F3 #LATIN SMALL LETTER O WITH ACUTE
-0xF4 0x00F4 #LATIN SMALL LETTER O WITH CIRCUMFLEX
-0xF5 0x00F5 #LATIN SMALL LETTER O WITH TILDE
-0xF6 0x00F6 #LATIN SMALL LETTER O WITH DIAERESIS
-0xF7 0x00F7 #DIVISION SIGN
-0xF8 0x00F8 #LATIN SMALL LETTER O WITH STROKE
-0xF9 0x00F9 #LATIN SMALL LETTER U WITH GRAVE
-0xFA 0x00FA #LATIN SMALL LETTER U WITH ACUTE
-0xFB 0x00FB #LATIN SMALL LETTER U WITH CIRCUMFLEX
-0xFC 0x00FC #LATIN SMALL LETTER U WITH DIAERESIS
-0xFD 0x00FD #LATIN SMALL LETTER Y WITH ACUTE
-0xFE 0x00FE #LATIN SMALL LETTER THORN
-0xFF 0x00FF #LATIN SMALL LETTER Y WITH DIAERESIS
diff --git a/program/lib/encoding/CP1253.map b/program/lib/encoding/CP1253.map
deleted file mode 100644
index 2ba51a0c8..000000000
--- a/program/lib/encoding/CP1253.map
+++ /dev/null
@@ -1,274 +0,0 @@
-#
-# Name: cp1253 to Unicode table
-# Unicode version: 2.0
-# Table version: 2.01
-# Table format: Format A
-# Date: 04/15/98
-#
-# Contact: cpxlate@microsoft.com
-#
-# General notes: none
-#
-# Format: Three tab-separated columns
-# Column #1 is the cp1253 code (in hex)
-# Column #2 is the Unicode (in hex as 0xXXXX)
-# Column #3 is the Unicode name (follows a comment sign, '#')
-#
-# The entries are in cp1253 order
-#
-0x00 0x0000 #NULL
-0x01 0x0001 #START OF HEADING
-0x02 0x0002 #START OF TEXT
-0x03 0x0003 #END OF TEXT
-0x04 0x0004 #END OF TRANSMISSION
-0x05 0x0005 #ENQUIRY
-0x06 0x0006 #ACKNOWLEDGE
-0x07 0x0007 #BELL
-0x08 0x0008 #BACKSPACE
-0x09 0x0009 #HORIZONTAL TABULATION
-0x0A 0x000A #LINE FEED
-0x0B 0x000B #VERTICAL TABULATION
-0x0C 0x000C #FORM FEED
-0x0D 0x000D #CARRIAGE RETURN
-0x0E 0x000E #SHIFT OUT
-0x0F 0x000F #SHIFT IN
-0x10 0x0010 #DATA LINK ESCAPE
-0x11 0x0011 #DEVICE CONTROL ONE
-0x12 0x0012 #DEVICE CONTROL TWO
-0x13 0x0013 #DEVICE CONTROL THREE
-0x14 0x0014 #DEVICE CONTROL FOUR
-0x15 0x0015 #NEGATIVE ACKNOWLEDGE
-0x16 0x0016 #SYNCHRONOUS IDLE
-0x17 0x0017 #END OF TRANSMISSION BLOCK
-0x18 0x0018 #CANCEL
-0x19 0x0019 #END OF MEDIUM
-0x1A 0x001A #SUBSTITUTE
-0x1B 0x001B #ESCAPE
-0x1C 0x001C #FILE SEPARATOR
-0x1D 0x001D #GROUP SEPARATOR
-0x1E 0x001E #RECORD SEPARATOR
-0x1F 0x001F #UNIT SEPARATOR
-0x20 0x0020 #SPACE
-0x21 0x0021 #EXCLAMATION MARK
-0x22 0x0022 #QUOTATION MARK
-0x23 0x0023 #NUMBER SIGN
-0x24 0x0024 #DOLLAR SIGN
-0x25 0x0025 #PERCENT SIGN
-0x26 0x0026 #AMPERSAND
-0x27 0x0027 #APOSTROPHE
-0x28 0x0028 #LEFT PARENTHESIS
-0x29 0x0029 #RIGHT PARENTHESIS
-0x2A 0x002A #ASTERISK
-0x2B 0x002B #PLUS SIGN
-0x2C 0x002C #COMMA
-0x2D 0x002D #HYPHEN-MINUS
-0x2E 0x002E #FULL STOP
-0x2F 0x002F #SOLIDUS
-0x30 0x0030 #DIGIT ZERO
-0x31 0x0031 #DIGIT ONE
-0x32 0x0032 #DIGIT TWO
-0x33 0x0033 #DIGIT THREE
-0x34 0x0034 #DIGIT FOUR
-0x35 0x0035 #DIGIT FIVE
-0x36 0x0036 #DIGIT SIX
-0x37 0x0037 #DIGIT SEVEN
-0x38 0x0038 #DIGIT EIGHT
-0x39 0x0039 #DIGIT NINE
-0x3A 0x003A #COLON
-0x3B 0x003B #SEMICOLON
-0x3C 0x003C #LESS-THAN SIGN
-0x3D 0x003D #EQUALS SIGN
-0x3E 0x003E #GREATER-THAN SIGN
-0x3F 0x003F #QUESTION MARK
-0x40 0x0040 #COMMERCIAL AT
-0x41 0x0041 #LATIN CAPITAL LETTER A
-0x42 0x0042 #LATIN CAPITAL LETTER B
-0x43 0x0043 #LATIN CAPITAL LETTER C
-0x44 0x0044 #LATIN CAPITAL LETTER D
-0x45 0x0045 #LATIN CAPITAL LETTER E
-0x46 0x0046 #LATIN CAPITAL LETTER F
-0x47 0x0047 #LATIN CAPITAL LETTER G
-0x48 0x0048 #LATIN CAPITAL LETTER H
-0x49 0x0049 #LATIN CAPITAL LETTER I
-0x4A 0x004A #LATIN CAPITAL LETTER J
-0x4B 0x004B #LATIN CAPITAL LETTER K
-0x4C 0x004C #LATIN CAPITAL LETTER L
-0x4D 0x004D #LATIN CAPITAL LETTER M
-0x4E 0x004E #LATIN CAPITAL LETTER N
-0x4F 0x004F #LATIN CAPITAL LETTER O
-0x50 0x0050 #LATIN CAPITAL LETTER P
-0x51 0x0051 #LATIN CAPITAL LETTER Q
-0x52 0x0052 #LATIN CAPITAL LETTER R
-0x53 0x0053 #LATIN CAPITAL LETTER S
-0x54 0x0054 #LATIN CAPITAL LETTER T
-0x55 0x0055 #LATIN CAPITAL LETTER U
-0x56 0x0056 #LATIN CAPITAL LETTER V
-0x57 0x0057 #LATIN CAPITAL LETTER W
-0x58 0x0058 #LATIN CAPITAL LETTER X
-0x59 0x0059 #LATIN CAPITAL LETTER Y
-0x5A 0x005A #LATIN CAPITAL LETTER Z
-0x5B 0x005B #LEFT SQUARE BRACKET
-0x5C 0x005C #REVERSE SOLIDUS
-0x5D 0x005D #RIGHT SQUARE BRACKET
-0x5E 0x005E #CIRCUMFLEX ACCENT
-0x5F 0x005F #LOW LINE
-0x60 0x0060 #GRAVE ACCENT
-0x61 0x0061 #LATIN SMALL LETTER A
-0x62 0x0062 #LATIN SMALL LETTER B
-0x63 0x0063 #LATIN SMALL LETTER C
-0x64 0x0064 #LATIN SMALL LETTER D
-0x65 0x0065 #LATIN SMALL LETTER E
-0x66 0x0066 #LATIN SMALL LETTER F
-0x67 0x0067 #LATIN SMALL LETTER G
-0x68 0x0068 #LATIN SMALL LETTER H
-0x69 0x0069 #LATIN SMALL LETTER I
-0x6A 0x006A #LATIN SMALL LETTER J
-0x6B 0x006B #LATIN SMALL LETTER K
-0x6C 0x006C #LATIN SMALL LETTER L
-0x6D 0x006D #LATIN SMALL LETTER M
-0x6E 0x006E #LATIN SMALL LETTER N
-0x6F 0x006F #LATIN SMALL LETTER O
-0x70 0x0070 #LATIN SMALL LETTER P
-0x71 0x0071 #LATIN SMALL LETTER Q
-0x72 0x0072 #LATIN SMALL LETTER R
-0x73 0x0073 #LATIN SMALL LETTER S
-0x74 0x0074 #LATIN SMALL LETTER T
-0x75 0x0075 #LATIN SMALL LETTER U
-0x76 0x0076 #LATIN SMALL LETTER V
-0x77 0x0077 #LATIN SMALL LETTER W
-0x78 0x0078 #LATIN SMALL LETTER X
-0x79 0x0079 #LATIN SMALL LETTER Y
-0x7A 0x007A #LATIN SMALL LETTER Z
-0x7B 0x007B #LEFT CURLY BRACKET
-0x7C 0x007C #VERTICAL LINE
-0x7D 0x007D #RIGHT CURLY BRACKET
-0x7E 0x007E #TILDE
-0x7F 0x007F #DELETE
-0x80 0x20AC #EURO SIGN
-0x81 #UNDEFINED
-0x82 0x201A #SINGLE LOW-9 QUOTATION MARK
-0x83 0x0192 #LATIN SMALL LETTER F WITH HOOK
-0x84 0x201E #DOUBLE LOW-9 QUOTATION MARK
-0x85 0x2026 #HORIZONTAL ELLIPSIS
-0x86 0x2020 #DAGGER
-0x87 0x2021 #DOUBLE DAGGER
-0x88 #UNDEFINED
-0x89 0x2030 #PER MILLE SIGN
-0x8A #UNDEFINED
-0x8B 0x2039 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK
-0x8C #UNDEFINED
-0x8D #UNDEFINED
-0x8E #UNDEFINED
-0x8F #UNDEFINED
-0x90 #UNDEFINED
-0x91 0x2018 #LEFT SINGLE QUOTATION MARK
-0x92 0x2019 #RIGHT SINGLE QUOTATION MARK
-0x93 0x201C #LEFT DOUBLE QUOTATION MARK
-0x94 0x201D #RIGHT DOUBLE QUOTATION MARK
-0x95 0x2022 #BULLET
-0x96 0x2013 #EN DASH
-0x97 0x2014 #EM DASH
-0x98 #UNDEFINED
-0x99 0x2122 #TRADE MARK SIGN
-0x9A #UNDEFINED
-0x9B 0x203A #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
-0x9C #UNDEFINED
-0x9D #UNDEFINED
-0x9E #UNDEFINED
-0x9F #UNDEFINED
-0xA0 0x00A0 #NO-BREAK SPACE
-0xA1 0x0385 #GREEK DIALYTIKA TONOS
-0xA2 0x0386 #GREEK CAPITAL LETTER ALPHA WITH TONOS
-0xA3 0x00A3 #POUND SIGN
-0xA4 0x00A4 #CURRENCY SIGN
-0xA5 0x00A5 #YEN SIGN
-0xA6 0x00A6 #BROKEN BAR
-0xA7 0x00A7 #SECTION SIGN
-0xA8 0x00A8 #DIAERESIS
-0xA9 0x00A9 #COPYRIGHT SIGN
-0xAA #UNDEFINED
-0xAB 0x00AB #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-0xAC 0x00AC #NOT SIGN
-0xAD 0x00AD #SOFT HYPHEN
-0xAE 0x00AE #REGISTERED SIGN
-0xAF 0x2015 #HORIZONTAL BAR
-0xB0 0x00B0 #DEGREE SIGN
-0xB1 0x00B1 #PLUS-MINUS SIGN
-0xB2 0x00B2 #SUPERSCRIPT TWO
-0xB3 0x00B3 #SUPERSCRIPT THREE
-0xB4 0x0384 #GREEK TONOS
-0xB5 0x00B5 #MICRO SIGN
-0xB6 0x00B6 #PILCROW SIGN
-0xB7 0x00B7 #MIDDLE DOT
-0xB8 0x0388 #GREEK CAPITAL LETTER EPSILON WITH TONOS
-0xB9 0x0389 #GREEK CAPITAL LETTER ETA WITH TONOS
-0xBA 0x038A #GREEK CAPITAL LETTER IOTA WITH TONOS
-0xBB 0x00BB #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-0xBC 0x038C #GREEK CAPITAL LETTER OMICRON WITH TONOS
-0xBD 0x00BD #VULGAR FRACTION ONE HALF
-0xBE 0x038E #GREEK CAPITAL LETTER UPSILON WITH TONOS
-0xBF 0x038F #GREEK CAPITAL LETTER OMEGA WITH TONOS
-0xC0 0x0390 #GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
-0xC1 0x0391 #GREEK CAPITAL LETTER ALPHA
-0xC2 0x0392 #GREEK CAPITAL LETTER BETA
-0xC3 0x0393 #GREEK CAPITAL LETTER GAMMA
-0xC4 0x0394 #GREEK CAPITAL LETTER DELTA
-0xC5 0x0395 #GREEK CAPITAL LETTER EPSILON
-0xC6 0x0396 #GREEK CAPITAL LETTER ZETA
-0xC7 0x0397 #GREEK CAPITAL LETTER ETA
-0xC8 0x0398 #GREEK CAPITAL LETTER THETA
-0xC9 0x0399 #GREEK CAPITAL LETTER IOTA
-0xCA 0x039A #GREEK CAPITAL LETTER KAPPA
-0xCB 0x039B #GREEK CAPITAL LETTER LAMDA
-0xCC 0x039C #GREEK CAPITAL LETTER MU
-0xCD 0x039D #GREEK CAPITAL LETTER NU
-0xCE 0x039E #GREEK CAPITAL LETTER XI
-0xCF 0x039F #GREEK CAPITAL LETTER OMICRON
-0xD0 0x03A0 #GREEK CAPITAL LETTER PI
-0xD1 0x03A1 #GREEK CAPITAL LETTER RHO
-0xD2 #UNDEFINED
-0xD3 0x03A3 #GREEK CAPITAL LETTER SIGMA
-0xD4 0x03A4 #GREEK CAPITAL LETTER TAU
-0xD5 0x03A5 #GREEK CAPITAL LETTER UPSILON
-0xD6 0x03A6 #GREEK CAPITAL LETTER PHI
-0xD7 0x03A7 #GREEK CAPITAL LETTER CHI
-0xD8 0x03A8 #GREEK CAPITAL LETTER PSI
-0xD9 0x03A9 #GREEK CAPITAL LETTER OMEGA
-0xDA 0x03AA #GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
-0xDB 0x03AB #GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
-0xDC 0x03AC #GREEK SMALL LETTER ALPHA WITH TONOS
-0xDD 0x03AD #GREEK SMALL LETTER EPSILON WITH TONOS
-0xDE 0x03AE #GREEK SMALL LETTER ETA WITH TONOS
-0xDF 0x03AF #GREEK SMALL LETTER IOTA WITH TONOS
-0xE0 0x03B0 #GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
-0xE1 0x03B1 #GREEK SMALL LETTER ALPHA
-0xE2 0x03B2 #GREEK SMALL LETTER BETA
-0xE3 0x03B3 #GREEK SMALL LETTER GAMMA
-0xE4 0x03B4 #GREEK SMALL LETTER DELTA
-0xE5 0x03B5 #GREEK SMALL LETTER EPSILON
-0xE6 0x03B6 #GREEK SMALL LETTER ZETA
-0xE7 0x03B7 #GREEK SMALL LETTER ETA
-0xE8 0x03B8 #GREEK SMALL LETTER THETA
-0xE9 0x03B9 #GREEK SMALL LETTER IOTA
-0xEA 0x03BA #GREEK SMALL LETTER KAPPA
-0xEB 0x03BB #GREEK SMALL LETTER LAMDA
-0xEC 0x03BC #GREEK SMALL LETTER MU
-0xED 0x03BD #GREEK SMALL LETTER NU
-0xEE 0x03BE #GREEK SMALL LETTER XI
-0xEF 0x03BF #GREEK SMALL LETTER OMICRON
-0xF0 0x03C0 #GREEK SMALL LETTER PI
-0xF1 0x03C1 #GREEK SMALL LETTER RHO
-0xF2 0x03C2 #GREEK SMALL LETTER FINAL SIGMA
-0xF3 0x03C3 #GREEK SMALL LETTER SIGMA
-0xF4 0x03C4 #GREEK SMALL LETTER TAU
-0xF5 0x03C5 #GREEK SMALL LETTER UPSILON
-0xF6 0x03C6 #GREEK SMALL LETTER PHI
-0xF7 0x03C7 #GREEK SMALL LETTER CHI
-0xF8 0x03C8 #GREEK SMALL LETTER PSI
-0xF9 0x03C9 #GREEK SMALL LETTER OMEGA
-0xFA 0x03CA #GREEK SMALL LETTER IOTA WITH DIALYTIKA
-0xFB 0x03CB #GREEK SMALL LETTER UPSILON WITH DIALYTIKA
-0xFC 0x03CC #GREEK SMALL LETTER OMICRON WITH TONOS
-0xFD 0x03CD #GREEK SMALL LETTER UPSILON WITH TONOS
-0xFE 0x03CE #GREEK SMALL LETTER OMEGA WITH TONOS
-0xFF #UNDEFINED
diff --git a/program/lib/encoding/CP1254.map b/program/lib/encoding/CP1254.map
deleted file mode 100644
index ca1a1ebdb..000000000
--- a/program/lib/encoding/CP1254.map
+++ /dev/null
@@ -1,274 +0,0 @@
-#
-# Name: cp1254 to Unicode table
-# Unicode version: 2.0
-# Table version: 2.01
-# Table format: Format A
-# Date: 04/15/98
-#
-# Contact: cpxlate@microsoft.com
-#
-# General notes: none
-#
-# Format: Three tab-separated columns
-# Column #1 is the cp1254 code (in hex)
-# Column #2 is the Unicode (in hex as 0xXXXX)
-# Column #3 is the Unicode name (follows a comment sign, '#')
-#
-# The entries are in cp1254 order
-#
-0x00 0x0000 #NULL
-0x01 0x0001 #START OF HEADING
-0x02 0x0002 #START OF TEXT
-0x03 0x0003 #END OF TEXT
-0x04 0x0004 #END OF TRANSMISSION
-0x05 0x0005 #ENQUIRY
-0x06 0x0006 #ACKNOWLEDGE
-0x07 0x0007 #BELL
-0x08 0x0008 #BACKSPACE
-0x09 0x0009 #HORIZONTAL TABULATION
-0x0A 0x000A #LINE FEED
-0x0B 0x000B #VERTICAL TABULATION
-0x0C 0x000C #FORM FEED
-0x0D 0x000D #CARRIAGE RETURN
-0x0E 0x000E #SHIFT OUT
-0x0F 0x000F #SHIFT IN
-0x10 0x0010 #DATA LINK ESCAPE
-0x11 0x0011 #DEVICE CONTROL ONE
-0x12 0x0012 #DEVICE CONTROL TWO
-0x13 0x0013 #DEVICE CONTROL THREE
-0x14 0x0014 #DEVICE CONTROL FOUR
-0x15 0x0015 #NEGATIVE ACKNOWLEDGE
-0x16 0x0016 #SYNCHRONOUS IDLE
-0x17 0x0017 #END OF TRANSMISSION BLOCK
-0x18 0x0018 #CANCEL
-0x19 0x0019 #END OF MEDIUM
-0x1A 0x001A #SUBSTITUTE
-0x1B 0x001B #ESCAPE
-0x1C 0x001C #FILE SEPARATOR
-0x1D 0x001D #GROUP SEPARATOR
-0x1E 0x001E #RECORD SEPARATOR
-0x1F 0x001F #UNIT SEPARATOR
-0x20 0x0020 #SPACE
-0x21 0x0021 #EXCLAMATION MARK
-0x22 0x0022 #QUOTATION MARK
-0x23 0x0023 #NUMBER SIGN
-0x24 0x0024 #DOLLAR SIGN
-0x25 0x0025 #PERCENT SIGN
-0x26 0x0026 #AMPERSAND
-0x27 0x0027 #APOSTROPHE
-0x28 0x0028 #LEFT PARENTHESIS
-0x29 0x0029 #RIGHT PARENTHESIS
-0x2A 0x002A #ASTERISK
-0x2B 0x002B #PLUS SIGN
-0x2C 0x002C #COMMA
-0x2D 0x002D #HYPHEN-MINUS
-0x2E 0x002E #FULL STOP
-0x2F 0x002F #SOLIDUS
-0x30 0x0030 #DIGIT ZERO
-0x31 0x0031 #DIGIT ONE
-0x32 0x0032 #DIGIT TWO
-0x33 0x0033 #DIGIT THREE
-0x34 0x0034 #DIGIT FOUR
-0x35 0x0035 #DIGIT FIVE
-0x36 0x0036 #DIGIT SIX
-0x37 0x0037 #DIGIT SEVEN
-0x38 0x0038 #DIGIT EIGHT
-0x39 0x0039 #DIGIT NINE
-0x3A 0x003A #COLON
-0x3B 0x003B #SEMICOLON
-0x3C 0x003C #LESS-THAN SIGN
-0x3D 0x003D #EQUALS SIGN
-0x3E 0x003E #GREATER-THAN SIGN
-0x3F 0x003F #QUESTION MARK
-0x40 0x0040 #COMMERCIAL AT
-0x41 0x0041 #LATIN CAPITAL LETTER A
-0x42 0x0042 #LATIN CAPITAL LETTER B
-0x43 0x0043 #LATIN CAPITAL LETTER C
-0x44 0x0044 #LATIN CAPITAL LETTER D
-0x45 0x0045 #LATIN CAPITAL LETTER E
-0x46 0x0046 #LATIN CAPITAL LETTER F
-0x47 0x0047 #LATIN CAPITAL LETTER G
-0x48 0x0048 #LATIN CAPITAL LETTER H
-0x49 0x0049 #LATIN CAPITAL LETTER I
-0x4A 0x004A #LATIN CAPITAL LETTER J
-0x4B 0x004B #LATIN CAPITAL LETTER K
-0x4C 0x004C #LATIN CAPITAL LETTER L
-0x4D 0x004D #LATIN CAPITAL LETTER M
-0x4E 0x004E #LATIN CAPITAL LETTER N
-0x4F 0x004F #LATIN CAPITAL LETTER O
-0x50 0x0050 #LATIN CAPITAL LETTER P
-0x51 0x0051 #LATIN CAPITAL LETTER Q
-0x52 0x0052 #LATIN CAPITAL LETTER R
-0x53 0x0053 #LATIN CAPITAL LETTER S
-0x54 0x0054 #LATIN CAPITAL LETTER T
-0x55 0x0055 #LATIN CAPITAL LETTER U
-0x56 0x0056 #LATIN CAPITAL LETTER V
-0x57 0x0057 #LATIN CAPITAL LETTER W
-0x58 0x0058 #LATIN CAPITAL LETTER X
-0x59 0x0059 #LATIN CAPITAL LETTER Y
-0x5A 0x005A #LATIN CAPITAL LETTER Z
-0x5B 0x005B #LEFT SQUARE BRACKET
-0x5C 0x005C #REVERSE SOLIDUS
-0x5D 0x005D #RIGHT SQUARE BRACKET
-0x5E 0x005E #CIRCUMFLEX ACCENT
-0x5F 0x005F #LOW LINE
-0x60 0x0060 #GRAVE ACCENT
-0x61 0x0061 #LATIN SMALL LETTER A
-0x62 0x0062 #LATIN SMALL LETTER B
-0x63 0x0063 #LATIN SMALL LETTER C
-0x64 0x0064 #LATIN SMALL LETTER D
-0x65 0x0065 #LATIN SMALL LETTER E
-0x66 0x0066 #LATIN SMALL LETTER F
-0x67 0x0067 #LATIN SMALL LETTER G
-0x68 0x0068 #LATIN SMALL LETTER H
-0x69 0x0069 #LATIN SMALL LETTER I
-0x6A 0x006A #LATIN SMALL LETTER J
-0x6B 0x006B #LATIN SMALL LETTER K
-0x6C 0x006C #LATIN SMALL LETTER L
-0x6D 0x006D #LATIN SMALL LETTER M
-0x6E 0x006E #LATIN SMALL LETTER N
-0x6F 0x006F #LATIN SMALL LETTER O
-0x70 0x0070 #LATIN SMALL LETTER P
-0x71 0x0071 #LATIN SMALL LETTER Q
-0x72 0x0072 #LATIN SMALL LETTER R
-0x73 0x0073 #LATIN SMALL LETTER S
-0x74 0x0074 #LATIN SMALL LETTER T
-0x75 0x0075 #LATIN SMALL LETTER U
-0x76 0x0076 #LATIN SMALL LETTER V
-0x77 0x0077 #LATIN SMALL LETTER W
-0x78 0x0078 #LATIN SMALL LETTER X
-0x79 0x0079 #LATIN SMALL LETTER Y
-0x7A 0x007A #LATIN SMALL LETTER Z
-0x7B 0x007B #LEFT CURLY BRACKET
-0x7C 0x007C #VERTICAL LINE
-0x7D 0x007D #RIGHT CURLY BRACKET
-0x7E 0x007E #TILDE
-0x7F 0x007F #DELETE
-0x80 0x20AC #EURO SIGN
-0x81 #UNDEFINED
-0x82 0x201A #SINGLE LOW-9 QUOTATION MARK
-0x83 0x0192 #LATIN SMALL LETTER F WITH HOOK
-0x84 0x201E #DOUBLE LOW-9 QUOTATION MARK
-0x85 0x2026 #HORIZONTAL ELLIPSIS
-0x86 0x2020 #DAGGER
-0x87 0x2021 #DOUBLE DAGGER
-0x88 0x02C6 #MODIFIER LETTER CIRCUMFLEX ACCENT
-0x89 0x2030 #PER MILLE SIGN
-0x8A 0x0160 #LATIN CAPITAL LETTER S WITH CARON
-0x8B 0x2039 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK
-0x8C 0x0152 #LATIN CAPITAL LIGATURE OE
-0x8D #UNDEFINED
-0x8E #UNDEFINED
-0x8F #UNDEFINED
-0x90 #UNDEFINED
-0x91 0x2018 #LEFT SINGLE QUOTATION MARK
-0x92 0x2019 #RIGHT SINGLE QUOTATION MARK
-0x93 0x201C #LEFT DOUBLE QUOTATION MARK
-0x94 0x201D #RIGHT DOUBLE QUOTATION MARK
-0x95 0x2022 #BULLET
-0x96 0x2013 #EN DASH
-0x97 0x2014 #EM DASH
-0x98 0x02DC #SMALL TILDE
-0x99 0x2122 #TRADE MARK SIGN
-0x9A 0x0161 #LATIN SMALL LETTER S WITH CARON
-0x9B 0x203A #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
-0x9C 0x0153 #LATIN SMALL LIGATURE OE
-0x9D #UNDEFINED
-0x9E #UNDEFINED
-0x9F 0x0178 #LATIN CAPITAL LETTER Y WITH DIAERESIS
-0xA0 0x00A0 #NO-BREAK SPACE
-0xA1 0x00A1 #INVERTED EXCLAMATION MARK
-0xA2 0x00A2 #CENT SIGN
-0xA3 0x00A3 #POUND SIGN
-0xA4 0x00A4 #CURRENCY SIGN
-0xA5 0x00A5 #YEN SIGN
-0xA6 0x00A6 #BROKEN BAR
-0xA7 0x00A7 #SECTION SIGN
-0xA8 0x00A8 #DIAERESIS
-0xA9 0x00A9 #COPYRIGHT SIGN
-0xAA 0x00AA #FEMININE ORDINAL INDICATOR
-0xAB 0x00AB #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-0xAC 0x00AC #NOT SIGN
-0xAD 0x00AD #SOFT HYPHEN
-0xAE 0x00AE #REGISTERED SIGN
-0xAF 0x00AF #MACRON
-0xB0 0x00B0 #DEGREE SIGN
-0xB1 0x00B1 #PLUS-MINUS SIGN
-0xB2 0x00B2 #SUPERSCRIPT TWO
-0xB3 0x00B3 #SUPERSCRIPT THREE
-0xB4 0x00B4 #ACUTE ACCENT
-0xB5 0x00B5 #MICRO SIGN
-0xB6 0x00B6 #PILCROW SIGN
-0xB7 0x00B7 #MIDDLE DOT
-0xB8 0x00B8 #CEDILLA
-0xB9 0x00B9 #SUPERSCRIPT ONE
-0xBA 0x00BA #MASCULINE ORDINAL INDICATOR
-0xBB 0x00BB #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-0xBC 0x00BC #VULGAR FRACTION ONE QUARTER
-0xBD 0x00BD #VULGAR FRACTION ONE HALF
-0xBE 0x00BE #VULGAR FRACTION THREE QUARTERS
-0xBF 0x00BF #INVERTED QUESTION MARK
-0xC0 0x00C0 #LATIN CAPITAL LETTER A WITH GRAVE
-0xC1 0x00C1 #LATIN CAPITAL LETTER A WITH ACUTE
-0xC2 0x00C2 #LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-0xC3 0x00C3 #LATIN CAPITAL LETTER A WITH TILDE
-0xC4 0x00C4 #LATIN CAPITAL LETTER A WITH DIAERESIS
-0xC5 0x00C5 #LATIN CAPITAL LETTER A WITH RING ABOVE
-0xC6 0x00C6 #LATIN CAPITAL LETTER AE
-0xC7 0x00C7 #LATIN CAPITAL LETTER C WITH CEDILLA
-0xC8 0x00C8 #LATIN CAPITAL LETTER E WITH GRAVE
-0xC9 0x00C9 #LATIN CAPITAL LETTER E WITH ACUTE
-0xCA 0x00CA #LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-0xCB 0x00CB #LATIN CAPITAL LETTER E WITH DIAERESIS
-0xCC 0x00CC #LATIN CAPITAL LETTER I WITH GRAVE
-0xCD 0x00CD #LATIN CAPITAL LETTER I WITH ACUTE
-0xCE 0x00CE #LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-0xCF 0x00CF #LATIN CAPITAL LETTER I WITH DIAERESIS
-0xD0 0x011E #LATIN CAPITAL LETTER G WITH BREVE
-0xD1 0x00D1 #LATIN CAPITAL LETTER N WITH TILDE
-0xD2 0x00D2 #LATIN CAPITAL LETTER O WITH GRAVE
-0xD3 0x00D3 #LATIN CAPITAL LETTER O WITH ACUTE
-0xD4 0x00D4 #LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-0xD5 0x00D5 #LATIN CAPITAL LETTER O WITH TILDE
-0xD6 0x00D6 #LATIN CAPITAL LETTER O WITH DIAERESIS
-0xD7 0x00D7 #MULTIPLICATION SIGN
-0xD8 0x00D8 #LATIN CAPITAL LETTER O WITH STROKE
-0xD9 0x00D9 #LATIN CAPITAL LETTER U WITH GRAVE
-0xDA 0x00DA #LATIN CAPITAL LETTER U WITH ACUTE
-0xDB 0x00DB #LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-0xDC 0x00DC #LATIN CAPITAL LETTER U WITH DIAERESIS
-0xDD 0x0130 #LATIN CAPITAL LETTER I WITH DOT ABOVE
-0xDE 0x015E #LATIN CAPITAL LETTER S WITH CEDILLA
-0xDF 0x00DF #LATIN SMALL LETTER SHARP S
-0xE0 0x00E0 #LATIN SMALL LETTER A WITH GRAVE
-0xE1 0x00E1 #LATIN SMALL LETTER A WITH ACUTE
-0xE2 0x00E2 #LATIN SMALL LETTER A WITH CIRCUMFLEX
-0xE3 0x00E3 #LATIN SMALL LETTER A WITH TILDE
-0xE4 0x00E4 #LATIN SMALL LETTER A WITH DIAERESIS
-0xE5 0x00E5 #LATIN SMALL LETTER A WITH RING ABOVE
-0xE6 0x00E6 #LATIN SMALL LETTER AE
-0xE7 0x00E7 #LATIN SMALL LETTER C WITH CEDILLA
-0xE8 0x00E8 #LATIN SMALL LETTER E WITH GRAVE
-0xE9 0x00E9 #LATIN SMALL LETTER E WITH ACUTE
-0xEA 0x00EA #LATIN SMALL LETTER E WITH CIRCUMFLEX
-0xEB 0x00EB #LATIN SMALL LETTER E WITH DIAERESIS
-0xEC 0x00EC #LATIN SMALL LETTER I WITH GRAVE
-0xED 0x00ED #LATIN SMALL LETTER I WITH ACUTE
-0xEE 0x00EE #LATIN SMALL LETTER I WITH CIRCUMFLEX
-0xEF 0x00EF #LATIN SMALL LETTER I WITH DIAERESIS
-0xF0 0x011F #LATIN SMALL LETTER G WITH BREVE
-0xF1 0x00F1 #LATIN SMALL LETTER N WITH TILDE
-0xF2 0x00F2 #LATIN SMALL LETTER O WITH GRAVE
-0xF3 0x00F3 #LATIN SMALL LETTER O WITH ACUTE
-0xF4 0x00F4 #LATIN SMALL LETTER O WITH CIRCUMFLEX
-0xF5 0x00F5 #LATIN SMALL LETTER O WITH TILDE
-0xF6 0x00F6 #LATIN SMALL LETTER O WITH DIAERESIS
-0xF7 0x00F7 #DIVISION SIGN
-0xF8 0x00F8 #LATIN SMALL LETTER O WITH STROKE
-0xF9 0x00F9 #LATIN SMALL LETTER U WITH GRAVE
-0xFA 0x00FA #LATIN SMALL LETTER U WITH ACUTE
-0xFB 0x00FB #LATIN SMALL LETTER U WITH CIRCUMFLEX
-0xFC 0x00FC #LATIN SMALL LETTER U WITH DIAERESIS
-0xFD 0x0131 #LATIN SMALL LETTER DOTLESS I
-0xFE 0x015F #LATIN SMALL LETTER S WITH CEDILLA
-0xFF 0x00FF #LATIN SMALL LETTER Y WITH DIAERESIS
diff --git a/program/lib/encoding/CP1255.map b/program/lib/encoding/CP1255.map
deleted file mode 100644
index 341517f11..000000000
--- a/program/lib/encoding/CP1255.map
+++ /dev/null
@@ -1,274 +0,0 @@
-#
-# Name: cp1255 to Unicode table
-# Unicode version: 2.0
-# Table version: 2.01
-# Table format: Format A
-# Date: 1/7/2000
-#
-# Contact: cpxlate@microsoft.com
-#
-# General notes: none
-#
-# Format: Three tab-separated columns
-# Column #1 is the cp1255 code (in hex)
-# Column #2 is the Unicode (in hex as 0xXXXX)
-# Column #3 is the Unicode name (follows a comment sign, '#')
-#
-# The entries are in cp1255 order
-#
-0x00 0x0000 #NULL
-0x01 0x0001 #START OF HEADING
-0x02 0x0002 #START OF TEXT
-0x03 0x0003 #END OF TEXT
-0x04 0x0004 #END OF TRANSMISSION
-0x05 0x0005 #ENQUIRY
-0x06 0x0006 #ACKNOWLEDGE
-0x07 0x0007 #BELL
-0x08 0x0008 #BACKSPACE
-0x09 0x0009 #HORIZONTAL TABULATION
-0x0A 0x000A #LINE FEED
-0x0B 0x000B #VERTICAL TABULATION
-0x0C 0x000C #FORM FEED
-0x0D 0x000D #CARRIAGE RETURN
-0x0E 0x000E #SHIFT OUT
-0x0F 0x000F #SHIFT IN
-0x10 0x0010 #DATA LINK ESCAPE
-0x11 0x0011 #DEVICE CONTROL ONE
-0x12 0x0012 #DEVICE CONTROL TWO
-0x13 0x0013 #DEVICE CONTROL THREE
-0x14 0x0014 #DEVICE CONTROL FOUR
-0x15 0x0015 #NEGATIVE ACKNOWLEDGE
-0x16 0x0016 #SYNCHRONOUS IDLE
-0x17 0x0017 #END OF TRANSMISSION BLOCK
-0x18 0x0018 #CANCEL
-0x19 0x0019 #END OF MEDIUM
-0x1A 0x001A #SUBSTITUTE
-0x1B 0x001B #ESCAPE
-0x1C 0x001C #FILE SEPARATOR
-0x1D 0x001D #GROUP SEPARATOR
-0x1E 0x001E #RECORD SEPARATOR
-0x1F 0x001F #UNIT SEPARATOR
-0x20 0x0020 #SPACE
-0x21 0x0021 #EXCLAMATION MARK
-0x22 0x0022 #QUOTATION MARK
-0x23 0x0023 #NUMBER SIGN
-0x24 0x0024 #DOLLAR SIGN
-0x25 0x0025 #PERCENT SIGN
-0x26 0x0026 #AMPERSAND
-0x27 0x0027 #APOSTROPHE
-0x28 0x0028 #LEFT PARENTHESIS
-0x29 0x0029 #RIGHT PARENTHESIS
-0x2A 0x002A #ASTERISK
-0x2B 0x002B #PLUS SIGN
-0x2C 0x002C #COMMA
-0x2D 0x002D #HYPHEN-MINUS
-0x2E 0x002E #FULL STOP
-0x2F 0x002F #SOLIDUS
-0x30 0x0030 #DIGIT ZERO
-0x31 0x0031 #DIGIT ONE
-0x32 0x0032 #DIGIT TWO
-0x33 0x0033 #DIGIT THREE
-0x34 0x0034 #DIGIT FOUR
-0x35 0x0035 #DIGIT FIVE
-0x36 0x0036 #DIGIT SIX
-0x37 0x0037 #DIGIT SEVEN
-0x38 0x0038 #DIGIT EIGHT
-0x39 0x0039 #DIGIT NINE
-0x3A 0x003A #COLON
-0x3B 0x003B #SEMICOLON
-0x3C 0x003C #LESS-THAN SIGN
-0x3D 0x003D #EQUALS SIGN
-0x3E 0x003E #GREATER-THAN SIGN
-0x3F 0x003F #QUESTION MARK
-0x40 0x0040 #COMMERCIAL AT
-0x41 0x0041 #LATIN CAPITAL LETTER A
-0x42 0x0042 #LATIN CAPITAL LETTER B
-0x43 0x0043 #LATIN CAPITAL LETTER C
-0x44 0x0044 #LATIN CAPITAL LETTER D
-0x45 0x0045 #LATIN CAPITAL LETTER E
-0x46 0x0046 #LATIN CAPITAL LETTER F
-0x47 0x0047 #LATIN CAPITAL LETTER G
-0x48 0x0048 #LATIN CAPITAL LETTER H
-0x49 0x0049 #LATIN CAPITAL LETTER I
-0x4A 0x004A #LATIN CAPITAL LETTER J
-0x4B 0x004B #LATIN CAPITAL LETTER K
-0x4C 0x004C #LATIN CAPITAL LETTER L
-0x4D 0x004D #LATIN CAPITAL LETTER M
-0x4E 0x004E #LATIN CAPITAL LETTER N
-0x4F 0x004F #LATIN CAPITAL LETTER O
-0x50 0x0050 #LATIN CAPITAL LETTER P
-0x51 0x0051 #LATIN CAPITAL LETTER Q
-0x52 0x0052 #LATIN CAPITAL LETTER R
-0x53 0x0053 #LATIN CAPITAL LETTER S
-0x54 0x0054 #LATIN CAPITAL LETTER T
-0x55 0x0055 #LATIN CAPITAL LETTER U
-0x56 0x0056 #LATIN CAPITAL LETTER V
-0x57 0x0057 #LATIN CAPITAL LETTER W
-0x58 0x0058 #LATIN CAPITAL LETTER X
-0x59 0x0059 #LATIN CAPITAL LETTER Y
-0x5A 0x005A #LATIN CAPITAL LETTER Z
-0x5B 0x005B #LEFT SQUARE BRACKET
-0x5C 0x005C #REVERSE SOLIDUS
-0x5D 0x005D #RIGHT SQUARE BRACKET
-0x5E 0x005E #CIRCUMFLEX ACCENT
-0x5F 0x005F #LOW LINE
-0x60 0x0060 #GRAVE ACCENT
-0x61 0x0061 #LATIN SMALL LETTER A
-0x62 0x0062 #LATIN SMALL LETTER B
-0x63 0x0063 #LATIN SMALL LETTER C
-0x64 0x0064 #LATIN SMALL LETTER D
-0x65 0x0065 #LATIN SMALL LETTER E
-0x66 0x0066 #LATIN SMALL LETTER F
-0x67 0x0067 #LATIN SMALL LETTER G
-0x68 0x0068 #LATIN SMALL LETTER H
-0x69 0x0069 #LATIN SMALL LETTER I
-0x6A 0x006A #LATIN SMALL LETTER J
-0x6B 0x006B #LATIN SMALL LETTER K
-0x6C 0x006C #LATIN SMALL LETTER L
-0x6D 0x006D #LATIN SMALL LETTER M
-0x6E 0x006E #LATIN SMALL LETTER N
-0x6F 0x006F #LATIN SMALL LETTER O
-0x70 0x0070 #LATIN SMALL LETTER P
-0x71 0x0071 #LATIN SMALL LETTER Q
-0x72 0x0072 #LATIN SMALL LETTER R
-0x73 0x0073 #LATIN SMALL LETTER S
-0x74 0x0074 #LATIN SMALL LETTER T
-0x75 0x0075 #LATIN SMALL LETTER U
-0x76 0x0076 #LATIN SMALL LETTER V
-0x77 0x0077 #LATIN SMALL LETTER W
-0x78 0x0078 #LATIN SMALL LETTER X
-0x79 0x0079 #LATIN SMALL LETTER Y
-0x7A 0x007A #LATIN SMALL LETTER Z
-0x7B 0x007B #LEFT CURLY BRACKET
-0x7C 0x007C #VERTICAL LINE
-0x7D 0x007D #RIGHT CURLY BRACKET
-0x7E 0x007E #TILDE
-0x7F 0x007F #DELETE
-0x80 0x20AC #EURO SIGN
-0x81 #UNDEFINED
-0x82 0x201A #SINGLE LOW-9 QUOTATION MARK
-0x83 0x0192 #LATIN SMALL LETTER F WITH HOOK
-0x84 0x201E #DOUBLE LOW-9 QUOTATION MARK
-0x85 0x2026 #HORIZONTAL ELLIPSIS
-0x86 0x2020 #DAGGER
-0x87 0x2021 #DOUBLE DAGGER
-0x88 0x02C6 #MODIFIER LETTER CIRCUMFLEX ACCENT
-0x89 0x2030 #PER MILLE SIGN
-0x8A #UNDEFINED
-0x8B 0x2039 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK
-0x8C #UNDEFINED
-0x8D #UNDEFINED
-0x8E #UNDEFINED
-0x8F #UNDEFINED
-0x90 #UNDEFINED
-0x91 0x2018 #LEFT SINGLE QUOTATION MARK
-0x92 0x2019 #RIGHT SINGLE QUOTATION MARK
-0x93 0x201C #LEFT DOUBLE QUOTATION MARK
-0x94 0x201D #RIGHT DOUBLE QUOTATION MARK
-0x95 0x2022 #BULLET
-0x96 0x2013 #EN DASH
-0x97 0x2014 #EM DASH
-0x98 0x02DC #SMALL TILDE
-0x99 0x2122 #TRADE MARK SIGN
-0x9A #UNDEFINED
-0x9B 0x203A #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
-0x9C #UNDEFINED
-0x9D #UNDEFINED
-0x9E #UNDEFINED
-0x9F #UNDEFINED
-0xA0 0x00A0 #NO-BREAK SPACE
-0xA1 0x00A1 #INVERTED EXCLAMATION MARK
-0xA2 0x00A2 #CENT SIGN
-0xA3 0x00A3 #POUND SIGN
-0xA4 0x20AA #NEW SHEQEL SIGN
-0xA5 0x00A5 #YEN SIGN
-0xA6 0x00A6 #BROKEN BAR
-0xA7 0x00A7 #SECTION SIGN
-0xA8 0x00A8 #DIAERESIS
-0xA9 0x00A9 #COPYRIGHT SIGN
-0xAA 0x00D7 #MULTIPLICATION SIGN
-0xAB 0x00AB #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-0xAC 0x00AC #NOT SIGN
-0xAD 0x00AD #SOFT HYPHEN
-0xAE 0x00AE #REGISTERED SIGN
-0xAF 0x00AF #MACRON
-0xB0 0x00B0 #DEGREE SIGN
-0xB1 0x00B1 #PLUS-MINUS SIGN
-0xB2 0x00B2 #SUPERSCRIPT TWO
-0xB3 0x00B3 #SUPERSCRIPT THREE
-0xB4 0x00B4 #ACUTE ACCENT
-0xB5 0x00B5 #MICRO SIGN
-0xB6 0x00B6 #PILCROW SIGN
-0xB7 0x00B7 #MIDDLE DOT
-0xB8 0x00B8 #CEDILLA
-0xB9 0x00B9 #SUPERSCRIPT ONE
-0xBA 0x00F7 #DIVISION SIGN
-0xBB 0x00BB #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-0xBC 0x00BC #VULGAR FRACTION ONE QUARTER
-0xBD 0x00BD #VULGAR FRACTION ONE HALF
-0xBE 0x00BE #VULGAR FRACTION THREE QUARTERS
-0xBF 0x00BF #INVERTED QUESTION MARK
-0xC0 0x05B0 #HEBREW POINT SHEVA
-0xC1 0x05B1 #HEBREW POINT HATAF SEGOL
-0xC2 0x05B2 #HEBREW POINT HATAF PATAH
-0xC3 0x05B3 #HEBREW POINT HATAF QAMATS
-0xC4 0x05B4 #HEBREW POINT HIRIQ
-0xC5 0x05B5 #HEBREW POINT TSERE
-0xC6 0x05B6 #HEBREW POINT SEGOL
-0xC7 0x05B7 #HEBREW POINT PATAH
-0xC8 0x05B8 #HEBREW POINT QAMATS
-0xC9 0x05B9 #HEBREW POINT HOLAM
-0xCA #UNDEFINED
-0xCB 0x05BB #HEBREW POINT QUBUTS
-0xCC 0x05BC #HEBREW POINT DAGESH OR MAPIQ
-0xCD 0x05BD #HEBREW POINT METEG
-0xCE 0x05BE #HEBREW PUNCTUATION MAQAF
-0xCF 0x05BF #HEBREW POINT RAFE
-0xD0 0x05C0 #HEBREW PUNCTUATION PASEQ
-0xD1 0x05C1 #HEBREW POINT SHIN DOT
-0xD2 0x05C2 #HEBREW POINT SIN DOT
-0xD3 0x05C3 #HEBREW PUNCTUATION SOF PASUQ
-0xD4 0x05F0 #HEBREW LIGATURE YIDDISH DOUBLE VAV
-0xD5 0x05F1 #HEBREW LIGATURE YIDDISH VAV YOD
-0xD6 0x05F2 #HEBREW LIGATURE YIDDISH DOUBLE YOD
-0xD7 0x05F3 #HEBREW PUNCTUATION GERESH
-0xD8 0x05F4 #HEBREW PUNCTUATION GERSHAYIM
-0xD9 #UNDEFINED
-0xDA #UNDEFINED
-0xDB #UNDEFINED
-0xDC #UNDEFINED
-0xDD #UNDEFINED
-0xDE #UNDEFINED
-0xDF #UNDEFINED
-0xE0 0x05D0 #HEBREW LETTER ALEF
-0xE1 0x05D1 #HEBREW LETTER BET
-0xE2 0x05D2 #HEBREW LETTER GIMEL
-0xE3 0x05D3 #HEBREW LETTER DALET
-0xE4 0x05D4 #HEBREW LETTER HE
-0xE5 0x05D5 #HEBREW LETTER VAV
-0xE6 0x05D6 #HEBREW LETTER ZAYIN
-0xE7 0x05D7 #HEBREW LETTER HET
-0xE8 0x05D8 #HEBREW LETTER TET
-0xE9 0x05D9 #HEBREW LETTER YOD
-0xEA 0x05DA #HEBREW LETTER FINAL KAF
-0xEB 0x05DB #HEBREW LETTER KAF
-0xEC 0x05DC #HEBREW LETTER LAMED
-0xED 0x05DD #HEBREW LETTER FINAL MEM
-0xEE 0x05DE #HEBREW LETTER MEM
-0xEF 0x05DF #HEBREW LETTER FINAL NUN
-0xF0 0x05E0 #HEBREW LETTER NUN
-0xF1 0x05E1 #HEBREW LETTER SAMEKH
-0xF2 0x05E2 #HEBREW LETTER AYIN
-0xF3 0x05E3 #HEBREW LETTER FINAL PE
-0xF4 0x05E4 #HEBREW LETTER PE
-0xF5 0x05E5 #HEBREW LETTER FINAL TSADI
-0xF6 0x05E6 #HEBREW LETTER TSADI
-0xF7 0x05E7 #HEBREW LETTER QOF
-0xF8 0x05E8 #HEBREW LETTER RESH
-0xF9 0x05E9 #HEBREW LETTER SHIN
-0xFA 0x05EA #HEBREW LETTER TAV
-0xFB #UNDEFINED
-0xFC #UNDEFINED
-0xFD 0x200E #LEFT-TO-RIGHT MARK
-0xFE 0x200F #RIGHT-TO-LEFT MARK
-0xFF #UNDEFINED
diff --git a/program/lib/encoding/CP1256.map b/program/lib/encoding/CP1256.map
deleted file mode 100644
index 0edd081b9..000000000
--- a/program/lib/encoding/CP1256.map
+++ /dev/null
@@ -1,274 +0,0 @@
-#
-# Name: cp1256 to Unicode table
-# Unicode version: 2.1
-# Table version: 2.01
-# Table format: Format A
-# Date: 01/5/99
-#
-# Contact: cpxlate@microsoft.com
-#
-# General notes: none
-#
-# Format: Three tab-separated columns
-# Column #1 is the cp1256 code (in hex)
-# Column #2 is the Unicode (in hex as 0xXXXX)
-# Column #3 is the Unicode name (follows a comment sign, '#')
-#
-# The entries are in cp1256 order
-#
-0x00 0x0000 #NULL
-0x01 0x0001 #START OF HEADING
-0x02 0x0002 #START OF TEXT
-0x03 0x0003 #END OF TEXT
-0x04 0x0004 #END OF TRANSMISSION
-0x05 0x0005 #ENQUIRY
-0x06 0x0006 #ACKNOWLEDGE
-0x07 0x0007 #BELL
-0x08 0x0008 #BACKSPACE
-0x09 0x0009 #HORIZONTAL TABULATION
-0x0A 0x000A #LINE FEED
-0x0B 0x000B #VERTICAL TABULATION
-0x0C 0x000C #FORM FEED
-0x0D 0x000D #CARRIAGE RETURN
-0x0E 0x000E #SHIFT OUT
-0x0F 0x000F #SHIFT IN
-0x10 0x0010 #DATA LINK ESCAPE
-0x11 0x0011 #DEVICE CONTROL ONE
-0x12 0x0012 #DEVICE CONTROL TWO
-0x13 0x0013 #DEVICE CONTROL THREE
-0x14 0x0014 #DEVICE CONTROL FOUR
-0x15 0x0015 #NEGATIVE ACKNOWLEDGE
-0x16 0x0016 #SYNCHRONOUS IDLE
-0x17 0x0017 #END OF TRANSMISSION BLOCK
-0x18 0x0018 #CANCEL
-0x19 0x0019 #END OF MEDIUM
-0x1A 0x001A #SUBSTITUTE
-0x1B 0x001B #ESCAPE
-0x1C 0x001C #FILE SEPARATOR
-0x1D 0x001D #GROUP SEPARATOR
-0x1E 0x001E #RECORD SEPARATOR
-0x1F 0x001F #UNIT SEPARATOR
-0x20 0x0020 #SPACE
-0x21 0x0021 #EXCLAMATION MARK
-0x22 0x0022 #QUOTATION MARK
-0x23 0x0023 #NUMBER SIGN
-0x24 0x0024 #DOLLAR SIGN
-0x25 0x0025 #PERCENT SIGN
-0x26 0x0026 #AMPERSAND
-0x27 0x0027 #APOSTROPHE
-0x28 0x0028 #LEFT PARENTHESIS
-0x29 0x0029 #RIGHT PARENTHESIS
-0x2A 0x002A #ASTERISK
-0x2B 0x002B #PLUS SIGN
-0x2C 0x002C #COMMA
-0x2D 0x002D #HYPHEN-MINUS
-0x2E 0x002E #FULL STOP
-0x2F 0x002F #SOLIDUS
-0x30 0x0030 #DIGIT ZERO
-0x31 0x0031 #DIGIT ONE
-0x32 0x0032 #DIGIT TWO
-0x33 0x0033 #DIGIT THREE
-0x34 0x0034 #DIGIT FOUR
-0x35 0x0035 #DIGIT FIVE
-0x36 0x0036 #DIGIT SIX
-0x37 0x0037 #DIGIT SEVEN
-0x38 0x0038 #DIGIT EIGHT
-0x39 0x0039 #DIGIT NINE
-0x3A 0x003A #COLON
-0x3B 0x003B #SEMICOLON
-0x3C 0x003C #LESS-THAN SIGN
-0x3D 0x003D #EQUALS SIGN
-0x3E 0x003E #GREATER-THAN SIGN
-0x3F 0x003F #QUESTION MARK
-0x40 0x0040 #COMMERCIAL AT
-0x41 0x0041 #LATIN CAPITAL LETTER A
-0x42 0x0042 #LATIN CAPITAL LETTER B
-0x43 0x0043 #LATIN CAPITAL LETTER C
-0x44 0x0044 #LATIN CAPITAL LETTER D
-0x45 0x0045 #LATIN CAPITAL LETTER E
-0x46 0x0046 #LATIN CAPITAL LETTER F
-0x47 0x0047 #LATIN CAPITAL LETTER G
-0x48 0x0048 #LATIN CAPITAL LETTER H
-0x49 0x0049 #LATIN CAPITAL LETTER I
-0x4A 0x004A #LATIN CAPITAL LETTER J
-0x4B 0x004B #LATIN CAPITAL LETTER K
-0x4C 0x004C #LATIN CAPITAL LETTER L
-0x4D 0x004D #LATIN CAPITAL LETTER M
-0x4E 0x004E #LATIN CAPITAL LETTER N
-0x4F 0x004F #LATIN CAPITAL LETTER O
-0x50 0x0050 #LATIN CAPITAL LETTER P
-0x51 0x0051 #LATIN CAPITAL LETTER Q
-0x52 0x0052 #LATIN CAPITAL LETTER R
-0x53 0x0053 #LATIN CAPITAL LETTER S
-0x54 0x0054 #LATIN CAPITAL LETTER T
-0x55 0x0055 #LATIN CAPITAL LETTER U
-0x56 0x0056 #LATIN CAPITAL LETTER V
-0x57 0x0057 #LATIN CAPITAL LETTER W
-0x58 0x0058 #LATIN CAPITAL LETTER X
-0x59 0x0059 #LATIN CAPITAL LETTER Y
-0x5A 0x005A #LATIN CAPITAL LETTER Z
-0x5B 0x005B #LEFT SQUARE BRACKET
-0x5C 0x005C #REVERSE SOLIDUS
-0x5D 0x005D #RIGHT SQUARE BRACKET
-0x5E 0x005E #CIRCUMFLEX ACCENT
-0x5F 0x005F #LOW LINE
-0x60 0x0060 #GRAVE ACCENT
-0x61 0x0061 #LATIN SMALL LETTER A
-0x62 0x0062 #LATIN SMALL LETTER B
-0x63 0x0063 #LATIN SMALL LETTER C
-0x64 0x0064 #LATIN SMALL LETTER D
-0x65 0x0065 #LATIN SMALL LETTER E
-0x66 0x0066 #LATIN SMALL LETTER F
-0x67 0x0067 #LATIN SMALL LETTER G
-0x68 0x0068 #LATIN SMALL LETTER H
-0x69 0x0069 #LATIN SMALL LETTER I
-0x6A 0x006A #LATIN SMALL LETTER J
-0x6B 0x006B #LATIN SMALL LETTER K
-0x6C 0x006C #LATIN SMALL LETTER L
-0x6D 0x006D #LATIN SMALL LETTER M
-0x6E 0x006E #LATIN SMALL LETTER N
-0x6F 0x006F #LATIN SMALL LETTER O
-0x70 0x0070 #LATIN SMALL LETTER P
-0x71 0x0071 #LATIN SMALL LETTER Q
-0x72 0x0072 #LATIN SMALL LETTER R
-0x73 0x0073 #LATIN SMALL LETTER S
-0x74 0x0074 #LATIN SMALL LETTER T
-0x75 0x0075 #LATIN SMALL LETTER U
-0x76 0x0076 #LATIN SMALL LETTER V
-0x77 0x0077 #LATIN SMALL LETTER W
-0x78 0x0078 #LATIN SMALL LETTER X
-0x79 0x0079 #LATIN SMALL LETTER Y
-0x7A 0x007A #LATIN SMALL LETTER Z
-0x7B 0x007B #LEFT CURLY BRACKET
-0x7C 0x007C #VERTICAL LINE
-0x7D 0x007D #RIGHT CURLY BRACKET
-0x7E 0x007E #TILDE
-0x7F 0x007F #DELETE
-0x80 0x20AC #EURO SIGN
-0x81 0x067E #ARABIC LETTER PEH
-0x82 0x201A #SINGLE LOW-9 QUOTATION MARK
-0x83 0x0192 #LATIN SMALL LETTER F WITH HOOK
-0x84 0x201E #DOUBLE LOW-9 QUOTATION MARK
-0x85 0x2026 #HORIZONTAL ELLIPSIS
-0x86 0x2020 #DAGGER
-0x87 0x2021 #DOUBLE DAGGER
-0x88 0x02C6 #MODIFIER LETTER CIRCUMFLEX ACCENT
-0x89 0x2030 #PER MILLE SIGN
-0x8A 0x0679 #ARABIC LETTER TTEH
-0x8B 0x2039 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK
-0x8C 0x0152 #LATIN CAPITAL LIGATURE OE
-0x8D 0x0686 #ARABIC LETTER TCHEH
-0x8E 0x0698 #ARABIC LETTER JEH
-0x8F 0x0688 #ARABIC LETTER DDAL
-0x90 0x06AF #ARABIC LETTER GAF
-0x91 0x2018 #LEFT SINGLE QUOTATION MARK
-0x92 0x2019 #RIGHT SINGLE QUOTATION MARK
-0x93 0x201C #LEFT DOUBLE QUOTATION MARK
-0x94 0x201D #RIGHT DOUBLE QUOTATION MARK
-0x95 0x2022 #BULLET
-0x96 0x2013 #EN DASH
-0x97 0x2014 #EM DASH
-0x98 0x06A9 #ARABIC LETTER KEHEH
-0x99 0x2122 #TRADE MARK SIGN
-0x9A 0x0691 #ARABIC LETTER RREH
-0x9B 0x203A #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
-0x9C 0x0153 #LATIN SMALL LIGATURE OE
-0x9D 0x200C #ZERO WIDTH NON-JOINER
-0x9E 0x200D #ZERO WIDTH JOINER
-0x9F 0x06BA #ARABIC LETTER NOON GHUNNA
-0xA0 0x00A0 #NO-BREAK SPACE
-0xA1 0x060C #ARABIC COMMA
-0xA2 0x00A2 #CENT SIGN
-0xA3 0x00A3 #POUND SIGN
-0xA4 0x00A4 #CURRENCY SIGN
-0xA5 0x00A5 #YEN SIGN
-0xA6 0x00A6 #BROKEN BAR
-0xA7 0x00A7 #SECTION SIGN
-0xA8 0x00A8 #DIAERESIS
-0xA9 0x00A9 #COPYRIGHT SIGN
-0xAA 0x06BE #ARABIC LETTER HEH DOACHASHMEE
-0xAB 0x00AB #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-0xAC 0x00AC #NOT SIGN
-0xAD 0x00AD #SOFT HYPHEN
-0xAE 0x00AE #REGISTERED SIGN
-0xAF 0x00AF #MACRON
-0xB0 0x00B0 #DEGREE SIGN
-0xB1 0x00B1 #PLUS-MINUS SIGN
-0xB2 0x00B2 #SUPERSCRIPT TWO
-0xB3 0x00B3 #SUPERSCRIPT THREE
-0xB4 0x00B4 #ACUTE ACCENT
-0xB5 0x00B5 #MICRO SIGN
-0xB6 0x00B6 #PILCROW SIGN
-0xB7 0x00B7 #MIDDLE DOT
-0xB8 0x00B8 #CEDILLA
-0xB9 0x00B9 #SUPERSCRIPT ONE
-0xBA 0x061B #ARABIC SEMICOLON
-0xBB 0x00BB #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-0xBC 0x00BC #VULGAR FRACTION ONE QUARTER
-0xBD 0x00BD #VULGAR FRACTION ONE HALF
-0xBE 0x00BE #VULGAR FRACTION THREE QUARTERS
-0xBF 0x061F #ARABIC QUESTION MARK
-0xC0 0x06C1 #ARABIC LETTER HEH GOAL
-0xC1 0x0621 #ARABIC LETTER HAMZA
-0xC2 0x0622 #ARABIC LETTER ALEF WITH MADDA ABOVE
-0xC3 0x0623 #ARABIC LETTER ALEF WITH HAMZA ABOVE
-0xC4 0x0624 #ARABIC LETTER WAW WITH HAMZA ABOVE
-0xC5 0x0625 #ARABIC LETTER ALEF WITH HAMZA BELOW
-0xC6 0x0626 #ARABIC LETTER YEH WITH HAMZA ABOVE
-0xC7 0x0627 #ARABIC LETTER ALEF
-0xC8 0x0628 #ARABIC LETTER BEH
-0xC9 0x0629 #ARABIC LETTER TEH MARBUTA
-0xCA 0x062A #ARABIC LETTER TEH
-0xCB 0x062B #ARABIC LETTER THEH
-0xCC 0x062C #ARABIC LETTER JEEM
-0xCD 0x062D #ARABIC LETTER HAH
-0xCE 0x062E #ARABIC LETTER KHAH
-0xCF 0x062F #ARABIC LETTER DAL
-0xD0 0x0630 #ARABIC LETTER THAL
-0xD1 0x0631 #ARABIC LETTER REH
-0xD2 0x0632 #ARABIC LETTER ZAIN
-0xD3 0x0633 #ARABIC LETTER SEEN
-0xD4 0x0634 #ARABIC LETTER SHEEN
-0xD5 0x0635 #ARABIC LETTER SAD
-0xD6 0x0636 #ARABIC LETTER DAD
-0xD7 0x00D7 #MULTIPLICATION SIGN
-0xD8 0x0637 #ARABIC LETTER TAH
-0xD9 0x0638 #ARABIC LETTER ZAH
-0xDA 0x0639 #ARABIC LETTER AIN
-0xDB 0x063A #ARABIC LETTER GHAIN
-0xDC 0x0640 #ARABIC TATWEEL
-0xDD 0x0641 #ARABIC LETTER FEH
-0xDE 0x0642 #ARABIC LETTER QAF
-0xDF 0x0643 #ARABIC LETTER KAF
-0xE0 0x00E0 #LATIN SMALL LETTER A WITH GRAVE
-0xE1 0x0644 #ARABIC LETTER LAM
-0xE2 0x00E2 #LATIN SMALL LETTER A WITH CIRCUMFLEX
-0xE3 0x0645 #ARABIC LETTER MEEM
-0xE4 0x0646 #ARABIC LETTER NOON
-0xE5 0x0647 #ARABIC LETTER HEH
-0xE6 0x0648 #ARABIC LETTER WAW
-0xE7 0x00E7 #LATIN SMALL LETTER C WITH CEDILLA
-0xE8 0x00E8 #LATIN SMALL LETTER E WITH GRAVE
-0xE9 0x00E9 #LATIN SMALL LETTER E WITH ACUTE
-0xEA 0x00EA #LATIN SMALL LETTER E WITH CIRCUMFLEX
-0xEB 0x00EB #LATIN SMALL LETTER E WITH DIAERESIS
-0xEC 0x0649 #ARABIC LETTER ALEF MAKSURA
-0xED 0x064A #ARABIC LETTER YEH
-0xEE 0x00EE #LATIN SMALL LETTER I WITH CIRCUMFLEX
-0xEF 0x00EF #LATIN SMALL LETTER I WITH DIAERESIS
-0xF0 0x064B #ARABIC FATHATAN
-0xF1 0x064C #ARABIC DAMMATAN
-0xF2 0x064D #ARABIC KASRATAN
-0xF3 0x064E #ARABIC FATHA
-0xF4 0x00F4 #LATIN SMALL LETTER O WITH CIRCUMFLEX
-0xF5 0x064F #ARABIC DAMMA
-0xF6 0x0650 #ARABIC KASRA
-0xF7 0x00F7 #DIVISION SIGN
-0xF8 0x0651 #ARABIC SHADDA
-0xF9 0x00F9 #LATIN SMALL LETTER U WITH GRAVE
-0xFA 0x0652 #ARABIC SUKUN
-0xFB 0x00FB #LATIN SMALL LETTER U WITH CIRCUMFLEX
-0xFC 0x00FC #LATIN SMALL LETTER U WITH DIAERESIS
-0xFD 0x200E #LEFT-TO-RIGHT MARK
-0xFE 0x200F #RIGHT-TO-LEFT MARK
-0xFF 0x06D2 #ARABIC LETTER YEH BARREE
diff --git a/program/lib/encoding/CP1257.map b/program/lib/encoding/CP1257.map
deleted file mode 100644
index 97979d931..000000000
--- a/program/lib/encoding/CP1257.map
+++ /dev/null
@@ -1,274 +0,0 @@
-#
-# Name: cp1257 to Unicode table
-# Unicode version: 2.0
-# Table version: 2.01
-# Table format: Format A
-# Date: 04/15/98
-#
-# Contact: cpxlate@microsoft.com
-#
-# General notes: none
-#
-# Format: Three tab-separated columns
-# Column #1 is the cp1257 code (in hex)
-# Column #2 is the Unicode (in hex as 0xXXXX)
-# Column #3 is the Unicode name (follows a comment sign, '#')
-#
-# The entries are in cp1257 order
-#
-0x00 0x0000 #NULL
-0x01 0x0001 #START OF HEADING
-0x02 0x0002 #START OF TEXT
-0x03 0x0003 #END OF TEXT
-0x04 0x0004 #END OF TRANSMISSION
-0x05 0x0005 #ENQUIRY
-0x06 0x0006 #ACKNOWLEDGE
-0x07 0x0007 #BELL
-0x08 0x0008 #BACKSPACE
-0x09 0x0009 #HORIZONTAL TABULATION
-0x0A 0x000A #LINE FEED
-0x0B 0x000B #VERTICAL TABULATION
-0x0C 0x000C #FORM FEED
-0x0D 0x000D #CARRIAGE RETURN
-0x0E 0x000E #SHIFT OUT
-0x0F 0x000F #SHIFT IN
-0x10 0x0010 #DATA LINK ESCAPE
-0x11 0x0011 #DEVICE CONTROL ONE
-0x12 0x0012 #DEVICE CONTROL TWO
-0x13 0x0013 #DEVICE CONTROL THREE
-0x14 0x0014 #DEVICE CONTROL FOUR
-0x15 0x0015 #NEGATIVE ACKNOWLEDGE
-0x16 0x0016 #SYNCHRONOUS IDLE
-0x17 0x0017 #END OF TRANSMISSION BLOCK
-0x18 0x0018 #CANCEL
-0x19 0x0019 #END OF MEDIUM
-0x1A 0x001A #SUBSTITUTE
-0x1B 0x001B #ESCAPE
-0x1C 0x001C #FILE SEPARATOR
-0x1D 0x001D #GROUP SEPARATOR
-0x1E 0x001E #RECORD SEPARATOR
-0x1F 0x001F #UNIT SEPARATOR
-0x20 0x0020 #SPACE
-0x21 0x0021 #EXCLAMATION MARK
-0x22 0x0022 #QUOTATION MARK
-0x23 0x0023 #NUMBER SIGN
-0x24 0x0024 #DOLLAR SIGN
-0x25 0x0025 #PERCENT SIGN
-0x26 0x0026 #AMPERSAND
-0x27 0x0027 #APOSTROPHE
-0x28 0x0028 #LEFT PARENTHESIS
-0x29 0x0029 #RIGHT PARENTHESIS
-0x2A 0x002A #ASTERISK
-0x2B 0x002B #PLUS SIGN
-0x2C 0x002C #COMMA
-0x2D 0x002D #HYPHEN-MINUS
-0x2E 0x002E #FULL STOP
-0x2F 0x002F #SOLIDUS
-0x30 0x0030 #DIGIT ZERO
-0x31 0x0031 #DIGIT ONE
-0x32 0x0032 #DIGIT TWO
-0x33 0x0033 #DIGIT THREE
-0x34 0x0034 #DIGIT FOUR
-0x35 0x0035 #DIGIT FIVE
-0x36 0x0036 #DIGIT SIX
-0x37 0x0037 #DIGIT SEVEN
-0x38 0x0038 #DIGIT EIGHT
-0x39 0x0039 #DIGIT NINE
-0x3A 0x003A #COLON
-0x3B 0x003B #SEMICOLON
-0x3C 0x003C #LESS-THAN SIGN
-0x3D 0x003D #EQUALS SIGN
-0x3E 0x003E #GREATER-THAN SIGN
-0x3F 0x003F #QUESTION MARK
-0x40 0x0040 #COMMERCIAL AT
-0x41 0x0041 #LATIN CAPITAL LETTER A
-0x42 0x0042 #LATIN CAPITAL LETTER B
-0x43 0x0043 #LATIN CAPITAL LETTER C
-0x44 0x0044 #LATIN CAPITAL LETTER D
-0x45 0x0045 #LATIN CAPITAL LETTER E
-0x46 0x0046 #LATIN CAPITAL LETTER F
-0x47 0x0047 #LATIN CAPITAL LETTER G
-0x48 0x0048 #LATIN CAPITAL LETTER H
-0x49 0x0049 #LATIN CAPITAL LETTER I
-0x4A 0x004A #LATIN CAPITAL LETTER J
-0x4B 0x004B #LATIN CAPITAL LETTER K
-0x4C 0x004C #LATIN CAPITAL LETTER L
-0x4D 0x004D #LATIN CAPITAL LETTER M
-0x4E 0x004E #LATIN CAPITAL LETTER N
-0x4F 0x004F #LATIN CAPITAL LETTER O
-0x50 0x0050 #LATIN CAPITAL LETTER P
-0x51 0x0051 #LATIN CAPITAL LETTER Q
-0x52 0x0052 #LATIN CAPITAL LETTER R
-0x53 0x0053 #LATIN CAPITAL LETTER S
-0x54 0x0054 #LATIN CAPITAL LETTER T
-0x55 0x0055 #LATIN CAPITAL LETTER U
-0x56 0x0056 #LATIN CAPITAL LETTER V
-0x57 0x0057 #LATIN CAPITAL LETTER W
-0x58 0x0058 #LATIN CAPITAL LETTER X
-0x59 0x0059 #LATIN CAPITAL LETTER Y
-0x5A 0x005A #LATIN CAPITAL LETTER Z
-0x5B 0x005B #LEFT SQUARE BRACKET
-0x5C 0x005C #REVERSE SOLIDUS
-0x5D 0x005D #RIGHT SQUARE BRACKET
-0x5E 0x005E #CIRCUMFLEX ACCENT
-0x5F 0x005F #LOW LINE
-0x60 0x0060 #GRAVE ACCENT
-0x61 0x0061 #LATIN SMALL LETTER A
-0x62 0x0062 #LATIN SMALL LETTER B
-0x63 0x0063 #LATIN SMALL LETTER C
-0x64 0x0064 #LATIN SMALL LETTER D
-0x65 0x0065 #LATIN SMALL LETTER E
-0x66 0x0066 #LATIN SMALL LETTER F
-0x67 0x0067 #LATIN SMALL LETTER G
-0x68 0x0068 #LATIN SMALL LETTER H
-0x69 0x0069 #LATIN SMALL LETTER I
-0x6A 0x006A #LATIN SMALL LETTER J
-0x6B 0x006B #LATIN SMALL LETTER K
-0x6C 0x006C #LATIN SMALL LETTER L
-0x6D 0x006D #LATIN SMALL LETTER M
-0x6E 0x006E #LATIN SMALL LETTER N
-0x6F 0x006F #LATIN SMALL LETTER O
-0x70 0x0070 #LATIN SMALL LETTER P
-0x71 0x0071 #LATIN SMALL LETTER Q
-0x72 0x0072 #LATIN SMALL LETTER R
-0x73 0x0073 #LATIN SMALL LETTER S
-0x74 0x0074 #LATIN SMALL LETTER T
-0x75 0x0075 #LATIN SMALL LETTER U
-0x76 0x0076 #LATIN SMALL LETTER V
-0x77 0x0077 #LATIN SMALL LETTER W
-0x78 0x0078 #LATIN SMALL LETTER X
-0x79 0x0079 #LATIN SMALL LETTER Y
-0x7A 0x007A #LATIN SMALL LETTER Z
-0x7B 0x007B #LEFT CURLY BRACKET
-0x7C 0x007C #VERTICAL LINE
-0x7D 0x007D #RIGHT CURLY BRACKET
-0x7E 0x007E #TILDE
-0x7F 0x007F #DELETE
-0x80 0x20AC #EURO SIGN
-0x81 #UNDEFINED
-0x82 0x201A #SINGLE LOW-9 QUOTATION MARK
-0x83 #UNDEFINED
-0x84 0x201E #DOUBLE LOW-9 QUOTATION MARK
-0x85 0x2026 #HORIZONTAL ELLIPSIS
-0x86 0x2020 #DAGGER
-0x87 0x2021 #DOUBLE DAGGER
-0x88 #UNDEFINED
-0x89 0x2030 #PER MILLE SIGN
-0x8A #UNDEFINED
-0x8B 0x2039 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK
-0x8C #UNDEFINED
-0x8D 0x00A8 #DIAERESIS
-0x8E 0x02C7 #CARON
-0x8F 0x00B8 #CEDILLA
-0x90 #UNDEFINED
-0x91 0x2018 #LEFT SINGLE QUOTATION MARK
-0x92 0x2019 #RIGHT SINGLE QUOTATION MARK
-0x93 0x201C #LEFT DOUBLE QUOTATION MARK
-0x94 0x201D #RIGHT DOUBLE QUOTATION MARK
-0x95 0x2022 #BULLET
-0x96 0x2013 #EN DASH
-0x97 0x2014 #EM DASH
-0x98 #UNDEFINED
-0x99 0x2122 #TRADE MARK SIGN
-0x9A #UNDEFINED
-0x9B 0x203A #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
-0x9C #UNDEFINED
-0x9D 0x00AF #MACRON
-0x9E 0x02DB #OGONEK
-0x9F #UNDEFINED
-0xA0 0x00A0 #NO-BREAK SPACE
-0xA1 #UNDEFINED
-0xA2 0x00A2 #CENT SIGN
-0xA3 0x00A3 #POUND SIGN
-0xA4 0x00A4 #CURRENCY SIGN
-0xA5 #UNDEFINED
-0xA6 0x00A6 #BROKEN BAR
-0xA7 0x00A7 #SECTION SIGN
-0xA8 0x00D8 #LATIN CAPITAL LETTER O WITH STROKE
-0xA9 0x00A9 #COPYRIGHT SIGN
-0xAA 0x0156 #LATIN CAPITAL LETTER R WITH CEDILLA
-0xAB 0x00AB #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-0xAC 0x00AC #NOT SIGN
-0xAD 0x00AD #SOFT HYPHEN
-0xAE 0x00AE #REGISTERED SIGN
-0xAF 0x00C6 #LATIN CAPITAL LETTER AE
-0xB0 0x00B0 #DEGREE SIGN
-0xB1 0x00B1 #PLUS-MINUS SIGN
-0xB2 0x00B2 #SUPERSCRIPT TWO
-0xB3 0x00B3 #SUPERSCRIPT THREE
-0xB4 0x00B4 #ACUTE ACCENT
-0xB5 0x00B5 #MICRO SIGN
-0xB6 0x00B6 #PILCROW SIGN
-0xB7 0x00B7 #MIDDLE DOT
-0xB8 0x00F8 #LATIN SMALL LETTER O WITH STROKE
-0xB9 0x00B9 #SUPERSCRIPT ONE
-0xBA 0x0157 #LATIN SMALL LETTER R WITH CEDILLA
-0xBB 0x00BB #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-0xBC 0x00BC #VULGAR FRACTION ONE QUARTER
-0xBD 0x00BD #VULGAR FRACTION ONE HALF
-0xBE 0x00BE #VULGAR FRACTION THREE QUARTERS
-0xBF 0x00E6 #LATIN SMALL LETTER AE
-0xC0 0x0104 #LATIN CAPITAL LETTER A WITH OGONEK
-0xC1 0x012E #LATIN CAPITAL LETTER I WITH OGONEK
-0xC2 0x0100 #LATIN CAPITAL LETTER A WITH MACRON
-0xC3 0x0106 #LATIN CAPITAL LETTER C WITH ACUTE
-0xC4 0x00C4 #LATIN CAPITAL LETTER A WITH DIAERESIS
-0xC5 0x00C5 #LATIN CAPITAL LETTER A WITH RING ABOVE
-0xC6 0x0118 #LATIN CAPITAL LETTER E WITH OGONEK
-0xC7 0x0112 #LATIN CAPITAL LETTER E WITH MACRON
-0xC8 0x010C #LATIN CAPITAL LETTER C WITH CARON
-0xC9 0x00C9 #LATIN CAPITAL LETTER E WITH ACUTE
-0xCA 0x0179 #LATIN CAPITAL LETTER Z WITH ACUTE
-0xCB 0x0116 #LATIN CAPITAL LETTER E WITH DOT ABOVE
-0xCC 0x0122 #LATIN CAPITAL LETTER G WITH CEDILLA
-0xCD 0x0136 #LATIN CAPITAL LETTER K WITH CEDILLA
-0xCE 0x012A #LATIN CAPITAL LETTER I WITH MACRON
-0xCF 0x013B #LATIN CAPITAL LETTER L WITH CEDILLA
-0xD0 0x0160 #LATIN CAPITAL LETTER S WITH CARON
-0xD1 0x0143 #LATIN CAPITAL LETTER N WITH ACUTE
-0xD2 0x0145 #LATIN CAPITAL LETTER N WITH CEDILLA
-0xD3 0x00D3 #LATIN CAPITAL LETTER O WITH ACUTE
-0xD4 0x014C #LATIN CAPITAL LETTER O WITH MACRON
-0xD5 0x00D5 #LATIN CAPITAL LETTER O WITH TILDE
-0xD6 0x00D6 #LATIN CAPITAL LETTER O WITH DIAERESIS
-0xD7 0x00D7 #MULTIPLICATION SIGN
-0xD8 0x0172 #LATIN CAPITAL LETTER U WITH OGONEK
-0xD9 0x0141 #LATIN CAPITAL LETTER L WITH STROKE
-0xDA 0x015A #LATIN CAPITAL LETTER S WITH ACUTE
-0xDB 0x016A #LATIN CAPITAL LETTER U WITH MACRON
-0xDC 0x00DC #LATIN CAPITAL LETTER U WITH DIAERESIS
-0xDD 0x017B #LATIN CAPITAL LETTER Z WITH DOT ABOVE
-0xDE 0x017D #LATIN CAPITAL LETTER Z WITH CARON
-0xDF 0x00DF #LATIN SMALL LETTER SHARP S
-0xE0 0x0105 #LATIN SMALL LETTER A WITH OGONEK
-0xE1 0x012F #LATIN SMALL LETTER I WITH OGONEK
-0xE2 0x0101 #LATIN SMALL LETTER A WITH MACRON
-0xE3 0x0107 #LATIN SMALL LETTER C WITH ACUTE
-0xE4 0x00E4 #LATIN SMALL LETTER A WITH DIAERESIS
-0xE5 0x00E5 #LATIN SMALL LETTER A WITH RING ABOVE
-0xE6 0x0119 #LATIN SMALL LETTER E WITH OGONEK
-0xE7 0x0113 #LATIN SMALL LETTER E WITH MACRON
-0xE8 0x010D #LATIN SMALL LETTER C WITH CARON
-0xE9 0x00E9 #LATIN SMALL LETTER E WITH ACUTE
-0xEA 0x017A #LATIN SMALL LETTER Z WITH ACUTE
-0xEB 0x0117 #LATIN SMALL LETTER E WITH DOT ABOVE
-0xEC 0x0123 #LATIN SMALL LETTER G WITH CEDILLA
-0xED 0x0137 #LATIN SMALL LETTER K WITH CEDILLA
-0xEE 0x012B #LATIN SMALL LETTER I WITH MACRON
-0xEF 0x013C #LATIN SMALL LETTER L WITH CEDILLA
-0xF0 0x0161 #LATIN SMALL LETTER S WITH CARON
-0xF1 0x0144 #LATIN SMALL LETTER N WITH ACUTE
-0xF2 0x0146 #LATIN SMALL LETTER N WITH CEDILLA
-0xF3 0x00F3 #LATIN SMALL LETTER O WITH ACUTE
-0xF4 0x014D #LATIN SMALL LETTER O WITH MACRON
-0xF5 0x00F5 #LATIN SMALL LETTER O WITH TILDE
-0xF6 0x00F6 #LATIN SMALL LETTER O WITH DIAERESIS
-0xF7 0x00F7 #DIVISION SIGN
-0xF8 0x0173 #LATIN SMALL LETTER U WITH OGONEK
-0xF9 0x0142 #LATIN SMALL LETTER L WITH STROKE
-0xFA 0x015B #LATIN SMALL LETTER S WITH ACUTE
-0xFB 0x016B #LATIN SMALL LETTER U WITH MACRON
-0xFC 0x00FC #LATIN SMALL LETTER U WITH DIAERESIS
-0xFD 0x017C #LATIN SMALL LETTER Z WITH DOT ABOVE
-0xFE 0x017E #LATIN SMALL LETTER Z WITH CARON
-0xFF 0x02D9 #DOT ABOVE
diff --git a/program/lib/encoding/CP1258.map b/program/lib/encoding/CP1258.map
deleted file mode 100644
index 392310a8c..000000000
--- a/program/lib/encoding/CP1258.map
+++ /dev/null
@@ -1,274 +0,0 @@
-#
-# Name: cp1258 to Unicode table
-# Unicode version: 2.0
-# Table version: 2.01
-# Table format: Format A
-# Date: 04/15/98
-#
-# Contact: cpxlate@microsoft.com
-#
-# General notes: none
-#
-# Format: Three tab-separated columns
-# Column #1 is the cp1258 code (in hex)
-# Column #2 is the Unicode (in hex as 0xXXXX)
-# Column #3 is the Unicode name (follows a comment sign, '#')
-#
-# The entries are in cp1258 order
-#
-0x00 0x0000 #NULL
-0x01 0x0001 #START OF HEADING
-0x02 0x0002 #START OF TEXT
-0x03 0x0003 #END OF TEXT
-0x04 0x0004 #END OF TRANSMISSION
-0x05 0x0005 #ENQUIRY
-0x06 0x0006 #ACKNOWLEDGE
-0x07 0x0007 #BELL
-0x08 0x0008 #BACKSPACE
-0x09 0x0009 #HORIZONTAL TABULATION
-0x0A 0x000A #LINE FEED
-0x0B 0x000B #VERTICAL TABULATION
-0x0C 0x000C #FORM FEED
-0x0D 0x000D #CARRIAGE RETURN
-0x0E 0x000E #SHIFT OUT
-0x0F 0x000F #SHIFT IN
-0x10 0x0010 #DATA LINK ESCAPE
-0x11 0x0011 #DEVICE CONTROL ONE
-0x12 0x0012 #DEVICE CONTROL TWO
-0x13 0x0013 #DEVICE CONTROL THREE
-0x14 0x0014 #DEVICE CONTROL FOUR
-0x15 0x0015 #NEGATIVE ACKNOWLEDGE
-0x16 0x0016 #SYNCHRONOUS IDLE
-0x17 0x0017 #END OF TRANSMISSION BLOCK
-0x18 0x0018 #CANCEL
-0x19 0x0019 #END OF MEDIUM
-0x1A 0x001A #SUBSTITUTE
-0x1B 0x001B #ESCAPE
-0x1C 0x001C #FILE SEPARATOR
-0x1D 0x001D #GROUP SEPARATOR
-0x1E 0x001E #RECORD SEPARATOR
-0x1F 0x001F #UNIT SEPARATOR
-0x20 0x0020 #SPACE
-0x21 0x0021 #EXCLAMATION MARK
-0x22 0x0022 #QUOTATION MARK
-0x23 0x0023 #NUMBER SIGN
-0x24 0x0024 #DOLLAR SIGN
-0x25 0x0025 #PERCENT SIGN
-0x26 0x0026 #AMPERSAND
-0x27 0x0027 #APOSTROPHE
-0x28 0x0028 #LEFT PARENTHESIS
-0x29 0x0029 #RIGHT PARENTHESIS
-0x2A 0x002A #ASTERISK
-0x2B 0x002B #PLUS SIGN
-0x2C 0x002C #COMMA
-0x2D 0x002D #HYPHEN-MINUS
-0x2E 0x002E #FULL STOP
-0x2F 0x002F #SOLIDUS
-0x30 0x0030 #DIGIT ZERO
-0x31 0x0031 #DIGIT ONE
-0x32 0x0032 #DIGIT TWO
-0x33 0x0033 #DIGIT THREE
-0x34 0x0034 #DIGIT FOUR
-0x35 0x0035 #DIGIT FIVE
-0x36 0x0036 #DIGIT SIX
-0x37 0x0037 #DIGIT SEVEN
-0x38 0x0038 #DIGIT EIGHT
-0x39 0x0039 #DIGIT NINE
-0x3A 0x003A #COLON
-0x3B 0x003B #SEMICOLON
-0x3C 0x003C #LESS-THAN SIGN
-0x3D 0x003D #EQUALS SIGN
-0x3E 0x003E #GREATER-THAN SIGN
-0x3F 0x003F #QUESTION MARK
-0x40 0x0040 #COMMERCIAL AT
-0x41 0x0041 #LATIN CAPITAL LETTER A
-0x42 0x0042 #LATIN CAPITAL LETTER B
-0x43 0x0043 #LATIN CAPITAL LETTER C
-0x44 0x0044 #LATIN CAPITAL LETTER D
-0x45 0x0045 #LATIN CAPITAL LETTER E
-0x46 0x0046 #LATIN CAPITAL LETTER F
-0x47 0x0047 #LATIN CAPITAL LETTER G
-0x48 0x0048 #LATIN CAPITAL LETTER H
-0x49 0x0049 #LATIN CAPITAL LETTER I
-0x4A 0x004A #LATIN CAPITAL LETTER J
-0x4B 0x004B #LATIN CAPITAL LETTER K
-0x4C 0x004C #LATIN CAPITAL LETTER L
-0x4D 0x004D #LATIN CAPITAL LETTER M
-0x4E 0x004E #LATIN CAPITAL LETTER N
-0x4F 0x004F #LATIN CAPITAL LETTER O
-0x50 0x0050 #LATIN CAPITAL LETTER P
-0x51 0x0051 #LATIN CAPITAL LETTER Q
-0x52 0x0052 #LATIN CAPITAL LETTER R
-0x53 0x0053 #LATIN CAPITAL LETTER S
-0x54 0x0054 #LATIN CAPITAL LETTER T
-0x55 0x0055 #LATIN CAPITAL LETTER U
-0x56 0x0056 #LATIN CAPITAL LETTER V
-0x57 0x0057 #LATIN CAPITAL LETTER W
-0x58 0x0058 #LATIN CAPITAL LETTER X
-0x59 0x0059 #LATIN CAPITAL LETTER Y
-0x5A 0x005A #LATIN CAPITAL LETTER Z
-0x5B 0x005B #LEFT SQUARE BRACKET
-0x5C 0x005C #REVERSE SOLIDUS
-0x5D 0x005D #RIGHT SQUARE BRACKET
-0x5E 0x005E #CIRCUMFLEX ACCENT
-0x5F 0x005F #LOW LINE
-0x60 0x0060 #GRAVE ACCENT
-0x61 0x0061 #LATIN SMALL LETTER A
-0x62 0x0062 #LATIN SMALL LETTER B
-0x63 0x0063 #LATIN SMALL LETTER C
-0x64 0x0064 #LATIN SMALL LETTER D
-0x65 0x0065 #LATIN SMALL LETTER E
-0x66 0x0066 #LATIN SMALL LETTER F
-0x67 0x0067 #LATIN SMALL LETTER G
-0x68 0x0068 #LATIN SMALL LETTER H
-0x69 0x0069 #LATIN SMALL LETTER I
-0x6A 0x006A #LATIN SMALL LETTER J
-0x6B 0x006B #LATIN SMALL LETTER K
-0x6C 0x006C #LATIN SMALL LETTER L
-0x6D 0x006D #LATIN SMALL LETTER M
-0x6E 0x006E #LATIN SMALL LETTER N
-0x6F 0x006F #LATIN SMALL LETTER O
-0x70 0x0070 #LATIN SMALL LETTER P
-0x71 0x0071 #LATIN SMALL LETTER Q
-0x72 0x0072 #LATIN SMALL LETTER R
-0x73 0x0073 #LATIN SMALL LETTER S
-0x74 0x0074 #LATIN SMALL LETTER T
-0x75 0x0075 #LATIN SMALL LETTER U
-0x76 0x0076 #LATIN SMALL LETTER V
-0x77 0x0077 #LATIN SMALL LETTER W
-0x78 0x0078 #LATIN SMALL LETTER X
-0x79 0x0079 #LATIN SMALL LETTER Y
-0x7A 0x007A #LATIN SMALL LETTER Z
-0x7B 0x007B #LEFT CURLY BRACKET
-0x7C 0x007C #VERTICAL LINE
-0x7D 0x007D #RIGHT CURLY BRACKET
-0x7E 0x007E #TILDE
-0x7F 0x007F #DELETE
-0x80 0x20AC #EURO SIGN
-0x81 #UNDEFINED
-0x82 0x201A #SINGLE LOW-9 QUOTATION MARK
-0x83 0x0192 #LATIN SMALL LETTER F WITH HOOK
-0x84 0x201E #DOUBLE LOW-9 QUOTATION MARK
-0x85 0x2026 #HORIZONTAL ELLIPSIS
-0x86 0x2020 #DAGGER
-0x87 0x2021 #DOUBLE DAGGER
-0x88 0x02C6 #MODIFIER LETTER CIRCUMFLEX ACCENT
-0x89 0x2030 #PER MILLE SIGN
-0x8A #UNDEFINED
-0x8B 0x2039 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK
-0x8C 0x0152 #LATIN CAPITAL LIGATURE OE
-0x8D #UNDEFINED
-0x8E #UNDEFINED
-0x8F #UNDEFINED
-0x90 #UNDEFINED
-0x91 0x2018 #LEFT SINGLE QUOTATION MARK
-0x92 0x2019 #RIGHT SINGLE QUOTATION MARK
-0x93 0x201C #LEFT DOUBLE QUOTATION MARK
-0x94 0x201D #RIGHT DOUBLE QUOTATION MARK
-0x95 0x2022 #BULLET
-0x96 0x2013 #EN DASH
-0x97 0x2014 #EM DASH
-0x98 0x02DC #SMALL TILDE
-0x99 0x2122 #TRADE MARK SIGN
-0x9A #UNDEFINED
-0x9B 0x203A #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
-0x9C 0x0153 #LATIN SMALL LIGATURE OE
-0x9D #UNDEFINED
-0x9E #UNDEFINED
-0x9F 0x0178 #LATIN CAPITAL LETTER Y WITH DIAERESIS
-0xA0 0x00A0 #NO-BREAK SPACE
-0xA1 0x00A1 #INVERTED EXCLAMATION MARK
-0xA2 0x00A2 #CENT SIGN
-0xA3 0x00A3 #POUND SIGN
-0xA4 0x00A4 #CURRENCY SIGN
-0xA5 0x00A5 #YEN SIGN
-0xA6 0x00A6 #BROKEN BAR
-0xA7 0x00A7 #SECTION SIGN
-0xA8 0x00A8 #DIAERESIS
-0xA9 0x00A9 #COPYRIGHT SIGN
-0xAA 0x00AA #FEMININE ORDINAL INDICATOR
-0xAB 0x00AB #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-0xAC 0x00AC #NOT SIGN
-0xAD 0x00AD #SOFT HYPHEN
-0xAE 0x00AE #REGISTERED SIGN
-0xAF 0x00AF #MACRON
-0xB0 0x00B0 #DEGREE SIGN
-0xB1 0x00B1 #PLUS-MINUS SIGN
-0xB2 0x00B2 #SUPERSCRIPT TWO
-0xB3 0x00B3 #SUPERSCRIPT THREE
-0xB4 0x00B4 #ACUTE ACCENT
-0xB5 0x00B5 #MICRO SIGN
-0xB6 0x00B6 #PILCROW SIGN
-0xB7 0x00B7 #MIDDLE DOT
-0xB8 0x00B8 #CEDILLA
-0xB9 0x00B9 #SUPERSCRIPT ONE
-0xBA 0x00BA #MASCULINE ORDINAL INDICATOR
-0xBB 0x00BB #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-0xBC 0x00BC #VULGAR FRACTION ONE QUARTER
-0xBD 0x00BD #VULGAR FRACTION ONE HALF
-0xBE 0x00BE #VULGAR FRACTION THREE QUARTERS
-0xBF 0x00BF #INVERTED QUESTION MARK
-0xC0 0x00C0 #LATIN CAPITAL LETTER A WITH GRAVE
-0xC1 0x00C1 #LATIN CAPITAL LETTER A WITH ACUTE
-0xC2 0x00C2 #LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-0xC3 0x0102 #LATIN CAPITAL LETTER A WITH BREVE
-0xC4 0x00C4 #LATIN CAPITAL LETTER A WITH DIAERESIS
-0xC5 0x00C5 #LATIN CAPITAL LETTER A WITH RING ABOVE
-0xC6 0x00C6 #LATIN CAPITAL LETTER AE
-0xC7 0x00C7 #LATIN CAPITAL LETTER C WITH CEDILLA
-0xC8 0x00C8 #LATIN CAPITAL LETTER E WITH GRAVE
-0xC9 0x00C9 #LATIN CAPITAL LETTER E WITH ACUTE
-0xCA 0x00CA #LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-0xCB 0x00CB #LATIN CAPITAL LETTER E WITH DIAERESIS
-0xCC 0x0300 #COMBINING GRAVE ACCENT
-0xCD 0x00CD #LATIN CAPITAL LETTER I WITH ACUTE
-0xCE 0x00CE #LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-0xCF 0x00CF #LATIN CAPITAL LETTER I WITH DIAERESIS
-0xD0 0x0110 #LATIN CAPITAL LETTER D WITH STROKE
-0xD1 0x00D1 #LATIN CAPITAL LETTER N WITH TILDE
-0xD2 0x0309 #COMBINING HOOK ABOVE
-0xD3 0x00D3 #LATIN CAPITAL LETTER O WITH ACUTE
-0xD4 0x00D4 #LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-0xD5 0x01A0 #LATIN CAPITAL LETTER O WITH HORN
-0xD6 0x00D6 #LATIN CAPITAL LETTER O WITH DIAERESIS
-0xD7 0x00D7 #MULTIPLICATION SIGN
-0xD8 0x00D8 #LATIN CAPITAL LETTER O WITH STROKE
-0xD9 0x00D9 #LATIN CAPITAL LETTER U WITH GRAVE
-0xDA 0x00DA #LATIN CAPITAL LETTER U WITH ACUTE
-0xDB 0x00DB #LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-0xDC 0x00DC #LATIN CAPITAL LETTER U WITH DIAERESIS
-0xDD 0x01AF #LATIN CAPITAL LETTER U WITH HORN
-0xDE 0x0303 #COMBINING TILDE
-0xDF 0x00DF #LATIN SMALL LETTER SHARP S
-0xE0 0x00E0 #LATIN SMALL LETTER A WITH GRAVE
-0xE1 0x00E1 #LATIN SMALL LETTER A WITH ACUTE
-0xE2 0x00E2 #LATIN SMALL LETTER A WITH CIRCUMFLEX
-0xE3 0x0103 #LATIN SMALL LETTER A WITH BREVE
-0xE4 0x00E4 #LATIN SMALL LETTER A WITH DIAERESIS
-0xE5 0x00E5 #LATIN SMALL LETTER A WITH RING ABOVE
-0xE6 0x00E6 #LATIN SMALL LETTER AE
-0xE7 0x00E7 #LATIN SMALL LETTER C WITH CEDILLA
-0xE8 0x00E8 #LATIN SMALL LETTER E WITH GRAVE
-0xE9 0x00E9 #LATIN SMALL LETTER E WITH ACUTE
-0xEA 0x00EA #LATIN SMALL LETTER E WITH CIRCUMFLEX
-0xEB 0x00EB #LATIN SMALL LETTER E WITH DIAERESIS
-0xEC 0x0301 #COMBINING ACUTE ACCENT
-0xED 0x00ED #LATIN SMALL LETTER I WITH ACUTE
-0xEE 0x00EE #LATIN SMALL LETTER I WITH CIRCUMFLEX
-0xEF 0x00EF #LATIN SMALL LETTER I WITH DIAERESIS
-0xF0 0x0111 #LATIN SMALL LETTER D WITH STROKE
-0xF1 0x00F1 #LATIN SMALL LETTER N WITH TILDE
-0xF2 0x0323 #COMBINING DOT BELOW
-0xF3 0x00F3 #LATIN SMALL LETTER O WITH ACUTE
-0xF4 0x00F4 #LATIN SMALL LETTER O WITH CIRCUMFLEX
-0xF5 0x01A1 #LATIN SMALL LETTER O WITH HORN
-0xF6 0x00F6 #LATIN SMALL LETTER O WITH DIAERESIS
-0xF7 0x00F7 #DIVISION SIGN
-0xF8 0x00F8 #LATIN SMALL LETTER O WITH STROKE
-0xF9 0x00F9 #LATIN SMALL LETTER U WITH GRAVE
-0xFA 0x00FA #LATIN SMALL LETTER U WITH ACUTE
-0xFB 0x00FB #LATIN SMALL LETTER U WITH CIRCUMFLEX
-0xFC 0x00FC #LATIN SMALL LETTER U WITH DIAERESIS
-0xFD 0x01B0 #LATIN SMALL LETTER U WITH HORN
-0xFE 0x20AB #DONG SIGN
-0xFF 0x00FF #LATIN SMALL LETTER Y WITH DIAERESIS
diff --git a/program/lib/encoding/ISO-8859-1.map b/program/lib/encoding/ISO-8859-1.map
deleted file mode 100644
index 473ecabc1..000000000
--- a/program/lib/encoding/ISO-8859-1.map
+++ /dev/null
@@ -1,303 +0,0 @@
-#
-# Name: ISO/IEC 8859-1:1998 to Unicode
-# Unicode version: 3.0
-# Table version: 1.0
-# Table format: Format A
-# Date: 1999 July 27
-# Authors: Ken Whistler <kenw@sybase.com>
-#
-# Copyright (c) 1991-1999 Unicode, Inc. All Rights reserved.
-#
-# This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
-# No claims are made as to fitness for any particular purpose. No
-# warranties of any kind are expressed or implied. The recipient
-# agrees to determine applicability of information provided. If this
-# file has been provided on optical media by Unicode, Inc., the sole
-# remedy for any claim will be exchange of defective media within 90
-# days of receipt.
-#
-# Unicode, Inc. hereby grants the right to freely use the information
-# supplied in this file in the creation of products supporting the
-# Unicode Standard, and to make copies of this file in any form for
-# internal or external distribution as long as this notice remains
-# attached.
-#
-# General notes:
-#
-# This table contains the data the Unicode Consortium has on how
-# ISO/IEC 8859-1:1998 characters map into Unicode.
-#
-# Format: Three tab-separated columns
-# Column #1 is the ISO/IEC 8859-1 code (in hex as 0xXX)
-# Column #2 is the Unicode (in hex as 0xXXXX)
-# Column #3 the Unicode name (follows a comment sign, '#')
-#
-# The entries are in ISO/IEC 8859-1 order.
-#
-# Version history
-# 1.0 version updates 0.1 version by adding mappings for all
-# control characters.
-#
-# Updated versions of this file may be found in:
-# <ftp://ftp.unicode.org/Public/MAPPINGS/>
-#
-# Any comments or problems, contact <errata@unicode.org>
-# Please note that <errata@unicode.org> is an archival address;
-# notices will be checked, but do not expect an immediate response.
-#
-0x00 0x0000 # NULL
-0x01 0x0001 # START OF HEADING
-0x02 0x0002 # START OF TEXT
-0x03 0x0003 # END OF TEXT
-0x04 0x0004 # END OF TRANSMISSION
-0x05 0x0005 # ENQUIRY
-0x06 0x0006 # ACKNOWLEDGE
-0x07 0x0007 # BELL
-0x08 0x0008 # BACKSPACE
-0x09 0x0009 # HORIZONTAL TABULATION
-0x0A 0x000A # LINE FEED
-0x0B 0x000B # VERTICAL TABULATION
-0x0C 0x000C # FORM FEED
-0x0D 0x000D # CARRIAGE RETURN
-0x0E 0x000E # SHIFT OUT
-0x0F 0x000F # SHIFT IN
-0x10 0x0010 # DATA LINK ESCAPE
-0x11 0x0011 # DEVICE CONTROL ONE
-0x12 0x0012 # DEVICE CONTROL TWO
-0x13 0x0013 # DEVICE CONTROL THREE
-0x14 0x0014 # DEVICE CONTROL FOUR
-0x15 0x0015 # NEGATIVE ACKNOWLEDGE
-0x16 0x0016 # SYNCHRONOUS IDLE
-0x17 0x0017 # END OF TRANSMISSION BLOCK
-0x18 0x0018 # CANCEL
-0x19 0x0019 # END OF MEDIUM
-0x1A 0x001A # SUBSTITUTE
-0x1B 0x001B # ESCAPE
-0x1C 0x001C # FILE SEPARATOR
-0x1D 0x001D # GROUP SEPARATOR
-0x1E 0x001E # RECORD SEPARATOR
-0x1F 0x001F # UNIT SEPARATOR
-0x20 0x0020 # SPACE
-0x21 0x0021 # EXCLAMATION MARK
-0x22 0x0022 # QUOTATION MARK
-0x23 0x0023 # NUMBER SIGN
-0x24 0x0024 # DOLLAR SIGN
-0x25 0x0025 # PERCENT SIGN
-0x26 0x0026 # AMPERSAND
-0x27 0x0027 # APOSTROPHE
-0x28 0x0028 # LEFT PARENTHESIS
-0x29 0x0029 # RIGHT PARENTHESIS
-0x2A 0x002A # ASTERISK
-0x2B 0x002B # PLUS SIGN
-0x2C 0x002C # COMMA
-0x2D 0x002D # HYPHEN-MINUS
-0x2E 0x002E # FULL STOP
-0x2F 0x002F # SOLIDUS
-0x30 0x0030 # DIGIT ZERO
-0x31 0x0031 # DIGIT ONE
-0x32 0x0032 # DIGIT TWO
-0x33 0x0033 # DIGIT THREE
-0x34 0x0034 # DIGIT FOUR
-0x35 0x0035 # DIGIT FIVE
-0x36 0x0036 # DIGIT SIX
-0x37 0x0037 # DIGIT SEVEN
-0x38 0x0038 # DIGIT EIGHT
-0x39 0x0039 # DIGIT NINE
-0x3A 0x003A # COLON
-0x3B 0x003B # SEMICOLON
-0x3C 0x003C # LESS-THAN SIGN
-0x3D 0x003D # EQUALS SIGN
-0x3E 0x003E # GREATER-THAN SIGN
-0x3F 0x003F # QUESTION MARK
-0x40 0x0040 # COMMERCIAL AT
-0x41 0x0041 # LATIN CAPITAL LETTER A
-0x42 0x0042 # LATIN CAPITAL LETTER B
-0x43 0x0043 # LATIN CAPITAL LETTER C
-0x44 0x0044 # LATIN CAPITAL LETTER D
-0x45 0x0045 # LATIN CAPITAL LETTER E
-0x46 0x0046 # LATIN CAPITAL LETTER F
-0x47 0x0047 # LATIN CAPITAL LETTER G
-0x48 0x0048 # LATIN CAPITAL LETTER H
-0x49 0x0049 # LATIN CAPITAL LETTER I
-0x4A 0x004A # LATIN CAPITAL LETTER J
-0x4B 0x004B # LATIN CAPITAL LETTER K
-0x4C 0x004C # LATIN CAPITAL LETTER L
-0x4D 0x004D # LATIN CAPITAL LETTER M
-0x4E 0x004E # LATIN CAPITAL LETTER N
-0x4F 0x004F # LATIN CAPITAL LETTER O
-0x50 0x0050 # LATIN CAPITAL LETTER P
-0x51 0x0051 # LATIN CAPITAL LETTER Q
-0x52 0x0052 # LATIN CAPITAL LETTER R
-0x53 0x0053 # LATIN CAPITAL LETTER S
-0x54 0x0054 # LATIN CAPITAL LETTER T
-0x55 0x0055 # LATIN CAPITAL LETTER U
-0x56 0x0056 # LATIN CAPITAL LETTER V
-0x57 0x0057 # LATIN CAPITAL LETTER W
-0x58 0x0058 # LATIN CAPITAL LETTER X
-0x59 0x0059 # LATIN CAPITAL LETTER Y
-0x5A 0x005A # LATIN CAPITAL LETTER Z
-0x5B 0x005B # LEFT SQUARE BRACKET
-0x5C 0x005C # REVERSE SOLIDUS
-0x5D 0x005D # RIGHT SQUARE BRACKET
-0x5E 0x005E # CIRCUMFLEX ACCENT
-0x5F 0x005F # LOW LINE
-0x60 0x0060 # GRAVE ACCENT
-0x61 0x0061 # LATIN SMALL LETTER A
-0x62 0x0062 # LATIN SMALL LETTER B
-0x63 0x0063 # LATIN SMALL LETTER C
-0x64 0x0064 # LATIN SMALL LETTER D
-0x65 0x0065 # LATIN SMALL LETTER E
-0x66 0x0066 # LATIN SMALL LETTER F
-0x67 0x0067 # LATIN SMALL LETTER G
-0x68 0x0068 # LATIN SMALL LETTER H
-0x69 0x0069 # LATIN SMALL LETTER I
-0x6A 0x006A # LATIN SMALL LETTER J
-0x6B 0x006B # LATIN SMALL LETTER K
-0x6C 0x006C # LATIN SMALL LETTER L
-0x6D 0x006D # LATIN SMALL LETTER M
-0x6E 0x006E # LATIN SMALL LETTER N
-0x6F 0x006F # LATIN SMALL LETTER O
-0x70 0x0070 # LATIN SMALL LETTER P
-0x71 0x0071 # LATIN SMALL LETTER Q
-0x72 0x0072 # LATIN SMALL LETTER R
-0x73 0x0073 # LATIN SMALL LETTER S
-0x74 0x0074 # LATIN SMALL LETTER T
-0x75 0x0075 # LATIN SMALL LETTER U
-0x76 0x0076 # LATIN SMALL LETTER V
-0x77 0x0077 # LATIN SMALL LETTER W
-0x78 0x0078 # LATIN SMALL LETTER X
-0x79 0x0079 # LATIN SMALL LETTER Y
-0x7A 0x007A # LATIN SMALL LETTER Z
-0x7B 0x007B # LEFT CURLY BRACKET
-0x7C 0x007C # VERTICAL LINE
-0x7D 0x007D # RIGHT CURLY BRACKET
-0x7E 0x007E # TILDE
-0x7F 0x007F # DELETE
-0x80 0x0080 # <control>
-0x81 0x0081 # <control>
-0x82 0x0082 # <control>
-0x83 0x0083 # <control>
-0x84 0x0084 # <control>
-0x85 0x0085 # <control>
-0x86 0x0086 # <control>
-0x87 0x0087 # <control>
-0x88 0x0088 # <control>
-0x89 0x0089 # <control>
-0x8A 0x008A # <control>
-0x8B 0x008B # <control>
-0x8C 0x008C # <control>
-0x8D 0x008D # <control>
-0x8E 0x008E # <control>
-0x8F 0x008F # <control>
-0x90 0x0090 # <control>
-0x91 0x0091 # <control>
-0x92 0x0092 # <control>
-0x93 0x0093 # <control>
-0x94 0x0094 # <control>
-0x95 0x0095 # <control>
-0x96 0x0096 # <control>
-0x97 0x0097 # <control>
-0x98 0x0098 # <control>
-0x99 0x0099 # <control>
-0x9A 0x009A # <control>
-0x9B 0x009B # <control>
-0x9C 0x009C # <control>
-0x9D 0x009D # <control>
-0x9E 0x009E # <control>
-0x9F 0x009F # <control>
-0xA0 0x00A0 # NO-BREAK SPACE
-0xA1 0x00A1 # INVERTED EXCLAMATION MARK
-0xA2 0x00A2 # CENT SIGN
-0xA3 0x00A3 # POUND SIGN
-0xA4 0x00A4 # CURRENCY SIGN
-0xA5 0x00A5 # YEN SIGN
-0xA6 0x00A6 # BROKEN BAR
-0xA7 0x00A7 # SECTION SIGN
-0xA8 0x00A8 # DIAERESIS
-0xA9 0x00A9 # COPYRIGHT SIGN
-0xAA 0x00AA # FEMININE ORDINAL INDICATOR
-0xAB 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-0xAC 0x00AC # NOT SIGN
-0xAD 0x00AD # SOFT HYPHEN
-0xAE 0x00AE # REGISTERED SIGN
-0xAF 0x00AF # MACRON
-0xB0 0x00B0 # DEGREE SIGN
-0xB1 0x00B1 # PLUS-MINUS SIGN
-0xB2 0x00B2 # SUPERSCRIPT TWO
-0xB3 0x00B3 # SUPERSCRIPT THREE
-0xB4 0x00B4 # ACUTE ACCENT
-0xB5 0x00B5 # MICRO SIGN
-0xB6 0x00B6 # PILCROW SIGN
-0xB7 0x00B7 # MIDDLE DOT
-0xB8 0x00B8 # CEDILLA
-0xB9 0x00B9 # SUPERSCRIPT ONE
-0xBA 0x00BA # MASCULINE ORDINAL INDICATOR
-0xBB 0x00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-0xBC 0x00BC # VULGAR FRACTION ONE QUARTER
-0xBD 0x00BD # VULGAR FRACTION ONE HALF
-0xBE 0x00BE # VULGAR FRACTION THREE QUARTERS
-0xBF 0x00BF # INVERTED QUESTION MARK
-0xC0 0x00C0 # LATIN CAPITAL LETTER A WITH GRAVE
-0xC1 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE
-0xC2 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-0xC3 0x00C3 # LATIN CAPITAL LETTER A WITH TILDE
-0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
-0xC5 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE
-0xC6 0x00C6 # LATIN CAPITAL LETTER AE
-0xC7 0x00C7 # LATIN CAPITAL LETTER C WITH CEDILLA
-0xC8 0x00C8 # LATIN CAPITAL LETTER E WITH GRAVE
-0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE
-0xCA 0x00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-0xCB 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS
-0xCC 0x00CC # LATIN CAPITAL LETTER I WITH GRAVE
-0xCD 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE
-0xCE 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-0xCF 0x00CF # LATIN CAPITAL LETTER I WITH DIAERESIS
-0xD0 0x00D0 # LATIN CAPITAL LETTER ETH (Icelandic)
-0xD1 0x00D1 # LATIN CAPITAL LETTER N WITH TILDE
-0xD2 0x00D2 # LATIN CAPITAL LETTER O WITH GRAVE
-0xD3 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE
-0xD4 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-0xD5 0x00D5 # LATIN CAPITAL LETTER O WITH TILDE
-0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
-0xD7 0x00D7 # MULTIPLICATION SIGN
-0xD8 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE
-0xD9 0x00D9 # LATIN CAPITAL LETTER U WITH GRAVE
-0xDA 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE
-0xDB 0x00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
-0xDD 0x00DD # LATIN CAPITAL LETTER Y WITH ACUTE
-0xDE 0x00DE # LATIN CAPITAL LETTER THORN (Icelandic)
-0xDF 0x00DF # LATIN SMALL LETTER SHARP S (German)
-0xE0 0x00E0 # LATIN SMALL LETTER A WITH GRAVE
-0xE1 0x00E1 # LATIN SMALL LETTER A WITH ACUTE
-0xE2 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX
-0xE3 0x00E3 # LATIN SMALL LETTER A WITH TILDE
-0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS
-0xE5 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE
-0xE6 0x00E6 # LATIN SMALL LETTER AE
-0xE7 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA
-0xE8 0x00E8 # LATIN SMALL LETTER E WITH GRAVE
-0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE
-0xEA 0x00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX
-0xEB 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS
-0xEC 0x00EC # LATIN SMALL LETTER I WITH GRAVE
-0xED 0x00ED # LATIN SMALL LETTER I WITH ACUTE
-0xEE 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX
-0xEF 0x00EF # LATIN SMALL LETTER I WITH DIAERESIS
-0xF0 0x00F0 # LATIN SMALL LETTER ETH (Icelandic)
-0xF1 0x00F1 # LATIN SMALL LETTER N WITH TILDE
-0xF2 0x00F2 # LATIN SMALL LETTER O WITH GRAVE
-0xF3 0x00F3 # LATIN SMALL LETTER O WITH ACUTE
-0xF4 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX
-0xF5 0x00F5 # LATIN SMALL LETTER O WITH TILDE
-0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS
-0xF7 0x00F7 # DIVISION SIGN
-0xF8 0x00F8 # LATIN SMALL LETTER O WITH STROKE
-0xF9 0x00F9 # LATIN SMALL LETTER U WITH GRAVE
-0xFA 0x00FA # LATIN SMALL LETTER U WITH ACUTE
-0xFB 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX
-0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS
-0xFD 0x00FD # LATIN SMALL LETTER Y WITH ACUTE
-0xFE 0x00FE # LATIN SMALL LETTER THORN (Icelandic)
-0xFF 0x00FF # LATIN SMALL LETTER Y WITH DIAERESIS
diff --git a/program/lib/encoding/ISO-8859-10.map b/program/lib/encoding/ISO-8859-10.map
deleted file mode 100644
index 374a42b1a..000000000
--- a/program/lib/encoding/ISO-8859-10.map
+++ /dev/null
@@ -1,303 +0,0 @@
-#
-# Name: ISO/IEC 8859-10:1998 to Unicode
-# Unicode version: 3.0
-# Table version: 1.1
-# Table format: Format A
-# Date: 1999 October 11
-# Authors: Ken Whistler <kenw@sybase.com>
-#
-# Copyright (c) 1999 Unicode, Inc. All Rights reserved.
-#
-# This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
-# No claims are made as to fitness for any particular purpose. No
-# warranties of any kind are expressed or implied. The recipient
-# agrees to determine applicability of information provided. If this
-# file has been provided on optical media by Unicode, Inc., the sole
-# remedy for any claim will be exchange of defective media within 90
-# days of receipt.
-#
-# Unicode, Inc. hereby grants the right to freely use the information
-# supplied in this file in the creation of products supporting the
-# Unicode Standard, and to make copies of this file in any form for
-# internal or external distribution as long as this notice remains
-# attached.
-#
-# General notes:
-#
-# This table contains the data the Unicode Consortium has on how
-# ISO/IEC 8859-10:1998 characters map into Unicode.
-#
-# Format: Three tab-separated columns
-# Column #1 is the ISO/IEC 8859-10 code (in hex as 0xXX)
-# Column #2 is the Unicode (in hex as 0xXXXX)
-# Column #3 the Unicode name (follows a comment sign, '#')
-#
-# The entries are in ISO/IEC 8859-10 order.
-#
-# Version history
-# 1.0 version new.
-# 1.1 corrected mistake in mapping of 0xA4
-#
-# Updated versions of this file may be found in:
-# <ftp://ftp.unicode.org/Public/MAPPINGS/>
-#
-# Any comments or problems, contact <errata@unicode.org>
-# Please note that <errata@unicode.org> is an archival address;
-# notices will be checked, but do not expect an immediate response.
-#
-0x00 0x0000 # NULL
-0x01 0x0001 # START OF HEADING
-0x02 0x0002 # START OF TEXT
-0x03 0x0003 # END OF TEXT
-0x04 0x0004 # END OF TRANSMISSION
-0x05 0x0005 # ENQUIRY
-0x06 0x0006 # ACKNOWLEDGE
-0x07 0x0007 # BELL
-0x08 0x0008 # BACKSPACE
-0x09 0x0009 # HORIZONTAL TABULATION
-0x0A 0x000A # LINE FEED
-0x0B 0x000B # VERTICAL TABULATION
-0x0C 0x000C # FORM FEED
-0x0D 0x000D # CARRIAGE RETURN
-0x0E 0x000E # SHIFT OUT
-0x0F 0x000F # SHIFT IN
-0x10 0x0010 # DATA LINK ESCAPE
-0x11 0x0011 # DEVICE CONTROL ONE
-0x12 0x0012 # DEVICE CONTROL TWO
-0x13 0x0013 # DEVICE CONTROL THREE
-0x14 0x0014 # DEVICE CONTROL FOUR
-0x15 0x0015 # NEGATIVE ACKNOWLEDGE
-0x16 0x0016 # SYNCHRONOUS IDLE
-0x17 0x0017 # END OF TRANSMISSION BLOCK
-0x18 0x0018 # CANCEL
-0x19 0x0019 # END OF MEDIUM
-0x1A 0x001A # SUBSTITUTE
-0x1B 0x001B # ESCAPE
-0x1C 0x001C # FILE SEPARATOR
-0x1D 0x001D # GROUP SEPARATOR
-0x1E 0x001E # RECORD SEPARATOR
-0x1F 0x001F # UNIT SEPARATOR
-0x20 0x0020 # SPACE
-0x21 0x0021 # EXCLAMATION MARK
-0x22 0x0022 # QUOTATION MARK
-0x23 0x0023 # NUMBER SIGN
-0x24 0x0024 # DOLLAR SIGN
-0x25 0x0025 # PERCENT SIGN
-0x26 0x0026 # AMPERSAND
-0x27 0x0027 # APOSTROPHE
-0x28 0x0028 # LEFT PARENTHESIS
-0x29 0x0029 # RIGHT PARENTHESIS
-0x2A 0x002A # ASTERISK
-0x2B 0x002B # PLUS SIGN
-0x2C 0x002C # COMMA
-0x2D 0x002D # HYPHEN-MINUS
-0x2E 0x002E # FULL STOP
-0x2F 0x002F # SOLIDUS
-0x30 0x0030 # DIGIT ZERO
-0x31 0x0031 # DIGIT ONE
-0x32 0x0032 # DIGIT TWO
-0x33 0x0033 # DIGIT THREE
-0x34 0x0034 # DIGIT FOUR
-0x35 0x0035 # DIGIT FIVE
-0x36 0x0036 # DIGIT SIX
-0x37 0x0037 # DIGIT SEVEN
-0x38 0x0038 # DIGIT EIGHT
-0x39 0x0039 # DIGIT NINE
-0x3A 0x003A # COLON
-0x3B 0x003B # SEMICOLON
-0x3C 0x003C # LESS-THAN SIGN
-0x3D 0x003D # EQUALS SIGN
-0x3E 0x003E # GREATER-THAN SIGN
-0x3F 0x003F # QUESTION MARK
-0x40 0x0040 # COMMERCIAL AT
-0x41 0x0041 # LATIN CAPITAL LETTER A
-0x42 0x0042 # LATIN CAPITAL LETTER B
-0x43 0x0043 # LATIN CAPITAL LETTER C
-0x44 0x0044 # LATIN CAPITAL LETTER D
-0x45 0x0045 # LATIN CAPITAL LETTER E
-0x46 0x0046 # LATIN CAPITAL LETTER F
-0x47 0x0047 # LATIN CAPITAL LETTER G
-0x48 0x0048 # LATIN CAPITAL LETTER H
-0x49 0x0049 # LATIN CAPITAL LETTER I
-0x4A 0x004A # LATIN CAPITAL LETTER J
-0x4B 0x004B # LATIN CAPITAL LETTER K
-0x4C 0x004C # LATIN CAPITAL LETTER L
-0x4D 0x004D # LATIN CAPITAL LETTER M
-0x4E 0x004E # LATIN CAPITAL LETTER N
-0x4F 0x004F # LATIN CAPITAL LETTER O
-0x50 0x0050 # LATIN CAPITAL LETTER P
-0x51 0x0051 # LATIN CAPITAL LETTER Q
-0x52 0x0052 # LATIN CAPITAL LETTER R
-0x53 0x0053 # LATIN CAPITAL LETTER S
-0x54 0x0054 # LATIN CAPITAL LETTER T
-0x55 0x0055 # LATIN CAPITAL LETTER U
-0x56 0x0056 # LATIN CAPITAL LETTER V
-0x57 0x0057 # LATIN CAPITAL LETTER W
-0x58 0x0058 # LATIN CAPITAL LETTER X
-0x59 0x0059 # LATIN CAPITAL LETTER Y
-0x5A 0x005A # LATIN CAPITAL LETTER Z
-0x5B 0x005B # LEFT SQUARE BRACKET
-0x5C 0x005C # REVERSE SOLIDUS
-0x5D 0x005D # RIGHT SQUARE BRACKET
-0x5E 0x005E # CIRCUMFLEX ACCENT
-0x5F 0x005F # LOW LINE
-0x60 0x0060 # GRAVE ACCENT
-0x61 0x0061 # LATIN SMALL LETTER A
-0x62 0x0062 # LATIN SMALL LETTER B
-0x63 0x0063 # LATIN SMALL LETTER C
-0x64 0x0064 # LATIN SMALL LETTER D
-0x65 0x0065 # LATIN SMALL LETTER E
-0x66 0x0066 # LATIN SMALL LETTER F
-0x67 0x0067 # LATIN SMALL LETTER G
-0x68 0x0068 # LATIN SMALL LETTER H
-0x69 0x0069 # LATIN SMALL LETTER I
-0x6A 0x006A # LATIN SMALL LETTER J
-0x6B 0x006B # LATIN SMALL LETTER K
-0x6C 0x006C # LATIN SMALL LETTER L
-0x6D 0x006D # LATIN SMALL LETTER M
-0x6E 0x006E # LATIN SMALL LETTER N
-0x6F 0x006F # LATIN SMALL LETTER O
-0x70 0x0070 # LATIN SMALL LETTER P
-0x71 0x0071 # LATIN SMALL LETTER Q
-0x72 0x0072 # LATIN SMALL LETTER R
-0x73 0x0073 # LATIN SMALL LETTER S
-0x74 0x0074 # LATIN SMALL LETTER T
-0x75 0x0075 # LATIN SMALL LETTER U
-0x76 0x0076 # LATIN SMALL LETTER V
-0x77 0x0077 # LATIN SMALL LETTER W
-0x78 0x0078 # LATIN SMALL LETTER X
-0x79 0x0079 # LATIN SMALL LETTER Y
-0x7A 0x007A # LATIN SMALL LETTER Z
-0x7B 0x007B # LEFT CURLY BRACKET
-0x7C 0x007C # VERTICAL LINE
-0x7D 0x007D # RIGHT CURLY BRACKET
-0x7E 0x007E # TILDE
-0x7F 0x007F # DELETE
-0x80 0x0080 # <control>
-0x81 0x0081 # <control>
-0x82 0x0082 # <control>
-0x83 0x0083 # <control>
-0x84 0x0084 # <control>
-0x85 0x0085 # <control>
-0x86 0x0086 # <control>
-0x87 0x0087 # <control>
-0x88 0x0088 # <control>
-0x89 0x0089 # <control>
-0x8A 0x008A # <control>
-0x8B 0x008B # <control>
-0x8C 0x008C # <control>
-0x8D 0x008D # <control>
-0x8E 0x008E # <control>
-0x8F 0x008F # <control>
-0x90 0x0090 # <control>
-0x91 0x0091 # <control>
-0x92 0x0092 # <control>
-0x93 0x0093 # <control>
-0x94 0x0094 # <control>
-0x95 0x0095 # <control>
-0x96 0x0096 # <control>
-0x97 0x0097 # <control>
-0x98 0x0098 # <control>
-0x99 0x0099 # <control>
-0x9A 0x009A # <control>
-0x9B 0x009B # <control>
-0x9C 0x009C # <control>
-0x9D 0x009D # <control>
-0x9E 0x009E # <control>
-0x9F 0x009F # <control>
-0xA0 0x00A0 # NO-BREAK SPACE
-0xA1 0x0104 # LATIN CAPITAL LETTER A WITH OGONEK
-0xA2 0x0112 # LATIN CAPITAL LETTER E WITH MACRON
-0xA3 0x0122 # LATIN CAPITAL LETTER G WITH CEDILLA
-0xA4 0x012A # LATIN CAPITAL LETTER I WITH MACRON
-0xA5 0x0128 # LATIN CAPITAL LETTER I WITH TILDE
-0xA6 0x0136 # LATIN CAPITAL LETTER K WITH CEDILLA
-0xA7 0x00A7 # SECTION SIGN
-0xA8 0x013B # LATIN CAPITAL LETTER L WITH CEDILLA
-0xA9 0x0110 # LATIN CAPITAL LETTER D WITH STROKE
-0xAA 0x0160 # LATIN CAPITAL LETTER S WITH CARON
-0xAB 0x0166 # LATIN CAPITAL LETTER T WITH STROKE
-0xAC 0x017D # LATIN CAPITAL LETTER Z WITH CARON
-0xAD 0x00AD # SOFT HYPHEN
-0xAE 0x016A # LATIN CAPITAL LETTER U WITH MACRON
-0xAF 0x014A # LATIN CAPITAL LETTER ENG
-0xB0 0x00B0 # DEGREE SIGN
-0xB1 0x0105 # LATIN SMALL LETTER A WITH OGONEK
-0xB2 0x0113 # LATIN SMALL LETTER E WITH MACRON
-0xB3 0x0123 # LATIN SMALL LETTER G WITH CEDILLA
-0xB4 0x012B # LATIN SMALL LETTER I WITH MACRON
-0xB5 0x0129 # LATIN SMALL LETTER I WITH TILDE
-0xB6 0x0137 # LATIN SMALL LETTER K WITH CEDILLA
-0xB7 0x00B7 # MIDDLE DOT
-0xB8 0x013C # LATIN SMALL LETTER L WITH CEDILLA
-0xB9 0x0111 # LATIN SMALL LETTER D WITH STROKE
-0xBA 0x0161 # LATIN SMALL LETTER S WITH CARON
-0xBB 0x0167 # LATIN SMALL LETTER T WITH STROKE
-0xBC 0x017E # LATIN SMALL LETTER Z WITH CARON
-0xBD 0x2015 # HORIZONTAL BAR
-0xBE 0x016B # LATIN SMALL LETTER U WITH MACRON
-0xBF 0x014B # LATIN SMALL LETTER ENG
-0xC0 0x0100 # LATIN CAPITAL LETTER A WITH MACRON
-0xC1 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE
-0xC2 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-0xC3 0x00C3 # LATIN CAPITAL LETTER A WITH TILDE
-0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
-0xC5 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE
-0xC6 0x00C6 # LATIN CAPITAL LETTER AE
-0xC7 0x012E # LATIN CAPITAL LETTER I WITH OGONEK
-0xC8 0x010C # LATIN CAPITAL LETTER C WITH CARON
-0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE
-0xCA 0x0118 # LATIN CAPITAL LETTER E WITH OGONEK
-0xCB 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS
-0xCC 0x0116 # LATIN CAPITAL LETTER E WITH DOT ABOVE
-0xCD 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE
-0xCE 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-0xCF 0x00CF # LATIN CAPITAL LETTER I WITH DIAERESIS
-0xD0 0x00D0 # LATIN CAPITAL LETTER ETH (Icelandic)
-0xD1 0x0145 # LATIN CAPITAL LETTER N WITH CEDILLA
-0xD2 0x014C # LATIN CAPITAL LETTER O WITH MACRON
-0xD3 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE
-0xD4 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-0xD5 0x00D5 # LATIN CAPITAL LETTER O WITH TILDE
-0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
-0xD7 0x0168 # LATIN CAPITAL LETTER U WITH TILDE
-0xD8 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE
-0xD9 0x0172 # LATIN CAPITAL LETTER U WITH OGONEK
-0xDA 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE
-0xDB 0x00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
-0xDD 0x00DD # LATIN CAPITAL LETTER Y WITH ACUTE
-0xDE 0x00DE # LATIN CAPITAL LETTER THORN (Icelandic)
-0xDF 0x00DF # LATIN SMALL LETTER SHARP S (German)
-0xE0 0x0101 # LATIN SMALL LETTER A WITH MACRON
-0xE1 0x00E1 # LATIN SMALL LETTER A WITH ACUTE
-0xE2 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX
-0xE3 0x00E3 # LATIN SMALL LETTER A WITH TILDE
-0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS
-0xE5 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE
-0xE6 0x00E6 # LATIN SMALL LETTER AE
-0xE7 0x012F # LATIN SMALL LETTER I WITH OGONEK
-0xE8 0x010D # LATIN SMALL LETTER C WITH CARON
-0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE
-0xEA 0x0119 # LATIN SMALL LETTER E WITH OGONEK
-0xEB 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS
-0xEC 0x0117 # LATIN SMALL LETTER E WITH DOT ABOVE
-0xED 0x00ED # LATIN SMALL LETTER I WITH ACUTE
-0xEE 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX
-0xEF 0x00EF # LATIN SMALL LETTER I WITH DIAERESIS
-0xF0 0x00F0 # LATIN SMALL LETTER ETH (Icelandic)
-0xF1 0x0146 # LATIN SMALL LETTER N WITH CEDILLA
-0xF2 0x014D # LATIN SMALL LETTER O WITH MACRON
-0xF3 0x00F3 # LATIN SMALL LETTER O WITH ACUTE
-0xF4 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX
-0xF5 0x00F5 # LATIN SMALL LETTER O WITH TILDE
-0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS
-0xF7 0x0169 # LATIN SMALL LETTER U WITH TILDE
-0xF8 0x00F8 # LATIN SMALL LETTER O WITH STROKE
-0xF9 0x0173 # LATIN SMALL LETTER U WITH OGONEK
-0xFA 0x00FA # LATIN SMALL LETTER U WITH ACUTE
-0xFB 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX
-0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS
-0xFD 0x00FD # LATIN SMALL LETTER Y WITH ACUTE
-0xFE 0x00FE # LATIN SMALL LETTER THORN (Icelandic)
-0xFF 0x0138 # LATIN SMALL LETTER KRA
diff --git a/program/lib/encoding/ISO-8859-11.map b/program/lib/encoding/ISO-8859-11.map
deleted file mode 100644
index 192bd9d7c..000000000
--- a/program/lib/encoding/ISO-8859-11.map
+++ /dev/null
@@ -1,297 +0,0 @@
-#
-# Name: ISO/IEC 8859-11:2001 to Unicode
-# Unicode version: 3.2
-# Table version: 1.0
-# Table format: Format A
-# Date: 2002 October 7
-# Authors: Ken Whistler <kenw@sybase.com>
-#
-# Copyright (c) 2002 Unicode, Inc. All Rights reserved.
-#
-# This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
-# No claims are made as to fitness for any particular purpose. No
-# warranties of any kind are expressed or implied. The recipient
-# agrees to determine applicability of information provided. If this
-# file has been provided on optical media by Unicode, Inc., the sole
-# remedy for any claim will be exchange of defective media within 90
-# days of receipt.
-#
-# Unicode, Inc. hereby grants the right to freely use the information
-# supplied in this file in the creation of products supporting the
-# Unicode Standard, and to make copies of this file in any form for
-# internal or external distribution as long as this notice remains
-# attached.
-#
-# General notes:
-#
-# This table contains the data the Unicode Consortium has on how
-# ISO/IEC 8859-11:2001 characters map into Unicode.
-#
-# ISO/IEC 8859-11:2001 is equivalent to TIS 620-2533 (1990) with
-# the addition of 0xA0 NO-BREAK SPACE.
-#
-# Format: Three tab-separated columns
-# Column #1 is the ISO/IEC 8859-11 code (in hex as 0xXX)
-# Column #2 is the Unicode (in hex as 0xXXXX)
-# Column #3 the Unicode name (follows a comment sign, '#')
-#
-# The entries are in ISO/IEC 8859-11 order.
-#
-# Version history:
-# 2002 October 7 Created
-#
-# Updated versions of this file may be found in:
-# <ftp://ftp.unicode.org/Public/MAPPINGS/>
-#
-# For any comments or problems, please use the Unicode
-# web contact form at:
-# http://www.unicode.org/unicode/reporting.html
-#
-0x00 0x0000 # NULL
-0x01 0x0001 # START OF HEADING
-0x02 0x0002 # START OF TEXT
-0x03 0x0003 # END OF TEXT
-0x04 0x0004 # END OF TRANSMISSION
-0x05 0x0005 # ENQUIRY
-0x06 0x0006 # ACKNOWLEDGE
-0x07 0x0007 # BELL
-0x08 0x0008 # BACKSPACE
-0x09 0x0009 # HORIZONTAL TABULATION
-0x0A 0x000A # LINE FEED
-0x0B 0x000B # VERTICAL TABULATION
-0x0C 0x000C # FORM FEED
-0x0D 0x000D # CARRIAGE RETURN
-0x0E 0x000E # SHIFT OUT
-0x0F 0x000F # SHIFT IN
-0x10 0x0010 # DATA LINK ESCAPE
-0x11 0x0011 # DEVICE CONTROL ONE
-0x12 0x0012 # DEVICE CONTROL TWO
-0x13 0x0013 # DEVICE CONTROL THREE
-0x14 0x0014 # DEVICE CONTROL FOUR
-0x15 0x0015 # NEGATIVE ACKNOWLEDGE
-0x16 0x0016 # SYNCHRONOUS IDLE
-0x17 0x0017 # END OF TRANSMISSION BLOCK
-0x18 0x0018 # CANCEL
-0x19 0x0019 # END OF MEDIUM
-0x1A 0x001A # SUBSTITUTE
-0x1B 0x001B # ESCAPE
-0x1C 0x001C # FILE SEPARATOR
-0x1D 0x001D # GROUP SEPARATOR
-0x1E 0x001E # RECORD SEPARATOR
-0x1F 0x001F # UNIT SEPARATOR
-0x20 0x0020 # SPACE
-0x21 0x0021 # EXCLAMATION MARK
-0x22 0x0022 # QUOTATION MARK
-0x23 0x0023 # NUMBER SIGN
-0x24 0x0024 # DOLLAR SIGN
-0x25 0x0025 # PERCENT SIGN
-0x26 0x0026 # AMPERSAND
-0x27 0x0027 # APOSTROPHE
-0x28 0x0028 # LEFT PARENTHESIS
-0x29 0x0029 # RIGHT PARENTHESIS
-0x2A 0x002A # ASTERISK
-0x2B 0x002B # PLUS SIGN
-0x2C 0x002C # COMMA
-0x2D 0x002D # HYPHEN-MINUS
-0x2E 0x002E # FULL STOP
-0x2F 0x002F # SOLIDUS
-0x30 0x0030 # DIGIT ZERO
-0x31 0x0031 # DIGIT ONE
-0x32 0x0032 # DIGIT TWO
-0x33 0x0033 # DIGIT THREE
-0x34 0x0034 # DIGIT FOUR
-0x35 0x0035 # DIGIT FIVE
-0x36 0x0036 # DIGIT SIX
-0x37 0x0037 # DIGIT SEVEN
-0x38 0x0038 # DIGIT EIGHT
-0x39 0x0039 # DIGIT NINE
-0x3A 0x003A # COLON
-0x3B 0x003B # SEMICOLON
-0x3C 0x003C # LESS-THAN SIGN
-0x3D 0x003D # EQUALS SIGN
-0x3E 0x003E # GREATER-THAN SIGN
-0x3F 0x003F # QUESTION MARK
-0x40 0x0040 # COMMERCIAL AT
-0x41 0x0041 # LATIN CAPITAL LETTER A
-0x42 0x0042 # LATIN CAPITAL LETTER B
-0x43 0x0043 # LATIN CAPITAL LETTER C
-0x44 0x0044 # LATIN CAPITAL LETTER D
-0x45 0x0045 # LATIN CAPITAL LETTER E
-0x46 0x0046 # LATIN CAPITAL LETTER F
-0x47 0x0047 # LATIN CAPITAL LETTER G
-0x48 0x0048 # LATIN CAPITAL LETTER H
-0x49 0x0049 # LATIN CAPITAL LETTER I
-0x4A 0x004A # LATIN CAPITAL LETTER J
-0x4B 0x004B # LATIN CAPITAL LETTER K
-0x4C 0x004C # LATIN CAPITAL LETTER L
-0x4D 0x004D # LATIN CAPITAL LETTER M
-0x4E 0x004E # LATIN CAPITAL LETTER N
-0x4F 0x004F # LATIN CAPITAL LETTER O
-0x50 0x0050 # LATIN CAPITAL LETTER P
-0x51 0x0051 # LATIN CAPITAL LETTER Q
-0x52 0x0052 # LATIN CAPITAL LETTER R
-0x53 0x0053 # LATIN CAPITAL LETTER S
-0x54 0x0054 # LATIN CAPITAL LETTER T
-0x55 0x0055 # LATIN CAPITAL LETTER U
-0x56 0x0056 # LATIN CAPITAL LETTER V
-0x57 0x0057 # LATIN CAPITAL LETTER W
-0x58 0x0058 # LATIN CAPITAL LETTER X
-0x59 0x0059 # LATIN CAPITAL LETTER Y
-0x5A 0x005A # LATIN CAPITAL LETTER Z
-0x5B 0x005B # LEFT SQUARE BRACKET
-0x5C 0x005C # REVERSE SOLIDUS
-0x5D 0x005D # RIGHT SQUARE BRACKET
-0x5E 0x005E # CIRCUMFLEX ACCENT
-0x5F 0x005F # LOW LINE
-0x60 0x0060 # GRAVE ACCENT
-0x61 0x0061 # LATIN SMALL LETTER A
-0x62 0x0062 # LATIN SMALL LETTER B
-0x63 0x0063 # LATIN SMALL LETTER C
-0x64 0x0064 # LATIN SMALL LETTER D
-0x65 0x0065 # LATIN SMALL LETTER E
-0x66 0x0066 # LATIN SMALL LETTER F
-0x67 0x0067 # LATIN SMALL LETTER G
-0x68 0x0068 # LATIN SMALL LETTER H
-0x69 0x0069 # LATIN SMALL LETTER I
-0x6A 0x006A # LATIN SMALL LETTER J
-0x6B 0x006B # LATIN SMALL LETTER K
-0x6C 0x006C # LATIN SMALL LETTER L
-0x6D 0x006D # LATIN SMALL LETTER M
-0x6E 0x006E # LATIN SMALL LETTER N
-0x6F 0x006F # LATIN SMALL LETTER O
-0x70 0x0070 # LATIN SMALL LETTER P
-0x71 0x0071 # LATIN SMALL LETTER Q
-0x72 0x0072 # LATIN SMALL LETTER R
-0x73 0x0073 # LATIN SMALL LETTER S
-0x74 0x0074 # LATIN SMALL LETTER T
-0x75 0x0075 # LATIN SMALL LETTER U
-0x76 0x0076 # LATIN SMALL LETTER V
-0x77 0x0077 # LATIN SMALL LETTER W
-0x78 0x0078 # LATIN SMALL LETTER X
-0x79 0x0079 # LATIN SMALL LETTER Y
-0x7A 0x007A # LATIN SMALL LETTER Z
-0x7B 0x007B # LEFT CURLY BRACKET
-0x7C 0x007C # VERTICAL LINE
-0x7D 0x007D # RIGHT CURLY BRACKET
-0x7E 0x007E # TILDE
-0x7F 0x007F # DELETE
-0x80 0x0080 # <control>
-0x81 0x0081 # <control>
-0x82 0x0082 # <control>
-0x83 0x0083 # <control>
-0x84 0x0084 # <control>
-0x85 0x0085 # <control>
-0x86 0x0086 # <control>
-0x87 0x0087 # <control>
-0x88 0x0088 # <control>
-0x89 0x0089 # <control>
-0x8A 0x008A # <control>
-0x8B 0x008B # <control>
-0x8C 0x008C # <control>
-0x8D 0x008D # <control>
-0x8E 0x008E # <control>
-0x8F 0x008F # <control>
-0x90 0x0090 # <control>
-0x91 0x0091 # <control>
-0x92 0x0092 # <control>
-0x93 0x0093 # <control>
-0x94 0x0094 # <control>
-0x95 0x0095 # <control>
-0x96 0x0096 # <control>
-0x97 0x0097 # <control>
-0x98 0x0098 # <control>
-0x99 0x0099 # <control>
-0x9A 0x009A # <control>
-0x9B 0x009B # <control>
-0x9C 0x009C # <control>
-0x9D 0x009D # <control>
-0x9E 0x009E # <control>
-0x9F 0x009F # <control>
-0xA0 0x00A0 # NO-BREAK SPACE
-0xA1 0x0E01 # THAI CHARACTER KO KAI
-0xA2 0x0E02 # THAI CHARACTER KHO KHAI
-0xA3 0x0E03 # THAI CHARACTER KHO KHUAT
-0xA4 0x0E04 # THAI CHARACTER KHO KHWAI
-0xA5 0x0E05 # THAI CHARACTER KHO KHON
-0xA6 0x0E06 # THAI CHARACTER KHO RAKHANG
-0xA7 0x0E07 # THAI CHARACTER NGO NGU
-0xA8 0x0E08 # THAI CHARACTER CHO CHAN
-0xA9 0x0E09 # THAI CHARACTER CHO CHING
-0xAA 0x0E0A # THAI CHARACTER CHO CHANG
-0xAB 0x0E0B # THAI CHARACTER SO SO
-0xAC 0x0E0C # THAI CHARACTER CHO CHOE
-0xAD 0x0E0D # THAI CHARACTER YO YING
-0xAE 0x0E0E # THAI CHARACTER DO CHADA
-0xAF 0x0E0F # THAI CHARACTER TO PATAK
-0xB0 0x0E10 # THAI CHARACTER THO THAN
-0xB1 0x0E11 # THAI CHARACTER THO NANGMONTHO
-0xB2 0x0E12 # THAI CHARACTER THO PHUTHAO
-0xB3 0x0E13 # THAI CHARACTER NO NEN
-0xB4 0x0E14 # THAI CHARACTER DO DEK
-0xB5 0x0E15 # THAI CHARACTER TO TAO
-0xB6 0x0E16 # THAI CHARACTER THO THUNG
-0xB7 0x0E17 # THAI CHARACTER THO THAHAN
-0xB8 0x0E18 # THAI CHARACTER THO THONG
-0xB9 0x0E19 # THAI CHARACTER NO NU
-0xBA 0x0E1A # THAI CHARACTER BO BAIMAI
-0xBB 0x0E1B # THAI CHARACTER PO PLA
-0xBC 0x0E1C # THAI CHARACTER PHO PHUNG
-0xBD 0x0E1D # THAI CHARACTER FO FA
-0xBE 0x0E1E # THAI CHARACTER PHO PHAN
-0xBF 0x0E1F # THAI CHARACTER FO FAN
-0xC0 0x0E20 # THAI CHARACTER PHO SAMPHAO
-0xC1 0x0E21 # THAI CHARACTER MO MA
-0xC2 0x0E22 # THAI CHARACTER YO YAK
-0xC3 0x0E23 # THAI CHARACTER RO RUA
-0xC4 0x0E24 # THAI CHARACTER RU
-0xC5 0x0E25 # THAI CHARACTER LO LING
-0xC6 0x0E26 # THAI CHARACTER LU
-0xC7 0x0E27 # THAI CHARACTER WO WAEN
-0xC8 0x0E28 # THAI CHARACTER SO SALA
-0xC9 0x0E29 # THAI CHARACTER SO RUSI
-0xCA 0x0E2A # THAI CHARACTER SO SUA
-0xCB 0x0E2B # THAI CHARACTER HO HIP
-0xCC 0x0E2C # THAI CHARACTER LO CHULA
-0xCD 0x0E2D # THAI CHARACTER O ANG
-0xCE 0x0E2E # THAI CHARACTER HO NOKHUK
-0xCF 0x0E2F # THAI CHARACTER PAIYANNOI
-0xD0 0x0E30 # THAI CHARACTER SARA A
-0xD1 0x0E31 # THAI CHARACTER MAI HAN-AKAT
-0xD2 0x0E32 # THAI CHARACTER SARA AA
-0xD3 0x0E33 # THAI CHARACTER SARA AM
-0xD4 0x0E34 # THAI CHARACTER SARA I
-0xD5 0x0E35 # THAI CHARACTER SARA II
-0xD6 0x0E36 # THAI CHARACTER SARA UE
-0xD7 0x0E37 # THAI CHARACTER SARA UEE
-0xD8 0x0E38 # THAI CHARACTER SARA U
-0xD9 0x0E39 # THAI CHARACTER SARA UU
-0xDA 0x0E3A # THAI CHARACTER PHINTHU
-0xDF 0x0E3F # THAI CURRENCY SYMBOL BAHT
-0xE0 0x0E40 # THAI CHARACTER SARA E
-0xE1 0x0E41 # THAI CHARACTER SARA AE
-0xE2 0x0E42 # THAI CHARACTER SARA O
-0xE3 0x0E43 # THAI CHARACTER SARA AI MAIMUAN
-0xE4 0x0E44 # THAI CHARACTER SARA AI MAIMALAI
-0xE5 0x0E45 # THAI CHARACTER LAKKHANGYAO
-0xE6 0x0E46 # THAI CHARACTER MAIYAMOK
-0xE7 0x0E47 # THAI CHARACTER MAITAIKHU
-0xE8 0x0E48 # THAI CHARACTER MAI EK
-0xE9 0x0E49 # THAI CHARACTER MAI THO
-0xEA 0x0E4A # THAI CHARACTER MAI TRI
-0xEB 0x0E4B # THAI CHARACTER MAI CHATTAWA
-0xEC 0x0E4C # THAI CHARACTER THANTHAKHAT
-0xED 0x0E4D # THAI CHARACTER NIKHAHIT
-0xEE 0x0E4E # THAI CHARACTER YAMAKKAN
-0xEF 0x0E4F # THAI CHARACTER FONGMAN
-0xF0 0x0E50 # THAI DIGIT ZERO
-0xF1 0x0E51 # THAI DIGIT ONE
-0xF2 0x0E52 # THAI DIGIT TWO
-0xF3 0x0E53 # THAI DIGIT THREE
-0xF4 0x0E54 # THAI DIGIT FOUR
-0xF5 0x0E55 # THAI DIGIT FIVE
-0xF6 0x0E56 # THAI DIGIT SIX
-0xF7 0x0E57 # THAI DIGIT SEVEN
-0xF8 0x0E58 # THAI DIGIT EIGHT
-0xF9 0x0E59 # THAI DIGIT NINE
-0xFA 0x0E5A # THAI CHARACTER ANGKHANKHU
-0xFB 0x0E5B # THAI CHARACTER KHOMUT
diff --git a/program/lib/encoding/ISO-8859-13.map b/program/lib/encoding/ISO-8859-13.map
deleted file mode 100644
index cd11b53fd..000000000
--- a/program/lib/encoding/ISO-8859-13.map
+++ /dev/null
@@ -1,299 +0,0 @@
-#
-# Name: ISO/IEC 8859-13:1998 to Unicode
-# Unicode version: 3.0
-# Table version: 1.0
-# Table format: Format A
-# Date: 1999 July 27
-# Authors: Ken Whistler <kenw@sybase.com>
-#
-# Copyright (c) 1998 - 1999 Unicode, Inc. All Rights reserved.
-#
-# This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
-# No claims are made as to fitness for any particular purpose. No
-# warranties of any kind are expressed or implied. The recipient
-# agrees to determine applicability of information provided. If this
-# file has been provided on optical media by Unicode, Inc., the sole
-# remedy for any claim will be exchange of defective media within 90
-# days of receipt.
-#
-# Unicode, Inc. hereby grants the right to freely use the information
-# supplied in this file in the creation of products supporting the
-# Unicode Standard, and to make copies of this file in any form for
-# internal or external distribution as long as this notice remains
-# attached.
-#
-# General notes:
-#
-# This table contains the data the Unicode Consortium has on how
-# ISO/IEC 8859-13:1998 characters map into Unicode.
-#
-# Format: Three tab-separated columns
-# Column #1 is the ISO/IEC 8859-13 code (in hex as 0xXX)
-# Column #2 is the Unicode (in hex as 0xXXXX)
-# Column #3 the Unicode name (follows a comment sign, '#')
-#
-# The entries are in ISO/IEC 8859-13 order.
-#
-# Updated versions of this file may be found in:
-# <ftp://ftp.unicode.org/Public/MAPPINGS/>
-#
-# Any comments or problems, contact <errata@unicode.org>
-# Please note that <errata@unicode.org> is an archival address;
-# notices will be checked, but do not expect an immediate response.
-#
-0x00 0x0000 # NULL
-0x01 0x0001 # START OF HEADING
-0x02 0x0002 # START OF TEXT
-0x03 0x0003 # END OF TEXT
-0x04 0x0004 # END OF TRANSMISSION
-0x05 0x0005 # ENQUIRY
-0x06 0x0006 # ACKNOWLEDGE
-0x07 0x0007 # BELL
-0x08 0x0008 # BACKSPACE
-0x09 0x0009 # HORIZONTAL TABULATION
-0x0A 0x000A # LINE FEED
-0x0B 0x000B # VERTICAL TABULATION
-0x0C 0x000C # FORM FEED
-0x0D 0x000D # CARRIAGE RETURN
-0x0E 0x000E # SHIFT OUT
-0x0F 0x000F # SHIFT IN
-0x10 0x0010 # DATA LINK ESCAPE
-0x11 0x0011 # DEVICE CONTROL ONE
-0x12 0x0012 # DEVICE CONTROL TWO
-0x13 0x0013 # DEVICE CONTROL THREE
-0x14 0x0014 # DEVICE CONTROL FOUR
-0x15 0x0015 # NEGATIVE ACKNOWLEDGE
-0x16 0x0016 # SYNCHRONOUS IDLE
-0x17 0x0017 # END OF TRANSMISSION BLOCK
-0x18 0x0018 # CANCEL
-0x19 0x0019 # END OF MEDIUM
-0x1A 0x001A # SUBSTITUTE
-0x1B 0x001B # ESCAPE
-0x1C 0x001C # FILE SEPARATOR
-0x1D 0x001D # GROUP SEPARATOR
-0x1E 0x001E # RECORD SEPARATOR
-0x1F 0x001F # UNIT SEPARATOR
-0x20 0x0020 # SPACE
-0x21 0x0021 # EXCLAMATION MARK
-0x22 0x0022 # QUOTATION MARK
-0x23 0x0023 # NUMBER SIGN
-0x24 0x0024 # DOLLAR SIGN
-0x25 0x0025 # PERCENT SIGN
-0x26 0x0026 # AMPERSAND
-0x27 0x0027 # APOSTROPHE
-0x28 0x0028 # LEFT PARENTHESIS
-0x29 0x0029 # RIGHT PARENTHESIS
-0x2A 0x002A # ASTERISK
-0x2B 0x002B # PLUS SIGN
-0x2C 0x002C # COMMA
-0x2D 0x002D # HYPHEN-MINUS
-0x2E 0x002E # FULL STOP
-0x2F 0x002F # SOLIDUS
-0x30 0x0030 # DIGIT ZERO
-0x31 0x0031 # DIGIT ONE
-0x32 0x0032 # DIGIT TWO
-0x33 0x0033 # DIGIT THREE
-0x34 0x0034 # DIGIT FOUR
-0x35 0x0035 # DIGIT FIVE
-0x36 0x0036 # DIGIT SIX
-0x37 0x0037 # DIGIT SEVEN
-0x38 0x0038 # DIGIT EIGHT
-0x39 0x0039 # DIGIT NINE
-0x3A 0x003A # COLON
-0x3B 0x003B # SEMICOLON
-0x3C 0x003C # LESS-THAN SIGN
-0x3D 0x003D # EQUALS SIGN
-0x3E 0x003E # GREATER-THAN SIGN
-0x3F 0x003F # QUESTION MARK
-0x40 0x0040 # COMMERCIAL AT
-0x41 0x0041 # LATIN CAPITAL LETTER A
-0x42 0x0042 # LATIN CAPITAL LETTER B
-0x43 0x0043 # LATIN CAPITAL LETTER C
-0x44 0x0044 # LATIN CAPITAL LETTER D
-0x45 0x0045 # LATIN CAPITAL LETTER E
-0x46 0x0046 # LATIN CAPITAL LETTER F
-0x47 0x0047 # LATIN CAPITAL LETTER G
-0x48 0x0048 # LATIN CAPITAL LETTER H
-0x49 0x0049 # LATIN CAPITAL LETTER I
-0x4A 0x004A # LATIN CAPITAL LETTER J
-0x4B 0x004B # LATIN CAPITAL LETTER K
-0x4C 0x004C # LATIN CAPITAL LETTER L
-0x4D 0x004D # LATIN CAPITAL LETTER M
-0x4E 0x004E # LATIN CAPITAL LETTER N
-0x4F 0x004F # LATIN CAPITAL LETTER O
-0x50 0x0050 # LATIN CAPITAL LETTER P
-0x51 0x0051 # LATIN CAPITAL LETTER Q
-0x52 0x0052 # LATIN CAPITAL LETTER R
-0x53 0x0053 # LATIN CAPITAL LETTER S
-0x54 0x0054 # LATIN CAPITAL LETTER T
-0x55 0x0055 # LATIN CAPITAL LETTER U
-0x56 0x0056 # LATIN CAPITAL LETTER V
-0x57 0x0057 # LATIN CAPITAL LETTER W
-0x58 0x0058 # LATIN CAPITAL LETTER X
-0x59 0x0059 # LATIN CAPITAL LETTER Y
-0x5A 0x005A # LATIN CAPITAL LETTER Z
-0x5B 0x005B # LEFT SQUARE BRACKET
-0x5C 0x005C # REVERSE SOLIDUS
-0x5D 0x005D # RIGHT SQUARE BRACKET
-0x5E 0x005E # CIRCUMFLEX ACCENT
-0x5F 0x005F # LOW LINE
-0x60 0x0060 # GRAVE ACCENT
-0x61 0x0061 # LATIN SMALL LETTER A
-0x62 0x0062 # LATIN SMALL LETTER B
-0x63 0x0063 # LATIN SMALL LETTER C
-0x64 0x0064 # LATIN SMALL LETTER D
-0x65 0x0065 # LATIN SMALL LETTER E
-0x66 0x0066 # LATIN SMALL LETTER F
-0x67 0x0067 # LATIN SMALL LETTER G
-0x68 0x0068 # LATIN SMALL LETTER H
-0x69 0x0069 # LATIN SMALL LETTER I
-0x6A 0x006A # LATIN SMALL LETTER J
-0x6B 0x006B # LATIN SMALL LETTER K
-0x6C 0x006C # LATIN SMALL LETTER L
-0x6D 0x006D # LATIN SMALL LETTER M
-0x6E 0x006E # LATIN SMALL LETTER N
-0x6F 0x006F # LATIN SMALL LETTER O
-0x70 0x0070 # LATIN SMALL LETTER P
-0x71 0x0071 # LATIN SMALL LETTER Q
-0x72 0x0072 # LATIN SMALL LETTER R
-0x73 0x0073 # LATIN SMALL LETTER S
-0x74 0x0074 # LATIN SMALL LETTER T
-0x75 0x0075 # LATIN SMALL LETTER U
-0x76 0x0076 # LATIN SMALL LETTER V
-0x77 0x0077 # LATIN SMALL LETTER W
-0x78 0x0078 # LATIN SMALL LETTER X
-0x79 0x0079 # LATIN SMALL LETTER Y
-0x7A 0x007A # LATIN SMALL LETTER Z
-0x7B 0x007B # LEFT CURLY BRACKET
-0x7C 0x007C # VERTICAL LINE
-0x7D 0x007D # RIGHT CURLY BRACKET
-0x7E 0x007E # TILDE
-0x7F 0x007F # DELETE
-0x80 0x0080 # <control>
-0x81 0x0081 # <control>
-0x82 0x0082 # <control>
-0x83 0x0083 # <control>
-0x84 0x0084 # <control>
-0x85 0x0085 # <control>
-0x86 0x0086 # <control>
-0x87 0x0087 # <control>
-0x88 0x0088 # <control>
-0x89 0x0089 # <control>
-0x8A 0x008A # <control>
-0x8B 0x008B # <control>
-0x8C 0x008C # <control>
-0x8D 0x008D # <control>
-0x8E 0x008E # <control>
-0x8F 0x008F # <control>
-0x90 0x0090 # <control>
-0x91 0x0091 # <control>
-0x92 0x0092 # <control>
-0x93 0x0093 # <control>
-0x94 0x0094 # <control>
-0x95 0x0095 # <control>
-0x96 0x0096 # <control>
-0x97 0x0097 # <control>
-0x98 0x0098 # <control>
-0x99 0x0099 # <control>
-0x9A 0x009A # <control>
-0x9B 0x009B # <control>
-0x9C 0x009C # <control>
-0x9D 0x009D # <control>
-0x9E 0x009E # <control>
-0x9F 0x009F # <control>
-0xA0 0x00A0 # NO-BREAK SPACE
-0xA1 0x201D # RIGHT DOUBLE QUOTATION MARK
-0xA2 0x00A2 # CENT SIGN
-0xA3 0x00A3 # POUND SIGN
-0xA4 0x00A4 # CURRENCY SIGN
-0xA5 0x201E # DOUBLE LOW-9 QUOTATION MARK
-0xA6 0x00A6 # BROKEN BAR
-0xA7 0x00A7 # SECTION SIGN
-0xA8 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE
-0xA9 0x00A9 # COPYRIGHT SIGN
-0xAA 0x0156 # LATIN CAPITAL LETTER R WITH CEDILLA
-0xAB 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-0xAC 0x00AC # NOT SIGN
-0xAD 0x00AD # SOFT HYPHEN
-0xAE 0x00AE # REGISTERED SIGN
-0xAF 0x00C6 # LATIN CAPITAL LETTER AE
-0xB0 0x00B0 # DEGREE SIGN
-0xB1 0x00B1 # PLUS-MINUS SIGN
-0xB2 0x00B2 # SUPERSCRIPT TWO
-0xB3 0x00B3 # SUPERSCRIPT THREE
-0xB4 0x201C # LEFT DOUBLE QUOTATION MARK
-0xB5 0x00B5 # MICRO SIGN
-0xB6 0x00B6 # PILCROW SIGN
-0xB7 0x00B7 # MIDDLE DOT
-0xB8 0x00F8 # LATIN SMALL LETTER O WITH STROKE
-0xB9 0x00B9 # SUPERSCRIPT ONE
-0xBA 0x0157 # LATIN SMALL LETTER R WITH CEDILLA
-0xBB 0x00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-0xBC 0x00BC # VULGAR FRACTION ONE QUARTER
-0xBD 0x00BD # VULGAR FRACTION ONE HALF
-0xBE 0x00BE # VULGAR FRACTION THREE QUARTERS
-0xBF 0x00E6 # LATIN SMALL LETTER AE
-0xC0 0x0104 # LATIN CAPITAL LETTER A WITH OGONEK
-0xC1 0x012E # LATIN CAPITAL LETTER I WITH OGONEK
-0xC2 0x0100 # LATIN CAPITAL LETTER A WITH MACRON
-0xC3 0x0106 # LATIN CAPITAL LETTER C WITH ACUTE
-0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
-0xC5 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE
-0xC6 0x0118 # LATIN CAPITAL LETTER E WITH OGONEK
-0xC7 0x0112 # LATIN CAPITAL LETTER E WITH MACRON
-0xC8 0x010C # LATIN CAPITAL LETTER C WITH CARON
-0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE
-0xCA 0x0179 # LATIN CAPITAL LETTER Z WITH ACUTE
-0xCB 0x0116 # LATIN CAPITAL LETTER E WITH DOT ABOVE
-0xCC 0x0122 # LATIN CAPITAL LETTER G WITH CEDILLA
-0xCD 0x0136 # LATIN CAPITAL LETTER K WITH CEDILLA
-0xCE 0x012A # LATIN CAPITAL LETTER I WITH MACRON
-0xCF 0x013B # LATIN CAPITAL LETTER L WITH CEDILLA
-0xD0 0x0160 # LATIN CAPITAL LETTER S WITH CARON
-0xD1 0x0143 # LATIN CAPITAL LETTER N WITH ACUTE
-0xD2 0x0145 # LATIN CAPITAL LETTER N WITH CEDILLA
-0xD3 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE
-0xD4 0x014C # LATIN CAPITAL LETTER O WITH MACRON
-0xD5 0x00D5 # LATIN CAPITAL LETTER O WITH TILDE
-0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
-0xD7 0x00D7 # MULTIPLICATION SIGN
-0xD8 0x0172 # LATIN CAPITAL LETTER U WITH OGONEK
-0xD9 0x0141 # LATIN CAPITAL LETTER L WITH STROKE
-0xDA 0x015A # LATIN CAPITAL LETTER S WITH ACUTE
-0xDB 0x016A # LATIN CAPITAL LETTER U WITH MACRON
-0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
-0xDD 0x017B # LATIN CAPITAL LETTER Z WITH DOT ABOVE
-0xDE 0x017D # LATIN CAPITAL LETTER Z WITH CARON
-0xDF 0x00DF # LATIN SMALL LETTER SHARP S (German)
-0xE0 0x0105 # LATIN SMALL LETTER A WITH OGONEK
-0xE1 0x012F # LATIN SMALL LETTER I WITH OGONEK
-0xE2 0x0101 # LATIN SMALL LETTER A WITH MACRON
-0xE3 0x0107 # LATIN SMALL LETTER C WITH ACUTE
-0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS
-0xE5 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE
-0xE6 0x0119 # LATIN SMALL LETTER E WITH OGONEK
-0xE7 0x0113 # LATIN SMALL LETTER E WITH MACRON
-0xE8 0x010D # LATIN SMALL LETTER C WITH CARON
-0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE
-0xEA 0x017A # LATIN SMALL LETTER Z WITH ACUTE
-0xEB 0x0117 # LATIN SMALL LETTER E WITH DOT ABOVE
-0xEC 0x0123 # LATIN SMALL LETTER G WITH CEDILLA
-0xED 0x0137 # LATIN SMALL LETTER K WITH CEDILLA
-0xEE 0x012B # LATIN SMALL LETTER I WITH MACRON
-0xEF 0x013C # LATIN SMALL LETTER L WITH CEDILLA
-0xF0 0x0161 # LATIN SMALL LETTER S WITH CARON
-0xF1 0x0144 # LATIN SMALL LETTER N WITH ACUTE
-0xF2 0x0146 # LATIN SMALL LETTER N WITH CEDILLA
-0xF3 0x00F3 # LATIN SMALL LETTER O WITH ACUTE
-0xF4 0x014D # LATIN SMALL LETTER O WITH MACRON
-0xF5 0x00F5 # LATIN SMALL LETTER O WITH TILDE
-0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS
-0xF7 0x00F7 # DIVISION SIGN
-0xF8 0x0173 # LATIN SMALL LETTER U WITH OGONEK
-0xF9 0x0142 # LATIN SMALL LETTER L WITH STROKE
-0xFA 0x015B # LATIN SMALL LETTER S WITH ACUTE
-0xFB 0x016B # LATIN SMALL LETTER U WITH MACRON
-0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS
-0xFD 0x017C # LATIN SMALL LETTER Z WITH DOT ABOVE
-0xFE 0x017E # LATIN SMALL LETTER Z WITH CARON
-0xFF 0x2019 # RIGHT SINGLE QUOTATION MARK
diff --git a/program/lib/encoding/ISO-8859-14.map b/program/lib/encoding/ISO-8859-14.map
deleted file mode 100644
index 73e98555e..000000000
--- a/program/lib/encoding/ISO-8859-14.map
+++ /dev/null
@@ -1,301 +0,0 @@
-#
-# Name: ISO/IEC 8859-14:1998 to Unicode
-# Unicode version: 3.0
-# Table version: 1.0
-# Table format: Format A
-# Date: 1999 July 27
-# Authors: Markus Kuhn <http://www.cl.cam.ac.uk/~mgk25/>
-# Ken Whistler <kenw@sybase.com>
-#
-# Copyright (c) 1998 - 1999 Unicode, Inc. All Rights reserved.
-#
-# This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
-# No claims are made as to fitness for any particular purpose. No
-# warranties of any kind are expressed or implied. The recipient
-# agrees to determine applicability of information provided. If this
-# file has been provided on optical media by Unicode, Inc., the sole
-# remedy for any claim will be exchange of defective media within 90
-# days of receipt.
-#
-# Unicode, Inc. hereby grants the right to freely use the information
-# supplied in this file in the creation of products supporting the
-# Unicode Standard, and to make copies of this file in any form for
-# internal or external distribution as long as this notice remains
-# attached.
-#
-# General notes:
-#
-# This table contains the data the Unicode Consortium has on how
-# ISO/IEC 8859-14:1998 characters map into Unicode.
-#
-# Format: Three tab-separated columns
-# Column #1 is the ISO/IEC 8859-14 code (in hex as 0xXX)
-# Column #2 is the Unicode (in hex as 0xXXXX)
-# Column #3 the Unicode name (follows a comment sign, '#')
-#
-# The entries are in ISO/IEC 8859-14 order.
-#
-# Updated versions of this file may be found in:
-# <ftp://ftp.unicode.org/Public/MAPPINGS/>
-#
-# Any comments or problems, contact <errata@unicode.org>
-# Please note that <errata@unicode.org> is an archival address;
-# notices will be checked, but do not expect an immediate response.
-#
-0x00 0x0000 # NULL
-0x01 0x0001 # START OF HEADING
-0x02 0x0002 # START OF TEXT
-0x03 0x0003 # END OF TEXT
-0x04 0x0004 # END OF TRANSMISSION
-0x05 0x0005 # ENQUIRY
-0x06 0x0006 # ACKNOWLEDGE
-0x07 0x0007 # BELL
-0x08 0x0008 # BACKSPACE
-0x09 0x0009 # HORIZONTAL TABULATION
-0x0A 0x000A # LINE FEED
-0x0B 0x000B # VERTICAL TABULATION
-0x0C 0x000C # FORM FEED
-0x0D 0x000D # CARRIAGE RETURN
-0x0E 0x000E # SHIFT OUT
-0x0F 0x000F # SHIFT IN
-0x10 0x0010 # DATA LINK ESCAPE
-0x11 0x0011 # DEVICE CONTROL ONE
-0x12 0x0012 # DEVICE CONTROL TWO
-0x13 0x0013 # DEVICE CONTROL THREE
-0x14 0x0014 # DEVICE CONTROL FOUR
-0x15 0x0015 # NEGATIVE ACKNOWLEDGE
-0x16 0x0016 # SYNCHRONOUS IDLE
-0x17 0x0017 # END OF TRANSMISSION BLOCK
-0x18 0x0018 # CANCEL
-0x19 0x0019 # END OF MEDIUM
-0x1A 0x001A # SUBSTITUTE
-0x1B 0x001B # ESCAPE
-0x1C 0x001C # FILE SEPARATOR
-0x1D 0x001D # GROUP SEPARATOR
-0x1E 0x001E # RECORD SEPARATOR
-0x1F 0x001F # UNIT SEPARATOR
-0x20 0x0020 # SPACE
-0x21 0x0021 # EXCLAMATION MARK
-0x22 0x0022 # QUOTATION MARK
-0x23 0x0023 # NUMBER SIGN
-0x24 0x0024 # DOLLAR SIGN
-0x25 0x0025 # PERCENT SIGN
-0x26 0x0026 # AMPERSAND
-0x27 0x0027 # APOSTROPHE
-0x28 0x0028 # LEFT PARENTHESIS
-0x29 0x0029 # RIGHT PARENTHESIS
-0x2A 0x002A # ASTERISK
-0x2B 0x002B # PLUS SIGN
-0x2C 0x002C # COMMA
-0x2D 0x002D # HYPHEN-MINUS
-0x2E 0x002E # FULL STOP
-0x2F 0x002F # SOLIDUS
-0x30 0x0030 # DIGIT ZERO
-0x31 0x0031 # DIGIT ONE
-0x32 0x0032 # DIGIT TWO
-0x33 0x0033 # DIGIT THREE
-0x34 0x0034 # DIGIT FOUR
-0x35 0x0035 # DIGIT FIVE
-0x36 0x0036 # DIGIT SIX
-0x37 0x0037 # DIGIT SEVEN
-0x38 0x0038 # DIGIT EIGHT
-0x39 0x0039 # DIGIT NINE
-0x3A 0x003A # COLON
-0x3B 0x003B # SEMICOLON
-0x3C 0x003C # LESS-THAN SIGN
-0x3D 0x003D # EQUALS SIGN
-0x3E 0x003E # GREATER-THAN SIGN
-0x3F 0x003F # QUESTION MARK
-0x40 0x0040 # COMMERCIAL AT
-0x41 0x0041 # LATIN CAPITAL LETTER A
-0x42 0x0042 # LATIN CAPITAL LETTER B
-0x43 0x0043 # LATIN CAPITAL LETTER C
-0x44 0x0044 # LATIN CAPITAL LETTER D
-0x45 0x0045 # LATIN CAPITAL LETTER E
-0x46 0x0046 # LATIN CAPITAL LETTER F
-0x47 0x0047 # LATIN CAPITAL LETTER G
-0x48 0x0048 # LATIN CAPITAL LETTER H
-0x49 0x0049 # LATIN CAPITAL LETTER I
-0x4A 0x004A # LATIN CAPITAL LETTER J
-0x4B 0x004B # LATIN CAPITAL LETTER K
-0x4C 0x004C # LATIN CAPITAL LETTER L
-0x4D 0x004D # LATIN CAPITAL LETTER M
-0x4E 0x004E # LATIN CAPITAL LETTER N
-0x4F 0x004F # LATIN CAPITAL LETTER O
-0x50 0x0050 # LATIN CAPITAL LETTER P
-0x51 0x0051 # LATIN CAPITAL LETTER Q
-0x52 0x0052 # LATIN CAPITAL LETTER R
-0x53 0x0053 # LATIN CAPITAL LETTER S
-0x54 0x0054 # LATIN CAPITAL LETTER T
-0x55 0x0055 # LATIN CAPITAL LETTER U
-0x56 0x0056 # LATIN CAPITAL LETTER V
-0x57 0x0057 # LATIN CAPITAL LETTER W
-0x58 0x0058 # LATIN CAPITAL LETTER X
-0x59 0x0059 # LATIN CAPITAL LETTER Y
-0x5A 0x005A # LATIN CAPITAL LETTER Z
-0x5B 0x005B # LEFT SQUARE BRACKET
-0x5C 0x005C # REVERSE SOLIDUS
-0x5D 0x005D # RIGHT SQUARE BRACKET
-0x5E 0x005E # CIRCUMFLEX ACCENT
-0x5F 0x005F # LOW LINE
-0x60 0x0060 # GRAVE ACCENT
-0x61 0x0061 # LATIN SMALL LETTER A
-0x62 0x0062 # LATIN SMALL LETTER B
-0x63 0x0063 # LATIN SMALL LETTER C
-0x64 0x0064 # LATIN SMALL LETTER D
-0x65 0x0065 # LATIN SMALL LETTER E
-0x66 0x0066 # LATIN SMALL LETTER F
-0x67 0x0067 # LATIN SMALL LETTER G
-0x68 0x0068 # LATIN SMALL LETTER H
-0x69 0x0069 # LATIN SMALL LETTER I
-0x6A 0x006A # LATIN SMALL LETTER J
-0x6B 0x006B # LATIN SMALL LETTER K
-0x6C 0x006C # LATIN SMALL LETTER L
-0x6D 0x006D # LATIN SMALL LETTER M
-0x6E 0x006E # LATIN SMALL LETTER N
-0x6F 0x006F # LATIN SMALL LETTER O
-0x70 0x0070 # LATIN SMALL LETTER P
-0x71 0x0071 # LATIN SMALL LETTER Q
-0x72 0x0072 # LATIN SMALL LETTER R
-0x73 0x0073 # LATIN SMALL LETTER S
-0x74 0x0074 # LATIN SMALL LETTER T
-0x75 0x0075 # LATIN SMALL LETTER U
-0x76 0x0076 # LATIN SMALL LETTER V
-0x77 0x0077 # LATIN SMALL LETTER W
-0x78 0x0078 # LATIN SMALL LETTER X
-0x79 0x0079 # LATIN SMALL LETTER Y
-0x7A 0x007A # LATIN SMALL LETTER Z
-0x7B 0x007B # LEFT CURLY BRACKET
-0x7C 0x007C # VERTICAL LINE
-0x7D 0x007D # RIGHT CURLY BRACKET
-0x7E 0x007E # TILDE
-0x7F 0x007F # DELETE
-0x80 0x0080 # <control>
-0x81 0x0081 # <control>
-0x82 0x0082 # <control>
-0x83 0x0083 # <control>
-0x84 0x0084 # <control>
-0x85 0x0085 # <control>
-0x86 0x0086 # <control>
-0x87 0x0087 # <control>
-0x88 0x0088 # <control>
-0x89 0x0089 # <control>
-0x8A 0x008A # <control>
-0x8B 0x008B # <control>
-0x8C 0x008C # <control>
-0x8D 0x008D # <control>
-0x8E 0x008E # <control>
-0x8F 0x008F # <control>
-0x90 0x0090 # <control>
-0x91 0x0091 # <control>
-0x92 0x0092 # <control>
-0x93 0x0093 # <control>
-0x94 0x0094 # <control>
-0x95 0x0095 # <control>
-0x96 0x0096 # <control>
-0x97 0x0097 # <control>
-0x98 0x0098 # <control>
-0x99 0x0099 # <control>
-0x9A 0x009A # <control>
-0x9B 0x009B # <control>
-0x9C 0x009C # <control>
-0x9D 0x009D # <control>
-0x9E 0x009E # <control>
-0x9F 0x009F # <control>
-0xA0 0x00A0 # NO-BREAK SPACE
-0xA1 0x1E02 # LATIN CAPITAL LETTER B WITH DOT ABOVE
-0xA2 0x1E03 # LATIN SMALL LETTER B WITH DOT ABOVE
-0xA3 0x00A3 # POUND SIGN
-0xA4 0x010A # LATIN CAPITAL LETTER C WITH DOT ABOVE
-0xA5 0x010B # LATIN SMALL LETTER C WITH DOT ABOVE
-0xA6 0x1E0A # LATIN CAPITAL LETTER D WITH DOT ABOVE
-0xA7 0x00A7 # SECTION SIGN
-0xA8 0x1E80 # LATIN CAPITAL LETTER W WITH GRAVE
-0xA9 0x00A9 # COPYRIGHT SIGN
-0xAA 0x1E82 # LATIN CAPITAL LETTER W WITH ACUTE
-0xAB 0x1E0B # LATIN SMALL LETTER D WITH DOT ABOVE
-0xAC 0x1EF2 # LATIN CAPITAL LETTER Y WITH GRAVE
-0xAD 0x00AD # SOFT HYPHEN
-0xAE 0x00AE # REGISTERED SIGN
-0xAF 0x0178 # LATIN CAPITAL LETTER Y WITH DIAERESIS
-0xB0 0x1E1E # LATIN CAPITAL LETTER F WITH DOT ABOVE
-0xB1 0x1E1F # LATIN SMALL LETTER F WITH DOT ABOVE
-0xB2 0x0120 # LATIN CAPITAL LETTER G WITH DOT ABOVE
-0xB3 0x0121 # LATIN SMALL LETTER G WITH DOT ABOVE
-0xB4 0x1E40 # LATIN CAPITAL LETTER M WITH DOT ABOVE
-0xB5 0x1E41 # LATIN SMALL LETTER M WITH DOT ABOVE
-0xB6 0x00B6 # PILCROW SIGN
-0xB7 0x1E56 # LATIN CAPITAL LETTER P WITH DOT ABOVE
-0xB8 0x1E81 # LATIN SMALL LETTER W WITH GRAVE
-0xB9 0x1E57 # LATIN SMALL LETTER P WITH DOT ABOVE
-0xBA 0x1E83 # LATIN SMALL LETTER W WITH ACUTE
-0xBB 0x1E60 # LATIN CAPITAL LETTER S WITH DOT ABOVE
-0xBC 0x1EF3 # LATIN SMALL LETTER Y WITH GRAVE
-0xBD 0x1E84 # LATIN CAPITAL LETTER W WITH DIAERESIS
-0xBE 0x1E85 # LATIN SMALL LETTER W WITH DIAERESIS
-0xBF 0x1E61 # LATIN SMALL LETTER S WITH DOT ABOVE
-0xC0 0x00C0 # LATIN CAPITAL LETTER A WITH GRAVE
-0xC1 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE
-0xC2 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-0xC3 0x00C3 # LATIN CAPITAL LETTER A WITH TILDE
-0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
-0xC5 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE
-0xC6 0x00C6 # LATIN CAPITAL LETTER AE
-0xC7 0x00C7 # LATIN CAPITAL LETTER C WITH CEDILLA
-0xC8 0x00C8 # LATIN CAPITAL LETTER E WITH GRAVE
-0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE
-0xCA 0x00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-0xCB 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS
-0xCC 0x00CC # LATIN CAPITAL LETTER I WITH GRAVE
-0xCD 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE
-0xCE 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-0xCF 0x00CF # LATIN CAPITAL LETTER I WITH DIAERESIS
-0xD0 0x0174 # LATIN CAPITAL LETTER W WITH CIRCUMFLEX
-0xD1 0x00D1 # LATIN CAPITAL LETTER N WITH TILDE
-0xD2 0x00D2 # LATIN CAPITAL LETTER O WITH GRAVE
-0xD3 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE
-0xD4 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-0xD5 0x00D5 # LATIN CAPITAL LETTER O WITH TILDE
-0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
-0xD7 0x1E6A # LATIN CAPITAL LETTER T WITH DOT ABOVE
-0xD8 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE
-0xD9 0x00D9 # LATIN CAPITAL LETTER U WITH GRAVE
-0xDA 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE
-0xDB 0x00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
-0xDD 0x00DD # LATIN CAPITAL LETTER Y WITH ACUTE
-0xDE 0x0176 # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
-0xDF 0x00DF # LATIN SMALL LETTER SHARP S
-0xE0 0x00E0 # LATIN SMALL LETTER A WITH GRAVE
-0xE1 0x00E1 # LATIN SMALL LETTER A WITH ACUTE
-0xE2 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX
-0xE3 0x00E3 # LATIN SMALL LETTER A WITH TILDE
-0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS
-0xE5 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE
-0xE6 0x00E6 # LATIN SMALL LETTER AE
-0xE7 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA
-0xE8 0x00E8 # LATIN SMALL LETTER E WITH GRAVE
-0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE
-0xEA 0x00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX
-0xEB 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS
-0xEC 0x00EC # LATIN SMALL LETTER I WITH GRAVE
-0xED 0x00ED # LATIN SMALL LETTER I WITH ACUTE
-0xEE 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX
-0xEF 0x00EF # LATIN SMALL LETTER I WITH DIAERESIS
-0xF0 0x0175 # LATIN SMALL LETTER W WITH CIRCUMFLEX
-0xF1 0x00F1 # LATIN SMALL LETTER N WITH TILDE
-0xF2 0x00F2 # LATIN SMALL LETTER O WITH GRAVE
-0xF3 0x00F3 # LATIN SMALL LETTER O WITH ACUTE
-0xF4 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX
-0xF5 0x00F5 # LATIN SMALL LETTER O WITH TILDE
-0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS
-0xF7 0x1E6B # LATIN SMALL LETTER T WITH DOT ABOVE
-0xF8 0x00F8 # LATIN SMALL LETTER O WITH STROKE
-0xF9 0x00F9 # LATIN SMALL LETTER U WITH GRAVE
-0xFA 0x00FA # LATIN SMALL LETTER U WITH ACUTE
-0xFB 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX
-0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS
-0xFD 0x00FD # LATIN SMALL LETTER Y WITH ACUTE
-0xFE 0x0177 # LATIN SMALL LETTER Y WITH CIRCUMFLEX
-0xFF 0x00FF # LATIN SMALL LETTER Y WITH DIAERESIS
-
diff --git a/program/lib/encoding/ISO-8859-15.map b/program/lib/encoding/ISO-8859-15.map
deleted file mode 100644
index ab2f32fce..000000000
--- a/program/lib/encoding/ISO-8859-15.map
+++ /dev/null
@@ -1,303 +0,0 @@
-#
-# Name: ISO/IEC 8859-15:1999 to Unicode
-# Unicode version: 3.0
-# Table version: 1.0
-# Table format: Format A
-# Date: 1999 July 27
-# Authors: Markus Kuhn <http://www.cl.cam.ac.uk/~mgk25/>
-# Ken Whistler <kenw@sybase.com>
-#
-# Copyright (c) 1998 - 1999 Unicode, Inc. All Rights reserved.
-#
-# This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
-# No claims are made as to fitness for any particular purpose. No
-# warranties of any kind are expressed or implied. The recipient
-# agrees to determine applicability of information provided. If this
-# file has been provided on optical media by Unicode, Inc., the sole
-# remedy for any claim will be exchange of defective media within 90
-# days of receipt.
-#
-# Unicode, Inc. hereby grants the right to freely use the information
-# supplied in this file in the creation of products supporting the
-# Unicode Standard, and to make copies of this file in any form for
-# internal or external distribution as long as this notice remains
-# attached.
-#
-# General notes:
-#
-# This table contains the data the Unicode Consortium has on how
-# ISO/IEC 8859-15:1999 characters map into Unicode.
-#
-# Format: Three tab-separated columns
-# Column #1 is the ISO/IEC 8859-15 code (in hex as 0xXX)
-# Column #2 is the Unicode (in hex as 0xXXXX)
-# Column #3 the Unicode name (follows a comment sign, '#')
-#
-# The entries are in ISO/IEC 8859-15 order.
-#
-# Version history
-#
-# Updated versions of this file may be found in:
-# <ftp://ftp.unicode.org/Public/MAPPINGS/>
-#
-# Any comments or problems, contact <errata@unicode.org>
-# Please note that <errata@unicode.org> is an archival address;
-# notices will be checked, but do not expect an immediate response.
-#
-0x00 0x0000 # NULL
-0x01 0x0001 # START OF HEADING
-0x02 0x0002 # START OF TEXT
-0x03 0x0003 # END OF TEXT
-0x04 0x0004 # END OF TRANSMISSION
-0x05 0x0005 # ENQUIRY
-0x06 0x0006 # ACKNOWLEDGE
-0x07 0x0007 # BELL
-0x08 0x0008 # BACKSPACE
-0x09 0x0009 # HORIZONTAL TABULATION
-0x0A 0x000A # LINE FEED
-0x0B 0x000B # VERTICAL TABULATION
-0x0C 0x000C # FORM FEED
-0x0D 0x000D # CARRIAGE RETURN
-0x0E 0x000E # SHIFT OUT
-0x0F 0x000F # SHIFT IN
-0x10 0x0010 # DATA LINK ESCAPE
-0x11 0x0011 # DEVICE CONTROL ONE
-0x12 0x0012 # DEVICE CONTROL TWO
-0x13 0x0013 # DEVICE CONTROL THREE
-0x14 0x0014 # DEVICE CONTROL FOUR
-0x15 0x0015 # NEGATIVE ACKNOWLEDGE
-0x16 0x0016 # SYNCHRONOUS IDLE
-0x17 0x0017 # END OF TRANSMISSION BLOCK
-0x18 0x0018 # CANCEL
-0x19 0x0019 # END OF MEDIUM
-0x1A 0x001A # SUBSTITUTE
-0x1B 0x001B # ESCAPE
-0x1C 0x001C # FILE SEPARATOR
-0x1D 0x001D # GROUP SEPARATOR
-0x1E 0x001E # RECORD SEPARATOR
-0x1F 0x001F # UNIT SEPARATOR
-0x20 0x0020 # SPACE
-0x21 0x0021 # EXCLAMATION MARK
-0x22 0x0022 # QUOTATION MARK
-0x23 0x0023 # NUMBER SIGN
-0x24 0x0024 # DOLLAR SIGN
-0x25 0x0025 # PERCENT SIGN
-0x26 0x0026 # AMPERSAND
-0x27 0x0027 # APOSTROPHE
-0x28 0x0028 # LEFT PARENTHESIS
-0x29 0x0029 # RIGHT PARENTHESIS
-0x2A 0x002A # ASTERISK
-0x2B 0x002B # PLUS SIGN
-0x2C 0x002C # COMMA
-0x2D 0x002D # HYPHEN-MINUS
-0x2E 0x002E # FULL STOP
-0x2F 0x002F # SOLIDUS
-0x30 0x0030 # DIGIT ZERO
-0x31 0x0031 # DIGIT ONE
-0x32 0x0032 # DIGIT TWO
-0x33 0x0033 # DIGIT THREE
-0x34 0x0034 # DIGIT FOUR
-0x35 0x0035 # DIGIT FIVE
-0x36 0x0036 # DIGIT SIX
-0x37 0x0037 # DIGIT SEVEN
-0x38 0x0038 # DIGIT EIGHT
-0x39 0x0039 # DIGIT NINE
-0x3A 0x003A # COLON
-0x3B 0x003B # SEMICOLON
-0x3C 0x003C # LESS-THAN SIGN
-0x3D 0x003D # EQUALS SIGN
-0x3E 0x003E # GREATER-THAN SIGN
-0x3F 0x003F # QUESTION MARK
-0x40 0x0040 # COMMERCIAL AT
-0x41 0x0041 # LATIN CAPITAL LETTER A
-0x42 0x0042 # LATIN CAPITAL LETTER B
-0x43 0x0043 # LATIN CAPITAL LETTER C
-0x44 0x0044 # LATIN CAPITAL LETTER D
-0x45 0x0045 # LATIN CAPITAL LETTER E
-0x46 0x0046 # LATIN CAPITAL LETTER F
-0x47 0x0047 # LATIN CAPITAL LETTER G
-0x48 0x0048 # LATIN CAPITAL LETTER H
-0x49 0x0049 # LATIN CAPITAL LETTER I
-0x4A 0x004A # LATIN CAPITAL LETTER J
-0x4B 0x004B # LATIN CAPITAL LETTER K
-0x4C 0x004C # LATIN CAPITAL LETTER L
-0x4D 0x004D # LATIN CAPITAL LETTER M
-0x4E 0x004E # LATIN CAPITAL LETTER N
-0x4F 0x004F # LATIN CAPITAL LETTER O
-0x50 0x0050 # LATIN CAPITAL LETTER P
-0x51 0x0051 # LATIN CAPITAL LETTER Q
-0x52 0x0052 # LATIN CAPITAL LETTER R
-0x53 0x0053 # LATIN CAPITAL LETTER S
-0x54 0x0054 # LATIN CAPITAL LETTER T
-0x55 0x0055 # LATIN CAPITAL LETTER U
-0x56 0x0056 # LATIN CAPITAL LETTER V
-0x57 0x0057 # LATIN CAPITAL LETTER W
-0x58 0x0058 # LATIN CAPITAL LETTER X
-0x59 0x0059 # LATIN CAPITAL LETTER Y
-0x5A 0x005A # LATIN CAPITAL LETTER Z
-0x5B 0x005B # LEFT SQUARE BRACKET
-0x5C 0x005C # REVERSE SOLIDUS
-0x5D 0x005D # RIGHT SQUARE BRACKET
-0x5E 0x005E # CIRCUMFLEX ACCENT
-0x5F 0x005F # LOW LINE
-0x60 0x0060 # GRAVE ACCENT
-0x61 0x0061 # LATIN SMALL LETTER A
-0x62 0x0062 # LATIN SMALL LETTER B
-0x63 0x0063 # LATIN SMALL LETTER C
-0x64 0x0064 # LATIN SMALL LETTER D
-0x65 0x0065 # LATIN SMALL LETTER E
-0x66 0x0066 # LATIN SMALL LETTER F
-0x67 0x0067 # LATIN SMALL LETTER G
-0x68 0x0068 # LATIN SMALL LETTER H
-0x69 0x0069 # LATIN SMALL LETTER I
-0x6A 0x006A # LATIN SMALL LETTER J
-0x6B 0x006B # LATIN SMALL LETTER K
-0x6C 0x006C # LATIN SMALL LETTER L
-0x6D 0x006D # LATIN SMALL LETTER M
-0x6E 0x006E # LATIN SMALL LETTER N
-0x6F 0x006F # LATIN SMALL LETTER O
-0x70 0x0070 # LATIN SMALL LETTER P
-0x71 0x0071 # LATIN SMALL LETTER Q
-0x72 0x0072 # LATIN SMALL LETTER R
-0x73 0x0073 # LATIN SMALL LETTER S
-0x74 0x0074 # LATIN SMALL LETTER T
-0x75 0x0075 # LATIN SMALL LETTER U
-0x76 0x0076 # LATIN SMALL LETTER V
-0x77 0x0077 # LATIN SMALL LETTER W
-0x78 0x0078 # LATIN SMALL LETTER X
-0x79 0x0079 # LATIN SMALL LETTER Y
-0x7A 0x007A # LATIN SMALL LETTER Z
-0x7B 0x007B # LEFT CURLY BRACKET
-0x7C 0x007C # VERTICAL LINE
-0x7D 0x007D # RIGHT CURLY BRACKET
-0x7E 0x007E # TILDE
-0x7F 0x007F # DELETE
-0x80 0x0080 # <control>
-0x81 0x0081 # <control>
-0x82 0x0082 # <control>
-0x83 0x0083 # <control>
-0x84 0x0084 # <control>
-0x85 0x0085 # <control>
-0x86 0x0086 # <control>
-0x87 0x0087 # <control>
-0x88 0x0088 # <control>
-0x89 0x0089 # <control>
-0x8A 0x008A # <control>
-0x8B 0x008B # <control>
-0x8C 0x008C # <control>
-0x8D 0x008D # <control>
-0x8E 0x008E # <control>
-0x8F 0x008F # <control>
-0x90 0x0090 # <control>
-0x91 0x0091 # <control>
-0x92 0x0092 # <control>
-0x93 0x0093 # <control>
-0x94 0x0094 # <control>
-0x95 0x0095 # <control>
-0x96 0x0096 # <control>
-0x97 0x0097 # <control>
-0x98 0x0098 # <control>
-0x99 0x0099 # <control>
-0x9A 0x009A # <control>
-0x9B 0x009B # <control>
-0x9C 0x009C # <control>
-0x9D 0x009D # <control>
-0x9E 0x009E # <control>
-0x9F 0x009F # <control>
-0xA0 0x00A0 # NO-BREAK SPACE
-0xA1 0x00A1 # INVERTED EXCLAMATION MARK
-0xA2 0x00A2 # CENT SIGN
-0xA3 0x00A3 # POUND SIGN
-0xA4 0x20AC # EURO SIGN
-0xA5 0x00A5 # YEN SIGN
-0xA6 0x0160 # LATIN CAPITAL LETTER S WITH CARON
-0xA7 0x00A7 # SECTION SIGN
-0xA8 0x0161 # LATIN SMALL LETTER S WITH CARON
-0xA9 0x00A9 # COPYRIGHT SIGN
-0xAA 0x00AA # FEMININE ORDINAL INDICATOR
-0xAB 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-0xAC 0x00AC # NOT SIGN
-0xAD 0x00AD # SOFT HYPHEN
-0xAE 0x00AE # REGISTERED SIGN
-0xAF 0x00AF # MACRON
-0xB0 0x00B0 # DEGREE SIGN
-0xB1 0x00B1 # PLUS-MINUS SIGN
-0xB2 0x00B2 # SUPERSCRIPT TWO
-0xB3 0x00B3 # SUPERSCRIPT THREE
-0xB4 0x017D # LATIN CAPITAL LETTER Z WITH CARON
-0xB5 0x00B5 # MICRO SIGN
-0xB6 0x00B6 # PILCROW SIGN
-0xB7 0x00B7 # MIDDLE DOT
-0xB8 0x017E # LATIN SMALL LETTER Z WITH CARON
-0xB9 0x00B9 # SUPERSCRIPT ONE
-0xBA 0x00BA # MASCULINE ORDINAL INDICATOR
-0xBB 0x00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-0xBC 0x0152 # LATIN CAPITAL LIGATURE OE
-0xBD 0x0153 # LATIN SMALL LIGATURE OE
-0xBE 0x0178 # LATIN CAPITAL LETTER Y WITH DIAERESIS
-0xBF 0x00BF # INVERTED QUESTION MARK
-0xC0 0x00C0 # LATIN CAPITAL LETTER A WITH GRAVE
-0xC1 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE
-0xC2 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-0xC3 0x00C3 # LATIN CAPITAL LETTER A WITH TILDE
-0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
-0xC5 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE
-0xC6 0x00C6 # LATIN CAPITAL LETTER AE
-0xC7 0x00C7 # LATIN CAPITAL LETTER C WITH CEDILLA
-0xC8 0x00C8 # LATIN CAPITAL LETTER E WITH GRAVE
-0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE
-0xCA 0x00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-0xCB 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS
-0xCC 0x00CC # LATIN CAPITAL LETTER I WITH GRAVE
-0xCD 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE
-0xCE 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-0xCF 0x00CF # LATIN CAPITAL LETTER I WITH DIAERESIS
-0xD0 0x00D0 # LATIN CAPITAL LETTER ETH
-0xD1 0x00D1 # LATIN CAPITAL LETTER N WITH TILDE
-0xD2 0x00D2 # LATIN CAPITAL LETTER O WITH GRAVE
-0xD3 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE
-0xD4 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-0xD5 0x00D5 # LATIN CAPITAL LETTER O WITH TILDE
-0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
-0xD7 0x00D7 # MULTIPLICATION SIGN
-0xD8 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE
-0xD9 0x00D9 # LATIN CAPITAL LETTER U WITH GRAVE
-0xDA 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE
-0xDB 0x00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
-0xDD 0x00DD # LATIN CAPITAL LETTER Y WITH ACUTE
-0xDE 0x00DE # LATIN CAPITAL LETTER THORN
-0xDF 0x00DF # LATIN SMALL LETTER SHARP S
-0xE0 0x00E0 # LATIN SMALL LETTER A WITH GRAVE
-0xE1 0x00E1 # LATIN SMALL LETTER A WITH ACUTE
-0xE2 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX
-0xE3 0x00E3 # LATIN SMALL LETTER A WITH TILDE
-0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS
-0xE5 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE
-0xE6 0x00E6 # LATIN SMALL LETTER AE
-0xE7 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA
-0xE8 0x00E8 # LATIN SMALL LETTER E WITH GRAVE
-0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE
-0xEA 0x00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX
-0xEB 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS
-0xEC 0x00EC # LATIN SMALL LETTER I WITH GRAVE
-0xED 0x00ED # LATIN SMALL LETTER I WITH ACUTE
-0xEE 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX
-0xEF 0x00EF # LATIN SMALL LETTER I WITH DIAERESIS
-0xF0 0x00F0 # LATIN SMALL LETTER ETH
-0xF1 0x00F1 # LATIN SMALL LETTER N WITH TILDE
-0xF2 0x00F2 # LATIN SMALL LETTER O WITH GRAVE
-0xF3 0x00F3 # LATIN SMALL LETTER O WITH ACUTE
-0xF4 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX
-0xF5 0x00F5 # LATIN SMALL LETTER O WITH TILDE
-0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS
-0xF7 0x00F7 # DIVISION SIGN
-0xF8 0x00F8 # LATIN SMALL LETTER O WITH STROKE
-0xF9 0x00F9 # LATIN SMALL LETTER U WITH GRAVE
-0xFA 0x00FA # LATIN SMALL LETTER U WITH ACUTE
-0xFB 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX
-0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS
-0xFD 0x00FD # LATIN SMALL LETTER Y WITH ACUTE
-0xFE 0x00FE # LATIN SMALL LETTER THORN
-0xFF 0x00FF # LATIN SMALL LETTER Y WITH DIAERESIS
-
diff --git a/program/lib/encoding/ISO-8859-16.map b/program/lib/encoding/ISO-8859-16.map
deleted file mode 100644
index c0dcf0dac..000000000
--- a/program/lib/encoding/ISO-8859-16.map
+++ /dev/null
@@ -1,299 +0,0 @@
-#
-# Name: ISO/IEC 8859-16:2001 to Unicode
-# Unicode version: 3.0
-# Table version: 1.0
-# Table format: Format A
-# Date: 2001 July 26
-# Authors: Markus Kuhn <http://www.cl.cam.ac.uk/~mgk25/>
-#
-# Copyright (c) 1999-2001 Unicode, Inc. All Rights reserved.
-#
-# This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
-# No claims are made as to fitness for any particular purpose. No
-# warranties of any kind are expressed or implied. The recipient
-# agrees to determine applicability of information provided. If this
-# file has been provided on optical media by Unicode, Inc., the sole
-# remedy for any claim will be exchange of defective media within 90
-# days of receipt.
-#
-# Unicode, Inc. hereby grants the right to freely use the information
-# supplied in this file in the creation of products supporting the
-# Unicode Standard, and to make copies of this file in any form for
-# internal or external distribution as long as this notice remains
-# attached.
-#
-# General notes:
-#
-# This table contains the data the Unicode Consortium has on how
-# ISO/IEC 8859-16:2001 characters map into Unicode.
-#
-# Format: Three tab-separated columns
-# Column #1 is the ISO/IEC 8859-16 code (in hex as 0xXX)
-# Column #2 is the Unicode (in hex as 0xXXXX)
-# Column #3 the Unicode name (follows a comment sign, '#')
-#
-# The entries are in ISO/IEC 8859-16 order.
-#
-# Updated versions of this file may be found in:
-# <ftp://ftp.unicode.org/Public/MAPPINGS/>
-#
-# Any comments or problems, contact <errata@unicode.org>
-# Please note that <errata@unicode.org> is an archival address;
-# notices will be checked, but do not expect an immediate response.
-#
-0x00 0x0000 # NULL
-0x01 0x0001 # START OF HEADING
-0x02 0x0002 # START OF TEXT
-0x03 0x0003 # END OF TEXT
-0x04 0x0004 # END OF TRANSMISSION
-0x05 0x0005 # ENQUIRY
-0x06 0x0006 # ACKNOWLEDGE
-0x07 0x0007 # BELL
-0x08 0x0008 # BACKSPACE
-0x09 0x0009 # HORIZONTAL TABULATION
-0x0A 0x000A # LINE FEED
-0x0B 0x000B # VERTICAL TABULATION
-0x0C 0x000C # FORM FEED
-0x0D 0x000D # CARRIAGE RETURN
-0x0E 0x000E # SHIFT OUT
-0x0F 0x000F # SHIFT IN
-0x10 0x0010 # DATA LINK ESCAPE
-0x11 0x0011 # DEVICE CONTROL ONE
-0x12 0x0012 # DEVICE CONTROL TWO
-0x13 0x0013 # DEVICE CONTROL THREE
-0x14 0x0014 # DEVICE CONTROL FOUR
-0x15 0x0015 # NEGATIVE ACKNOWLEDGE
-0x16 0x0016 # SYNCHRONOUS IDLE
-0x17 0x0017 # END OF TRANSMISSION BLOCK
-0x18 0x0018 # CANCEL
-0x19 0x0019 # END OF MEDIUM
-0x1A 0x001A # SUBSTITUTE
-0x1B 0x001B # ESCAPE
-0x1C 0x001C # FILE SEPARATOR
-0x1D 0x001D # GROUP SEPARATOR
-0x1E 0x001E # RECORD SEPARATOR
-0x1F 0x001F # UNIT SEPARATOR
-0x20 0x0020 # SPACE
-0x21 0x0021 # EXCLAMATION MARK
-0x22 0x0022 # QUOTATION MARK
-0x23 0x0023 # NUMBER SIGN
-0x24 0x0024 # DOLLAR SIGN
-0x25 0x0025 # PERCENT SIGN
-0x26 0x0026 # AMPERSAND
-0x27 0x0027 # APOSTROPHE
-0x28 0x0028 # LEFT PARENTHESIS
-0x29 0x0029 # RIGHT PARENTHESIS
-0x2A 0x002A # ASTERISK
-0x2B 0x002B # PLUS SIGN
-0x2C 0x002C # COMMA
-0x2D 0x002D # HYPHEN-MINUS
-0x2E 0x002E # FULL STOP
-0x2F 0x002F # SOLIDUS
-0x30 0x0030 # DIGIT ZERO
-0x31 0x0031 # DIGIT ONE
-0x32 0x0032 # DIGIT TWO
-0x33 0x0033 # DIGIT THREE
-0x34 0x0034 # DIGIT FOUR
-0x35 0x0035 # DIGIT FIVE
-0x36 0x0036 # DIGIT SIX
-0x37 0x0037 # DIGIT SEVEN
-0x38 0x0038 # DIGIT EIGHT
-0x39 0x0039 # DIGIT NINE
-0x3A 0x003A # COLON
-0x3B 0x003B # SEMICOLON
-0x3C 0x003C # LESS-THAN SIGN
-0x3D 0x003D # EQUALS SIGN
-0x3E 0x003E # GREATER-THAN SIGN
-0x3F 0x003F # QUESTION MARK
-0x40 0x0040 # COMMERCIAL AT
-0x41 0x0041 # LATIN CAPITAL LETTER A
-0x42 0x0042 # LATIN CAPITAL LETTER B
-0x43 0x0043 # LATIN CAPITAL LETTER C
-0x44 0x0044 # LATIN CAPITAL LETTER D
-0x45 0x0045 # LATIN CAPITAL LETTER E
-0x46 0x0046 # LATIN CAPITAL LETTER F
-0x47 0x0047 # LATIN CAPITAL LETTER G
-0x48 0x0048 # LATIN CAPITAL LETTER H
-0x49 0x0049 # LATIN CAPITAL LETTER I
-0x4A 0x004A # LATIN CAPITAL LETTER J
-0x4B 0x004B # LATIN CAPITAL LETTER K
-0x4C 0x004C # LATIN CAPITAL LETTER L
-0x4D 0x004D # LATIN CAPITAL LETTER M
-0x4E 0x004E # LATIN CAPITAL LETTER N
-0x4F 0x004F # LATIN CAPITAL LETTER O
-0x50 0x0050 # LATIN CAPITAL LETTER P
-0x51 0x0051 # LATIN CAPITAL LETTER Q
-0x52 0x0052 # LATIN CAPITAL LETTER R
-0x53 0x0053 # LATIN CAPITAL LETTER S
-0x54 0x0054 # LATIN CAPITAL LETTER T
-0x55 0x0055 # LATIN CAPITAL LETTER U
-0x56 0x0056 # LATIN CAPITAL LETTER V
-0x57 0x0057 # LATIN CAPITAL LETTER W
-0x58 0x0058 # LATIN CAPITAL LETTER X
-0x59 0x0059 # LATIN CAPITAL LETTER Y
-0x5A 0x005A # LATIN CAPITAL LETTER Z
-0x5B 0x005B # LEFT SQUARE BRACKET
-0x5C 0x005C # REVERSE SOLIDUS
-0x5D 0x005D # RIGHT SQUARE BRACKET
-0x5E 0x005E # CIRCUMFLEX ACCENT
-0x5F 0x005F # LOW LINE
-0x60 0x0060 # GRAVE ACCENT
-0x61 0x0061 # LATIN SMALL LETTER A
-0x62 0x0062 # LATIN SMALL LETTER B
-0x63 0x0063 # LATIN SMALL LETTER C
-0x64 0x0064 # LATIN SMALL LETTER D
-0x65 0x0065 # LATIN SMALL LETTER E
-0x66 0x0066 # LATIN SMALL LETTER F
-0x67 0x0067 # LATIN SMALL LETTER G
-0x68 0x0068 # LATIN SMALL LETTER H
-0x69 0x0069 # LATIN SMALL LETTER I
-0x6A 0x006A # LATIN SMALL LETTER J
-0x6B 0x006B # LATIN SMALL LETTER K
-0x6C 0x006C # LATIN SMALL LETTER L
-0x6D 0x006D # LATIN SMALL LETTER M
-0x6E 0x006E # LATIN SMALL LETTER N
-0x6F 0x006F # LATIN SMALL LETTER O
-0x70 0x0070 # LATIN SMALL LETTER P
-0x71 0x0071 # LATIN SMALL LETTER Q
-0x72 0x0072 # LATIN SMALL LETTER R
-0x73 0x0073 # LATIN SMALL LETTER S
-0x74 0x0074 # LATIN SMALL LETTER T
-0x75 0x0075 # LATIN SMALL LETTER U
-0x76 0x0076 # LATIN SMALL LETTER V
-0x77 0x0077 # LATIN SMALL LETTER W
-0x78 0x0078 # LATIN SMALL LETTER X
-0x79 0x0079 # LATIN SMALL LETTER Y
-0x7A 0x007A # LATIN SMALL LETTER Z
-0x7B 0x007B # LEFT CURLY BRACKET
-0x7C 0x007C # VERTICAL LINE
-0x7D 0x007D # RIGHT CURLY BRACKET
-0x7E 0x007E # TILDE
-0x7F 0x007F # DELETE
-0x80 0x0080 # <control>
-0x81 0x0081 # <control>
-0x82 0x0082 # <control>
-0x83 0x0083 # <control>
-0x84 0x0084 # <control>
-0x85 0x0085 # <control>
-0x86 0x0086 # <control>
-0x87 0x0087 # <control>
-0x88 0x0088 # <control>
-0x89 0x0089 # <control>
-0x8A 0x008A # <control>
-0x8B 0x008B # <control>
-0x8C 0x008C # <control>
-0x8D 0x008D # <control>
-0x8E 0x008E # <control>
-0x8F 0x008F # <control>
-0x90 0x0090 # <control>
-0x91 0x0091 # <control>
-0x92 0x0092 # <control>
-0x93 0x0093 # <control>
-0x94 0x0094 # <control>
-0x95 0x0095 # <control>
-0x96 0x0096 # <control>
-0x97 0x0097 # <control>
-0x98 0x0098 # <control>
-0x99 0x0099 # <control>
-0x9A 0x009A # <control>
-0x9B 0x009B # <control>
-0x9C 0x009C # <control>
-0x9D 0x009D # <control>
-0x9E 0x009E # <control>
-0x9F 0x009F # <control>
-0xA0 0x00A0 # NO-BREAK SPACE
-0xA1 0x0104 # LATIN CAPITAL LETTER A WITH OGONEK
-0xA2 0x0105 # LATIN SMALL LETTER A WITH OGONEK
-0xA3 0x0141 # LATIN CAPITAL LETTER L WITH STROKE
-0xA4 0x20AC # EURO SIGN
-0xA5 0x201E # DOUBLE LOW-9 QUOTATION MARK
-0xA6 0x0160 # LATIN CAPITAL LETTER S WITH CARON
-0xA7 0x00A7 # SECTION SIGN
-0xA8 0x0161 # LATIN SMALL LETTER S WITH CARON
-0xA9 0x00A9 # COPYRIGHT SIGN
-0xAA 0x0218 # LATIN CAPITAL LETTER S WITH COMMA BELOW
-0xAB 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-0xAC 0x0179 # LATIN CAPITAL LETTER Z WITH ACUTE
-0xAD 0x00AD # SOFT HYPHEN
-0xAE 0x017A # LATIN SMALL LETTER Z WITH ACUTE
-0xAF 0x017B # LATIN CAPITAL LETTER Z WITH DOT ABOVE
-0xB0 0x00B0 # DEGREE SIGN
-0xB1 0x00B1 # PLUS-MINUS SIGN
-0xB2 0x010C # LATIN CAPITAL LETTER C WITH CARON
-0xB3 0x0142 # LATIN SMALL LETTER L WITH STROKE
-0xB4 0x017D # LATIN CAPITAL LETTER Z WITH CARON
-0xB5 0x201D # RIGHT DOUBLE QUOTATION MARK
-0xB6 0x00B6 # PILCROW SIGN
-0xB7 0x00B7 # MIDDLE DOT
-0xB8 0x017E # LATIN SMALL LETTER Z WITH CARON
-0xB9 0x010D # LATIN SMALL LETTER C WITH CARON
-0xBA 0x0219 # LATIN SMALL LETTER S WITH COMMA BELOW
-0xBB 0x00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-0xBC 0x0152 # LATIN CAPITAL LIGATURE OE
-0xBD 0x0153 # LATIN SMALL LIGATURE OE
-0xBE 0x0178 # LATIN CAPITAL LETTER Y WITH DIAERESIS
-0xBF 0x017C # LATIN SMALL LETTER Z WITH DOT ABOVE
-0xC0 0x00C0 # LATIN CAPITAL LETTER A WITH GRAVE
-0xC1 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE
-0xC2 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-0xC3 0x0102 # LATIN CAPITAL LETTER A WITH BREVE
-0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
-0xC5 0x0106 # LATIN CAPITAL LETTER C WITH ACUTE
-0xC6 0x00C6 # LATIN CAPITAL LETTER AE
-0xC7 0x00C7 # LATIN CAPITAL LETTER C WITH CEDILLA
-0xC8 0x00C8 # LATIN CAPITAL LETTER E WITH GRAVE
-0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE
-0xCA 0x00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-0xCB 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS
-0xCC 0x00CC # LATIN CAPITAL LETTER I WITH GRAVE
-0xCD 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE
-0xCE 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-0xCF 0x00CF # LATIN CAPITAL LETTER I WITH DIAERESIS
-0xD0 0x0110 # LATIN CAPITAL LETTER D WITH STROKE
-0xD1 0x0143 # LATIN CAPITAL LETTER N WITH ACUTE
-0xD2 0x00D2 # LATIN CAPITAL LETTER O WITH GRAVE
-0xD3 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE
-0xD4 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-0xD5 0x0150 # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
-0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
-0xD7 0x015A # LATIN CAPITAL LETTER S WITH ACUTE
-0xD8 0x0170 # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
-0xD9 0x00D9 # LATIN CAPITAL LETTER U WITH GRAVE
-0xDA 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE
-0xDB 0x00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
-0xDD 0x0118 # LATIN CAPITAL LETTER E WITH OGONEK
-0xDE 0x021A # LATIN CAPITAL LETTER T WITH COMMA BELOW
-0xDF 0x00DF # LATIN SMALL LETTER SHARP S
-0xE0 0x00E0 # LATIN SMALL LETTER A WITH GRAVE
-0xE1 0x00E1 # LATIN SMALL LETTER A WITH ACUTE
-0xE2 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX
-0xE3 0x0103 # LATIN SMALL LETTER A WITH BREVE
-0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS
-0xE5 0x0107 # LATIN SMALL LETTER C WITH ACUTE
-0xE6 0x00E6 # LATIN SMALL LETTER AE
-0xE7 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA
-0xE8 0x00E8 # LATIN SMALL LETTER E WITH GRAVE
-0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE
-0xEA 0x00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX
-0xEB 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS
-0xEC 0x00EC # LATIN SMALL LETTER I WITH GRAVE
-0xED 0x00ED # LATIN SMALL LETTER I WITH ACUTE
-0xEE 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX
-0xEF 0x00EF # LATIN SMALL LETTER I WITH DIAERESIS
-0xF0 0x0111 # LATIN SMALL LETTER D WITH STROKE
-0xF1 0x0144 # LATIN SMALL LETTER N WITH ACUTE
-0xF2 0x00F2 # LATIN SMALL LETTER O WITH GRAVE
-0xF3 0x00F3 # LATIN SMALL LETTER O WITH ACUTE
-0xF4 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX
-0xF5 0x0151 # LATIN SMALL LETTER O WITH DOUBLE ACUTE
-0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS
-0xF7 0x015B # LATIN SMALL LETTER S WITH ACUTE
-0xF8 0x0171 # LATIN SMALL LETTER U WITH DOUBLE ACUTE
-0xF9 0x00F9 # LATIN SMALL LETTER U WITH GRAVE
-0xFA 0x00FA # LATIN SMALL LETTER U WITH ACUTE
-0xFB 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX
-0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS
-0xFD 0x0119 # LATIN SMALL LETTER E WITH OGONEK
-0xFE 0x021B # LATIN SMALL LETTER T WITH COMMA BELOW
-0xFF 0x00FF # LATIN SMALL LETTER Y WITH DIAERESIS
diff --git a/program/lib/encoding/ISO-8859-2.map b/program/lib/encoding/ISO-8859-2.map
deleted file mode 100644
index e45df25eb..000000000
--- a/program/lib/encoding/ISO-8859-2.map
+++ /dev/null
@@ -1,303 +0,0 @@
-#
-# Name: ISO 8859-2:1999 to Unicode
-# Unicode version: 3.0
-# Table version: 1.0
-# Table format: Format A
-# Date: 1999 July 27
-# Authors: Ken Whistler <kenw@sybase.com>
-#
-# Copyright (c) 1991-1999 Unicode, Inc. All Rights reserved.
-#
-# This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
-# No claims are made as to fitness for any particular purpose. No
-# warranties of any kind are expressed or implied. The recipient
-# agrees to determine applicability of information provided. If this
-# file has been provided on optical media by Unicode, Inc., the sole
-# remedy for any claim will be exchange of defective media within 90
-# days of receipt.
-#
-# Unicode, Inc. hereby grants the right to freely use the information
-# supplied in this file in the creation of products supporting the
-# Unicode Standard, and to make copies of this file in any form for
-# internal or external distribution as long as this notice remains
-# attached.
-#
-# General notes:
-#
-# This table contains the data the Unicode Consortium has on how
-# ISO/IEC 8859-2:1999 characters map into Unicode.
-#
-# Format: Three tab-separated columns
-# Column #1 is the ISO/IEC 8859-2 code (in hex as 0xXX)
-# Column #2 is the Unicode (in hex as 0xXXXX)
-# Column #3 the Unicode name (follows a comment sign, '#')
-#
-# The entries are in ISO/IEC 8859-2 order.
-#
-# Version history
-# 1.0 version updates 0.1 version by adding mappings for all
-# control characters.
-#
-# Updated versions of this file may be found in:
-# <ftp://ftp.unicode.org/Public/MAPPINGS/>
-#
-# Any comments or problems, contact <errata@unicode.org>
-# Please note that <errata@unicode.org> is an archival address;
-# notices will be checked, but do not expect an immediate response.
-#
-0x00 0x0000 # NULL
-0x01 0x0001 # START OF HEADING
-0x02 0x0002 # START OF TEXT
-0x03 0x0003 # END OF TEXT
-0x04 0x0004 # END OF TRANSMISSION
-0x05 0x0005 # ENQUIRY
-0x06 0x0006 # ACKNOWLEDGE
-0x07 0x0007 # BELL
-0x08 0x0008 # BACKSPACE
-0x09 0x0009 # HORIZONTAL TABULATION
-0x0A 0x000A # LINE FEED
-0x0B 0x000B # VERTICAL TABULATION
-0x0C 0x000C # FORM FEED
-0x0D 0x000D # CARRIAGE RETURN
-0x0E 0x000E # SHIFT OUT
-0x0F 0x000F # SHIFT IN
-0x10 0x0010 # DATA LINK ESCAPE
-0x11 0x0011 # DEVICE CONTROL ONE
-0x12 0x0012 # DEVICE CONTROL TWO
-0x13 0x0013 # DEVICE CONTROL THREE
-0x14 0x0014 # DEVICE CONTROL FOUR
-0x15 0x0015 # NEGATIVE ACKNOWLEDGE
-0x16 0x0016 # SYNCHRONOUS IDLE
-0x17 0x0017 # END OF TRANSMISSION BLOCK
-0x18 0x0018 # CANCEL
-0x19 0x0019 # END OF MEDIUM
-0x1A 0x001A # SUBSTITUTE
-0x1B 0x001B # ESCAPE
-0x1C 0x001C # FILE SEPARATOR
-0x1D 0x001D # GROUP SEPARATOR
-0x1E 0x001E # RECORD SEPARATOR
-0x1F 0x001F # UNIT SEPARATOR
-0x20 0x0020 # SPACE
-0x21 0x0021 # EXCLAMATION MARK
-0x22 0x0022 # QUOTATION MARK
-0x23 0x0023 # NUMBER SIGN
-0x24 0x0024 # DOLLAR SIGN
-0x25 0x0025 # PERCENT SIGN
-0x26 0x0026 # AMPERSAND
-0x27 0x0027 # APOSTROPHE
-0x28 0x0028 # LEFT PARENTHESIS
-0x29 0x0029 # RIGHT PARENTHESIS
-0x2A 0x002A # ASTERISK
-0x2B 0x002B # PLUS SIGN
-0x2C 0x002C # COMMA
-0x2D 0x002D # HYPHEN-MINUS
-0x2E 0x002E # FULL STOP
-0x2F 0x002F # SOLIDUS
-0x30 0x0030 # DIGIT ZERO
-0x31 0x0031 # DIGIT ONE
-0x32 0x0032 # DIGIT TWO
-0x33 0x0033 # DIGIT THREE
-0x34 0x0034 # DIGIT FOUR
-0x35 0x0035 # DIGIT FIVE
-0x36 0x0036 # DIGIT SIX
-0x37 0x0037 # DIGIT SEVEN
-0x38 0x0038 # DIGIT EIGHT
-0x39 0x0039 # DIGIT NINE
-0x3A 0x003A # COLON
-0x3B 0x003B # SEMICOLON
-0x3C 0x003C # LESS-THAN SIGN
-0x3D 0x003D # EQUALS SIGN
-0x3E 0x003E # GREATER-THAN SIGN
-0x3F 0x003F # QUESTION MARK
-0x40 0x0040 # COMMERCIAL AT
-0x41 0x0041 # LATIN CAPITAL LETTER A
-0x42 0x0042 # LATIN CAPITAL LETTER B
-0x43 0x0043 # LATIN CAPITAL LETTER C
-0x44 0x0044 # LATIN CAPITAL LETTER D
-0x45 0x0045 # LATIN CAPITAL LETTER E
-0x46 0x0046 # LATIN CAPITAL LETTER F
-0x47 0x0047 # LATIN CAPITAL LETTER G
-0x48 0x0048 # LATIN CAPITAL LETTER H
-0x49 0x0049 # LATIN CAPITAL LETTER I
-0x4A 0x004A # LATIN CAPITAL LETTER J
-0x4B 0x004B # LATIN CAPITAL LETTER K
-0x4C 0x004C # LATIN CAPITAL LETTER L
-0x4D 0x004D # LATIN CAPITAL LETTER M
-0x4E 0x004E # LATIN CAPITAL LETTER N
-0x4F 0x004F # LATIN CAPITAL LETTER O
-0x50 0x0050 # LATIN CAPITAL LETTER P
-0x51 0x0051 # LATIN CAPITAL LETTER Q
-0x52 0x0052 # LATIN CAPITAL LETTER R
-0x53 0x0053 # LATIN CAPITAL LETTER S
-0x54 0x0054 # LATIN CAPITAL LETTER T
-0x55 0x0055 # LATIN CAPITAL LETTER U
-0x56 0x0056 # LATIN CAPITAL LETTER V
-0x57 0x0057 # LATIN CAPITAL LETTER W
-0x58 0x0058 # LATIN CAPITAL LETTER X
-0x59 0x0059 # LATIN CAPITAL LETTER Y
-0x5A 0x005A # LATIN CAPITAL LETTER Z
-0x5B 0x005B # LEFT SQUARE BRACKET
-0x5C 0x005C # REVERSE SOLIDUS
-0x5D 0x005D # RIGHT SQUARE BRACKET
-0x5E 0x005E # CIRCUMFLEX ACCENT
-0x5F 0x005F # LOW LINE
-0x60 0x0060 # GRAVE ACCENT
-0x61 0x0061 # LATIN SMALL LETTER A
-0x62 0x0062 # LATIN SMALL LETTER B
-0x63 0x0063 # LATIN SMALL LETTER C
-0x64 0x0064 # LATIN SMALL LETTER D
-0x65 0x0065 # LATIN SMALL LETTER E
-0x66 0x0066 # LATIN SMALL LETTER F
-0x67 0x0067 # LATIN SMALL LETTER G
-0x68 0x0068 # LATIN SMALL LETTER H
-0x69 0x0069 # LATIN SMALL LETTER I
-0x6A 0x006A # LATIN SMALL LETTER J
-0x6B 0x006B # LATIN SMALL LETTER K
-0x6C 0x006C # LATIN SMALL LETTER L
-0x6D 0x006D # LATIN SMALL LETTER M
-0x6E 0x006E # LATIN SMALL LETTER N
-0x6F 0x006F # LATIN SMALL LETTER O
-0x70 0x0070 # LATIN SMALL LETTER P
-0x71 0x0071 # LATIN SMALL LETTER Q
-0x72 0x0072 # LATIN SMALL LETTER R
-0x73 0x0073 # LATIN SMALL LETTER S
-0x74 0x0074 # LATIN SMALL LETTER T
-0x75 0x0075 # LATIN SMALL LETTER U
-0x76 0x0076 # LATIN SMALL LETTER V
-0x77 0x0077 # LATIN SMALL LETTER W
-0x78 0x0078 # LATIN SMALL LETTER X
-0x79 0x0079 # LATIN SMALL LETTER Y
-0x7A 0x007A # LATIN SMALL LETTER Z
-0x7B 0x007B # LEFT CURLY BRACKET
-0x7C 0x007C # VERTICAL LINE
-0x7D 0x007D # RIGHT CURLY BRACKET
-0x7E 0x007E # TILDE
-0x7F 0x007F # DELETE
-0x80 0x0080 # <control>
-0x81 0x0081 # <control>
-0x82 0x0082 # <control>
-0x83 0x0083 # <control>
-0x84 0x0084 # <control>
-0x85 0x0085 # <control>
-0x86 0x0086 # <control>
-0x87 0x0087 # <control>
-0x88 0x0088 # <control>
-0x89 0x0089 # <control>
-0x8A 0x008A # <control>
-0x8B 0x008B # <control>
-0x8C 0x008C # <control>
-0x8D 0x008D # <control>
-0x8E 0x008E # <control>
-0x8F 0x008F # <control>
-0x90 0x0090 # <control>
-0x91 0x0091 # <control>
-0x92 0x0092 # <control>
-0x93 0x0093 # <control>
-0x94 0x0094 # <control>
-0x95 0x0095 # <control>
-0x96 0x0096 # <control>
-0x97 0x0097 # <control>
-0x98 0x0098 # <control>
-0x99 0x0099 # <control>
-0x9A 0x009A # <control>
-0x9B 0x009B # <control>
-0x9C 0x009C # <control>
-0x9D 0x009D # <control>
-0x9E 0x009E # <control>
-0x9F 0x009F # <control>
-0xA0 0x00A0 # NO-BREAK SPACE
-0xA1 0x0104 # LATIN CAPITAL LETTER A WITH OGONEK
-0xA2 0x02D8 # BREVE
-0xA3 0x0141 # LATIN CAPITAL LETTER L WITH STROKE
-0xA4 0x00A4 # CURRENCY SIGN
-0xA5 0x013D # LATIN CAPITAL LETTER L WITH CARON
-0xA6 0x015A # LATIN CAPITAL LETTER S WITH ACUTE
-0xA7 0x00A7 # SECTION SIGN
-0xA8 0x00A8 # DIAERESIS
-0xA9 0x0160 # LATIN CAPITAL LETTER S WITH CARON
-0xAA 0x015E # LATIN CAPITAL LETTER S WITH CEDILLA
-0xAB 0x0164 # LATIN CAPITAL LETTER T WITH CARON
-0xAC 0x0179 # LATIN CAPITAL LETTER Z WITH ACUTE
-0xAD 0x00AD # SOFT HYPHEN
-0xAE 0x017D # LATIN CAPITAL LETTER Z WITH CARON
-0xAF 0x017B # LATIN CAPITAL LETTER Z WITH DOT ABOVE
-0xB0 0x00B0 # DEGREE SIGN
-0xB1 0x0105 # LATIN SMALL LETTER A WITH OGONEK
-0xB2 0x02DB # OGONEK
-0xB3 0x0142 # LATIN SMALL LETTER L WITH STROKE
-0xB4 0x00B4 # ACUTE ACCENT
-0xB5 0x013E # LATIN SMALL LETTER L WITH CARON
-0xB6 0x015B # LATIN SMALL LETTER S WITH ACUTE
-0xB7 0x02C7 # CARON
-0xB8 0x00B8 # CEDILLA
-0xB9 0x0161 # LATIN SMALL LETTER S WITH CARON
-0xBA 0x015F # LATIN SMALL LETTER S WITH CEDILLA
-0xBB 0x0165 # LATIN SMALL LETTER T WITH CARON
-0xBC 0x017A # LATIN SMALL LETTER Z WITH ACUTE
-0xBD 0x02DD # DOUBLE ACUTE ACCENT
-0xBE 0x017E # LATIN SMALL LETTER Z WITH CARON
-0xBF 0x017C # LATIN SMALL LETTER Z WITH DOT ABOVE
-0xC0 0x0154 # LATIN CAPITAL LETTER R WITH ACUTE
-0xC1 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE
-0xC2 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-0xC3 0x0102 # LATIN CAPITAL LETTER A WITH BREVE
-0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
-0xC5 0x0139 # LATIN CAPITAL LETTER L WITH ACUTE
-0xC6 0x0106 # LATIN CAPITAL LETTER C WITH ACUTE
-0xC7 0x00C7 # LATIN CAPITAL LETTER C WITH CEDILLA
-0xC8 0x010C # LATIN CAPITAL LETTER C WITH CARON
-0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE
-0xCA 0x0118 # LATIN CAPITAL LETTER E WITH OGONEK
-0xCB 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS
-0xCC 0x011A # LATIN CAPITAL LETTER E WITH CARON
-0xCD 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE
-0xCE 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-0xCF 0x010E # LATIN CAPITAL LETTER D WITH CARON
-0xD0 0x0110 # LATIN CAPITAL LETTER D WITH STROKE
-0xD1 0x0143 # LATIN CAPITAL LETTER N WITH ACUTE
-0xD2 0x0147 # LATIN CAPITAL LETTER N WITH CARON
-0xD3 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE
-0xD4 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-0xD5 0x0150 # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
-0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
-0xD7 0x00D7 # MULTIPLICATION SIGN
-0xD8 0x0158 # LATIN CAPITAL LETTER R WITH CARON
-0xD9 0x016E # LATIN CAPITAL LETTER U WITH RING ABOVE
-0xDA 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE
-0xDB 0x0170 # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
-0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
-0xDD 0x00DD # LATIN CAPITAL LETTER Y WITH ACUTE
-0xDE 0x0162 # LATIN CAPITAL LETTER T WITH CEDILLA
-0xDF 0x00DF # LATIN SMALL LETTER SHARP S
-0xE0 0x0155 # LATIN SMALL LETTER R WITH ACUTE
-0xE1 0x00E1 # LATIN SMALL LETTER A WITH ACUTE
-0xE2 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX
-0xE3 0x0103 # LATIN SMALL LETTER A WITH BREVE
-0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS
-0xE5 0x013A # LATIN SMALL LETTER L WITH ACUTE
-0xE6 0x0107 # LATIN SMALL LETTER C WITH ACUTE
-0xE7 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA
-0xE8 0x010D # LATIN SMALL LETTER C WITH CARON
-0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE
-0xEA 0x0119 # LATIN SMALL LETTER E WITH OGONEK
-0xEB 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS
-0xEC 0x011B # LATIN SMALL LETTER E WITH CARON
-0xED 0x00ED # LATIN SMALL LETTER I WITH ACUTE
-0xEE 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX
-0xEF 0x010F # LATIN SMALL LETTER D WITH CARON
-0xF0 0x0111 # LATIN SMALL LETTER D WITH STROKE
-0xF1 0x0144 # LATIN SMALL LETTER N WITH ACUTE
-0xF2 0x0148 # LATIN SMALL LETTER N WITH CARON
-0xF3 0x00F3 # LATIN SMALL LETTER O WITH ACUTE
-0xF4 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX
-0xF5 0x0151 # LATIN SMALL LETTER O WITH DOUBLE ACUTE
-0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS
-0xF7 0x00F7 # DIVISION SIGN
-0xF8 0x0159 # LATIN SMALL LETTER R WITH CARON
-0xF9 0x016F # LATIN SMALL LETTER U WITH RING ABOVE
-0xFA 0x00FA # LATIN SMALL LETTER U WITH ACUTE
-0xFB 0x0171 # LATIN SMALL LETTER U WITH DOUBLE ACUTE
-0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS
-0xFD 0x00FD # LATIN SMALL LETTER Y WITH ACUTE
-0xFE 0x0163 # LATIN SMALL LETTER T WITH CEDILLA
-0xFF 0x02D9 # DOT ABOVE
diff --git a/program/lib/encoding/ISO-8859-3.map b/program/lib/encoding/ISO-8859-3.map
deleted file mode 100644
index 9b6ac69dd..000000000
--- a/program/lib/encoding/ISO-8859-3.map
+++ /dev/null
@@ -1,296 +0,0 @@
-#
-# Name: ISO/IEC 8859-3:1999 to Unicode
-# Unicode version: 3.0
-# Table version: 1.0
-# Table format: Format A
-# Date: 1999 July 27
-# Authors: Ken Whistler <kenw@sybase.com>
-#
-# Copyright (c) 1991-1999 Unicode, Inc. All Rights reserved.
-#
-# This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
-# No claims are made as to fitness for any particular purpose. No
-# warranties of any kind are expressed or implied. The recipient
-# agrees to determine applicability of information provided. If this
-# file has been provided on optical media by Unicode, Inc., the sole
-# remedy for any claim will be exchange of defective media within 90
-# days of receipt.
-#
-# Unicode, Inc. hereby grants the right to freely use the information
-# supplied in this file in the creation of products supporting the
-# Unicode Standard, and to make copies of this file in any form for
-# internal or external distribution as long as this notice remains
-# attached.
-#
-# General notes:
-#
-# This table contains the data the Unicode Consortium has on how
-# ISO/IEC 8859-3:1999 characters map into Unicode.
-#
-# Format: Three tab-separated columns
-# Column #1 is the ISO/IEC 8859-3 code (in hex as 0xXX)
-# Column #2 is the Unicode (in hex as 0xXXXX)
-# Column #3 the Unicode name (follows a comment sign, '#')
-#
-# The entries are in ISO/IEC 8859-3 order.
-#
-# Version history
-# 1.0 version updates 0.1 version by adding mappings for all
-# control characters.
-#
-# Updated versions of this file may be found in:
-# <ftp://ftp.unicode.org/Public/MAPPINGS/>
-#
-# Any comments or problems, contact <errata@unicode.org>
-# Please note that <errata@unicode.org> is an archival address;
-# notices will be checked, but do not expect an immediate response.
-#
-0x00 0x0000 # NULL
-0x01 0x0001 # START OF HEADING
-0x02 0x0002 # START OF TEXT
-0x03 0x0003 # END OF TEXT
-0x04 0x0004 # END OF TRANSMISSION
-0x05 0x0005 # ENQUIRY
-0x06 0x0006 # ACKNOWLEDGE
-0x07 0x0007 # BELL
-0x08 0x0008 # BACKSPACE
-0x09 0x0009 # HORIZONTAL TABULATION
-0x0A 0x000A # LINE FEED
-0x0B 0x000B # VERTICAL TABULATION
-0x0C 0x000C # FORM FEED
-0x0D 0x000D # CARRIAGE RETURN
-0x0E 0x000E # SHIFT OUT
-0x0F 0x000F # SHIFT IN
-0x10 0x0010 # DATA LINK ESCAPE
-0x11 0x0011 # DEVICE CONTROL ONE
-0x12 0x0012 # DEVICE CONTROL TWO
-0x13 0x0013 # DEVICE CONTROL THREE
-0x14 0x0014 # DEVICE CONTROL FOUR
-0x15 0x0015 # NEGATIVE ACKNOWLEDGE
-0x16 0x0016 # SYNCHRONOUS IDLE
-0x17 0x0017 # END OF TRANSMISSION BLOCK
-0x18 0x0018 # CANCEL
-0x19 0x0019 # END OF MEDIUM
-0x1A 0x001A # SUBSTITUTE
-0x1B 0x001B # ESCAPE
-0x1C 0x001C # FILE SEPARATOR
-0x1D 0x001D # GROUP SEPARATOR
-0x1E 0x001E # RECORD SEPARATOR
-0x1F 0x001F # UNIT SEPARATOR
-0x20 0x0020 # SPACE
-0x21 0x0021 # EXCLAMATION MARK
-0x22 0x0022 # QUOTATION MARK
-0x23 0x0023 # NUMBER SIGN
-0x24 0x0024 # DOLLAR SIGN
-0x25 0x0025 # PERCENT SIGN
-0x26 0x0026 # AMPERSAND
-0x27 0x0027 # APOSTROPHE
-0x28 0x0028 # LEFT PARENTHESIS
-0x29 0x0029 # RIGHT PARENTHESIS
-0x2A 0x002A # ASTERISK
-0x2B 0x002B # PLUS SIGN
-0x2C 0x002C # COMMA
-0x2D 0x002D # HYPHEN-MINUS
-0x2E 0x002E # FULL STOP
-0x2F 0x002F # SOLIDUS
-0x30 0x0030 # DIGIT ZERO
-0x31 0x0031 # DIGIT ONE
-0x32 0x0032 # DIGIT TWO
-0x33 0x0033 # DIGIT THREE
-0x34 0x0034 # DIGIT FOUR
-0x35 0x0035 # DIGIT FIVE
-0x36 0x0036 # DIGIT SIX
-0x37 0x0037 # DIGIT SEVEN
-0x38 0x0038 # DIGIT EIGHT
-0x39 0x0039 # DIGIT NINE
-0x3A 0x003A # COLON
-0x3B 0x003B # SEMICOLON
-0x3C 0x003C # LESS-THAN SIGN
-0x3D 0x003D # EQUALS SIGN
-0x3E 0x003E # GREATER-THAN SIGN
-0x3F 0x003F # QUESTION MARK
-0x40 0x0040 # COMMERCIAL AT
-0x41 0x0041 # LATIN CAPITAL LETTER A
-0x42 0x0042 # LATIN CAPITAL LETTER B
-0x43 0x0043 # LATIN CAPITAL LETTER C
-0x44 0x0044 # LATIN CAPITAL LETTER D
-0x45 0x0045 # LATIN CAPITAL LETTER E
-0x46 0x0046 # LATIN CAPITAL LETTER F
-0x47 0x0047 # LATIN CAPITAL LETTER G
-0x48 0x0048 # LATIN CAPITAL LETTER H
-0x49 0x0049 # LATIN CAPITAL LETTER I
-0x4A 0x004A # LATIN CAPITAL LETTER J
-0x4B 0x004B # LATIN CAPITAL LETTER K
-0x4C 0x004C # LATIN CAPITAL LETTER L
-0x4D 0x004D # LATIN CAPITAL LETTER M
-0x4E 0x004E # LATIN CAPITAL LETTER N
-0x4F 0x004F # LATIN CAPITAL LETTER O
-0x50 0x0050 # LATIN CAPITAL LETTER P
-0x51 0x0051 # LATIN CAPITAL LETTER Q
-0x52 0x0052 # LATIN CAPITAL LETTER R
-0x53 0x0053 # LATIN CAPITAL LETTER S
-0x54 0x0054 # LATIN CAPITAL LETTER T
-0x55 0x0055 # LATIN CAPITAL LETTER U
-0x56 0x0056 # LATIN CAPITAL LETTER V
-0x57 0x0057 # LATIN CAPITAL LETTER W
-0x58 0x0058 # LATIN CAPITAL LETTER X
-0x59 0x0059 # LATIN CAPITAL LETTER Y
-0x5A 0x005A # LATIN CAPITAL LETTER Z
-0x5B 0x005B # LEFT SQUARE BRACKET
-0x5C 0x005C # REVERSE SOLIDUS
-0x5D 0x005D # RIGHT SQUARE BRACKET
-0x5E 0x005E # CIRCUMFLEX ACCENT
-0x5F 0x005F # LOW LINE
-0x60 0x0060 # GRAVE ACCENT
-0x61 0x0061 # LATIN SMALL LETTER A
-0x62 0x0062 # LATIN SMALL LETTER B
-0x63 0x0063 # LATIN SMALL LETTER C
-0x64 0x0064 # LATIN SMALL LETTER D
-0x65 0x0065 # LATIN SMALL LETTER E
-0x66 0x0066 # LATIN SMALL LETTER F
-0x67 0x0067 # LATIN SMALL LETTER G
-0x68 0x0068 # LATIN SMALL LETTER H
-0x69 0x0069 # LATIN SMALL LETTER I
-0x6A 0x006A # LATIN SMALL LETTER J
-0x6B 0x006B # LATIN SMALL LETTER K
-0x6C 0x006C # LATIN SMALL LETTER L
-0x6D 0x006D # LATIN SMALL LETTER M
-0x6E 0x006E # LATIN SMALL LETTER N
-0x6F 0x006F # LATIN SMALL LETTER O
-0x70 0x0070 # LATIN SMALL LETTER P
-0x71 0x0071 # LATIN SMALL LETTER Q
-0x72 0x0072 # LATIN SMALL LETTER R
-0x73 0x0073 # LATIN SMALL LETTER S
-0x74 0x0074 # LATIN SMALL LETTER T
-0x75 0x0075 # LATIN SMALL LETTER U
-0x76 0x0076 # LATIN SMALL LETTER V
-0x77 0x0077 # LATIN SMALL LETTER W
-0x78 0x0078 # LATIN SMALL LETTER X
-0x79 0x0079 # LATIN SMALL LETTER Y
-0x7A 0x007A # LATIN SMALL LETTER Z
-0x7B 0x007B # LEFT CURLY BRACKET
-0x7C 0x007C # VERTICAL LINE
-0x7D 0x007D # RIGHT CURLY BRACKET
-0x7E 0x007E # TILDE
-0x7F 0x007F # DELETE
-0x80 0x0080 # <control>
-0x81 0x0081 # <control>
-0x82 0x0082 # <control>
-0x83 0x0083 # <control>
-0x84 0x0084 # <control>
-0x85 0x0085 # <control>
-0x86 0x0086 # <control>
-0x87 0x0087 # <control>
-0x88 0x0088 # <control>
-0x89 0x0089 # <control>
-0x8A 0x008A # <control>
-0x8B 0x008B # <control>
-0x8C 0x008C # <control>
-0x8D 0x008D # <control>
-0x8E 0x008E # <control>
-0x8F 0x008F # <control>
-0x90 0x0090 # <control>
-0x91 0x0091 # <control>
-0x92 0x0092 # <control>
-0x93 0x0093 # <control>
-0x94 0x0094 # <control>
-0x95 0x0095 # <control>
-0x96 0x0096 # <control>
-0x97 0x0097 # <control>
-0x98 0x0098 # <control>
-0x99 0x0099 # <control>
-0x9A 0x009A # <control>
-0x9B 0x009B # <control>
-0x9C 0x009C # <control>
-0x9D 0x009D # <control>
-0x9E 0x009E # <control>
-0x9F 0x009F # <control>
-0xA0 0x00A0 # NO-BREAK SPACE
-0xA1 0x0126 # LATIN CAPITAL LETTER H WITH STROKE
-0xA2 0x02D8 # BREVE
-0xA3 0x00A3 # POUND SIGN
-0xA4 0x00A4 # CURRENCY SIGN
-0xA6 0x0124 # LATIN CAPITAL LETTER H WITH CIRCUMFLEX
-0xA7 0x00A7 # SECTION SIGN
-0xA8 0x00A8 # DIAERESIS
-0xA9 0x0130 # LATIN CAPITAL LETTER I WITH DOT ABOVE
-0xAA 0x015E # LATIN CAPITAL LETTER S WITH CEDILLA
-0xAB 0x011E # LATIN CAPITAL LETTER G WITH BREVE
-0xAC 0x0134 # LATIN CAPITAL LETTER J WITH CIRCUMFLEX
-0xAD 0x00AD # SOFT HYPHEN
-0xAF 0x017B # LATIN CAPITAL LETTER Z WITH DOT ABOVE
-0xB0 0x00B0 # DEGREE SIGN
-0xB1 0x0127 # LATIN SMALL LETTER H WITH STROKE
-0xB2 0x00B2 # SUPERSCRIPT TWO
-0xB3 0x00B3 # SUPERSCRIPT THREE
-0xB4 0x00B4 # ACUTE ACCENT
-0xB5 0x00B5 # MICRO SIGN
-0xB6 0x0125 # LATIN SMALL LETTER H WITH CIRCUMFLEX
-0xB7 0x00B7 # MIDDLE DOT
-0xB8 0x00B8 # CEDILLA
-0xB9 0x0131 # LATIN SMALL LETTER DOTLESS I
-0xBA 0x015F # LATIN SMALL LETTER S WITH CEDILLA
-0xBB 0x011F # LATIN SMALL LETTER G WITH BREVE
-0xBC 0x0135 # LATIN SMALL LETTER J WITH CIRCUMFLEX
-0xBD 0x00BD # VULGAR FRACTION ONE HALF
-0xBF 0x017C # LATIN SMALL LETTER Z WITH DOT ABOVE
-0xC0 0x00C0 # LATIN CAPITAL LETTER A WITH GRAVE
-0xC1 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE
-0xC2 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
-0xC5 0x010A # LATIN CAPITAL LETTER C WITH DOT ABOVE
-0xC6 0x0108 # LATIN CAPITAL LETTER C WITH CIRCUMFLEX
-0xC7 0x00C7 # LATIN CAPITAL LETTER C WITH CEDILLA
-0xC8 0x00C8 # LATIN CAPITAL LETTER E WITH GRAVE
-0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE
-0xCA 0x00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-0xCB 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS
-0xCC 0x00CC # LATIN CAPITAL LETTER I WITH GRAVE
-0xCD 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE
-0xCE 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-0xCF 0x00CF # LATIN CAPITAL LETTER I WITH DIAERESIS
-0xD1 0x00D1 # LATIN CAPITAL LETTER N WITH TILDE
-0xD2 0x00D2 # LATIN CAPITAL LETTER O WITH GRAVE
-0xD3 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE
-0xD4 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-0xD5 0x0120 # LATIN CAPITAL LETTER G WITH DOT ABOVE
-0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
-0xD7 0x00D7 # MULTIPLICATION SIGN
-0xD8 0x011C # LATIN CAPITAL LETTER G WITH CIRCUMFLEX
-0xD9 0x00D9 # LATIN CAPITAL LETTER U WITH GRAVE
-0xDA 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE
-0xDB 0x00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
-0xDD 0x016C # LATIN CAPITAL LETTER U WITH BREVE
-0xDE 0x015C # LATIN CAPITAL LETTER S WITH CIRCUMFLEX
-0xDF 0x00DF # LATIN SMALL LETTER SHARP S
-0xE0 0x00E0 # LATIN SMALL LETTER A WITH GRAVE
-0xE1 0x00E1 # LATIN SMALL LETTER A WITH ACUTE
-0xE2 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX
-0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS
-0xE5 0x010B # LATIN SMALL LETTER C WITH DOT ABOVE
-0xE6 0x0109 # LATIN SMALL LETTER C WITH CIRCUMFLEX
-0xE7 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA
-0xE8 0x00E8 # LATIN SMALL LETTER E WITH GRAVE
-0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE
-0xEA 0x00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX
-0xEB 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS
-0xEC 0x00EC # LATIN SMALL LETTER I WITH GRAVE
-0xED 0x00ED # LATIN SMALL LETTER I WITH ACUTE
-0xEE 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX
-0xEF 0x00EF # LATIN SMALL LETTER I WITH DIAERESIS
-0xF1 0x00F1 # LATIN SMALL LETTER N WITH TILDE
-0xF2 0x00F2 # LATIN SMALL LETTER O WITH GRAVE
-0xF3 0x00F3 # LATIN SMALL LETTER O WITH ACUTE
-0xF4 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX
-0xF5 0x0121 # LATIN SMALL LETTER G WITH DOT ABOVE
-0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS
-0xF7 0x00F7 # DIVISION SIGN
-0xF8 0x011D # LATIN SMALL LETTER G WITH CIRCUMFLEX
-0xF9 0x00F9 # LATIN SMALL LETTER U WITH GRAVE
-0xFA 0x00FA # LATIN SMALL LETTER U WITH ACUTE
-0xFB 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX
-0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS
-0xFD 0x016D # LATIN SMALL LETTER U WITH BREVE
-0xFE 0x015D # LATIN SMALL LETTER S WITH CIRCUMFLEX
-0xFF 0x02D9 # DOT ABOVE
diff --git a/program/lib/encoding/ISO-8859-4.map b/program/lib/encoding/ISO-8859-4.map
deleted file mode 100644
index 662e698ab..000000000
--- a/program/lib/encoding/ISO-8859-4.map
+++ /dev/null
@@ -1,303 +0,0 @@
-#
-# Name: ISO/IEC 8859-4:1998 to Unicode
-# Unicode version: 3.0
-# Table version: 1.0
-# Table format: Format A
-# Date: 1999 July 27
-# Authors: Ken Whistler <kenw@sybase.com>
-#
-# Copyright (c) 1991-1999 Unicode, Inc. All Rights reserved.
-#
-# This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
-# No claims are made as to fitness for any particular purpose. No
-# warranties of any kind are expressed or implied. The recipient
-# agrees to determine applicability of information provided. If this
-# file has been provided on optical media by Unicode, Inc., the sole
-# remedy for any claim will be exchange of defective media within 90
-# days of receipt.
-#
-# Unicode, Inc. hereby grants the right to freely use the information
-# supplied in this file in the creation of products supporting the
-# Unicode Standard, and to make copies of this file in any form for
-# internal or external distribution as long as this notice remains
-# attached.
-#
-# General notes:
-#
-# This table contains the data the Unicode Consortium has on how
-# ISO/IEC 8859-4:1998 characters map into Unicode.
-#
-# Format: Three tab-separated columns
-# Column #1 is the ISO/IEC 8859-4 code (in hex as 0xXX)
-# Column #2 is the Unicode (in hex as 0xXXXX)
-# Column #3 the Unicode name (follows a comment sign, '#')
-#
-# The entries are in ISO/IEC 8859-4 order.
-#
-# Version history
-# 1.0 version updates 0.1 version by adding mappings for all
-# control characters.
-#
-# Updated versions of this file may be found in:
-# <ftp://ftp.unicode.org/Public/MAPPINGS/>
-#
-# Any comments or problems, contact <errata@unicode.org>
-# Please note that <errata@unicode.org> is an archival address;
-# notices will be checked, but do not expect an immediate response.
-#
-0x00 0x0000 # NULL
-0x01 0x0001 # START OF HEADING
-0x02 0x0002 # START OF TEXT
-0x03 0x0003 # END OF TEXT
-0x04 0x0004 # END OF TRANSMISSION
-0x05 0x0005 # ENQUIRY
-0x06 0x0006 # ACKNOWLEDGE
-0x07 0x0007 # BELL
-0x08 0x0008 # BACKSPACE
-0x09 0x0009 # HORIZONTAL TABULATION
-0x0A 0x000A # LINE FEED
-0x0B 0x000B # VERTICAL TABULATION
-0x0C 0x000C # FORM FEED
-0x0D 0x000D # CARRIAGE RETURN
-0x0E 0x000E # SHIFT OUT
-0x0F 0x000F # SHIFT IN
-0x10 0x0010 # DATA LINK ESCAPE
-0x11 0x0011 # DEVICE CONTROL ONE
-0x12 0x0012 # DEVICE CONTROL TWO
-0x13 0x0013 # DEVICE CONTROL THREE
-0x14 0x0014 # DEVICE CONTROL FOUR
-0x15 0x0015 # NEGATIVE ACKNOWLEDGE
-0x16 0x0016 # SYNCHRONOUS IDLE
-0x17 0x0017 # END OF TRANSMISSION BLOCK
-0x18 0x0018 # CANCEL
-0x19 0x0019 # END OF MEDIUM
-0x1A 0x001A # SUBSTITUTE
-0x1B 0x001B # ESCAPE
-0x1C 0x001C # FILE SEPARATOR
-0x1D 0x001D # GROUP SEPARATOR
-0x1E 0x001E # RECORD SEPARATOR
-0x1F 0x001F # UNIT SEPARATOR
-0x20 0x0020 # SPACE
-0x21 0x0021 # EXCLAMATION MARK
-0x22 0x0022 # QUOTATION MARK
-0x23 0x0023 # NUMBER SIGN
-0x24 0x0024 # DOLLAR SIGN
-0x25 0x0025 # PERCENT SIGN
-0x26 0x0026 # AMPERSAND
-0x27 0x0027 # APOSTROPHE
-0x28 0x0028 # LEFT PARENTHESIS
-0x29 0x0029 # RIGHT PARENTHESIS
-0x2A 0x002A # ASTERISK
-0x2B 0x002B # PLUS SIGN
-0x2C 0x002C # COMMA
-0x2D 0x002D # HYPHEN-MINUS
-0x2E 0x002E # FULL STOP
-0x2F 0x002F # SOLIDUS
-0x30 0x0030 # DIGIT ZERO
-0x31 0x0031 # DIGIT ONE
-0x32 0x0032 # DIGIT TWO
-0x33 0x0033 # DIGIT THREE
-0x34 0x0034 # DIGIT FOUR
-0x35 0x0035 # DIGIT FIVE
-0x36 0x0036 # DIGIT SIX
-0x37 0x0037 # DIGIT SEVEN
-0x38 0x0038 # DIGIT EIGHT
-0x39 0x0039 # DIGIT NINE
-0x3A 0x003A # COLON
-0x3B 0x003B # SEMICOLON
-0x3C 0x003C # LESS-THAN SIGN
-0x3D 0x003D # EQUALS SIGN
-0x3E 0x003E # GREATER-THAN SIGN
-0x3F 0x003F # QUESTION MARK
-0x40 0x0040 # COMMERCIAL AT
-0x41 0x0041 # LATIN CAPITAL LETTER A
-0x42 0x0042 # LATIN CAPITAL LETTER B
-0x43 0x0043 # LATIN CAPITAL LETTER C
-0x44 0x0044 # LATIN CAPITAL LETTER D
-0x45 0x0045 # LATIN CAPITAL LETTER E
-0x46 0x0046 # LATIN CAPITAL LETTER F
-0x47 0x0047 # LATIN CAPITAL LETTER G
-0x48 0x0048 # LATIN CAPITAL LETTER H
-0x49 0x0049 # LATIN CAPITAL LETTER I
-0x4A 0x004A # LATIN CAPITAL LETTER J
-0x4B 0x004B # LATIN CAPITAL LETTER K
-0x4C 0x004C # LATIN CAPITAL LETTER L
-0x4D 0x004D # LATIN CAPITAL LETTER M
-0x4E 0x004E # LATIN CAPITAL LETTER N
-0x4F 0x004F # LATIN CAPITAL LETTER O
-0x50 0x0050 # LATIN CAPITAL LETTER P
-0x51 0x0051 # LATIN CAPITAL LETTER Q
-0x52 0x0052 # LATIN CAPITAL LETTER R
-0x53 0x0053 # LATIN CAPITAL LETTER S
-0x54 0x0054 # LATIN CAPITAL LETTER T
-0x55 0x0055 # LATIN CAPITAL LETTER U
-0x56 0x0056 # LATIN CAPITAL LETTER V
-0x57 0x0057 # LATIN CAPITAL LETTER W
-0x58 0x0058 # LATIN CAPITAL LETTER X
-0x59 0x0059 # LATIN CAPITAL LETTER Y
-0x5A 0x005A # LATIN CAPITAL LETTER Z
-0x5B 0x005B # LEFT SQUARE BRACKET
-0x5C 0x005C # REVERSE SOLIDUS
-0x5D 0x005D # RIGHT SQUARE BRACKET
-0x5E 0x005E # CIRCUMFLEX ACCENT
-0x5F 0x005F # LOW LINE
-0x60 0x0060 # GRAVE ACCENT
-0x61 0x0061 # LATIN SMALL LETTER A
-0x62 0x0062 # LATIN SMALL LETTER B
-0x63 0x0063 # LATIN SMALL LETTER C
-0x64 0x0064 # LATIN SMALL LETTER D
-0x65 0x0065 # LATIN SMALL LETTER E
-0x66 0x0066 # LATIN SMALL LETTER F
-0x67 0x0067 # LATIN SMALL LETTER G
-0x68 0x0068 # LATIN SMALL LETTER H
-0x69 0x0069 # LATIN SMALL LETTER I
-0x6A 0x006A # LATIN SMALL LETTER J
-0x6B 0x006B # LATIN SMALL LETTER K
-0x6C 0x006C # LATIN SMALL LETTER L
-0x6D 0x006D # LATIN SMALL LETTER M
-0x6E 0x006E # LATIN SMALL LETTER N
-0x6F 0x006F # LATIN SMALL LETTER O
-0x70 0x0070 # LATIN SMALL LETTER P
-0x71 0x0071 # LATIN SMALL LETTER Q
-0x72 0x0072 # LATIN SMALL LETTER R
-0x73 0x0073 # LATIN SMALL LETTER S
-0x74 0x0074 # LATIN SMALL LETTER T
-0x75 0x0075 # LATIN SMALL LETTER U
-0x76 0x0076 # LATIN SMALL LETTER V
-0x77 0x0077 # LATIN SMALL LETTER W
-0x78 0x0078 # LATIN SMALL LETTER X
-0x79 0x0079 # LATIN SMALL LETTER Y
-0x7A 0x007A # LATIN SMALL LETTER Z
-0x7B 0x007B # LEFT CURLY BRACKET
-0x7C 0x007C # VERTICAL LINE
-0x7D 0x007D # RIGHT CURLY BRACKET
-0x7E 0x007E # TILDE
-0x7F 0x007F # DELETE
-0x80 0x0080 # <control>
-0x81 0x0081 # <control>
-0x82 0x0082 # <control>
-0x83 0x0083 # <control>
-0x84 0x0084 # <control>
-0x85 0x0085 # <control>
-0x86 0x0086 # <control>
-0x87 0x0087 # <control>
-0x88 0x0088 # <control>
-0x89 0x0089 # <control>
-0x8A 0x008A # <control>
-0x8B 0x008B # <control>
-0x8C 0x008C # <control>
-0x8D 0x008D # <control>
-0x8E 0x008E # <control>
-0x8F 0x008F # <control>
-0x90 0x0090 # <control>
-0x91 0x0091 # <control>
-0x92 0x0092 # <control>
-0x93 0x0093 # <control>
-0x94 0x0094 # <control>
-0x95 0x0095 # <control>
-0x96 0x0096 # <control>
-0x97 0x0097 # <control>
-0x98 0x0098 # <control>
-0x99 0x0099 # <control>
-0x9A 0x009A # <control>
-0x9B 0x009B # <control>
-0x9C 0x009C # <control>
-0x9D 0x009D # <control>
-0x9E 0x009E # <control>
-0x9F 0x009F # <control>
-0xA0 0x00A0 # NO-BREAK SPACE
-0xA1 0x0104 # LATIN CAPITAL LETTER A WITH OGONEK
-0xA2 0x0138 # LATIN SMALL LETTER KRA
-0xA3 0x0156 # LATIN CAPITAL LETTER R WITH CEDILLA
-0xA4 0x00A4 # CURRENCY SIGN
-0xA5 0x0128 # LATIN CAPITAL LETTER I WITH TILDE
-0xA6 0x013B # LATIN CAPITAL LETTER L WITH CEDILLA
-0xA7 0x00A7 # SECTION SIGN
-0xA8 0x00A8 # DIAERESIS
-0xA9 0x0160 # LATIN CAPITAL LETTER S WITH CARON
-0xAA 0x0112 # LATIN CAPITAL LETTER E WITH MACRON
-0xAB 0x0122 # LATIN CAPITAL LETTER G WITH CEDILLA
-0xAC 0x0166 # LATIN CAPITAL LETTER T WITH STROKE
-0xAD 0x00AD # SOFT HYPHEN
-0xAE 0x017D # LATIN CAPITAL LETTER Z WITH CARON
-0xAF 0x00AF # MACRON
-0xB0 0x00B0 # DEGREE SIGN
-0xB1 0x0105 # LATIN SMALL LETTER A WITH OGONEK
-0xB2 0x02DB # OGONEK
-0xB3 0x0157 # LATIN SMALL LETTER R WITH CEDILLA
-0xB4 0x00B4 # ACUTE ACCENT
-0xB5 0x0129 # LATIN SMALL LETTER I WITH TILDE
-0xB6 0x013C # LATIN SMALL LETTER L WITH CEDILLA
-0xB7 0x02C7 # CARON
-0xB8 0x00B8 # CEDILLA
-0xB9 0x0161 # LATIN SMALL LETTER S WITH CARON
-0xBA 0x0113 # LATIN SMALL LETTER E WITH MACRON
-0xBB 0x0123 # LATIN SMALL LETTER G WITH CEDILLA
-0xBC 0x0167 # LATIN SMALL LETTER T WITH STROKE
-0xBD 0x014A # LATIN CAPITAL LETTER ENG
-0xBE 0x017E # LATIN SMALL LETTER Z WITH CARON
-0xBF 0x014B # LATIN SMALL LETTER ENG
-0xC0 0x0100 # LATIN CAPITAL LETTER A WITH MACRON
-0xC1 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE
-0xC2 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-0xC3 0x00C3 # LATIN CAPITAL LETTER A WITH TILDE
-0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
-0xC5 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE
-0xC6 0x00C6 # LATIN CAPITAL LETTER AE
-0xC7 0x012E # LATIN CAPITAL LETTER I WITH OGONEK
-0xC8 0x010C # LATIN CAPITAL LETTER C WITH CARON
-0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE
-0xCA 0x0118 # LATIN CAPITAL LETTER E WITH OGONEK
-0xCB 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS
-0xCC 0x0116 # LATIN CAPITAL LETTER E WITH DOT ABOVE
-0xCD 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE
-0xCE 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-0xCF 0x012A # LATIN CAPITAL LETTER I WITH MACRON
-0xD0 0x0110 # LATIN CAPITAL LETTER D WITH STROKE
-0xD1 0x0145 # LATIN CAPITAL LETTER N WITH CEDILLA
-0xD2 0x014C # LATIN CAPITAL LETTER O WITH MACRON
-0xD3 0x0136 # LATIN CAPITAL LETTER K WITH CEDILLA
-0xD4 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-0xD5 0x00D5 # LATIN CAPITAL LETTER O WITH TILDE
-0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
-0xD7 0x00D7 # MULTIPLICATION SIGN
-0xD8 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE
-0xD9 0x0172 # LATIN CAPITAL LETTER U WITH OGONEK
-0xDA 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE
-0xDB 0x00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
-0xDD 0x0168 # LATIN CAPITAL LETTER U WITH TILDE
-0xDE 0x016A # LATIN CAPITAL LETTER U WITH MACRON
-0xDF 0x00DF # LATIN SMALL LETTER SHARP S
-0xE0 0x0101 # LATIN SMALL LETTER A WITH MACRON
-0xE1 0x00E1 # LATIN SMALL LETTER A WITH ACUTE
-0xE2 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX
-0xE3 0x00E3 # LATIN SMALL LETTER A WITH TILDE
-0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS
-0xE5 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE
-0xE6 0x00E6 # LATIN SMALL LETTER AE
-0xE7 0x012F # LATIN SMALL LETTER I WITH OGONEK
-0xE8 0x010D # LATIN SMALL LETTER C WITH CARON
-0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE
-0xEA 0x0119 # LATIN SMALL LETTER E WITH OGONEK
-0xEB 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS
-0xEC 0x0117 # LATIN SMALL LETTER E WITH DOT ABOVE
-0xED 0x00ED # LATIN SMALL LETTER I WITH ACUTE
-0xEE 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX
-0xEF 0x012B # LATIN SMALL LETTER I WITH MACRON
-0xF0 0x0111 # LATIN SMALL LETTER D WITH STROKE
-0xF1 0x0146 # LATIN SMALL LETTER N WITH CEDILLA
-0xF2 0x014D # LATIN SMALL LETTER O WITH MACRON
-0xF3 0x0137 # LATIN SMALL LETTER K WITH CEDILLA
-0xF4 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX
-0xF5 0x00F5 # LATIN SMALL LETTER O WITH TILDE
-0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS
-0xF7 0x00F7 # DIVISION SIGN
-0xF8 0x00F8 # LATIN SMALL LETTER O WITH STROKE
-0xF9 0x0173 # LATIN SMALL LETTER U WITH OGONEK
-0xFA 0x00FA # LATIN SMALL LETTER U WITH ACUTE
-0xFB 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX
-0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS
-0xFD 0x0169 # LATIN SMALL LETTER U WITH TILDE
-0xFE 0x016B # LATIN SMALL LETTER U WITH MACRON
-0xFF 0x02D9 # DOT ABOVE
diff --git a/program/lib/encoding/ISO-8859-5.map b/program/lib/encoding/ISO-8859-5.map
deleted file mode 100644
index a7ed1ce2a..000000000
--- a/program/lib/encoding/ISO-8859-5.map
+++ /dev/null
@@ -1,303 +0,0 @@
-#
-# Name: ISO 8859-5:1999 to Unicode
-# Unicode version: 3.0
-# Table version: 1.0
-# Table format: Format A
-# Date: 1999 July 27
-# Authors: Ken Whistler <kenw@sybase.com>
-#
-# Copyright (c) 1991-1999 Unicode, Inc. All Rights reserved.
-#
-# This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
-# No claims are made as to fitness for any particular purpose. No
-# warranties of any kind are expressed or implied. The recipient
-# agrees to determine applicability of information provided. If this
-# file has been provided on optical media by Unicode, Inc., the sole
-# remedy for any claim will be exchange of defective media within 90
-# days of receipt.
-#
-# Unicode, Inc. hereby grants the right to freely use the information
-# supplied in this file in the creation of products supporting the
-# Unicode Standard, and to make copies of this file in any form for
-# internal or external distribution as long as this notice remains
-# attached.
-#
-# General notes:
-#
-# This table contains the data the Unicode Consortium has on how
-# ISO/IEC 8859-5:1999 characters map into Unicode.
-#
-# Format: Three tab-separated columns
-# Column #1 is the ISO/IEC 8859-5 code (in hex as 0xXX)
-# Column #2 is the Unicode (in hex as 0xXXXX)
-# Column #3 the Unicode name (follows a comment sign, '#')
-#
-# The entries are in ISO/IEC 8859-5 order.
-#
-# Version history
-# 1.0 version updates 0.1 version by adding mappings for all
-# control characters.
-#
-# Updated versions of this file may be found in:
-# <ftp://ftp.unicode.org/Public/MAPPINGS/>
-#
-# Any comments or problems, contact <errata@unicode.org>
-# Please note that <errata@unicode.org> is an archival address;
-# notices will be checked, but do not expect an immediate response.
-#
-0x00 0x0000 # NULL
-0x01 0x0001 # START OF HEADING
-0x02 0x0002 # START OF TEXT
-0x03 0x0003 # END OF TEXT
-0x04 0x0004 # END OF TRANSMISSION
-0x05 0x0005 # ENQUIRY
-0x06 0x0006 # ACKNOWLEDGE
-0x07 0x0007 # BELL
-0x08 0x0008 # BACKSPACE
-0x09 0x0009 # HORIZONTAL TABULATION
-0x0A 0x000A # LINE FEED
-0x0B 0x000B # VERTICAL TABULATION
-0x0C 0x000C # FORM FEED
-0x0D 0x000D # CARRIAGE RETURN
-0x0E 0x000E # SHIFT OUT
-0x0F 0x000F # SHIFT IN
-0x10 0x0010 # DATA LINK ESCAPE
-0x11 0x0011 # DEVICE CONTROL ONE
-0x12 0x0012 # DEVICE CONTROL TWO
-0x13 0x0013 # DEVICE CONTROL THREE
-0x14 0x0014 # DEVICE CONTROL FOUR
-0x15 0x0015 # NEGATIVE ACKNOWLEDGE
-0x16 0x0016 # SYNCHRONOUS IDLE
-0x17 0x0017 # END OF TRANSMISSION BLOCK
-0x18 0x0018 # CANCEL
-0x19 0x0019 # END OF MEDIUM
-0x1A 0x001A # SUBSTITUTE
-0x1B 0x001B # ESCAPE
-0x1C 0x001C # FILE SEPARATOR
-0x1D 0x001D # GROUP SEPARATOR
-0x1E 0x001E # RECORD SEPARATOR
-0x1F 0x001F # UNIT SEPARATOR
-0x20 0x0020 # SPACE
-0x21 0x0021 # EXCLAMATION MARK
-0x22 0x0022 # QUOTATION MARK
-0x23 0x0023 # NUMBER SIGN
-0x24 0x0024 # DOLLAR SIGN
-0x25 0x0025 # PERCENT SIGN
-0x26 0x0026 # AMPERSAND
-0x27 0x0027 # APOSTROPHE
-0x28 0x0028 # LEFT PARENTHESIS
-0x29 0x0029 # RIGHT PARENTHESIS
-0x2A 0x002A # ASTERISK
-0x2B 0x002B # PLUS SIGN
-0x2C 0x002C # COMMA
-0x2D 0x002D # HYPHEN-MINUS
-0x2E 0x002E # FULL STOP
-0x2F 0x002F # SOLIDUS
-0x30 0x0030 # DIGIT ZERO
-0x31 0x0031 # DIGIT ONE
-0x32 0x0032 # DIGIT TWO
-0x33 0x0033 # DIGIT THREE
-0x34 0x0034 # DIGIT FOUR
-0x35 0x0035 # DIGIT FIVE
-0x36 0x0036 # DIGIT SIX
-0x37 0x0037 # DIGIT SEVEN
-0x38 0x0038 # DIGIT EIGHT
-0x39 0x0039 # DIGIT NINE
-0x3A 0x003A # COLON
-0x3B 0x003B # SEMICOLON
-0x3C 0x003C # LESS-THAN SIGN
-0x3D 0x003D # EQUALS SIGN
-0x3E 0x003E # GREATER-THAN SIGN
-0x3F 0x003F # QUESTION MARK
-0x40 0x0040 # COMMERCIAL AT
-0x41 0x0041 # LATIN CAPITAL LETTER A
-0x42 0x0042 # LATIN CAPITAL LETTER B
-0x43 0x0043 # LATIN CAPITAL LETTER C
-0x44 0x0044 # LATIN CAPITAL LETTER D
-0x45 0x0045 # LATIN CAPITAL LETTER E
-0x46 0x0046 # LATIN CAPITAL LETTER F
-0x47 0x0047 # LATIN CAPITAL LETTER G
-0x48 0x0048 # LATIN CAPITAL LETTER H
-0x49 0x0049 # LATIN CAPITAL LETTER I
-0x4A 0x004A # LATIN CAPITAL LETTER J
-0x4B 0x004B # LATIN CAPITAL LETTER K
-0x4C 0x004C # LATIN CAPITAL LETTER L
-0x4D 0x004D # LATIN CAPITAL LETTER M
-0x4E 0x004E # LATIN CAPITAL LETTER N
-0x4F 0x004F # LATIN CAPITAL LETTER O
-0x50 0x0050 # LATIN CAPITAL LETTER P
-0x51 0x0051 # LATIN CAPITAL LETTER Q
-0x52 0x0052 # LATIN CAPITAL LETTER R
-0x53 0x0053 # LATIN CAPITAL LETTER S
-0x54 0x0054 # LATIN CAPITAL LETTER T
-0x55 0x0055 # LATIN CAPITAL LETTER U
-0x56 0x0056 # LATIN CAPITAL LETTER V
-0x57 0x0057 # LATIN CAPITAL LETTER W
-0x58 0x0058 # LATIN CAPITAL LETTER X
-0x59 0x0059 # LATIN CAPITAL LETTER Y
-0x5A 0x005A # LATIN CAPITAL LETTER Z
-0x5B 0x005B # LEFT SQUARE BRACKET
-0x5C 0x005C # REVERSE SOLIDUS
-0x5D 0x005D # RIGHT SQUARE BRACKET
-0x5E 0x005E # CIRCUMFLEX ACCENT
-0x5F 0x005F # LOW LINE
-0x60 0x0060 # GRAVE ACCENT
-0x61 0x0061 # LATIN SMALL LETTER A
-0x62 0x0062 # LATIN SMALL LETTER B
-0x63 0x0063 # LATIN SMALL LETTER C
-0x64 0x0064 # LATIN SMALL LETTER D
-0x65 0x0065 # LATIN SMALL LETTER E
-0x66 0x0066 # LATIN SMALL LETTER F
-0x67 0x0067 # LATIN SMALL LETTER G
-0x68 0x0068 # LATIN SMALL LETTER H
-0x69 0x0069 # LATIN SMALL LETTER I
-0x6A 0x006A # LATIN SMALL LETTER J
-0x6B 0x006B # LATIN SMALL LETTER K
-0x6C 0x006C # LATIN SMALL LETTER L
-0x6D 0x006D # LATIN SMALL LETTER M
-0x6E 0x006E # LATIN SMALL LETTER N
-0x6F 0x006F # LATIN SMALL LETTER O
-0x70 0x0070 # LATIN SMALL LETTER P
-0x71 0x0071 # LATIN SMALL LETTER Q
-0x72 0x0072 # LATIN SMALL LETTER R
-0x73 0x0073 # LATIN SMALL LETTER S
-0x74 0x0074 # LATIN SMALL LETTER T
-0x75 0x0075 # LATIN SMALL LETTER U
-0x76 0x0076 # LATIN SMALL LETTER V
-0x77 0x0077 # LATIN SMALL LETTER W
-0x78 0x0078 # LATIN SMALL LETTER X
-0x79 0x0079 # LATIN SMALL LETTER Y
-0x7A 0x007A # LATIN SMALL LETTER Z
-0x7B 0x007B # LEFT CURLY BRACKET
-0x7C 0x007C # VERTICAL LINE
-0x7D 0x007D # RIGHT CURLY BRACKET
-0x7E 0x007E # TILDE
-0x7F 0x007F # DELETE
-0x80 0x0080 # <control>
-0x81 0x0081 # <control>
-0x82 0x0082 # <control>
-0x83 0x0083 # <control>
-0x84 0x0084 # <control>
-0x85 0x0085 # <control>
-0x86 0x0086 # <control>
-0x87 0x0087 # <control>
-0x88 0x0088 # <control>
-0x89 0x0089 # <control>
-0x8A 0x008A # <control>
-0x8B 0x008B # <control>
-0x8C 0x008C # <control>
-0x8D 0x008D # <control>
-0x8E 0x008E # <control>
-0x8F 0x008F # <control>
-0x90 0x0090 # <control>
-0x91 0x0091 # <control>
-0x92 0x0092 # <control>
-0x93 0x0093 # <control>
-0x94 0x0094 # <control>
-0x95 0x0095 # <control>
-0x96 0x0096 # <control>
-0x97 0x0097 # <control>
-0x98 0x0098 # <control>
-0x99 0x0099 # <control>
-0x9A 0x009A # <control>
-0x9B 0x009B # <control>
-0x9C 0x009C # <control>
-0x9D 0x009D # <control>
-0x9E 0x009E # <control>
-0x9F 0x009F # <control>
-0xA0 0x00A0 # NO-BREAK SPACE
-0xA1 0x0401 # CYRILLIC CAPITAL LETTER IO
-0xA2 0x0402 # CYRILLIC CAPITAL LETTER DJE
-0xA3 0x0403 # CYRILLIC CAPITAL LETTER GJE
-0xA4 0x0404 # CYRILLIC CAPITAL LETTER UKRAINIAN IE
-0xA5 0x0405 # CYRILLIC CAPITAL LETTER DZE
-0xA6 0x0406 # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
-0xA7 0x0407 # CYRILLIC CAPITAL LETTER YI
-0xA8 0x0408 # CYRILLIC CAPITAL LETTER JE
-0xA9 0x0409 # CYRILLIC CAPITAL LETTER LJE
-0xAA 0x040A # CYRILLIC CAPITAL LETTER NJE
-0xAB 0x040B # CYRILLIC CAPITAL LETTER TSHE
-0xAC 0x040C # CYRILLIC CAPITAL LETTER KJE
-0xAD 0x00AD # SOFT HYPHEN
-0xAE 0x040E # CYRILLIC CAPITAL LETTER SHORT U
-0xAF 0x040F # CYRILLIC CAPITAL LETTER DZHE
-0xB0 0x0410 # CYRILLIC CAPITAL LETTER A
-0xB1 0x0411 # CYRILLIC CAPITAL LETTER BE
-0xB2 0x0412 # CYRILLIC CAPITAL LETTER VE
-0xB3 0x0413 # CYRILLIC CAPITAL LETTER GHE
-0xB4 0x0414 # CYRILLIC CAPITAL LETTER DE
-0xB5 0x0415 # CYRILLIC CAPITAL LETTER IE
-0xB6 0x0416 # CYRILLIC CAPITAL LETTER ZHE
-0xB7 0x0417 # CYRILLIC CAPITAL LETTER ZE
-0xB8 0x0418 # CYRILLIC CAPITAL LETTER I
-0xB9 0x0419 # CYRILLIC CAPITAL LETTER SHORT I
-0xBA 0x041A # CYRILLIC CAPITAL LETTER KA
-0xBB 0x041B # CYRILLIC CAPITAL LETTER EL
-0xBC 0x041C # CYRILLIC CAPITAL LETTER EM
-0xBD 0x041D # CYRILLIC CAPITAL LETTER EN
-0xBE 0x041E # CYRILLIC CAPITAL LETTER O
-0xBF 0x041F # CYRILLIC CAPITAL LETTER PE
-0xC0 0x0420 # CYRILLIC CAPITAL LETTER ER
-0xC1 0x0421 # CYRILLIC CAPITAL LETTER ES
-0xC2 0x0422 # CYRILLIC CAPITAL LETTER TE
-0xC3 0x0423 # CYRILLIC CAPITAL LETTER U
-0xC4 0x0424 # CYRILLIC CAPITAL LETTER EF
-0xC5 0x0425 # CYRILLIC CAPITAL LETTER HA
-0xC6 0x0426 # CYRILLIC CAPITAL LETTER TSE
-0xC7 0x0427 # CYRILLIC CAPITAL LETTER CHE
-0xC8 0x0428 # CYRILLIC CAPITAL LETTER SHA
-0xC9 0x0429 # CYRILLIC CAPITAL LETTER SHCHA
-0xCA 0x042A # CYRILLIC CAPITAL LETTER HARD SIGN
-0xCB 0x042B # CYRILLIC CAPITAL LETTER YERU
-0xCC 0x042C # CYRILLIC CAPITAL LETTER SOFT SIGN
-0xCD 0x042D # CYRILLIC CAPITAL LETTER E
-0xCE 0x042E # CYRILLIC CAPITAL LETTER YU
-0xCF 0x042F # CYRILLIC CAPITAL LETTER YA
-0xD0 0x0430 # CYRILLIC SMALL LETTER A
-0xD1 0x0431 # CYRILLIC SMALL LETTER BE
-0xD2 0x0432 # CYRILLIC SMALL LETTER VE
-0xD3 0x0433 # CYRILLIC SMALL LETTER GHE
-0xD4 0x0434 # CYRILLIC SMALL LETTER DE
-0xD5 0x0435 # CYRILLIC SMALL LETTER IE
-0xD6 0x0436 # CYRILLIC SMALL LETTER ZHE
-0xD7 0x0437 # CYRILLIC SMALL LETTER ZE
-0xD8 0x0438 # CYRILLIC SMALL LETTER I
-0xD9 0x0439 # CYRILLIC SMALL LETTER SHORT I
-0xDA 0x043A # CYRILLIC SMALL LETTER KA
-0xDB 0x043B # CYRILLIC SMALL LETTER EL
-0xDC 0x043C # CYRILLIC SMALL LETTER EM
-0xDD 0x043D # CYRILLIC SMALL LETTER EN
-0xDE 0x043E # CYRILLIC SMALL LETTER O
-0xDF 0x043F # CYRILLIC SMALL LETTER PE
-0xE0 0x0440 # CYRILLIC SMALL LETTER ER
-0xE1 0x0441 # CYRILLIC SMALL LETTER ES
-0xE2 0x0442 # CYRILLIC SMALL LETTER TE
-0xE3 0x0443 # CYRILLIC SMALL LETTER U
-0xE4 0x0444 # CYRILLIC SMALL LETTER EF
-0xE5 0x0445 # CYRILLIC SMALL LETTER HA
-0xE6 0x0446 # CYRILLIC SMALL LETTER TSE
-0xE7 0x0447 # CYRILLIC SMALL LETTER CHE
-0xE8 0x0448 # CYRILLIC SMALL LETTER SHA
-0xE9 0x0449 # CYRILLIC SMALL LETTER SHCHA
-0xEA 0x044A # CYRILLIC SMALL LETTER HARD SIGN
-0xEB 0x044B # CYRILLIC SMALL LETTER YERU
-0xEC 0x044C # CYRILLIC SMALL LETTER SOFT SIGN
-0xED 0x044D # CYRILLIC SMALL LETTER E
-0xEE 0x044E # CYRILLIC SMALL LETTER YU
-0xEF 0x044F # CYRILLIC SMALL LETTER YA
-0xF0 0x2116 # NUMERO SIGN
-0xF1 0x0451 # CYRILLIC SMALL LETTER IO
-0xF2 0x0452 # CYRILLIC SMALL LETTER DJE
-0xF3 0x0453 # CYRILLIC SMALL LETTER GJE
-0xF4 0x0454 # CYRILLIC SMALL LETTER UKRAINIAN IE
-0xF5 0x0455 # CYRILLIC SMALL LETTER DZE
-0xF6 0x0456 # CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
-0xF7 0x0457 # CYRILLIC SMALL LETTER YI
-0xF8 0x0458 # CYRILLIC SMALL LETTER JE
-0xF9 0x0459 # CYRILLIC SMALL LETTER LJE
-0xFA 0x045A # CYRILLIC SMALL LETTER NJE
-0xFB 0x045B # CYRILLIC SMALL LETTER TSHE
-0xFC 0x045C # CYRILLIC SMALL LETTER KJE
-0xFD 0x00A7 # SECTION SIGN
-0xFE 0x045E # CYRILLIC SMALL LETTER SHORT U
-0xFF 0x045F # CYRILLIC SMALL LETTER DZHE
diff --git a/program/lib/encoding/ISO-8859-6.map b/program/lib/encoding/ISO-8859-6.map
deleted file mode 100644
index 69ac7f589..000000000
--- a/program/lib/encoding/ISO-8859-6.map
+++ /dev/null
@@ -1,260 +0,0 @@
-#
-# Name: ISO 8859-6:1999 to Unicode
-# Unicode version: 3.0
-# Table version: 1.0
-# Table format: Format A
-# Date: 1999 July 27
-# Authors: Ken Whistler <kenw@sybase.com>
-#
-# Copyright (c) 1991-1999 Unicode, Inc. All Rights reserved.
-#
-# This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
-# No claims are made as to fitness for any particular purpose. No
-# warranties of any kind are expressed or implied. The recipient
-# agrees to determine applicability of information provided. If this
-# file has been provided on optical media by Unicode, Inc., the sole
-# remedy for any claim will be exchange of defective media within 90
-# days of receipt.
-#
-# Unicode, Inc. hereby grants the right to freely use the information
-# supplied in this file in the creation of products supporting the
-# Unicode Standard, and to make copies of this file in any form for
-# internal or external distribution as long as this notice remains
-# attached.
-#
-# General notes:
-#
-# This table contains the data the Unicode Consortium has on how
-# ISO/IEC 8859-6:1999 characters map into Unicode.
-#
-# Format: Three tab-separated columns
-# Column #1 is the ISO/IEC 8859-6 code (in hex as 0xXX)
-# Column #2 is the Unicode (in hex as 0xXXXX)
-# Column #3 the Unicode name (follows a comment sign, '#')
-#
-# The entries are in ISO/IEC 8859-6 order.
-#
-# Version history
-# 1.0 version updates 0.1 version by adding mappings for all
-# control characters.
-# 0x30..0x39 remapped to the ASCII digits (U+0030..U+0039) instead
-# of the Arabic digits (U+0660..U+0669).
-#
-# Updated versions of this file may be found in:
-# <ftp://ftp.unicode.org/Public/MAPPINGS/>
-#
-# Any comments or problems, contact <errata@unicode.org>
-# Please note that <errata@unicode.org> is an archival address;
-# notices will be checked, but do not expect an immediate response.
-#
-0x00 0x0000 # NULL
-0x01 0x0001 # START OF HEADING
-0x02 0x0002 # START OF TEXT
-0x03 0x0003 # END OF TEXT
-0x04 0x0004 # END OF TRANSMISSION
-0x05 0x0005 # ENQUIRY
-0x06 0x0006 # ACKNOWLEDGE
-0x07 0x0007 # BELL
-0x08 0x0008 # BACKSPACE
-0x09 0x0009 # HORIZONTAL TABULATION
-0x0A 0x000A # LINE FEED
-0x0B 0x000B # VERTICAL TABULATION
-0x0C 0x000C # FORM FEED
-0x0D 0x000D # CARRIAGE RETURN
-0x0E 0x000E # SHIFT OUT
-0x0F 0x000F # SHIFT IN
-0x10 0x0010 # DATA LINK ESCAPE
-0x11 0x0011 # DEVICE CONTROL ONE
-0x12 0x0012 # DEVICE CONTROL TWO
-0x13 0x0013 # DEVICE CONTROL THREE
-0x14 0x0014 # DEVICE CONTROL FOUR
-0x15 0x0015 # NEGATIVE ACKNOWLEDGE
-0x16 0x0016 # SYNCHRONOUS IDLE
-0x17 0x0017 # END OF TRANSMISSION BLOCK
-0x18 0x0018 # CANCEL
-0x19 0x0019 # END OF MEDIUM
-0x1A 0x001A # SUBSTITUTE
-0x1B 0x001B # ESCAPE
-0x1C 0x001C # FILE SEPARATOR
-0x1D 0x001D # GROUP SEPARATOR
-0x1E 0x001E # RECORD SEPARATOR
-0x1F 0x001F # UNIT SEPARATOR
-0x20 0x0020 # SPACE
-0x21 0x0021 # EXCLAMATION MARK
-0x22 0x0022 # QUOTATION MARK
-0x23 0x0023 # NUMBER SIGN
-0x24 0x0024 # DOLLAR SIGN
-0x25 0x0025 # PERCENT SIGN
-0x26 0x0026 # AMPERSAND
-0x27 0x0027 # APOSTROPHE
-0x28 0x0028 # LEFT PARENTHESIS
-0x29 0x0029 # RIGHT PARENTHESIS
-0x2A 0x002A # ASTERISK
-0x2B 0x002B # PLUS SIGN
-0x2C 0x002C # COMMA
-0x2D 0x002D # HYPHEN-MINUS
-0x2E 0x002E # FULL STOP
-0x2F 0x002F # SOLIDUS
-0x30 0x0030 # DIGIT ZERO
-0x31 0x0031 # DIGIT ONE
-0x32 0x0032 # DIGIT TWO
-0x33 0x0033 # DIGIT THREE
-0x34 0x0034 # DIGIT FOUR
-0x35 0x0035 # DIGIT FIVE
-0x36 0x0036 # DIGIT SIX
-0x37 0x0037 # DIGIT SEVEN
-0x38 0x0038 # DIGIT EIGHT
-0x39 0x0039 # DIGIT NINE
-0x3A 0x003A # COLON
-0x3B 0x003B # SEMICOLON
-0x3C 0x003C # LESS-THAN SIGN
-0x3D 0x003D # EQUALS SIGN
-0x3E 0x003E # GREATER-THAN SIGN
-0x3F 0x003F # QUESTION MARK
-0x40 0x0040 # COMMERCIAL AT
-0x41 0x0041 # LATIN CAPITAL LETTER A
-0x42 0x0042 # LATIN CAPITAL LETTER B
-0x43 0x0043 # LATIN CAPITAL LETTER C
-0x44 0x0044 # LATIN CAPITAL LETTER D
-0x45 0x0045 # LATIN CAPITAL LETTER E
-0x46 0x0046 # LATIN CAPITAL LETTER F
-0x47 0x0047 # LATIN CAPITAL LETTER G
-0x48 0x0048 # LATIN CAPITAL LETTER H
-0x49 0x0049 # LATIN CAPITAL LETTER I
-0x4A 0x004A # LATIN CAPITAL LETTER J
-0x4B 0x004B # LATIN CAPITAL LETTER K
-0x4C 0x004C # LATIN CAPITAL LETTER L
-0x4D 0x004D # LATIN CAPITAL LETTER M
-0x4E 0x004E # LATIN CAPITAL LETTER N
-0x4F 0x004F # LATIN CAPITAL LETTER O
-0x50 0x0050 # LATIN CAPITAL LETTER P
-0x51 0x0051 # LATIN CAPITAL LETTER Q
-0x52 0x0052 # LATIN CAPITAL LETTER R
-0x53 0x0053 # LATIN CAPITAL LETTER S
-0x54 0x0054 # LATIN CAPITAL LETTER T
-0x55 0x0055 # LATIN CAPITAL LETTER U
-0x56 0x0056 # LATIN CAPITAL LETTER V
-0x57 0x0057 # LATIN CAPITAL LETTER W
-0x58 0x0058 # LATIN CAPITAL LETTER X
-0x59 0x0059 # LATIN CAPITAL LETTER Y
-0x5A 0x005A # LATIN CAPITAL LETTER Z
-0x5B 0x005B # LEFT SQUARE BRACKET
-0x5C 0x005C # REVERSE SOLIDUS
-0x5D 0x005D # RIGHT SQUARE BRACKET
-0x5E 0x005E # CIRCUMFLEX ACCENT
-0x5F 0x005F # LOW LINE
-0x60 0x0060 # GRAVE ACCENT
-0x61 0x0061 # LATIN SMALL LETTER A
-0x62 0x0062 # LATIN SMALL LETTER B
-0x63 0x0063 # LATIN SMALL LETTER C
-0x64 0x0064 # LATIN SMALL LETTER D
-0x65 0x0065 # LATIN SMALL LETTER E
-0x66 0x0066 # LATIN SMALL LETTER F
-0x67 0x0067 # LATIN SMALL LETTER G
-0x68 0x0068 # LATIN SMALL LETTER H
-0x69 0x0069 # LATIN SMALL LETTER I
-0x6A 0x006A # LATIN SMALL LETTER J
-0x6B 0x006B # LATIN SMALL LETTER K
-0x6C 0x006C # LATIN SMALL LETTER L
-0x6D 0x006D # LATIN SMALL LETTER M
-0x6E 0x006E # LATIN SMALL LETTER N
-0x6F 0x006F # LATIN SMALL LETTER O
-0x70 0x0070 # LATIN SMALL LETTER P
-0x71 0x0071 # LATIN SMALL LETTER Q
-0x72 0x0072 # LATIN SMALL LETTER R
-0x73 0x0073 # LATIN SMALL LETTER S
-0x74 0x0074 # LATIN SMALL LETTER T
-0x75 0x0075 # LATIN SMALL LETTER U
-0x76 0x0076 # LATIN SMALL LETTER V
-0x77 0x0077 # LATIN SMALL LETTER W
-0x78 0x0078 # LATIN SMALL LETTER X
-0x79 0x0079 # LATIN SMALL LETTER Y
-0x7A 0x007A # LATIN SMALL LETTER Z
-0x7B 0x007B # LEFT CURLY BRACKET
-0x7C 0x007C # VERTICAL LINE
-0x7D 0x007D # RIGHT CURLY BRACKET
-0x7E 0x007E # TILDE
-0x7F 0x007F # DELETE
-0x80 0x0080 # <control>
-0x81 0x0081 # <control>
-0x82 0x0082 # <control>
-0x83 0x0083 # <control>
-0x84 0x0084 # <control>
-0x85 0x0085 # <control>
-0x86 0x0086 # <control>
-0x87 0x0087 # <control>
-0x88 0x0088 # <control>
-0x89 0x0089 # <control>
-0x8A 0x008A # <control>
-0x8B 0x008B # <control>
-0x8C 0x008C # <control>
-0x8D 0x008D # <control>
-0x8E 0x008E # <control>
-0x8F 0x008F # <control>
-0x90 0x0090 # <control>
-0x91 0x0091 # <control>
-0x92 0x0092 # <control>
-0x93 0x0093 # <control>
-0x94 0x0094 # <control>
-0x95 0x0095 # <control>
-0x96 0x0096 # <control>
-0x97 0x0097 # <control>
-0x98 0x0098 # <control>
-0x99 0x0099 # <control>
-0x9A 0x009A # <control>
-0x9B 0x009B # <control>
-0x9C 0x009C # <control>
-0x9D 0x009D # <control>
-0x9E 0x009E # <control>
-0x9F 0x009F # <control>
-0xA0 0x00A0 # NO-BREAK SPACE
-0xA4 0x00A4 # CURRENCY SIGN
-0xAC 0x060C # ARABIC COMMA
-0xAD 0x00AD # SOFT HYPHEN
-0xBB 0x061B # ARABIC SEMICOLON
-0xBF 0x061F # ARABIC QUESTION MARK
-0xC1 0x0621 # ARABIC LETTER HAMZA
-0xC2 0x0622 # ARABIC LETTER ALEF WITH MADDA ABOVE
-0xC3 0x0623 # ARABIC LETTER ALEF WITH HAMZA ABOVE
-0xC4 0x0624 # ARABIC LETTER WAW WITH HAMZA ABOVE
-0xC5 0x0625 # ARABIC LETTER ALEF WITH HAMZA BELOW
-0xC6 0x0626 # ARABIC LETTER YEH WITH HAMZA ABOVE
-0xC7 0x0627 # ARABIC LETTER ALEF
-0xC8 0x0628 # ARABIC LETTER BEH
-0xC9 0x0629 # ARABIC LETTER TEH MARBUTA
-0xCA 0x062A # ARABIC LETTER TEH
-0xCB 0x062B # ARABIC LETTER THEH
-0xCC 0x062C # ARABIC LETTER JEEM
-0xCD 0x062D # ARABIC LETTER HAH
-0xCE 0x062E # ARABIC LETTER KHAH
-0xCF 0x062F # ARABIC LETTER DAL
-0xD0 0x0630 # ARABIC LETTER THAL
-0xD1 0x0631 # ARABIC LETTER REH
-0xD2 0x0632 # ARABIC LETTER ZAIN
-0xD3 0x0633 # ARABIC LETTER SEEN
-0xD4 0x0634 # ARABIC LETTER SHEEN
-0xD5 0x0635 # ARABIC LETTER SAD
-0xD6 0x0636 # ARABIC LETTER DAD
-0xD7 0x0637 # ARABIC LETTER TAH
-0xD8 0x0638 # ARABIC LETTER ZAH
-0xD9 0x0639 # ARABIC LETTER AIN
-0xDA 0x063A # ARABIC LETTER GHAIN
-0xE0 0x0640 # ARABIC TATWEEL
-0xE1 0x0641 # ARABIC LETTER FEH
-0xE2 0x0642 # ARABIC LETTER QAF
-0xE3 0x0643 # ARABIC LETTER KAF
-0xE4 0x0644 # ARABIC LETTER LAM
-0xE5 0x0645 # ARABIC LETTER MEEM
-0xE6 0x0646 # ARABIC LETTER NOON
-0xE7 0x0647 # ARABIC LETTER HEH
-0xE8 0x0648 # ARABIC LETTER WAW
-0xE9 0x0649 # ARABIC LETTER ALEF MAKSURA
-0xEA 0x064A # ARABIC LETTER YEH
-0xEB 0x064B # ARABIC FATHATAN
-0xEC 0x064C # ARABIC DAMMATAN
-0xED 0x064D # ARABIC KASRATAN
-0xEE 0x064E # ARABIC FATHA
-0xEF 0x064F # ARABIC DAMMA
-0xF0 0x0650 # ARABIC KASRA
-0xF1 0x0651 # ARABIC SHADDA
-0xF2 0x0652 # ARABIC SUKUN
diff --git a/program/lib/encoding/ISO-8859-7.map b/program/lib/encoding/ISO-8859-7.map
deleted file mode 100644
index bc46b7471..000000000
--- a/program/lib/encoding/ISO-8859-7.map
+++ /dev/null
@@ -1,308 +0,0 @@
-#
-# Name: ISO 8859-7:2003 to Unicode
-# Unicode version: 4.0
-# Table version: 2.0
-# Table format: Format A
-# Date: 2003-Nov-12
-# Authors: Ken Whistler <kenw@sybase.com>
-#
-# Copyright (c) 1991-2003 Unicode, Inc. All Rights reserved.
-#
-# This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
-# No claims are made as to fitness for any particular purpose. No
-# warranties of any kind are expressed or implied. The recipient
-# agrees to determine applicability of information provided. If this
-# file has been provided on optical media by Unicode, Inc., the sole
-# remedy for any claim will be exchange of defective media within 90
-# days of receipt.
-#
-# Unicode, Inc. hereby grants the right to freely use the information
-# supplied in this file in the creation of products supporting the
-# Unicode Standard, and to make copies of this file in any form for
-# internal or external distribution as long as this notice remains
-# attached.
-#
-# General notes:
-#
-# This table contains the data the Unicode Consortium has on how
-# ISO 8859-7:2003 characters map into Unicode.
-#
-# ISO 8859-7:1987 is equivalent to ISO-IR-126, ELOT 928,
-# and ECMA 118. ISO 8859-7:2003 adds two currency signs
-# and one other character not in the earlier standard.
-#
-# Format: Three tab-separated columns
-# Column #1 is the ISO 8859-7 code (in hex as 0xXX)
-# Column #2 is the Unicode (in hex as 0xXXXX)
-# Column #3 the Unicode name (follows a comment sign, '#')
-#
-# The entries are in ISO 8859-7 order.
-#
-# Version history
-# 1.0 version updates 0.1 version by adding mappings for all
-# control characters.
-# Remap 0xA1 to U+2018 (instead of 0x02BD) to match text of 8859-7
-# Remap 0xA2 to U+2019 (instead of 0x02BC) to match text of 8859-7
-#
-# 2.0 version updates 1.0 version by adding mappings for the
-# three newly added characters 0xA4, 0xA5, 0xAA.
-#
-# Updated versions of this file may be found in:
-# <http://www.unicode.org/Public/MAPPINGS/>
-#
-# Any comments or problems, contact the Unicode Consortium at:
-# <http://www.unicode.org/reporting.html>
-#
-0x00 0x0000 # NULL
-0x01 0x0001 # START OF HEADING
-0x02 0x0002 # START OF TEXT
-0x03 0x0003 # END OF TEXT
-0x04 0x0004 # END OF TRANSMISSION
-0x05 0x0005 # ENQUIRY
-0x06 0x0006 # ACKNOWLEDGE
-0x07 0x0007 # BELL
-0x08 0x0008 # BACKSPACE
-0x09 0x0009 # HORIZONTAL TABULATION
-0x0A 0x000A # LINE FEED
-0x0B 0x000B # VERTICAL TABULATION
-0x0C 0x000C # FORM FEED
-0x0D 0x000D # CARRIAGE RETURN
-0x0E 0x000E # SHIFT OUT
-0x0F 0x000F # SHIFT IN
-0x10 0x0010 # DATA LINK ESCAPE
-0x11 0x0011 # DEVICE CONTROL ONE
-0x12 0x0012 # DEVICE CONTROL TWO
-0x13 0x0013 # DEVICE CONTROL THREE
-0x14 0x0014 # DEVICE CONTROL FOUR
-0x15 0x0015 # NEGATIVE ACKNOWLEDGE
-0x16 0x0016 # SYNCHRONOUS IDLE
-0x17 0x0017 # END OF TRANSMISSION BLOCK
-0x18 0x0018 # CANCEL
-0x19 0x0019 # END OF MEDIUM
-0x1A 0x001A # SUBSTITUTE
-0x1B 0x001B # ESCAPE
-0x1C 0x001C # FILE SEPARATOR
-0x1D 0x001D # GROUP SEPARATOR
-0x1E 0x001E # RECORD SEPARATOR
-0x1F 0x001F # UNIT SEPARATOR
-0x20 0x0020 # SPACE
-0x21 0x0021 # EXCLAMATION MARK
-0x22 0x0022 # QUOTATION MARK
-0x23 0x0023 # NUMBER SIGN
-0x24 0x0024 # DOLLAR SIGN
-0x25 0x0025 # PERCENT SIGN
-0x26 0x0026 # AMPERSAND
-0x27 0x0027 # APOSTROPHE
-0x28 0x0028 # LEFT PARENTHESIS
-0x29 0x0029 # RIGHT PARENTHESIS
-0x2A 0x002A # ASTERISK
-0x2B 0x002B # PLUS SIGN
-0x2C 0x002C # COMMA
-0x2D 0x002D # HYPHEN-MINUS
-0x2E 0x002E # FULL STOP
-0x2F 0x002F # SOLIDUS
-0x30 0x0030 # DIGIT ZERO
-0x31 0x0031 # DIGIT ONE
-0x32 0x0032 # DIGIT TWO
-0x33 0x0033 # DIGIT THREE
-0x34 0x0034 # DIGIT FOUR
-0x35 0x0035 # DIGIT FIVE
-0x36 0x0036 # DIGIT SIX
-0x37 0x0037 # DIGIT SEVEN
-0x38 0x0038 # DIGIT EIGHT
-0x39 0x0039 # DIGIT NINE
-0x3A 0x003A # COLON
-0x3B 0x003B # SEMICOLON
-0x3C 0x003C # LESS-THAN SIGN
-0x3D 0x003D # EQUALS SIGN
-0x3E 0x003E # GREATER-THAN SIGN
-0x3F 0x003F # QUESTION MARK
-0x40 0x0040 # COMMERCIAL AT
-0x41 0x0041 # LATIN CAPITAL LETTER A
-0x42 0x0042 # LATIN CAPITAL LETTER B
-0x43 0x0043 # LATIN CAPITAL LETTER C
-0x44 0x0044 # LATIN CAPITAL LETTER D
-0x45 0x0045 # LATIN CAPITAL LETTER E
-0x46 0x0046 # LATIN CAPITAL LETTER F
-0x47 0x0047 # LATIN CAPITAL LETTER G
-0x48 0x0048 # LATIN CAPITAL LETTER H
-0x49 0x0049 # LATIN CAPITAL LETTER I
-0x4A 0x004A # LATIN CAPITAL LETTER J
-0x4B 0x004B # LATIN CAPITAL LETTER K
-0x4C 0x004C # LATIN CAPITAL LETTER L
-0x4D 0x004D # LATIN CAPITAL LETTER M
-0x4E 0x004E # LATIN CAPITAL LETTER N
-0x4F 0x004F # LATIN CAPITAL LETTER O
-0x50 0x0050 # LATIN CAPITAL LETTER P
-0x51 0x0051 # LATIN CAPITAL LETTER Q
-0x52 0x0052 # LATIN CAPITAL LETTER R
-0x53 0x0053 # LATIN CAPITAL LETTER S
-0x54 0x0054 # LATIN CAPITAL LETTER T
-0x55 0x0055 # LATIN CAPITAL LETTER U
-0x56 0x0056 # LATIN CAPITAL LETTER V
-0x57 0x0057 # LATIN CAPITAL LETTER W
-0x58 0x0058 # LATIN CAPITAL LETTER X
-0x59 0x0059 # LATIN CAPITAL LETTER Y
-0x5A 0x005A # LATIN CAPITAL LETTER Z
-0x5B 0x005B # LEFT SQUARE BRACKET
-0x5C 0x005C # REVERSE SOLIDUS
-0x5D 0x005D # RIGHT SQUARE BRACKET
-0x5E 0x005E # CIRCUMFLEX ACCENT
-0x5F 0x005F # LOW LINE
-0x60 0x0060 # GRAVE ACCENT
-0x61 0x0061 # LATIN SMALL LETTER A
-0x62 0x0062 # LATIN SMALL LETTER B
-0x63 0x0063 # LATIN SMALL LETTER C
-0x64 0x0064 # LATIN SMALL LETTER D
-0x65 0x0065 # LATIN SMALL LETTER E
-0x66 0x0066 # LATIN SMALL LETTER F
-0x67 0x0067 # LATIN SMALL LETTER G
-0x68 0x0068 # LATIN SMALL LETTER H
-0x69 0x0069 # LATIN SMALL LETTER I
-0x6A 0x006A # LATIN SMALL LETTER J
-0x6B 0x006B # LATIN SMALL LETTER K
-0x6C 0x006C # LATIN SMALL LETTER L
-0x6D 0x006D # LATIN SMALL LETTER M
-0x6E 0x006E # LATIN SMALL LETTER N
-0x6F 0x006F # LATIN SMALL LETTER O
-0x70 0x0070 # LATIN SMALL LETTER P
-0x71 0x0071 # LATIN SMALL LETTER Q
-0x72 0x0072 # LATIN SMALL LETTER R
-0x73 0x0073 # LATIN SMALL LETTER S
-0x74 0x0074 # LATIN SMALL LETTER T
-0x75 0x0075 # LATIN SMALL LETTER U
-0x76 0x0076 # LATIN SMALL LETTER V
-0x77 0x0077 # LATIN SMALL LETTER W
-0x78 0x0078 # LATIN SMALL LETTER X
-0x79 0x0079 # LATIN SMALL LETTER Y
-0x7A 0x007A # LATIN SMALL LETTER Z
-0x7B 0x007B # LEFT CURLY BRACKET
-0x7C 0x007C # VERTICAL LINE
-0x7D 0x007D # RIGHT CURLY BRACKET
-0x7E 0x007E # TILDE
-0x7F 0x007F # DELETE
-0x80 0x0080 # <control>
-0x81 0x0081 # <control>
-0x82 0x0082 # <control>
-0x83 0x0083 # <control>
-0x84 0x0084 # <control>
-0x85 0x0085 # <control>
-0x86 0x0086 # <control>
-0x87 0x0087 # <control>
-0x88 0x0088 # <control>
-0x89 0x0089 # <control>
-0x8A 0x008A # <control>
-0x8B 0x008B # <control>
-0x8C 0x008C # <control>
-0x8D 0x008D # <control>
-0x8E 0x008E # <control>
-0x8F 0x008F # <control>
-0x90 0x0090 # <control>
-0x91 0x0091 # <control>
-0x92 0x0092 # <control>
-0x93 0x0093 # <control>
-0x94 0x0094 # <control>
-0x95 0x0095 # <control>
-0x96 0x0096 # <control>
-0x97 0x0097 # <control>
-0x98 0x0098 # <control>
-0x99 0x0099 # <control>
-0x9A 0x009A # <control>
-0x9B 0x009B # <control>
-0x9C 0x009C # <control>
-0x9D 0x009D # <control>
-0x9E 0x009E # <control>
-0x9F 0x009F # <control>
-0xA0 0x00A0 # NO-BREAK SPACE
-0xA1 0x2018 # LEFT SINGLE QUOTATION MARK
-0xA2 0x2019 # RIGHT SINGLE QUOTATION MARK
-0xA3 0x00A3 # POUND SIGN
-0xA4 0x20AC # EURO SIGN
-0xA5 0x20AF # DRACHMA SIGN
-0xA6 0x00A6 # BROKEN BAR
-0xA7 0x00A7 # SECTION SIGN
-0xA8 0x00A8 # DIAERESIS
-0xA9 0x00A9 # COPYRIGHT SIGN
-0xAA 0x037A # GREEK YPOGEGRAMMENI
-0xAB 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-0xAC 0x00AC # NOT SIGN
-0xAD 0x00AD # SOFT HYPHEN
-0xAF 0x2015 # HORIZONTAL BAR
-0xB0 0x00B0 # DEGREE SIGN
-0xB1 0x00B1 # PLUS-MINUS SIGN
-0xB2 0x00B2 # SUPERSCRIPT TWO
-0xB3 0x00B3 # SUPERSCRIPT THREE
-0xB4 0x0384 # GREEK TONOS
-0xB5 0x0385 # GREEK DIALYTIKA TONOS
-0xB6 0x0386 # GREEK CAPITAL LETTER ALPHA WITH TONOS
-0xB7 0x00B7 # MIDDLE DOT
-0xB8 0x0388 # GREEK CAPITAL LETTER EPSILON WITH TONOS
-0xB9 0x0389 # GREEK CAPITAL LETTER ETA WITH TONOS
-0xBA 0x038A # GREEK CAPITAL LETTER IOTA WITH TONOS
-0xBB 0x00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-0xBC 0x038C # GREEK CAPITAL LETTER OMICRON WITH TONOS
-0xBD 0x00BD # VULGAR FRACTION ONE HALF
-0xBE 0x038E # GREEK CAPITAL LETTER UPSILON WITH TONOS
-0xBF 0x038F # GREEK CAPITAL LETTER OMEGA WITH TONOS
-0xC0 0x0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
-0xC1 0x0391 # GREEK CAPITAL LETTER ALPHA
-0xC2 0x0392 # GREEK CAPITAL LETTER BETA
-0xC3 0x0393 # GREEK CAPITAL LETTER GAMMA
-0xC4 0x0394 # GREEK CAPITAL LETTER DELTA
-0xC5 0x0395 # GREEK CAPITAL LETTER EPSILON
-0xC6 0x0396 # GREEK CAPITAL LETTER ZETA
-0xC7 0x0397 # GREEK CAPITAL LETTER ETA
-0xC8 0x0398 # GREEK CAPITAL LETTER THETA
-0xC9 0x0399 # GREEK CAPITAL LETTER IOTA
-0xCA 0x039A # GREEK CAPITAL LETTER KAPPA
-0xCB 0x039B # GREEK CAPITAL LETTER LAMDA
-0xCC 0x039C # GREEK CAPITAL LETTER MU
-0xCD 0x039D # GREEK CAPITAL LETTER NU
-0xCE 0x039E # GREEK CAPITAL LETTER XI
-0xCF 0x039F # GREEK CAPITAL LETTER OMICRON
-0xD0 0x03A0 # GREEK CAPITAL LETTER PI
-0xD1 0x03A1 # GREEK CAPITAL LETTER RHO
-0xD3 0x03A3 # GREEK CAPITAL LETTER SIGMA
-0xD4 0x03A4 # GREEK CAPITAL LETTER TAU
-0xD5 0x03A5 # GREEK CAPITAL LETTER UPSILON
-0xD6 0x03A6 # GREEK CAPITAL LETTER PHI
-0xD7 0x03A7 # GREEK CAPITAL LETTER CHI
-0xD8 0x03A8 # GREEK CAPITAL LETTER PSI
-0xD9 0x03A9 # GREEK CAPITAL LETTER OMEGA
-0xDA 0x03AA # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
-0xDB 0x03AB # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
-0xDC 0x03AC # GREEK SMALL LETTER ALPHA WITH TONOS
-0xDD 0x03AD # GREEK SMALL LETTER EPSILON WITH TONOS
-0xDE 0x03AE # GREEK SMALL LETTER ETA WITH TONOS
-0xDF 0x03AF # GREEK SMALL LETTER IOTA WITH TONOS
-0xE0 0x03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
-0xE1 0x03B1 # GREEK SMALL LETTER ALPHA
-0xE2 0x03B2 # GREEK SMALL LETTER BETA
-0xE3 0x03B3 # GREEK SMALL LETTER GAMMA
-0xE4 0x03B4 # GREEK SMALL LETTER DELTA
-0xE5 0x03B5 # GREEK SMALL LETTER EPSILON
-0xE6 0x03B6 # GREEK SMALL LETTER ZETA
-0xE7 0x03B7 # GREEK SMALL LETTER ETA
-0xE8 0x03B8 # GREEK SMALL LETTER THETA
-0xE9 0x03B9 # GREEK SMALL LETTER IOTA
-0xEA 0x03BA # GREEK SMALL LETTER KAPPA
-0xEB 0x03BB # GREEK SMALL LETTER LAMDA
-0xEC 0x03BC # GREEK SMALL LETTER MU
-0xED 0x03BD # GREEK SMALL LETTER NU
-0xEE 0x03BE # GREEK SMALL LETTER XI
-0xEF 0x03BF # GREEK SMALL LETTER OMICRON
-0xF0 0x03C0 # GREEK SMALL LETTER PI
-0xF1 0x03C1 # GREEK SMALL LETTER RHO
-0xF2 0x03C2 # GREEK SMALL LETTER FINAL SIGMA
-0xF3 0x03C3 # GREEK SMALL LETTER SIGMA
-0xF4 0x03C4 # GREEK SMALL LETTER TAU
-0xF5 0x03C5 # GREEK SMALL LETTER UPSILON
-0xF6 0x03C6 # GREEK SMALL LETTER PHI
-0xF7 0x03C7 # GREEK SMALL LETTER CHI
-0xF8 0x03C8 # GREEK SMALL LETTER PSI
-0xF9 0x03C9 # GREEK SMALL LETTER OMEGA
-0xFA 0x03CA # GREEK SMALL LETTER IOTA WITH DIALYTIKA
-0xFB 0x03CB # GREEK SMALL LETTER UPSILON WITH DIALYTIKA
-0xFC 0x03CC # GREEK SMALL LETTER OMICRON WITH TONOS
-0xFD 0x03CD # GREEK SMALL LETTER UPSILON WITH TONOS
-0xFE 0x03CE # GREEK SMALL LETTER OMEGA WITH TONOS
diff --git a/program/lib/encoding/ISO-8859-8.map b/program/lib/encoding/ISO-8859-8.map
deleted file mode 100644
index bc8da4c7f..000000000
--- a/program/lib/encoding/ISO-8859-8.map
+++ /dev/null
@@ -1,270 +0,0 @@
-#
-# Name: ISO/IEC 8859-8:1999 to Unicode
-# Unicode version: 3.0
-# Table version: 1.1
-# Table format: Format A
-# Date: 2000-Jan-03
-# Authors: Ken Whistler <kenw@sybase.com>
-#
-# Copyright (c) 1991-1999 Unicode, Inc. All Rights reserved.
-#
-# This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
-# No claims are made as to fitness for any particular purpose. No
-# warranties of any kind are expressed or implied. The recipient
-# agrees to determine applicability of information provided. If this
-# file has been provided on optical media by Unicode, Inc., the sole
-# remedy for any claim will be exchange of defective media within 90
-# days of receipt.
-#
-# Unicode, Inc. hereby grants the right to freely use the information
-# supplied in this file in the creation of products supporting the
-# Unicode Standard, and to make copies of this file in any form for
-# internal or external distribution as long as this notice remains
-# attached.
-#
-# General notes:
-#
-# This table contains the data the Unicode Consortium has on how
-# ISO/IEC 8859-8:1999 characters map into Unicode.
-#
-# Format: Three tab-separated columns
-# Column #1 is the ISO/IEC 8859-8 code (in hex as 0xXX)
-# Column #2 is the Unicode (in hex as 0xXXXX)
-# Column #3 the Unicode name (follows a comment sign, '#')
-#
-# The entries are in ISO/IEC 8859-8 order.
-#
-# Version history
-# 1.0 version updates 0.1 version by adding mappings for all
-# control characters.
-# 1.1 version updates to the published 8859-8:1999, correcting
-# the mapping of 0xAF and adding mappings for LRM and RLM.
-#
-# Updated versions of this file may be found in:
-# <ftp://ftp.unicode.org/Public/MAPPINGS/>
-#
-# Any comments or problems, contact <errata@unicode.org>
-# Please note that <errata@unicode.org> is an archival address;
-# notices will be checked, but do not expect an immediate response.
-#
-0x00 0x0000 # NULL
-0x01 0x0001 # START OF HEADING
-0x02 0x0002 # START OF TEXT
-0x03 0x0003 # END OF TEXT
-0x04 0x0004 # END OF TRANSMISSION
-0x05 0x0005 # ENQUIRY
-0x06 0x0006 # ACKNOWLEDGE
-0x07 0x0007 # BELL
-0x08 0x0008 # BACKSPACE
-0x09 0x0009 # HORIZONTAL TABULATION
-0x0A 0x000A # LINE FEED
-0x0B 0x000B # VERTICAL TABULATION
-0x0C 0x000C # FORM FEED
-0x0D 0x000D # CARRIAGE RETURN
-0x0E 0x000E # SHIFT OUT
-0x0F 0x000F # SHIFT IN
-0x10 0x0010 # DATA LINK ESCAPE
-0x11 0x0011 # DEVICE CONTROL ONE
-0x12 0x0012 # DEVICE CONTROL TWO
-0x13 0x0013 # DEVICE CONTROL THREE
-0x14 0x0014 # DEVICE CONTROL FOUR
-0x15 0x0015 # NEGATIVE ACKNOWLEDGE
-0x16 0x0016 # SYNCHRONOUS IDLE
-0x17 0x0017 # END OF TRANSMISSION BLOCK
-0x18 0x0018 # CANCEL
-0x19 0x0019 # END OF MEDIUM
-0x1A 0x001A # SUBSTITUTE
-0x1B 0x001B # ESCAPE
-0x1C 0x001C # FILE SEPARATOR
-0x1D 0x001D # GROUP SEPARATOR
-0x1E 0x001E # RECORD SEPARATOR
-0x1F 0x001F # UNIT SEPARATOR
-0x20 0x0020 # SPACE
-0x21 0x0021 # EXCLAMATION MARK
-0x22 0x0022 # QUOTATION MARK
-0x23 0x0023 # NUMBER SIGN
-0x24 0x0024 # DOLLAR SIGN
-0x25 0x0025 # PERCENT SIGN
-0x26 0x0026 # AMPERSAND
-0x27 0x0027 # APOSTROPHE
-0x28 0x0028 # LEFT PARENTHESIS
-0x29 0x0029 # RIGHT PARENTHESIS
-0x2A 0x002A # ASTERISK
-0x2B 0x002B # PLUS SIGN
-0x2C 0x002C # COMMA
-0x2D 0x002D # HYPHEN-MINUS
-0x2E 0x002E # FULL STOP
-0x2F 0x002F # SOLIDUS
-0x30 0x0030 # DIGIT ZERO
-0x31 0x0031 # DIGIT ONE
-0x32 0x0032 # DIGIT TWO
-0x33 0x0033 # DIGIT THREE
-0x34 0x0034 # DIGIT FOUR
-0x35 0x0035 # DIGIT FIVE
-0x36 0x0036 # DIGIT SIX
-0x37 0x0037 # DIGIT SEVEN
-0x38 0x0038 # DIGIT EIGHT
-0x39 0x0039 # DIGIT NINE
-0x3A 0x003A # COLON
-0x3B 0x003B # SEMICOLON
-0x3C 0x003C # LESS-THAN SIGN
-0x3D 0x003D # EQUALS SIGN
-0x3E 0x003E # GREATER-THAN SIGN
-0x3F 0x003F # QUESTION MARK
-0x40 0x0040 # COMMERCIAL AT
-0x41 0x0041 # LATIN CAPITAL LETTER A
-0x42 0x0042 # LATIN CAPITAL LETTER B
-0x43 0x0043 # LATIN CAPITAL LETTER C
-0x44 0x0044 # LATIN CAPITAL LETTER D
-0x45 0x0045 # LATIN CAPITAL LETTER E
-0x46 0x0046 # LATIN CAPITAL LETTER F
-0x47 0x0047 # LATIN CAPITAL LETTER G
-0x48 0x0048 # LATIN CAPITAL LETTER H
-0x49 0x0049 # LATIN CAPITAL LETTER I
-0x4A 0x004A # LATIN CAPITAL LETTER J
-0x4B 0x004B # LATIN CAPITAL LETTER K
-0x4C 0x004C # LATIN CAPITAL LETTER L
-0x4D 0x004D # LATIN CAPITAL LETTER M
-0x4E 0x004E # LATIN CAPITAL LETTER N
-0x4F 0x004F # LATIN CAPITAL LETTER O
-0x50 0x0050 # LATIN CAPITAL LETTER P
-0x51 0x0051 # LATIN CAPITAL LETTER Q
-0x52 0x0052 # LATIN CAPITAL LETTER R
-0x53 0x0053 # LATIN CAPITAL LETTER S
-0x54 0x0054 # LATIN CAPITAL LETTER T
-0x55 0x0055 # LATIN CAPITAL LETTER U
-0x56 0x0056 # LATIN CAPITAL LETTER V
-0x57 0x0057 # LATIN CAPITAL LETTER W
-0x58 0x0058 # LATIN CAPITAL LETTER X
-0x59 0x0059 # LATIN CAPITAL LETTER Y
-0x5A 0x005A # LATIN CAPITAL LETTER Z
-0x5B 0x005B # LEFT SQUARE BRACKET
-0x5C 0x005C # REVERSE SOLIDUS
-0x5D 0x005D # RIGHT SQUARE BRACKET
-0x5E 0x005E # CIRCUMFLEX ACCENT
-0x5F 0x005F # LOW LINE
-0x60 0x0060 # GRAVE ACCENT
-0x61 0x0061 # LATIN SMALL LETTER A
-0x62 0x0062 # LATIN SMALL LETTER B
-0x63 0x0063 # LATIN SMALL LETTER C
-0x64 0x0064 # LATIN SMALL LETTER D
-0x65 0x0065 # LATIN SMALL LETTER E
-0x66 0x0066 # LATIN SMALL LETTER F
-0x67 0x0067 # LATIN SMALL LETTER G
-0x68 0x0068 # LATIN SMALL LETTER H
-0x69 0x0069 # LATIN SMALL LETTER I
-0x6A 0x006A # LATIN SMALL LETTER J
-0x6B 0x006B # LATIN SMALL LETTER K
-0x6C 0x006C # LATIN SMALL LETTER L
-0x6D 0x006D # LATIN SMALL LETTER M
-0x6E 0x006E # LATIN SMALL LETTER N
-0x6F 0x006F # LATIN SMALL LETTER O
-0x70 0x0070 # LATIN SMALL LETTER P
-0x71 0x0071 # LATIN SMALL LETTER Q
-0x72 0x0072 # LATIN SMALL LETTER R
-0x73 0x0073 # LATIN SMALL LETTER S
-0x74 0x0074 # LATIN SMALL LETTER T
-0x75 0x0075 # LATIN SMALL LETTER U
-0x76 0x0076 # LATIN SMALL LETTER V
-0x77 0x0077 # LATIN SMALL LETTER W
-0x78 0x0078 # LATIN SMALL LETTER X
-0x79 0x0079 # LATIN SMALL LETTER Y
-0x7A 0x007A # LATIN SMALL LETTER Z
-0x7B 0x007B # LEFT CURLY BRACKET
-0x7C 0x007C # VERTICAL LINE
-0x7D 0x007D # RIGHT CURLY BRACKET
-0x7E 0x007E # TILDE
-0x7F 0x007F # DELETE
-0x80 0x0080 # <control>
-0x81 0x0081 # <control>
-0x82 0x0082 # <control>
-0x83 0x0083 # <control>
-0x84 0x0084 # <control>
-0x85 0x0085 # <control>
-0x86 0x0086 # <control>
-0x87 0x0087 # <control>
-0x88 0x0088 # <control>
-0x89 0x0089 # <control>
-0x8A 0x008A # <control>
-0x8B 0x008B # <control>
-0x8C 0x008C # <control>
-0x8D 0x008D # <control>
-0x8E 0x008E # <control>
-0x8F 0x008F # <control>
-0x90 0x0090 # <control>
-0x91 0x0091 # <control>
-0x92 0x0092 # <control>
-0x93 0x0093 # <control>
-0x94 0x0094 # <control>
-0x95 0x0095 # <control>
-0x96 0x0096 # <control>
-0x97 0x0097 # <control>
-0x98 0x0098 # <control>
-0x99 0x0099 # <control>
-0x9A 0x009A # <control>
-0x9B 0x009B # <control>
-0x9C 0x009C # <control>
-0x9D 0x009D # <control>
-0x9E 0x009E # <control>
-0x9F 0x009F # <control>
-0xA0 0x00A0 # NO-BREAK SPACE
-0xA2 0x00A2 # CENT SIGN
-0xA3 0x00A3 # POUND SIGN
-0xA4 0x00A4 # CURRENCY SIGN
-0xA5 0x00A5 # YEN SIGN
-0xA6 0x00A6 # BROKEN BAR
-0xA7 0x00A7 # SECTION SIGN
-0xA8 0x00A8 # DIAERESIS
-0xA9 0x00A9 # COPYRIGHT SIGN
-0xAA 0x00D7 # MULTIPLICATION SIGN
-0xAB 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-0xAC 0x00AC # NOT SIGN
-0xAD 0x00AD # SOFT HYPHEN
-0xAE 0x00AE # REGISTERED SIGN
-0xAF 0x00AF # MACRON
-0xB0 0x00B0 # DEGREE SIGN
-0xB1 0x00B1 # PLUS-MINUS SIGN
-0xB2 0x00B2 # SUPERSCRIPT TWO
-0xB3 0x00B3 # SUPERSCRIPT THREE
-0xB4 0x00B4 # ACUTE ACCENT
-0xB5 0x00B5 # MICRO SIGN
-0xB6 0x00B6 # PILCROW SIGN
-0xB7 0x00B7 # MIDDLE DOT
-0xB8 0x00B8 # CEDILLA
-0xB9 0x00B9 # SUPERSCRIPT ONE
-0xBA 0x00F7 # DIVISION SIGN
-0xBB 0x00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-0xBC 0x00BC # VULGAR FRACTION ONE QUARTER
-0xBD 0x00BD # VULGAR FRACTION ONE HALF
-0xBE 0x00BE # VULGAR FRACTION THREE QUARTERS
-0xDF 0x2017 # DOUBLE LOW LINE
-0xE0 0x05D0 # HEBREW LETTER ALEF
-0xE1 0x05D1 # HEBREW LETTER BET
-0xE2 0x05D2 # HEBREW LETTER GIMEL
-0xE3 0x05D3 # HEBREW LETTER DALET
-0xE4 0x05D4 # HEBREW LETTER HE
-0xE5 0x05D5 # HEBREW LETTER VAV
-0xE6 0x05D6 # HEBREW LETTER ZAYIN
-0xE7 0x05D7 # HEBREW LETTER HET
-0xE8 0x05D8 # HEBREW LETTER TET
-0xE9 0x05D9 # HEBREW LETTER YOD
-0xEA 0x05DA # HEBREW LETTER FINAL KAF
-0xEB 0x05DB # HEBREW LETTER KAF
-0xEC 0x05DC # HEBREW LETTER LAMED
-0xED 0x05DD # HEBREW LETTER FINAL MEM
-0xEE 0x05DE # HEBREW LETTER MEM
-0xEF 0x05DF # HEBREW LETTER FINAL NUN
-0xF0 0x05E0 # HEBREW LETTER NUN
-0xF1 0x05E1 # HEBREW LETTER SAMEKH
-0xF2 0x05E2 # HEBREW LETTER AYIN
-0xF3 0x05E3 # HEBREW LETTER FINAL PE
-0xF4 0x05E4 # HEBREW LETTER PE
-0xF5 0x05E5 # HEBREW LETTER FINAL TSADI
-0xF6 0x05E6 # HEBREW LETTER TSADI
-0xF7 0x05E7 # HEBREW LETTER QOF
-0xF8 0x05E8 # HEBREW LETTER RESH
-0xF9 0x05E9 # HEBREW LETTER SHIN
-0xFA 0x05EA # HEBREW LETTER TAV
-0xFD 0x200E # LEFT-TO-RIGHT MARK
-0xFE 0x200F # RIGHT-TO-LEFT MARK
-
diff --git a/program/lib/encoding/ISO-8859-9.map b/program/lib/encoding/ISO-8859-9.map
deleted file mode 100644
index 22901f107..000000000
--- a/program/lib/encoding/ISO-8859-9.map
+++ /dev/null
@@ -1,307 +0,0 @@
-#
-# Name: ISO/IEC 8859-9:1999 to Unicode
-# Unicode version: 3.0
-# Table version: 1.0
-# Table format: Format A
-# Date: 1999 July 27
-# Authors: Ken Whistler <kenw@sybase.com>
-#
-# Copyright (c) 1991-1999 Unicode, Inc. All Rights reserved.
-#
-# This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
-# No claims are made as to fitness for any particular purpose. No
-# warranties of any kind are expressed or implied. The recipient
-# agrees to determine applicability of information provided. If this
-# file has been provided on magnetic media by Unicode, Inc., the sole
-# remedy for any claim will be exchange of defective media within 90
-# days of receipt.
-#
-# Unicode, Inc. hereby grants the right to freely use the information
-# supplied in this file in the creation of products supporting the
-# Unicode Standard, and to make copies of this file in any form for
-# internal or external distribution as long as this notice remains
-# attached.
-#
-# General notes:
-#
-# This table contains the data the Unicode Consortium has on how
-# ISO/IEC 8859-9:1999 characters map into Unicode.
-#
-# Format: Three tab-separated columns
-# Column #1 is the ISO/IEC 8859-9 code (in hex as 0xXX)
-# Column #2 is the Unicode (in hex as 0xXXXX)
-# Column #3 the Unicode name (follows a comment sign, '#')
-#
-# The entries are in ISO/IEC 8859-9 order.
-#
-# ISO/IEC 8859-9 is also equivalent to ISO-IR-148.
-#
-# Version history
-# 1.0 version updates 0.1 version by adding mappings for all
-# control characters.
-#
-# Updated versions of this file may be found in:
-# <ftp://ftp.unicode.org/Public/MAPPINGS/>
-#
-# Any comments or problems, contact <errata@unicode.org>
-# Please note that <errata@unicode.org> is an archival address;
-# notices will be checked, but do not expect an immediate response.
-#
-0x00 0x0000 # NULL
-0x01 0x0001 # START OF HEADING
-0x02 0x0002 # START OF TEXT
-0x03 0x0003 # END OF TEXT
-0x04 0x0004 # END OF TRANSMISSION
-0x05 0x0005 # ENQUIRY
-0x06 0x0006 # ACKNOWLEDGE
-0x07 0x0007 # BELL
-0x08 0x0008 # BACKSPACE
-0x09 0x0009 # HORIZONTAL TABULATION
-0x0A 0x000A # LINE FEED
-0x0B 0x000B # VERTICAL TABULATION
-0x0C 0x000C # FORM FEED
-0x0D 0x000D # CARRIAGE RETURN
-0x0E 0x000E # SHIFT OUT
-0x0F 0x000F # SHIFT IN
-0x10 0x0010 # DATA LINK ESCAPE
-0x11 0x0011 # DEVICE CONTROL ONE
-0x12 0x0012 # DEVICE CONTROL TWO
-0x13 0x0013 # DEVICE CONTROL THREE
-0x14 0x0014 # DEVICE CONTROL FOUR
-0x15 0x0015 # NEGATIVE ACKNOWLEDGE
-0x16 0x0016 # SYNCHRONOUS IDLE
-0x17 0x0017 # END OF TRANSMISSION BLOCK
-0x18 0x0018 # CANCEL
-0x19 0x0019 # END OF MEDIUM
-0x1A 0x001A # SUBSTITUTE
-0x1B 0x001B # ESCAPE
-0x1C 0x001C # FILE SEPARATOR
-0x1D 0x001D # GROUP SEPARATOR
-0x1E 0x001E # RECORD SEPARATOR
-0x1F 0x001F # UNIT SEPARATOR
-0x20 0x0020 # SPACE
-0x21 0x0021 # EXCLAMATION MARK
-0x22 0x0022 # QUOTATION MARK
-0x23 0x0023 # NUMBER SIGN
-0x24 0x0024 # DOLLAR SIGN
-0x25 0x0025 # PERCENT SIGN
-0x26 0x0026 # AMPERSAND
-0x27 0x0027 # APOSTROPHE
-0x28 0x0028 # LEFT PARENTHESIS
-0x29 0x0029 # RIGHT PARENTHESIS
-0x2A 0x002A # ASTERISK
-0x2B 0x002B # PLUS SIGN
-0x2C 0x002C # COMMA
-0x2D 0x002D # HYPHEN-MINUS
-0x2E 0x002E # FULL STOP
-0x2F 0x002F # SOLIDUS
-0x30 0x0030 # DIGIT ZERO
-0x31 0x0031 # DIGIT ONE
-0x32 0x0032 # DIGIT TWO
-0x33 0x0033 # DIGIT THREE
-0x34 0x0034 # DIGIT FOUR
-0x35 0x0035 # DIGIT FIVE
-0x36 0x0036 # DIGIT SIX
-0x37 0x0037 # DIGIT SEVEN
-0x38 0x0038 # DIGIT EIGHT
-0x39 0x0039 # DIGIT NINE
-0x3A 0x003A # COLON
-0x3B 0x003B # SEMICOLON
-0x3C 0x003C # LESS-THAN SIGN
-0x3D 0x003D # EQUALS SIGN
-0x3E 0x003E # GREATER-THAN SIGN
-0x3F 0x003F # QUESTION MARK
-0x40 0x0040 # COMMERCIAL AT
-0x41 0x0041 # LATIN CAPITAL LETTER A
-0x42 0x0042 # LATIN CAPITAL LETTER B
-0x43 0x0043 # LATIN CAPITAL LETTER C
-0x44 0x0044 # LATIN CAPITAL LETTER D
-0x45 0x0045 # LATIN CAPITAL LETTER E
-0x46 0x0046 # LATIN CAPITAL LETTER F
-0x47 0x0047 # LATIN CAPITAL LETTER G
-0x48 0x0048 # LATIN CAPITAL LETTER H
-0x49 0x0049 # LATIN CAPITAL LETTER I
-0x4A 0x004A # LATIN CAPITAL LETTER J
-0x4B 0x004B # LATIN CAPITAL LETTER K
-0x4C 0x004C # LATIN CAPITAL LETTER L
-0x4D 0x004D # LATIN CAPITAL LETTER M
-0x4E 0x004E # LATIN CAPITAL LETTER N
-0x4F 0x004F # LATIN CAPITAL LETTER O
-0x50 0x0050 # LATIN CAPITAL LETTER P
-0x51 0x0051 # LATIN CAPITAL LETTER Q
-0x52 0x0052 # LATIN CAPITAL LETTER R
-0x53 0x0053 # LATIN CAPITAL LETTER S
-0x54 0x0054 # LATIN CAPITAL LETTER T
-0x55 0x0055 # LATIN CAPITAL LETTER U
-0x56 0x0056 # LATIN CAPITAL LETTER V
-0x57 0x0057 # LATIN CAPITAL LETTER W
-0x58 0x0058 # LATIN CAPITAL LETTER X
-0x59 0x0059 # LATIN CAPITAL LETTER Y
-0x5A 0x005A # LATIN CAPITAL LETTER Z
-0x5B 0x005B # LEFT SQUARE BRACKET
-0x5C 0x005C # REVERSE SOLIDUS
-0x5D 0x005D # RIGHT SQUARE BRACKET
-0x5E 0x005E # CIRCUMFLEX ACCENT
-0x5F 0x005F # LOW LINE
-0x60 0x0060 # GRAVE ACCENT
-0x61 0x0061 # LATIN SMALL LETTER A
-0x62 0x0062 # LATIN SMALL LETTER B
-0x63 0x0063 # LATIN SMALL LETTER C
-0x64 0x0064 # LATIN SMALL LETTER D
-0x65 0x0065 # LATIN SMALL LETTER E
-0x66 0x0066 # LATIN SMALL LETTER F
-0x67 0x0067 # LATIN SMALL LETTER G
-0x68 0x0068 # LATIN SMALL LETTER H
-0x69 0x0069 # LATIN SMALL LETTER I
-0x6A 0x006A # LATIN SMALL LETTER J
-0x6B 0x006B # LATIN SMALL LETTER K
-0x6C 0x006C # LATIN SMALL LETTER L
-0x6D 0x006D # LATIN SMALL LETTER M
-0x6E 0x006E # LATIN SMALL LETTER N
-0x6F 0x006F # LATIN SMALL LETTER O
-0x70 0x0070 # LATIN SMALL LETTER P
-0x71 0x0071 # LATIN SMALL LETTER Q
-0x72 0x0072 # LATIN SMALL LETTER R
-0x73 0x0073 # LATIN SMALL LETTER S
-0x74 0x0074 # LATIN SMALL LETTER T
-0x75 0x0075 # LATIN SMALL LETTER U
-0x76 0x0076 # LATIN SMALL LETTER V
-0x77 0x0077 # LATIN SMALL LETTER W
-0x78 0x0078 # LATIN SMALL LETTER X
-0x79 0x0079 # LATIN SMALL LETTER Y
-0x7A 0x007A # LATIN SMALL LETTER Z
-0x7B 0x007B # LEFT CURLY BRACKET
-0x7C 0x007C # VERTICAL LINE
-0x7D 0x007D # RIGHT CURLY BRACKET
-0x7E 0x007E # TILDE
-0x7F 0x007F # DELETE
-0x80 0x0080 # <control>
-0x81 0x0081 # <control>
-0x82 0x0082 # <control>
-0x83 0x0083 # <control>
-0x84 0x0084 # <control>
-0x85 0x0085 # <control>
-0x86 0x0086 # <control>
-0x87 0x0087 # <control>
-0x88 0x0088 # <control>
-0x89 0x0089 # <control>
-0x8A 0x008A # <control>
-0x8B 0x008B # <control>
-0x8C 0x008C # <control>
-0x8D 0x008D # <control>
-0x8E 0x008E # <control>
-0x8F 0x008F # <control>
-0x90 0x0090 # <control>
-0x91 0x0091 # <control>
-0x92 0x0092 # <control>
-0x93 0x0093 # <control>
-0x94 0x0094 # <control>
-0x95 0x0095 # <control>
-0x96 0x0096 # <control>
-0x97 0x0097 # <control>
-0x98 0x0098 # <control>
-0x99 0x0099 # <control>
-0x9A 0x009A # <control>
-0x9B 0x009B # <control>
-0x9C 0x009C # <control>
-0x9D 0x009D # <control>
-0x9E 0x009E # <control>
-0x9F 0x009F # <control>
-0xA0 0x00A0 # NO-BREAK SPACE
-0xA1 0x00A1 # INVERTED EXCLAMATION MARK
-0xA2 0x00A2 # CENT SIGN
-0xA3 0x00A3 # POUND SIGN
-0xA4 0x00A4 # CURRENCY SIGN
-0xA5 0x00A5 # YEN SIGN
-0xA6 0x00A6 # BROKEN BAR
-0xA7 0x00A7 # SECTION SIGN
-0xA8 0x00A8 # DIAERESIS
-0xA9 0x00A9 # COPYRIGHT SIGN
-0xAA 0x00AA # FEMININE ORDINAL INDICATOR
-0xAB 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-0xAC 0x00AC # NOT SIGN
-0xAD 0x00AD # SOFT HYPHEN
-0xAE 0x00AE # REGISTERED SIGN
-0xAF 0x00AF # MACRON
-0xB0 0x00B0 # DEGREE SIGN
-0xB1 0x00B1 # PLUS-MINUS SIGN
-0xB2 0x00B2 # SUPERSCRIPT TWO
-0xB3 0x00B3 # SUPERSCRIPT THREE
-0xB4 0x00B4 # ACUTE ACCENT
-0xB5 0x00B5 # MICRO SIGN
-0xB6 0x00B6 # PILCROW SIGN
-0xB7 0x00B7 # MIDDLE DOT
-0xB8 0x00B8 # CEDILLA
-0xB9 0x00B9 # SUPERSCRIPT ONE
-0xBA 0x00BA # MASCULINE ORDINAL INDICATOR
-0xBB 0x00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-0xBC 0x00BC # VULGAR FRACTION ONE QUARTER
-0xBD 0x00BD # VULGAR FRACTION ONE HALF
-0xBE 0x00BE # VULGAR FRACTION THREE QUARTERS
-0xBF 0x00BF # INVERTED QUESTION MARK
-0xC0 0x00C0 # LATIN CAPITAL LETTER A WITH GRAVE
-0xC1 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE
-0xC2 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-0xC3 0x00C3 # LATIN CAPITAL LETTER A WITH TILDE
-0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
-0xC5 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE
-0xC6 0x00C6 # LATIN CAPITAL LETTER AE
-0xC7 0x00C7 # LATIN CAPITAL LETTER C WITH CEDILLA
-0xC8 0x00C8 # LATIN CAPITAL LETTER E WITH GRAVE
-0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE
-0xCA 0x00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-0xCB 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS
-0xCC 0x00CC # LATIN CAPITAL LETTER I WITH GRAVE
-0xCD 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE
-0xCE 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-0xCF 0x00CF # LATIN CAPITAL LETTER I WITH DIAERESIS
-0xD0 0x011E # LATIN CAPITAL LETTER G WITH BREVE
-0xD1 0x00D1 # LATIN CAPITAL LETTER N WITH TILDE
-0xD2 0x00D2 # LATIN CAPITAL LETTER O WITH GRAVE
-0xD3 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE
-0xD4 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-0xD5 0x00D5 # LATIN CAPITAL LETTER O WITH TILDE
-0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
-0xD7 0x00D7 # MULTIPLICATION SIGN
-0xD8 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE
-0xD9 0x00D9 # LATIN CAPITAL LETTER U WITH GRAVE
-0xDA 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE
-0xDB 0x00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
-0xDD 0x0130 # LATIN CAPITAL LETTER I WITH DOT ABOVE
-0xDE 0x015E # LATIN CAPITAL LETTER S WITH CEDILLA
-0xDF 0x00DF # LATIN SMALL LETTER SHARP S
-0xE0 0x00E0 # LATIN SMALL LETTER A WITH GRAVE
-0xE1 0x00E1 # LATIN SMALL LETTER A WITH ACUTE
-0xE2 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX
-0xE3 0x00E3 # LATIN SMALL LETTER A WITH TILDE
-0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS
-0xE5 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE
-0xE6 0x00E6 # LATIN SMALL LETTER AE
-0xE7 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA
-0xE8 0x00E8 # LATIN SMALL LETTER E WITH GRAVE
-0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE
-0xEA 0x00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX
-0xEB 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS
-0xEC 0x00EC # LATIN SMALL LETTER I WITH GRAVE
-0xED 0x00ED # LATIN SMALL LETTER I WITH ACUTE
-0xEE 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX
-0xEF 0x00EF # LATIN SMALL LETTER I WITH DIAERESIS
-0xF0 0x011F # LATIN SMALL LETTER G WITH BREVE
-0xF1 0x00F1 # LATIN SMALL LETTER N WITH TILDE
-0xF2 0x00F2 # LATIN SMALL LETTER O WITH GRAVE
-0xF3 0x00F3 # LATIN SMALL LETTER O WITH ACUTE
-0xF4 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX
-0xF5 0x00F5 # LATIN SMALL LETTER O WITH TILDE
-0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS
-0xF7 0x00F7 # DIVISION SIGN
-0xF8 0x00F8 # LATIN SMALL LETTER O WITH STROKE
-0xF9 0x00F9 # LATIN SMALL LETTER U WITH GRAVE
-0xFA 0x00FA # LATIN SMALL LETTER U WITH ACUTE
-0xFB 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX
-0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS
-0xFD 0x0131 # LATIN SMALL LETTER DOTLESS I
-0xFE 0x015F # LATIN SMALL LETTER S WITH CEDILLA
-0xFF 0x00FF # LATIN SMALL LETTER Y WITH DIAERESIS
-
-
diff --git a/program/lib/encoding/KOI8R.map b/program/lib/encoding/KOI8R.map
deleted file mode 100644
index 4a17d18e5..000000000
--- a/program/lib/encoding/KOI8R.map
+++ /dev/null
@@ -1,302 +0,0 @@
-#
-# Name: KOI8-R (RFC1489) to Unicode
-# Unicode version: 3.0
-# Table version: 1.0
-# Table format: Format A
-# Date: 18 August 1999
-# Authors: Helmut Richter <richter@lrz.de>
-#
-# Copyright (c) 1991-1999 Unicode, Inc. All Rights reserved.
-#
-# This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
-# No claims are made as to fitness for any particular purpose. No
-# warranties of any kind are expressed or implied. The recipient
-# agrees to determine applicability of information provided. If this
-# file has been provided on optical media by Unicode, Inc., the sole
-# remedy for any claim will be exchange of defective media within 90
-# days of receipt.
-#
-# Unicode, Inc. hereby grants the right to freely use the information
-# supplied in this file in the creation of products supporting the
-# Unicode Standard, and to make copies of this file in any form for
-# internal or external distribution as long as this notice remains
-# attached.
-#
-# General notes:
-#
-# This table contains the data the Unicode Consortium has on how
-# KOI8-R characters map into Unicode. The underlying document is the
-# mapping described in RFC 1489. No statements are made as to whether
-# this mapping is the same as the mapping defined as "Code Page 878"
-# with some vendors.
-#
-# Format: Three tab-separated columns
-# Column #1 is the KOI8-R code (in hex as 0xXX)
-# Column #2 is the Unicode (in hex as 0xXXXX)
-# Column #3 the Unicode name (follows a comment sign, '#')
-#
-# The entries are in KOI8-R order.
-#
-# Version history
-# 1.0 version: created.
-#
-# Any comments or problems, contact <errata@unicode.org>
-# Please note that <errata@unicode.org> is an archival address;
-# notices will be checked, but do not expect an immediate response.
-#
-0x00 0x0000 # NULL
-0x01 0x0001 # START OF HEADING
-0x02 0x0002 # START OF TEXT
-0x03 0x0003 # END OF TEXT
-0x04 0x0004 # END OF TRANSMISSION
-0x05 0x0005 # ENQUIRY
-0x06 0x0006 # ACKNOWLEDGE
-0x07 0x0007 # BELL
-0x08 0x0008 # BACKSPACE
-0x09 0x0009 # HORIZONTAL TABULATION
-0x0A 0x000A # LINE FEED
-0x0B 0x000B # VERTICAL TABULATION
-0x0C 0x000C # FORM FEED
-0x0D 0x000D # CARRIAGE RETURN
-0x0E 0x000E # SHIFT OUT
-0x0F 0x000F # SHIFT IN
-0x10 0x0010 # DATA LINK ESCAPE
-0x11 0x0011 # DEVICE CONTROL ONE
-0x12 0x0012 # DEVICE CONTROL TWO
-0x13 0x0013 # DEVICE CONTROL THREE
-0x14 0x0014 # DEVICE CONTROL FOUR
-0x15 0x0015 # NEGATIVE ACKNOWLEDGE
-0x16 0x0016 # SYNCHRONOUS IDLE
-0x17 0x0017 # END OF TRANSMISSION BLOCK
-0x18 0x0018 # CANCEL
-0x19 0x0019 # END OF MEDIUM
-0x1A 0x001A # SUBSTITUTE
-0x1B 0x001B # ESCAPE
-0x1C 0x001C # FILE SEPARATOR
-0x1D 0x001D # GROUP SEPARATOR
-0x1E 0x001E # RECORD SEPARATOR
-0x1F 0x001F # UNIT SEPARATOR
-0x20 0x0020 # SPACE
-0x21 0x0021 # EXCLAMATION MARK
-0x22 0x0022 # QUOTATION MARK
-0x23 0x0023 # NUMBER SIGN
-0x24 0x0024 # DOLLAR SIGN
-0x25 0x0025 # PERCENT SIGN
-0x26 0x0026 # AMPERSAND
-0x27 0x0027 # APOSTROPHE
-0x28 0x0028 # LEFT PARENTHESIS
-0x29 0x0029 # RIGHT PARENTHESIS
-0x2A 0x002A # ASTERISK
-0x2B 0x002B # PLUS SIGN
-0x2C 0x002C # COMMA
-0x2D 0x002D # HYPHEN-MINUS
-0x2E 0x002E # FULL STOP
-0x2F 0x002F # SOLIDUS
-0x30 0x0030 # DIGIT ZERO
-0x31 0x0031 # DIGIT ONE
-0x32 0x0032 # DIGIT TWO
-0x33 0x0033 # DIGIT THREE
-0x34 0x0034 # DIGIT FOUR
-0x35 0x0035 # DIGIT FIVE
-0x36 0x0036 # DIGIT SIX
-0x37 0x0037 # DIGIT SEVEN
-0x38 0x0038 # DIGIT EIGHT
-0x39 0x0039 # DIGIT NINE
-0x3A 0x003A # COLON
-0x3B 0x003B # SEMICOLON
-0x3C 0x003C # LESS-THAN SIGN
-0x3D 0x003D # EQUALS SIGN
-0x3E 0x003E # GREATER-THAN SIGN
-0x3F 0x003F # QUESTION MARK
-0x40 0x0040 # COMMERCIAL AT
-0x41 0x0041 # LATIN CAPITAL LETTER A
-0x42 0x0042 # LATIN CAPITAL LETTER B
-0x43 0x0043 # LATIN CAPITAL LETTER C
-0x44 0x0044 # LATIN CAPITAL LETTER D
-0x45 0x0045 # LATIN CAPITAL LETTER E
-0x46 0x0046 # LATIN CAPITAL LETTER F
-0x47 0x0047 # LATIN CAPITAL LETTER G
-0x48 0x0048 # LATIN CAPITAL LETTER H
-0x49 0x0049 # LATIN CAPITAL LETTER I
-0x4A 0x004A # LATIN CAPITAL LETTER J
-0x4B 0x004B # LATIN CAPITAL LETTER K
-0x4C 0x004C # LATIN CAPITAL LETTER L
-0x4D 0x004D # LATIN CAPITAL LETTER M
-0x4E 0x004E # LATIN CAPITAL LETTER N
-0x4F 0x004F # LATIN CAPITAL LETTER O
-0x50 0x0050 # LATIN CAPITAL LETTER P
-0x51 0x0051 # LATIN CAPITAL LETTER Q
-0x52 0x0052 # LATIN CAPITAL LETTER R
-0x53 0x0053 # LATIN CAPITAL LETTER S
-0x54 0x0054 # LATIN CAPITAL LETTER T
-0x55 0x0055 # LATIN CAPITAL LETTER U
-0x56 0x0056 # LATIN CAPITAL LETTER V
-0x57 0x0057 # LATIN CAPITAL LETTER W
-0x58 0x0058 # LATIN CAPITAL LETTER X
-0x59 0x0059 # LATIN CAPITAL LETTER Y
-0x5A 0x005A # LATIN CAPITAL LETTER Z
-0x5B 0x005B # LEFT SQUARE BRACKET
-0x5C 0x005C # REVERSE SOLIDUS
-0x5D 0x005D # RIGHT SQUARE BRACKET
-0x5E 0x005E # CIRCUMFLEX ACCENT
-0x5F 0x005F # LOW LINE
-0x60 0x0060 # GRAVE ACCENT
-0x61 0x0061 # LATIN SMALL LETTER A
-0x62 0x0062 # LATIN SMALL LETTER B
-0x63 0x0063 # LATIN SMALL LETTER C
-0x64 0x0064 # LATIN SMALL LETTER D
-0x65 0x0065 # LATIN SMALL LETTER E
-0x66 0x0066 # LATIN SMALL LETTER F
-0x67 0x0067 # LATIN SMALL LETTER G
-0x68 0x0068 # LATIN SMALL LETTER H
-0x69 0x0069 # LATIN SMALL LETTER I
-0x6A 0x006A # LATIN SMALL LETTER J
-0x6B 0x006B # LATIN SMALL LETTER K
-0x6C 0x006C # LATIN SMALL LETTER L
-0x6D 0x006D # LATIN SMALL LETTER M
-0x6E 0x006E # LATIN SMALL LETTER N
-0x6F 0x006F # LATIN SMALL LETTER O
-0x70 0x0070 # LATIN SMALL LETTER P
-0x71 0x0071 # LATIN SMALL LETTER Q
-0x72 0x0072 # LATIN SMALL LETTER R
-0x73 0x0073 # LATIN SMALL LETTER S
-0x74 0x0074 # LATIN SMALL LETTER T
-0x75 0x0075 # LATIN SMALL LETTER U
-0x76 0x0076 # LATIN SMALL LETTER V
-0x77 0x0077 # LATIN SMALL LETTER W
-0x78 0x0078 # LATIN SMALL LETTER X
-0x79 0x0079 # LATIN SMALL LETTER Y
-0x7A 0x007A # LATIN SMALL LETTER Z
-0x7B 0x007B # LEFT CURLY BRACKET
-0x7C 0x007C # VERTICAL LINE
-0x7D 0x007D # RIGHT CURLY BRACKET
-0x7E 0x007E # TILDE
-0x7F 0x007F # DELETE
-0x80 0x2500 # BOX DRAWINGS LIGHT HORIZONTAL
-0x81 0x2502 # BOX DRAWINGS LIGHT VERTICAL
-0x82 0x250C # BOX DRAWINGS LIGHT DOWN AND RIGHT
-0x83 0x2510 # BOX DRAWINGS LIGHT DOWN AND LEFT
-0x84 0x2514 # BOX DRAWINGS LIGHT UP AND RIGHT
-0x85 0x2518 # BOX DRAWINGS LIGHT UP AND LEFT
-0x86 0x251C # BOX DRAWINGS LIGHT VERTICAL AND RIGHT
-0x87 0x2524 # BOX DRAWINGS LIGHT VERTICAL AND LEFT
-0x88 0x252C # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
-0x89 0x2534 # BOX DRAWINGS LIGHT UP AND HORIZONTAL
-0x8A 0x253C # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
-0x8B 0x2580 # UPPER HALF BLOCK
-0x8C 0x2584 # LOWER HALF BLOCK
-0x8D 0x2588 # FULL BLOCK
-0x8E 0x258C # LEFT HALF BLOCK
-0x8F 0x2590 # RIGHT HALF BLOCK
-0x90 0x2591 # LIGHT SHADE
-0x91 0x2592 # MEDIUM SHADE
-0x92 0x2593 # DARK SHADE
-0x93 0x2320 # TOP HALF INTEGRAL
-0x94 0x25A0 # BLACK SQUARE
-0x95 0x2219 # BULLET OPERATOR
-0x96 0x221A # SQUARE ROOT
-0x97 0x2248 # ALMOST EQUAL TO
-0x98 0x2264 # LESS-THAN OR EQUAL TO
-0x99 0x2265 # GREATER-THAN OR EQUAL TO
-0x9A 0x00A0 # NO-BREAK SPACE
-0x9B 0x2321 # BOTTOM HALF INTEGRAL
-0x9C 0x00B0 # DEGREE SIGN
-0x9D 0x00B2 # SUPERSCRIPT TWO
-0x9E 0x00B7 # MIDDLE DOT
-0x9F 0x00F7 # DIVISION SIGN
-0xA0 0x2550 # BOX DRAWINGS DOUBLE HORIZONTAL
-0xA1 0x2551 # BOX DRAWINGS DOUBLE VERTICAL
-0xA2 0x2552 # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
-0xA3 0x0451 # CYRILLIC SMALL LETTER IO
-0xA4 0x2553 # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
-0xA5 0x2554 # BOX DRAWINGS DOUBLE DOWN AND RIGHT
-0xA6 0x2555 # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
-0xA7 0x2556 # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
-0xA8 0x2557 # BOX DRAWINGS DOUBLE DOWN AND LEFT
-0xA9 0x2558 # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
-0xAA 0x2559 # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
-0xAB 0x255A # BOX DRAWINGS DOUBLE UP AND RIGHT
-0xAC 0x255B # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
-0xAD 0x255C # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
-0xAE 0x255D # BOX DRAWINGS DOUBLE UP AND LEFT
-0xAF 0x255E # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
-0xB0 0x255F # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
-0xB1 0x2560 # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
-0xB2 0x2561 # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
-0xB3 0x0401 # CYRILLIC CAPITAL LETTER IO
-0xB4 0x2562 # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
-0xB5 0x2563 # BOX DRAWINGS DOUBLE VERTICAL AND LEFT
-0xB6 0x2564 # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
-0xB7 0x2565 # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
-0xB8 0x2566 # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
-0xB9 0x2567 # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
-0xBA 0x2568 # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
-0xBB 0x2569 # BOX DRAWINGS DOUBLE UP AND HORIZONTAL
-0xBC 0x256A # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
-0xBD 0x256B # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
-0xBE 0x256C # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
-0xBF 0x00A9 # COPYRIGHT SIGN
-0xC0 0x044E # CYRILLIC SMALL LETTER YU
-0xC1 0x0430 # CYRILLIC SMALL LETTER A
-0xC2 0x0431 # CYRILLIC SMALL LETTER BE
-0xC3 0x0446 # CYRILLIC SMALL LETTER TSE
-0xC4 0x0434 # CYRILLIC SMALL LETTER DE
-0xC5 0x0435 # CYRILLIC SMALL LETTER IE
-0xC6 0x0444 # CYRILLIC SMALL LETTER EF
-0xC7 0x0433 # CYRILLIC SMALL LETTER GHE
-0xC8 0x0445 # CYRILLIC SMALL LETTER HA
-0xC9 0x0438 # CYRILLIC SMALL LETTER I
-0xCA 0x0439 # CYRILLIC SMALL LETTER SHORT I
-0xCB 0x043A # CYRILLIC SMALL LETTER KA
-0xCC 0x043B # CYRILLIC SMALL LETTER EL
-0xCD 0x043C # CYRILLIC SMALL LETTER EM
-0xCE 0x043D # CYRILLIC SMALL LETTER EN
-0xCF 0x043E # CYRILLIC SMALL LETTER O
-0xD0 0x043F # CYRILLIC SMALL LETTER PE
-0xD1 0x044F # CYRILLIC SMALL LETTER YA
-0xD2 0x0440 # CYRILLIC SMALL LETTER ER
-0xD3 0x0441 # CYRILLIC SMALL LETTER ES
-0xD4 0x0442 # CYRILLIC SMALL LETTER TE
-0xD5 0x0443 # CYRILLIC SMALL LETTER U
-0xD6 0x0436 # CYRILLIC SMALL LETTER ZHE
-0xD7 0x0432 # CYRILLIC SMALL LETTER VE
-0xD8 0x044C # CYRILLIC SMALL LETTER SOFT SIGN
-0xD9 0x044B # CYRILLIC SMALL LETTER YERU
-0xDA 0x0437 # CYRILLIC SMALL LETTER ZE
-0xDB 0x0448 # CYRILLIC SMALL LETTER SHA
-0xDC 0x044D # CYRILLIC SMALL LETTER E
-0xDD 0x0449 # CYRILLIC SMALL LETTER SHCHA
-0xDE 0x0447 # CYRILLIC SMALL LETTER CHE
-0xDF 0x044A # CYRILLIC SMALL LETTER HARD SIGN
-0xE0 0x042E # CYRILLIC CAPITAL LETTER YU
-0xE1 0x0410 # CYRILLIC CAPITAL LETTER A
-0xE2 0x0411 # CYRILLIC CAPITAL LETTER BE
-0xE3 0x0426 # CYRILLIC CAPITAL LETTER TSE
-0xE4 0x0414 # CYRILLIC CAPITAL LETTER DE
-0xE5 0x0415 # CYRILLIC CAPITAL LETTER IE
-0xE6 0x0424 # CYRILLIC CAPITAL LETTER EF
-0xE7 0x0413 # CYRILLIC CAPITAL LETTER GHE
-0xE8 0x0425 # CYRILLIC CAPITAL LETTER HA
-0xE9 0x0418 # CYRILLIC CAPITAL LETTER I
-0xEA 0x0419 # CYRILLIC CAPITAL LETTER SHORT I
-0xEB 0x041A # CYRILLIC CAPITAL LETTER KA
-0xEC 0x041B # CYRILLIC CAPITAL LETTER EL
-0xED 0x041C # CYRILLIC CAPITAL LETTER EM
-0xEE 0x041D # CYRILLIC CAPITAL LETTER EN
-0xEF 0x041E # CYRILLIC CAPITAL LETTER O
-0xF0 0x041F # CYRILLIC CAPITAL LETTER PE
-0xF1 0x042F # CYRILLIC CAPITAL LETTER YA
-0xF2 0x0420 # CYRILLIC CAPITAL LETTER ER
-0xF3 0x0421 # CYRILLIC CAPITAL LETTER ES
-0xF4 0x0422 # CYRILLIC CAPITAL LETTER TE
-0xF5 0x0423 # CYRILLIC CAPITAL LETTER U
-0xF6 0x0416 # CYRILLIC CAPITAL LETTER ZHE
-0xF7 0x0412 # CYRILLIC CAPITAL LETTER VE
-0xF8 0x042C # CYRILLIC CAPITAL LETTER SOFT SIGN
-0xF9 0x042B # CYRILLIC CAPITAL LETTER YERU
-0xFA 0x0417 # CYRILLIC CAPITAL LETTER ZE
-0xFB 0x0428 # CYRILLIC CAPITAL LETTER SHA
-0xFC 0x042D # CYRILLIC CAPITAL LETTER E
-0xFD 0x0429 # CYRILLIC CAPITAL LETTER SHCHA
-0xFE 0x0427 # CYRILLIC CAPITAL LETTER CHE
-0xFF 0x042A # CYRILLIC CAPITAL LETTER HARD SIGN \ No newline at end of file
diff --git a/program/lib/encoding/KSC5601.map b/program/lib/encoding/KSC5601.map
deleted file mode 100644
index 83a5ce77b..000000000
--- a/program/lib/encoding/KSC5601.map
+++ /dev/null
@@ -1,17078 +0,0 @@
-#
-# Name: Unified Hangeul(KSC5601-1992) to Unicode table
-# Unicode version: 2.0
-# Table version: 1.0
-# Table format: Format A
-# Date: 07/24/95
-#
-# This table contains one set of mappings from KSC5601-1992 into Unicode.
-# Note that these data are *possible* mappings only and may not be the
-# same as those used by actual products, nor may they be the best suited
-# for all uses. For more information on the mappings between various code
-# pages incorporating the repertoire of KSC5601-1992 and Unicode, consult the
-# VENDORS mapping data. Normative information on the mapping between
-# KSC5601-1992 and Unicode may be found in the Unihan.txt file in the
-# latest Unicode Character Database.
-#
-# If you have carefully considered the fact that the mappings in
-# this table are only one possible set of mappings between KSC5601-1992 and
-# Unicode and have no normative status, but still feel that you
-# have located an error in the table that requires fixing, you may
-# report any such error to errata@unicode.org.
-#
-#
-# Format: Three tab-separated columns
-# Column #1 is the Unified Hangeul code (in hex)
-# Column #2 is the Unicode (in hex as 0xXXXX)
-# Column #3 is the Unicode name (follows a comment sign, '#')
-#
-# The entries are in Unified Hangeul order
-#
-0x8141 0xAC02 # HANGUL SYLLABLE KIYEOK-A-SSANGKIYEOK
-0x8142 0xAC03 # HANGUL SYLLABLE KIYEOK-A-KIYEOKSIOS
-0x8143 0xAC05 # HANGUL SYLLABLE KIYEOK-A-NIEUNCIEUC
-0x8144 0xAC06 # HANGUL SYLLABLE KIYEOK-A-NIEUNHIEUH
-0x8145 0xAC0B # HANGUL SYLLABLE KIYEOK-A-RIEULPIEUP
-0x8146 0xAC0C # HANGUL SYLLABLE KIYEOK-A-RIEULSIOS
-0x8147 0xAC0D # HANGUL SYLLABLE KIYEOK-A-RIEULTHIEUTH
-0x8148 0xAC0E # HANGUL SYLLABLE KIYEOK-A-RIEULPHIEUPH
-0x8149 0xAC0F # HANGUL SYLLABLE KIYEOK-A-RIEULHIEUH
-0x814A 0xAC18 # HANGUL SYLLABLE KIYEOK-A-KHIEUKH
-0x814B 0xAC1E # HANGUL SYLLABLE KIYEOK-AE-SSANGKIYEOK
-0x814C 0xAC1F # HANGUL SYLLABLE KIYEOK-AE-KIYEOKSIOS
-0x814D 0xAC21 # HANGUL SYLLABLE KIYEOK-AE-NIEUNCIEUC
-0x814E 0xAC22 # HANGUL SYLLABLE KIYEOK-AE-NIEUNHIEUH
-0x814F 0xAC23 # HANGUL SYLLABLE KIYEOK-AE-TIKEUT
-0x8150 0xAC25 # HANGUL SYLLABLE KIYEOK-AE-RIEULKIYEOK
-0x8151 0xAC26 # HANGUL SYLLABLE KIYEOK-AE-RIEULMIEUM
-0x8152 0xAC27 # HANGUL SYLLABLE KIYEOK-AE-RIEULPIEUP
-0x8153 0xAC28 # HANGUL SYLLABLE KIYEOK-AE-RIEULSIOS
-0x8154 0xAC29 # HANGUL SYLLABLE KIYEOK-AE-RIEULTHIEUTH
-0x8155 0xAC2A # HANGUL SYLLABLE KIYEOK-AE-RIEULPHIEUPH
-0x8156 0xAC2B # HANGUL SYLLABLE KIYEOK-AE-RIEULHIEUH
-0x8157 0xAC2E # HANGUL SYLLABLE KIYEOK-AE-PIEUPSIOS
-0x8158 0xAC32 # HANGUL SYLLABLE KIYEOK-AE-CIEUC
-0x8159 0xAC33 # HANGUL SYLLABLE KIYEOK-AE-CHIEUCH
-0x815A 0xAC34 # HANGUL SYLLABLE KIYEOK-AE-KHIEUKH
-0x8161 0xAC35 # HANGUL SYLLABLE KIYEOK-AE-THIEUTH
-0x8162 0xAC36 # HANGUL SYLLABLE KIYEOK-AE-PHIEUPH
-0x8163 0xAC37 # HANGUL SYLLABLE KIYEOK-AE-HIEUH
-0x8164 0xAC3A # HANGUL SYLLABLE KIYEOK-YA-SSANGKIYEOK
-0x8165 0xAC3B # HANGUL SYLLABLE KIYEOK-YA-KIYEOKSIOS
-0x8166 0xAC3D # HANGUL SYLLABLE KIYEOK-YA-NIEUNCIEUC
-0x8167 0xAC3E # HANGUL SYLLABLE KIYEOK-YA-NIEUNHIEUH
-0x8168 0xAC3F # HANGUL SYLLABLE KIYEOK-YA-TIKEUT
-0x8169 0xAC41 # HANGUL SYLLABLE KIYEOK-YA-RIEULKIYEOK
-0x816A 0xAC42 # HANGUL SYLLABLE KIYEOK-YA-RIEULMIEUM
-0x816B 0xAC43 # HANGUL SYLLABLE KIYEOK-YA-RIEULPIEUP
-0x816C 0xAC44 # HANGUL SYLLABLE KIYEOK-YA-RIEULSIOS
-0x816D 0xAC45 # HANGUL SYLLABLE KIYEOK-YA-RIEULTHIEUTH
-0x816E 0xAC46 # HANGUL SYLLABLE KIYEOK-YA-RIEULPHIEUPH
-0x816F 0xAC47 # HANGUL SYLLABLE KIYEOK-YA-RIEULHIEUH
-0x8170 0xAC48 # HANGUL SYLLABLE KIYEOK-YA-MIEUM
-0x8171 0xAC49 # HANGUL SYLLABLE KIYEOK-YA-PIEUP
-0x8172 0xAC4A # HANGUL SYLLABLE KIYEOK-YA-PIEUPSIOS
-0x8173 0xAC4C # HANGUL SYLLABLE KIYEOK-YA-SSANGSIOS
-0x8174 0xAC4E # HANGUL SYLLABLE KIYEOK-YA-CIEUC
-0x8175 0xAC4F # HANGUL SYLLABLE KIYEOK-YA-CHIEUCH
-0x8176 0xAC50 # HANGUL SYLLABLE KIYEOK-YA-KHIEUKH
-0x8177 0xAC51 # HANGUL SYLLABLE KIYEOK-YA-THIEUTH
-0x8178 0xAC52 # HANGUL SYLLABLE KIYEOK-YA-PHIEUPH
-0x8179 0xAC53 # HANGUL SYLLABLE KIYEOK-YA-HIEUH
-0x817A 0xAC55 # HANGUL SYLLABLE KIYEOK-YAE-KIYEOK
-0x8181 0xAC56 # HANGUL SYLLABLE KIYEOK-YAE-SSANGKIYEOK
-0x8182 0xAC57 # HANGUL SYLLABLE KIYEOK-YAE-KIYEOKSIOS
-0x8183 0xAC59 # HANGUL SYLLABLE KIYEOK-YAE-NIEUNCIEUC
-0x8184 0xAC5A # HANGUL SYLLABLE KIYEOK-YAE-NIEUNHIEUH
-0x8185 0xAC5B # HANGUL SYLLABLE KIYEOK-YAE-TIKEUT
-0x8186 0xAC5D # HANGUL SYLLABLE KIYEOK-YAE-RIEULKIYEOK
-0x8187 0xAC5E # HANGUL SYLLABLE KIYEOK-YAE-RIEULMIEUM
-0x8188 0xAC5F # HANGUL SYLLABLE KIYEOK-YAE-RIEULPIEUP
-0x8189 0xAC60 # HANGUL SYLLABLE KIYEOK-YAE-RIEULSIOS
-0x818A 0xAC61 # HANGUL SYLLABLE KIYEOK-YAE-RIEULTHIEUTH
-0x818B 0xAC62 # HANGUL SYLLABLE KIYEOK-YAE-RIEULPHIEUPH
-0x818C 0xAC63 # HANGUL SYLLABLE KIYEOK-YAE-RIEULHIEUH
-0x818D 0xAC64 # HANGUL SYLLABLE KIYEOK-YAE-MIEUM
-0x818E 0xAC65 # HANGUL SYLLABLE KIYEOK-YAE-PIEUP
-0x818F 0xAC66 # HANGUL SYLLABLE KIYEOK-YAE-PIEUPSIOS
-0x8190 0xAC67 # HANGUL SYLLABLE KIYEOK-YAE-SIOS
-0x8191 0xAC68 # HANGUL SYLLABLE KIYEOK-YAE-SSANGSIOS
-0x8192 0xAC69 # HANGUL SYLLABLE KIYEOK-YAE-IEUNG
-0x8193 0xAC6A # HANGUL SYLLABLE KIYEOK-YAE-CIEUC
-0x8194 0xAC6B # HANGUL SYLLABLE KIYEOK-YAE-CHIEUCH
-0x8195 0xAC6C # HANGUL SYLLABLE KIYEOK-YAE-KHIEUKH
-0x8196 0xAC6D # HANGUL SYLLABLE KIYEOK-YAE-THIEUTH
-0x8197 0xAC6E # HANGUL SYLLABLE KIYEOK-YAE-PHIEUPH
-0x8198 0xAC6F # HANGUL SYLLABLE KIYEOK-YAE-HIEUH
-0x8199 0xAC72 # HANGUL SYLLABLE KIYEOK-EO-SSANGKIYEOK
-0x819A 0xAC73 # HANGUL SYLLABLE KIYEOK-EO-KIYEOKSIOS
-0x819B 0xAC75 # HANGUL SYLLABLE KIYEOK-EO-NIEUNCIEUC
-0x819C 0xAC76 # HANGUL SYLLABLE KIYEOK-EO-NIEUNHIEUH
-0x819D 0xAC79 # HANGUL SYLLABLE KIYEOK-EO-RIEULKIYEOK
-0x819E 0xAC7B # HANGUL SYLLABLE KIYEOK-EO-RIEULPIEUP
-0x819F 0xAC7C # HANGUL SYLLABLE KIYEOK-EO-RIEULSIOS
-0x81A0 0xAC7D # HANGUL SYLLABLE KIYEOK-EO-RIEULTHIEUTH
-0x81A1 0xAC7E # HANGUL SYLLABLE KIYEOK-EO-RIEULPHIEUPH
-0x81A2 0xAC7F # HANGUL SYLLABLE KIYEOK-EO-RIEULHIEUH
-0x81A3 0xAC82 # HANGUL SYLLABLE KIYEOK-EO-PIEUPSIOS
-0x81A4 0xAC87 # HANGUL SYLLABLE KIYEOK-EO-CHIEUCH
-0x81A5 0xAC88 # HANGUL SYLLABLE KIYEOK-EO-KHIEUKH
-0x81A6 0xAC8D # HANGUL SYLLABLE KIYEOK-E-KIYEOK
-0x81A7 0xAC8E # HANGUL SYLLABLE KIYEOK-E-SSANGKIYEOK
-0x81A8 0xAC8F # HANGUL SYLLABLE KIYEOK-E-KIYEOKSIOS
-0x81A9 0xAC91 # HANGUL SYLLABLE KIYEOK-E-NIEUNCIEUC
-0x81AA 0xAC92 # HANGUL SYLLABLE KIYEOK-E-NIEUNHIEUH
-0x81AB 0xAC93 # HANGUL SYLLABLE KIYEOK-E-TIKEUT
-0x81AC 0xAC95 # HANGUL SYLLABLE KIYEOK-E-RIEULKIYEOK
-0x81AD 0xAC96 # HANGUL SYLLABLE KIYEOK-E-RIEULMIEUM
-0x81AE 0xAC97 # HANGUL SYLLABLE KIYEOK-E-RIEULPIEUP
-0x81AF 0xAC98 # HANGUL SYLLABLE KIYEOK-E-RIEULSIOS
-0x81B0 0xAC99 # HANGUL SYLLABLE KIYEOK-E-RIEULTHIEUTH
-0x81B1 0xAC9A # HANGUL SYLLABLE KIYEOK-E-RIEULPHIEUPH
-0x81B2 0xAC9B # HANGUL SYLLABLE KIYEOK-E-RIEULHIEUH
-0x81B3 0xAC9E # HANGUL SYLLABLE KIYEOK-E-PIEUPSIOS
-0x81B4 0xACA2 # HANGUL SYLLABLE KIYEOK-E-CIEUC
-0x81B5 0xACA3 # HANGUL SYLLABLE KIYEOK-E-CHIEUCH
-0x81B6 0xACA4 # HANGUL SYLLABLE KIYEOK-E-KHIEUKH
-0x81B7 0xACA5 # HANGUL SYLLABLE KIYEOK-E-THIEUTH
-0x81B8 0xACA6 # HANGUL SYLLABLE KIYEOK-E-PHIEUPH
-0x81B9 0xACA7 # HANGUL SYLLABLE KIYEOK-E-HIEUH
-0x81BA 0xACAB # HANGUL SYLLABLE KIYEOK-YEO-KIYEOKSIOS
-0x81BB 0xACAD # HANGUL SYLLABLE KIYEOK-YEO-NIEUNCIEUC
-0x81BC 0xACAE # HANGUL SYLLABLE KIYEOK-YEO-NIEUNHIEUH
-0x81BD 0xACB1 # HANGUL SYLLABLE KIYEOK-YEO-RIEULKIYEOK
-0x81BE 0xACB2 # HANGUL SYLLABLE KIYEOK-YEO-RIEULMIEUM
-0x81BF 0xACB3 # HANGUL SYLLABLE KIYEOK-YEO-RIEULPIEUP
-0x81C0 0xACB4 # HANGUL SYLLABLE KIYEOK-YEO-RIEULSIOS
-0x81C1 0xACB5 # HANGUL SYLLABLE KIYEOK-YEO-RIEULTHIEUTH
-0x81C2 0xACB6 # HANGUL SYLLABLE KIYEOK-YEO-RIEULPHIEUPH
-0x81C3 0xACB7 # HANGUL SYLLABLE KIYEOK-YEO-RIEULHIEUH
-0x81C4 0xACBA # HANGUL SYLLABLE KIYEOK-YEO-PIEUPSIOS
-0x81C5 0xACBE # HANGUL SYLLABLE KIYEOK-YEO-CIEUC
-0x81C6 0xACBF # HANGUL SYLLABLE KIYEOK-YEO-CHIEUCH
-0x81C7 0xACC0 # HANGUL SYLLABLE KIYEOK-YEO-KHIEUKH
-0x81C8 0xACC2 # HANGUL SYLLABLE KIYEOK-YEO-PHIEUPH
-0x81C9 0xACC3 # HANGUL SYLLABLE KIYEOK-YEO-HIEUH
-0x81CA 0xACC5 # HANGUL SYLLABLE KIYEOK-YE-KIYEOK
-0x81CB 0xACC6 # HANGUL SYLLABLE KIYEOK-YE-SSANGKIYEOK
-0x81CC 0xACC7 # HANGUL SYLLABLE KIYEOK-YE-KIYEOKSIOS
-0x81CD 0xACC9 # HANGUL SYLLABLE KIYEOK-YE-NIEUNCIEUC
-0x81CE 0xACCA # HANGUL SYLLABLE KIYEOK-YE-NIEUNHIEUH
-0x81CF 0xACCB # HANGUL SYLLABLE KIYEOK-YE-TIKEUT
-0x81D0 0xACCD # HANGUL SYLLABLE KIYEOK-YE-RIEULKIYEOK
-0x81D1 0xACCE # HANGUL SYLLABLE KIYEOK-YE-RIEULMIEUM
-0x81D2 0xACCF # HANGUL SYLLABLE KIYEOK-YE-RIEULPIEUP
-0x81D3 0xACD0 # HANGUL SYLLABLE KIYEOK-YE-RIEULSIOS
-0x81D4 0xACD1 # HANGUL SYLLABLE KIYEOK-YE-RIEULTHIEUTH
-0x81D5 0xACD2 # HANGUL SYLLABLE KIYEOK-YE-RIEULPHIEUPH
-0x81D6 0xACD3 # HANGUL SYLLABLE KIYEOK-YE-RIEULHIEUH
-0x81D7 0xACD4 # HANGUL SYLLABLE KIYEOK-YE-MIEUM
-0x81D8 0xACD6 # HANGUL SYLLABLE KIYEOK-YE-PIEUPSIOS
-0x81D9 0xACD8 # HANGUL SYLLABLE KIYEOK-YE-SSANGSIOS
-0x81DA 0xACD9 # HANGUL SYLLABLE KIYEOK-YE-IEUNG
-0x81DB 0xACDA # HANGUL SYLLABLE KIYEOK-YE-CIEUC
-0x81DC 0xACDB # HANGUL SYLLABLE KIYEOK-YE-CHIEUCH
-0x81DD 0xACDC # HANGUL SYLLABLE KIYEOK-YE-KHIEUKH
-0x81DE 0xACDD # HANGUL SYLLABLE KIYEOK-YE-THIEUTH
-0x81DF 0xACDE # HANGUL SYLLABLE KIYEOK-YE-PHIEUPH
-0x81E0 0xACDF # HANGUL SYLLABLE KIYEOK-YE-HIEUH
-0x81E1 0xACE2 # HANGUL SYLLABLE KIYEOK-O-SSANGKIYEOK
-0x81E2 0xACE3 # HANGUL SYLLABLE KIYEOK-O-KIYEOKSIOS
-0x81E3 0xACE5 # HANGUL SYLLABLE KIYEOK-O-NIEUNCIEUC
-0x81E4 0xACE6 # HANGUL SYLLABLE KIYEOK-O-NIEUNHIEUH
-0x81E5 0xACE9 # HANGUL SYLLABLE KIYEOK-O-RIEULKIYEOK
-0x81E6 0xACEB # HANGUL SYLLABLE KIYEOK-O-RIEULPIEUP
-0x81E7 0xACED # HANGUL SYLLABLE KIYEOK-O-RIEULTHIEUTH
-0x81E8 0xACEE # HANGUL SYLLABLE KIYEOK-O-RIEULPHIEUPH
-0x81E9 0xACF2 # HANGUL SYLLABLE KIYEOK-O-PIEUPSIOS
-0x81EA 0xACF4 # HANGUL SYLLABLE KIYEOK-O-SSANGSIOS
-0x81EB 0xACF7 # HANGUL SYLLABLE KIYEOK-O-CHIEUCH
-0x81EC 0xACF8 # HANGUL SYLLABLE KIYEOK-O-KHIEUKH
-0x81ED 0xACF9 # HANGUL SYLLABLE KIYEOK-O-THIEUTH
-0x81EE 0xACFA # HANGUL SYLLABLE KIYEOK-O-PHIEUPH
-0x81EF 0xACFB # HANGUL SYLLABLE KIYEOK-O-HIEUH
-0x81F0 0xACFE # HANGUL SYLLABLE KIYEOK-WA-SSANGKIYEOK
-0x81F1 0xACFF # HANGUL SYLLABLE KIYEOK-WA-KIYEOKSIOS
-0x81F2 0xAD01 # HANGUL SYLLABLE KIYEOK-WA-NIEUNCIEUC
-0x81F3 0xAD02 # HANGUL SYLLABLE KIYEOK-WA-NIEUNHIEUH
-0x81F4 0xAD03 # HANGUL SYLLABLE KIYEOK-WA-TIKEUT
-0x81F5 0xAD05 # HANGUL SYLLABLE KIYEOK-WA-RIEULKIYEOK
-0x81F6 0xAD07 # HANGUL SYLLABLE KIYEOK-WA-RIEULPIEUP
-0x81F7 0xAD08 # HANGUL SYLLABLE KIYEOK-WA-RIEULSIOS
-0x81F8 0xAD09 # HANGUL SYLLABLE KIYEOK-WA-RIEULTHIEUTH
-0x81F9 0xAD0A # HANGUL SYLLABLE KIYEOK-WA-RIEULPHIEUPH
-0x81FA 0xAD0B # HANGUL SYLLABLE KIYEOK-WA-RIEULHIEUH
-0x81FB 0xAD0E # HANGUL SYLLABLE KIYEOK-WA-PIEUPSIOS
-0x81FC 0xAD10 # HANGUL SYLLABLE KIYEOK-WA-SSANGSIOS
-0x81FD 0xAD12 # HANGUL SYLLABLE KIYEOK-WA-CIEUC
-0x81FE 0xAD13 # HANGUL SYLLABLE KIYEOK-WA-CHIEUCH
-0x8241 0xAD14 # HANGUL SYLLABLE KIYEOK-WA-KHIEUKH
-0x8242 0xAD15 # HANGUL SYLLABLE KIYEOK-WA-THIEUTH
-0x8243 0xAD16 # HANGUL SYLLABLE KIYEOK-WA-PHIEUPH
-0x8244 0xAD17 # HANGUL SYLLABLE KIYEOK-WA-HIEUH
-0x8245 0xAD19 # HANGUL SYLLABLE KIYEOK-WAE-KIYEOK
-0x8246 0xAD1A # HANGUL SYLLABLE KIYEOK-WAE-SSANGKIYEOK
-0x8247 0xAD1B # HANGUL SYLLABLE KIYEOK-WAE-KIYEOKSIOS
-0x8248 0xAD1D # HANGUL SYLLABLE KIYEOK-WAE-NIEUNCIEUC
-0x8249 0xAD1E # HANGUL SYLLABLE KIYEOK-WAE-NIEUNHIEUH
-0x824A 0xAD1F # HANGUL SYLLABLE KIYEOK-WAE-TIKEUT
-0x824B 0xAD21 # HANGUL SYLLABLE KIYEOK-WAE-RIEULKIYEOK
-0x824C 0xAD22 # HANGUL SYLLABLE KIYEOK-WAE-RIEULMIEUM
-0x824D 0xAD23 # HANGUL SYLLABLE KIYEOK-WAE-RIEULPIEUP
-0x824E 0xAD24 # HANGUL SYLLABLE KIYEOK-WAE-RIEULSIOS
-0x824F 0xAD25 # HANGUL SYLLABLE KIYEOK-WAE-RIEULTHIEUTH
-0x8250 0xAD26 # HANGUL SYLLABLE KIYEOK-WAE-RIEULPHIEUPH
-0x8251 0xAD27 # HANGUL SYLLABLE KIYEOK-WAE-RIEULHIEUH
-0x8252 0xAD28 # HANGUL SYLLABLE KIYEOK-WAE-MIEUM
-0x8253 0xAD2A # HANGUL SYLLABLE KIYEOK-WAE-PIEUPSIOS
-0x8254 0xAD2B # HANGUL SYLLABLE KIYEOK-WAE-SIOS
-0x8255 0xAD2E # HANGUL SYLLABLE KIYEOK-WAE-CIEUC
-0x8256 0xAD2F # HANGUL SYLLABLE KIYEOK-WAE-CHIEUCH
-0x8257 0xAD30 # HANGUL SYLLABLE KIYEOK-WAE-KHIEUKH
-0x8258 0xAD31 # HANGUL SYLLABLE KIYEOK-WAE-THIEUTH
-0x8259 0xAD32 # HANGUL SYLLABLE KIYEOK-WAE-PHIEUPH
-0x825A 0xAD33 # HANGUL SYLLABLE KIYEOK-WAE-HIEUH
-0x8261 0xAD36 # HANGUL SYLLABLE KIYEOK-OE-SSANGKIYEOK
-0x8262 0xAD37 # HANGUL SYLLABLE KIYEOK-OE-KIYEOKSIOS
-0x8263 0xAD39 # HANGUL SYLLABLE KIYEOK-OE-NIEUNCIEUC
-0x8264 0xAD3A # HANGUL SYLLABLE KIYEOK-OE-NIEUNHIEUH
-0x8265 0xAD3B # HANGUL SYLLABLE KIYEOK-OE-TIKEUT
-0x8266 0xAD3D # HANGUL SYLLABLE KIYEOK-OE-RIEULKIYEOK
-0x8267 0xAD3E # HANGUL SYLLABLE KIYEOK-OE-RIEULMIEUM
-0x8268 0xAD3F # HANGUL SYLLABLE KIYEOK-OE-RIEULPIEUP
-0x8269 0xAD40 # HANGUL SYLLABLE KIYEOK-OE-RIEULSIOS
-0x826A 0xAD41 # HANGUL SYLLABLE KIYEOK-OE-RIEULTHIEUTH
-0x826B 0xAD42 # HANGUL SYLLABLE KIYEOK-OE-RIEULPHIEUPH
-0x826C 0xAD43 # HANGUL SYLLABLE KIYEOK-OE-RIEULHIEUH
-0x826D 0xAD46 # HANGUL SYLLABLE KIYEOK-OE-PIEUPSIOS
-0x826E 0xAD48 # HANGUL SYLLABLE KIYEOK-OE-SSANGSIOS
-0x826F 0xAD4A # HANGUL SYLLABLE KIYEOK-OE-CIEUC
-0x8270 0xAD4B # HANGUL SYLLABLE KIYEOK-OE-CHIEUCH
-0x8271 0xAD4C # HANGUL SYLLABLE KIYEOK-OE-KHIEUKH
-0x8272 0xAD4D # HANGUL SYLLABLE KIYEOK-OE-THIEUTH
-0x8273 0xAD4E # HANGUL SYLLABLE KIYEOK-OE-PHIEUPH
-0x8274 0xAD4F # HANGUL SYLLABLE KIYEOK-OE-HIEUH
-0x8275 0xAD51 # HANGUL SYLLABLE KIYEOK-YO-KIYEOK
-0x8276 0xAD52 # HANGUL SYLLABLE KIYEOK-YO-SSANGKIYEOK
-0x8277 0xAD53 # HANGUL SYLLABLE KIYEOK-YO-KIYEOKSIOS
-0x8278 0xAD55 # HANGUL SYLLABLE KIYEOK-YO-NIEUNCIEUC
-0x8279 0xAD56 # HANGUL SYLLABLE KIYEOK-YO-NIEUNHIEUH
-0x827A 0xAD57 # HANGUL SYLLABLE KIYEOK-YO-TIKEUT
-0x8281 0xAD59 # HANGUL SYLLABLE KIYEOK-YO-RIEULKIYEOK
-0x8282 0xAD5A # HANGUL SYLLABLE KIYEOK-YO-RIEULMIEUM
-0x8283 0xAD5B # HANGUL SYLLABLE KIYEOK-YO-RIEULPIEUP
-0x8284 0xAD5C # HANGUL SYLLABLE KIYEOK-YO-RIEULSIOS
-0x8285 0xAD5D # HANGUL SYLLABLE KIYEOK-YO-RIEULTHIEUTH
-0x8286 0xAD5E # HANGUL SYLLABLE KIYEOK-YO-RIEULPHIEUPH
-0x8287 0xAD5F # HANGUL SYLLABLE KIYEOK-YO-RIEULHIEUH
-0x8288 0xAD60 # HANGUL SYLLABLE KIYEOK-YO-MIEUM
-0x8289 0xAD62 # HANGUL SYLLABLE KIYEOK-YO-PIEUPSIOS
-0x828A 0xAD64 # HANGUL SYLLABLE KIYEOK-YO-SSANGSIOS
-0x828B 0xAD65 # HANGUL SYLLABLE KIYEOK-YO-IEUNG
-0x828C 0xAD66 # HANGUL SYLLABLE KIYEOK-YO-CIEUC
-0x828D 0xAD67 # HANGUL SYLLABLE KIYEOK-YO-CHIEUCH
-0x828E 0xAD68 # HANGUL SYLLABLE KIYEOK-YO-KHIEUKH
-0x828F 0xAD69 # HANGUL SYLLABLE KIYEOK-YO-THIEUTH
-0x8290 0xAD6A # HANGUL SYLLABLE KIYEOK-YO-PHIEUPH
-0x8291 0xAD6B # HANGUL SYLLABLE KIYEOK-YO-HIEUH
-0x8292 0xAD6E # HANGUL SYLLABLE KIYEOK-U-SSANGKIYEOK
-0x8293 0xAD6F # HANGUL SYLLABLE KIYEOK-U-KIYEOKSIOS
-0x8294 0xAD71 # HANGUL SYLLABLE KIYEOK-U-NIEUNCIEUC
-0x8295 0xAD72 # HANGUL SYLLABLE KIYEOK-U-NIEUNHIEUH
-0x8296 0xAD77 # HANGUL SYLLABLE KIYEOK-U-RIEULPIEUP
-0x8297 0xAD78 # HANGUL SYLLABLE KIYEOK-U-RIEULSIOS
-0x8298 0xAD79 # HANGUL SYLLABLE KIYEOK-U-RIEULTHIEUTH
-0x8299 0xAD7A # HANGUL SYLLABLE KIYEOK-U-RIEULPHIEUPH
-0x829A 0xAD7E # HANGUL SYLLABLE KIYEOK-U-PIEUPSIOS
-0x829B 0xAD80 # HANGUL SYLLABLE KIYEOK-U-SSANGSIOS
-0x829C 0xAD83 # HANGUL SYLLABLE KIYEOK-U-CHIEUCH
-0x829D 0xAD84 # HANGUL SYLLABLE KIYEOK-U-KHIEUKH
-0x829E 0xAD85 # HANGUL SYLLABLE KIYEOK-U-THIEUTH
-0x829F 0xAD86 # HANGUL SYLLABLE KIYEOK-U-PHIEUPH
-0x82A0 0xAD87 # HANGUL SYLLABLE KIYEOK-U-HIEUH
-0x82A1 0xAD8A # HANGUL SYLLABLE KIYEOK-WEO-SSANGKIYEOK
-0x82A2 0xAD8B # HANGUL SYLLABLE KIYEOK-WEO-KIYEOKSIOS
-0x82A3 0xAD8D # HANGUL SYLLABLE KIYEOK-WEO-NIEUNCIEUC
-0x82A4 0xAD8E # HANGUL SYLLABLE KIYEOK-WEO-NIEUNHIEUH
-0x82A5 0xAD8F # HANGUL SYLLABLE KIYEOK-WEO-TIKEUT
-0x82A6 0xAD91 # HANGUL SYLLABLE KIYEOK-WEO-RIEULKIYEOK
-0x82A7 0xAD92 # HANGUL SYLLABLE KIYEOK-WEO-RIEULMIEUM
-0x82A8 0xAD93 # HANGUL SYLLABLE KIYEOK-WEO-RIEULPIEUP
-0x82A9 0xAD94 # HANGUL SYLLABLE KIYEOK-WEO-RIEULSIOS
-0x82AA 0xAD95 # HANGUL SYLLABLE KIYEOK-WEO-RIEULTHIEUTH
-0x82AB 0xAD96 # HANGUL SYLLABLE KIYEOK-WEO-RIEULPHIEUPH
-0x82AC 0xAD97 # HANGUL SYLLABLE KIYEOK-WEO-RIEULHIEUH
-0x82AD 0xAD98 # HANGUL SYLLABLE KIYEOK-WEO-MIEUM
-0x82AE 0xAD99 # HANGUL SYLLABLE KIYEOK-WEO-PIEUP
-0x82AF 0xAD9A # HANGUL SYLLABLE KIYEOK-WEO-PIEUPSIOS
-0x82B0 0xAD9B # HANGUL SYLLABLE KIYEOK-WEO-SIOS
-0x82B1 0xAD9E # HANGUL SYLLABLE KIYEOK-WEO-CIEUC
-0x82B2 0xAD9F # HANGUL SYLLABLE KIYEOK-WEO-CHIEUCH
-0x82B3 0xADA0 # HANGUL SYLLABLE KIYEOK-WEO-KHIEUKH
-0x82B4 0xADA1 # HANGUL SYLLABLE KIYEOK-WEO-THIEUTH
-0x82B5 0xADA2 # HANGUL SYLLABLE KIYEOK-WEO-PHIEUPH
-0x82B6 0xADA3 # HANGUL SYLLABLE KIYEOK-WEO-HIEUH
-0x82B7 0xADA5 # HANGUL SYLLABLE KIYEOK-WE-KIYEOK
-0x82B8 0xADA6 # HANGUL SYLLABLE KIYEOK-WE-SSANGKIYEOK
-0x82B9 0xADA7 # HANGUL SYLLABLE KIYEOK-WE-KIYEOKSIOS
-0x82BA 0xADA8 # HANGUL SYLLABLE KIYEOK-WE-NIEUN
-0x82BB 0xADA9 # HANGUL SYLLABLE KIYEOK-WE-NIEUNCIEUC
-0x82BC 0xADAA # HANGUL SYLLABLE KIYEOK-WE-NIEUNHIEUH
-0x82BD 0xADAB # HANGUL SYLLABLE KIYEOK-WE-TIKEUT
-0x82BE 0xADAC # HANGUL SYLLABLE KIYEOK-WE-RIEUL
-0x82BF 0xADAD # HANGUL SYLLABLE KIYEOK-WE-RIEULKIYEOK
-0x82C0 0xADAE # HANGUL SYLLABLE KIYEOK-WE-RIEULMIEUM
-0x82C1 0xADAF # HANGUL SYLLABLE KIYEOK-WE-RIEULPIEUP
-0x82C2 0xADB0 # HANGUL SYLLABLE KIYEOK-WE-RIEULSIOS
-0x82C3 0xADB1 # HANGUL SYLLABLE KIYEOK-WE-RIEULTHIEUTH
-0x82C4 0xADB2 # HANGUL SYLLABLE KIYEOK-WE-RIEULPHIEUPH
-0x82C5 0xADB3 # HANGUL SYLLABLE KIYEOK-WE-RIEULHIEUH
-0x82C6 0xADB4 # HANGUL SYLLABLE KIYEOK-WE-MIEUM
-0x82C7 0xADB5 # HANGUL SYLLABLE KIYEOK-WE-PIEUP
-0x82C8 0xADB6 # HANGUL SYLLABLE KIYEOK-WE-PIEUPSIOS
-0x82C9 0xADB8 # HANGUL SYLLABLE KIYEOK-WE-SSANGSIOS
-0x82CA 0xADB9 # HANGUL SYLLABLE KIYEOK-WE-IEUNG
-0x82CB 0xADBA # HANGUL SYLLABLE KIYEOK-WE-CIEUC
-0x82CC 0xADBB # HANGUL SYLLABLE KIYEOK-WE-CHIEUCH
-0x82CD 0xADBC # HANGUL SYLLABLE KIYEOK-WE-KHIEUKH
-0x82CE 0xADBD # HANGUL SYLLABLE KIYEOK-WE-THIEUTH
-0x82CF 0xADBE # HANGUL SYLLABLE KIYEOK-WE-PHIEUPH
-0x82D0 0xADBF # HANGUL SYLLABLE KIYEOK-WE-HIEUH
-0x82D1 0xADC2 # HANGUL SYLLABLE KIYEOK-WI-SSANGKIYEOK
-0x82D2 0xADC3 # HANGUL SYLLABLE KIYEOK-WI-KIYEOKSIOS
-0x82D3 0xADC5 # HANGUL SYLLABLE KIYEOK-WI-NIEUNCIEUC
-0x82D4 0xADC6 # HANGUL SYLLABLE KIYEOK-WI-NIEUNHIEUH
-0x82D5 0xADC7 # HANGUL SYLLABLE KIYEOK-WI-TIKEUT
-0x82D6 0xADC9 # HANGUL SYLLABLE KIYEOK-WI-RIEULKIYEOK
-0x82D7 0xADCA # HANGUL SYLLABLE KIYEOK-WI-RIEULMIEUM
-0x82D8 0xADCB # HANGUL SYLLABLE KIYEOK-WI-RIEULPIEUP
-0x82D9 0xADCC # HANGUL SYLLABLE KIYEOK-WI-RIEULSIOS
-0x82DA 0xADCD # HANGUL SYLLABLE KIYEOK-WI-RIEULTHIEUTH
-0x82DB 0xADCE # HANGUL SYLLABLE KIYEOK-WI-RIEULPHIEUPH
-0x82DC 0xADCF # HANGUL SYLLABLE KIYEOK-WI-RIEULHIEUH
-0x82DD 0xADD2 # HANGUL SYLLABLE KIYEOK-WI-PIEUPSIOS
-0x82DE 0xADD4 # HANGUL SYLLABLE KIYEOK-WI-SSANGSIOS
-0x82DF 0xADD5 # HANGUL SYLLABLE KIYEOK-WI-IEUNG
-0x82E0 0xADD6 # HANGUL SYLLABLE KIYEOK-WI-CIEUC
-0x82E1 0xADD7 # HANGUL SYLLABLE KIYEOK-WI-CHIEUCH
-0x82E2 0xADD8 # HANGUL SYLLABLE KIYEOK-WI-KHIEUKH
-0x82E3 0xADD9 # HANGUL SYLLABLE KIYEOK-WI-THIEUTH
-0x82E4 0xADDA # HANGUL SYLLABLE KIYEOK-WI-PHIEUPH
-0x82E5 0xADDB # HANGUL SYLLABLE KIYEOK-WI-HIEUH
-0x82E6 0xADDD # HANGUL SYLLABLE KIYEOK-YU-KIYEOK
-0x82E7 0xADDE # HANGUL SYLLABLE KIYEOK-YU-SSANGKIYEOK
-0x82E8 0xADDF # HANGUL SYLLABLE KIYEOK-YU-KIYEOKSIOS
-0x82E9 0xADE1 # HANGUL SYLLABLE KIYEOK-YU-NIEUNCIEUC
-0x82EA 0xADE2 # HANGUL SYLLABLE KIYEOK-YU-NIEUNHIEUH
-0x82EB 0xADE3 # HANGUL SYLLABLE KIYEOK-YU-TIKEUT
-0x82EC 0xADE5 # HANGUL SYLLABLE KIYEOK-YU-RIEULKIYEOK
-0x82ED 0xADE6 # HANGUL SYLLABLE KIYEOK-YU-RIEULMIEUM
-0x82EE 0xADE7 # HANGUL SYLLABLE KIYEOK-YU-RIEULPIEUP
-0x82EF 0xADE8 # HANGUL SYLLABLE KIYEOK-YU-RIEULSIOS
-0x82F0 0xADE9 # HANGUL SYLLABLE KIYEOK-YU-RIEULTHIEUTH
-0x82F1 0xADEA # HANGUL SYLLABLE KIYEOK-YU-RIEULPHIEUPH
-0x82F2 0xADEB # HANGUL SYLLABLE KIYEOK-YU-RIEULHIEUH
-0x82F3 0xADEC # HANGUL SYLLABLE KIYEOK-YU-MIEUM
-0x82F4 0xADED # HANGUL SYLLABLE KIYEOK-YU-PIEUP
-0x82F5 0xADEE # HANGUL SYLLABLE KIYEOK-YU-PIEUPSIOS
-0x82F6 0xADEF # HANGUL SYLLABLE KIYEOK-YU-SIOS
-0x82F7 0xADF0 # HANGUL SYLLABLE KIYEOK-YU-SSANGSIOS
-0x82F8 0xADF1 # HANGUL SYLLABLE KIYEOK-YU-IEUNG
-0x82F9 0xADF2 # HANGUL SYLLABLE KIYEOK-YU-CIEUC
-0x82FA 0xADF3 # HANGUL SYLLABLE KIYEOK-YU-CHIEUCH
-0x82FB 0xADF4 # HANGUL SYLLABLE KIYEOK-YU-KHIEUKH
-0x82FC 0xADF5 # HANGUL SYLLABLE KIYEOK-YU-THIEUTH
-0x82FD 0xADF6 # HANGUL SYLLABLE KIYEOK-YU-PHIEUPH
-0x82FE 0xADF7 # HANGUL SYLLABLE KIYEOK-YU-HIEUH
-0x8341 0xADFA # HANGUL SYLLABLE KIYEOK-EU-SSANGKIYEOK
-0x8342 0xADFB # HANGUL SYLLABLE KIYEOK-EU-KIYEOKSIOS
-0x8343 0xADFD # HANGUL SYLLABLE KIYEOK-EU-NIEUNCIEUC
-0x8344 0xADFE # HANGUL SYLLABLE KIYEOK-EU-NIEUNHIEUH
-0x8345 0xAE02 # HANGUL SYLLABLE KIYEOK-EU-RIEULMIEUM
-0x8346 0xAE03 # HANGUL SYLLABLE KIYEOK-EU-RIEULPIEUP
-0x8347 0xAE04 # HANGUL SYLLABLE KIYEOK-EU-RIEULSIOS
-0x8348 0xAE05 # HANGUL SYLLABLE KIYEOK-EU-RIEULTHIEUTH
-0x8349 0xAE06 # HANGUL SYLLABLE KIYEOK-EU-RIEULPHIEUPH
-0x834A 0xAE07 # HANGUL SYLLABLE KIYEOK-EU-RIEULHIEUH
-0x834B 0xAE0A # HANGUL SYLLABLE KIYEOK-EU-PIEUPSIOS
-0x834C 0xAE0C # HANGUL SYLLABLE KIYEOK-EU-SSANGSIOS
-0x834D 0xAE0E # HANGUL SYLLABLE KIYEOK-EU-CIEUC
-0x834E 0xAE0F # HANGUL SYLLABLE KIYEOK-EU-CHIEUCH
-0x834F 0xAE10 # HANGUL SYLLABLE KIYEOK-EU-KHIEUKH
-0x8350 0xAE11 # HANGUL SYLLABLE KIYEOK-EU-THIEUTH
-0x8351 0xAE12 # HANGUL SYLLABLE KIYEOK-EU-PHIEUPH
-0x8352 0xAE13 # HANGUL SYLLABLE KIYEOK-EU-HIEUH
-0x8353 0xAE15 # HANGUL SYLLABLE KIYEOK-YI-KIYEOK
-0x8354 0xAE16 # HANGUL SYLLABLE KIYEOK-YI-SSANGKIYEOK
-0x8355 0xAE17 # HANGUL SYLLABLE KIYEOK-YI-KIYEOKSIOS
-0x8356 0xAE18 # HANGUL SYLLABLE KIYEOK-YI-NIEUN
-0x8357 0xAE19 # HANGUL SYLLABLE KIYEOK-YI-NIEUNCIEUC
-0x8358 0xAE1A # HANGUL SYLLABLE KIYEOK-YI-NIEUNHIEUH
-0x8359 0xAE1B # HANGUL SYLLABLE KIYEOK-YI-TIKEUT
-0x835A 0xAE1C # HANGUL SYLLABLE KIYEOK-YI-RIEUL
-0x8361 0xAE1D # HANGUL SYLLABLE KIYEOK-YI-RIEULKIYEOK
-0x8362 0xAE1E # HANGUL SYLLABLE KIYEOK-YI-RIEULMIEUM
-0x8363 0xAE1F # HANGUL SYLLABLE KIYEOK-YI-RIEULPIEUP
-0x8364 0xAE20 # HANGUL SYLLABLE KIYEOK-YI-RIEULSIOS
-0x8365 0xAE21 # HANGUL SYLLABLE KIYEOK-YI-RIEULTHIEUTH
-0x8366 0xAE22 # HANGUL SYLLABLE KIYEOK-YI-RIEULPHIEUPH
-0x8367 0xAE23 # HANGUL SYLLABLE KIYEOK-YI-RIEULHIEUH
-0x8368 0xAE24 # HANGUL SYLLABLE KIYEOK-YI-MIEUM
-0x8369 0xAE25 # HANGUL SYLLABLE KIYEOK-YI-PIEUP
-0x836A 0xAE26 # HANGUL SYLLABLE KIYEOK-YI-PIEUPSIOS
-0x836B 0xAE27 # HANGUL SYLLABLE KIYEOK-YI-SIOS
-0x836C 0xAE28 # HANGUL SYLLABLE KIYEOK-YI-SSANGSIOS
-0x836D 0xAE29 # HANGUL SYLLABLE KIYEOK-YI-IEUNG
-0x836E 0xAE2A # HANGUL SYLLABLE KIYEOK-YI-CIEUC
-0x836F 0xAE2B # HANGUL SYLLABLE KIYEOK-YI-CHIEUCH
-0x8370 0xAE2C # HANGUL SYLLABLE KIYEOK-YI-KHIEUKH
-0x8371 0xAE2D # HANGUL SYLLABLE KIYEOK-YI-THIEUTH
-0x8372 0xAE2E # HANGUL SYLLABLE KIYEOK-YI-PHIEUPH
-0x8373 0xAE2F # HANGUL SYLLABLE KIYEOK-YI-HIEUH
-0x8374 0xAE32 # HANGUL SYLLABLE KIYEOK-I-SSANGKIYEOK
-0x8375 0xAE33 # HANGUL SYLLABLE KIYEOK-I-KIYEOKSIOS
-0x8376 0xAE35 # HANGUL SYLLABLE KIYEOK-I-NIEUNCIEUC
-0x8377 0xAE36 # HANGUL SYLLABLE KIYEOK-I-NIEUNHIEUH
-0x8378 0xAE39 # HANGUL SYLLABLE KIYEOK-I-RIEULKIYEOK
-0x8379 0xAE3B # HANGUL SYLLABLE KIYEOK-I-RIEULPIEUP
-0x837A 0xAE3C # HANGUL SYLLABLE KIYEOK-I-RIEULSIOS
-0x8381 0xAE3D # HANGUL SYLLABLE KIYEOK-I-RIEULTHIEUTH
-0x8382 0xAE3E # HANGUL SYLLABLE KIYEOK-I-RIEULPHIEUPH
-0x8383 0xAE3F # HANGUL SYLLABLE KIYEOK-I-RIEULHIEUH
-0x8384 0xAE42 # HANGUL SYLLABLE KIYEOK-I-PIEUPSIOS
-0x8385 0xAE44 # HANGUL SYLLABLE KIYEOK-I-SSANGSIOS
-0x8386 0xAE47 # HANGUL SYLLABLE KIYEOK-I-CHIEUCH
-0x8387 0xAE48 # HANGUL SYLLABLE KIYEOK-I-KHIEUKH
-0x8388 0xAE49 # HANGUL SYLLABLE KIYEOK-I-THIEUTH
-0x8389 0xAE4B # HANGUL SYLLABLE KIYEOK-I-HIEUH
-0x838A 0xAE4F # HANGUL SYLLABLE SSANGKIYEOK-A-KIYEOKSIOS
-0x838B 0xAE51 # HANGUL SYLLABLE SSANGKIYEOK-A-NIEUNCIEUC
-0x838C 0xAE52 # HANGUL SYLLABLE SSANGKIYEOK-A-NIEUNHIEUH
-0x838D 0xAE53 # HANGUL SYLLABLE SSANGKIYEOK-A-TIKEUT
-0x838E 0xAE55 # HANGUL SYLLABLE SSANGKIYEOK-A-RIEULKIYEOK
-0x838F 0xAE57 # HANGUL SYLLABLE SSANGKIYEOK-A-RIEULPIEUP
-0x8390 0xAE58 # HANGUL SYLLABLE SSANGKIYEOK-A-RIEULSIOS
-0x8391 0xAE59 # HANGUL SYLLABLE SSANGKIYEOK-A-RIEULTHIEUTH
-0x8392 0xAE5A # HANGUL SYLLABLE SSANGKIYEOK-A-RIEULPHIEUPH
-0x8393 0xAE5B # HANGUL SYLLABLE SSANGKIYEOK-A-RIEULHIEUH
-0x8394 0xAE5E # HANGUL SYLLABLE SSANGKIYEOK-A-PIEUPSIOS
-0x8395 0xAE62 # HANGUL SYLLABLE SSANGKIYEOK-A-CIEUC
-0x8396 0xAE63 # HANGUL SYLLABLE SSANGKIYEOK-A-CHIEUCH
-0x8397 0xAE64 # HANGUL SYLLABLE SSANGKIYEOK-A-KHIEUKH
-0x8398 0xAE66 # HANGUL SYLLABLE SSANGKIYEOK-A-PHIEUPH
-0x8399 0xAE67 # HANGUL SYLLABLE SSANGKIYEOK-A-HIEUH
-0x839A 0xAE6A # HANGUL SYLLABLE SSANGKIYEOK-AE-SSANGKIYEOK
-0x839B 0xAE6B # HANGUL SYLLABLE SSANGKIYEOK-AE-KIYEOKSIOS
-0x839C 0xAE6D # HANGUL SYLLABLE SSANGKIYEOK-AE-NIEUNCIEUC
-0x839D 0xAE6E # HANGUL SYLLABLE SSANGKIYEOK-AE-NIEUNHIEUH
-0x839E 0xAE6F # HANGUL SYLLABLE SSANGKIYEOK-AE-TIKEUT
-0x839F 0xAE71 # HANGUL SYLLABLE SSANGKIYEOK-AE-RIEULKIYEOK
-0x83A0 0xAE72 # HANGUL SYLLABLE SSANGKIYEOK-AE-RIEULMIEUM
-0x83A1 0xAE73 # HANGUL SYLLABLE SSANGKIYEOK-AE-RIEULPIEUP
-0x83A2 0xAE74 # HANGUL SYLLABLE SSANGKIYEOK-AE-RIEULSIOS
-0x83A3 0xAE75 # HANGUL SYLLABLE SSANGKIYEOK-AE-RIEULTHIEUTH
-0x83A4 0xAE76 # HANGUL SYLLABLE SSANGKIYEOK-AE-RIEULPHIEUPH
-0x83A5 0xAE77 # HANGUL SYLLABLE SSANGKIYEOK-AE-RIEULHIEUH
-0x83A6 0xAE7A # HANGUL SYLLABLE SSANGKIYEOK-AE-PIEUPSIOS
-0x83A7 0xAE7E # HANGUL SYLLABLE SSANGKIYEOK-AE-CIEUC
-0x83A8 0xAE7F # HANGUL SYLLABLE SSANGKIYEOK-AE-CHIEUCH
-0x83A9 0xAE80 # HANGUL SYLLABLE SSANGKIYEOK-AE-KHIEUKH
-0x83AA 0xAE81 # HANGUL SYLLABLE SSANGKIYEOK-AE-THIEUTH
-0x83AB 0xAE82 # HANGUL SYLLABLE SSANGKIYEOK-AE-PHIEUPH
-0x83AC 0xAE83 # HANGUL SYLLABLE SSANGKIYEOK-AE-HIEUH
-0x83AD 0xAE86 # HANGUL SYLLABLE SSANGKIYEOK-YA-SSANGKIYEOK
-0x83AE 0xAE87 # HANGUL SYLLABLE SSANGKIYEOK-YA-KIYEOKSIOS
-0x83AF 0xAE88 # HANGUL SYLLABLE SSANGKIYEOK-YA-NIEUN
-0x83B0 0xAE89 # HANGUL SYLLABLE SSANGKIYEOK-YA-NIEUNCIEUC
-0x83B1 0xAE8A # HANGUL SYLLABLE SSANGKIYEOK-YA-NIEUNHIEUH
-0x83B2 0xAE8B # HANGUL SYLLABLE SSANGKIYEOK-YA-TIKEUT
-0x83B3 0xAE8D # HANGUL SYLLABLE SSANGKIYEOK-YA-RIEULKIYEOK
-0x83B4 0xAE8E # HANGUL SYLLABLE SSANGKIYEOK-YA-RIEULMIEUM
-0x83B5 0xAE8F # HANGUL SYLLABLE SSANGKIYEOK-YA-RIEULPIEUP
-0x83B6 0xAE90 # HANGUL SYLLABLE SSANGKIYEOK-YA-RIEULSIOS
-0x83B7 0xAE91 # HANGUL SYLLABLE SSANGKIYEOK-YA-RIEULTHIEUTH
-0x83B8 0xAE92 # HANGUL SYLLABLE SSANGKIYEOK-YA-RIEULPHIEUPH
-0x83B9 0xAE93 # HANGUL SYLLABLE SSANGKIYEOK-YA-RIEULHIEUH
-0x83BA 0xAE94 # HANGUL SYLLABLE SSANGKIYEOK-YA-MIEUM
-0x83BB 0xAE95 # HANGUL SYLLABLE SSANGKIYEOK-YA-PIEUP
-0x83BC 0xAE96 # HANGUL SYLLABLE SSANGKIYEOK-YA-PIEUPSIOS
-0x83BD 0xAE97 # HANGUL SYLLABLE SSANGKIYEOK-YA-SIOS
-0x83BE 0xAE98 # HANGUL SYLLABLE SSANGKIYEOK-YA-SSANGSIOS
-0x83BF 0xAE99 # HANGUL SYLLABLE SSANGKIYEOK-YA-IEUNG
-0x83C0 0xAE9A # HANGUL SYLLABLE SSANGKIYEOK-YA-CIEUC
-0x83C1 0xAE9B # HANGUL SYLLABLE SSANGKIYEOK-YA-CHIEUCH
-0x83C2 0xAE9C # HANGUL SYLLABLE SSANGKIYEOK-YA-KHIEUKH
-0x83C3 0xAE9D # HANGUL SYLLABLE SSANGKIYEOK-YA-THIEUTH
-0x83C4 0xAE9E # HANGUL SYLLABLE SSANGKIYEOK-YA-PHIEUPH
-0x83C5 0xAE9F # HANGUL SYLLABLE SSANGKIYEOK-YA-HIEUH
-0x83C6 0xAEA0 # HANGUL SYLLABLE SSANGKIYEOK-YAE
-0x83C7 0xAEA1 # HANGUL SYLLABLE SSANGKIYEOK-YAE-KIYEOK
-0x83C8 0xAEA2 # HANGUL SYLLABLE SSANGKIYEOK-YAE-SSANGKIYEOK
-0x83C9 0xAEA3 # HANGUL SYLLABLE SSANGKIYEOK-YAE-KIYEOKSIOS
-0x83CA 0xAEA4 # HANGUL SYLLABLE SSANGKIYEOK-YAE-NIEUN
-0x83CB 0xAEA5 # HANGUL SYLLABLE SSANGKIYEOK-YAE-NIEUNCIEUC
-0x83CC 0xAEA6 # HANGUL SYLLABLE SSANGKIYEOK-YAE-NIEUNHIEUH
-0x83CD 0xAEA7 # HANGUL SYLLABLE SSANGKIYEOK-YAE-TIKEUT
-0x83CE 0xAEA8 # HANGUL SYLLABLE SSANGKIYEOK-YAE-RIEUL
-0x83CF 0xAEA9 # HANGUL SYLLABLE SSANGKIYEOK-YAE-RIEULKIYEOK
-0x83D0 0xAEAA # HANGUL SYLLABLE SSANGKIYEOK-YAE-RIEULMIEUM
-0x83D1 0xAEAB # HANGUL SYLLABLE SSANGKIYEOK-YAE-RIEULPIEUP
-0x83D2 0xAEAC # HANGUL SYLLABLE SSANGKIYEOK-YAE-RIEULSIOS
-0x83D3 0xAEAD # HANGUL SYLLABLE SSANGKIYEOK-YAE-RIEULTHIEUTH
-0x83D4 0xAEAE # HANGUL SYLLABLE SSANGKIYEOK-YAE-RIEULPHIEUPH
-0x83D5 0xAEAF # HANGUL SYLLABLE SSANGKIYEOK-YAE-RIEULHIEUH
-0x83D6 0xAEB0 # HANGUL SYLLABLE SSANGKIYEOK-YAE-MIEUM
-0x83D7 0xAEB1 # HANGUL SYLLABLE SSANGKIYEOK-YAE-PIEUP
-0x83D8 0xAEB2 # HANGUL SYLLABLE SSANGKIYEOK-YAE-PIEUPSIOS
-0x83D9 0xAEB3 # HANGUL SYLLABLE SSANGKIYEOK-YAE-SIOS
-0x83DA 0xAEB4 # HANGUL SYLLABLE SSANGKIYEOK-YAE-SSANGSIOS
-0x83DB 0xAEB5 # HANGUL SYLLABLE SSANGKIYEOK-YAE-IEUNG
-0x83DC 0xAEB6 # HANGUL SYLLABLE SSANGKIYEOK-YAE-CIEUC
-0x83DD 0xAEB7 # HANGUL SYLLABLE SSANGKIYEOK-YAE-CHIEUCH
-0x83DE 0xAEB8 # HANGUL SYLLABLE SSANGKIYEOK-YAE-KHIEUKH
-0x83DF 0xAEB9 # HANGUL SYLLABLE SSANGKIYEOK-YAE-THIEUTH
-0x83E0 0xAEBA # HANGUL SYLLABLE SSANGKIYEOK-YAE-PHIEUPH
-0x83E1 0xAEBB # HANGUL SYLLABLE SSANGKIYEOK-YAE-HIEUH
-0x83E2 0xAEBF # HANGUL SYLLABLE SSANGKIYEOK-EO-KIYEOKSIOS
-0x83E3 0xAEC1 # HANGUL SYLLABLE SSANGKIYEOK-EO-NIEUNCIEUC
-0x83E4 0xAEC2 # HANGUL SYLLABLE SSANGKIYEOK-EO-NIEUNHIEUH
-0x83E5 0xAEC3 # HANGUL SYLLABLE SSANGKIYEOK-EO-TIKEUT
-0x83E6 0xAEC5 # HANGUL SYLLABLE SSANGKIYEOK-EO-RIEULKIYEOK
-0x83E7 0xAEC6 # HANGUL SYLLABLE SSANGKIYEOK-EO-RIEULMIEUM
-0x83E8 0xAEC7 # HANGUL SYLLABLE SSANGKIYEOK-EO-RIEULPIEUP
-0x83E9 0xAEC8 # HANGUL SYLLABLE SSANGKIYEOK-EO-RIEULSIOS
-0x83EA 0xAEC9 # HANGUL SYLLABLE SSANGKIYEOK-EO-RIEULTHIEUTH
-0x83EB 0xAECA # HANGUL SYLLABLE SSANGKIYEOK-EO-RIEULPHIEUPH
-0x83EC 0xAECB # HANGUL SYLLABLE SSANGKIYEOK-EO-RIEULHIEUH
-0x83ED 0xAECE # HANGUL SYLLABLE SSANGKIYEOK-EO-PIEUPSIOS
-0x83EE 0xAED2 # HANGUL SYLLABLE SSANGKIYEOK-EO-CIEUC
-0x83EF 0xAED3 # HANGUL SYLLABLE SSANGKIYEOK-EO-CHIEUCH
-0x83F0 0xAED4 # HANGUL SYLLABLE SSANGKIYEOK-EO-KHIEUKH
-0x83F1 0xAED5 # HANGUL SYLLABLE SSANGKIYEOK-EO-THIEUTH
-0x83F2 0xAED6 # HANGUL SYLLABLE SSANGKIYEOK-EO-PHIEUPH
-0x83F3 0xAED7 # HANGUL SYLLABLE SSANGKIYEOK-EO-HIEUH
-0x83F4 0xAEDA # HANGUL SYLLABLE SSANGKIYEOK-E-SSANGKIYEOK
-0x83F5 0xAEDB # HANGUL SYLLABLE SSANGKIYEOK-E-KIYEOKSIOS
-0x83F6 0xAEDD # HANGUL SYLLABLE SSANGKIYEOK-E-NIEUNCIEUC
-0x83F7 0xAEDE # HANGUL SYLLABLE SSANGKIYEOK-E-NIEUNHIEUH
-0x83F8 0xAEDF # HANGUL SYLLABLE SSANGKIYEOK-E-TIKEUT
-0x83F9 0xAEE0 # HANGUL SYLLABLE SSANGKIYEOK-E-RIEUL
-0x83FA 0xAEE1 # HANGUL SYLLABLE SSANGKIYEOK-E-RIEULKIYEOK
-0x83FB 0xAEE2 # HANGUL SYLLABLE SSANGKIYEOK-E-RIEULMIEUM
-0x83FC 0xAEE3 # HANGUL SYLLABLE SSANGKIYEOK-E-RIEULPIEUP
-0x83FD 0xAEE4 # HANGUL SYLLABLE SSANGKIYEOK-E-RIEULSIOS
-0x83FE 0xAEE5 # HANGUL SYLLABLE SSANGKIYEOK-E-RIEULTHIEUTH
-0x8441 0xAEE6 # HANGUL SYLLABLE SSANGKIYEOK-E-RIEULPHIEUPH
-0x8442 0xAEE7 # HANGUL SYLLABLE SSANGKIYEOK-E-RIEULHIEUH
-0x8443 0xAEE9 # HANGUL SYLLABLE SSANGKIYEOK-E-PIEUP
-0x8444 0xAEEA # HANGUL SYLLABLE SSANGKIYEOK-E-PIEUPSIOS
-0x8445 0xAEEC # HANGUL SYLLABLE SSANGKIYEOK-E-SSANGSIOS
-0x8446 0xAEEE # HANGUL SYLLABLE SSANGKIYEOK-E-CIEUC
-0x8447 0xAEEF # HANGUL SYLLABLE SSANGKIYEOK-E-CHIEUCH
-0x8448 0xAEF0 # HANGUL SYLLABLE SSANGKIYEOK-E-KHIEUKH
-0x8449 0xAEF1 # HANGUL SYLLABLE SSANGKIYEOK-E-THIEUTH
-0x844A 0xAEF2 # HANGUL SYLLABLE SSANGKIYEOK-E-PHIEUPH
-0x844B 0xAEF3 # HANGUL SYLLABLE SSANGKIYEOK-E-HIEUH
-0x844C 0xAEF5 # HANGUL SYLLABLE SSANGKIYEOK-YEO-KIYEOK
-0x844D 0xAEF6 # HANGUL SYLLABLE SSANGKIYEOK-YEO-SSANGKIYEOK
-0x844E 0xAEF7 # HANGUL SYLLABLE SSANGKIYEOK-YEO-KIYEOKSIOS
-0x844F 0xAEF9 # HANGUL SYLLABLE SSANGKIYEOK-YEO-NIEUNCIEUC
-0x8450 0xAEFA # HANGUL SYLLABLE SSANGKIYEOK-YEO-NIEUNHIEUH
-0x8451 0xAEFB # HANGUL SYLLABLE SSANGKIYEOK-YEO-TIKEUT
-0x8452 0xAEFD # HANGUL SYLLABLE SSANGKIYEOK-YEO-RIEULKIYEOK
-0x8453 0xAEFE # HANGUL SYLLABLE SSANGKIYEOK-YEO-RIEULMIEUM
-0x8454 0xAEFF # HANGUL SYLLABLE SSANGKIYEOK-YEO-RIEULPIEUP
-0x8455 0xAF00 # HANGUL SYLLABLE SSANGKIYEOK-YEO-RIEULSIOS
-0x8456 0xAF01 # HANGUL SYLLABLE SSANGKIYEOK-YEO-RIEULTHIEUTH
-0x8457 0xAF02 # HANGUL SYLLABLE SSANGKIYEOK-YEO-RIEULPHIEUPH
-0x8458 0xAF03 # HANGUL SYLLABLE SSANGKIYEOK-YEO-RIEULHIEUH
-0x8459 0xAF04 # HANGUL SYLLABLE SSANGKIYEOK-YEO-MIEUM
-0x845A 0xAF05 # HANGUL SYLLABLE SSANGKIYEOK-YEO-PIEUP
-0x8461 0xAF06 # HANGUL SYLLABLE SSANGKIYEOK-YEO-PIEUPSIOS
-0x8462 0xAF09 # HANGUL SYLLABLE SSANGKIYEOK-YEO-IEUNG
-0x8463 0xAF0A # HANGUL SYLLABLE SSANGKIYEOK-YEO-CIEUC
-0x8464 0xAF0B # HANGUL SYLLABLE SSANGKIYEOK-YEO-CHIEUCH
-0x8465 0xAF0C # HANGUL SYLLABLE SSANGKIYEOK-YEO-KHIEUKH
-0x8466 0xAF0E # HANGUL SYLLABLE SSANGKIYEOK-YEO-PHIEUPH
-0x8467 0xAF0F # HANGUL SYLLABLE SSANGKIYEOK-YEO-HIEUH
-0x8468 0xAF11 # HANGUL SYLLABLE SSANGKIYEOK-YE-KIYEOK
-0x8469 0xAF12 # HANGUL SYLLABLE SSANGKIYEOK-YE-SSANGKIYEOK
-0x846A 0xAF13 # HANGUL SYLLABLE SSANGKIYEOK-YE-KIYEOKSIOS
-0x846B 0xAF14 # HANGUL SYLLABLE SSANGKIYEOK-YE-NIEUN
-0x846C 0xAF15 # HANGUL SYLLABLE SSANGKIYEOK-YE-NIEUNCIEUC
-0x846D 0xAF16 # HANGUL SYLLABLE SSANGKIYEOK-YE-NIEUNHIEUH
-0x846E 0xAF17 # HANGUL SYLLABLE SSANGKIYEOK-YE-TIKEUT
-0x846F 0xAF18 # HANGUL SYLLABLE SSANGKIYEOK-YE-RIEUL
-0x8470 0xAF19 # HANGUL SYLLABLE SSANGKIYEOK-YE-RIEULKIYEOK
-0x8471 0xAF1A # HANGUL SYLLABLE SSANGKIYEOK-YE-RIEULMIEUM
-0x8472 0xAF1B # HANGUL SYLLABLE SSANGKIYEOK-YE-RIEULPIEUP
-0x8473 0xAF1C # HANGUL SYLLABLE SSANGKIYEOK-YE-RIEULSIOS
-0x8474 0xAF1D # HANGUL SYLLABLE SSANGKIYEOK-YE-RIEULTHIEUTH
-0x8475 0xAF1E # HANGUL SYLLABLE SSANGKIYEOK-YE-RIEULPHIEUPH
-0x8476 0xAF1F # HANGUL SYLLABLE SSANGKIYEOK-YE-RIEULHIEUH
-0x8477 0xAF20 # HANGUL SYLLABLE SSANGKIYEOK-YE-MIEUM
-0x8478 0xAF21 # HANGUL SYLLABLE SSANGKIYEOK-YE-PIEUP
-0x8479 0xAF22 # HANGUL SYLLABLE SSANGKIYEOK-YE-PIEUPSIOS
-0x847A 0xAF23 # HANGUL SYLLABLE SSANGKIYEOK-YE-SIOS
-0x8481 0xAF24 # HANGUL SYLLABLE SSANGKIYEOK-YE-SSANGSIOS
-0x8482 0xAF25 # HANGUL SYLLABLE SSANGKIYEOK-YE-IEUNG
-0x8483 0xAF26 # HANGUL SYLLABLE SSANGKIYEOK-YE-CIEUC
-0x8484 0xAF27 # HANGUL SYLLABLE SSANGKIYEOK-YE-CHIEUCH
-0x8485 0xAF28 # HANGUL SYLLABLE SSANGKIYEOK-YE-KHIEUKH
-0x8486 0xAF29 # HANGUL SYLLABLE SSANGKIYEOK-YE-THIEUTH
-0x8487 0xAF2A # HANGUL SYLLABLE SSANGKIYEOK-YE-PHIEUPH
-0x8488 0xAF2B # HANGUL SYLLABLE SSANGKIYEOK-YE-HIEUH
-0x8489 0xAF2E # HANGUL SYLLABLE SSANGKIYEOK-O-SSANGKIYEOK
-0x848A 0xAF2F # HANGUL SYLLABLE SSANGKIYEOK-O-KIYEOKSIOS
-0x848B 0xAF31 # HANGUL SYLLABLE SSANGKIYEOK-O-NIEUNCIEUC
-0x848C 0xAF33 # HANGUL SYLLABLE SSANGKIYEOK-O-TIKEUT
-0x848D 0xAF35 # HANGUL SYLLABLE SSANGKIYEOK-O-RIEULKIYEOK
-0x848E 0xAF36 # HANGUL SYLLABLE SSANGKIYEOK-O-RIEULMIEUM
-0x848F 0xAF37 # HANGUL SYLLABLE SSANGKIYEOK-O-RIEULPIEUP
-0x8490 0xAF38 # HANGUL SYLLABLE SSANGKIYEOK-O-RIEULSIOS
-0x8491 0xAF39 # HANGUL SYLLABLE SSANGKIYEOK-O-RIEULTHIEUTH
-0x8492 0xAF3A # HANGUL SYLLABLE SSANGKIYEOK-O-RIEULPHIEUPH
-0x8493 0xAF3B # HANGUL SYLLABLE SSANGKIYEOK-O-RIEULHIEUH
-0x8494 0xAF3E # HANGUL SYLLABLE SSANGKIYEOK-O-PIEUPSIOS
-0x8495 0xAF40 # HANGUL SYLLABLE SSANGKIYEOK-O-SSANGSIOS
-0x8496 0xAF44 # HANGUL SYLLABLE SSANGKIYEOK-O-KHIEUKH
-0x8497 0xAF45 # HANGUL SYLLABLE SSANGKIYEOK-O-THIEUTH
-0x8498 0xAF46 # HANGUL SYLLABLE SSANGKIYEOK-O-PHIEUPH
-0x8499 0xAF47 # HANGUL SYLLABLE SSANGKIYEOK-O-HIEUH
-0x849A 0xAF4A # HANGUL SYLLABLE SSANGKIYEOK-WA-SSANGKIYEOK
-0x849B 0xAF4B # HANGUL SYLLABLE SSANGKIYEOK-WA-KIYEOKSIOS
-0x849C 0xAF4C # HANGUL SYLLABLE SSANGKIYEOK-WA-NIEUN
-0x849D 0xAF4D # HANGUL SYLLABLE SSANGKIYEOK-WA-NIEUNCIEUC
-0x849E 0xAF4E # HANGUL SYLLABLE SSANGKIYEOK-WA-NIEUNHIEUH
-0x849F 0xAF4F # HANGUL SYLLABLE SSANGKIYEOK-WA-TIKEUT
-0x84A0 0xAF51 # HANGUL SYLLABLE SSANGKIYEOK-WA-RIEULKIYEOK
-0x84A1 0xAF52 # HANGUL SYLLABLE SSANGKIYEOK-WA-RIEULMIEUM
-0x84A2 0xAF53 # HANGUL SYLLABLE SSANGKIYEOK-WA-RIEULPIEUP
-0x84A3 0xAF54 # HANGUL SYLLABLE SSANGKIYEOK-WA-RIEULSIOS
-0x84A4 0xAF55 # HANGUL SYLLABLE SSANGKIYEOK-WA-RIEULTHIEUTH
-0x84A5 0xAF56 # HANGUL SYLLABLE SSANGKIYEOK-WA-RIEULPHIEUPH
-0x84A6 0xAF57 # HANGUL SYLLABLE SSANGKIYEOK-WA-RIEULHIEUH
-0x84A7 0xAF58 # HANGUL SYLLABLE SSANGKIYEOK-WA-MIEUM
-0x84A8 0xAF59 # HANGUL SYLLABLE SSANGKIYEOK-WA-PIEUP
-0x84A9 0xAF5A # HANGUL SYLLABLE SSANGKIYEOK-WA-PIEUPSIOS
-0x84AA 0xAF5B # HANGUL SYLLABLE SSANGKIYEOK-WA-SIOS
-0x84AB 0xAF5E # HANGUL SYLLABLE SSANGKIYEOK-WA-CIEUC
-0x84AC 0xAF5F # HANGUL SYLLABLE SSANGKIYEOK-WA-CHIEUCH
-0x84AD 0xAF60 # HANGUL SYLLABLE SSANGKIYEOK-WA-KHIEUKH
-0x84AE 0xAF61 # HANGUL SYLLABLE SSANGKIYEOK-WA-THIEUTH
-0x84AF 0xAF62 # HANGUL SYLLABLE SSANGKIYEOK-WA-PHIEUPH
-0x84B0 0xAF63 # HANGUL SYLLABLE SSANGKIYEOK-WA-HIEUH
-0x84B1 0xAF66 # HANGUL SYLLABLE SSANGKIYEOK-WAE-SSANGKIYEOK
-0x84B2 0xAF67 # HANGUL SYLLABLE SSANGKIYEOK-WAE-KIYEOKSIOS
-0x84B3 0xAF68 # HANGUL SYLLABLE SSANGKIYEOK-WAE-NIEUN
-0x84B4 0xAF69 # HANGUL SYLLABLE SSANGKIYEOK-WAE-NIEUNCIEUC
-0x84B5 0xAF6A # HANGUL SYLLABLE SSANGKIYEOK-WAE-NIEUNHIEUH
-0x84B6 0xAF6B # HANGUL SYLLABLE SSANGKIYEOK-WAE-TIKEUT
-0x84B7 0xAF6C # HANGUL SYLLABLE SSANGKIYEOK-WAE-RIEUL
-0x84B8 0xAF6D # HANGUL SYLLABLE SSANGKIYEOK-WAE-RIEULKIYEOK
-0x84B9 0xAF6E # HANGUL SYLLABLE SSANGKIYEOK-WAE-RIEULMIEUM
-0x84BA 0xAF6F # HANGUL SYLLABLE SSANGKIYEOK-WAE-RIEULPIEUP
-0x84BB 0xAF70 # HANGUL SYLLABLE SSANGKIYEOK-WAE-RIEULSIOS
-0x84BC 0xAF71 # HANGUL SYLLABLE SSANGKIYEOK-WAE-RIEULTHIEUTH
-0x84BD 0xAF72 # HANGUL SYLLABLE SSANGKIYEOK-WAE-RIEULPHIEUPH
-0x84BE 0xAF73 # HANGUL SYLLABLE SSANGKIYEOK-WAE-RIEULHIEUH
-0x84BF 0xAF74 # HANGUL SYLLABLE SSANGKIYEOK-WAE-MIEUM
-0x84C0 0xAF75 # HANGUL SYLLABLE SSANGKIYEOK-WAE-PIEUP
-0x84C1 0xAF76 # HANGUL SYLLABLE SSANGKIYEOK-WAE-PIEUPSIOS
-0x84C2 0xAF77 # HANGUL SYLLABLE SSANGKIYEOK-WAE-SIOS
-0x84C3 0xAF78 # HANGUL SYLLABLE SSANGKIYEOK-WAE-SSANGSIOS
-0x84C4 0xAF7A # HANGUL SYLLABLE SSANGKIYEOK-WAE-CIEUC
-0x84C5 0xAF7B # HANGUL SYLLABLE SSANGKIYEOK-WAE-CHIEUCH
-0x84C6 0xAF7C # HANGUL SYLLABLE SSANGKIYEOK-WAE-KHIEUKH
-0x84C7 0xAF7D # HANGUL SYLLABLE SSANGKIYEOK-WAE-THIEUTH
-0x84C8 0xAF7E # HANGUL SYLLABLE SSANGKIYEOK-WAE-PHIEUPH
-0x84C9 0xAF7F # HANGUL SYLLABLE SSANGKIYEOK-WAE-HIEUH
-0x84CA 0xAF81 # HANGUL SYLLABLE SSANGKIYEOK-OE-KIYEOK
-0x84CB 0xAF82 # HANGUL SYLLABLE SSANGKIYEOK-OE-SSANGKIYEOK
-0x84CC 0xAF83 # HANGUL SYLLABLE SSANGKIYEOK-OE-KIYEOKSIOS
-0x84CD 0xAF85 # HANGUL SYLLABLE SSANGKIYEOK-OE-NIEUNCIEUC
-0x84CE 0xAF86 # HANGUL SYLLABLE SSANGKIYEOK-OE-NIEUNHIEUH
-0x84CF 0xAF87 # HANGUL SYLLABLE SSANGKIYEOK-OE-TIKEUT
-0x84D0 0xAF89 # HANGUL SYLLABLE SSANGKIYEOK-OE-RIEULKIYEOK
-0x84D1 0xAF8A # HANGUL SYLLABLE SSANGKIYEOK-OE-RIEULMIEUM
-0x84D2 0xAF8B # HANGUL SYLLABLE SSANGKIYEOK-OE-RIEULPIEUP
-0x84D3 0xAF8C # HANGUL SYLLABLE SSANGKIYEOK-OE-RIEULSIOS
-0x84D4 0xAF8D # HANGUL SYLLABLE SSANGKIYEOK-OE-RIEULTHIEUTH
-0x84D5 0xAF8E # HANGUL SYLLABLE SSANGKIYEOK-OE-RIEULPHIEUPH
-0x84D6 0xAF8F # HANGUL SYLLABLE SSANGKIYEOK-OE-RIEULHIEUH
-0x84D7 0xAF92 # HANGUL SYLLABLE SSANGKIYEOK-OE-PIEUPSIOS
-0x84D8 0xAF93 # HANGUL SYLLABLE SSANGKIYEOK-OE-SIOS
-0x84D9 0xAF94 # HANGUL SYLLABLE SSANGKIYEOK-OE-SSANGSIOS
-0x84DA 0xAF96 # HANGUL SYLLABLE SSANGKIYEOK-OE-CIEUC
-0x84DB 0xAF97 # HANGUL SYLLABLE SSANGKIYEOK-OE-CHIEUCH
-0x84DC 0xAF98 # HANGUL SYLLABLE SSANGKIYEOK-OE-KHIEUKH
-0x84DD 0xAF99 # HANGUL SYLLABLE SSANGKIYEOK-OE-THIEUTH
-0x84DE 0xAF9A # HANGUL SYLLABLE SSANGKIYEOK-OE-PHIEUPH
-0x84DF 0xAF9B # HANGUL SYLLABLE SSANGKIYEOK-OE-HIEUH
-0x84E0 0xAF9D # HANGUL SYLLABLE SSANGKIYEOK-YO-KIYEOK
-0x84E1 0xAF9E # HANGUL SYLLABLE SSANGKIYEOK-YO-SSANGKIYEOK
-0x84E2 0xAF9F # HANGUL SYLLABLE SSANGKIYEOK-YO-KIYEOKSIOS
-0x84E3 0xAFA0 # HANGUL SYLLABLE SSANGKIYEOK-YO-NIEUN
-0x84E4 0xAFA1 # HANGUL SYLLABLE SSANGKIYEOK-YO-NIEUNCIEUC
-0x84E5 0xAFA2 # HANGUL SYLLABLE SSANGKIYEOK-YO-NIEUNHIEUH
-0x84E6 0xAFA3 # HANGUL SYLLABLE SSANGKIYEOK-YO-TIKEUT
-0x84E7 0xAFA4 # HANGUL SYLLABLE SSANGKIYEOK-YO-RIEUL
-0x84E8 0xAFA5 # HANGUL SYLLABLE SSANGKIYEOK-YO-RIEULKIYEOK
-0x84E9 0xAFA6 # HANGUL SYLLABLE SSANGKIYEOK-YO-RIEULMIEUM
-0x84EA 0xAFA7 # HANGUL SYLLABLE SSANGKIYEOK-YO-RIEULPIEUP
-0x84EB 0xAFA8 # HANGUL SYLLABLE SSANGKIYEOK-YO-RIEULSIOS
-0x84EC 0xAFA9 # HANGUL SYLLABLE SSANGKIYEOK-YO-RIEULTHIEUTH
-0x84ED 0xAFAA # HANGUL SYLLABLE SSANGKIYEOK-YO-RIEULPHIEUPH
-0x84EE 0xAFAB # HANGUL SYLLABLE SSANGKIYEOK-YO-RIEULHIEUH
-0x84EF 0xAFAC # HANGUL SYLLABLE SSANGKIYEOK-YO-MIEUM
-0x84F0 0xAFAD # HANGUL SYLLABLE SSANGKIYEOK-YO-PIEUP
-0x84F1 0xAFAE # HANGUL SYLLABLE SSANGKIYEOK-YO-PIEUPSIOS
-0x84F2 0xAFAF # HANGUL SYLLABLE SSANGKIYEOK-YO-SIOS
-0x84F3 0xAFB0 # HANGUL SYLLABLE SSANGKIYEOK-YO-SSANGSIOS
-0x84F4 0xAFB1 # HANGUL SYLLABLE SSANGKIYEOK-YO-IEUNG
-0x84F5 0xAFB2 # HANGUL SYLLABLE SSANGKIYEOK-YO-CIEUC
-0x84F6 0xAFB3 # HANGUL SYLLABLE SSANGKIYEOK-YO-CHIEUCH
-0x84F7 0xAFB4 # HANGUL SYLLABLE SSANGKIYEOK-YO-KHIEUKH
-0x84F8 0xAFB5 # HANGUL SYLLABLE SSANGKIYEOK-YO-THIEUTH
-0x84F9 0xAFB6 # HANGUL SYLLABLE SSANGKIYEOK-YO-PHIEUPH
-0x84FA 0xAFB7 # HANGUL SYLLABLE SSANGKIYEOK-YO-HIEUH
-0x84FB 0xAFBA # HANGUL SYLLABLE SSANGKIYEOK-U-SSANGKIYEOK
-0x84FC 0xAFBB # HANGUL SYLLABLE SSANGKIYEOK-U-KIYEOKSIOS
-0x84FD 0xAFBD # HANGUL SYLLABLE SSANGKIYEOK-U-NIEUNCIEUC
-0x84FE 0xAFBE # HANGUL SYLLABLE SSANGKIYEOK-U-NIEUNHIEUH
-0x8541 0xAFBF # HANGUL SYLLABLE SSANGKIYEOK-U-TIKEUT
-0x8542 0xAFC1 # HANGUL SYLLABLE SSANGKIYEOK-U-RIEULKIYEOK
-0x8543 0xAFC2 # HANGUL SYLLABLE SSANGKIYEOK-U-RIEULMIEUM
-0x8544 0xAFC3 # HANGUL SYLLABLE SSANGKIYEOK-U-RIEULPIEUP
-0x8545 0xAFC4 # HANGUL SYLLABLE SSANGKIYEOK-U-RIEULSIOS
-0x8546 0xAFC5 # HANGUL SYLLABLE SSANGKIYEOK-U-RIEULTHIEUTH
-0x8547 0xAFC6 # HANGUL SYLLABLE SSANGKIYEOK-U-RIEULPHIEUPH
-0x8548 0xAFCA # HANGUL SYLLABLE SSANGKIYEOK-U-PIEUPSIOS
-0x8549 0xAFCC # HANGUL SYLLABLE SSANGKIYEOK-U-SSANGSIOS
-0x854A 0xAFCF # HANGUL SYLLABLE SSANGKIYEOK-U-CHIEUCH
-0x854B 0xAFD0 # HANGUL SYLLABLE SSANGKIYEOK-U-KHIEUKH
-0x854C 0xAFD1 # HANGUL SYLLABLE SSANGKIYEOK-U-THIEUTH
-0x854D 0xAFD2 # HANGUL SYLLABLE SSANGKIYEOK-U-PHIEUPH
-0x854E 0xAFD3 # HANGUL SYLLABLE SSANGKIYEOK-U-HIEUH
-0x854F 0xAFD5 # HANGUL SYLLABLE SSANGKIYEOK-WEO-KIYEOK
-0x8550 0xAFD6 # HANGUL SYLLABLE SSANGKIYEOK-WEO-SSANGKIYEOK
-0x8551 0xAFD7 # HANGUL SYLLABLE SSANGKIYEOK-WEO-KIYEOKSIOS
-0x8552 0xAFD8 # HANGUL SYLLABLE SSANGKIYEOK-WEO-NIEUN
-0x8553 0xAFD9 # HANGUL SYLLABLE SSANGKIYEOK-WEO-NIEUNCIEUC
-0x8554 0xAFDA # HANGUL SYLLABLE SSANGKIYEOK-WEO-NIEUNHIEUH
-0x8555 0xAFDB # HANGUL SYLLABLE SSANGKIYEOK-WEO-TIKEUT
-0x8556 0xAFDD # HANGUL SYLLABLE SSANGKIYEOK-WEO-RIEULKIYEOK
-0x8557 0xAFDE # HANGUL SYLLABLE SSANGKIYEOK-WEO-RIEULMIEUM
-0x8558 0xAFDF # HANGUL SYLLABLE SSANGKIYEOK-WEO-RIEULPIEUP
-0x8559 0xAFE0 # HANGUL SYLLABLE SSANGKIYEOK-WEO-RIEULSIOS
-0x855A 0xAFE1 # HANGUL SYLLABLE SSANGKIYEOK-WEO-RIEULTHIEUTH
-0x8561 0xAFE2 # HANGUL SYLLABLE SSANGKIYEOK-WEO-RIEULPHIEUPH
-0x8562 0xAFE3 # HANGUL SYLLABLE SSANGKIYEOK-WEO-RIEULHIEUH
-0x8563 0xAFE4 # HANGUL SYLLABLE SSANGKIYEOK-WEO-MIEUM
-0x8564 0xAFE5 # HANGUL SYLLABLE SSANGKIYEOK-WEO-PIEUP
-0x8565 0xAFE6 # HANGUL SYLLABLE SSANGKIYEOK-WEO-PIEUPSIOS
-0x8566 0xAFE7 # HANGUL SYLLABLE SSANGKIYEOK-WEO-SIOS
-0x8567 0xAFEA # HANGUL SYLLABLE SSANGKIYEOK-WEO-CIEUC
-0x8568 0xAFEB # HANGUL SYLLABLE SSANGKIYEOK-WEO-CHIEUCH
-0x8569 0xAFEC # HANGUL SYLLABLE SSANGKIYEOK-WEO-KHIEUKH
-0x856A 0xAFED # HANGUL SYLLABLE SSANGKIYEOK-WEO-THIEUTH
-0x856B 0xAFEE # HANGUL SYLLABLE SSANGKIYEOK-WEO-PHIEUPH
-0x856C 0xAFEF # HANGUL SYLLABLE SSANGKIYEOK-WEO-HIEUH
-0x856D 0xAFF2 # HANGUL SYLLABLE SSANGKIYEOK-WE-SSANGKIYEOK
-0x856E 0xAFF3 # HANGUL SYLLABLE SSANGKIYEOK-WE-KIYEOKSIOS
-0x856F 0xAFF5 # HANGUL SYLLABLE SSANGKIYEOK-WE-NIEUNCIEUC
-0x8570 0xAFF6 # HANGUL SYLLABLE SSANGKIYEOK-WE-NIEUNHIEUH
-0x8571 0xAFF7 # HANGUL SYLLABLE SSANGKIYEOK-WE-TIKEUT
-0x8572 0xAFF9 # HANGUL SYLLABLE SSANGKIYEOK-WE-RIEULKIYEOK
-0x8573 0xAFFA # HANGUL SYLLABLE SSANGKIYEOK-WE-RIEULMIEUM
-0x8574 0xAFFB # HANGUL SYLLABLE SSANGKIYEOK-WE-RIEULPIEUP
-0x8575 0xAFFC # HANGUL SYLLABLE SSANGKIYEOK-WE-RIEULSIOS
-0x8576 0xAFFD # HANGUL SYLLABLE SSANGKIYEOK-WE-RIEULTHIEUTH
-0x8577 0xAFFE # HANGUL SYLLABLE SSANGKIYEOK-WE-RIEULPHIEUPH
-0x8578 0xAFFF # HANGUL SYLLABLE SSANGKIYEOK-WE-RIEULHIEUH
-0x8579 0xB002 # HANGUL SYLLABLE SSANGKIYEOK-WE-PIEUPSIOS
-0x857A 0xB003 # HANGUL SYLLABLE SSANGKIYEOK-WE-SIOS
-0x8581 0xB005 # HANGUL SYLLABLE SSANGKIYEOK-WE-IEUNG
-0x8582 0xB006 # HANGUL SYLLABLE SSANGKIYEOK-WE-CIEUC
-0x8583 0xB007 # HANGUL SYLLABLE SSANGKIYEOK-WE-CHIEUCH
-0x8584 0xB008 # HANGUL SYLLABLE SSANGKIYEOK-WE-KHIEUKH
-0x8585 0xB009 # HANGUL SYLLABLE SSANGKIYEOK-WE-THIEUTH
-0x8586 0xB00A # HANGUL SYLLABLE SSANGKIYEOK-WE-PHIEUPH
-0x8587 0xB00B # HANGUL SYLLABLE SSANGKIYEOK-WE-HIEUH
-0x8588 0xB00D # HANGUL SYLLABLE SSANGKIYEOK-WI-KIYEOK
-0x8589 0xB00E # HANGUL SYLLABLE SSANGKIYEOK-WI-SSANGKIYEOK
-0x858A 0xB00F # HANGUL SYLLABLE SSANGKIYEOK-WI-KIYEOKSIOS
-0x858B 0xB011 # HANGUL SYLLABLE SSANGKIYEOK-WI-NIEUNCIEUC
-0x858C 0xB012 # HANGUL SYLLABLE SSANGKIYEOK-WI-NIEUNHIEUH
-0x858D 0xB013 # HANGUL SYLLABLE SSANGKIYEOK-WI-TIKEUT
-0x858E 0xB015 # HANGUL SYLLABLE SSANGKIYEOK-WI-RIEULKIYEOK
-0x858F 0xB016 # HANGUL SYLLABLE SSANGKIYEOK-WI-RIEULMIEUM
-0x8590 0xB017 # HANGUL SYLLABLE SSANGKIYEOK-WI-RIEULPIEUP
-0x8591 0xB018 # HANGUL SYLLABLE SSANGKIYEOK-WI-RIEULSIOS
-0x8592 0xB019 # HANGUL SYLLABLE SSANGKIYEOK-WI-RIEULTHIEUTH
-0x8593 0xB01A # HANGUL SYLLABLE SSANGKIYEOK-WI-RIEULPHIEUPH
-0x8594 0xB01B # HANGUL SYLLABLE SSANGKIYEOK-WI-RIEULHIEUH
-0x8595 0xB01E # HANGUL SYLLABLE SSANGKIYEOK-WI-PIEUPSIOS
-0x8596 0xB01F # HANGUL SYLLABLE SSANGKIYEOK-WI-SIOS
-0x8597 0xB020 # HANGUL SYLLABLE SSANGKIYEOK-WI-SSANGSIOS
-0x8598 0xB021 # HANGUL SYLLABLE SSANGKIYEOK-WI-IEUNG
-0x8599 0xB022 # HANGUL SYLLABLE SSANGKIYEOK-WI-CIEUC
-0x859A 0xB023 # HANGUL SYLLABLE SSANGKIYEOK-WI-CHIEUCH
-0x859B 0xB024 # HANGUL SYLLABLE SSANGKIYEOK-WI-KHIEUKH
-0x859C 0xB025 # HANGUL SYLLABLE SSANGKIYEOK-WI-THIEUTH
-0x859D 0xB026 # HANGUL SYLLABLE SSANGKIYEOK-WI-PHIEUPH
-0x859E 0xB027 # HANGUL SYLLABLE SSANGKIYEOK-WI-HIEUH
-0x859F 0xB029 # HANGUL SYLLABLE SSANGKIYEOK-YU-KIYEOK
-0x85A0 0xB02A # HANGUL SYLLABLE SSANGKIYEOK-YU-SSANGKIYEOK
-0x85A1 0xB02B # HANGUL SYLLABLE SSANGKIYEOK-YU-KIYEOKSIOS
-0x85A2 0xB02C # HANGUL SYLLABLE SSANGKIYEOK-YU-NIEUN
-0x85A3 0xB02D # HANGUL SYLLABLE SSANGKIYEOK-YU-NIEUNCIEUC
-0x85A4 0xB02E # HANGUL SYLLABLE SSANGKIYEOK-YU-NIEUNHIEUH
-0x85A5 0xB02F # HANGUL SYLLABLE SSANGKIYEOK-YU-TIKEUT
-0x85A6 0xB030 # HANGUL SYLLABLE SSANGKIYEOK-YU-RIEUL
-0x85A7 0xB031 # HANGUL SYLLABLE SSANGKIYEOK-YU-RIEULKIYEOK
-0x85A8 0xB032 # HANGUL SYLLABLE SSANGKIYEOK-YU-RIEULMIEUM
-0x85A9 0xB033 # HANGUL SYLLABLE SSANGKIYEOK-YU-RIEULPIEUP
-0x85AA 0xB034 # HANGUL SYLLABLE SSANGKIYEOK-YU-RIEULSIOS
-0x85AB 0xB035 # HANGUL SYLLABLE SSANGKIYEOK-YU-RIEULTHIEUTH
-0x85AC 0xB036 # HANGUL SYLLABLE SSANGKIYEOK-YU-RIEULPHIEUPH
-0x85AD 0xB037 # HANGUL SYLLABLE SSANGKIYEOK-YU-RIEULHIEUH
-0x85AE 0xB038 # HANGUL SYLLABLE SSANGKIYEOK-YU-MIEUM
-0x85AF 0xB039 # HANGUL SYLLABLE SSANGKIYEOK-YU-PIEUP
-0x85B0 0xB03A # HANGUL SYLLABLE SSANGKIYEOK-YU-PIEUPSIOS
-0x85B1 0xB03B # HANGUL SYLLABLE SSANGKIYEOK-YU-SIOS
-0x85B2 0xB03C # HANGUL SYLLABLE SSANGKIYEOK-YU-SSANGSIOS
-0x85B3 0xB03D # HANGUL SYLLABLE SSANGKIYEOK-YU-IEUNG
-0x85B4 0xB03E # HANGUL SYLLABLE SSANGKIYEOK-YU-CIEUC
-0x85B5 0xB03F # HANGUL SYLLABLE SSANGKIYEOK-YU-CHIEUCH
-0x85B6 0xB040 # HANGUL SYLLABLE SSANGKIYEOK-YU-KHIEUKH
-0x85B7 0xB041 # HANGUL SYLLABLE SSANGKIYEOK-YU-THIEUTH
-0x85B8 0xB042 # HANGUL SYLLABLE SSANGKIYEOK-YU-PHIEUPH
-0x85B9 0xB043 # HANGUL SYLLABLE SSANGKIYEOK-YU-HIEUH
-0x85BA 0xB046 # HANGUL SYLLABLE SSANGKIYEOK-EU-SSANGKIYEOK
-0x85BB 0xB047 # HANGUL SYLLABLE SSANGKIYEOK-EU-KIYEOKSIOS
-0x85BC 0xB049 # HANGUL SYLLABLE SSANGKIYEOK-EU-NIEUNCIEUC
-0x85BD 0xB04B # HANGUL SYLLABLE SSANGKIYEOK-EU-TIKEUT
-0x85BE 0xB04D # HANGUL SYLLABLE SSANGKIYEOK-EU-RIEULKIYEOK
-0x85BF 0xB04F # HANGUL SYLLABLE SSANGKIYEOK-EU-RIEULPIEUP
-0x85C0 0xB050 # HANGUL SYLLABLE SSANGKIYEOK-EU-RIEULSIOS
-0x85C1 0xB051 # HANGUL SYLLABLE SSANGKIYEOK-EU-RIEULTHIEUTH
-0x85C2 0xB052 # HANGUL SYLLABLE SSANGKIYEOK-EU-RIEULPHIEUPH
-0x85C3 0xB056 # HANGUL SYLLABLE SSANGKIYEOK-EU-PIEUPSIOS
-0x85C4 0xB058 # HANGUL SYLLABLE SSANGKIYEOK-EU-SSANGSIOS
-0x85C5 0xB05A # HANGUL SYLLABLE SSANGKIYEOK-EU-CIEUC
-0x85C6 0xB05B # HANGUL SYLLABLE SSANGKIYEOK-EU-CHIEUCH
-0x85C7 0xB05C # HANGUL SYLLABLE SSANGKIYEOK-EU-KHIEUKH
-0x85C8 0xB05E # HANGUL SYLLABLE SSANGKIYEOK-EU-PHIEUPH
-0x85C9 0xB05F # HANGUL SYLLABLE SSANGKIYEOK-EU-HIEUH
-0x85CA 0xB060 # HANGUL SYLLABLE SSANGKIYEOK-YI
-0x85CB 0xB061 # HANGUL SYLLABLE SSANGKIYEOK-YI-KIYEOK
-0x85CC 0xB062 # HANGUL SYLLABLE SSANGKIYEOK-YI-SSANGKIYEOK
-0x85CD 0xB063 # HANGUL SYLLABLE SSANGKIYEOK-YI-KIYEOKSIOS
-0x85CE 0xB064 # HANGUL SYLLABLE SSANGKIYEOK-YI-NIEUN
-0x85CF 0xB065 # HANGUL SYLLABLE SSANGKIYEOK-YI-NIEUNCIEUC
-0x85D0 0xB066 # HANGUL SYLLABLE SSANGKIYEOK-YI-NIEUNHIEUH
-0x85D1 0xB067 # HANGUL SYLLABLE SSANGKIYEOK-YI-TIKEUT
-0x85D2 0xB068 # HANGUL SYLLABLE SSANGKIYEOK-YI-RIEUL
-0x85D3 0xB069 # HANGUL SYLLABLE SSANGKIYEOK-YI-RIEULKIYEOK
-0x85D4 0xB06A # HANGUL SYLLABLE SSANGKIYEOK-YI-RIEULMIEUM
-0x85D5 0xB06B # HANGUL SYLLABLE SSANGKIYEOK-YI-RIEULPIEUP
-0x85D6 0xB06C # HANGUL SYLLABLE SSANGKIYEOK-YI-RIEULSIOS
-0x85D7 0xB06D # HANGUL SYLLABLE SSANGKIYEOK-YI-RIEULTHIEUTH
-0x85D8 0xB06E # HANGUL SYLLABLE SSANGKIYEOK-YI-RIEULPHIEUPH
-0x85D9 0xB06F # HANGUL SYLLABLE SSANGKIYEOK-YI-RIEULHIEUH
-0x85DA 0xB070 # HANGUL SYLLABLE SSANGKIYEOK-YI-MIEUM
-0x85DB 0xB071 # HANGUL SYLLABLE SSANGKIYEOK-YI-PIEUP
-0x85DC 0xB072 # HANGUL SYLLABLE SSANGKIYEOK-YI-PIEUPSIOS
-0x85DD 0xB073 # HANGUL SYLLABLE SSANGKIYEOK-YI-SIOS
-0x85DE 0xB074 # HANGUL SYLLABLE SSANGKIYEOK-YI-SSANGSIOS
-0x85DF 0xB075 # HANGUL SYLLABLE SSANGKIYEOK-YI-IEUNG
-0x85E0 0xB076 # HANGUL SYLLABLE SSANGKIYEOK-YI-CIEUC
-0x85E1 0xB077 # HANGUL SYLLABLE SSANGKIYEOK-YI-CHIEUCH
-0x85E2 0xB078 # HANGUL SYLLABLE SSANGKIYEOK-YI-KHIEUKH
-0x85E3 0xB079 # HANGUL SYLLABLE SSANGKIYEOK-YI-THIEUTH
-0x85E4 0xB07A # HANGUL SYLLABLE SSANGKIYEOK-YI-PHIEUPH
-0x85E5 0xB07B # HANGUL SYLLABLE SSANGKIYEOK-YI-HIEUH
-0x85E6 0xB07E # HANGUL SYLLABLE SSANGKIYEOK-I-SSANGKIYEOK
-0x85E7 0xB07F # HANGUL SYLLABLE SSANGKIYEOK-I-KIYEOKSIOS
-0x85E8 0xB081 # HANGUL SYLLABLE SSANGKIYEOK-I-NIEUNCIEUC
-0x85E9 0xB082 # HANGUL SYLLABLE SSANGKIYEOK-I-NIEUNHIEUH
-0x85EA 0xB083 # HANGUL SYLLABLE SSANGKIYEOK-I-TIKEUT
-0x85EB 0xB085 # HANGUL SYLLABLE SSANGKIYEOK-I-RIEULKIYEOK
-0x85EC 0xB086 # HANGUL SYLLABLE SSANGKIYEOK-I-RIEULMIEUM
-0x85ED 0xB087 # HANGUL SYLLABLE SSANGKIYEOK-I-RIEULPIEUP
-0x85EE 0xB088 # HANGUL SYLLABLE SSANGKIYEOK-I-RIEULSIOS
-0x85EF 0xB089 # HANGUL SYLLABLE SSANGKIYEOK-I-RIEULTHIEUTH
-0x85F0 0xB08A # HANGUL SYLLABLE SSANGKIYEOK-I-RIEULPHIEUPH
-0x85F1 0xB08B # HANGUL SYLLABLE SSANGKIYEOK-I-RIEULHIEUH
-0x85F2 0xB08E # HANGUL SYLLABLE SSANGKIYEOK-I-PIEUPSIOS
-0x85F3 0xB090 # HANGUL SYLLABLE SSANGKIYEOK-I-SSANGSIOS
-0x85F4 0xB092 # HANGUL SYLLABLE SSANGKIYEOK-I-CIEUC
-0x85F5 0xB093 # HANGUL SYLLABLE SSANGKIYEOK-I-CHIEUCH
-0x85F6 0xB094 # HANGUL SYLLABLE SSANGKIYEOK-I-KHIEUKH
-0x85F7 0xB095 # HANGUL SYLLABLE SSANGKIYEOK-I-THIEUTH
-0x85F8 0xB096 # HANGUL SYLLABLE SSANGKIYEOK-I-PHIEUPH
-0x85F9 0xB097 # HANGUL SYLLABLE SSANGKIYEOK-I-HIEUH
-0x85FA 0xB09B # HANGUL SYLLABLE NIEUN-A-KIYEOKSIOS
-0x85FB 0xB09D # HANGUL SYLLABLE NIEUN-A-NIEUNCIEUC
-0x85FC 0xB09E # HANGUL SYLLABLE NIEUN-A-NIEUNHIEUH
-0x85FD 0xB0A3 # HANGUL SYLLABLE NIEUN-A-RIEULPIEUP
-0x85FE 0xB0A4 # HANGUL SYLLABLE NIEUN-A-RIEULSIOS
-0x8641 0xB0A5 # HANGUL SYLLABLE NIEUN-A-RIEULTHIEUTH
-0x8642 0xB0A6 # HANGUL SYLLABLE NIEUN-A-RIEULPHIEUPH
-0x8643 0xB0A7 # HANGUL SYLLABLE NIEUN-A-RIEULHIEUH
-0x8644 0xB0AA # HANGUL SYLLABLE NIEUN-A-PIEUPSIOS
-0x8645 0xB0B0 # HANGUL SYLLABLE NIEUN-A-KHIEUKH
-0x8646 0xB0B2 # HANGUL SYLLABLE NIEUN-A-PHIEUPH
-0x8647 0xB0B6 # HANGUL SYLLABLE NIEUN-AE-SSANGKIYEOK
-0x8648 0xB0B7 # HANGUL SYLLABLE NIEUN-AE-KIYEOKSIOS
-0x8649 0xB0B9 # HANGUL SYLLABLE NIEUN-AE-NIEUNCIEUC
-0x864A 0xB0BA # HANGUL SYLLABLE NIEUN-AE-NIEUNHIEUH
-0x864B 0xB0BB # HANGUL SYLLABLE NIEUN-AE-TIKEUT
-0x864C 0xB0BD # HANGUL SYLLABLE NIEUN-AE-RIEULKIYEOK
-0x864D 0xB0BE # HANGUL SYLLABLE NIEUN-AE-RIEULMIEUM
-0x864E 0xB0BF # HANGUL SYLLABLE NIEUN-AE-RIEULPIEUP
-0x864F 0xB0C0 # HANGUL SYLLABLE NIEUN-AE-RIEULSIOS
-0x8650 0xB0C1 # HANGUL SYLLABLE NIEUN-AE-RIEULTHIEUTH
-0x8651 0xB0C2 # HANGUL SYLLABLE NIEUN-AE-RIEULPHIEUPH
-0x8652 0xB0C3 # HANGUL SYLLABLE NIEUN-AE-RIEULHIEUH
-0x8653 0xB0C6 # HANGUL SYLLABLE NIEUN-AE-PIEUPSIOS
-0x8654 0xB0CA # HANGUL SYLLABLE NIEUN-AE-CIEUC
-0x8655 0xB0CB # HANGUL SYLLABLE NIEUN-AE-CHIEUCH
-0x8656 0xB0CC # HANGUL SYLLABLE NIEUN-AE-KHIEUKH
-0x8657 0xB0CD # HANGUL SYLLABLE NIEUN-AE-THIEUTH
-0x8658 0xB0CE # HANGUL SYLLABLE NIEUN-AE-PHIEUPH
-0x8659 0xB0CF # HANGUL SYLLABLE NIEUN-AE-HIEUH
-0x865A 0xB0D2 # HANGUL SYLLABLE NIEUN-YA-SSANGKIYEOK
-0x8661 0xB0D3 # HANGUL SYLLABLE NIEUN-YA-KIYEOKSIOS
-0x8662 0xB0D5 # HANGUL SYLLABLE NIEUN-YA-NIEUNCIEUC
-0x8663 0xB0D6 # HANGUL SYLLABLE NIEUN-YA-NIEUNHIEUH
-0x8664 0xB0D7 # HANGUL SYLLABLE NIEUN-YA-TIKEUT
-0x8665 0xB0D9 # HANGUL SYLLABLE NIEUN-YA-RIEULKIYEOK
-0x8666 0xB0DA # HANGUL SYLLABLE NIEUN-YA-RIEULMIEUM
-0x8667 0xB0DB # HANGUL SYLLABLE NIEUN-YA-RIEULPIEUP
-0x8668 0xB0DC # HANGUL SYLLABLE NIEUN-YA-RIEULSIOS
-0x8669 0xB0DD # HANGUL SYLLABLE NIEUN-YA-RIEULTHIEUTH
-0x866A 0xB0DE # HANGUL SYLLABLE NIEUN-YA-RIEULPHIEUPH
-0x866B 0xB0DF # HANGUL SYLLABLE NIEUN-YA-RIEULHIEUH
-0x866C 0xB0E1 # HANGUL SYLLABLE NIEUN-YA-PIEUP
-0x866D 0xB0E2 # HANGUL SYLLABLE NIEUN-YA-PIEUPSIOS
-0x866E 0xB0E3 # HANGUL SYLLABLE NIEUN-YA-SIOS
-0x866F 0xB0E4 # HANGUL SYLLABLE NIEUN-YA-SSANGSIOS
-0x8670 0xB0E6 # HANGUL SYLLABLE NIEUN-YA-CIEUC
-0x8671 0xB0E7 # HANGUL SYLLABLE NIEUN-YA-CHIEUCH
-0x8672 0xB0E8 # HANGUL SYLLABLE NIEUN-YA-KHIEUKH
-0x8673 0xB0E9 # HANGUL SYLLABLE NIEUN-YA-THIEUTH
-0x8674 0xB0EA # HANGUL SYLLABLE NIEUN-YA-PHIEUPH
-0x8675 0xB0EB # HANGUL SYLLABLE NIEUN-YA-HIEUH
-0x8676 0xB0EC # HANGUL SYLLABLE NIEUN-YAE
-0x8677 0xB0ED # HANGUL SYLLABLE NIEUN-YAE-KIYEOK
-0x8678 0xB0EE # HANGUL SYLLABLE NIEUN-YAE-SSANGKIYEOK
-0x8679 0xB0EF # HANGUL SYLLABLE NIEUN-YAE-KIYEOKSIOS
-0x867A 0xB0F0 # HANGUL SYLLABLE NIEUN-YAE-NIEUN
-0x8681 0xB0F1 # HANGUL SYLLABLE NIEUN-YAE-NIEUNCIEUC
-0x8682 0xB0F2 # HANGUL SYLLABLE NIEUN-YAE-NIEUNHIEUH
-0x8683 0xB0F3 # HANGUL SYLLABLE NIEUN-YAE-TIKEUT
-0x8684 0xB0F4 # HANGUL SYLLABLE NIEUN-YAE-RIEUL
-0x8685 0xB0F5 # HANGUL SYLLABLE NIEUN-YAE-RIEULKIYEOK
-0x8686 0xB0F6 # HANGUL SYLLABLE NIEUN-YAE-RIEULMIEUM
-0x8687 0xB0F7 # HANGUL SYLLABLE NIEUN-YAE-RIEULPIEUP
-0x8688 0xB0F8 # HANGUL SYLLABLE NIEUN-YAE-RIEULSIOS
-0x8689 0xB0F9 # HANGUL SYLLABLE NIEUN-YAE-RIEULTHIEUTH
-0x868A 0xB0FA # HANGUL SYLLABLE NIEUN-YAE-RIEULPHIEUPH
-0x868B 0xB0FB # HANGUL SYLLABLE NIEUN-YAE-RIEULHIEUH
-0x868C 0xB0FC # HANGUL SYLLABLE NIEUN-YAE-MIEUM
-0x868D 0xB0FD # HANGUL SYLLABLE NIEUN-YAE-PIEUP
-0x868E 0xB0FE # HANGUL SYLLABLE NIEUN-YAE-PIEUPSIOS
-0x868F 0xB0FF # HANGUL SYLLABLE NIEUN-YAE-SIOS
-0x8690 0xB100 # HANGUL SYLLABLE NIEUN-YAE-SSANGSIOS
-0x8691 0xB101 # HANGUL SYLLABLE NIEUN-YAE-IEUNG
-0x8692 0xB102 # HANGUL SYLLABLE NIEUN-YAE-CIEUC
-0x8693 0xB103 # HANGUL SYLLABLE NIEUN-YAE-CHIEUCH
-0x8694 0xB104 # HANGUL SYLLABLE NIEUN-YAE-KHIEUKH
-0x8695 0xB105 # HANGUL SYLLABLE NIEUN-YAE-THIEUTH
-0x8696 0xB106 # HANGUL SYLLABLE NIEUN-YAE-PHIEUPH
-0x8697 0xB107 # HANGUL SYLLABLE NIEUN-YAE-HIEUH
-0x8698 0xB10A # HANGUL SYLLABLE NIEUN-EO-SSANGKIYEOK
-0x8699 0xB10D # HANGUL SYLLABLE NIEUN-EO-NIEUNCIEUC
-0x869A 0xB10E # HANGUL SYLLABLE NIEUN-EO-NIEUNHIEUH
-0x869B 0xB10F # HANGUL SYLLABLE NIEUN-EO-TIKEUT
-0x869C 0xB111 # HANGUL SYLLABLE NIEUN-EO-RIEULKIYEOK
-0x869D 0xB114 # HANGUL SYLLABLE NIEUN-EO-RIEULSIOS
-0x869E 0xB115 # HANGUL SYLLABLE NIEUN-EO-RIEULTHIEUTH
-0x869F 0xB116 # HANGUL SYLLABLE NIEUN-EO-RIEULPHIEUPH
-0x86A0 0xB117 # HANGUL SYLLABLE NIEUN-EO-RIEULHIEUH
-0x86A1 0xB11A # HANGUL SYLLABLE NIEUN-EO-PIEUPSIOS
-0x86A2 0xB11E # HANGUL SYLLABLE NIEUN-EO-CIEUC
-0x86A3 0xB11F # HANGUL SYLLABLE NIEUN-EO-CHIEUCH
-0x86A4 0xB120 # HANGUL SYLLABLE NIEUN-EO-KHIEUKH
-0x86A5 0xB121 # HANGUL SYLLABLE NIEUN-EO-THIEUTH
-0x86A6 0xB122 # HANGUL SYLLABLE NIEUN-EO-PHIEUPH
-0x86A7 0xB126 # HANGUL SYLLABLE NIEUN-E-SSANGKIYEOK
-0x86A8 0xB127 # HANGUL SYLLABLE NIEUN-E-KIYEOKSIOS
-0x86A9 0xB129 # HANGUL SYLLABLE NIEUN-E-NIEUNCIEUC
-0x86AA 0xB12A # HANGUL SYLLABLE NIEUN-E-NIEUNHIEUH
-0x86AB 0xB12B # HANGUL SYLLABLE NIEUN-E-TIKEUT
-0x86AC 0xB12D # HANGUL SYLLABLE NIEUN-E-RIEULKIYEOK
-0x86AD 0xB12E # HANGUL SYLLABLE NIEUN-E-RIEULMIEUM
-0x86AE 0xB12F # HANGUL SYLLABLE NIEUN-E-RIEULPIEUP
-0x86AF 0xB130 # HANGUL SYLLABLE NIEUN-E-RIEULSIOS
-0x86B0 0xB131 # HANGUL SYLLABLE NIEUN-E-RIEULTHIEUTH
-0x86B1 0xB132 # HANGUL SYLLABLE NIEUN-E-RIEULPHIEUPH
-0x86B2 0xB133 # HANGUL SYLLABLE NIEUN-E-RIEULHIEUH
-0x86B3 0xB136 # HANGUL SYLLABLE NIEUN-E-PIEUPSIOS
-0x86B4 0xB13A # HANGUL SYLLABLE NIEUN-E-CIEUC
-0x86B5 0xB13B # HANGUL SYLLABLE NIEUN-E-CHIEUCH
-0x86B6 0xB13C # HANGUL SYLLABLE NIEUN-E-KHIEUKH
-0x86B7 0xB13D # HANGUL SYLLABLE NIEUN-E-THIEUTH
-0x86B8 0xB13E # HANGUL SYLLABLE NIEUN-E-PHIEUPH
-0x86B9 0xB13F # HANGUL SYLLABLE NIEUN-E-HIEUH
-0x86BA 0xB142 # HANGUL SYLLABLE NIEUN-YEO-SSANGKIYEOK
-0x86BB 0xB143 # HANGUL SYLLABLE NIEUN-YEO-KIYEOKSIOS
-0x86BC 0xB145 # HANGUL SYLLABLE NIEUN-YEO-NIEUNCIEUC
-0x86BD 0xB146 # HANGUL SYLLABLE NIEUN-YEO-NIEUNHIEUH
-0x86BE 0xB147 # HANGUL SYLLABLE NIEUN-YEO-TIKEUT
-0x86BF 0xB149 # HANGUL SYLLABLE NIEUN-YEO-RIEULKIYEOK
-0x86C0 0xB14A # HANGUL SYLLABLE NIEUN-YEO-RIEULMIEUM
-0x86C1 0xB14B # HANGUL SYLLABLE NIEUN-YEO-RIEULPIEUP
-0x86C2 0xB14C # HANGUL SYLLABLE NIEUN-YEO-RIEULSIOS
-0x86C3 0xB14D # HANGUL SYLLABLE NIEUN-YEO-RIEULTHIEUTH
-0x86C4 0xB14E # HANGUL SYLLABLE NIEUN-YEO-RIEULPHIEUPH
-0x86C5 0xB14F # HANGUL SYLLABLE NIEUN-YEO-RIEULHIEUH
-0x86C6 0xB152 # HANGUL SYLLABLE NIEUN-YEO-PIEUPSIOS
-0x86C7 0xB153 # HANGUL SYLLABLE NIEUN-YEO-SIOS
-0x86C8 0xB156 # HANGUL SYLLABLE NIEUN-YEO-CIEUC
-0x86C9 0xB157 # HANGUL SYLLABLE NIEUN-YEO-CHIEUCH
-0x86CA 0xB159 # HANGUL SYLLABLE NIEUN-YEO-THIEUTH
-0x86CB 0xB15A # HANGUL SYLLABLE NIEUN-YEO-PHIEUPH
-0x86CC 0xB15B # HANGUL SYLLABLE NIEUN-YEO-HIEUH
-0x86CD 0xB15D # HANGUL SYLLABLE NIEUN-YE-KIYEOK
-0x86CE 0xB15E # HANGUL SYLLABLE NIEUN-YE-SSANGKIYEOK
-0x86CF 0xB15F # HANGUL SYLLABLE NIEUN-YE-KIYEOKSIOS
-0x86D0 0xB161 # HANGUL SYLLABLE NIEUN-YE-NIEUNCIEUC
-0x86D1 0xB162 # HANGUL SYLLABLE NIEUN-YE-NIEUNHIEUH
-0x86D2 0xB163 # HANGUL SYLLABLE NIEUN-YE-TIKEUT
-0x86D3 0xB164 # HANGUL SYLLABLE NIEUN-YE-RIEUL
-0x86D4 0xB165 # HANGUL SYLLABLE NIEUN-YE-RIEULKIYEOK
-0x86D5 0xB166 # HANGUL SYLLABLE NIEUN-YE-RIEULMIEUM
-0x86D6 0xB167 # HANGUL SYLLABLE NIEUN-YE-RIEULPIEUP
-0x86D7 0xB168 # HANGUL SYLLABLE NIEUN-YE-RIEULSIOS
-0x86D8 0xB169 # HANGUL SYLLABLE NIEUN-YE-RIEULTHIEUTH
-0x86D9 0xB16A # HANGUL SYLLABLE NIEUN-YE-RIEULPHIEUPH
-0x86DA 0xB16B # HANGUL SYLLABLE NIEUN-YE-RIEULHIEUH
-0x86DB 0xB16C # HANGUL SYLLABLE NIEUN-YE-MIEUM
-0x86DC 0xB16D # HANGUL SYLLABLE NIEUN-YE-PIEUP
-0x86DD 0xB16E # HANGUL SYLLABLE NIEUN-YE-PIEUPSIOS
-0x86DE 0xB16F # HANGUL SYLLABLE NIEUN-YE-SIOS
-0x86DF 0xB170 # HANGUL SYLLABLE NIEUN-YE-SSANGSIOS
-0x86E0 0xB171 # HANGUL SYLLABLE NIEUN-YE-IEUNG
-0x86E1 0xB172 # HANGUL SYLLABLE NIEUN-YE-CIEUC
-0x86E2 0xB173 # HANGUL SYLLABLE NIEUN-YE-CHIEUCH
-0x86E3 0xB174 # HANGUL SYLLABLE NIEUN-YE-KHIEUKH
-0x86E4 0xB175 # HANGUL SYLLABLE NIEUN-YE-THIEUTH
-0x86E5 0xB176 # HANGUL SYLLABLE NIEUN-YE-PHIEUPH
-0x86E6 0xB177 # HANGUL SYLLABLE NIEUN-YE-HIEUH
-0x86E7 0xB17A # HANGUL SYLLABLE NIEUN-O-SSANGKIYEOK
-0x86E8 0xB17B # HANGUL SYLLABLE NIEUN-O-KIYEOKSIOS
-0x86E9 0xB17D # HANGUL SYLLABLE NIEUN-O-NIEUNCIEUC
-0x86EA 0xB17E # HANGUL SYLLABLE NIEUN-O-NIEUNHIEUH
-0x86EB 0xB17F # HANGUL SYLLABLE NIEUN-O-TIKEUT
-0x86EC 0xB181 # HANGUL SYLLABLE NIEUN-O-RIEULKIYEOK
-0x86ED 0xB183 # HANGUL SYLLABLE NIEUN-O-RIEULPIEUP
-0x86EE 0xB184 # HANGUL SYLLABLE NIEUN-O-RIEULSIOS
-0x86EF 0xB185 # HANGUL SYLLABLE NIEUN-O-RIEULTHIEUTH
-0x86F0 0xB186 # HANGUL SYLLABLE NIEUN-O-RIEULPHIEUPH
-0x86F1 0xB187 # HANGUL SYLLABLE NIEUN-O-RIEULHIEUH
-0x86F2 0xB18A # HANGUL SYLLABLE NIEUN-O-PIEUPSIOS
-0x86F3 0xB18C # HANGUL SYLLABLE NIEUN-O-SSANGSIOS
-0x86F4 0xB18E # HANGUL SYLLABLE NIEUN-O-CIEUC
-0x86F5 0xB18F # HANGUL SYLLABLE NIEUN-O-CHIEUCH
-0x86F6 0xB190 # HANGUL SYLLABLE NIEUN-O-KHIEUKH
-0x86F7 0xB191 # HANGUL SYLLABLE NIEUN-O-THIEUTH
-0x86F8 0xB195 # HANGUL SYLLABLE NIEUN-WA-KIYEOK
-0x86F9 0xB196 # HANGUL SYLLABLE NIEUN-WA-SSANGKIYEOK
-0x86FA 0xB197 # HANGUL SYLLABLE NIEUN-WA-KIYEOKSIOS
-0x86FB 0xB199 # HANGUL SYLLABLE NIEUN-WA-NIEUNCIEUC
-0x86FC 0xB19A # HANGUL SYLLABLE NIEUN-WA-NIEUNHIEUH
-0x86FD 0xB19B # HANGUL SYLLABLE NIEUN-WA-TIKEUT
-0x86FE 0xB19D # HANGUL SYLLABLE NIEUN-WA-RIEULKIYEOK
-0x8741 0xB19E # HANGUL SYLLABLE NIEUN-WA-RIEULMIEUM
-0x8742 0xB19F # HANGUL SYLLABLE NIEUN-WA-RIEULPIEUP
-0x8743 0xB1A0 # HANGUL SYLLABLE NIEUN-WA-RIEULSIOS
-0x8744 0xB1A1 # HANGUL SYLLABLE NIEUN-WA-RIEULTHIEUTH
-0x8745 0xB1A2 # HANGUL SYLLABLE NIEUN-WA-RIEULPHIEUPH
-0x8746 0xB1A3 # HANGUL SYLLABLE NIEUN-WA-RIEULHIEUH
-0x8747 0xB1A4 # HANGUL SYLLABLE NIEUN-WA-MIEUM
-0x8748 0xB1A5 # HANGUL SYLLABLE NIEUN-WA-PIEUP
-0x8749 0xB1A6 # HANGUL SYLLABLE NIEUN-WA-PIEUPSIOS
-0x874A 0xB1A7 # HANGUL SYLLABLE NIEUN-WA-SIOS
-0x874B 0xB1A9 # HANGUL SYLLABLE NIEUN-WA-IEUNG
-0x874C 0xB1AA # HANGUL SYLLABLE NIEUN-WA-CIEUC
-0x874D 0xB1AB # HANGUL SYLLABLE NIEUN-WA-CHIEUCH
-0x874E 0xB1AC # HANGUL SYLLABLE NIEUN-WA-KHIEUKH
-0x874F 0xB1AD # HANGUL SYLLABLE NIEUN-WA-THIEUTH
-0x8750 0xB1AE # HANGUL SYLLABLE NIEUN-WA-PHIEUPH
-0x8751 0xB1AF # HANGUL SYLLABLE NIEUN-WA-HIEUH
-0x8752 0xB1B0 # HANGUL SYLLABLE NIEUN-WAE
-0x8753 0xB1B1 # HANGUL SYLLABLE NIEUN-WAE-KIYEOK
-0x8754 0xB1B2 # HANGUL SYLLABLE NIEUN-WAE-SSANGKIYEOK
-0x8755 0xB1B3 # HANGUL SYLLABLE NIEUN-WAE-KIYEOKSIOS
-0x8756 0xB1B4 # HANGUL SYLLABLE NIEUN-WAE-NIEUN
-0x8757 0xB1B5 # HANGUL SYLLABLE NIEUN-WAE-NIEUNCIEUC
-0x8758 0xB1B6 # HANGUL SYLLABLE NIEUN-WAE-NIEUNHIEUH
-0x8759 0xB1B7 # HANGUL SYLLABLE NIEUN-WAE-TIKEUT
-0x875A 0xB1B8 # HANGUL SYLLABLE NIEUN-WAE-RIEUL
-0x8761 0xB1B9 # HANGUL SYLLABLE NIEUN-WAE-RIEULKIYEOK
-0x8762 0xB1BA # HANGUL SYLLABLE NIEUN-WAE-RIEULMIEUM
-0x8763 0xB1BB # HANGUL SYLLABLE NIEUN-WAE-RIEULPIEUP
-0x8764 0xB1BC # HANGUL SYLLABLE NIEUN-WAE-RIEULSIOS
-0x8765 0xB1BD # HANGUL SYLLABLE NIEUN-WAE-RIEULTHIEUTH
-0x8766 0xB1BE # HANGUL SYLLABLE NIEUN-WAE-RIEULPHIEUPH
-0x8767 0xB1BF # HANGUL SYLLABLE NIEUN-WAE-RIEULHIEUH
-0x8768 0xB1C0 # HANGUL SYLLABLE NIEUN-WAE-MIEUM
-0x8769 0xB1C1 # HANGUL SYLLABLE NIEUN-WAE-PIEUP
-0x876A 0xB1C2 # HANGUL SYLLABLE NIEUN-WAE-PIEUPSIOS
-0x876B 0xB1C3 # HANGUL SYLLABLE NIEUN-WAE-SIOS
-0x876C 0xB1C4 # HANGUL SYLLABLE NIEUN-WAE-SSANGSIOS
-0x876D 0xB1C5 # HANGUL SYLLABLE NIEUN-WAE-IEUNG
-0x876E 0xB1C6 # HANGUL SYLLABLE NIEUN-WAE-CIEUC
-0x876F 0xB1C7 # HANGUL SYLLABLE NIEUN-WAE-CHIEUCH
-0x8770 0xB1C8 # HANGUL SYLLABLE NIEUN-WAE-KHIEUKH
-0x8771 0xB1C9 # HANGUL SYLLABLE NIEUN-WAE-THIEUTH
-0x8772 0xB1CA # HANGUL SYLLABLE NIEUN-WAE-PHIEUPH
-0x8773 0xB1CB # HANGUL SYLLABLE NIEUN-WAE-HIEUH
-0x8774 0xB1CD # HANGUL SYLLABLE NIEUN-OE-KIYEOK
-0x8775 0xB1CE # HANGUL SYLLABLE NIEUN-OE-SSANGKIYEOK
-0x8776 0xB1CF # HANGUL SYLLABLE NIEUN-OE-KIYEOKSIOS
-0x8777 0xB1D1 # HANGUL SYLLABLE NIEUN-OE-NIEUNCIEUC
-0x8778 0xB1D2 # HANGUL SYLLABLE NIEUN-OE-NIEUNHIEUH
-0x8779 0xB1D3 # HANGUL SYLLABLE NIEUN-OE-TIKEUT
-0x877A 0xB1D5 # HANGUL SYLLABLE NIEUN-OE-RIEULKIYEOK
-0x8781 0xB1D6 # HANGUL SYLLABLE NIEUN-OE-RIEULMIEUM
-0x8782 0xB1D7 # HANGUL SYLLABLE NIEUN-OE-RIEULPIEUP
-0x8783 0xB1D8 # HANGUL SYLLABLE NIEUN-OE-RIEULSIOS
-0x8784 0xB1D9 # HANGUL SYLLABLE NIEUN-OE-RIEULTHIEUTH
-0x8785 0xB1DA # HANGUL SYLLABLE NIEUN-OE-RIEULPHIEUPH
-0x8786 0xB1DB # HANGUL SYLLABLE NIEUN-OE-RIEULHIEUH
-0x8787 0xB1DE # HANGUL SYLLABLE NIEUN-OE-PIEUPSIOS
-0x8788 0xB1E0 # HANGUL SYLLABLE NIEUN-OE-SSANGSIOS
-0x8789 0xB1E1 # HANGUL SYLLABLE NIEUN-OE-IEUNG
-0x878A 0xB1E2 # HANGUL SYLLABLE NIEUN-OE-CIEUC
-0x878B 0xB1E3 # HANGUL SYLLABLE NIEUN-OE-CHIEUCH
-0x878C 0xB1E4 # HANGUL SYLLABLE NIEUN-OE-KHIEUKH
-0x878D 0xB1E5 # HANGUL SYLLABLE NIEUN-OE-THIEUTH
-0x878E 0xB1E6 # HANGUL SYLLABLE NIEUN-OE-PHIEUPH
-0x878F 0xB1E7 # HANGUL SYLLABLE NIEUN-OE-HIEUH
-0x8790 0xB1EA # HANGUL SYLLABLE NIEUN-YO-SSANGKIYEOK
-0x8791 0xB1EB # HANGUL SYLLABLE NIEUN-YO-KIYEOKSIOS
-0x8792 0xB1ED # HANGUL SYLLABLE NIEUN-YO-NIEUNCIEUC
-0x8793 0xB1EE # HANGUL SYLLABLE NIEUN-YO-NIEUNHIEUH
-0x8794 0xB1EF # HANGUL SYLLABLE NIEUN-YO-TIKEUT
-0x8795 0xB1F1 # HANGUL SYLLABLE NIEUN-YO-RIEULKIYEOK
-0x8796 0xB1F2 # HANGUL SYLLABLE NIEUN-YO-RIEULMIEUM
-0x8797 0xB1F3 # HANGUL SYLLABLE NIEUN-YO-RIEULPIEUP
-0x8798 0xB1F4 # HANGUL SYLLABLE NIEUN-YO-RIEULSIOS
-0x8799 0xB1F5 # HANGUL SYLLABLE NIEUN-YO-RIEULTHIEUTH
-0x879A 0xB1F6 # HANGUL SYLLABLE NIEUN-YO-RIEULPHIEUPH
-0x879B 0xB1F7 # HANGUL SYLLABLE NIEUN-YO-RIEULHIEUH
-0x879C 0xB1F8 # HANGUL SYLLABLE NIEUN-YO-MIEUM
-0x879D 0xB1FA # HANGUL SYLLABLE NIEUN-YO-PIEUPSIOS
-0x879E 0xB1FC # HANGUL SYLLABLE NIEUN-YO-SSANGSIOS
-0x879F 0xB1FE # HANGUL SYLLABLE NIEUN-YO-CIEUC
-0x87A0 0xB1FF # HANGUL SYLLABLE NIEUN-YO-CHIEUCH
-0x87A1 0xB200 # HANGUL SYLLABLE NIEUN-YO-KHIEUKH
-0x87A2 0xB201 # HANGUL SYLLABLE NIEUN-YO-THIEUTH
-0x87A3 0xB202 # HANGUL SYLLABLE NIEUN-YO-PHIEUPH
-0x87A4 0xB203 # HANGUL SYLLABLE NIEUN-YO-HIEUH
-0x87A5 0xB206 # HANGUL SYLLABLE NIEUN-U-SSANGKIYEOK
-0x87A6 0xB207 # HANGUL SYLLABLE NIEUN-U-KIYEOKSIOS
-0x87A7 0xB209 # HANGUL SYLLABLE NIEUN-U-NIEUNCIEUC
-0x87A8 0xB20A # HANGUL SYLLABLE NIEUN-U-NIEUNHIEUH
-0x87A9 0xB20D # HANGUL SYLLABLE NIEUN-U-RIEULKIYEOK
-0x87AA 0xB20E # HANGUL SYLLABLE NIEUN-U-RIEULMIEUM
-0x87AB 0xB20F # HANGUL SYLLABLE NIEUN-U-RIEULPIEUP
-0x87AC 0xB210 # HANGUL SYLLABLE NIEUN-U-RIEULSIOS
-0x87AD 0xB211 # HANGUL SYLLABLE NIEUN-U-RIEULTHIEUTH
-0x87AE 0xB212 # HANGUL SYLLABLE NIEUN-U-RIEULPHIEUPH
-0x87AF 0xB213 # HANGUL SYLLABLE NIEUN-U-RIEULHIEUH
-0x87B0 0xB216 # HANGUL SYLLABLE NIEUN-U-PIEUPSIOS
-0x87B1 0xB218 # HANGUL SYLLABLE NIEUN-U-SSANGSIOS
-0x87B2 0xB21A # HANGUL SYLLABLE NIEUN-U-CIEUC
-0x87B3 0xB21B # HANGUL SYLLABLE NIEUN-U-CHIEUCH
-0x87B4 0xB21C # HANGUL SYLLABLE NIEUN-U-KHIEUKH
-0x87B5 0xB21D # HANGUL SYLLABLE NIEUN-U-THIEUTH
-0x87B6 0xB21E # HANGUL SYLLABLE NIEUN-U-PHIEUPH
-0x87B7 0xB21F # HANGUL SYLLABLE NIEUN-U-HIEUH
-0x87B8 0xB221 # HANGUL SYLLABLE NIEUN-WEO-KIYEOK
-0x87B9 0xB222 # HANGUL SYLLABLE NIEUN-WEO-SSANGKIYEOK
-0x87BA 0xB223 # HANGUL SYLLABLE NIEUN-WEO-KIYEOKSIOS
-0x87BB 0xB224 # HANGUL SYLLABLE NIEUN-WEO-NIEUN
-0x87BC 0xB225 # HANGUL SYLLABLE NIEUN-WEO-NIEUNCIEUC
-0x87BD 0xB226 # HANGUL SYLLABLE NIEUN-WEO-NIEUNHIEUH
-0x87BE 0xB227 # HANGUL SYLLABLE NIEUN-WEO-TIKEUT
-0x87BF 0xB228 # HANGUL SYLLABLE NIEUN-WEO-RIEUL
-0x87C0 0xB229 # HANGUL SYLLABLE NIEUN-WEO-RIEULKIYEOK
-0x87C1 0xB22A # HANGUL SYLLABLE NIEUN-WEO-RIEULMIEUM
-0x87C2 0xB22B # HANGUL SYLLABLE NIEUN-WEO-RIEULPIEUP
-0x87C3 0xB22C # HANGUL SYLLABLE NIEUN-WEO-RIEULSIOS
-0x87C4 0xB22D # HANGUL SYLLABLE NIEUN-WEO-RIEULTHIEUTH
-0x87C5 0xB22E # HANGUL SYLLABLE NIEUN-WEO-RIEULPHIEUPH
-0x87C6 0xB22F # HANGUL SYLLABLE NIEUN-WEO-RIEULHIEUH
-0x87C7 0xB230 # HANGUL SYLLABLE NIEUN-WEO-MIEUM
-0x87C8 0xB231 # HANGUL SYLLABLE NIEUN-WEO-PIEUP
-0x87C9 0xB232 # HANGUL SYLLABLE NIEUN-WEO-PIEUPSIOS
-0x87CA 0xB233 # HANGUL SYLLABLE NIEUN-WEO-SIOS
-0x87CB 0xB235 # HANGUL SYLLABLE NIEUN-WEO-IEUNG
-0x87CC 0xB236 # HANGUL SYLLABLE NIEUN-WEO-CIEUC
-0x87CD 0xB237 # HANGUL SYLLABLE NIEUN-WEO-CHIEUCH
-0x87CE 0xB238 # HANGUL SYLLABLE NIEUN-WEO-KHIEUKH
-0x87CF 0xB239 # HANGUL SYLLABLE NIEUN-WEO-THIEUTH
-0x87D0 0xB23A # HANGUL SYLLABLE NIEUN-WEO-PHIEUPH
-0x87D1 0xB23B # HANGUL SYLLABLE NIEUN-WEO-HIEUH
-0x87D2 0xB23D # HANGUL SYLLABLE NIEUN-WE-KIYEOK
-0x87D3 0xB23E # HANGUL SYLLABLE NIEUN-WE-SSANGKIYEOK
-0x87D4 0xB23F # HANGUL SYLLABLE NIEUN-WE-KIYEOKSIOS
-0x87D5 0xB240 # HANGUL SYLLABLE NIEUN-WE-NIEUN
-0x87D6 0xB241 # HANGUL SYLLABLE NIEUN-WE-NIEUNCIEUC
-0x87D7 0xB242 # HANGUL SYLLABLE NIEUN-WE-NIEUNHIEUH
-0x87D8 0xB243 # HANGUL SYLLABLE NIEUN-WE-TIKEUT
-0x87D9 0xB244 # HANGUL SYLLABLE NIEUN-WE-RIEUL
-0x87DA 0xB245 # HANGUL SYLLABLE NIEUN-WE-RIEULKIYEOK
-0x87DB 0xB246 # HANGUL SYLLABLE NIEUN-WE-RIEULMIEUM
-0x87DC 0xB247 # HANGUL SYLLABLE NIEUN-WE-RIEULPIEUP
-0x87DD 0xB248 # HANGUL SYLLABLE NIEUN-WE-RIEULSIOS
-0x87DE 0xB249 # HANGUL SYLLABLE NIEUN-WE-RIEULTHIEUTH
-0x87DF 0xB24A # HANGUL SYLLABLE NIEUN-WE-RIEULPHIEUPH
-0x87E0 0xB24B # HANGUL SYLLABLE NIEUN-WE-RIEULHIEUH
-0x87E1 0xB24C # HANGUL SYLLABLE NIEUN-WE-MIEUM
-0x87E2 0xB24D # HANGUL SYLLABLE NIEUN-WE-PIEUP
-0x87E3 0xB24E # HANGUL SYLLABLE NIEUN-WE-PIEUPSIOS
-0x87E4 0xB24F # HANGUL SYLLABLE NIEUN-WE-SIOS
-0x87E5 0xB250 # HANGUL SYLLABLE NIEUN-WE-SSANGSIOS
-0x87E6 0xB251 # HANGUL SYLLABLE NIEUN-WE-IEUNG
-0x87E7 0xB252 # HANGUL SYLLABLE NIEUN-WE-CIEUC
-0x87E8 0xB253 # HANGUL SYLLABLE NIEUN-WE-CHIEUCH
-0x87E9 0xB254 # HANGUL SYLLABLE NIEUN-WE-KHIEUKH
-0x87EA 0xB255 # HANGUL SYLLABLE NIEUN-WE-THIEUTH
-0x87EB 0xB256 # HANGUL SYLLABLE NIEUN-WE-PHIEUPH
-0x87EC 0xB257 # HANGUL SYLLABLE NIEUN-WE-HIEUH
-0x87ED 0xB259 # HANGUL SYLLABLE NIEUN-WI-KIYEOK
-0x87EE 0xB25A # HANGUL SYLLABLE NIEUN-WI-SSANGKIYEOK
-0x87EF 0xB25B # HANGUL SYLLABLE NIEUN-WI-KIYEOKSIOS
-0x87F0 0xB25D # HANGUL SYLLABLE NIEUN-WI-NIEUNCIEUC
-0x87F1 0xB25E # HANGUL SYLLABLE NIEUN-WI-NIEUNHIEUH
-0x87F2 0xB25F # HANGUL SYLLABLE NIEUN-WI-TIKEUT
-0x87F3 0xB261 # HANGUL SYLLABLE NIEUN-WI-RIEULKIYEOK
-0x87F4 0xB262 # HANGUL SYLLABLE NIEUN-WI-RIEULMIEUM
-0x87F5 0xB263 # HANGUL SYLLABLE NIEUN-WI-RIEULPIEUP
-0x87F6 0xB264 # HANGUL SYLLABLE NIEUN-WI-RIEULSIOS
-0x87F7 0xB265 # HANGUL SYLLABLE NIEUN-WI-RIEULTHIEUTH
-0x87F8 0xB266 # HANGUL SYLLABLE NIEUN-WI-RIEULPHIEUPH
-0x87F9 0xB267 # HANGUL SYLLABLE NIEUN-WI-RIEULHIEUH
-0x87FA 0xB26A # HANGUL SYLLABLE NIEUN-WI-PIEUPSIOS
-0x87FB 0xB26B # HANGUL SYLLABLE NIEUN-WI-SIOS
-0x87FC 0xB26C # HANGUL SYLLABLE NIEUN-WI-SSANGSIOS
-0x87FD 0xB26D # HANGUL SYLLABLE NIEUN-WI-IEUNG
-0x87FE 0xB26E # HANGUL SYLLABLE NIEUN-WI-CIEUC
-0x8841 0xB26F # HANGUL SYLLABLE NIEUN-WI-CHIEUCH
-0x8842 0xB270 # HANGUL SYLLABLE NIEUN-WI-KHIEUKH
-0x8843 0xB271 # HANGUL SYLLABLE NIEUN-WI-THIEUTH
-0x8844 0xB272 # HANGUL SYLLABLE NIEUN-WI-PHIEUPH
-0x8845 0xB273 # HANGUL SYLLABLE NIEUN-WI-HIEUH
-0x8846 0xB276 # HANGUL SYLLABLE NIEUN-YU-SSANGKIYEOK
-0x8847 0xB277 # HANGUL SYLLABLE NIEUN-YU-KIYEOKSIOS
-0x8848 0xB278 # HANGUL SYLLABLE NIEUN-YU-NIEUN
-0x8849 0xB279 # HANGUL SYLLABLE NIEUN-YU-NIEUNCIEUC
-0x884A 0xB27A # HANGUL SYLLABLE NIEUN-YU-NIEUNHIEUH
-0x884B 0xB27B # HANGUL SYLLABLE NIEUN-YU-TIKEUT
-0x884C 0xB27D # HANGUL SYLLABLE NIEUN-YU-RIEULKIYEOK
-0x884D 0xB27E # HANGUL SYLLABLE NIEUN-YU-RIEULMIEUM
-0x884E 0xB27F # HANGUL SYLLABLE NIEUN-YU-RIEULPIEUP
-0x884F 0xB280 # HANGUL SYLLABLE NIEUN-YU-RIEULSIOS
-0x8850 0xB281 # HANGUL SYLLABLE NIEUN-YU-RIEULTHIEUTH
-0x8851 0xB282 # HANGUL SYLLABLE NIEUN-YU-RIEULPHIEUPH
-0x8852 0xB283 # HANGUL SYLLABLE NIEUN-YU-RIEULHIEUH
-0x8853 0xB286 # HANGUL SYLLABLE NIEUN-YU-PIEUPSIOS
-0x8854 0xB287 # HANGUL SYLLABLE NIEUN-YU-SIOS
-0x8855 0xB288 # HANGUL SYLLABLE NIEUN-YU-SSANGSIOS
-0x8856 0xB28A # HANGUL SYLLABLE NIEUN-YU-CIEUC
-0x8857 0xB28B # HANGUL SYLLABLE NIEUN-YU-CHIEUCH
-0x8858 0xB28C # HANGUL SYLLABLE NIEUN-YU-KHIEUKH
-0x8859 0xB28D # HANGUL SYLLABLE NIEUN-YU-THIEUTH
-0x885A 0xB28E # HANGUL SYLLABLE NIEUN-YU-PHIEUPH
-0x8861 0xB28F # HANGUL SYLLABLE NIEUN-YU-HIEUH
-0x8862 0xB292 # HANGUL SYLLABLE NIEUN-EU-SSANGKIYEOK
-0x8863 0xB293 # HANGUL SYLLABLE NIEUN-EU-KIYEOKSIOS
-0x8864 0xB295 # HANGUL SYLLABLE NIEUN-EU-NIEUNCIEUC
-0x8865 0xB296 # HANGUL SYLLABLE NIEUN-EU-NIEUNHIEUH
-0x8866 0xB297 # HANGUL SYLLABLE NIEUN-EU-TIKEUT
-0x8867 0xB29B # HANGUL SYLLABLE NIEUN-EU-RIEULPIEUP
-0x8868 0xB29C # HANGUL SYLLABLE NIEUN-EU-RIEULSIOS
-0x8869 0xB29D # HANGUL SYLLABLE NIEUN-EU-RIEULTHIEUTH
-0x886A 0xB29E # HANGUL SYLLABLE NIEUN-EU-RIEULPHIEUPH
-0x886B 0xB29F # HANGUL SYLLABLE NIEUN-EU-RIEULHIEUH
-0x886C 0xB2A2 # HANGUL SYLLABLE NIEUN-EU-PIEUPSIOS
-0x886D 0xB2A4 # HANGUL SYLLABLE NIEUN-EU-SSANGSIOS
-0x886E 0xB2A7 # HANGUL SYLLABLE NIEUN-EU-CHIEUCH
-0x886F 0xB2A8 # HANGUL SYLLABLE NIEUN-EU-KHIEUKH
-0x8870 0xB2A9 # HANGUL SYLLABLE NIEUN-EU-THIEUTH
-0x8871 0xB2AB # HANGUL SYLLABLE NIEUN-EU-HIEUH
-0x8872 0xB2AD # HANGUL SYLLABLE NIEUN-YI-KIYEOK
-0x8873 0xB2AE # HANGUL SYLLABLE NIEUN-YI-SSANGKIYEOK
-0x8874 0xB2AF # HANGUL SYLLABLE NIEUN-YI-KIYEOKSIOS
-0x8875 0xB2B1 # HANGUL SYLLABLE NIEUN-YI-NIEUNCIEUC
-0x8876 0xB2B2 # HANGUL SYLLABLE NIEUN-YI-NIEUNHIEUH
-0x8877 0xB2B3 # HANGUL SYLLABLE NIEUN-YI-TIKEUT
-0x8878 0xB2B5 # HANGUL SYLLABLE NIEUN-YI-RIEULKIYEOK
-0x8879 0xB2B6 # HANGUL SYLLABLE NIEUN-YI-RIEULMIEUM
-0x887A 0xB2B7 # HANGUL SYLLABLE NIEUN-YI-RIEULPIEUP
-0x8881 0xB2B8 # HANGUL SYLLABLE NIEUN-YI-RIEULSIOS
-0x8882 0xB2B9 # HANGUL SYLLABLE NIEUN-YI-RIEULTHIEUTH
-0x8883 0xB2BA # HANGUL SYLLABLE NIEUN-YI-RIEULPHIEUPH
-0x8884 0xB2BB # HANGUL SYLLABLE NIEUN-YI-RIEULHIEUH
-0x8885 0xB2BC # HANGUL SYLLABLE NIEUN-YI-MIEUM
-0x8886 0xB2BD # HANGUL SYLLABLE NIEUN-YI-PIEUP
-0x8887 0xB2BE # HANGUL SYLLABLE NIEUN-YI-PIEUPSIOS
-0x8888 0xB2BF # HANGUL SYLLABLE NIEUN-YI-SIOS
-0x8889 0xB2C0 # HANGUL SYLLABLE NIEUN-YI-SSANGSIOS
-0x888A 0xB2C1 # HANGUL SYLLABLE NIEUN-YI-IEUNG
-0x888B 0xB2C2 # HANGUL SYLLABLE NIEUN-YI-CIEUC
-0x888C 0xB2C3 # HANGUL SYLLABLE NIEUN-YI-CHIEUCH
-0x888D 0xB2C4 # HANGUL SYLLABLE NIEUN-YI-KHIEUKH
-0x888E 0xB2C5 # HANGUL SYLLABLE NIEUN-YI-THIEUTH
-0x888F 0xB2C6 # HANGUL SYLLABLE NIEUN-YI-PHIEUPH
-0x8890 0xB2C7 # HANGUL SYLLABLE NIEUN-YI-HIEUH
-0x8891 0xB2CA # HANGUL SYLLABLE NIEUN-I-SSANGKIYEOK
-0x8892 0xB2CB # HANGUL SYLLABLE NIEUN-I-KIYEOKSIOS
-0x8893 0xB2CD # HANGUL SYLLABLE NIEUN-I-NIEUNCIEUC
-0x8894 0xB2CE # HANGUL SYLLABLE NIEUN-I-NIEUNHIEUH
-0x8895 0xB2CF # HANGUL SYLLABLE NIEUN-I-TIKEUT
-0x8896 0xB2D1 # HANGUL SYLLABLE NIEUN-I-RIEULKIYEOK
-0x8897 0xB2D3 # HANGUL SYLLABLE NIEUN-I-RIEULPIEUP--<3/22/95>
-0x8898 0xB2D4 # HANGUL SYLLABLE NIEUN-I-RIEULSIOS---<3/22/95>
-0x8899 0xB2D5 # HANGUL SYLLABLE NIEUN-I-RIEULTHIEUTH<3/22/95>
-0x889A 0xB2D6 # HANGUL SYLLABLE NIEUN-I-RIEULPHIEUPH<3/22/95>
-0x889B 0xB2D7 # HANGUL SYLLABLE NIEUN-I-RIEULHIEUH
-0x889C 0xB2DA # HANGUL SYLLABLE NIEUN-I-PIEUPSIOS
-0x889D 0xB2DC # HANGUL SYLLABLE NIEUN-I-SSANGSIOS
-0x889E 0xB2DE # HANGUL SYLLABLE NIEUN-I-CIEUC
-0x889F 0xB2DF # HANGUL SYLLABLE NIEUN-I-CHIEUCH
-0x88A0 0xB2E0 # HANGUL SYLLABLE NIEUN-I-KHIEUKH
-0x88A1 0xB2E1 # HANGUL SYLLABLE NIEUN-I-THIEUTH
-0x88A2 0xB2E3 # HANGUL SYLLABLE NIEUN-I-HIEUH
-0x88A3 0xB2E7 # HANGUL SYLLABLE TIKEUT-A-KIYEOKSIOS
-0x88A4 0xB2E9 # HANGUL SYLLABLE TIKEUT-A-NIEUNCIEUC
-0x88A5 0xB2EA # HANGUL SYLLABLE TIKEUT-A-NIEUNHIEUH
-0x88A6 0xB2F0 # HANGUL SYLLABLE TIKEUT-A-RIEULSIOS
-0x88A7 0xB2F1 # HANGUL SYLLABLE TIKEUT-A-RIEULTHIEUTH
-0x88A8 0xB2F2 # HANGUL SYLLABLE TIKEUT-A-RIEULPHIEUPH
-0x88A9 0xB2F6 # HANGUL SYLLABLE TIKEUT-A-PIEUPSIOS
-0x88AA 0xB2FC # HANGUL SYLLABLE TIKEUT-A-KHIEUKH
-0x88AB 0xB2FD # HANGUL SYLLABLE TIKEUT-A-THIEUTH
-0x88AC 0xB2FE # HANGUL SYLLABLE TIKEUT-A-PHIEUPH
-0x88AD 0xB302 # HANGUL SYLLABLE TIKEUT-AE-SSANGKIYEOK
-0x88AE 0xB303 # HANGUL SYLLABLE TIKEUT-AE-KIYEOKSIOS
-0x88AF 0xB305 # HANGUL SYLLABLE TIKEUT-AE-NIEUNCIEUC
-0x88B0 0xB306 # HANGUL SYLLABLE TIKEUT-AE-NIEUNHIEUH
-0x88B1 0xB307 # HANGUL SYLLABLE TIKEUT-AE-TIKEUT
-0x88B2 0xB309 # HANGUL SYLLABLE TIKEUT-AE-RIEULKIYEOK
-0x88B3 0xB30A # HANGUL SYLLABLE TIKEUT-AE-RIEULMIEUM
-0x88B4 0xB30B # HANGUL SYLLABLE TIKEUT-AE-RIEULPIEUP
-0x88B5 0xB30C # HANGUL SYLLABLE TIKEUT-AE-RIEULSIOS
-0x88B6 0xB30D # HANGUL SYLLABLE TIKEUT-AE-RIEULTHIEUTH
-0x88B7 0xB30E # HANGUL SYLLABLE TIKEUT-AE-RIEULPHIEUPH
-0x88B8 0xB30F # HANGUL SYLLABLE TIKEUT-AE-RIEULHIEUH
-0x88B9 0xB312 # HANGUL SYLLABLE TIKEUT-AE-PIEUPSIOS
-0x88BA 0xB316 # HANGUL SYLLABLE TIKEUT-AE-CIEUC
-0x88BB 0xB317 # HANGUL SYLLABLE TIKEUT-AE-CHIEUCH
-0x88BC 0xB318 # HANGUL SYLLABLE TIKEUT-AE-KHIEUKH
-0x88BD 0xB319 # HANGUL SYLLABLE TIKEUT-AE-THIEUTH
-0x88BE 0xB31A # HANGUL SYLLABLE TIKEUT-AE-PHIEUPH
-0x88BF 0xB31B # HANGUL SYLLABLE TIKEUT-AE-HIEUH
-0x88C0 0xB31D # HANGUL SYLLABLE TIKEUT-YA-KIYEOK
-0x88C1 0xB31E # HANGUL SYLLABLE TIKEUT-YA-SSANGKIYEOK
-0x88C2 0xB31F # HANGUL SYLLABLE TIKEUT-YA-KIYEOKSIOS
-0x88C3 0xB320 # HANGUL SYLLABLE TIKEUT-YA-NIEUN
-0x88C4 0xB321 # HANGUL SYLLABLE TIKEUT-YA-NIEUNCIEUC
-0x88C5 0xB322 # HANGUL SYLLABLE TIKEUT-YA-NIEUNHIEUH
-0x88C6 0xB323 # HANGUL SYLLABLE TIKEUT-YA-TIKEUT
-0x88C7 0xB324 # HANGUL SYLLABLE TIKEUT-YA-RIEUL
-0x88C8 0xB325 # HANGUL SYLLABLE TIKEUT-YA-RIEULKIYEOK
-0x88C9 0xB326 # HANGUL SYLLABLE TIKEUT-YA-RIEULMIEUM
-0x88CA 0xB327 # HANGUL SYLLABLE TIKEUT-YA-RIEULPIEUP
-0x88CB 0xB328 # HANGUL SYLLABLE TIKEUT-YA-RIEULSIOS
-0x88CC 0xB329 # HANGUL SYLLABLE TIKEUT-YA-RIEULTHIEUTH
-0x88CD 0xB32A # HANGUL SYLLABLE TIKEUT-YA-RIEULPHIEUPH
-0x88CE 0xB32B # HANGUL SYLLABLE TIKEUT-YA-RIEULHIEUH
-0x88CF 0xB32C # HANGUL SYLLABLE TIKEUT-YA-MIEUM
-0x88D0 0xB32D # HANGUL SYLLABLE TIKEUT-YA-PIEUP
-0x88D1 0xB32E # HANGUL SYLLABLE TIKEUT-YA-PIEUPSIOS
-0x88D2 0xB32F # HANGUL SYLLABLE TIKEUT-YA-SIOS
-0x88D3 0xB330 # HANGUL SYLLABLE TIKEUT-YA-SSANGSIOS
-0x88D4 0xB331 # HANGUL SYLLABLE TIKEUT-YA-IEUNG
-0x88D5 0xB332 # HANGUL SYLLABLE TIKEUT-YA-CIEUC
-0x88D6 0xB333 # HANGUL SYLLABLE TIKEUT-YA-CHIEUCH
-0x88D7 0xB334 # HANGUL SYLLABLE TIKEUT-YA-KHIEUKH
-0x88D8 0xB335 # HANGUL SYLLABLE TIKEUT-YA-THIEUTH
-0x88D9 0xB336 # HANGUL SYLLABLE TIKEUT-YA-PHIEUPH
-0x88DA 0xB337 # HANGUL SYLLABLE TIKEUT-YA-HIEUH
-0x88DB 0xB338 # HANGUL SYLLABLE TIKEUT-YAE
-0x88DC 0xB339 # HANGUL SYLLABLE TIKEUT-YAE-KIYEOK
-0x88DD 0xB33A # HANGUL SYLLABLE TIKEUT-YAE-SSANGKIYEOK
-0x88DE 0xB33B # HANGUL SYLLABLE TIKEUT-YAE-KIYEOKSIOS
-0x88DF 0xB33C # HANGUL SYLLABLE TIKEUT-YAE-NIEUN
-0x88E0 0xB33D # HANGUL SYLLABLE TIKEUT-YAE-NIEUNCIEUC
-0x88E1 0xB33E # HANGUL SYLLABLE TIKEUT-YAE-NIEUNHIEUH
-0x88E2 0xB33F # HANGUL SYLLABLE TIKEUT-YAE-TIKEUT
-0x88E3 0xB340 # HANGUL SYLLABLE TIKEUT-YAE-RIEUL
-0x88E4 0xB341 # HANGUL SYLLABLE TIKEUT-YAE-RIEULKIYEOK
-0x88E5 0xB342 # HANGUL SYLLABLE TIKEUT-YAE-RIEULMIEUM
-0x88E6 0xB343 # HANGUL SYLLABLE TIKEUT-YAE-RIEULPIEUP
-0x88E7 0xB344 # HANGUL SYLLABLE TIKEUT-YAE-RIEULSIOS
-0x88E8 0xB345 # HANGUL SYLLABLE TIKEUT-YAE-RIEULTHIEUTH
-0x88E9 0xB346 # HANGUL SYLLABLE TIKEUT-YAE-RIEULPHIEUPH
-0x88EA 0xB347 # HANGUL SYLLABLE TIKEUT-YAE-RIEULHIEUH
-0x88EB 0xB348 # HANGUL SYLLABLE TIKEUT-YAE-MIEUM
-0x88EC 0xB349 # HANGUL SYLLABLE TIKEUT-YAE-PIEUP
-0x88ED 0xB34A # HANGUL SYLLABLE TIKEUT-YAE-PIEUPSIOS
-0x88EE 0xB34B # HANGUL SYLLABLE TIKEUT-YAE-SIOS
-0x88EF 0xB34C # HANGUL SYLLABLE TIKEUT-YAE-SSANGSIOS
-0x88F0 0xB34D # HANGUL SYLLABLE TIKEUT-YAE-IEUNG
-0x88F1 0xB34E # HANGUL SYLLABLE TIKEUT-YAE-CIEUC
-0x88F2 0xB34F # HANGUL SYLLABLE TIKEUT-YAE-CHIEUCH
-0x88F3 0xB350 # HANGUL SYLLABLE TIKEUT-YAE-KHIEUKH
-0x88F4 0xB351 # HANGUL SYLLABLE TIKEUT-YAE-THIEUTH
-0x88F5 0xB352 # HANGUL SYLLABLE TIKEUT-YAE-PHIEUPH
-0x88F6 0xB353 # HANGUL SYLLABLE TIKEUT-YAE-HIEUH
-0x88F7 0xB357 # HANGUL SYLLABLE TIKEUT-EO-KIYEOKSIOS
-0x88F8 0xB359 # HANGUL SYLLABLE TIKEUT-EO-NIEUNCIEUC
-0x88F9 0xB35A # HANGUL SYLLABLE TIKEUT-EO-NIEUNHIEUH
-0x88FA 0xB35D # HANGUL SYLLABLE TIKEUT-EO-RIEULKIYEOK
-0x88FB 0xB360 # HANGUL SYLLABLE TIKEUT-EO-RIEULSIOS
-0x88FC 0xB361 # HANGUL SYLLABLE TIKEUT-EO-RIEULTHIEUTH
-0x88FD 0xB362 # HANGUL SYLLABLE TIKEUT-EO-RIEULPHIEUPH
-0x88FE 0xB363 # HANGUL SYLLABLE TIKEUT-EO-RIEULHIEUH
-0x8941 0xB366 # HANGUL SYLLABLE TIKEUT-EO-PIEUPSIOS
-0x8942 0xB368 # HANGUL SYLLABLE TIKEUT-EO-SSANGSIOS
-0x8943 0xB36A # HANGUL SYLLABLE TIKEUT-EO-CIEUC
-0x8944 0xB36C # HANGUL SYLLABLE TIKEUT-EO-KHIEUKH
-0x8945 0xB36D # HANGUL SYLLABLE TIKEUT-EO-THIEUTH
-0x8946 0xB36F # HANGUL SYLLABLE TIKEUT-EO-HIEUH
-0x8947 0xB372 # HANGUL SYLLABLE TIKEUT-E-SSANGKIYEOK
-0x8948 0xB373 # HANGUL SYLLABLE TIKEUT-E-KIYEOKSIOS
-0x8949 0xB375 # HANGUL SYLLABLE TIKEUT-E-NIEUNCIEUC
-0x894A 0xB376 # HANGUL SYLLABLE TIKEUT-E-NIEUNHIEUH
-0x894B 0xB377 # HANGUL SYLLABLE TIKEUT-E-TIKEUT
-0x894C 0xB379 # HANGUL SYLLABLE TIKEUT-E-RIEULKIYEOK
-0x894D 0xB37A # HANGUL SYLLABLE TIKEUT-E-RIEULMIEUM
-0x894E 0xB37B # HANGUL SYLLABLE TIKEUT-E-RIEULPIEUP
-0x894F 0xB37C # HANGUL SYLLABLE TIKEUT-E-RIEULSIOS
-0x8950 0xB37D # HANGUL SYLLABLE TIKEUT-E-RIEULTHIEUTH
-0x8951 0xB37E # HANGUL SYLLABLE TIKEUT-E-RIEULPHIEUPH
-0x8952 0xB37F # HANGUL SYLLABLE TIKEUT-E-RIEULHIEUH
-0x8953 0xB382 # HANGUL SYLLABLE TIKEUT-E-PIEUPSIOS
-0x8954 0xB386 # HANGUL SYLLABLE TIKEUT-E-CIEUC
-0x8955 0xB387 # HANGUL SYLLABLE TIKEUT-E-CHIEUCH
-0x8956 0xB388 # HANGUL SYLLABLE TIKEUT-E-KHIEUKH
-0x8957 0xB389 # HANGUL SYLLABLE TIKEUT-E-THIEUTH
-0x8958 0xB38A # HANGUL SYLLABLE TIKEUT-E-PHIEUPH
-0x8959 0xB38B # HANGUL SYLLABLE TIKEUT-E-HIEUH
-0x895A 0xB38D # HANGUL SYLLABLE TIKEUT-YEO-KIYEOK
-0x8961 0xB38E # HANGUL SYLLABLE TIKEUT-YEO-SSANGKIYEOK
-0x8962 0xB38F # HANGUL SYLLABLE TIKEUT-YEO-KIYEOKSIOS
-0x8963 0xB391 # HANGUL SYLLABLE TIKEUT-YEO-NIEUNCIEUC
-0x8964 0xB392 # HANGUL SYLLABLE TIKEUT-YEO-NIEUNHIEUH
-0x8965 0xB393 # HANGUL SYLLABLE TIKEUT-YEO-TIKEUT
-0x8966 0xB395 # HANGUL SYLLABLE TIKEUT-YEO-RIEULKIYEOK
-0x8967 0xB396 # HANGUL SYLLABLE TIKEUT-YEO-RIEULMIEUM
-0x8968 0xB397 # HANGUL SYLLABLE TIKEUT-YEO-RIEULPIEUP
-0x8969 0xB398 # HANGUL SYLLABLE TIKEUT-YEO-RIEULSIOS
-0x896A 0xB399 # HANGUL SYLLABLE TIKEUT-YEO-RIEULTHIEUTH
-0x896B 0xB39A # HANGUL SYLLABLE TIKEUT-YEO-RIEULPHIEUPH
-0x896C 0xB39B # HANGUL SYLLABLE TIKEUT-YEO-RIEULHIEUH
-0x896D 0xB39C # HANGUL SYLLABLE TIKEUT-YEO-MIEUM
-0x896E 0xB39D # HANGUL SYLLABLE TIKEUT-YEO-PIEUP
-0x896F 0xB39E # HANGUL SYLLABLE TIKEUT-YEO-PIEUPSIOS
-0x8970 0xB39F # HANGUL SYLLABLE TIKEUT-YEO-SIOS
-0x8971 0xB3A2 # HANGUL SYLLABLE TIKEUT-YEO-CIEUC
-0x8972 0xB3A3 # HANGUL SYLLABLE TIKEUT-YEO-CHIEUCH
-0x8973 0xB3A4 # HANGUL SYLLABLE TIKEUT-YEO-KHIEUKH
-0x8974 0xB3A5 # HANGUL SYLLABLE TIKEUT-YEO-THIEUTH
-0x8975 0xB3A6 # HANGUL SYLLABLE TIKEUT-YEO-PHIEUPH
-0x8976 0xB3A7 # HANGUL SYLLABLE TIKEUT-YEO-HIEUH
-0x8977 0xB3A9 # HANGUL SYLLABLE TIKEUT-YE-KIYEOK
-0x8978 0xB3AA # HANGUL SYLLABLE TIKEUT-YE-SSANGKIYEOK
-0x8979 0xB3AB # HANGUL SYLLABLE TIKEUT-YE-KIYEOKSIOS
-0x897A 0xB3AD # HANGUL SYLLABLE TIKEUT-YE-NIEUNCIEUC
-0x8981 0xB3AE # HANGUL SYLLABLE TIKEUT-YE-NIEUNHIEUH
-0x8982 0xB3AF # HANGUL SYLLABLE TIKEUT-YE-TIKEUT
-0x8983 0xB3B0 # HANGUL SYLLABLE TIKEUT-YE-RIEUL
-0x8984 0xB3B1 # HANGUL SYLLABLE TIKEUT-YE-RIEULKIYEOK
-0x8985 0xB3B2 # HANGUL SYLLABLE TIKEUT-YE-RIEULMIEUM
-0x8986 0xB3B3 # HANGUL SYLLABLE TIKEUT-YE-RIEULPIEUP
-0x8987 0xB3B4 # HANGUL SYLLABLE TIKEUT-YE-RIEULSIOS
-0x8988 0xB3B5 # HANGUL SYLLABLE TIKEUT-YE-RIEULTHIEUTH
-0x8989 0xB3B6 # HANGUL SYLLABLE TIKEUT-YE-RIEULPHIEUPH
-0x898A 0xB3B7 # HANGUL SYLLABLE TIKEUT-YE-RIEULHIEUH
-0x898B 0xB3B8 # HANGUL SYLLABLE TIKEUT-YE-MIEUM
-0x898C 0xB3B9 # HANGUL SYLLABLE TIKEUT-YE-PIEUP
-0x898D 0xB3BA # HANGUL SYLLABLE TIKEUT-YE-PIEUPSIOS
-0x898E 0xB3BB # HANGUL SYLLABLE TIKEUT-YE-SIOS
-0x898F 0xB3BC # HANGUL SYLLABLE TIKEUT-YE-SSANGSIOS
-0x8990 0xB3BD # HANGUL SYLLABLE TIKEUT-YE-IEUNG
-0x8991 0xB3BE # HANGUL SYLLABLE TIKEUT-YE-CIEUC
-0x8992 0xB3BF # HANGUL SYLLABLE TIKEUT-YE-CHIEUCH
-0x8993 0xB3C0 # HANGUL SYLLABLE TIKEUT-YE-KHIEUKH
-0x8994 0xB3C1 # HANGUL SYLLABLE TIKEUT-YE-THIEUTH
-0x8995 0xB3C2 # HANGUL SYLLABLE TIKEUT-YE-PHIEUPH
-0x8996 0xB3C3 # HANGUL SYLLABLE TIKEUT-YE-HIEUH
-0x8997 0xB3C6 # HANGUL SYLLABLE TIKEUT-O-SSANGKIYEOK
-0x8998 0xB3C7 # HANGUL SYLLABLE TIKEUT-O-KIYEOKSIOS
-0x8999 0xB3C9 # HANGUL SYLLABLE TIKEUT-O-NIEUNCIEUC
-0x899A 0xB3CA # HANGUL SYLLABLE TIKEUT-O-NIEUNHIEUH
-0x899B 0xB3CD # HANGUL SYLLABLE TIKEUT-O-RIEULKIYEOK
-0x899C 0xB3CF # HANGUL SYLLABLE TIKEUT-O-RIEULPIEUP
-0x899D 0xB3D1 # HANGUL SYLLABLE TIKEUT-O-RIEULTHIEUTH
-0x899E 0xB3D2 # HANGUL SYLLABLE TIKEUT-O-RIEULPHIEUPH
-0x899F 0xB3D3 # HANGUL SYLLABLE TIKEUT-O-RIEULHIEUH
-0x89A0 0xB3D6 # HANGUL SYLLABLE TIKEUT-O-PIEUPSIOS
-0x89A1 0xB3D8 # HANGUL SYLLABLE TIKEUT-O-SSANGSIOS
-0x89A2 0xB3DA # HANGUL SYLLABLE TIKEUT-O-CIEUC
-0x89A3 0xB3DC # HANGUL SYLLABLE TIKEUT-O-KHIEUKH
-0x89A4 0xB3DE # HANGUL SYLLABLE TIKEUT-O-PHIEUPH
-0x89A5 0xB3DF # HANGUL SYLLABLE TIKEUT-O-HIEUH
-0x89A6 0xB3E1 # HANGUL SYLLABLE TIKEUT-WA-KIYEOK
-0x89A7 0xB3E2 # HANGUL SYLLABLE TIKEUT-WA-SSANGKIYEOK
-0x89A8 0xB3E3 # HANGUL SYLLABLE TIKEUT-WA-KIYEOKSIOS
-0x89A9 0xB3E5 # HANGUL SYLLABLE TIKEUT-WA-NIEUNCIEUC
-0x89AA 0xB3E6 # HANGUL SYLLABLE TIKEUT-WA-NIEUNHIEUH
-0x89AB 0xB3E7 # HANGUL SYLLABLE TIKEUT-WA-TIKEUT
-0x89AC 0xB3E9 # HANGUL SYLLABLE TIKEUT-WA-RIEULKIYEOK
-0x89AD 0xB3EA # HANGUL SYLLABLE TIKEUT-WA-RIEULMIEUM
-0x89AE 0xB3EB # HANGUL SYLLABLE TIKEUT-WA-RIEULPIEUP
-0x89AF 0xB3EC # HANGUL SYLLABLE TIKEUT-WA-RIEULSIOS
-0x89B0 0xB3ED # HANGUL SYLLABLE TIKEUT-WA-RIEULTHIEUTH
-0x89B1 0xB3EE # HANGUL SYLLABLE TIKEUT-WA-RIEULPHIEUPH
-0x89B2 0xB3EF # HANGUL SYLLABLE TIKEUT-WA-RIEULHIEUH
-0x89B3 0xB3F0 # HANGUL SYLLABLE TIKEUT-WA-MIEUM
-0x89B4 0xB3F1 # HANGUL SYLLABLE TIKEUT-WA-PIEUP
-0x89B5 0xB3F2 # HANGUL SYLLABLE TIKEUT-WA-PIEUPSIOS
-0x89B6 0xB3F3 # HANGUL SYLLABLE TIKEUT-WA-SIOS
-0x89B7 0xB3F4 # HANGUL SYLLABLE TIKEUT-WA-SSANGSIOS
-0x89B8 0xB3F5 # HANGUL SYLLABLE TIKEUT-WA-IEUNG
-0x89B9 0xB3F6 # HANGUL SYLLABLE TIKEUT-WA-CIEUC
-0x89BA 0xB3F7 # HANGUL SYLLABLE TIKEUT-WA-CHIEUCH
-0x89BB 0xB3F8 # HANGUL SYLLABLE TIKEUT-WA-KHIEUKH
-0x89BC 0xB3F9 # HANGUL SYLLABLE TIKEUT-WA-THIEUTH
-0x89BD 0xB3FA # HANGUL SYLLABLE TIKEUT-WA-PHIEUPH
-0x89BE 0xB3FB # HANGUL SYLLABLE TIKEUT-WA-HIEUH
-0x89BF 0xB3FD # HANGUL SYLLABLE TIKEUT-WAE-KIYEOK
-0x89C0 0xB3FE # HANGUL SYLLABLE TIKEUT-WAE-SSANGKIYEOK
-0x89C1 0xB3FF # HANGUL SYLLABLE TIKEUT-WAE-KIYEOKSIOS
-0x89C2 0xB400 # HANGUL SYLLABLE TIKEUT-WAE-NIEUN
-0x89C3 0xB401 # HANGUL SYLLABLE TIKEUT-WAE-NIEUNCIEUC
-0x89C4 0xB402 # HANGUL SYLLABLE TIKEUT-WAE-NIEUNHIEUH
-0x89C5 0xB403 # HANGUL SYLLABLE TIKEUT-WAE-TIKEUT
-0x89C6 0xB404 # HANGUL SYLLABLE TIKEUT-WAE-RIEUL
-0x89C7 0xB405 # HANGUL SYLLABLE TIKEUT-WAE-RIEULKIYEOK
-0x89C8 0xB406 # HANGUL SYLLABLE TIKEUT-WAE-RIEULMIEUM
-0x89C9 0xB407 # HANGUL SYLLABLE TIKEUT-WAE-RIEULPIEUP
-0x89CA 0xB408 # HANGUL SYLLABLE TIKEUT-WAE-RIEULSIOS
-0x89CB 0xB409 # HANGUL SYLLABLE TIKEUT-WAE-RIEULTHIEUTH
-0x89CC 0xB40A # HANGUL SYLLABLE TIKEUT-WAE-RIEULPHIEUPH
-0x89CD 0xB40B # HANGUL SYLLABLE TIKEUT-WAE-RIEULHIEUH
-0x89CE 0xB40C # HANGUL SYLLABLE TIKEUT-WAE-MIEUM
-0x89CF 0xB40D # HANGUL SYLLABLE TIKEUT-WAE-PIEUP
-0x89D0 0xB40E # HANGUL SYLLABLE TIKEUT-WAE-PIEUPSIOS
-0x89D1 0xB40F # HANGUL SYLLABLE TIKEUT-WAE-SIOS
-0x89D2 0xB411 # HANGUL SYLLABLE TIKEUT-WAE-IEUNG
-0x89D3 0xB412 # HANGUL SYLLABLE TIKEUT-WAE-CIEUC
-0x89D4 0xB413 # HANGUL SYLLABLE TIKEUT-WAE-CHIEUCH
-0x89D5 0xB414 # HANGUL SYLLABLE TIKEUT-WAE-KHIEUKH
-0x89D6 0xB415 # HANGUL SYLLABLE TIKEUT-WAE-THIEUTH
-0x89D7 0xB416 # HANGUL SYLLABLE TIKEUT-WAE-PHIEUPH
-0x89D8 0xB417 # HANGUL SYLLABLE TIKEUT-WAE-HIEUH
-0x89D9 0xB419 # HANGUL SYLLABLE TIKEUT-OE-KIYEOK
-0x89DA 0xB41A # HANGUL SYLLABLE TIKEUT-OE-SSANGKIYEOK
-0x89DB 0xB41B # HANGUL SYLLABLE TIKEUT-OE-KIYEOKSIOS
-0x89DC 0xB41D # HANGUL SYLLABLE TIKEUT-OE-NIEUNCIEUC
-0x89DD 0xB41E # HANGUL SYLLABLE TIKEUT-OE-NIEUNHIEUH
-0x89DE 0xB41F # HANGUL SYLLABLE TIKEUT-OE-TIKEUT
-0x89DF 0xB421 # HANGUL SYLLABLE TIKEUT-OE-RIEULKIYEOK
-0x89E0 0xB422 # HANGUL SYLLABLE TIKEUT-OE-RIEULMIEUM
-0x89E1 0xB423 # HANGUL SYLLABLE TIKEUT-OE-RIEULPIEUP
-0x89E2 0xB424 # HANGUL SYLLABLE TIKEUT-OE-RIEULSIOS
-0x89E3 0xB425 # HANGUL SYLLABLE TIKEUT-OE-RIEULTHIEUTH
-0x89E4 0xB426 # HANGUL SYLLABLE TIKEUT-OE-RIEULPHIEUPH
-0x89E5 0xB427 # HANGUL SYLLABLE TIKEUT-OE-RIEULHIEUH
-0x89E6 0xB42A # HANGUL SYLLABLE TIKEUT-OE-PIEUPSIOS
-0x89E7 0xB42C # HANGUL SYLLABLE TIKEUT-OE-SSANGSIOS
-0x89E8 0xB42D # HANGUL SYLLABLE TIKEUT-OE-IEUNG
-0x89E9 0xB42E # HANGUL SYLLABLE TIKEUT-OE-CIEUC
-0x89EA 0xB42F # HANGUL SYLLABLE TIKEUT-OE-CHIEUCH
-0x89EB 0xB430 # HANGUL SYLLABLE TIKEUT-OE-KHIEUKH
-0x89EC 0xB431 # HANGUL SYLLABLE TIKEUT-OE-THIEUTH
-0x89ED 0xB432 # HANGUL SYLLABLE TIKEUT-OE-PHIEUPH
-0x89EE 0xB433 # HANGUL SYLLABLE TIKEUT-OE-HIEUH
-0x89EF 0xB435 # HANGUL SYLLABLE TIKEUT-YO-KIYEOK
-0x89F0 0xB436 # HANGUL SYLLABLE TIKEUT-YO-SSANGKIYEOK
-0x89F1 0xB437 # HANGUL SYLLABLE TIKEUT-YO-KIYEOKSIOS
-0x89F2 0xB438 # HANGUL SYLLABLE TIKEUT-YO-NIEUN
-0x89F3 0xB439 # HANGUL SYLLABLE TIKEUT-YO-NIEUNCIEUC
-0x89F4 0xB43A # HANGUL SYLLABLE TIKEUT-YO-NIEUNHIEUH
-0x89F5 0xB43B # HANGUL SYLLABLE TIKEUT-YO-TIKEUT
-0x89F6 0xB43C # HANGUL SYLLABLE TIKEUT-YO-RIEUL
-0x89F7 0xB43D # HANGUL SYLLABLE TIKEUT-YO-RIEULKIYEOK
-0x89F8 0xB43E # HANGUL SYLLABLE TIKEUT-YO-RIEULMIEUM
-0x89F9 0xB43F # HANGUL SYLLABLE TIKEUT-YO-RIEULPIEUP
-0x89FA 0xB440 # HANGUL SYLLABLE TIKEUT-YO-RIEULSIOS
-0x89FB 0xB441 # HANGUL SYLLABLE TIKEUT-YO-RIEULTHIEUTH
-0x89FC 0xB442 # HANGUL SYLLABLE TIKEUT-YO-RIEULPHIEUPH
-0x89FD 0xB443 # HANGUL SYLLABLE TIKEUT-YO-RIEULHIEUH
-0x89FE 0xB444 # HANGUL SYLLABLE TIKEUT-YO-MIEUM
-0x8A41 0xB445 # HANGUL SYLLABLE TIKEUT-YO-PIEUP
-0x8A42 0xB446 # HANGUL SYLLABLE TIKEUT-YO-PIEUPSIOS
-0x8A43 0xB447 # HANGUL SYLLABLE TIKEUT-YO-SIOS
-0x8A44 0xB448 # HANGUL SYLLABLE TIKEUT-YO-SSANGSIOS
-0x8A45 0xB449 # HANGUL SYLLABLE TIKEUT-YO-IEUNG
-0x8A46 0xB44A # HANGUL SYLLABLE TIKEUT-YO-CIEUC
-0x8A47 0xB44B # HANGUL SYLLABLE TIKEUT-YO-CHIEUCH
-0x8A48 0xB44C # HANGUL SYLLABLE TIKEUT-YO-KHIEUKH
-0x8A49 0xB44D # HANGUL SYLLABLE TIKEUT-YO-THIEUTH
-0x8A4A 0xB44E # HANGUL SYLLABLE TIKEUT-YO-PHIEUPH
-0x8A4B 0xB44F # HANGUL SYLLABLE TIKEUT-YO-HIEUH
-0x8A4C 0xB452 # HANGUL SYLLABLE TIKEUT-U-SSANGKIYEOK
-0x8A4D 0xB453 # HANGUL SYLLABLE TIKEUT-U-KIYEOKSIOS
-0x8A4E 0xB455 # HANGUL SYLLABLE TIKEUT-U-NIEUNCIEUC
-0x8A4F 0xB456 # HANGUL SYLLABLE TIKEUT-U-NIEUNHIEUH
-0x8A50 0xB457 # HANGUL SYLLABLE TIKEUT-U-TIKEUT
-0x8A51 0xB459 # HANGUL SYLLABLE TIKEUT-U-RIEULKIYEOK
-0x8A52 0xB45A # HANGUL SYLLABLE TIKEUT-U-RIEULMIEUM
-0x8A53 0xB45B # HANGUL SYLLABLE TIKEUT-U-RIEULPIEUP
-0x8A54 0xB45C # HANGUL SYLLABLE TIKEUT-U-RIEULSIOS
-0x8A55 0xB45D # HANGUL SYLLABLE TIKEUT-U-RIEULTHIEUTH
-0x8A56 0xB45E # HANGUL SYLLABLE TIKEUT-U-RIEULPHIEUPH
-0x8A57 0xB45F # HANGUL SYLLABLE TIKEUT-U-RIEULHIEUH
-0x8A58 0xB462 # HANGUL SYLLABLE TIKEUT-U-PIEUPSIOS
-0x8A59 0xB464 # HANGUL SYLLABLE TIKEUT-U-SSANGSIOS
-0x8A5A 0xB466 # HANGUL SYLLABLE TIKEUT-U-CIEUC
-0x8A61 0xB467 # HANGUL SYLLABLE TIKEUT-U-CHIEUCH
-0x8A62 0xB468 # HANGUL SYLLABLE TIKEUT-U-KHIEUKH
-0x8A63 0xB469 # HANGUL SYLLABLE TIKEUT-U-THIEUTH
-0x8A64 0xB46A # HANGUL SYLLABLE TIKEUT-U-PHIEUPH
-0x8A65 0xB46B # HANGUL SYLLABLE TIKEUT-U-HIEUH
-0x8A66 0xB46D # HANGUL SYLLABLE TIKEUT-WEO-KIYEOK
-0x8A67 0xB46E # HANGUL SYLLABLE TIKEUT-WEO-SSANGKIYEOK
-0x8A68 0xB46F # HANGUL SYLLABLE TIKEUT-WEO-KIYEOKSIOS
-0x8A69 0xB470 # HANGUL SYLLABLE TIKEUT-WEO-NIEUN
-0x8A6A 0xB471 # HANGUL SYLLABLE TIKEUT-WEO-NIEUNCIEUC
-0x8A6B 0xB472 # HANGUL SYLLABLE TIKEUT-WEO-NIEUNHIEUH
-0x8A6C 0xB473 # HANGUL SYLLABLE TIKEUT-WEO-TIKEUT
-0x8A6D 0xB474 # HANGUL SYLLABLE TIKEUT-WEO-RIEUL
-0x8A6E 0xB475 # HANGUL SYLLABLE TIKEUT-WEO-RIEULKIYEOK
-0x8A6F 0xB476 # HANGUL SYLLABLE TIKEUT-WEO-RIEULMIEUM
-0x8A70 0xB477 # HANGUL SYLLABLE TIKEUT-WEO-RIEULPIEUP
-0x8A71 0xB478 # HANGUL SYLLABLE TIKEUT-WEO-RIEULSIOS
-0x8A72 0xB479 # HANGUL SYLLABLE TIKEUT-WEO-RIEULTHIEUTH
-0x8A73 0xB47A # HANGUL SYLLABLE TIKEUT-WEO-RIEULPHIEUPH
-0x8A74 0xB47B # HANGUL SYLLABLE TIKEUT-WEO-RIEULHIEUH
-0x8A75 0xB47C # HANGUL SYLLABLE TIKEUT-WEO-MIEUM
-0x8A76 0xB47D # HANGUL SYLLABLE TIKEUT-WEO-PIEUP
-0x8A77 0xB47E # HANGUL SYLLABLE TIKEUT-WEO-PIEUPSIOS
-0x8A78 0xB47F # HANGUL SYLLABLE TIKEUT-WEO-SIOS
-0x8A79 0xB481 # HANGUL SYLLABLE TIKEUT-WEO-IEUNG
-0x8A7A 0xB482 # HANGUL SYLLABLE TIKEUT-WEO-CIEUC
-0x8A81 0xB483 # HANGUL SYLLABLE TIKEUT-WEO-CHIEUCH
-0x8A82 0xB484 # HANGUL SYLLABLE TIKEUT-WEO-KHIEUKH
-0x8A83 0xB485 # HANGUL SYLLABLE TIKEUT-WEO-THIEUTH
-0x8A84 0xB486 # HANGUL SYLLABLE TIKEUT-WEO-PHIEUPH
-0x8A85 0xB487 # HANGUL SYLLABLE TIKEUT-WEO-HIEUH
-0x8A86 0xB489 # HANGUL SYLLABLE TIKEUT-WE-KIYEOK
-0x8A87 0xB48A # HANGUL SYLLABLE TIKEUT-WE-SSANGKIYEOK
-0x8A88 0xB48B # HANGUL SYLLABLE TIKEUT-WE-KIYEOKSIOS
-0x8A89 0xB48C # HANGUL SYLLABLE TIKEUT-WE-NIEUN
-0x8A8A 0xB48D # HANGUL SYLLABLE TIKEUT-WE-NIEUNCIEUC
-0x8A8B 0xB48E # HANGUL SYLLABLE TIKEUT-WE-NIEUNHIEUH
-0x8A8C 0xB48F # HANGUL SYLLABLE TIKEUT-WE-TIKEUT
-0x8A8D 0xB490 # HANGUL SYLLABLE TIKEUT-WE-RIEUL
-0x8A8E 0xB491 # HANGUL SYLLABLE TIKEUT-WE-RIEULKIYEOK
-0x8A8F 0xB492 # HANGUL SYLLABLE TIKEUT-WE-RIEULMIEUM
-0x8A90 0xB493 # HANGUL SYLLABLE TIKEUT-WE-RIEULPIEUP
-0x8A91 0xB494 # HANGUL SYLLABLE TIKEUT-WE-RIEULSIOS
-0x8A92 0xB495 # HANGUL SYLLABLE TIKEUT-WE-RIEULTHIEUTH
-0x8A93 0xB496 # HANGUL SYLLABLE TIKEUT-WE-RIEULPHIEUPH
-0x8A94 0xB497 # HANGUL SYLLABLE TIKEUT-WE-RIEULHIEUH
-0x8A95 0xB498 # HANGUL SYLLABLE TIKEUT-WE-MIEUM
-0x8A96 0xB499 # HANGUL SYLLABLE TIKEUT-WE-PIEUP
-0x8A97 0xB49A # HANGUL SYLLABLE TIKEUT-WE-PIEUPSIOS
-0x8A98 0xB49B # HANGUL SYLLABLE TIKEUT-WE-SIOS
-0x8A99 0xB49C # HANGUL SYLLABLE TIKEUT-WE-SSANGSIOS
-0x8A9A 0xB49E # HANGUL SYLLABLE TIKEUT-WE-CIEUC
-0x8A9B 0xB49F # HANGUL SYLLABLE TIKEUT-WE-CHIEUCH
-0x8A9C 0xB4A0 # HANGUL SYLLABLE TIKEUT-WE-KHIEUKH
-0x8A9D 0xB4A1 # HANGUL SYLLABLE TIKEUT-WE-THIEUTH
-0x8A9E 0xB4A2 # HANGUL SYLLABLE TIKEUT-WE-PHIEUPH
-0x8A9F 0xB4A3 # HANGUL SYLLABLE TIKEUT-WE-HIEUH
-0x8AA0 0xB4A5 # HANGUL SYLLABLE TIKEUT-WI-KIYEOK
-0x8AA1 0xB4A6 # HANGUL SYLLABLE TIKEUT-WI-SSANGKIYEOK
-0x8AA2 0xB4A7 # HANGUL SYLLABLE TIKEUT-WI-KIYEOKSIOS
-0x8AA3 0xB4A9 # HANGUL SYLLABLE TIKEUT-WI-NIEUNCIEUC
-0x8AA4 0xB4AA # HANGUL SYLLABLE TIKEUT-WI-NIEUNHIEUH
-0x8AA5 0xB4AB # HANGUL SYLLABLE TIKEUT-WI-TIKEUT
-0x8AA6 0xB4AD # HANGUL SYLLABLE TIKEUT-WI-RIEULKIYEOK
-0x8AA7 0xB4AE # HANGUL SYLLABLE TIKEUT-WI-RIEULMIEUM
-0x8AA8 0xB4AF # HANGUL SYLLABLE TIKEUT-WI-RIEULPIEUP
-0x8AA9 0xB4B0 # HANGUL SYLLABLE TIKEUT-WI-RIEULSIOS
-0x8AAA 0xB4B1 # HANGUL SYLLABLE TIKEUT-WI-RIEULTHIEUTH
-0x8AAB 0xB4B2 # HANGUL SYLLABLE TIKEUT-WI-RIEULPHIEUPH
-0x8AAC 0xB4B3 # HANGUL SYLLABLE TIKEUT-WI-RIEULHIEUH
-0x8AAD 0xB4B4 # HANGUL SYLLABLE TIKEUT-WI-MIEUM
-0x8AAE 0xB4B6 # HANGUL SYLLABLE TIKEUT-WI-PIEUPSIOS
-0x8AAF 0xB4B8 # HANGUL SYLLABLE TIKEUT-WI-SSANGSIOS
-0x8AB0 0xB4BA # HANGUL SYLLABLE TIKEUT-WI-CIEUC
-0x8AB1 0xB4BB # HANGUL SYLLABLE TIKEUT-WI-CHIEUCH
-0x8AB2 0xB4BC # HANGUL SYLLABLE TIKEUT-WI-KHIEUKH
-0x8AB3 0xB4BD # HANGUL SYLLABLE TIKEUT-WI-THIEUTH
-0x8AB4 0xB4BE # HANGUL SYLLABLE TIKEUT-WI-PHIEUPH
-0x8AB5 0xB4BF # HANGUL SYLLABLE TIKEUT-WI-HIEUH
-0x8AB6 0xB4C1 # HANGUL SYLLABLE TIKEUT-YU-KIYEOK
-0x8AB7 0xB4C2 # HANGUL SYLLABLE TIKEUT-YU-SSANGKIYEOK
-0x8AB8 0xB4C3 # HANGUL SYLLABLE TIKEUT-YU-KIYEOKSIOS
-0x8AB9 0xB4C5 # HANGUL SYLLABLE TIKEUT-YU-NIEUNCIEUC
-0x8ABA 0xB4C6 # HANGUL SYLLABLE TIKEUT-YU-NIEUNHIEUH
-0x8ABB 0xB4C7 # HANGUL SYLLABLE TIKEUT-YU-TIKEUT
-0x8ABC 0xB4C9 # HANGUL SYLLABLE TIKEUT-YU-RIEULKIYEOK
-0x8ABD 0xB4CA # HANGUL SYLLABLE TIKEUT-YU-RIEULMIEUM
-0x8ABE 0xB4CB # HANGUL SYLLABLE TIKEUT-YU-RIEULPIEUP
-0x8ABF 0xB4CC # HANGUL SYLLABLE TIKEUT-YU-RIEULSIOS
-0x8AC0 0xB4CD # HANGUL SYLLABLE TIKEUT-YU-RIEULTHIEUTH
-0x8AC1 0xB4CE # HANGUL SYLLABLE TIKEUT-YU-RIEULPHIEUPH
-0x8AC2 0xB4CF # HANGUL SYLLABLE TIKEUT-YU-RIEULHIEUH
-0x8AC3 0xB4D1 # HANGUL SYLLABLE TIKEUT-YU-PIEUP
-0x8AC4 0xB4D2 # HANGUL SYLLABLE TIKEUT-YU-PIEUPSIOS
-0x8AC5 0xB4D3 # HANGUL SYLLABLE TIKEUT-YU-SIOS
-0x8AC6 0xB4D4 # HANGUL SYLLABLE TIKEUT-YU-SSANGSIOS
-0x8AC7 0xB4D6 # HANGUL SYLLABLE TIKEUT-YU-CIEUC
-0x8AC8 0xB4D7 # HANGUL SYLLABLE TIKEUT-YU-CHIEUCH
-0x8AC9 0xB4D8 # HANGUL SYLLABLE TIKEUT-YU-KHIEUKH
-0x8ACA 0xB4D9 # HANGUL SYLLABLE TIKEUT-YU-THIEUTH
-0x8ACB 0xB4DA # HANGUL SYLLABLE TIKEUT-YU-PHIEUPH
-0x8ACC 0xB4DB # HANGUL SYLLABLE TIKEUT-YU-HIEUH
-0x8ACD 0xB4DE # HANGUL SYLLABLE TIKEUT-EU-SSANGKIYEOK
-0x8ACE 0xB4DF # HANGUL SYLLABLE TIKEUT-EU-KIYEOKSIOS
-0x8ACF 0xB4E1 # HANGUL SYLLABLE TIKEUT-EU-NIEUNCIEUC
-0x8AD0 0xB4E2 # HANGUL SYLLABLE TIKEUT-EU-NIEUNHIEUH
-0x8AD1 0xB4E5 # HANGUL SYLLABLE TIKEUT-EU-RIEULKIYEOK
-0x8AD2 0xB4E7 # HANGUL SYLLABLE TIKEUT-EU-RIEULPIEUP
-0x8AD3 0xB4E8 # HANGUL SYLLABLE TIKEUT-EU-RIEULSIOS
-0x8AD4 0xB4E9 # HANGUL SYLLABLE TIKEUT-EU-RIEULTHIEUTH
-0x8AD5 0xB4EA # HANGUL SYLLABLE TIKEUT-EU-RIEULPHIEUPH
-0x8AD6 0xB4EB # HANGUL SYLLABLE TIKEUT-EU-RIEULHIEUH
-0x8AD7 0xB4EE # HANGUL SYLLABLE TIKEUT-EU-PIEUPSIOS
-0x8AD8 0xB4F0 # HANGUL SYLLABLE TIKEUT-EU-SSANGSIOS
-0x8AD9 0xB4F2 # HANGUL SYLLABLE TIKEUT-EU-CIEUC
-0x8ADA 0xB4F3 # HANGUL SYLLABLE TIKEUT-EU-CHIEUCH
-0x8ADB 0xB4F4 # HANGUL SYLLABLE TIKEUT-EU-KHIEUKH
-0x8ADC 0xB4F5 # HANGUL SYLLABLE TIKEUT-EU-THIEUTH
-0x8ADD 0xB4F6 # HANGUL SYLLABLE TIKEUT-EU-PHIEUPH
-0x8ADE 0xB4F7 # HANGUL SYLLABLE TIKEUT-EU-HIEUH
-0x8ADF 0xB4F9 # HANGUL SYLLABLE TIKEUT-YI-KIYEOK
-0x8AE0 0xB4FA # HANGUL SYLLABLE TIKEUT-YI-SSANGKIYEOK
-0x8AE1 0xB4FB # HANGUL SYLLABLE TIKEUT-YI-KIYEOKSIOS
-0x8AE2 0xB4FC # HANGUL SYLLABLE TIKEUT-YI-NIEUN
-0x8AE3 0xB4FD # HANGUL SYLLABLE TIKEUT-YI-NIEUNCIEUC
-0x8AE4 0xB4FE # HANGUL SYLLABLE TIKEUT-YI-NIEUNHIEUH
-0x8AE5 0xB4FF # HANGUL SYLLABLE TIKEUT-YI-TIKEUT
-0x8AE6 0xB500 # HANGUL SYLLABLE TIKEUT-YI-RIEUL
-0x8AE7 0xB501 # HANGUL SYLLABLE TIKEUT-YI-RIEULKIYEOK
-0x8AE8 0xB502 # HANGUL SYLLABLE TIKEUT-YI-RIEULMIEUM
-0x8AE9 0xB503 # HANGUL SYLLABLE TIKEUT-YI-RIEULPIEUP
-0x8AEA 0xB504 # HANGUL SYLLABLE TIKEUT-YI-RIEULSIOS
-0x8AEB 0xB505 # HANGUL SYLLABLE TIKEUT-YI-RIEULTHIEUTH
-0x8AEC 0xB506 # HANGUL SYLLABLE TIKEUT-YI-RIEULPHIEUPH
-0x8AED 0xB507 # HANGUL SYLLABLE TIKEUT-YI-RIEULHIEUH
-0x8AEE 0xB508 # HANGUL SYLLABLE TIKEUT-YI-MIEUM
-0x8AEF 0xB509 # HANGUL SYLLABLE TIKEUT-YI-PIEUP
-0x8AF0 0xB50A # HANGUL SYLLABLE TIKEUT-YI-PIEUPSIOS
-0x8AF1 0xB50B # HANGUL SYLLABLE TIKEUT-YI-SIOS
-0x8AF2 0xB50C # HANGUL SYLLABLE TIKEUT-YI-SSANGSIOS
-0x8AF3 0xB50D # HANGUL SYLLABLE TIKEUT-YI-IEUNG
-0x8AF4 0xB50E # HANGUL SYLLABLE TIKEUT-YI-CIEUC
-0x8AF5 0xB50F # HANGUL SYLLABLE TIKEUT-YI-CHIEUCH
-0x8AF6 0xB510 # HANGUL SYLLABLE TIKEUT-YI-KHIEUKH
-0x8AF7 0xB511 # HANGUL SYLLABLE TIKEUT-YI-THIEUTH
-0x8AF8 0xB512 # HANGUL SYLLABLE TIKEUT-YI-PHIEUPH
-0x8AF9 0xB513 # HANGUL SYLLABLE TIKEUT-YI-HIEUH
-0x8AFA 0xB516 # HANGUL SYLLABLE TIKEUT-I-SSANGKIYEOK
-0x8AFB 0xB517 # HANGUL SYLLABLE TIKEUT-I-KIYEOKSIOS
-0x8AFC 0xB519 # HANGUL SYLLABLE TIKEUT-I-NIEUNCIEUC
-0x8AFD 0xB51A # HANGUL SYLLABLE TIKEUT-I-NIEUNHIEUH
-0x8AFE 0xB51D # HANGUL SYLLABLE TIKEUT-I-RIEULKIYEOK
-0x8B41 0xB51E # HANGUL SYLLABLE TIKEUT-I-RIEULMIEUM
-0x8B42 0xB51F # HANGUL SYLLABLE TIKEUT-I-RIEULPIEUP
-0x8B43 0xB520 # HANGUL SYLLABLE TIKEUT-I-RIEULSIOS
-0x8B44 0xB521 # HANGUL SYLLABLE TIKEUT-I-RIEULTHIEUTH
-0x8B45 0xB522 # HANGUL SYLLABLE TIKEUT-I-RIEULPHIEUPH
-0x8B46 0xB523 # HANGUL SYLLABLE TIKEUT-I-RIEULHIEUH
-0x8B47 0xB526 # HANGUL SYLLABLE TIKEUT-I-PIEUPSIOS
-0x8B48 0xB52B # HANGUL SYLLABLE TIKEUT-I-CHIEUCH
-0x8B49 0xB52C # HANGUL SYLLABLE TIKEUT-I-KHIEUKH
-0x8B4A 0xB52D # HANGUL SYLLABLE TIKEUT-I-THIEUTH
-0x8B4B 0xB52E # HANGUL SYLLABLE TIKEUT-I-PHIEUPH
-0x8B4C 0xB52F # HANGUL SYLLABLE TIKEUT-I-HIEUH
-0x8B4D 0xB532 # HANGUL SYLLABLE SSANGTIKEUT-A-SSANGKIYEOK
-0x8B4E 0xB533 # HANGUL SYLLABLE SSANGTIKEUT-A-KIYEOKSIOS
-0x8B4F 0xB535 # HANGUL SYLLABLE SSANGTIKEUT-A-NIEUNCIEUC
-0x8B50 0xB536 # HANGUL SYLLABLE SSANGTIKEUT-A-NIEUNHIEUH
-0x8B51 0xB537 # HANGUL SYLLABLE SSANGTIKEUT-A-TIKEUT
-0x8B52 0xB539 # HANGUL SYLLABLE SSANGTIKEUT-A-RIEULKIYEOK
-0x8B53 0xB53A # HANGUL SYLLABLE SSANGTIKEUT-A-RIEULMIEUM
-0x8B54 0xB53B # HANGUL SYLLABLE SSANGTIKEUT-A-RIEULPIEUP
-0x8B55 0xB53C # HANGUL SYLLABLE SSANGTIKEUT-A-RIEULSIOS
-0x8B56 0xB53D # HANGUL SYLLABLE SSANGTIKEUT-A-RIEULTHIEUTH
-0x8B57 0xB53E # HANGUL SYLLABLE SSANGTIKEUT-A-RIEULPHIEUPH
-0x8B58 0xB53F # HANGUL SYLLABLE SSANGTIKEUT-A-RIEULHIEUH
-0x8B59 0xB542 # HANGUL SYLLABLE SSANGTIKEUT-A-PIEUPSIOS
-0x8B5A 0xB546 # HANGUL SYLLABLE SSANGTIKEUT-A-CIEUC
-0x8B61 0xB547 # HANGUL SYLLABLE SSANGTIKEUT-A-CHIEUCH
-0x8B62 0xB548 # HANGUL SYLLABLE SSANGTIKEUT-A-KHIEUKH
-0x8B63 0xB549 # HANGUL SYLLABLE SSANGTIKEUT-A-THIEUTH
-0x8B64 0xB54A # HANGUL SYLLABLE SSANGTIKEUT-A-PHIEUPH
-0x8B65 0xB54E # HANGUL SYLLABLE SSANGTIKEUT-AE-SSANGKIYEOK
-0x8B66 0xB54F # HANGUL SYLLABLE SSANGTIKEUT-AE-KIYEOKSIOS
-0x8B67 0xB551 # HANGUL SYLLABLE SSANGTIKEUT-AE-NIEUNCIEUC
-0x8B68 0xB552 # HANGUL SYLLABLE SSANGTIKEUT-AE-NIEUNHIEUH
-0x8B69 0xB553 # HANGUL SYLLABLE SSANGTIKEUT-AE-TIKEUT
-0x8B6A 0xB555 # HANGUL SYLLABLE SSANGTIKEUT-AE-RIEULKIYEOK
-0x8B6B 0xB556 # HANGUL SYLLABLE SSANGTIKEUT-AE-RIEULMIEUM
-0x8B6C 0xB557 # HANGUL SYLLABLE SSANGTIKEUT-AE-RIEULPIEUP
-0x8B6D 0xB558 # HANGUL SYLLABLE SSANGTIKEUT-AE-RIEULSIOS
-0x8B6E 0xB559 # HANGUL SYLLABLE SSANGTIKEUT-AE-RIEULTHIEUTH
-0x8B6F 0xB55A # HANGUL SYLLABLE SSANGTIKEUT-AE-RIEULPHIEUPH
-0x8B70 0xB55B # HANGUL SYLLABLE SSANGTIKEUT-AE-RIEULHIEUH
-0x8B71 0xB55E # HANGUL SYLLABLE SSANGTIKEUT-AE-PIEUPSIOS
-0x8B72 0xB562 # HANGUL SYLLABLE SSANGTIKEUT-AE-CIEUC
-0x8B73 0xB563 # HANGUL SYLLABLE SSANGTIKEUT-AE-CHIEUCH
-0x8B74 0xB564 # HANGUL SYLLABLE SSANGTIKEUT-AE-KHIEUKH
-0x8B75 0xB565 # HANGUL SYLLABLE SSANGTIKEUT-AE-THIEUTH
-0x8B76 0xB566 # HANGUL SYLLABLE SSANGTIKEUT-AE-PHIEUPH
-0x8B77 0xB567 # HANGUL SYLLABLE SSANGTIKEUT-AE-HIEUH
-0x8B78 0xB568 # HANGUL SYLLABLE SSANGTIKEUT-YA
-0x8B79 0xB569 # HANGUL SYLLABLE SSANGTIKEUT-YA-KIYEOK
-0x8B7A 0xB56A # HANGUL SYLLABLE SSANGTIKEUT-YA-SSANGKIYEOK
-0x8B81 0xB56B # HANGUL SYLLABLE SSANGTIKEUT-YA-KIYEOKSIOS
-0x8B82 0xB56C # HANGUL SYLLABLE SSANGTIKEUT-YA-NIEUN
-0x8B83 0xB56D # HANGUL SYLLABLE SSANGTIKEUT-YA-NIEUNCIEUC
-0x8B84 0xB56E # HANGUL SYLLABLE SSANGTIKEUT-YA-NIEUNHIEUH
-0x8B85 0xB56F # HANGUL SYLLABLE SSANGTIKEUT-YA-TIKEUT
-0x8B86 0xB570 # HANGUL SYLLABLE SSANGTIKEUT-YA-RIEUL
-0x8B87 0xB571 # HANGUL SYLLABLE SSANGTIKEUT-YA-RIEULKIYEOK
-0x8B88 0xB572 # HANGUL SYLLABLE SSANGTIKEUT-YA-RIEULMIEUM
-0x8B89 0xB573 # HANGUL SYLLABLE SSANGTIKEUT-YA-RIEULPIEUP
-0x8B8A 0xB574 # HANGUL SYLLABLE SSANGTIKEUT-YA-RIEULSIOS
-0x8B8B 0xB575 # HANGUL SYLLABLE SSANGTIKEUT-YA-RIEULTHIEUTH
-0x8B8C 0xB576 # HANGUL SYLLABLE SSANGTIKEUT-YA-RIEULPHIEUPH
-0x8B8D 0xB577 # HANGUL SYLLABLE SSANGTIKEUT-YA-RIEULHIEUH
-0x8B8E 0xB578 # HANGUL SYLLABLE SSANGTIKEUT-YA-MIEUM
-0x8B8F 0xB579 # HANGUL SYLLABLE SSANGTIKEUT-YA-PIEUP
-0x8B90 0xB57A # HANGUL SYLLABLE SSANGTIKEUT-YA-PIEUPSIOS
-0x8B91 0xB57B # HANGUL SYLLABLE SSANGTIKEUT-YA-SIOS
-0x8B92 0xB57C # HANGUL SYLLABLE SSANGTIKEUT-YA-SSANGSIOS
-0x8B93 0xB57D # HANGUL SYLLABLE SSANGTIKEUT-YA-IEUNG
-0x8B94 0xB57E # HANGUL SYLLABLE SSANGTIKEUT-YA-CIEUC
-0x8B95 0xB57F # HANGUL SYLLABLE SSANGTIKEUT-YA-CHIEUCH
-0x8B96 0xB580 # HANGUL SYLLABLE SSANGTIKEUT-YA-KHIEUKH
-0x8B97 0xB581 # HANGUL SYLLABLE SSANGTIKEUT-YA-THIEUTH
-0x8B98 0xB582 # HANGUL SYLLABLE SSANGTIKEUT-YA-PHIEUPH
-0x8B99 0xB583 # HANGUL SYLLABLE SSANGTIKEUT-YA-HIEUH
-0x8B9A 0xB584 # HANGUL SYLLABLE SSANGTIKEUT-YAE
-0x8B9B 0xB585 # HANGUL SYLLABLE SSANGTIKEUT-YAE-KIYEOK
-0x8B9C 0xB586 # HANGUL SYLLABLE SSANGTIKEUT-YAE-SSANGKIYEOK
-0x8B9D 0xB587 # HANGUL SYLLABLE SSANGTIKEUT-YAE-KIYEOKSIOS
-0x8B9E 0xB588 # HANGUL SYLLABLE SSANGTIKEUT-YAE-NIEUN
-0x8B9F 0xB589 # HANGUL SYLLABLE SSANGTIKEUT-YAE-NIEUNCIEUC
-0x8BA0 0xB58A # HANGUL SYLLABLE SSANGTIKEUT-YAE-NIEUNHIEUH
-0x8BA1 0xB58B # HANGUL SYLLABLE SSANGTIKEUT-YAE-TIKEUT
-0x8BA2 0xB58C # HANGUL SYLLABLE SSANGTIKEUT-YAE-RIEUL
-0x8BA3 0xB58D # HANGUL SYLLABLE SSANGTIKEUT-YAE-RIEULKIYEOK
-0x8BA4 0xB58E # HANGUL SYLLABLE SSANGTIKEUT-YAE-RIEULMIEUM
-0x8BA5 0xB58F # HANGUL SYLLABLE SSANGTIKEUT-YAE-RIEULPIEUP
-0x8BA6 0xB590 # HANGUL SYLLABLE SSANGTIKEUT-YAE-RIEULSIOS
-0x8BA7 0xB591 # HANGUL SYLLABLE SSANGTIKEUT-YAE-RIEULTHIEUTH
-0x8BA8 0xB592 # HANGUL SYLLABLE SSANGTIKEUT-YAE-RIEULPHIEUPH
-0x8BA9 0xB593 # HANGUL SYLLABLE SSANGTIKEUT-YAE-RIEULHIEUH
-0x8BAA 0xB594 # HANGUL SYLLABLE SSANGTIKEUT-YAE-MIEUM
-0x8BAB 0xB595 # HANGUL SYLLABLE SSANGTIKEUT-YAE-PIEUP
-0x8BAC 0xB596 # HANGUL SYLLABLE SSANGTIKEUT-YAE-PIEUPSIOS
-0x8BAD 0xB597 # HANGUL SYLLABLE SSANGTIKEUT-YAE-SIOS
-0x8BAE 0xB598 # HANGUL SYLLABLE SSANGTIKEUT-YAE-SSANGSIOS
-0x8BAF 0xB599 # HANGUL SYLLABLE SSANGTIKEUT-YAE-IEUNG
-0x8BB0 0xB59A # HANGUL SYLLABLE SSANGTIKEUT-YAE-CIEUC
-0x8BB1 0xB59B # HANGUL SYLLABLE SSANGTIKEUT-YAE-CHIEUCH
-0x8BB2 0xB59C # HANGUL SYLLABLE SSANGTIKEUT-YAE-KHIEUKH
-0x8BB3 0xB59D # HANGUL SYLLABLE SSANGTIKEUT-YAE-THIEUTH
-0x8BB4 0xB59E # HANGUL SYLLABLE SSANGTIKEUT-YAE-PHIEUPH
-0x8BB5 0xB59F # HANGUL SYLLABLE SSANGTIKEUT-YAE-HIEUH
-0x8BB6 0xB5A2 # HANGUL SYLLABLE SSANGTIKEUT-EO-SSANGKIYEOK
-0x8BB7 0xB5A3 # HANGUL SYLLABLE SSANGTIKEUT-EO-KIYEOKSIOS
-0x8BB8 0xB5A5 # HANGUL SYLLABLE SSANGTIKEUT-EO-NIEUNCIEUC
-0x8BB9 0xB5A6 # HANGUL SYLLABLE SSANGTIKEUT-EO-NIEUNHIEUH
-0x8BBA 0xB5A7 # HANGUL SYLLABLE SSANGTIKEUT-EO-TIKEUT
-0x8BBB 0xB5A9 # HANGUL SYLLABLE SSANGTIKEUT-EO-RIEULKIYEOK
-0x8BBC 0xB5AC # HANGUL SYLLABLE SSANGTIKEUT-EO-RIEULSIOS
-0x8BBD 0xB5AD # HANGUL SYLLABLE SSANGTIKEUT-EO-RIEULTHIEUTH
-0x8BBE 0xB5AE # HANGUL SYLLABLE SSANGTIKEUT-EO-RIEULPHIEUPH
-0x8BBF 0xB5AF # HANGUL SYLLABLE SSANGTIKEUT-EO-RIEULHIEUH
-0x8BC0 0xB5B2 # HANGUL SYLLABLE SSANGTIKEUT-EO-PIEUPSIOS
-0x8BC1 0xB5B6 # HANGUL SYLLABLE SSANGTIKEUT-EO-CIEUC
-0x8BC2 0xB5B7 # HANGUL SYLLABLE SSANGTIKEUT-EO-CHIEUCH
-0x8BC3 0xB5B8 # HANGUL SYLLABLE SSANGTIKEUT-EO-KHIEUKH
-0x8BC4 0xB5B9 # HANGUL SYLLABLE SSANGTIKEUT-EO-THIEUTH
-0x8BC5 0xB5BA # HANGUL SYLLABLE SSANGTIKEUT-EO-PHIEUPH
-0x8BC6 0xB5BE # HANGUL SYLLABLE SSANGTIKEUT-E-SSANGKIYEOK
-0x8BC7 0xB5BF # HANGUL SYLLABLE SSANGTIKEUT-E-KIYEOKSIOS
-0x8BC8 0xB5C1 # HANGUL SYLLABLE SSANGTIKEUT-E-NIEUNCIEUC
-0x8BC9 0xB5C2 # HANGUL SYLLABLE SSANGTIKEUT-E-NIEUNHIEUH
-0x8BCA 0xB5C3 # HANGUL SYLLABLE SSANGTIKEUT-E-TIKEUT
-0x8BCB 0xB5C5 # HANGUL SYLLABLE SSANGTIKEUT-E-RIEULKIYEOK
-0x8BCC 0xB5C6 # HANGUL SYLLABLE SSANGTIKEUT-E-RIEULMIEUM
-0x8BCD 0xB5C7 # HANGUL SYLLABLE SSANGTIKEUT-E-RIEULPIEUP
-0x8BCE 0xB5C8 # HANGUL SYLLABLE SSANGTIKEUT-E-RIEULSIOS
-0x8BCF 0xB5C9 # HANGUL SYLLABLE SSANGTIKEUT-E-RIEULTHIEUTH
-0x8BD0 0xB5CA # HANGUL SYLLABLE SSANGTIKEUT-E-RIEULPHIEUPH
-0x8BD1 0xB5CB # HANGUL SYLLABLE SSANGTIKEUT-E-RIEULHIEUH
-0x8BD2 0xB5CE # HANGUL SYLLABLE SSANGTIKEUT-E-PIEUPSIOS
-0x8BD3 0xB5D2 # HANGUL SYLLABLE SSANGTIKEUT-E-CIEUC
-0x8BD4 0xB5D3 # HANGUL SYLLABLE SSANGTIKEUT-E-CHIEUCH
-0x8BD5 0xB5D4 # HANGUL SYLLABLE SSANGTIKEUT-E-KHIEUKH
-0x8BD6 0xB5D5 # HANGUL SYLLABLE SSANGTIKEUT-E-THIEUTH
-0x8BD7 0xB5D6 # HANGUL SYLLABLE SSANGTIKEUT-E-PHIEUPH
-0x8BD8 0xB5D7 # HANGUL SYLLABLE SSANGTIKEUT-E-HIEUH
-0x8BD9 0xB5D9 # HANGUL SYLLABLE SSANGTIKEUT-YEO-KIYEOK
-0x8BDA 0xB5DA # HANGUL SYLLABLE SSANGTIKEUT-YEO-SSANGKIYEOK
-0x8BDB 0xB5DB # HANGUL SYLLABLE SSANGTIKEUT-YEO-KIYEOKSIOS
-0x8BDC 0xB5DC # HANGUL SYLLABLE SSANGTIKEUT-YEO-NIEUN
-0x8BDD 0xB5DD # HANGUL SYLLABLE SSANGTIKEUT-YEO-NIEUNCIEUC
-0x8BDE 0xB5DE # HANGUL SYLLABLE SSANGTIKEUT-YEO-NIEUNHIEUH
-0x8BDF 0xB5DF # HANGUL SYLLABLE SSANGTIKEUT-YEO-TIKEUT
-0x8BE0 0xB5E0 # HANGUL SYLLABLE SSANGTIKEUT-YEO-RIEUL
-0x8BE1 0xB5E1 # HANGUL SYLLABLE SSANGTIKEUT-YEO-RIEULKIYEOK
-0x8BE2 0xB5E2 # HANGUL SYLLABLE SSANGTIKEUT-YEO-RIEULMIEUM
-0x8BE3 0xB5E3 # HANGUL SYLLABLE SSANGTIKEUT-YEO-RIEULPIEUP
-0x8BE4 0xB5E4 # HANGUL SYLLABLE SSANGTIKEUT-YEO-RIEULSIOS
-0x8BE5 0xB5E5 # HANGUL SYLLABLE SSANGTIKEUT-YEO-RIEULTHIEUTH
-0x8BE6 0xB5E6 # HANGUL SYLLABLE SSANGTIKEUT-YEO-RIEULPHIEUPH
-0x8BE7 0xB5E7 # HANGUL SYLLABLE SSANGTIKEUT-YEO-RIEULHIEUH
-0x8BE8 0xB5E8 # HANGUL SYLLABLE SSANGTIKEUT-YEO-MIEUM
-0x8BE9 0xB5E9 # HANGUL SYLLABLE SSANGTIKEUT-YEO-PIEUP
-0x8BEA 0xB5EA # HANGUL SYLLABLE SSANGTIKEUT-YEO-PIEUPSIOS
-0x8BEB 0xB5EB # HANGUL SYLLABLE SSANGTIKEUT-YEO-SIOS
-0x8BEC 0xB5ED # HANGUL SYLLABLE SSANGTIKEUT-YEO-IEUNG
-0x8BED 0xB5EE # HANGUL SYLLABLE SSANGTIKEUT-YEO-CIEUC
-0x8BEE 0xB5EF # HANGUL SYLLABLE SSANGTIKEUT-YEO-CHIEUCH
-0x8BEF 0xB5F0 # HANGUL SYLLABLE SSANGTIKEUT-YEO-KHIEUKH
-0x8BF0 0xB5F1 # HANGUL SYLLABLE SSANGTIKEUT-YEO-THIEUTH
-0x8BF1 0xB5F2 # HANGUL SYLLABLE SSANGTIKEUT-YEO-PHIEUPH
-0x8BF2 0xB5F3 # HANGUL SYLLABLE SSANGTIKEUT-YEO-HIEUH
-0x8BF3 0xB5F4 # HANGUL SYLLABLE SSANGTIKEUT-YE
-0x8BF4 0xB5F5 # HANGUL SYLLABLE SSANGTIKEUT-YE-KIYEOK
-0x8BF5 0xB5F6 # HANGUL SYLLABLE SSANGTIKEUT-YE-SSANGKIYEOK
-0x8BF6 0xB5F7 # HANGUL SYLLABLE SSANGTIKEUT-YE-KIYEOKSIOS
-0x8BF7 0xB5F8 # HANGUL SYLLABLE SSANGTIKEUT-YE-NIEUN
-0x8BF8 0xB5F9 # HANGUL SYLLABLE SSANGTIKEUT-YE-NIEUNCIEUC
-0x8BF9 0xB5FA # HANGUL SYLLABLE SSANGTIKEUT-YE-NIEUNHIEUH
-0x8BFA 0xB5FB # HANGUL SYLLABLE SSANGTIKEUT-YE-TIKEUT
-0x8BFB 0xB5FC # HANGUL SYLLABLE SSANGTIKEUT-YE-RIEUL
-0x8BFC 0xB5FD # HANGUL SYLLABLE SSANGTIKEUT-YE-RIEULKIYEOK
-0x8BFD 0xB5FE # HANGUL SYLLABLE SSANGTIKEUT-YE-RIEULMIEUM
-0x8BFE 0xB5FF # HANGUL SYLLABLE SSANGTIKEUT-YE-RIEULPIEUP
-0x8C41 0xB600 # HANGUL SYLLABLE SSANGTIKEUT-YE-RIEULSIOS
-0x8C42 0xB601 # HANGUL SYLLABLE SSANGTIKEUT-YE-RIEULTHIEUTH
-0x8C43 0xB602 # HANGUL SYLLABLE SSANGTIKEUT-YE-RIEULPHIEUPH
-0x8C44 0xB603 # HANGUL SYLLABLE SSANGTIKEUT-YE-RIEULHIEUH
-0x8C45 0xB604 # HANGUL SYLLABLE SSANGTIKEUT-YE-MIEUM
-0x8C46 0xB605 # HANGUL SYLLABLE SSANGTIKEUT-YE-PIEUP
-0x8C47 0xB606 # HANGUL SYLLABLE SSANGTIKEUT-YE-PIEUPSIOS
-0x8C48 0xB607 # HANGUL SYLLABLE SSANGTIKEUT-YE-SIOS
-0x8C49 0xB608 # HANGUL SYLLABLE SSANGTIKEUT-YE-SSANGSIOS
-0x8C4A 0xB609 # HANGUL SYLLABLE SSANGTIKEUT-YE-IEUNG
-0x8C4B 0xB60A # HANGUL SYLLABLE SSANGTIKEUT-YE-CIEUC
-0x8C4C 0xB60B # HANGUL SYLLABLE SSANGTIKEUT-YE-CHIEUCH
-0x8C4D 0xB60C # HANGUL SYLLABLE SSANGTIKEUT-YE-KHIEUKH
-0x8C4E 0xB60D # HANGUL SYLLABLE SSANGTIKEUT-YE-THIEUTH
-0x8C4F 0xB60E # HANGUL SYLLABLE SSANGTIKEUT-YE-PHIEUPH
-0x8C50 0xB60F # HANGUL SYLLABLE SSANGTIKEUT-YE-HIEUH
-0x8C51 0xB612 # HANGUL SYLLABLE SSANGTIKEUT-O-SSANGKIYEOK
-0x8C52 0xB613 # HANGUL SYLLABLE SSANGTIKEUT-O-KIYEOKSIOS
-0x8C53 0xB615 # HANGUL SYLLABLE SSANGTIKEUT-O-NIEUNCIEUC
-0x8C54 0xB616 # HANGUL SYLLABLE SSANGTIKEUT-O-NIEUNHIEUH
-0x8C55 0xB617 # HANGUL SYLLABLE SSANGTIKEUT-O-TIKEUT
-0x8C56 0xB619 # HANGUL SYLLABLE SSANGTIKEUT-O-RIEULKIYEOK
-0x8C57 0xB61A # HANGUL SYLLABLE SSANGTIKEUT-O-RIEULMIEUM
-0x8C58 0xB61B # HANGUL SYLLABLE SSANGTIKEUT-O-RIEULPIEUP
-0x8C59 0xB61C # HANGUL SYLLABLE SSANGTIKEUT-O-RIEULSIOS
-0x8C5A 0xB61D # HANGUL SYLLABLE SSANGTIKEUT-O-RIEULTHIEUTH
-0x8C61 0xB61E # HANGUL SYLLABLE SSANGTIKEUT-O-RIEULPHIEUPH
-0x8C62 0xB61F # HANGUL SYLLABLE SSANGTIKEUT-O-RIEULHIEUH
-0x8C63 0xB620 # HANGUL SYLLABLE SSANGTIKEUT-O-MIEUM
-0x8C64 0xB621 # HANGUL SYLLABLE SSANGTIKEUT-O-PIEUP
-0x8C65 0xB622 # HANGUL SYLLABLE SSANGTIKEUT-O-PIEUPSIOS
-0x8C66 0xB623 # HANGUL SYLLABLE SSANGTIKEUT-O-SIOS
-0x8C67 0xB624 # HANGUL SYLLABLE SSANGTIKEUT-O-SSANGSIOS
-0x8C68 0xB626 # HANGUL SYLLABLE SSANGTIKEUT-O-CIEUC
-0x8C69 0xB627 # HANGUL SYLLABLE SSANGTIKEUT-O-CHIEUCH
-0x8C6A 0xB628 # HANGUL SYLLABLE SSANGTIKEUT-O-KHIEUKH
-0x8C6B 0xB629 # HANGUL SYLLABLE SSANGTIKEUT-O-THIEUTH
-0x8C6C 0xB62A # HANGUL SYLLABLE SSANGTIKEUT-O-PHIEUPH
-0x8C6D 0xB62B # HANGUL SYLLABLE SSANGTIKEUT-O-HIEUH
-0x8C6E 0xB62D # HANGUL SYLLABLE SSANGTIKEUT-WA-KIYEOK
-0x8C6F 0xB62E # HANGUL SYLLABLE SSANGTIKEUT-WA-SSANGKIYEOK
-0x8C70 0xB62F # HANGUL SYLLABLE SSANGTIKEUT-WA-KIYEOKSIOS
-0x8C71 0xB630 # HANGUL SYLLABLE SSANGTIKEUT-WA-NIEUN
-0x8C72 0xB631 # HANGUL SYLLABLE SSANGTIKEUT-WA-NIEUNCIEUC
-0x8C73 0xB632 # HANGUL SYLLABLE SSANGTIKEUT-WA-NIEUNHIEUH
-0x8C74 0xB633 # HANGUL SYLLABLE SSANGTIKEUT-WA-TIKEUT
-0x8C75 0xB635 # HANGUL SYLLABLE SSANGTIKEUT-WA-RIEULKIYEOK
-0x8C76 0xB636 # HANGUL SYLLABLE SSANGTIKEUT-WA-RIEULMIEUM
-0x8C77 0xB637 # HANGUL SYLLABLE SSANGTIKEUT-WA-RIEULPIEUP
-0x8C78 0xB638 # HANGUL SYLLABLE SSANGTIKEUT-WA-RIEULSIOS
-0x8C79 0xB639 # HANGUL SYLLABLE SSANGTIKEUT-WA-RIEULTHIEUTH
-0x8C7A 0xB63A # HANGUL SYLLABLE SSANGTIKEUT-WA-RIEULPHIEUPH
-0x8C81 0xB63B # HANGUL SYLLABLE SSANGTIKEUT-WA-RIEULHIEUH
-0x8C82 0xB63C # HANGUL SYLLABLE SSANGTIKEUT-WA-MIEUM
-0x8C83 0xB63D # HANGUL SYLLABLE SSANGTIKEUT-WA-PIEUP
-0x8C84 0xB63E # HANGUL SYLLABLE SSANGTIKEUT-WA-PIEUPSIOS
-0x8C85 0xB63F # HANGUL SYLLABLE SSANGTIKEUT-WA-SIOS
-0x8C86 0xB640 # HANGUL SYLLABLE SSANGTIKEUT-WA-SSANGSIOS
-0x8C87 0xB641 # HANGUL SYLLABLE SSANGTIKEUT-WA-IEUNG
-0x8C88 0xB642 # HANGUL SYLLABLE SSANGTIKEUT-WA-CIEUC
-0x8C89 0xB643 # HANGUL SYLLABLE SSANGTIKEUT-WA-CHIEUCH
-0x8C8A 0xB644 # HANGUL SYLLABLE SSANGTIKEUT-WA-KHIEUKH
-0x8C8B 0xB645 # HANGUL SYLLABLE SSANGTIKEUT-WA-THIEUTH
-0x8C8C 0xB646 # HANGUL SYLLABLE SSANGTIKEUT-WA-PHIEUPH
-0x8C8D 0xB647 # HANGUL SYLLABLE SSANGTIKEUT-WA-HIEUH
-0x8C8E 0xB649 # HANGUL SYLLABLE SSANGTIKEUT-WAE-KIYEOK
-0x8C8F 0xB64A # HANGUL SYLLABLE SSANGTIKEUT-WAE-SSANGKIYEOK
-0x8C90 0xB64B # HANGUL SYLLABLE SSANGTIKEUT-WAE-KIYEOKSIOS
-0x8C91 0xB64C # HANGUL SYLLABLE SSANGTIKEUT-WAE-NIEUN
-0x8C92 0xB64D # HANGUL SYLLABLE SSANGTIKEUT-WAE-NIEUNCIEUC
-0x8C93 0xB64E # HANGUL SYLLABLE SSANGTIKEUT-WAE-NIEUNHIEUH
-0x8C94 0xB64F # HANGUL SYLLABLE SSANGTIKEUT-WAE-TIKEUT
-0x8C95 0xB650 # HANGUL SYLLABLE SSANGTIKEUT-WAE-RIEUL
-0x8C96 0xB651 # HANGUL SYLLABLE SSANGTIKEUT-WAE-RIEULKIYEOK
-0x8C97 0xB652 # HANGUL SYLLABLE SSANGTIKEUT-WAE-RIEULMIEUM
-0x8C98 0xB653 # HANGUL SYLLABLE SSANGTIKEUT-WAE-RIEULPIEUP
-0x8C99 0xB654 # HANGUL SYLLABLE SSANGTIKEUT-WAE-RIEULSIOS
-0x8C9A 0xB655 # HANGUL SYLLABLE SSANGTIKEUT-WAE-RIEULTHIEUTH
-0x8C9B 0xB656 # HANGUL SYLLABLE SSANGTIKEUT-WAE-RIEULPHIEUPH
-0x8C9C 0xB657 # HANGUL SYLLABLE SSANGTIKEUT-WAE-RIEULHIEUH
-0x8C9D 0xB658 # HANGUL SYLLABLE SSANGTIKEUT-WAE-MIEUM
-0x8C9E 0xB659 # HANGUL SYLLABLE SSANGTIKEUT-WAE-PIEUP
-0x8C9F 0xB65A # HANGUL SYLLABLE SSANGTIKEUT-WAE-PIEUPSIOS
-0x8CA0 0xB65B # HANGUL SYLLABLE SSANGTIKEUT-WAE-SIOS
-0x8CA1 0xB65C # HANGUL SYLLABLE SSANGTIKEUT-WAE-SSANGSIOS
-0x8CA2 0xB65D # HANGUL SYLLABLE SSANGTIKEUT-WAE-IEUNG
-0x8CA3 0xB65E # HANGUL SYLLABLE SSANGTIKEUT-WAE-CIEUC
-0x8CA4 0xB65F # HANGUL SYLLABLE SSANGTIKEUT-WAE-CHIEUCH
-0x8CA5 0xB660 # HANGUL SYLLABLE SSANGTIKEUT-WAE-KHIEUKH
-0x8CA6 0xB661 # HANGUL SYLLABLE SSANGTIKEUT-WAE-THIEUTH
-0x8CA7 0xB662 # HANGUL SYLLABLE SSANGTIKEUT-WAE-PHIEUPH
-0x8CA8 0xB663 # HANGUL SYLLABLE SSANGTIKEUT-WAE-HIEUH
-0x8CA9 0xB665 # HANGUL SYLLABLE SSANGTIKEUT-OE-KIYEOK
-0x8CAA 0xB666 # HANGUL SYLLABLE SSANGTIKEUT-OE-SSANGKIYEOK
-0x8CAB 0xB667 # HANGUL SYLLABLE SSANGTIKEUT-OE-KIYEOKSIOS
-0x8CAC 0xB669 # HANGUL SYLLABLE SSANGTIKEUT-OE-NIEUNCIEUC
-0x8CAD 0xB66A # HANGUL SYLLABLE SSANGTIKEUT-OE-NIEUNHIEUH
-0x8CAE 0xB66B # HANGUL SYLLABLE SSANGTIKEUT-OE-TIKEUT
-0x8CAF 0xB66C # HANGUL SYLLABLE SSANGTIKEUT-OE-RIEUL
-0x8CB0 0xB66D # HANGUL SYLLABLE SSANGTIKEUT-OE-RIEULKIYEOK
-0x8CB1 0xB66E # HANGUL SYLLABLE SSANGTIKEUT-OE-RIEULMIEUM
-0x8CB2 0xB66F # HANGUL SYLLABLE SSANGTIKEUT-OE-RIEULPIEUP
-0x8CB3 0xB670 # HANGUL SYLLABLE SSANGTIKEUT-OE-RIEULSIOS
-0x8CB4 0xB671 # HANGUL SYLLABLE SSANGTIKEUT-OE-RIEULTHIEUTH
-0x8CB5 0xB672 # HANGUL SYLLABLE SSANGTIKEUT-OE-RIEULPHIEUPH
-0x8CB6 0xB673 # HANGUL SYLLABLE SSANGTIKEUT-OE-RIEULHIEUH
-0x8CB7 0xB674 # HANGUL SYLLABLE SSANGTIKEUT-OE-MIEUM
-0x8CB8 0xB675 # HANGUL SYLLABLE SSANGTIKEUT-OE-PIEUP
-0x8CB9 0xB676 # HANGUL SYLLABLE SSANGTIKEUT-OE-PIEUPSIOS
-0x8CBA 0xB677 # HANGUL SYLLABLE SSANGTIKEUT-OE-SIOS
-0x8CBB 0xB678 # HANGUL SYLLABLE SSANGTIKEUT-OE-SSANGSIOS
-0x8CBC 0xB679 # HANGUL SYLLABLE SSANGTIKEUT-OE-IEUNG
-0x8CBD 0xB67A # HANGUL SYLLABLE SSANGTIKEUT-OE-CIEUC
-0x8CBE 0xB67B # HANGUL SYLLABLE SSANGTIKEUT-OE-CHIEUCH
-0x8CBF 0xB67C # HANGUL SYLLABLE SSANGTIKEUT-OE-KHIEUKH
-0x8CC0 0xB67D # HANGUL SYLLABLE SSANGTIKEUT-OE-THIEUTH
-0x8CC1 0xB67E # HANGUL SYLLABLE SSANGTIKEUT-OE-PHIEUPH
-0x8CC2 0xB67F # HANGUL SYLLABLE SSANGTIKEUT-OE-HIEUH
-0x8CC3 0xB680 # HANGUL SYLLABLE SSANGTIKEUT-YO
-0x8CC4 0xB681 # HANGUL SYLLABLE SSANGTIKEUT-YO-KIYEOK
-0x8CC5 0xB682 # HANGUL SYLLABLE SSANGTIKEUT-YO-SSANGKIYEOK
-0x8CC6 0xB683 # HANGUL SYLLABLE SSANGTIKEUT-YO-KIYEOKSIOS
-0x8CC7 0xB684 # HANGUL SYLLABLE SSANGTIKEUT-YO-NIEUN
-0x8CC8 0xB685 # HANGUL SYLLABLE SSANGTIKEUT-YO-NIEUNCIEUC
-0x8CC9 0xB686 # HANGUL SYLLABLE SSANGTIKEUT-YO-NIEUNHIEUH
-0x8CCA 0xB687 # HANGUL SYLLABLE SSANGTIKEUT-YO-TIKEUT
-0x8CCB 0xB688 # HANGUL SYLLABLE SSANGTIKEUT-YO-RIEUL
-0x8CCC 0xB689 # HANGUL SYLLABLE SSANGTIKEUT-YO-RIEULKIYEOK
-0x8CCD 0xB68A # HANGUL SYLLABLE SSANGTIKEUT-YO-RIEULMIEUM
-0x8CCE 0xB68B # HANGUL SYLLABLE SSANGTIKEUT-YO-RIEULPIEUP
-0x8CCF 0xB68C # HANGUL SYLLABLE SSANGTIKEUT-YO-RIEULSIOS
-0x8CD0 0xB68D # HANGUL SYLLABLE SSANGTIKEUT-YO-RIEULTHIEUTH
-0x8CD1 0xB68E # HANGUL SYLLABLE SSANGTIKEUT-YO-RIEULPHIEUPH
-0x8CD2 0xB68F # HANGUL SYLLABLE SSANGTIKEUT-YO-RIEULHIEUH
-0x8CD3 0xB690 # HANGUL SYLLABLE SSANGTIKEUT-YO-MIEUM
-0x8CD4 0xB691 # HANGUL SYLLABLE SSANGTIKEUT-YO-PIEUP
-0x8CD5 0xB692 # HANGUL SYLLABLE SSANGTIKEUT-YO-PIEUPSIOS
-0x8CD6 0xB693 # HANGUL SYLLABLE SSANGTIKEUT-YO-SIOS
-0x8CD7 0xB694 # HANGUL SYLLABLE SSANGTIKEUT-YO-SSANGSIOS
-0x8CD8 0xB695 # HANGUL SYLLABLE SSANGTIKEUT-YO-IEUNG
-0x8CD9 0xB696 # HANGUL SYLLABLE SSANGTIKEUT-YO-CIEUC
-0x8CDA 0xB697 # HANGUL SYLLABLE SSANGTIKEUT-YO-CHIEUCH
-0x8CDB 0xB698 # HANGUL SYLLABLE SSANGTIKEUT-YO-KHIEUKH
-0x8CDC 0xB699 # HANGUL SYLLABLE SSANGTIKEUT-YO-THIEUTH
-0x8CDD 0xB69A # HANGUL SYLLABLE SSANGTIKEUT-YO-PHIEUPH
-0x8CDE 0xB69B # HANGUL SYLLABLE SSANGTIKEUT-YO-HIEUH
-0x8CDF 0xB69E # HANGUL SYLLABLE SSANGTIKEUT-U-SSANGKIYEOK
-0x8CE0 0xB69F # HANGUL SYLLABLE SSANGTIKEUT-U-KIYEOKSIOS
-0x8CE1 0xB6A1 # HANGUL SYLLABLE SSANGTIKEUT-U-NIEUNCIEUC
-0x8CE2 0xB6A2 # HANGUL SYLLABLE SSANGTIKEUT-U-NIEUNHIEUH
-0x8CE3 0xB6A3 # HANGUL SYLLABLE SSANGTIKEUT-U-TIKEUT
-0x8CE4 0xB6A5 # HANGUL SYLLABLE SSANGTIKEUT-U-RIEULKIYEOK
-0x8CE5 0xB6A6 # HANGUL SYLLABLE SSANGTIKEUT-U-RIEULMIEUM
-0x8CE6 0xB6A7 # HANGUL SYLLABLE SSANGTIKEUT-U-RIEULPIEUP
-0x8CE7 0xB6A8 # HANGUL SYLLABLE SSANGTIKEUT-U-RIEULSIOS
-0x8CE8 0xB6A9 # HANGUL SYLLABLE SSANGTIKEUT-U-RIEULTHIEUTH
-0x8CE9 0xB6AA # HANGUL SYLLABLE SSANGTIKEUT-U-RIEULPHIEUPH
-0x8CEA 0xB6AD # HANGUL SYLLABLE SSANGTIKEUT-U-PIEUP
-0x8CEB 0xB6AE # HANGUL SYLLABLE SSANGTIKEUT-U-PIEUPSIOS
-0x8CEC 0xB6AF # HANGUL SYLLABLE SSANGTIKEUT-U-SIOS
-0x8CED 0xB6B0 # HANGUL SYLLABLE SSANGTIKEUT-U-SSANGSIOS
-0x8CEE 0xB6B2 # HANGUL SYLLABLE SSANGTIKEUT-U-CIEUC
-0x8CEF 0xB6B3 # HANGUL SYLLABLE SSANGTIKEUT-U-CHIEUCH
-0x8CF0 0xB6B4 # HANGUL SYLLABLE SSANGTIKEUT-U-KHIEUKH
-0x8CF1 0xB6B5 # HANGUL SYLLABLE SSANGTIKEUT-U-THIEUTH
-0x8CF2 0xB6B6 # HANGUL SYLLABLE SSANGTIKEUT-U-PHIEUPH
-0x8CF3 0xB6B7 # HANGUL SYLLABLE SSANGTIKEUT-U-HIEUH
-0x8CF4 0xB6B8 # HANGUL SYLLABLE SSANGTIKEUT-WEO
-0x8CF5 0xB6B9 # HANGUL SYLLABLE SSANGTIKEUT-WEO-KIYEOK
-0x8CF6 0xB6BA # HANGUL SYLLABLE SSANGTIKEUT-WEO-SSANGKIYEOK
-0x8CF7 0xB6BB # HANGUL SYLLABLE SSANGTIKEUT-WEO-KIYEOKSIOS
-0x8CF8 0xB6BC # HANGUL SYLLABLE SSANGTIKEUT-WEO-NIEUN
-0x8CF9 0xB6BD # HANGUL SYLLABLE SSANGTIKEUT-WEO-NIEUNCIEUC
-0x8CFA 0xB6BE # HANGUL SYLLABLE SSANGTIKEUT-WEO-NIEUNHIEUH
-0x8CFB 0xB6BF # HANGUL SYLLABLE SSANGTIKEUT-WEO-TIKEUT
-0x8CFC 0xB6C0 # HANGUL SYLLABLE SSANGTIKEUT-WEO-RIEUL
-0x8CFD 0xB6C1 # HANGUL SYLLABLE SSANGTIKEUT-WEO-RIEULKIYEOK
-0x8CFE 0xB6C2 # HANGUL SYLLABLE SSANGTIKEUT-WEO-RIEULMIEUM
-0x8D41 0xB6C3 # HANGUL SYLLABLE SSANGTIKEUT-WEO-RIEULPIEUP
-0x8D42 0xB6C4 # HANGUL SYLLABLE SSANGTIKEUT-WEO-RIEULSIOS
-0x8D43 0xB6C5 # HANGUL SYLLABLE SSANGTIKEUT-WEO-RIEULTHIEUTH
-0x8D44 0xB6C6 # HANGUL SYLLABLE SSANGTIKEUT-WEO-RIEULPHIEUPH
-0x8D45 0xB6C7 # HANGUL SYLLABLE SSANGTIKEUT-WEO-RIEULHIEUH
-0x8D46 0xB6C8 # HANGUL SYLLABLE SSANGTIKEUT-WEO-MIEUM
-0x8D47 0xB6C9 # HANGUL SYLLABLE SSANGTIKEUT-WEO-PIEUP
-0x8D48 0xB6CA # HANGUL SYLLABLE SSANGTIKEUT-WEO-PIEUPSIOS
-0x8D49 0xB6CB # HANGUL SYLLABLE SSANGTIKEUT-WEO-SIOS
-0x8D4A 0xB6CC # HANGUL SYLLABLE SSANGTIKEUT-WEO-SSANGSIOS
-0x8D4B 0xB6CD # HANGUL SYLLABLE SSANGTIKEUT-WEO-IEUNG
-0x8D4C 0xB6CE # HANGUL SYLLABLE SSANGTIKEUT-WEO-CIEUC
-0x8D4D 0xB6CF # HANGUL SYLLABLE SSANGTIKEUT-WEO-CHIEUCH
-0x8D4E 0xB6D0 # HANGUL SYLLABLE SSANGTIKEUT-WEO-KHIEUKH
-0x8D4F 0xB6D1 # HANGUL SYLLABLE SSANGTIKEUT-WEO-THIEUTH
-0x8D50 0xB6D2 # HANGUL SYLLABLE SSANGTIKEUT-WEO-PHIEUPH
-0x8D51 0xB6D3 # HANGUL SYLLABLE SSANGTIKEUT-WEO-HIEUH
-0x8D52 0xB6D5 # HANGUL SYLLABLE SSANGTIKEUT-WE-KIYEOK
-0x8D53 0xB6D6 # HANGUL SYLLABLE SSANGTIKEUT-WE-SSANGKIYEOK
-0x8D54 0xB6D7 # HANGUL SYLLABLE SSANGTIKEUT-WE-KIYEOKSIOS
-0x8D55 0xB6D8 # HANGUL SYLLABLE SSANGTIKEUT-WE-NIEUN
-0x8D56 0xB6D9 # HANGUL SYLLABLE SSANGTIKEUT-WE-NIEUNCIEUC
-0x8D57 0xB6DA # HANGUL SYLLABLE SSANGTIKEUT-WE-NIEUNHIEUH
-0x8D58 0xB6DB # HANGUL SYLLABLE SSANGTIKEUT-WE-TIKEUT
-0x8D59 0xB6DC # HANGUL SYLLABLE SSANGTIKEUT-WE-RIEUL
-0x8D5A 0xB6DD # HANGUL SYLLABLE SSANGTIKEUT-WE-RIEULKIYEOK
-0x8D61 0xB6DE # HANGUL SYLLABLE SSANGTIKEUT-WE-RIEULMIEUM
-0x8D62 0xB6DF # HANGUL SYLLABLE SSANGTIKEUT-WE-RIEULPIEUP
-0x8D63 0xB6E0 # HANGUL SYLLABLE SSANGTIKEUT-WE-RIEULSIOS
-0x8D64 0xB6E1 # HANGUL SYLLABLE SSANGTIKEUT-WE-RIEULTHIEUTH
-0x8D65 0xB6E2 # HANGUL SYLLABLE SSANGTIKEUT-WE-RIEULPHIEUPH
-0x8D66 0xB6E3 # HANGUL SYLLABLE SSANGTIKEUT-WE-RIEULHIEUH
-0x8D67 0xB6E4 # HANGUL SYLLABLE SSANGTIKEUT-WE-MIEUM
-0x8D68 0xB6E5 # HANGUL SYLLABLE SSANGTIKEUT-WE-PIEUP
-0x8D69 0xB6E6 # HANGUL SYLLABLE SSANGTIKEUT-WE-PIEUPSIOS
-0x8D6A 0xB6E7 # HANGUL SYLLABLE SSANGTIKEUT-WE-SIOS
-0x8D6B 0xB6E8 # HANGUL SYLLABLE SSANGTIKEUT-WE-SSANGSIOS
-0x8D6C 0xB6E9 # HANGUL SYLLABLE SSANGTIKEUT-WE-IEUNG
-0x8D6D 0xB6EA # HANGUL SYLLABLE SSANGTIKEUT-WE-CIEUC
-0x8D6E 0xB6EB # HANGUL SYLLABLE SSANGTIKEUT-WE-CHIEUCH
-0x8D6F 0xB6EC # HANGUL SYLLABLE SSANGTIKEUT-WE-KHIEUKH
-0x8D70 0xB6ED # HANGUL SYLLABLE SSANGTIKEUT-WE-THIEUTH
-0x8D71 0xB6EE # HANGUL SYLLABLE SSANGTIKEUT-WE-PHIEUPH
-0x8D72 0xB6EF # HANGUL SYLLABLE SSANGTIKEUT-WE-HIEUH
-0x8D73 0xB6F1 # HANGUL SYLLABLE SSANGTIKEUT-WI-KIYEOK
-0x8D74 0xB6F2 # HANGUL SYLLABLE SSANGTIKEUT-WI-SSANGKIYEOK
-0x8D75 0xB6F3 # HANGUL SYLLABLE SSANGTIKEUT-WI-KIYEOKSIOS
-0x8D76 0xB6F5 # HANGUL SYLLABLE SSANGTIKEUT-WI-NIEUNCIEUC
-0x8D77 0xB6F6 # HANGUL SYLLABLE SSANGTIKEUT-WI-NIEUNHIEUH
-0x8D78 0xB6F7 # HANGUL SYLLABLE SSANGTIKEUT-WI-TIKEUT
-0x8D79 0xB6F9 # HANGUL SYLLABLE SSANGTIKEUT-WI-RIEULKIYEOK
-0x8D7A 0xB6FA # HANGUL SYLLABLE SSANGTIKEUT-WI-RIEULMIEUM
-0x8D81 0xB6FB # HANGUL SYLLABLE SSANGTIKEUT-WI-RIEULPIEUP
-0x8D82 0xB6FC # HANGUL SYLLABLE SSANGTIKEUT-WI-RIEULSIOS
-0x8D83 0xB6FD # HANGUL SYLLABLE SSANGTIKEUT-WI-RIEULTHIEUTH
-0x8D84 0xB6FE # HANGUL SYLLABLE SSANGTIKEUT-WI-RIEULPHIEUPH
-0x8D85 0xB6FF # HANGUL SYLLABLE SSANGTIKEUT-WI-RIEULHIEUH
-0x8D86 0xB702 # HANGUL SYLLABLE SSANGTIKEUT-WI-PIEUPSIOS
-0x8D87 0xB703 # HANGUL SYLLABLE SSANGTIKEUT-WI-SIOS
-0x8D88 0xB704 # HANGUL SYLLABLE SSANGTIKEUT-WI-SSANGSIOS
-0x8D89 0xB706 # HANGUL SYLLABLE SSANGTIKEUT-WI-CIEUC
-0x8D8A 0xB707 # HANGUL SYLLABLE SSANGTIKEUT-WI-CHIEUCH
-0x8D8B 0xB708 # HANGUL SYLLABLE SSANGTIKEUT-WI-KHIEUKH
-0x8D8C 0xB709 # HANGUL SYLLABLE SSANGTIKEUT-WI-THIEUTH
-0x8D8D 0xB70A # HANGUL SYLLABLE SSANGTIKEUT-WI-PHIEUPH
-0x8D8E 0xB70B # HANGUL SYLLABLE SSANGTIKEUT-WI-HIEUH
-0x8D8F 0xB70C # HANGUL SYLLABLE SSANGTIKEUT-YU
-0x8D90 0xB70D # HANGUL SYLLABLE SSANGTIKEUT-YU-KIYEOK
-0x8D91 0xB70E # HANGUL SYLLABLE SSANGTIKEUT-YU-SSANGKIYEOK
-0x8D92 0xB70F # HANGUL SYLLABLE SSANGTIKEUT-YU-KIYEOKSIOS
-0x8D93 0xB710 # HANGUL SYLLABLE SSANGTIKEUT-YU-NIEUN
-0x8D94 0xB711 # HANGUL SYLLABLE SSANGTIKEUT-YU-NIEUNCIEUC
-0x8D95 0xB712 # HANGUL SYLLABLE SSANGTIKEUT-YU-NIEUNHIEUH
-0x8D96 0xB713 # HANGUL SYLLABLE SSANGTIKEUT-YU-TIKEUT
-0x8D97 0xB714 # HANGUL SYLLABLE SSANGTIKEUT-YU-RIEUL
-0x8D98 0xB715 # HANGUL SYLLABLE SSANGTIKEUT-YU-RIEULKIYEOK
-0x8D99 0xB716 # HANGUL SYLLABLE SSANGTIKEUT-YU-RIEULMIEUM
-0x8D9A 0xB717 # HANGUL SYLLABLE SSANGTIKEUT-YU-RIEULPIEUP
-0x8D9B 0xB718 # HANGUL SYLLABLE SSANGTIKEUT-YU-RIEULSIOS
-0x8D9C 0xB719 # HANGUL SYLLABLE SSANGTIKEUT-YU-RIEULTHIEUTH
-0x8D9D 0xB71A # HANGUL SYLLABLE SSANGTIKEUT-YU-RIEULPHIEUPH
-0x8D9E 0xB71B # HANGUL SYLLABLE SSANGTIKEUT-YU-RIEULHIEUH
-0x8D9F 0xB71C # HANGUL SYLLABLE SSANGTIKEUT-YU-MIEUM
-0x8DA0 0xB71D # HANGUL SYLLABLE SSANGTIKEUT-YU-PIEUP
-0x8DA1 0xB71E # HANGUL SYLLABLE SSANGTIKEUT-YU-PIEUPSIOS
-0x8DA2 0xB71F # HANGUL SYLLABLE SSANGTIKEUT-YU-SIOS
-0x8DA3 0xB720 # HANGUL SYLLABLE SSANGTIKEUT-YU-SSANGSIOS
-0x8DA4 0xB721 # HANGUL SYLLABLE SSANGTIKEUT-YU-IEUNG
-0x8DA5 0xB722 # HANGUL SYLLABLE SSANGTIKEUT-YU-CIEUC
-0x8DA6 0xB723 # HANGUL SYLLABLE SSANGTIKEUT-YU-CHIEUCH
-0x8DA7 0xB724 # HANGUL SYLLABLE SSANGTIKEUT-YU-KHIEUKH
-0x8DA8 0xB725 # HANGUL SYLLABLE SSANGTIKEUT-YU-THIEUTH
-0x8DA9 0xB726 # HANGUL SYLLABLE SSANGTIKEUT-YU-PHIEUPH
-0x8DAA 0xB727 # HANGUL SYLLABLE SSANGTIKEUT-YU-HIEUH
-0x8DAB 0xB72A # HANGUL SYLLABLE SSANGTIKEUT-EU-SSANGKIYEOK
-0x8DAC 0xB72B # HANGUL SYLLABLE SSANGTIKEUT-EU-KIYEOKSIOS
-0x8DAD 0xB72D # HANGUL SYLLABLE SSANGTIKEUT-EU-NIEUNCIEUC
-0x8DAE 0xB72E # HANGUL SYLLABLE SSANGTIKEUT-EU-NIEUNHIEUH
-0x8DAF 0xB731 # HANGUL SYLLABLE SSANGTIKEUT-EU-RIEULKIYEOK
-0x8DB0 0xB732 # HANGUL SYLLABLE SSANGTIKEUT-EU-RIEULMIEUM
-0x8DB1 0xB733 # HANGUL SYLLABLE SSANGTIKEUT-EU-RIEULPIEUP
-0x8DB2 0xB734 # HANGUL SYLLABLE SSANGTIKEUT-EU-RIEULSIOS
-0x8DB3 0xB735 # HANGUL SYLLABLE SSANGTIKEUT-EU-RIEULTHIEUTH
-0x8DB4 0xB736 # HANGUL SYLLABLE SSANGTIKEUT-EU-RIEULPHIEUPH
-0x8DB5 0xB737 # HANGUL SYLLABLE SSANGTIKEUT-EU-RIEULHIEUH
-0x8DB6 0xB73A # HANGUL SYLLABLE SSANGTIKEUT-EU-PIEUPSIOS
-0x8DB7 0xB73C # HANGUL SYLLABLE SSANGTIKEUT-EU-SSANGSIOS
-0x8DB8 0xB73D # HANGUL SYLLABLE SSANGTIKEUT-EU-IEUNG
-0x8DB9 0xB73E # HANGUL SYLLABLE SSANGTIKEUT-EU-CIEUC
-0x8DBA 0xB73F # HANGUL SYLLABLE SSANGTIKEUT-EU-CHIEUCH
-0x8DBB 0xB740 # HANGUL SYLLABLE SSANGTIKEUT-EU-KHIEUKH
-0x8DBC 0xB741 # HANGUL SYLLABLE SSANGTIKEUT-EU-THIEUTH
-0x8DBD 0xB742 # HANGUL SYLLABLE SSANGTIKEUT-EU-PHIEUPH
-0x8DBE 0xB743 # HANGUL SYLLABLE SSANGTIKEUT-EU-HIEUH
-0x8DBF 0xB745 # HANGUL SYLLABLE SSANGTIKEUT-YI-KIYEOK
-0x8DC0 0xB746 # HANGUL SYLLABLE SSANGTIKEUT-YI-SSANGKIYEOK
-0x8DC1 0xB747 # HANGUL SYLLABLE SSANGTIKEUT-YI-KIYEOKSIOS
-0x8DC2 0xB749 # HANGUL SYLLABLE SSANGTIKEUT-YI-NIEUNCIEUC
-0x8DC3 0xB74A # HANGUL SYLLABLE SSANGTIKEUT-YI-NIEUNHIEUH
-0x8DC4 0xB74B # HANGUL SYLLABLE SSANGTIKEUT-YI-TIKEUT
-0x8DC5 0xB74D # HANGUL SYLLABLE SSANGTIKEUT-YI-RIEULKIYEOK
-0x8DC6 0xB74E # HANGUL SYLLABLE SSANGTIKEUT-YI-RIEULMIEUM
-0x8DC7 0xB74F # HANGUL SYLLABLE SSANGTIKEUT-YI-RIEULPIEUP
-0x8DC8 0xB750 # HANGUL SYLLABLE SSANGTIKEUT-YI-RIEULSIOS
-0x8DC9 0xB751 # HANGUL SYLLABLE SSANGTIKEUT-YI-RIEULTHIEUTH
-0x8DCA 0xB752 # HANGUL SYLLABLE SSANGTIKEUT-YI-RIEULPHIEUPH
-0x8DCB 0xB753 # HANGUL SYLLABLE SSANGTIKEUT-YI-RIEULHIEUH
-0x8DCC 0xB756 # HANGUL SYLLABLE SSANGTIKEUT-YI-PIEUPSIOS
-0x8DCD 0xB757 # HANGUL SYLLABLE SSANGTIKEUT-YI-SIOS
-0x8DCE 0xB758 # HANGUL SYLLABLE SSANGTIKEUT-YI-SSANGSIOS
-0x8DCF 0xB759 # HANGUL SYLLABLE SSANGTIKEUT-YI-IEUNG
-0x8DD0 0xB75A # HANGUL SYLLABLE SSANGTIKEUT-YI-CIEUC
-0x8DD1 0xB75B # HANGUL SYLLABLE SSANGTIKEUT-YI-CHIEUCH
-0x8DD2 0xB75C # HANGUL SYLLABLE SSANGTIKEUT-YI-KHIEUKH
-0x8DD3 0xB75D # HANGUL SYLLABLE SSANGTIKEUT-YI-THIEUTH
-0x8DD4 0xB75E # HANGUL SYLLABLE SSANGTIKEUT-YI-PHIEUPH
-0x8DD5 0xB75F # HANGUL SYLLABLE SSANGTIKEUT-YI-HIEUH
-0x8DD6 0xB761 # HANGUL SYLLABLE SSANGTIKEUT-I-KIYEOK
-0x8DD7 0xB762 # HANGUL SYLLABLE SSANGTIKEUT-I-SSANGKIYEOK
-0x8DD8 0xB763 # HANGUL SYLLABLE SSANGTIKEUT-I-KIYEOKSIOS
-0x8DD9 0xB765 # HANGUL SYLLABLE SSANGTIKEUT-I-NIEUNCIEUC
-0x8DDA 0xB766 # HANGUL SYLLABLE SSANGTIKEUT-I-NIEUNHIEUH
-0x8DDB 0xB767 # HANGUL SYLLABLE SSANGTIKEUT-I-TIKEUT
-0x8DDC 0xB769 # HANGUL SYLLABLE SSANGTIKEUT-I-RIEULKIYEOK
-0x8DDD 0xB76A # HANGUL SYLLABLE SSANGTIKEUT-I-RIEULMIEUM
-0x8DDE 0xB76B # HANGUL SYLLABLE SSANGTIKEUT-I-RIEULPIEUP
-0x8DDF 0xB76C # HANGUL SYLLABLE SSANGTIKEUT-I-RIEULSIOS
-0x8DE0 0xB76D # HANGUL SYLLABLE SSANGTIKEUT-I-RIEULTHIEUTH
-0x8DE1 0xB76E # HANGUL SYLLABLE SSANGTIKEUT-I-RIEULPHIEUPH
-0x8DE2 0xB76F # HANGUL SYLLABLE SSANGTIKEUT-I-RIEULHIEUH
-0x8DE3 0xB772 # HANGUL SYLLABLE SSANGTIKEUT-I-PIEUPSIOS
-0x8DE4 0xB774 # HANGUL SYLLABLE SSANGTIKEUT-I-SSANGSIOS
-0x8DE5 0xB776 # HANGUL SYLLABLE SSANGTIKEUT-I-CIEUC
-0x8DE6 0xB777 # HANGUL SYLLABLE SSANGTIKEUT-I-CHIEUCH
-0x8DE7 0xB778 # HANGUL SYLLABLE SSANGTIKEUT-I-KHIEUKH
-0x8DE8 0xB779 # HANGUL SYLLABLE SSANGTIKEUT-I-THIEUTH
-0x8DE9 0xB77A # HANGUL SYLLABLE SSANGTIKEUT-I-PHIEUPH
-0x8DEA 0xB77B # HANGUL SYLLABLE SSANGTIKEUT-I-HIEUH
-0x8DEB 0xB77E # HANGUL SYLLABLE RIEUL-A-SSANGKIYEOK
-0x8DEC 0xB77F # HANGUL SYLLABLE RIEUL-A-KIYEOKSIOS
-0x8DED 0xB781 # HANGUL SYLLABLE RIEUL-A-NIEUNCIEUC
-0x8DEE 0xB782 # HANGUL SYLLABLE RIEUL-A-NIEUNHIEUH
-0x8DEF 0xB783 # HANGUL SYLLABLE RIEUL-A-TIKEUT
-0x8DF0 0xB785 # HANGUL SYLLABLE RIEUL-A-RIEULKIYEOK
-0x8DF1 0xB786 # HANGUL SYLLABLE RIEUL-A-RIEULMIEUM
-0x8DF2 0xB787 # HANGUL SYLLABLE RIEUL-A-RIEULPIEUP
-0x8DF3 0xB788 # HANGUL SYLLABLE RIEUL-A-RIEULSIOS
-0x8DF4 0xB789 # HANGUL SYLLABLE RIEUL-A-RIEULTHIEUTH
-0x8DF5 0xB78A # HANGUL SYLLABLE RIEUL-A-RIEULPHIEUPH
-0x8DF6 0xB78B # HANGUL SYLLABLE RIEUL-A-RIEULHIEUH
-0x8DF7 0xB78E # HANGUL SYLLABLE RIEUL-A-PIEUPSIOS
-0x8DF8 0xB793 # HANGUL SYLLABLE RIEUL-A-CHIEUCH
-0x8DF9 0xB794 # HANGUL SYLLABLE RIEUL-A-KHIEUKH
-0x8DFA 0xB795 # HANGUL SYLLABLE RIEUL-A-THIEUTH
-0x8DFB 0xB79A # HANGUL SYLLABLE RIEUL-AE-SSANGKIYEOK
-0x8DFC 0xB79B # HANGUL SYLLABLE RIEUL-AE-KIYEOKSIOS
-0x8DFD 0xB79D # HANGUL SYLLABLE RIEUL-AE-NIEUNCIEUC
-0x8DFE 0xB79E # HANGUL SYLLABLE RIEUL-AE-NIEUNHIEUH
-0x8E41 0xB79F # HANGUL SYLLABLE RIEUL-AE-TIKEUT
-0x8E42 0xB7A1 # HANGUL SYLLABLE RIEUL-AE-RIEULKIYEOK
-0x8E43 0xB7A2 # HANGUL SYLLABLE RIEUL-AE-RIEULMIEUM
-0x8E44 0xB7A3 # HANGUL SYLLABLE RIEUL-AE-RIEULPIEUP
-0x8E45 0xB7A4 # HANGUL SYLLABLE RIEUL-AE-RIEULSIOS
-0x8E46 0xB7A5 # HANGUL SYLLABLE RIEUL-AE-RIEULTHIEUTH
-0x8E47 0xB7A6 # HANGUL SYLLABLE RIEUL-AE-RIEULPHIEUPH
-0x8E48 0xB7A7 # HANGUL SYLLABLE RIEUL-AE-RIEULHIEUH
-0x8E49 0xB7AA # HANGUL SYLLABLE RIEUL-AE-PIEUPSIOS
-0x8E4A 0xB7AE # HANGUL SYLLABLE RIEUL-AE-CIEUC
-0x8E4B 0xB7AF # HANGUL SYLLABLE RIEUL-AE-CHIEUCH
-0x8E4C 0xB7B0 # HANGUL SYLLABLE RIEUL-AE-KHIEUKH
-0x8E4D 0xB7B1 # HANGUL SYLLABLE RIEUL-AE-THIEUTH
-0x8E4E 0xB7B2 # HANGUL SYLLABLE RIEUL-AE-PHIEUPH
-0x8E4F 0xB7B3 # HANGUL SYLLABLE RIEUL-AE-HIEUH
-0x8E50 0xB7B6 # HANGUL SYLLABLE RIEUL-YA-SSANGKIYEOK
-0x8E51 0xB7B7 # HANGUL SYLLABLE RIEUL-YA-KIYEOKSIOS
-0x8E52 0xB7B9 # HANGUL SYLLABLE RIEUL-YA-NIEUNCIEUC
-0x8E53 0xB7BA # HANGUL SYLLABLE RIEUL-YA-NIEUNHIEUH
-0x8E54 0xB7BB # HANGUL SYLLABLE RIEUL-YA-TIKEUT
-0x8E55 0xB7BC # HANGUL SYLLABLE RIEUL-YA-RIEUL
-0x8E56 0xB7BD # HANGUL SYLLABLE RIEUL-YA-RIEULKIYEOK
-0x8E57 0xB7BE # HANGUL SYLLABLE RIEUL-YA-RIEULMIEUM
-0x8E58 0xB7BF # HANGUL SYLLABLE RIEUL-YA-RIEULPIEUP
-0x8E59 0xB7C0 # HANGUL SYLLABLE RIEUL-YA-RIEULSIOS
-0x8E5A 0xB7C1 # HANGUL SYLLABLE RIEUL-YA-RIEULTHIEUTH
-0x8E61 0xB7C2 # HANGUL SYLLABLE RIEUL-YA-RIEULPHIEUPH
-0x8E62 0xB7C3 # HANGUL SYLLABLE RIEUL-YA-RIEULHIEUH
-0x8E63 0xB7C4 # HANGUL SYLLABLE RIEUL-YA-MIEUM
-0x8E64 0xB7C5 # HANGUL SYLLABLE RIEUL-YA-PIEUP
-0x8E65 0xB7C6 # HANGUL SYLLABLE RIEUL-YA-PIEUPSIOS
-0x8E66 0xB7C8 # HANGUL SYLLABLE RIEUL-YA-SSANGSIOS
-0x8E67 0xB7CA # HANGUL SYLLABLE RIEUL-YA-CIEUC
-0x8E68 0xB7CB # HANGUL SYLLABLE RIEUL-YA-CHIEUCH
-0x8E69 0xB7CC # HANGUL SYLLABLE RIEUL-YA-KHIEUKH
-0x8E6A 0xB7CD # HANGUL SYLLABLE RIEUL-YA-THIEUTH
-0x8E6B 0xB7CE # HANGUL SYLLABLE RIEUL-YA-PHIEUPH
-0x8E6C 0xB7CF # HANGUL SYLLABLE RIEUL-YA-HIEUH
-0x8E6D 0xB7D0 # HANGUL SYLLABLE RIEUL-YAE
-0x8E6E 0xB7D1 # HANGUL SYLLABLE RIEUL-YAE-KIYEOK
-0x8E6F 0xB7D2 # HANGUL SYLLABLE RIEUL-YAE-SSANGKIYEOK
-0x8E70 0xB7D3 # HANGUL SYLLABLE RIEUL-YAE-KIYEOKSIOS
-0x8E71 0xB7D4 # HANGUL SYLLABLE RIEUL-YAE-NIEUN
-0x8E72 0xB7D5 # HANGUL SYLLABLE RIEUL-YAE-NIEUNCIEUC
-0x8E73 0xB7D6 # HANGUL SYLLABLE RIEUL-YAE-NIEUNHIEUH
-0x8E74 0xB7D7 # HANGUL SYLLABLE RIEUL-YAE-TIKEUT
-0x8E75 0xB7D8 # HANGUL SYLLABLE RIEUL-YAE-RIEUL
-0x8E76 0xB7D9 # HANGUL SYLLABLE RIEUL-YAE-RIEULKIYEOK
-0x8E77 0xB7DA # HANGUL SYLLABLE RIEUL-YAE-RIEULMIEUM
-0x8E78 0xB7DB # HANGUL SYLLABLE RIEUL-YAE-RIEULPIEUP
-0x8E79 0xB7DC # HANGUL SYLLABLE RIEUL-YAE-RIEULSIOS
-0x8E7A 0xB7DD # HANGUL SYLLABLE RIEUL-YAE-RIEULTHIEUTH
-0x8E81 0xB7DE # HANGUL SYLLABLE RIEUL-YAE-RIEULPHIEUPH
-0x8E82 0xB7DF # HANGUL SYLLABLE RIEUL-YAE-RIEULHIEUH
-0x8E83 0xB7E0 # HANGUL SYLLABLE RIEUL-YAE-MIEUM
-0x8E84 0xB7E1 # HANGUL SYLLABLE RIEUL-YAE-PIEUP
-0x8E85 0xB7E2 # HANGUL SYLLABLE RIEUL-YAE-PIEUPSIOS
-0x8E86 0xB7E3 # HANGUL SYLLABLE RIEUL-YAE-SIOS
-0x8E87 0xB7E4 # HANGUL SYLLABLE RIEUL-YAE-SSANGSIOS
-0x8E88 0xB7E5 # HANGUL SYLLABLE RIEUL-YAE-IEUNG
-0x8E89 0xB7E6 # HANGUL SYLLABLE RIEUL-YAE-CIEUC
-0x8E8A 0xB7E7 # HANGUL SYLLABLE RIEUL-YAE-CHIEUCH
-0x8E8B 0xB7E8 # HANGUL SYLLABLE RIEUL-YAE-KHIEUKH
-0x8E8C 0xB7E9 # HANGUL SYLLABLE RIEUL-YAE-THIEUTH
-0x8E8D 0xB7EA # HANGUL SYLLABLE RIEUL-YAE-PHIEUPH
-0x8E8E 0xB7EB # HANGUL SYLLABLE RIEUL-YAE-HIEUH
-0x8E8F 0xB7EE # HANGUL SYLLABLE RIEUL-EO-SSANGKIYEOK
-0x8E90 0xB7EF # HANGUL SYLLABLE RIEUL-EO-KIYEOKSIOS
-0x8E91 0xB7F1 # HANGUL SYLLABLE RIEUL-EO-NIEUNCIEUC
-0x8E92 0xB7F2 # HANGUL SYLLABLE RIEUL-EO-NIEUNHIEUH
-0x8E93 0xB7F3 # HANGUL SYLLABLE RIEUL-EO-TIKEUT
-0x8E94 0xB7F5 # HANGUL SYLLABLE RIEUL-EO-RIEULKIYEOK
-0x8E95 0xB7F6 # HANGUL SYLLABLE RIEUL-EO-RIEULMIEUM
-0x8E96 0xB7F7 # HANGUL SYLLABLE RIEUL-EO-RIEULPIEUP
-0x8E97 0xB7F8 # HANGUL SYLLABLE RIEUL-EO-RIEULSIOS
-0x8E98 0xB7F9 # HANGUL SYLLABLE RIEUL-EO-RIEULTHIEUTH
-0x8E99 0xB7FA # HANGUL SYLLABLE RIEUL-EO-RIEULPHIEUPH
-0x8E9A 0xB7FB # HANGUL SYLLABLE RIEUL-EO-RIEULHIEUH
-0x8E9B 0xB7FE # HANGUL SYLLABLE RIEUL-EO-PIEUPSIOS
-0x8E9C 0xB802 # HANGUL SYLLABLE RIEUL-EO-CIEUC
-0x8E9D 0xB803 # HANGUL SYLLABLE RIEUL-EO-CHIEUCH
-0x8E9E 0xB804 # HANGUL SYLLABLE RIEUL-EO-KHIEUKH
-0x8E9F 0xB805 # HANGUL SYLLABLE RIEUL-EO-THIEUTH
-0x8EA0 0xB806 # HANGUL SYLLABLE RIEUL-EO-PHIEUPH
-0x8EA1 0xB80A # HANGUL SYLLABLE RIEUL-E-SSANGKIYEOK
-0x8EA2 0xB80B # HANGUL SYLLABLE RIEUL-E-KIYEOKSIOS
-0x8EA3 0xB80D # HANGUL SYLLABLE RIEUL-E-NIEUNCIEUC
-0x8EA4 0xB80E # HANGUL SYLLABLE RIEUL-E-NIEUNHIEUH
-0x8EA5 0xB80F # HANGUL SYLLABLE RIEUL-E-TIKEUT
-0x8EA6 0xB811 # HANGUL SYLLABLE RIEUL-E-RIEULKIYEOK
-0x8EA7 0xB812 # HANGUL SYLLABLE RIEUL-E-RIEULMIEUM
-0x8EA8 0xB813 # HANGUL SYLLABLE RIEUL-E-RIEULPIEUP
-0x8EA9 0xB814 # HANGUL SYLLABLE RIEUL-E-RIEULSIOS
-0x8EAA 0xB815 # HANGUL SYLLABLE RIEUL-E-RIEULTHIEUTH
-0x8EAB 0xB816 # HANGUL SYLLABLE RIEUL-E-RIEULPHIEUPH
-0x8EAC 0xB817 # HANGUL SYLLABLE RIEUL-E-RIEULHIEUH
-0x8EAD 0xB81A # HANGUL SYLLABLE RIEUL-E-PIEUPSIOS
-0x8EAE 0xB81C # HANGUL SYLLABLE RIEUL-E-SSANGSIOS
-0x8EAF 0xB81E # HANGUL SYLLABLE RIEUL-E-CIEUC
-0x8EB0 0xB81F # HANGUL SYLLABLE RIEUL-E-CHIEUCH
-0x8EB1 0xB820 # HANGUL SYLLABLE RIEUL-E-KHIEUKH
-0x8EB2 0xB821 # HANGUL SYLLABLE RIEUL-E-THIEUTH
-0x8EB3 0xB822 # HANGUL SYLLABLE RIEUL-E-PHIEUPH
-0x8EB4 0xB823 # HANGUL SYLLABLE RIEUL-E-HIEUH
-0x8EB5 0xB826 # HANGUL SYLLABLE RIEUL-YEO-SSANGKIYEOK
-0x8EB6 0xB827 # HANGUL SYLLABLE RIEUL-YEO-KIYEOKSIOS
-0x8EB7 0xB829 # HANGUL SYLLABLE RIEUL-YEO-NIEUNCIEUC
-0x8EB8 0xB82A # HANGUL SYLLABLE RIEUL-YEO-NIEUNHIEUH
-0x8EB9 0xB82B # HANGUL SYLLABLE RIEUL-YEO-TIKEUT
-0x8EBA 0xB82D # HANGUL SYLLABLE RIEUL-YEO-RIEULKIYEOK
-0x8EBB 0xB82E # HANGUL SYLLABLE RIEUL-YEO-RIEULMIEUM
-0x8EBC 0xB82F # HANGUL SYLLABLE RIEUL-YEO-RIEULPIEUP
-0x8EBD 0xB830 # HANGUL SYLLABLE RIEUL-YEO-RIEULSIOS
-0x8EBE 0xB831 # HANGUL SYLLABLE RIEUL-YEO-RIEULTHIEUTH
-0x8EBF 0xB832 # HANGUL SYLLABLE RIEUL-YEO-RIEULPHIEUPH
-0x8EC0 0xB833 # HANGUL SYLLABLE RIEUL-YEO-RIEULHIEUH
-0x8EC1 0xB836 # HANGUL SYLLABLE RIEUL-YEO-PIEUPSIOS
-0x8EC2 0xB83A # HANGUL SYLLABLE RIEUL-YEO-CIEUC
-0x8EC3 0xB83B # HANGUL SYLLABLE RIEUL-YEO-CHIEUCH
-0x8EC4 0xB83C # HANGUL SYLLABLE RIEUL-YEO-KHIEUKH
-0x8EC5 0xB83D # HANGUL SYLLABLE RIEUL-YEO-THIEUTH
-0x8EC6 0xB83E # HANGUL SYLLABLE RIEUL-YEO-PHIEUPH
-0x8EC7 0xB83F # HANGUL SYLLABLE RIEUL-YEO-HIEUH
-0x8EC8 0xB841 # HANGUL SYLLABLE RIEUL-YE-KIYEOK
-0x8EC9 0xB842 # HANGUL SYLLABLE RIEUL-YE-SSANGKIYEOK
-0x8ECA 0xB843 # HANGUL SYLLABLE RIEUL-YE-KIYEOKSIOS
-0x8ECB 0xB845 # HANGUL SYLLABLE RIEUL-YE-NIEUNCIEUC
-0x8ECC 0xB846 # HANGUL SYLLABLE RIEUL-YE-NIEUNHIEUH
-0x8ECD 0xB847 # HANGUL SYLLABLE RIEUL-YE-TIKEUT
-0x8ECE 0xB848 # HANGUL SYLLABLE RIEUL-YE-RIEUL
-0x8ECF 0xB849 # HANGUL SYLLABLE RIEUL-YE-RIEULKIYEOK
-0x8ED0 0xB84A # HANGUL SYLLABLE RIEUL-YE-RIEULMIEUM
-0x8ED1 0xB84B # HANGUL SYLLABLE RIEUL-YE-RIEULPIEUP
-0x8ED2 0xB84C # HANGUL SYLLABLE RIEUL-YE-RIEULSIOS
-0x8ED3 0xB84D # HANGUL SYLLABLE RIEUL-YE-RIEULTHIEUTH
-0x8ED4 0xB84E # HANGUL SYLLABLE RIEUL-YE-RIEULPHIEUPH
-0x8ED5 0xB84F # HANGUL SYLLABLE RIEUL-YE-RIEULHIEUH
-0x8ED6 0xB850 # HANGUL SYLLABLE RIEUL-YE-MIEUM
-0x8ED7 0xB852 # HANGUL SYLLABLE RIEUL-YE-PIEUPSIOS
-0x8ED8 0xB854 # HANGUL SYLLABLE RIEUL-YE-SSANGSIOS
-0x8ED9 0xB855 # HANGUL SYLLABLE RIEUL-YE-IEUNG
-0x8EDA 0xB856 # HANGUL SYLLABLE RIEUL-YE-CIEUC
-0x8EDB 0xB857 # HANGUL SYLLABLE RIEUL-YE-CHIEUCH
-0x8EDC 0xB858 # HANGUL SYLLABLE RIEUL-YE-KHIEUKH
-0x8EDD 0xB859 # HANGUL SYLLABLE RIEUL-YE-THIEUTH
-0x8EDE 0xB85A # HANGUL SYLLABLE RIEUL-YE-PHIEUPH
-0x8EDF 0xB85B # HANGUL SYLLABLE RIEUL-YE-HIEUH
-0x8EE0 0xB85E # HANGUL SYLLABLE RIEUL-O-SSANGKIYEOK
-0x8EE1 0xB85F # HANGUL SYLLABLE RIEUL-O-KIYEOKSIOS
-0x8EE2 0xB861 # HANGUL SYLLABLE RIEUL-O-NIEUNCIEUC
-0x8EE3 0xB862 # HANGUL SYLLABLE RIEUL-O-NIEUNHIEUH
-0x8EE4 0xB863 # HANGUL SYLLABLE RIEUL-O-TIKEUT
-0x8EE5 0xB865 # HANGUL SYLLABLE RIEUL-O-RIEULKIYEOK
-0x8EE6 0xB866 # HANGUL SYLLABLE RIEUL-O-RIEULMIEUM
-0x8EE7 0xB867 # HANGUL SYLLABLE RIEUL-O-RIEULPIEUP
-0x8EE8 0xB868 # HANGUL SYLLABLE RIEUL-O-RIEULSIOS
-0x8EE9 0xB869 # HANGUL SYLLABLE RIEUL-O-RIEULTHIEUTH
-0x8EEA 0xB86A # HANGUL SYLLABLE RIEUL-O-RIEULPHIEUPH
-0x8EEB 0xB86B # HANGUL SYLLABLE RIEUL-O-RIEULHIEUH
-0x8EEC 0xB86E # HANGUL SYLLABLE RIEUL-O-PIEUPSIOS
-0x8EED 0xB870 # HANGUL SYLLABLE RIEUL-O-SSANGSIOS
-0x8EEE 0xB872 # HANGUL SYLLABLE RIEUL-O-CIEUC
-0x8EEF 0xB873 # HANGUL SYLLABLE RIEUL-O-CHIEUCH
-0x8EF0 0xB874 # HANGUL SYLLABLE RIEUL-O-KHIEUKH
-0x8EF1 0xB875 # HANGUL SYLLABLE RIEUL-O-THIEUTH
-0x8EF2 0xB876 # HANGUL SYLLABLE RIEUL-O-PHIEUPH
-0x8EF3 0xB877 # HANGUL SYLLABLE RIEUL-O-HIEUH
-0x8EF4 0xB879 # HANGUL SYLLABLE RIEUL-WA-KIYEOK
-0x8EF5 0xB87A # HANGUL SYLLABLE RIEUL-WA-SSANGKIYEOK
-0x8EF6 0xB87B # HANGUL SYLLABLE RIEUL-WA-KIYEOKSIOS
-0x8EF7 0xB87D # HANGUL SYLLABLE RIEUL-WA-NIEUNCIEUC
-0x8EF8 0xB87E # HANGUL SYLLABLE RIEUL-WA-NIEUNHIEUH
-0x8EF9 0xB87F # HANGUL SYLLABLE RIEUL-WA-TIKEUT
-0x8EFA 0xB880 # HANGUL SYLLABLE RIEUL-WA-RIEUL
-0x8EFB 0xB881 # HANGUL SYLLABLE RIEUL-WA-RIEULKIYEOK
-0x8EFC 0xB882 # HANGUL SYLLABLE RIEUL-WA-RIEULMIEUM
-0x8EFD 0xB883 # HANGUL SYLLABLE RIEUL-WA-RIEULPIEUP
-0x8EFE 0xB884 # HANGUL SYLLABLE RIEUL-WA-RIEULSIOS
-0x8F41 0xB885 # HANGUL SYLLABLE RIEUL-WA-RIEULTHIEUTH
-0x8F42 0xB886 # HANGUL SYLLABLE RIEUL-WA-RIEULPHIEUPH
-0x8F43 0xB887 # HANGUL SYLLABLE RIEUL-WA-RIEULHIEUH
-0x8F44 0xB888 # HANGUL SYLLABLE RIEUL-WA-MIEUM
-0x8F45 0xB889 # HANGUL SYLLABLE RIEUL-WA-PIEUP
-0x8F46 0xB88A # HANGUL SYLLABLE RIEUL-WA-PIEUPSIOS
-0x8F47 0xB88B # HANGUL SYLLABLE RIEUL-WA-SIOS
-0x8F48 0xB88C # HANGUL SYLLABLE RIEUL-WA-SSANGSIOS
-0x8F49 0xB88E # HANGUL SYLLABLE RIEUL-WA-CIEUC
-0x8F4A 0xB88F # HANGUL SYLLABLE RIEUL-WA-CHIEUCH
-0x8F4B 0xB890 # HANGUL SYLLABLE RIEUL-WA-KHIEUKH
-0x8F4C 0xB891 # HANGUL SYLLABLE RIEUL-WA-THIEUTH
-0x8F4D 0xB892 # HANGUL SYLLABLE RIEUL-WA-PHIEUPH
-0x8F4E 0xB893 # HANGUL SYLLABLE RIEUL-WA-HIEUH
-0x8F4F 0xB894 # HANGUL SYLLABLE RIEUL-WAE
-0x8F50 0xB895 # HANGUL SYLLABLE RIEUL-WAE-KIYEOK
-0x8F51 0xB896 # HANGUL SYLLABLE RIEUL-WAE-SSANGKIYEOK
-0x8F52 0xB897 # HANGUL SYLLABLE RIEUL-WAE-KIYEOKSIOS
-0x8F53 0xB898 # HANGUL SYLLABLE RIEUL-WAE-NIEUN
-0x8F54 0xB899 # HANGUL SYLLABLE RIEUL-WAE-NIEUNCIEUC
-0x8F55 0xB89A # HANGUL SYLLABLE RIEUL-WAE-NIEUNHIEUH
-0x8F56 0xB89B # HANGUL SYLLABLE RIEUL-WAE-TIKEUT
-0x8F57 0xB89C # HANGUL SYLLABLE RIEUL-WAE-RIEUL
-0x8F58 0xB89D # HANGUL SYLLABLE RIEUL-WAE-RIEULKIYEOK
-0x8F59 0xB89E # HANGUL SYLLABLE RIEUL-WAE-RIEULMIEUM
-0x8F5A 0xB89F # HANGUL SYLLABLE RIEUL-WAE-RIEULPIEUP
-0x8F61 0xB8A0 # HANGUL SYLLABLE RIEUL-WAE-RIEULSIOS
-0x8F62 0xB8A1 # HANGUL SYLLABLE RIEUL-WAE-RIEULTHIEUTH
-0x8F63 0xB8A2 # HANGUL SYLLABLE RIEUL-WAE-RIEULPHIEUPH
-0x8F64 0xB8A3 # HANGUL SYLLABLE RIEUL-WAE-RIEULHIEUH
-0x8F65 0xB8A4 # HANGUL SYLLABLE RIEUL-WAE-MIEUM
-0x8F66 0xB8A5 # HANGUL SYLLABLE RIEUL-WAE-PIEUP
-0x8F67 0xB8A6 # HANGUL SYLLABLE RIEUL-WAE-PIEUPSIOS
-0x8F68 0xB8A7 # HANGUL SYLLABLE RIEUL-WAE-SIOS
-0x8F69 0xB8A9 # HANGUL SYLLABLE RIEUL-WAE-IEUNG
-0x8F6A 0xB8AA # HANGUL SYLLABLE RIEUL-WAE-CIEUC
-0x8F6B 0xB8AB # HANGUL SYLLABLE RIEUL-WAE-CHIEUCH
-0x8F6C 0xB8AC # HANGUL SYLLABLE RIEUL-WAE-KHIEUKH
-0x8F6D 0xB8AD # HANGUL SYLLABLE RIEUL-WAE-THIEUTH
-0x8F6E 0xB8AE # HANGUL SYLLABLE RIEUL-WAE-PHIEUPH
-0x8F6F 0xB8AF # HANGUL SYLLABLE RIEUL-WAE-HIEUH
-0x8F70 0xB8B1 # HANGUL SYLLABLE RIEUL-OE-KIYEOK
-0x8F71 0xB8B2 # HANGUL SYLLABLE RIEUL-OE-SSANGKIYEOK
-0x8F72 0xB8B3 # HANGUL SYLLABLE RIEUL-OE-KIYEOKSIOS
-0x8F73 0xB8B5 # HANGUL SYLLABLE RIEUL-OE-NIEUNCIEUC
-0x8F74 0xB8B6 # HANGUL SYLLABLE RIEUL-OE-NIEUNHIEUH
-0x8F75 0xB8B7 # HANGUL SYLLABLE RIEUL-OE-TIKEUT
-0x8F76 0xB8B9 # HANGUL SYLLABLE RIEUL-OE-RIEULKIYEOK
-0x8F77 0xB8BA # HANGUL SYLLABLE RIEUL-OE-RIEULMIEUM
-0x8F78 0xB8BB # HANGUL SYLLABLE RIEUL-OE-RIEULPIEUP
-0x8F79 0xB8BC # HANGUL SYLLABLE RIEUL-OE-RIEULSIOS
-0x8F7A 0xB8BD # HANGUL SYLLABLE RIEUL-OE-RIEULTHIEUTH
-0x8F81 0xB8BE # HANGUL SYLLABLE RIEUL-OE-RIEULPHIEUPH
-0x8F82 0xB8BF # HANGUL SYLLABLE RIEUL-OE-RIEULHIEUH
-0x8F83 0xB8C2 # HANGUL SYLLABLE RIEUL-OE-PIEUPSIOS
-0x8F84 0xB8C4 # HANGUL SYLLABLE RIEUL-OE-SSANGSIOS
-0x8F85 0xB8C6 # HANGUL SYLLABLE RIEUL-OE-CIEUC
-0x8F86 0xB8C7 # HANGUL SYLLABLE RIEUL-OE-CHIEUCH
-0x8F87 0xB8C8 # HANGUL SYLLABLE RIEUL-OE-KHIEUKH
-0x8F88 0xB8C9 # HANGUL SYLLABLE RIEUL-OE-THIEUTH
-0x8F89 0xB8CA # HANGUL SYLLABLE RIEUL-OE-PHIEUPH
-0x8F8A 0xB8CB # HANGUL SYLLABLE RIEUL-OE-HIEUH
-0x8F8B 0xB8CD # HANGUL SYLLABLE RIEUL-YO-KIYEOK
-0x8F8C 0xB8CE # HANGUL SYLLABLE RIEUL-YO-SSANGKIYEOK
-0x8F8D 0xB8CF # HANGUL SYLLABLE RIEUL-YO-KIYEOKSIOS
-0x8F8E 0xB8D1 # HANGUL SYLLABLE RIEUL-YO-NIEUNCIEUC
-0x8F8F 0xB8D2 # HANGUL SYLLABLE RIEUL-YO-NIEUNHIEUH
-0x8F90 0xB8D3 # HANGUL SYLLABLE RIEUL-YO-TIKEUT
-0x8F91 0xB8D5 # HANGUL SYLLABLE RIEUL-YO-RIEULKIYEOK
-0x8F92 0xB8D6 # HANGUL SYLLABLE RIEUL-YO-RIEULMIEUM
-0x8F93 0xB8D7 # HANGUL SYLLABLE RIEUL-YO-RIEULPIEUP
-0x8F94 0xB8D8 # HANGUL SYLLABLE RIEUL-YO-RIEULSIOS
-0x8F95 0xB8D9 # HANGUL SYLLABLE RIEUL-YO-RIEULTHIEUTH
-0x8F96 0xB8DA # HANGUL SYLLABLE RIEUL-YO-RIEULPHIEUPH
-0x8F97 0xB8DB # HANGUL SYLLABLE RIEUL-YO-RIEULHIEUH
-0x8F98 0xB8DC # HANGUL SYLLABLE RIEUL-YO-MIEUM
-0x8F99 0xB8DE # HANGUL SYLLABLE RIEUL-YO-PIEUPSIOS
-0x8F9A 0xB8E0 # HANGUL SYLLABLE RIEUL-YO-SSANGSIOS
-0x8F9B 0xB8E2 # HANGUL SYLLABLE RIEUL-YO-CIEUC
-0x8F9C 0xB8E3 # HANGUL SYLLABLE RIEUL-YO-CHIEUCH
-0x8F9D 0xB8E4 # HANGUL SYLLABLE RIEUL-YO-KHIEUKH
-0x8F9E 0xB8E5 # HANGUL SYLLABLE RIEUL-YO-THIEUTH
-0x8F9F 0xB8E6 # HANGUL SYLLABLE RIEUL-YO-PHIEUPH
-0x8FA0 0xB8E7 # HANGUL SYLLABLE RIEUL-YO-HIEUH
-0x8FA1 0xB8EA # HANGUL SYLLABLE RIEUL-U-SSANGKIYEOK
-0x8FA2 0xB8EB # HANGUL SYLLABLE RIEUL-U-KIYEOKSIOS
-0x8FA3 0xB8ED # HANGUL SYLLABLE RIEUL-U-NIEUNCIEUC
-0x8FA4 0xB8EE # HANGUL SYLLABLE RIEUL-U-NIEUNHIEUH
-0x8FA5 0xB8EF # HANGUL SYLLABLE RIEUL-U-TIKEUT
-0x8FA6 0xB8F1 # HANGUL SYLLABLE RIEUL-U-RIEULKIYEOK
-0x8FA7 0xB8F2 # HANGUL SYLLABLE RIEUL-U-RIEULMIEUM
-0x8FA8 0xB8F3 # HANGUL SYLLABLE RIEUL-U-RIEULPIEUP
-0x8FA9 0xB8F4 # HANGUL SYLLABLE RIEUL-U-RIEULSIOS
-0x8FAA 0xB8F5 # HANGUL SYLLABLE RIEUL-U-RIEULTHIEUTH
-0x8FAB 0xB8F6 # HANGUL SYLLABLE RIEUL-U-RIEULPHIEUPH
-0x8FAC 0xB8F7 # HANGUL SYLLABLE RIEUL-U-RIEULHIEUH
-0x8FAD 0xB8FA # HANGUL SYLLABLE RIEUL-U-PIEUPSIOS
-0x8FAE 0xB8FC # HANGUL SYLLABLE RIEUL-U-SSANGSIOS
-0x8FAF 0xB8FE # HANGUL SYLLABLE RIEUL-U-CIEUC
-0x8FB0 0xB8FF # HANGUL SYLLABLE RIEUL-U-CHIEUCH
-0x8FB1 0xB900 # HANGUL SYLLABLE RIEUL-U-KHIEUKH
-0x8FB2 0xB901 # HANGUL SYLLABLE RIEUL-U-THIEUTH
-0x8FB3 0xB902 # HANGUL SYLLABLE RIEUL-U-PHIEUPH
-0x8FB4 0xB903 # HANGUL SYLLABLE RIEUL-U-HIEUH
-0x8FB5 0xB905 # HANGUL SYLLABLE RIEUL-WEO-KIYEOK
-0x8FB6 0xB906 # HANGUL SYLLABLE RIEUL-WEO-SSANGKIYEOK
-0x8FB7 0xB907 # HANGUL SYLLABLE RIEUL-WEO-KIYEOKSIOS
-0x8FB8 0xB908 # HANGUL SYLLABLE RIEUL-WEO-NIEUN
-0x8FB9 0xB909 # HANGUL SYLLABLE RIEUL-WEO-NIEUNCIEUC
-0x8FBA 0xB90A # HANGUL SYLLABLE RIEUL-WEO-NIEUNHIEUH
-0x8FBB 0xB90B # HANGUL SYLLABLE RIEUL-WEO-TIKEUT
-0x8FBC 0xB90C # HANGUL SYLLABLE RIEUL-WEO-RIEUL
-0x8FBD 0xB90D # HANGUL SYLLABLE RIEUL-WEO-RIEULKIYEOK
-0x8FBE 0xB90E # HANGUL SYLLABLE RIEUL-WEO-RIEULMIEUM
-0x8FBF 0xB90F # HANGUL SYLLABLE RIEUL-WEO-RIEULPIEUP
-0x8FC0 0xB910 # HANGUL SYLLABLE RIEUL-WEO-RIEULSIOS
-0x8FC1 0xB911 # HANGUL SYLLABLE RIEUL-WEO-RIEULTHIEUTH
-0x8FC2 0xB912 # HANGUL SYLLABLE RIEUL-WEO-RIEULPHIEUPH
-0x8FC3 0xB913 # HANGUL SYLLABLE RIEUL-WEO-RIEULHIEUH
-0x8FC4 0xB914 # HANGUL SYLLABLE RIEUL-WEO-MIEUM
-0x8FC5 0xB915 # HANGUL SYLLABLE RIEUL-WEO-PIEUP
-0x8FC6 0xB916 # HANGUL SYLLABLE RIEUL-WEO-PIEUPSIOS
-0x8FC7 0xB917 # HANGUL SYLLABLE RIEUL-WEO-SIOS
-0x8FC8 0xB919 # HANGUL SYLLABLE RIEUL-WEO-IEUNG
-0x8FC9 0xB91A # HANGUL SYLLABLE RIEUL-WEO-CIEUC
-0x8FCA 0xB91B # HANGUL SYLLABLE RIEUL-WEO-CHIEUCH
-0x8FCB 0xB91C # HANGUL SYLLABLE RIEUL-WEO-KHIEUKH
-0x8FCC 0xB91D # HANGUL SYLLABLE RIEUL-WEO-THIEUTH
-0x8FCD 0xB91E # HANGUL SYLLABLE RIEUL-WEO-PHIEUPH
-0x8FCE 0xB91F # HANGUL SYLLABLE RIEUL-WEO-HIEUH
-0x8FCF 0xB921 # HANGUL SYLLABLE RIEUL-WE-KIYEOK
-0x8FD0 0xB922 # HANGUL SYLLABLE RIEUL-WE-SSANGKIYEOK
-0x8FD1 0xB923 # HANGUL SYLLABLE RIEUL-WE-KIYEOKSIOS
-0x8FD2 0xB924 # HANGUL SYLLABLE RIEUL-WE-NIEUN
-0x8FD3 0xB925 # HANGUL SYLLABLE RIEUL-WE-NIEUNCIEUC
-0x8FD4 0xB926 # HANGUL SYLLABLE RIEUL-WE-NIEUNHIEUH
-0x8FD5 0xB927 # HANGUL SYLLABLE RIEUL-WE-TIKEUT
-0x8FD6 0xB928 # HANGUL SYLLABLE RIEUL-WE-RIEUL
-0x8FD7 0xB929 # HANGUL SYLLABLE RIEUL-WE-RIEULKIYEOK
-0x8FD8 0xB92A # HANGUL SYLLABLE RIEUL-WE-RIEULMIEUM
-0x8FD9 0xB92B # HANGUL SYLLABLE RIEUL-WE-RIEULPIEUP
-0x8FDA 0xB92C # HANGUL SYLLABLE RIEUL-WE-RIEULSIOS
-0x8FDB 0xB92D # HANGUL SYLLABLE RIEUL-WE-RIEULTHIEUTH
-0x8FDC 0xB92E # HANGUL SYLLABLE RIEUL-WE-RIEULPHIEUPH
-0x8FDD 0xB92F # HANGUL SYLLABLE RIEUL-WE-RIEULHIEUH
-0x8FDE 0xB930 # HANGUL SYLLABLE RIEUL-WE-MIEUM
-0x8FDF 0xB931 # HANGUL SYLLABLE RIEUL-WE-PIEUP
-0x8FE0 0xB932 # HANGUL SYLLABLE RIEUL-WE-PIEUPSIOS
-0x8FE1 0xB933 # HANGUL SYLLABLE RIEUL-WE-SIOS
-0x8FE2 0xB934 # HANGUL SYLLABLE RIEUL-WE-SSANGSIOS
-0x8FE3 0xB935 # HANGUL SYLLABLE RIEUL-WE-IEUNG
-0x8FE4 0xB936 # HANGUL SYLLABLE RIEUL-WE-CIEUC
-0x8FE5 0xB937 # HANGUL SYLLABLE RIEUL-WE-CHIEUCH
-0x8FE6 0xB938 # HANGUL SYLLABLE RIEUL-WE-KHIEUKH
-0x8FE7 0xB939 # HANGUL SYLLABLE RIEUL-WE-THIEUTH
-0x8FE8 0xB93A # HANGUL SYLLABLE RIEUL-WE-PHIEUPH
-0x8FE9 0xB93B # HANGUL SYLLABLE RIEUL-WE-HIEUH
-0x8FEA 0xB93E # HANGUL SYLLABLE RIEUL-WI-SSANGKIYEOK
-0x8FEB 0xB93F # HANGUL SYLLABLE RIEUL-WI-KIYEOKSIOS
-0x8FEC 0xB941 # HANGUL SYLLABLE RIEUL-WI-NIEUNCIEUC
-0x8FED 0xB942 # HANGUL SYLLABLE RIEUL-WI-NIEUNHIEUH
-0x8FEE 0xB943 # HANGUL SYLLABLE RIEUL-WI-TIKEUT
-0x8FEF 0xB945 # HANGUL SYLLABLE RIEUL-WI-RIEULKIYEOK
-0x8FF0 0xB946 # HANGUL SYLLABLE RIEUL-WI-RIEULMIEUM
-0x8FF1 0xB947 # HANGUL SYLLABLE RIEUL-WI-RIEULPIEUP
-0x8FF2 0xB948 # HANGUL SYLLABLE RIEUL-WI-RIEULSIOS
-0x8FF3 0xB949 # HANGUL SYLLABLE RIEUL-WI-RIEULTHIEUTH
-0x8FF4 0xB94A # HANGUL SYLLABLE RIEUL-WI-RIEULPHIEUPH
-0x8FF5 0xB94B # HANGUL SYLLABLE RIEUL-WI-RIEULHIEUH
-0x8FF6 0xB94D # HANGUL SYLLABLE RIEUL-WI-PIEUP
-0x8FF7 0xB94E # HANGUL SYLLABLE RIEUL-WI-PIEUPSIOS
-0x8FF8 0xB950 # HANGUL SYLLABLE RIEUL-WI-SSANGSIOS
-0x8FF9 0xB952 # HANGUL SYLLABLE RIEUL-WI-CIEUC
-0x8FFA 0xB953 # HANGUL SYLLABLE RIEUL-WI-CHIEUCH
-0x8FFB 0xB954 # HANGUL SYLLABLE RIEUL-WI-KHIEUKH
-0x8FFC 0xB955 # HANGUL SYLLABLE RIEUL-WI-THIEUTH
-0x8FFD 0xB956 # HANGUL SYLLABLE RIEUL-WI-PHIEUPH
-0x8FFE 0xB957 # HANGUL SYLLABLE RIEUL-WI-HIEUH
-0x9041 0xB95A # HANGUL SYLLABLE RIEUL-YU-SSANGKIYEOK
-0x9042 0xB95B # HANGUL SYLLABLE RIEUL-YU-KIYEOKSIOS
-0x9043 0xB95D # HANGUL SYLLABLE RIEUL-YU-NIEUNCIEUC
-0x9044 0xB95E # HANGUL SYLLABLE RIEUL-YU-NIEUNHIEUH
-0x9045 0xB95F # HANGUL SYLLABLE RIEUL-YU-TIKEUT
-0x9046 0xB961 # HANGUL SYLLABLE RIEUL-YU-RIEULKIYEOK
-0x9047 0xB962 # HANGUL SYLLABLE RIEUL-YU-RIEULMIEUM
-0x9048 0xB963 # HANGUL SYLLABLE RIEUL-YU-RIEULPIEUP
-0x9049 0xB964 # HANGUL SYLLABLE RIEUL-YU-RIEULSIOS
-0x904A 0xB965 # HANGUL SYLLABLE RIEUL-YU-RIEULTHIEUTH
-0x904B 0xB966 # HANGUL SYLLABLE RIEUL-YU-RIEULPHIEUPH
-0x904C 0xB967 # HANGUL SYLLABLE RIEUL-YU-RIEULHIEUH
-0x904D 0xB96A # HANGUL SYLLABLE RIEUL-YU-PIEUPSIOS
-0x904E 0xB96C # HANGUL SYLLABLE RIEUL-YU-SSANGSIOS
-0x904F 0xB96E # HANGUL SYLLABLE RIEUL-YU-CIEUC
-0x9050 0xB96F # HANGUL SYLLABLE RIEUL-YU-CHIEUCH
-0x9051 0xB970 # HANGUL SYLLABLE RIEUL-YU-KHIEUKH
-0x9052 0xB971 # HANGUL SYLLABLE RIEUL-YU-THIEUTH
-0x9053 0xB972 # HANGUL SYLLABLE RIEUL-YU-PHIEUPH
-0x9054 0xB973 # HANGUL SYLLABLE RIEUL-YU-HIEUH
-0x9055 0xB976 # HANGUL SYLLABLE RIEUL-EU-SSANGKIYEOK
-0x9056 0xB977 # HANGUL SYLLABLE RIEUL-EU-KIYEOKSIOS
-0x9057 0xB979 # HANGUL SYLLABLE RIEUL-EU-NIEUNCIEUC
-0x9058 0xB97A # HANGUL SYLLABLE RIEUL-EU-NIEUNHIEUH
-0x9059 0xB97B # HANGUL SYLLABLE RIEUL-EU-TIKEUT
-0x905A 0xB97D # HANGUL SYLLABLE RIEUL-EU-RIEULKIYEOK
-0x9061 0xB97E # HANGUL SYLLABLE RIEUL-EU-RIEULMIEUM
-0x9062 0xB97F # HANGUL SYLLABLE RIEUL-EU-RIEULPIEUP
-0x9063 0xB980 # HANGUL SYLLABLE RIEUL-EU-RIEULSIOS
-0x9064 0xB981 # HANGUL SYLLABLE RIEUL-EU-RIEULTHIEUTH
-0x9065 0xB982 # HANGUL SYLLABLE RIEUL-EU-RIEULPHIEUPH
-0x9066 0xB983 # HANGUL SYLLABLE RIEUL-EU-RIEULHIEUH
-0x9067 0xB986 # HANGUL SYLLABLE RIEUL-EU-PIEUPSIOS
-0x9068 0xB988 # HANGUL SYLLABLE RIEUL-EU-SSANGSIOS
-0x9069 0xB98B # HANGUL SYLLABLE RIEUL-EU-CHIEUCH
-0x906A 0xB98C # HANGUL SYLLABLE RIEUL-EU-KHIEUKH
-0x906B 0xB98F # HANGUL SYLLABLE RIEUL-EU-HIEUH
-0x906C 0xB990 # HANGUL SYLLABLE RIEUL-YI
-0x906D 0xB991 # HANGUL SYLLABLE RIEUL-YI-KIYEOK
-0x906E 0xB992 # HANGUL SYLLABLE RIEUL-YI-SSANGKIYEOK
-0x906F 0xB993 # HANGUL SYLLABLE RIEUL-YI-KIYEOKSIOS
-0x9070 0xB994 # HANGUL SYLLABLE RIEUL-YI-NIEUN
-0x9071 0xB995 # HANGUL SYLLABLE RIEUL-YI-NIEUNCIEUC
-0x9072 0xB996 # HANGUL SYLLABLE RIEUL-YI-NIEUNHIEUH
-0x9073 0xB997 # HANGUL SYLLABLE RIEUL-YI-TIKEUT
-0x9074 0xB998 # HANGUL SYLLABLE RIEUL-YI-RIEUL
-0x9075 0xB999 # HANGUL SYLLABLE RIEUL-YI-RIEULKIYEOK
-0x9076 0xB99A # HANGUL SYLLABLE RIEUL-YI-RIEULMIEUM
-0x9077 0xB99B # HANGUL SYLLABLE RIEUL-YI-RIEULPIEUP
-0x9078 0xB99C # HANGUL SYLLABLE RIEUL-YI-RIEULSIOS
-0x9079 0xB99D # HANGUL SYLLABLE RIEUL-YI-RIEULTHIEUTH
-0x907A 0xB99E # HANGUL SYLLABLE RIEUL-YI-RIEULPHIEUPH
-0x9081 0xB99F # HANGUL SYLLABLE RIEUL-YI-RIEULHIEUH
-0x9082 0xB9A0 # HANGUL SYLLABLE RIEUL-YI-MIEUM
-0x9083 0xB9A1 # HANGUL SYLLABLE RIEUL-YI-PIEUP
-0x9084 0xB9A2 # HANGUL SYLLABLE RIEUL-YI-PIEUPSIOS
-0x9085 0xB9A3 # HANGUL SYLLABLE RIEUL-YI-SIOS
-0x9086 0xB9A4 # HANGUL SYLLABLE RIEUL-YI-SSANGSIOS
-0x9087 0xB9A5 # HANGUL SYLLABLE RIEUL-YI-IEUNG
-0x9088 0xB9A6 # HANGUL SYLLABLE RIEUL-YI-CIEUC
-0x9089 0xB9A7 # HANGUL SYLLABLE RIEUL-YI-CHIEUCH
-0x908A 0xB9A8 # HANGUL SYLLABLE RIEUL-YI-KHIEUKH
-0x908B 0xB9A9 # HANGUL SYLLABLE RIEUL-YI-THIEUTH
-0x908C 0xB9AA # HANGUL SYLLABLE RIEUL-YI-PHIEUPH
-0x908D 0xB9AB # HANGUL SYLLABLE RIEUL-YI-HIEUH
-0x908E 0xB9AE # HANGUL SYLLABLE RIEUL-I-SSANGKIYEOK
-0x908F 0xB9AF # HANGUL SYLLABLE RIEUL-I-KIYEOKSIOS
-0x9090 0xB9B1 # HANGUL SYLLABLE RIEUL-I-NIEUNCIEUC
-0x9091 0xB9B2 # HANGUL SYLLABLE RIEUL-I-NIEUNHIEUH
-0x9092 0xB9B3 # HANGUL SYLLABLE RIEUL-I-TIKEUT
-0x9093 0xB9B5 # HANGUL SYLLABLE RIEUL-I-RIEULKIYEOK
-0x9094 0xB9B6 # HANGUL SYLLABLE RIEUL-I-RIEULMIEUM
-0x9095 0xB9B7 # HANGUL SYLLABLE RIEUL-I-RIEULPIEUP
-0x9096 0xB9B8 # HANGUL SYLLABLE RIEUL-I-RIEULSIOS
-0x9097 0xB9B9 # HANGUL SYLLABLE RIEUL-I-RIEULTHIEUTH
-0x9098 0xB9BA # HANGUL SYLLABLE RIEUL-I-RIEULPHIEUPH
-0x9099 0xB9BB # HANGUL SYLLABLE RIEUL-I-RIEULHIEUH
-0x909A 0xB9BE # HANGUL SYLLABLE RIEUL-I-PIEUPSIOS
-0x909B 0xB9C0 # HANGUL SYLLABLE RIEUL-I-SSANGSIOS
-0x909C 0xB9C2 # HANGUL SYLLABLE RIEUL-I-CIEUC
-0x909D 0xB9C3 # HANGUL SYLLABLE RIEUL-I-CHIEUCH
-0x909E 0xB9C4 # HANGUL SYLLABLE RIEUL-I-KHIEUKH
-0x909F 0xB9C5 # HANGUL SYLLABLE RIEUL-I-THIEUTH
-0x90A0 0xB9C6 # HANGUL SYLLABLE RIEUL-I-PHIEUPH
-0x90A1 0xB9C7 # HANGUL SYLLABLE RIEUL-I-HIEUH
-0x90A2 0xB9CA # HANGUL SYLLABLE MIEUM-A-SSANGKIYEOK
-0x90A3 0xB9CB # HANGUL SYLLABLE MIEUM-A-KIYEOKSIOS
-0x90A4 0xB9CD # HANGUL SYLLABLE MIEUM-A-NIEUNCIEUC
-0x90A5 0xB9D3 # HANGUL SYLLABLE MIEUM-A-RIEULPIEUP
-0x90A6 0xB9D4 # HANGUL SYLLABLE MIEUM-A-RIEULSIOS
-0x90A7 0xB9D5 # HANGUL SYLLABLE MIEUM-A-RIEULTHIEUTH
-0x90A8 0xB9D6 # HANGUL SYLLABLE MIEUM-A-RIEULPHIEUPH
-0x90A9 0xB9D7 # HANGUL SYLLABLE MIEUM-A-RIEULHIEUH
-0x90AA 0xB9DA # HANGUL SYLLABLE MIEUM-A-PIEUPSIOS
-0x90AB 0xB9DC # HANGUL SYLLABLE MIEUM-A-SSANGSIOS
-0x90AC 0xB9DF # HANGUL SYLLABLE MIEUM-A-CHIEUCH
-0x90AD 0xB9E0 # HANGUL SYLLABLE MIEUM-A-KHIEUKH
-0x90AE 0xB9E2 # HANGUL SYLLABLE MIEUM-A-PHIEUPH
-0x90AF 0xB9E6 # HANGUL SYLLABLE MIEUM-AE-SSANGKIYEOK
-0x90B0 0xB9E7 # HANGUL SYLLABLE MIEUM-AE-KIYEOKSIOS
-0x90B1 0xB9E9 # HANGUL SYLLABLE MIEUM-AE-NIEUNCIEUC
-0x90B2 0xB9EA # HANGUL SYLLABLE MIEUM-AE-NIEUNHIEUH
-0x90B3 0xB9EB # HANGUL SYLLABLE MIEUM-AE-TIKEUT
-0x90B4 0xB9ED # HANGUL SYLLABLE MIEUM-AE-RIEULKIYEOK
-0x90B5 0xB9EE # HANGUL SYLLABLE MIEUM-AE-RIEULMIEUM
-0x90B6 0xB9EF # HANGUL SYLLABLE MIEUM-AE-RIEULPIEUP
-0x90B7 0xB9F0 # HANGUL SYLLABLE MIEUM-AE-RIEULSIOS
-0x90B8 0xB9F1 # HANGUL SYLLABLE MIEUM-AE-RIEULTHIEUTH
-0x90B9 0xB9F2 # HANGUL SYLLABLE MIEUM-AE-RIEULPHIEUPH
-0x90BA 0xB9F3 # HANGUL SYLLABLE MIEUM-AE-RIEULHIEUH
-0x90BB 0xB9F6 # HANGUL SYLLABLE MIEUM-AE-PIEUPSIOS
-0x90BC 0xB9FB # HANGUL SYLLABLE MIEUM-AE-CHIEUCH
-0x90BD 0xB9FC # HANGUL SYLLABLE MIEUM-AE-KHIEUKH
-0x90BE 0xB9FD # HANGUL SYLLABLE MIEUM-AE-THIEUTH
-0x90BF 0xB9FE # HANGUL SYLLABLE MIEUM-AE-PHIEUPH
-0x90C0 0xB9FF # HANGUL SYLLABLE MIEUM-AE-HIEUH
-0x90C1 0xBA02 # HANGUL SYLLABLE MIEUM-YA-SSANGKIYEOK
-0x90C2 0xBA03 # HANGUL SYLLABLE MIEUM-YA-KIYEOKSIOS
-0x90C3 0xBA04 # HANGUL SYLLABLE MIEUM-YA-NIEUN
-0x90C4 0xBA05 # HANGUL SYLLABLE MIEUM-YA-NIEUNCIEUC
-0x90C5 0xBA06 # HANGUL SYLLABLE MIEUM-YA-NIEUNHIEUH
-0x90C6 0xBA07 # HANGUL SYLLABLE MIEUM-YA-TIKEUT
-0x90C7 0xBA09 # HANGUL SYLLABLE MIEUM-YA-RIEULKIYEOK
-0x90C8 0xBA0A # HANGUL SYLLABLE MIEUM-YA-RIEULMIEUM
-0x90C9 0xBA0B # HANGUL SYLLABLE MIEUM-YA-RIEULPIEUP
-0x90CA 0xBA0C # HANGUL SYLLABLE MIEUM-YA-RIEULSIOS
-0x90CB 0xBA0D # HANGUL SYLLABLE MIEUM-YA-RIEULTHIEUTH
-0x90CC 0xBA0E # HANGUL SYLLABLE MIEUM-YA-RIEULPHIEUPH
-0x90CD 0xBA0F # HANGUL SYLLABLE MIEUM-YA-RIEULHIEUH
-0x90CE 0xBA10 # HANGUL SYLLABLE MIEUM-YA-MIEUM
-0x90CF 0xBA11 # HANGUL SYLLABLE MIEUM-YA-PIEUP
-0x90D0 0xBA12 # HANGUL SYLLABLE MIEUM-YA-PIEUPSIOS
-0x90D1 0xBA13 # HANGUL SYLLABLE MIEUM-YA-SIOS
-0x90D2 0xBA14 # HANGUL SYLLABLE MIEUM-YA-SSANGSIOS
-0x90D3 0xBA16 # HANGUL SYLLABLE MIEUM-YA-CIEUC
-0x90D4 0xBA17 # HANGUL SYLLABLE MIEUM-YA-CHIEUCH
-0x90D5 0xBA18 # HANGUL SYLLABLE MIEUM-YA-KHIEUKH
-0x90D6 0xBA19 # HANGUL SYLLABLE MIEUM-YA-THIEUTH
-0x90D7 0xBA1A # HANGUL SYLLABLE MIEUM-YA-PHIEUPH
-0x90D8 0xBA1B # HANGUL SYLLABLE MIEUM-YA-HIEUH
-0x90D9 0xBA1C # HANGUL SYLLABLE MIEUM-YAE
-0x90DA 0xBA1D # HANGUL SYLLABLE MIEUM-YAE-KIYEOK
-0x90DB 0xBA1E # HANGUL SYLLABLE MIEUM-YAE-SSANGKIYEOK
-0x90DC 0xBA1F # HANGUL SYLLABLE MIEUM-YAE-KIYEOKSIOS
-0x90DD 0xBA20 # HANGUL SYLLABLE MIEUM-YAE-NIEUN
-0x90DE 0xBA21 # HANGUL SYLLABLE MIEUM-YAE-NIEUNCIEUC
-0x90DF 0xBA22 # HANGUL SYLLABLE MIEUM-YAE-NIEUNHIEUH
-0x90E0 0xBA23 # HANGUL SYLLABLE MIEUM-YAE-TIKEUT
-0x90E1 0xBA24 # HANGUL SYLLABLE MIEUM-YAE-RIEUL
-0x90E2 0xBA25 # HANGUL SYLLABLE MIEUM-YAE-RIEULKIYEOK
-0x90E3 0xBA26 # HANGUL SYLLABLE MIEUM-YAE-RIEULMIEUM
-0x90E4 0xBA27 # HANGUL SYLLABLE MIEUM-YAE-RIEULPIEUP
-0x90E5 0xBA28 # HANGUL SYLLABLE MIEUM-YAE-RIEULSIOS
-0x90E6 0xBA29 # HANGUL SYLLABLE MIEUM-YAE-RIEULTHIEUTH
-0x90E7 0xBA2A # HANGUL SYLLABLE MIEUM-YAE-RIEULPHIEUPH
-0x90E8 0xBA2B # HANGUL SYLLABLE MIEUM-YAE-RIEULHIEUH
-0x90E9 0xBA2C # HANGUL SYLLABLE MIEUM-YAE-MIEUM
-0x90EA 0xBA2D # HANGUL SYLLABLE MIEUM-YAE-PIEUP
-0x90EB 0xBA2E # HANGUL SYLLABLE MIEUM-YAE-PIEUPSIOS
-0x90EC 0xBA2F # HANGUL SYLLABLE MIEUM-YAE-SIOS
-0x90ED 0xBA30 # HANGUL SYLLABLE MIEUM-YAE-SSANGSIOS
-0x90EE 0xBA31 # HANGUL SYLLABLE MIEUM-YAE-IEUNG
-0x90EF 0xBA32 # HANGUL SYLLABLE MIEUM-YAE-CIEUC
-0x90F0 0xBA33 # HANGUL SYLLABLE MIEUM-YAE-CHIEUCH
-0x90F1 0xBA34 # HANGUL SYLLABLE MIEUM-YAE-KHIEUKH
-0x90F2 0xBA35 # HANGUL SYLLABLE MIEUM-YAE-THIEUTH
-0x90F3 0xBA36 # HANGUL SYLLABLE MIEUM-YAE-PHIEUPH
-0x90F4 0xBA37 # HANGUL SYLLABLE MIEUM-YAE-HIEUH
-0x90F5 0xBA3A # HANGUL SYLLABLE MIEUM-EO-SSANGKIYEOK
-0x90F6 0xBA3B # HANGUL SYLLABLE MIEUM-EO-KIYEOKSIOS
-0x90F7 0xBA3D # HANGUL SYLLABLE MIEUM-EO-NIEUNCIEUC
-0x90F8 0xBA3E # HANGUL SYLLABLE MIEUM-EO-NIEUNHIEUH
-0x90F9 0xBA3F # HANGUL SYLLABLE MIEUM-EO-TIKEUT
-0x90FA 0xBA41 # HANGUL SYLLABLE MIEUM-EO-RIEULKIYEOK
-0x90FB 0xBA43 # HANGUL SYLLABLE MIEUM-EO-RIEULPIEUP
-0x90FC 0xBA44 # HANGUL SYLLABLE MIEUM-EO-RIEULSIOS
-0x90FD 0xBA45 # HANGUL SYLLABLE MIEUM-EO-RIEULTHIEUTH
-0x90FE 0xBA46 # HANGUL SYLLABLE MIEUM-EO-RIEULPHIEUPH
-0x9141 0xBA47 # HANGUL SYLLABLE MIEUM-EO-RIEULHIEUH
-0x9142 0xBA4A # HANGUL SYLLABLE MIEUM-EO-PIEUPSIOS
-0x9143 0xBA4C # HANGUL SYLLABLE MIEUM-EO-SSANGSIOS
-0x9144 0xBA4F # HANGUL SYLLABLE MIEUM-EO-CHIEUCH
-0x9145 0xBA50 # HANGUL SYLLABLE MIEUM-EO-KHIEUKH
-0x9146 0xBA51 # HANGUL SYLLABLE MIEUM-EO-THIEUTH
-0x9147 0xBA52 # HANGUL SYLLABLE MIEUM-EO-PHIEUPH
-0x9148 0xBA56 # HANGUL SYLLABLE MIEUM-E-SSANGKIYEOK
-0x9149 0xBA57 # HANGUL SYLLABLE MIEUM-E-KIYEOKSIOS
-0x914A 0xBA59 # HANGUL SYLLABLE MIEUM-E-NIEUNCIEUC
-0x914B 0xBA5A # HANGUL SYLLABLE MIEUM-E-NIEUNHIEUH
-0x914C 0xBA5B # HANGUL SYLLABLE MIEUM-E-TIKEUT
-0x914D 0xBA5D # HANGUL SYLLABLE MIEUM-E-RIEULKIYEOK
-0x914E 0xBA5E # HANGUL SYLLABLE MIEUM-E-RIEULMIEUM
-0x914F 0xBA5F # HANGUL SYLLABLE MIEUM-E-RIEULPIEUP
-0x9150 0xBA60 # HANGUL SYLLABLE MIEUM-E-RIEULSIOS
-0x9151 0xBA61 # HANGUL SYLLABLE MIEUM-E-RIEULTHIEUTH
-0x9152 0xBA62 # HANGUL SYLLABLE MIEUM-E-RIEULPHIEUPH
-0x9153 0xBA63 # HANGUL SYLLABLE MIEUM-E-RIEULHIEUH
-0x9154 0xBA66 # HANGUL SYLLABLE MIEUM-E-PIEUPSIOS
-0x9155 0xBA6A # HANGUL SYLLABLE MIEUM-E-CIEUC
-0x9156 0xBA6B # HANGUL SYLLABLE MIEUM-E-CHIEUCH
-0x9157 0xBA6C # HANGUL SYLLABLE MIEUM-E-KHIEUKH
-0x9158 0xBA6D # HANGUL SYLLABLE MIEUM-E-THIEUTH
-0x9159 0xBA6E # HANGUL SYLLABLE MIEUM-E-PHIEUPH
-0x915A 0xBA6F # HANGUL SYLLABLE MIEUM-E-HIEUH
-0x9161 0xBA72 # HANGUL SYLLABLE MIEUM-YEO-SSANGKIYEOK
-0x9162 0xBA73 # HANGUL SYLLABLE MIEUM-YEO-KIYEOKSIOS
-0x9163 0xBA75 # HANGUL SYLLABLE MIEUM-YEO-NIEUNCIEUC
-0x9164 0xBA76 # HANGUL SYLLABLE MIEUM-YEO-NIEUNHIEUH
-0x9165 0xBA77 # HANGUL SYLLABLE MIEUM-YEO-TIKEUT
-0x9166 0xBA79 # HANGUL SYLLABLE MIEUM-YEO-RIEULKIYEOK
-0x9167 0xBA7A # HANGUL SYLLABLE MIEUM-YEO-RIEULMIEUM
-0x9168 0xBA7B # HANGUL SYLLABLE MIEUM-YEO-RIEULPIEUP
-0x9169 0xBA7C # HANGUL SYLLABLE MIEUM-YEO-RIEULSIOS
-0x916A 0xBA7D # HANGUL SYLLABLE MIEUM-YEO-RIEULTHIEUTH
-0x916B 0xBA7E # HANGUL SYLLABLE MIEUM-YEO-RIEULPHIEUPH
-0x916C 0xBA7F # HANGUL SYLLABLE MIEUM-YEO-RIEULHIEUH
-0x916D 0xBA80 # HANGUL SYLLABLE MIEUM-YEO-MIEUM
-0x916E 0xBA81 # HANGUL SYLLABLE MIEUM-YEO-PIEUP
-0x916F 0xBA82 # HANGUL SYLLABLE MIEUM-YEO-PIEUPSIOS
-0x9170 0xBA86 # HANGUL SYLLABLE MIEUM-YEO-CIEUC
-0x9171 0xBA88 # HANGUL SYLLABLE MIEUM-YEO-KHIEUKH
-0x9172 0xBA89 # HANGUL SYLLABLE MIEUM-YEO-THIEUTH
-0x9173 0xBA8A # HANGUL SYLLABLE MIEUM-YEO-PHIEUPH
-0x9174 0xBA8B # HANGUL SYLLABLE MIEUM-YEO-HIEUH
-0x9175 0xBA8D # HANGUL SYLLABLE MIEUM-YE-KIYEOK
-0x9176 0xBA8E # HANGUL SYLLABLE MIEUM-YE-SSANGKIYEOK
-0x9177 0xBA8F # HANGUL SYLLABLE MIEUM-YE-KIYEOKSIOS
-0x9178 0xBA90 # HANGUL SYLLABLE MIEUM-YE-NIEUN
-0x9179 0xBA91 # HANGUL SYLLABLE MIEUM-YE-NIEUNCIEUC
-0x917A 0xBA92 # HANGUL SYLLABLE MIEUM-YE-NIEUNHIEUH
-0x9181 0xBA93 # HANGUL SYLLABLE MIEUM-YE-TIKEUT
-0x9182 0xBA94 # HANGUL SYLLABLE MIEUM-YE-RIEUL
-0x9183 0xBA95 # HANGUL SYLLABLE MIEUM-YE-RIEULKIYEOK
-0x9184 0xBA96 # HANGUL SYLLABLE MIEUM-YE-RIEULMIEUM
-0x9185 0xBA97 # HANGUL SYLLABLE MIEUM-YE-RIEULPIEUP
-0x9186 0xBA98 # HANGUL SYLLABLE MIEUM-YE-RIEULSIOS
-0x9187 0xBA99 # HANGUL SYLLABLE MIEUM-YE-RIEULTHIEUTH
-0x9188 0xBA9A # HANGUL SYLLABLE MIEUM-YE-RIEULPHIEUPH
-0x9189 0xBA9B # HANGUL SYLLABLE MIEUM-YE-RIEULHIEUH
-0x918A 0xBA9C # HANGUL SYLLABLE MIEUM-YE-MIEUM
-0x918B 0xBA9D # HANGUL SYLLABLE MIEUM-YE-PIEUP
-0x918C 0xBA9E # HANGUL SYLLABLE MIEUM-YE-PIEUPSIOS
-0x918D 0xBA9F # HANGUL SYLLABLE MIEUM-YE-SIOS
-0x918E 0xBAA0 # HANGUL SYLLABLE MIEUM-YE-SSANGSIOS
-0x918F 0xBAA1 # HANGUL SYLLABLE MIEUM-YE-IEUNG
-0x9190 0xBAA2 # HANGUL SYLLABLE MIEUM-YE-CIEUC
-0x9191 0xBAA3 # HANGUL SYLLABLE MIEUM-YE-CHIEUCH
-0x9192 0xBAA4 # HANGUL SYLLABLE MIEUM-YE-KHIEUKH
-0x9193 0xBAA5 # HANGUL SYLLABLE MIEUM-YE-THIEUTH
-0x9194 0xBAA6 # HANGUL SYLLABLE MIEUM-YE-PHIEUPH
-0x9195 0xBAA7 # HANGUL SYLLABLE MIEUM-YE-HIEUH
-0x9196 0xBAAA # HANGUL SYLLABLE MIEUM-O-SSANGKIYEOK
-0x9197 0xBAAD # HANGUL SYLLABLE MIEUM-O-NIEUNCIEUC
-0x9198 0xBAAE # HANGUL SYLLABLE MIEUM-O-NIEUNHIEUH
-0x9199 0xBAAF # HANGUL SYLLABLE MIEUM-O-TIKEUT
-0x919A 0xBAB1 # HANGUL SYLLABLE MIEUM-O-RIEULKIYEOK
-0x919B 0xBAB3 # HANGUL SYLLABLE MIEUM-O-RIEULPIEUP
-0x919C 0xBAB4 # HANGUL SYLLABLE MIEUM-O-RIEULSIOS
-0x919D 0xBAB5 # HANGUL SYLLABLE MIEUM-O-RIEULTHIEUTH
-0x919E 0xBAB6 # HANGUL SYLLABLE MIEUM-O-RIEULPHIEUPH
-0x919F 0xBAB7 # HANGUL SYLLABLE MIEUM-O-RIEULHIEUH
-0x91A0 0xBABA # HANGUL SYLLABLE MIEUM-O-PIEUPSIOS
-0x91A1 0xBABC # HANGUL SYLLABLE MIEUM-O-SSANGSIOS
-0x91A2 0xBABE # HANGUL SYLLABLE MIEUM-O-CIEUC
-0x91A3 0xBABF # HANGUL SYLLABLE MIEUM-O-CHIEUCH
-0x91A4 0xBAC0 # HANGUL SYLLABLE MIEUM-O-KHIEUKH
-0x91A5 0xBAC1 # HANGUL SYLLABLE MIEUM-O-THIEUTH
-0x91A6 0xBAC2 # HANGUL SYLLABLE MIEUM-O-PHIEUPH
-0x91A7 0xBAC3 # HANGUL SYLLABLE MIEUM-O-HIEUH
-0x91A8 0xBAC5 # HANGUL SYLLABLE MIEUM-WA-KIYEOK
-0x91A9 0xBAC6 # HANGUL SYLLABLE MIEUM-WA-SSANGKIYEOK
-0x91AA 0xBAC7 # HANGUL SYLLABLE MIEUM-WA-KIYEOKSIOS
-0x91AB 0xBAC9 # HANGUL SYLLABLE MIEUM-WA-NIEUNCIEUC
-0x91AC 0xBACA # HANGUL SYLLABLE MIEUM-WA-NIEUNHIEUH
-0x91AD 0xBACB # HANGUL SYLLABLE MIEUM-WA-TIKEUT
-0x91AE 0xBACC # HANGUL SYLLABLE MIEUM-WA-RIEUL
-0x91AF 0xBACD # HANGUL SYLLABLE MIEUM-WA-RIEULKIYEOK
-0x91B0 0xBACE # HANGUL SYLLABLE MIEUM-WA-RIEULMIEUM
-0x91B1 0xBACF # HANGUL SYLLABLE MIEUM-WA-RIEULPIEUP
-0x91B2 0xBAD0 # HANGUL SYLLABLE MIEUM-WA-RIEULSIOS
-0x91B3 0xBAD1 # HANGUL SYLLABLE MIEUM-WA-RIEULTHIEUTH
-0x91B4 0xBAD2 # HANGUL SYLLABLE MIEUM-WA-RIEULPHIEUPH
-0x91B5 0xBAD3 # HANGUL SYLLABLE MIEUM-WA-RIEULHIEUH
-0x91B6 0xBAD4 # HANGUL SYLLABLE MIEUM-WA-MIEUM
-0x91B7 0xBAD5 # HANGUL SYLLABLE MIEUM-WA-PIEUP
-0x91B8 0xBAD6 # HANGUL SYLLABLE MIEUM-WA-PIEUPSIOS
-0x91B9 0xBAD7 # HANGUL SYLLABLE MIEUM-WA-SIOS
-0x91BA 0xBADA # HANGUL SYLLABLE MIEUM-WA-CIEUC
-0x91BB 0xBADB # HANGUL SYLLABLE MIEUM-WA-CHIEUCH
-0x91BC 0xBADC # HANGUL SYLLABLE MIEUM-WA-KHIEUKH
-0x91BD 0xBADD # HANGUL SYLLABLE MIEUM-WA-THIEUTH
-0x91BE 0xBADE # HANGUL SYLLABLE MIEUM-WA-PHIEUPH
-0x91BF 0xBADF # HANGUL SYLLABLE MIEUM-WA-HIEUH
-0x91C0 0xBAE0 # HANGUL SYLLABLE MIEUM-WAE
-0x91C1 0xBAE1 # HANGUL SYLLABLE MIEUM-WAE-KIYEOK
-0x91C2 0xBAE2 # HANGUL SYLLABLE MIEUM-WAE-SSANGKIYEOK
-0x91C3 0xBAE3 # HANGUL SYLLABLE MIEUM-WAE-KIYEOKSIOS
-0x91C4 0xBAE4 # HANGUL SYLLABLE MIEUM-WAE-NIEUN
-0x91C5 0xBAE5 # HANGUL SYLLABLE MIEUM-WAE-NIEUNCIEUC
-0x91C6 0xBAE6 # HANGUL SYLLABLE MIEUM-WAE-NIEUNHIEUH
-0x91C7 0xBAE7 # HANGUL SYLLABLE MIEUM-WAE-TIKEUT
-0x91C8 0xBAE8 # HANGUL SYLLABLE MIEUM-WAE-RIEUL
-0x91C9 0xBAE9 # HANGUL SYLLABLE MIEUM-WAE-RIEULKIYEOK
-0x91CA 0xBAEA # HANGUL SYLLABLE MIEUM-WAE-RIEULMIEUM
-0x91CB 0xBAEB # HANGUL SYLLABLE MIEUM-WAE-RIEULPIEUP
-0x91CC 0xBAEC # HANGUL SYLLABLE MIEUM-WAE-RIEULSIOS
-0x91CD 0xBAED # HANGUL SYLLABLE MIEUM-WAE-RIEULTHIEUTH
-0x91CE 0xBAEE # HANGUL SYLLABLE MIEUM-WAE-RIEULPHIEUPH
-0x91CF 0xBAEF # HANGUL SYLLABLE MIEUM-WAE-RIEULHIEUH
-0x91D0 0xBAF0 # HANGUL SYLLABLE MIEUM-WAE-MIEUM
-0x91D1 0xBAF1 # HANGUL SYLLABLE MIEUM-WAE-PIEUP
-0x91D2 0xBAF2 # HANGUL SYLLABLE MIEUM-WAE-PIEUPSIOS
-0x91D3 0xBAF3 # HANGUL SYLLABLE MIEUM-WAE-SIOS
-0x91D4 0xBAF4 # HANGUL SYLLABLE MIEUM-WAE-SSANGSIOS
-0x91D5 0xBAF5 # HANGUL SYLLABLE MIEUM-WAE-IEUNG
-0x91D6 0xBAF6 # HANGUL SYLLABLE MIEUM-WAE-CIEUC
-0x91D7 0xBAF7 # HANGUL SYLLABLE MIEUM-WAE-CHIEUCH
-0x91D8 0xBAF8 # HANGUL SYLLABLE MIEUM-WAE-KHIEUKH
-0x91D9 0xBAF9 # HANGUL SYLLABLE MIEUM-WAE-THIEUTH
-0x91DA 0xBAFA # HANGUL SYLLABLE MIEUM-WAE-PHIEUPH
-0x91DB 0xBAFB # HANGUL SYLLABLE MIEUM-WAE-HIEUH
-0x91DC 0xBAFD # HANGUL SYLLABLE MIEUM-OE-KIYEOK
-0x91DD 0xBAFE # HANGUL SYLLABLE MIEUM-OE-SSANGKIYEOK
-0x91DE 0xBAFF # HANGUL SYLLABLE MIEUM-OE-KIYEOKSIOS
-0x91DF 0xBB01 # HANGUL SYLLABLE MIEUM-OE-NIEUNCIEUC
-0x91E0 0xBB02 # HANGUL SYLLABLE MIEUM-OE-NIEUNHIEUH
-0x91E1 0xBB03 # HANGUL SYLLABLE MIEUM-OE-TIKEUT
-0x91E2 0xBB05 # HANGUL SYLLABLE MIEUM-OE-RIEULKIYEOK
-0x91E3 0xBB06 # HANGUL SYLLABLE MIEUM-OE-RIEULMIEUM
-0x91E4 0xBB07 # HANGUL SYLLABLE MIEUM-OE-RIEULPIEUP
-0x91E5 0xBB08 # HANGUL SYLLABLE MIEUM-OE-RIEULSIOS
-0x91E6 0xBB09 # HANGUL SYLLABLE MIEUM-OE-RIEULTHIEUTH
-0x91E7 0xBB0A # HANGUL SYLLABLE MIEUM-OE-RIEULPHIEUPH
-0x91E8 0xBB0B # HANGUL SYLLABLE MIEUM-OE-RIEULHIEUH
-0x91E9 0xBB0C # HANGUL SYLLABLE MIEUM-OE-MIEUM
-0x91EA 0xBB0E # HANGUL SYLLABLE MIEUM-OE-PIEUPSIOS
-0x91EB 0xBB10 # HANGUL SYLLABLE MIEUM-OE-SSANGSIOS
-0x91EC 0xBB12 # HANGUL SYLLABLE MIEUM-OE-CIEUC
-0x91ED 0xBB13 # HANGUL SYLLABLE MIEUM-OE-CHIEUCH
-0x91EE 0xBB14 # HANGUL SYLLABLE MIEUM-OE-KHIEUKH
-0x91EF 0xBB15 # HANGUL SYLLABLE MIEUM-OE-THIEUTH
-0x91F0 0xBB16 # HANGUL SYLLABLE MIEUM-OE-PHIEUPH
-0x91F1 0xBB17 # HANGUL SYLLABLE MIEUM-OE-HIEUH
-0x91F2 0xBB19 # HANGUL SYLLABLE MIEUM-YO-KIYEOK
-0x91F3 0xBB1A # HANGUL SYLLABLE MIEUM-YO-SSANGKIYEOK
-0x91F4 0xBB1B # HANGUL SYLLABLE MIEUM-YO-KIYEOKSIOS
-0x91F5 0xBB1D # HANGUL SYLLABLE MIEUM-YO-NIEUNCIEUC
-0x91F6 0xBB1E # HANGUL SYLLABLE MIEUM-YO-NIEUNHIEUH
-0x91F7 0xBB1F # HANGUL SYLLABLE MIEUM-YO-TIKEUT
-0x91F8 0xBB21 # HANGUL SYLLABLE MIEUM-YO-RIEULKIYEOK
-0x91F9 0xBB22 # HANGUL SYLLABLE MIEUM-YO-RIEULMIEUM
-0x91FA 0xBB23 # HANGUL SYLLABLE MIEUM-YO-RIEULPIEUP
-0x91FB 0xBB24 # HANGUL SYLLABLE MIEUM-YO-RIEULSIOS
-0x91FC 0xBB25 # HANGUL SYLLABLE MIEUM-YO-RIEULTHIEUTH
-0x91FD 0xBB26 # HANGUL SYLLABLE MIEUM-YO-RIEULPHIEUPH
-0x91FE 0xBB27 # HANGUL SYLLABLE MIEUM-YO-RIEULHIEUH
-0x9241 0xBB28 # HANGUL SYLLABLE MIEUM-YO-MIEUM
-0x9242 0xBB2A # HANGUL SYLLABLE MIEUM-YO-PIEUPSIOS
-0x9243 0xBB2C # HANGUL SYLLABLE MIEUM-YO-SSANGSIOS
-0x9244 0xBB2D # HANGUL SYLLABLE MIEUM-YO-IEUNG
-0x9245 0xBB2E # HANGUL SYLLABLE MIEUM-YO-CIEUC
-0x9246 0xBB2F # HANGUL SYLLABLE MIEUM-YO-CHIEUCH
-0x9247 0xBB30 # HANGUL SYLLABLE MIEUM-YO-KHIEUKH
-0x9248 0xBB31 # HANGUL SYLLABLE MIEUM-YO-THIEUTH
-0x9249 0xBB32 # HANGUL SYLLABLE MIEUM-YO-PHIEUPH
-0x924A 0xBB33 # HANGUL SYLLABLE MIEUM-YO-HIEUH
-0x924B 0xBB37 # HANGUL SYLLABLE MIEUM-U-KIYEOKSIOS
-0x924C 0xBB39 # HANGUL SYLLABLE MIEUM-U-NIEUNCIEUC
-0x924D 0xBB3A # HANGUL SYLLABLE MIEUM-U-NIEUNHIEUH
-0x924E 0xBB3F # HANGUL SYLLABLE MIEUM-U-RIEULPIEUP
-0x924F 0xBB40 # HANGUL SYLLABLE MIEUM-U-RIEULSIOS
-0x9250 0xBB41 # HANGUL SYLLABLE MIEUM-U-RIEULTHIEUTH
-0x9251 0xBB42 # HANGUL SYLLABLE MIEUM-U-RIEULPHIEUPH
-0x9252 0xBB43 # HANGUL SYLLABLE MIEUM-U-RIEULHIEUH
-0x9253 0xBB46 # HANGUL SYLLABLE MIEUM-U-PIEUPSIOS
-0x9254 0xBB48 # HANGUL SYLLABLE MIEUM-U-SSANGSIOS
-0x9255 0xBB4A # HANGUL SYLLABLE MIEUM-U-CIEUC
-0x9256 0xBB4B # HANGUL SYLLABLE MIEUM-U-CHIEUCH
-0x9257 0xBB4C # HANGUL SYLLABLE MIEUM-U-KHIEUKH
-0x9258 0xBB4E # HANGUL SYLLABLE MIEUM-U-PHIEUPH
-0x9259 0xBB51 # HANGUL SYLLABLE MIEUM-WEO-KIYEOK
-0x925A 0xBB52 # HANGUL SYLLABLE MIEUM-WEO-SSANGKIYEOK
-0x9261 0xBB53 # HANGUL SYLLABLE MIEUM-WEO-KIYEOKSIOS
-0x9262 0xBB55 # HANGUL SYLLABLE MIEUM-WEO-NIEUNCIEUC
-0x9263 0xBB56 # HANGUL SYLLABLE MIEUM-WEO-NIEUNHIEUH
-0x9264 0xBB57 # HANGUL SYLLABLE MIEUM-WEO-TIKEUT
-0x9265 0xBB59 # HANGUL SYLLABLE MIEUM-WEO-RIEULKIYEOK
-0x9266 0xBB5A # HANGUL SYLLABLE MIEUM-WEO-RIEULMIEUM
-0x9267 0xBB5B # HANGUL SYLLABLE MIEUM-WEO-RIEULPIEUP
-0x9268 0xBB5C # HANGUL SYLLABLE MIEUM-WEO-RIEULSIOS
-0x9269 0xBB5D # HANGUL SYLLABLE MIEUM-WEO-RIEULTHIEUTH
-0x926A 0xBB5E # HANGUL SYLLABLE MIEUM-WEO-RIEULPHIEUPH
-0x926B 0xBB5F # HANGUL SYLLABLE MIEUM-WEO-RIEULHIEUH
-0x926C 0xBB60 # HANGUL SYLLABLE MIEUM-WEO-MIEUM
-0x926D 0xBB62 # HANGUL SYLLABLE MIEUM-WEO-PIEUPSIOS
-0x926E 0xBB64 # HANGUL SYLLABLE MIEUM-WEO-SSANGSIOS
-0x926F 0xBB65 # HANGUL SYLLABLE MIEUM-WEO-IEUNG
-0x9270 0xBB66 # HANGUL SYLLABLE MIEUM-WEO-CIEUC
-0x9271 0xBB67 # HANGUL SYLLABLE MIEUM-WEO-CHIEUCH
-0x9272 0xBB68 # HANGUL SYLLABLE MIEUM-WEO-KHIEUKH
-0x9273 0xBB69 # HANGUL SYLLABLE MIEUM-WEO-THIEUTH
-0x9274 0xBB6A # HANGUL SYLLABLE MIEUM-WEO-PHIEUPH
-0x9275 0xBB6B # HANGUL SYLLABLE MIEUM-WEO-HIEUH
-0x9276 0xBB6D # HANGUL SYLLABLE MIEUM-WE-KIYEOK
-0x9277 0xBB6E # HANGUL SYLLABLE MIEUM-WE-SSANGKIYEOK
-0x9278 0xBB6F # HANGUL SYLLABLE MIEUM-WE-KIYEOKSIOS
-0x9279 0xBB70 # HANGUL SYLLABLE MIEUM-WE-NIEUN
-0x927A 0xBB71 # HANGUL SYLLABLE MIEUM-WE-NIEUNCIEUC
-0x9281 0xBB72 # HANGUL SYLLABLE MIEUM-WE-NIEUNHIEUH
-0x9282 0xBB73 # HANGUL SYLLABLE MIEUM-WE-TIKEUT
-0x9283 0xBB74 # HANGUL SYLLABLE MIEUM-WE-RIEUL
-0x9284 0xBB75 # HANGUL SYLLABLE MIEUM-WE-RIEULKIYEOK
-0x9285 0xBB76 # HANGUL SYLLABLE MIEUM-WE-RIEULMIEUM
-0x9286 0xBB77 # HANGUL SYLLABLE MIEUM-WE-RIEULPIEUP
-0x9287 0xBB78 # HANGUL SYLLABLE MIEUM-WE-RIEULSIOS
-0x9288 0xBB79 # HANGUL SYLLABLE MIEUM-WE-RIEULTHIEUTH
-0x9289 0xBB7A # HANGUL SYLLABLE MIEUM-WE-RIEULPHIEUPH
-0x928A 0xBB7B # HANGUL SYLLABLE MIEUM-WE-RIEULHIEUH
-0x928B 0xBB7C # HANGUL SYLLABLE MIEUM-WE-MIEUM
-0x928C 0xBB7D # HANGUL SYLLABLE MIEUM-WE-PIEUP
-0x928D 0xBB7E # HANGUL SYLLABLE MIEUM-WE-PIEUPSIOS
-0x928E 0xBB7F # HANGUL SYLLABLE MIEUM-WE-SIOS
-0x928F 0xBB80 # HANGUL SYLLABLE MIEUM-WE-SSANGSIOS
-0x9290 0xBB81 # HANGUL SYLLABLE MIEUM-WE-IEUNG
-0x9291 0xBB82 # HANGUL SYLLABLE MIEUM-WE-CIEUC
-0x9292 0xBB83 # HANGUL SYLLABLE MIEUM-WE-CHIEUCH
-0x9293 0xBB84 # HANGUL SYLLABLE MIEUM-WE-KHIEUKH
-0x9294 0xBB85 # HANGUL SYLLABLE MIEUM-WE-THIEUTH
-0x9295 0xBB86 # HANGUL SYLLABLE MIEUM-WE-PHIEUPH
-0x9296 0xBB87 # HANGUL SYLLABLE MIEUM-WE-HIEUH
-0x9297 0xBB89 # HANGUL SYLLABLE MIEUM-WI-KIYEOK
-0x9298 0xBB8A # HANGUL SYLLABLE MIEUM-WI-SSANGKIYEOK
-0x9299 0xBB8B # HANGUL SYLLABLE MIEUM-WI-KIYEOKSIOS
-0x929A 0xBB8D # HANGUL SYLLABLE MIEUM-WI-NIEUNCIEUC
-0x929B 0xBB8E # HANGUL SYLLABLE MIEUM-WI-NIEUNHIEUH
-0x929C 0xBB8F # HANGUL SYLLABLE MIEUM-WI-TIKEUT
-0x929D 0xBB91 # HANGUL SYLLABLE MIEUM-WI-RIEULKIYEOK
-0x929E 0xBB92 # HANGUL SYLLABLE MIEUM-WI-RIEULMIEUM
-0x929F 0xBB93 # HANGUL SYLLABLE MIEUM-WI-RIEULPIEUP
-0x92A0 0xBB94 # HANGUL SYLLABLE MIEUM-WI-RIEULSIOS
-0x92A1 0xBB95 # HANGUL SYLLABLE MIEUM-WI-RIEULTHIEUTH
-0x92A2 0xBB96 # HANGUL SYLLABLE MIEUM-WI-RIEULPHIEUPH
-0x92A3 0xBB97 # HANGUL SYLLABLE MIEUM-WI-RIEULHIEUH
-0x92A4 0xBB98 # HANGUL SYLLABLE MIEUM-WI-MIEUM
-0x92A5 0xBB99 # HANGUL SYLLABLE MIEUM-WI-PIEUP
-0x92A6 0xBB9A # HANGUL SYLLABLE MIEUM-WI-PIEUPSIOS
-0x92A7 0xBB9B # HANGUL SYLLABLE MIEUM-WI-SIOS
-0x92A8 0xBB9C # HANGUL SYLLABLE MIEUM-WI-SSANGSIOS
-0x92A9 0xBB9D # HANGUL SYLLABLE MIEUM-WI-IEUNG
-0x92AA 0xBB9E # HANGUL SYLLABLE MIEUM-WI-CIEUC
-0x92AB 0xBB9F # HANGUL SYLLABLE MIEUM-WI-CHIEUCH
-0x92AC 0xBBA0 # HANGUL SYLLABLE MIEUM-WI-KHIEUKH
-0x92AD 0xBBA1 # HANGUL SYLLABLE MIEUM-WI-THIEUTH
-0x92AE 0xBBA2 # HANGUL SYLLABLE MIEUM-WI-PHIEUPH
-0x92AF 0xBBA3 # HANGUL SYLLABLE MIEUM-WI-HIEUH
-0x92B0 0xBBA5 # HANGUL SYLLABLE MIEUM-YU-KIYEOK
-0x92B1 0xBBA6 # HANGUL SYLLABLE MIEUM-YU-SSANGKIYEOK
-0x92B2 0xBBA7 # HANGUL SYLLABLE MIEUM-YU-KIYEOKSIOS
-0x92B3 0xBBA9 # HANGUL SYLLABLE MIEUM-YU-NIEUNCIEUC
-0x92B4 0xBBAA # HANGUL SYLLABLE MIEUM-YU-NIEUNHIEUH
-0x92B5 0xBBAB # HANGUL SYLLABLE MIEUM-YU-TIKEUT
-0x92B6 0xBBAD # HANGUL SYLLABLE MIEUM-YU-RIEULKIYEOK
-0x92B7 0xBBAE # HANGUL SYLLABLE MIEUM-YU-RIEULMIEUM
-0x92B8 0xBBAF # HANGUL SYLLABLE MIEUM-YU-RIEULPIEUP
-0x92B9 0xBBB0 # HANGUL SYLLABLE MIEUM-YU-RIEULSIOS
-0x92BA 0xBBB1 # HANGUL SYLLABLE MIEUM-YU-RIEULTHIEUTH
-0x92BB 0xBBB2 # HANGUL SYLLABLE MIEUM-YU-RIEULPHIEUPH
-0x92BC 0xBBB3 # HANGUL SYLLABLE MIEUM-YU-RIEULHIEUH
-0x92BD 0xBBB5 # HANGUL SYLLABLE MIEUM-YU-PIEUP
-0x92BE 0xBBB6 # HANGUL SYLLABLE MIEUM-YU-PIEUPSIOS
-0x92BF 0xBBB8 # HANGUL SYLLABLE MIEUM-YU-SSANGSIOS
-0x92C0 0xBBB9 # HANGUL SYLLABLE MIEUM-YU-IEUNG
-0x92C1 0xBBBA # HANGUL SYLLABLE MIEUM-YU-CIEUC
-0x92C2 0xBBBB # HANGUL SYLLABLE MIEUM-YU-CHIEUCH
-0x92C3 0xBBBC # HANGUL SYLLABLE MIEUM-YU-KHIEUKH
-0x92C4 0xBBBD # HANGUL SYLLABLE MIEUM-YU-THIEUTH
-0x92C5 0xBBBE # HANGUL SYLLABLE MIEUM-YU-PHIEUPH
-0x92C6 0xBBBF # HANGUL SYLLABLE MIEUM-YU-HIEUH
-0x92C7 0xBBC1 # HANGUL SYLLABLE MIEUM-EU-KIYEOK
-0x92C8 0xBBC2 # HANGUL SYLLABLE MIEUM-EU-SSANGKIYEOK
-0x92C9 0xBBC3 # HANGUL SYLLABLE MIEUM-EU-KIYEOKSIOS
-0x92CA 0xBBC5 # HANGUL SYLLABLE MIEUM-EU-NIEUNCIEUC
-0x92CB 0xBBC6 # HANGUL SYLLABLE MIEUM-EU-NIEUNHIEUH
-0x92CC 0xBBC7 # HANGUL SYLLABLE MIEUM-EU-TIKEUT
-0x92CD 0xBBC9 # HANGUL SYLLABLE MIEUM-EU-RIEULKIYEOK
-0x92CE 0xBBCA # HANGUL SYLLABLE MIEUM-EU-RIEULMIEUM
-0x92CF 0xBBCB # HANGUL SYLLABLE MIEUM-EU-RIEULPIEUP
-0x92D0 0xBBCC # HANGUL SYLLABLE MIEUM-EU-RIEULSIOS
-0x92D1 0xBBCD # HANGUL SYLLABLE MIEUM-EU-RIEULTHIEUTH
-0x92D2 0xBBCE # HANGUL SYLLABLE MIEUM-EU-RIEULPHIEUPH
-0x92D3 0xBBCF # HANGUL SYLLABLE MIEUM-EU-RIEULHIEUH
-0x92D4 0xBBD1 # HANGUL SYLLABLE MIEUM-EU-PIEUP
-0x92D5 0xBBD2 # HANGUL SYLLABLE MIEUM-EU-PIEUPSIOS
-0x92D6 0xBBD4 # HANGUL SYLLABLE MIEUM-EU-SSANGSIOS
-0x92D7 0xBBD5 # HANGUL SYLLABLE MIEUM-EU-IEUNG
-0x92D8 0xBBD6 # HANGUL SYLLABLE MIEUM-EU-CIEUC
-0x92D9 0xBBD7 # HANGUL SYLLABLE MIEUM-EU-CHIEUCH
-0x92DA 0xBBD8 # HANGUL SYLLABLE MIEUM-EU-KHIEUKH
-0x92DB 0xBBD9 # HANGUL SYLLABLE MIEUM-EU-THIEUTH
-0x92DC 0xBBDA # HANGUL SYLLABLE MIEUM-EU-PHIEUPH
-0x92DD 0xBBDB # HANGUL SYLLABLE MIEUM-EU-HIEUH
-0x92DE 0xBBDC # HANGUL SYLLABLE MIEUM-YI
-0x92DF 0xBBDD # HANGUL SYLLABLE MIEUM-YI-KIYEOK
-0x92E0 0xBBDE # HANGUL SYLLABLE MIEUM-YI-SSANGKIYEOK
-0x92E1 0xBBDF # HANGUL SYLLABLE MIEUM-YI-KIYEOKSIOS
-0x92E2 0xBBE0 # HANGUL SYLLABLE MIEUM-YI-NIEUN
-0x92E3 0xBBE1 # HANGUL SYLLABLE MIEUM-YI-NIEUNCIEUC
-0x92E4 0xBBE2 # HANGUL SYLLABLE MIEUM-YI-NIEUNHIEUH
-0x92E5 0xBBE3 # HANGUL SYLLABLE MIEUM-YI-TIKEUT
-0x92E6 0xBBE4 # HANGUL SYLLABLE MIEUM-YI-RIEUL
-0x92E7 0xBBE5 # HANGUL SYLLABLE MIEUM-YI-RIEULKIYEOK
-0x92E8 0xBBE6 # HANGUL SYLLABLE MIEUM-YI-RIEULMIEUM
-0x92E9 0xBBE7 # HANGUL SYLLABLE MIEUM-YI-RIEULPIEUP
-0x92EA 0xBBE8 # HANGUL SYLLABLE MIEUM-YI-RIEULSIOS
-0x92EB 0xBBE9 # HANGUL SYLLABLE MIEUM-YI-RIEULTHIEUTH
-0x92EC 0xBBEA # HANGUL SYLLABLE MIEUM-YI-RIEULPHIEUPH
-0x92ED 0xBBEB # HANGUL SYLLABLE MIEUM-YI-RIEULHIEUH
-0x92EE 0xBBEC # HANGUL SYLLABLE MIEUM-YI-MIEUM
-0x92EF 0xBBED # HANGUL SYLLABLE MIEUM-YI-PIEUP
-0x92F0 0xBBEE # HANGUL SYLLABLE MIEUM-YI-PIEUPSIOS
-0x92F1 0xBBEF # HANGUL SYLLABLE MIEUM-YI-SIOS
-0x92F2 0xBBF0 # HANGUL SYLLABLE MIEUM-YI-SSANGSIOS
-0x92F3 0xBBF1 # HANGUL SYLLABLE MIEUM-YI-IEUNG
-0x92F4 0xBBF2 # HANGUL SYLLABLE MIEUM-YI-CIEUC
-0x92F5 0xBBF3 # HANGUL SYLLABLE MIEUM-YI-CHIEUCH
-0x92F6 0xBBF4 # HANGUL SYLLABLE MIEUM-YI-KHIEUKH
-0x92F7 0xBBF5 # HANGUL SYLLABLE MIEUM-YI-THIEUTH
-0x92F8 0xBBF6 # HANGUL SYLLABLE MIEUM-YI-PHIEUPH
-0x92F9 0xBBF7 # HANGUL SYLLABLE MIEUM-YI-HIEUH
-0x92FA 0xBBFA # HANGUL SYLLABLE MIEUM-I-SSANGKIYEOK
-0x92FB 0xBBFB # HANGUL SYLLABLE MIEUM-I-KIYEOKSIOS
-0x92FC 0xBBFD # HANGUL SYLLABLE MIEUM-I-NIEUNCIEUC
-0x92FD 0xBBFE # HANGUL SYLLABLE MIEUM-I-NIEUNHIEUH
-0x92FE 0xBC01 # HANGUL SYLLABLE MIEUM-I-RIEULKIYEOK
-0x9341 0xBC03 # HANGUL SYLLABLE MIEUM-I-RIEULPIEUP
-0x9342 0xBC04 # HANGUL SYLLABLE MIEUM-I-RIEULSIOS
-0x9343 0xBC05 # HANGUL SYLLABLE MIEUM-I-RIEULTHIEUTH
-0x9344 0xBC06 # HANGUL SYLLABLE MIEUM-I-RIEULPHIEUPH
-0x9345 0xBC07 # HANGUL SYLLABLE MIEUM-I-RIEULHIEUH
-0x9346 0xBC0A # HANGUL SYLLABLE MIEUM-I-PIEUPSIOS
-0x9347 0xBC0E # HANGUL SYLLABLE MIEUM-I-CIEUC
-0x9348 0xBC10 # HANGUL SYLLABLE MIEUM-I-KHIEUKH
-0x9349 0xBC12 # HANGUL SYLLABLE MIEUM-I-PHIEUPH
-0x934A 0xBC13 # HANGUL SYLLABLE MIEUM-I-HIEUH
-0x934B 0xBC19 # HANGUL SYLLABLE PIEUP-A-NIEUNCIEUC
-0x934C 0xBC1A # HANGUL SYLLABLE PIEUP-A-NIEUNHIEUH
-0x934D 0xBC20 # HANGUL SYLLABLE PIEUP-A-RIEULSIOS
-0x934E 0xBC21 # HANGUL SYLLABLE PIEUP-A-RIEULTHIEUTH
-0x934F 0xBC22 # HANGUL SYLLABLE PIEUP-A-RIEULPHIEUPH
-0x9350 0xBC23 # HANGUL SYLLABLE PIEUP-A-RIEULHIEUH
-0x9351 0xBC26 # HANGUL SYLLABLE PIEUP-A-PIEUPSIOS
-0x9352 0xBC28 # HANGUL SYLLABLE PIEUP-A-SSANGSIOS
-0x9353 0xBC2A # HANGUL SYLLABLE PIEUP-A-CIEUC
-0x9354 0xBC2B # HANGUL SYLLABLE PIEUP-A-CHIEUCH
-0x9355 0xBC2C # HANGUL SYLLABLE PIEUP-A-KHIEUKH
-0x9356 0xBC2E # HANGUL SYLLABLE PIEUP-A-PHIEUPH
-0x9357 0xBC2F # HANGUL SYLLABLE PIEUP-A-HIEUH
-0x9358 0xBC32 # HANGUL SYLLABLE PIEUP-AE-SSANGKIYEOK
-0x9359 0xBC33 # HANGUL SYLLABLE PIEUP-AE-KIYEOKSIOS
-0x935A 0xBC35 # HANGUL SYLLABLE PIEUP-AE-NIEUNCIEUC
-0x9361 0xBC36 # HANGUL SYLLABLE PIEUP-AE-NIEUNHIEUH
-0x9362 0xBC37 # HANGUL SYLLABLE PIEUP-AE-TIKEUT
-0x9363 0xBC39 # HANGUL SYLLABLE PIEUP-AE-RIEULKIYEOK
-0x9364 0xBC3A # HANGUL SYLLABLE PIEUP-AE-RIEULMIEUM
-0x9365 0xBC3B # HANGUL SYLLABLE PIEUP-AE-RIEULPIEUP
-0x9366 0xBC3C # HANGUL SYLLABLE PIEUP-AE-RIEULSIOS
-0x9367 0xBC3D # HANGUL SYLLABLE PIEUP-AE-RIEULTHIEUTH
-0x9368 0xBC3E # HANGUL SYLLABLE PIEUP-AE-RIEULPHIEUPH
-0x9369 0xBC3F # HANGUL SYLLABLE PIEUP-AE-RIEULHIEUH
-0x936A 0xBC42 # HANGUL SYLLABLE PIEUP-AE-PIEUPSIOS
-0x936B 0xBC46 # HANGUL SYLLABLE PIEUP-AE-CIEUC
-0x936C 0xBC47 # HANGUL SYLLABLE PIEUP-AE-CHIEUCH
-0x936D 0xBC48 # HANGUL SYLLABLE PIEUP-AE-KHIEUKH
-0x936E 0xBC4A # HANGUL SYLLABLE PIEUP-AE-PHIEUPH
-0x936F 0xBC4B # HANGUL SYLLABLE PIEUP-AE-HIEUH
-0x9370 0xBC4E # HANGUL SYLLABLE PIEUP-YA-SSANGKIYEOK
-0x9371 0xBC4F # HANGUL SYLLABLE PIEUP-YA-KIYEOKSIOS
-0x9372 0xBC51 # HANGUL SYLLABLE PIEUP-YA-NIEUNCIEUC
-0x9373 0xBC52 # HANGUL SYLLABLE PIEUP-YA-NIEUNHIEUH
-0x9374 0xBC53 # HANGUL SYLLABLE PIEUP-YA-TIKEUT
-0x9375 0xBC54 # HANGUL SYLLABLE PIEUP-YA-RIEUL
-0x9376 0xBC55 # HANGUL SYLLABLE PIEUP-YA-RIEULKIYEOK
-0x9377 0xBC56 # HANGUL SYLLABLE PIEUP-YA-RIEULMIEUM
-0x9378 0xBC57 # HANGUL SYLLABLE PIEUP-YA-RIEULPIEUP
-0x9379 0xBC58 # HANGUL SYLLABLE PIEUP-YA-RIEULSIOS
-0x937A 0xBC59 # HANGUL SYLLABLE PIEUP-YA-RIEULTHIEUTH
-0x9381 0xBC5A # HANGUL SYLLABLE PIEUP-YA-RIEULPHIEUPH
-0x9382 0xBC5B # HANGUL SYLLABLE PIEUP-YA-RIEULHIEUH
-0x9383 0xBC5C # HANGUL SYLLABLE PIEUP-YA-MIEUM
-0x9384 0xBC5E # HANGUL SYLLABLE PIEUP-YA-PIEUPSIOS
-0x9385 0xBC5F # HANGUL SYLLABLE PIEUP-YA-SIOS
-0x9386 0xBC60 # HANGUL SYLLABLE PIEUP-YA-SSANGSIOS
-0x9387 0xBC61 # HANGUL SYLLABLE PIEUP-YA-IEUNG
-0x9388 0xBC62 # HANGUL SYLLABLE PIEUP-YA-CIEUC
-0x9389 0xBC63 # HANGUL SYLLABLE PIEUP-YA-CHIEUCH
-0x938A 0xBC64 # HANGUL SYLLABLE PIEUP-YA-KHIEUKH
-0x938B 0xBC65 # HANGUL SYLLABLE PIEUP-YA-THIEUTH
-0x938C 0xBC66 # HANGUL SYLLABLE PIEUP-YA-PHIEUPH
-0x938D 0xBC67 # HANGUL SYLLABLE PIEUP-YA-HIEUH
-0x938E 0xBC68 # HANGUL SYLLABLE PIEUP-YAE
-0x938F 0xBC69 # HANGUL SYLLABLE PIEUP-YAE-KIYEOK
-0x9390 0xBC6A # HANGUL SYLLABLE PIEUP-YAE-SSANGKIYEOK
-0x9391 0xBC6B # HANGUL SYLLABLE PIEUP-YAE-KIYEOKSIOS
-0x9392 0xBC6C # HANGUL SYLLABLE PIEUP-YAE-NIEUN
-0x9393 0xBC6D # HANGUL SYLLABLE PIEUP-YAE-NIEUNCIEUC
-0x9394 0xBC6E # HANGUL SYLLABLE PIEUP-YAE-NIEUNHIEUH
-0x9395 0xBC6F # HANGUL SYLLABLE PIEUP-YAE-TIKEUT
-0x9396 0xBC70 # HANGUL SYLLABLE PIEUP-YAE-RIEUL
-0x9397 0xBC71 # HANGUL SYLLABLE PIEUP-YAE-RIEULKIYEOK
-0x9398 0xBC72 # HANGUL SYLLABLE PIEUP-YAE-RIEULMIEUM
-0x9399 0xBC73 # HANGUL SYLLABLE PIEUP-YAE-RIEULPIEUP
-0x939A 0xBC74 # HANGUL SYLLABLE PIEUP-YAE-RIEULSIOS
-0x939B 0xBC75 # HANGUL SYLLABLE PIEUP-YAE-RIEULTHIEUTH
-0x939C 0xBC76 # HANGUL SYLLABLE PIEUP-YAE-RIEULPHIEUPH
-0x939D 0xBC77 # HANGUL SYLLABLE PIEUP-YAE-RIEULHIEUH
-0x939E 0xBC78 # HANGUL SYLLABLE PIEUP-YAE-MIEUM
-0x939F 0xBC79 # HANGUL SYLLABLE PIEUP-YAE-PIEUP
-0x93A0 0xBC7A # HANGUL SYLLABLE PIEUP-YAE-PIEUPSIOS
-0x93A1 0xBC7B # HANGUL SYLLABLE PIEUP-YAE-SIOS
-0x93A2 0xBC7C # HANGUL SYLLABLE PIEUP-YAE-SSANGSIOS
-0x93A3 0xBC7D # HANGUL SYLLABLE PIEUP-YAE-IEUNG
-0x93A4 0xBC7E # HANGUL SYLLABLE PIEUP-YAE-CIEUC
-0x93A5 0xBC7F # HANGUL SYLLABLE PIEUP-YAE-CHIEUCH
-0x93A6 0xBC80 # HANGUL SYLLABLE PIEUP-YAE-KHIEUKH
-0x93A7 0xBC81 # HANGUL SYLLABLE PIEUP-YAE-THIEUTH
-0x93A8 0xBC82 # HANGUL SYLLABLE PIEUP-YAE-PHIEUPH
-0x93A9 0xBC83 # HANGUL SYLLABLE PIEUP-YAE-HIEUH
-0x93AA 0xBC86 # HANGUL SYLLABLE PIEUP-EO-SSANGKIYEOK
-0x93AB 0xBC87 # HANGUL SYLLABLE PIEUP-EO-KIYEOKSIOS
-0x93AC 0xBC89 # HANGUL SYLLABLE PIEUP-EO-NIEUNCIEUC
-0x93AD 0xBC8A # HANGUL SYLLABLE PIEUP-EO-NIEUNHIEUH
-0x93AE 0xBC8D # HANGUL SYLLABLE PIEUP-EO-RIEULKIYEOK
-0x93AF 0xBC8F # HANGUL SYLLABLE PIEUP-EO-RIEULPIEUP
-0x93B0 0xBC90 # HANGUL SYLLABLE PIEUP-EO-RIEULSIOS
-0x93B1 0xBC91 # HANGUL SYLLABLE PIEUP-EO-RIEULTHIEUTH
-0x93B2 0xBC92 # HANGUL SYLLABLE PIEUP-EO-RIEULPHIEUPH
-0x93B3 0xBC93 # HANGUL SYLLABLE PIEUP-EO-RIEULHIEUH
-0x93B4 0xBC96 # HANGUL SYLLABLE PIEUP-EO-PIEUPSIOS
-0x93B5 0xBC98 # HANGUL SYLLABLE PIEUP-EO-SSANGSIOS
-0x93B6 0xBC9B # HANGUL SYLLABLE PIEUP-EO-CHIEUCH
-0x93B7 0xBC9C # HANGUL SYLLABLE PIEUP-EO-KHIEUKH
-0x93B8 0xBC9D # HANGUL SYLLABLE PIEUP-EO-THIEUTH
-0x93B9 0xBC9E # HANGUL SYLLABLE PIEUP-EO-PHIEUPH
-0x93BA 0xBC9F # HANGUL SYLLABLE PIEUP-EO-HIEUH
-0x93BB 0xBCA2 # HANGUL SYLLABLE PIEUP-E-SSANGKIYEOK
-0x93BC 0xBCA3 # HANGUL SYLLABLE PIEUP-E-KIYEOKSIOS
-0x93BD 0xBCA5 # HANGUL SYLLABLE PIEUP-E-NIEUNCIEUC
-0x93BE 0xBCA6 # HANGUL SYLLABLE PIEUP-E-NIEUNHIEUH
-0x93BF 0xBCA9 # HANGUL SYLLABLE PIEUP-E-RIEULKIYEOK
-0x93C0 0xBCAA # HANGUL SYLLABLE PIEUP-E-RIEULMIEUM
-0x93C1 0xBCAB # HANGUL SYLLABLE PIEUP-E-RIEULPIEUP
-0x93C2 0xBCAC # HANGUL SYLLABLE PIEUP-E-RIEULSIOS
-0x93C3 0xBCAD # HANGUL SYLLABLE PIEUP-E-RIEULTHIEUTH
-0x93C4 0xBCAE # HANGUL SYLLABLE PIEUP-E-RIEULPHIEUPH
-0x93C5 0xBCAF # HANGUL SYLLABLE PIEUP-E-RIEULHIEUH
-0x93C6 0xBCB2 # HANGUL SYLLABLE PIEUP-E-PIEUPSIOS
-0x93C7 0xBCB6 # HANGUL SYLLABLE PIEUP-E-CIEUC
-0x93C8 0xBCB7 # HANGUL SYLLABLE PIEUP-E-CHIEUCH
-0x93C9 0xBCB8 # HANGUL SYLLABLE PIEUP-E-KHIEUKH
-0x93CA 0xBCB9 # HANGUL SYLLABLE PIEUP-E-THIEUTH
-0x93CB 0xBCBA # HANGUL SYLLABLE PIEUP-E-PHIEUPH
-0x93CC 0xBCBB # HANGUL SYLLABLE PIEUP-E-HIEUH
-0x93CD 0xBCBE # HANGUL SYLLABLE PIEUP-YEO-SSANGKIYEOK
-0x93CE 0xBCBF # HANGUL SYLLABLE PIEUP-YEO-KIYEOKSIOS
-0x93CF 0xBCC1 # HANGUL SYLLABLE PIEUP-YEO-NIEUNCIEUC
-0x93D0 0xBCC2 # HANGUL SYLLABLE PIEUP-YEO-NIEUNHIEUH
-0x93D1 0xBCC3 # HANGUL SYLLABLE PIEUP-YEO-TIKEUT
-0x93D2 0xBCC5 # HANGUL SYLLABLE PIEUP-YEO-RIEULKIYEOK
-0x93D3 0xBCC6 # HANGUL SYLLABLE PIEUP-YEO-RIEULMIEUM
-0x93D4 0xBCC7 # HANGUL SYLLABLE PIEUP-YEO-RIEULPIEUP
-0x93D5 0xBCC8 # HANGUL SYLLABLE PIEUP-YEO-RIEULSIOS
-0x93D6 0xBCC9 # HANGUL SYLLABLE PIEUP-YEO-RIEULTHIEUTH
-0x93D7 0xBCCA # HANGUL SYLLABLE PIEUP-YEO-RIEULPHIEUPH
-0x93D8 0xBCCB # HANGUL SYLLABLE PIEUP-YEO-RIEULHIEUH
-0x93D9 0xBCCC # HANGUL SYLLABLE PIEUP-YEO-MIEUM
-0x93DA 0xBCCE # HANGUL SYLLABLE PIEUP-YEO-PIEUPSIOS
-0x93DB 0xBCD2 # HANGUL SYLLABLE PIEUP-YEO-CIEUC
-0x93DC 0xBCD3 # HANGUL SYLLABLE PIEUP-YEO-CHIEUCH
-0x93DD 0xBCD4 # HANGUL SYLLABLE PIEUP-YEO-KHIEUKH
-0x93DE 0xBCD6 # HANGUL SYLLABLE PIEUP-YEO-PHIEUPH
-0x93DF 0xBCD7 # HANGUL SYLLABLE PIEUP-YEO-HIEUH
-0x93E0 0xBCD9 # HANGUL SYLLABLE PIEUP-YE-KIYEOK
-0x93E1 0xBCDA # HANGUL SYLLABLE PIEUP-YE-SSANGKIYEOK
-0x93E2 0xBCDB # HANGUL SYLLABLE PIEUP-YE-KIYEOKSIOS
-0x93E3 0xBCDD # HANGUL SYLLABLE PIEUP-YE-NIEUNCIEUC
-0x93E4 0xBCDE # HANGUL SYLLABLE PIEUP-YE-NIEUNHIEUH
-0x93E5 0xBCDF # HANGUL SYLLABLE PIEUP-YE-TIKEUT
-0x93E6 0xBCE0 # HANGUL SYLLABLE PIEUP-YE-RIEUL
-0x93E7 0xBCE1 # HANGUL SYLLABLE PIEUP-YE-RIEULKIYEOK
-0x93E8 0xBCE2 # HANGUL SYLLABLE PIEUP-YE-RIEULMIEUM
-0x93E9 0xBCE3 # HANGUL SYLLABLE PIEUP-YE-RIEULPIEUP
-0x93EA 0xBCE4 # HANGUL SYLLABLE PIEUP-YE-RIEULSIOS
-0x93EB 0xBCE5 # HANGUL SYLLABLE PIEUP-YE-RIEULTHIEUTH
-0x93EC 0xBCE6 # HANGUL SYLLABLE PIEUP-YE-RIEULPHIEUPH
-0x93ED 0xBCE7 # HANGUL SYLLABLE PIEUP-YE-RIEULHIEUH
-0x93EE 0xBCE8 # HANGUL SYLLABLE PIEUP-YE-MIEUM
-0x93EF 0xBCE9 # HANGUL SYLLABLE PIEUP-YE-PIEUP
-0x93F0 0xBCEA # HANGUL SYLLABLE PIEUP-YE-PIEUPSIOS
-0x93F1 0xBCEB # HANGUL SYLLABLE PIEUP-YE-SIOS
-0x93F2 0xBCEC # HANGUL SYLLABLE PIEUP-YE-SSANGSIOS
-0x93F3 0xBCED # HANGUL SYLLABLE PIEUP-YE-IEUNG
-0x93F4 0xBCEE # HANGUL SYLLABLE PIEUP-YE-CIEUC
-0x93F5 0xBCEF # HANGUL SYLLABLE PIEUP-YE-CHIEUCH
-0x93F6 0xBCF0 # HANGUL SYLLABLE PIEUP-YE-KHIEUKH
-0x93F7 0xBCF1 # HANGUL SYLLABLE PIEUP-YE-THIEUTH
-0x93F8 0xBCF2 # HANGUL SYLLABLE PIEUP-YE-PHIEUPH
-0x93F9 0xBCF3 # HANGUL SYLLABLE PIEUP-YE-HIEUH
-0x93FA 0xBCF7 # HANGUL SYLLABLE PIEUP-O-KIYEOKSIOS
-0x93FB 0xBCF9 # HANGUL SYLLABLE PIEUP-O-NIEUNCIEUC
-0x93FC 0xBCFA # HANGUL SYLLABLE PIEUP-O-NIEUNHIEUH
-0x93FD 0xBCFB # HANGUL SYLLABLE PIEUP-O-TIKEUT
-0x93FE 0xBCFD # HANGUL SYLLABLE PIEUP-O-RIEULKIYEOK
-0x9441 0xBCFE # HANGUL SYLLABLE PIEUP-O-RIEULMIEUM
-0x9442 0xBCFF # HANGUL SYLLABLE PIEUP-O-RIEULPIEUP
-0x9443 0xBD00 # HANGUL SYLLABLE PIEUP-O-RIEULSIOS
-0x9444 0xBD01 # HANGUL SYLLABLE PIEUP-O-RIEULTHIEUTH
-0x9445 0xBD02 # HANGUL SYLLABLE PIEUP-O-RIEULPHIEUPH
-0x9446 0xBD03 # HANGUL SYLLABLE PIEUP-O-RIEULHIEUH
-0x9447 0xBD06 # HANGUL SYLLABLE PIEUP-O-PIEUPSIOS
-0x9448 0xBD08 # HANGUL SYLLABLE PIEUP-O-SSANGSIOS
-0x9449 0xBD0A # HANGUL SYLLABLE PIEUP-O-CIEUC
-0x944A 0xBD0B # HANGUL SYLLABLE PIEUP-O-CHIEUCH
-0x944B 0xBD0C # HANGUL SYLLABLE PIEUP-O-KHIEUKH
-0x944C 0xBD0D # HANGUL SYLLABLE PIEUP-O-THIEUTH
-0x944D 0xBD0E # HANGUL SYLLABLE PIEUP-O-PHIEUPH
-0x944E 0xBD0F # HANGUL SYLLABLE PIEUP-O-HIEUH
-0x944F 0xBD11 # HANGUL SYLLABLE PIEUP-WA-KIYEOK
-0x9450 0xBD12 # HANGUL SYLLABLE PIEUP-WA-SSANGKIYEOK
-0x9451 0xBD13 # HANGUL SYLLABLE PIEUP-WA-KIYEOKSIOS
-0x9452 0xBD15 # HANGUL SYLLABLE PIEUP-WA-NIEUNCIEUC
-0x9453 0xBD16 # HANGUL SYLLABLE PIEUP-WA-NIEUNHIEUH
-0x9454 0xBD17 # HANGUL SYLLABLE PIEUP-WA-TIKEUT
-0x9455 0xBD18 # HANGUL SYLLABLE PIEUP-WA-RIEUL
-0x9456 0xBD19 # HANGUL SYLLABLE PIEUP-WA-RIEULKIYEOK
-0x9457 0xBD1A # HANGUL SYLLABLE PIEUP-WA-RIEULMIEUM
-0x9458 0xBD1B # HANGUL SYLLABLE PIEUP-WA-RIEULPIEUP
-0x9459 0xBD1C # HANGUL SYLLABLE PIEUP-WA-RIEULSIOS
-0x945A 0xBD1D # HANGUL SYLLABLE PIEUP-WA-RIEULTHIEUTH
-0x9461 0xBD1E # HANGUL SYLLABLE PIEUP-WA-RIEULPHIEUPH
-0x9462 0xBD1F # HANGUL SYLLABLE PIEUP-WA-RIEULHIEUH
-0x9463 0xBD20 # HANGUL SYLLABLE PIEUP-WA-MIEUM
-0x9464 0xBD21 # HANGUL SYLLABLE PIEUP-WA-PIEUP
-0x9465 0xBD22 # HANGUL SYLLABLE PIEUP-WA-PIEUPSIOS
-0x9466 0xBD23 # HANGUL SYLLABLE PIEUP-WA-SIOS
-0x9467 0xBD25 # HANGUL SYLLABLE PIEUP-WA-IEUNG
-0x9468 0xBD26 # HANGUL SYLLABLE PIEUP-WA-CIEUC
-0x9469 0xBD27 # HANGUL SYLLABLE PIEUP-WA-CHIEUCH
-0x946A 0xBD28 # HANGUL SYLLABLE PIEUP-WA-KHIEUKH
-0x946B 0xBD29 # HANGUL SYLLABLE PIEUP-WA-THIEUTH
-0x946C 0xBD2A # HANGUL SYLLABLE PIEUP-WA-PHIEUPH
-0x946D 0xBD2B # HANGUL SYLLABLE PIEUP-WA-HIEUH
-0x946E 0xBD2D # HANGUL SYLLABLE PIEUP-WAE-KIYEOK
-0x946F 0xBD2E # HANGUL SYLLABLE PIEUP-WAE-SSANGKIYEOK
-0x9470 0xBD2F # HANGUL SYLLABLE PIEUP-WAE-KIYEOKSIOS
-0x9471 0xBD30 # HANGUL SYLLABLE PIEUP-WAE-NIEUN
-0x9472 0xBD31 # HANGUL SYLLABLE PIEUP-WAE-NIEUNCIEUC
-0x9473 0xBD32 # HANGUL SYLLABLE PIEUP-WAE-NIEUNHIEUH
-0x9474 0xBD33 # HANGUL SYLLABLE PIEUP-WAE-TIKEUT
-0x9475 0xBD34 # HANGUL SYLLABLE PIEUP-WAE-RIEUL
-0x9476 0xBD35 # HANGUL SYLLABLE PIEUP-WAE-RIEULKIYEOK
-0x9477 0xBD36 # HANGUL SYLLABLE PIEUP-WAE-RIEULMIEUM
-0x9478 0xBD37 # HANGUL SYLLABLE PIEUP-WAE-RIEULPIEUP
-0x9479 0xBD38 # HANGUL SYLLABLE PIEUP-WAE-RIEULSIOS
-0x947A 0xBD39 # HANGUL SYLLABLE PIEUP-WAE-RIEULTHIEUTH
-0x9481 0xBD3A # HANGUL SYLLABLE PIEUP-WAE-RIEULPHIEUPH
-0x9482 0xBD3B # HANGUL SYLLABLE PIEUP-WAE-RIEULHIEUH
-0x9483 0xBD3C # HANGUL SYLLABLE PIEUP-WAE-MIEUM
-0x9484 0xBD3D # HANGUL SYLLABLE PIEUP-WAE-PIEUP
-0x9485 0xBD3E # HANGUL SYLLABLE PIEUP-WAE-PIEUPSIOS
-0x9486 0xBD3F # HANGUL SYLLABLE PIEUP-WAE-SIOS
-0x9487 0xBD41 # HANGUL SYLLABLE PIEUP-WAE-IEUNG
-0x9488 0xBD42 # HANGUL SYLLABLE PIEUP-WAE-CIEUC
-0x9489 0xBD43 # HANGUL SYLLABLE PIEUP-WAE-CHIEUCH
-0x948A 0xBD44 # HANGUL SYLLABLE PIEUP-WAE-KHIEUKH
-0x948B 0xBD45 # HANGUL SYLLABLE PIEUP-WAE-THIEUTH
-0x948C 0xBD46 # HANGUL SYLLABLE PIEUP-WAE-PHIEUPH
-0x948D 0xBD47 # HANGUL SYLLABLE PIEUP-WAE-HIEUH
-0x948E 0xBD4A # HANGUL SYLLABLE PIEUP-OE-SSANGKIYEOK
-0x948F 0xBD4B # HANGUL SYLLABLE PIEUP-OE-KIYEOKSIOS
-0x9490 0xBD4D # HANGUL SYLLABLE PIEUP-OE-NIEUNCIEUC
-0x9491 0xBD4E # HANGUL SYLLABLE PIEUP-OE-NIEUNHIEUH
-0x9492 0xBD4F # HANGUL SYLLABLE PIEUP-OE-TIKEUT
-0x9493 0xBD51 # HANGUL SYLLABLE PIEUP-OE-RIEULKIYEOK
-0x9494 0xBD52 # HANGUL SYLLABLE PIEUP-OE-RIEULMIEUM
-0x9495 0xBD53 # HANGUL SYLLABLE PIEUP-OE-RIEULPIEUP
-0x9496 0xBD54 # HANGUL SYLLABLE PIEUP-OE-RIEULSIOS
-0x9497 0xBD55 # HANGUL SYLLABLE PIEUP-OE-RIEULTHIEUTH
-0x9498 0xBD56 # HANGUL SYLLABLE PIEUP-OE-RIEULPHIEUPH
-0x9499 0xBD57 # HANGUL SYLLABLE PIEUP-OE-RIEULHIEUH
-0x949A 0xBD5A # HANGUL SYLLABLE PIEUP-OE-PIEUPSIOS
-0x949B 0xBD5B # HANGUL SYLLABLE PIEUP-OE-SIOS
-0x949C 0xBD5C # HANGUL SYLLABLE PIEUP-OE-SSANGSIOS
-0x949D 0xBD5D # HANGUL SYLLABLE PIEUP-OE-IEUNG
-0x949E 0xBD5E # HANGUL SYLLABLE PIEUP-OE-CIEUC
-0x949F 0xBD5F # HANGUL SYLLABLE PIEUP-OE-CHIEUCH
-0x94A0 0xBD60 # HANGUL SYLLABLE PIEUP-OE-KHIEUKH
-0x94A1 0xBD61 # HANGUL SYLLABLE PIEUP-OE-THIEUTH
-0x94A2 0xBD62 # HANGUL SYLLABLE PIEUP-OE-PHIEUPH
-0x94A3 0xBD63 # HANGUL SYLLABLE PIEUP-OE-HIEUH
-0x94A4 0xBD65 # HANGUL SYLLABLE PIEUP-YO-KIYEOK
-0x94A5 0xBD66 # HANGUL SYLLABLE PIEUP-YO-SSANGKIYEOK
-0x94A6 0xBD67 # HANGUL SYLLABLE PIEUP-YO-KIYEOKSIOS
-0x94A7 0xBD69 # HANGUL SYLLABLE PIEUP-YO-NIEUNCIEUC
-0x94A8 0xBD6A # HANGUL SYLLABLE PIEUP-YO-NIEUNHIEUH
-0x94A9 0xBD6B # HANGUL SYLLABLE PIEUP-YO-TIKEUT
-0x94AA 0xBD6C # HANGUL SYLLABLE PIEUP-YO-RIEUL
-0x94AB 0xBD6D # HANGUL SYLLABLE PIEUP-YO-RIEULKIYEOK
-0x94AC 0xBD6E # HANGUL SYLLABLE PIEUP-YO-RIEULMIEUM
-0x94AD 0xBD6F # HANGUL SYLLABLE PIEUP-YO-RIEULPIEUP
-0x94AE 0xBD70 # HANGUL SYLLABLE PIEUP-YO-RIEULSIOS
-0x94AF 0xBD71 # HANGUL SYLLABLE PIEUP-YO-RIEULTHIEUTH
-0x94B0 0xBD72 # HANGUL SYLLABLE PIEUP-YO-RIEULPHIEUPH
-0x94B1 0xBD73 # HANGUL SYLLABLE PIEUP-YO-RIEULHIEUH
-0x94B2 0xBD74 # HANGUL SYLLABLE PIEUP-YO-MIEUM
-0x94B3 0xBD75 # HANGUL SYLLABLE PIEUP-YO-PIEUP
-0x94B4 0xBD76 # HANGUL SYLLABLE PIEUP-YO-PIEUPSIOS
-0x94B5 0xBD77 # HANGUL SYLLABLE PIEUP-YO-SIOS
-0x94B6 0xBD78 # HANGUL SYLLABLE PIEUP-YO-SSANGSIOS
-0x94B7 0xBD79 # HANGUL SYLLABLE PIEUP-YO-IEUNG
-0x94B8 0xBD7A # HANGUL SYLLABLE PIEUP-YO-CIEUC
-0x94B9 0xBD7B # HANGUL SYLLABLE PIEUP-YO-CHIEUCH
-0x94BA 0xBD7C # HANGUL SYLLABLE PIEUP-YO-KHIEUKH
-0x94BB 0xBD7D # HANGUL SYLLABLE PIEUP-YO-THIEUTH
-0x94BC 0xBD7E # HANGUL SYLLABLE PIEUP-YO-PHIEUPH
-0x94BD 0xBD7F # HANGUL SYLLABLE PIEUP-YO-HIEUH
-0x94BE 0xBD82 # HANGUL SYLLABLE PIEUP-U-SSANGKIYEOK
-0x94BF 0xBD83 # HANGUL SYLLABLE PIEUP-U-KIYEOKSIOS
-0x94C0 0xBD85 # HANGUL SYLLABLE PIEUP-U-NIEUNCIEUC
-0x94C1 0xBD86 # HANGUL SYLLABLE PIEUP-U-NIEUNHIEUH
-0x94C2 0xBD8B # HANGUL SYLLABLE PIEUP-U-RIEULPIEUP
-0x94C3 0xBD8C # HANGUL SYLLABLE PIEUP-U-RIEULSIOS
-0x94C4 0xBD8D # HANGUL SYLLABLE PIEUP-U-RIEULTHIEUTH
-0x94C5 0xBD8E # HANGUL SYLLABLE PIEUP-U-RIEULPHIEUPH
-0x94C6 0xBD8F # HANGUL SYLLABLE PIEUP-U-RIEULHIEUH
-0x94C7 0xBD92 # HANGUL SYLLABLE PIEUP-U-PIEUPSIOS
-0x94C8 0xBD94 # HANGUL SYLLABLE PIEUP-U-SSANGSIOS
-0x94C9 0xBD96 # HANGUL SYLLABLE PIEUP-U-CIEUC
-0x94CA 0xBD97 # HANGUL SYLLABLE PIEUP-U-CHIEUCH
-0x94CB 0xBD98 # HANGUL SYLLABLE PIEUP-U-KHIEUKH
-0x94CC 0xBD9B # HANGUL SYLLABLE PIEUP-U-HIEUH
-0x94CD 0xBD9D # HANGUL SYLLABLE PIEUP-WEO-KIYEOK
-0x94CE 0xBD9E # HANGUL SYLLABLE PIEUP-WEO-SSANGKIYEOK
-0x94CF 0xBD9F # HANGUL SYLLABLE PIEUP-WEO-KIYEOKSIOS
-0x94D0 0xBDA0 # HANGUL SYLLABLE PIEUP-WEO-NIEUN
-0x94D1 0xBDA1 # HANGUL SYLLABLE PIEUP-WEO-NIEUNCIEUC
-0x94D2 0xBDA2 # HANGUL SYLLABLE PIEUP-WEO-NIEUNHIEUH
-0x94D3 0xBDA3 # HANGUL SYLLABLE PIEUP-WEO-TIKEUT
-0x94D4 0xBDA5 # HANGUL SYLLABLE PIEUP-WEO-RIEULKIYEOK
-0x94D5 0xBDA6 # HANGUL SYLLABLE PIEUP-WEO-RIEULMIEUM
-0x94D6 0xBDA7 # HANGUL SYLLABLE PIEUP-WEO-RIEULPIEUP
-0x94D7 0xBDA8 # HANGUL SYLLABLE PIEUP-WEO-RIEULSIOS
-0x94D8 0xBDA9 # HANGUL SYLLABLE PIEUP-WEO-RIEULTHIEUTH
-0x94D9 0xBDAA # HANGUL SYLLABLE PIEUP-WEO-RIEULPHIEUPH
-0x94DA 0xBDAB # HANGUL SYLLABLE PIEUP-WEO-RIEULHIEUH
-0x94DB 0xBDAC # HANGUL SYLLABLE PIEUP-WEO-MIEUM
-0x94DC 0xBDAD # HANGUL SYLLABLE PIEUP-WEO-PIEUP
-0x94DD 0xBDAE # HANGUL SYLLABLE PIEUP-WEO-PIEUPSIOS
-0x94DE 0xBDAF # HANGUL SYLLABLE PIEUP-WEO-SIOS
-0x94DF 0xBDB1 # HANGUL SYLLABLE PIEUP-WEO-IEUNG
-0x94E0 0xBDB2 # HANGUL SYLLABLE PIEUP-WEO-CIEUC
-0x94E1 0xBDB3 # HANGUL SYLLABLE PIEUP-WEO-CHIEUCH
-0x94E2 0xBDB4 # HANGUL SYLLABLE PIEUP-WEO-KHIEUKH
-0x94E3 0xBDB5 # HANGUL SYLLABLE PIEUP-WEO-THIEUTH
-0x94E4 0xBDB6 # HANGUL SYLLABLE PIEUP-WEO-PHIEUPH
-0x94E5 0xBDB7 # HANGUL SYLLABLE PIEUP-WEO-HIEUH
-0x94E6 0xBDB9 # HANGUL SYLLABLE PIEUP-WE-KIYEOK
-0x94E7 0xBDBA # HANGUL SYLLABLE PIEUP-WE-SSANGKIYEOK
-0x94E8 0xBDBB # HANGUL SYLLABLE PIEUP-WE-KIYEOKSIOS
-0x94E9 0xBDBC # HANGUL SYLLABLE PIEUP-WE-NIEUN
-0x94EA 0xBDBD # HANGUL SYLLABLE PIEUP-WE-NIEUNCIEUC
-0x94EB 0xBDBE # HANGUL SYLLABLE PIEUP-WE-NIEUNHIEUH
-0x94EC 0xBDBF # HANGUL SYLLABLE PIEUP-WE-TIKEUT
-0x94ED 0xBDC0 # HANGUL SYLLABLE PIEUP-WE-RIEUL
-0x94EE 0xBDC1 # HANGUL SYLLABLE PIEUP-WE-RIEULKIYEOK
-0x94EF 0xBDC2 # HANGUL SYLLABLE PIEUP-WE-RIEULMIEUM
-0x94F0 0xBDC3 # HANGUL SYLLABLE PIEUP-WE-RIEULPIEUP
-0x94F1 0xBDC4 # HANGUL SYLLABLE PIEUP-WE-RIEULSIOS
-0x94F2 0xBDC5 # HANGUL SYLLABLE PIEUP-WE-RIEULTHIEUTH
-0x94F3 0xBDC6 # HANGUL SYLLABLE PIEUP-WE-RIEULPHIEUPH
-0x94F4 0xBDC7 # HANGUL SYLLABLE PIEUP-WE-RIEULHIEUH
-0x94F5 0xBDC8 # HANGUL SYLLABLE PIEUP-WE-MIEUM
-0x94F6 0xBDC9 # HANGUL SYLLABLE PIEUP-WE-PIEUP
-0x94F7 0xBDCA # HANGUL SYLLABLE PIEUP-WE-PIEUPSIOS
-0x94F8 0xBDCB # HANGUL SYLLABLE PIEUP-WE-SIOS
-0x94F9 0xBDCC # HANGUL SYLLABLE PIEUP-WE-SSANGSIOS
-0x94FA 0xBDCD # HANGUL SYLLABLE PIEUP-WE-IEUNG
-0x94FB 0xBDCE # HANGUL SYLLABLE PIEUP-WE-CIEUC
-0x94FC 0xBDCF # HANGUL SYLLABLE PIEUP-WE-CHIEUCH
-0x94FD 0xBDD0 # HANGUL SYLLABLE PIEUP-WE-KHIEUKH
-0x94FE 0xBDD1 # HANGUL SYLLABLE PIEUP-WE-THIEUTH
-0x9541 0xBDD2 # HANGUL SYLLABLE PIEUP-WE-PHIEUPH
-0x9542 0xBDD3 # HANGUL SYLLABLE PIEUP-WE-HIEUH
-0x9543 0xBDD6 # HANGUL SYLLABLE PIEUP-WI-SSANGKIYEOK
-0x9544 0xBDD7 # HANGUL SYLLABLE PIEUP-WI-KIYEOKSIOS
-0x9545 0xBDD9 # HANGUL SYLLABLE PIEUP-WI-NIEUNCIEUC
-0x9546 0xBDDA # HANGUL SYLLABLE PIEUP-WI-NIEUNHIEUH
-0x9547 0xBDDB # HANGUL SYLLABLE PIEUP-WI-TIKEUT
-0x9548 0xBDDD # HANGUL SYLLABLE PIEUP-WI-RIEULKIYEOK
-0x9549 0xBDDE # HANGUL SYLLABLE PIEUP-WI-RIEULMIEUM
-0x954A 0xBDDF # HANGUL SYLLABLE PIEUP-WI-RIEULPIEUP
-0x954B 0xBDE0 # HANGUL SYLLABLE PIEUP-WI-RIEULSIOS
-0x954C 0xBDE1 # HANGUL SYLLABLE PIEUP-WI-RIEULTHIEUTH
-0x954D 0xBDE2 # HANGUL SYLLABLE PIEUP-WI-RIEULPHIEUPH
-0x954E 0xBDE3 # HANGUL SYLLABLE PIEUP-WI-RIEULHIEUH
-0x954F 0xBDE4 # HANGUL SYLLABLE PIEUP-WI-MIEUM
-0x9550 0xBDE5 # HANGUL SYLLABLE PIEUP-WI-PIEUP
-0x9551 0xBDE6 # HANGUL SYLLABLE PIEUP-WI-PIEUPSIOS
-0x9552 0xBDE7 # HANGUL SYLLABLE PIEUP-WI-SIOS
-0x9553 0xBDE8 # HANGUL SYLLABLE PIEUP-WI-SSANGSIOS
-0x9554 0xBDEA # HANGUL SYLLABLE PIEUP-WI-CIEUC
-0x9555 0xBDEB # HANGUL SYLLABLE PIEUP-WI-CHIEUCH
-0x9556 0xBDEC # HANGUL SYLLABLE PIEUP-WI-KHIEUKH
-0x9557 0xBDED # HANGUL SYLLABLE PIEUP-WI-THIEUTH
-0x9558 0xBDEE # HANGUL SYLLABLE PIEUP-WI-PHIEUPH
-0x9559 0xBDEF # HANGUL SYLLABLE PIEUP-WI-HIEUH
-0x955A 0xBDF1 # HANGUL SYLLABLE PIEUP-YU-KIYEOK
-0x9561 0xBDF2 # HANGUL SYLLABLE PIEUP-YU-SSANGKIYEOK
-0x9562 0xBDF3 # HANGUL SYLLABLE PIEUP-YU-KIYEOKSIOS
-0x9563 0xBDF5 # HANGUL SYLLABLE PIEUP-YU-NIEUNCIEUC
-0x9564 0xBDF6 # HANGUL SYLLABLE PIEUP-YU-NIEUNHIEUH
-0x9565 0xBDF7 # HANGUL SYLLABLE PIEUP-YU-TIKEUT
-0x9566 0xBDF9 # HANGUL SYLLABLE PIEUP-YU-RIEULKIYEOK
-0x9567 0xBDFA # HANGUL SYLLABLE PIEUP-YU-RIEULMIEUM
-0x9568 0xBDFB # HANGUL SYLLABLE PIEUP-YU-RIEULPIEUP
-0x9569 0xBDFC # HANGUL SYLLABLE PIEUP-YU-RIEULSIOS
-0x956A 0xBDFD # HANGUL SYLLABLE PIEUP-YU-RIEULTHIEUTH
-0x956B 0xBDFE # HANGUL SYLLABLE PIEUP-YU-RIEULPHIEUPH
-0x956C 0xBDFF # HANGUL SYLLABLE PIEUP-YU-RIEULHIEUH
-0x956D 0xBE01 # HANGUL SYLLABLE PIEUP-YU-PIEUP
-0x956E 0xBE02 # HANGUL SYLLABLE PIEUP-YU-PIEUPSIOS
-0x956F 0xBE04 # HANGUL SYLLABLE PIEUP-YU-SSANGSIOS
-0x9570 0xBE06 # HANGUL SYLLABLE PIEUP-YU-CIEUC
-0x9571 0xBE07 # HANGUL SYLLABLE PIEUP-YU-CHIEUCH
-0x9572 0xBE08 # HANGUL SYLLABLE PIEUP-YU-KHIEUKH
-0x9573 0xBE09 # HANGUL SYLLABLE PIEUP-YU-THIEUTH
-0x9574 0xBE0A # HANGUL SYLLABLE PIEUP-YU-PHIEUPH
-0x9575 0xBE0B # HANGUL SYLLABLE PIEUP-YU-HIEUH
-0x9576 0xBE0E # HANGUL SYLLABLE PIEUP-EU-SSANGKIYEOK
-0x9577 0xBE0F # HANGUL SYLLABLE PIEUP-EU-KIYEOKSIOS
-0x9578 0xBE11 # HANGUL SYLLABLE PIEUP-EU-NIEUNCIEUC
-0x9579 0xBE12 # HANGUL SYLLABLE PIEUP-EU-NIEUNHIEUH
-0x957A 0xBE13 # HANGUL SYLLABLE PIEUP-EU-TIKEUT
-0x9581 0xBE15 # HANGUL SYLLABLE PIEUP-EU-RIEULKIYEOK
-0x9582 0xBE16 # HANGUL SYLLABLE PIEUP-EU-RIEULMIEUM
-0x9583 0xBE17 # HANGUL SYLLABLE PIEUP-EU-RIEULPIEUP
-0x9584 0xBE18 # HANGUL SYLLABLE PIEUP-EU-RIEULSIOS
-0x9585 0xBE19 # HANGUL SYLLABLE PIEUP-EU-RIEULTHIEUTH
-0x9586 0xBE1A # HANGUL SYLLABLE PIEUP-EU-RIEULPHIEUPH
-0x9587 0xBE1B # HANGUL SYLLABLE PIEUP-EU-RIEULHIEUH
-0x9588 0xBE1E # HANGUL SYLLABLE PIEUP-EU-PIEUPSIOS
-0x9589 0xBE20 # HANGUL SYLLABLE PIEUP-EU-SSANGSIOS
-0x958A 0xBE21 # HANGUL SYLLABLE PIEUP-EU-IEUNG
-0x958B 0xBE22 # HANGUL SYLLABLE PIEUP-EU-CIEUC
-0x958C 0xBE23 # HANGUL SYLLABLE PIEUP-EU-CHIEUCH
-0x958D 0xBE24 # HANGUL SYLLABLE PIEUP-EU-KHIEUKH
-0x958E 0xBE25 # HANGUL SYLLABLE PIEUP-EU-THIEUTH
-0x958F 0xBE26 # HANGUL SYLLABLE PIEUP-EU-PHIEUPH
-0x9590 0xBE27 # HANGUL SYLLABLE PIEUP-EU-HIEUH
-0x9591 0xBE28 # HANGUL SYLLABLE PIEUP-YI
-0x9592 0xBE29 # HANGUL SYLLABLE PIEUP-YI-KIYEOK
-0x9593 0xBE2A # HANGUL SYLLABLE PIEUP-YI-SSANGKIYEOK
-0x9594 0xBE2B # HANGUL SYLLABLE PIEUP-YI-KIYEOKSIOS
-0x9595 0xBE2C # HANGUL SYLLABLE PIEUP-YI-NIEUN
-0x9596 0xBE2D # HANGUL SYLLABLE PIEUP-YI-NIEUNCIEUC
-0x9597 0xBE2E # HANGUL SYLLABLE PIEUP-YI-NIEUNHIEUH
-0x9598 0xBE2F # HANGUL SYLLABLE PIEUP-YI-TIKEUT
-0x9599 0xBE30 # HANGUL SYLLABLE PIEUP-YI-RIEUL
-0x959A 0xBE31 # HANGUL SYLLABLE PIEUP-YI-RIEULKIYEOK
-0x959B 0xBE32 # HANGUL SYLLABLE PIEUP-YI-RIEULMIEUM
-0x959C 0xBE33 # HANGUL SYLLABLE PIEUP-YI-RIEULPIEUP
-0x959D 0xBE34 # HANGUL SYLLABLE PIEUP-YI-RIEULSIOS
-0x959E 0xBE35 # HANGUL SYLLABLE PIEUP-YI-RIEULTHIEUTH
-0x959F 0xBE36 # HANGUL SYLLABLE PIEUP-YI-RIEULPHIEUPH
-0x95A0 0xBE37 # HANGUL SYLLABLE PIEUP-YI-RIEULHIEUH
-0x95A1 0xBE38 # HANGUL SYLLABLE PIEUP-YI-MIEUM
-0x95A2 0xBE39 # HANGUL SYLLABLE PIEUP-YI-PIEUP
-0x95A3 0xBE3A # HANGUL SYLLABLE PIEUP-YI-PIEUPSIOS
-0x95A4 0xBE3B # HANGUL SYLLABLE PIEUP-YI-SIOS
-0x95A5 0xBE3C # HANGUL SYLLABLE PIEUP-YI-SSANGSIOS
-0x95A6 0xBE3D # HANGUL SYLLABLE PIEUP-YI-IEUNG
-0x95A7 0xBE3E # HANGUL SYLLABLE PIEUP-YI-CIEUC
-0x95A8 0xBE3F # HANGUL SYLLABLE PIEUP-YI-CHIEUCH
-0x95A9 0xBE40 # HANGUL SYLLABLE PIEUP-YI-KHIEUKH
-0x95AA 0xBE41 # HANGUL SYLLABLE PIEUP-YI-THIEUTH
-0x95AB 0xBE42 # HANGUL SYLLABLE PIEUP-YI-PHIEUPH
-0x95AC 0xBE43 # HANGUL SYLLABLE PIEUP-YI-HIEUH
-0x95AD 0xBE46 # HANGUL SYLLABLE PIEUP-I-SSANGKIYEOK
-0x95AE 0xBE47 # HANGUL SYLLABLE PIEUP-I-KIYEOKSIOS
-0x95AF 0xBE49 # HANGUL SYLLABLE PIEUP-I-NIEUNCIEUC
-0x95B0 0xBE4A # HANGUL SYLLABLE PIEUP-I-NIEUNHIEUH
-0x95B1 0xBE4B # HANGUL SYLLABLE PIEUP-I-TIKEUT
-0x95B2 0xBE4D # HANGUL SYLLABLE PIEUP-I-RIEULKIYEOK
-0x95B3 0xBE4F # HANGUL SYLLABLE PIEUP-I-RIEULPIEUP
-0x95B4 0xBE50 # HANGUL SYLLABLE PIEUP-I-RIEULSIOS
-0x95B5 0xBE51 # HANGUL SYLLABLE PIEUP-I-RIEULTHIEUTH
-0x95B6 0xBE52 # HANGUL SYLLABLE PIEUP-I-RIEULPHIEUPH
-0x95B7 0xBE53 # HANGUL SYLLABLE PIEUP-I-RIEULHIEUH
-0x95B8 0xBE56 # HANGUL SYLLABLE PIEUP-I-PIEUPSIOS
-0x95B9 0xBE58 # HANGUL SYLLABLE PIEUP-I-SSANGSIOS
-0x95BA 0xBE5C # HANGUL SYLLABLE PIEUP-I-KHIEUKH
-0x95BB 0xBE5D # HANGUL SYLLABLE PIEUP-I-THIEUTH
-0x95BC 0xBE5E # HANGUL SYLLABLE PIEUP-I-PHIEUPH
-0x95BD 0xBE5F # HANGUL SYLLABLE PIEUP-I-HIEUH
-0x95BE 0xBE62 # HANGUL SYLLABLE SSANGPIEUP-A-SSANGKIYEOK
-0x95BF 0xBE63 # HANGUL SYLLABLE SSANGPIEUP-A-KIYEOKSIOS
-0x95C0 0xBE65 # HANGUL SYLLABLE SSANGPIEUP-A-NIEUNCIEUC
-0x95C1 0xBE66 # HANGUL SYLLABLE SSANGPIEUP-A-NIEUNHIEUH
-0x95C2 0xBE67 # HANGUL SYLLABLE SSANGPIEUP-A-TIKEUT
-0x95C3 0xBE69 # HANGUL SYLLABLE SSANGPIEUP-A-RIEULKIYEOK
-0x95C4 0xBE6B # HANGUL SYLLABLE SSANGPIEUP-A-RIEULPIEUP
-0x95C5 0xBE6C # HANGUL SYLLABLE SSANGPIEUP-A-RIEULSIOS
-0x95C6 0xBE6D # HANGUL SYLLABLE SSANGPIEUP-A-RIEULTHIEUTH
-0x95C7 0xBE6E # HANGUL SYLLABLE SSANGPIEUP-A-RIEULPHIEUPH
-0x95C8 0xBE6F # HANGUL SYLLABLE SSANGPIEUP-A-RIEULHIEUH
-0x95C9 0xBE72 # HANGUL SYLLABLE SSANGPIEUP-A-PIEUPSIOS
-0x95CA 0xBE76 # HANGUL SYLLABLE SSANGPIEUP-A-CIEUC
-0x95CB 0xBE77 # HANGUL SYLLABLE SSANGPIEUP-A-CHIEUCH
-0x95CC 0xBE78 # HANGUL SYLLABLE SSANGPIEUP-A-KHIEUKH
-0x95CD 0xBE79 # HANGUL SYLLABLE SSANGPIEUP-A-THIEUTH
-0x95CE 0xBE7A # HANGUL SYLLABLE SSANGPIEUP-A-PHIEUPH
-0x95CF 0xBE7E # HANGUL SYLLABLE SSANGPIEUP-AE-SSANGKIYEOK
-0x95D0 0xBE7F # HANGUL SYLLABLE SSANGPIEUP-AE-KIYEOKSIOS
-0x95D1 0xBE81 # HANGUL SYLLABLE SSANGPIEUP-AE-NIEUNCIEUC
-0x95D2 0xBE82 # HANGUL SYLLABLE SSANGPIEUP-AE-NIEUNHIEUH
-0x95D3 0xBE83 # HANGUL SYLLABLE SSANGPIEUP-AE-TIKEUT
-0x95D4 0xBE85 # HANGUL SYLLABLE SSANGPIEUP-AE-RIEULKIYEOK
-0x95D5 0xBE86 # HANGUL SYLLABLE SSANGPIEUP-AE-RIEULMIEUM
-0x95D6 0xBE87 # HANGUL SYLLABLE SSANGPIEUP-AE-RIEULPIEUP
-0x95D7 0xBE88 # HANGUL SYLLABLE SSANGPIEUP-AE-RIEULSIOS
-0x95D8 0xBE89 # HANGUL SYLLABLE SSANGPIEUP-AE-RIEULTHIEUTH
-0x95D9 0xBE8A # HANGUL SYLLABLE SSANGPIEUP-AE-RIEULPHIEUPH
-0x95DA 0xBE8B # HANGUL SYLLABLE SSANGPIEUP-AE-RIEULHIEUH
-0x95DB 0xBE8E # HANGUL SYLLABLE SSANGPIEUP-AE-PIEUPSIOS
-0x95DC 0xBE92 # HANGUL SYLLABLE SSANGPIEUP-AE-CIEUC
-0x95DD 0xBE93 # HANGUL SYLLABLE SSANGPIEUP-AE-CHIEUCH
-0x95DE 0xBE94 # HANGUL SYLLABLE SSANGPIEUP-AE-KHIEUKH
-0x95DF 0xBE95 # HANGUL SYLLABLE SSANGPIEUP-AE-THIEUTH
-0x95E0 0xBE96 # HANGUL SYLLABLE SSANGPIEUP-AE-PHIEUPH
-0x95E1 0xBE97 # HANGUL SYLLABLE SSANGPIEUP-AE-HIEUH
-0x95E2 0xBE9A # HANGUL SYLLABLE SSANGPIEUP-YA-SSANGKIYEOK
-0x95E3 0xBE9B # HANGUL SYLLABLE SSANGPIEUP-YA-KIYEOKSIOS
-0x95E4 0xBE9C # HANGUL SYLLABLE SSANGPIEUP-YA-NIEUN
-0x95E5 0xBE9D # HANGUL SYLLABLE SSANGPIEUP-YA-NIEUNCIEUC
-0x95E6 0xBE9E # HANGUL SYLLABLE SSANGPIEUP-YA-NIEUNHIEUH
-0x95E7 0xBE9F # HANGUL SYLLABLE SSANGPIEUP-YA-TIKEUT
-0x95E8 0xBEA0 # HANGUL SYLLABLE SSANGPIEUP-YA-RIEUL
-0x95E9 0xBEA1 # HANGUL SYLLABLE SSANGPIEUP-YA-RIEULKIYEOK
-0x95EA 0xBEA2 # HANGUL SYLLABLE SSANGPIEUP-YA-RIEULMIEUM
-0x95EB 0xBEA3 # HANGUL SYLLABLE SSANGPIEUP-YA-RIEULPIEUP
-0x95EC 0xBEA4 # HANGUL SYLLABLE SSANGPIEUP-YA-RIEULSIOS
-0x95ED 0xBEA5 # HANGUL SYLLABLE SSANGPIEUP-YA-RIEULTHIEUTH
-0x95EE 0xBEA6 # HANGUL SYLLABLE SSANGPIEUP-YA-RIEULPHIEUPH
-0x95EF 0xBEA7 # HANGUL SYLLABLE SSANGPIEUP-YA-RIEULHIEUH
-0x95F0 0xBEA9 # HANGUL SYLLABLE SSANGPIEUP-YA-PIEUP
-0x95F1 0xBEAA # HANGUL SYLLABLE SSANGPIEUP-YA-PIEUPSIOS
-0x95F2 0xBEAB # HANGUL SYLLABLE SSANGPIEUP-YA-SIOS
-0x95F3 0xBEAC # HANGUL SYLLABLE SSANGPIEUP-YA-SSANGSIOS
-0x95F4 0xBEAD # HANGUL SYLLABLE SSANGPIEUP-YA-IEUNG
-0x95F5 0xBEAE # HANGUL SYLLABLE SSANGPIEUP-YA-CIEUC
-0x95F6 0xBEAF # HANGUL SYLLABLE SSANGPIEUP-YA-CHIEUCH
-0x95F7 0xBEB0 # HANGUL SYLLABLE SSANGPIEUP-YA-KHIEUKH
-0x95F8 0xBEB1 # HANGUL SYLLABLE SSANGPIEUP-YA-THIEUTH
-0x95F9 0xBEB2 # HANGUL SYLLABLE SSANGPIEUP-YA-PHIEUPH
-0x95FA 0xBEB3 # HANGUL SYLLABLE SSANGPIEUP-YA-HIEUH
-0x95FB 0xBEB4 # HANGUL SYLLABLE SSANGPIEUP-YAE
-0x95FC 0xBEB5 # HANGUL SYLLABLE SSANGPIEUP-YAE-KIYEOK
-0x95FD 0xBEB6 # HANGUL SYLLABLE SSANGPIEUP-YAE-SSANGKIYEOK
-0x95FE 0xBEB7 # HANGUL SYLLABLE SSANGPIEUP-YAE-KIYEOKSIOS
-0x9641 0xBEB8 # HANGUL SYLLABLE SSANGPIEUP-YAE-NIEUN
-0x9642 0xBEB9 # HANGUL SYLLABLE SSANGPIEUP-YAE-NIEUNCIEUC
-0x9643 0xBEBA # HANGUL SYLLABLE SSANGPIEUP-YAE-NIEUNHIEUH
-0x9644 0xBEBB # HANGUL SYLLABLE SSANGPIEUP-YAE-TIKEUT
-0x9645 0xBEBC # HANGUL SYLLABLE SSANGPIEUP-YAE-RIEUL
-0x9646 0xBEBD # HANGUL SYLLABLE SSANGPIEUP-YAE-RIEULKIYEOK
-0x9647 0xBEBE # HANGUL SYLLABLE SSANGPIEUP-YAE-RIEULMIEUM
-0x9648 0xBEBF # HANGUL SYLLABLE SSANGPIEUP-YAE-RIEULPIEUP
-0x9649 0xBEC0 # HANGUL SYLLABLE SSANGPIEUP-YAE-RIEULSIOS
-0x964A 0xBEC1 # HANGUL SYLLABLE SSANGPIEUP-YAE-RIEULTHIEUTH
-0x964B 0xBEC2 # HANGUL SYLLABLE SSANGPIEUP-YAE-RIEULPHIEUPH
-0x964C 0xBEC3 # HANGUL SYLLABLE SSANGPIEUP-YAE-RIEULHIEUH
-0x964D 0xBEC4 # HANGUL SYLLABLE SSANGPIEUP-YAE-MIEUM
-0x964E 0xBEC5 # HANGUL SYLLABLE SSANGPIEUP-YAE-PIEUP
-0x964F 0xBEC6 # HANGUL SYLLABLE SSANGPIEUP-YAE-PIEUPSIOS
-0x9650 0xBEC7 # HANGUL SYLLABLE SSANGPIEUP-YAE-SIOS
-0x9651 0xBEC8 # HANGUL SYLLABLE SSANGPIEUP-YAE-SSANGSIOS
-0x9652 0xBEC9 # HANGUL SYLLABLE SSANGPIEUP-YAE-IEUNG
-0x9653 0xBECA # HANGUL SYLLABLE SSANGPIEUP-YAE-CIEUC
-0x9654 0xBECB # HANGUL SYLLABLE SSANGPIEUP-YAE-CHIEUCH
-0x9655 0xBECC # HANGUL SYLLABLE SSANGPIEUP-YAE-KHIEUKH
-0x9656 0xBECD # HANGUL SYLLABLE SSANGPIEUP-YAE-THIEUTH
-0x9657 0xBECE # HANGUL SYLLABLE SSANGPIEUP-YAE-PHIEUPH
-0x9658 0xBECF # HANGUL SYLLABLE SSANGPIEUP-YAE-HIEUH
-0x9659 0xBED2 # HANGUL SYLLABLE SSANGPIEUP-EO-SSANGKIYEOK
-0x965A 0xBED3 # HANGUL SYLLABLE SSANGPIEUP-EO-KIYEOKSIOS
-0x9661 0xBED5 # HANGUL SYLLABLE SSANGPIEUP-EO-NIEUNCIEUC
-0x9662 0xBED6 # HANGUL SYLLABLE SSANGPIEUP-EO-NIEUNHIEUH
-0x9663 0xBED9 # HANGUL SYLLABLE SSANGPIEUP-EO-RIEULKIYEOK
-0x9664 0xBEDA # HANGUL SYLLABLE SSANGPIEUP-EO-RIEULMIEUM
-0x9665 0xBEDB # HANGUL SYLLABLE SSANGPIEUP-EO-RIEULPIEUP
-0x9666 0xBEDC # HANGUL SYLLABLE SSANGPIEUP-EO-RIEULSIOS
-0x9667 0xBEDD # HANGUL SYLLABLE SSANGPIEUP-EO-RIEULTHIEUTH
-0x9668 0xBEDE # HANGUL SYLLABLE SSANGPIEUP-EO-RIEULPHIEUPH
-0x9669 0xBEDF # HANGUL SYLLABLE SSANGPIEUP-EO-RIEULHIEUH
-0x966A 0xBEE1 # HANGUL SYLLABLE SSANGPIEUP-EO-PIEUP
-0x966B 0xBEE2 # HANGUL SYLLABLE SSANGPIEUP-EO-PIEUPSIOS
-0x966C 0xBEE6 # HANGUL SYLLABLE SSANGPIEUP-EO-CIEUC
-0x966D 0xBEE7 # HANGUL SYLLABLE SSANGPIEUP-EO-CHIEUCH
-0x966E 0xBEE8 # HANGUL SYLLABLE SSANGPIEUP-EO-KHIEUKH
-0x966F 0xBEE9 # HANGUL SYLLABLE SSANGPIEUP-EO-THIEUTH
-0x9670 0xBEEA # HANGUL SYLLABLE SSANGPIEUP-EO-PHIEUPH
-0x9671 0xBEEB # HANGUL SYLLABLE SSANGPIEUP-EO-HIEUH
-0x9672 0xBEED # HANGUL SYLLABLE SSANGPIEUP-E-KIYEOK
-0x9673 0xBEEE # HANGUL SYLLABLE SSANGPIEUP-E-SSANGKIYEOK
-0x9674 0xBEEF # HANGUL SYLLABLE SSANGPIEUP-E-KIYEOKSIOS
-0x9675 0xBEF0 # HANGUL SYLLABLE SSANGPIEUP-E-NIEUN
-0x9676 0xBEF1 # HANGUL SYLLABLE SSANGPIEUP-E-NIEUNCIEUC
-0x9677 0xBEF2 # HANGUL SYLLABLE SSANGPIEUP-E-NIEUNHIEUH
-0x9678 0xBEF3 # HANGUL SYLLABLE SSANGPIEUP-E-TIKEUT
-0x9679 0xBEF4 # HANGUL SYLLABLE SSANGPIEUP-E-RIEUL
-0x967A 0xBEF5 # HANGUL SYLLABLE SSANGPIEUP-E-RIEULKIYEOK
-0x9681 0xBEF6 # HANGUL SYLLABLE SSANGPIEUP-E-RIEULMIEUM
-0x9682 0xBEF7 # HANGUL SYLLABLE SSANGPIEUP-E-RIEULPIEUP
-0x9683 0xBEF8 # HANGUL SYLLABLE SSANGPIEUP-E-RIEULSIOS
-0x9684 0xBEF9 # HANGUL SYLLABLE SSANGPIEUP-E-RIEULTHIEUTH
-0x9685 0xBEFA # HANGUL SYLLABLE SSANGPIEUP-E-RIEULPHIEUPH
-0x9686 0xBEFB # HANGUL SYLLABLE SSANGPIEUP-E-RIEULHIEUH
-0x9687 0xBEFC # HANGUL SYLLABLE SSANGPIEUP-E-MIEUM
-0x9688 0xBEFD # HANGUL SYLLABLE SSANGPIEUP-E-PIEUP
-0x9689 0xBEFE # HANGUL SYLLABLE SSANGPIEUP-E-PIEUPSIOS
-0x968A 0xBEFF # HANGUL SYLLABLE SSANGPIEUP-E-SIOS
-0x968B 0xBF00 # HANGUL SYLLABLE SSANGPIEUP-E-SSANGSIOS
-0x968C 0xBF02 # HANGUL SYLLABLE SSANGPIEUP-E-CIEUC
-0x968D 0xBF03 # HANGUL SYLLABLE SSANGPIEUP-E-CHIEUCH
-0x968E 0xBF04 # HANGUL SYLLABLE SSANGPIEUP-E-KHIEUKH
-0x968F 0xBF05 # HANGUL SYLLABLE SSANGPIEUP-E-THIEUTH
-0x9690 0xBF06 # HANGUL SYLLABLE SSANGPIEUP-E-PHIEUPH
-0x9691 0xBF07 # HANGUL SYLLABLE SSANGPIEUP-E-HIEUH
-0x9692 0xBF0A # HANGUL SYLLABLE SSANGPIEUP-YEO-SSANGKIYEOK
-0x9693 0xBF0B # HANGUL SYLLABLE SSANGPIEUP-YEO-KIYEOKSIOS
-0x9694 0xBF0C # HANGUL SYLLABLE SSANGPIEUP-YEO-NIEUN
-0x9695 0xBF0D # HANGUL SYLLABLE SSANGPIEUP-YEO-NIEUNCIEUC
-0x9696 0xBF0E # HANGUL SYLLABLE SSANGPIEUP-YEO-NIEUNHIEUH
-0x9697 0xBF0F # HANGUL SYLLABLE SSANGPIEUP-YEO-TIKEUT
-0x9698 0xBF10 # HANGUL SYLLABLE SSANGPIEUP-YEO-RIEUL
-0x9699 0xBF11 # HANGUL SYLLABLE SSANGPIEUP-YEO-RIEULKIYEOK
-0x969A 0xBF12 # HANGUL SYLLABLE SSANGPIEUP-YEO-RIEULMIEUM
-0x969B 0xBF13 # HANGUL SYLLABLE SSANGPIEUP-YEO-RIEULPIEUP
-0x969C 0xBF14 # HANGUL SYLLABLE SSANGPIEUP-YEO-RIEULSIOS
-0x969D 0xBF15 # HANGUL SYLLABLE SSANGPIEUP-YEO-RIEULTHIEUTH
-0x969E 0xBF16 # HANGUL SYLLABLE SSANGPIEUP-YEO-RIEULPHIEUPH
-0x969F 0xBF17 # HANGUL SYLLABLE SSANGPIEUP-YEO-RIEULHIEUH
-0x96A0 0xBF1A # HANGUL SYLLABLE SSANGPIEUP-YEO-PIEUPSIOS
-0x96A1 0xBF1E # HANGUL SYLLABLE SSANGPIEUP-YEO-CIEUC
-0x96A2 0xBF1F # HANGUL SYLLABLE SSANGPIEUP-YEO-CHIEUCH
-0x96A3 0xBF20 # HANGUL SYLLABLE SSANGPIEUP-YEO-KHIEUKH
-0x96A4 0xBF21 # HANGUL SYLLABLE SSANGPIEUP-YEO-THIEUTH
-0x96A5 0xBF22 # HANGUL SYLLABLE SSANGPIEUP-YEO-PHIEUPH
-0x96A6 0xBF23 # HANGUL SYLLABLE SSANGPIEUP-YEO-HIEUH
-0x96A7 0xBF24 # HANGUL SYLLABLE SSANGPIEUP-YE
-0x96A8 0xBF25 # HANGUL SYLLABLE SSANGPIEUP-YE-KIYEOK
-0x96A9 0xBF26 # HANGUL SYLLABLE SSANGPIEUP-YE-SSANGKIYEOK
-0x96AA 0xBF27 # HANGUL SYLLABLE SSANGPIEUP-YE-KIYEOKSIOS
-0x96AB 0xBF28 # HANGUL SYLLABLE SSANGPIEUP-YE-NIEUN
-0x96AC 0xBF29 # HANGUL SYLLABLE SSANGPIEUP-YE-NIEUNCIEUC
-0x96AD 0xBF2A # HANGUL SYLLABLE SSANGPIEUP-YE-NIEUNHIEUH
-0x96AE 0xBF2B # HANGUL SYLLABLE SSANGPIEUP-YE-TIKEUT
-0x96AF 0xBF2C # HANGUL SYLLABLE SSANGPIEUP-YE-RIEUL
-0x96B0 0xBF2D # HANGUL SYLLABLE SSANGPIEUP-YE-RIEULKIYEOK
-0x96B1 0xBF2E # HANGUL SYLLABLE SSANGPIEUP-YE-RIEULMIEUM
-0x96B2 0xBF2F # HANGUL SYLLABLE SSANGPIEUP-YE-RIEULPIEUP
-0x96B3 0xBF30 # HANGUL SYLLABLE SSANGPIEUP-YE-RIEULSIOS
-0x96B4 0xBF31 # HANGUL SYLLABLE SSANGPIEUP-YE-RIEULTHIEUTH
-0x96B5 0xBF32 # HANGUL SYLLABLE SSANGPIEUP-YE-RIEULPHIEUPH
-0x96B6 0xBF33 # HANGUL SYLLABLE SSANGPIEUP-YE-RIEULHIEUH
-0x96B7 0xBF34 # HANGUL SYLLABLE SSANGPIEUP-YE-MIEUM
-0x96B8 0xBF35 # HANGUL SYLLABLE SSANGPIEUP-YE-PIEUP
-0x96B9 0xBF36 # HANGUL SYLLABLE SSANGPIEUP-YE-PIEUPSIOS
-0x96BA 0xBF37 # HANGUL SYLLABLE SSANGPIEUP-YE-SIOS
-0x96BB 0xBF38 # HANGUL SYLLABLE SSANGPIEUP-YE-SSANGSIOS
-0x96BC 0xBF39 # HANGUL SYLLABLE SSANGPIEUP-YE-IEUNG
-0x96BD 0xBF3A # HANGUL SYLLABLE SSANGPIEUP-YE-CIEUC
-0x96BE 0xBF3B # HANGUL SYLLABLE SSANGPIEUP-YE-CHIEUCH
-0x96BF 0xBF3C # HANGUL SYLLABLE SSANGPIEUP-YE-KHIEUKH
-0x96C0 0xBF3D # HANGUL SYLLABLE SSANGPIEUP-YE-THIEUTH
-0x96C1 0xBF3E # HANGUL SYLLABLE SSANGPIEUP-YE-PHIEUPH
-0x96C2 0xBF3F # HANGUL SYLLABLE SSANGPIEUP-YE-HIEUH
-0x96C3 0xBF42 # HANGUL SYLLABLE SSANGPIEUP-O-SSANGKIYEOK
-0x96C4 0xBF43 # HANGUL SYLLABLE SSANGPIEUP-O-KIYEOKSIOS
-0x96C5 0xBF45 # HANGUL SYLLABLE SSANGPIEUP-O-NIEUNCIEUC
-0x96C6 0xBF46 # HANGUL SYLLABLE SSANGPIEUP-O-NIEUNHIEUH
-0x96C7 0xBF47 # HANGUL SYLLABLE SSANGPIEUP-O-TIKEUT
-0x96C8 0xBF49 # HANGUL SYLLABLE SSANGPIEUP-O-RIEULKIYEOK
-0x96C9 0xBF4A # HANGUL SYLLABLE SSANGPIEUP-O-RIEULMIEUM
-0x96CA 0xBF4B # HANGUL SYLLABLE SSANGPIEUP-O-RIEULPIEUP
-0x96CB 0xBF4C # HANGUL SYLLABLE SSANGPIEUP-O-RIEULSIOS
-0x96CC 0xBF4D # HANGUL SYLLABLE SSANGPIEUP-O-RIEULTHIEUTH
-0x96CD 0xBF4E # HANGUL SYLLABLE SSANGPIEUP-O-RIEULPHIEUPH
-0x96CE 0xBF4F # HANGUL SYLLABLE SSANGPIEUP-O-RIEULHIEUH
-0x96CF 0xBF52 # HANGUL SYLLABLE SSANGPIEUP-O-PIEUPSIOS
-0x96D0 0xBF53 # HANGUL SYLLABLE SSANGPIEUP-O-SIOS
-0x96D1 0xBF54 # HANGUL SYLLABLE SSANGPIEUP-O-SSANGSIOS
-0x96D2 0xBF56 # HANGUL SYLLABLE SSANGPIEUP-O-CIEUC
-0x96D3 0xBF57 # HANGUL SYLLABLE SSANGPIEUP-O-CHIEUCH
-0x96D4 0xBF58 # HANGUL SYLLABLE SSANGPIEUP-O-KHIEUKH
-0x96D5 0xBF59 # HANGUL SYLLABLE SSANGPIEUP-O-THIEUTH
-0x96D6 0xBF5A # HANGUL SYLLABLE SSANGPIEUP-O-PHIEUPH
-0x96D7 0xBF5B # HANGUL SYLLABLE SSANGPIEUP-O-HIEUH
-0x96D8 0xBF5C # HANGUL SYLLABLE SSANGPIEUP-WA
-0x96D9 0xBF5D # HANGUL SYLLABLE SSANGPIEUP-WA-KIYEOK
-0x96DA 0xBF5E # HANGUL SYLLABLE SSANGPIEUP-WA-SSANGKIYEOK
-0x96DB 0xBF5F # HANGUL SYLLABLE SSANGPIEUP-WA-KIYEOKSIOS
-0x96DC 0xBF60 # HANGUL SYLLABLE SSANGPIEUP-WA-NIEUN
-0x96DD 0xBF61 # HANGUL SYLLABLE SSANGPIEUP-WA-NIEUNCIEUC
-0x96DE 0xBF62 # HANGUL SYLLABLE SSANGPIEUP-WA-NIEUNHIEUH
-0x96DF 0xBF63 # HANGUL SYLLABLE SSANGPIEUP-WA-TIKEUT
-0x96E0 0xBF64 # HANGUL SYLLABLE SSANGPIEUP-WA-RIEUL
-0x96E1 0xBF65 # HANGUL SYLLABLE SSANGPIEUP-WA-RIEULKIYEOK
-0x96E2 0xBF66 # HANGUL SYLLABLE SSANGPIEUP-WA-RIEULMIEUM
-0x96E3 0xBF67 # HANGUL SYLLABLE SSANGPIEUP-WA-RIEULPIEUP
-0x96E4 0xBF68 # HANGUL SYLLABLE SSANGPIEUP-WA-RIEULSIOS
-0x96E5 0xBF69 # HANGUL SYLLABLE SSANGPIEUP-WA-RIEULTHIEUTH
-0x96E6 0xBF6A # HANGUL SYLLABLE SSANGPIEUP-WA-RIEULPHIEUPH
-0x96E7 0xBF6B # HANGUL SYLLABLE SSANGPIEUP-WA-RIEULHIEUH
-0x96E8 0xBF6C # HANGUL SYLLABLE SSANGPIEUP-WA-MIEUM
-0x96E9 0xBF6D # HANGUL SYLLABLE SSANGPIEUP-WA-PIEUP
-0x96EA 0xBF6E # HANGUL SYLLABLE SSANGPIEUP-WA-PIEUPSIOS
-0x96EB 0xBF6F # HANGUL SYLLABLE SSANGPIEUP-WA-SIOS
-0x96EC 0xBF70 # HANGUL SYLLABLE SSANGPIEUP-WA-SSANGSIOS
-0x96ED 0xBF71 # HANGUL SYLLABLE SSANGPIEUP-WA-IEUNG
-0x96EE 0xBF72 # HANGUL SYLLABLE SSANGPIEUP-WA-CIEUC
-0x96EF 0xBF73 # HANGUL SYLLABLE SSANGPIEUP-WA-CHIEUCH
-0x96F0 0xBF74 # HANGUL SYLLABLE SSANGPIEUP-WA-KHIEUKH
-0x96F1 0xBF75 # HANGUL SYLLABLE SSANGPIEUP-WA-THIEUTH
-0x96F2 0xBF76 # HANGUL SYLLABLE SSANGPIEUP-WA-PHIEUPH
-0x96F3 0xBF77 # HANGUL SYLLABLE SSANGPIEUP-WA-HIEUH
-0x96F4 0xBF78 # HANGUL SYLLABLE SSANGPIEUP-WAE
-0x96F5 0xBF79 # HANGUL SYLLABLE SSANGPIEUP-WAE-KIYEOK
-0x96F6 0xBF7A # HANGUL SYLLABLE SSANGPIEUP-WAE-SSANGKIYEOK
-0x96F7 0xBF7B # HANGUL SYLLABLE SSANGPIEUP-WAE-KIYEOKSIOS
-0x96F8 0xBF7C # HANGUL SYLLABLE SSANGPIEUP-WAE-NIEUN
-0x96F9 0xBF7D # HANGUL SYLLABLE SSANGPIEUP-WAE-NIEUNCIEUC
-0x96FA 0xBF7E # HANGUL SYLLABLE SSANGPIEUP-WAE-NIEUNHIEUH
-0x96FB 0xBF7F # HANGUL SYLLABLE SSANGPIEUP-WAE-TIKEUT
-0x96FC 0xBF80 # HANGUL SYLLABLE SSANGPIEUP-WAE-RIEUL
-0x96FD 0xBF81 # HANGUL SYLLABLE SSANGPIEUP-WAE-RIEULKIYEOK
-0x96FE 0xBF82 # HANGUL SYLLABLE SSANGPIEUP-WAE-RIEULMIEUM
-0x9741 0xBF83 # HANGUL SYLLABLE SSANGPIEUP-WAE-RIEULPIEUP
-0x9742 0xBF84 # HANGUL SYLLABLE SSANGPIEUP-WAE-RIEULSIOS
-0x9743 0xBF85 # HANGUL SYLLABLE SSANGPIEUP-WAE-RIEULTHIEUTH
-0x9744 0xBF86 # HANGUL SYLLABLE SSANGPIEUP-WAE-RIEULPHIEUPH
-0x9745 0xBF87 # HANGUL SYLLABLE SSANGPIEUP-WAE-RIEULHIEUH
-0x9746 0xBF88 # HANGUL SYLLABLE SSANGPIEUP-WAE-MIEUM
-0x9747 0xBF89 # HANGUL SYLLABLE SSANGPIEUP-WAE-PIEUP
-0x9748 0xBF8A # HANGUL SYLLABLE SSANGPIEUP-WAE-PIEUPSIOS
-0x9749 0xBF8B # HANGUL SYLLABLE SSANGPIEUP-WAE-SIOS
-0x974A 0xBF8C # HANGUL SYLLABLE SSANGPIEUP-WAE-SSANGSIOS
-0x974B 0xBF8D # HANGUL SYLLABLE SSANGPIEUP-WAE-IEUNG
-0x974C 0xBF8E # HANGUL SYLLABLE SSANGPIEUP-WAE-CIEUC
-0x974D 0xBF8F # HANGUL SYLLABLE SSANGPIEUP-WAE-CHIEUCH
-0x974E 0xBF90 # HANGUL SYLLABLE SSANGPIEUP-WAE-KHIEUKH
-0x974F 0xBF91 # HANGUL SYLLABLE SSANGPIEUP-WAE-THIEUTH
-0x9750 0xBF92 # HANGUL SYLLABLE SSANGPIEUP-WAE-PHIEUPH
-0x9751 0xBF93 # HANGUL SYLLABLE SSANGPIEUP-WAE-HIEUH
-0x9752 0xBF95 # HANGUL SYLLABLE SSANGPIEUP-OE-KIYEOK
-0x9753 0xBF96 # HANGUL SYLLABLE SSANGPIEUP-OE-SSANGKIYEOK
-0x9754 0xBF97 # HANGUL SYLLABLE SSANGPIEUP-OE-KIYEOKSIOS
-0x9755 0xBF98 # HANGUL SYLLABLE SSANGPIEUP-OE-NIEUN
-0x9756 0xBF99 # HANGUL SYLLABLE SSANGPIEUP-OE-NIEUNCIEUC
-0x9757 0xBF9A # HANGUL SYLLABLE SSANGPIEUP-OE-NIEUNHIEUH
-0x9758 0xBF9B # HANGUL SYLLABLE SSANGPIEUP-OE-TIKEUT
-0x9759 0xBF9C # HANGUL SYLLABLE SSANGPIEUP-OE-RIEUL
-0x975A 0xBF9D # HANGUL SYLLABLE SSANGPIEUP-OE-RIEULKIYEOK
-0x9761 0xBF9E # HANGUL SYLLABLE SSANGPIEUP-OE-RIEULMIEUM
-0x9762 0xBF9F # HANGUL SYLLABLE SSANGPIEUP-OE-RIEULPIEUP
-0x9763 0xBFA0 # HANGUL SYLLABLE SSANGPIEUP-OE-RIEULSIOS
-0x9764 0xBFA1 # HANGUL SYLLABLE SSANGPIEUP-OE-RIEULTHIEUTH
-0x9765 0xBFA2 # HANGUL SYLLABLE SSANGPIEUP-OE-RIEULPHIEUPH
-0x9766 0xBFA3 # HANGUL SYLLABLE SSANGPIEUP-OE-RIEULHIEUH
-0x9767 0xBFA4 # HANGUL SYLLABLE SSANGPIEUP-OE-MIEUM
-0x9768 0xBFA5 # HANGUL SYLLABLE SSANGPIEUP-OE-PIEUP
-0x9769 0xBFA6 # HANGUL SYLLABLE SSANGPIEUP-OE-PIEUPSIOS
-0x976A 0xBFA7 # HANGUL SYLLABLE SSANGPIEUP-OE-SIOS
-0x976B 0xBFA8 # HANGUL SYLLABLE SSANGPIEUP-OE-SSANGSIOS
-0x976C 0xBFA9 # HANGUL SYLLABLE SSANGPIEUP-OE-IEUNG
-0x976D 0xBFAA # HANGUL SYLLABLE SSANGPIEUP-OE-CIEUC
-0x976E 0xBFAB # HANGUL SYLLABLE SSANGPIEUP-OE-CHIEUCH
-0x976F 0xBFAC # HANGUL SYLLABLE SSANGPIEUP-OE-KHIEUKH
-0x9770 0xBFAD # HANGUL SYLLABLE SSANGPIEUP-OE-THIEUTH
-0x9771 0xBFAE # HANGUL SYLLABLE SSANGPIEUP-OE-PHIEUPH
-0x9772 0xBFAF # HANGUL SYLLABLE SSANGPIEUP-OE-HIEUH
-0x9773 0xBFB1 # HANGUL SYLLABLE SSANGPIEUP-YO-KIYEOK
-0x9774 0xBFB2 # HANGUL SYLLABLE SSANGPIEUP-YO-SSANGKIYEOK
-0x9775 0xBFB3 # HANGUL SYLLABLE SSANGPIEUP-YO-KIYEOKSIOS
-0x9776 0xBFB4 # HANGUL SYLLABLE SSANGPIEUP-YO-NIEUN
-0x9777 0xBFB5 # HANGUL SYLLABLE SSANGPIEUP-YO-NIEUNCIEUC
-0x9778 0xBFB6 # HANGUL SYLLABLE SSANGPIEUP-YO-NIEUNHIEUH
-0x9779 0xBFB7 # HANGUL SYLLABLE SSANGPIEUP-YO-TIKEUT
-0x977A 0xBFB8 # HANGUL SYLLABLE SSANGPIEUP-YO-RIEUL
-0x9781 0xBFB9 # HANGUL SYLLABLE SSANGPIEUP-YO-RIEULKIYEOK
-0x9782 0xBFBA # HANGUL SYLLABLE SSANGPIEUP-YO-RIEULMIEUM
-0x9783 0xBFBB # HANGUL SYLLABLE SSANGPIEUP-YO-RIEULPIEUP
-0x9784 0xBFBC # HANGUL SYLLABLE SSANGPIEUP-YO-RIEULSIOS
-0x9785 0xBFBD # HANGUL SYLLABLE SSANGPIEUP-YO-RIEULTHIEUTH
-0x9786 0xBFBE # HANGUL SYLLABLE SSANGPIEUP-YO-RIEULPHIEUPH
-0x9787 0xBFBF # HANGUL SYLLABLE SSANGPIEUP-YO-RIEULHIEUH
-0x9788 0xBFC0 # HANGUL SYLLABLE SSANGPIEUP-YO-MIEUM
-0x9789 0xBFC1 # HANGUL SYLLABLE SSANGPIEUP-YO-PIEUP
-0x978A 0xBFC2 # HANGUL SYLLABLE SSANGPIEUP-YO-PIEUPSIOS
-0x978B 0xBFC3 # HANGUL SYLLABLE SSANGPIEUP-YO-SIOS
-0x978C 0xBFC4 # HANGUL SYLLABLE SSANGPIEUP-YO-SSANGSIOS
-0x978D 0xBFC6 # HANGUL SYLLABLE SSANGPIEUP-YO-CIEUC
-0x978E 0xBFC7 # HANGUL SYLLABLE SSANGPIEUP-YO-CHIEUCH
-0x978F 0xBFC8 # HANGUL SYLLABLE SSANGPIEUP-YO-KHIEUKH
-0x9790 0xBFC9 # HANGUL SYLLABLE SSANGPIEUP-YO-THIEUTH
-0x9791 0xBFCA # HANGUL SYLLABLE SSANGPIEUP-YO-PHIEUPH
-0x9792 0xBFCB # HANGUL SYLLABLE SSANGPIEUP-YO-HIEUH
-0x9793 0xBFCE # HANGUL SYLLABLE SSANGPIEUP-U-SSANGKIYEOK
-0x9794 0xBFCF # HANGUL SYLLABLE SSANGPIEUP-U-KIYEOKSIOS
-0x9795 0xBFD1 # HANGUL SYLLABLE SSANGPIEUP-U-NIEUNCIEUC
-0x9796 0xBFD2 # HANGUL SYLLABLE SSANGPIEUP-U-NIEUNHIEUH
-0x9797 0xBFD3 # HANGUL SYLLABLE SSANGPIEUP-U-TIKEUT
-0x9798 0xBFD5 # HANGUL SYLLABLE SSANGPIEUP-U-RIEULKIYEOK
-0x9799 0xBFD6 # HANGUL SYLLABLE SSANGPIEUP-U-RIEULMIEUM
-0x979A 0xBFD7 # HANGUL SYLLABLE SSANGPIEUP-U-RIEULPIEUP
-0x979B 0xBFD8 # HANGUL SYLLABLE SSANGPIEUP-U-RIEULSIOS
-0x979C 0xBFD9 # HANGUL SYLLABLE SSANGPIEUP-U-RIEULTHIEUTH
-0x979D 0xBFDA # HANGUL SYLLABLE SSANGPIEUP-U-RIEULPHIEUPH
-0x979E 0xBFDB # HANGUL SYLLABLE SSANGPIEUP-U-RIEULHIEUH
-0x979F 0xBFDD # HANGUL SYLLABLE SSANGPIEUP-U-PIEUP
-0x97A0 0xBFDE # HANGUL SYLLABLE SSANGPIEUP-U-PIEUPSIOS
-0x97A1 0xBFE0 # HANGUL SYLLABLE SSANGPIEUP-U-SSANGSIOS
-0x97A2 0xBFE2 # HANGUL SYLLABLE SSANGPIEUP-U-CIEUC
-0x97A3 0xBFE3 # HANGUL SYLLABLE SSANGPIEUP-U-CHIEUCH
-0x97A4 0xBFE4 # HANGUL SYLLABLE SSANGPIEUP-U-KHIEUKH
-0x97A5 0xBFE5 # HANGUL SYLLABLE SSANGPIEUP-U-THIEUTH
-0x97A6 0xBFE6 # HANGUL SYLLABLE SSANGPIEUP-U-PHIEUPH
-0x97A7 0xBFE7 # HANGUL SYLLABLE SSANGPIEUP-U-HIEUH
-0x97A8 0xBFE8 # HANGUL SYLLABLE SSANGPIEUP-WEO
-0x97A9 0xBFE9 # HANGUL SYLLABLE SSANGPIEUP-WEO-KIYEOK
-0x97AA 0xBFEA # HANGUL SYLLABLE SSANGPIEUP-WEO-SSANGKIYEOK
-0x97AB 0xBFEB # HANGUL SYLLABLE SSANGPIEUP-WEO-KIYEOKSIOS
-0x97AC 0xBFEC # HANGUL SYLLABLE SSANGPIEUP-WEO-NIEUN
-0x97AD 0xBFED # HANGUL SYLLABLE SSANGPIEUP-WEO-NIEUNCIEUC
-0x97AE 0xBFEE # HANGUL SYLLABLE SSANGPIEUP-WEO-NIEUNHIEUH
-0x97AF 0xBFEF # HANGUL SYLLABLE SSANGPIEUP-WEO-TIKEUT
-0x97B0 0xBFF0 # HANGUL SYLLABLE SSANGPIEUP-WEO-RIEUL
-0x97B1 0xBFF1 # HANGUL SYLLABLE SSANGPIEUP-WEO-RIEULKIYEOK
-0x97B2 0xBFF2 # HANGUL SYLLABLE SSANGPIEUP-WEO-RIEULMIEUM
-0x97B3 0xBFF3 # HANGUL SYLLABLE SSANGPIEUP-WEO-RIEULPIEUP
-0x97B4 0xBFF4 # HANGUL SYLLABLE SSANGPIEUP-WEO-RIEULSIOS
-0x97B5 0xBFF5 # HANGUL SYLLABLE SSANGPIEUP-WEO-RIEULTHIEUTH
-0x97B6 0xBFF6 # HANGUL SYLLABLE SSANGPIEUP-WEO-RIEULPHIEUPH
-0x97B7 0xBFF7 # HANGUL SYLLABLE SSANGPIEUP-WEO-RIEULHIEUH
-0x97B8 0xBFF8 # HANGUL SYLLABLE SSANGPIEUP-WEO-MIEUM
-0x97B9 0xBFF9 # HANGUL SYLLABLE SSANGPIEUP-WEO-PIEUP
-0x97BA 0xBFFA # HANGUL SYLLABLE SSANGPIEUP-WEO-PIEUPSIOS
-0x97BB 0xBFFB # HANGUL SYLLABLE SSANGPIEUP-WEO-SIOS
-0x97BC 0xBFFC # HANGUL SYLLABLE SSANGPIEUP-WEO-SSANGSIOS
-0x97BD 0xBFFD # HANGUL SYLLABLE SSANGPIEUP-WEO-IEUNG
-0x97BE 0xBFFE # HANGUL SYLLABLE SSANGPIEUP-WEO-CIEUC
-0x97BF 0xBFFF # HANGUL SYLLABLE SSANGPIEUP-WEO-CHIEUCH
-0x97C0 0xC000 # HANGUL SYLLABLE SSANGPIEUP-WEO-KHIEUKH
-0x97C1 0xC001 # HANGUL SYLLABLE SSANGPIEUP-WEO-THIEUTH
-0x97C2 0xC002 # HANGUL SYLLABLE SSANGPIEUP-WEO-PHIEUPH
-0x97C3 0xC003 # HANGUL SYLLABLE SSANGPIEUP-WEO-HIEUH
-0x97C4 0xC004 # HANGUL SYLLABLE SSANGPIEUP-WE
-0x97C5 0xC005 # HANGUL SYLLABLE SSANGPIEUP-WE-KIYEOK
-0x97C6 0xC006 # HANGUL SYLLABLE SSANGPIEUP-WE-SSANGKIYEOK
-0x97C7 0xC007 # HANGUL SYLLABLE SSANGPIEUP-WE-KIYEOKSIOS
-0x97C8 0xC008 # HANGUL SYLLABLE SSANGPIEUP-WE-NIEUN
-0x97C9 0xC009 # HANGUL SYLLABLE SSANGPIEUP-WE-NIEUNCIEUC
-0x97CA 0xC00A # HANGUL SYLLABLE SSANGPIEUP-WE-NIEUNHIEUH
-0x97CB 0xC00B # HANGUL SYLLABLE SSANGPIEUP-WE-TIKEUT
-0x97CC 0xC00C # HANGUL SYLLABLE SSANGPIEUP-WE-RIEUL
-0x97CD 0xC00D # HANGUL SYLLABLE SSANGPIEUP-WE-RIEULKIYEOK
-0x97CE 0xC00E # HANGUL SYLLABLE SSANGPIEUP-WE-RIEULMIEUM
-0x97CF 0xC00F # HANGUL SYLLABLE SSANGPIEUP-WE-RIEULPIEUP
-0x97D0 0xC010 # HANGUL SYLLABLE SSANGPIEUP-WE-RIEULSIOS
-0x97D1 0xC011 # HANGUL SYLLABLE SSANGPIEUP-WE-RIEULTHIEUTH
-0x97D2 0xC012 # HANGUL SYLLABLE SSANGPIEUP-WE-RIEULPHIEUPH
-0x97D3 0xC013 # HANGUL SYLLABLE SSANGPIEUP-WE-RIEULHIEUH
-0x97D4 0xC014 # HANGUL SYLLABLE SSANGPIEUP-WE-MIEUM
-0x97D5 0xC015 # HANGUL SYLLABLE SSANGPIEUP-WE-PIEUP
-0x97D6 0xC016 # HANGUL SYLLABLE SSANGPIEUP-WE-PIEUPSIOS
-0x97D7 0xC017 # HANGUL SYLLABLE SSANGPIEUP-WE-SIOS
-0x97D8 0xC018 # HANGUL SYLLABLE SSANGPIEUP-WE-SSANGSIOS
-0x97D9 0xC019 # HANGUL SYLLABLE SSANGPIEUP-WE-IEUNG
-0x97DA 0xC01A # HANGUL SYLLABLE SSANGPIEUP-WE-CIEUC
-0x97DB 0xC01B # HANGUL SYLLABLE SSANGPIEUP-WE-CHIEUCH
-0x97DC 0xC01C # HANGUL SYLLABLE SSANGPIEUP-WE-KHIEUKH
-0x97DD 0xC01D # HANGUL SYLLABLE SSANGPIEUP-WE-THIEUTH
-0x97DE 0xC01E # HANGUL SYLLABLE SSANGPIEUP-WE-PHIEUPH
-0x97DF 0xC01F # HANGUL SYLLABLE SSANGPIEUP-WE-HIEUH
-0x97E0 0xC020 # HANGUL SYLLABLE SSANGPIEUP-WI
-0x97E1 0xC021 # HANGUL SYLLABLE SSANGPIEUP-WI-KIYEOK
-0x97E2 0xC022 # HANGUL SYLLABLE SSANGPIEUP-WI-SSANGKIYEOK
-0x97E3 0xC023 # HANGUL SYLLABLE SSANGPIEUP-WI-KIYEOKSIOS
-0x97E4 0xC024 # HANGUL SYLLABLE SSANGPIEUP-WI-NIEUN
-0x97E5 0xC025 # HANGUL SYLLABLE SSANGPIEUP-WI-NIEUNCIEUC
-0x97E6 0xC026 # HANGUL SYLLABLE SSANGPIEUP-WI-NIEUNHIEUH
-0x97E7 0xC027 # HANGUL SYLLABLE SSANGPIEUP-WI-TIKEUT
-0x97E8 0xC028 # HANGUL SYLLABLE SSANGPIEUP-WI-RIEUL
-0x97E9 0xC029 # HANGUL SYLLABLE SSANGPIEUP-WI-RIEULKIYEOK
-0x97EA 0xC02A # HANGUL SYLLABLE SSANGPIEUP-WI-RIEULMIEUM
-0x97EB 0xC02B # HANGUL SYLLABLE SSANGPIEUP-WI-RIEULPIEUP
-0x97EC 0xC02C # HANGUL SYLLABLE SSANGPIEUP-WI-RIEULSIOS
-0x97ED 0xC02D # HANGUL SYLLABLE SSANGPIEUP-WI-RIEULTHIEUTH
-0x97EE 0xC02E # HANGUL SYLLABLE SSANGPIEUP-WI-RIEULPHIEUPH
-0x97EF 0xC02F # HANGUL SYLLABLE SSANGPIEUP-WI-RIEULHIEUH
-0x97F0 0xC030 # HANGUL SYLLABLE SSANGPIEUP-WI-MIEUM
-0x97F1 0xC031 # HANGUL SYLLABLE SSANGPIEUP-WI-PIEUP
-0x97F2 0xC032 # HANGUL SYLLABLE SSANGPIEUP-WI-PIEUPSIOS
-0x97F3 0xC033 # HANGUL SYLLABLE SSANGPIEUP-WI-SIOS
-0x97F4 0xC034 # HANGUL SYLLABLE SSANGPIEUP-WI-SSANGSIOS
-0x97F5 0xC035 # HANGUL SYLLABLE SSANGPIEUP-WI-IEUNG
-0x97F6 0xC036 # HANGUL SYLLABLE SSANGPIEUP-WI-CIEUC
-0x97F7 0xC037 # HANGUL SYLLABLE SSANGPIEUP-WI-CHIEUCH
-0x97F8 0xC038 # HANGUL SYLLABLE SSANGPIEUP-WI-KHIEUKH
-0x97F9 0xC039 # HANGUL SYLLABLE SSANGPIEUP-WI-THIEUTH
-0x97FA 0xC03A # HANGUL SYLLABLE SSANGPIEUP-WI-PHIEUPH
-0x97FB 0xC03B # HANGUL SYLLABLE SSANGPIEUP-WI-HIEUH
-0x97FC 0xC03D # HANGUL SYLLABLE SSANGPIEUP-YU-KIYEOK
-0x97FD 0xC03E # HANGUL SYLLABLE SSANGPIEUP-YU-SSANGKIYEOK
-0x97FE 0xC03F # HANGUL SYLLABLE SSANGPIEUP-YU-KIYEOKSIOS
-0x9841 0xC040 # HANGUL SYLLABLE SSANGPIEUP-YU-NIEUN
-0x9842 0xC041 # HANGUL SYLLABLE SSANGPIEUP-YU-NIEUNCIEUC
-0x9843 0xC042 # HANGUL SYLLABLE SSANGPIEUP-YU-NIEUNHIEUH
-0x9844 0xC043 # HANGUL SYLLABLE SSANGPIEUP-YU-TIKEUT
-0x9845 0xC044 # HANGUL SYLLABLE SSANGPIEUP-YU-RIEUL
-0x9846 0xC045 # HANGUL SYLLABLE SSANGPIEUP-YU-RIEULKIYEOK
-0x9847 0xC046 # HANGUL SYLLABLE SSANGPIEUP-YU-RIEULMIEUM
-0x9848 0xC047 # HANGUL SYLLABLE SSANGPIEUP-YU-RIEULPIEUP
-0x9849 0xC048 # HANGUL SYLLABLE SSANGPIEUP-YU-RIEULSIOS
-0x984A 0xC049 # HANGUL SYLLABLE SSANGPIEUP-YU-RIEULTHIEUTH
-0x984B 0xC04A # HANGUL SYLLABLE SSANGPIEUP-YU-RIEULPHIEUPH
-0x984C 0xC04B # HANGUL SYLLABLE SSANGPIEUP-YU-RIEULHIEUH
-0x984D 0xC04C # HANGUL SYLLABLE SSANGPIEUP-YU-MIEUM
-0x984E 0xC04D # HANGUL SYLLABLE SSANGPIEUP-YU-PIEUP
-0x984F 0xC04E # HANGUL SYLLABLE SSANGPIEUP-YU-PIEUPSIOS
-0x9850 0xC04F # HANGUL SYLLABLE SSANGPIEUP-YU-SIOS
-0x9851 0xC050 # HANGUL SYLLABLE SSANGPIEUP-YU-SSANGSIOS
-0x9852 0xC052 # HANGUL SYLLABLE SSANGPIEUP-YU-CIEUC
-0x9853 0xC053 # HANGUL SYLLABLE SSANGPIEUP-YU-CHIEUCH
-0x9854 0xC054 # HANGUL SYLLABLE SSANGPIEUP-YU-KHIEUKH
-0x9855 0xC055 # HANGUL SYLLABLE SSANGPIEUP-YU-THIEUTH
-0x9856 0xC056 # HANGUL SYLLABLE SSANGPIEUP-YU-PHIEUPH
-0x9857 0xC057 # HANGUL SYLLABLE SSANGPIEUP-YU-HIEUH
-0x9858 0xC059 # HANGUL SYLLABLE SSANGPIEUP-EU-KIYEOK
-0x9859 0xC05A # HANGUL SYLLABLE SSANGPIEUP-EU-SSANGKIYEOK
-0x985A 0xC05B # HANGUL SYLLABLE SSANGPIEUP-EU-KIYEOKSIOS
-0x9861 0xC05D # HANGUL SYLLABLE SSANGPIEUP-EU-NIEUNCIEUC
-0x9862 0xC05E # HANGUL SYLLABLE SSANGPIEUP-EU-NIEUNHIEUH
-0x9863 0xC05F # HANGUL SYLLABLE SSANGPIEUP-EU-TIKEUT
-0x9864 0xC061 # HANGUL SYLLABLE SSANGPIEUP-EU-RIEULKIYEOK
-0x9865 0xC062 # HANGUL SYLLABLE SSANGPIEUP-EU-RIEULMIEUM
-0x9866 0xC063 # HANGUL SYLLABLE SSANGPIEUP-EU-RIEULPIEUP
-0x9867 0xC064 # HANGUL SYLLABLE SSANGPIEUP-EU-RIEULSIOS
-0x9868 0xC065 # HANGUL SYLLABLE SSANGPIEUP-EU-RIEULTHIEUTH
-0x9869 0xC066 # HANGUL SYLLABLE SSANGPIEUP-EU-RIEULPHIEUPH
-0x986A 0xC067 # HANGUL SYLLABLE SSANGPIEUP-EU-RIEULHIEUH
-0x986B 0xC06A # HANGUL SYLLABLE SSANGPIEUP-EU-PIEUPSIOS
-0x986C 0xC06B # HANGUL SYLLABLE SSANGPIEUP-EU-SIOS
-0x986D 0xC06C # HANGUL SYLLABLE SSANGPIEUP-EU-SSANGSIOS
-0x986E 0xC06D # HANGUL SYLLABLE SSANGPIEUP-EU-IEUNG
-0x986F 0xC06E # HANGUL SYLLABLE SSANGPIEUP-EU-CIEUC
-0x9870 0xC06F # HANGUL SYLLABLE SSANGPIEUP-EU-CHIEUCH
-0x9871 0xC070 # HANGUL SYLLABLE SSANGPIEUP-EU-KHIEUKH
-0x9872 0xC071 # HANGUL SYLLABLE SSANGPIEUP-EU-THIEUTH
-0x9873 0xC072 # HANGUL SYLLABLE SSANGPIEUP-EU-PHIEUPH
-0x9874 0xC073 # HANGUL SYLLABLE SSANGPIEUP-EU-HIEUH
-0x9875 0xC074 # HANGUL SYLLABLE SSANGPIEUP-YI
-0x9876 0xC075 # HANGUL SYLLABLE SSANGPIEUP-YI-KIYEOK
-0x9877 0xC076 # HANGUL SYLLABLE SSANGPIEUP-YI-SSANGKIYEOK
-0x9878 0xC077 # HANGUL SYLLABLE SSANGPIEUP-YI-KIYEOKSIOS
-0x9879 0xC078 # HANGUL SYLLABLE SSANGPIEUP-YI-NIEUN
-0x987A 0xC079 # HANGUL SYLLABLE SSANGPIEUP-YI-NIEUNCIEUC
-0x9881 0xC07A # HANGUL SYLLABLE SSANGPIEUP-YI-NIEUNHIEUH
-0x9882 0xC07B # HANGUL SYLLABLE SSANGPIEUP-YI-TIKEUT
-0x9883 0xC07C # HANGUL SYLLABLE SSANGPIEUP-YI-RIEUL
-0x9884 0xC07D # HANGUL SYLLABLE SSANGPIEUP-YI-RIEULKIYEOK
-0x9885 0xC07E # HANGUL SYLLABLE SSANGPIEUP-YI-RIEULMIEUM
-0x9886 0xC07F # HANGUL SYLLABLE SSANGPIEUP-YI-RIEULPIEUP
-0x9887 0xC080 # HANGUL SYLLABLE SSANGPIEUP-YI-RIEULSIOS
-0x9888 0xC081 # HANGUL SYLLABLE SSANGPIEUP-YI-RIEULTHIEUTH
-0x9889 0xC082 # HANGUL SYLLABLE SSANGPIEUP-YI-RIEULPHIEUPH
-0x988A 0xC083 # HANGUL SYLLABLE SSANGPIEUP-YI-RIEULHIEUH
-0x988B 0xC084 # HANGUL SYLLABLE SSANGPIEUP-YI-MIEUM
-0x988C 0xC085 # HANGUL SYLLABLE SSANGPIEUP-YI-PIEUP
-0x988D 0xC086 # HANGUL SYLLABLE SSANGPIEUP-YI-PIEUPSIOS
-0x988E 0xC087 # HANGUL SYLLABLE SSANGPIEUP-YI-SIOS
-0x988F 0xC088 # HANGUL SYLLABLE SSANGPIEUP-YI-SSANGSIOS
-0x9890 0xC089 # HANGUL SYLLABLE SSANGPIEUP-YI-IEUNG
-0x9891 0xC08A # HANGUL SYLLABLE SSANGPIEUP-YI-CIEUC
-0x9892 0xC08B # HANGUL SYLLABLE SSANGPIEUP-YI-CHIEUCH
-0x9893 0xC08C # HANGUL SYLLABLE SSANGPIEUP-YI-KHIEUKH
-0x9894 0xC08D # HANGUL SYLLABLE SSANGPIEUP-YI-THIEUTH
-0x9895 0xC08E # HANGUL SYLLABLE SSANGPIEUP-YI-PHIEUPH
-0x9896 0xC08F # HANGUL SYLLABLE SSANGPIEUP-YI-HIEUH
-0x9897 0xC092 # HANGUL SYLLABLE SSANGPIEUP-I-SSANGKIYEOK
-0x9898 0xC093 # HANGUL SYLLABLE SSANGPIEUP-I-KIYEOKSIOS
-0x9899 0xC095 # HANGUL SYLLABLE SSANGPIEUP-I-NIEUNCIEUC
-0x989A 0xC096 # HANGUL SYLLABLE SSANGPIEUP-I-NIEUNHIEUH
-0x989B 0xC097 # HANGUL SYLLABLE SSANGPIEUP-I-TIKEUT
-0x989C 0xC099 # HANGUL SYLLABLE SSANGPIEUP-I-RIEULKIYEOK
-0x989D 0xC09A # HANGUL SYLLABLE SSANGPIEUP-I-RIEULMIEUM
-0x989E 0xC09B # HANGUL SYLLABLE SSANGPIEUP-I-RIEULPIEUP
-0x989F 0xC09C # HANGUL SYLLABLE SSANGPIEUP-I-RIEULSIOS
-0x98A0 0xC09D # HANGUL SYLLABLE SSANGPIEUP-I-RIEULTHIEUTH
-0x98A1 0xC09E # HANGUL SYLLABLE SSANGPIEUP-I-RIEULPHIEUPH
-0x98A2 0xC09F # HANGUL SYLLABLE SSANGPIEUP-I-RIEULHIEUH
-0x98A3 0xC0A2 # HANGUL SYLLABLE SSANGPIEUP-I-PIEUPSIOS
-0x98A4 0xC0A4 # HANGUL SYLLABLE SSANGPIEUP-I-SSANGSIOS
-0x98A5 0xC0A6 # HANGUL SYLLABLE SSANGPIEUP-I-CIEUC
-0x98A6 0xC0A7 # HANGUL SYLLABLE SSANGPIEUP-I-CHIEUCH
-0x98A7 0xC0A8 # HANGUL SYLLABLE SSANGPIEUP-I-KHIEUKH
-0x98A8 0xC0A9 # HANGUL SYLLABLE SSANGPIEUP-I-THIEUTH
-0x98A9 0xC0AA # HANGUL SYLLABLE SSANGPIEUP-I-PHIEUPH
-0x98AA 0xC0AB # HANGUL SYLLABLE SSANGPIEUP-I-HIEUH
-0x98AB 0xC0AE # HANGUL SYLLABLE SIOS-A-SSANGKIYEOK
-0x98AC 0xC0B1 # HANGUL SYLLABLE SIOS-A-NIEUNCIEUC
-0x98AD 0xC0B2 # HANGUL SYLLABLE SIOS-A-NIEUNHIEUH
-0x98AE 0xC0B7 # HANGUL SYLLABLE SIOS-A-RIEULPIEUP
-0x98AF 0xC0B8 # HANGUL SYLLABLE SIOS-A-RIEULSIOS
-0x98B0 0xC0B9 # HANGUL SYLLABLE SIOS-A-RIEULTHIEUTH
-0x98B1 0xC0BA # HANGUL SYLLABLE SIOS-A-RIEULPHIEUPH
-0x98B2 0xC0BB # HANGUL SYLLABLE SIOS-A-RIEULHIEUH
-0x98B3 0xC0BE # HANGUL SYLLABLE SIOS-A-PIEUPSIOS
-0x98B4 0xC0C2 # HANGUL SYLLABLE SIOS-A-CIEUC
-0x98B5 0xC0C3 # HANGUL SYLLABLE SIOS-A-CHIEUCH
-0x98B6 0xC0C4 # HANGUL SYLLABLE SIOS-A-KHIEUKH
-0x98B7 0xC0C6 # HANGUL SYLLABLE SIOS-A-PHIEUPH
-0x98B8 0xC0C7 # HANGUL SYLLABLE SIOS-A-HIEUH
-0x98B9 0xC0CA # HANGUL SYLLABLE SIOS-AE-SSANGKIYEOK
-0x98BA 0xC0CB # HANGUL SYLLABLE SIOS-AE-KIYEOKSIOS
-0x98BB 0xC0CD # HANGUL SYLLABLE SIOS-AE-NIEUNCIEUC
-0x98BC 0xC0CE # HANGUL SYLLABLE SIOS-AE-NIEUNHIEUH
-0x98BD 0xC0CF # HANGUL SYLLABLE SIOS-AE-TIKEUT
-0x98BE 0xC0D1 # HANGUL SYLLABLE SIOS-AE-RIEULKIYEOK
-0x98BF 0xC0D2 # HANGUL SYLLABLE SIOS-AE-RIEULMIEUM
-0x98C0 0xC0D3 # HANGUL SYLLABLE SIOS-AE-RIEULPIEUP
-0x98C1 0xC0D4 # HANGUL SYLLABLE SIOS-AE-RIEULSIOS
-0x98C2 0xC0D5 # HANGUL SYLLABLE SIOS-AE-RIEULTHIEUTH
-0x98C3 0xC0D6 # HANGUL SYLLABLE SIOS-AE-RIEULPHIEUPH
-0x98C4 0xC0D7 # HANGUL SYLLABLE SIOS-AE-RIEULHIEUH
-0x98C5 0xC0DA # HANGUL SYLLABLE SIOS-AE-PIEUPSIOS
-0x98C6 0xC0DE # HANGUL SYLLABLE SIOS-AE-CIEUC
-0x98C7 0xC0DF # HANGUL SYLLABLE SIOS-AE-CHIEUCH
-0x98C8 0xC0E0 # HANGUL SYLLABLE SIOS-AE-KHIEUKH
-0x98C9 0xC0E1 # HANGUL SYLLABLE SIOS-AE-THIEUTH
-0x98CA 0xC0E2 # HANGUL SYLLABLE SIOS-AE-PHIEUPH
-0x98CB 0xC0E3 # HANGUL SYLLABLE SIOS-AE-HIEUH
-0x98CC 0xC0E6 # HANGUL SYLLABLE SIOS-YA-SSANGKIYEOK
-0x98CD 0xC0E7 # HANGUL SYLLABLE SIOS-YA-KIYEOKSIOS
-0x98CE 0xC0E9 # HANGUL SYLLABLE SIOS-YA-NIEUNCIEUC
-0x98CF 0xC0EA # HANGUL SYLLABLE SIOS-YA-NIEUNHIEUH
-0x98D0 0xC0EB # HANGUL SYLLABLE SIOS-YA-TIKEUT
-0x98D1 0xC0ED # HANGUL SYLLABLE SIOS-YA-RIEULKIYEOK
-0x98D2 0xC0EE # HANGUL SYLLABLE SIOS-YA-RIEULMIEUM
-0x98D3 0xC0EF # HANGUL SYLLABLE SIOS-YA-RIEULPIEUP
-0x98D4 0xC0F0 # HANGUL SYLLABLE SIOS-YA-RIEULSIOS
-0x98D5 0xC0F1 # HANGUL SYLLABLE SIOS-YA-RIEULTHIEUTH
-0x98D6 0xC0F2 # HANGUL SYLLABLE SIOS-YA-RIEULPHIEUPH
-0x98D7 0xC0F3 # HANGUL SYLLABLE SIOS-YA-RIEULHIEUH
-0x98D8 0xC0F6 # HANGUL SYLLABLE SIOS-YA-PIEUPSIOS
-0x98D9 0xC0F8 # HANGUL SYLLABLE SIOS-YA-SSANGSIOS
-0x98DA 0xC0FA # HANGUL SYLLABLE SIOS-YA-CIEUC
-0x98DB 0xC0FB # HANGUL SYLLABLE SIOS-YA-CHIEUCH
-0x98DC 0xC0FC # HANGUL SYLLABLE SIOS-YA-KHIEUKH
-0x98DD 0xC0FD # HANGUL SYLLABLE SIOS-YA-THIEUTH
-0x98DE 0xC0FE # HANGUL SYLLABLE SIOS-YA-PHIEUPH
-0x98DF 0xC0FF # HANGUL SYLLABLE SIOS-YA-HIEUH
-0x98E0 0xC101 # HANGUL SYLLABLE SIOS-YAE-KIYEOK
-0x98E1 0xC102 # HANGUL SYLLABLE SIOS-YAE-SSANGKIYEOK
-0x98E2 0xC103 # HANGUL SYLLABLE SIOS-YAE-KIYEOKSIOS
-0x98E3 0xC105 # HANGUL SYLLABLE SIOS-YAE-NIEUNCIEUC
-0x98E4 0xC106 # HANGUL SYLLABLE SIOS-YAE-NIEUNHIEUH
-0x98E5 0xC107 # HANGUL SYLLABLE SIOS-YAE-TIKEUT
-0x98E6 0xC109 # HANGUL SYLLABLE SIOS-YAE-RIEULKIYEOK
-0x98E7 0xC10A # HANGUL SYLLABLE SIOS-YAE-RIEULMIEUM
-0x98E8 0xC10B # HANGUL SYLLABLE SIOS-YAE-RIEULPIEUP
-0x98E9 0xC10C # HANGUL SYLLABLE SIOS-YAE-RIEULSIOS
-0x98EA 0xC10D # HANGUL SYLLABLE SIOS-YAE-RIEULTHIEUTH
-0x98EB 0xC10E # HANGUL SYLLABLE SIOS-YAE-RIEULPHIEUPH
-0x98EC 0xC10F # HANGUL SYLLABLE SIOS-YAE-RIEULHIEUH
-0x98ED 0xC111 # HANGUL SYLLABLE SIOS-YAE-PIEUP
-0x98EE 0xC112 # HANGUL SYLLABLE SIOS-YAE-PIEUPSIOS
-0x98EF 0xC113 # HANGUL SYLLABLE SIOS-YAE-SIOS
-0x98F0 0xC114 # HANGUL SYLLABLE SIOS-YAE-SSANGSIOS
-0x98F1 0xC116 # HANGUL SYLLABLE SIOS-YAE-CIEUC
-0x98F2 0xC117 # HANGUL SYLLABLE SIOS-YAE-CHIEUCH
-0x98F3 0xC118 # HANGUL SYLLABLE SIOS-YAE-KHIEUKH
-0x98F4 0xC119 # HANGUL SYLLABLE SIOS-YAE-THIEUTH
-0x98F5 0xC11A # HANGUL SYLLABLE SIOS-YAE-PHIEUPH
-0x98F6 0xC11B # HANGUL SYLLABLE SIOS-YAE-HIEUH
-0x98F7 0xC121 # HANGUL SYLLABLE SIOS-EO-NIEUNCIEUC
-0x98F8 0xC122 # HANGUL SYLLABLE SIOS-EO-NIEUNHIEUH
-0x98F9 0xC125 # HANGUL SYLLABLE SIOS-EO-RIEULKIYEOK
-0x98FA 0xC128 # HANGUL SYLLABLE SIOS-EO-RIEULSIOS
-0x98FB 0xC129 # HANGUL SYLLABLE SIOS-EO-RIEULTHIEUTH
-0x98FC 0xC12A # HANGUL SYLLABLE SIOS-EO-RIEULPHIEUPH
-0x98FD 0xC12B # HANGUL SYLLABLE SIOS-EO-RIEULHIEUH
-0x98FE 0xC12E # HANGUL SYLLABLE SIOS-EO-PIEUPSIOS
-0x9941 0xC132 # HANGUL SYLLABLE SIOS-EO-CIEUC
-0x9942 0xC133 # HANGUL SYLLABLE SIOS-EO-CHIEUCH
-0x9943 0xC134 # HANGUL SYLLABLE SIOS-EO-KHIEUKH
-0x9944 0xC135 # HANGUL SYLLABLE SIOS-EO-THIEUTH
-0x9945 0xC137 # HANGUL SYLLABLE SIOS-EO-HIEUH
-0x9946 0xC13A # HANGUL SYLLABLE SIOS-E-SSANGKIYEOK
-0x9947 0xC13B # HANGUL SYLLABLE SIOS-E-KIYEOKSIOS
-0x9948 0xC13D # HANGUL SYLLABLE SIOS-E-NIEUNCIEUC
-0x9949 0xC13E # HANGUL SYLLABLE SIOS-E-NIEUNHIEUH
-0x994A 0xC13F # HANGUL SYLLABLE SIOS-E-TIKEUT
-0x994B 0xC141 # HANGUL SYLLABLE SIOS-E-RIEULKIYEOK
-0x994C 0xC142 # HANGUL SYLLABLE SIOS-E-RIEULMIEUM
-0x994D 0xC143 # HANGUL SYLLABLE SIOS-E-RIEULPIEUP
-0x994E 0xC144 # HANGUL SYLLABLE SIOS-E-RIEULSIOS
-0x994F 0xC145 # HANGUL SYLLABLE SIOS-E-RIEULTHIEUTH
-0x9950 0xC146 # HANGUL SYLLABLE SIOS-E-RIEULPHIEUPH
-0x9951 0xC147 # HANGUL SYLLABLE SIOS-E-RIEULHIEUH
-0x9952 0xC14A # HANGUL SYLLABLE SIOS-E-PIEUPSIOS
-0x9953 0xC14E # HANGUL SYLLABLE SIOS-E-CIEUC
-0x9954 0xC14F # HANGUL SYLLABLE SIOS-E-CHIEUCH
-0x9955 0xC150 # HANGUL SYLLABLE SIOS-E-KHIEUKH
-0x9956 0xC151 # HANGUL SYLLABLE SIOS-E-THIEUTH
-0x9957 0xC152 # HANGUL SYLLABLE SIOS-E-PHIEUPH
-0x9958 0xC153 # HANGUL SYLLABLE SIOS-E-HIEUH
-0x9959 0xC156 # HANGUL SYLLABLE SIOS-YEO-SSANGKIYEOK
-0x995A 0xC157 # HANGUL SYLLABLE SIOS-YEO-KIYEOKSIOS
-0x9961 0xC159 # HANGUL SYLLABLE SIOS-YEO-NIEUNCIEUC
-0x9962 0xC15A # HANGUL SYLLABLE SIOS-YEO-NIEUNHIEUH
-0x9963 0xC15B # HANGUL SYLLABLE SIOS-YEO-TIKEUT
-0x9964 0xC15D # HANGUL SYLLABLE SIOS-YEO-RIEULKIYEOK
-0x9965 0xC15E # HANGUL SYLLABLE SIOS-YEO-RIEULMIEUM
-0x9966 0xC15F # HANGUL SYLLABLE SIOS-YEO-RIEULPIEUP
-0x9967 0xC160 # HANGUL SYLLABLE SIOS-YEO-RIEULSIOS
-0x9968 0xC161 # HANGUL SYLLABLE SIOS-YEO-RIEULTHIEUTH
-0x9969 0xC162 # HANGUL SYLLABLE SIOS-YEO-RIEULPHIEUPH
-0x996A 0xC163 # HANGUL SYLLABLE SIOS-YEO-RIEULHIEUH
-0x996B 0xC166 # HANGUL SYLLABLE SIOS-YEO-PIEUPSIOS
-0x996C 0xC16A # HANGUL SYLLABLE SIOS-YEO-CIEUC
-0x996D 0xC16B # HANGUL SYLLABLE SIOS-YEO-CHIEUCH
-0x996E 0xC16C # HANGUL SYLLABLE SIOS-YEO-KHIEUKH
-0x996F 0xC16D # HANGUL SYLLABLE SIOS-YEO-THIEUTH
-0x9970 0xC16E # HANGUL SYLLABLE SIOS-YEO-PHIEUPH
-0x9971 0xC16F # HANGUL SYLLABLE SIOS-YEO-HIEUH
-0x9972 0xC171 # HANGUL SYLLABLE SIOS-YE-KIYEOK
-0x9973 0xC172 # HANGUL SYLLABLE SIOS-YE-SSANGKIYEOK
-0x9974 0xC173 # HANGUL SYLLABLE SIOS-YE-KIYEOKSIOS
-0x9975 0xC175 # HANGUL SYLLABLE SIOS-YE-NIEUNCIEUC
-0x9976 0xC176 # HANGUL SYLLABLE SIOS-YE-NIEUNHIEUH
-0x9977 0xC177 # HANGUL SYLLABLE SIOS-YE-TIKEUT
-0x9978 0xC179 # HANGUL SYLLABLE SIOS-YE-RIEULKIYEOK
-0x9979 0xC17A # HANGUL SYLLABLE SIOS-YE-RIEULMIEUM
-0x997A 0xC17B # HANGUL SYLLABLE SIOS-YE-RIEULPIEUP
-0x9981 0xC17C # HANGUL SYLLABLE SIOS-YE-RIEULSIOS
-0x9982 0xC17D # HANGUL SYLLABLE SIOS-YE-RIEULTHIEUTH
-0x9983 0xC17E # HANGUL SYLLABLE SIOS-YE-RIEULPHIEUPH
-0x9984 0xC17F # HANGUL SYLLABLE SIOS-YE-RIEULHIEUH
-0x9985 0xC180 # HANGUL SYLLABLE SIOS-YE-MIEUM
-0x9986 0xC181 # HANGUL SYLLABLE SIOS-YE-PIEUP
-0x9987 0xC182 # HANGUL SYLLABLE SIOS-YE-PIEUPSIOS
-0x9988 0xC183 # HANGUL SYLLABLE SIOS-YE-SIOS
-0x9989 0xC184 # HANGUL SYLLABLE SIOS-YE-SSANGSIOS
-0x998A 0xC186 # HANGUL SYLLABLE SIOS-YE-CIEUC
-0x998B 0xC187 # HANGUL SYLLABLE SIOS-YE-CHIEUCH
-0x998C 0xC188 # HANGUL SYLLABLE SIOS-YE-KHIEUKH
-0x998D 0xC189 # HANGUL SYLLABLE SIOS-YE-THIEUTH
-0x998E 0xC18A # HANGUL SYLLABLE SIOS-YE-PHIEUPH
-0x998F 0xC18B # HANGUL SYLLABLE SIOS-YE-HIEUH
-0x9990 0xC18F # HANGUL SYLLABLE SIOS-O-KIYEOKSIOS
-0x9991 0xC191 # HANGUL SYLLABLE SIOS-O-NIEUNCIEUC
-0x9992 0xC192 # HANGUL SYLLABLE SIOS-O-NIEUNHIEUH
-0x9993 0xC193 # HANGUL SYLLABLE SIOS-O-TIKEUT
-0x9994 0xC195 # HANGUL SYLLABLE SIOS-O-RIEULKIYEOK
-0x9995 0xC197 # HANGUL SYLLABLE SIOS-O-RIEULPIEUP
-0x9996 0xC198 # HANGUL SYLLABLE SIOS-O-RIEULSIOS
-0x9997 0xC199 # HANGUL SYLLABLE SIOS-O-RIEULTHIEUTH
-0x9998 0xC19A # HANGUL SYLLABLE SIOS-O-RIEULPHIEUPH
-0x9999 0xC19B # HANGUL SYLLABLE SIOS-O-RIEULHIEUH
-0x999A 0xC19E # HANGUL SYLLABLE SIOS-O-PIEUPSIOS
-0x999B 0xC1A0 # HANGUL SYLLABLE SIOS-O-SSANGSIOS
-0x999C 0xC1A2 # HANGUL SYLLABLE SIOS-O-CIEUC
-0x999D 0xC1A3 # HANGUL SYLLABLE SIOS-O-CHIEUCH
-0x999E 0xC1A4 # HANGUL SYLLABLE SIOS-O-KHIEUKH
-0x999F 0xC1A6 # HANGUL SYLLABLE SIOS-O-PHIEUPH
-0x99A0 0xC1A7 # HANGUL SYLLABLE SIOS-O-HIEUH
-0x99A1 0xC1AA # HANGUL SYLLABLE SIOS-WA-SSANGKIYEOK
-0x99A2 0xC1AB # HANGUL SYLLABLE SIOS-WA-KIYEOKSIOS
-0x99A3 0xC1AD # HANGUL SYLLABLE SIOS-WA-NIEUNCIEUC
-0x99A4 0xC1AE # HANGUL SYLLABLE SIOS-WA-NIEUNHIEUH
-0x99A5 0xC1AF # HANGUL SYLLABLE SIOS-WA-TIKEUT
-0x99A6 0xC1B1 # HANGUL SYLLABLE SIOS-WA-RIEULKIYEOK
-0x99A7 0xC1B2 # HANGUL SYLLABLE SIOS-WA-RIEULMIEUM
-0x99A8 0xC1B3 # HANGUL SYLLABLE SIOS-WA-RIEULPIEUP
-0x99A9 0xC1B4 # HANGUL SYLLABLE SIOS-WA-RIEULSIOS
-0x99AA 0xC1B5 # HANGUL SYLLABLE SIOS-WA-RIEULTHIEUTH
-0x99AB 0xC1B6 # HANGUL SYLLABLE SIOS-WA-RIEULPHIEUPH
-0x99AC 0xC1B7 # HANGUL SYLLABLE SIOS-WA-RIEULHIEUH
-0x99AD 0xC1B8 # HANGUL SYLLABLE SIOS-WA-MIEUM
-0x99AE 0xC1B9 # HANGUL SYLLABLE SIOS-WA-PIEUP
-0x99AF 0xC1BA # HANGUL SYLLABLE SIOS-WA-PIEUPSIOS
-0x99B0 0xC1BB # HANGUL SYLLABLE SIOS-WA-SIOS
-0x99B1 0xC1BC # HANGUL SYLLABLE SIOS-WA-SSANGSIOS
-0x99B2 0xC1BE # HANGUL SYLLABLE SIOS-WA-CIEUC
-0x99B3 0xC1BF # HANGUL SYLLABLE SIOS-WA-CHIEUCH
-0x99B4 0xC1C0 # HANGUL SYLLABLE SIOS-WA-KHIEUKH
-0x99B5 0xC1C1 # HANGUL SYLLABLE SIOS-WA-THIEUTH
-0x99B6 0xC1C2 # HANGUL SYLLABLE SIOS-WA-PHIEUPH
-0x99B7 0xC1C3 # HANGUL SYLLABLE SIOS-WA-HIEUH
-0x99B8 0xC1C5 # HANGUL SYLLABLE SIOS-WAE-KIYEOK
-0x99B9 0xC1C6 # HANGUL SYLLABLE SIOS-WAE-SSANGKIYEOK
-0x99BA 0xC1C7 # HANGUL SYLLABLE SIOS-WAE-KIYEOKSIOS
-0x99BB 0xC1C9 # HANGUL SYLLABLE SIOS-WAE-NIEUNCIEUC
-0x99BC 0xC1CA # HANGUL SYLLABLE SIOS-WAE-NIEUNHIEUH
-0x99BD 0xC1CB # HANGUL SYLLABLE SIOS-WAE-TIKEUT
-0x99BE 0xC1CD # HANGUL SYLLABLE SIOS-WAE-RIEULKIYEOK
-0x99BF 0xC1CE # HANGUL SYLLABLE SIOS-WAE-RIEULMIEUM
-0x99C0 0xC1CF # HANGUL SYLLABLE SIOS-WAE-RIEULPIEUP
-0x99C1 0xC1D0 # HANGUL SYLLABLE SIOS-WAE-RIEULSIOS
-0x99C2 0xC1D1 # HANGUL SYLLABLE SIOS-WAE-RIEULTHIEUTH
-0x99C3 0xC1D2 # HANGUL SYLLABLE SIOS-WAE-RIEULPHIEUPH
-0x99C4 0xC1D3 # HANGUL SYLLABLE SIOS-WAE-RIEULHIEUH
-0x99C5 0xC1D5 # HANGUL SYLLABLE SIOS-WAE-PIEUP
-0x99C6 0xC1D6 # HANGUL SYLLABLE SIOS-WAE-PIEUPSIOS
-0x99C7 0xC1D9 # HANGUL SYLLABLE SIOS-WAE-IEUNG
-0x99C8 0xC1DA # HANGUL SYLLABLE SIOS-WAE-CIEUC
-0x99C9 0xC1DB # HANGUL SYLLABLE SIOS-WAE-CHIEUCH
-0x99CA 0xC1DC # HANGUL SYLLABLE SIOS-WAE-KHIEUKH
-0x99CB 0xC1DD # HANGUL SYLLABLE SIOS-WAE-THIEUTH
-0x99CC 0xC1DE # HANGUL SYLLABLE SIOS-WAE-PHIEUPH
-0x99CD 0xC1DF # HANGUL SYLLABLE SIOS-WAE-HIEUH
-0x99CE 0xC1E1 # HANGUL SYLLABLE SIOS-OE-KIYEOK
-0x99CF 0xC1E2 # HANGUL SYLLABLE SIOS-OE-SSANGKIYEOK
-0x99D0 0xC1E3 # HANGUL SYLLABLE SIOS-OE-KIYEOKSIOS
-0x99D1 0xC1E5 # HANGUL SYLLABLE SIOS-OE-NIEUNCIEUC
-0x99D2 0xC1E6 # HANGUL SYLLABLE SIOS-OE-NIEUNHIEUH
-0x99D3 0xC1E7 # HANGUL SYLLABLE SIOS-OE-TIKEUT
-0x99D4 0xC1E9 # HANGUL SYLLABLE SIOS-OE-RIEULKIYEOK
-0x99D5 0xC1EA # HANGUL SYLLABLE SIOS-OE-RIEULMIEUM
-0x99D6 0xC1EB # HANGUL SYLLABLE SIOS-OE-RIEULPIEUP
-0x99D7 0xC1EC # HANGUL SYLLABLE SIOS-OE-RIEULSIOS
-0x99D8 0xC1ED # HANGUL SYLLABLE SIOS-OE-RIEULTHIEUTH
-0x99D9 0xC1EE # HANGUL SYLLABLE SIOS-OE-RIEULPHIEUPH
-0x99DA 0xC1EF # HANGUL SYLLABLE SIOS-OE-RIEULHIEUH
-0x99DB 0xC1F2 # HANGUL SYLLABLE SIOS-OE-PIEUPSIOS
-0x99DC 0xC1F4 # HANGUL SYLLABLE SIOS-OE-SSANGSIOS
-0x99DD 0xC1F5 # HANGUL SYLLABLE SIOS-OE-IEUNG
-0x99DE 0xC1F6 # HANGUL SYLLABLE SIOS-OE-CIEUC
-0x99DF 0xC1F7 # HANGUL SYLLABLE SIOS-OE-CHIEUCH
-0x99E0 0xC1F8 # HANGUL SYLLABLE SIOS-OE-KHIEUKH
-0x99E1 0xC1F9 # HANGUL SYLLABLE SIOS-OE-THIEUTH
-0x99E2 0xC1FA # HANGUL SYLLABLE SIOS-OE-PHIEUPH
-0x99E3 0xC1FB # HANGUL SYLLABLE SIOS-OE-HIEUH
-0x99E4 0xC1FE # HANGUL SYLLABLE SIOS-YO-SSANGKIYEOK
-0x99E5 0xC1FF # HANGUL SYLLABLE SIOS-YO-KIYEOKSIOS
-0x99E6 0xC201 # HANGUL SYLLABLE SIOS-YO-NIEUNCIEUC
-0x99E7 0xC202 # HANGUL SYLLABLE SIOS-YO-NIEUNHIEUH
-0x99E8 0xC203 # HANGUL SYLLABLE SIOS-YO-TIKEUT
-0x99E9 0xC205 # HANGUL SYLLABLE SIOS-YO-RIEULKIYEOK
-0x99EA 0xC206 # HANGUL SYLLABLE SIOS-YO-RIEULMIEUM
-0x99EB 0xC207 # HANGUL SYLLABLE SIOS-YO-RIEULPIEUP
-0x99EC 0xC208 # HANGUL SYLLABLE SIOS-YO-RIEULSIOS
-0x99ED 0xC209 # HANGUL SYLLABLE SIOS-YO-RIEULTHIEUTH
-0x99EE 0xC20A # HANGUL SYLLABLE SIOS-YO-RIEULPHIEUPH
-0x99EF 0xC20B # HANGUL SYLLABLE SIOS-YO-RIEULHIEUH
-0x99F0 0xC20E # HANGUL SYLLABLE SIOS-YO-PIEUPSIOS
-0x99F1 0xC210 # HANGUL SYLLABLE SIOS-YO-SSANGSIOS
-0x99F2 0xC212 # HANGUL SYLLABLE SIOS-YO-CIEUC
-0x99F3 0xC213 # HANGUL SYLLABLE SIOS-YO-CHIEUCH
-0x99F4 0xC214 # HANGUL SYLLABLE SIOS-YO-KHIEUKH
-0x99F5 0xC215 # HANGUL SYLLABLE SIOS-YO-THIEUTH
-0x99F6 0xC216 # HANGUL SYLLABLE SIOS-YO-PHIEUPH
-0x99F7 0xC217 # HANGUL SYLLABLE SIOS-YO-HIEUH
-0x99F8 0xC21A # HANGUL SYLLABLE SIOS-U-SSANGKIYEOK
-0x99F9 0xC21B # HANGUL SYLLABLE SIOS-U-KIYEOKSIOS
-0x99FA 0xC21D # HANGUL SYLLABLE SIOS-U-NIEUNCIEUC
-0x99FB 0xC21E # HANGUL SYLLABLE SIOS-U-NIEUNHIEUH
-0x99FC 0xC221 # HANGUL SYLLABLE SIOS-U-RIEULKIYEOK
-0x99FD 0xC222 # HANGUL SYLLABLE SIOS-U-RIEULMIEUM
-0x99FE 0xC223 # HANGUL SYLLABLE SIOS-U-RIEULPIEUP
-0x9A41 0xC224 # HANGUL SYLLABLE SIOS-U-RIEULSIOS
-0x9A42 0xC225 # HANGUL SYLLABLE SIOS-U-RIEULTHIEUTH
-0x9A43 0xC226 # HANGUL SYLLABLE SIOS-U-RIEULPHIEUPH
-0x9A44 0xC227 # HANGUL SYLLABLE SIOS-U-RIEULHIEUH
-0x9A45 0xC22A # HANGUL SYLLABLE SIOS-U-PIEUPSIOS
-0x9A46 0xC22C # HANGUL SYLLABLE SIOS-U-SSANGSIOS
-0x9A47 0xC22E # HANGUL SYLLABLE SIOS-U-CIEUC
-0x9A48 0xC230 # HANGUL SYLLABLE SIOS-U-KHIEUKH
-0x9A49 0xC233 # HANGUL SYLLABLE SIOS-U-HIEUH
-0x9A4A 0xC235 # HANGUL SYLLABLE SIOS-WEO-KIYEOK
-0x9A4B 0xC236 # HANGUL SYLLABLE SIOS-WEO-SSANGKIYEOK
-0x9A4C 0xC237 # HANGUL SYLLABLE SIOS-WEO-KIYEOKSIOS
-0x9A4D 0xC238 # HANGUL SYLLABLE SIOS-WEO-NIEUN
-0x9A4E 0xC239 # HANGUL SYLLABLE SIOS-WEO-NIEUNCIEUC
-0x9A4F 0xC23A # HANGUL SYLLABLE SIOS-WEO-NIEUNHIEUH
-0x9A50 0xC23B # HANGUL SYLLABLE SIOS-WEO-TIKEUT
-0x9A51 0xC23C # HANGUL SYLLABLE SIOS-WEO-RIEUL
-0x9A52 0xC23D # HANGUL SYLLABLE SIOS-WEO-RIEULKIYEOK
-0x9A53 0xC23E # HANGUL SYLLABLE SIOS-WEO-RIEULMIEUM
-0x9A54 0xC23F # HANGUL SYLLABLE SIOS-WEO-RIEULPIEUP
-0x9A55 0xC240 # HANGUL SYLLABLE SIOS-WEO-RIEULSIOS
-0x9A56 0xC241 # HANGUL SYLLABLE SIOS-WEO-RIEULTHIEUTH
-0x9A57 0xC242 # HANGUL SYLLABLE SIOS-WEO-RIEULPHIEUPH
-0x9A58 0xC243 # HANGUL SYLLABLE SIOS-WEO-RIEULHIEUH
-0x9A59 0xC244 # HANGUL SYLLABLE SIOS-WEO-MIEUM
-0x9A5A 0xC245 # HANGUL SYLLABLE SIOS-WEO-PIEUP
-0x9A61 0xC246 # HANGUL SYLLABLE SIOS-WEO-PIEUPSIOS
-0x9A62 0xC247 # HANGUL SYLLABLE SIOS-WEO-SIOS
-0x9A63 0xC249 # HANGUL SYLLABLE SIOS-WEO-IEUNG
-0x9A64 0xC24A # HANGUL SYLLABLE SIOS-WEO-CIEUC
-0x9A65 0xC24B # HANGUL SYLLABLE SIOS-WEO-CHIEUCH
-0x9A66 0xC24C # HANGUL SYLLABLE SIOS-WEO-KHIEUKH
-0x9A67 0xC24D # HANGUL SYLLABLE SIOS-WEO-THIEUTH
-0x9A68 0xC24E # HANGUL SYLLABLE SIOS-WEO-PHIEUPH
-0x9A69 0xC24F # HANGUL SYLLABLE SIOS-WEO-HIEUH
-0x9A6A 0xC252 # HANGUL SYLLABLE SIOS-WE-SSANGKIYEOK
-0x9A6B 0xC253 # HANGUL SYLLABLE SIOS-WE-KIYEOKSIOS
-0x9A6C 0xC255 # HANGUL SYLLABLE SIOS-WE-NIEUNCIEUC
-0x9A6D 0xC256 # HANGUL SYLLABLE SIOS-WE-NIEUNHIEUH
-0x9A6E 0xC257 # HANGUL SYLLABLE SIOS-WE-TIKEUT
-0x9A6F 0xC259 # HANGUL SYLLABLE SIOS-WE-RIEULKIYEOK
-0x9A70 0xC25A # HANGUL SYLLABLE SIOS-WE-RIEULMIEUM
-0x9A71 0xC25B # HANGUL SYLLABLE SIOS-WE-RIEULPIEUP
-0x9A72 0xC25C # HANGUL SYLLABLE SIOS-WE-RIEULSIOS
-0x9A73 0xC25D # HANGUL SYLLABLE SIOS-WE-RIEULTHIEUTH
-0x9A74 0xC25E # HANGUL SYLLABLE SIOS-WE-RIEULPHIEUPH
-0x9A75 0xC25F # HANGUL SYLLABLE SIOS-WE-RIEULHIEUH
-0x9A76 0xC261 # HANGUL SYLLABLE SIOS-WE-PIEUP
-0x9A77 0xC262 # HANGUL SYLLABLE SIOS-WE-PIEUPSIOS
-0x9A78 0xC263 # HANGUL SYLLABLE SIOS-WE-SIOS
-0x9A79 0xC264 # HANGUL SYLLABLE SIOS-WE-SSANGSIOS
-0x9A7A 0xC266 # HANGUL SYLLABLE SIOS-WE-CIEUC
-0x9A81 0xC267 # HANGUL SYLLABLE SIOS-WE-CHIEUCH
-0x9A82 0xC268 # HANGUL SYLLABLE SIOS-WE-KHIEUKH
-0x9A83 0xC269 # HANGUL SYLLABLE SIOS-WE-THIEUTH
-0x9A84 0xC26A # HANGUL SYLLABLE SIOS-WE-PHIEUPH
-0x9A85 0xC26B # HANGUL SYLLABLE SIOS-WE-HIEUH
-0x9A86 0xC26E # HANGUL SYLLABLE SIOS-WI-SSANGKIYEOK
-0x9A87 0xC26F # HANGUL SYLLABLE SIOS-WI-KIYEOKSIOS
-0x9A88 0xC271 # HANGUL SYLLABLE SIOS-WI-NIEUNCIEUC
-0x9A89 0xC272 # HANGUL SYLLABLE SIOS-WI-NIEUNHIEUH
-0x9A8A 0xC273 # HANGUL SYLLABLE SIOS-WI-TIKEUT
-0x9A8B 0xC275 # HANGUL SYLLABLE SIOS-WI-RIEULKIYEOK
-0x9A8C 0xC276 # HANGUL SYLLABLE SIOS-WI-RIEULMIEUM
-0x9A8D 0xC277 # HANGUL SYLLABLE SIOS-WI-RIEULPIEUP
-0x9A8E 0xC278 # HANGUL SYLLABLE SIOS-WI-RIEULSIOS
-0x9A8F 0xC279 # HANGUL SYLLABLE SIOS-WI-RIEULTHIEUTH
-0x9A90 0xC27A # HANGUL SYLLABLE SIOS-WI-RIEULPHIEUPH
-0x9A91 0xC27B # HANGUL SYLLABLE SIOS-WI-RIEULHIEUH
-0x9A92 0xC27E # HANGUL SYLLABLE SIOS-WI-PIEUPSIOS
-0x9A93 0xC280 # HANGUL SYLLABLE SIOS-WI-SSANGSIOS
-0x9A94 0xC282 # HANGUL SYLLABLE SIOS-WI-CIEUC
-0x9A95 0xC283 # HANGUL SYLLABLE SIOS-WI-CHIEUCH
-0x9A96 0xC284 # HANGUL SYLLABLE SIOS-WI-KHIEUKH
-0x9A97 0xC285 # HANGUL SYLLABLE SIOS-WI-THIEUTH
-0x9A98 0xC286 # HANGUL SYLLABLE SIOS-WI-PHIEUPH
-0x9A99 0xC287 # HANGUL SYLLABLE SIOS-WI-HIEUH
-0x9A9A 0xC28A # HANGUL SYLLABLE SIOS-YU-SSANGKIYEOK
-0x9A9B 0xC28B # HANGUL SYLLABLE SIOS-YU-KIYEOKSIOS
-0x9A9C 0xC28C # HANGUL SYLLABLE SIOS-YU-NIEUN
-0x9A9D 0xC28D # HANGUL SYLLABLE SIOS-YU-NIEUNCIEUC
-0x9A9E 0xC28E # HANGUL SYLLABLE SIOS-YU-NIEUNHIEUH
-0x9A9F 0xC28F # HANGUL SYLLABLE SIOS-YU-TIKEUT
-0x9AA0 0xC291 # HANGUL SYLLABLE SIOS-YU-RIEULKIYEOK
-0x9AA1 0xC292 # HANGUL SYLLABLE SIOS-YU-RIEULMIEUM
-0x9AA2 0xC293 # HANGUL SYLLABLE SIOS-YU-RIEULPIEUP
-0x9AA3 0xC294 # HANGUL SYLLABLE SIOS-YU-RIEULSIOS
-0x9AA4 0xC295 # HANGUL SYLLABLE SIOS-YU-RIEULTHIEUTH
-0x9AA5 0xC296 # HANGUL SYLLABLE SIOS-YU-RIEULPHIEUPH
-0x9AA6 0xC297 # HANGUL SYLLABLE SIOS-YU-RIEULHIEUH
-0x9AA7 0xC299 # HANGUL SYLLABLE SIOS-YU-PIEUP
-0x9AA8 0xC29A # HANGUL SYLLABLE SIOS-YU-PIEUPSIOS
-0x9AA9 0xC29C # HANGUL SYLLABLE SIOS-YU-SSANGSIOS
-0x9AAA 0xC29E # HANGUL SYLLABLE SIOS-YU-CIEUC
-0x9AAB 0xC29F # HANGUL SYLLABLE SIOS-YU-CHIEUCH
-0x9AAC 0xC2A0 # HANGUL SYLLABLE SIOS-YU-KHIEUKH
-0x9AAD 0xC2A1 # HANGUL SYLLABLE SIOS-YU-THIEUTH
-0x9AAE 0xC2A2 # HANGUL SYLLABLE SIOS-YU-PHIEUPH
-0x9AAF 0xC2A3 # HANGUL SYLLABLE SIOS-YU-HIEUH
-0x9AB0 0xC2A6 # HANGUL SYLLABLE SIOS-EU-SSANGKIYEOK
-0x9AB1 0xC2A7 # HANGUL SYLLABLE SIOS-EU-KIYEOKSIOS
-0x9AB2 0xC2A9 # HANGUL SYLLABLE SIOS-EU-NIEUNCIEUC
-0x9AB3 0xC2AA # HANGUL SYLLABLE SIOS-EU-NIEUNHIEUH
-0x9AB4 0xC2AB # HANGUL SYLLABLE SIOS-EU-TIKEUT
-0x9AB5 0xC2AE # HANGUL SYLLABLE SIOS-EU-RIEULMIEUM
-0x9AB6 0xC2AF # HANGUL SYLLABLE SIOS-EU-RIEULPIEUP
-0x9AB7 0xC2B0 # HANGUL SYLLABLE SIOS-EU-RIEULSIOS
-0x9AB8 0xC2B1 # HANGUL SYLLABLE SIOS-EU-RIEULTHIEUTH
-0x9AB9 0xC2B2 # HANGUL SYLLABLE SIOS-EU-RIEULPHIEUPH
-0x9ABA 0xC2B3 # HANGUL SYLLABLE SIOS-EU-RIEULHIEUH
-0x9ABB 0xC2B6 # HANGUL SYLLABLE SIOS-EU-PIEUPSIOS
-0x9ABC 0xC2B8 # HANGUL SYLLABLE SIOS-EU-SSANGSIOS
-0x9ABD 0xC2BA # HANGUL SYLLABLE SIOS-EU-CIEUC
-0x9ABE 0xC2BB # HANGUL SYLLABLE SIOS-EU-CHIEUCH
-0x9ABF 0xC2BC # HANGUL SYLLABLE SIOS-EU-KHIEUKH
-0x9AC0 0xC2BD # HANGUL SYLLABLE SIOS-EU-THIEUTH
-0x9AC1 0xC2BE # HANGUL SYLLABLE SIOS-EU-PHIEUPH
-0x9AC2 0xC2BF # HANGUL SYLLABLE SIOS-EU-HIEUH
-0x9AC3 0xC2C0 # HANGUL SYLLABLE SIOS-YI
-0x9AC4 0xC2C1 # HANGUL SYLLABLE SIOS-YI-KIYEOK
-0x9AC5 0xC2C2 # HANGUL SYLLABLE SIOS-YI-SSANGKIYEOK
-0x9AC6 0xC2C3 # HANGUL SYLLABLE SIOS-YI-KIYEOKSIOS
-0x9AC7 0xC2C4 # HANGUL SYLLABLE SIOS-YI-NIEUN
-0x9AC8 0xC2C5 # HANGUL SYLLABLE SIOS-YI-NIEUNCIEUC
-0x9AC9 0xC2C6 # HANGUL SYLLABLE SIOS-YI-NIEUNHIEUH
-0x9ACA 0xC2C7 # HANGUL SYLLABLE SIOS-YI-TIKEUT
-0x9ACB 0xC2C8 # HANGUL SYLLABLE SIOS-YI-RIEUL
-0x9ACC 0xC2C9 # HANGUL SYLLABLE SIOS-YI-RIEULKIYEOK
-0x9ACD 0xC2CA # HANGUL SYLLABLE SIOS-YI-RIEULMIEUM
-0x9ACE 0xC2CB # HANGUL SYLLABLE SIOS-YI-RIEULPIEUP
-0x9ACF 0xC2CC # HANGUL SYLLABLE SIOS-YI-RIEULSIOS
-0x9AD0 0xC2CD # HANGUL SYLLABLE SIOS-YI-RIEULTHIEUTH
-0x9AD1 0xC2CE # HANGUL SYLLABLE SIOS-YI-RIEULPHIEUPH
-0x9AD2 0xC2CF # HANGUL SYLLABLE SIOS-YI-RIEULHIEUH
-0x9AD3 0xC2D0 # HANGUL SYLLABLE SIOS-YI-MIEUM
-0x9AD4 0xC2D1 # HANGUL SYLLABLE SIOS-YI-PIEUP
-0x9AD5 0xC2D2 # HANGUL SYLLABLE SIOS-YI-PIEUPSIOS
-0x9AD6 0xC2D3 # HANGUL SYLLABLE SIOS-YI-SIOS
-0x9AD7 0xC2D4 # HANGUL SYLLABLE SIOS-YI-SSANGSIOS
-0x9AD8 0xC2D5 # HANGUL SYLLABLE SIOS-YI-IEUNG
-0x9AD9 0xC2D6 # HANGUL SYLLABLE SIOS-YI-CIEUC
-0x9ADA 0xC2D7 # HANGUL SYLLABLE SIOS-YI-CHIEUCH
-0x9ADB 0xC2D8 # HANGUL SYLLABLE SIOS-YI-KHIEUKH
-0x9ADC 0xC2D9 # HANGUL SYLLABLE SIOS-YI-THIEUTH
-0x9ADD 0xC2DA # HANGUL SYLLABLE SIOS-YI-PHIEUPH
-0x9ADE 0xC2DB # HANGUL SYLLABLE SIOS-YI-HIEUH
-0x9ADF 0xC2DE # HANGUL SYLLABLE SIOS-I-SSANGKIYEOK
-0x9AE0 0xC2DF # HANGUL SYLLABLE SIOS-I-KIYEOKSIOS
-0x9AE1 0xC2E1 # HANGUL SYLLABLE SIOS-I-NIEUNCIEUC
-0x9AE2 0xC2E2 # HANGUL SYLLABLE SIOS-I-NIEUNHIEUH
-0x9AE3 0xC2E5 # HANGUL SYLLABLE SIOS-I-RIEULKIYEOK
-0x9AE4 0xC2E6 # HANGUL SYLLABLE SIOS-I-RIEULMIEUM
-0x9AE5 0xC2E7 # HANGUL SYLLABLE SIOS-I-RIEULPIEUP
-0x9AE6 0xC2E8 # HANGUL SYLLABLE SIOS-I-RIEULSIOS
-0x9AE7 0xC2E9 # HANGUL SYLLABLE SIOS-I-RIEULTHIEUTH
-0x9AE8 0xC2EA # HANGUL SYLLABLE SIOS-I-RIEULPHIEUPH
-0x9AE9 0xC2EE # HANGUL SYLLABLE SIOS-I-PIEUPSIOS
-0x9AEA 0xC2F0 # HANGUL SYLLABLE SIOS-I-SSANGSIOS
-0x9AEB 0xC2F2 # HANGUL SYLLABLE SIOS-I-CIEUC
-0x9AEC 0xC2F3 # HANGUL SYLLABLE SIOS-I-CHIEUCH
-0x9AED 0xC2F4 # HANGUL SYLLABLE SIOS-I-KHIEUKH
-0x9AEE 0xC2F5 # HANGUL SYLLABLE SIOS-I-THIEUTH
-0x9AEF 0xC2F7 # HANGUL SYLLABLE SIOS-I-HIEUH
-0x9AF0 0xC2FA # HANGUL SYLLABLE SSANGSIOS-A-SSANGKIYEOK
-0x9AF1 0xC2FD # HANGUL SYLLABLE SSANGSIOS-A-NIEUNCIEUC
-0x9AF2 0xC2FE # HANGUL SYLLABLE SSANGSIOS-A-NIEUNHIEUH
-0x9AF3 0xC2FF # HANGUL SYLLABLE SSANGSIOS-A-TIKEUT
-0x9AF4 0xC301 # HANGUL SYLLABLE SSANGSIOS-A-RIEULKIYEOK
-0x9AF5 0xC302 # HANGUL SYLLABLE SSANGSIOS-A-RIEULMIEUM
-0x9AF6 0xC303 # HANGUL SYLLABLE SSANGSIOS-A-RIEULPIEUP
-0x9AF7 0xC304 # HANGUL SYLLABLE SSANGSIOS-A-RIEULSIOS
-0x9AF8 0xC305 # HANGUL SYLLABLE SSANGSIOS-A-RIEULTHIEUTH
-0x9AF9 0xC306 # HANGUL SYLLABLE SSANGSIOS-A-RIEULPHIEUPH
-0x9AFA 0xC307 # HANGUL SYLLABLE SSANGSIOS-A-RIEULHIEUH
-0x9AFB 0xC30A # HANGUL SYLLABLE SSANGSIOS-A-PIEUPSIOS
-0x9AFC 0xC30B # HANGUL SYLLABLE SSANGSIOS-A-SIOS
-0x9AFD 0xC30E # HANGUL SYLLABLE SSANGSIOS-A-CIEUC
-0x9AFE 0xC30F # HANGUL SYLLABLE SSANGSIOS-A-CHIEUCH
-0x9B41 0xC310 # HANGUL SYLLABLE SSANGSIOS-A-KHIEUKH
-0x9B42 0xC311 # HANGUL SYLLABLE SSANGSIOS-A-THIEUTH
-0x9B43 0xC312 # HANGUL SYLLABLE SSANGSIOS-A-PHIEUPH
-0x9B44 0xC316 # HANGUL SYLLABLE SSANGSIOS-AE-SSANGKIYEOK
-0x9B45 0xC317 # HANGUL SYLLABLE SSANGSIOS-AE-KIYEOKSIOS
-0x9B46 0xC319 # HANGUL SYLLABLE SSANGSIOS-AE-NIEUNCIEUC
-0x9B47 0xC31A # HANGUL SYLLABLE SSANGSIOS-AE-NIEUNHIEUH
-0x9B48 0xC31B # HANGUL SYLLABLE SSANGSIOS-AE-TIKEUT
-0x9B49 0xC31D # HANGUL SYLLABLE SSANGSIOS-AE-RIEULKIYEOK
-0x9B4A 0xC31E # HANGUL SYLLABLE SSANGSIOS-AE-RIEULMIEUM
-0x9B4B 0xC31F # HANGUL SYLLABLE SSANGSIOS-AE-RIEULPIEUP
-0x9B4C 0xC320 # HANGUL SYLLABLE SSANGSIOS-AE-RIEULSIOS
-0x9B4D 0xC321 # HANGUL SYLLABLE SSANGSIOS-AE-RIEULTHIEUTH
-0x9B4E 0xC322 # HANGUL SYLLABLE SSANGSIOS-AE-RIEULPHIEUPH
-0x9B4F 0xC323 # HANGUL SYLLABLE SSANGSIOS-AE-RIEULHIEUH
-0x9B50 0xC326 # HANGUL SYLLABLE SSANGSIOS-AE-PIEUPSIOS
-0x9B51 0xC327 # HANGUL SYLLABLE SSANGSIOS-AE-SIOS
-0x9B52 0xC32A # HANGUL SYLLABLE SSANGSIOS-AE-CIEUC
-0x9B53 0xC32B # HANGUL SYLLABLE SSANGSIOS-AE-CHIEUCH
-0x9B54 0xC32C # HANGUL SYLLABLE SSANGSIOS-AE-KHIEUKH
-0x9B55 0xC32D # HANGUL SYLLABLE SSANGSIOS-AE-THIEUTH
-0x9B56 0xC32E # HANGUL SYLLABLE SSANGSIOS-AE-PHIEUPH
-0x9B57 0xC32F # HANGUL SYLLABLE SSANGSIOS-AE-HIEUH
-0x9B58 0xC330 # HANGUL SYLLABLE SSANGSIOS-YA
-0x9B59 0xC331 # HANGUL SYLLABLE SSANGSIOS-YA-KIYEOK
-0x9B5A 0xC332 # HANGUL SYLLABLE SSANGSIOS-YA-SSANGKIYEOK
-0x9B61 0xC333 # HANGUL SYLLABLE SSANGSIOS-YA-KIYEOKSIOS
-0x9B62 0xC334 # HANGUL SYLLABLE SSANGSIOS-YA-NIEUN
-0x9B63 0xC335 # HANGUL SYLLABLE SSANGSIOS-YA-NIEUNCIEUC
-0x9B64 0xC336 # HANGUL SYLLABLE SSANGSIOS-YA-NIEUNHIEUH
-0x9B65 0xC337 # HANGUL SYLLABLE SSANGSIOS-YA-TIKEUT
-0x9B66 0xC338 # HANGUL SYLLABLE SSANGSIOS-YA-RIEUL
-0x9B67 0xC339 # HANGUL SYLLABLE SSANGSIOS-YA-RIEULKIYEOK
-0x9B68 0xC33A # HANGUL SYLLABLE SSANGSIOS-YA-RIEULMIEUM
-0x9B69 0xC33B # HANGUL SYLLABLE SSANGSIOS-YA-RIEULPIEUP
-0x9B6A 0xC33C # HANGUL SYLLABLE SSANGSIOS-YA-RIEULSIOS
-0x9B6B 0xC33D # HANGUL SYLLABLE SSANGSIOS-YA-RIEULTHIEUTH
-0x9B6C 0xC33E # HANGUL SYLLABLE SSANGSIOS-YA-RIEULPHIEUPH
-0x9B6D 0xC33F # HANGUL SYLLABLE SSANGSIOS-YA-RIEULHIEUH
-0x9B6E 0xC340 # HANGUL SYLLABLE SSANGSIOS-YA-MIEUM
-0x9B6F 0xC341 # HANGUL SYLLABLE SSANGSIOS-YA-PIEUP
-0x9B70 0xC342 # HANGUL SYLLABLE SSANGSIOS-YA-PIEUPSIOS
-0x9B71 0xC343 # HANGUL SYLLABLE SSANGSIOS-YA-SIOS
-0x9B72 0xC344 # HANGUL SYLLABLE SSANGSIOS-YA-SSANGSIOS
-0x9B73 0xC346 # HANGUL SYLLABLE SSANGSIOS-YA-CIEUC
-0x9B74 0xC347 # HANGUL SYLLABLE SSANGSIOS-YA-CHIEUCH
-0x9B75 0xC348 # HANGUL SYLLABLE SSANGSIOS-YA-KHIEUKH
-0x9B76 0xC349 # HANGUL SYLLABLE SSANGSIOS-YA-THIEUTH
-0x9B77 0xC34A # HANGUL SYLLABLE SSANGSIOS-YA-PHIEUPH
-0x9B78 0xC34B # HANGUL SYLLABLE SSANGSIOS-YA-HIEUH
-0x9B79 0xC34C # HANGUL SYLLABLE SSANGSIOS-YAE
-0x9B7A 0xC34D # HANGUL SYLLABLE SSANGSIOS-YAE-KIYEOK
-0x9B81 0xC34E # HANGUL SYLLABLE SSANGSIOS-YAE-SSANGKIYEOK
-0x9B82 0xC34F # HANGUL SYLLABLE SSANGSIOS-YAE-KIYEOKSIOS
-0x9B83 0xC350 # HANGUL SYLLABLE SSANGSIOS-YAE-NIEUN
-0x9B84 0xC351 # HANGUL SYLLABLE SSANGSIOS-YAE-NIEUNCIEUC
-0x9B85 0xC352 # HANGUL SYLLABLE SSANGSIOS-YAE-NIEUNHIEUH
-0x9B86 0xC353 # HANGUL SYLLABLE SSANGSIOS-YAE-TIKEUT
-0x9B87 0xC354 # HANGUL SYLLABLE SSANGSIOS-YAE-RIEUL
-0x9B88 0xC355 # HANGUL SYLLABLE SSANGSIOS-YAE-RIEULKIYEOK
-0x9B89 0xC356 # HANGUL SYLLABLE SSANGSIOS-YAE-RIEULMIEUM
-0x9B8A 0xC357 # HANGUL SYLLABLE SSANGSIOS-YAE-RIEULPIEUP
-0x9B8B 0xC358 # HANGUL SYLLABLE SSANGSIOS-YAE-RIEULSIOS
-0x9B8C 0xC359 # HANGUL SYLLABLE SSANGSIOS-YAE-RIEULTHIEUTH
-0x9B8D 0xC35A # HANGUL SYLLABLE SSANGSIOS-YAE-RIEULPHIEUPH
-0x9B8E 0xC35B # HANGUL SYLLABLE SSANGSIOS-YAE-RIEULHIEUH
-0x9B8F 0xC35C # HANGUL SYLLABLE SSANGSIOS-YAE-MIEUM
-0x9B90 0xC35D # HANGUL SYLLABLE SSANGSIOS-YAE-PIEUP
-0x9B91 0xC35E # HANGUL SYLLABLE SSANGSIOS-YAE-PIEUPSIOS
-0x9B92 0xC35F # HANGUL SYLLABLE SSANGSIOS-YAE-SIOS
-0x9B93 0xC360 # HANGUL SYLLABLE SSANGSIOS-YAE-SSANGSIOS
-0x9B94 0xC361 # HANGUL SYLLABLE SSANGSIOS-YAE-IEUNG
-0x9B95 0xC362 # HANGUL SYLLABLE SSANGSIOS-YAE-CIEUC
-0x9B96 0xC363 # HANGUL SYLLABLE SSANGSIOS-YAE-CHIEUCH
-0x9B97 0xC364 # HANGUL SYLLABLE SSANGSIOS-YAE-KHIEUKH
-0x9B98 0xC365 # HANGUL SYLLABLE SSANGSIOS-YAE-THIEUTH
-0x9B99 0xC366 # HANGUL SYLLABLE SSANGSIOS-YAE-PHIEUPH
-0x9B9A 0xC367 # HANGUL SYLLABLE SSANGSIOS-YAE-HIEUH
-0x9B9B 0xC36A # HANGUL SYLLABLE SSANGSIOS-EO-SSANGKIYEOK
-0x9B9C 0xC36B # HANGUL SYLLABLE SSANGSIOS-EO-KIYEOKSIOS
-0x9B9D 0xC36D # HANGUL SYLLABLE SSANGSIOS-EO-NIEUNCIEUC
-0x9B9E 0xC36E # HANGUL SYLLABLE SSANGSIOS-EO-NIEUNHIEUH
-0x9B9F 0xC36F # HANGUL SYLLABLE SSANGSIOS-EO-TIKEUT
-0x9BA0 0xC371 # HANGUL SYLLABLE SSANGSIOS-EO-RIEULKIYEOK
-0x9BA1 0xC373 # HANGUL SYLLABLE SSANGSIOS-EO-RIEULPIEUP
-0x9BA2 0xC374 # HANGUL SYLLABLE SSANGSIOS-EO-RIEULSIOS
-0x9BA3 0xC375 # HANGUL SYLLABLE SSANGSIOS-EO-RIEULTHIEUTH
-0x9BA4 0xC376 # HANGUL SYLLABLE SSANGSIOS-EO-RIEULPHIEUPH
-0x9BA5 0xC377 # HANGUL SYLLABLE SSANGSIOS-EO-RIEULHIEUH
-0x9BA6 0xC37A # HANGUL SYLLABLE SSANGSIOS-EO-PIEUPSIOS
-0x9BA7 0xC37B # HANGUL SYLLABLE SSANGSIOS-EO-SIOS
-0x9BA8 0xC37E # HANGUL SYLLABLE SSANGSIOS-EO-CIEUC
-0x9BA9 0xC37F # HANGUL SYLLABLE SSANGSIOS-EO-CHIEUCH
-0x9BAA 0xC380 # HANGUL SYLLABLE SSANGSIOS-EO-KHIEUKH
-0x9BAB 0xC381 # HANGUL SYLLABLE SSANGSIOS-EO-THIEUTH
-0x9BAC 0xC382 # HANGUL SYLLABLE SSANGSIOS-EO-PHIEUPH
-0x9BAD 0xC383 # HANGUL SYLLABLE SSANGSIOS-EO-HIEUH
-0x9BAE 0xC385 # HANGUL SYLLABLE SSANGSIOS-E-KIYEOK
-0x9BAF 0xC386 # HANGUL SYLLABLE SSANGSIOS-E-SSANGKIYEOK
-0x9BB0 0xC387 # HANGUL SYLLABLE SSANGSIOS-E-KIYEOKSIOS
-0x9BB1 0xC389 # HANGUL SYLLABLE SSANGSIOS-E-NIEUNCIEUC
-0x9BB2 0xC38A # HANGUL SYLLABLE SSANGSIOS-E-NIEUNHIEUH
-0x9BB3 0xC38B # HANGUL SYLLABLE SSANGSIOS-E-TIKEUT
-0x9BB4 0xC38D # HANGUL SYLLABLE SSANGSIOS-E-RIEULKIYEOK
-0x9BB5 0xC38E # HANGUL SYLLABLE SSANGSIOS-E-RIEULMIEUM
-0x9BB6 0xC38F # HANGUL SYLLABLE SSANGSIOS-E-RIEULPIEUP
-0x9BB7 0xC390 # HANGUL SYLLABLE SSANGSIOS-E-RIEULSIOS
-0x9BB8 0xC391 # HANGUL SYLLABLE SSANGSIOS-E-RIEULTHIEUTH
-0x9BB9 0xC392 # HANGUL SYLLABLE SSANGSIOS-E-RIEULPHIEUPH
-0x9BBA 0xC393 # HANGUL SYLLABLE SSANGSIOS-E-RIEULHIEUH
-0x9BBB 0xC394 # HANGUL SYLLABLE SSANGSIOS-E-MIEUM
-0x9BBC 0xC395 # HANGUL SYLLABLE SSANGSIOS-E-PIEUP
-0x9BBD 0xC396 # HANGUL SYLLABLE SSANGSIOS-E-PIEUPSIOS
-0x9BBE 0xC397 # HANGUL SYLLABLE SSANGSIOS-E-SIOS
-0x9BBF 0xC398 # HANGUL SYLLABLE SSANGSIOS-E-SSANGSIOS
-0x9BC0 0xC399 # HANGUL SYLLABLE SSANGSIOS-E-IEUNG
-0x9BC1 0xC39A # HANGUL SYLLABLE SSANGSIOS-E-CIEUC
-0x9BC2 0xC39B # HANGUL SYLLABLE SSANGSIOS-E-CHIEUCH
-0x9BC3 0xC39C # HANGUL SYLLABLE SSANGSIOS-E-KHIEUKH
-0x9BC4 0xC39D # HANGUL SYLLABLE SSANGSIOS-E-THIEUTH
-0x9BC5 0xC39E # HANGUL SYLLABLE SSANGSIOS-E-PHIEUPH
-0x9BC6 0xC39F # HANGUL SYLLABLE SSANGSIOS-E-HIEUH
-0x9BC7 0xC3A0 # HANGUL SYLLABLE SSANGSIOS-YEO
-0x9BC8 0xC3A1 # HANGUL SYLLABLE SSANGSIOS-YEO-KIYEOK
-0x9BC9 0xC3A2 # HANGUL SYLLABLE SSANGSIOS-YEO-SSANGKIYEOK
-0x9BCA 0xC3A3 # HANGUL SYLLABLE SSANGSIOS-YEO-KIYEOKSIOS
-0x9BCB 0xC3A4 # HANGUL SYLLABLE SSANGSIOS-YEO-NIEUN
-0x9BCC 0xC3A5 # HANGUL SYLLABLE SSANGSIOS-YEO-NIEUNCIEUC
-0x9BCD 0xC3A6 # HANGUL SYLLABLE SSANGSIOS-YEO-NIEUNHIEUH
-0x9BCE 0xC3A7 # HANGUL SYLLABLE SSANGSIOS-YEO-TIKEUT
-0x9BCF 0xC3A8 # HANGUL SYLLABLE SSANGSIOS-YEO-RIEUL
-0x9BD0 0xC3A9 # HANGUL SYLLABLE SSANGSIOS-YEO-RIEULKIYEOK
-0x9BD1 0xC3AA # HANGUL SYLLABLE SSANGSIOS-YEO-RIEULMIEUM
-0x9BD2 0xC3AB # HANGUL SYLLABLE SSANGSIOS-YEO-RIEULPIEUP
-0x9BD3 0xC3AC # HANGUL SYLLABLE SSANGSIOS-YEO-RIEULSIOS
-0x9BD4 0xC3AD # HANGUL SYLLABLE SSANGSIOS-YEO-RIEULTHIEUTH
-0x9BD5 0xC3AE # HANGUL SYLLABLE SSANGSIOS-YEO-RIEULPHIEUPH
-0x9BD6 0xC3AF # HANGUL SYLLABLE SSANGSIOS-YEO-RIEULHIEUH
-0x9BD7 0xC3B0 # HANGUL SYLLABLE SSANGSIOS-YEO-MIEUM
-0x9BD8 0xC3B1 # HANGUL SYLLABLE SSANGSIOS-YEO-PIEUP
-0x9BD9 0xC3B2 # HANGUL SYLLABLE SSANGSIOS-YEO-PIEUPSIOS
-0x9BDA 0xC3B3 # HANGUL SYLLABLE SSANGSIOS-YEO-SIOS
-0x9BDB 0xC3B4 # HANGUL SYLLABLE SSANGSIOS-YEO-SSANGSIOS
-0x9BDC 0xC3B5 # HANGUL SYLLABLE SSANGSIOS-YEO-IEUNG
-0x9BDD 0xC3B6 # HANGUL SYLLABLE SSANGSIOS-YEO-CIEUC
-0x9BDE 0xC3B7 # HANGUL SYLLABLE SSANGSIOS-YEO-CHIEUCH
-0x9BDF 0xC3B8 # HANGUL SYLLABLE SSANGSIOS-YEO-KHIEUKH
-0x9BE0 0xC3B9 # HANGUL SYLLABLE SSANGSIOS-YEO-THIEUTH
-0x9BE1 0xC3BA # HANGUL SYLLABLE SSANGSIOS-YEO-PHIEUPH
-0x9BE2 0xC3BB # HANGUL SYLLABLE SSANGSIOS-YEO-HIEUH
-0x9BE3 0xC3BC # HANGUL SYLLABLE SSANGSIOS-YE
-0x9BE4 0xC3BD # HANGUL SYLLABLE SSANGSIOS-YE-KIYEOK
-0x9BE5 0xC3BE # HANGUL SYLLABLE SSANGSIOS-YE-SSANGKIYEOK
-0x9BE6 0xC3BF # HANGUL SYLLABLE SSANGSIOS-YE-KIYEOKSIOS
-0x9BE7 0xC3C1 # HANGUL SYLLABLE SSANGSIOS-YE-NIEUNCIEUC
-0x9BE8 0xC3C2 # HANGUL SYLLABLE SSANGSIOS-YE-NIEUNHIEUH
-0x9BE9 0xC3C3 # HANGUL SYLLABLE SSANGSIOS-YE-TIKEUT
-0x9BEA 0xC3C4 # HANGUL SYLLABLE SSANGSIOS-YE-RIEUL
-0x9BEB 0xC3C5 # HANGUL SYLLABLE SSANGSIOS-YE-RIEULKIYEOK
-0x9BEC 0xC3C6 # HANGUL SYLLABLE SSANGSIOS-YE-RIEULMIEUM
-0x9BED 0xC3C7 # HANGUL SYLLABLE SSANGSIOS-YE-RIEULPIEUP
-0x9BEE 0xC3C8 # HANGUL SYLLABLE SSANGSIOS-YE-RIEULSIOS
-0x9BEF 0xC3C9 # HANGUL SYLLABLE SSANGSIOS-YE-RIEULTHIEUTH
-0x9BF0 0xC3CA # HANGUL SYLLABLE SSANGSIOS-YE-RIEULPHIEUPH
-0x9BF1 0xC3CB # HANGUL SYLLABLE SSANGSIOS-YE-RIEULHIEUH
-0x9BF2 0xC3CC # HANGUL SYLLABLE SSANGSIOS-YE-MIEUM
-0x9BF3 0xC3CD # HANGUL SYLLABLE SSANGSIOS-YE-PIEUP
-0x9BF4 0xC3CE # HANGUL SYLLABLE SSANGSIOS-YE-PIEUPSIOS
-0x9BF5 0xC3CF # HANGUL SYLLABLE SSANGSIOS-YE-SIOS
-0x9BF6 0xC3D0 # HANGUL SYLLABLE SSANGSIOS-YE-SSANGSIOS
-0x9BF7 0xC3D1 # HANGUL SYLLABLE SSANGSIOS-YE-IEUNG
-0x9BF8 0xC3D2 # HANGUL SYLLABLE SSANGSIOS-YE-CIEUC
-0x9BF9 0xC3D3 # HANGUL SYLLABLE SSANGSIOS-YE-CHIEUCH
-0x9BFA 0xC3D4 # HANGUL SYLLABLE SSANGSIOS-YE-KHIEUKH
-0x9BFB 0xC3D5 # HANGUL SYLLABLE SSANGSIOS-YE-THIEUTH
-0x9BFC 0xC3D6 # HANGUL SYLLABLE SSANGSIOS-YE-PHIEUPH
-0x9BFD 0xC3D7 # HANGUL SYLLABLE SSANGSIOS-YE-HIEUH
-0x9BFE 0xC3DA # HANGUL SYLLABLE SSANGSIOS-O-SSANGKIYEOK
-0x9C41 0xC3DB # HANGUL SYLLABLE SSANGSIOS-O-KIYEOKSIOS
-0x9C42 0xC3DD # HANGUL SYLLABLE SSANGSIOS-O-NIEUNCIEUC
-0x9C43 0xC3DE # HANGUL SYLLABLE SSANGSIOS-O-NIEUNHIEUH
-0x9C44 0xC3E1 # HANGUL SYLLABLE SSANGSIOS-O-RIEULKIYEOK
-0x9C45 0xC3E3 # HANGUL SYLLABLE SSANGSIOS-O-RIEULPIEUP
-0x9C46 0xC3E4 # HANGUL SYLLABLE SSANGSIOS-O-RIEULSIOS
-0x9C47 0xC3E5 # HANGUL SYLLABLE SSANGSIOS-O-RIEULTHIEUTH
-0x9C48 0xC3E6 # HANGUL SYLLABLE SSANGSIOS-O-RIEULPHIEUPH
-0x9C49 0xC3E7 # HANGUL SYLLABLE SSANGSIOS-O-RIEULHIEUH
-0x9C4A 0xC3EA # HANGUL SYLLABLE SSANGSIOS-O-PIEUPSIOS
-0x9C4B 0xC3EB # HANGUL SYLLABLE SSANGSIOS-O-SIOS
-0x9C4C 0xC3EC # HANGUL SYLLABLE SSANGSIOS-O-SSANGSIOS
-0x9C4D 0xC3EE # HANGUL SYLLABLE SSANGSIOS-O-CIEUC
-0x9C4E 0xC3EF # HANGUL SYLLABLE SSANGSIOS-O-CHIEUCH
-0x9C4F 0xC3F0 # HANGUL SYLLABLE SSANGSIOS-O-KHIEUKH
-0x9C50 0xC3F1 # HANGUL SYLLABLE SSANGSIOS-O-THIEUTH
-0x9C51 0xC3F2 # HANGUL SYLLABLE SSANGSIOS-O-PHIEUPH
-0x9C52 0xC3F3 # HANGUL SYLLABLE SSANGSIOS-O-HIEUH
-0x9C53 0xC3F6 # HANGUL SYLLABLE SSANGSIOS-WA-SSANGKIYEOK
-0x9C54 0xC3F7 # HANGUL SYLLABLE SSANGSIOS-WA-KIYEOKSIOS
-0x9C55 0xC3F9 # HANGUL SYLLABLE SSANGSIOS-WA-NIEUNCIEUC
-0x9C56 0xC3FA # HANGUL SYLLABLE SSANGSIOS-WA-NIEUNHIEUH
-0x9C57 0xC3FB # HANGUL SYLLABLE SSANGSIOS-WA-TIKEUT
-0x9C58 0xC3FC # HANGUL SYLLABLE SSANGSIOS-WA-RIEUL
-0x9C59 0xC3FD # HANGUL SYLLABLE SSANGSIOS-WA-RIEULKIYEOK
-0x9C5A 0xC3FE # HANGUL SYLLABLE SSANGSIOS-WA-RIEULMIEUM
-0x9C61 0xC3FF # HANGUL SYLLABLE SSANGSIOS-WA-RIEULPIEUP
-0x9C62 0xC400 # HANGUL SYLLABLE SSANGSIOS-WA-RIEULSIOS
-0x9C63 0xC401 # HANGUL SYLLABLE SSANGSIOS-WA-RIEULTHIEUTH
-0x9C64 0xC402 # HANGUL SYLLABLE SSANGSIOS-WA-RIEULPHIEUPH
-0x9C65 0xC403 # HANGUL SYLLABLE SSANGSIOS-WA-RIEULHIEUH
-0x9C66 0xC404 # HANGUL SYLLABLE SSANGSIOS-WA-MIEUM
-0x9C67 0xC405 # HANGUL SYLLABLE SSANGSIOS-WA-PIEUP
-0x9C68 0xC406 # HANGUL SYLLABLE SSANGSIOS-WA-PIEUPSIOS
-0x9C69 0xC407 # HANGUL SYLLABLE SSANGSIOS-WA-SIOS
-0x9C6A 0xC409 # HANGUL SYLLABLE SSANGSIOS-WA-IEUNG
-0x9C6B 0xC40A # HANGUL SYLLABLE SSANGSIOS-WA-CIEUC
-0x9C6C 0xC40B # HANGUL SYLLABLE SSANGSIOS-WA-CHIEUCH
-0x9C6D 0xC40C # HANGUL SYLLABLE SSANGSIOS-WA-KHIEUKH
-0x9C6E 0xC40D # HANGUL SYLLABLE SSANGSIOS-WA-THIEUTH
-0x9C6F 0xC40E # HANGUL SYLLABLE SSANGSIOS-WA-PHIEUPH
-0x9C70 0xC40F # HANGUL SYLLABLE SSANGSIOS-WA-HIEUH
-0x9C71 0xC411 # HANGUL SYLLABLE SSANGSIOS-WAE-KIYEOK
-0x9C72 0xC412 # HANGUL SYLLABLE SSANGSIOS-WAE-SSANGKIYEOK
-0x9C73 0xC413 # HANGUL SYLLABLE SSANGSIOS-WAE-KIYEOKSIOS
-0x9C74 0xC414 # HANGUL SYLLABLE SSANGSIOS-WAE-NIEUN
-0x9C75 0xC415 # HANGUL SYLLABLE SSANGSIOS-WAE-NIEUNCIEUC
-0x9C76 0xC416 # HANGUL SYLLABLE SSANGSIOS-WAE-NIEUNHIEUH
-0x9C77 0xC417 # HANGUL SYLLABLE SSANGSIOS-WAE-TIKEUT
-0x9C78 0xC418 # HANGUL SYLLABLE SSANGSIOS-WAE-RIEUL
-0x9C79 0xC419 # HANGUL SYLLABLE SSANGSIOS-WAE-RIEULKIYEOK
-0x9C7A 0xC41A # HANGUL SYLLABLE SSANGSIOS-WAE-RIEULMIEUM
-0x9C81 0xC41B # HANGUL SYLLABLE SSANGSIOS-WAE-RIEULPIEUP
-0x9C82 0xC41C # HANGUL SYLLABLE SSANGSIOS-WAE-RIEULSIOS
-0x9C83 0xC41D # HANGUL SYLLABLE SSANGSIOS-WAE-RIEULTHIEUTH
-0x9C84 0xC41E # HANGUL SYLLABLE SSANGSIOS-WAE-RIEULPHIEUPH
-0x9C85 0xC41F # HANGUL SYLLABLE SSANGSIOS-WAE-RIEULHIEUH
-0x9C86 0xC420 # HANGUL SYLLABLE SSANGSIOS-WAE-MIEUM
-0x9C87 0xC421 # HANGUL SYLLABLE SSANGSIOS-WAE-PIEUP
-0x9C88 0xC422 # HANGUL SYLLABLE SSANGSIOS-WAE-PIEUPSIOS
-0x9C89 0xC423 # HANGUL SYLLABLE SSANGSIOS-WAE-SIOS
-0x9C8A 0xC425 # HANGUL SYLLABLE SSANGSIOS-WAE-IEUNG
-0x9C8B 0xC426 # HANGUL SYLLABLE SSANGSIOS-WAE-CIEUC
-0x9C8C 0xC427 # HANGUL SYLLABLE SSANGSIOS-WAE-CHIEUCH
-0x9C8D 0xC428 # HANGUL SYLLABLE SSANGSIOS-WAE-KHIEUKH
-0x9C8E 0xC429 # HANGUL SYLLABLE SSANGSIOS-WAE-THIEUTH
-0x9C8F 0xC42A # HANGUL SYLLABLE SSANGSIOS-WAE-PHIEUPH
-0x9C90 0xC42B # HANGUL SYLLABLE SSANGSIOS-WAE-HIEUH
-0x9C91 0xC42D # HANGUL SYLLABLE SSANGSIOS-OE-KIYEOK
-0x9C92 0xC42E # HANGUL SYLLABLE SSANGSIOS-OE-SSANGKIYEOK
-0x9C93 0xC42F # HANGUL SYLLABLE SSANGSIOS-OE-KIYEOKSIOS
-0x9C94 0xC431 # HANGUL SYLLABLE SSANGSIOS-OE-NIEUNCIEUC
-0x9C95 0xC432 # HANGUL SYLLABLE SSANGSIOS-OE-NIEUNHIEUH
-0x9C96 0xC433 # HANGUL SYLLABLE SSANGSIOS-OE-TIKEUT
-0x9C97 0xC435 # HANGUL SYLLABLE SSANGSIOS-OE-RIEULKIYEOK
-0x9C98 0xC436 # HANGUL SYLLABLE SSANGSIOS-OE-RIEULMIEUM
-0x9C99 0xC437 # HANGUL SYLLABLE SSANGSIOS-OE-RIEULPIEUP
-0x9C9A 0xC438 # HANGUL SYLLABLE SSANGSIOS-OE-RIEULSIOS
-0x9C9B 0xC439 # HANGUL SYLLABLE SSANGSIOS-OE-RIEULTHIEUTH
-0x9C9C 0xC43A # HANGUL SYLLABLE SSANGSIOS-OE-RIEULPHIEUPH
-0x9C9D 0xC43B # HANGUL SYLLABLE SSANGSIOS-OE-RIEULHIEUH
-0x9C9E 0xC43E # HANGUL SYLLABLE SSANGSIOS-OE-PIEUPSIOS
-0x9C9F 0xC43F # HANGUL SYLLABLE SSANGSIOS-OE-SIOS
-0x9CA0 0xC440 # HANGUL SYLLABLE SSANGSIOS-OE-SSANGSIOS
-0x9CA1 0xC441 # HANGUL SYLLABLE SSANGSIOS-OE-IEUNG
-0x9CA2 0xC442 # HANGUL SYLLABLE SSANGSIOS-OE-CIEUC
-0x9CA3 0xC443 # HANGUL SYLLABLE SSANGSIOS-OE-CHIEUCH
-0x9CA4 0xC444 # HANGUL SYLLABLE SSANGSIOS-OE-KHIEUKH
-0x9CA5 0xC445 # HANGUL SYLLABLE SSANGSIOS-OE-THIEUTH
-0x9CA6 0xC446 # HANGUL SYLLABLE SSANGSIOS-OE-PHIEUPH
-0x9CA7 0xC447 # HANGUL SYLLABLE SSANGSIOS-OE-HIEUH
-0x9CA8 0xC449 # HANGUL SYLLABLE SSANGSIOS-YO-KIYEOK
-0x9CA9 0xC44A # HANGUL SYLLABLE SSANGSIOS-YO-SSANGKIYEOK
-0x9CAA 0xC44B # HANGUL SYLLABLE SSANGSIOS-YO-KIYEOKSIOS
-0x9CAB 0xC44C # HANGUL SYLLABLE SSANGSIOS-YO-NIEUN
-0x9CAC 0xC44D # HANGUL SYLLABLE SSANGSIOS-YO-NIEUNCIEUC
-0x9CAD 0xC44E # HANGUL SYLLABLE SSANGSIOS-YO-NIEUNHIEUH
-0x9CAE 0xC44F # HANGUL SYLLABLE SSANGSIOS-YO-TIKEUT
-0x9CAF 0xC450 # HANGUL SYLLABLE SSANGSIOS-YO-RIEUL
-0x9CB0 0xC451 # HANGUL SYLLABLE SSANGSIOS-YO-RIEULKIYEOK
-0x9CB1 0xC452 # HANGUL SYLLABLE SSANGSIOS-YO-RIEULMIEUM
-0x9CB2 0xC453 # HANGUL SYLLABLE SSANGSIOS-YO-RIEULPIEUP
-0x9CB3 0xC454 # HANGUL SYLLABLE SSANGSIOS-YO-RIEULSIOS
-0x9CB4 0xC455 # HANGUL SYLLABLE SSANGSIOS-YO-RIEULTHIEUTH
-0x9CB5 0xC456 # HANGUL SYLLABLE SSANGSIOS-YO-RIEULPHIEUPH
-0x9CB6 0xC457 # HANGUL SYLLABLE SSANGSIOS-YO-RIEULHIEUH
-0x9CB7 0xC458 # HANGUL SYLLABLE SSANGSIOS-YO-MIEUM
-0x9CB8 0xC459 # HANGUL SYLLABLE SSANGSIOS-YO-PIEUP
-0x9CB9 0xC45A # HANGUL SYLLABLE SSANGSIOS-YO-PIEUPSIOS
-0x9CBA 0xC45B # HANGUL SYLLABLE SSANGSIOS-YO-SIOS
-0x9CBB 0xC45C # HANGUL SYLLABLE SSANGSIOS-YO-SSANGSIOS
-0x9CBC 0xC45D # HANGUL SYLLABLE SSANGSIOS-YO-IEUNG
-0x9CBD 0xC45E # HANGUL SYLLABLE SSANGSIOS-YO-CIEUC
-0x9CBE 0xC45F # HANGUL SYLLABLE SSANGSIOS-YO-CHIEUCH
-0x9CBF 0xC460 # HANGUL SYLLABLE SSANGSIOS-YO-KHIEUKH
-0x9CC0 0xC461 # HANGUL SYLLABLE SSANGSIOS-YO-THIEUTH
-0x9CC1 0xC462 # HANGUL SYLLABLE SSANGSIOS-YO-PHIEUPH
-0x9CC2 0xC463 # HANGUL SYLLABLE SSANGSIOS-YO-HIEUH
-0x9CC3 0xC466 # HANGUL SYLLABLE SSANGSIOS-U-SSANGKIYEOK
-0x9CC4 0xC467 # HANGUL SYLLABLE SSANGSIOS-U-KIYEOKSIOS
-0x9CC5 0xC469 # HANGUL SYLLABLE SSANGSIOS-U-NIEUNCIEUC
-0x9CC6 0xC46A # HANGUL SYLLABLE SSANGSIOS-U-NIEUNHIEUH
-0x9CC7 0xC46B # HANGUL SYLLABLE SSANGSIOS-U-TIKEUT
-0x9CC8 0xC46D # HANGUL SYLLABLE SSANGSIOS-U-RIEULKIYEOK
-0x9CC9 0xC46E # HANGUL SYLLABLE SSANGSIOS-U-RIEULMIEUM
-0x9CCA 0xC46F # HANGUL SYLLABLE SSANGSIOS-U-RIEULPIEUP
-0x9CCB 0xC470 # HANGUL SYLLABLE SSANGSIOS-U-RIEULSIOS
-0x9CCC 0xC471 # HANGUL SYLLABLE SSANGSIOS-U-RIEULTHIEUTH
-0x9CCD 0xC472 # HANGUL SYLLABLE SSANGSIOS-U-RIEULPHIEUPH
-0x9CCE 0xC473 # HANGUL SYLLABLE SSANGSIOS-U-RIEULHIEUH
-0x9CCF 0xC476 # HANGUL SYLLABLE SSANGSIOS-U-PIEUPSIOS
-0x9CD0 0xC477 # HANGUL SYLLABLE SSANGSIOS-U-SIOS
-0x9CD1 0xC478 # HANGUL SYLLABLE SSANGSIOS-U-SSANGSIOS
-0x9CD2 0xC47A # HANGUL SYLLABLE SSANGSIOS-U-CIEUC
-0x9CD3 0xC47B # HANGUL SYLLABLE SSANGSIOS-U-CHIEUCH
-0x9CD4 0xC47C # HANGUL SYLLABLE SSANGSIOS-U-KHIEUKH
-0x9CD5 0xC47D # HANGUL SYLLABLE SSANGSIOS-U-THIEUTH
-0x9CD6 0xC47E # HANGUL SYLLABLE SSANGSIOS-U-PHIEUPH
-0x9CD7 0xC47F # HANGUL SYLLABLE SSANGSIOS-U-HIEUH
-0x9CD8 0xC481 # HANGUL SYLLABLE SSANGSIOS-WEO-KIYEOK
-0x9CD9 0xC482 # HANGUL SYLLABLE SSANGSIOS-WEO-SSANGKIYEOK
-0x9CDA 0xC483 # HANGUL SYLLABLE SSANGSIOS-WEO-KIYEOKSIOS
-0x9CDB 0xC484 # HANGUL SYLLABLE SSANGSIOS-WEO-NIEUN
-0x9CDC 0xC485 # HANGUL SYLLABLE SSANGSIOS-WEO-NIEUNCIEUC
-0x9CDD 0xC486 # HANGUL SYLLABLE SSANGSIOS-WEO-NIEUNHIEUH
-0x9CDE 0xC487 # HANGUL SYLLABLE SSANGSIOS-WEO-TIKEUT
-0x9CDF 0xC488 # HANGUL SYLLABLE SSANGSIOS-WEO-RIEUL
-0x9CE0 0xC489 # HANGUL SYLLABLE SSANGSIOS-WEO-RIEULKIYEOK
-0x9CE1 0xC48A # HANGUL SYLLABLE SSANGSIOS-WEO-RIEULMIEUM
-0x9CE2 0xC48B # HANGUL SYLLABLE SSANGSIOS-WEO-RIEULPIEUP
-0x9CE3 0xC48C # HANGUL SYLLABLE SSANGSIOS-WEO-RIEULSIOS
-0x9CE4 0xC48D # HANGUL SYLLABLE SSANGSIOS-WEO-RIEULTHIEUTH
-0x9CE5 0xC48E # HANGUL SYLLABLE SSANGSIOS-WEO-RIEULPHIEUPH
-0x9CE6 0xC48F # HANGUL SYLLABLE SSANGSIOS-WEO-RIEULHIEUH
-0x9CE7 0xC490 # HANGUL SYLLABLE SSANGSIOS-WEO-MIEUM
-0x9CE8 0xC491 # HANGUL SYLLABLE SSANGSIOS-WEO-PIEUP
-0x9CE9 0xC492 # HANGUL SYLLABLE SSANGSIOS-WEO-PIEUPSIOS
-0x9CEA 0xC493 # HANGUL SYLLABLE SSANGSIOS-WEO-SIOS
-0x9CEB 0xC495 # HANGUL SYLLABLE SSANGSIOS-WEO-IEUNG
-0x9CEC 0xC496 # HANGUL SYLLABLE SSANGSIOS-WEO-CIEUC
-0x9CED 0xC497 # HANGUL SYLLABLE SSANGSIOS-WEO-CHIEUCH
-0x9CEE 0xC498 # HANGUL SYLLABLE SSANGSIOS-WEO-KHIEUKH
-0x9CEF 0xC499 # HANGUL SYLLABLE SSANGSIOS-WEO-THIEUTH
-0x9CF0 0xC49A # HANGUL SYLLABLE SSANGSIOS-WEO-PHIEUPH
-0x9CF1 0xC49B # HANGUL SYLLABLE SSANGSIOS-WEO-HIEUH
-0x9CF2 0xC49D # HANGUL SYLLABLE SSANGSIOS-WE-KIYEOK
-0x9CF3 0xC49E # HANGUL SYLLABLE SSANGSIOS-WE-SSANGKIYEOK
-0x9CF4 0xC49F # HANGUL SYLLABLE SSANGSIOS-WE-KIYEOKSIOS
-0x9CF5 0xC4A0 # HANGUL SYLLABLE SSANGSIOS-WE-NIEUN
-0x9CF6 0xC4A1 # HANGUL SYLLABLE SSANGSIOS-WE-NIEUNCIEUC
-0x9CF7 0xC4A2 # HANGUL SYLLABLE SSANGSIOS-WE-NIEUNHIEUH
-0x9CF8 0xC4A3 # HANGUL SYLLABLE SSANGSIOS-WE-TIKEUT
-0x9CF9 0xC4A4 # HANGUL SYLLABLE SSANGSIOS-WE-RIEUL
-0x9CFA 0xC4A5 # HANGUL SYLLABLE SSANGSIOS-WE-RIEULKIYEOK
-0x9CFB 0xC4A6 # HANGUL SYLLABLE SSANGSIOS-WE-RIEULMIEUM
-0x9CFC 0xC4A7 # HANGUL SYLLABLE SSANGSIOS-WE-RIEULPIEUP
-0x9CFD 0xC4A8 # HANGUL SYLLABLE SSANGSIOS-WE-RIEULSIOS
-0x9CFE 0xC4A9 # HANGUL SYLLABLE SSANGSIOS-WE-RIEULTHIEUTH
-0x9D41 0xC4AA # HANGUL SYLLABLE SSANGSIOS-WE-RIEULPHIEUPH
-0x9D42 0xC4AB # HANGUL SYLLABLE SSANGSIOS-WE-RIEULHIEUH
-0x9D43 0xC4AC # HANGUL SYLLABLE SSANGSIOS-WE-MIEUM
-0x9D44 0xC4AD # HANGUL SYLLABLE SSANGSIOS-WE-PIEUP
-0x9D45 0xC4AE # HANGUL SYLLABLE SSANGSIOS-WE-PIEUPSIOS
-0x9D46 0xC4AF # HANGUL SYLLABLE SSANGSIOS-WE-SIOS
-0x9D47 0xC4B0 # HANGUL SYLLABLE SSANGSIOS-WE-SSANGSIOS
-0x9D48 0xC4B1 # HANGUL SYLLABLE SSANGSIOS-WE-IEUNG
-0x9D49 0xC4B2 # HANGUL SYLLABLE SSANGSIOS-WE-CIEUC
-0x9D4A 0xC4B3 # HANGUL SYLLABLE SSANGSIOS-WE-CHIEUCH
-0x9D4B 0xC4B4 # HANGUL SYLLABLE SSANGSIOS-WE-KHIEUKH
-0x9D4C 0xC4B5 # HANGUL SYLLABLE SSANGSIOS-WE-THIEUTH
-0x9D4D 0xC4B6 # HANGUL SYLLABLE SSANGSIOS-WE-PHIEUPH
-0x9D4E 0xC4B7 # HANGUL SYLLABLE SSANGSIOS-WE-HIEUH
-0x9D4F 0xC4B9 # HANGUL SYLLABLE SSANGSIOS-WI-KIYEOK
-0x9D50 0xC4BA # HANGUL SYLLABLE SSANGSIOS-WI-SSANGKIYEOK
-0x9D51 0xC4BB # HANGUL SYLLABLE SSANGSIOS-WI-KIYEOKSIOS
-0x9D52 0xC4BD # HANGUL SYLLABLE SSANGSIOS-WI-NIEUNCIEUC
-0x9D53 0xC4BE # HANGUL SYLLABLE SSANGSIOS-WI-NIEUNHIEUH
-0x9D54 0xC4BF # HANGUL SYLLABLE SSANGSIOS-WI-TIKEUT
-0x9D55 0xC4C0 # HANGUL SYLLABLE SSANGSIOS-WI-RIEUL
-0x9D56 0xC4C1 # HANGUL SYLLABLE SSANGSIOS-WI-RIEULKIYEOK
-0x9D57 0xC4C2 # HANGUL SYLLABLE SSANGSIOS-WI-RIEULMIEUM
-0x9D58 0xC4C3 # HANGUL SYLLABLE SSANGSIOS-WI-RIEULPIEUP
-0x9D59 0xC4C4 # HANGUL SYLLABLE SSANGSIOS-WI-RIEULSIOS
-0x9D5A 0xC4C5 # HANGUL SYLLABLE SSANGSIOS-WI-RIEULTHIEUTH
-0x9D61 0xC4C6 # HANGUL SYLLABLE SSANGSIOS-WI-RIEULPHIEUPH
-0x9D62 0xC4C7 # HANGUL SYLLABLE SSANGSIOS-WI-RIEULHIEUH
-0x9D63 0xC4C8 # HANGUL SYLLABLE SSANGSIOS-WI-MIEUM
-0x9D64 0xC4C9 # HANGUL SYLLABLE SSANGSIOS-WI-PIEUP
-0x9D65 0xC4CA # HANGUL SYLLABLE SSANGSIOS-WI-PIEUPSIOS
-0x9D66 0xC4CB # HANGUL SYLLABLE SSANGSIOS-WI-SIOS
-0x9D67 0xC4CC # HANGUL SYLLABLE SSANGSIOS-WI-SSANGSIOS
-0x9D68 0xC4CD # HANGUL SYLLABLE SSANGSIOS-WI-IEUNG
-0x9D69 0xC4CE # HANGUL SYLLABLE SSANGSIOS-WI-CIEUC
-0x9D6A 0xC4CF # HANGUL SYLLABLE SSANGSIOS-WI-CHIEUCH
-0x9D6B 0xC4D0 # HANGUL SYLLABLE SSANGSIOS-WI-KHIEUKH
-0x9D6C 0xC4D1 # HANGUL SYLLABLE SSANGSIOS-WI-THIEUTH
-0x9D6D 0xC4D2 # HANGUL SYLLABLE SSANGSIOS-WI-PHIEUPH
-0x9D6E 0xC4D3 # HANGUL SYLLABLE SSANGSIOS-WI-HIEUH
-0x9D6F 0xC4D4 # HANGUL SYLLABLE SSANGSIOS-YU
-0x9D70 0xC4D5 # HANGUL SYLLABLE SSANGSIOS-YU-KIYEOK
-0x9D71 0xC4D6 # HANGUL SYLLABLE SSANGSIOS-YU-SSANGKIYEOK
-0x9D72 0xC4D7 # HANGUL SYLLABLE SSANGSIOS-YU-KIYEOKSIOS
-0x9D73 0xC4D8 # HANGUL SYLLABLE SSANGSIOS-YU-NIEUN
-0x9D74 0xC4D9 # HANGUL SYLLABLE SSANGSIOS-YU-NIEUNCIEUC
-0x9D75 0xC4DA # HANGUL SYLLABLE SSANGSIOS-YU-NIEUNHIEUH
-0x9D76 0xC4DB # HANGUL SYLLABLE SSANGSIOS-YU-TIKEUT
-0x9D77 0xC4DC # HANGUL SYLLABLE SSANGSIOS-YU-RIEUL
-0x9D78 0xC4DD # HANGUL SYLLABLE SSANGSIOS-YU-RIEULKIYEOK
-0x9D79 0xC4DE # HANGUL SYLLABLE SSANGSIOS-YU-RIEULMIEUM
-0x9D7A 0xC4DF # HANGUL SYLLABLE SSANGSIOS-YU-RIEULPIEUP
-0x9D81 0xC4E0 # HANGUL SYLLABLE SSANGSIOS-YU-RIEULSIOS
-0x9D82 0xC4E1 # HANGUL SYLLABLE SSANGSIOS-YU-RIEULTHIEUTH
-0x9D83 0xC4E2 # HANGUL SYLLABLE SSANGSIOS-YU-RIEULPHIEUPH
-0x9D84 0xC4E3 # HANGUL SYLLABLE SSANGSIOS-YU-RIEULHIEUH
-0x9D85 0xC4E4 # HANGUL SYLLABLE SSANGSIOS-YU-MIEUM
-0x9D86 0xC4E5 # HANGUL SYLLABLE SSANGSIOS-YU-PIEUP
-0x9D87 0xC4E6 # HANGUL SYLLABLE SSANGSIOS-YU-PIEUPSIOS
-0x9D88 0xC4E7 # HANGUL SYLLABLE SSANGSIOS-YU-SIOS
-0x9D89 0xC4E8 # HANGUL SYLLABLE SSANGSIOS-YU-SSANGSIOS
-0x9D8A 0xC4EA # HANGUL SYLLABLE SSANGSIOS-YU-CIEUC
-0x9D8B 0xC4EB # HANGUL SYLLABLE SSANGSIOS-YU-CHIEUCH
-0x9D8C 0xC4EC # HANGUL SYLLABLE SSANGSIOS-YU-KHIEUKH
-0x9D8D 0xC4ED # HANGUL SYLLABLE SSANGSIOS-YU-THIEUTH
-0x9D8E 0xC4EE # HANGUL SYLLABLE SSANGSIOS-YU-PHIEUPH
-0x9D8F 0xC4EF # HANGUL SYLLABLE SSANGSIOS-YU-HIEUH
-0x9D90 0xC4F2 # HANGUL SYLLABLE SSANGSIOS-EU-SSANGKIYEOK
-0x9D91 0xC4F3 # HANGUL SYLLABLE SSANGSIOS-EU-KIYEOKSIOS
-0x9D92 0xC4F5 # HANGUL SYLLABLE SSANGSIOS-EU-NIEUNCIEUC
-0x9D93 0xC4F6 # HANGUL SYLLABLE SSANGSIOS-EU-NIEUNHIEUH
-0x9D94 0xC4F7 # HANGUL SYLLABLE SSANGSIOS-EU-TIKEUT
-0x9D95 0xC4F9 # HANGUL SYLLABLE SSANGSIOS-EU-RIEULKIYEOK
-0x9D96 0xC4FB # HANGUL SYLLABLE SSANGSIOS-EU-RIEULPIEUP
-0x9D97 0xC4FC # HANGUL SYLLABLE SSANGSIOS-EU-RIEULSIOS
-0x9D98 0xC4FD # HANGUL SYLLABLE SSANGSIOS-EU-RIEULTHIEUTH
-0x9D99 0xC4FE # HANGUL SYLLABLE SSANGSIOS-EU-RIEULPHIEUPH
-0x9D9A 0xC502 # HANGUL SYLLABLE SSANGSIOS-EU-PIEUPSIOS
-0x9D9B 0xC503 # HANGUL SYLLABLE SSANGSIOS-EU-SIOS
-0x9D9C 0xC504 # HANGUL SYLLABLE SSANGSIOS-EU-SSANGSIOS
-0x9D9D 0xC505 # HANGUL SYLLABLE SSANGSIOS-EU-IEUNG
-0x9D9E 0xC506 # HANGUL SYLLABLE SSANGSIOS-EU-CIEUC
-0x9D9F 0xC507 # HANGUL SYLLABLE SSANGSIOS-EU-CHIEUCH
-0x9DA0 0xC508 # HANGUL SYLLABLE SSANGSIOS-EU-KHIEUKH
-0x9DA1 0xC509 # HANGUL SYLLABLE SSANGSIOS-EU-THIEUTH
-0x9DA2 0xC50A # HANGUL SYLLABLE SSANGSIOS-EU-PHIEUPH
-0x9DA3 0xC50B # HANGUL SYLLABLE SSANGSIOS-EU-HIEUH
-0x9DA4 0xC50D # HANGUL SYLLABLE SSANGSIOS-YI-KIYEOK
-0x9DA5 0xC50E # HANGUL SYLLABLE SSANGSIOS-YI-SSANGKIYEOK
-0x9DA6 0xC50F # HANGUL SYLLABLE SSANGSIOS-YI-KIYEOKSIOS
-0x9DA7 0xC511 # HANGUL SYLLABLE SSANGSIOS-YI-NIEUNCIEUC
-0x9DA8 0xC512 # HANGUL SYLLABLE SSANGSIOS-YI-NIEUNHIEUH
-0x9DA9 0xC513 # HANGUL SYLLABLE SSANGSIOS-YI-TIKEUT
-0x9DAA 0xC515 # HANGUL SYLLABLE SSANGSIOS-YI-RIEULKIYEOK
-0x9DAB 0xC516 # HANGUL SYLLABLE SSANGSIOS-YI-RIEULMIEUM
-0x9DAC 0xC517 # HANGUL SYLLABLE SSANGSIOS-YI-RIEULPIEUP
-0x9DAD 0xC518 # HANGUL SYLLABLE SSANGSIOS-YI-RIEULSIOS
-0x9DAE 0xC519 # HANGUL SYLLABLE SSANGSIOS-YI-RIEULTHIEUTH
-0x9DAF 0xC51A # HANGUL SYLLABLE SSANGSIOS-YI-RIEULPHIEUPH
-0x9DB0 0xC51B # HANGUL SYLLABLE SSANGSIOS-YI-RIEULHIEUH
-0x9DB1 0xC51D # HANGUL SYLLABLE SSANGSIOS-YI-PIEUP
-0x9DB2 0xC51E # HANGUL SYLLABLE SSANGSIOS-YI-PIEUPSIOS
-0x9DB3 0xC51F # HANGUL SYLLABLE SSANGSIOS-YI-SIOS
-0x9DB4 0xC520 # HANGUL SYLLABLE SSANGSIOS-YI-SSANGSIOS
-0x9DB5 0xC521 # HANGUL SYLLABLE SSANGSIOS-YI-IEUNG
-0x9DB6 0xC522 # HANGUL SYLLABLE SSANGSIOS-YI-CIEUC
-0x9DB7 0xC523 # HANGUL SYLLABLE SSANGSIOS-YI-CHIEUCH
-0x9DB8 0xC524 # HANGUL SYLLABLE SSANGSIOS-YI-KHIEUKH
-0x9DB9 0xC525 # HANGUL SYLLABLE SSANGSIOS-YI-THIEUTH
-0x9DBA 0xC526 # HANGUL SYLLABLE SSANGSIOS-YI-PHIEUPH
-0x9DBB 0xC527 # HANGUL SYLLABLE SSANGSIOS-YI-HIEUH
-0x9DBC 0xC52A # HANGUL SYLLABLE SSANGSIOS-I-SSANGKIYEOK
-0x9DBD 0xC52B # HANGUL SYLLABLE SSANGSIOS-I-KIYEOKSIOS
-0x9DBE 0xC52D # HANGUL SYLLABLE SSANGSIOS-I-NIEUNCIEUC
-0x9DBF 0xC52E # HANGUL SYLLABLE SSANGSIOS-I-NIEUNHIEUH
-0x9DC0 0xC52F # HANGUL SYLLABLE SSANGSIOS-I-TIKEUT
-0x9DC1 0xC531 # HANGUL SYLLABLE SSANGSIOS-I-RIEULKIYEOK
-0x9DC2 0xC532 # HANGUL SYLLABLE SSANGSIOS-I-RIEULMIEUM
-0x9DC3 0xC533 # HANGUL SYLLABLE SSANGSIOS-I-RIEULPIEUP
-0x9DC4 0xC534 # HANGUL SYLLABLE SSANGSIOS-I-RIEULSIOS
-0x9DC5 0xC535 # HANGUL SYLLABLE SSANGSIOS-I-RIEULTHIEUTH
-0x9DC6 0xC536 # HANGUL SYLLABLE SSANGSIOS-I-RIEULPHIEUPH
-0x9DC7 0xC537 # HANGUL SYLLABLE SSANGSIOS-I-RIEULHIEUH
-0x9DC8 0xC53A # HANGUL SYLLABLE SSANGSIOS-I-PIEUPSIOS
-0x9DC9 0xC53C # HANGUL SYLLABLE SSANGSIOS-I-SSANGSIOS
-0x9DCA 0xC53E # HANGUL SYLLABLE SSANGSIOS-I-CIEUC
-0x9DCB 0xC53F # HANGUL SYLLABLE SSANGSIOS-I-CHIEUCH
-0x9DCC 0xC540 # HANGUL SYLLABLE SSANGSIOS-I-KHIEUKH
-0x9DCD 0xC541 # HANGUL SYLLABLE SSANGSIOS-I-THIEUTH
-0x9DCE 0xC542 # HANGUL SYLLABLE SSANGSIOS-I-PHIEUPH
-0x9DCF 0xC543 # HANGUL SYLLABLE SSANGSIOS-I-HIEUH
-0x9DD0 0xC546 # HANGUL SYLLABLE IEUNG-A-SSANGKIYEOK
-0x9DD1 0xC547 # HANGUL SYLLABLE IEUNG-A-KIYEOKSIOS
-0x9DD2 0xC54B # HANGUL SYLLABLE IEUNG-A-TIKEUT
-0x9DD3 0xC54F # HANGUL SYLLABLE IEUNG-A-RIEULPIEUP
-0x9DD4 0xC550 # HANGUL SYLLABLE IEUNG-A-RIEULSIOS
-0x9DD5 0xC551 # HANGUL SYLLABLE IEUNG-A-RIEULTHIEUTH
-0x9DD6 0xC552 # HANGUL SYLLABLE IEUNG-A-RIEULPHIEUPH
-0x9DD7 0xC556 # HANGUL SYLLABLE IEUNG-A-PIEUPSIOS
-0x9DD8 0xC55A # HANGUL SYLLABLE IEUNG-A-CIEUC
-0x9DD9 0xC55B # HANGUL SYLLABLE IEUNG-A-CHIEUCH
-0x9DDA 0xC55C # HANGUL SYLLABLE IEUNG-A-KHIEUKH
-0x9DDB 0xC55F # HANGUL SYLLABLE IEUNG-A-HIEUH
-0x9DDC 0xC562 # HANGUL SYLLABLE IEUNG-AE-SSANGKIYEOK
-0x9DDD 0xC563 # HANGUL SYLLABLE IEUNG-AE-KIYEOKSIOS
-0x9DDE 0xC565 # HANGUL SYLLABLE IEUNG-AE-NIEUNCIEUC
-0x9DDF 0xC566 # HANGUL SYLLABLE IEUNG-AE-NIEUNHIEUH
-0x9DE0 0xC567 # HANGUL SYLLABLE IEUNG-AE-TIKEUT
-0x9DE1 0xC569 # HANGUL SYLLABLE IEUNG-AE-RIEULKIYEOK
-0x9DE2 0xC56A # HANGUL SYLLABLE IEUNG-AE-RIEULMIEUM
-0x9DE3 0xC56B # HANGUL SYLLABLE IEUNG-AE-RIEULPIEUP
-0x9DE4 0xC56C # HANGUL SYLLABLE IEUNG-AE-RIEULSIOS
-0x9DE5 0xC56D # HANGUL SYLLABLE IEUNG-AE-RIEULTHIEUTH
-0x9DE6 0xC56E # HANGUL SYLLABLE IEUNG-AE-RIEULPHIEUPH
-0x9DE7 0xC56F # HANGUL SYLLABLE IEUNG-AE-RIEULHIEUH
-0x9DE8 0xC572 # HANGUL SYLLABLE IEUNG-AE-PIEUPSIOS
-0x9DE9 0xC576 # HANGUL SYLLABLE IEUNG-AE-CIEUC
-0x9DEA 0xC577 # HANGUL SYLLABLE IEUNG-AE-CHIEUCH
-0x9DEB 0xC578 # HANGUL SYLLABLE IEUNG-AE-KHIEUKH
-0x9DEC 0xC579 # HANGUL SYLLABLE IEUNG-AE-THIEUTH
-0x9DED 0xC57A # HANGUL SYLLABLE IEUNG-AE-PHIEUPH
-0x9DEE 0xC57B # HANGUL SYLLABLE IEUNG-AE-HIEUH
-0x9DEF 0xC57E # HANGUL SYLLABLE IEUNG-YA-SSANGKIYEOK
-0x9DF0 0xC57F # HANGUL SYLLABLE IEUNG-YA-KIYEOKSIOS
-0x9DF1 0xC581 # HANGUL SYLLABLE IEUNG-YA-NIEUNCIEUC
-0x9DF2 0xC582 # HANGUL SYLLABLE IEUNG-YA-NIEUNHIEUH
-0x9DF3 0xC583 # HANGUL SYLLABLE IEUNG-YA-TIKEUT
-0x9DF4 0xC585 # HANGUL SYLLABLE IEUNG-YA-RIEULKIYEOK
-0x9DF5 0xC586 # HANGUL SYLLABLE IEUNG-YA-RIEULMIEUM
-0x9DF6 0xC588 # HANGUL SYLLABLE IEUNG-YA-RIEULSIOS
-0x9DF7 0xC589 # HANGUL SYLLABLE IEUNG-YA-RIEULTHIEUTH
-0x9DF8 0xC58A # HANGUL SYLLABLE IEUNG-YA-RIEULPHIEUPH
-0x9DF9 0xC58B # HANGUL SYLLABLE IEUNG-YA-RIEULHIEUH
-0x9DFA 0xC58E # HANGUL SYLLABLE IEUNG-YA-PIEUPSIOS
-0x9DFB 0xC590 # HANGUL SYLLABLE IEUNG-YA-SSANGSIOS
-0x9DFC 0xC592 # HANGUL SYLLABLE IEUNG-YA-CIEUC
-0x9DFD 0xC593 # HANGUL SYLLABLE IEUNG-YA-CHIEUCH
-0x9DFE 0xC594 # HANGUL SYLLABLE IEUNG-YA-KHIEUKH
-0x9E41 0xC596 # HANGUL SYLLABLE IEUNG-YA-PHIEUPH
-0x9E42 0xC599 # HANGUL SYLLABLE IEUNG-YAE-KIYEOK
-0x9E43 0xC59A # HANGUL SYLLABLE IEUNG-YAE-SSANGKIYEOK
-0x9E44 0xC59B # HANGUL SYLLABLE IEUNG-YAE-KIYEOKSIOS
-0x9E45 0xC59D # HANGUL SYLLABLE IEUNG-YAE-NIEUNCIEUC
-0x9E46 0xC59E # HANGUL SYLLABLE IEUNG-YAE-NIEUNHIEUH
-0x9E47 0xC59F # HANGUL SYLLABLE IEUNG-YAE-TIKEUT
-0x9E48 0xC5A1 # HANGUL SYLLABLE IEUNG-YAE-RIEULKIYEOK
-0x9E49 0xC5A2 # HANGUL SYLLABLE IEUNG-YAE-RIEULMIEUM
-0x9E4A 0xC5A3 # HANGUL SYLLABLE IEUNG-YAE-RIEULPIEUP
-0x9E4B 0xC5A4 # HANGUL SYLLABLE IEUNG-YAE-RIEULSIOS
-0x9E4C 0xC5A5 # HANGUL SYLLABLE IEUNG-YAE-RIEULTHIEUTH
-0x9E4D 0xC5A6 # HANGUL SYLLABLE IEUNG-YAE-RIEULPHIEUPH
-0x9E4E 0xC5A7 # HANGUL SYLLABLE IEUNG-YAE-RIEULHIEUH
-0x9E4F 0xC5A8 # HANGUL SYLLABLE IEUNG-YAE-MIEUM
-0x9E50 0xC5AA # HANGUL SYLLABLE IEUNG-YAE-PIEUPSIOS
-0x9E51 0xC5AB # HANGUL SYLLABLE IEUNG-YAE-SIOS
-0x9E52 0xC5AC # HANGUL SYLLABLE IEUNG-YAE-SSANGSIOS
-0x9E53 0xC5AD # HANGUL SYLLABLE IEUNG-YAE-IEUNG
-0x9E54 0xC5AE # HANGUL SYLLABLE IEUNG-YAE-CIEUC
-0x9E55 0xC5AF # HANGUL SYLLABLE IEUNG-YAE-CHIEUCH
-0x9E56 0xC5B0 # HANGUL SYLLABLE IEUNG-YAE-KHIEUKH
-0x9E57 0xC5B1 # HANGUL SYLLABLE IEUNG-YAE-THIEUTH
-0x9E58 0xC5B2 # HANGUL SYLLABLE IEUNG-YAE-PHIEUPH
-0x9E59 0xC5B3 # HANGUL SYLLABLE IEUNG-YAE-HIEUH
-0x9E5A 0xC5B6 # HANGUL SYLLABLE IEUNG-EO-SSANGKIYEOK
-0x9E61 0xC5B7 # HANGUL SYLLABLE IEUNG-EO-KIYEOKSIOS
-0x9E62 0xC5BA # HANGUL SYLLABLE IEUNG-EO-NIEUNHIEUH
-0x9E63 0xC5BF # HANGUL SYLLABLE IEUNG-EO-RIEULPIEUP
-0x9E64 0xC5C0 # HANGUL SYLLABLE IEUNG-EO-RIEULSIOS
-0x9E65 0xC5C1 # HANGUL SYLLABLE IEUNG-EO-RIEULTHIEUTH
-0x9E66 0xC5C2 # HANGUL SYLLABLE IEUNG-EO-RIEULPHIEUPH
-0x9E67 0xC5C3 # HANGUL SYLLABLE IEUNG-EO-RIEULHIEUH
-0x9E68 0xC5CB # HANGUL SYLLABLE IEUNG-EO-CHIEUCH
-0x9E69 0xC5CD # HANGUL SYLLABLE IEUNG-EO-THIEUTH
-0x9E6A 0xC5CF # HANGUL SYLLABLE IEUNG-EO-HIEUH
-0x9E6B 0xC5D2 # HANGUL SYLLABLE IEUNG-E-SSANGKIYEOK
-0x9E6C 0xC5D3 # HANGUL SYLLABLE IEUNG-E-KIYEOKSIOS
-0x9E6D 0xC5D5 # HANGUL SYLLABLE IEUNG-E-NIEUNCIEUC
-0x9E6E 0xC5D6 # HANGUL SYLLABLE IEUNG-E-NIEUNHIEUH
-0x9E6F 0xC5D7 # HANGUL SYLLABLE IEUNG-E-TIKEUT
-0x9E70 0xC5D9 # HANGUL SYLLABLE IEUNG-E-RIEULKIYEOK
-0x9E71 0xC5DA # HANGUL SYLLABLE IEUNG-E-RIEULMIEUM
-0x9E72 0xC5DB # HANGUL SYLLABLE IEUNG-E-RIEULPIEUP
-0x9E73 0xC5DC # HANGUL SYLLABLE IEUNG-E-RIEULSIOS
-0x9E74 0xC5DD # HANGUL SYLLABLE IEUNG-E-RIEULTHIEUTH
-0x9E75 0xC5DE # HANGUL SYLLABLE IEUNG-E-RIEULPHIEUPH
-0x9E76 0xC5DF # HANGUL SYLLABLE IEUNG-E-RIEULHIEUH
-0x9E77 0xC5E2 # HANGUL SYLLABLE IEUNG-E-PIEUPSIOS
-0x9E78 0xC5E4 # HANGUL SYLLABLE IEUNG-E-SSANGSIOS
-0x9E79 0xC5E6 # HANGUL SYLLABLE IEUNG-E-CIEUC
-0x9E7A 0xC5E7 # HANGUL SYLLABLE IEUNG-E-CHIEUCH
-0x9E81 0xC5E8 # HANGUL SYLLABLE IEUNG-E-KHIEUKH
-0x9E82 0xC5E9 # HANGUL SYLLABLE IEUNG-E-THIEUTH
-0x9E83 0xC5EA # HANGUL SYLLABLE IEUNG-E-PHIEUPH
-0x9E84 0xC5EB # HANGUL SYLLABLE IEUNG-E-HIEUH
-0x9E85 0xC5EF # HANGUL SYLLABLE IEUNG-YEO-KIYEOKSIOS
-0x9E86 0xC5F1 # HANGUL SYLLABLE IEUNG-YEO-NIEUNCIEUC
-0x9E87 0xC5F2 # HANGUL SYLLABLE IEUNG-YEO-NIEUNHIEUH
-0x9E88 0xC5F3 # HANGUL SYLLABLE IEUNG-YEO-TIKEUT
-0x9E89 0xC5F5 # HANGUL SYLLABLE IEUNG-YEO-RIEULKIYEOK
-0x9E8A 0xC5F8 # HANGUL SYLLABLE IEUNG-YEO-RIEULSIOS
-0x9E8B 0xC5F9 # HANGUL SYLLABLE IEUNG-YEO-RIEULTHIEUTH
-0x9E8C 0xC5FA # HANGUL SYLLABLE IEUNG-YEO-RIEULPHIEUPH
-0x9E8D 0xC5FB # HANGUL SYLLABLE IEUNG-YEO-RIEULHIEUH
-0x9E8E 0xC602 # HANGUL SYLLABLE IEUNG-YEO-CIEUC
-0x9E8F 0xC603 # HANGUL SYLLABLE IEUNG-YEO-CHIEUCH
-0x9E90 0xC604 # HANGUL SYLLABLE IEUNG-YEO-KHIEUKH
-0x9E91 0xC609 # HANGUL SYLLABLE IEUNG-YE-KIYEOK
-0x9E92 0xC60A # HANGUL SYLLABLE IEUNG-YE-SSANGKIYEOK
-0x9E93 0xC60B # HANGUL SYLLABLE IEUNG-YE-KIYEOKSIOS
-0x9E94 0xC60D # HANGUL SYLLABLE IEUNG-YE-NIEUNCIEUC
-0x9E95 0xC60E # HANGUL SYLLABLE IEUNG-YE-NIEUNHIEUH
-0x9E96 0xC60F # HANGUL SYLLABLE IEUNG-YE-TIKEUT
-0x9E97 0xC611 # HANGUL SYLLABLE IEUNG-YE-RIEULKIYEOK
-0x9E98 0xC612 # HANGUL SYLLABLE IEUNG-YE-RIEULMIEUM
-0x9E99 0xC613 # HANGUL SYLLABLE IEUNG-YE-RIEULPIEUP
-0x9E9A 0xC614 # HANGUL SYLLABLE IEUNG-YE-RIEULSIOS
-0x9E9B 0xC615 # HANGUL SYLLABLE IEUNG-YE-RIEULTHIEUTH
-0x9E9C 0xC616 # HANGUL SYLLABLE IEUNG-YE-RIEULPHIEUPH
-0x9E9D 0xC617 # HANGUL SYLLABLE IEUNG-YE-RIEULHIEUH
-0x9E9E 0xC61A # HANGUL SYLLABLE IEUNG-YE-PIEUPSIOS
-0x9E9F 0xC61D # HANGUL SYLLABLE IEUNG-YE-IEUNG
-0x9EA0 0xC61E # HANGUL SYLLABLE IEUNG-YE-CIEUC
-0x9EA1 0xC61F # HANGUL SYLLABLE IEUNG-YE-CHIEUCH
-0x9EA2 0xC620 # HANGUL SYLLABLE IEUNG-YE-KHIEUKH
-0x9EA3 0xC621 # HANGUL SYLLABLE IEUNG-YE-THIEUTH
-0x9EA4 0xC622 # HANGUL SYLLABLE IEUNG-YE-PHIEUPH
-0x9EA5 0xC623 # HANGUL SYLLABLE IEUNG-YE-HIEUH
-0x9EA6 0xC626 # HANGUL SYLLABLE IEUNG-O-SSANGKIYEOK
-0x9EA7 0xC627 # HANGUL SYLLABLE IEUNG-O-KIYEOKSIOS
-0x9EA8 0xC629 # HANGUL SYLLABLE IEUNG-O-NIEUNCIEUC
-0x9EA9 0xC62A # HANGUL SYLLABLE IEUNG-O-NIEUNHIEUH
-0x9EAA 0xC62B # HANGUL SYLLABLE IEUNG-O-TIKEUT
-0x9EAB 0xC62F # HANGUL SYLLABLE IEUNG-O-RIEULPIEUP
-0x9EAC 0xC631 # HANGUL SYLLABLE IEUNG-O-RIEULTHIEUTH
-0x9EAD 0xC632 # HANGUL SYLLABLE IEUNG-O-RIEULPHIEUPH
-0x9EAE 0xC636 # HANGUL SYLLABLE IEUNG-O-PIEUPSIOS
-0x9EAF 0xC638 # HANGUL SYLLABLE IEUNG-O-SSANGSIOS
-0x9EB0 0xC63A # HANGUL SYLLABLE IEUNG-O-CIEUC
-0x9EB1 0xC63C # HANGUL SYLLABLE IEUNG-O-KHIEUKH
-0x9EB2 0xC63D # HANGUL SYLLABLE IEUNG-O-THIEUTH
-0x9EB3 0xC63E # HANGUL SYLLABLE IEUNG-O-PHIEUPH
-0x9EB4 0xC63F # HANGUL SYLLABLE IEUNG-O-HIEUH
-0x9EB5 0xC642 # HANGUL SYLLABLE IEUNG-WA-SSANGKIYEOK
-0x9EB6 0xC643 # HANGUL SYLLABLE IEUNG-WA-KIYEOKSIOS
-0x9EB7 0xC645 # HANGUL SYLLABLE IEUNG-WA-NIEUNCIEUC
-0x9EB8 0xC646 # HANGUL SYLLABLE IEUNG-WA-NIEUNHIEUH
-0x9EB9 0xC647 # HANGUL SYLLABLE IEUNG-WA-TIKEUT
-0x9EBA 0xC649 # HANGUL SYLLABLE IEUNG-WA-RIEULKIYEOK
-0x9EBB 0xC64A # HANGUL SYLLABLE IEUNG-WA-RIEULMIEUM
-0x9EBC 0xC64B # HANGUL SYLLABLE IEUNG-WA-RIEULPIEUP
-0x9EBD 0xC64C # HANGUL SYLLABLE IEUNG-WA-RIEULSIOS
-0x9EBE 0xC64D # HANGUL SYLLABLE IEUNG-WA-RIEULTHIEUTH
-0x9EBF 0xC64E # HANGUL SYLLABLE IEUNG-WA-RIEULPHIEUPH
-0x9EC0 0xC64F # HANGUL SYLLABLE IEUNG-WA-RIEULHIEUH
-0x9EC1 0xC652 # HANGUL SYLLABLE IEUNG-WA-PIEUPSIOS
-0x9EC2 0xC656 # HANGUL SYLLABLE IEUNG-WA-CIEUC
-0x9EC3 0xC657 # HANGUL SYLLABLE IEUNG-WA-CHIEUCH
-0x9EC4 0xC658 # HANGUL SYLLABLE IEUNG-WA-KHIEUKH
-0x9EC5 0xC659 # HANGUL SYLLABLE IEUNG-WA-THIEUTH
-0x9EC6 0xC65A # HANGUL SYLLABLE IEUNG-WA-PHIEUPH
-0x9EC7 0xC65B # HANGUL SYLLABLE IEUNG-WA-HIEUH
-0x9EC8 0xC65E # HANGUL SYLLABLE IEUNG-WAE-SSANGKIYEOK
-0x9EC9 0xC65F # HANGUL SYLLABLE IEUNG-WAE-KIYEOKSIOS
-0x9ECA 0xC661 # HANGUL SYLLABLE IEUNG-WAE-NIEUNCIEUC
-0x9ECB 0xC662 # HANGUL SYLLABLE IEUNG-WAE-NIEUNHIEUH
-0x9ECC 0xC663 # HANGUL SYLLABLE IEUNG-WAE-TIKEUT
-0x9ECD 0xC664 # HANGUL SYLLABLE IEUNG-WAE-RIEUL
-0x9ECE 0xC665 # HANGUL SYLLABLE IEUNG-WAE-RIEULKIYEOK
-0x9ECF 0xC666 # HANGUL SYLLABLE IEUNG-WAE-RIEULMIEUM
-0x9ED0 0xC667 # HANGUL SYLLABLE IEUNG-WAE-RIEULPIEUP
-0x9ED1 0xC668 # HANGUL SYLLABLE IEUNG-WAE-RIEULSIOS
-0x9ED2 0xC669 # HANGUL SYLLABLE IEUNG-WAE-RIEULTHIEUTH
-0x9ED3 0xC66A # HANGUL SYLLABLE IEUNG-WAE-RIEULPHIEUPH
-0x9ED4 0xC66B # HANGUL SYLLABLE IEUNG-WAE-RIEULHIEUH
-0x9ED5 0xC66D # HANGUL SYLLABLE IEUNG-WAE-PIEUP
-0x9ED6 0xC66E # HANGUL SYLLABLE IEUNG-WAE-PIEUPSIOS
-0x9ED7 0xC670 # HANGUL SYLLABLE IEUNG-WAE-SSANGSIOS
-0x9ED8 0xC672 # HANGUL SYLLABLE IEUNG-WAE-CIEUC
-0x9ED9 0xC673 # HANGUL SYLLABLE IEUNG-WAE-CHIEUCH
-0x9EDA 0xC674 # HANGUL SYLLABLE IEUNG-WAE-KHIEUKH
-0x9EDB 0xC675 # HANGUL SYLLABLE IEUNG-WAE-THIEUTH
-0x9EDC 0xC676 # HANGUL SYLLABLE IEUNG-WAE-PHIEUPH
-0x9EDD 0xC677 # HANGUL SYLLABLE IEUNG-WAE-HIEUH
-0x9EDE 0xC67A # HANGUL SYLLABLE IEUNG-OE-SSANGKIYEOK
-0x9EDF 0xC67B # HANGUL SYLLABLE IEUNG-OE-KIYEOKSIOS
-0x9EE0 0xC67D # HANGUL SYLLABLE IEUNG-OE-NIEUNCIEUC
-0x9EE1 0xC67E # HANGUL SYLLABLE IEUNG-OE-NIEUNHIEUH
-0x9EE2 0xC67F # HANGUL SYLLABLE IEUNG-OE-TIKEUT
-0x9EE3 0xC681 # HANGUL SYLLABLE IEUNG-OE-RIEULKIYEOK
-0x9EE4 0xC682 # HANGUL SYLLABLE IEUNG-OE-RIEULMIEUM
-0x9EE5 0xC683 # HANGUL SYLLABLE IEUNG-OE-RIEULPIEUP
-0x9EE6 0xC684 # HANGUL SYLLABLE IEUNG-OE-RIEULSIOS
-0x9EE7 0xC685 # HANGUL SYLLABLE IEUNG-OE-RIEULTHIEUTH
-0x9EE8 0xC686 # HANGUL SYLLABLE IEUNG-OE-RIEULPHIEUPH
-0x9EE9 0xC687 # HANGUL SYLLABLE IEUNG-OE-RIEULHIEUH
-0x9EEA 0xC68A # HANGUL SYLLABLE IEUNG-OE-PIEUPSIOS
-0x9EEB 0xC68C # HANGUL SYLLABLE IEUNG-OE-SSANGSIOS
-0x9EEC 0xC68E # HANGUL SYLLABLE IEUNG-OE-CIEUC
-0x9EED 0xC68F # HANGUL SYLLABLE IEUNG-OE-CHIEUCH
-0x9EEE 0xC690 # HANGUL SYLLABLE IEUNG-OE-KHIEUKH
-0x9EEF 0xC691 # HANGUL SYLLABLE IEUNG-OE-THIEUTH
-0x9EF0 0xC692 # HANGUL SYLLABLE IEUNG-OE-PHIEUPH
-0x9EF1 0xC693 # HANGUL SYLLABLE IEUNG-OE-HIEUH
-0x9EF2 0xC696 # HANGUL SYLLABLE IEUNG-YO-SSANGKIYEOK
-0x9EF3 0xC697 # HANGUL SYLLABLE IEUNG-YO-KIYEOKSIOS
-0x9EF4 0xC699 # HANGUL SYLLABLE IEUNG-YO-NIEUNCIEUC
-0x9EF5 0xC69A # HANGUL SYLLABLE IEUNG-YO-NIEUNHIEUH
-0x9EF6 0xC69B # HANGUL SYLLABLE IEUNG-YO-TIKEUT
-0x9EF7 0xC69D # HANGUL SYLLABLE IEUNG-YO-RIEULKIYEOK
-0x9EF8 0xC69E # HANGUL SYLLABLE IEUNG-YO-RIEULMIEUM
-0x9EF9 0xC69F # HANGUL SYLLABLE IEUNG-YO-RIEULPIEUP
-0x9EFA 0xC6A0 # HANGUL SYLLABLE IEUNG-YO-RIEULSIOS
-0x9EFB 0xC6A1 # HANGUL SYLLABLE IEUNG-YO-RIEULTHIEUTH
-0x9EFC 0xC6A2 # HANGUL SYLLABLE IEUNG-YO-RIEULPHIEUPH
-0x9EFD 0xC6A3 # HANGUL SYLLABLE IEUNG-YO-RIEULHIEUH
-0x9EFE 0xC6A6 # HANGUL SYLLABLE IEUNG-YO-PIEUPSIOS
-0x9F41 0xC6A8 # HANGUL SYLLABLE IEUNG-YO-SSANGSIOS
-0x9F42 0xC6AA # HANGUL SYLLABLE IEUNG-YO-CIEUC
-0x9F43 0xC6AB # HANGUL SYLLABLE IEUNG-YO-CHIEUCH
-0x9F44 0xC6AC # HANGUL SYLLABLE IEUNG-YO-KHIEUKH
-0x9F45 0xC6AD # HANGUL SYLLABLE IEUNG-YO-THIEUTH
-0x9F46 0xC6AE # HANGUL SYLLABLE IEUNG-YO-PHIEUPH
-0x9F47 0xC6AF # HANGUL SYLLABLE IEUNG-YO-HIEUH
-0x9F48 0xC6B2 # HANGUL SYLLABLE IEUNG-U-SSANGKIYEOK
-0x9F49 0xC6B3 # HANGUL SYLLABLE IEUNG-U-KIYEOKSIOS
-0x9F4A 0xC6B5 # HANGUL SYLLABLE IEUNG-U-NIEUNCIEUC
-0x9F4B 0xC6B6 # HANGUL SYLLABLE IEUNG-U-NIEUNHIEUH
-0x9F4C 0xC6B7 # HANGUL SYLLABLE IEUNG-U-TIKEUT
-0x9F4D 0xC6BB # HANGUL SYLLABLE IEUNG-U-RIEULPIEUP
-0x9F4E 0xC6BC # HANGUL SYLLABLE IEUNG-U-RIEULSIOS
-0x9F4F 0xC6BD # HANGUL SYLLABLE IEUNG-U-RIEULTHIEUTH
-0x9F50 0xC6BE # HANGUL SYLLABLE IEUNG-U-RIEULPHIEUPH
-0x9F51 0xC6BF # HANGUL SYLLABLE IEUNG-U-RIEULHIEUH
-0x9F52 0xC6C2 # HANGUL SYLLABLE IEUNG-U-PIEUPSIOS
-0x9F53 0xC6C4 # HANGUL SYLLABLE IEUNG-U-SSANGSIOS
-0x9F54 0xC6C6 # HANGUL SYLLABLE IEUNG-U-CIEUC
-0x9F55 0xC6C7 # HANGUL SYLLABLE IEUNG-U-CHIEUCH
-0x9F56 0xC6C8 # HANGUL SYLLABLE IEUNG-U-KHIEUKH
-0x9F57 0xC6C9 # HANGUL SYLLABLE IEUNG-U-THIEUTH
-0x9F58 0xC6CA # HANGUL SYLLABLE IEUNG-U-PHIEUPH
-0x9F59 0xC6CB # HANGUL SYLLABLE IEUNG-U-HIEUH
-0x9F5A 0xC6CE # HANGUL SYLLABLE IEUNG-WEO-SSANGKIYEOK
-0x9F61 0xC6CF # HANGUL SYLLABLE IEUNG-WEO-KIYEOKSIOS
-0x9F62 0xC6D1 # HANGUL SYLLABLE IEUNG-WEO-NIEUNCIEUC
-0x9F63 0xC6D2 # HANGUL SYLLABLE IEUNG-WEO-NIEUNHIEUH
-0x9F64 0xC6D3 # HANGUL SYLLABLE IEUNG-WEO-TIKEUT
-0x9F65 0xC6D5 # HANGUL SYLLABLE IEUNG-WEO-RIEULKIYEOK
-0x9F66 0xC6D6 # HANGUL SYLLABLE IEUNG-WEO-RIEULMIEUM
-0x9F67 0xC6D7 # HANGUL SYLLABLE IEUNG-WEO-RIEULPIEUP
-0x9F68 0xC6D8 # HANGUL SYLLABLE IEUNG-WEO-RIEULSIOS
-0x9F69 0xC6D9 # HANGUL SYLLABLE IEUNG-WEO-RIEULTHIEUTH
-0x9F6A 0xC6DA # HANGUL SYLLABLE IEUNG-WEO-RIEULPHIEUPH
-0x9F6B 0xC6DB # HANGUL SYLLABLE IEUNG-WEO-RIEULHIEUH
-0x9F6C 0xC6DE # HANGUL SYLLABLE IEUNG-WEO-PIEUPSIOS
-0x9F6D 0xC6DF # HANGUL SYLLABLE IEUNG-WEO-SIOS
-0x9F6E 0xC6E2 # HANGUL SYLLABLE IEUNG-WEO-CIEUC
-0x9F6F 0xC6E3 # HANGUL SYLLABLE IEUNG-WEO-CHIEUCH
-0x9F70 0xC6E4 # HANGUL SYLLABLE IEUNG-WEO-KHIEUKH
-0x9F71 0xC6E5 # HANGUL SYLLABLE IEUNG-WEO-THIEUTH
-0x9F72 0xC6E6 # HANGUL SYLLABLE IEUNG-WEO-PHIEUPH
-0x9F73 0xC6E7 # HANGUL SYLLABLE IEUNG-WEO-HIEUH
-0x9F74 0xC6EA # HANGUL SYLLABLE IEUNG-WE-SSANGKIYEOK
-0x9F75 0xC6EB # HANGUL SYLLABLE IEUNG-WE-KIYEOKSIOS
-0x9F76 0xC6ED # HANGUL SYLLABLE IEUNG-WE-NIEUNCIEUC
-0x9F77 0xC6EE # HANGUL SYLLABLE IEUNG-WE-NIEUNHIEUH
-0x9F78 0xC6EF # HANGUL SYLLABLE IEUNG-WE-TIKEUT
-0x9F79 0xC6F1 # HANGUL SYLLABLE IEUNG-WE-RIEULKIYEOK
-0x9F7A 0xC6F2 # HANGUL SYLLABLE IEUNG-WE-RIEULMIEUM
-0x9F81 0xC6F3 # HANGUL SYLLABLE IEUNG-WE-RIEULPIEUP
-0x9F82 0xC6F4 # HANGUL SYLLABLE IEUNG-WE-RIEULSIOS
-0x9F83 0xC6F5 # HANGUL SYLLABLE IEUNG-WE-RIEULTHIEUTH
-0x9F84 0xC6F6 # HANGUL SYLLABLE IEUNG-WE-RIEULPHIEUPH
-0x9F85 0xC6F7 # HANGUL SYLLABLE IEUNG-WE-RIEULHIEUH
-0x9F86 0xC6FA # HANGUL SYLLABLE IEUNG-WE-PIEUPSIOS
-0x9F87 0xC6FB # HANGUL SYLLABLE IEUNG-WE-SIOS
-0x9F88 0xC6FC # HANGUL SYLLABLE IEUNG-WE-SSANGSIOS
-0x9F89 0xC6FE # HANGUL SYLLABLE IEUNG-WE-CIEUC
-0x9F8A 0xC6FF # HANGUL SYLLABLE IEUNG-WE-CHIEUCH
-0x9F8B 0xC700 # HANGUL SYLLABLE IEUNG-WE-KHIEUKH
-0x9F8C 0xC701 # HANGUL SYLLABLE IEUNG-WE-THIEUTH
-0x9F8D 0xC702 # HANGUL SYLLABLE IEUNG-WE-PHIEUPH
-0x9F8E 0xC703 # HANGUL SYLLABLE IEUNG-WE-HIEUH
-0x9F8F 0xC706 # HANGUL SYLLABLE IEUNG-WI-SSANGKIYEOK
-0x9F90 0xC707 # HANGUL SYLLABLE IEUNG-WI-KIYEOKSIOS
-0x9F91 0xC709 # HANGUL SYLLABLE IEUNG-WI-NIEUNCIEUC
-0x9F92 0xC70A # HANGUL SYLLABLE IEUNG-WI-NIEUNHIEUH
-0x9F93 0xC70B # HANGUL SYLLABLE IEUNG-WI-TIKEUT
-0x9F94 0xC70D # HANGUL SYLLABLE IEUNG-WI-RIEULKIYEOK
-0x9F95 0xC70E # HANGUL SYLLABLE IEUNG-WI-RIEULMIEUM
-0x9F96 0xC70F # HANGUL SYLLABLE IEUNG-WI-RIEULPIEUP
-0x9F97 0xC710 # HANGUL SYLLABLE IEUNG-WI-RIEULSIOS
-0x9F98 0xC711 # HANGUL SYLLABLE IEUNG-WI-RIEULTHIEUTH
-0x9F99 0xC712 # HANGUL SYLLABLE IEUNG-WI-RIEULPHIEUPH
-0x9F9A 0xC713 # HANGUL SYLLABLE IEUNG-WI-RIEULHIEUH
-0x9F9B 0xC716 # HANGUL SYLLABLE IEUNG-WI-PIEUPSIOS
-0x9F9C 0xC718 # HANGUL SYLLABLE IEUNG-WI-SSANGSIOS
-0x9F9D 0xC71A # HANGUL SYLLABLE IEUNG-WI-CIEUC
-0x9F9E 0xC71B # HANGUL SYLLABLE IEUNG-WI-CHIEUCH
-0x9F9F 0xC71C # HANGUL SYLLABLE IEUNG-WI-KHIEUKH
-0x9FA0 0xC71D # HANGUL SYLLABLE IEUNG-WI-THIEUTH
-0x9FA1 0xC71E # HANGUL SYLLABLE IEUNG-WI-PHIEUPH
-0x9FA2 0xC71F # HANGUL SYLLABLE IEUNG-WI-HIEUH
-0x9FA3 0xC722 # HANGUL SYLLABLE IEUNG-YU-SSANGKIYEOK
-0x9FA4 0xC723 # HANGUL SYLLABLE IEUNG-YU-KIYEOKSIOS
-0x9FA5 0xC725 # HANGUL SYLLABLE IEUNG-YU-NIEUNCIEUC
-0x9FA6 0xC726 # HANGUL SYLLABLE IEUNG-YU-NIEUNHIEUH
-0x9FA7 0xC727 # HANGUL SYLLABLE IEUNG-YU-TIKEUT
-0x9FA8 0xC729 # HANGUL SYLLABLE IEUNG-YU-RIEULKIYEOK
-0x9FA9 0xC72A # HANGUL SYLLABLE IEUNG-YU-RIEULMIEUM
-0x9FAA 0xC72B # HANGUL SYLLABLE IEUNG-YU-RIEULPIEUP
-0x9FAB 0xC72C # HANGUL SYLLABLE IEUNG-YU-RIEULSIOS
-0x9FAC 0xC72D # HANGUL SYLLABLE IEUNG-YU-RIEULTHIEUTH
-0x9FAD 0xC72E # HANGUL SYLLABLE IEUNG-YU-RIEULPHIEUPH
-0x9FAE 0xC72F # HANGUL SYLLABLE IEUNG-YU-RIEULHIEUH
-0x9FAF 0xC732 # HANGUL SYLLABLE IEUNG-YU-PIEUPSIOS
-0x9FB0 0xC734 # HANGUL SYLLABLE IEUNG-YU-SSANGSIOS
-0x9FB1 0xC736 # HANGUL SYLLABLE IEUNG-YU-CIEUC
-0x9FB2 0xC738 # HANGUL SYLLABLE IEUNG-YU-KHIEUKH
-0x9FB3 0xC739 # HANGUL SYLLABLE IEUNG-YU-THIEUTH
-0x9FB4 0xC73A # HANGUL SYLLABLE IEUNG-YU-PHIEUPH
-0x9FB5 0xC73B # HANGUL SYLLABLE IEUNG-YU-HIEUH
-0x9FB6 0xC73E # HANGUL SYLLABLE IEUNG-EU-SSANGKIYEOK
-0x9FB7 0xC73F # HANGUL SYLLABLE IEUNG-EU-KIYEOKSIOS
-0x9FB8 0xC741 # HANGUL SYLLABLE IEUNG-EU-NIEUNCIEUC
-0x9FB9 0xC742 # HANGUL SYLLABLE IEUNG-EU-NIEUNHIEUH
-0x9FBA 0xC743 # HANGUL SYLLABLE IEUNG-EU-TIKEUT
-0x9FBB 0xC745 # HANGUL SYLLABLE IEUNG-EU-RIEULKIYEOK
-0x9FBC 0xC746 # HANGUL SYLLABLE IEUNG-EU-RIEULMIEUM
-0x9FBD 0xC747 # HANGUL SYLLABLE IEUNG-EU-RIEULPIEUP
-0x9FBE 0xC748 # HANGUL SYLLABLE IEUNG-EU-RIEULSIOS
-0x9FBF 0xC749 # HANGUL SYLLABLE IEUNG-EU-RIEULTHIEUTH
-0x9FC0 0xC74B # HANGUL SYLLABLE IEUNG-EU-RIEULHIEUH
-0x9FC1 0xC74E # HANGUL SYLLABLE IEUNG-EU-PIEUPSIOS
-0x9FC2 0xC750 # HANGUL SYLLABLE IEUNG-EU-SSANGSIOS
-0x9FC3 0xC759 # HANGUL SYLLABLE IEUNG-YI-KIYEOK
-0x9FC4 0xC75A # HANGUL SYLLABLE IEUNG-YI-SSANGKIYEOK
-0x9FC5 0xC75B # HANGUL SYLLABLE IEUNG-YI-KIYEOKSIOS
-0x9FC6 0xC75D # HANGUL SYLLABLE IEUNG-YI-NIEUNCIEUC
-0x9FC7 0xC75E # HANGUL SYLLABLE IEUNG-YI-NIEUNHIEUH
-0x9FC8 0xC75F # HANGUL SYLLABLE IEUNG-YI-TIKEUT
-0x9FC9 0xC761 # HANGUL SYLLABLE IEUNG-YI-RIEULKIYEOK
-0x9FCA 0xC762 # HANGUL SYLLABLE IEUNG-YI-RIEULMIEUM
-0x9FCB 0xC763 # HANGUL SYLLABLE IEUNG-YI-RIEULPIEUP
-0x9FCC 0xC764 # HANGUL SYLLABLE IEUNG-YI-RIEULSIOS
-0x9FCD 0xC765 # HANGUL SYLLABLE IEUNG-YI-RIEULTHIEUTH
-0x9FCE 0xC766 # HANGUL SYLLABLE IEUNG-YI-RIEULPHIEUPH
-0x9FCF 0xC767 # HANGUL SYLLABLE IEUNG-YI-RIEULHIEUH
-0x9FD0 0xC769 # HANGUL SYLLABLE IEUNG-YI-PIEUP
-0x9FD1 0xC76A # HANGUL SYLLABLE IEUNG-YI-PIEUPSIOS
-0x9FD2 0xC76C # HANGUL SYLLABLE IEUNG-YI-SSANGSIOS
-0x9FD3 0xC76D # HANGUL SYLLABLE IEUNG-YI-IEUNG
-0x9FD4 0xC76E # HANGUL SYLLABLE IEUNG-YI-CIEUC
-0x9FD5 0xC76F # HANGUL SYLLABLE IEUNG-YI-CHIEUCH
-0x9FD6 0xC770 # HANGUL SYLLABLE IEUNG-YI-KHIEUKH
-0x9FD7 0xC771 # HANGUL SYLLABLE IEUNG-YI-THIEUTH
-0x9FD8 0xC772 # HANGUL SYLLABLE IEUNG-YI-PHIEUPH
-0x9FD9 0xC773 # HANGUL SYLLABLE IEUNG-YI-HIEUH
-0x9FDA 0xC776 # HANGUL SYLLABLE IEUNG-I-SSANGKIYEOK
-0x9FDB 0xC777 # HANGUL SYLLABLE IEUNG-I-KIYEOKSIOS
-0x9FDC 0xC779 # HANGUL SYLLABLE IEUNG-I-NIEUNCIEUC
-0x9FDD 0xC77A # HANGUL SYLLABLE IEUNG-I-NIEUNHIEUH
-0x9FDE 0xC77B # HANGUL SYLLABLE IEUNG-I-TIKEUT
-0x9FDF 0xC77F # HANGUL SYLLABLE IEUNG-I-RIEULPIEUP
-0x9FE0 0xC780 # HANGUL SYLLABLE IEUNG-I-RIEULSIOS
-0x9FE1 0xC781 # HANGUL SYLLABLE IEUNG-I-RIEULTHIEUTH
-0x9FE2 0xC782 # HANGUL SYLLABLE IEUNG-I-RIEULPHIEUPH
-0x9FE3 0xC786 # HANGUL SYLLABLE IEUNG-I-PIEUPSIOS
-0x9FE4 0xC78B # HANGUL SYLLABLE IEUNG-I-CHIEUCH
-0x9FE5 0xC78C # HANGUL SYLLABLE IEUNG-I-KHIEUKH
-0x9FE6 0xC78D # HANGUL SYLLABLE IEUNG-I-THIEUTH
-0x9FE7 0xC78F # HANGUL SYLLABLE IEUNG-I-HIEUH
-0x9FE8 0xC792 # HANGUL SYLLABLE CIEUC-A-SSANGKIYEOK
-0x9FE9 0xC793 # HANGUL SYLLABLE CIEUC-A-KIYEOKSIOS
-0x9FEA 0xC795 # HANGUL SYLLABLE CIEUC-A-NIEUNCIEUC
-0x9FEB 0xC799 # HANGUL SYLLABLE CIEUC-A-RIEULKIYEOK
-0x9FEC 0xC79B # HANGUL SYLLABLE CIEUC-A-RIEULPIEUP
-0x9FED 0xC79C # HANGUL SYLLABLE CIEUC-A-RIEULSIOS
-0x9FEE 0xC79D # HANGUL SYLLABLE CIEUC-A-RIEULTHIEUTH
-0x9FEF 0xC79E # HANGUL SYLLABLE CIEUC-A-RIEULPHIEUPH
-0x9FF0 0xC79F # HANGUL SYLLABLE CIEUC-A-RIEULHIEUH
-0x9FF1 0xC7A2 # HANGUL SYLLABLE CIEUC-A-PIEUPSIOS
-0x9FF2 0xC7A7 # HANGUL SYLLABLE CIEUC-A-CHIEUCH
-0x9FF3 0xC7A8 # HANGUL SYLLABLE CIEUC-A-KHIEUKH
-0x9FF4 0xC7A9 # HANGUL SYLLABLE CIEUC-A-THIEUTH
-0x9FF5 0xC7AA # HANGUL SYLLABLE CIEUC-A-PHIEUPH
-0x9FF6 0xC7AB # HANGUL SYLLABLE CIEUC-A-HIEUH
-0x9FF7 0xC7AE # HANGUL SYLLABLE CIEUC-AE-SSANGKIYEOK
-0x9FF8 0xC7AF # HANGUL SYLLABLE CIEUC-AE-KIYEOKSIOS
-0x9FF9 0xC7B1 # HANGUL SYLLABLE CIEUC-AE-NIEUNCIEUC
-0x9FFA 0xC7B2 # HANGUL SYLLABLE CIEUC-AE-NIEUNHIEUH
-0x9FFB 0xC7B3 # HANGUL SYLLABLE CIEUC-AE-TIKEUT
-0x9FFC 0xC7B5 # HANGUL SYLLABLE CIEUC-AE-RIEULKIYEOK
-0x9FFD 0xC7B6 # HANGUL SYLLABLE CIEUC-AE-RIEULMIEUM
-0x9FFE 0xC7B7 # HANGUL SYLLABLE CIEUC-AE-RIEULPIEUP
-0xA041 0xC7B8 # HANGUL SYLLABLE CIEUC-AE-RIEULSIOS
-0xA042 0xC7B9 # HANGUL SYLLABLE CIEUC-AE-RIEULTHIEUTH
-0xA043 0xC7BA # HANGUL SYLLABLE CIEUC-AE-RIEULPHIEUPH
-0xA044 0xC7BB # HANGUL SYLLABLE CIEUC-AE-RIEULHIEUH
-0xA045 0xC7BE # HANGUL SYLLABLE CIEUC-AE-PIEUPSIOS
-0xA046 0xC7C2 # HANGUL SYLLABLE CIEUC-AE-CIEUC
-0xA047 0xC7C3 # HANGUL SYLLABLE CIEUC-AE-CHIEUCH
-0xA048 0xC7C4 # HANGUL SYLLABLE CIEUC-AE-KHIEUKH
-0xA049 0xC7C5 # HANGUL SYLLABLE CIEUC-AE-THIEUTH
-0xA04A 0xC7C6 # HANGUL SYLLABLE CIEUC-AE-PHIEUPH
-0xA04B 0xC7C7 # HANGUL SYLLABLE CIEUC-AE-HIEUH
-0xA04C 0xC7CA # HANGUL SYLLABLE CIEUC-YA-SSANGKIYEOK
-0xA04D 0xC7CB # HANGUL SYLLABLE CIEUC-YA-KIYEOKSIOS
-0xA04E 0xC7CD # HANGUL SYLLABLE CIEUC-YA-NIEUNCIEUC
-0xA04F 0xC7CF # HANGUL SYLLABLE CIEUC-YA-TIKEUT
-0xA050 0xC7D1 # HANGUL SYLLABLE CIEUC-YA-RIEULKIYEOK
-0xA051 0xC7D2 # HANGUL SYLLABLE CIEUC-YA-RIEULMIEUM
-0xA052 0xC7D3 # HANGUL SYLLABLE CIEUC-YA-RIEULPIEUP
-0xA053 0xC7D4 # HANGUL SYLLABLE CIEUC-YA-RIEULSIOS
-0xA054 0xC7D5 # HANGUL SYLLABLE CIEUC-YA-RIEULTHIEUTH
-0xA055 0xC7D6 # HANGUL SYLLABLE CIEUC-YA-RIEULPHIEUPH
-0xA056 0xC7D7 # HANGUL SYLLABLE CIEUC-YA-RIEULHIEUH
-0xA057 0xC7D9 # HANGUL SYLLABLE CIEUC-YA-PIEUP
-0xA058 0xC7DA # HANGUL SYLLABLE CIEUC-YA-PIEUPSIOS
-0xA059 0xC7DB # HANGUL SYLLABLE CIEUC-YA-SIOS
-0xA05A 0xC7DC # HANGUL SYLLABLE CIEUC-YA-SSANGSIOS
-0xA061 0xC7DE # HANGUL SYLLABLE CIEUC-YA-CIEUC
-0xA062 0xC7DF # HANGUL SYLLABLE CIEUC-YA-CHIEUCH
-0xA063 0xC7E0 # HANGUL SYLLABLE CIEUC-YA-KHIEUKH
-0xA064 0xC7E1 # HANGUL SYLLABLE CIEUC-YA-THIEUTH
-0xA065 0xC7E2 # HANGUL SYLLABLE CIEUC-YA-PHIEUPH
-0xA066 0xC7E3 # HANGUL SYLLABLE CIEUC-YA-HIEUH
-0xA067 0xC7E5 # HANGUL SYLLABLE CIEUC-YAE-KIYEOK
-0xA068 0xC7E6 # HANGUL SYLLABLE CIEUC-YAE-SSANGKIYEOK
-0xA069 0xC7E7 # HANGUL SYLLABLE CIEUC-YAE-KIYEOKSIOS
-0xA06A 0xC7E9 # HANGUL SYLLABLE CIEUC-YAE-NIEUNCIEUC
-0xA06B 0xC7EA # HANGUL SYLLABLE CIEUC-YAE-NIEUNHIEUH
-0xA06C 0xC7EB # HANGUL SYLLABLE CIEUC-YAE-TIKEUT
-0xA06D 0xC7ED # HANGUL SYLLABLE CIEUC-YAE-RIEULKIYEOK
-0xA06E 0xC7EE # HANGUL SYLLABLE CIEUC-YAE-RIEULMIEUM
-0xA06F 0xC7EF # HANGUL SYLLABLE CIEUC-YAE-RIEULPIEUP
-0xA070 0xC7F0 # HANGUL SYLLABLE CIEUC-YAE-RIEULSIOS
-0xA071 0xC7F1 # HANGUL SYLLABLE CIEUC-YAE-RIEULTHIEUTH
-0xA072 0xC7F2 # HANGUL SYLLABLE CIEUC-YAE-RIEULPHIEUPH
-0xA073 0xC7F3 # HANGUL SYLLABLE CIEUC-YAE-RIEULHIEUH
-0xA074 0xC7F4 # HANGUL SYLLABLE CIEUC-YAE-MIEUM
-0xA075 0xC7F5 # HANGUL SYLLABLE CIEUC-YAE-PIEUP
-0xA076 0xC7F6 # HANGUL SYLLABLE CIEUC-YAE-PIEUPSIOS
-0xA077 0xC7F7 # HANGUL SYLLABLE CIEUC-YAE-SIOS
-0xA078 0xC7F8 # HANGUL SYLLABLE CIEUC-YAE-SSANGSIOS
-0xA079 0xC7F9 # HANGUL SYLLABLE CIEUC-YAE-IEUNG
-0xA07A 0xC7FA # HANGUL SYLLABLE CIEUC-YAE-CIEUC
-0xA081 0xC7FB # HANGUL SYLLABLE CIEUC-YAE-CHIEUCH
-0xA082 0xC7FC # HANGUL SYLLABLE CIEUC-YAE-KHIEUKH
-0xA083 0xC7FD # HANGUL SYLLABLE CIEUC-YAE-THIEUTH
-0xA084 0xC7FE # HANGUL SYLLABLE CIEUC-YAE-PHIEUPH
-0xA085 0xC7FF # HANGUL SYLLABLE CIEUC-YAE-HIEUH
-0xA086 0xC802 # HANGUL SYLLABLE CIEUC-EO-SSANGKIYEOK
-0xA087 0xC803 # HANGUL SYLLABLE CIEUC-EO-KIYEOKSIOS
-0xA088 0xC805 # HANGUL SYLLABLE CIEUC-EO-NIEUNCIEUC
-0xA089 0xC806 # HANGUL SYLLABLE CIEUC-EO-NIEUNHIEUH
-0xA08A 0xC807 # HANGUL SYLLABLE CIEUC-EO-TIKEUT
-0xA08B 0xC809 # HANGUL SYLLABLE CIEUC-EO-RIEULKIYEOK
-0xA08C 0xC80B # HANGUL SYLLABLE CIEUC-EO-RIEULPIEUP
-0xA08D 0xC80C # HANGUL SYLLABLE CIEUC-EO-RIEULSIOS
-0xA08E 0xC80D # HANGUL SYLLABLE CIEUC-EO-RIEULTHIEUTH
-0xA08F 0xC80E # HANGUL SYLLABLE CIEUC-EO-RIEULPHIEUPH
-0xA090 0xC80F # HANGUL SYLLABLE CIEUC-EO-RIEULHIEUH
-0xA091 0xC812 # HANGUL SYLLABLE CIEUC-EO-PIEUPSIOS
-0xA092 0xC814 # HANGUL SYLLABLE CIEUC-EO-SSANGSIOS
-0xA093 0xC817 # HANGUL SYLLABLE CIEUC-EO-CHIEUCH
-0xA094 0xC818 # HANGUL SYLLABLE CIEUC-EO-KHIEUKH
-0xA095 0xC819 # HANGUL SYLLABLE CIEUC-EO-THIEUTH
-0xA096 0xC81A # HANGUL SYLLABLE CIEUC-EO-PHIEUPH
-0xA097 0xC81B # HANGUL SYLLABLE CIEUC-EO-HIEUH
-0xA098 0xC81E # HANGUL SYLLABLE CIEUC-E-SSANGKIYEOK
-0xA099 0xC81F # HANGUL SYLLABLE CIEUC-E-KIYEOKSIOS
-0xA09A 0xC821 # HANGUL SYLLABLE CIEUC-E-NIEUNCIEUC
-0xA09B 0xC822 # HANGUL SYLLABLE CIEUC-E-NIEUNHIEUH
-0xA09C 0xC823 # HANGUL SYLLABLE CIEUC-E-TIKEUT
-0xA09D 0xC825 # HANGUL SYLLABLE CIEUC-E-RIEULKIYEOK
-0xA09E 0xC826 # HANGUL SYLLABLE CIEUC-E-RIEULMIEUM
-0xA09F 0xC827 # HANGUL SYLLABLE CIEUC-E-RIEULPIEUP
-0xA0A0 0xC828 # HANGUL SYLLABLE CIEUC-E-RIEULSIOS
-0xA0A1 0xC829 # HANGUL SYLLABLE CIEUC-E-RIEULTHIEUTH
-0xA0A2 0xC82A # HANGUL SYLLABLE CIEUC-E-RIEULPHIEUPH
-0xA0A3 0xC82B # HANGUL SYLLABLE CIEUC-E-RIEULHIEUH
-0xA0A4 0xC82E # HANGUL SYLLABLE CIEUC-E-PIEUPSIOS
-0xA0A5 0xC830 # HANGUL SYLLABLE CIEUC-E-SSANGSIOS
-0xA0A6 0xC832 # HANGUL SYLLABLE CIEUC-E-CIEUC
-0xA0A7 0xC833 # HANGUL SYLLABLE CIEUC-E-CHIEUCH
-0xA0A8 0xC834 # HANGUL SYLLABLE CIEUC-E-KHIEUKH
-0xA0A9 0xC835 # HANGUL SYLLABLE CIEUC-E-THIEUTH
-0xA0AA 0xC836 # HANGUL SYLLABLE CIEUC-E-PHIEUPH
-0xA0AB 0xC837 # HANGUL SYLLABLE CIEUC-E-HIEUH
-0xA0AC 0xC839 # HANGUL SYLLABLE CIEUC-YEO-KIYEOK
-0xA0AD 0xC83A # HANGUL SYLLABLE CIEUC-YEO-SSANGKIYEOK
-0xA0AE 0xC83B # HANGUL SYLLABLE CIEUC-YEO-KIYEOKSIOS
-0xA0AF 0xC83D # HANGUL SYLLABLE CIEUC-YEO-NIEUNCIEUC
-0xA0B0 0xC83E # HANGUL SYLLABLE CIEUC-YEO-NIEUNHIEUH
-0xA0B1 0xC83F # HANGUL SYLLABLE CIEUC-YEO-TIKEUT
-0xA0B2 0xC841 # HANGUL SYLLABLE CIEUC-YEO-RIEULKIYEOK
-0xA0B3 0xC842 # HANGUL SYLLABLE CIEUC-YEO-RIEULMIEUM
-0xA0B4 0xC843 # HANGUL SYLLABLE CIEUC-YEO-RIEULPIEUP
-0xA0B5 0xC844 # HANGUL SYLLABLE CIEUC-YEO-RIEULSIOS
-0xA0B6 0xC845 # HANGUL SYLLABLE CIEUC-YEO-RIEULTHIEUTH
-0xA0B7 0xC846 # HANGUL SYLLABLE CIEUC-YEO-RIEULPHIEUPH
-0xA0B8 0xC847 # HANGUL SYLLABLE CIEUC-YEO-RIEULHIEUH
-0xA0B9 0xC84A # HANGUL SYLLABLE CIEUC-YEO-PIEUPSIOS
-0xA0BA 0xC84B # HANGUL SYLLABLE CIEUC-YEO-SIOS
-0xA0BB 0xC84E # HANGUL SYLLABLE CIEUC-YEO-CIEUC
-0xA0BC 0xC84F # HANGUL SYLLABLE CIEUC-YEO-CHIEUCH
-0xA0BD 0xC850 # HANGUL SYLLABLE CIEUC-YEO-KHIEUKH
-0xA0BE 0xC851 # HANGUL SYLLABLE CIEUC-YEO-THIEUTH
-0xA0BF 0xC852 # HANGUL SYLLABLE CIEUC-YEO-PHIEUPH
-0xA0C0 0xC853 # HANGUL SYLLABLE CIEUC-YEO-HIEUH
-0xA0C1 0xC855 # HANGUL SYLLABLE CIEUC-YE-KIYEOK
-0xA0C2 0xC856 # HANGUL SYLLABLE CIEUC-YE-SSANGKIYEOK
-0xA0C3 0xC857 # HANGUL SYLLABLE CIEUC-YE-KIYEOKSIOS
-0xA0C4 0xC858 # HANGUL SYLLABLE CIEUC-YE-NIEUN
-0xA0C5 0xC859 # HANGUL SYLLABLE CIEUC-YE-NIEUNCIEUC
-0xA0C6 0xC85A # HANGUL SYLLABLE CIEUC-YE-NIEUNHIEUH
-0xA0C7 0xC85B # HANGUL SYLLABLE CIEUC-YE-TIKEUT
-0xA0C8 0xC85C # HANGUL SYLLABLE CIEUC-YE-RIEUL
-0xA0C9 0xC85D # HANGUL SYLLABLE CIEUC-YE-RIEULKIYEOK
-0xA0CA 0xC85E # HANGUL SYLLABLE CIEUC-YE-RIEULMIEUM
-0xA0CB 0xC85F # HANGUL SYLLABLE CIEUC-YE-RIEULPIEUP
-0xA0CC 0xC860 # HANGUL SYLLABLE CIEUC-YE-RIEULSIOS
-0xA0CD 0xC861 # HANGUL SYLLABLE CIEUC-YE-RIEULTHIEUTH
-0xA0CE 0xC862 # HANGUL SYLLABLE CIEUC-YE-RIEULPHIEUPH
-0xA0CF 0xC863 # HANGUL SYLLABLE CIEUC-YE-RIEULHIEUH
-0xA0D0 0xC864 # HANGUL SYLLABLE CIEUC-YE-MIEUM
-0xA0D1 0xC865 # HANGUL SYLLABLE CIEUC-YE-PIEUP
-0xA0D2 0xC866 # HANGUL SYLLABLE CIEUC-YE-PIEUPSIOS
-0xA0D3 0xC867 # HANGUL SYLLABLE CIEUC-YE-SIOS
-0xA0D4 0xC868 # HANGUL SYLLABLE CIEUC-YE-SSANGSIOS
-0xA0D5 0xC869 # HANGUL SYLLABLE CIEUC-YE-IEUNG
-0xA0D6 0xC86A # HANGUL SYLLABLE CIEUC-YE-CIEUC
-0xA0D7 0xC86B # HANGUL SYLLABLE CIEUC-YE-CHIEUCH
-0xA0D8 0xC86C # HANGUL SYLLABLE CIEUC-YE-KHIEUKH
-0xA0D9 0xC86D # HANGUL SYLLABLE CIEUC-YE-THIEUTH
-0xA0DA 0xC86E # HANGUL SYLLABLE CIEUC-YE-PHIEUPH
-0xA0DB 0xC86F # HANGUL SYLLABLE CIEUC-YE-HIEUH
-0xA0DC 0xC872 # HANGUL SYLLABLE CIEUC-O-SSANGKIYEOK
-0xA0DD 0xC873 # HANGUL SYLLABLE CIEUC-O-KIYEOKSIOS
-0xA0DE 0xC875 # HANGUL SYLLABLE CIEUC-O-NIEUNCIEUC
-0xA0DF 0xC876 # HANGUL SYLLABLE CIEUC-O-NIEUNHIEUH
-0xA0E0 0xC877 # HANGUL SYLLABLE CIEUC-O-TIKEUT
-0xA0E1 0xC879 # HANGUL SYLLABLE CIEUC-O-RIEULKIYEOK
-0xA0E2 0xC87B # HANGUL SYLLABLE CIEUC-O-RIEULPIEUP
-0xA0E3 0xC87C # HANGUL SYLLABLE CIEUC-O-RIEULSIOS
-0xA0E4 0xC87D # HANGUL SYLLABLE CIEUC-O-RIEULTHIEUTH
-0xA0E5 0xC87E # HANGUL SYLLABLE CIEUC-O-RIEULPHIEUPH
-0xA0E6 0xC87F # HANGUL SYLLABLE CIEUC-O-RIEULHIEUH
-0xA0E7 0xC882 # HANGUL SYLLABLE CIEUC-O-PIEUPSIOS
-0xA0E8 0xC884 # HANGUL SYLLABLE CIEUC-O-SSANGSIOS
-0xA0E9 0xC888 # HANGUL SYLLABLE CIEUC-O-KHIEUKH
-0xA0EA 0xC889 # HANGUL SYLLABLE CIEUC-O-THIEUTH
-0xA0EB 0xC88A # HANGUL SYLLABLE CIEUC-O-PHIEUPH
-0xA0EC 0xC88E # HANGUL SYLLABLE CIEUC-WA-SSANGKIYEOK
-0xA0ED 0xC88F # HANGUL SYLLABLE CIEUC-WA-KIYEOKSIOS
-0xA0EE 0xC890 # HANGUL SYLLABLE CIEUC-WA-NIEUN
-0xA0EF 0xC891 # HANGUL SYLLABLE CIEUC-WA-NIEUNCIEUC
-0xA0F0 0xC892 # HANGUL SYLLABLE CIEUC-WA-NIEUNHIEUH
-0xA0F1 0xC893 # HANGUL SYLLABLE CIEUC-WA-TIKEUT
-0xA0F2 0xC895 # HANGUL SYLLABLE CIEUC-WA-RIEULKIYEOK
-0xA0F3 0xC896 # HANGUL SYLLABLE CIEUC-WA-RIEULMIEUM
-0xA0F4 0xC897 # HANGUL SYLLABLE CIEUC-WA-RIEULPIEUP
-0xA0F5 0xC898 # HANGUL SYLLABLE CIEUC-WA-RIEULSIOS
-0xA0F6 0xC899 # HANGUL SYLLABLE CIEUC-WA-RIEULTHIEUTH
-0xA0F7 0xC89A # HANGUL SYLLABLE CIEUC-WA-RIEULPHIEUPH
-0xA0F8 0xC89B # HANGUL SYLLABLE CIEUC-WA-RIEULHIEUH
-0xA0F9 0xC89C # HANGUL SYLLABLE CIEUC-WA-MIEUM
-0xA0FA 0xC89E # HANGUL SYLLABLE CIEUC-WA-PIEUPSIOS
-0xA0FB 0xC8A0 # HANGUL SYLLABLE CIEUC-WA-SSANGSIOS
-0xA0FC 0xC8A2 # HANGUL SYLLABLE CIEUC-WA-CIEUC
-0xA0FD 0xC8A3 # HANGUL SYLLABLE CIEUC-WA-CHIEUCH
-0xA0FE 0xC8A4 # HANGUL SYLLABLE CIEUC-WA-KHIEUKH
-0xA141 0xC8A5 # HANGUL SYLLABLE CIEUC-WA-THIEUTH
-0xA142 0xC8A6 # HANGUL SYLLABLE CIEUC-WA-PHIEUPH
-0xA143 0xC8A7 # HANGUL SYLLABLE CIEUC-WA-HIEUH
-0xA144 0xC8A9 # HANGUL SYLLABLE CIEUC-WAE-KIYEOK
-0xA145 0xC8AA # HANGUL SYLLABLE CIEUC-WAE-SSANGKIYEOK
-0xA146 0xC8AB # HANGUL SYLLABLE CIEUC-WAE-KIYEOKSIOS
-0xA147 0xC8AC # HANGUL SYLLABLE CIEUC-WAE-NIEUN
-0xA148 0xC8AD # HANGUL SYLLABLE CIEUC-WAE-NIEUNCIEUC
-0xA149 0xC8AE # HANGUL SYLLABLE CIEUC-WAE-NIEUNHIEUH
-0xA14A 0xC8AF # HANGUL SYLLABLE CIEUC-WAE-TIKEUT
-0xA14B 0xC8B0 # HANGUL SYLLABLE CIEUC-WAE-RIEUL
-0xA14C 0xC8B1 # HANGUL SYLLABLE CIEUC-WAE-RIEULKIYEOK
-0xA14D 0xC8B2 # HANGUL SYLLABLE CIEUC-WAE-RIEULMIEUM
-0xA14E 0xC8B3 # HANGUL SYLLABLE CIEUC-WAE-RIEULPIEUP
-0xA14F 0xC8B4 # HANGUL SYLLABLE CIEUC-WAE-RIEULSIOS
-0xA150 0xC8B5 # HANGUL SYLLABLE CIEUC-WAE-RIEULTHIEUTH
-0xA151 0xC8B6 # HANGUL SYLLABLE CIEUC-WAE-RIEULPHIEUPH
-0xA152 0xC8B7 # HANGUL SYLLABLE CIEUC-WAE-RIEULHIEUH
-0xA153 0xC8B8 # HANGUL SYLLABLE CIEUC-WAE-MIEUM
-0xA154 0xC8B9 # HANGUL SYLLABLE CIEUC-WAE-PIEUP
-0xA155 0xC8BA # HANGUL SYLLABLE CIEUC-WAE-PIEUPSIOS
-0xA156 0xC8BB # HANGUL SYLLABLE CIEUC-WAE-SIOS
-0xA157 0xC8BE # HANGUL SYLLABLE CIEUC-WAE-CIEUC
-0xA158 0xC8BF # HANGUL SYLLABLE CIEUC-WAE-CHIEUCH
-0xA159 0xC8C0 # HANGUL SYLLABLE CIEUC-WAE-KHIEUKH
-0xA15A 0xC8C1 # HANGUL SYLLABLE CIEUC-WAE-THIEUTH
-0xA161 0xC8C2 # HANGUL SYLLABLE CIEUC-WAE-PHIEUPH
-0xA162 0xC8C3 # HANGUL SYLLABLE CIEUC-WAE-HIEUH
-0xA163 0xC8C5 # HANGUL SYLLABLE CIEUC-OE-KIYEOK
-0xA164 0xC8C6 # HANGUL SYLLABLE CIEUC-OE-SSANGKIYEOK
-0xA165 0xC8C7 # HANGUL SYLLABLE CIEUC-OE-KIYEOKSIOS
-0xA166 0xC8C9 # HANGUL SYLLABLE CIEUC-OE-NIEUNCIEUC
-0xA167 0xC8CA # HANGUL SYLLABLE CIEUC-OE-NIEUNHIEUH
-0xA168 0xC8CB # HANGUL SYLLABLE CIEUC-OE-TIKEUT
-0xA169 0xC8CD # HANGUL SYLLABLE CIEUC-OE-RIEULKIYEOK
-0xA16A 0xC8CE # HANGUL SYLLABLE CIEUC-OE-RIEULMIEUM
-0xA16B 0xC8CF # HANGUL SYLLABLE CIEUC-OE-RIEULPIEUP
-0xA16C 0xC8D0 # HANGUL SYLLABLE CIEUC-OE-RIEULSIOS
-0xA16D 0xC8D1 # HANGUL SYLLABLE CIEUC-OE-RIEULTHIEUTH
-0xA16E 0xC8D2 # HANGUL SYLLABLE CIEUC-OE-RIEULPHIEUPH
-0xA16F 0xC8D3 # HANGUL SYLLABLE CIEUC-OE-RIEULHIEUH
-0xA170 0xC8D6 # HANGUL SYLLABLE CIEUC-OE-PIEUPSIOS
-0xA171 0xC8D8 # HANGUL SYLLABLE CIEUC-OE-SSANGSIOS
-0xA172 0xC8DA # HANGUL SYLLABLE CIEUC-OE-CIEUC
-0xA173 0xC8DB # HANGUL SYLLABLE CIEUC-OE-CHIEUCH
-0xA174 0xC8DC # HANGUL SYLLABLE CIEUC-OE-KHIEUKH
-0xA175 0xC8DD # HANGUL SYLLABLE CIEUC-OE-THIEUTH
-0xA176 0xC8DE # HANGUL SYLLABLE CIEUC-OE-PHIEUPH
-0xA177 0xC8DF # HANGUL SYLLABLE CIEUC-OE-HIEUH
-0xA178 0xC8E2 # HANGUL SYLLABLE CIEUC-YO-SSANGKIYEOK
-0xA179 0xC8E3 # HANGUL SYLLABLE CIEUC-YO-KIYEOKSIOS
-0xA17A 0xC8E5 # HANGUL SYLLABLE CIEUC-YO-NIEUNCIEUC
-0xA181 0xC8E6 # HANGUL SYLLABLE CIEUC-YO-NIEUNHIEUH
-0xA182 0xC8E7 # HANGUL SYLLABLE CIEUC-YO-TIKEUT
-0xA183 0xC8E8 # HANGUL SYLLABLE CIEUC-YO-RIEUL
-0xA184 0xC8E9 # HANGUL SYLLABLE CIEUC-YO-RIEULKIYEOK
-0xA185 0xC8EA # HANGUL SYLLABLE CIEUC-YO-RIEULMIEUM
-0xA186 0xC8EB # HANGUL SYLLABLE CIEUC-YO-RIEULPIEUP
-0xA187 0xC8EC # HANGUL SYLLABLE CIEUC-YO-RIEULSIOS
-0xA188 0xC8ED # HANGUL SYLLABLE CIEUC-YO-RIEULTHIEUTH
-0xA189 0xC8EE # HANGUL SYLLABLE CIEUC-YO-RIEULPHIEUPH
-0xA18A 0xC8EF # HANGUL SYLLABLE CIEUC-YO-RIEULHIEUH
-0xA18B 0xC8F0 # HANGUL SYLLABLE CIEUC-YO-MIEUM
-0xA18C 0xC8F1 # HANGUL SYLLABLE CIEUC-YO-PIEUP
-0xA18D 0xC8F2 # HANGUL SYLLABLE CIEUC-YO-PIEUPSIOS
-0xA18E 0xC8F3 # HANGUL SYLLABLE CIEUC-YO-SIOS
-0xA18F 0xC8F4 # HANGUL SYLLABLE CIEUC-YO-SSANGSIOS
-0xA190 0xC8F6 # HANGUL SYLLABLE CIEUC-YO-CIEUC
-0xA191 0xC8F7 # HANGUL SYLLABLE CIEUC-YO-CHIEUCH
-0xA192 0xC8F8 # HANGUL SYLLABLE CIEUC-YO-KHIEUKH
-0xA193 0xC8F9 # HANGUL SYLLABLE CIEUC-YO-THIEUTH
-0xA194 0xC8FA # HANGUL SYLLABLE CIEUC-YO-PHIEUPH
-0xA195 0xC8FB # HANGUL SYLLABLE CIEUC-YO-HIEUH
-0xA196 0xC8FE # HANGUL SYLLABLE CIEUC-U-SSANGKIYEOK
-0xA197 0xC8FF # HANGUL SYLLABLE CIEUC-U-KIYEOKSIOS
-0xA198 0xC901 # HANGUL SYLLABLE CIEUC-U-NIEUNCIEUC
-0xA199 0xC902 # HANGUL SYLLABLE CIEUC-U-NIEUNHIEUH
-0xA19A 0xC903 # HANGUL SYLLABLE CIEUC-U-TIKEUT
-0xA19B 0xC907 # HANGUL SYLLABLE CIEUC-U-RIEULPIEUP
-0xA19C 0xC908 # HANGUL SYLLABLE CIEUC-U-RIEULSIOS
-0xA19D 0xC909 # HANGUL SYLLABLE CIEUC-U-RIEULTHIEUTH
-0xA19E 0xC90A # HANGUL SYLLABLE CIEUC-U-RIEULPHIEUPH
-0xA19F 0xC90B # HANGUL SYLLABLE CIEUC-U-RIEULHIEUH
-0xA1A0 0xC90E # HANGUL SYLLABLE CIEUC-U-PIEUPSIOS
-0xA1A1 0x3000 # IDEOGRAPHIC SPACE
-0xA1A2 0x3001 # IDEOGRAPHIC COMMA
-0xA1A3 0x3002 # IDEOGRAPHIC FULL STOP
-0xA1A4 0x00B7 # MIDDLE DOT
-0xA1A5 0x2025 # TWO DOT LEADER
-0xA1A6 0x2026 # HORIZONTAL ELLIPSIS
-0xA1A7 0x00A8 # DIAERESIS
-0xA1A8 0x3003 # DITTO MARK
-0xA1A9 0x00AD # SOFT HYPHEN
-0xA1AA 0x2015 # HORIZONTAL BAR
-0xA1AB 0x2225 # PARALLEL TO
-0xA1AC 0xFF3C # FULLWIDTH REVERSE SOLIDUS
-0xA1AD 0x223C # TILDE OPERATOR
-0xA1AE 0x2018 # LEFT SINGLE QUOTATION MARK
-0xA1AF 0x2019 # RIGHT SINGLE QUOTATION MARK
-0xA1B0 0x201C # LEFT DOUBLE QUOTATION MARK
-0xA1B1 0x201D # RIGHT DOUBLE QUOTATION MARK
-0xA1B2 0x3014 # LEFT TORTOISE SHELL BRACKET
-0xA1B3 0x3015 # RIGHT TORTOISE SHELL BRACKET
-0xA1B4 0x3008 # LEFT ANGLE BRACKET
-0xA1B5 0x3009 # RIGHT ANGLE BRACKET
-0xA1B6 0x300A # LEFT DOUBLE ANGLE BRACKET
-0xA1B7 0x300B # RIGHT DOUBLE ANGLE BRACKET
-0xA1B8 0x300C # LEFT CORNER BRACKET
-0xA1B9 0x300D # RIGHT CORNER BRACKET
-0xA1BA 0x300E # LEFT WHITE CORNER BRACKET
-0xA1BB 0x300F # RIGHT WHITE CORNER BRACKET
-0xA1BC 0x3010 # LEFT BLACK LENTICULAR BRACKET
-0xA1BD 0x3011 # RIGHT BLACK LENTICULAR BRACKET
-0xA1BE 0x00B1 # PLUS-MINUS SIGN
-0xA1BF 0x00D7 # MULTIPLICATION SIGN
-0xA1C0 0x00F7 # DIVISION SIGN
-0xA1C1 0x2260 # NOT EQUAL TO
-0xA1C2 0x2264 # LESS-THAN OR EQUAL TO
-0xA1C3 0x2265 # GREATER-THAN OR EQUAL TO
-0xA1C4 0x221E # INFINITY
-0xA1C5 0x2234 # THEREFORE
-0xA1C6 0x00B0 # DEGREE SIGN
-0xA1C7 0x2032 # PRIME
-0xA1C8 0x2033 # DOUBLE PRIME
-0xA1C9 0x2103 # DEGREE CELSIUS
-0xA1CA 0x212B # ANGSTROM SIGN
-0xA1CB 0xFFE0 # FULLWIDTH CENT SIGN
-0xA1CC 0xFFE1 # FULLWIDTH POUND SIGN
-0xA1CD 0xFFE5 # FULLWIDTH YEN SIGN
-0xA1CE 0x2642 # MALE SIGN
-0xA1CF 0x2640 # FEMALE SIGN
-0xA1D0 0x2220 # ANGLE
-0xA1D1 0x22A5 # UP TACK
-0xA1D2 0x2312 # ARC
-0xA1D3 0x2202 # PARTIAL DIFFERENTIAL
-0xA1D4 0x2207 # NABLA
-0xA1D5 0x2261 # IDENTICAL TO
-0xA1D6 0x2252 # APPROXIMATELY EQUAL TO OR THE IMAGE OF
-0xA1D7 0x00A7 # SECTION SIGN
-0xA1D8 0x203B # REFERENCE MARK
-0xA1D9 0x2606 # WHITE STAR
-0xA1DA 0x2605 # BLACK STAR
-0xA1DB 0x25CB # WHITE CIRCLE
-0xA1DC 0x25CF # BLACK CIRCLE
-0xA1DD 0x25CE # BULLSEYE
-0xA1DE 0x25C7 # WHITE DIAMOND
-0xA1DF 0x25C6 # BLACK DIAMOND
-0xA1E0 0x25A1 # WHITE SQUARE
-0xA1E1 0x25A0 # BLACK SQUARE
-0xA1E2 0x25B3 # WHITE UP-POINTING TRIANGLE
-0xA1E3 0x25B2 # BLACK UP-POINTING TRIANGLE
-0xA1E4 0x25BD # WHITE DOWN-POINTING TRIANGLE
-0xA1E5 0x25BC # BLACK DOWN-POINTING TRIANGLE
-0xA1E6 0x2192 # RIGHTWARDS ARROW
-0xA1E7 0x2190 # LEFTWARDS ARROW
-0xA1E8 0x2191 # UPWARDS ARROW
-0xA1E9 0x2193 # DOWNWARDS ARROW
-0xA1EA 0x2194 # LEFT RIGHT ARROW
-0xA1EB 0x3013 # GETA MARK
-0xA1EC 0x226A # MUCH LESS-THAN
-0xA1ED 0x226B # MUCH GREATER-THAN
-0xA1EE 0x221A # SQUARE ROOT
-0xA1EF 0x223D # REVERSED TILDE
-0xA1F0 0x221D # PROPORTIONAL TO
-0xA1F1 0x2235 # BECAUSE
-0xA1F2 0x222B # INTEGRAL
-0xA1F3 0x222C # DOUBLE INTEGRAL
-0xA1F4 0x2208 # ELEMENT OF
-0xA1F5 0x220B # CONTAINS AS MEMBER
-0xA1F6 0x2286 # SUBSET OF OR EQUAL TO
-0xA1F7 0x2287 # SUPERSET OF OR EQUAL TO
-0xA1F8 0x2282 # SUBSET OF
-0xA1F9 0x2283 # SUPERSET OF
-0xA1FA 0x222A # UNION
-0xA1FB 0x2229 # INTERSECTION
-0xA1FC 0x2227 # LOGICAL AND
-0xA1FD 0x2228 # LOGICAL OR
-0xA1FE 0xFFE2 # FULLWIDTH NOT SIGN
-0xA241 0xC910 # HANGUL SYLLABLE CIEUC-U-SSANGSIOS
-0xA242 0xC912 # HANGUL SYLLABLE CIEUC-U-CIEUC
-0xA243 0xC913 # HANGUL SYLLABLE CIEUC-U-CHIEUCH
-0xA244 0xC914 # HANGUL SYLLABLE CIEUC-U-KHIEUKH
-0xA245 0xC915 # HANGUL SYLLABLE CIEUC-U-THIEUTH
-0xA246 0xC916 # HANGUL SYLLABLE CIEUC-U-PHIEUPH
-0xA247 0xC917 # HANGUL SYLLABLE CIEUC-U-HIEUH
-0xA248 0xC919 # HANGUL SYLLABLE CIEUC-WEO-KIYEOK
-0xA249 0xC91A # HANGUL SYLLABLE CIEUC-WEO-SSANGKIYEOK
-0xA24A 0xC91B # HANGUL SYLLABLE CIEUC-WEO-KIYEOKSIOS
-0xA24B 0xC91C # HANGUL SYLLABLE CIEUC-WEO-NIEUN
-0xA24C 0xC91D # HANGUL SYLLABLE CIEUC-WEO-NIEUNCIEUC
-0xA24D 0xC91E # HANGUL SYLLABLE CIEUC-WEO-NIEUNHIEUH
-0xA24E 0xC91F # HANGUL SYLLABLE CIEUC-WEO-TIKEUT
-0xA24F 0xC920 # HANGUL SYLLABLE CIEUC-WEO-RIEUL
-0xA250 0xC921 # HANGUL SYLLABLE CIEUC-WEO-RIEULKIYEOK
-0xA251 0xC922 # HANGUL SYLLABLE CIEUC-WEO-RIEULMIEUM
-0xA252 0xC923 # HANGUL SYLLABLE CIEUC-WEO-RIEULPIEUP
-0xA253 0xC924 # HANGUL SYLLABLE CIEUC-WEO-RIEULSIOS
-0xA254 0xC925 # HANGUL SYLLABLE CIEUC-WEO-RIEULTHIEUTH
-0xA255 0xC926 # HANGUL SYLLABLE CIEUC-WEO-RIEULPHIEUPH
-0xA256 0xC927 # HANGUL SYLLABLE CIEUC-WEO-RIEULHIEUH
-0xA257 0xC928 # HANGUL SYLLABLE CIEUC-WEO-MIEUM
-0xA258 0xC929 # HANGUL SYLLABLE CIEUC-WEO-PIEUP
-0xA259 0xC92A # HANGUL SYLLABLE CIEUC-WEO-PIEUPSIOS
-0xA25A 0xC92B # HANGUL SYLLABLE CIEUC-WEO-SIOS
-0xA261 0xC92D # HANGUL SYLLABLE CIEUC-WEO-IEUNG
-0xA262 0xC92E # HANGUL SYLLABLE CIEUC-WEO-CIEUC
-0xA263 0xC92F # HANGUL SYLLABLE CIEUC-WEO-CHIEUCH
-0xA264 0xC930 # HANGUL SYLLABLE CIEUC-WEO-KHIEUKH
-0xA265 0xC931 # HANGUL SYLLABLE CIEUC-WEO-THIEUTH
-0xA266 0xC932 # HANGUL SYLLABLE CIEUC-WEO-PHIEUPH
-0xA267 0xC933 # HANGUL SYLLABLE CIEUC-WEO-HIEUH
-0xA268 0xC935 # HANGUL SYLLABLE CIEUC-WE-KIYEOK
-0xA269 0xC936 # HANGUL SYLLABLE CIEUC-WE-SSANGKIYEOK
-0xA26A 0xC937 # HANGUL SYLLABLE CIEUC-WE-KIYEOKSIOS
-0xA26B 0xC938 # HANGUL SYLLABLE CIEUC-WE-NIEUN
-0xA26C 0xC939 # HANGUL SYLLABLE CIEUC-WE-NIEUNCIEUC
-0xA26D 0xC93A # HANGUL SYLLABLE CIEUC-WE-NIEUNHIEUH
-0xA26E 0xC93B # HANGUL SYLLABLE CIEUC-WE-TIKEUT
-0xA26F 0xC93C # HANGUL SYLLABLE CIEUC-WE-RIEUL
-0xA270 0xC93D # HANGUL SYLLABLE CIEUC-WE-RIEULKIYEOK
-0xA271 0xC93E # HANGUL SYLLABLE CIEUC-WE-RIEULMIEUM
-0xA272 0xC93F # HANGUL SYLLABLE CIEUC-WE-RIEULPIEUP
-0xA273 0xC940 # HANGUL SYLLABLE CIEUC-WE-RIEULSIOS
-0xA274 0xC941 # HANGUL SYLLABLE CIEUC-WE-RIEULTHIEUTH
-0xA275 0xC942 # HANGUL SYLLABLE CIEUC-WE-RIEULPHIEUPH
-0xA276 0xC943 # HANGUL SYLLABLE CIEUC-WE-RIEULHIEUH
-0xA277 0xC944 # HANGUL SYLLABLE CIEUC-WE-MIEUM
-0xA278 0xC945 # HANGUL SYLLABLE CIEUC-WE-PIEUP
-0xA279 0xC946 # HANGUL SYLLABLE CIEUC-WE-PIEUPSIOS
-0xA27A 0xC947 # HANGUL SYLLABLE CIEUC-WE-SIOS
-0xA281 0xC948 # HANGUL SYLLABLE CIEUC-WE-SSANGSIOS
-0xA282 0xC949 # HANGUL SYLLABLE CIEUC-WE-IEUNG
-0xA283 0xC94A # HANGUL SYLLABLE CIEUC-WE-CIEUC
-0xA284 0xC94B # HANGUL SYLLABLE CIEUC-WE-CHIEUCH
-0xA285 0xC94C # HANGUL SYLLABLE CIEUC-WE-KHIEUKH
-0xA286 0xC94D # HANGUL SYLLABLE CIEUC-WE-THIEUTH
-0xA287 0xC94E # HANGUL SYLLABLE CIEUC-WE-PHIEUPH
-0xA288 0xC94F # HANGUL SYLLABLE CIEUC-WE-HIEUH
-0xA289 0xC952 # HANGUL SYLLABLE CIEUC-WI-SSANGKIYEOK
-0xA28A 0xC953 # HANGUL SYLLABLE CIEUC-WI-KIYEOKSIOS
-0xA28B 0xC955 # HANGUL SYLLABLE CIEUC-WI-NIEUNCIEUC
-0xA28C 0xC956 # HANGUL SYLLABLE CIEUC-WI-NIEUNHIEUH
-0xA28D 0xC957 # HANGUL SYLLABLE CIEUC-WI-TIKEUT
-0xA28E 0xC959 # HANGUL SYLLABLE CIEUC-WI-RIEULKIYEOK
-0xA28F 0xC95A # HANGUL SYLLABLE CIEUC-WI-RIEULMIEUM
-0xA290 0xC95B # HANGUL SYLLABLE CIEUC-WI-RIEULPIEUP
-0xA291 0xC95C # HANGUL SYLLABLE CIEUC-WI-RIEULSIOS
-0xA292 0xC95D # HANGUL SYLLABLE CIEUC-WI-RIEULTHIEUTH
-0xA293 0xC95E # HANGUL SYLLABLE CIEUC-WI-RIEULPHIEUPH
-0xA294 0xC95F # HANGUL SYLLABLE CIEUC-WI-RIEULHIEUH
-0xA295 0xC962 # HANGUL SYLLABLE CIEUC-WI-PIEUPSIOS
-0xA296 0xC964 # HANGUL SYLLABLE CIEUC-WI-SSANGSIOS
-0xA297 0xC965 # HANGUL SYLLABLE CIEUC-WI-IEUNG
-0xA298 0xC966 # HANGUL SYLLABLE CIEUC-WI-CIEUC
-0xA299 0xC967 # HANGUL SYLLABLE CIEUC-WI-CHIEUCH
-0xA29A 0xC968 # HANGUL SYLLABLE CIEUC-WI-KHIEUKH
-0xA29B 0xC969 # HANGUL SYLLABLE CIEUC-WI-THIEUTH
-0xA29C 0xC96A # HANGUL SYLLABLE CIEUC-WI-PHIEUPH
-0xA29D 0xC96B # HANGUL SYLLABLE CIEUC-WI-HIEUH
-0xA29E 0xC96D # HANGUL SYLLABLE CIEUC-YU-KIYEOK
-0xA29F 0xC96E # HANGUL SYLLABLE CIEUC-YU-SSANGKIYEOK
-0xA2A0 0xC96F # HANGUL SYLLABLE CIEUC-YU-KIYEOKSIOS
-0xA2A1 0x21D2 # RIGHTWARDS DOUBLE ARROW
-0xA2A2 0x21D4 # LEFT RIGHT DOUBLE ARROW
-0xA2A3 0x2200 # FOR ALL
-0xA2A4 0x2203 # THERE EXISTS
-0xA2A5 0x00B4 # ACUTE ACCENT
-0xA2A6 0xFF5E # FULLWIDTH TILDE
-0xA2A7 0x02C7 # CARON
-0xA2A8 0x02D8 # BREVE
-0xA2A9 0x02DD # DOUBLE ACUTE ACCENT
-0xA2AA 0x02DA # RING ABOVE
-0xA2AB 0x02D9 # DOT ABOVE
-0xA2AC 0x00B8 # CEDILLA
-0xA2AD 0x02DB # OGONEK
-0xA2AE 0x00A1 # INVERTED EXCLAMATION MARK
-0xA2AF 0x00BF # INVERTED QUESTION MARK
-0xA2B0 0x02D0 # MODIFIER LETTER TRIANGULAR COLON
-0xA2B1 0x222E # CONTOUR INTEGRAL
-0xA2B2 0x2211 # N-ARY SUMMATION
-0xA2B3 0x220F # N-ARY PRODUCT
-0xA2B4 0x00A4 # CURRENCY SIGN
-0xA2B5 0x2109 # DEGREE FAHRENHEIT
-0xA2B6 0x2030 # PER MILLE SIGN
-0xA2B7 0x25C1 # WHITE LEFT-POINTING TRIANGLE
-0xA2B8 0x25C0 # BLACK LEFT-POINTING TRIANGLE
-0xA2B9 0x25B7 # WHITE RIGHT-POINTING TRIANGLE
-0xA2BA 0x25B6 # BLACK RIGHT-POINTING TRIANGLE
-0xA2BB 0x2664 # WHITE SPADE SUIT
-0xA2BC 0x2660 # BLACK SPADE SUIT
-0xA2BD 0x2661 # WHITE HEART SUIT
-0xA2BE 0x2665 # BLACK HEART SUIT
-0xA2BF 0x2667 # WHITE CLUB SUIT
-0xA2C0 0x2663 # BLACK CLUB SUIT
-0xA2C1 0x2299 # CIRCLED DOT OPERATOR
-0xA2C2 0x25C8 # WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND
-0xA2C3 0x25A3 # WHITE SQUARE CONTAINING BLACK SMALL SQUARE
-0xA2C4 0x25D0 # CIRCLE WITH LEFT HALF BLACK
-0xA2C5 0x25D1 # CIRCLE WITH RIGHT HALF BLACK
-0xA2C6 0x2592 # MEDIUM SHADE
-0xA2C7 0x25A4 # SQUARE WITH HORIZONTAL FILL
-0xA2C8 0x25A5 # SQUARE WITH VERTICAL FILL
-0xA2C9 0x25A8 # SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL
-0xA2CA 0x25A7 # SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL
-0xA2CB 0x25A6 # SQUARE WITH ORTHOGONAL CROSSHATCH FILL
-0xA2CC 0x25A9 # SQUARE WITH DIAGONAL CROSSHATCH FILL
-0xA2CD 0x2668 # HOT SPRINGS
-0xA2CE 0x260F # WHITE TELEPHONE
-0xA2CF 0x260E # BLACK TELEPHONE
-0xA2D0 0x261C # WHITE LEFT POINTING INDEX
-0xA2D1 0x261E # WHITE RIGHT POINTING INDEX
-0xA2D2 0x00B6 # PILCROW SIGN
-0xA2D3 0x2020 # DAGGER
-0xA2D4 0x2021 # DOUBLE DAGGER
-0xA2D5 0x2195 # UP DOWN ARROW
-0xA2D6 0x2197 # NORTH EAST ARROW
-0xA2D7 0x2199 # SOUTH WEST ARROW
-0xA2D8 0x2196 # NORTH WEST ARROW
-0xA2D9 0x2198 # SOUTH EAST ARROW
-0xA2DA 0x266D # MUSIC FLAT SIGN
-0xA2DB 0x2669 # QUARTER NOTE
-0xA2DC 0x266A # EIGHTH NOTE
-0xA2DD 0x266C # BEAMED SIXTEENTH NOTES
-0xA2DE 0x327F # KOREAN STANDARD SYMBOL
-0xA2DF 0x321C # PARENTHESIZED HANGUL CIEUC U
-0xA2E0 0x2116 # NUMERO SIGN
-0xA2E1 0x33C7 # SQUARE CO
-0xA2E2 0x2122 # TRADE MARK SIGN
-0xA2E3 0x33C2 # SQUARE AM
-0xA2E4 0x33D8 # SQUARE PM
-0xA2E5 0x2121 # TELEPHONE SIGN
-0xA341 0xC971 # HANGUL SYLLABLE CIEUC-YU-NIEUNCIEUC
-0xA342 0xC972 # HANGUL SYLLABLE CIEUC-YU-NIEUNHIEUH
-0xA343 0xC973 # HANGUL SYLLABLE CIEUC-YU-TIKEUT
-0xA344 0xC975 # HANGUL SYLLABLE CIEUC-YU-RIEULKIYEOK
-0xA345 0xC976 # HANGUL SYLLABLE CIEUC-YU-RIEULMIEUM
-0xA346 0xC977 # HANGUL SYLLABLE CIEUC-YU-RIEULPIEUP
-0xA347 0xC978 # HANGUL SYLLABLE CIEUC-YU-RIEULSIOS
-0xA348 0xC979 # HANGUL SYLLABLE CIEUC-YU-RIEULTHIEUTH
-0xA349 0xC97A # HANGUL SYLLABLE CIEUC-YU-RIEULPHIEUPH
-0xA34A 0xC97B # HANGUL SYLLABLE CIEUC-YU-RIEULHIEUH
-0xA34B 0xC97D # HANGUL SYLLABLE CIEUC-YU-PIEUP
-0xA34C 0xC97E # HANGUL SYLLABLE CIEUC-YU-PIEUPSIOS
-0xA34D 0xC97F # HANGUL SYLLABLE CIEUC-YU-SIOS
-0xA34E 0xC980 # HANGUL SYLLABLE CIEUC-YU-SSANGSIOS
-0xA34F 0xC981 # HANGUL SYLLABLE CIEUC-YU-IEUNG
-0xA350 0xC982 # HANGUL SYLLABLE CIEUC-YU-CIEUC
-0xA351 0xC983 # HANGUL SYLLABLE CIEUC-YU-CHIEUCH
-0xA352 0xC984 # HANGUL SYLLABLE CIEUC-YU-KHIEUKH
-0xA353 0xC985 # HANGUL SYLLABLE CIEUC-YU-THIEUTH
-0xA354 0xC986 # HANGUL SYLLABLE CIEUC-YU-PHIEUPH
-0xA355 0xC987 # HANGUL SYLLABLE CIEUC-YU-HIEUH
-0xA356 0xC98A # HANGUL SYLLABLE CIEUC-EU-SSANGKIYEOK
-0xA357 0xC98B # HANGUL SYLLABLE CIEUC-EU-KIYEOKSIOS
-0xA358 0xC98D # HANGUL SYLLABLE CIEUC-EU-NIEUNCIEUC
-0xA359 0xC98E # HANGUL SYLLABLE CIEUC-EU-NIEUNHIEUH
-0xA35A 0xC98F # HANGUL SYLLABLE CIEUC-EU-TIKEUT
-0xA361 0xC991 # HANGUL SYLLABLE CIEUC-EU-RIEULKIYEOK
-0xA362 0xC992 # HANGUL SYLLABLE CIEUC-EU-RIEULMIEUM
-0xA363 0xC993 # HANGUL SYLLABLE CIEUC-EU-RIEULPIEUP
-0xA364 0xC994 # HANGUL SYLLABLE CIEUC-EU-RIEULSIOS
-0xA365 0xC995 # HANGUL SYLLABLE CIEUC-EU-RIEULTHIEUTH
-0xA366 0xC996 # HANGUL SYLLABLE CIEUC-EU-RIEULPHIEUPH
-0xA367 0xC997 # HANGUL SYLLABLE CIEUC-EU-RIEULHIEUH
-0xA368 0xC99A # HANGUL SYLLABLE CIEUC-EU-PIEUPSIOS
-0xA369 0xC99C # HANGUL SYLLABLE CIEUC-EU-SSANGSIOS
-0xA36A 0xC99E # HANGUL SYLLABLE CIEUC-EU-CIEUC
-0xA36B 0xC99F # HANGUL SYLLABLE CIEUC-EU-CHIEUCH
-0xA36C 0xC9A0 # HANGUL SYLLABLE CIEUC-EU-KHIEUKH
-0xA36D 0xC9A1 # HANGUL SYLLABLE CIEUC-EU-THIEUTH
-0xA36E 0xC9A2 # HANGUL SYLLABLE CIEUC-EU-PHIEUPH
-0xA36F 0xC9A3 # HANGUL SYLLABLE CIEUC-EU-HIEUH
-0xA370 0xC9A4 # HANGUL SYLLABLE CIEUC-YI
-0xA371 0xC9A5 # HANGUL SYLLABLE CIEUC-YI-KIYEOK
-0xA372 0xC9A6 # HANGUL SYLLABLE CIEUC-YI-SSANGKIYEOK
-0xA373 0xC9A7 # HANGUL SYLLABLE CIEUC-YI-KIYEOKSIOS
-0xA374 0xC9A8 # HANGUL SYLLABLE CIEUC-YI-NIEUN
-0xA375 0xC9A9 # HANGUL SYLLABLE CIEUC-YI-NIEUNCIEUC
-0xA376 0xC9AA # HANGUL SYLLABLE CIEUC-YI-NIEUNHIEUH
-0xA377 0xC9AB # HANGUL SYLLABLE CIEUC-YI-TIKEUT
-0xA378 0xC9AC # HANGUL SYLLABLE CIEUC-YI-RIEUL
-0xA379 0xC9AD # HANGUL SYLLABLE CIEUC-YI-RIEULKIYEOK
-0xA37A 0xC9AE # HANGUL SYLLABLE CIEUC-YI-RIEULMIEUM
-0xA381 0xC9AF # HANGUL SYLLABLE CIEUC-YI-RIEULPIEUP
-0xA382 0xC9B0 # HANGUL SYLLABLE CIEUC-YI-RIEULSIOS
-0xA383 0xC9B1 # HANGUL SYLLABLE CIEUC-YI-RIEULTHIEUTH
-0xA384 0xC9B2 # HANGUL SYLLABLE CIEUC-YI-RIEULPHIEUPH
-0xA385 0xC9B3 # HANGUL SYLLABLE CIEUC-YI-RIEULHIEUH
-0xA386 0xC9B4 # HANGUL SYLLABLE CIEUC-YI-MIEUM
-0xA387 0xC9B5 # HANGUL SYLLABLE CIEUC-YI-PIEUP
-0xA388 0xC9B6 # HANGUL SYLLABLE CIEUC-YI-PIEUPSIOS
-0xA389 0xC9B7 # HANGUL SYLLABLE CIEUC-YI-SIOS
-0xA38A 0xC9B8 # HANGUL SYLLABLE CIEUC-YI-SSANGSIOS
-0xA38B 0xC9B9 # HANGUL SYLLABLE CIEUC-YI-IEUNG
-0xA38C 0xC9BA # HANGUL SYLLABLE CIEUC-YI-CIEUC
-0xA38D 0xC9BB # HANGUL SYLLABLE CIEUC-YI-CHIEUCH
-0xA38E 0xC9BC # HANGUL SYLLABLE CIEUC-YI-KHIEUKH
-0xA38F 0xC9BD # HANGUL SYLLABLE CIEUC-YI-THIEUTH
-0xA390 0xC9BE # HANGUL SYLLABLE CIEUC-YI-PHIEUPH
-0xA391 0xC9BF # HANGUL SYLLABLE CIEUC-YI-HIEUH
-0xA392 0xC9C2 # HANGUL SYLLABLE CIEUC-I-SSANGKIYEOK
-0xA393 0xC9C3 # HANGUL SYLLABLE CIEUC-I-KIYEOKSIOS
-0xA394 0xC9C5 # HANGUL SYLLABLE CIEUC-I-NIEUNCIEUC
-0xA395 0xC9C6 # HANGUL SYLLABLE CIEUC-I-NIEUNHIEUH
-0xA396 0xC9C9 # HANGUL SYLLABLE CIEUC-I-RIEULKIYEOK
-0xA397 0xC9CB # HANGUL SYLLABLE CIEUC-I-RIEULPIEUP
-0xA398 0xC9CC # HANGUL SYLLABLE CIEUC-I-RIEULSIOS
-0xA399 0xC9CD # HANGUL SYLLABLE CIEUC-I-RIEULTHIEUTH
-0xA39A 0xC9CE # HANGUL SYLLABLE CIEUC-I-RIEULPHIEUPH
-0xA39B 0xC9CF # HANGUL SYLLABLE CIEUC-I-RIEULHIEUH
-0xA39C 0xC9D2 # HANGUL SYLLABLE CIEUC-I-PIEUPSIOS
-0xA39D 0xC9D4 # HANGUL SYLLABLE CIEUC-I-SSANGSIOS
-0xA39E 0xC9D7 # HANGUL SYLLABLE CIEUC-I-CHIEUCH
-0xA39F 0xC9D8 # HANGUL SYLLABLE CIEUC-I-KHIEUKH
-0xA3A0 0xC9DB # HANGUL SYLLABLE CIEUC-I-HIEUH
-0xA3A1 0xFF01 # FULLWIDTH EXCLAMATION MARK
-0xA3A2 0xFF02 # FULLWIDTH QUOTATION MARK
-0xA3A3 0xFF03 # FULLWIDTH NUMBER SIGN
-0xA3A4 0xFF04 # FULLWIDTH DOLLAR SIGN
-0xA3A5 0xFF05 # FULLWIDTH PERCENT SIGN
-0xA3A6 0xFF06 # FULLWIDTH AMPERSAND
-0xA3A7 0xFF07 # FULLWIDTH APOSTROPHE
-0xA3A8 0xFF08 # FULLWIDTH LEFT PARENTHESIS
-0xA3A9 0xFF09 # FULLWIDTH RIGHT PARENTHESIS
-0xA3AA 0xFF0A # FULLWIDTH ASTERISK
-0xA3AB 0xFF0B # FULLWIDTH PLUS SIGN
-0xA3AC 0xFF0C # FULLWIDTH COMMA
-0xA3AD 0xFF0D # FULLWIDTH HYPHEN-MINUS
-0xA3AE 0xFF0E # FULLWIDTH FULL STOP
-0xA3AF 0xFF0F # FULLWIDTH SOLIDUS
-0xA3B0 0xFF10 # FULLWIDTH DIGIT ZERO
-0xA3B1 0xFF11 # FULLWIDTH DIGIT ONE
-0xA3B2 0xFF12 # FULLWIDTH DIGIT TWO
-0xA3B3 0xFF13 # FULLWIDTH DIGIT THREE
-0xA3B4 0xFF14 # FULLWIDTH DIGIT FOUR
-0xA3B5 0xFF15 # FULLWIDTH DIGIT FIVE
-0xA3B6 0xFF16 # FULLWIDTH DIGIT SIX
-0xA3B7 0xFF17 # FULLWIDTH DIGIT SEVEN
-0xA3B8 0xFF18 # FULLWIDTH DIGIT EIGHT
-0xA3B9 0xFF19 # FULLWIDTH DIGIT NINE
-0xA3BA 0xFF1A # FULLWIDTH COLON
-0xA3BB 0xFF1B # FULLWIDTH SEMICOLON
-0xA3BC 0xFF1C # FULLWIDTH LESS-THAN SIGN
-0xA3BD 0xFF1D # FULLWIDTH EQUALS SIGN
-0xA3BE 0xFF1E # FULLWIDTH GREATER-THAN SIGN
-0xA3BF 0xFF1F # FULLWIDTH QUESTION MARK
-0xA3C0 0xFF20 # FULLWIDTH COMMERCIAL AT
-0xA3C1 0xFF21 # FULLWIDTH LATIN CAPITAL LETTER A
-0xA3C2 0xFF22 # FULLWIDTH LATIN CAPITAL LETTER B
-0xA3C3 0xFF23 # FULLWIDTH LATIN CAPITAL LETTER C
-0xA3C4 0xFF24 # FULLWIDTH LATIN CAPITAL LETTER D
-0xA3C5 0xFF25 # FULLWIDTH LATIN CAPITAL LETTER E
-0xA3C6 0xFF26 # FULLWIDTH LATIN CAPITAL LETTER F
-0xA3C7 0xFF27 # FULLWIDTH LATIN CAPITAL LETTER G
-0xA3C8 0xFF28 # FULLWIDTH LATIN CAPITAL LETTER H
-0xA3C9 0xFF29 # FULLWIDTH LATIN CAPITAL LETTER I
-0xA3CA 0xFF2A # FULLWIDTH LATIN CAPITAL LETTER J
-0xA3CB 0xFF2B # FULLWIDTH LATIN CAPITAL LETTER K
-0xA3CC 0xFF2C # FULLWIDTH LATIN CAPITAL LETTER L
-0xA3CD 0xFF2D # FULLWIDTH LATIN CAPITAL LETTER M
-0xA3CE 0xFF2E # FULLWIDTH LATIN CAPITAL LETTER N
-0xA3CF 0xFF2F # FULLWIDTH LATIN CAPITAL LETTER O
-0xA3D0 0xFF30 # FULLWIDTH LATIN CAPITAL LETTER P
-0xA3D1 0xFF31 # FULLWIDTH LATIN CAPITAL LETTER Q
-0xA3D2 0xFF32 # FULLWIDTH LATIN CAPITAL LETTER R
-0xA3D3 0xFF33 # FULLWIDTH LATIN CAPITAL LETTER S
-0xA3D4 0xFF34 # FULLWIDTH LATIN CAPITAL LETTER T
-0xA3D5 0xFF35 # FULLWIDTH LATIN CAPITAL LETTER U
-0xA3D6 0xFF36 # FULLWIDTH LATIN CAPITAL LETTER V
-0xA3D7 0xFF37 # FULLWIDTH LATIN CAPITAL LETTER W
-0xA3D8 0xFF38 # FULLWIDTH LATIN CAPITAL LETTER X
-0xA3D9 0xFF39 # FULLWIDTH LATIN CAPITAL LETTER Y
-0xA3DA 0xFF3A # FULLWIDTH LATIN CAPITAL LETTER Z
-0xA3DB 0xFF3B # FULLWIDTH LEFT SQUARE BRACKET
-0xA3DC 0xFFE6 # FULLWIDTH WON SIGN
-0xA3DD 0xFF3D # FULLWIDTH RIGHT SQUARE BRACKET
-0xA3DE 0xFF3E # FULLWIDTH CIRCUMFLEX ACCENT
-0xA3DF 0xFF3F # FULLWIDTH LOW LINE
-0xA3E0 0xFF40 # FULLWIDTH GRAVE ACCENT
-0xA3E1 0xFF41 # FULLWIDTH LATIN SMALL LETTER A
-0xA3E2 0xFF42 # FULLWIDTH LATIN SMALL LETTER B
-0xA3E3 0xFF43 # FULLWIDTH LATIN SMALL LETTER C
-0xA3E4 0xFF44 # FULLWIDTH LATIN SMALL LETTER D
-0xA3E5 0xFF45 # FULLWIDTH LATIN SMALL LETTER E
-0xA3E6 0xFF46 # FULLWIDTH LATIN SMALL LETTER F
-0xA3E7 0xFF47 # FULLWIDTH LATIN SMALL LETTER G
-0xA3E8 0xFF48 # FULLWIDTH LATIN SMALL LETTER H
-0xA3E9 0xFF49 # FULLWIDTH LATIN SMALL LETTER I
-0xA3EA 0xFF4A # FULLWIDTH LATIN SMALL LETTER J
-0xA3EB 0xFF4B # FULLWIDTH LATIN SMALL LETTER K
-0xA3EC 0xFF4C # FULLWIDTH LATIN SMALL LETTER L
-0xA3ED 0xFF4D # FULLWIDTH LATIN SMALL LETTER M
-0xA3EE 0xFF4E # FULLWIDTH LATIN SMALL LETTER N
-0xA3EF 0xFF4F # FULLWIDTH LATIN SMALL LETTER O
-0xA3F0 0xFF50 # FULLWIDTH LATIN SMALL LETTER P
-0xA3F1 0xFF51 # FULLWIDTH LATIN SMALL LETTER Q
-0xA3F2 0xFF52 # FULLWIDTH LATIN SMALL LETTER R
-0xA3F3 0xFF53 # FULLWIDTH LATIN SMALL LETTER S
-0xA3F4 0xFF54 # FULLWIDTH LATIN SMALL LETTER T
-0xA3F5 0xFF55 # FULLWIDTH LATIN SMALL LETTER U
-0xA3F6 0xFF56 # FULLWIDTH LATIN SMALL LETTER V
-0xA3F7 0xFF57 # FULLWIDTH LATIN SMALL LETTER W
-0xA3F8 0xFF58 # FULLWIDTH LATIN SMALL LETTER X
-0xA3F9 0xFF59 # FULLWIDTH LATIN SMALL LETTER Y
-0xA3FA 0xFF5A # FULLWIDTH LATIN SMALL LETTER Z
-0xA3FB 0xFF5B # FULLWIDTH LEFT CURLY BRACKET
-0xA3FC 0xFF5C # FULLWIDTH VERTICAL LINE
-0xA3FD 0xFF5D # FULLWIDTH RIGHT CURLY BRACKET
-0xA3FE 0xFFE3 # FULLWIDTH MACRON
-0xA441 0xC9DE # HANGUL SYLLABLE SSANGCIEUC-A-SSANGKIYEOK
-0xA442 0xC9DF # HANGUL SYLLABLE SSANGCIEUC-A-KIYEOKSIOS
-0xA443 0xC9E1 # HANGUL SYLLABLE SSANGCIEUC-A-NIEUNCIEUC
-0xA444 0xC9E3 # HANGUL SYLLABLE SSANGCIEUC-A-TIKEUT
-0xA445 0xC9E5 # HANGUL SYLLABLE SSANGCIEUC-A-RIEULKIYEOK
-0xA446 0xC9E6 # HANGUL SYLLABLE SSANGCIEUC-A-RIEULMIEUM
-0xA447 0xC9E8 # HANGUL SYLLABLE SSANGCIEUC-A-RIEULSIOS
-0xA448 0xC9E9 # HANGUL SYLLABLE SSANGCIEUC-A-RIEULTHIEUTH
-0xA449 0xC9EA # HANGUL SYLLABLE SSANGCIEUC-A-RIEULPHIEUPH
-0xA44A 0xC9EB # HANGUL SYLLABLE SSANGCIEUC-A-RIEULHIEUH
-0xA44B 0xC9EE # HANGUL SYLLABLE SSANGCIEUC-A-PIEUPSIOS
-0xA44C 0xC9F2 # HANGUL SYLLABLE SSANGCIEUC-A-CIEUC
-0xA44D 0xC9F3 # HANGUL SYLLABLE SSANGCIEUC-A-CHIEUCH
-0xA44E 0xC9F4 # HANGUL SYLLABLE SSANGCIEUC-A-KHIEUKH
-0xA44F 0xC9F5 # HANGUL SYLLABLE SSANGCIEUC-A-THIEUTH
-0xA450 0xC9F6 # HANGUL SYLLABLE SSANGCIEUC-A-PHIEUPH
-0xA451 0xC9F7 # HANGUL SYLLABLE SSANGCIEUC-A-HIEUH
-0xA452 0xC9FA # HANGUL SYLLABLE SSANGCIEUC-AE-SSANGKIYEOK
-0xA453 0xC9FB # HANGUL SYLLABLE SSANGCIEUC-AE-KIYEOKSIOS
-0xA454 0xC9FD # HANGUL SYLLABLE SSANGCIEUC-AE-NIEUNCIEUC
-0xA455 0xC9FE # HANGUL SYLLABLE SSANGCIEUC-AE-NIEUNHIEUH
-0xA456 0xC9FF # HANGUL SYLLABLE SSANGCIEUC-AE-TIKEUT
-0xA457 0xCA01 # HANGUL SYLLABLE SSANGCIEUC-AE-RIEULKIYEOK
-0xA458 0xCA02 # HANGUL SYLLABLE SSANGCIEUC-AE-RIEULMIEUM
-0xA459 0xCA03 # HANGUL SYLLABLE SSANGCIEUC-AE-RIEULPIEUP
-0xA45A 0xCA04 # HANGUL SYLLABLE SSANGCIEUC-AE-RIEULSIOS
-0xA461 0xCA05 # HANGUL SYLLABLE SSANGCIEUC-AE-RIEULTHIEUTH
-0xA462 0xCA06 # HANGUL SYLLABLE SSANGCIEUC-AE-RIEULPHIEUPH
-0xA463 0xCA07 # HANGUL SYLLABLE SSANGCIEUC-AE-RIEULHIEUH
-0xA464 0xCA0A # HANGUL SYLLABLE SSANGCIEUC-AE-PIEUPSIOS
-0xA465 0xCA0E # HANGUL SYLLABLE SSANGCIEUC-AE-CIEUC
-0xA466 0xCA0F # HANGUL SYLLABLE SSANGCIEUC-AE-CHIEUCH
-0xA467 0xCA10 # HANGUL SYLLABLE SSANGCIEUC-AE-KHIEUKH
-0xA468 0xCA11 # HANGUL SYLLABLE SSANGCIEUC-AE-THIEUTH
-0xA469 0xCA12 # HANGUL SYLLABLE SSANGCIEUC-AE-PHIEUPH
-0xA46A 0xCA13 # HANGUL SYLLABLE SSANGCIEUC-AE-HIEUH
-0xA46B 0xCA15 # HANGUL SYLLABLE SSANGCIEUC-YA-KIYEOK
-0xA46C 0xCA16 # HANGUL SYLLABLE SSANGCIEUC-YA-SSANGKIYEOK
-0xA46D 0xCA17 # HANGUL SYLLABLE SSANGCIEUC-YA-KIYEOKSIOS
-0xA46E 0xCA19 # HANGUL SYLLABLE SSANGCIEUC-YA-NIEUNCIEUC
-0xA46F 0xCA1A # HANGUL SYLLABLE SSANGCIEUC-YA-NIEUNHIEUH
-0xA470 0xCA1B # HANGUL SYLLABLE SSANGCIEUC-YA-TIKEUT
-0xA471 0xCA1C # HANGUL SYLLABLE SSANGCIEUC-YA-RIEUL
-0xA472 0xCA1D # HANGUL SYLLABLE SSANGCIEUC-YA-RIEULKIYEOK
-0xA473 0xCA1E # HANGUL SYLLABLE SSANGCIEUC-YA-RIEULMIEUM
-0xA474 0xCA1F # HANGUL SYLLABLE SSANGCIEUC-YA-RIEULPIEUP
-0xA475 0xCA20 # HANGUL SYLLABLE SSANGCIEUC-YA-RIEULSIOS
-0xA476 0xCA21 # HANGUL SYLLABLE SSANGCIEUC-YA-RIEULTHIEUTH
-0xA477 0xCA22 # HANGUL SYLLABLE SSANGCIEUC-YA-RIEULPHIEUPH
-0xA478 0xCA23 # HANGUL SYLLABLE SSANGCIEUC-YA-RIEULHIEUH
-0xA479 0xCA24 # HANGUL SYLLABLE SSANGCIEUC-YA-MIEUM
-0xA47A 0xCA25 # HANGUL SYLLABLE SSANGCIEUC-YA-PIEUP
-0xA481 0xCA26 # HANGUL SYLLABLE SSANGCIEUC-YA-PIEUPSIOS
-0xA482 0xCA27 # HANGUL SYLLABLE SSANGCIEUC-YA-SIOS
-0xA483 0xCA28 # HANGUL SYLLABLE SSANGCIEUC-YA-SSANGSIOS
-0xA484 0xCA2A # HANGUL SYLLABLE SSANGCIEUC-YA-CIEUC
-0xA485 0xCA2B # HANGUL SYLLABLE SSANGCIEUC-YA-CHIEUCH
-0xA486 0xCA2C # HANGUL SYLLABLE SSANGCIEUC-YA-KHIEUKH
-0xA487 0xCA2D # HANGUL SYLLABLE SSANGCIEUC-YA-THIEUTH
-0xA488 0xCA2E # HANGUL SYLLABLE SSANGCIEUC-YA-PHIEUPH
-0xA489 0xCA2F # HANGUL SYLLABLE SSANGCIEUC-YA-HIEUH
-0xA48A 0xCA30 # HANGUL SYLLABLE SSANGCIEUC-YAE
-0xA48B 0xCA31 # HANGUL SYLLABLE SSANGCIEUC-YAE-KIYEOK
-0xA48C 0xCA32 # HANGUL SYLLABLE SSANGCIEUC-YAE-SSANGKIYEOK
-0xA48D 0xCA33 # HANGUL SYLLABLE SSANGCIEUC-YAE-KIYEOKSIOS
-0xA48E 0xCA34 # HANGUL SYLLABLE SSANGCIEUC-YAE-NIEUN
-0xA48F 0xCA35 # HANGUL SYLLABLE SSANGCIEUC-YAE-NIEUNCIEUC
-0xA490 0xCA36 # HANGUL SYLLABLE SSANGCIEUC-YAE-NIEUNHIEUH
-0xA491 0xCA37 # HANGUL SYLLABLE SSANGCIEUC-YAE-TIKEUT
-0xA492 0xCA38 # HANGUL SYLLABLE SSANGCIEUC-YAE-RIEUL
-0xA493 0xCA39 # HANGUL SYLLABLE SSANGCIEUC-YAE-RIEULKIYEOK
-0xA494 0xCA3A # HANGUL SYLLABLE SSANGCIEUC-YAE-RIEULMIEUM
-0xA495 0xCA3B # HANGUL SYLLABLE SSANGCIEUC-YAE-RIEULPIEUP
-0xA496 0xCA3C # HANGUL SYLLABLE SSANGCIEUC-YAE-RIEULSIOS
-0xA497 0xCA3D # HANGUL SYLLABLE SSANGCIEUC-YAE-RIEULTHIEUTH
-0xA498 0xCA3E # HANGUL SYLLABLE SSANGCIEUC-YAE-RIEULPHIEUPH
-0xA499 0xCA3F # HANGUL SYLLABLE SSANGCIEUC-YAE-RIEULHIEUH
-0xA49A 0xCA40 # HANGUL SYLLABLE SSANGCIEUC-YAE-MIEUM
-0xA49B 0xCA41 # HANGUL SYLLABLE SSANGCIEUC-YAE-PIEUP
-0xA49C 0xCA42 # HANGUL SYLLABLE SSANGCIEUC-YAE-PIEUPSIOS
-0xA49D 0xCA43 # HANGUL SYLLABLE SSANGCIEUC-YAE-SIOS
-0xA49E 0xCA44 # HANGUL SYLLABLE SSANGCIEUC-YAE-SSANGSIOS
-0xA49F 0xCA45 # HANGUL SYLLABLE SSANGCIEUC-YAE-IEUNG
-0xA4A0 0xCA46 # HANGUL SYLLABLE SSANGCIEUC-YAE-CIEUC
-0xA4A1 0x3131 # HANGUL LETTER KIYEOK
-0xA4A2 0x3132 # HANGUL LETTER SSANGKIYEOK
-0xA4A3 0x3133 # HANGUL LETTER KIYEOK-SIOS
-0xA4A4 0x3134 # HANGUL LETTER NIEUN
-0xA4A5 0x3135 # HANGUL LETTER NIEUN-CIEUC
-0xA4A6 0x3136 # HANGUL LETTER NIEUN-HIEUH
-0xA4A7 0x3137 # HANGUL LETTER TIKEUT
-0xA4A8 0x3138 # HANGUL LETTER SSANGTIKEUT
-0xA4A9 0x3139 # HANGUL LETTER RIEUL
-0xA4AA 0x313A # HANGUL LETTER RIEUL-KIYEOK
-0xA4AB 0x313B # HANGUL LETTER RIEUL-MIEUM
-0xA4AC 0x313C # HANGUL LETTER RIEUL-PIEUP
-0xA4AD 0x313D # HANGUL LETTER RIEUL-SIOS
-0xA4AE 0x313E # HANGUL LETTER RIEUL-THIEUTH
-0xA4AF 0x313F # HANGUL LETTER RIEUL-PHIEUPH
-0xA4B0 0x3140 # HANGUL LETTER RIEUL-HIEUH
-0xA4B1 0x3141 # HANGUL LETTER MIEUM
-0xA4B2 0x3142 # HANGUL LETTER PIEUP
-0xA4B3 0x3143 # HANGUL LETTER SSANGPIEUP
-0xA4B4 0x3144 # HANGUL LETTER PIEUP-SIOS
-0xA4B5 0x3145 # HANGUL LETTER SIOS
-0xA4B6 0x3146 # HANGUL LETTER SSANGSIOS
-0xA4B7 0x3147 # HANGUL LETTER IEUNG
-0xA4B8 0x3148 # HANGUL LETTER CIEUC
-0xA4B9 0x3149 # HANGUL LETTER SSANGCIEUC
-0xA4BA 0x314A # HANGUL LETTER CHIEUCH
-0xA4BB 0x314B # HANGUL LETTER KHIEUKH
-0xA4BC 0x314C # HANGUL LETTER THIEUTH
-0xA4BD 0x314D # HANGUL LETTER PHIEUPH
-0xA4BE 0x314E # HANGUL LETTER HIEUH
-0xA4BF 0x314F # HANGUL LETTER A
-0xA4C0 0x3150 # HANGUL LETTER AE
-0xA4C1 0x3151 # HANGUL LETTER YA
-0xA4C2 0x3152 # HANGUL LETTER YAE
-0xA4C3 0x3153 # HANGUL LETTER EO
-0xA4C4 0x3154 # HANGUL LETTER E
-0xA4C5 0x3155 # HANGUL LETTER YEO
-0xA4C6 0x3156 # HANGUL LETTER YE
-0xA4C7 0x3157 # HANGUL LETTER O
-0xA4C8 0x3158 # HANGUL LETTER WA
-0xA4C9 0x3159 # HANGUL LETTER WAE
-0xA4CA 0x315A # HANGUL LETTER OE
-0xA4CB 0x315B # HANGUL LETTER YO
-0xA4CC 0x315C # HANGUL LETTER U
-0xA4CD 0x315D # HANGUL LETTER WEO
-0xA4CE 0x315E # HANGUL LETTER WE
-0xA4CF 0x315F # HANGUL LETTER WI
-0xA4D0 0x3160 # HANGUL LETTER YU
-0xA4D1 0x3161 # HANGUL LETTER EU
-0xA4D2 0x3162 # HANGUL LETTER YI
-0xA4D3 0x3163 # HANGUL LETTER I
-0xA4D4 0x3164 # HANGUL FILLER
-0xA4D5 0x3165 # HANGUL LETTER SSANGNIEUN
-0xA4D6 0x3166 # HANGUL LETTER NIEUN-TIKEUT
-0xA4D7 0x3167 # HANGUL LETTER NIEUN-SIOS
-0xA4D8 0x3168 # HANGUL LETTER NIEUN-PANSIOS
-0xA4D9 0x3169 # HANGUL LETTER RIEUL-KIYEOK-SIOS
-0xA4DA 0x316A # HANGUL LETTER RIEUL-TIKEUT
-0xA4DB 0x316B # HANGUL LETTER RIEUL-PIEUP-SIOS
-0xA4DC 0x316C # HANGUL LETTER RIEUL-PANSIOS
-0xA4DD 0x316D # HANGUL LETTER RIEUL-YEORINHIEUH
-0xA4DE 0x316E # HANGUL LETTER MIEUM-PIEUP
-0xA4DF 0x316F # HANGUL LETTER MIEUM-SIOS
-0xA4E0 0x3170 # HANGUL LETTER MIEUM-PANSIOS
-0xA4E1 0x3171 # HANGUL LETTER KAPYEOUNMIEUM
-0xA4E2 0x3172 # HANGUL LETTER PIEUP-KIYEOK
-0xA4E3 0x3173 # HANGUL LETTER PIEUP-TIKEUT
-0xA4E4 0x3174 # HANGUL LETTER PIEUP-SIOS-KIYEOK
-0xA4E5 0x3175 # HANGUL LETTER PIEUP-SIOS-TIKEUT
-0xA4E6 0x3176 # HANGUL LETTER PIEUP-CIEUC
-0xA4E7 0x3177 # HANGUL LETTER PIEUP-THIEUTH
-0xA4E8 0x3178 # HANGUL LETTER KAPYEOUNPIEUP
-0xA4E9 0x3179 # HANGUL LETTER KAPYEOUNSSANGPIEUP
-0xA4EA 0x317A # HANGUL LETTER SIOS-KIYEOK
-0xA4EB 0x317B # HANGUL LETTER SIOS-NIEUN
-0xA4EC 0x317C # HANGUL LETTER SIOS-TIKEUT
-0xA4ED 0x317D # HANGUL LETTER SIOS-PIEUP
-0xA4EE 0x317E # HANGUL LETTER SIOS-CIEUC
-0xA4EF 0x317F # HANGUL LETTER PANSIOS
-0xA4F0 0x3180 # HANGUL LETTER SSANGIEUNG
-0xA4F1 0x3181 # HANGUL LETTER YESIEUNG
-0xA4F2 0x3182 # HANGUL LETTER YESIEUNG-SIOS
-0xA4F3 0x3183 # HANGUL LETTER YESIEUNG-PANSIOS
-0xA4F4 0x3184 # HANGUL LETTER KAPYEOUNPHIEUPH
-0xA4F5 0x3185 # HANGUL LETTER SSANGHIEUH
-0xA4F6 0x3186 # HANGUL LETTER YEORINHIEUH
-0xA4F7 0x3187 # HANGUL LETTER YO-YA
-0xA4F8 0x3188 # HANGUL LETTER YO-YAE
-0xA4F9 0x3189 # HANGUL LETTER YO-I
-0xA4FA 0x318A # HANGUL LETTER YU-YEO
-0xA4FB 0x318B # HANGUL LETTER YU-YE
-0xA4FC 0x318C # HANGUL LETTER YU-I
-0xA4FD 0x318D # HANGUL LETTER ARAEA
-0xA4FE 0x318E # HANGUL LETTER ARAEAE
-0xA541 0xCA47 # HANGUL SYLLABLE SSANGCIEUC-YAE-CHIEUCH
-0xA542 0xCA48 # HANGUL SYLLABLE SSANGCIEUC-YAE-KHIEUKH
-0xA543 0xCA49 # HANGUL SYLLABLE SSANGCIEUC-YAE-THIEUTH
-0xA544 0xCA4A # HANGUL SYLLABLE SSANGCIEUC-YAE-PHIEUPH
-0xA545 0xCA4B # HANGUL SYLLABLE SSANGCIEUC-YAE-HIEUH
-0xA546 0xCA4E # HANGUL SYLLABLE SSANGCIEUC-EO-SSANGKIYEOK
-0xA547 0xCA4F # HANGUL SYLLABLE SSANGCIEUC-EO-KIYEOKSIOS
-0xA548 0xCA51 # HANGUL SYLLABLE SSANGCIEUC-EO-NIEUNCIEUC
-0xA549 0xCA52 # HANGUL SYLLABLE SSANGCIEUC-EO-NIEUNHIEUH
-0xA54A 0xCA53 # HANGUL SYLLABLE SSANGCIEUC-EO-TIKEUT
-0xA54B 0xCA55 # HANGUL SYLLABLE SSANGCIEUC-EO-RIEULKIYEOK
-0xA54C 0xCA56 # HANGUL SYLLABLE SSANGCIEUC-EO-RIEULMIEUM
-0xA54D 0xCA57 # HANGUL SYLLABLE SSANGCIEUC-EO-RIEULPIEUP
-0xA54E 0xCA58 # HANGUL SYLLABLE SSANGCIEUC-EO-RIEULSIOS
-0xA54F 0xCA59 # HANGUL SYLLABLE SSANGCIEUC-EO-RIEULTHIEUTH
-0xA550 0xCA5A # HANGUL SYLLABLE SSANGCIEUC-EO-RIEULPHIEUPH
-0xA551 0xCA5B # HANGUL SYLLABLE SSANGCIEUC-EO-RIEULHIEUH
-0xA552 0xCA5E # HANGUL SYLLABLE SSANGCIEUC-EO-PIEUPSIOS
-0xA553 0xCA62 # HANGUL SYLLABLE SSANGCIEUC-EO-CIEUC
-0xA554 0xCA63 # HANGUL SYLLABLE SSANGCIEUC-EO-CHIEUCH
-0xA555 0xCA64 # HANGUL SYLLABLE SSANGCIEUC-EO-KHIEUKH
-0xA556 0xCA65 # HANGUL SYLLABLE SSANGCIEUC-EO-THIEUTH
-0xA557 0xCA66 # HANGUL SYLLABLE SSANGCIEUC-EO-PHIEUPH
-0xA558 0xCA67 # HANGUL SYLLABLE SSANGCIEUC-EO-HIEUH
-0xA559 0xCA69 # HANGUL SYLLABLE SSANGCIEUC-E-KIYEOK
-0xA55A 0xCA6A # HANGUL SYLLABLE SSANGCIEUC-E-SSANGKIYEOK
-0xA561 0xCA6B # HANGUL SYLLABLE SSANGCIEUC-E-KIYEOKSIOS
-0xA562 0xCA6C # HANGUL SYLLABLE SSANGCIEUC-E-NIEUN
-0xA563 0xCA6D # HANGUL SYLLABLE SSANGCIEUC-E-NIEUNCIEUC
-0xA564 0xCA6E # HANGUL SYLLABLE SSANGCIEUC-E-NIEUNHIEUH
-0xA565 0xCA6F # HANGUL SYLLABLE SSANGCIEUC-E-TIKEUT
-0xA566 0xCA70 # HANGUL SYLLABLE SSANGCIEUC-E-RIEUL
-0xA567 0xCA71 # HANGUL SYLLABLE SSANGCIEUC-E-RIEULKIYEOK
-0xA568 0xCA72 # HANGUL SYLLABLE SSANGCIEUC-E-RIEULMIEUM
-0xA569 0xCA73 # HANGUL SYLLABLE SSANGCIEUC-E-RIEULPIEUP
-0xA56A 0xCA74 # HANGUL SYLLABLE SSANGCIEUC-E-RIEULSIOS
-0xA56B 0xCA75 # HANGUL SYLLABLE SSANGCIEUC-E-RIEULTHIEUTH
-0xA56C 0xCA76 # HANGUL SYLLABLE SSANGCIEUC-E-RIEULPHIEUPH
-0xA56D 0xCA77 # HANGUL SYLLABLE SSANGCIEUC-E-RIEULHIEUH
-0xA56E 0xCA78 # HANGUL SYLLABLE SSANGCIEUC-E-MIEUM
-0xA56F 0xCA79 # HANGUL SYLLABLE SSANGCIEUC-E-PIEUP
-0xA570 0xCA7A # HANGUL SYLLABLE SSANGCIEUC-E-PIEUPSIOS
-0xA571 0xCA7B # HANGUL SYLLABLE SSANGCIEUC-E-SIOS
-0xA572 0xCA7C # HANGUL SYLLABLE SSANGCIEUC-E-SSANGSIOS
-0xA573 0xCA7E # HANGUL SYLLABLE SSANGCIEUC-E-CIEUC
-0xA574 0xCA7F # HANGUL SYLLABLE SSANGCIEUC-E-CHIEUCH
-0xA575 0xCA80 # HANGUL SYLLABLE SSANGCIEUC-E-KHIEUKH
-0xA576 0xCA81 # HANGUL SYLLABLE SSANGCIEUC-E-THIEUTH
-0xA577 0xCA82 # HANGUL SYLLABLE SSANGCIEUC-E-PHIEUPH
-0xA578 0xCA83 # HANGUL SYLLABLE SSANGCIEUC-E-HIEUH
-0xA579 0xCA85 # HANGUL SYLLABLE SSANGCIEUC-YEO-KIYEOK
-0xA57A 0xCA86 # HANGUL SYLLABLE SSANGCIEUC-YEO-SSANGKIYEOK
-0xA581 0xCA87 # HANGUL SYLLABLE SSANGCIEUC-YEO-KIYEOKSIOS
-0xA582 0xCA88 # HANGUL SYLLABLE SSANGCIEUC-YEO-NIEUN
-0xA583 0xCA89 # HANGUL SYLLABLE SSANGCIEUC-YEO-NIEUNCIEUC
-0xA584 0xCA8A # HANGUL SYLLABLE SSANGCIEUC-YEO-NIEUNHIEUH
-0xA585 0xCA8B # HANGUL SYLLABLE SSANGCIEUC-YEO-TIKEUT
-0xA586 0xCA8C # HANGUL SYLLABLE SSANGCIEUC-YEO-RIEUL
-0xA587 0xCA8D # HANGUL SYLLABLE SSANGCIEUC-YEO-RIEULKIYEOK
-0xA588 0xCA8E # HANGUL SYLLABLE SSANGCIEUC-YEO-RIEULMIEUM
-0xA589 0xCA8F # HANGUL SYLLABLE SSANGCIEUC-YEO-RIEULPIEUP
-0xA58A 0xCA90 # HANGUL SYLLABLE SSANGCIEUC-YEO-RIEULSIOS
-0xA58B 0xCA91 # HANGUL SYLLABLE SSANGCIEUC-YEO-RIEULTHIEUTH
-0xA58C 0xCA92 # HANGUL SYLLABLE SSANGCIEUC-YEO-RIEULPHIEUPH
-0xA58D 0xCA93 # HANGUL SYLLABLE SSANGCIEUC-YEO-RIEULHIEUH
-0xA58E 0xCA94 # HANGUL SYLLABLE SSANGCIEUC-YEO-MIEUM
-0xA58F 0xCA95 # HANGUL SYLLABLE SSANGCIEUC-YEO-PIEUP
-0xA590 0xCA96 # HANGUL SYLLABLE SSANGCIEUC-YEO-PIEUPSIOS
-0xA591 0xCA97 # HANGUL SYLLABLE SSANGCIEUC-YEO-SIOS
-0xA592 0xCA99 # HANGUL SYLLABLE SSANGCIEUC-YEO-IEUNG
-0xA593 0xCA9A # HANGUL SYLLABLE SSANGCIEUC-YEO-CIEUC
-0xA594 0xCA9B # HANGUL SYLLABLE SSANGCIEUC-YEO-CHIEUCH
-0xA595 0xCA9C # HANGUL SYLLABLE SSANGCIEUC-YEO-KHIEUKH
-0xA596 0xCA9D # HANGUL SYLLABLE SSANGCIEUC-YEO-THIEUTH
-0xA597 0xCA9E # HANGUL SYLLABLE SSANGCIEUC-YEO-PHIEUPH
-0xA598 0xCA9F # HANGUL SYLLABLE SSANGCIEUC-YEO-HIEUH
-0xA599 0xCAA0 # HANGUL SYLLABLE SSANGCIEUC-YE
-0xA59A 0xCAA1 # HANGUL SYLLABLE SSANGCIEUC-YE-KIYEOK
-0xA59B 0xCAA2 # HANGUL SYLLABLE SSANGCIEUC-YE-SSANGKIYEOK
-0xA59C 0xCAA3 # HANGUL SYLLABLE SSANGCIEUC-YE-KIYEOKSIOS
-0xA59D 0xCAA4 # HANGUL SYLLABLE SSANGCIEUC-YE-NIEUN
-0xA59E 0xCAA5 # HANGUL SYLLABLE SSANGCIEUC-YE-NIEUNCIEUC
-0xA59F 0xCAA6 # HANGUL SYLLABLE SSANGCIEUC-YE-NIEUNHIEUH
-0xA5A0 0xCAA7 # HANGUL SYLLABLE SSANGCIEUC-YE-TIKEUT
-0xA5A1 0x2170 # SMALL ROMAN NUMERAL ONE
-0xA5A2 0x2171 # SMALL ROMAN NUMERAL TWO
-0xA5A3 0x2172 # SMALL ROMAN NUMERAL THREE
-0xA5A4 0x2173 # SMALL ROMAN NUMERAL FOUR
-0xA5A5 0x2174 # SMALL ROMAN NUMERAL FIVE
-0xA5A6 0x2175 # SMALL ROMAN NUMERAL SIX
-0xA5A7 0x2176 # SMALL ROMAN NUMERAL SEVEN
-0xA5A8 0x2177 # SMALL ROMAN NUMERAL EIGHT
-0xA5A9 0x2178 # SMALL ROMAN NUMERAL NINE
-0xA5AA 0x2179 # SMALL ROMAN NUMERAL TEN
-0xA5B0 0x2160 # ROMAN NUMERAL ONE
-0xA5B1 0x2161 # ROMAN NUMERAL TWO
-0xA5B2 0x2162 # ROMAN NUMERAL THREE
-0xA5B3 0x2163 # ROMAN NUMERAL FOUR
-0xA5B4 0x2164 # ROMAN NUMERAL FIVE
-0xA5B5 0x2165 # ROMAN NUMERAL SIX
-0xA5B6 0x2166 # ROMAN NUMERAL SEVEN
-0xA5B7 0x2167 # ROMAN NUMERAL EIGHT
-0xA5B8 0x2168 # ROMAN NUMERAL NINE
-0xA5B9 0x2169 # ROMAN NUMERAL TEN
-0xA5C1 0x0391 # GREEK CAPITAL LETTER ALPHA
-0xA5C2 0x0392 # GREEK CAPITAL LETTER BETA
-0xA5C3 0x0393 # GREEK CAPITAL LETTER GAMMA
-0xA5C4 0x0394 # GREEK CAPITAL LETTER DELTA
-0xA5C5 0x0395 # GREEK CAPITAL LETTER EPSILON
-0xA5C6 0x0396 # GREEK CAPITAL LETTER ZETA
-0xA5C7 0x0397 # GREEK CAPITAL LETTER ETA
-0xA5C8 0x0398 # GREEK CAPITAL LETTER THETA
-0xA5C9 0x0399 # GREEK CAPITAL LETTER IOTA
-0xA5CA 0x039A # GREEK CAPITAL LETTER KAPPA
-0xA5CB 0x039B # GREEK CAPITAL LETTER LAMDA
-0xA5CC 0x039C # GREEK CAPITAL LETTER MU
-0xA5CD 0x039D # GREEK CAPITAL LETTER NU
-0xA5CE 0x039E # GREEK CAPITAL LETTER XI
-0xA5CF 0x039F # GREEK CAPITAL LETTER OMICRON
-0xA5D0 0x03A0 # GREEK CAPITAL LETTER PI
-0xA5D1 0x03A1 # GREEK CAPITAL LETTER RHO
-0xA5D2 0x03A3 # GREEK CAPITAL LETTER SIGMA
-0xA5D3 0x03A4 # GREEK CAPITAL LETTER TAU
-0xA5D4 0x03A5 # GREEK CAPITAL LETTER UPSILON
-0xA5D5 0x03A6 # GREEK CAPITAL LETTER PHI
-0xA5D6 0x03A7 # GREEK CAPITAL LETTER CHI
-0xA5D7 0x03A8 # GREEK CAPITAL LETTER PSI
-0xA5D8 0x03A9 # GREEK CAPITAL LETTER OMEGA
-0xA5E1 0x03B1 # GREEK SMALL LETTER ALPHA
-0xA5E2 0x03B2 # GREEK SMALL LETTER BETA
-0xA5E3 0x03B3 # GREEK SMALL LETTER GAMMA
-0xA5E4 0x03B4 # GREEK SMALL LETTER DELTA
-0xA5E5 0x03B5 # GREEK SMALL LETTER EPSILON
-0xA5E6 0x03B6 # GREEK SMALL LETTER ZETA
-0xA5E7 0x03B7 # GREEK SMALL LETTER ETA
-0xA5E8 0x03B8 # GREEK SMALL LETTER THETA
-0xA5E9 0x03B9 # GREEK SMALL LETTER IOTA
-0xA5EA 0x03BA # GREEK SMALL LETTER KAPPA
-0xA5EB 0x03BB # GREEK SMALL LETTER LAMDA
-0xA5EC 0x03BC # GREEK SMALL LETTER MU
-0xA5ED 0x03BD # GREEK SMALL LETTER NU
-0xA5EE 0x03BE # GREEK SMALL LETTER XI
-0xA5EF 0x03BF # GREEK SMALL LETTER OMICRON
-0xA5F0 0x03C0 # GREEK SMALL LETTER PI
-0xA5F1 0x03C1 # GREEK SMALL LETTER RHO
-0xA5F2 0x03C3 # GREEK SMALL LETTER SIGMA
-0xA5F3 0x03C4 # GREEK SMALL LETTER TAU
-0xA5F4 0x03C5 # GREEK SMALL LETTER UPSILON
-0xA5F5 0x03C6 # GREEK SMALL LETTER PHI
-0xA5F6 0x03C7 # GREEK SMALL LETTER CHI
-0xA5F7 0x03C8 # GREEK SMALL LETTER PSI
-0xA5F8 0x03C9 # GREEK SMALL LETTER OMEGA
-0xA641 0xCAA8 # HANGUL SYLLABLE SSANGCIEUC-YE-RIEUL
-0xA642 0xCAA9 # HANGUL SYLLABLE SSANGCIEUC-YE-RIEULKIYEOK
-0xA643 0xCAAA # HANGUL SYLLABLE SSANGCIEUC-YE-RIEULMIEUM
-0xA644 0xCAAB # HANGUL SYLLABLE SSANGCIEUC-YE-RIEULPIEUP
-0xA645 0xCAAC # HANGUL SYLLABLE SSANGCIEUC-YE-RIEULSIOS
-0xA646 0xCAAD # HANGUL SYLLABLE SSANGCIEUC-YE-RIEULTHIEUTH
-0xA647 0xCAAE # HANGUL SYLLABLE SSANGCIEUC-YE-RIEULPHIEUPH
-0xA648 0xCAAF # HANGUL SYLLABLE SSANGCIEUC-YE-RIEULHIEUH
-0xA649 0xCAB0 # HANGUL SYLLABLE SSANGCIEUC-YE-MIEUM
-0xA64A 0xCAB1 # HANGUL SYLLABLE SSANGCIEUC-YE-PIEUP
-0xA64B 0xCAB2 # HANGUL SYLLABLE SSANGCIEUC-YE-PIEUPSIOS
-0xA64C 0xCAB3 # HANGUL SYLLABLE SSANGCIEUC-YE-SIOS
-0xA64D 0xCAB4 # HANGUL SYLLABLE SSANGCIEUC-YE-SSANGSIOS
-0xA64E 0xCAB5 # HANGUL SYLLABLE SSANGCIEUC-YE-IEUNG
-0xA64F 0xCAB6 # HANGUL SYLLABLE SSANGCIEUC-YE-CIEUC
-0xA650 0xCAB7 # HANGUL SYLLABLE SSANGCIEUC-YE-CHIEUCH
-0xA651 0xCAB8 # HANGUL SYLLABLE SSANGCIEUC-YE-KHIEUKH
-0xA652 0xCAB9 # HANGUL SYLLABLE SSANGCIEUC-YE-THIEUTH
-0xA653 0xCABA # HANGUL SYLLABLE SSANGCIEUC-YE-PHIEUPH
-0xA654 0xCABB # HANGUL SYLLABLE SSANGCIEUC-YE-HIEUH
-0xA655 0xCABE # HANGUL SYLLABLE SSANGCIEUC-O-SSANGKIYEOK
-0xA656 0xCABF # HANGUL SYLLABLE SSANGCIEUC-O-KIYEOKSIOS
-0xA657 0xCAC1 # HANGUL SYLLABLE SSANGCIEUC-O-NIEUNCIEUC
-0xA658 0xCAC2 # HANGUL SYLLABLE SSANGCIEUC-O-NIEUNHIEUH
-0xA659 0xCAC3 # HANGUL SYLLABLE SSANGCIEUC-O-TIKEUT
-0xA65A 0xCAC5 # HANGUL SYLLABLE SSANGCIEUC-O-RIEULKIYEOK
-0xA661 0xCAC6 # HANGUL SYLLABLE SSANGCIEUC-O-RIEULMIEUM
-0xA662 0xCAC7 # HANGUL SYLLABLE SSANGCIEUC-O-RIEULPIEUP
-0xA663 0xCAC8 # HANGUL SYLLABLE SSANGCIEUC-O-RIEULSIOS
-0xA664 0xCAC9 # HANGUL SYLLABLE SSANGCIEUC-O-RIEULTHIEUTH
-0xA665 0xCACA # HANGUL SYLLABLE SSANGCIEUC-O-RIEULPHIEUPH
-0xA666 0xCACB # HANGUL SYLLABLE SSANGCIEUC-O-RIEULHIEUH
-0xA667 0xCACE # HANGUL SYLLABLE SSANGCIEUC-O-PIEUPSIOS
-0xA668 0xCAD0 # HANGUL SYLLABLE SSANGCIEUC-O-SSANGSIOS
-0xA669 0xCAD2 # HANGUL SYLLABLE SSANGCIEUC-O-CIEUC
-0xA66A 0xCAD4 # HANGUL SYLLABLE SSANGCIEUC-O-KHIEUKH
-0xA66B 0xCAD5 # HANGUL SYLLABLE SSANGCIEUC-O-THIEUTH
-0xA66C 0xCAD6 # HANGUL SYLLABLE SSANGCIEUC-O-PHIEUPH
-0xA66D 0xCAD7 # HANGUL SYLLABLE SSANGCIEUC-O-HIEUH
-0xA66E 0xCADA # HANGUL SYLLABLE SSANGCIEUC-WA-SSANGKIYEOK
-0xA66F 0xCADB # HANGUL SYLLABLE SSANGCIEUC-WA-KIYEOKSIOS
-0xA670 0xCADC # HANGUL SYLLABLE SSANGCIEUC-WA-NIEUN
-0xA671 0xCADD # HANGUL SYLLABLE SSANGCIEUC-WA-NIEUNCIEUC
-0xA672 0xCADE # HANGUL SYLLABLE SSANGCIEUC-WA-NIEUNHIEUH
-0xA673 0xCADF # HANGUL SYLLABLE SSANGCIEUC-WA-TIKEUT
-0xA674 0xCAE1 # HANGUL SYLLABLE SSANGCIEUC-WA-RIEULKIYEOK
-0xA675 0xCAE2 # HANGUL SYLLABLE SSANGCIEUC-WA-RIEULMIEUM
-0xA676 0xCAE3 # HANGUL SYLLABLE SSANGCIEUC-WA-RIEULPIEUP
-0xA677 0xCAE4 # HANGUL SYLLABLE SSANGCIEUC-WA-RIEULSIOS
-0xA678 0xCAE5 # HANGUL SYLLABLE SSANGCIEUC-WA-RIEULTHIEUTH
-0xA679 0xCAE6 # HANGUL SYLLABLE SSANGCIEUC-WA-RIEULPHIEUPH
-0xA67A 0xCAE7 # HANGUL SYLLABLE SSANGCIEUC-WA-RIEULHIEUH
-0xA681 0xCAE8 # HANGUL SYLLABLE SSANGCIEUC-WA-MIEUM
-0xA682 0xCAE9 # HANGUL SYLLABLE SSANGCIEUC-WA-PIEUP
-0xA683 0xCAEA # HANGUL SYLLABLE SSANGCIEUC-WA-PIEUPSIOS
-0xA684 0xCAEB # HANGUL SYLLABLE SSANGCIEUC-WA-SIOS
-0xA685 0xCAED # HANGUL SYLLABLE SSANGCIEUC-WA-IEUNG
-0xA686 0xCAEE # HANGUL SYLLABLE SSANGCIEUC-WA-CIEUC
-0xA687 0xCAEF # HANGUL SYLLABLE SSANGCIEUC-WA-CHIEUCH
-0xA688 0xCAF0 # HANGUL SYLLABLE SSANGCIEUC-WA-KHIEUKH
-0xA689 0xCAF1 # HANGUL SYLLABLE SSANGCIEUC-WA-THIEUTH
-0xA68A 0xCAF2 # HANGUL SYLLABLE SSANGCIEUC-WA-PHIEUPH
-0xA68B 0xCAF3 # HANGUL SYLLABLE SSANGCIEUC-WA-HIEUH
-0xA68C 0xCAF5 # HANGUL SYLLABLE SSANGCIEUC-WAE-KIYEOK
-0xA68D 0xCAF6 # HANGUL SYLLABLE SSANGCIEUC-WAE-SSANGKIYEOK
-0xA68E 0xCAF7 # HANGUL SYLLABLE SSANGCIEUC-WAE-KIYEOKSIOS
-0xA68F 0xCAF8 # HANGUL SYLLABLE SSANGCIEUC-WAE-NIEUN
-0xA690 0xCAF9 # HANGUL SYLLABLE SSANGCIEUC-WAE-NIEUNCIEUC
-0xA691 0xCAFA # HANGUL SYLLABLE SSANGCIEUC-WAE-NIEUNHIEUH
-0xA692 0xCAFB # HANGUL SYLLABLE SSANGCIEUC-WAE-TIKEUT
-0xA693 0xCAFC # HANGUL SYLLABLE SSANGCIEUC-WAE-RIEUL
-0xA694 0xCAFD # HANGUL SYLLABLE SSANGCIEUC-WAE-RIEULKIYEOK
-0xA695 0xCAFE # HANGUL SYLLABLE SSANGCIEUC-WAE-RIEULMIEUM
-0xA696 0xCAFF # HANGUL SYLLABLE SSANGCIEUC-WAE-RIEULPIEUP
-0xA697 0xCB00 # HANGUL SYLLABLE SSANGCIEUC-WAE-RIEULSIOS
-0xA698 0xCB01 # HANGUL SYLLABLE SSANGCIEUC-WAE-RIEULTHIEUTH
-0xA699 0xCB02 # HANGUL SYLLABLE SSANGCIEUC-WAE-RIEULPHIEUPH
-0xA69A 0xCB03 # HANGUL SYLLABLE SSANGCIEUC-WAE-RIEULHIEUH
-0xA69B 0xCB04 # HANGUL SYLLABLE SSANGCIEUC-WAE-MIEUM
-0xA69C 0xCB05 # HANGUL SYLLABLE SSANGCIEUC-WAE-PIEUP
-0xA69D 0xCB06 # HANGUL SYLLABLE SSANGCIEUC-WAE-PIEUPSIOS
-0xA69E 0xCB07 # HANGUL SYLLABLE SSANGCIEUC-WAE-SIOS
-0xA69F 0xCB09 # HANGUL SYLLABLE SSANGCIEUC-WAE-IEUNG
-0xA6A0 0xCB0A # HANGUL SYLLABLE SSANGCIEUC-WAE-CIEUC
-0xA6A1 0x2500 # BOX DRAWINGS LIGHT HORIZONTAL
-0xA6A2 0x2502 # BOX DRAWINGS LIGHT VERTICAL
-0xA6A3 0x250C # BOX DRAWINGS LIGHT DOWN AND RIGHT
-0xA6A4 0x2510 # BOX DRAWINGS LIGHT DOWN AND LEFT
-0xA6A5 0x2518 # BOX DRAWINGS LIGHT UP AND LEFT
-0xA6A6 0x2514 # BOX DRAWINGS LIGHT UP AND RIGHT
-0xA6A7 0x251C # BOX DRAWINGS LIGHT VERTICAL AND RIGHT
-0xA6A8 0x252C # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
-0xA6A9 0x2524 # BOX DRAWINGS LIGHT VERTICAL AND LEFT
-0xA6AA 0x2534 # BOX DRAWINGS LIGHT UP AND HORIZONTAL
-0xA6AB 0x253C # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
-0xA6AC 0x2501 # BOX DRAWINGS HEAVY HORIZONTAL
-0xA6AD 0x2503 # BOX DRAWINGS HEAVY VERTICAL
-0xA6AE 0x250F # BOX DRAWINGS HEAVY DOWN AND RIGHT
-0xA6AF 0x2513 # BOX DRAWINGS HEAVY DOWN AND LEFT
-0xA6B0 0x251B # BOX DRAWINGS HEAVY UP AND LEFT
-0xA6B1 0x2517 # BOX DRAWINGS HEAVY UP AND RIGHT
-0xA6B2 0x2523 # BOX DRAWINGS HEAVY VERTICAL AND RIGHT
-0xA6B3 0x2533 # BOX DRAWINGS HEAVY DOWN AND HORIZONTAL
-0xA6B4 0x252B # BOX DRAWINGS HEAVY VERTICAL AND LEFT
-0xA6B5 0x253B # BOX DRAWINGS HEAVY UP AND HORIZONTAL
-0xA6B6 0x254B # BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL
-0xA6B7 0x2520 # BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT
-0xA6B8 0x252F # BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY
-0xA6B9 0x2528 # BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT
-0xA6BA 0x2537 # BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY
-0xA6BB 0x253F # BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY
-0xA6BC 0x251D # BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY
-0xA6BD 0x2530 # BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT
-0xA6BE 0x2525 # BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY
-0xA6BF 0x2538 # BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT
-0xA6C0 0x2542 # BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT
-0xA6C1 0x2512 # BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT
-0xA6C2 0x2511 # BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY
-0xA6C3 0x251A # BOX DRAWINGS UP HEAVY AND LEFT LIGHT
-0xA6C4 0x2519 # BOX DRAWINGS UP LIGHT AND LEFT HEAVY
-0xA6C5 0x2516 # BOX DRAWINGS UP HEAVY AND RIGHT LIGHT
-0xA6C6 0x2515 # BOX DRAWINGS UP LIGHT AND RIGHT HEAVY
-0xA6C7 0x250E # BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT
-0xA6C8 0x250D # BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY
-0xA6C9 0x251E # BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT
-0xA6CA 0x251F # BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT
-0xA6CB 0x2521 # BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY
-0xA6CC 0x2522 # BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY
-0xA6CD 0x2526 # BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT
-0xA6CE 0x2527 # BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT
-0xA6CF 0x2529 # BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY
-0xA6D0 0x252A # BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY
-0xA6D1 0x252D # BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT
-0xA6D2 0x252E # BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT
-0xA6D3 0x2531 # BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY
-0xA6D4 0x2532 # BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY
-0xA6D5 0x2535 # BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT
-0xA6D6 0x2536 # BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT
-0xA6D7 0x2539 # BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY
-0xA6D8 0x253A # BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY
-0xA6D9 0x253D # BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT
-0xA6DA 0x253E # BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT
-0xA6DB 0x2540 # BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT
-0xA6DC 0x2541 # BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT
-0xA6DD 0x2543 # BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT
-0xA6DE 0x2544 # BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT
-0xA6DF 0x2545 # BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT
-0xA6E0 0x2546 # BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT
-0xA6E1 0x2547 # BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY
-0xA6E2 0x2548 # BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY
-0xA6E3 0x2549 # BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY
-0xA6E4 0x254A # BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY
-0xA741 0xCB0B # HANGUL SYLLABLE SSANGCIEUC-WAE-CHIEUCH
-0xA742 0xCB0C # HANGUL SYLLABLE SSANGCIEUC-WAE-KHIEUKH
-0xA743 0xCB0D # HANGUL SYLLABLE SSANGCIEUC-WAE-THIEUTH
-0xA744 0xCB0E # HANGUL SYLLABLE SSANGCIEUC-WAE-PHIEUPH
-0xA745 0xCB0F # HANGUL SYLLABLE SSANGCIEUC-WAE-HIEUH
-0xA746 0xCB11 # HANGUL SYLLABLE SSANGCIEUC-OE-KIYEOK
-0xA747 0xCB12 # HANGUL SYLLABLE SSANGCIEUC-OE-SSANGKIYEOK
-0xA748 0xCB13 # HANGUL SYLLABLE SSANGCIEUC-OE-KIYEOKSIOS
-0xA749 0xCB15 # HANGUL SYLLABLE SSANGCIEUC-OE-NIEUNCIEUC
-0xA74A 0xCB16 # HANGUL SYLLABLE SSANGCIEUC-OE-NIEUNHIEUH
-0xA74B 0xCB17 # HANGUL SYLLABLE SSANGCIEUC-OE-TIKEUT
-0xA74C 0xCB19 # HANGUL SYLLABLE SSANGCIEUC-OE-RIEULKIYEOK
-0xA74D 0xCB1A # HANGUL SYLLABLE SSANGCIEUC-OE-RIEULMIEUM
-0xA74E 0xCB1B # HANGUL SYLLABLE SSANGCIEUC-OE-RIEULPIEUP
-0xA74F 0xCB1C # HANGUL SYLLABLE SSANGCIEUC-OE-RIEULSIOS
-0xA750 0xCB1D # HANGUL SYLLABLE SSANGCIEUC-OE-RIEULTHIEUTH
-0xA751 0xCB1E # HANGUL SYLLABLE SSANGCIEUC-OE-RIEULPHIEUPH
-0xA752 0xCB1F # HANGUL SYLLABLE SSANGCIEUC-OE-RIEULHIEUH
-0xA753 0xCB22 # HANGUL SYLLABLE SSANGCIEUC-OE-PIEUPSIOS
-0xA754 0xCB23 # HANGUL SYLLABLE SSANGCIEUC-OE-SIOS
-0xA755 0xCB24 # HANGUL SYLLABLE SSANGCIEUC-OE-SSANGSIOS
-0xA756 0xCB25 # HANGUL SYLLABLE SSANGCIEUC-OE-IEUNG
-0xA757 0xCB26 # HANGUL SYLLABLE SSANGCIEUC-OE-CIEUC
-0xA758 0xCB27 # HANGUL SYLLABLE SSANGCIEUC-OE-CHIEUCH
-0xA759 0xCB28 # HANGUL SYLLABLE SSANGCIEUC-OE-KHIEUKH
-0xA75A 0xCB29 # HANGUL SYLLABLE SSANGCIEUC-OE-THIEUTH
-0xA761 0xCB2A # HANGUL SYLLABLE SSANGCIEUC-OE-PHIEUPH
-0xA762 0xCB2B # HANGUL SYLLABLE SSANGCIEUC-OE-HIEUH
-0xA763 0xCB2C # HANGUL SYLLABLE SSANGCIEUC-YO
-0xA764 0xCB2D # HANGUL SYLLABLE SSANGCIEUC-YO-KIYEOK
-0xA765 0xCB2E # HANGUL SYLLABLE SSANGCIEUC-YO-SSANGKIYEOK
-0xA766 0xCB2F # HANGUL SYLLABLE SSANGCIEUC-YO-KIYEOKSIOS
-0xA767 0xCB30 # HANGUL SYLLABLE SSANGCIEUC-YO-NIEUN
-0xA768 0xCB31 # HANGUL SYLLABLE SSANGCIEUC-YO-NIEUNCIEUC
-0xA769 0xCB32 # HANGUL SYLLABLE SSANGCIEUC-YO-NIEUNHIEUH
-0xA76A 0xCB33 # HANGUL SYLLABLE SSANGCIEUC-YO-TIKEUT
-0xA76B 0xCB34 # HANGUL SYLLABLE SSANGCIEUC-YO-RIEUL
-0xA76C 0xCB35 # HANGUL SYLLABLE SSANGCIEUC-YO-RIEULKIYEOK
-0xA76D 0xCB36 # HANGUL SYLLABLE SSANGCIEUC-YO-RIEULMIEUM
-0xA76E 0xCB37 # HANGUL SYLLABLE SSANGCIEUC-YO-RIEULPIEUP
-0xA76F 0xCB38 # HANGUL SYLLABLE SSANGCIEUC-YO-RIEULSIOS
-0xA770 0xCB39 # HANGUL SYLLABLE SSANGCIEUC-YO-RIEULTHIEUTH
-0xA771 0xCB3A # HANGUL SYLLABLE SSANGCIEUC-YO-RIEULPHIEUPH
-0xA772 0xCB3B # HANGUL SYLLABLE SSANGCIEUC-YO-RIEULHIEUH
-0xA773 0xCB3C # HANGUL SYLLABLE SSANGCIEUC-YO-MIEUM
-0xA774 0xCB3D # HANGUL SYLLABLE SSANGCIEUC-YO-PIEUP
-0xA775 0xCB3E # HANGUL SYLLABLE SSANGCIEUC-YO-PIEUPSIOS
-0xA776 0xCB3F # HANGUL SYLLABLE SSANGCIEUC-YO-SIOS
-0xA777 0xCB40 # HANGUL SYLLABLE SSANGCIEUC-YO-SSANGSIOS
-0xA778 0xCB42 # HANGUL SYLLABLE SSANGCIEUC-YO-CIEUC
-0xA779 0xCB43 # HANGUL SYLLABLE SSANGCIEUC-YO-CHIEUCH
-0xA77A 0xCB44 # HANGUL SYLLABLE SSANGCIEUC-YO-KHIEUKH
-0xA781 0xCB45 # HANGUL SYLLABLE SSANGCIEUC-YO-THIEUTH
-0xA782 0xCB46 # HANGUL SYLLABLE SSANGCIEUC-YO-PHIEUPH
-0xA783 0xCB47 # HANGUL SYLLABLE SSANGCIEUC-YO-HIEUH
-0xA784 0xCB4A # HANGUL SYLLABLE SSANGCIEUC-U-SSANGKIYEOK
-0xA785 0xCB4B # HANGUL SYLLABLE SSANGCIEUC-U-KIYEOKSIOS
-0xA786 0xCB4D # HANGUL SYLLABLE SSANGCIEUC-U-NIEUNCIEUC
-0xA787 0xCB4E # HANGUL SYLLABLE SSANGCIEUC-U-NIEUNHIEUH
-0xA788 0xCB4F # HANGUL SYLLABLE SSANGCIEUC-U-TIKEUT
-0xA789 0xCB51 # HANGUL SYLLABLE SSANGCIEUC-U-RIEULKIYEOK
-0xA78A 0xCB52 # HANGUL SYLLABLE SSANGCIEUC-U-RIEULMIEUM
-0xA78B 0xCB53 # HANGUL SYLLABLE SSANGCIEUC-U-RIEULPIEUP
-0xA78C 0xCB54 # HANGUL SYLLABLE SSANGCIEUC-U-RIEULSIOS
-0xA78D 0xCB55 # HANGUL SYLLABLE SSANGCIEUC-U-RIEULTHIEUTH
-0xA78E 0xCB56 # HANGUL SYLLABLE SSANGCIEUC-U-RIEULPHIEUPH
-0xA78F 0xCB57 # HANGUL SYLLABLE SSANGCIEUC-U-RIEULHIEUH
-0xA790 0xCB5A # HANGUL SYLLABLE SSANGCIEUC-U-PIEUPSIOS
-0xA791 0xCB5B # HANGUL SYLLABLE SSANGCIEUC-U-SIOS
-0xA792 0xCB5C # HANGUL SYLLABLE SSANGCIEUC-U-SSANGSIOS
-0xA793 0xCB5E # HANGUL SYLLABLE SSANGCIEUC-U-CIEUC
-0xA794 0xCB5F # HANGUL SYLLABLE SSANGCIEUC-U-CHIEUCH
-0xA795 0xCB60 # HANGUL SYLLABLE SSANGCIEUC-U-KHIEUKH
-0xA796 0xCB61 # HANGUL SYLLABLE SSANGCIEUC-U-THIEUTH
-0xA797 0xCB62 # HANGUL SYLLABLE SSANGCIEUC-U-PHIEUPH
-0xA798 0xCB63 # HANGUL SYLLABLE SSANGCIEUC-U-HIEUH
-0xA799 0xCB65 # HANGUL SYLLABLE SSANGCIEUC-WEO-KIYEOK
-0xA79A 0xCB66 # HANGUL SYLLABLE SSANGCIEUC-WEO-SSANGKIYEOK
-0xA79B 0xCB67 # HANGUL SYLLABLE SSANGCIEUC-WEO-KIYEOKSIOS
-0xA79C 0xCB68 # HANGUL SYLLABLE SSANGCIEUC-WEO-NIEUN
-0xA79D 0xCB69 # HANGUL SYLLABLE SSANGCIEUC-WEO-NIEUNCIEUC
-0xA79E 0xCB6A # HANGUL SYLLABLE SSANGCIEUC-WEO-NIEUNHIEUH
-0xA79F 0xCB6B # HANGUL SYLLABLE SSANGCIEUC-WEO-TIKEUT
-0xA7A0 0xCB6C # HANGUL SYLLABLE SSANGCIEUC-WEO-RIEUL
-0xA7A1 0x3395 # SQUARE MU L
-0xA7A2 0x3396 # SQUARE ML
-0xA7A3 0x3397 # SQUARE DL
-0xA7A4 0x2113 # SCRIPT SMALL L
-0xA7A5 0x3398 # SQUARE KL
-0xA7A6 0x33C4 # SQUARE CC
-0xA7A7 0x33A3 # SQUARE MM CUBED
-0xA7A8 0x33A4 # SQUARE CM CUBED
-0xA7A9 0x33A5 # SQUARE M CUBED
-0xA7AA 0x33A6 # SQUARE KM CUBED
-0xA7AB 0x3399 # SQUARE FM
-0xA7AC 0x339A # SQUARE NM
-0xA7AD 0x339B # SQUARE MU M
-0xA7AE 0x339C # SQUARE MM
-0xA7AF 0x339D # SQUARE CM
-0xA7B0 0x339E # SQUARE KM
-0xA7B1 0x339F # SQUARE MM SQUARED
-0xA7B2 0x33A0 # SQUARE CM SQUARED
-0xA7B3 0x33A1 # SQUARE M SQUARED
-0xA7B4 0x33A2 # SQUARE KM SQUARED
-0xA7B5 0x33CA # SQUARE HA
-0xA7B6 0x338D # SQUARE MU G
-0xA7B7 0x338E # SQUARE MG
-0xA7B8 0x338F # SQUARE KG
-0xA7B9 0x33CF # SQUARE KT
-0xA7BA 0x3388 # SQUARE CAL
-0xA7BB 0x3389 # SQUARE KCAL
-0xA7BC 0x33C8 # SQUARE DB
-0xA7BD 0x33A7 # SQUARE M OVER S
-0xA7BE 0x33A8 # SQUARE M OVER S SQUARED
-0xA7BF 0x33B0 # SQUARE PS
-0xA7C0 0x33B1 # SQUARE NS
-0xA7C1 0x33B2 # SQUARE MU S
-0xA7C2 0x33B3 # SQUARE MS
-0xA7C3 0x33B4 # SQUARE PV
-0xA7C4 0x33B5 # SQUARE NV
-0xA7C5 0x33B6 # SQUARE MU V
-0xA7C6 0x33B7 # SQUARE MV
-0xA7C7 0x33B8 # SQUARE KV
-0xA7C8 0x33B9 # SQUARE MV MEGA
-0xA7C9 0x3380 # SQUARE PA AMPS
-0xA7CA 0x3381 # SQUARE NA
-0xA7CB 0x3382 # SQUARE MU A
-0xA7CC 0x3383 # SQUARE MA
-0xA7CD 0x3384 # SQUARE KA
-0xA7CE 0x33BA # SQUARE PW
-0xA7CF 0x33BB # SQUARE NW
-0xA7D0 0x33BC # SQUARE MU W
-0xA7D1 0x33BD # SQUARE MW
-0xA7D2 0x33BE # SQUARE KW
-0xA7D3 0x33BF # SQUARE MW MEGA
-0xA7D4 0x3390 # SQUARE HZ
-0xA7D5 0x3391 # SQUARE KHZ
-0xA7D6 0x3392 # SQUARE MHZ
-0xA7D7 0x3393 # SQUARE GHZ
-0xA7D8 0x3394 # SQUARE THZ
-0xA7D9 0x2126 # OHM SIGN
-0xA7DA 0x33C0 # SQUARE K OHM
-0xA7DB 0x33C1 # SQUARE M OHM
-0xA7DC 0x338A # SQUARE PF
-0xA7DD 0x338B # SQUARE NF
-0xA7DE 0x338C # SQUARE MU F
-0xA7DF 0x33D6 # SQUARE MOL
-0xA7E0 0x33C5 # SQUARE CD
-0xA7E1 0x33AD # SQUARE RAD
-0xA7E2 0x33AE # SQUARE RAD OVER S
-0xA7E3 0x33AF # SQUARE RAD OVER S SQUARED
-0xA7E4 0x33DB # SQUARE SR
-0xA7E5 0x33A9 # SQUARE PA
-0xA7E6 0x33AA # SQUARE KPA
-0xA7E7 0x33AB # SQUARE MPA
-0xA7E8 0x33AC # SQUARE GPA
-0xA7E9 0x33DD # SQUARE WB
-0xA7EA 0x33D0 # SQUARE LM
-0xA7EB 0x33D3 # SQUARE LX
-0xA7EC 0x33C3 # SQUARE BQ
-0xA7ED 0x33C9 # SQUARE GY
-0xA7EE 0x33DC # SQUARE SV
-0xA7EF 0x33C6 # SQUARE C OVER KG
-0xA841 0xCB6D # HANGUL SYLLABLE SSANGCIEUC-WEO-RIEULKIYEOK
-0xA842 0xCB6E # HANGUL SYLLABLE SSANGCIEUC-WEO-RIEULMIEUM
-0xA843 0xCB6F # HANGUL SYLLABLE SSANGCIEUC-WEO-RIEULPIEUP
-0xA844 0xCB70 # HANGUL SYLLABLE SSANGCIEUC-WEO-RIEULSIOS
-0xA845 0xCB71 # HANGUL SYLLABLE SSANGCIEUC-WEO-RIEULTHIEUTH
-0xA846 0xCB72 # HANGUL SYLLABLE SSANGCIEUC-WEO-RIEULPHIEUPH
-0xA847 0xCB73 # HANGUL SYLLABLE SSANGCIEUC-WEO-RIEULHIEUH
-0xA848 0xCB74 # HANGUL SYLLABLE SSANGCIEUC-WEO-MIEUM
-0xA849 0xCB75 # HANGUL SYLLABLE SSANGCIEUC-WEO-PIEUP
-0xA84A 0xCB76 # HANGUL SYLLABLE SSANGCIEUC-WEO-PIEUPSIOS
-0xA84B 0xCB77 # HANGUL SYLLABLE SSANGCIEUC-WEO-SIOS
-0xA84C 0xCB7A # HANGUL SYLLABLE SSANGCIEUC-WEO-CIEUC
-0xA84D 0xCB7B # HANGUL SYLLABLE SSANGCIEUC-WEO-CHIEUCH
-0xA84E 0xCB7C # HANGUL SYLLABLE SSANGCIEUC-WEO-KHIEUKH
-0xA84F 0xCB7D # HANGUL SYLLABLE SSANGCIEUC-WEO-THIEUTH
-0xA850 0xCB7E # HANGUL SYLLABLE SSANGCIEUC-WEO-PHIEUPH
-0xA851 0xCB7F # HANGUL SYLLABLE SSANGCIEUC-WEO-HIEUH
-0xA852 0xCB80 # HANGUL SYLLABLE SSANGCIEUC-WE
-0xA853 0xCB81 # HANGUL SYLLABLE SSANGCIEUC-WE-KIYEOK
-0xA854 0xCB82 # HANGUL SYLLABLE SSANGCIEUC-WE-SSANGKIYEOK
-0xA855 0xCB83 # HANGUL SYLLABLE SSANGCIEUC-WE-KIYEOKSIOS
-0xA856 0xCB84 # HANGUL SYLLABLE SSANGCIEUC-WE-NIEUN
-0xA857 0xCB85 # HANGUL SYLLABLE SSANGCIEUC-WE-NIEUNCIEUC
-0xA858 0xCB86 # HANGUL SYLLABLE SSANGCIEUC-WE-NIEUNHIEUH
-0xA859 0xCB87 # HANGUL SYLLABLE SSANGCIEUC-WE-TIKEUT
-0xA85A 0xCB88 # HANGUL SYLLABLE SSANGCIEUC-WE-RIEUL
-0xA861 0xCB89 # HANGUL SYLLABLE SSANGCIEUC-WE-RIEULKIYEOK
-0xA862 0xCB8A # HANGUL SYLLABLE SSANGCIEUC-WE-RIEULMIEUM
-0xA863 0xCB8B # HANGUL SYLLABLE SSANGCIEUC-WE-RIEULPIEUP
-0xA864 0xCB8C # HANGUL SYLLABLE SSANGCIEUC-WE-RIEULSIOS
-0xA865 0xCB8D # HANGUL SYLLABLE SSANGCIEUC-WE-RIEULTHIEUTH
-0xA866 0xCB8E # HANGUL SYLLABLE SSANGCIEUC-WE-RIEULPHIEUPH
-0xA867 0xCB8F # HANGUL SYLLABLE SSANGCIEUC-WE-RIEULHIEUH
-0xA868 0xCB90 # HANGUL SYLLABLE SSANGCIEUC-WE-MIEUM
-0xA869 0xCB91 # HANGUL SYLLABLE SSANGCIEUC-WE-PIEUP
-0xA86A 0xCB92 # HANGUL SYLLABLE SSANGCIEUC-WE-PIEUPSIOS
-0xA86B 0xCB93 # HANGUL SYLLABLE SSANGCIEUC-WE-SIOS
-0xA86C 0xCB94 # HANGUL SYLLABLE SSANGCIEUC-WE-SSANGSIOS
-0xA86D 0xCB95 # HANGUL SYLLABLE SSANGCIEUC-WE-IEUNG
-0xA86E 0xCB96 # HANGUL SYLLABLE SSANGCIEUC-WE-CIEUC
-0xA86F 0xCB97 # HANGUL SYLLABLE SSANGCIEUC-WE-CHIEUCH
-0xA870 0xCB98 # HANGUL SYLLABLE SSANGCIEUC-WE-KHIEUKH
-0xA871 0xCB99 # HANGUL SYLLABLE SSANGCIEUC-WE-THIEUTH
-0xA872 0xCB9A # HANGUL SYLLABLE SSANGCIEUC-WE-PHIEUPH
-0xA873 0xCB9B # HANGUL SYLLABLE SSANGCIEUC-WE-HIEUH
-0xA874 0xCB9D # HANGUL SYLLABLE SSANGCIEUC-WI-KIYEOK
-0xA875 0xCB9E # HANGUL SYLLABLE SSANGCIEUC-WI-SSANGKIYEOK
-0xA876 0xCB9F # HANGUL SYLLABLE SSANGCIEUC-WI-KIYEOKSIOS
-0xA877 0xCBA0 # HANGUL SYLLABLE SSANGCIEUC-WI-NIEUN
-0xA878 0xCBA1 # HANGUL SYLLABLE SSANGCIEUC-WI-NIEUNCIEUC
-0xA879 0xCBA2 # HANGUL SYLLABLE SSANGCIEUC-WI-NIEUNHIEUH
-0xA87A 0xCBA3 # HANGUL SYLLABLE SSANGCIEUC-WI-TIKEUT
-0xA881 0xCBA4 # HANGUL SYLLABLE SSANGCIEUC-WI-RIEUL
-0xA882 0xCBA5 # HANGUL SYLLABLE SSANGCIEUC-WI-RIEULKIYEOK
-0xA883 0xCBA6 # HANGUL SYLLABLE SSANGCIEUC-WI-RIEULMIEUM
-0xA884 0xCBA7 # HANGUL SYLLABLE SSANGCIEUC-WI-RIEULPIEUP
-0xA885 0xCBA8 # HANGUL SYLLABLE SSANGCIEUC-WI-RIEULSIOS
-0xA886 0xCBA9 # HANGUL SYLLABLE SSANGCIEUC-WI-RIEULTHIEUTH
-0xA887 0xCBAA # HANGUL SYLLABLE SSANGCIEUC-WI-RIEULPHIEUPH
-0xA888 0xCBAB # HANGUL SYLLABLE SSANGCIEUC-WI-RIEULHIEUH
-0xA889 0xCBAC # HANGUL SYLLABLE SSANGCIEUC-WI-MIEUM
-0xA88A 0xCBAD # HANGUL SYLLABLE SSANGCIEUC-WI-PIEUP
-0xA88B 0xCBAE # HANGUL SYLLABLE SSANGCIEUC-WI-PIEUPSIOS
-0xA88C 0xCBAF # HANGUL SYLLABLE SSANGCIEUC-WI-SIOS
-0xA88D 0xCBB0 # HANGUL SYLLABLE SSANGCIEUC-WI-SSANGSIOS
-0xA88E 0xCBB1 # HANGUL SYLLABLE SSANGCIEUC-WI-IEUNG
-0xA88F 0xCBB2 # HANGUL SYLLABLE SSANGCIEUC-WI-CIEUC
-0xA890 0xCBB3 # HANGUL SYLLABLE SSANGCIEUC-WI-CHIEUCH
-0xA891 0xCBB4 # HANGUL SYLLABLE SSANGCIEUC-WI-KHIEUKH
-0xA892 0xCBB5 # HANGUL SYLLABLE SSANGCIEUC-WI-THIEUTH
-0xA893 0xCBB6 # HANGUL SYLLABLE SSANGCIEUC-WI-PHIEUPH
-0xA894 0xCBB7 # HANGUL SYLLABLE SSANGCIEUC-WI-HIEUH
-0xA895 0xCBB9 # HANGUL SYLLABLE SSANGCIEUC-YU-KIYEOK
-0xA896 0xCBBA # HANGUL SYLLABLE SSANGCIEUC-YU-SSANGKIYEOK
-0xA897 0xCBBB # HANGUL SYLLABLE SSANGCIEUC-YU-KIYEOKSIOS
-0xA898 0xCBBC # HANGUL SYLLABLE SSANGCIEUC-YU-NIEUN
-0xA899 0xCBBD # HANGUL SYLLABLE SSANGCIEUC-YU-NIEUNCIEUC
-0xA89A 0xCBBE # HANGUL SYLLABLE SSANGCIEUC-YU-NIEUNHIEUH
-0xA89B 0xCBBF # HANGUL SYLLABLE SSANGCIEUC-YU-TIKEUT
-0xA89C 0xCBC0 # HANGUL SYLLABLE SSANGCIEUC-YU-RIEUL
-0xA89D 0xCBC1 # HANGUL SYLLABLE SSANGCIEUC-YU-RIEULKIYEOK
-0xA89E 0xCBC2 # HANGUL SYLLABLE SSANGCIEUC-YU-RIEULMIEUM
-0xA89F 0xCBC3 # HANGUL SYLLABLE SSANGCIEUC-YU-RIEULPIEUP
-0xA8A0 0xCBC4 # HANGUL SYLLABLE SSANGCIEUC-YU-RIEULSIOS
-0xA8A1 0x00C6 # LATIN CAPITAL LIGATURE AE
-0xA8A2 0x00D0 # LATIN CAPITAL LETTER ETH
-0xA8A3 0x00AA # FEMININE ORDINAL INDICATOR
-0xA8A4 0x0126 # LATIN CAPITAL LETTER H WITH STROKE
-0xA8A6 0x0132 # LATIN CAPITAL LIGATURE IJ
-0xA8A8 0x013F # LATIN CAPITAL LETTER L WITH MIDDLE DOT
-0xA8A9 0x0141 # LATIN CAPITAL LETTER L WITH STROKE
-0xA8AA 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE
-0xA8AB 0x0152 # LATIN CAPITAL LIGATURE OE
-0xA8AC 0x00BA # MASCULINE ORDINAL INDICATOR
-0xA8AD 0x00DE # LATIN CAPITAL LETTER THORN
-0xA8AE 0x0166 # LATIN CAPITAL LETTER T WITH STROKE
-0xA8AF 0x014A # LATIN CAPITAL LETTER ENG
-0xA8B1 0x3260 # CIRCLED HANGUL KIYEOK
-0xA8B2 0x3261 # CIRCLED HANGUL NIEUN
-0xA8B3 0x3262 # CIRCLED HANGUL TIKEUT
-0xA8B4 0x3263 # CIRCLED HANGUL RIEUL
-0xA8B5 0x3264 # CIRCLED HANGUL MIEUM
-0xA8B6 0x3265 # CIRCLED HANGUL PIEUP
-0xA8B7 0x3266 # CIRCLED HANGUL SIOS
-0xA8B8 0x3267 # CIRCLED HANGUL IEUNG
-0xA8B9 0x3268 # CIRCLED HANGUL CIEUC
-0xA8BA 0x3269 # CIRCLED HANGUL CHIEUCH
-0xA8BB 0x326A # CIRCLED HANGUL KHIEUKH
-0xA8BC 0x326B # CIRCLED HANGUL THIEUTH
-0xA8BD 0x326C # CIRCLED HANGUL PHIEUPH
-0xA8BE 0x326D # CIRCLED HANGUL HIEUH
-0xA8BF 0x326E # CIRCLED HANGUL KIYEOK A
-0xA8C0 0x326F # CIRCLED HANGUL NIEUN A
-0xA8C1 0x3270 # CIRCLED HANGUL TIKEUT A
-0xA8C2 0x3271 # CIRCLED HANGUL RIEUL A
-0xA8C3 0x3272 # CIRCLED HANGUL MIEUM A
-0xA8C4 0x3273 # CIRCLED HANGUL PIEUP A
-0xA8C5 0x3274 # CIRCLED HANGUL SIOS A
-0xA8C6 0x3275 # CIRCLED HANGUL IEUNG A
-0xA8C7 0x3276 # CIRCLED HANGUL CIEUC A
-0xA8C8 0x3277 # CIRCLED HANGUL CHIEUCH A
-0xA8C9 0x3278 # CIRCLED HANGUL KHIEUKH A
-0xA8CA 0x3279 # CIRCLED HANGUL THIEUTH A
-0xA8CB 0x327A # CIRCLED HANGUL PHIEUPH A
-0xA8CC 0x327B # CIRCLED HANGUL HIEUH A
-0xA8CD 0x24D0 # CIRCLED LATIN SMALL LETTER A
-0xA8CE 0x24D1 # CIRCLED LATIN SMALL LETTER B
-0xA8CF 0x24D2 # CIRCLED LATIN SMALL LETTER C
-0xA8D0 0x24D3 # CIRCLED LATIN SMALL LETTER D
-0xA8D1 0x24D4 # CIRCLED LATIN SMALL LETTER E
-0xA8D2 0x24D5 # CIRCLED LATIN SMALL LETTER F
-0xA8D3 0x24D6 # CIRCLED LATIN SMALL LETTER G
-0xA8D4 0x24D7 # CIRCLED LATIN SMALL LETTER H
-0xA8D5 0x24D8 # CIRCLED LATIN SMALL LETTER I
-0xA8D6 0x24D9 # CIRCLED LATIN SMALL LETTER J
-0xA8D7 0x24DA # CIRCLED LATIN SMALL LETTER K
-0xA8D8 0x24DB # CIRCLED LATIN SMALL LETTER L
-0xA8D9 0x24DC # CIRCLED LATIN SMALL LETTER M
-0xA8DA 0x24DD # CIRCLED LATIN SMALL LETTER N
-0xA8DB 0x24DE # CIRCLED LATIN SMALL LETTER O
-0xA8DC 0x24DF # CIRCLED LATIN SMALL LETTER P
-0xA8DD 0x24E0 # CIRCLED LATIN SMALL LETTER Q
-0xA8DE 0x24E1 # CIRCLED LATIN SMALL LETTER R
-0xA8DF 0x24E2 # CIRCLED LATIN SMALL LETTER S
-0xA8E0 0x24E3 # CIRCLED LATIN SMALL LETTER T
-0xA8E1 0x24E4 # CIRCLED LATIN SMALL LETTER U
-0xA8E2 0x24E5 # CIRCLED LATIN SMALL LETTER V
-0xA8E3 0x24E6 # CIRCLED LATIN SMALL LETTER W
-0xA8E4 0x24E7 # CIRCLED LATIN SMALL LETTER X
-0xA8E5 0x24E8 # CIRCLED LATIN SMALL LETTER Y
-0xA8E6 0x24E9 # CIRCLED LATIN SMALL LETTER Z
-0xA8E7 0x2460 # CIRCLED DIGIT ONE
-0xA8E8 0x2461 # CIRCLED DIGIT TWO
-0xA8E9 0x2462 # CIRCLED DIGIT THREE
-0xA8EA 0x2463 # CIRCLED DIGIT FOUR
-0xA8EB 0x2464 # CIRCLED DIGIT FIVE
-0xA8EC 0x2465 # CIRCLED DIGIT SIX
-0xA8ED 0x2466 # CIRCLED DIGIT SEVEN
-0xA8EE 0x2467 # CIRCLED DIGIT EIGHT
-0xA8EF 0x2468 # CIRCLED DIGIT NINE
-0xA8F0 0x2469 # CIRCLED NUMBER TEN
-0xA8F1 0x246A # CIRCLED NUMBER ELEVEN
-0xA8F2 0x246B # CIRCLED NUMBER TWELVE
-0xA8F3 0x246C # CIRCLED NUMBER THIRTEEN
-0xA8F4 0x246D # CIRCLED NUMBER FOURTEEN
-0xA8F5 0x246E # CIRCLED NUMBER FIFTEEN
-0xA8F6 0x00BD # VULGAR FRACTION ONE HALF
-0xA8F7 0x2153 # VULGAR FRACTION ONE THIRD
-0xA8F8 0x2154 # VULGAR FRACTION TWO THIRDS
-0xA8F9 0x00BC # VULGAR FRACTION ONE QUARTER
-0xA8FA 0x00BE # VULGAR FRACTION THREE QUARTERS
-0xA8FB 0x215B # VULGAR FRACTION ONE EIGHTH
-0xA8FC 0x215C # VULGAR FRACTION THREE EIGHTHS
-0xA8FD 0x215D # VULGAR FRACTION FIVE EIGHTHS
-0xA8FE 0x215E # VULGAR FRACTION SEVEN EIGHTHS
-0xA941 0xCBC5 # HANGUL SYLLABLE SSANGCIEUC-YU-RIEULTHIEUTH
-0xA942 0xCBC6 # HANGUL SYLLABLE SSANGCIEUC-YU-RIEULPHIEUPH
-0xA943 0xCBC7 # HANGUL SYLLABLE SSANGCIEUC-YU-RIEULHIEUH
-0xA944 0xCBC8 # HANGUL SYLLABLE SSANGCIEUC-YU-MIEUM
-0xA945 0xCBC9 # HANGUL SYLLABLE SSANGCIEUC-YU-PIEUP
-0xA946 0xCBCA # HANGUL SYLLABLE SSANGCIEUC-YU-PIEUPSIOS
-0xA947 0xCBCB # HANGUL SYLLABLE SSANGCIEUC-YU-SIOS
-0xA948 0xCBCC # HANGUL SYLLABLE SSANGCIEUC-YU-SSANGSIOS
-0xA949 0xCBCD # HANGUL SYLLABLE SSANGCIEUC-YU-IEUNG
-0xA94A 0xCBCE # HANGUL SYLLABLE SSANGCIEUC-YU-CIEUC
-0xA94B 0xCBCF # HANGUL SYLLABLE SSANGCIEUC-YU-CHIEUCH
-0xA94C 0xCBD0 # HANGUL SYLLABLE SSANGCIEUC-YU-KHIEUKH
-0xA94D 0xCBD1 # HANGUL SYLLABLE SSANGCIEUC-YU-THIEUTH
-0xA94E 0xCBD2 # HANGUL SYLLABLE SSANGCIEUC-YU-PHIEUPH
-0xA94F 0xCBD3 # HANGUL SYLLABLE SSANGCIEUC-YU-HIEUH
-0xA950 0xCBD5 # HANGUL SYLLABLE SSANGCIEUC-EU-KIYEOK
-0xA951 0xCBD6 # HANGUL SYLLABLE SSANGCIEUC-EU-SSANGKIYEOK
-0xA952 0xCBD7 # HANGUL SYLLABLE SSANGCIEUC-EU-KIYEOKSIOS
-0xA953 0xCBD8 # HANGUL SYLLABLE SSANGCIEUC-EU-NIEUN
-0xA954 0xCBD9 # HANGUL SYLLABLE SSANGCIEUC-EU-NIEUNCIEUC
-0xA955 0xCBDA # HANGUL SYLLABLE SSANGCIEUC-EU-NIEUNHIEUH
-0xA956 0xCBDB # HANGUL SYLLABLE SSANGCIEUC-EU-TIKEUT
-0xA957 0xCBDC # HANGUL SYLLABLE SSANGCIEUC-EU-RIEUL
-0xA958 0xCBDD # HANGUL SYLLABLE SSANGCIEUC-EU-RIEULKIYEOK
-0xA959 0xCBDE # HANGUL SYLLABLE SSANGCIEUC-EU-RIEULMIEUM
-0xA95A 0xCBDF # HANGUL SYLLABLE SSANGCIEUC-EU-RIEULPIEUP
-0xA961 0xCBE0 # HANGUL SYLLABLE SSANGCIEUC-EU-RIEULSIOS
-0xA962 0xCBE1 # HANGUL SYLLABLE SSANGCIEUC-EU-RIEULTHIEUTH
-0xA963 0xCBE2 # HANGUL SYLLABLE SSANGCIEUC-EU-RIEULPHIEUPH
-0xA964 0xCBE3 # HANGUL SYLLABLE SSANGCIEUC-EU-RIEULHIEUH
-0xA965 0xCBE5 # HANGUL SYLLABLE SSANGCIEUC-EU-PIEUP
-0xA966 0xCBE6 # HANGUL SYLLABLE SSANGCIEUC-EU-PIEUPSIOS
-0xA967 0xCBE8 # HANGUL SYLLABLE SSANGCIEUC-EU-SSANGSIOS
-0xA968 0xCBEA # HANGUL SYLLABLE SSANGCIEUC-EU-CIEUC
-0xA969 0xCBEB # HANGUL SYLLABLE SSANGCIEUC-EU-CHIEUCH
-0xA96A 0xCBEC # HANGUL SYLLABLE SSANGCIEUC-EU-KHIEUKH
-0xA96B 0xCBED # HANGUL SYLLABLE SSANGCIEUC-EU-THIEUTH
-0xA96C 0xCBEE # HANGUL SYLLABLE SSANGCIEUC-EU-PHIEUPH
-0xA96D 0xCBEF # HANGUL SYLLABLE SSANGCIEUC-EU-HIEUH
-0xA96E 0xCBF0 # HANGUL SYLLABLE SSANGCIEUC-YI
-0xA96F 0xCBF1 # HANGUL SYLLABLE SSANGCIEUC-YI-KIYEOK
-0xA970 0xCBF2 # HANGUL SYLLABLE SSANGCIEUC-YI-SSANGKIYEOK
-0xA971 0xCBF3 # HANGUL SYLLABLE SSANGCIEUC-YI-KIYEOKSIOS
-0xA972 0xCBF4 # HANGUL SYLLABLE SSANGCIEUC-YI-NIEUN
-0xA973 0xCBF5 # HANGUL SYLLABLE SSANGCIEUC-YI-NIEUNCIEUC
-0xA974 0xCBF6 # HANGUL SYLLABLE SSANGCIEUC-YI-NIEUNHIEUH
-0xA975 0xCBF7 # HANGUL SYLLABLE SSANGCIEUC-YI-TIKEUT
-0xA976 0xCBF8 # HANGUL SYLLABLE SSANGCIEUC-YI-RIEUL
-0xA977 0xCBF9 # HANGUL SYLLABLE SSANGCIEUC-YI-RIEULKIYEOK
-0xA978 0xCBFA # HANGUL SYLLABLE SSANGCIEUC-YI-RIEULMIEUM
-0xA979 0xCBFB # HANGUL SYLLABLE SSANGCIEUC-YI-RIEULPIEUP
-0xA97A 0xCBFC # HANGUL SYLLABLE SSANGCIEUC-YI-RIEULSIOS
-0xA981 0xCBFD # HANGUL SYLLABLE SSANGCIEUC-YI-RIEULTHIEUTH
-0xA982 0xCBFE # HANGUL SYLLABLE SSANGCIEUC-YI-RIEULPHIEUPH
-0xA983 0xCBFF # HANGUL SYLLABLE SSANGCIEUC-YI-RIEULHIEUH
-0xA984 0xCC00 # HANGUL SYLLABLE SSANGCIEUC-YI-MIEUM
-0xA985 0xCC01 # HANGUL SYLLABLE SSANGCIEUC-YI-PIEUP
-0xA986 0xCC02 # HANGUL SYLLABLE SSANGCIEUC-YI-PIEUPSIOS
-0xA987 0xCC03 # HANGUL SYLLABLE SSANGCIEUC-YI-SIOS
-0xA988 0xCC04 # HANGUL SYLLABLE SSANGCIEUC-YI-SSANGSIOS
-0xA989 0xCC05 # HANGUL SYLLABLE SSANGCIEUC-YI-IEUNG
-0xA98A 0xCC06 # HANGUL SYLLABLE SSANGCIEUC-YI-CIEUC
-0xA98B 0xCC07 # HANGUL SYLLABLE SSANGCIEUC-YI-CHIEUCH
-0xA98C 0xCC08 # HANGUL SYLLABLE SSANGCIEUC-YI-KHIEUKH
-0xA98D 0xCC09 # HANGUL SYLLABLE SSANGCIEUC-YI-THIEUTH
-0xA98E 0xCC0A # HANGUL SYLLABLE SSANGCIEUC-YI-PHIEUPH
-0xA98F 0xCC0B # HANGUL SYLLABLE SSANGCIEUC-YI-HIEUH
-0xA990 0xCC0E # HANGUL SYLLABLE SSANGCIEUC-I-SSANGKIYEOK
-0xA991 0xCC0F # HANGUL SYLLABLE SSANGCIEUC-I-KIYEOKSIOS
-0xA992 0xCC11 # HANGUL SYLLABLE SSANGCIEUC-I-NIEUNCIEUC
-0xA993 0xCC12 # HANGUL SYLLABLE SSANGCIEUC-I-NIEUNHIEUH
-0xA994 0xCC13 # HANGUL SYLLABLE SSANGCIEUC-I-TIKEUT
-0xA995 0xCC15 # HANGUL SYLLABLE SSANGCIEUC-I-RIEULKIYEOK
-0xA996 0xCC16 # HANGUL SYLLABLE SSANGCIEUC-I-RIEULMIEUM
-0xA997 0xCC17 # HANGUL SYLLABLE SSANGCIEUC-I-RIEULPIEUP
-0xA998 0xCC18 # HANGUL SYLLABLE SSANGCIEUC-I-RIEULSIOS
-0xA999 0xCC19 # HANGUL SYLLABLE SSANGCIEUC-I-RIEULTHIEUTH
-0xA99A 0xCC1A # HANGUL SYLLABLE SSANGCIEUC-I-RIEULPHIEUPH
-0xA99B 0xCC1B # HANGUL SYLLABLE SSANGCIEUC-I-RIEULHIEUH
-0xA99C 0xCC1E # HANGUL SYLLABLE SSANGCIEUC-I-PIEUPSIOS
-0xA99D 0xCC1F # HANGUL SYLLABLE SSANGCIEUC-I-SIOS
-0xA99E 0xCC20 # HANGUL SYLLABLE SSANGCIEUC-I-SSANGSIOS
-0xA99F 0xCC23 # HANGUL SYLLABLE SSANGCIEUC-I-CHIEUCH
-0xA9A0 0xCC24 # HANGUL SYLLABLE SSANGCIEUC-I-KHIEUKH
-0xA9A1 0x00E6 # LATIN SMALL LIGATURE AE
-0xA9A2 0x0111 # LATIN SMALL LETTER D WITH STROKE
-0xA9A3 0x00F0 # LATIN SMALL LETTER ETH
-0xA9A4 0x0127 # LATIN SMALL LETTER H WITH STROKE
-0xA9A5 0x0131 # LATIN SMALL LETTER DOTLESS I
-0xA9A6 0x0133 # LATIN SMALL LIGATURE IJ
-0xA9A7 0x0138 # LATIN SMALL LETTER KRA
-0xA9A8 0x0140 # LATIN SMALL LETTER L WITH MIDDLE DOT
-0xA9A9 0x0142 # LATIN SMALL LETTER L WITH STROKE
-0xA9AA 0x00F8 # LATIN SMALL LETTER O WITH STROKE
-0xA9AB 0x0153 # LATIN SMALL LIGATURE OE
-0xA9AC 0x00DF # LATIN SMALL LETTER SHARP S
-0xA9AD 0x00FE # LATIN SMALL LETTER THORN
-0xA9AE 0x0167 # LATIN SMALL LETTER T WITH STROKE
-0xA9AF 0x014B # LATIN SMALL LETTER ENG
-0xA9B0 0x0149 # LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
-0xA9B1 0x3200 # PARENTHESIZED HANGUL KIYEOK
-0xA9B2 0x3201 # PARENTHESIZED HANGUL NIEUN
-0xA9B3 0x3202 # PARENTHESIZED HANGUL TIKEUT
-0xA9B4 0x3203 # PARENTHESIZED HANGUL RIEUL
-0xA9B5 0x3204 # PARENTHESIZED HANGUL MIEUM
-0xA9B6 0x3205 # PARENTHESIZED HANGUL PIEUP
-0xA9B7 0x3206 # PARENTHESIZED HANGUL SIOS
-0xA9B8 0x3207 # PARENTHESIZED HANGUL IEUNG
-0xA9B9 0x3208 # PARENTHESIZED HANGUL CIEUC
-0xA9BA 0x3209 # PARENTHESIZED HANGUL CHIEUCH
-0xA9BB 0x320A # PARENTHESIZED HANGUL KHIEUKH
-0xA9BC 0x320B # PARENTHESIZED HANGUL THIEUTH
-0xA9BD 0x320C # PARENTHESIZED HANGUL PHIEUPH
-0xA9BE 0x320D # PARENTHESIZED HANGUL HIEUH
-0xA9BF 0x320E # PARENTHESIZED HANGUL KIYEOK A
-0xA9C0 0x320F # PARENTHESIZED HANGUL NIEUN A
-0xA9C1 0x3210 # PARENTHESIZED HANGUL TIKEUT A
-0xA9C2 0x3211 # PARENTHESIZED HANGUL RIEUL A
-0xA9C3 0x3212 # PARENTHESIZED HANGUL MIEUM A
-0xA9C4 0x3213 # PARENTHESIZED HANGUL PIEUP A
-0xA9C5 0x3214 # PARENTHESIZED HANGUL SIOS A
-0xA9C6 0x3215 # PARENTHESIZED HANGUL IEUNG A
-0xA9C7 0x3216 # PARENTHESIZED HANGUL CIEUC A
-0xA9C8 0x3217 # PARENTHESIZED HANGUL CHIEUCH A
-0xA9C9 0x3218 # PARENTHESIZED HANGUL KHIEUKH A
-0xA9CA 0x3219 # PARENTHESIZED HANGUL THIEUTH A
-0xA9CB 0x321A # PARENTHESIZED HANGUL PHIEUPH A
-0xA9CC 0x321B # PARENTHESIZED HANGUL HIEUH A
-0xA9CD 0x249C # PARENTHESIZED LATIN SMALL LETTER A
-0xA9CE 0x249D # PARENTHESIZED LATIN SMALL LETTER B
-0xA9CF 0x249E # PARENTHESIZED LATIN SMALL LETTER C
-0xA9D0 0x249F # PARENTHESIZED LATIN SMALL LETTER D
-0xA9D1 0x24A0 # PARENTHESIZED LATIN SMALL LETTER E
-0xA9D2 0x24A1 # PARENTHESIZED LATIN SMALL LETTER F
-0xA9D3 0x24A2 # PARENTHESIZED LATIN SMALL LETTER G
-0xA9D4 0x24A3 # PARENTHESIZED LATIN SMALL LETTER H
-0xA9D5 0x24A4 # PARENTHESIZED LATIN SMALL LETTER I
-0xA9D6 0x24A5 # PARENTHESIZED LATIN SMALL LETTER J
-0xA9D7 0x24A6 # PARENTHESIZED LATIN SMALL LETTER K
-0xA9D8 0x24A7 # PARENTHESIZED LATIN SMALL LETTER L
-0xA9D9 0x24A8 # PARENTHESIZED LATIN SMALL LETTER M
-0xA9DA 0x24A9 # PARENTHESIZED LATIN SMALL LETTER N
-0xA9DB 0x24AA # PARENTHESIZED LATIN SMALL LETTER O
-0xA9DC 0x24AB # PARENTHESIZED LATIN SMALL LETTER P
-0xA9DD 0x24AC # PARENTHESIZED LATIN SMALL LETTER Q
-0xA9DE 0x24AD # PARENTHESIZED LATIN SMALL LETTER R
-0xA9DF 0x24AE # PARENTHESIZED LATIN SMALL LETTER S
-0xA9E0 0x24AF # PARENTHESIZED LATIN SMALL LETTER T
-0xA9E1 0x24B0 # PARENTHESIZED LATIN SMALL LETTER U
-0xA9E2 0x24B1 # PARENTHESIZED LATIN SMALL LETTER V
-0xA9E3 0x24B2 # PARENTHESIZED LATIN SMALL LETTER W
-0xA9E4 0x24B3 # PARENTHESIZED LATIN SMALL LETTER X
-0xA9E5 0x24B4 # PARENTHESIZED LATIN SMALL LETTER Y
-0xA9E6 0x24B5 # PARENTHESIZED LATIN SMALL LETTER Z
-0xA9E7 0x2474 # PARENTHESIZED DIGIT ONE
-0xA9E8 0x2475 # PARENTHESIZED DIGIT TWO
-0xA9E9 0x2476 # PARENTHESIZED DIGIT THREE
-0xA9EA 0x2477 # PARENTHESIZED DIGIT FOUR
-0xA9EB 0x2478 # PARENTHESIZED DIGIT FIVE
-0xA9EC 0x2479 # PARENTHESIZED DIGIT SIX
-0xA9ED 0x247A # PARENTHESIZED DIGIT SEVEN
-0xA9EE 0x247B # PARENTHESIZED DIGIT EIGHT
-0xA9EF 0x247C # PARENTHESIZED DIGIT NINE
-0xA9F0 0x247D # PARENTHESIZED NUMBER TEN
-0xA9F1 0x247E # PARENTHESIZED NUMBER ELEVEN
-0xA9F2 0x247F # PARENTHESIZED NUMBER TWELVE
-0xA9F3 0x2480 # PARENTHESIZED NUMBER THIRTEEN
-0xA9F4 0x2481 # PARENTHESIZED NUMBER FOURTEEN
-0xA9F5 0x2482 # PARENTHESIZED NUMBER FIFTEEN
-0xA9F6 0x00B9 # SUPERSCRIPT ONE
-0xA9F7 0x00B2 # SUPERSCRIPT TWO
-0xA9F8 0x00B3 # SUPERSCRIPT THREE
-0xA9F9 0x2074 # SUPERSCRIPT FOUR
-0xA9FA 0x207F # SUPERSCRIPT LATIN SMALL LETTER N
-0xA9FB 0x2081 # SUBSCRIPT ONE
-0xA9FC 0x2082 # SUBSCRIPT TWO
-0xA9FD 0x2083 # SUBSCRIPT THREE
-0xA9FE 0x2084 # SUBSCRIPT FOUR
-0xAA41 0xCC25 # HANGUL SYLLABLE SSANGCIEUC-I-THIEUTH
-0xAA42 0xCC26 # HANGUL SYLLABLE SSANGCIEUC-I-PHIEUPH
-0xAA43 0xCC2A # HANGUL SYLLABLE CHIEUCH-A-SSANGKIYEOK
-0xAA44 0xCC2B # HANGUL SYLLABLE CHIEUCH-A-KIYEOKSIOS
-0xAA45 0xCC2D # HANGUL SYLLABLE CHIEUCH-A-NIEUNCIEUC
-0xAA46 0xCC2F # HANGUL SYLLABLE CHIEUCH-A-TIKEUT
-0xAA47 0xCC31 # HANGUL SYLLABLE CHIEUCH-A-RIEULKIYEOK
-0xAA48 0xCC32 # HANGUL SYLLABLE CHIEUCH-A-RIEULMIEUM
-0xAA49 0xCC33 # HANGUL SYLLABLE CHIEUCH-A-RIEULPIEUP
-0xAA4A 0xCC34 # HANGUL SYLLABLE CHIEUCH-A-RIEULSIOS
-0xAA4B 0xCC35 # HANGUL SYLLABLE CHIEUCH-A-RIEULTHIEUTH
-0xAA4C 0xCC36 # HANGUL SYLLABLE CHIEUCH-A-RIEULPHIEUPH
-0xAA4D 0xCC37 # HANGUL SYLLABLE CHIEUCH-A-RIEULHIEUH
-0xAA4E 0xCC3A # HANGUL SYLLABLE CHIEUCH-A-PIEUPSIOS
-0xAA4F 0xCC3F # HANGUL SYLLABLE CHIEUCH-A-CHIEUCH
-0xAA50 0xCC40 # HANGUL SYLLABLE CHIEUCH-A-KHIEUKH
-0xAA51 0xCC41 # HANGUL SYLLABLE CHIEUCH-A-THIEUTH
-0xAA52 0xCC42 # HANGUL SYLLABLE CHIEUCH-A-PHIEUPH
-0xAA53 0xCC43 # HANGUL SYLLABLE CHIEUCH-A-HIEUH
-0xAA54 0xCC46 # HANGUL SYLLABLE CHIEUCH-AE-SSANGKIYEOK
-0xAA55 0xCC47 # HANGUL SYLLABLE CHIEUCH-AE-KIYEOKSIOS
-0xAA56 0xCC49 # HANGUL SYLLABLE CHIEUCH-AE-NIEUNCIEUC
-0xAA57 0xCC4A # HANGUL SYLLABLE CHIEUCH-AE-NIEUNHIEUH
-0xAA58 0xCC4B # HANGUL SYLLABLE CHIEUCH-AE-TIKEUT
-0xAA59 0xCC4D # HANGUL SYLLABLE CHIEUCH-AE-RIEULKIYEOK
-0xAA5A 0xCC4E # HANGUL SYLLABLE CHIEUCH-AE-RIEULMIEUM
-0xAA61 0xCC4F # HANGUL SYLLABLE CHIEUCH-AE-RIEULPIEUP
-0xAA62 0xCC50 # HANGUL SYLLABLE CHIEUCH-AE-RIEULSIOS
-0xAA63 0xCC51 # HANGUL SYLLABLE CHIEUCH-AE-RIEULTHIEUTH
-0xAA64 0xCC52 # HANGUL SYLLABLE CHIEUCH-AE-RIEULPHIEUPH
-0xAA65 0xCC53 # HANGUL SYLLABLE CHIEUCH-AE-RIEULHIEUH
-0xAA66 0xCC56 # HANGUL SYLLABLE CHIEUCH-AE-PIEUPSIOS
-0xAA67 0xCC5A # HANGUL SYLLABLE CHIEUCH-AE-CIEUC
-0xAA68 0xCC5B # HANGUL SYLLABLE CHIEUCH-AE-CHIEUCH
-0xAA69 0xCC5C # HANGUL SYLLABLE CHIEUCH-AE-KHIEUKH
-0xAA6A 0xCC5D # HANGUL SYLLABLE CHIEUCH-AE-THIEUTH
-0xAA6B 0xCC5E # HANGUL SYLLABLE CHIEUCH-AE-PHIEUPH
-0xAA6C 0xCC5F # HANGUL SYLLABLE CHIEUCH-AE-HIEUH
-0xAA6D 0xCC61 # HANGUL SYLLABLE CHIEUCH-YA-KIYEOK
-0xAA6E 0xCC62 # HANGUL SYLLABLE CHIEUCH-YA-SSANGKIYEOK
-0xAA6F 0xCC63 # HANGUL SYLLABLE CHIEUCH-YA-KIYEOKSIOS
-0xAA70 0xCC65 # HANGUL SYLLABLE CHIEUCH-YA-NIEUNCIEUC
-0xAA71 0xCC67 # HANGUL SYLLABLE CHIEUCH-YA-TIKEUT
-0xAA72 0xCC69 # HANGUL SYLLABLE CHIEUCH-YA-RIEULKIYEOK
-0xAA73 0xCC6A # HANGUL SYLLABLE CHIEUCH-YA-RIEULMIEUM
-0xAA74 0xCC6B # HANGUL SYLLABLE CHIEUCH-YA-RIEULPIEUP
-0xAA75 0xCC6C # HANGUL SYLLABLE CHIEUCH-YA-RIEULSIOS
-0xAA76 0xCC6D # HANGUL SYLLABLE CHIEUCH-YA-RIEULTHIEUTH
-0xAA77 0xCC6E # HANGUL SYLLABLE CHIEUCH-YA-RIEULPHIEUPH
-0xAA78 0xCC6F # HANGUL SYLLABLE CHIEUCH-YA-RIEULHIEUH
-0xAA79 0xCC71 # HANGUL SYLLABLE CHIEUCH-YA-PIEUP
-0xAA7A 0xCC72 # HANGUL SYLLABLE CHIEUCH-YA-PIEUPSIOS
-0xAA81 0xCC73 # HANGUL SYLLABLE CHIEUCH-YA-SIOS
-0xAA82 0xCC74 # HANGUL SYLLABLE CHIEUCH-YA-SSANGSIOS
-0xAA83 0xCC76 # HANGUL SYLLABLE CHIEUCH-YA-CIEUC
-0xAA84 0xCC77 # HANGUL SYLLABLE CHIEUCH-YA-CHIEUCH
-0xAA85 0xCC78 # HANGUL SYLLABLE CHIEUCH-YA-KHIEUKH
-0xAA86 0xCC79 # HANGUL SYLLABLE CHIEUCH-YA-THIEUTH
-0xAA87 0xCC7A # HANGUL SYLLABLE CHIEUCH-YA-PHIEUPH
-0xAA88 0xCC7B # HANGUL SYLLABLE CHIEUCH-YA-HIEUH
-0xAA89 0xCC7C # HANGUL SYLLABLE CHIEUCH-YAE
-0xAA8A 0xCC7D # HANGUL SYLLABLE CHIEUCH-YAE-KIYEOK
-0xAA8B 0xCC7E # HANGUL SYLLABLE CHIEUCH-YAE-SSANGKIYEOK
-0xAA8C 0xCC7F # HANGUL SYLLABLE CHIEUCH-YAE-KIYEOKSIOS
-0xAA8D 0xCC80 # HANGUL SYLLABLE CHIEUCH-YAE-NIEUN
-0xAA8E 0xCC81 # HANGUL SYLLABLE CHIEUCH-YAE-NIEUNCIEUC
-0xAA8F 0xCC82 # HANGUL SYLLABLE CHIEUCH-YAE-NIEUNHIEUH
-0xAA90 0xCC83 # HANGUL SYLLABLE CHIEUCH-YAE-TIKEUT
-0xAA91 0xCC84 # HANGUL SYLLABLE CHIEUCH-YAE-RIEUL
-0xAA92 0xCC85 # HANGUL SYLLABLE CHIEUCH-YAE-RIEULKIYEOK
-0xAA93 0xCC86 # HANGUL SYLLABLE CHIEUCH-YAE-RIEULMIEUM
-0xAA94 0xCC87 # HANGUL SYLLABLE CHIEUCH-YAE-RIEULPIEUP
-0xAA95 0xCC88 # HANGUL SYLLABLE CHIEUCH-YAE-RIEULSIOS
-0xAA96 0xCC89 # HANGUL SYLLABLE CHIEUCH-YAE-RIEULTHIEUTH
-0xAA97 0xCC8A # HANGUL SYLLABLE CHIEUCH-YAE-RIEULPHIEUPH
-0xAA98 0xCC8B # HANGUL SYLLABLE CHIEUCH-YAE-RIEULHIEUH
-0xAA99 0xCC8C # HANGUL SYLLABLE CHIEUCH-YAE-MIEUM
-0xAA9A 0xCC8D # HANGUL SYLLABLE CHIEUCH-YAE-PIEUP
-0xAA9B 0xCC8E # HANGUL SYLLABLE CHIEUCH-YAE-PIEUPSIOS
-0xAA9C 0xCC8F # HANGUL SYLLABLE CHIEUCH-YAE-SIOS
-0xAA9D 0xCC90 # HANGUL SYLLABLE CHIEUCH-YAE-SSANGSIOS
-0xAA9E 0xCC91 # HANGUL SYLLABLE CHIEUCH-YAE-IEUNG
-0xAA9F 0xCC92 # HANGUL SYLLABLE CHIEUCH-YAE-CIEUC
-0xAAA0 0xCC93 # HANGUL SYLLABLE CHIEUCH-YAE-CHIEUCH
-0xAAA1 0x3041 # HIRAGANA LETTER SMALL A
-0xAAA2 0x3042 # HIRAGANA LETTER A
-0xAAA3 0x3043 # HIRAGANA LETTER SMALL I
-0xAAA4 0x3044 # HIRAGANA LETTER I
-0xAAA5 0x3045 # HIRAGANA LETTER SMALL U
-0xAAA6 0x3046 # HIRAGANA LETTER U
-0xAAA7 0x3047 # HIRAGANA LETTER SMALL E
-0xAAA8 0x3048 # HIRAGANA LETTER E
-0xAAA9 0x3049 # HIRAGANA LETTER SMALL O
-0xAAAA 0x304A # HIRAGANA LETTER O
-0xAAAB 0x304B # HIRAGANA LETTER KA
-0xAAAC 0x304C # HIRAGANA LETTER GA
-0xAAAD 0x304D # HIRAGANA LETTER KI
-0xAAAE 0x304E # HIRAGANA LETTER GI
-0xAAAF 0x304F # HIRAGANA LETTER KU
-0xAAB0 0x3050 # HIRAGANA LETTER GU
-0xAAB1 0x3051 # HIRAGANA LETTER KE
-0xAAB2 0x3052 # HIRAGANA LETTER GE
-0xAAB3 0x3053 # HIRAGANA LETTER KO
-0xAAB4 0x3054 # HIRAGANA LETTER GO
-0xAAB5 0x3055 # HIRAGANA LETTER SA
-0xAAB6 0x3056 # HIRAGANA LETTER ZA
-0xAAB7 0x3057 # HIRAGANA LETTER SI
-0xAAB8 0x3058 # HIRAGANA LETTER ZI
-0xAAB9 0x3059 # HIRAGANA LETTER SU
-0xAABA 0x305A # HIRAGANA LETTER ZU
-0xAABB 0x305B # HIRAGANA LETTER SE
-0xAABC 0x305C # HIRAGANA LETTER ZE
-0xAABD 0x305D # HIRAGANA LETTER SO
-0xAABE 0x305E # HIRAGANA LETTER ZO
-0xAABF 0x305F # HIRAGANA LETTER TA
-0xAAC0 0x3060 # HIRAGANA LETTER DA
-0xAAC1 0x3061 # HIRAGANA LETTER TI
-0xAAC2 0x3062 # HIRAGANA LETTER DI
-0xAAC3 0x3063 # HIRAGANA LETTER SMALL TU
-0xAAC4 0x3064 # HIRAGANA LETTER TU
-0xAAC5 0x3065 # HIRAGANA LETTER DU
-0xAAC6 0x3066 # HIRAGANA LETTER TE
-0xAAC7 0x3067 # HIRAGANA LETTER DE
-0xAAC8 0x3068 # HIRAGANA LETTER TO
-0xAAC9 0x3069 # HIRAGANA LETTER DO
-0xAACA 0x306A # HIRAGANA LETTER NA
-0xAACB 0x306B # HIRAGANA LETTER NI
-0xAACC 0x306C # HIRAGANA LETTER NU
-0xAACD 0x306D # HIRAGANA LETTER NE
-0xAACE 0x306E # HIRAGANA LETTER NO
-0xAACF 0x306F # HIRAGANA LETTER HA
-0xAAD0 0x3070 # HIRAGANA LETTER BA
-0xAAD1 0x3071 # HIRAGANA LETTER PA
-0xAAD2 0x3072 # HIRAGANA LETTER HI
-0xAAD3 0x3073 # HIRAGANA LETTER BI
-0xAAD4 0x3074 # HIRAGANA LETTER PI
-0xAAD5 0x3075 # HIRAGANA LETTER HU
-0xAAD6 0x3076 # HIRAGANA LETTER BU
-0xAAD7 0x3077 # HIRAGANA LETTER PU
-0xAAD8 0x3078 # HIRAGANA LETTER HE
-0xAAD9 0x3079 # HIRAGANA LETTER BE
-0xAADA 0x307A # HIRAGANA LETTER PE
-0xAADB 0x307B # HIRAGANA LETTER HO
-0xAADC 0x307C # HIRAGANA LETTER BO
-0xAADD 0x307D # HIRAGANA LETTER PO
-0xAADE 0x307E # HIRAGANA LETTER MA
-0xAADF 0x307F # HIRAGANA LETTER MI
-0xAAE0 0x3080 # HIRAGANA LETTER MU
-0xAAE1 0x3081 # HIRAGANA LETTER ME
-0xAAE2 0x3082 # HIRAGANA LETTER MO
-0xAAE3 0x3083 # HIRAGANA LETTER SMALL YA
-0xAAE4 0x3084 # HIRAGANA LETTER YA
-0xAAE5 0x3085 # HIRAGANA LETTER SMALL YU
-0xAAE6 0x3086 # HIRAGANA LETTER YU
-0xAAE7 0x3087 # HIRAGANA LETTER SMALL YO
-0xAAE8 0x3088 # HIRAGANA LETTER YO
-0xAAE9 0x3089 # HIRAGANA LETTER RA
-0xAAEA 0x308A # HIRAGANA LETTER RI
-0xAAEB 0x308B # HIRAGANA LETTER RU
-0xAAEC 0x308C # HIRAGANA LETTER RE
-0xAAED 0x308D # HIRAGANA LETTER RO
-0xAAEE 0x308E # HIRAGANA LETTER SMALL WA
-0xAAEF 0x308F # HIRAGANA LETTER WA
-0xAAF0 0x3090 # HIRAGANA LETTER WI
-0xAAF1 0x3091 # HIRAGANA LETTER WE
-0xAAF2 0x3092 # HIRAGANA LETTER WO
-0xAAF3 0x3093 # HIRAGANA LETTER N
-0xAB41 0xCC94 # HANGUL SYLLABLE CHIEUCH-YAE-KHIEUKH
-0xAB42 0xCC95 # HANGUL SYLLABLE CHIEUCH-YAE-THIEUTH
-0xAB43 0xCC96 # HANGUL SYLLABLE CHIEUCH-YAE-PHIEUPH
-0xAB44 0xCC97 # HANGUL SYLLABLE CHIEUCH-YAE-HIEUH
-0xAB45 0xCC9A # HANGUL SYLLABLE CHIEUCH-EO-SSANGKIYEOK
-0xAB46 0xCC9B # HANGUL SYLLABLE CHIEUCH-EO-KIYEOKSIOS
-0xAB47 0xCC9D # HANGUL SYLLABLE CHIEUCH-EO-NIEUNCIEUC
-0xAB48 0xCC9E # HANGUL SYLLABLE CHIEUCH-EO-NIEUNHIEUH
-0xAB49 0xCC9F # HANGUL SYLLABLE CHIEUCH-EO-TIKEUT
-0xAB4A 0xCCA1 # HANGUL SYLLABLE CHIEUCH-EO-RIEULKIYEOK
-0xAB4B 0xCCA2 # HANGUL SYLLABLE CHIEUCH-EO-RIEULMIEUM
-0xAB4C 0xCCA3 # HANGUL SYLLABLE CHIEUCH-EO-RIEULPIEUP
-0xAB4D 0xCCA4 # HANGUL SYLLABLE CHIEUCH-EO-RIEULSIOS
-0xAB4E 0xCCA5 # HANGUL SYLLABLE CHIEUCH-EO-RIEULTHIEUTH
-0xAB4F 0xCCA6 # HANGUL SYLLABLE CHIEUCH-EO-RIEULPHIEUPH
-0xAB50 0xCCA7 # HANGUL SYLLABLE CHIEUCH-EO-RIEULHIEUH
-0xAB51 0xCCAA # HANGUL SYLLABLE CHIEUCH-EO-PIEUPSIOS
-0xAB52 0xCCAE # HANGUL SYLLABLE CHIEUCH-EO-CIEUC
-0xAB53 0xCCAF # HANGUL SYLLABLE CHIEUCH-EO-CHIEUCH
-0xAB54 0xCCB0 # HANGUL SYLLABLE CHIEUCH-EO-KHIEUKH
-0xAB55 0xCCB1 # HANGUL SYLLABLE CHIEUCH-EO-THIEUTH
-0xAB56 0xCCB2 # HANGUL SYLLABLE CHIEUCH-EO-PHIEUPH
-0xAB57 0xCCB3 # HANGUL SYLLABLE CHIEUCH-EO-HIEUH
-0xAB58 0xCCB6 # HANGUL SYLLABLE CHIEUCH-E-SSANGKIYEOK
-0xAB59 0xCCB7 # HANGUL SYLLABLE CHIEUCH-E-KIYEOKSIOS
-0xAB5A 0xCCB9 # HANGUL SYLLABLE CHIEUCH-E-NIEUNCIEUC
-0xAB61 0xCCBA # HANGUL SYLLABLE CHIEUCH-E-NIEUNHIEUH
-0xAB62 0xCCBB # HANGUL SYLLABLE CHIEUCH-E-TIKEUT
-0xAB63 0xCCBD # HANGUL SYLLABLE CHIEUCH-E-RIEULKIYEOK
-0xAB64 0xCCBE # HANGUL SYLLABLE CHIEUCH-E-RIEULMIEUM
-0xAB65 0xCCBF # HANGUL SYLLABLE CHIEUCH-E-RIEULPIEUP
-0xAB66 0xCCC0 # HANGUL SYLLABLE CHIEUCH-E-RIEULSIOS
-0xAB67 0xCCC1 # HANGUL SYLLABLE CHIEUCH-E-RIEULTHIEUTH
-0xAB68 0xCCC2 # HANGUL SYLLABLE CHIEUCH-E-RIEULPHIEUPH
-0xAB69 0xCCC3 # HANGUL SYLLABLE CHIEUCH-E-RIEULHIEUH
-0xAB6A 0xCCC6 # HANGUL SYLLABLE CHIEUCH-E-PIEUPSIOS
-0xAB6B 0xCCC8 # HANGUL SYLLABLE CHIEUCH-E-SSANGSIOS
-0xAB6C 0xCCCA # HANGUL SYLLABLE CHIEUCH-E-CIEUC
-0xAB6D 0xCCCB # HANGUL SYLLABLE CHIEUCH-E-CHIEUCH
-0xAB6E 0xCCCC # HANGUL SYLLABLE CHIEUCH-E-KHIEUKH
-0xAB6F 0xCCCD # HANGUL SYLLABLE CHIEUCH-E-THIEUTH
-0xAB70 0xCCCE # HANGUL SYLLABLE CHIEUCH-E-PHIEUPH
-0xAB71 0xCCCF # HANGUL SYLLABLE CHIEUCH-E-HIEUH
-0xAB72 0xCCD1 # HANGUL SYLLABLE CHIEUCH-YEO-KIYEOK
-0xAB73 0xCCD2 # HANGUL SYLLABLE CHIEUCH-YEO-SSANGKIYEOK
-0xAB74 0xCCD3 # HANGUL SYLLABLE CHIEUCH-YEO-KIYEOKSIOS
-0xAB75 0xCCD5 # HANGUL SYLLABLE CHIEUCH-YEO-NIEUNCIEUC
-0xAB76 0xCCD6 # HANGUL SYLLABLE CHIEUCH-YEO-NIEUNHIEUH
-0xAB77 0xCCD7 # HANGUL SYLLABLE CHIEUCH-YEO-TIKEUT
-0xAB78 0xCCD8 # HANGUL SYLLABLE CHIEUCH-YEO-RIEUL
-0xAB79 0xCCD9 # HANGUL SYLLABLE CHIEUCH-YEO-RIEULKIYEOK
-0xAB7A 0xCCDA # HANGUL SYLLABLE CHIEUCH-YEO-RIEULMIEUM
-0xAB81 0xCCDB # HANGUL SYLLABLE CHIEUCH-YEO-RIEULPIEUP
-0xAB82 0xCCDC # HANGUL SYLLABLE CHIEUCH-YEO-RIEULSIOS
-0xAB83 0xCCDD # HANGUL SYLLABLE CHIEUCH-YEO-RIEULTHIEUTH
-0xAB84 0xCCDE # HANGUL SYLLABLE CHIEUCH-YEO-RIEULPHIEUPH
-0xAB85 0xCCDF # HANGUL SYLLABLE CHIEUCH-YEO-RIEULHIEUH
-0xAB86 0xCCE0 # HANGUL SYLLABLE CHIEUCH-YEO-MIEUM
-0xAB87 0xCCE1 # HANGUL SYLLABLE CHIEUCH-YEO-PIEUP
-0xAB88 0xCCE2 # HANGUL SYLLABLE CHIEUCH-YEO-PIEUPSIOS
-0xAB89 0xCCE3 # HANGUL SYLLABLE CHIEUCH-YEO-SIOS
-0xAB8A 0xCCE5 # HANGUL SYLLABLE CHIEUCH-YEO-IEUNG
-0xAB8B 0xCCE6 # HANGUL SYLLABLE CHIEUCH-YEO-CIEUC
-0xAB8C 0xCCE7 # HANGUL SYLLABLE CHIEUCH-YEO-CHIEUCH
-0xAB8D 0xCCE8 # HANGUL SYLLABLE CHIEUCH-YEO-KHIEUKH
-0xAB8E 0xCCE9 # HANGUL SYLLABLE CHIEUCH-YEO-THIEUTH
-0xAB8F 0xCCEA # HANGUL SYLLABLE CHIEUCH-YEO-PHIEUPH
-0xAB90 0xCCEB # HANGUL SYLLABLE CHIEUCH-YEO-HIEUH
-0xAB91 0xCCED # HANGUL SYLLABLE CHIEUCH-YE-KIYEOK
-0xAB92 0xCCEE # HANGUL SYLLABLE CHIEUCH-YE-SSANGKIYEOK
-0xAB93 0xCCEF # HANGUL SYLLABLE CHIEUCH-YE-KIYEOKSIOS
-0xAB94 0xCCF1 # HANGUL SYLLABLE CHIEUCH-YE-NIEUNCIEUC
-0xAB95 0xCCF2 # HANGUL SYLLABLE CHIEUCH-YE-NIEUNHIEUH
-0xAB96 0xCCF3 # HANGUL SYLLABLE CHIEUCH-YE-TIKEUT
-0xAB97 0xCCF4 # HANGUL SYLLABLE CHIEUCH-YE-RIEUL
-0xAB98 0xCCF5 # HANGUL SYLLABLE CHIEUCH-YE-RIEULKIYEOK
-0xAB99 0xCCF6 # HANGUL SYLLABLE CHIEUCH-YE-RIEULMIEUM
-0xAB9A 0xCCF7 # HANGUL SYLLABLE CHIEUCH-YE-RIEULPIEUP
-0xAB9B 0xCCF8 # HANGUL SYLLABLE CHIEUCH-YE-RIEULSIOS
-0xAB9C 0xCCF9 # HANGUL SYLLABLE CHIEUCH-YE-RIEULTHIEUTH
-0xAB9D 0xCCFA # HANGUL SYLLABLE CHIEUCH-YE-RIEULPHIEUPH
-0xAB9E 0xCCFB # HANGUL SYLLABLE CHIEUCH-YE-RIEULHIEUH
-0xAB9F 0xCCFC # HANGUL SYLLABLE CHIEUCH-YE-MIEUM
-0xABA0 0xCCFD # HANGUL SYLLABLE CHIEUCH-YE-PIEUP
-0xABA1 0x30A1 # KATAKANA LETTER SMALL A
-0xABA2 0x30A2 # KATAKANA LETTER A
-0xABA3 0x30A3 # KATAKANA LETTER SMALL I
-0xABA4 0x30A4 # KATAKANA LETTER I
-0xABA5 0x30A5 # KATAKANA LETTER SMALL U
-0xABA6 0x30A6 # KATAKANA LETTER U
-0xABA7 0x30A7 # KATAKANA LETTER SMALL E
-0xABA8 0x30A8 # KATAKANA LETTER E
-0xABA9 0x30A9 # KATAKANA LETTER SMALL O
-0xABAA 0x30AA # KATAKANA LETTER O
-0xABAB 0x30AB # KATAKANA LETTER KA
-0xABAC 0x30AC # KATAKANA LETTER GA
-0xABAD 0x30AD # KATAKANA LETTER KI
-0xABAE 0x30AE # KATAKANA LETTER GI
-0xABAF 0x30AF # KATAKANA LETTER KU
-0xABB0 0x30B0 # KATAKANA LETTER GU
-0xABB1 0x30B1 # KATAKANA LETTER KE
-0xABB2 0x30B2 # KATAKANA LETTER GE
-0xABB3 0x30B3 # KATAKANA LETTER KO
-0xABB4 0x30B4 # KATAKANA LETTER GO
-0xABB5 0x30B5 # KATAKANA LETTER SA
-0xABB6 0x30B6 # KATAKANA LETTER ZA
-0xABB7 0x30B7 # KATAKANA LETTER SI
-0xABB8 0x30B8 # KATAKANA LETTER ZI
-0xABB9 0x30B9 # KATAKANA LETTER SU
-0xABBA 0x30BA # KATAKANA LETTER ZU
-0xABBB 0x30BB # KATAKANA LETTER SE
-0xABBC 0x30BC # KATAKANA LETTER ZE
-0xABBD 0x30BD # KATAKANA LETTER SO
-0xABBE 0x30BE # KATAKANA LETTER ZO
-0xABBF 0x30BF # KATAKANA LETTER TA
-0xABC0 0x30C0 # KATAKANA LETTER DA
-0xABC1 0x30C1 # KATAKANA LETTER TI
-0xABC2 0x30C2 # KATAKANA LETTER DI
-0xABC3 0x30C3 # KATAKANA LETTER SMALL TU
-0xABC4 0x30C4 # KATAKANA LETTER TU
-0xABC5 0x30C5 # KATAKANA LETTER DU
-0xABC6 0x30C6 # KATAKANA LETTER TE
-0xABC7 0x30C7 # KATAKANA LETTER DE
-0xABC8 0x30C8 # KATAKANA LETTER TO
-0xABC9 0x30C9 # KATAKANA LETTER DO
-0xABCA 0x30CA # KATAKANA LETTER NA
-0xABCB 0x30CB # KATAKANA LETTER NI
-0xABCC 0x30CC # KATAKANA LETTER NU
-0xABCD 0x30CD # KATAKANA LETTER NE
-0xABCE 0x30CE # KATAKANA LETTER NO
-0xABCF 0x30CF # KATAKANA LETTER HA
-0xABD0 0x30D0 # KATAKANA LETTER BA
-0xABD1 0x30D1 # KATAKANA LETTER PA
-0xABD2 0x30D2 # KATAKANA LETTER HI
-0xABD3 0x30D3 # KATAKANA LETTER BI
-0xABD4 0x30D4 # KATAKANA LETTER PI
-0xABD5 0x30D5 # KATAKANA LETTER HU
-0xABD6 0x30D6 # KATAKANA LETTER BU
-0xABD7 0x30D7 # KATAKANA LETTER PU
-0xABD8 0x30D8 # KATAKANA LETTER HE
-0xABD9 0x30D9 # KATAKANA LETTER BE
-0xABDA 0x30DA # KATAKANA LETTER PE
-0xABDB 0x30DB # KATAKANA LETTER HO
-0xABDC 0x30DC # KATAKANA LETTER BO
-0xABDD 0x30DD # KATAKANA LETTER PO
-0xABDE 0x30DE # KATAKANA LETTER MA
-0xABDF 0x30DF # KATAKANA LETTER MI
-0xABE0 0x30E0 # KATAKANA LETTER MU
-0xABE1 0x30E1 # KATAKANA LETTER ME
-0xABE2 0x30E2 # KATAKANA LETTER MO
-0xABE3 0x30E3 # KATAKANA LETTER SMALL YA
-0xABE4 0x30E4 # KATAKANA LETTER YA
-0xABE5 0x30E5 # KATAKANA LETTER SMALL YU
-0xABE6 0x30E6 # KATAKANA LETTER YU
-0xABE7 0x30E7 # KATAKANA LETTER SMALL YO
-0xABE8 0x30E8 # KATAKANA LETTER YO
-0xABE9 0x30E9 # KATAKANA LETTER RA
-0xABEA 0x30EA # KATAKANA LETTER RI
-0xABEB 0x30EB # KATAKANA LETTER RU
-0xABEC 0x30EC # KATAKANA LETTER RE
-0xABED 0x30ED # KATAKANA LETTER RO
-0xABEE 0x30EE # KATAKANA LETTER SMALL WA
-0xABEF 0x30EF # KATAKANA LETTER WA
-0xABF0 0x30F0 # KATAKANA LETTER WI
-0xABF1 0x30F1 # KATAKANA LETTER WE
-0xABF2 0x30F2 # KATAKANA LETTER WO
-0xABF3 0x30F3 # KATAKANA LETTER N
-0xABF4 0x30F4 # KATAKANA LETTER VU
-0xABF5 0x30F5 # KATAKANA LETTER SMALL KA
-0xABF6 0x30F6 # KATAKANA LETTER SMALL KE
-0xAC41 0xCCFE # HANGUL SYLLABLE CHIEUCH-YE-PIEUPSIOS
-0xAC42 0xCCFF # HANGUL SYLLABLE CHIEUCH-YE-SIOS
-0xAC43 0xCD00 # HANGUL SYLLABLE CHIEUCH-YE-SSANGSIOS
-0xAC44 0xCD02 # HANGUL SYLLABLE CHIEUCH-YE-CIEUC
-0xAC45 0xCD03 # HANGUL SYLLABLE CHIEUCH-YE-CHIEUCH
-0xAC46 0xCD04 # HANGUL SYLLABLE CHIEUCH-YE-KHIEUKH
-0xAC47 0xCD05 # HANGUL SYLLABLE CHIEUCH-YE-THIEUTH
-0xAC48 0xCD06 # HANGUL SYLLABLE CHIEUCH-YE-PHIEUPH
-0xAC49 0xCD07 # HANGUL SYLLABLE CHIEUCH-YE-HIEUH
-0xAC4A 0xCD0A # HANGUL SYLLABLE CHIEUCH-O-SSANGKIYEOK
-0xAC4B 0xCD0B # HANGUL SYLLABLE CHIEUCH-O-KIYEOKSIOS
-0xAC4C 0xCD0D # HANGUL SYLLABLE CHIEUCH-O-NIEUNCIEUC
-0xAC4D 0xCD0E # HANGUL SYLLABLE CHIEUCH-O-NIEUNHIEUH
-0xAC4E 0xCD0F # HANGUL SYLLABLE CHIEUCH-O-TIKEUT
-0xAC4F 0xCD11 # HANGUL SYLLABLE CHIEUCH-O-RIEULKIYEOK
-0xAC50 0xCD12 # HANGUL SYLLABLE CHIEUCH-O-RIEULMIEUM
-0xAC51 0xCD13 # HANGUL SYLLABLE CHIEUCH-O-RIEULPIEUP
-0xAC52 0xCD14 # HANGUL SYLLABLE CHIEUCH-O-RIEULSIOS
-0xAC53 0xCD15 # HANGUL SYLLABLE CHIEUCH-O-RIEULTHIEUTH
-0xAC54 0xCD16 # HANGUL SYLLABLE CHIEUCH-O-RIEULPHIEUPH
-0xAC55 0xCD17 # HANGUL SYLLABLE CHIEUCH-O-RIEULHIEUH
-0xAC56 0xCD1A # HANGUL SYLLABLE CHIEUCH-O-PIEUPSIOS
-0xAC57 0xCD1C # HANGUL SYLLABLE CHIEUCH-O-SSANGSIOS
-0xAC58 0xCD1E # HANGUL SYLLABLE CHIEUCH-O-CIEUC
-0xAC59 0xCD1F # HANGUL SYLLABLE CHIEUCH-O-CHIEUCH
-0xAC5A 0xCD20 # HANGUL SYLLABLE CHIEUCH-O-KHIEUKH
-0xAC61 0xCD21 # HANGUL SYLLABLE CHIEUCH-O-THIEUTH
-0xAC62 0xCD22 # HANGUL SYLLABLE CHIEUCH-O-PHIEUPH
-0xAC63 0xCD23 # HANGUL SYLLABLE CHIEUCH-O-HIEUH
-0xAC64 0xCD25 # HANGUL SYLLABLE CHIEUCH-WA-KIYEOK
-0xAC65 0xCD26 # HANGUL SYLLABLE CHIEUCH-WA-SSANGKIYEOK
-0xAC66 0xCD27 # HANGUL SYLLABLE CHIEUCH-WA-KIYEOKSIOS
-0xAC67 0xCD29 # HANGUL SYLLABLE CHIEUCH-WA-NIEUNCIEUC
-0xAC68 0xCD2A # HANGUL SYLLABLE CHIEUCH-WA-NIEUNHIEUH
-0xAC69 0xCD2B # HANGUL SYLLABLE CHIEUCH-WA-TIKEUT
-0xAC6A 0xCD2D # HANGUL SYLLABLE CHIEUCH-WA-RIEULKIYEOK
-0xAC6B 0xCD2E # HANGUL SYLLABLE CHIEUCH-WA-RIEULMIEUM
-0xAC6C 0xCD2F # HANGUL SYLLABLE CHIEUCH-WA-RIEULPIEUP
-0xAC6D 0xCD30 # HANGUL SYLLABLE CHIEUCH-WA-RIEULSIOS
-0xAC6E 0xCD31 # HANGUL SYLLABLE CHIEUCH-WA-RIEULTHIEUTH
-0xAC6F 0xCD32 # HANGUL SYLLABLE CHIEUCH-WA-RIEULPHIEUPH
-0xAC70 0xCD33 # HANGUL SYLLABLE CHIEUCH-WA-RIEULHIEUH
-0xAC71 0xCD34 # HANGUL SYLLABLE CHIEUCH-WA-MIEUM
-0xAC72 0xCD35 # HANGUL SYLLABLE CHIEUCH-WA-PIEUP
-0xAC73 0xCD36 # HANGUL SYLLABLE CHIEUCH-WA-PIEUPSIOS
-0xAC74 0xCD37 # HANGUL SYLLABLE CHIEUCH-WA-SIOS
-0xAC75 0xCD38 # HANGUL SYLLABLE CHIEUCH-WA-SSANGSIOS
-0xAC76 0xCD3A # HANGUL SYLLABLE CHIEUCH-WA-CIEUC
-0xAC77 0xCD3B # HANGUL SYLLABLE CHIEUCH-WA-CHIEUCH
-0xAC78 0xCD3C # HANGUL SYLLABLE CHIEUCH-WA-KHIEUKH
-0xAC79 0xCD3D # HANGUL SYLLABLE CHIEUCH-WA-THIEUTH
-0xAC7A 0xCD3E # HANGUL SYLLABLE CHIEUCH-WA-PHIEUPH
-0xAC81 0xCD3F # HANGUL SYLLABLE CHIEUCH-WA-HIEUH
-0xAC82 0xCD40 # HANGUL SYLLABLE CHIEUCH-WAE
-0xAC83 0xCD41 # HANGUL SYLLABLE CHIEUCH-WAE-KIYEOK
-0xAC84 0xCD42 # HANGUL SYLLABLE CHIEUCH-WAE-SSANGKIYEOK
-0xAC85 0xCD43 # HANGUL SYLLABLE CHIEUCH-WAE-KIYEOKSIOS
-0xAC86 0xCD44 # HANGUL SYLLABLE CHIEUCH-WAE-NIEUN
-0xAC87 0xCD45 # HANGUL SYLLABLE CHIEUCH-WAE-NIEUNCIEUC
-0xAC88 0xCD46 # HANGUL SYLLABLE CHIEUCH-WAE-NIEUNHIEUH
-0xAC89 0xCD47 # HANGUL SYLLABLE CHIEUCH-WAE-TIKEUT
-0xAC8A 0xCD48 # HANGUL SYLLABLE CHIEUCH-WAE-RIEUL
-0xAC8B 0xCD49 # HANGUL SYLLABLE CHIEUCH-WAE-RIEULKIYEOK
-0xAC8C 0xCD4A # HANGUL SYLLABLE CHIEUCH-WAE-RIEULMIEUM
-0xAC8D 0xCD4B # HANGUL SYLLABLE CHIEUCH-WAE-RIEULPIEUP
-0xAC8E 0xCD4C # HANGUL SYLLABLE CHIEUCH-WAE-RIEULSIOS
-0xAC8F 0xCD4D # HANGUL SYLLABLE CHIEUCH-WAE-RIEULTHIEUTH
-0xAC90 0xCD4E # HANGUL SYLLABLE CHIEUCH-WAE-RIEULPHIEUPH
-0xAC91 0xCD4F # HANGUL SYLLABLE CHIEUCH-WAE-RIEULHIEUH
-0xAC92 0xCD50 # HANGUL SYLLABLE CHIEUCH-WAE-MIEUM
-0xAC93 0xCD51 # HANGUL SYLLABLE CHIEUCH-WAE-PIEUP
-0xAC94 0xCD52 # HANGUL SYLLABLE CHIEUCH-WAE-PIEUPSIOS
-0xAC95 0xCD53 # HANGUL SYLLABLE CHIEUCH-WAE-SIOS
-0xAC96 0xCD54 # HANGUL SYLLABLE CHIEUCH-WAE-SSANGSIOS
-0xAC97 0xCD55 # HANGUL SYLLABLE CHIEUCH-WAE-IEUNG
-0xAC98 0xCD56 # HANGUL SYLLABLE CHIEUCH-WAE-CIEUC
-0xAC99 0xCD57 # HANGUL SYLLABLE CHIEUCH-WAE-CHIEUCH
-0xAC9A 0xCD58 # HANGUL SYLLABLE CHIEUCH-WAE-KHIEUKH
-0xAC9B 0xCD59 # HANGUL SYLLABLE CHIEUCH-WAE-THIEUTH
-0xAC9C 0xCD5A # HANGUL SYLLABLE CHIEUCH-WAE-PHIEUPH
-0xAC9D 0xCD5B # HANGUL SYLLABLE CHIEUCH-WAE-HIEUH
-0xAC9E 0xCD5D # HANGUL SYLLABLE CHIEUCH-OE-KIYEOK
-0xAC9F 0xCD5E # HANGUL SYLLABLE CHIEUCH-OE-SSANGKIYEOK
-0xACA0 0xCD5F # HANGUL SYLLABLE CHIEUCH-OE-KIYEOKSIOS
-0xACA1 0x0410 # CYRILLIC CAPITAL LETTER A
-0xACA2 0x0411 # CYRILLIC CAPITAL LETTER BE
-0xACA3 0x0412 # CYRILLIC CAPITAL LETTER VE
-0xACA4 0x0413 # CYRILLIC CAPITAL LETTER GHE
-0xACA5 0x0414 # CYRILLIC CAPITAL LETTER DE
-0xACA6 0x0415 # CYRILLIC CAPITAL LETTER IE
-0xACA7 0x0401 # CYRILLIC CAPITAL LETTER IO
-0xACA8 0x0416 # CYRILLIC CAPITAL LETTER ZHE
-0xACA9 0x0417 # CYRILLIC CAPITAL LETTER ZE
-0xACAA 0x0418 # CYRILLIC CAPITAL LETTER I
-0xACAB 0x0419 # CYRILLIC CAPITAL LETTER SHORT I
-0xACAC 0x041A # CYRILLIC CAPITAL LETTER KA
-0xACAD 0x041B # CYRILLIC CAPITAL LETTER EL
-0xACAE 0x041C # CYRILLIC CAPITAL LETTER EM
-0xACAF 0x041D # CYRILLIC CAPITAL LETTER EN
-0xACB0 0x041E # CYRILLIC CAPITAL LETTER O
-0xACB1 0x041F # CYRILLIC CAPITAL LETTER PE
-0xACB2 0x0420 # CYRILLIC CAPITAL LETTER ER
-0xACB3 0x0421 # CYRILLIC CAPITAL LETTER ES
-0xACB4 0x0422 # CYRILLIC CAPITAL LETTER TE
-0xACB5 0x0423 # CYRILLIC CAPITAL LETTER U
-0xACB6 0x0424 # CYRILLIC CAPITAL LETTER EF
-0xACB7 0x0425 # CYRILLIC CAPITAL LETTER HA
-0xACB8 0x0426 # CYRILLIC CAPITAL LETTER TSE
-0xACB9 0x0427 # CYRILLIC CAPITAL LETTER CHE
-0xACBA 0x0428 # CYRILLIC CAPITAL LETTER SHA
-0xACBB 0x0429 # CYRILLIC CAPITAL LETTER SHCHA
-0xACBC 0x042A # CYRILLIC CAPITAL LETTER HARD SIGN
-0xACBD 0x042B # CYRILLIC CAPITAL LETTER YERU
-0xACBE 0x042C # CYRILLIC CAPITAL LETTER SOFT SIGN
-0xACBF 0x042D # CYRILLIC CAPITAL LETTER E
-0xACC0 0x042E # CYRILLIC CAPITAL LETTER YU
-0xACC1 0x042F # CYRILLIC CAPITAL LETTER YA
-0xACD1 0x0430 # CYRILLIC SMALL LETTER A
-0xACD2 0x0431 # CYRILLIC SMALL LETTER BE
-0xACD3 0x0432 # CYRILLIC SMALL LETTER VE
-0xACD4 0x0433 # CYRILLIC SMALL LETTER GHE
-0xACD5 0x0434 # CYRILLIC SMALL LETTER DE
-0xACD6 0x0435 # CYRILLIC SMALL LETTER IE
-0xACD7 0x0451 # CYRILLIC SMALL LETTER IO
-0xACD8 0x0436 # CYRILLIC SMALL LETTER ZHE
-0xACD9 0x0437 # CYRILLIC SMALL LETTER ZE
-0xACDA 0x0438 # CYRILLIC SMALL LETTER I
-0xACDB 0x0439 # CYRILLIC SMALL LETTER SHORT I
-0xACDC 0x043A # CYRILLIC SMALL LETTER KA
-0xACDD 0x043B # CYRILLIC SMALL LETTER EL
-0xACDE 0x043C # CYRILLIC SMALL LETTER EM
-0xACDF 0x043D # CYRILLIC SMALL LETTER EN
-0xACE0 0x043E # CYRILLIC SMALL LETTER O
-0xACE1 0x043F # CYRILLIC SMALL LETTER PE
-0xACE2 0x0440 # CYRILLIC SMALL LETTER ER
-0xACE3 0x0441 # CYRILLIC SMALL LETTER ES
-0xACE4 0x0442 # CYRILLIC SMALL LETTER TE
-0xACE5 0x0443 # CYRILLIC SMALL LETTER U
-0xACE6 0x0444 # CYRILLIC SMALL LETTER EF
-0xACE7 0x0445 # CYRILLIC SMALL LETTER HA
-0xACE8 0x0446 # CYRILLIC SMALL LETTER TSE
-0xACE9 0x0447 # CYRILLIC SMALL LETTER CHE
-0xACEA 0x0448 # CYRILLIC SMALL LETTER SHA
-0xACEB 0x0449 # CYRILLIC SMALL LETTER SHCHA
-0xACEC 0x044A # CYRILLIC SMALL LETTER HARD SIGN
-0xACED 0x044B # CYRILLIC SMALL LETTER YERU
-0xACEE 0x044C # CYRILLIC SMALL LETTER SOFT SIGN
-0xACEF 0x044D # CYRILLIC SMALL LETTER E
-0xACF0 0x044E # CYRILLIC SMALL LETTER YU
-0xACF1 0x044F # CYRILLIC SMALL LETTER YA
-0xAD41 0xCD61 # HANGUL SYLLABLE CHIEUCH-OE-NIEUNCIEUC
-0xAD42 0xCD62 # HANGUL SYLLABLE CHIEUCH-OE-NIEUNHIEUH
-0xAD43 0xCD63 # HANGUL SYLLABLE CHIEUCH-OE-TIKEUT
-0xAD44 0xCD65 # HANGUL SYLLABLE CHIEUCH-OE-RIEULKIYEOK
-0xAD45 0xCD66 # HANGUL SYLLABLE CHIEUCH-OE-RIEULMIEUM
-0xAD46 0xCD67 # HANGUL SYLLABLE CHIEUCH-OE-RIEULPIEUP
-0xAD47 0xCD68 # HANGUL SYLLABLE CHIEUCH-OE-RIEULSIOS
-0xAD48 0xCD69 # HANGUL SYLLABLE CHIEUCH-OE-RIEULTHIEUTH
-0xAD49 0xCD6A # HANGUL SYLLABLE CHIEUCH-OE-RIEULPHIEUPH
-0xAD4A 0xCD6B # HANGUL SYLLABLE CHIEUCH-OE-RIEULHIEUH
-0xAD4B 0xCD6E # HANGUL SYLLABLE CHIEUCH-OE-PIEUPSIOS
-0xAD4C 0xCD70 # HANGUL SYLLABLE CHIEUCH-OE-SSANGSIOS
-0xAD4D 0xCD72 # HANGUL SYLLABLE CHIEUCH-OE-CIEUC
-0xAD4E 0xCD73 # HANGUL SYLLABLE CHIEUCH-OE-CHIEUCH
-0xAD4F 0xCD74 # HANGUL SYLLABLE CHIEUCH-OE-KHIEUKH
-0xAD50 0xCD75 # HANGUL SYLLABLE CHIEUCH-OE-THIEUTH
-0xAD51 0xCD76 # HANGUL SYLLABLE CHIEUCH-OE-PHIEUPH
-0xAD52 0xCD77 # HANGUL SYLLABLE CHIEUCH-OE-HIEUH
-0xAD53 0xCD79 # HANGUL SYLLABLE CHIEUCH-YO-KIYEOK
-0xAD54 0xCD7A # HANGUL SYLLABLE CHIEUCH-YO-SSANGKIYEOK
-0xAD55 0xCD7B # HANGUL SYLLABLE CHIEUCH-YO-KIYEOKSIOS
-0xAD56 0xCD7C # HANGUL SYLLABLE CHIEUCH-YO-NIEUN
-0xAD57 0xCD7D # HANGUL SYLLABLE CHIEUCH-YO-NIEUNCIEUC
-0xAD58 0xCD7E # HANGUL SYLLABLE CHIEUCH-YO-NIEUNHIEUH
-0xAD59 0xCD7F # HANGUL SYLLABLE CHIEUCH-YO-TIKEUT
-0xAD5A 0xCD80 # HANGUL SYLLABLE CHIEUCH-YO-RIEUL
-0xAD61 0xCD81 # HANGUL SYLLABLE CHIEUCH-YO-RIEULKIYEOK
-0xAD62 0xCD82 # HANGUL SYLLABLE CHIEUCH-YO-RIEULMIEUM
-0xAD63 0xCD83 # HANGUL SYLLABLE CHIEUCH-YO-RIEULPIEUP
-0xAD64 0xCD84 # HANGUL SYLLABLE CHIEUCH-YO-RIEULSIOS
-0xAD65 0xCD85 # HANGUL SYLLABLE CHIEUCH-YO-RIEULTHIEUTH
-0xAD66 0xCD86 # HANGUL SYLLABLE CHIEUCH-YO-RIEULPHIEUPH
-0xAD67 0xCD87 # HANGUL SYLLABLE CHIEUCH-YO-RIEULHIEUH
-0xAD68 0xCD89 # HANGUL SYLLABLE CHIEUCH-YO-PIEUP
-0xAD69 0xCD8A # HANGUL SYLLABLE CHIEUCH-YO-PIEUPSIOS
-0xAD6A 0xCD8B # HANGUL SYLLABLE CHIEUCH-YO-SIOS
-0xAD6B 0xCD8C # HANGUL SYLLABLE CHIEUCH-YO-SSANGSIOS
-0xAD6C 0xCD8D # HANGUL SYLLABLE CHIEUCH-YO-IEUNG
-0xAD6D 0xCD8E # HANGUL SYLLABLE CHIEUCH-YO-CIEUC
-0xAD6E 0xCD8F # HANGUL SYLLABLE CHIEUCH-YO-CHIEUCH
-0xAD6F 0xCD90 # HANGUL SYLLABLE CHIEUCH-YO-KHIEUKH
-0xAD70 0xCD91 # HANGUL SYLLABLE CHIEUCH-YO-THIEUTH
-0xAD71 0xCD92 # HANGUL SYLLABLE CHIEUCH-YO-PHIEUPH
-0xAD72 0xCD93 # HANGUL SYLLABLE CHIEUCH-YO-HIEUH
-0xAD73 0xCD96 # HANGUL SYLLABLE CHIEUCH-U-SSANGKIYEOK
-0xAD74 0xCD97 # HANGUL SYLLABLE CHIEUCH-U-KIYEOKSIOS
-0xAD75 0xCD99 # HANGUL SYLLABLE CHIEUCH-U-NIEUNCIEUC
-0xAD76 0xCD9A # HANGUL SYLLABLE CHIEUCH-U-NIEUNHIEUH
-0xAD77 0xCD9B # HANGUL SYLLABLE CHIEUCH-U-TIKEUT
-0xAD78 0xCD9D # HANGUL SYLLABLE CHIEUCH-U-RIEULKIYEOK
-0xAD79 0xCD9E # HANGUL SYLLABLE CHIEUCH-U-RIEULMIEUM
-0xAD7A 0xCD9F # HANGUL SYLLABLE CHIEUCH-U-RIEULPIEUP
-0xAD81 0xCDA0 # HANGUL SYLLABLE CHIEUCH-U-RIEULSIOS
-0xAD82 0xCDA1 # HANGUL SYLLABLE CHIEUCH-U-RIEULTHIEUTH
-0xAD83 0xCDA2 # HANGUL SYLLABLE CHIEUCH-U-RIEULPHIEUPH
-0xAD84 0xCDA3 # HANGUL SYLLABLE CHIEUCH-U-RIEULHIEUH
-0xAD85 0xCDA6 # HANGUL SYLLABLE CHIEUCH-U-PIEUPSIOS
-0xAD86 0xCDA8 # HANGUL SYLLABLE CHIEUCH-U-SSANGSIOS
-0xAD87 0xCDAA # HANGUL SYLLABLE CHIEUCH-U-CIEUC
-0xAD88 0xCDAB # HANGUL SYLLABLE CHIEUCH-U-CHIEUCH
-0xAD89 0xCDAC # HANGUL SYLLABLE CHIEUCH-U-KHIEUKH
-0xAD8A 0xCDAD # HANGUL SYLLABLE CHIEUCH-U-THIEUTH
-0xAD8B 0xCDAE # HANGUL SYLLABLE CHIEUCH-U-PHIEUPH
-0xAD8C 0xCDAF # HANGUL SYLLABLE CHIEUCH-U-HIEUH
-0xAD8D 0xCDB1 # HANGUL SYLLABLE CHIEUCH-WEO-KIYEOK
-0xAD8E 0xCDB2 # HANGUL SYLLABLE CHIEUCH-WEO-SSANGKIYEOK
-0xAD8F 0xCDB3 # HANGUL SYLLABLE CHIEUCH-WEO-KIYEOKSIOS
-0xAD90 0xCDB4 # HANGUL SYLLABLE CHIEUCH-WEO-NIEUN
-0xAD91 0xCDB5 # HANGUL SYLLABLE CHIEUCH-WEO-NIEUNCIEUC
-0xAD92 0xCDB6 # HANGUL SYLLABLE CHIEUCH-WEO-NIEUNHIEUH
-0xAD93 0xCDB7 # HANGUL SYLLABLE CHIEUCH-WEO-TIKEUT
-0xAD94 0xCDB8 # HANGUL SYLLABLE CHIEUCH-WEO-RIEUL
-0xAD95 0xCDB9 # HANGUL SYLLABLE CHIEUCH-WEO-RIEULKIYEOK
-0xAD96 0xCDBA # HANGUL SYLLABLE CHIEUCH-WEO-RIEULMIEUM
-0xAD97 0xCDBB # HANGUL SYLLABLE CHIEUCH-WEO-RIEULPIEUP
-0xAD98 0xCDBC # HANGUL SYLLABLE CHIEUCH-WEO-RIEULSIOS
-0xAD99 0xCDBD # HANGUL SYLLABLE CHIEUCH-WEO-RIEULTHIEUTH
-0xAD9A 0xCDBE # HANGUL SYLLABLE CHIEUCH-WEO-RIEULPHIEUPH
-0xAD9B 0xCDBF # HANGUL SYLLABLE CHIEUCH-WEO-RIEULHIEUH
-0xAD9C 0xCDC0 # HANGUL SYLLABLE CHIEUCH-WEO-MIEUM
-0xAD9D 0xCDC1 # HANGUL SYLLABLE CHIEUCH-WEO-PIEUP
-0xAD9E 0xCDC2 # HANGUL SYLLABLE CHIEUCH-WEO-PIEUPSIOS
-0xAD9F 0xCDC3 # HANGUL SYLLABLE CHIEUCH-WEO-SIOS
-0xADA0 0xCDC5 # HANGUL SYLLABLE CHIEUCH-WEO-IEUNG
-0xAE41 0xCDC6 # HANGUL SYLLABLE CHIEUCH-WEO-CIEUC
-0xAE42 0xCDC7 # HANGUL SYLLABLE CHIEUCH-WEO-CHIEUCH
-0xAE43 0xCDC8 # HANGUL SYLLABLE CHIEUCH-WEO-KHIEUKH
-0xAE44 0xCDC9 # HANGUL SYLLABLE CHIEUCH-WEO-THIEUTH
-0xAE45 0xCDCA # HANGUL SYLLABLE CHIEUCH-WEO-PHIEUPH
-0xAE46 0xCDCB # HANGUL SYLLABLE CHIEUCH-WEO-HIEUH
-0xAE47 0xCDCD # HANGUL SYLLABLE CHIEUCH-WE-KIYEOK
-0xAE48 0xCDCE # HANGUL SYLLABLE CHIEUCH-WE-SSANGKIYEOK
-0xAE49 0xCDCF # HANGUL SYLLABLE CHIEUCH-WE-KIYEOKSIOS
-0xAE4A 0xCDD1 # HANGUL SYLLABLE CHIEUCH-WE-NIEUNCIEUC
-0xAE4B 0xCDD2 # HANGUL SYLLABLE CHIEUCH-WE-NIEUNHIEUH
-0xAE4C 0xCDD3 # HANGUL SYLLABLE CHIEUCH-WE-TIKEUT
-0xAE4D 0xCDD4 # HANGUL SYLLABLE CHIEUCH-WE-RIEUL
-0xAE4E 0xCDD5 # HANGUL SYLLABLE CHIEUCH-WE-RIEULKIYEOK
-0xAE4F 0xCDD6 # HANGUL SYLLABLE CHIEUCH-WE-RIEULMIEUM
-0xAE50 0xCDD7 # HANGUL SYLLABLE CHIEUCH-WE-RIEULPIEUP
-0xAE51 0xCDD8 # HANGUL SYLLABLE CHIEUCH-WE-RIEULSIOS
-0xAE52 0xCDD9 # HANGUL SYLLABLE CHIEUCH-WE-RIEULTHIEUTH
-0xAE53 0xCDDA # HANGUL SYLLABLE CHIEUCH-WE-RIEULPHIEUPH
-0xAE54 0xCDDB # HANGUL SYLLABLE CHIEUCH-WE-RIEULHIEUH
-0xAE55 0xCDDC # HANGUL SYLLABLE CHIEUCH-WE-MIEUM
-0xAE56 0xCDDD # HANGUL SYLLABLE CHIEUCH-WE-PIEUP
-0xAE57 0xCDDE # HANGUL SYLLABLE CHIEUCH-WE-PIEUPSIOS
-0xAE58 0xCDDF # HANGUL SYLLABLE CHIEUCH-WE-SIOS
-0xAE59 0xCDE0 # HANGUL SYLLABLE CHIEUCH-WE-SSANGSIOS
-0xAE5A 0xCDE1 # HANGUL SYLLABLE CHIEUCH-WE-IEUNG
-0xAE61 0xCDE2 # HANGUL SYLLABLE CHIEUCH-WE-CIEUC
-0xAE62 0xCDE3 # HANGUL SYLLABLE CHIEUCH-WE-CHIEUCH
-0xAE63 0xCDE4 # HANGUL SYLLABLE CHIEUCH-WE-KHIEUKH
-0xAE64 0xCDE5 # HANGUL SYLLABLE CHIEUCH-WE-THIEUTH
-0xAE65 0xCDE6 # HANGUL SYLLABLE CHIEUCH-WE-PHIEUPH
-0xAE66 0xCDE7 # HANGUL SYLLABLE CHIEUCH-WE-HIEUH
-0xAE67 0xCDE9 # HANGUL SYLLABLE CHIEUCH-WI-KIYEOK
-0xAE68 0xCDEA # HANGUL SYLLABLE CHIEUCH-WI-SSANGKIYEOK
-0xAE69 0xCDEB # HANGUL SYLLABLE CHIEUCH-WI-KIYEOKSIOS
-0xAE6A 0xCDED # HANGUL SYLLABLE CHIEUCH-WI-NIEUNCIEUC
-0xAE6B 0xCDEE # HANGUL SYLLABLE CHIEUCH-WI-NIEUNHIEUH
-0xAE6C 0xCDEF # HANGUL SYLLABLE CHIEUCH-WI-TIKEUT
-0xAE6D 0xCDF1 # HANGUL SYLLABLE CHIEUCH-WI-RIEULKIYEOK
-0xAE6E 0xCDF2 # HANGUL SYLLABLE CHIEUCH-WI-RIEULMIEUM
-0xAE6F 0xCDF3 # HANGUL SYLLABLE CHIEUCH-WI-RIEULPIEUP
-0xAE70 0xCDF4 # HANGUL SYLLABLE CHIEUCH-WI-RIEULSIOS
-0xAE71 0xCDF5 # HANGUL SYLLABLE CHIEUCH-WI-RIEULTHIEUTH
-0xAE72 0xCDF6 # HANGUL SYLLABLE CHIEUCH-WI-RIEULPHIEUPH
-0xAE73 0xCDF7 # HANGUL SYLLABLE CHIEUCH-WI-RIEULHIEUH
-0xAE74 0xCDFA # HANGUL SYLLABLE CHIEUCH-WI-PIEUPSIOS
-0xAE75 0xCDFC # HANGUL SYLLABLE CHIEUCH-WI-SSANGSIOS
-0xAE76 0xCDFE # HANGUL SYLLABLE CHIEUCH-WI-CIEUC
-0xAE77 0xCDFF # HANGUL SYLLABLE CHIEUCH-WI-CHIEUCH
-0xAE78 0xCE00 # HANGUL SYLLABLE CHIEUCH-WI-KHIEUKH
-0xAE79 0xCE01 # HANGUL SYLLABLE CHIEUCH-WI-THIEUTH
-0xAE7A 0xCE02 # HANGUL SYLLABLE CHIEUCH-WI-PHIEUPH
-0xAE81 0xCE03 # HANGUL SYLLABLE CHIEUCH-WI-HIEUH
-0xAE82 0xCE05 # HANGUL SYLLABLE CHIEUCH-YU-KIYEOK
-0xAE83 0xCE06 # HANGUL SYLLABLE CHIEUCH-YU-SSANGKIYEOK
-0xAE84 0xCE07 # HANGUL SYLLABLE CHIEUCH-YU-KIYEOKSIOS
-0xAE85 0xCE09 # HANGUL SYLLABLE CHIEUCH-YU-NIEUNCIEUC
-0xAE86 0xCE0A # HANGUL SYLLABLE CHIEUCH-YU-NIEUNHIEUH
-0xAE87 0xCE0B # HANGUL SYLLABLE CHIEUCH-YU-TIKEUT
-0xAE88 0xCE0D # HANGUL SYLLABLE CHIEUCH-YU-RIEULKIYEOK
-0xAE89 0xCE0E # HANGUL SYLLABLE CHIEUCH-YU-RIEULMIEUM
-0xAE8A 0xCE0F # HANGUL SYLLABLE CHIEUCH-YU-RIEULPIEUP
-0xAE8B 0xCE10 # HANGUL SYLLABLE CHIEUCH-YU-RIEULSIOS
-0xAE8C 0xCE11 # HANGUL SYLLABLE CHIEUCH-YU-RIEULTHIEUTH
-0xAE8D 0xCE12 # HANGUL SYLLABLE CHIEUCH-YU-RIEULPHIEUPH
-0xAE8E 0xCE13 # HANGUL SYLLABLE CHIEUCH-YU-RIEULHIEUH
-0xAE8F 0xCE15 # HANGUL SYLLABLE CHIEUCH-YU-PIEUP
-0xAE90 0xCE16 # HANGUL SYLLABLE CHIEUCH-YU-PIEUPSIOS
-0xAE91 0xCE17 # HANGUL SYLLABLE CHIEUCH-YU-SIOS
-0xAE92 0xCE18 # HANGUL SYLLABLE CHIEUCH-YU-SSANGSIOS
-0xAE93 0xCE1A # HANGUL SYLLABLE CHIEUCH-YU-CIEUC
-0xAE94 0xCE1B # HANGUL SYLLABLE CHIEUCH-YU-CHIEUCH
-0xAE95 0xCE1C # HANGUL SYLLABLE CHIEUCH-YU-KHIEUKH
-0xAE96 0xCE1D # HANGUL SYLLABLE CHIEUCH-YU-THIEUTH
-0xAE97 0xCE1E # HANGUL SYLLABLE CHIEUCH-YU-PHIEUPH
-0xAE98 0xCE1F # HANGUL SYLLABLE CHIEUCH-YU-HIEUH
-0xAE99 0xCE22 # HANGUL SYLLABLE CHIEUCH-EU-SSANGKIYEOK
-0xAE9A 0xCE23 # HANGUL SYLLABLE CHIEUCH-EU-KIYEOKSIOS
-0xAE9B 0xCE25 # HANGUL SYLLABLE CHIEUCH-EU-NIEUNCIEUC
-0xAE9C 0xCE26 # HANGUL SYLLABLE CHIEUCH-EU-NIEUNHIEUH
-0xAE9D 0xCE27 # HANGUL SYLLABLE CHIEUCH-EU-TIKEUT
-0xAE9E 0xCE29 # HANGUL SYLLABLE CHIEUCH-EU-RIEULKIYEOK
-0xAE9F 0xCE2A # HANGUL SYLLABLE CHIEUCH-EU-RIEULMIEUM
-0xAEA0 0xCE2B # HANGUL SYLLABLE CHIEUCH-EU-RIEULPIEUP
-0xAF41 0xCE2C # HANGUL SYLLABLE CHIEUCH-EU-RIEULSIOS
-0xAF42 0xCE2D # HANGUL SYLLABLE CHIEUCH-EU-RIEULTHIEUTH
-0xAF43 0xCE2E # HANGUL SYLLABLE CHIEUCH-EU-RIEULPHIEUPH
-0xAF44 0xCE2F # HANGUL SYLLABLE CHIEUCH-EU-RIEULHIEUH
-0xAF45 0xCE32 # HANGUL SYLLABLE CHIEUCH-EU-PIEUPSIOS
-0xAF46 0xCE34 # HANGUL SYLLABLE CHIEUCH-EU-SSANGSIOS
-0xAF47 0xCE36 # HANGUL SYLLABLE CHIEUCH-EU-CIEUC
-0xAF48 0xCE37 # HANGUL SYLLABLE CHIEUCH-EU-CHIEUCH
-0xAF49 0xCE38 # HANGUL SYLLABLE CHIEUCH-EU-KHIEUKH
-0xAF4A 0xCE39 # HANGUL SYLLABLE CHIEUCH-EU-THIEUTH
-0xAF4B 0xCE3A # HANGUL SYLLABLE CHIEUCH-EU-PHIEUPH
-0xAF4C 0xCE3B # HANGUL SYLLABLE CHIEUCH-EU-HIEUH
-0xAF4D 0xCE3C # HANGUL SYLLABLE CHIEUCH-YI
-0xAF4E 0xCE3D # HANGUL SYLLABLE CHIEUCH-YI-KIYEOK
-0xAF4F 0xCE3E # HANGUL SYLLABLE CHIEUCH-YI-SSANGKIYEOK
-0xAF50 0xCE3F # HANGUL SYLLABLE CHIEUCH-YI-KIYEOKSIOS
-0xAF51 0xCE40 # HANGUL SYLLABLE CHIEUCH-YI-NIEUN
-0xAF52 0xCE41 # HANGUL SYLLABLE CHIEUCH-YI-NIEUNCIEUC
-0xAF53 0xCE42 # HANGUL SYLLABLE CHIEUCH-YI-NIEUNHIEUH
-0xAF54 0xCE43 # HANGUL SYLLABLE CHIEUCH-YI-TIKEUT
-0xAF55 0xCE44 # HANGUL SYLLABLE CHIEUCH-YI-RIEUL
-0xAF56 0xCE45 # HANGUL SYLLABLE CHIEUCH-YI-RIEULKIYEOK
-0xAF57 0xCE46 # HANGUL SYLLABLE CHIEUCH-YI-RIEULMIEUM
-0xAF58 0xCE47 # HANGUL SYLLABLE CHIEUCH-YI-RIEULPIEUP
-0xAF59 0xCE48 # HANGUL SYLLABLE CHIEUCH-YI-RIEULSIOS
-0xAF5A 0xCE49 # HANGUL SYLLABLE CHIEUCH-YI-RIEULTHIEUTH
-0xAF61 0xCE4A # HANGUL SYLLABLE CHIEUCH-YI-RIEULPHIEUPH
-0xAF62 0xCE4B # HANGUL SYLLABLE CHIEUCH-YI-RIEULHIEUH
-0xAF63 0xCE4C # HANGUL SYLLABLE CHIEUCH-YI-MIEUM
-0xAF64 0xCE4D # HANGUL SYLLABLE CHIEUCH-YI-PIEUP
-0xAF65 0xCE4E # HANGUL SYLLABLE CHIEUCH-YI-PIEUPSIOS
-0xAF66 0xCE4F # HANGUL SYLLABLE CHIEUCH-YI-SIOS
-0xAF67 0xCE50 # HANGUL SYLLABLE CHIEUCH-YI-SSANGSIOS
-0xAF68 0xCE51 # HANGUL SYLLABLE CHIEUCH-YI-IEUNG
-0xAF69 0xCE52 # HANGUL SYLLABLE CHIEUCH-YI-CIEUC
-0xAF6A 0xCE53 # HANGUL SYLLABLE CHIEUCH-YI-CHIEUCH
-0xAF6B 0xCE54 # HANGUL SYLLABLE CHIEUCH-YI-KHIEUKH
-0xAF6C 0xCE55 # HANGUL SYLLABLE CHIEUCH-YI-THIEUTH
-0xAF6D 0xCE56 # HANGUL SYLLABLE CHIEUCH-YI-PHIEUPH
-0xAF6E 0xCE57 # HANGUL SYLLABLE CHIEUCH-YI-HIEUH
-0xAF6F 0xCE5A # HANGUL SYLLABLE CHIEUCH-I-SSANGKIYEOK
-0xAF70 0xCE5B # HANGUL SYLLABLE CHIEUCH-I-KIYEOKSIOS
-0xAF71 0xCE5D # HANGUL SYLLABLE CHIEUCH-I-NIEUNCIEUC
-0xAF72 0xCE5E # HANGUL SYLLABLE CHIEUCH-I-NIEUNHIEUH
-0xAF73 0xCE62 # HANGUL SYLLABLE CHIEUCH-I-RIEULMIEUM
-0xAF74 0xCE63 # HANGUL SYLLABLE CHIEUCH-I-RIEULPIEUP
-0xAF75 0xCE64 # HANGUL SYLLABLE CHIEUCH-I-RIEULSIOS
-0xAF76 0xCE65 # HANGUL SYLLABLE CHIEUCH-I-RIEULTHIEUTH
-0xAF77 0xCE66 # HANGUL SYLLABLE CHIEUCH-I-RIEULPHIEUPH
-0xAF78 0xCE67 # HANGUL SYLLABLE CHIEUCH-I-RIEULHIEUH
-0xAF79 0xCE6A # HANGUL SYLLABLE CHIEUCH-I-PIEUPSIOS
-0xAF7A 0xCE6C # HANGUL SYLLABLE CHIEUCH-I-SSANGSIOS
-0xAF81 0xCE6E # HANGUL SYLLABLE CHIEUCH-I-CIEUC
-0xAF82 0xCE6F # HANGUL SYLLABLE CHIEUCH-I-CHIEUCH
-0xAF83 0xCE70 # HANGUL SYLLABLE CHIEUCH-I-KHIEUKH
-0xAF84 0xCE71 # HANGUL SYLLABLE CHIEUCH-I-THIEUTH
-0xAF85 0xCE72 # HANGUL SYLLABLE CHIEUCH-I-PHIEUPH
-0xAF86 0xCE73 # HANGUL SYLLABLE CHIEUCH-I-HIEUH
-0xAF87 0xCE76 # HANGUL SYLLABLE KHIEUKH-A-SSANGKIYEOK
-0xAF88 0xCE77 # HANGUL SYLLABLE KHIEUKH-A-KIYEOKSIOS
-0xAF89 0xCE79 # HANGUL SYLLABLE KHIEUKH-A-NIEUNCIEUC
-0xAF8A 0xCE7A # HANGUL SYLLABLE KHIEUKH-A-NIEUNHIEUH
-0xAF8B 0xCE7B # HANGUL SYLLABLE KHIEUKH-A-TIKEUT
-0xAF8C 0xCE7D # HANGUL SYLLABLE KHIEUKH-A-RIEULKIYEOK
-0xAF8D 0xCE7E # HANGUL SYLLABLE KHIEUKH-A-RIEULMIEUM
-0xAF8E 0xCE7F # HANGUL SYLLABLE KHIEUKH-A-RIEULPIEUP
-0xAF8F 0xCE80 # HANGUL SYLLABLE KHIEUKH-A-RIEULSIOS
-0xAF90 0xCE81 # HANGUL SYLLABLE KHIEUKH-A-RIEULTHIEUTH
-0xAF91 0xCE82 # HANGUL SYLLABLE KHIEUKH-A-RIEULPHIEUPH
-0xAF92 0xCE83 # HANGUL SYLLABLE KHIEUKH-A-RIEULHIEUH
-0xAF93 0xCE86 # HANGUL SYLLABLE KHIEUKH-A-PIEUPSIOS
-0xAF94 0xCE88 # HANGUL SYLLABLE KHIEUKH-A-SSANGSIOS
-0xAF95 0xCE8A # HANGUL SYLLABLE KHIEUKH-A-CIEUC
-0xAF96 0xCE8B # HANGUL SYLLABLE KHIEUKH-A-CHIEUCH
-0xAF97 0xCE8C # HANGUL SYLLABLE KHIEUKH-A-KHIEUKH
-0xAF98 0xCE8D # HANGUL SYLLABLE KHIEUKH-A-THIEUTH
-0xAF99 0xCE8E # HANGUL SYLLABLE KHIEUKH-A-PHIEUPH
-0xAF9A 0xCE8F # HANGUL SYLLABLE KHIEUKH-A-HIEUH
-0xAF9B 0xCE92 # HANGUL SYLLABLE KHIEUKH-AE-SSANGKIYEOK
-0xAF9C 0xCE93 # HANGUL SYLLABLE KHIEUKH-AE-KIYEOKSIOS
-0xAF9D 0xCE95 # HANGUL SYLLABLE KHIEUKH-AE-NIEUNCIEUC
-0xAF9E 0xCE96 # HANGUL SYLLABLE KHIEUKH-AE-NIEUNHIEUH
-0xAF9F 0xCE97 # HANGUL SYLLABLE KHIEUKH-AE-TIKEUT
-0xAFA0 0xCE99 # HANGUL SYLLABLE KHIEUKH-AE-RIEULKIYEOK
-0xB041 0xCE9A # HANGUL SYLLABLE KHIEUKH-AE-RIEULMIEUM
-0xB042 0xCE9B # HANGUL SYLLABLE KHIEUKH-AE-RIEULPIEUP
-0xB043 0xCE9C # HANGUL SYLLABLE KHIEUKH-AE-RIEULSIOS
-0xB044 0xCE9D # HANGUL SYLLABLE KHIEUKH-AE-RIEULTHIEUTH
-0xB045 0xCE9E # HANGUL SYLLABLE KHIEUKH-AE-RIEULPHIEUPH
-0xB046 0xCE9F # HANGUL SYLLABLE KHIEUKH-AE-RIEULHIEUH
-0xB047 0xCEA2 # HANGUL SYLLABLE KHIEUKH-AE-PIEUPSIOS
-0xB048 0xCEA6 # HANGUL SYLLABLE KHIEUKH-AE-CIEUC
-0xB049 0xCEA7 # HANGUL SYLLABLE KHIEUKH-AE-CHIEUCH
-0xB04A 0xCEA8 # HANGUL SYLLABLE KHIEUKH-AE-KHIEUKH
-0xB04B 0xCEA9 # HANGUL SYLLABLE KHIEUKH-AE-THIEUTH
-0xB04C 0xCEAA # HANGUL SYLLABLE KHIEUKH-AE-PHIEUPH
-0xB04D 0xCEAB # HANGUL SYLLABLE KHIEUKH-AE-HIEUH
-0xB04E 0xCEAE # HANGUL SYLLABLE KHIEUKH-YA-SSANGKIYEOK
-0xB04F 0xCEAF # HANGUL SYLLABLE KHIEUKH-YA-KIYEOKSIOS
-0xB050 0xCEB0 # HANGUL SYLLABLE KHIEUKH-YA-NIEUN
-0xB051 0xCEB1 # HANGUL SYLLABLE KHIEUKH-YA-NIEUNCIEUC
-0xB052 0xCEB2 # HANGUL SYLLABLE KHIEUKH-YA-NIEUNHIEUH
-0xB053 0xCEB3 # HANGUL SYLLABLE KHIEUKH-YA-TIKEUT
-0xB054 0xCEB4 # HANGUL SYLLABLE KHIEUKH-YA-RIEUL
-0xB055 0xCEB5 # HANGUL SYLLABLE KHIEUKH-YA-RIEULKIYEOK
-0xB056 0xCEB6 # HANGUL SYLLABLE KHIEUKH-YA-RIEULMIEUM
-0xB057 0xCEB7 # HANGUL SYLLABLE KHIEUKH-YA-RIEULPIEUP
-0xB058 0xCEB8 # HANGUL SYLLABLE KHIEUKH-YA-RIEULSIOS
-0xB059 0xCEB9 # HANGUL SYLLABLE KHIEUKH-YA-RIEULTHIEUTH
-0xB05A 0xCEBA # HANGUL SYLLABLE KHIEUKH-YA-RIEULPHIEUPH
-0xB061 0xCEBB # HANGUL SYLLABLE KHIEUKH-YA-RIEULHIEUH
-0xB062 0xCEBC # HANGUL SYLLABLE KHIEUKH-YA-MIEUM
-0xB063 0xCEBD # HANGUL SYLLABLE KHIEUKH-YA-PIEUP
-0xB064 0xCEBE # HANGUL SYLLABLE KHIEUKH-YA-PIEUPSIOS
-0xB065 0xCEBF # HANGUL SYLLABLE KHIEUKH-YA-SIOS
-0xB066 0xCEC0 # HANGUL SYLLABLE KHIEUKH-YA-SSANGSIOS
-0xB067 0xCEC2 # HANGUL SYLLABLE KHIEUKH-YA-CIEUC
-0xB068 0xCEC3 # HANGUL SYLLABLE KHIEUKH-YA-CHIEUCH
-0xB069 0xCEC4 # HANGUL SYLLABLE KHIEUKH-YA-KHIEUKH
-0xB06A 0xCEC5 # HANGUL SYLLABLE KHIEUKH-YA-THIEUTH
-0xB06B 0xCEC6 # HANGUL SYLLABLE KHIEUKH-YA-PHIEUPH
-0xB06C 0xCEC7 # HANGUL SYLLABLE KHIEUKH-YA-HIEUH
-0xB06D 0xCEC8 # HANGUL SYLLABLE KHIEUKH-YAE
-0xB06E 0xCEC9 # HANGUL SYLLABLE KHIEUKH-YAE-KIYEOK
-0xB06F 0xCECA # HANGUL SYLLABLE KHIEUKH-YAE-SSANGKIYEOK
-0xB070 0xCECB # HANGUL SYLLABLE KHIEUKH-YAE-KIYEOKSIOS
-0xB071 0xCECC # HANGUL SYLLABLE KHIEUKH-YAE-NIEUN
-0xB072 0xCECD # HANGUL SYLLABLE KHIEUKH-YAE-NIEUNCIEUC
-0xB073 0xCECE # HANGUL SYLLABLE KHIEUKH-YAE-NIEUNHIEUH
-0xB074 0xCECF # HANGUL SYLLABLE KHIEUKH-YAE-TIKEUT
-0xB075 0xCED0 # HANGUL SYLLABLE KHIEUKH-YAE-RIEUL
-0xB076 0xCED1 # HANGUL SYLLABLE KHIEUKH-YAE-RIEULKIYEOK
-0xB077 0xCED2 # HANGUL SYLLABLE KHIEUKH-YAE-RIEULMIEUM
-0xB078 0xCED3 # HANGUL SYLLABLE KHIEUKH-YAE-RIEULPIEUP
-0xB079 0xCED4 # HANGUL SYLLABLE KHIEUKH-YAE-RIEULSIOS
-0xB07A 0xCED5 # HANGUL SYLLABLE KHIEUKH-YAE-RIEULTHIEUTH
-0xB081 0xCED6 # HANGUL SYLLABLE KHIEUKH-YAE-RIEULPHIEUPH
-0xB082 0xCED7 # HANGUL SYLLABLE KHIEUKH-YAE-RIEULHIEUH
-0xB083 0xCED8 # HANGUL SYLLABLE KHIEUKH-YAE-MIEUM
-0xB084 0xCED9 # HANGUL SYLLABLE KHIEUKH-YAE-PIEUP
-0xB085 0xCEDA # HANGUL SYLLABLE KHIEUKH-YAE-PIEUPSIOS
-0xB086 0xCEDB # HANGUL SYLLABLE KHIEUKH-YAE-SIOS
-0xB087 0xCEDC # HANGUL SYLLABLE KHIEUKH-YAE-SSANGSIOS
-0xB088 0xCEDD # HANGUL SYLLABLE KHIEUKH-YAE-IEUNG
-0xB089 0xCEDE # HANGUL SYLLABLE KHIEUKH-YAE-CIEUC
-0xB08A 0xCEDF # HANGUL SYLLABLE KHIEUKH-YAE-CHIEUCH
-0xB08B 0xCEE0 # HANGUL SYLLABLE KHIEUKH-YAE-KHIEUKH
-0xB08C 0xCEE1 # HANGUL SYLLABLE KHIEUKH-YAE-THIEUTH
-0xB08D 0xCEE2 # HANGUL SYLLABLE KHIEUKH-YAE-PHIEUPH
-0xB08E 0xCEE3 # HANGUL SYLLABLE KHIEUKH-YAE-HIEUH
-0xB08F 0xCEE6 # HANGUL SYLLABLE KHIEUKH-EO-SSANGKIYEOK
-0xB090 0xCEE7 # HANGUL SYLLABLE KHIEUKH-EO-KIYEOKSIOS
-0xB091 0xCEE9 # HANGUL SYLLABLE KHIEUKH-EO-NIEUNCIEUC
-0xB092 0xCEEA # HANGUL SYLLABLE KHIEUKH-EO-NIEUNHIEUH
-0xB093 0xCEED # HANGUL SYLLABLE KHIEUKH-EO-RIEULKIYEOK
-0xB094 0xCEEE # HANGUL SYLLABLE KHIEUKH-EO-RIEULMIEUM
-0xB095 0xCEEF # HANGUL SYLLABLE KHIEUKH-EO-RIEULPIEUP
-0xB096 0xCEF0 # HANGUL SYLLABLE KHIEUKH-EO-RIEULSIOS
-0xB097 0xCEF1 # HANGUL SYLLABLE KHIEUKH-EO-RIEULTHIEUTH
-0xB098 0xCEF2 # HANGUL SYLLABLE KHIEUKH-EO-RIEULPHIEUPH
-0xB099 0xCEF3 # HANGUL SYLLABLE KHIEUKH-EO-RIEULHIEUH
-0xB09A 0xCEF6 # HANGUL SYLLABLE KHIEUKH-EO-PIEUPSIOS
-0xB09B 0xCEFA # HANGUL SYLLABLE KHIEUKH-EO-CIEUC
-0xB09C 0xCEFB # HANGUL SYLLABLE KHIEUKH-EO-CHIEUCH
-0xB09D 0xCEFC # HANGUL SYLLABLE KHIEUKH-EO-KHIEUKH
-0xB09E 0xCEFD # HANGUL SYLLABLE KHIEUKH-EO-THIEUTH
-0xB09F 0xCEFE # HANGUL SYLLABLE KHIEUKH-EO-PHIEUPH
-0xB0A0 0xCEFF # HANGUL SYLLABLE KHIEUKH-EO-HIEUH
-0xB0A1 0xAC00 # HANGUL SYLLABLE KIYEOK-A
-0xB0A2 0xAC01 # HANGUL SYLLABLE KIYEOK-A-KIYEOK
-0xB0A3 0xAC04 # HANGUL SYLLABLE KIYEOK-A-NIEUN
-0xB0A4 0xAC07 # HANGUL SYLLABLE KIYEOK-A-TIKEUT
-0xB0A5 0xAC08 # HANGUL SYLLABLE KIYEOK-A-RIEUL
-0xB0A6 0xAC09 # HANGUL SYLLABLE KIYEOK-A-RIEULKIYEOK
-0xB0A7 0xAC0A # HANGUL SYLLABLE KIYEOK-A-RIEULMIEUM
-0xB0A8 0xAC10 # HANGUL SYLLABLE KIYEOK-A-MIEUM
-0xB0A9 0xAC11 # HANGUL SYLLABLE KIYEOK-A-PIEUP
-0xB0AA 0xAC12 # HANGUL SYLLABLE KIYEOK-A-PIEUPSIOS
-0xB0AB 0xAC13 # HANGUL SYLLABLE KIYEOK-A-SIOS
-0xB0AC 0xAC14 # HANGUL SYLLABLE KIYEOK-A-SSANGSIOS
-0xB0AD 0xAC15 # HANGUL SYLLABLE KIYEOK-A-IEUNG
-0xB0AE 0xAC16 # HANGUL SYLLABLE KIYEOK-A-CIEUC
-0xB0AF 0xAC17 # HANGUL SYLLABLE KIYEOK-A-CHIEUCH
-0xB0B0 0xAC19 # HANGUL SYLLABLE KIYEOK-A-THIEUTH
-0xB0B1 0xAC1A # HANGUL SYLLABLE KIYEOK-A-PHIEUPH
-0xB0B2 0xAC1B # HANGUL SYLLABLE KIYEOK-A-HIEUH
-0xB0B3 0xAC1C # HANGUL SYLLABLE KIYEOK-AE
-0xB0B4 0xAC1D # HANGUL SYLLABLE KIYEOK-AE-KIYEOK
-0xB0B5 0xAC20 # HANGUL SYLLABLE KIYEOK-AE-NIEUN
-0xB0B6 0xAC24 # HANGUL SYLLABLE KIYEOK-AE-RIEUL
-0xB0B7 0xAC2C # HANGUL SYLLABLE KIYEOK-AE-MIEUM
-0xB0B8 0xAC2D # HANGUL SYLLABLE KIYEOK-AE-PIEUP
-0xB0B9 0xAC2F # HANGUL SYLLABLE KIYEOK-AE-SIOS
-0xB0BA 0xAC30 # HANGUL SYLLABLE KIYEOK-AE-SSANGSIOS
-0xB0BB 0xAC31 # HANGUL SYLLABLE KIYEOK-AE-IEUNG
-0xB0BC 0xAC38 # HANGUL SYLLABLE KIYEOK-YA
-0xB0BD 0xAC39 # HANGUL SYLLABLE KIYEOK-YA-KIYEOK
-0xB0BE 0xAC3C # HANGUL SYLLABLE KIYEOK-YA-NIEUN
-0xB0BF 0xAC40 # HANGUL SYLLABLE KIYEOK-YA-RIEUL
-0xB0C0 0xAC4B # HANGUL SYLLABLE KIYEOK-YA-SIOS
-0xB0C1 0xAC4D # HANGUL SYLLABLE KIYEOK-YA-IEUNG
-0xB0C2 0xAC54 # HANGUL SYLLABLE KIYEOK-YAE
-0xB0C3 0xAC58 # HANGUL SYLLABLE KIYEOK-YAE-NIEUN
-0xB0C4 0xAC5C # HANGUL SYLLABLE KIYEOK-YAE-RIEUL
-0xB0C5 0xAC70 # HANGUL SYLLABLE KIYEOK-EO
-0xB0C6 0xAC71 # HANGUL SYLLABLE KIYEOK-EO-KIYEOK
-0xB0C7 0xAC74 # HANGUL SYLLABLE KIYEOK-EO-NIEUN
-0xB0C8 0xAC77 # HANGUL SYLLABLE KIYEOK-EO-TIKEUT
-0xB0C9 0xAC78 # HANGUL SYLLABLE KIYEOK-EO-RIEUL
-0xB0CA 0xAC7A # HANGUL SYLLABLE KIYEOK-EO-RIEULMIEUM
-0xB0CB 0xAC80 # HANGUL SYLLABLE KIYEOK-EO-MIEUM
-0xB0CC 0xAC81 # HANGUL SYLLABLE KIYEOK-EO-PIEUP
-0xB0CD 0xAC83 # HANGUL SYLLABLE KIYEOK-EO-SIOS
-0xB0CE 0xAC84 # HANGUL SYLLABLE KIYEOK-EO-SSANGSIOS
-0xB0CF 0xAC85 # HANGUL SYLLABLE KIYEOK-EO-IEUNG
-0xB0D0 0xAC86 # HANGUL SYLLABLE KIYEOK-EO-CIEUC
-0xB0D1 0xAC89 # HANGUL SYLLABLE KIYEOK-EO-THIEUTH
-0xB0D2 0xAC8A # HANGUL SYLLABLE KIYEOK-EO-PHIEUPH
-0xB0D3 0xAC8B # HANGUL SYLLABLE KIYEOK-EO-HIEUH
-0xB0D4 0xAC8C # HANGUL SYLLABLE KIYEOK-E
-0xB0D5 0xAC90 # HANGUL SYLLABLE KIYEOK-E-NIEUN
-0xB0D6 0xAC94 # HANGUL SYLLABLE KIYEOK-E-RIEUL
-0xB0D7 0xAC9C # HANGUL SYLLABLE KIYEOK-E-MIEUM
-0xB0D8 0xAC9D # HANGUL SYLLABLE KIYEOK-E-PIEUP
-0xB0D9 0xAC9F # HANGUL SYLLABLE KIYEOK-E-SIOS
-0xB0DA 0xACA0 # HANGUL SYLLABLE KIYEOK-E-SSANGSIOS
-0xB0DB 0xACA1 # HANGUL SYLLABLE KIYEOK-E-IEUNG
-0xB0DC 0xACA8 # HANGUL SYLLABLE KIYEOK-YEO
-0xB0DD 0xACA9 # HANGUL SYLLABLE KIYEOK-YEO-KIYEOK
-0xB0DE 0xACAA # HANGUL SYLLABLE KIYEOK-YEO-SSANGKIYEOK
-0xB0DF 0xACAC # HANGUL SYLLABLE KIYEOK-YEO-NIEUN
-0xB0E0 0xACAF # HANGUL SYLLABLE KIYEOK-YEO-TIKEUT
-0xB0E1 0xACB0 # HANGUL SYLLABLE KIYEOK-YEO-RIEUL
-0xB0E2 0xACB8 # HANGUL SYLLABLE KIYEOK-YEO-MIEUM
-0xB0E3 0xACB9 # HANGUL SYLLABLE KIYEOK-YEO-PIEUP
-0xB0E4 0xACBB # HANGUL SYLLABLE KIYEOK-YEO-SIOS
-0xB0E5 0xACBC # HANGUL SYLLABLE KIYEOK-YEO-SSANGSIOS
-0xB0E6 0xACBD # HANGUL SYLLABLE KIYEOK-YEO-IEUNG
-0xB0E7 0xACC1 # HANGUL SYLLABLE KIYEOK-YEO-THIEUTH
-0xB0E8 0xACC4 # HANGUL SYLLABLE KIYEOK-YE
-0xB0E9 0xACC8 # HANGUL SYLLABLE KIYEOK-YE-NIEUN
-0xB0EA 0xACCC # HANGUL SYLLABLE KIYEOK-YE-RIEUL
-0xB0EB 0xACD5 # HANGUL SYLLABLE KIYEOK-YE-PIEUP
-0xB0EC 0xACD7 # HANGUL SYLLABLE KIYEOK-YE-SIOS
-0xB0ED 0xACE0 # HANGUL SYLLABLE KIYEOK-O
-0xB0EE 0xACE1 # HANGUL SYLLABLE KIYEOK-O-KIYEOK
-0xB0EF 0xACE4 # HANGUL SYLLABLE KIYEOK-O-NIEUN
-0xB0F0 0xACE7 # HANGUL SYLLABLE KIYEOK-O-TIKEUT
-0xB0F1 0xACE8 # HANGUL SYLLABLE KIYEOK-O-RIEUL
-0xB0F2 0xACEA # HANGUL SYLLABLE KIYEOK-O-RIEULMIEUM
-0xB0F3 0xACEC # HANGUL SYLLABLE KIYEOK-O-RIEULSIOS
-0xB0F4 0xACEF # HANGUL SYLLABLE KIYEOK-O-RIEULHIEUH
-0xB0F5 0xACF0 # HANGUL SYLLABLE KIYEOK-O-MIEUM
-0xB0F6 0xACF1 # HANGUL SYLLABLE KIYEOK-O-PIEUP
-0xB0F7 0xACF3 # HANGUL SYLLABLE KIYEOK-O-SIOS
-0xB0F8 0xACF5 # HANGUL SYLLABLE KIYEOK-O-IEUNG
-0xB0F9 0xACF6 # HANGUL SYLLABLE KIYEOK-O-CIEUC
-0xB0FA 0xACFC # HANGUL SYLLABLE KIYEOK-WA
-0xB0FB 0xACFD # HANGUL SYLLABLE KIYEOK-WA-KIYEOK
-0xB0FC 0xAD00 # HANGUL SYLLABLE KIYEOK-WA-NIEUN
-0xB0FD 0xAD04 # HANGUL SYLLABLE KIYEOK-WA-RIEUL
-0xB0FE 0xAD06 # HANGUL SYLLABLE KIYEOK-WA-RIEULMIEUM
-0xB141 0xCF02 # HANGUL SYLLABLE KHIEUKH-E-SSANGKIYEOK
-0xB142 0xCF03 # HANGUL SYLLABLE KHIEUKH-E-KIYEOKSIOS
-0xB143 0xCF05 # HANGUL SYLLABLE KHIEUKH-E-NIEUNCIEUC
-0xB144 0xCF06 # HANGUL SYLLABLE KHIEUKH-E-NIEUNHIEUH
-0xB145 0xCF07 # HANGUL SYLLABLE KHIEUKH-E-TIKEUT
-0xB146 0xCF09 # HANGUL SYLLABLE KHIEUKH-E-RIEULKIYEOK
-0xB147 0xCF0A # HANGUL SYLLABLE KHIEUKH-E-RIEULMIEUM
-0xB148 0xCF0B # HANGUL SYLLABLE KHIEUKH-E-RIEULPIEUP
-0xB149 0xCF0C # HANGUL SYLLABLE KHIEUKH-E-RIEULSIOS
-0xB14A 0xCF0D # HANGUL SYLLABLE KHIEUKH-E-RIEULTHIEUTH
-0xB14B 0xCF0E # HANGUL SYLLABLE KHIEUKH-E-RIEULPHIEUPH
-0xB14C 0xCF0F # HANGUL SYLLABLE KHIEUKH-E-RIEULHIEUH
-0xB14D 0xCF12 # HANGUL SYLLABLE KHIEUKH-E-PIEUPSIOS
-0xB14E 0xCF14 # HANGUL SYLLABLE KHIEUKH-E-SSANGSIOS
-0xB14F 0xCF16 # HANGUL SYLLABLE KHIEUKH-E-CIEUC
-0xB150 0xCF17 # HANGUL SYLLABLE KHIEUKH-E-CHIEUCH
-0xB151 0xCF18 # HANGUL SYLLABLE KHIEUKH-E-KHIEUKH
-0xB152 0xCF19 # HANGUL SYLLABLE KHIEUKH-E-THIEUTH
-0xB153 0xCF1A # HANGUL SYLLABLE KHIEUKH-E-PHIEUPH
-0xB154 0xCF1B # HANGUL SYLLABLE KHIEUKH-E-HIEUH
-0xB155 0xCF1D # HANGUL SYLLABLE KHIEUKH-YEO-KIYEOK
-0xB156 0xCF1E # HANGUL SYLLABLE KHIEUKH-YEO-SSANGKIYEOK
-0xB157 0xCF1F # HANGUL SYLLABLE KHIEUKH-YEO-KIYEOKSIOS
-0xB158 0xCF21 # HANGUL SYLLABLE KHIEUKH-YEO-NIEUNCIEUC
-0xB159 0xCF22 # HANGUL SYLLABLE KHIEUKH-YEO-NIEUNHIEUH
-0xB15A 0xCF23 # HANGUL SYLLABLE KHIEUKH-YEO-TIKEUT
-0xB161 0xCF25 # HANGUL SYLLABLE KHIEUKH-YEO-RIEULKIYEOK
-0xB162 0xCF26 # HANGUL SYLLABLE KHIEUKH-YEO-RIEULMIEUM
-0xB163 0xCF27 # HANGUL SYLLABLE KHIEUKH-YEO-RIEULPIEUP
-0xB164 0xCF28 # HANGUL SYLLABLE KHIEUKH-YEO-RIEULSIOS
-0xB165 0xCF29 # HANGUL SYLLABLE KHIEUKH-YEO-RIEULTHIEUTH
-0xB166 0xCF2A # HANGUL SYLLABLE KHIEUKH-YEO-RIEULPHIEUPH
-0xB167 0xCF2B # HANGUL SYLLABLE KHIEUKH-YEO-RIEULHIEUH
-0xB168 0xCF2E # HANGUL SYLLABLE KHIEUKH-YEO-PIEUPSIOS
-0xB169 0xCF32 # HANGUL SYLLABLE KHIEUKH-YEO-CIEUC
-0xB16A 0xCF33 # HANGUL SYLLABLE KHIEUKH-YEO-CHIEUCH
-0xB16B 0xCF34 # HANGUL SYLLABLE KHIEUKH-YEO-KHIEUKH
-0xB16C 0xCF35 # HANGUL SYLLABLE KHIEUKH-YEO-THIEUTH
-0xB16D 0xCF36 # HANGUL SYLLABLE KHIEUKH-YEO-PHIEUPH
-0xB16E 0xCF37 # HANGUL SYLLABLE KHIEUKH-YEO-HIEUH
-0xB16F 0xCF39 # HANGUL SYLLABLE KHIEUKH-YE-KIYEOK
-0xB170 0xCF3A # HANGUL SYLLABLE KHIEUKH-YE-SSANGKIYEOK
-0xB171 0xCF3B # HANGUL SYLLABLE KHIEUKH-YE-KIYEOKSIOS
-0xB172 0xCF3C # HANGUL SYLLABLE KHIEUKH-YE-NIEUN
-0xB173 0xCF3D # HANGUL SYLLABLE KHIEUKH-YE-NIEUNCIEUC
-0xB174 0xCF3E # HANGUL SYLLABLE KHIEUKH-YE-NIEUNHIEUH
-0xB175 0xCF3F # HANGUL SYLLABLE KHIEUKH-YE-TIKEUT
-0xB176 0xCF40 # HANGUL SYLLABLE KHIEUKH-YE-RIEUL
-0xB177 0xCF41 # HANGUL SYLLABLE KHIEUKH-YE-RIEULKIYEOK
-0xB178 0xCF42 # HANGUL SYLLABLE KHIEUKH-YE-RIEULMIEUM
-0xB179 0xCF43 # HANGUL SYLLABLE KHIEUKH-YE-RIEULPIEUP
-0xB17A 0xCF44 # HANGUL SYLLABLE KHIEUKH-YE-RIEULSIOS
-0xB181 0xCF45 # HANGUL SYLLABLE KHIEUKH-YE-RIEULTHIEUTH
-0xB182 0xCF46 # HANGUL SYLLABLE KHIEUKH-YE-RIEULPHIEUPH
-0xB183 0xCF47 # HANGUL SYLLABLE KHIEUKH-YE-RIEULHIEUH
-0xB184 0xCF48 # HANGUL SYLLABLE KHIEUKH-YE-MIEUM
-0xB185 0xCF49 # HANGUL SYLLABLE KHIEUKH-YE-PIEUP
-0xB186 0xCF4A # HANGUL SYLLABLE KHIEUKH-YE-PIEUPSIOS
-0xB187 0xCF4B # HANGUL SYLLABLE KHIEUKH-YE-SIOS
-0xB188 0xCF4C # HANGUL SYLLABLE KHIEUKH-YE-SSANGSIOS
-0xB189 0xCF4D # HANGUL SYLLABLE KHIEUKH-YE-IEUNG
-0xB18A 0xCF4E # HANGUL SYLLABLE KHIEUKH-YE-CIEUC
-0xB18B 0xCF4F # HANGUL SYLLABLE KHIEUKH-YE-CHIEUCH
-0xB18C 0xCF50 # HANGUL SYLLABLE KHIEUKH-YE-KHIEUKH
-0xB18D 0xCF51 # HANGUL SYLLABLE KHIEUKH-YE-THIEUTH
-0xB18E 0xCF52 # HANGUL SYLLABLE KHIEUKH-YE-PHIEUPH
-0xB18F 0xCF53 # HANGUL SYLLABLE KHIEUKH-YE-HIEUH
-0xB190 0xCF56 # HANGUL SYLLABLE KHIEUKH-O-SSANGKIYEOK
-0xB191 0xCF57 # HANGUL SYLLABLE KHIEUKH-O-KIYEOKSIOS
-0xB192 0xCF59 # HANGUL SYLLABLE KHIEUKH-O-NIEUNCIEUC
-0xB193 0xCF5A # HANGUL SYLLABLE KHIEUKH-O-NIEUNHIEUH
-0xB194 0xCF5B # HANGUL SYLLABLE KHIEUKH-O-TIKEUT
-0xB195 0xCF5D # HANGUL SYLLABLE KHIEUKH-O-RIEULKIYEOK
-0xB196 0xCF5E # HANGUL SYLLABLE KHIEUKH-O-RIEULMIEUM
-0xB197 0xCF5F # HANGUL SYLLABLE KHIEUKH-O-RIEULPIEUP
-0xB198 0xCF60 # HANGUL SYLLABLE KHIEUKH-O-RIEULSIOS
-0xB199 0xCF61 # HANGUL SYLLABLE KHIEUKH-O-RIEULTHIEUTH
-0xB19A 0xCF62 # HANGUL SYLLABLE KHIEUKH-O-RIEULPHIEUPH
-0xB19B 0xCF63 # HANGUL SYLLABLE KHIEUKH-O-RIEULHIEUH
-0xB19C 0xCF66 # HANGUL SYLLABLE KHIEUKH-O-PIEUPSIOS
-0xB19D 0xCF68 # HANGUL SYLLABLE KHIEUKH-O-SSANGSIOS
-0xB19E 0xCF6A # HANGUL SYLLABLE KHIEUKH-O-CIEUC
-0xB19F 0xCF6B # HANGUL SYLLABLE KHIEUKH-O-CHIEUCH
-0xB1A0 0xCF6C # HANGUL SYLLABLE KHIEUKH-O-KHIEUKH
-0xB1A1 0xAD0C # HANGUL SYLLABLE KIYEOK-WA-MIEUM
-0xB1A2 0xAD0D # HANGUL SYLLABLE KIYEOK-WA-PIEUP
-0xB1A3 0xAD0F # HANGUL SYLLABLE KIYEOK-WA-SIOS
-0xB1A4 0xAD11 # HANGUL SYLLABLE KIYEOK-WA-IEUNG
-0xB1A5 0xAD18 # HANGUL SYLLABLE KIYEOK-WAE
-0xB1A6 0xAD1C # HANGUL SYLLABLE KIYEOK-WAE-NIEUN
-0xB1A7 0xAD20 # HANGUL SYLLABLE KIYEOK-WAE-RIEUL
-0xB1A8 0xAD29 # HANGUL SYLLABLE KIYEOK-WAE-PIEUP
-0xB1A9 0xAD2C # HANGUL SYLLABLE KIYEOK-WAE-SSANGSIOS
-0xB1AA 0xAD2D # HANGUL SYLLABLE KIYEOK-WAE-IEUNG
-0xB1AB 0xAD34 # HANGUL SYLLABLE KIYEOK-OE
-0xB1AC 0xAD35 # HANGUL SYLLABLE KIYEOK-OE-KIYEOK
-0xB1AD 0xAD38 # HANGUL SYLLABLE KIYEOK-OE-NIEUN
-0xB1AE 0xAD3C # HANGUL SYLLABLE KIYEOK-OE-RIEUL
-0xB1AF 0xAD44 # HANGUL SYLLABLE KIYEOK-OE-MIEUM
-0xB1B0 0xAD45 # HANGUL SYLLABLE KIYEOK-OE-PIEUP
-0xB1B1 0xAD47 # HANGUL SYLLABLE KIYEOK-OE-SIOS
-0xB1B2 0xAD49 # HANGUL SYLLABLE KIYEOK-OE-IEUNG
-0xB1B3 0xAD50 # HANGUL SYLLABLE KIYEOK-YO
-0xB1B4 0xAD54 # HANGUL SYLLABLE KIYEOK-YO-NIEUN
-0xB1B5 0xAD58 # HANGUL SYLLABLE KIYEOK-YO-RIEUL
-0xB1B6 0xAD61 # HANGUL SYLLABLE KIYEOK-YO-PIEUP
-0xB1B7 0xAD63 # HANGUL SYLLABLE KIYEOK-YO-SIOS
-0xB1B8 0xAD6C # HANGUL SYLLABLE KIYEOK-U
-0xB1B9 0xAD6D # HANGUL SYLLABLE KIYEOK-U-KIYEOK
-0xB1BA 0xAD70 # HANGUL SYLLABLE KIYEOK-U-NIEUN
-0xB1BB 0xAD73 # HANGUL SYLLABLE KIYEOK-U-TIKEUT
-0xB1BC 0xAD74 # HANGUL SYLLABLE KIYEOK-U-RIEUL
-0xB1BD 0xAD75 # HANGUL SYLLABLE KIYEOK-U-RIEULKIYEOK
-0xB1BE 0xAD76 # HANGUL SYLLABLE KIYEOK-U-RIEULMIEUM
-0xB1BF 0xAD7B # HANGUL SYLLABLE KIYEOK-U-RIEULHIEUH
-0xB1C0 0xAD7C # HANGUL SYLLABLE KIYEOK-U-MIEUM
-0xB1C1 0xAD7D # HANGUL SYLLABLE KIYEOK-U-PIEUP
-0xB1C2 0xAD7F # HANGUL SYLLABLE KIYEOK-U-SIOS
-0xB1C3 0xAD81 # HANGUL SYLLABLE KIYEOK-U-IEUNG
-0xB1C4 0xAD82 # HANGUL SYLLABLE KIYEOK-U-CIEUC
-0xB1C5 0xAD88 # HANGUL SYLLABLE KIYEOK-WEO
-0xB1C6 0xAD89 # HANGUL SYLLABLE KIYEOK-WEO-KIYEOK
-0xB1C7 0xAD8C # HANGUL SYLLABLE KIYEOK-WEO-NIEUN
-0xB1C8 0xAD90 # HANGUL SYLLABLE KIYEOK-WEO-RIEUL
-0xB1C9 0xAD9C # HANGUL SYLLABLE KIYEOK-WEO-SSANGSIOS
-0xB1CA 0xAD9D # HANGUL SYLLABLE KIYEOK-WEO-IEUNG
-0xB1CB 0xADA4 # HANGUL SYLLABLE KIYEOK-WE
-0xB1CC 0xADB7 # HANGUL SYLLABLE KIYEOK-WE-SIOS
-0xB1CD 0xADC0 # HANGUL SYLLABLE KIYEOK-WI
-0xB1CE 0xADC1 # HANGUL SYLLABLE KIYEOK-WI-KIYEOK
-0xB1CF 0xADC4 # HANGUL SYLLABLE KIYEOK-WI-NIEUN
-0xB1D0 0xADC8 # HANGUL SYLLABLE KIYEOK-WI-RIEUL
-0xB1D1 0xADD0 # HANGUL SYLLABLE KIYEOK-WI-MIEUM
-0xB1D2 0xADD1 # HANGUL SYLLABLE KIYEOK-WI-PIEUP
-0xB1D3 0xADD3 # HANGUL SYLLABLE KIYEOK-WI-SIOS
-0xB1D4 0xADDC # HANGUL SYLLABLE KIYEOK-YU
-0xB1D5 0xADE0 # HANGUL SYLLABLE KIYEOK-YU-NIEUN
-0xB1D6 0xADE4 # HANGUL SYLLABLE KIYEOK-YU-RIEUL
-0xB1D7 0xADF8 # HANGUL SYLLABLE KIYEOK-EU
-0xB1D8 0xADF9 # HANGUL SYLLABLE KIYEOK-EU-KIYEOK
-0xB1D9 0xADFC # HANGUL SYLLABLE KIYEOK-EU-NIEUN
-0xB1DA 0xADFF # HANGUL SYLLABLE KIYEOK-EU-TIKEUT
-0xB1DB 0xAE00 # HANGUL SYLLABLE KIYEOK-EU-RIEUL
-0xB1DC 0xAE01 # HANGUL SYLLABLE KIYEOK-EU-RIEULKIYEOK
-0xB1DD 0xAE08 # HANGUL SYLLABLE KIYEOK-EU-MIEUM
-0xB1DE 0xAE09 # HANGUL SYLLABLE KIYEOK-EU-PIEUP
-0xB1DF 0xAE0B # HANGUL SYLLABLE KIYEOK-EU-SIOS
-0xB1E0 0xAE0D # HANGUL SYLLABLE KIYEOK-EU-IEUNG
-0xB1E1 0xAE14 # HANGUL SYLLABLE KIYEOK-YI
-0xB1E2 0xAE30 # HANGUL SYLLABLE KIYEOK-I
-0xB1E3 0xAE31 # HANGUL SYLLABLE KIYEOK-I-KIYEOK
-0xB1E4 0xAE34 # HANGUL SYLLABLE KIYEOK-I-NIEUN
-0xB1E5 0xAE37 # HANGUL SYLLABLE KIYEOK-I-TIKEUT
-0xB1E6 0xAE38 # HANGUL SYLLABLE KIYEOK-I-RIEUL
-0xB1E7 0xAE3A # HANGUL SYLLABLE KIYEOK-I-RIEULMIEUM
-0xB1E8 0xAE40 # HANGUL SYLLABLE KIYEOK-I-MIEUM
-0xB1E9 0xAE41 # HANGUL SYLLABLE KIYEOK-I-PIEUP
-0xB1EA 0xAE43 # HANGUL SYLLABLE KIYEOK-I-SIOS
-0xB1EB 0xAE45 # HANGUL SYLLABLE KIYEOK-I-IEUNG
-0xB1EC 0xAE46 # HANGUL SYLLABLE KIYEOK-I-CIEUC
-0xB1ED 0xAE4A # HANGUL SYLLABLE KIYEOK-I-PHIEUPH
-0xB1EE 0xAE4C # HANGUL SYLLABLE SSANGKIYEOK-A
-0xB1EF 0xAE4D # HANGUL SYLLABLE SSANGKIYEOK-A-KIYEOK
-0xB1F0 0xAE4E # HANGUL SYLLABLE SSANGKIYEOK-A-SSANGKIYEOK
-0xB1F1 0xAE50 # HANGUL SYLLABLE SSANGKIYEOK-A-NIEUN
-0xB1F2 0xAE54 # HANGUL SYLLABLE SSANGKIYEOK-A-RIEUL
-0xB1F3 0xAE56 # HANGUL SYLLABLE SSANGKIYEOK-A-RIEULMIEUM
-0xB1F4 0xAE5C # HANGUL SYLLABLE SSANGKIYEOK-A-MIEUM
-0xB1F5 0xAE5D # HANGUL SYLLABLE SSANGKIYEOK-A-PIEUP
-0xB1F6 0xAE5F # HANGUL SYLLABLE SSANGKIYEOK-A-SIOS
-0xB1F7 0xAE60 # HANGUL SYLLABLE SSANGKIYEOK-A-SSANGSIOS
-0xB1F8 0xAE61 # HANGUL SYLLABLE SSANGKIYEOK-A-IEUNG
-0xB1F9 0xAE65 # HANGUL SYLLABLE SSANGKIYEOK-A-THIEUTH
-0xB1FA 0xAE68 # HANGUL SYLLABLE SSANGKIYEOK-AE
-0xB1FB 0xAE69 # HANGUL SYLLABLE SSANGKIYEOK-AE-KIYEOK
-0xB1FC 0xAE6C # HANGUL SYLLABLE SSANGKIYEOK-AE-NIEUN
-0xB1FD 0xAE70 # HANGUL SYLLABLE SSANGKIYEOK-AE-RIEUL
-0xB1FE 0xAE78 # HANGUL SYLLABLE SSANGKIYEOK-AE-MIEUM
-0xB241 0xCF6D # HANGUL SYLLABLE KHIEUKH-O-THIEUTH
-0xB242 0xCF6E # HANGUL SYLLABLE KHIEUKH-O-PHIEUPH
-0xB243 0xCF6F # HANGUL SYLLABLE KHIEUKH-O-HIEUH
-0xB244 0xCF72 # HANGUL SYLLABLE KHIEUKH-WA-SSANGKIYEOK
-0xB245 0xCF73 # HANGUL SYLLABLE KHIEUKH-WA-KIYEOKSIOS
-0xB246 0xCF75 # HANGUL SYLLABLE KHIEUKH-WA-NIEUNCIEUC
-0xB247 0xCF76 # HANGUL SYLLABLE KHIEUKH-WA-NIEUNHIEUH
-0xB248 0xCF77 # HANGUL SYLLABLE KHIEUKH-WA-TIKEUT
-0xB249 0xCF79 # HANGUL SYLLABLE KHIEUKH-WA-RIEULKIYEOK
-0xB24A 0xCF7A # HANGUL SYLLABLE KHIEUKH-WA-RIEULMIEUM
-0xB24B 0xCF7B # HANGUL SYLLABLE KHIEUKH-WA-RIEULPIEUP
-0xB24C 0xCF7C # HANGUL SYLLABLE KHIEUKH-WA-RIEULSIOS
-0xB24D 0xCF7D # HANGUL SYLLABLE KHIEUKH-WA-RIEULTHIEUTH
-0xB24E 0xCF7E # HANGUL SYLLABLE KHIEUKH-WA-RIEULPHIEUPH
-0xB24F 0xCF7F # HANGUL SYLLABLE KHIEUKH-WA-RIEULHIEUH
-0xB250 0xCF81 # HANGUL SYLLABLE KHIEUKH-WA-PIEUP
-0xB251 0xCF82 # HANGUL SYLLABLE KHIEUKH-WA-PIEUPSIOS
-0xB252 0xCF83 # HANGUL SYLLABLE KHIEUKH-WA-SIOS
-0xB253 0xCF84 # HANGUL SYLLABLE KHIEUKH-WA-SSANGSIOS
-0xB254 0xCF86 # HANGUL SYLLABLE KHIEUKH-WA-CIEUC
-0xB255 0xCF87 # HANGUL SYLLABLE KHIEUKH-WA-CHIEUCH
-0xB256 0xCF88 # HANGUL SYLLABLE KHIEUKH-WA-KHIEUKH
-0xB257 0xCF89 # HANGUL SYLLABLE KHIEUKH-WA-THIEUTH
-0xB258 0xCF8A # HANGUL SYLLABLE KHIEUKH-WA-PHIEUPH
-0xB259 0xCF8B # HANGUL SYLLABLE KHIEUKH-WA-HIEUH
-0xB25A 0xCF8D # HANGUL SYLLABLE KHIEUKH-WAE-KIYEOK
-0xB261 0xCF8E # HANGUL SYLLABLE KHIEUKH-WAE-SSANGKIYEOK
-0xB262 0xCF8F # HANGUL SYLLABLE KHIEUKH-WAE-KIYEOKSIOS
-0xB263 0xCF90 # HANGUL SYLLABLE KHIEUKH-WAE-NIEUN
-0xB264 0xCF91 # HANGUL SYLLABLE KHIEUKH-WAE-NIEUNCIEUC
-0xB265 0xCF92 # HANGUL SYLLABLE KHIEUKH-WAE-NIEUNHIEUH
-0xB266 0xCF93 # HANGUL SYLLABLE KHIEUKH-WAE-TIKEUT
-0xB267 0xCF94 # HANGUL SYLLABLE KHIEUKH-WAE-RIEUL
-0xB268 0xCF95 # HANGUL SYLLABLE KHIEUKH-WAE-RIEULKIYEOK
-0xB269 0xCF96 # HANGUL SYLLABLE KHIEUKH-WAE-RIEULMIEUM
-0xB26A 0xCF97 # HANGUL SYLLABLE KHIEUKH-WAE-RIEULPIEUP
-0xB26B 0xCF98 # HANGUL SYLLABLE KHIEUKH-WAE-RIEULSIOS
-0xB26C 0xCF99 # HANGUL SYLLABLE KHIEUKH-WAE-RIEULTHIEUTH
-0xB26D 0xCF9A # HANGUL SYLLABLE KHIEUKH-WAE-RIEULPHIEUPH
-0xB26E 0xCF9B # HANGUL SYLLABLE KHIEUKH-WAE-RIEULHIEUH
-0xB26F 0xCF9C # HANGUL SYLLABLE KHIEUKH-WAE-MIEUM
-0xB270 0xCF9D # HANGUL SYLLABLE KHIEUKH-WAE-PIEUP
-0xB271 0xCF9E # HANGUL SYLLABLE KHIEUKH-WAE-PIEUPSIOS
-0xB272 0xCF9F # HANGUL SYLLABLE KHIEUKH-WAE-SIOS
-0xB273 0xCFA0 # HANGUL SYLLABLE KHIEUKH-WAE-SSANGSIOS
-0xB274 0xCFA2 # HANGUL SYLLABLE KHIEUKH-WAE-CIEUC
-0xB275 0xCFA3 # HANGUL SYLLABLE KHIEUKH-WAE-CHIEUCH
-0xB276 0xCFA4 # HANGUL SYLLABLE KHIEUKH-WAE-KHIEUKH
-0xB277 0xCFA5 # HANGUL SYLLABLE KHIEUKH-WAE-THIEUTH
-0xB278 0xCFA6 # HANGUL SYLLABLE KHIEUKH-WAE-PHIEUPH
-0xB279 0xCFA7 # HANGUL SYLLABLE KHIEUKH-WAE-HIEUH
-0xB27A 0xCFA9 # HANGUL SYLLABLE KHIEUKH-OE-KIYEOK
-0xB281 0xCFAA # HANGUL SYLLABLE KHIEUKH-OE-SSANGKIYEOK
-0xB282 0xCFAB # HANGUL SYLLABLE KHIEUKH-OE-KIYEOKSIOS
-0xB283 0xCFAC # HANGUL SYLLABLE KHIEUKH-OE-NIEUN
-0xB284 0xCFAD # HANGUL SYLLABLE KHIEUKH-OE-NIEUNCIEUC
-0xB285 0xCFAE # HANGUL SYLLABLE KHIEUKH-OE-NIEUNHIEUH
-0xB286 0xCFAF # HANGUL SYLLABLE KHIEUKH-OE-TIKEUT
-0xB287 0xCFB1 # HANGUL SYLLABLE KHIEUKH-OE-RIEULKIYEOK
-0xB288 0xCFB2 # HANGUL SYLLABLE KHIEUKH-OE-RIEULMIEUM
-0xB289 0xCFB3 # HANGUL SYLLABLE KHIEUKH-OE-RIEULPIEUP
-0xB28A 0xCFB4 # HANGUL SYLLABLE KHIEUKH-OE-RIEULSIOS
-0xB28B 0xCFB5 # HANGUL SYLLABLE KHIEUKH-OE-RIEULTHIEUTH
-0xB28C 0xCFB6 # HANGUL SYLLABLE KHIEUKH-OE-RIEULPHIEUPH
-0xB28D 0xCFB7 # HANGUL SYLLABLE KHIEUKH-OE-RIEULHIEUH
-0xB28E 0xCFB8 # HANGUL SYLLABLE KHIEUKH-OE-MIEUM
-0xB28F 0xCFB9 # HANGUL SYLLABLE KHIEUKH-OE-PIEUP
-0xB290 0xCFBA # HANGUL SYLLABLE KHIEUKH-OE-PIEUPSIOS
-0xB291 0xCFBB # HANGUL SYLLABLE KHIEUKH-OE-SIOS
-0xB292 0xCFBC # HANGUL SYLLABLE KHIEUKH-OE-SSANGSIOS
-0xB293 0xCFBD # HANGUL SYLLABLE KHIEUKH-OE-IEUNG
-0xB294 0xCFBE # HANGUL SYLLABLE KHIEUKH-OE-CIEUC
-0xB295 0xCFBF # HANGUL SYLLABLE KHIEUKH-OE-CHIEUCH
-0xB296 0xCFC0 # HANGUL SYLLABLE KHIEUKH-OE-KHIEUKH
-0xB297 0xCFC1 # HANGUL SYLLABLE KHIEUKH-OE-THIEUTH
-0xB298 0xCFC2 # HANGUL SYLLABLE KHIEUKH-OE-PHIEUPH
-0xB299 0xCFC3 # HANGUL SYLLABLE KHIEUKH-OE-HIEUH
-0xB29A 0xCFC5 # HANGUL SYLLABLE KHIEUKH-YO-KIYEOK
-0xB29B 0xCFC6 # HANGUL SYLLABLE KHIEUKH-YO-SSANGKIYEOK
-0xB29C 0xCFC7 # HANGUL SYLLABLE KHIEUKH-YO-KIYEOKSIOS
-0xB29D 0xCFC8 # HANGUL SYLLABLE KHIEUKH-YO-NIEUN
-0xB29E 0xCFC9 # HANGUL SYLLABLE KHIEUKH-YO-NIEUNCIEUC
-0xB29F 0xCFCA # HANGUL SYLLABLE KHIEUKH-YO-NIEUNHIEUH
-0xB2A0 0xCFCB # HANGUL SYLLABLE KHIEUKH-YO-TIKEUT
-0xB2A1 0xAE79 # HANGUL SYLLABLE SSANGKIYEOK-AE-PIEUP
-0xB2A2 0xAE7B # HANGUL SYLLABLE SSANGKIYEOK-AE-SIOS
-0xB2A3 0xAE7C # HANGUL SYLLABLE SSANGKIYEOK-AE-SSANGSIOS
-0xB2A4 0xAE7D # HANGUL SYLLABLE SSANGKIYEOK-AE-IEUNG
-0xB2A5 0xAE84 # HANGUL SYLLABLE SSANGKIYEOK-YA
-0xB2A6 0xAE85 # HANGUL SYLLABLE SSANGKIYEOK-YA-KIYEOK
-0xB2A7 0xAE8C # HANGUL SYLLABLE SSANGKIYEOK-YA-RIEUL
-0xB2A8 0xAEBC # HANGUL SYLLABLE SSANGKIYEOK-EO
-0xB2A9 0xAEBD # HANGUL SYLLABLE SSANGKIYEOK-EO-KIYEOK
-0xB2AA 0xAEBE # HANGUL SYLLABLE SSANGKIYEOK-EO-SSANGKIYEOK
-0xB2AB 0xAEC0 # HANGUL SYLLABLE SSANGKIYEOK-EO-NIEUN
-0xB2AC 0xAEC4 # HANGUL SYLLABLE SSANGKIYEOK-EO-RIEUL
-0xB2AD 0xAECC # HANGUL SYLLABLE SSANGKIYEOK-EO-MIEUM
-0xB2AE 0xAECD # HANGUL SYLLABLE SSANGKIYEOK-EO-PIEUP
-0xB2AF 0xAECF # HANGUL SYLLABLE SSANGKIYEOK-EO-SIOS
-0xB2B0 0xAED0 # HANGUL SYLLABLE SSANGKIYEOK-EO-SSANGSIOS
-0xB2B1 0xAED1 # HANGUL SYLLABLE SSANGKIYEOK-EO-IEUNG
-0xB2B2 0xAED8 # HANGUL SYLLABLE SSANGKIYEOK-E
-0xB2B3 0xAED9 # HANGUL SYLLABLE SSANGKIYEOK-E-KIYEOK
-0xB2B4 0xAEDC # HANGUL SYLLABLE SSANGKIYEOK-E-NIEUN
-0xB2B5 0xAEE8 # HANGUL SYLLABLE SSANGKIYEOK-E-MIEUM
-0xB2B6 0xAEEB # HANGUL SYLLABLE SSANGKIYEOK-E-SIOS
-0xB2B7 0xAEED # HANGUL SYLLABLE SSANGKIYEOK-E-IEUNG
-0xB2B8 0xAEF4 # HANGUL SYLLABLE SSANGKIYEOK-YEO
-0xB2B9 0xAEF8 # HANGUL SYLLABLE SSANGKIYEOK-YEO-NIEUN
-0xB2BA 0xAEFC # HANGUL SYLLABLE SSANGKIYEOK-YEO-RIEUL
-0xB2BB 0xAF07 # HANGUL SYLLABLE SSANGKIYEOK-YEO-SIOS
-0xB2BC 0xAF08 # HANGUL SYLLABLE SSANGKIYEOK-YEO-SSANGSIOS
-0xB2BD 0xAF0D # HANGUL SYLLABLE SSANGKIYEOK-YEO-THIEUTH
-0xB2BE 0xAF10 # HANGUL SYLLABLE SSANGKIYEOK-YE
-0xB2BF 0xAF2C # HANGUL SYLLABLE SSANGKIYEOK-O
-0xB2C0 0xAF2D # HANGUL SYLLABLE SSANGKIYEOK-O-KIYEOK
-0xB2C1 0xAF30 # HANGUL SYLLABLE SSANGKIYEOK-O-NIEUN
-0xB2C2 0xAF32 # HANGUL SYLLABLE SSANGKIYEOK-O-NIEUNHIEUH
-0xB2C3 0xAF34 # HANGUL SYLLABLE SSANGKIYEOK-O-RIEUL
-0xB2C4 0xAF3C # HANGUL SYLLABLE SSANGKIYEOK-O-MIEUM
-0xB2C5 0xAF3D # HANGUL SYLLABLE SSANGKIYEOK-O-PIEUP
-0xB2C6 0xAF3F # HANGUL SYLLABLE SSANGKIYEOK-O-SIOS
-0xB2C7 0xAF41 # HANGUL SYLLABLE SSANGKIYEOK-O-IEUNG
-0xB2C8 0xAF42 # HANGUL SYLLABLE SSANGKIYEOK-O-CIEUC
-0xB2C9 0xAF43 # HANGUL SYLLABLE SSANGKIYEOK-O-CHIEUCH
-0xB2CA 0xAF48 # HANGUL SYLLABLE SSANGKIYEOK-WA
-0xB2CB 0xAF49 # HANGUL SYLLABLE SSANGKIYEOK-WA-KIYEOK
-0xB2CC 0xAF50 # HANGUL SYLLABLE SSANGKIYEOK-WA-RIEUL
-0xB2CD 0xAF5C # HANGUL SYLLABLE SSANGKIYEOK-WA-SSANGSIOS
-0xB2CE 0xAF5D # HANGUL SYLLABLE SSANGKIYEOK-WA-IEUNG
-0xB2CF 0xAF64 # HANGUL SYLLABLE SSANGKIYEOK-WAE
-0xB2D0 0xAF65 # HANGUL SYLLABLE SSANGKIYEOK-WAE-KIYEOK
-0xB2D1 0xAF79 # HANGUL SYLLABLE SSANGKIYEOK-WAE-IEUNG
-0xB2D2 0xAF80 # HANGUL SYLLABLE SSANGKIYEOK-OE
-0xB2D3 0xAF84 # HANGUL SYLLABLE SSANGKIYEOK-OE-NIEUN
-0xB2D4 0xAF88 # HANGUL SYLLABLE SSANGKIYEOK-OE-RIEUL
-0xB2D5 0xAF90 # HANGUL SYLLABLE SSANGKIYEOK-OE-MIEUM
-0xB2D6 0xAF91 # HANGUL SYLLABLE SSANGKIYEOK-OE-PIEUP
-0xB2D7 0xAF95 # HANGUL SYLLABLE SSANGKIYEOK-OE-IEUNG
-0xB2D8 0xAF9C # HANGUL SYLLABLE SSANGKIYEOK-YO
-0xB2D9 0xAFB8 # HANGUL SYLLABLE SSANGKIYEOK-U
-0xB2DA 0xAFB9 # HANGUL SYLLABLE SSANGKIYEOK-U-KIYEOK
-0xB2DB 0xAFBC # HANGUL SYLLABLE SSANGKIYEOK-U-NIEUN
-0xB2DC 0xAFC0 # HANGUL SYLLABLE SSANGKIYEOK-U-RIEUL
-0xB2DD 0xAFC7 # HANGUL SYLLABLE SSANGKIYEOK-U-RIEULHIEUH
-0xB2DE 0xAFC8 # HANGUL SYLLABLE SSANGKIYEOK-U-MIEUM
-0xB2DF 0xAFC9 # HANGUL SYLLABLE SSANGKIYEOK-U-PIEUP
-0xB2E0 0xAFCB # HANGUL SYLLABLE SSANGKIYEOK-U-SIOS
-0xB2E1 0xAFCD # HANGUL SYLLABLE SSANGKIYEOK-U-IEUNG
-0xB2E2 0xAFCE # HANGUL SYLLABLE SSANGKIYEOK-U-CIEUC
-0xB2E3 0xAFD4 # HANGUL SYLLABLE SSANGKIYEOK-WEO
-0xB2E4 0xAFDC # HANGUL SYLLABLE SSANGKIYEOK-WEO-RIEUL
-0xB2E5 0xAFE8 # HANGUL SYLLABLE SSANGKIYEOK-WEO-SSANGSIOS
-0xB2E6 0xAFE9 # HANGUL SYLLABLE SSANGKIYEOK-WEO-IEUNG
-0xB2E7 0xAFF0 # HANGUL SYLLABLE SSANGKIYEOK-WE
-0xB2E8 0xAFF1 # HANGUL SYLLABLE SSANGKIYEOK-WE-KIYEOK
-0xB2E9 0xAFF4 # HANGUL SYLLABLE SSANGKIYEOK-WE-NIEUN
-0xB2EA 0xAFF8 # HANGUL SYLLABLE SSANGKIYEOK-WE-RIEUL
-0xB2EB 0xB000 # HANGUL SYLLABLE SSANGKIYEOK-WE-MIEUM
-0xB2EC 0xB001 # HANGUL SYLLABLE SSANGKIYEOK-WE-PIEUP
-0xB2ED 0xB004 # HANGUL SYLLABLE SSANGKIYEOK-WE-SSANGSIOS
-0xB2EE 0xB00C # HANGUL SYLLABLE SSANGKIYEOK-WI
-0xB2EF 0xB010 # HANGUL SYLLABLE SSANGKIYEOK-WI-NIEUN
-0xB2F0 0xB014 # HANGUL SYLLABLE SSANGKIYEOK-WI-RIEUL
-0xB2F1 0xB01C # HANGUL SYLLABLE SSANGKIYEOK-WI-MIEUM
-0xB2F2 0xB01D # HANGUL SYLLABLE SSANGKIYEOK-WI-PIEUP
-0xB2F3 0xB028 # HANGUL SYLLABLE SSANGKIYEOK-YU
-0xB2F4 0xB044 # HANGUL SYLLABLE SSANGKIYEOK-EU
-0xB2F5 0xB045 # HANGUL SYLLABLE SSANGKIYEOK-EU-KIYEOK
-0xB2F6 0xB048 # HANGUL SYLLABLE SSANGKIYEOK-EU-NIEUN
-0xB2F7 0xB04A # HANGUL SYLLABLE SSANGKIYEOK-EU-NIEUNHIEUH
-0xB2F8 0xB04C # HANGUL SYLLABLE SSANGKIYEOK-EU-RIEUL
-0xB2F9 0xB04E # HANGUL SYLLABLE SSANGKIYEOK-EU-RIEULMIEUM
-0xB2FA 0xB053 # HANGUL SYLLABLE SSANGKIYEOK-EU-RIEULHIEUH
-0xB2FB 0xB054 # HANGUL SYLLABLE SSANGKIYEOK-EU-MIEUM
-0xB2FC 0xB055 # HANGUL SYLLABLE SSANGKIYEOK-EU-PIEUP
-0xB2FD 0xB057 # HANGUL SYLLABLE SSANGKIYEOK-EU-SIOS
-0xB2FE 0xB059 # HANGUL SYLLABLE SSANGKIYEOK-EU-IEUNG
-0xB341 0xCFCC # HANGUL SYLLABLE KHIEUKH-YO-RIEUL
-0xB342 0xCFCD # HANGUL SYLLABLE KHIEUKH-YO-RIEULKIYEOK
-0xB343 0xCFCE # HANGUL SYLLABLE KHIEUKH-YO-RIEULMIEUM
-0xB344 0xCFCF # HANGUL SYLLABLE KHIEUKH-YO-RIEULPIEUP
-0xB345 0xCFD0 # HANGUL SYLLABLE KHIEUKH-YO-RIEULSIOS
-0xB346 0xCFD1 # HANGUL SYLLABLE KHIEUKH-YO-RIEULTHIEUTH
-0xB347 0xCFD2 # HANGUL SYLLABLE KHIEUKH-YO-RIEULPHIEUPH
-0xB348 0xCFD3 # HANGUL SYLLABLE KHIEUKH-YO-RIEULHIEUH
-0xB349 0xCFD4 # HANGUL SYLLABLE KHIEUKH-YO-MIEUM
-0xB34A 0xCFD5 # HANGUL SYLLABLE KHIEUKH-YO-PIEUP
-0xB34B 0xCFD6 # HANGUL SYLLABLE KHIEUKH-YO-PIEUPSIOS
-0xB34C 0xCFD7 # HANGUL SYLLABLE KHIEUKH-YO-SIOS
-0xB34D 0xCFD8 # HANGUL SYLLABLE KHIEUKH-YO-SSANGSIOS
-0xB34E 0xCFD9 # HANGUL SYLLABLE KHIEUKH-YO-IEUNG
-0xB34F 0xCFDA # HANGUL SYLLABLE KHIEUKH-YO-CIEUC
-0xB350 0xCFDB # HANGUL SYLLABLE KHIEUKH-YO-CHIEUCH
-0xB351 0xCFDC # HANGUL SYLLABLE KHIEUKH-YO-KHIEUKH
-0xB352 0xCFDD # HANGUL SYLLABLE KHIEUKH-YO-THIEUTH
-0xB353 0xCFDE # HANGUL SYLLABLE KHIEUKH-YO-PHIEUPH
-0xB354 0xCFDF # HANGUL SYLLABLE KHIEUKH-YO-HIEUH
-0xB355 0xCFE2 # HANGUL SYLLABLE KHIEUKH-U-SSANGKIYEOK
-0xB356 0xCFE3 # HANGUL SYLLABLE KHIEUKH-U-KIYEOKSIOS
-0xB357 0xCFE5 # HANGUL SYLLABLE KHIEUKH-U-NIEUNCIEUC
-0xB358 0xCFE6 # HANGUL SYLLABLE KHIEUKH-U-NIEUNHIEUH
-0xB359 0xCFE7 # HANGUL SYLLABLE KHIEUKH-U-TIKEUT
-0xB35A 0xCFE9 # HANGUL SYLLABLE KHIEUKH-U-RIEULKIYEOK
-0xB361 0xCFEA # HANGUL SYLLABLE KHIEUKH-U-RIEULMIEUM
-0xB362 0xCFEB # HANGUL SYLLABLE KHIEUKH-U-RIEULPIEUP
-0xB363 0xCFEC # HANGUL SYLLABLE KHIEUKH-U-RIEULSIOS
-0xB364 0xCFED # HANGUL SYLLABLE KHIEUKH-U-RIEULTHIEUTH
-0xB365 0xCFEE # HANGUL SYLLABLE KHIEUKH-U-RIEULPHIEUPH
-0xB366 0xCFEF # HANGUL SYLLABLE KHIEUKH-U-RIEULHIEUH
-0xB367 0xCFF2 # HANGUL SYLLABLE KHIEUKH-U-PIEUPSIOS
-0xB368 0xCFF4 # HANGUL SYLLABLE KHIEUKH-U-SSANGSIOS
-0xB369 0xCFF6 # HANGUL SYLLABLE KHIEUKH-U-CIEUC
-0xB36A 0xCFF7 # HANGUL SYLLABLE KHIEUKH-U-CHIEUCH
-0xB36B 0xCFF8 # HANGUL SYLLABLE KHIEUKH-U-KHIEUKH
-0xB36C 0xCFF9 # HANGUL SYLLABLE KHIEUKH-U-THIEUTH
-0xB36D 0xCFFA # HANGUL SYLLABLE KHIEUKH-U-PHIEUPH
-0xB36E 0xCFFB # HANGUL SYLLABLE KHIEUKH-U-HIEUH
-0xB36F 0xCFFD # HANGUL SYLLABLE KHIEUKH-WEO-KIYEOK
-0xB370 0xCFFE # HANGUL SYLLABLE KHIEUKH-WEO-SSANGKIYEOK
-0xB371 0xCFFF # HANGUL SYLLABLE KHIEUKH-WEO-KIYEOKSIOS
-0xB372 0xD001 # HANGUL SYLLABLE KHIEUKH-WEO-NIEUNCIEUC
-0xB373 0xD002 # HANGUL SYLLABLE KHIEUKH-WEO-NIEUNHIEUH
-0xB374 0xD003 # HANGUL SYLLABLE KHIEUKH-WEO-TIKEUT
-0xB375 0xD005 # HANGUL SYLLABLE KHIEUKH-WEO-RIEULKIYEOK
-0xB376 0xD006 # HANGUL SYLLABLE KHIEUKH-WEO-RIEULMIEUM
-0xB377 0xD007 # HANGUL SYLLABLE KHIEUKH-WEO-RIEULPIEUP
-0xB378 0xD008 # HANGUL SYLLABLE KHIEUKH-WEO-RIEULSIOS
-0xB379 0xD009 # HANGUL SYLLABLE KHIEUKH-WEO-RIEULTHIEUTH
-0xB37A 0xD00A # HANGUL SYLLABLE KHIEUKH-WEO-RIEULPHIEUPH
-0xB381 0xD00B # HANGUL SYLLABLE KHIEUKH-WEO-RIEULHIEUH
-0xB382 0xD00C # HANGUL SYLLABLE KHIEUKH-WEO-MIEUM
-0xB383 0xD00D # HANGUL SYLLABLE KHIEUKH-WEO-PIEUP
-0xB384 0xD00E # HANGUL SYLLABLE KHIEUKH-WEO-PIEUPSIOS
-0xB385 0xD00F # HANGUL SYLLABLE KHIEUKH-WEO-SIOS
-0xB386 0xD010 # HANGUL SYLLABLE KHIEUKH-WEO-SSANGSIOS
-0xB387 0xD012 # HANGUL SYLLABLE KHIEUKH-WEO-CIEUC
-0xB388 0xD013 # HANGUL SYLLABLE KHIEUKH-WEO-CHIEUCH
-0xB389 0xD014 # HANGUL SYLLABLE KHIEUKH-WEO-KHIEUKH
-0xB38A 0xD015 # HANGUL SYLLABLE KHIEUKH-WEO-THIEUTH
-0xB38B 0xD016 # HANGUL SYLLABLE KHIEUKH-WEO-PHIEUPH
-0xB38C 0xD017 # HANGUL SYLLABLE KHIEUKH-WEO-HIEUH
-0xB38D 0xD019 # HANGUL SYLLABLE KHIEUKH-WE-KIYEOK
-0xB38E 0xD01A # HANGUL SYLLABLE KHIEUKH-WE-SSANGKIYEOK
-0xB38F 0xD01B # HANGUL SYLLABLE KHIEUKH-WE-KIYEOKSIOS
-0xB390 0xD01C # HANGUL SYLLABLE KHIEUKH-WE-NIEUN
-0xB391 0xD01D # HANGUL SYLLABLE KHIEUKH-WE-NIEUNCIEUC
-0xB392 0xD01E # HANGUL SYLLABLE KHIEUKH-WE-NIEUNHIEUH
-0xB393 0xD01F # HANGUL SYLLABLE KHIEUKH-WE-TIKEUT
-0xB394 0xD020 # HANGUL SYLLABLE KHIEUKH-WE-RIEUL
-0xB395 0xD021 # HANGUL SYLLABLE KHIEUKH-WE-RIEULKIYEOK
-0xB396 0xD022 # HANGUL SYLLABLE KHIEUKH-WE-RIEULMIEUM
-0xB397 0xD023 # HANGUL SYLLABLE KHIEUKH-WE-RIEULPIEUP
-0xB398 0xD024 # HANGUL SYLLABLE KHIEUKH-WE-RIEULSIOS
-0xB399 0xD025 # HANGUL SYLLABLE KHIEUKH-WE-RIEULTHIEUTH
-0xB39A 0xD026 # HANGUL SYLLABLE KHIEUKH-WE-RIEULPHIEUPH
-0xB39B 0xD027 # HANGUL SYLLABLE KHIEUKH-WE-RIEULHIEUH
-0xB39C 0xD028 # HANGUL SYLLABLE KHIEUKH-WE-MIEUM
-0xB39D 0xD029 # HANGUL SYLLABLE KHIEUKH-WE-PIEUP
-0xB39E 0xD02A # HANGUL SYLLABLE KHIEUKH-WE-PIEUPSIOS
-0xB39F 0xD02B # HANGUL SYLLABLE KHIEUKH-WE-SIOS
-0xB3A0 0xD02C # HANGUL SYLLABLE KHIEUKH-WE-SSANGSIOS
-0xB3A1 0xB05D # HANGUL SYLLABLE SSANGKIYEOK-EU-THIEUTH
-0xB3A2 0xB07C # HANGUL SYLLABLE SSANGKIYEOK-I
-0xB3A3 0xB07D # HANGUL SYLLABLE SSANGKIYEOK-I-KIYEOK
-0xB3A4 0xB080 # HANGUL SYLLABLE SSANGKIYEOK-I-NIEUN
-0xB3A5 0xB084 # HANGUL SYLLABLE SSANGKIYEOK-I-RIEUL
-0xB3A6 0xB08C # HANGUL SYLLABLE SSANGKIYEOK-I-MIEUM
-0xB3A7 0xB08D # HANGUL SYLLABLE SSANGKIYEOK-I-PIEUP
-0xB3A8 0xB08F # HANGUL SYLLABLE SSANGKIYEOK-I-SIOS
-0xB3A9 0xB091 # HANGUL SYLLABLE SSANGKIYEOK-I-IEUNG
-0xB3AA 0xB098 # HANGUL SYLLABLE NIEUN-A
-0xB3AB 0xB099 # HANGUL SYLLABLE NIEUN-A-KIYEOK
-0xB3AC 0xB09A # HANGUL SYLLABLE NIEUN-A-SSANGKIYEOK
-0xB3AD 0xB09C # HANGUL SYLLABLE NIEUN-A-NIEUN
-0xB3AE 0xB09F # HANGUL SYLLABLE NIEUN-A-TIKEUT
-0xB3AF 0xB0A0 # HANGUL SYLLABLE NIEUN-A-RIEUL
-0xB3B0 0xB0A1 # HANGUL SYLLABLE NIEUN-A-RIEULKIYEOK
-0xB3B1 0xB0A2 # HANGUL SYLLABLE NIEUN-A-RIEULMIEUM
-0xB3B2 0xB0A8 # HANGUL SYLLABLE NIEUN-A-MIEUM
-0xB3B3 0xB0A9 # HANGUL SYLLABLE NIEUN-A-PIEUP
-0xB3B4 0xB0AB # HANGUL SYLLABLE NIEUN-A-SIOS
-0xB3B5 0xB0AC # HANGUL SYLLABLE NIEUN-A-SSANGSIOS
-0xB3B6 0xB0AD # HANGUL SYLLABLE NIEUN-A-IEUNG
-0xB3B7 0xB0AE # HANGUL SYLLABLE NIEUN-A-CIEUC
-0xB3B8 0xB0AF # HANGUL SYLLABLE NIEUN-A-CHIEUCH
-0xB3B9 0xB0B1 # HANGUL SYLLABLE NIEUN-A-THIEUTH
-0xB3BA 0xB0B3 # HANGUL SYLLABLE NIEUN-A-HIEUH
-0xB3BB 0xB0B4 # HANGUL SYLLABLE NIEUN-AE
-0xB3BC 0xB0B5 # HANGUL SYLLABLE NIEUN-AE-KIYEOK
-0xB3BD 0xB0B8 # HANGUL SYLLABLE NIEUN-AE-NIEUN
-0xB3BE 0xB0BC # HANGUL SYLLABLE NIEUN-AE-RIEUL
-0xB3BF 0xB0C4 # HANGUL SYLLABLE NIEUN-AE-MIEUM
-0xB3C0 0xB0C5 # HANGUL SYLLABLE NIEUN-AE-PIEUP
-0xB3C1 0xB0C7 # HANGUL SYLLABLE NIEUN-AE-SIOS
-0xB3C2 0xB0C8 # HANGUL SYLLABLE NIEUN-AE-SSANGSIOS
-0xB3C3 0xB0C9 # HANGUL SYLLABLE NIEUN-AE-IEUNG
-0xB3C4 0xB0D0 # HANGUL SYLLABLE NIEUN-YA
-0xB3C5 0xB0D1 # HANGUL SYLLABLE NIEUN-YA-KIYEOK
-0xB3C6 0xB0D4 # HANGUL SYLLABLE NIEUN-YA-NIEUN
-0xB3C7 0xB0D8 # HANGUL SYLLABLE NIEUN-YA-RIEUL
-0xB3C8 0xB0E0 # HANGUL SYLLABLE NIEUN-YA-MIEUM
-0xB3C9 0xB0E5 # HANGUL SYLLABLE NIEUN-YA-IEUNG
-0xB3CA 0xB108 # HANGUL SYLLABLE NIEUN-EO
-0xB3CB 0xB109 # HANGUL SYLLABLE NIEUN-EO-KIYEOK
-0xB3CC 0xB10B # HANGUL SYLLABLE NIEUN-EO-KIYEOKSIOS
-0xB3CD 0xB10C # HANGUL SYLLABLE NIEUN-EO-NIEUN
-0xB3CE 0xB110 # HANGUL SYLLABLE NIEUN-EO-RIEUL
-0xB3CF 0xB112 # HANGUL SYLLABLE NIEUN-EO-RIEULMIEUM
-0xB3D0 0xB113 # HANGUL SYLLABLE NIEUN-EO-RIEULPIEUP
-0xB3D1 0xB118 # HANGUL SYLLABLE NIEUN-EO-MIEUM
-0xB3D2 0xB119 # HANGUL SYLLABLE NIEUN-EO-PIEUP
-0xB3D3 0xB11B # HANGUL SYLLABLE NIEUN-EO-SIOS
-0xB3D4 0xB11C # HANGUL SYLLABLE NIEUN-EO-SSANGSIOS
-0xB3D5 0xB11D # HANGUL SYLLABLE NIEUN-EO-IEUNG
-0xB3D6 0xB123 # HANGUL SYLLABLE NIEUN-EO-HIEUH
-0xB3D7 0xB124 # HANGUL SYLLABLE NIEUN-E
-0xB3D8 0xB125 # HANGUL SYLLABLE NIEUN-E-KIYEOK
-0xB3D9 0xB128 # HANGUL SYLLABLE NIEUN-E-NIEUN
-0xB3DA 0xB12C # HANGUL SYLLABLE NIEUN-E-RIEUL
-0xB3DB 0xB134 # HANGUL SYLLABLE NIEUN-E-MIEUM
-0xB3DC 0xB135 # HANGUL SYLLABLE NIEUN-E-PIEUP
-0xB3DD 0xB137 # HANGUL SYLLABLE NIEUN-E-SIOS
-0xB3DE 0xB138 # HANGUL SYLLABLE NIEUN-E-SSANGSIOS
-0xB3DF 0xB139 # HANGUL SYLLABLE NIEUN-E-IEUNG
-0xB3E0 0xB140 # HANGUL SYLLABLE NIEUN-YEO
-0xB3E1 0xB141 # HANGUL SYLLABLE NIEUN-YEO-KIYEOK
-0xB3E2 0xB144 # HANGUL SYLLABLE NIEUN-YEO-NIEUN
-0xB3E3 0xB148 # HANGUL SYLLABLE NIEUN-YEO-RIEUL
-0xB3E4 0xB150 # HANGUL SYLLABLE NIEUN-YEO-MIEUM
-0xB3E5 0xB151 # HANGUL SYLLABLE NIEUN-YEO-PIEUP
-0xB3E6 0xB154 # HANGUL SYLLABLE NIEUN-YEO-SSANGSIOS
-0xB3E7 0xB155 # HANGUL SYLLABLE NIEUN-YEO-IEUNG
-0xB3E8 0xB158 # HANGUL SYLLABLE NIEUN-YEO-KHIEUKH
-0xB3E9 0xB15C # HANGUL SYLLABLE NIEUN-YE
-0xB3EA 0xB160 # HANGUL SYLLABLE NIEUN-YE-NIEUN
-0xB3EB 0xB178 # HANGUL SYLLABLE NIEUN-O
-0xB3EC 0xB179 # HANGUL SYLLABLE NIEUN-O-KIYEOK
-0xB3ED 0xB17C # HANGUL SYLLABLE NIEUN-O-NIEUN
-0xB3EE 0xB180 # HANGUL SYLLABLE NIEUN-O-RIEUL
-0xB3EF 0xB182 # HANGUL SYLLABLE NIEUN-O-RIEULMIEUM
-0xB3F0 0xB188 # HANGUL SYLLABLE NIEUN-O-MIEUM
-0xB3F1 0xB189 # HANGUL SYLLABLE NIEUN-O-PIEUP
-0xB3F2 0xB18B # HANGUL SYLLABLE NIEUN-O-SIOS
-0xB3F3 0xB18D # HANGUL SYLLABLE NIEUN-O-IEUNG
-0xB3F4 0xB192 # HANGUL SYLLABLE NIEUN-O-PHIEUPH
-0xB3F5 0xB193 # HANGUL SYLLABLE NIEUN-O-HIEUH
-0xB3F6 0xB194 # HANGUL SYLLABLE NIEUN-WA
-0xB3F7 0xB198 # HANGUL SYLLABLE NIEUN-WA-NIEUN
-0xB3F8 0xB19C # HANGUL SYLLABLE NIEUN-WA-RIEUL
-0xB3F9 0xB1A8 # HANGUL SYLLABLE NIEUN-WA-SSANGSIOS
-0xB3FA 0xB1CC # HANGUL SYLLABLE NIEUN-OE
-0xB3FB 0xB1D0 # HANGUL SYLLABLE NIEUN-OE-NIEUN
-0xB3FC 0xB1D4 # HANGUL SYLLABLE NIEUN-OE-RIEUL
-0xB3FD 0xB1DC # HANGUL SYLLABLE NIEUN-OE-MIEUM
-0xB3FE 0xB1DD # HANGUL SYLLABLE NIEUN-OE-PIEUP
-0xB441 0xD02E # HANGUL SYLLABLE KHIEUKH-WE-CIEUC
-0xB442 0xD02F # HANGUL SYLLABLE KHIEUKH-WE-CHIEUCH
-0xB443 0xD030 # HANGUL SYLLABLE KHIEUKH-WE-KHIEUKH
-0xB444 0xD031 # HANGUL SYLLABLE KHIEUKH-WE-THIEUTH
-0xB445 0xD032 # HANGUL SYLLABLE KHIEUKH-WE-PHIEUPH
-0xB446 0xD033 # HANGUL SYLLABLE KHIEUKH-WE-HIEUH
-0xB447 0xD036 # HANGUL SYLLABLE KHIEUKH-WI-SSANGKIYEOK
-0xB448 0xD037 # HANGUL SYLLABLE KHIEUKH-WI-KIYEOKSIOS
-0xB449 0xD039 # HANGUL SYLLABLE KHIEUKH-WI-NIEUNCIEUC
-0xB44A 0xD03A # HANGUL SYLLABLE KHIEUKH-WI-NIEUNHIEUH
-0xB44B 0xD03B # HANGUL SYLLABLE KHIEUKH-WI-TIKEUT
-0xB44C 0xD03D # HANGUL SYLLABLE KHIEUKH-WI-RIEULKIYEOK
-0xB44D 0xD03E # HANGUL SYLLABLE KHIEUKH-WI-RIEULMIEUM
-0xB44E 0xD03F # HANGUL SYLLABLE KHIEUKH-WI-RIEULPIEUP
-0xB44F 0xD040 # HANGUL SYLLABLE KHIEUKH-WI-RIEULSIOS
-0xB450 0xD041 # HANGUL SYLLABLE KHIEUKH-WI-RIEULTHIEUTH
-0xB451 0xD042 # HANGUL SYLLABLE KHIEUKH-WI-RIEULPHIEUPH
-0xB452 0xD043 # HANGUL SYLLABLE KHIEUKH-WI-RIEULHIEUH
-0xB453 0xD046 # HANGUL SYLLABLE KHIEUKH-WI-PIEUPSIOS
-0xB454 0xD048 # HANGUL SYLLABLE KHIEUKH-WI-SSANGSIOS
-0xB455 0xD04A # HANGUL SYLLABLE KHIEUKH-WI-CIEUC
-0xB456 0xD04B # HANGUL SYLLABLE KHIEUKH-WI-CHIEUCH
-0xB457 0xD04C # HANGUL SYLLABLE KHIEUKH-WI-KHIEUKH
-0xB458 0xD04D # HANGUL SYLLABLE KHIEUKH-WI-THIEUTH
-0xB459 0xD04E # HANGUL SYLLABLE KHIEUKH-WI-PHIEUPH
-0xB45A 0xD04F # HANGUL SYLLABLE KHIEUKH-WI-HIEUH
-0xB461 0xD051 # HANGUL SYLLABLE KHIEUKH-YU-KIYEOK
-0xB462 0xD052 # HANGUL SYLLABLE KHIEUKH-YU-SSANGKIYEOK
-0xB463 0xD053 # HANGUL SYLLABLE KHIEUKH-YU-KIYEOKSIOS
-0xB464 0xD055 # HANGUL SYLLABLE KHIEUKH-YU-NIEUNCIEUC
-0xB465 0xD056 # HANGUL SYLLABLE KHIEUKH-YU-NIEUNHIEUH
-0xB466 0xD057 # HANGUL SYLLABLE KHIEUKH-YU-TIKEUT
-0xB467 0xD059 # HANGUL SYLLABLE KHIEUKH-YU-RIEULKIYEOK
-0xB468 0xD05A # HANGUL SYLLABLE KHIEUKH-YU-RIEULMIEUM
-0xB469 0xD05B # HANGUL SYLLABLE KHIEUKH-YU-RIEULPIEUP
-0xB46A 0xD05C # HANGUL SYLLABLE KHIEUKH-YU-RIEULSIOS
-0xB46B 0xD05D # HANGUL SYLLABLE KHIEUKH-YU-RIEULTHIEUTH
-0xB46C 0xD05E # HANGUL SYLLABLE KHIEUKH-YU-RIEULPHIEUPH
-0xB46D 0xD05F # HANGUL SYLLABLE KHIEUKH-YU-RIEULHIEUH
-0xB46E 0xD061 # HANGUL SYLLABLE KHIEUKH-YU-PIEUP
-0xB46F 0xD062 # HANGUL SYLLABLE KHIEUKH-YU-PIEUPSIOS
-0xB470 0xD063 # HANGUL SYLLABLE KHIEUKH-YU-SIOS
-0xB471 0xD064 # HANGUL SYLLABLE KHIEUKH-YU-SSANGSIOS
-0xB472 0xD065 # HANGUL SYLLABLE KHIEUKH-YU-IEUNG
-0xB473 0xD066 # HANGUL SYLLABLE KHIEUKH-YU-CIEUC
-0xB474 0xD067 # HANGUL SYLLABLE KHIEUKH-YU-CHIEUCH
-0xB475 0xD068 # HANGUL SYLLABLE KHIEUKH-YU-KHIEUKH
-0xB476 0xD069 # HANGUL SYLLABLE KHIEUKH-YU-THIEUTH
-0xB477 0xD06A # HANGUL SYLLABLE KHIEUKH-YU-PHIEUPH
-0xB478 0xD06B # HANGUL SYLLABLE KHIEUKH-YU-HIEUH
-0xB479 0xD06E # HANGUL SYLLABLE KHIEUKH-EU-SSANGKIYEOK
-0xB47A 0xD06F # HANGUL SYLLABLE KHIEUKH-EU-KIYEOKSIOS
-0xB481 0xD071 # HANGUL SYLLABLE KHIEUKH-EU-NIEUNCIEUC
-0xB482 0xD072 # HANGUL SYLLABLE KHIEUKH-EU-NIEUNHIEUH
-0xB483 0xD073 # HANGUL SYLLABLE KHIEUKH-EU-TIKEUT
-0xB484 0xD075 # HANGUL SYLLABLE KHIEUKH-EU-RIEULKIYEOK
-0xB485 0xD076 # HANGUL SYLLABLE KHIEUKH-EU-RIEULMIEUM
-0xB486 0xD077 # HANGUL SYLLABLE KHIEUKH-EU-RIEULPIEUP
-0xB487 0xD078 # HANGUL SYLLABLE KHIEUKH-EU-RIEULSIOS
-0xB488 0xD079 # HANGUL SYLLABLE KHIEUKH-EU-RIEULTHIEUTH
-0xB489 0xD07A # HANGUL SYLLABLE KHIEUKH-EU-RIEULPHIEUPH
-0xB48A 0xD07B # HANGUL SYLLABLE KHIEUKH-EU-RIEULHIEUH
-0xB48B 0xD07E # HANGUL SYLLABLE KHIEUKH-EU-PIEUPSIOS
-0xB48C 0xD07F # HANGUL SYLLABLE KHIEUKH-EU-SIOS
-0xB48D 0xD080 # HANGUL SYLLABLE KHIEUKH-EU-SSANGSIOS
-0xB48E 0xD082 # HANGUL SYLLABLE KHIEUKH-EU-CIEUC
-0xB48F 0xD083 # HANGUL SYLLABLE KHIEUKH-EU-CHIEUCH
-0xB490 0xD084 # HANGUL SYLLABLE KHIEUKH-EU-KHIEUKH
-0xB491 0xD085 # HANGUL SYLLABLE KHIEUKH-EU-THIEUTH
-0xB492 0xD086 # HANGUL SYLLABLE KHIEUKH-EU-PHIEUPH
-0xB493 0xD087 # HANGUL SYLLABLE KHIEUKH-EU-HIEUH
-0xB494 0xD088 # HANGUL SYLLABLE KHIEUKH-YI
-0xB495 0xD089 # HANGUL SYLLABLE KHIEUKH-YI-KIYEOK
-0xB496 0xD08A # HANGUL SYLLABLE KHIEUKH-YI-SSANGKIYEOK
-0xB497 0xD08B # HANGUL SYLLABLE KHIEUKH-YI-KIYEOKSIOS
-0xB498 0xD08C # HANGUL SYLLABLE KHIEUKH-YI-NIEUN
-0xB499 0xD08D # HANGUL SYLLABLE KHIEUKH-YI-NIEUNCIEUC
-0xB49A 0xD08E # HANGUL SYLLABLE KHIEUKH-YI-NIEUNHIEUH
-0xB49B 0xD08F # HANGUL SYLLABLE KHIEUKH-YI-TIKEUT
-0xB49C 0xD090 # HANGUL SYLLABLE KHIEUKH-YI-RIEUL
-0xB49D 0xD091 # HANGUL SYLLABLE KHIEUKH-YI-RIEULKIYEOK
-0xB49E 0xD092 # HANGUL SYLLABLE KHIEUKH-YI-RIEULMIEUM
-0xB49F 0xD093 # HANGUL SYLLABLE KHIEUKH-YI-RIEULPIEUP
-0xB4A0 0xD094 # HANGUL SYLLABLE KHIEUKH-YI-RIEULSIOS
-0xB4A1 0xB1DF # HANGUL SYLLABLE NIEUN-OE-SIOS
-0xB4A2 0xB1E8 # HANGUL SYLLABLE NIEUN-YO
-0xB4A3 0xB1E9 # HANGUL SYLLABLE NIEUN-YO-KIYEOK
-0xB4A4 0xB1EC # HANGUL SYLLABLE NIEUN-YO-NIEUN
-0xB4A5 0xB1F0 # HANGUL SYLLABLE NIEUN-YO-RIEUL
-0xB4A6 0xB1F9 # HANGUL SYLLABLE NIEUN-YO-PIEUP
-0xB4A7 0xB1FB # HANGUL SYLLABLE NIEUN-YO-SIOS
-0xB4A8 0xB1FD # HANGUL SYLLABLE NIEUN-YO-IEUNG
-0xB4A9 0xB204 # HANGUL SYLLABLE NIEUN-U
-0xB4AA 0xB205 # HANGUL SYLLABLE NIEUN-U-KIYEOK
-0xB4AB 0xB208 # HANGUL SYLLABLE NIEUN-U-NIEUN
-0xB4AC 0xB20B # HANGUL SYLLABLE NIEUN-U-TIKEUT
-0xB4AD 0xB20C # HANGUL SYLLABLE NIEUN-U-RIEUL
-0xB4AE 0xB214 # HANGUL SYLLABLE NIEUN-U-MIEUM
-0xB4AF 0xB215 # HANGUL SYLLABLE NIEUN-U-PIEUP
-0xB4B0 0xB217 # HANGUL SYLLABLE NIEUN-U-SIOS
-0xB4B1 0xB219 # HANGUL SYLLABLE NIEUN-U-IEUNG
-0xB4B2 0xB220 # HANGUL SYLLABLE NIEUN-WEO
-0xB4B3 0xB234 # HANGUL SYLLABLE NIEUN-WEO-SSANGSIOS
-0xB4B4 0xB23C # HANGUL SYLLABLE NIEUN-WE
-0xB4B5 0xB258 # HANGUL SYLLABLE NIEUN-WI
-0xB4B6 0xB25C # HANGUL SYLLABLE NIEUN-WI-NIEUN
-0xB4B7 0xB260 # HANGUL SYLLABLE NIEUN-WI-RIEUL
-0xB4B8 0xB268 # HANGUL SYLLABLE NIEUN-WI-MIEUM
-0xB4B9 0xB269 # HANGUL SYLLABLE NIEUN-WI-PIEUP
-0xB4BA 0xB274 # HANGUL SYLLABLE NIEUN-YU
-0xB4BB 0xB275 # HANGUL SYLLABLE NIEUN-YU-KIYEOK
-0xB4BC 0xB27C # HANGUL SYLLABLE NIEUN-YU-RIEUL
-0xB4BD 0xB284 # HANGUL SYLLABLE NIEUN-YU-MIEUM
-0xB4BE 0xB285 # HANGUL SYLLABLE NIEUN-YU-PIEUP
-0xB4BF 0xB289 # HANGUL SYLLABLE NIEUN-YU-IEUNG
-0xB4C0 0xB290 # HANGUL SYLLABLE NIEUN-EU
-0xB4C1 0xB291 # HANGUL SYLLABLE NIEUN-EU-KIYEOK
-0xB4C2 0xB294 # HANGUL SYLLABLE NIEUN-EU-NIEUN
-0xB4C3 0xB298 # HANGUL SYLLABLE NIEUN-EU-RIEUL
-0xB4C4 0xB299 # HANGUL SYLLABLE NIEUN-EU-RIEULKIYEOK
-0xB4C5 0xB29A # HANGUL SYLLABLE NIEUN-EU-RIEULMIEUM
-0xB4C6 0xB2A0 # HANGUL SYLLABLE NIEUN-EU-MIEUM
-0xB4C7 0xB2A1 # HANGUL SYLLABLE NIEUN-EU-PIEUP
-0xB4C8 0xB2A3 # HANGUL SYLLABLE NIEUN-EU-SIOS
-0xB4C9 0xB2A5 # HANGUL SYLLABLE NIEUN-EU-IEUNG
-0xB4CA 0xB2A6 # HANGUL SYLLABLE NIEUN-EU-CIEUC
-0xB4CB 0xB2AA # HANGUL SYLLABLE NIEUN-EU-PHIEUPH
-0xB4CC 0xB2AC # HANGUL SYLLABLE NIEUN-YI
-0xB4CD 0xB2B0 # HANGUL SYLLABLE NIEUN-YI-NIEUN
-0xB4CE 0xB2B4 # HANGUL SYLLABLE NIEUN-YI-RIEUL
-0xB4CF 0xB2C8 # HANGUL SYLLABLE NIEUN-I
-0xB4D0 0xB2C9 # HANGUL SYLLABLE NIEUN-I-KIYEOK
-0xB4D1 0xB2CC # HANGUL SYLLABLE NIEUN-I-NIEUN
-0xB4D2 0xB2D0 # HANGUL SYLLABLE NIEUN-I-RIEUL
-0xB4D3 0xB2D2 # HANGUL SYLLABLE NIEUN-I-RIEULMIEUM-<3/22/95>
-0xB4D4 0xB2D8 # HANGUL SYLLABLE NIEUN-I-MIEUM
-0xB4D5 0xB2D9 # HANGUL SYLLABLE NIEUN-I-PIEUP
-0xB4D6 0xB2DB # HANGUL SYLLABLE NIEUN-I-SIOS
-0xB4D7 0xB2DD # HANGUL SYLLABLE NIEUN-I-IEUNG
-0xB4D8 0xB2E2 # HANGUL SYLLABLE NIEUN-I-PHIEUPH
-0xB4D9 0xB2E4 # HANGUL SYLLABLE TIKEUT-A
-0xB4DA 0xB2E5 # HANGUL SYLLABLE TIKEUT-A-KIYEOK
-0xB4DB 0xB2E6 # HANGUL SYLLABLE TIKEUT-A-SSANGKIYEOK
-0xB4DC 0xB2E8 # HANGUL SYLLABLE TIKEUT-A-NIEUN
-0xB4DD 0xB2EB # HANGUL SYLLABLE TIKEUT-A-TIKEUT
-0xB4DE 0xB2EC # HANGUL SYLLABLE TIKEUT-A-RIEUL
-0xB4DF 0xB2ED # HANGUL SYLLABLE TIKEUT-A-RIEULKIYEOK
-0xB4E0 0xB2EE # HANGUL SYLLABLE TIKEUT-A-RIEULMIEUM
-0xB4E1 0xB2EF # HANGUL SYLLABLE TIKEUT-A-RIEULPIEUP
-0xB4E2 0xB2F3 # HANGUL SYLLABLE TIKEUT-A-RIEULHIEUH
-0xB4E3 0xB2F4 # HANGUL SYLLABLE TIKEUT-A-MIEUM
-0xB4E4 0xB2F5 # HANGUL SYLLABLE TIKEUT-A-PIEUP
-0xB4E5 0xB2F7 # HANGUL SYLLABLE TIKEUT-A-SIOS
-0xB4E6 0xB2F8 # HANGUL SYLLABLE TIKEUT-A-SSANGSIOS
-0xB4E7 0xB2F9 # HANGUL SYLLABLE TIKEUT-A-IEUNG
-0xB4E8 0xB2FA # HANGUL SYLLABLE TIKEUT-A-CIEUC
-0xB4E9 0xB2FB # HANGUL SYLLABLE TIKEUT-A-CHIEUCH
-0xB4EA 0xB2FF # HANGUL SYLLABLE TIKEUT-A-HIEUH
-0xB4EB 0xB300 # HANGUL SYLLABLE TIKEUT-AE
-0xB4EC 0xB301 # HANGUL SYLLABLE TIKEUT-AE-KIYEOK
-0xB4ED 0xB304 # HANGUL SYLLABLE TIKEUT-AE-NIEUN
-0xB4EE 0xB308 # HANGUL SYLLABLE TIKEUT-AE-RIEUL
-0xB4EF 0xB310 # HANGUL SYLLABLE TIKEUT-AE-MIEUM
-0xB4F0 0xB311 # HANGUL SYLLABLE TIKEUT-AE-PIEUP
-0xB4F1 0xB313 # HANGUL SYLLABLE TIKEUT-AE-SIOS
-0xB4F2 0xB314 # HANGUL SYLLABLE TIKEUT-AE-SSANGSIOS
-0xB4F3 0xB315 # HANGUL SYLLABLE TIKEUT-AE-IEUNG
-0xB4F4 0xB31C # HANGUL SYLLABLE TIKEUT-YA
-0xB4F5 0xB354 # HANGUL SYLLABLE TIKEUT-EO
-0xB4F6 0xB355 # HANGUL SYLLABLE TIKEUT-EO-KIYEOK
-0xB4F7 0xB356 # HANGUL SYLLABLE TIKEUT-EO-SSANGKIYEOK
-0xB4F8 0xB358 # HANGUL SYLLABLE TIKEUT-EO-NIEUN
-0xB4F9 0xB35B # HANGUL SYLLABLE TIKEUT-EO-TIKEUT
-0xB4FA 0xB35C # HANGUL SYLLABLE TIKEUT-EO-RIEUL
-0xB4FB 0xB35E # HANGUL SYLLABLE TIKEUT-EO-RIEULMIEUM
-0xB4FC 0xB35F # HANGUL SYLLABLE TIKEUT-EO-RIEULPIEUP
-0xB4FD 0xB364 # HANGUL SYLLABLE TIKEUT-EO-MIEUM
-0xB4FE 0xB365 # HANGUL SYLLABLE TIKEUT-EO-PIEUP
-0xB541 0xD095 # HANGUL SYLLABLE KHIEUKH-YI-RIEULTHIEUTH
-0xB542 0xD096 # HANGUL SYLLABLE KHIEUKH-YI-RIEULPHIEUPH
-0xB543 0xD097 # HANGUL SYLLABLE KHIEUKH-YI-RIEULHIEUH
-0xB544 0xD098 # HANGUL SYLLABLE KHIEUKH-YI-MIEUM
-0xB545 0xD099 # HANGUL SYLLABLE KHIEUKH-YI-PIEUP
-0xB546 0xD09A # HANGUL SYLLABLE KHIEUKH-YI-PIEUPSIOS
-0xB547 0xD09B # HANGUL SYLLABLE KHIEUKH-YI-SIOS
-0xB548 0xD09C # HANGUL SYLLABLE KHIEUKH-YI-SSANGSIOS
-0xB549 0xD09D # HANGUL SYLLABLE KHIEUKH-YI-IEUNG
-0xB54A 0xD09E # HANGUL SYLLABLE KHIEUKH-YI-CIEUC
-0xB54B 0xD09F # HANGUL SYLLABLE KHIEUKH-YI-CHIEUCH
-0xB54C 0xD0A0 # HANGUL SYLLABLE KHIEUKH-YI-KHIEUKH
-0xB54D 0xD0A1 # HANGUL SYLLABLE KHIEUKH-YI-THIEUTH
-0xB54E 0xD0A2 # HANGUL SYLLABLE KHIEUKH-YI-PHIEUPH
-0xB54F 0xD0A3 # HANGUL SYLLABLE KHIEUKH-YI-HIEUH
-0xB550 0xD0A6 # HANGUL SYLLABLE KHIEUKH-I-SSANGKIYEOK
-0xB551 0xD0A7 # HANGUL SYLLABLE KHIEUKH-I-KIYEOKSIOS
-0xB552 0xD0A9 # HANGUL SYLLABLE KHIEUKH-I-NIEUNCIEUC
-0xB553 0xD0AA # HANGUL SYLLABLE KHIEUKH-I-NIEUNHIEUH
-0xB554 0xD0AB # HANGUL SYLLABLE KHIEUKH-I-TIKEUT
-0xB555 0xD0AD # HANGUL SYLLABLE KHIEUKH-I-RIEULKIYEOK
-0xB556 0xD0AE # HANGUL SYLLABLE KHIEUKH-I-RIEULMIEUM
-0xB557 0xD0AF # HANGUL SYLLABLE KHIEUKH-I-RIEULPIEUP
-0xB558 0xD0B0 # HANGUL SYLLABLE KHIEUKH-I-RIEULSIOS
-0xB559 0xD0B1 # HANGUL SYLLABLE KHIEUKH-I-RIEULTHIEUTH
-0xB55A 0xD0B2 # HANGUL SYLLABLE KHIEUKH-I-RIEULPHIEUPH
-0xB561 0xD0B3 # HANGUL SYLLABLE KHIEUKH-I-RIEULHIEUH
-0xB562 0xD0B6 # HANGUL SYLLABLE KHIEUKH-I-PIEUPSIOS
-0xB563 0xD0B8 # HANGUL SYLLABLE KHIEUKH-I-SSANGSIOS
-0xB564 0xD0BA # HANGUL SYLLABLE KHIEUKH-I-CIEUC
-0xB565 0xD0BB # HANGUL SYLLABLE KHIEUKH-I-CHIEUCH
-0xB566 0xD0BC # HANGUL SYLLABLE KHIEUKH-I-KHIEUKH
-0xB567 0xD0BD # HANGUL SYLLABLE KHIEUKH-I-THIEUTH
-0xB568 0xD0BE # HANGUL SYLLABLE KHIEUKH-I-PHIEUPH
-0xB569 0xD0BF # HANGUL SYLLABLE KHIEUKH-I-HIEUH
-0xB56A 0xD0C2 # HANGUL SYLLABLE THIEUTH-A-SSANGKIYEOK
-0xB56B 0xD0C3 # HANGUL SYLLABLE THIEUTH-A-KIYEOKSIOS
-0xB56C 0xD0C5 # HANGUL SYLLABLE THIEUTH-A-NIEUNCIEUC
-0xB56D 0xD0C6 # HANGUL SYLLABLE THIEUTH-A-NIEUNHIEUH
-0xB56E 0xD0C7 # HANGUL SYLLABLE THIEUTH-A-TIKEUT
-0xB56F 0xD0CA # HANGUL SYLLABLE THIEUTH-A-RIEULMIEUM
-0xB570 0xD0CB # HANGUL SYLLABLE THIEUTH-A-RIEULPIEUP
-0xB571 0xD0CC # HANGUL SYLLABLE THIEUTH-A-RIEULSIOS
-0xB572 0xD0CD # HANGUL SYLLABLE THIEUTH-A-RIEULTHIEUTH
-0xB573 0xD0CE # HANGUL SYLLABLE THIEUTH-A-RIEULPHIEUPH
-0xB574 0xD0CF # HANGUL SYLLABLE THIEUTH-A-RIEULHIEUH
-0xB575 0xD0D2 # HANGUL SYLLABLE THIEUTH-A-PIEUPSIOS
-0xB576 0xD0D6 # HANGUL SYLLABLE THIEUTH-A-CIEUC
-0xB577 0xD0D7 # HANGUL SYLLABLE THIEUTH-A-CHIEUCH
-0xB578 0xD0D8 # HANGUL SYLLABLE THIEUTH-A-KHIEUKH
-0xB579 0xD0D9 # HANGUL SYLLABLE THIEUTH-A-THIEUTH
-0xB57A 0xD0DA # HANGUL SYLLABLE THIEUTH-A-PHIEUPH
-0xB581 0xD0DB # HANGUL SYLLABLE THIEUTH-A-HIEUH
-0xB582 0xD0DE # HANGUL SYLLABLE THIEUTH-AE-SSANGKIYEOK
-0xB583 0xD0DF # HANGUL SYLLABLE THIEUTH-AE-KIYEOKSIOS
-0xB584 0xD0E1 # HANGUL SYLLABLE THIEUTH-AE-NIEUNCIEUC
-0xB585 0xD0E2 # HANGUL SYLLABLE THIEUTH-AE-NIEUNHIEUH
-0xB586 0xD0E3 # HANGUL SYLLABLE THIEUTH-AE-TIKEUT
-0xB587 0xD0E5 # HANGUL SYLLABLE THIEUTH-AE-RIEULKIYEOK
-0xB588 0xD0E6 # HANGUL SYLLABLE THIEUTH-AE-RIEULMIEUM
-0xB589 0xD0E7 # HANGUL SYLLABLE THIEUTH-AE-RIEULPIEUP
-0xB58A 0xD0E8 # HANGUL SYLLABLE THIEUTH-AE-RIEULSIOS
-0xB58B 0xD0E9 # HANGUL SYLLABLE THIEUTH-AE-RIEULTHIEUTH
-0xB58C 0xD0EA # HANGUL SYLLABLE THIEUTH-AE-RIEULPHIEUPH
-0xB58D 0xD0EB # HANGUL SYLLABLE THIEUTH-AE-RIEULHIEUH
-0xB58E 0xD0EE # HANGUL SYLLABLE THIEUTH-AE-PIEUPSIOS
-0xB58F 0xD0F2 # HANGUL SYLLABLE THIEUTH-AE-CIEUC
-0xB590 0xD0F3 # HANGUL SYLLABLE THIEUTH-AE-CHIEUCH
-0xB591 0xD0F4 # HANGUL SYLLABLE THIEUTH-AE-KHIEUKH
-0xB592 0xD0F5 # HANGUL SYLLABLE THIEUTH-AE-THIEUTH
-0xB593 0xD0F6 # HANGUL SYLLABLE THIEUTH-AE-PHIEUPH
-0xB594 0xD0F7 # HANGUL SYLLABLE THIEUTH-AE-HIEUH
-0xB595 0xD0F9 # HANGUL SYLLABLE THIEUTH-YA-KIYEOK
-0xB596 0xD0FA # HANGUL SYLLABLE THIEUTH-YA-SSANGKIYEOK
-0xB597 0xD0FB # HANGUL SYLLABLE THIEUTH-YA-KIYEOKSIOS
-0xB598 0xD0FC # HANGUL SYLLABLE THIEUTH-YA-NIEUN
-0xB599 0xD0FD # HANGUL SYLLABLE THIEUTH-YA-NIEUNCIEUC
-0xB59A 0xD0FE # HANGUL SYLLABLE THIEUTH-YA-NIEUNHIEUH
-0xB59B 0xD0FF # HANGUL SYLLABLE THIEUTH-YA-TIKEUT
-0xB59C 0xD100 # HANGUL SYLLABLE THIEUTH-YA-RIEUL
-0xB59D 0xD101 # HANGUL SYLLABLE THIEUTH-YA-RIEULKIYEOK
-0xB59E 0xD102 # HANGUL SYLLABLE THIEUTH-YA-RIEULMIEUM
-0xB59F 0xD103 # HANGUL SYLLABLE THIEUTH-YA-RIEULPIEUP
-0xB5A0 0xD104 # HANGUL SYLLABLE THIEUTH-YA-RIEULSIOS
-0xB5A1 0xB367 # HANGUL SYLLABLE TIKEUT-EO-SIOS
-0xB5A2 0xB369 # HANGUL SYLLABLE TIKEUT-EO-IEUNG
-0xB5A3 0xB36B # HANGUL SYLLABLE TIKEUT-EO-CHIEUCH
-0xB5A4 0xB36E # HANGUL SYLLABLE TIKEUT-EO-PHIEUPH
-0xB5A5 0xB370 # HANGUL SYLLABLE TIKEUT-E
-0xB5A6 0xB371 # HANGUL SYLLABLE TIKEUT-E-KIYEOK
-0xB5A7 0xB374 # HANGUL SYLLABLE TIKEUT-E-NIEUN
-0xB5A8 0xB378 # HANGUL SYLLABLE TIKEUT-E-RIEUL
-0xB5A9 0xB380 # HANGUL SYLLABLE TIKEUT-E-MIEUM
-0xB5AA 0xB381 # HANGUL SYLLABLE TIKEUT-E-PIEUP
-0xB5AB 0xB383 # HANGUL SYLLABLE TIKEUT-E-SIOS
-0xB5AC 0xB384 # HANGUL SYLLABLE TIKEUT-E-SSANGSIOS
-0xB5AD 0xB385 # HANGUL SYLLABLE TIKEUT-E-IEUNG
-0xB5AE 0xB38C # HANGUL SYLLABLE TIKEUT-YEO
-0xB5AF 0xB390 # HANGUL SYLLABLE TIKEUT-YEO-NIEUN
-0xB5B0 0xB394 # HANGUL SYLLABLE TIKEUT-YEO-RIEUL
-0xB5B1 0xB3A0 # HANGUL SYLLABLE TIKEUT-YEO-SSANGSIOS
-0xB5B2 0xB3A1 # HANGUL SYLLABLE TIKEUT-YEO-IEUNG
-0xB5B3 0xB3A8 # HANGUL SYLLABLE TIKEUT-YE
-0xB5B4 0xB3AC # HANGUL SYLLABLE TIKEUT-YE-NIEUN
-0xB5B5 0xB3C4 # HANGUL SYLLABLE TIKEUT-O
-0xB5B6 0xB3C5 # HANGUL SYLLABLE TIKEUT-O-KIYEOK
-0xB5B7 0xB3C8 # HANGUL SYLLABLE TIKEUT-O-NIEUN
-0xB5B8 0xB3CB # HANGUL SYLLABLE TIKEUT-O-TIKEUT
-0xB5B9 0xB3CC # HANGUL SYLLABLE TIKEUT-O-RIEUL
-0xB5BA 0xB3CE # HANGUL SYLLABLE TIKEUT-O-RIEULMIEUM
-0xB5BB 0xB3D0 # HANGUL SYLLABLE TIKEUT-O-RIEULSIOS
-0xB5BC 0xB3D4 # HANGUL SYLLABLE TIKEUT-O-MIEUM
-0xB5BD 0xB3D5 # HANGUL SYLLABLE TIKEUT-O-PIEUP
-0xB5BE 0xB3D7 # HANGUL SYLLABLE TIKEUT-O-SIOS
-0xB5BF 0xB3D9 # HANGUL SYLLABLE TIKEUT-O-IEUNG
-0xB5C0 0xB3DB # HANGUL SYLLABLE TIKEUT-O-CHIEUCH
-0xB5C1 0xB3DD # HANGUL SYLLABLE TIKEUT-O-THIEUTH
-0xB5C2 0xB3E0 # HANGUL SYLLABLE TIKEUT-WA
-0xB5C3 0xB3E4 # HANGUL SYLLABLE TIKEUT-WA-NIEUN
-0xB5C4 0xB3E8 # HANGUL SYLLABLE TIKEUT-WA-RIEUL
-0xB5C5 0xB3FC # HANGUL SYLLABLE TIKEUT-WAE
-0xB5C6 0xB410 # HANGUL SYLLABLE TIKEUT-WAE-SSANGSIOS
-0xB5C7 0xB418 # HANGUL SYLLABLE TIKEUT-OE
-0xB5C8 0xB41C # HANGUL SYLLABLE TIKEUT-OE-NIEUN
-0xB5C9 0xB420 # HANGUL SYLLABLE TIKEUT-OE-RIEUL
-0xB5CA 0xB428 # HANGUL SYLLABLE TIKEUT-OE-MIEUM
-0xB5CB 0xB429 # HANGUL SYLLABLE TIKEUT-OE-PIEUP
-0xB5CC 0xB42B # HANGUL SYLLABLE TIKEUT-OE-SIOS
-0xB5CD 0xB434 # HANGUL SYLLABLE TIKEUT-YO
-0xB5CE 0xB450 # HANGUL SYLLABLE TIKEUT-U
-0xB5CF 0xB451 # HANGUL SYLLABLE TIKEUT-U-KIYEOK
-0xB5D0 0xB454 # HANGUL SYLLABLE TIKEUT-U-NIEUN
-0xB5D1 0xB458 # HANGUL SYLLABLE TIKEUT-U-RIEUL
-0xB5D2 0xB460 # HANGUL SYLLABLE TIKEUT-U-MIEUM
-0xB5D3 0xB461 # HANGUL SYLLABLE TIKEUT-U-PIEUP
-0xB5D4 0xB463 # HANGUL SYLLABLE TIKEUT-U-SIOS
-0xB5D5 0xB465 # HANGUL SYLLABLE TIKEUT-U-IEUNG
-0xB5D6 0xB46C # HANGUL SYLLABLE TIKEUT-WEO
-0xB5D7 0xB480 # HANGUL SYLLABLE TIKEUT-WEO-SSANGSIOS
-0xB5D8 0xB488 # HANGUL SYLLABLE TIKEUT-WE
-0xB5D9 0xB49D # HANGUL SYLLABLE TIKEUT-WE-IEUNG
-0xB5DA 0xB4A4 # HANGUL SYLLABLE TIKEUT-WI
-0xB5DB 0xB4A8 # HANGUL SYLLABLE TIKEUT-WI-NIEUN
-0xB5DC 0xB4AC # HANGUL SYLLABLE TIKEUT-WI-RIEUL
-0xB5DD 0xB4B5 # HANGUL SYLLABLE TIKEUT-WI-PIEUP
-0xB5DE 0xB4B7 # HANGUL SYLLABLE TIKEUT-WI-SIOS
-0xB5DF 0xB4B9 # HANGUL SYLLABLE TIKEUT-WI-IEUNG
-0xB5E0 0xB4C0 # HANGUL SYLLABLE TIKEUT-YU
-0xB5E1 0xB4C4 # HANGUL SYLLABLE TIKEUT-YU-NIEUN
-0xB5E2 0xB4C8 # HANGUL SYLLABLE TIKEUT-YU-RIEUL
-0xB5E3 0xB4D0 # HANGUL SYLLABLE TIKEUT-YU-MIEUM
-0xB5E4 0xB4D5 # HANGUL SYLLABLE TIKEUT-YU-IEUNG
-0xB5E5 0xB4DC # HANGUL SYLLABLE TIKEUT-EU
-0xB5E6 0xB4DD # HANGUL SYLLABLE TIKEUT-EU-KIYEOK
-0xB5E7 0xB4E0 # HANGUL SYLLABLE TIKEUT-EU-NIEUN
-0xB5E8 0xB4E3 # HANGUL SYLLABLE TIKEUT-EU-TIKEUT
-0xB5E9 0xB4E4 # HANGUL SYLLABLE TIKEUT-EU-RIEUL
-0xB5EA 0xB4E6 # HANGUL SYLLABLE TIKEUT-EU-RIEULMIEUM
-0xB5EB 0xB4EC # HANGUL SYLLABLE TIKEUT-EU-MIEUM
-0xB5EC 0xB4ED # HANGUL SYLLABLE TIKEUT-EU-PIEUP
-0xB5ED 0xB4EF # HANGUL SYLLABLE TIKEUT-EU-SIOS
-0xB5EE 0xB4F1 # HANGUL SYLLABLE TIKEUT-EU-IEUNG
-0xB5EF 0xB4F8 # HANGUL SYLLABLE TIKEUT-YI
-0xB5F0 0xB514 # HANGUL SYLLABLE TIKEUT-I
-0xB5F1 0xB515 # HANGUL SYLLABLE TIKEUT-I-KIYEOK
-0xB5F2 0xB518 # HANGUL SYLLABLE TIKEUT-I-NIEUN
-0xB5F3 0xB51B # HANGUL SYLLABLE TIKEUT-I-TIKEUT
-0xB5F4 0xB51C # HANGUL SYLLABLE TIKEUT-I-RIEUL
-0xB5F5 0xB524 # HANGUL SYLLABLE TIKEUT-I-MIEUM
-0xB5F6 0xB525 # HANGUL SYLLABLE TIKEUT-I-PIEUP
-0xB5F7 0xB527 # HANGUL SYLLABLE TIKEUT-I-SIOS
-0xB5F8 0xB528 # HANGUL SYLLABLE TIKEUT-I-SSANGSIOS
-0xB5F9 0xB529 # HANGUL SYLLABLE TIKEUT-I-IEUNG
-0xB5FA 0xB52A # HANGUL SYLLABLE TIKEUT-I-CIEUC
-0xB5FB 0xB530 # HANGUL SYLLABLE SSANGTIKEUT-A
-0xB5FC 0xB531 # HANGUL SYLLABLE SSANGTIKEUT-A-KIYEOK
-0xB5FD 0xB534 # HANGUL SYLLABLE SSANGTIKEUT-A-NIEUN
-0xB5FE 0xB538 # HANGUL SYLLABLE SSANGTIKEUT-A-RIEUL
-0xB641 0xD105 # HANGUL SYLLABLE THIEUTH-YA-RIEULTHIEUTH
-0xB642 0xD106 # HANGUL SYLLABLE THIEUTH-YA-RIEULPHIEUPH
-0xB643 0xD107 # HANGUL SYLLABLE THIEUTH-YA-RIEULHIEUH
-0xB644 0xD108 # HANGUL SYLLABLE THIEUTH-YA-MIEUM
-0xB645 0xD109 # HANGUL SYLLABLE THIEUTH-YA-PIEUP
-0xB646 0xD10A # HANGUL SYLLABLE THIEUTH-YA-PIEUPSIOS
-0xB647 0xD10B # HANGUL SYLLABLE THIEUTH-YA-SIOS
-0xB648 0xD10C # HANGUL SYLLABLE THIEUTH-YA-SSANGSIOS
-0xB649 0xD10E # HANGUL SYLLABLE THIEUTH-YA-CIEUC
-0xB64A 0xD10F # HANGUL SYLLABLE THIEUTH-YA-CHIEUCH
-0xB64B 0xD110 # HANGUL SYLLABLE THIEUTH-YA-KHIEUKH
-0xB64C 0xD111 # HANGUL SYLLABLE THIEUTH-YA-THIEUTH
-0xB64D 0xD112 # HANGUL SYLLABLE THIEUTH-YA-PHIEUPH
-0xB64E 0xD113 # HANGUL SYLLABLE THIEUTH-YA-HIEUH
-0xB64F 0xD114 # HANGUL SYLLABLE THIEUTH-YAE
-0xB650 0xD115 # HANGUL SYLLABLE THIEUTH-YAE-KIYEOK
-0xB651 0xD116 # HANGUL SYLLABLE THIEUTH-YAE-SSANGKIYEOK
-0xB652 0xD117 # HANGUL SYLLABLE THIEUTH-YAE-KIYEOKSIOS
-0xB653 0xD118 # HANGUL SYLLABLE THIEUTH-YAE-NIEUN
-0xB654 0xD119 # HANGUL SYLLABLE THIEUTH-YAE-NIEUNCIEUC
-0xB655 0xD11A # HANGUL SYLLABLE THIEUTH-YAE-NIEUNHIEUH
-0xB656 0xD11B # HANGUL SYLLABLE THIEUTH-YAE-TIKEUT
-0xB657 0xD11C # HANGUL SYLLABLE THIEUTH-YAE-RIEUL
-0xB658 0xD11D # HANGUL SYLLABLE THIEUTH-YAE-RIEULKIYEOK
-0xB659 0xD11E # HANGUL SYLLABLE THIEUTH-YAE-RIEULMIEUM
-0xB65A 0xD11F # HANGUL SYLLABLE THIEUTH-YAE-RIEULPIEUP
-0xB661 0xD120 # HANGUL SYLLABLE THIEUTH-YAE-RIEULSIOS
-0xB662 0xD121 # HANGUL SYLLABLE THIEUTH-YAE-RIEULTHIEUTH
-0xB663 0xD122 # HANGUL SYLLABLE THIEUTH-YAE-RIEULPHIEUPH
-0xB664 0xD123 # HANGUL SYLLABLE THIEUTH-YAE-RIEULHIEUH
-0xB665 0xD124 # HANGUL SYLLABLE THIEUTH-YAE-MIEUM
-0xB666 0xD125 # HANGUL SYLLABLE THIEUTH-YAE-PIEUP
-0xB667 0xD126 # HANGUL SYLLABLE THIEUTH-YAE-PIEUPSIOS
-0xB668 0xD127 # HANGUL SYLLABLE THIEUTH-YAE-SIOS
-0xB669 0xD128 # HANGUL SYLLABLE THIEUTH-YAE-SSANGSIOS
-0xB66A 0xD129 # HANGUL SYLLABLE THIEUTH-YAE-IEUNG
-0xB66B 0xD12A # HANGUL SYLLABLE THIEUTH-YAE-CIEUC
-0xB66C 0xD12B # HANGUL SYLLABLE THIEUTH-YAE-CHIEUCH
-0xB66D 0xD12C # HANGUL SYLLABLE THIEUTH-YAE-KHIEUKH
-0xB66E 0xD12D # HANGUL SYLLABLE THIEUTH-YAE-THIEUTH
-0xB66F 0xD12E # HANGUL SYLLABLE THIEUTH-YAE-PHIEUPH
-0xB670 0xD12F # HANGUL SYLLABLE THIEUTH-YAE-HIEUH
-0xB671 0xD132 # HANGUL SYLLABLE THIEUTH-EO-SSANGKIYEOK
-0xB672 0xD133 # HANGUL SYLLABLE THIEUTH-EO-KIYEOKSIOS
-0xB673 0xD135 # HANGUL SYLLABLE THIEUTH-EO-NIEUNCIEUC
-0xB674 0xD136 # HANGUL SYLLABLE THIEUTH-EO-NIEUNHIEUH
-0xB675 0xD137 # HANGUL SYLLABLE THIEUTH-EO-TIKEUT
-0xB676 0xD139 # HANGUL SYLLABLE THIEUTH-EO-RIEULKIYEOK
-0xB677 0xD13B # HANGUL SYLLABLE THIEUTH-EO-RIEULPIEUP
-0xB678 0xD13C # HANGUL SYLLABLE THIEUTH-EO-RIEULSIOS
-0xB679 0xD13D # HANGUL SYLLABLE THIEUTH-EO-RIEULTHIEUTH
-0xB67A 0xD13E # HANGUL SYLLABLE THIEUTH-EO-RIEULPHIEUPH
-0xB681 0xD13F # HANGUL SYLLABLE THIEUTH-EO-RIEULHIEUH
-0xB682 0xD142 # HANGUL SYLLABLE THIEUTH-EO-PIEUPSIOS
-0xB683 0xD146 # HANGUL SYLLABLE THIEUTH-EO-CIEUC
-0xB684 0xD147 # HANGUL SYLLABLE THIEUTH-EO-CHIEUCH
-0xB685 0xD148 # HANGUL SYLLABLE THIEUTH-EO-KHIEUKH
-0xB686 0xD149 # HANGUL SYLLABLE THIEUTH-EO-THIEUTH
-0xB687 0xD14A # HANGUL SYLLABLE THIEUTH-EO-PHIEUPH
-0xB688 0xD14B # HANGUL SYLLABLE THIEUTH-EO-HIEUH
-0xB689 0xD14E # HANGUL SYLLABLE THIEUTH-E-SSANGKIYEOK
-0xB68A 0xD14F # HANGUL SYLLABLE THIEUTH-E-KIYEOKSIOS
-0xB68B 0xD151 # HANGUL SYLLABLE THIEUTH-E-NIEUNCIEUC
-0xB68C 0xD152 # HANGUL SYLLABLE THIEUTH-E-NIEUNHIEUH
-0xB68D 0xD153 # HANGUL SYLLABLE THIEUTH-E-TIKEUT
-0xB68E 0xD155 # HANGUL SYLLABLE THIEUTH-E-RIEULKIYEOK
-0xB68F 0xD156 # HANGUL SYLLABLE THIEUTH-E-RIEULMIEUM
-0xB690 0xD157 # HANGUL SYLLABLE THIEUTH-E-RIEULPIEUP
-0xB691 0xD158 # HANGUL SYLLABLE THIEUTH-E-RIEULSIOS
-0xB692 0xD159 # HANGUL SYLLABLE THIEUTH-E-RIEULTHIEUTH
-0xB693 0xD15A # HANGUL SYLLABLE THIEUTH-E-RIEULPHIEUPH
-0xB694 0xD15B # HANGUL SYLLABLE THIEUTH-E-RIEULHIEUH
-0xB695 0xD15E # HANGUL SYLLABLE THIEUTH-E-PIEUPSIOS
-0xB696 0xD160 # HANGUL SYLLABLE THIEUTH-E-SSANGSIOS
-0xB697 0xD162 # HANGUL SYLLABLE THIEUTH-E-CIEUC
-0xB698 0xD163 # HANGUL SYLLABLE THIEUTH-E-CHIEUCH
-0xB699 0xD164 # HANGUL SYLLABLE THIEUTH-E-KHIEUKH
-0xB69A 0xD165 # HANGUL SYLLABLE THIEUTH-E-THIEUTH
-0xB69B 0xD166 # HANGUL SYLLABLE THIEUTH-E-PHIEUPH
-0xB69C 0xD167 # HANGUL SYLLABLE THIEUTH-E-HIEUH
-0xB69D 0xD169 # HANGUL SYLLABLE THIEUTH-YEO-KIYEOK
-0xB69E 0xD16A # HANGUL SYLLABLE THIEUTH-YEO-SSANGKIYEOK
-0xB69F 0xD16B # HANGUL SYLLABLE THIEUTH-YEO-KIYEOKSIOS
-0xB6A0 0xD16D # HANGUL SYLLABLE THIEUTH-YEO-NIEUNCIEUC
-0xB6A1 0xB540 # HANGUL SYLLABLE SSANGTIKEUT-A-MIEUM
-0xB6A2 0xB541 # HANGUL SYLLABLE SSANGTIKEUT-A-PIEUP
-0xB6A3 0xB543 # HANGUL SYLLABLE SSANGTIKEUT-A-SIOS
-0xB6A4 0xB544 # HANGUL SYLLABLE SSANGTIKEUT-A-SSANGSIOS
-0xB6A5 0xB545 # HANGUL SYLLABLE SSANGTIKEUT-A-IEUNG
-0xB6A6 0xB54B # HANGUL SYLLABLE SSANGTIKEUT-A-HIEUH
-0xB6A7 0xB54C # HANGUL SYLLABLE SSANGTIKEUT-AE
-0xB6A8 0xB54D # HANGUL SYLLABLE SSANGTIKEUT-AE-KIYEOK
-0xB6A9 0xB550 # HANGUL SYLLABLE SSANGTIKEUT-AE-NIEUN
-0xB6AA 0xB554 # HANGUL SYLLABLE SSANGTIKEUT-AE-RIEUL
-0xB6AB 0xB55C # HANGUL SYLLABLE SSANGTIKEUT-AE-MIEUM
-0xB6AC 0xB55D # HANGUL SYLLABLE SSANGTIKEUT-AE-PIEUP
-0xB6AD 0xB55F # HANGUL SYLLABLE SSANGTIKEUT-AE-SIOS
-0xB6AE 0xB560 # HANGUL SYLLABLE SSANGTIKEUT-AE-SSANGSIOS
-0xB6AF 0xB561 # HANGUL SYLLABLE SSANGTIKEUT-AE-IEUNG
-0xB6B0 0xB5A0 # HANGUL SYLLABLE SSANGTIKEUT-EO
-0xB6B1 0xB5A1 # HANGUL SYLLABLE SSANGTIKEUT-EO-KIYEOK
-0xB6B2 0xB5A4 # HANGUL SYLLABLE SSANGTIKEUT-EO-NIEUN
-0xB6B3 0xB5A8 # HANGUL SYLLABLE SSANGTIKEUT-EO-RIEUL
-0xB6B4 0xB5AA # HANGUL SYLLABLE SSANGTIKEUT-EO-RIEULMIEUM
-0xB6B5 0xB5AB # HANGUL SYLLABLE SSANGTIKEUT-EO-RIEULPIEUP
-0xB6B6 0xB5B0 # HANGUL SYLLABLE SSANGTIKEUT-EO-MIEUM
-0xB6B7 0xB5B1 # HANGUL SYLLABLE SSANGTIKEUT-EO-PIEUP
-0xB6B8 0xB5B3 # HANGUL SYLLABLE SSANGTIKEUT-EO-SIOS
-0xB6B9 0xB5B4 # HANGUL SYLLABLE SSANGTIKEUT-EO-SSANGSIOS
-0xB6BA 0xB5B5 # HANGUL SYLLABLE SSANGTIKEUT-EO-IEUNG
-0xB6BB 0xB5BB # HANGUL SYLLABLE SSANGTIKEUT-EO-HIEUH
-0xB6BC 0xB5BC # HANGUL SYLLABLE SSANGTIKEUT-E
-0xB6BD 0xB5BD # HANGUL SYLLABLE SSANGTIKEUT-E-KIYEOK
-0xB6BE 0xB5C0 # HANGUL SYLLABLE SSANGTIKEUT-E-NIEUN
-0xB6BF 0xB5C4 # HANGUL SYLLABLE SSANGTIKEUT-E-RIEUL
-0xB6C0 0xB5CC # HANGUL SYLLABLE SSANGTIKEUT-E-MIEUM
-0xB6C1 0xB5CD # HANGUL SYLLABLE SSANGTIKEUT-E-PIEUP
-0xB6C2 0xB5CF # HANGUL SYLLABLE SSANGTIKEUT-E-SIOS
-0xB6C3 0xB5D0 # HANGUL SYLLABLE SSANGTIKEUT-E-SSANGSIOS
-0xB6C4 0xB5D1 # HANGUL SYLLABLE SSANGTIKEUT-E-IEUNG
-0xB6C5 0xB5D8 # HANGUL SYLLABLE SSANGTIKEUT-YEO
-0xB6C6 0xB5EC # HANGUL SYLLABLE SSANGTIKEUT-YEO-SSANGSIOS
-0xB6C7 0xB610 # HANGUL SYLLABLE SSANGTIKEUT-O
-0xB6C8 0xB611 # HANGUL SYLLABLE SSANGTIKEUT-O-KIYEOK
-0xB6C9 0xB614 # HANGUL SYLLABLE SSANGTIKEUT-O-NIEUN
-0xB6CA 0xB618 # HANGUL SYLLABLE SSANGTIKEUT-O-RIEUL
-0xB6CB 0xB625 # HANGUL SYLLABLE SSANGTIKEUT-O-IEUNG
-0xB6CC 0xB62C # HANGUL SYLLABLE SSANGTIKEUT-WA
-0xB6CD 0xB634 # HANGUL SYLLABLE SSANGTIKEUT-WA-RIEUL
-0xB6CE 0xB648 # HANGUL SYLLABLE SSANGTIKEUT-WAE
-0xB6CF 0xB664 # HANGUL SYLLABLE SSANGTIKEUT-OE
-0xB6D0 0xB668 # HANGUL SYLLABLE SSANGTIKEUT-OE-NIEUN
-0xB6D1 0xB69C # HANGUL SYLLABLE SSANGTIKEUT-U
-0xB6D2 0xB69D # HANGUL SYLLABLE SSANGTIKEUT-U-KIYEOK
-0xB6D3 0xB6A0 # HANGUL SYLLABLE SSANGTIKEUT-U-NIEUN
-0xB6D4 0xB6A4 # HANGUL SYLLABLE SSANGTIKEUT-U-RIEUL
-0xB6D5 0xB6AB # HANGUL SYLLABLE SSANGTIKEUT-U-RIEULHIEUH
-0xB6D6 0xB6AC # HANGUL SYLLABLE SSANGTIKEUT-U-MIEUM
-0xB6D7 0xB6B1 # HANGUL SYLLABLE SSANGTIKEUT-U-IEUNG
-0xB6D8 0xB6D4 # HANGUL SYLLABLE SSANGTIKEUT-WE
-0xB6D9 0xB6F0 # HANGUL SYLLABLE SSANGTIKEUT-WI
-0xB6DA 0xB6F4 # HANGUL SYLLABLE SSANGTIKEUT-WI-NIEUN
-0xB6DB 0xB6F8 # HANGUL SYLLABLE SSANGTIKEUT-WI-RIEUL
-0xB6DC 0xB700 # HANGUL SYLLABLE SSANGTIKEUT-WI-MIEUM
-0xB6DD 0xB701 # HANGUL SYLLABLE SSANGTIKEUT-WI-PIEUP
-0xB6DE 0xB705 # HANGUL SYLLABLE SSANGTIKEUT-WI-IEUNG
-0xB6DF 0xB728 # HANGUL SYLLABLE SSANGTIKEUT-EU
-0xB6E0 0xB729 # HANGUL SYLLABLE SSANGTIKEUT-EU-KIYEOK
-0xB6E1 0xB72C # HANGUL SYLLABLE SSANGTIKEUT-EU-NIEUN
-0xB6E2 0xB72F # HANGUL SYLLABLE SSANGTIKEUT-EU-TIKEUT
-0xB6E3 0xB730 # HANGUL SYLLABLE SSANGTIKEUT-EU-RIEUL
-0xB6E4 0xB738 # HANGUL SYLLABLE SSANGTIKEUT-EU-MIEUM
-0xB6E5 0xB739 # HANGUL SYLLABLE SSANGTIKEUT-EU-PIEUP
-0xB6E6 0xB73B # HANGUL SYLLABLE SSANGTIKEUT-EU-SIOS
-0xB6E7 0xB744 # HANGUL SYLLABLE SSANGTIKEUT-YI
-0xB6E8 0xB748 # HANGUL SYLLABLE SSANGTIKEUT-YI-NIEUN
-0xB6E9 0xB74C # HANGUL SYLLABLE SSANGTIKEUT-YI-RIEUL
-0xB6EA 0xB754 # HANGUL SYLLABLE SSANGTIKEUT-YI-MIEUM
-0xB6EB 0xB755 # HANGUL SYLLABLE SSANGTIKEUT-YI-PIEUP
-0xB6EC 0xB760 # HANGUL SYLLABLE SSANGTIKEUT-I
-0xB6ED 0xB764 # HANGUL SYLLABLE SSANGTIKEUT-I-NIEUN
-0xB6EE 0xB768 # HANGUL SYLLABLE SSANGTIKEUT-I-RIEUL
-0xB6EF 0xB770 # HANGUL SYLLABLE SSANGTIKEUT-I-MIEUM
-0xB6F0 0xB771 # HANGUL SYLLABLE SSANGTIKEUT-I-PIEUP
-0xB6F1 0xB773 # HANGUL SYLLABLE SSANGTIKEUT-I-SIOS
-0xB6F2 0xB775 # HANGUL SYLLABLE SSANGTIKEUT-I-IEUNG
-0xB6F3 0xB77C # HANGUL SYLLABLE RIEUL-A
-0xB6F4 0xB77D # HANGUL SYLLABLE RIEUL-A-KIYEOK
-0xB6F5 0xB780 # HANGUL SYLLABLE RIEUL-A-NIEUN
-0xB6F6 0xB784 # HANGUL SYLLABLE RIEUL-A-RIEUL
-0xB6F7 0xB78C # HANGUL SYLLABLE RIEUL-A-MIEUM
-0xB6F8 0xB78D # HANGUL SYLLABLE RIEUL-A-PIEUP
-0xB6F9 0xB78F # HANGUL SYLLABLE RIEUL-A-SIOS
-0xB6FA 0xB790 # HANGUL SYLLABLE RIEUL-A-SSANGSIOS
-0xB6FB 0xB791 # HANGUL SYLLABLE RIEUL-A-IEUNG
-0xB6FC 0xB792 # HANGUL SYLLABLE RIEUL-A-CIEUC
-0xB6FD 0xB796 # HANGUL SYLLABLE RIEUL-A-PHIEUPH
-0xB6FE 0xB797 # HANGUL SYLLABLE RIEUL-A-HIEUH
-0xB741 0xD16E # HANGUL SYLLABLE THIEUTH-YEO-NIEUNHIEUH
-0xB742 0xD16F # HANGUL SYLLABLE THIEUTH-YEO-TIKEUT
-0xB743 0xD170 # HANGUL SYLLABLE THIEUTH-YEO-RIEUL
-0xB744 0xD171 # HANGUL SYLLABLE THIEUTH-YEO-RIEULKIYEOK
-0xB745 0xD172 # HANGUL SYLLABLE THIEUTH-YEO-RIEULMIEUM
-0xB746 0xD173 # HANGUL SYLLABLE THIEUTH-YEO-RIEULPIEUP
-0xB747 0xD174 # HANGUL SYLLABLE THIEUTH-YEO-RIEULSIOS
-0xB748 0xD175 # HANGUL SYLLABLE THIEUTH-YEO-RIEULTHIEUTH
-0xB749 0xD176 # HANGUL SYLLABLE THIEUTH-YEO-RIEULPHIEUPH
-0xB74A 0xD177 # HANGUL SYLLABLE THIEUTH-YEO-RIEULHIEUH
-0xB74B 0xD178 # HANGUL SYLLABLE THIEUTH-YEO-MIEUM
-0xB74C 0xD179 # HANGUL SYLLABLE THIEUTH-YEO-PIEUP
-0xB74D 0xD17A # HANGUL SYLLABLE THIEUTH-YEO-PIEUPSIOS
-0xB74E 0xD17B # HANGUL SYLLABLE THIEUTH-YEO-SIOS
-0xB74F 0xD17D # HANGUL SYLLABLE THIEUTH-YEO-IEUNG
-0xB750 0xD17E # HANGUL SYLLABLE THIEUTH-YEO-CIEUC
-0xB751 0xD17F # HANGUL SYLLABLE THIEUTH-YEO-CHIEUCH
-0xB752 0xD180 # HANGUL SYLLABLE THIEUTH-YEO-KHIEUKH
-0xB753 0xD181 # HANGUL SYLLABLE THIEUTH-YEO-THIEUTH
-0xB754 0xD182 # HANGUL SYLLABLE THIEUTH-YEO-PHIEUPH
-0xB755 0xD183 # HANGUL SYLLABLE THIEUTH-YEO-HIEUH
-0xB756 0xD185 # HANGUL SYLLABLE THIEUTH-YE-KIYEOK
-0xB757 0xD186 # HANGUL SYLLABLE THIEUTH-YE-SSANGKIYEOK
-0xB758 0xD187 # HANGUL SYLLABLE THIEUTH-YE-KIYEOKSIOS
-0xB759 0xD189 # HANGUL SYLLABLE THIEUTH-YE-NIEUNCIEUC
-0xB75A 0xD18A # HANGUL SYLLABLE THIEUTH-YE-NIEUNHIEUH
-0xB761 0xD18B # HANGUL SYLLABLE THIEUTH-YE-TIKEUT
-0xB762 0xD18C # HANGUL SYLLABLE THIEUTH-YE-RIEUL
-0xB763 0xD18D # HANGUL SYLLABLE THIEUTH-YE-RIEULKIYEOK
-0xB764 0xD18E # HANGUL SYLLABLE THIEUTH-YE-RIEULMIEUM
-0xB765 0xD18F # HANGUL SYLLABLE THIEUTH-YE-RIEULPIEUP
-0xB766 0xD190 # HANGUL SYLLABLE THIEUTH-YE-RIEULSIOS
-0xB767 0xD191 # HANGUL SYLLABLE THIEUTH-YE-RIEULTHIEUTH
-0xB768 0xD192 # HANGUL SYLLABLE THIEUTH-YE-RIEULPHIEUPH
-0xB769 0xD193 # HANGUL SYLLABLE THIEUTH-YE-RIEULHIEUH
-0xB76A 0xD194 # HANGUL SYLLABLE THIEUTH-YE-MIEUM
-0xB76B 0xD195 # HANGUL SYLLABLE THIEUTH-YE-PIEUP
-0xB76C 0xD196 # HANGUL SYLLABLE THIEUTH-YE-PIEUPSIOS
-0xB76D 0xD197 # HANGUL SYLLABLE THIEUTH-YE-SIOS
-0xB76E 0xD198 # HANGUL SYLLABLE THIEUTH-YE-SSANGSIOS
-0xB76F 0xD199 # HANGUL SYLLABLE THIEUTH-YE-IEUNG
-0xB770 0xD19A # HANGUL SYLLABLE THIEUTH-YE-CIEUC
-0xB771 0xD19B # HANGUL SYLLABLE THIEUTH-YE-CHIEUCH
-0xB772 0xD19C # HANGUL SYLLABLE THIEUTH-YE-KHIEUKH
-0xB773 0xD19D # HANGUL SYLLABLE THIEUTH-YE-THIEUTH
-0xB774 0xD19E # HANGUL SYLLABLE THIEUTH-YE-PHIEUPH
-0xB775 0xD19F # HANGUL SYLLABLE THIEUTH-YE-HIEUH
-0xB776 0xD1A2 # HANGUL SYLLABLE THIEUTH-O-SSANGKIYEOK
-0xB777 0xD1A3 # HANGUL SYLLABLE THIEUTH-O-KIYEOKSIOS
-0xB778 0xD1A5 # HANGUL SYLLABLE THIEUTH-O-NIEUNCIEUC
-0xB779 0xD1A6 # HANGUL SYLLABLE THIEUTH-O-NIEUNHIEUH
-0xB77A 0xD1A7 # HANGUL SYLLABLE THIEUTH-O-TIKEUT
-0xB781 0xD1A9 # HANGUL SYLLABLE THIEUTH-O-RIEULKIYEOK
-0xB782 0xD1AA # HANGUL SYLLABLE THIEUTH-O-RIEULMIEUM
-0xB783 0xD1AB # HANGUL SYLLABLE THIEUTH-O-RIEULPIEUP
-0xB784 0xD1AC # HANGUL SYLLABLE THIEUTH-O-RIEULSIOS
-0xB785 0xD1AD # HANGUL SYLLABLE THIEUTH-O-RIEULTHIEUTH
-0xB786 0xD1AE # HANGUL SYLLABLE THIEUTH-O-RIEULPHIEUPH
-0xB787 0xD1AF # HANGUL SYLLABLE THIEUTH-O-RIEULHIEUH
-0xB788 0xD1B2 # HANGUL SYLLABLE THIEUTH-O-PIEUPSIOS
-0xB789 0xD1B4 # HANGUL SYLLABLE THIEUTH-O-SSANGSIOS
-0xB78A 0xD1B6 # HANGUL SYLLABLE THIEUTH-O-CIEUC
-0xB78B 0xD1B7 # HANGUL SYLLABLE THIEUTH-O-CHIEUCH
-0xB78C 0xD1B8 # HANGUL SYLLABLE THIEUTH-O-KHIEUKH
-0xB78D 0xD1B9 # HANGUL SYLLABLE THIEUTH-O-THIEUTH
-0xB78E 0xD1BB # HANGUL SYLLABLE THIEUTH-O-HIEUH
-0xB78F 0xD1BD # HANGUL SYLLABLE THIEUTH-WA-KIYEOK
-0xB790 0xD1BE # HANGUL SYLLABLE THIEUTH-WA-SSANGKIYEOK
-0xB791 0xD1BF # HANGUL SYLLABLE THIEUTH-WA-KIYEOKSIOS
-0xB792 0xD1C1 # HANGUL SYLLABLE THIEUTH-WA-NIEUNCIEUC
-0xB793 0xD1C2 # HANGUL SYLLABLE THIEUTH-WA-NIEUNHIEUH
-0xB794 0xD1C3 # HANGUL SYLLABLE THIEUTH-WA-TIKEUT
-0xB795 0xD1C4 # HANGUL SYLLABLE THIEUTH-WA-RIEUL
-0xB796 0xD1C5 # HANGUL SYLLABLE THIEUTH-WA-RIEULKIYEOK
-0xB797 0xD1C6 # HANGUL SYLLABLE THIEUTH-WA-RIEULMIEUM
-0xB798 0xD1C7 # HANGUL SYLLABLE THIEUTH-WA-RIEULPIEUP
-0xB799 0xD1C8 # HANGUL SYLLABLE THIEUTH-WA-RIEULSIOS
-0xB79A 0xD1C9 # HANGUL SYLLABLE THIEUTH-WA-RIEULTHIEUTH
-0xB79B 0xD1CA # HANGUL SYLLABLE THIEUTH-WA-RIEULPHIEUPH
-0xB79C 0xD1CB # HANGUL SYLLABLE THIEUTH-WA-RIEULHIEUH
-0xB79D 0xD1CC # HANGUL SYLLABLE THIEUTH-WA-MIEUM
-0xB79E 0xD1CD # HANGUL SYLLABLE THIEUTH-WA-PIEUP
-0xB79F 0xD1CE # HANGUL SYLLABLE THIEUTH-WA-PIEUPSIOS
-0xB7A0 0xD1CF # HANGUL SYLLABLE THIEUTH-WA-SIOS
-0xB7A1 0xB798 # HANGUL SYLLABLE RIEUL-AE
-0xB7A2 0xB799 # HANGUL SYLLABLE RIEUL-AE-KIYEOK
-0xB7A3 0xB79C # HANGUL SYLLABLE RIEUL-AE-NIEUN
-0xB7A4 0xB7A0 # HANGUL SYLLABLE RIEUL-AE-RIEUL
-0xB7A5 0xB7A8 # HANGUL SYLLABLE RIEUL-AE-MIEUM
-0xB7A6 0xB7A9 # HANGUL SYLLABLE RIEUL-AE-PIEUP
-0xB7A7 0xB7AB # HANGUL SYLLABLE RIEUL-AE-SIOS
-0xB7A8 0xB7AC # HANGUL SYLLABLE RIEUL-AE-SSANGSIOS
-0xB7A9 0xB7AD # HANGUL SYLLABLE RIEUL-AE-IEUNG
-0xB7AA 0xB7B4 # HANGUL SYLLABLE RIEUL-YA
-0xB7AB 0xB7B5 # HANGUL SYLLABLE RIEUL-YA-KIYEOK
-0xB7AC 0xB7B8 # HANGUL SYLLABLE RIEUL-YA-NIEUN
-0xB7AD 0xB7C7 # HANGUL SYLLABLE RIEUL-YA-SIOS
-0xB7AE 0xB7C9 # HANGUL SYLLABLE RIEUL-YA-IEUNG
-0xB7AF 0xB7EC # HANGUL SYLLABLE RIEUL-EO
-0xB7B0 0xB7ED # HANGUL SYLLABLE RIEUL-EO-KIYEOK
-0xB7B1 0xB7F0 # HANGUL SYLLABLE RIEUL-EO-NIEUN
-0xB7B2 0xB7F4 # HANGUL SYLLABLE RIEUL-EO-RIEUL
-0xB7B3 0xB7FC # HANGUL SYLLABLE RIEUL-EO-MIEUM
-0xB7B4 0xB7FD # HANGUL SYLLABLE RIEUL-EO-PIEUP
-0xB7B5 0xB7FF # HANGUL SYLLABLE RIEUL-EO-SIOS
-0xB7B6 0xB800 # HANGUL SYLLABLE RIEUL-EO-SSANGSIOS
-0xB7B7 0xB801 # HANGUL SYLLABLE RIEUL-EO-IEUNG
-0xB7B8 0xB807 # HANGUL SYLLABLE RIEUL-EO-HIEUH
-0xB7B9 0xB808 # HANGUL SYLLABLE RIEUL-E
-0xB7BA 0xB809 # HANGUL SYLLABLE RIEUL-E-KIYEOK
-0xB7BB 0xB80C # HANGUL SYLLABLE RIEUL-E-NIEUN
-0xB7BC 0xB810 # HANGUL SYLLABLE RIEUL-E-RIEUL
-0xB7BD 0xB818 # HANGUL SYLLABLE RIEUL-E-MIEUM
-0xB7BE 0xB819 # HANGUL SYLLABLE RIEUL-E-PIEUP
-0xB7BF 0xB81B # HANGUL SYLLABLE RIEUL-E-SIOS
-0xB7C0 0xB81D # HANGUL SYLLABLE RIEUL-E-IEUNG
-0xB7C1 0xB824 # HANGUL SYLLABLE RIEUL-YEO
-0xB7C2 0xB825 # HANGUL SYLLABLE RIEUL-YEO-KIYEOK
-0xB7C3 0xB828 # HANGUL SYLLABLE RIEUL-YEO-NIEUN
-0xB7C4 0xB82C # HANGUL SYLLABLE RIEUL-YEO-RIEUL
-0xB7C5 0xB834 # HANGUL SYLLABLE RIEUL-YEO-MIEUM
-0xB7C6 0xB835 # HANGUL SYLLABLE RIEUL-YEO-PIEUP
-0xB7C7 0xB837 # HANGUL SYLLABLE RIEUL-YEO-SIOS
-0xB7C8 0xB838 # HANGUL SYLLABLE RIEUL-YEO-SSANGSIOS
-0xB7C9 0xB839 # HANGUL SYLLABLE RIEUL-YEO-IEUNG
-0xB7CA 0xB840 # HANGUL SYLLABLE RIEUL-YE
-0xB7CB 0xB844 # HANGUL SYLLABLE RIEUL-YE-NIEUN
-0xB7CC 0xB851 # HANGUL SYLLABLE RIEUL-YE-PIEUP
-0xB7CD 0xB853 # HANGUL SYLLABLE RIEUL-YE-SIOS
-0xB7CE 0xB85C # HANGUL SYLLABLE RIEUL-O
-0xB7CF 0xB85D # HANGUL SYLLABLE RIEUL-O-KIYEOK
-0xB7D0 0xB860 # HANGUL SYLLABLE RIEUL-O-NIEUN
-0xB7D1 0xB864 # HANGUL SYLLABLE RIEUL-O-RIEUL
-0xB7D2 0xB86C # HANGUL SYLLABLE RIEUL-O-MIEUM
-0xB7D3 0xB86D # HANGUL SYLLABLE RIEUL-O-PIEUP
-0xB7D4 0xB86F # HANGUL SYLLABLE RIEUL-O-SIOS
-0xB7D5 0xB871 # HANGUL SYLLABLE RIEUL-O-IEUNG
-0xB7D6 0xB878 # HANGUL SYLLABLE RIEUL-WA
-0xB7D7 0xB87C # HANGUL SYLLABLE RIEUL-WA-NIEUN
-0xB7D8 0xB88D # HANGUL SYLLABLE RIEUL-WA-IEUNG
-0xB7D9 0xB8A8 # HANGUL SYLLABLE RIEUL-WAE-SSANGSIOS
-0xB7DA 0xB8B0 # HANGUL SYLLABLE RIEUL-OE
-0xB7DB 0xB8B4 # HANGUL SYLLABLE RIEUL-OE-NIEUN
-0xB7DC 0xB8B8 # HANGUL SYLLABLE RIEUL-OE-RIEUL
-0xB7DD 0xB8C0 # HANGUL SYLLABLE RIEUL-OE-MIEUM
-0xB7DE 0xB8C1 # HANGUL SYLLABLE RIEUL-OE-PIEUP
-0xB7DF 0xB8C3 # HANGUL SYLLABLE RIEUL-OE-SIOS
-0xB7E0 0xB8C5 # HANGUL SYLLABLE RIEUL-OE-IEUNG
-0xB7E1 0xB8CC # HANGUL SYLLABLE RIEUL-YO
-0xB7E2 0xB8D0 # HANGUL SYLLABLE RIEUL-YO-NIEUN
-0xB7E3 0xB8D4 # HANGUL SYLLABLE RIEUL-YO-RIEUL
-0xB7E4 0xB8DD # HANGUL SYLLABLE RIEUL-YO-PIEUP
-0xB7E5 0xB8DF # HANGUL SYLLABLE RIEUL-YO-SIOS
-0xB7E6 0xB8E1 # HANGUL SYLLABLE RIEUL-YO-IEUNG
-0xB7E7 0xB8E8 # HANGUL SYLLABLE RIEUL-U
-0xB7E8 0xB8E9 # HANGUL SYLLABLE RIEUL-U-KIYEOK
-0xB7E9 0xB8EC # HANGUL SYLLABLE RIEUL-U-NIEUN
-0xB7EA 0xB8F0 # HANGUL SYLLABLE RIEUL-U-RIEUL
-0xB7EB 0xB8F8 # HANGUL SYLLABLE RIEUL-U-MIEUM
-0xB7EC 0xB8F9 # HANGUL SYLLABLE RIEUL-U-PIEUP
-0xB7ED 0xB8FB # HANGUL SYLLABLE RIEUL-U-SIOS
-0xB7EE 0xB8FD # HANGUL SYLLABLE RIEUL-U-IEUNG
-0xB7EF 0xB904 # HANGUL SYLLABLE RIEUL-WEO
-0xB7F0 0xB918 # HANGUL SYLLABLE RIEUL-WEO-SSANGSIOS
-0xB7F1 0xB920 # HANGUL SYLLABLE RIEUL-WE
-0xB7F2 0xB93C # HANGUL SYLLABLE RIEUL-WI
-0xB7F3 0xB93D # HANGUL SYLLABLE RIEUL-WI-KIYEOK
-0xB7F4 0xB940 # HANGUL SYLLABLE RIEUL-WI-NIEUN
-0xB7F5 0xB944 # HANGUL SYLLABLE RIEUL-WI-RIEUL
-0xB7F6 0xB94C # HANGUL SYLLABLE RIEUL-WI-MIEUM
-0xB7F7 0xB94F # HANGUL SYLLABLE RIEUL-WI-SIOS
-0xB7F8 0xB951 # HANGUL SYLLABLE RIEUL-WI-IEUNG
-0xB7F9 0xB958 # HANGUL SYLLABLE RIEUL-YU
-0xB7FA 0xB959 # HANGUL SYLLABLE RIEUL-YU-KIYEOK
-0xB7FB 0xB95C # HANGUL SYLLABLE RIEUL-YU-NIEUN
-0xB7FC 0xB960 # HANGUL SYLLABLE RIEUL-YU-RIEUL
-0xB7FD 0xB968 # HANGUL SYLLABLE RIEUL-YU-MIEUM
-0xB7FE 0xB969 # HANGUL SYLLABLE RIEUL-YU-PIEUP
-0xB841 0xD1D0 # HANGUL SYLLABLE THIEUTH-WA-SSANGSIOS
-0xB842 0xD1D1 # HANGUL SYLLABLE THIEUTH-WA-IEUNG
-0xB843 0xD1D2 # HANGUL SYLLABLE THIEUTH-WA-CIEUC
-0xB844 0xD1D3 # HANGUL SYLLABLE THIEUTH-WA-CHIEUCH
-0xB845 0xD1D4 # HANGUL SYLLABLE THIEUTH-WA-KHIEUKH
-0xB846 0xD1D5 # HANGUL SYLLABLE THIEUTH-WA-THIEUTH
-0xB847 0xD1D6 # HANGUL SYLLABLE THIEUTH-WA-PHIEUPH
-0xB848 0xD1D7 # HANGUL SYLLABLE THIEUTH-WA-HIEUH
-0xB849 0xD1D9 # HANGUL SYLLABLE THIEUTH-WAE-KIYEOK
-0xB84A 0xD1DA # HANGUL SYLLABLE THIEUTH-WAE-SSANGKIYEOK
-0xB84B 0xD1DB # HANGUL SYLLABLE THIEUTH-WAE-KIYEOKSIOS
-0xB84C 0xD1DC # HANGUL SYLLABLE THIEUTH-WAE-NIEUN
-0xB84D 0xD1DD # HANGUL SYLLABLE THIEUTH-WAE-NIEUNCIEUC
-0xB84E 0xD1DE # HANGUL SYLLABLE THIEUTH-WAE-NIEUNHIEUH
-0xB84F 0xD1DF # HANGUL SYLLABLE THIEUTH-WAE-TIKEUT
-0xB850 0xD1E0 # HANGUL SYLLABLE THIEUTH-WAE-RIEUL
-0xB851 0xD1E1 # HANGUL SYLLABLE THIEUTH-WAE-RIEULKIYEOK
-0xB852 0xD1E2 # HANGUL SYLLABLE THIEUTH-WAE-RIEULMIEUM
-0xB853 0xD1E3 # HANGUL SYLLABLE THIEUTH-WAE-RIEULPIEUP
-0xB854 0xD1E4 # HANGUL SYLLABLE THIEUTH-WAE-RIEULSIOS
-0xB855 0xD1E5 # HANGUL SYLLABLE THIEUTH-WAE-RIEULTHIEUTH
-0xB856 0xD1E6 # HANGUL SYLLABLE THIEUTH-WAE-RIEULPHIEUPH
-0xB857 0xD1E7 # HANGUL SYLLABLE THIEUTH-WAE-RIEULHIEUH
-0xB858 0xD1E8 # HANGUL SYLLABLE THIEUTH-WAE-MIEUM
-0xB859 0xD1E9 # HANGUL SYLLABLE THIEUTH-WAE-PIEUP
-0xB85A 0xD1EA # HANGUL SYLLABLE THIEUTH-WAE-PIEUPSIOS
-0xB861 0xD1EB # HANGUL SYLLABLE THIEUTH-WAE-SIOS
-0xB862 0xD1EC # HANGUL SYLLABLE THIEUTH-WAE-SSANGSIOS
-0xB863 0xD1ED # HANGUL SYLLABLE THIEUTH-WAE-IEUNG
-0xB864 0xD1EE # HANGUL SYLLABLE THIEUTH-WAE-CIEUC
-0xB865 0xD1EF # HANGUL SYLLABLE THIEUTH-WAE-CHIEUCH
-0xB866 0xD1F0 # HANGUL SYLLABLE THIEUTH-WAE-KHIEUKH
-0xB867 0xD1F1 # HANGUL SYLLABLE THIEUTH-WAE-THIEUTH
-0xB868 0xD1F2 # HANGUL SYLLABLE THIEUTH-WAE-PHIEUPH
-0xB869 0xD1F3 # HANGUL SYLLABLE THIEUTH-WAE-HIEUH
-0xB86A 0xD1F5 # HANGUL SYLLABLE THIEUTH-OE-KIYEOK
-0xB86B 0xD1F6 # HANGUL SYLLABLE THIEUTH-OE-SSANGKIYEOK
-0xB86C 0xD1F7 # HANGUL SYLLABLE THIEUTH-OE-KIYEOKSIOS
-0xB86D 0xD1F9 # HANGUL SYLLABLE THIEUTH-OE-NIEUNCIEUC
-0xB86E 0xD1FA # HANGUL SYLLABLE THIEUTH-OE-NIEUNHIEUH
-0xB86F 0xD1FB # HANGUL SYLLABLE THIEUTH-OE-TIKEUT
-0xB870 0xD1FC # HANGUL SYLLABLE THIEUTH-OE-RIEUL
-0xB871 0xD1FD # HANGUL SYLLABLE THIEUTH-OE-RIEULKIYEOK
-0xB872 0xD1FE # HANGUL SYLLABLE THIEUTH-OE-RIEULMIEUM
-0xB873 0xD1FF # HANGUL SYLLABLE THIEUTH-OE-RIEULPIEUP
-0xB874 0xD200 # HANGUL SYLLABLE THIEUTH-OE-RIEULSIOS
-0xB875 0xD201 # HANGUL SYLLABLE THIEUTH-OE-RIEULTHIEUTH
-0xB876 0xD202 # HANGUL SYLLABLE THIEUTH-OE-RIEULPHIEUPH
-0xB877 0xD203 # HANGUL SYLLABLE THIEUTH-OE-RIEULHIEUH
-0xB878 0xD204 # HANGUL SYLLABLE THIEUTH-OE-MIEUM
-0xB879 0xD205 # HANGUL SYLLABLE THIEUTH-OE-PIEUP
-0xB87A 0xD206 # HANGUL SYLLABLE THIEUTH-OE-PIEUPSIOS
-0xB881 0xD208 # HANGUL SYLLABLE THIEUTH-OE-SSANGSIOS
-0xB882 0xD20A # HANGUL SYLLABLE THIEUTH-OE-CIEUC
-0xB883 0xD20B # HANGUL SYLLABLE THIEUTH-OE-CHIEUCH
-0xB884 0xD20C # HANGUL SYLLABLE THIEUTH-OE-KHIEUKH
-0xB885 0xD20D # HANGUL SYLLABLE THIEUTH-OE-THIEUTH
-0xB886 0xD20E # HANGUL SYLLABLE THIEUTH-OE-PHIEUPH
-0xB887 0xD20F # HANGUL SYLLABLE THIEUTH-OE-HIEUH
-0xB888 0xD211 # HANGUL SYLLABLE THIEUTH-YO-KIYEOK
-0xB889 0xD212 # HANGUL SYLLABLE THIEUTH-YO-SSANGKIYEOK
-0xB88A 0xD213 # HANGUL SYLLABLE THIEUTH-YO-KIYEOKSIOS
-0xB88B 0xD214 # HANGUL SYLLABLE THIEUTH-YO-NIEUN
-0xB88C 0xD215 # HANGUL SYLLABLE THIEUTH-YO-NIEUNCIEUC
-0xB88D 0xD216 # HANGUL SYLLABLE THIEUTH-YO-NIEUNHIEUH
-0xB88E 0xD217 # HANGUL SYLLABLE THIEUTH-YO-TIKEUT
-0xB88F 0xD218 # HANGUL SYLLABLE THIEUTH-YO-RIEUL
-0xB890 0xD219 # HANGUL SYLLABLE THIEUTH-YO-RIEULKIYEOK
-0xB891 0xD21A # HANGUL SYLLABLE THIEUTH-YO-RIEULMIEUM
-0xB892 0xD21B # HANGUL SYLLABLE THIEUTH-YO-RIEULPIEUP
-0xB893 0xD21C # HANGUL SYLLABLE THIEUTH-YO-RIEULSIOS
-0xB894 0xD21D # HANGUL SYLLABLE THIEUTH-YO-RIEULTHIEUTH
-0xB895 0xD21E # HANGUL SYLLABLE THIEUTH-YO-RIEULPHIEUPH
-0xB896 0xD21F # HANGUL SYLLABLE THIEUTH-YO-RIEULHIEUH
-0xB897 0xD220 # HANGUL SYLLABLE THIEUTH-YO-MIEUM
-0xB898 0xD221 # HANGUL SYLLABLE THIEUTH-YO-PIEUP
-0xB899 0xD222 # HANGUL SYLLABLE THIEUTH-YO-PIEUPSIOS
-0xB89A 0xD223 # HANGUL SYLLABLE THIEUTH-YO-SIOS
-0xB89B 0xD224 # HANGUL SYLLABLE THIEUTH-YO-SSANGSIOS
-0xB89C 0xD225 # HANGUL SYLLABLE THIEUTH-YO-IEUNG
-0xB89D 0xD226 # HANGUL SYLLABLE THIEUTH-YO-CIEUC
-0xB89E 0xD227 # HANGUL SYLLABLE THIEUTH-YO-CHIEUCH
-0xB89F 0xD228 # HANGUL SYLLABLE THIEUTH-YO-KHIEUKH
-0xB8A0 0xD229 # HANGUL SYLLABLE THIEUTH-YO-THIEUTH
-0xB8A1 0xB96B # HANGUL SYLLABLE RIEUL-YU-SIOS
-0xB8A2 0xB96D # HANGUL SYLLABLE RIEUL-YU-IEUNG
-0xB8A3 0xB974 # HANGUL SYLLABLE RIEUL-EU
-0xB8A4 0xB975 # HANGUL SYLLABLE RIEUL-EU-KIYEOK
-0xB8A5 0xB978 # HANGUL SYLLABLE RIEUL-EU-NIEUN
-0xB8A6 0xB97C # HANGUL SYLLABLE RIEUL-EU-RIEUL
-0xB8A7 0xB984 # HANGUL SYLLABLE RIEUL-EU-MIEUM
-0xB8A8 0xB985 # HANGUL SYLLABLE RIEUL-EU-PIEUP
-0xB8A9 0xB987 # HANGUL SYLLABLE RIEUL-EU-SIOS
-0xB8AA 0xB989 # HANGUL SYLLABLE RIEUL-EU-IEUNG
-0xB8AB 0xB98A # HANGUL SYLLABLE RIEUL-EU-CIEUC
-0xB8AC 0xB98D # HANGUL SYLLABLE RIEUL-EU-THIEUTH
-0xB8AD 0xB98E # HANGUL SYLLABLE RIEUL-EU-PHIEUPH
-0xB8AE 0xB9AC # HANGUL SYLLABLE RIEUL-I
-0xB8AF 0xB9AD # HANGUL SYLLABLE RIEUL-I-KIYEOK
-0xB8B0 0xB9B0 # HANGUL SYLLABLE RIEUL-I-NIEUN
-0xB8B1 0xB9B4 # HANGUL SYLLABLE RIEUL-I-RIEUL
-0xB8B2 0xB9BC # HANGUL SYLLABLE RIEUL-I-MIEUM
-0xB8B3 0xB9BD # HANGUL SYLLABLE RIEUL-I-PIEUP
-0xB8B4 0xB9BF # HANGUL SYLLABLE RIEUL-I-SIOS
-0xB8B5 0xB9C1 # HANGUL SYLLABLE RIEUL-I-IEUNG
-0xB8B6 0xB9C8 # HANGUL SYLLABLE MIEUM-A
-0xB8B7 0xB9C9 # HANGUL SYLLABLE MIEUM-A-KIYEOK
-0xB8B8 0xB9CC # HANGUL SYLLABLE MIEUM-A-NIEUN
-0xB8B9 0xB9CE # HANGUL SYLLABLE MIEUM-A-NIEUNHIEUH
-0xB8BA 0xB9CF # HANGUL SYLLABLE MIEUM-A-TIKEUT
-0xB8BB 0xB9D0 # HANGUL SYLLABLE MIEUM-A-RIEUL
-0xB8BC 0xB9D1 # HANGUL SYLLABLE MIEUM-A-RIEULKIYEOK
-0xB8BD 0xB9D2 # HANGUL SYLLABLE MIEUM-A-RIEULMIEUM
-0xB8BE 0xB9D8 # HANGUL SYLLABLE MIEUM-A-MIEUM
-0xB8BF 0xB9D9 # HANGUL SYLLABLE MIEUM-A-PIEUP
-0xB8C0 0xB9DB # HANGUL SYLLABLE MIEUM-A-SIOS
-0xB8C1 0xB9DD # HANGUL SYLLABLE MIEUM-A-IEUNG
-0xB8C2 0xB9DE # HANGUL SYLLABLE MIEUM-A-CIEUC
-0xB8C3 0xB9E1 # HANGUL SYLLABLE MIEUM-A-THIEUTH
-0xB8C4 0xB9E3 # HANGUL SYLLABLE MIEUM-A-HIEUH
-0xB8C5 0xB9E4 # HANGUL SYLLABLE MIEUM-AE
-0xB8C6 0xB9E5 # HANGUL SYLLABLE MIEUM-AE-KIYEOK
-0xB8C7 0xB9E8 # HANGUL SYLLABLE MIEUM-AE-NIEUN
-0xB8C8 0xB9EC # HANGUL SYLLABLE MIEUM-AE-RIEUL
-0xB8C9 0xB9F4 # HANGUL SYLLABLE MIEUM-AE-MIEUM
-0xB8CA 0xB9F5 # HANGUL SYLLABLE MIEUM-AE-PIEUP
-0xB8CB 0xB9F7 # HANGUL SYLLABLE MIEUM-AE-SIOS
-0xB8CC 0xB9F8 # HANGUL SYLLABLE MIEUM-AE-SSANGSIOS
-0xB8CD 0xB9F9 # HANGUL SYLLABLE MIEUM-AE-IEUNG
-0xB8CE 0xB9FA # HANGUL SYLLABLE MIEUM-AE-CIEUC
-0xB8CF 0xBA00 # HANGUL SYLLABLE MIEUM-YA
-0xB8D0 0xBA01 # HANGUL SYLLABLE MIEUM-YA-KIYEOK
-0xB8D1 0xBA08 # HANGUL SYLLABLE MIEUM-YA-RIEUL
-0xB8D2 0xBA15 # HANGUL SYLLABLE MIEUM-YA-IEUNG
-0xB8D3 0xBA38 # HANGUL SYLLABLE MIEUM-EO
-0xB8D4 0xBA39 # HANGUL SYLLABLE MIEUM-EO-KIYEOK
-0xB8D5 0xBA3C # HANGUL SYLLABLE MIEUM-EO-NIEUN
-0xB8D6 0xBA40 # HANGUL SYLLABLE MIEUM-EO-RIEUL
-0xB8D7 0xBA42 # HANGUL SYLLABLE MIEUM-EO-RIEULMIEUM
-0xB8D8 0xBA48 # HANGUL SYLLABLE MIEUM-EO-MIEUM
-0xB8D9 0xBA49 # HANGUL SYLLABLE MIEUM-EO-PIEUP
-0xB8DA 0xBA4B # HANGUL SYLLABLE MIEUM-EO-SIOS
-0xB8DB 0xBA4D # HANGUL SYLLABLE MIEUM-EO-IEUNG
-0xB8DC 0xBA4E # HANGUL SYLLABLE MIEUM-EO-CIEUC
-0xB8DD 0xBA53 # HANGUL SYLLABLE MIEUM-EO-HIEUH
-0xB8DE 0xBA54 # HANGUL SYLLABLE MIEUM-E
-0xB8DF 0xBA55 # HANGUL SYLLABLE MIEUM-E-KIYEOK
-0xB8E0 0xBA58 # HANGUL SYLLABLE MIEUM-E-NIEUN
-0xB8E1 0xBA5C # HANGUL SYLLABLE MIEUM-E-RIEUL
-0xB8E2 0xBA64 # HANGUL SYLLABLE MIEUM-E-MIEUM
-0xB8E3 0xBA65 # HANGUL SYLLABLE MIEUM-E-PIEUP
-0xB8E4 0xBA67 # HANGUL SYLLABLE MIEUM-E-SIOS
-0xB8E5 0xBA68 # HANGUL SYLLABLE MIEUM-E-SSANGSIOS
-0xB8E6 0xBA69 # HANGUL SYLLABLE MIEUM-E-IEUNG
-0xB8E7 0xBA70 # HANGUL SYLLABLE MIEUM-YEO
-0xB8E8 0xBA71 # HANGUL SYLLABLE MIEUM-YEO-KIYEOK
-0xB8E9 0xBA74 # HANGUL SYLLABLE MIEUM-YEO-NIEUN
-0xB8EA 0xBA78 # HANGUL SYLLABLE MIEUM-YEO-RIEUL
-0xB8EB 0xBA83 # HANGUL SYLLABLE MIEUM-YEO-SIOS
-0xB8EC 0xBA84 # HANGUL SYLLABLE MIEUM-YEO-SSANGSIOS
-0xB8ED 0xBA85 # HANGUL SYLLABLE MIEUM-YEO-IEUNG
-0xB8EE 0xBA87 # HANGUL SYLLABLE MIEUM-YEO-CHIEUCH
-0xB8EF 0xBA8C # HANGUL SYLLABLE MIEUM-YE
-0xB8F0 0xBAA8 # HANGUL SYLLABLE MIEUM-O
-0xB8F1 0xBAA9 # HANGUL SYLLABLE MIEUM-O-KIYEOK
-0xB8F2 0xBAAB # HANGUL SYLLABLE MIEUM-O-KIYEOKSIOS
-0xB8F3 0xBAAC # HANGUL SYLLABLE MIEUM-O-NIEUN
-0xB8F4 0xBAB0 # HANGUL SYLLABLE MIEUM-O-RIEUL
-0xB8F5 0xBAB2 # HANGUL SYLLABLE MIEUM-O-RIEULMIEUM
-0xB8F6 0xBAB8 # HANGUL SYLLABLE MIEUM-O-MIEUM
-0xB8F7 0xBAB9 # HANGUL SYLLABLE MIEUM-O-PIEUP
-0xB8F8 0xBABB # HANGUL SYLLABLE MIEUM-O-SIOS
-0xB8F9 0xBABD # HANGUL SYLLABLE MIEUM-O-IEUNG
-0xB8FA 0xBAC4 # HANGUL SYLLABLE MIEUM-WA
-0xB8FB 0xBAC8 # HANGUL SYLLABLE MIEUM-WA-NIEUN
-0xB8FC 0xBAD8 # HANGUL SYLLABLE MIEUM-WA-SSANGSIOS
-0xB8FD 0xBAD9 # HANGUL SYLLABLE MIEUM-WA-IEUNG
-0xB8FE 0xBAFC # HANGUL SYLLABLE MIEUM-OE
-0xB941 0xD22A # HANGUL SYLLABLE THIEUTH-YO-PHIEUPH
-0xB942 0xD22B # HANGUL SYLLABLE THIEUTH-YO-HIEUH
-0xB943 0xD22E # HANGUL SYLLABLE THIEUTH-U-SSANGKIYEOK
-0xB944 0xD22F # HANGUL SYLLABLE THIEUTH-U-KIYEOKSIOS
-0xB945 0xD231 # HANGUL SYLLABLE THIEUTH-U-NIEUNCIEUC
-0xB946 0xD232 # HANGUL SYLLABLE THIEUTH-U-NIEUNHIEUH
-0xB947 0xD233 # HANGUL SYLLABLE THIEUTH-U-TIKEUT
-0xB948 0xD235 # HANGUL SYLLABLE THIEUTH-U-RIEULKIYEOK
-0xB949 0xD236 # HANGUL SYLLABLE THIEUTH-U-RIEULMIEUM
-0xB94A 0xD237 # HANGUL SYLLABLE THIEUTH-U-RIEULPIEUP
-0xB94B 0xD238 # HANGUL SYLLABLE THIEUTH-U-RIEULSIOS
-0xB94C 0xD239 # HANGUL SYLLABLE THIEUTH-U-RIEULTHIEUTH
-0xB94D 0xD23A # HANGUL SYLLABLE THIEUTH-U-RIEULPHIEUPH
-0xB94E 0xD23B # HANGUL SYLLABLE THIEUTH-U-RIEULHIEUH
-0xB94F 0xD23E # HANGUL SYLLABLE THIEUTH-U-PIEUPSIOS
-0xB950 0xD240 # HANGUL SYLLABLE THIEUTH-U-SSANGSIOS
-0xB951 0xD242 # HANGUL SYLLABLE THIEUTH-U-CIEUC
-0xB952 0xD243 # HANGUL SYLLABLE THIEUTH-U-CHIEUCH
-0xB953 0xD244 # HANGUL SYLLABLE THIEUTH-U-KHIEUKH
-0xB954 0xD245 # HANGUL SYLLABLE THIEUTH-U-THIEUTH
-0xB955 0xD246 # HANGUL SYLLABLE THIEUTH-U-PHIEUPH
-0xB956 0xD247 # HANGUL SYLLABLE THIEUTH-U-HIEUH
-0xB957 0xD249 # HANGUL SYLLABLE THIEUTH-WEO-KIYEOK
-0xB958 0xD24A # HANGUL SYLLABLE THIEUTH-WEO-SSANGKIYEOK
-0xB959 0xD24B # HANGUL SYLLABLE THIEUTH-WEO-KIYEOKSIOS
-0xB95A 0xD24C # HANGUL SYLLABLE THIEUTH-WEO-NIEUN
-0xB961 0xD24D # HANGUL SYLLABLE THIEUTH-WEO-NIEUNCIEUC
-0xB962 0xD24E # HANGUL SYLLABLE THIEUTH-WEO-NIEUNHIEUH
-0xB963 0xD24F # HANGUL SYLLABLE THIEUTH-WEO-TIKEUT
-0xB964 0xD250 # HANGUL SYLLABLE THIEUTH-WEO-RIEUL
-0xB965 0xD251 # HANGUL SYLLABLE THIEUTH-WEO-RIEULKIYEOK
-0xB966 0xD252 # HANGUL SYLLABLE THIEUTH-WEO-RIEULMIEUM
-0xB967 0xD253 # HANGUL SYLLABLE THIEUTH-WEO-RIEULPIEUP
-0xB968 0xD254 # HANGUL SYLLABLE THIEUTH-WEO-RIEULSIOS
-0xB969 0xD255 # HANGUL SYLLABLE THIEUTH-WEO-RIEULTHIEUTH
-0xB96A 0xD256 # HANGUL SYLLABLE THIEUTH-WEO-RIEULPHIEUPH
-0xB96B 0xD257 # HANGUL SYLLABLE THIEUTH-WEO-RIEULHIEUH
-0xB96C 0xD258 # HANGUL SYLLABLE THIEUTH-WEO-MIEUM
-0xB96D 0xD259 # HANGUL SYLLABLE THIEUTH-WEO-PIEUP
-0xB96E 0xD25A # HANGUL SYLLABLE THIEUTH-WEO-PIEUPSIOS
-0xB96F 0xD25B # HANGUL SYLLABLE THIEUTH-WEO-SIOS
-0xB970 0xD25D # HANGUL SYLLABLE THIEUTH-WEO-IEUNG
-0xB971 0xD25E # HANGUL SYLLABLE THIEUTH-WEO-CIEUC
-0xB972 0xD25F # HANGUL SYLLABLE THIEUTH-WEO-CHIEUCH
-0xB973 0xD260 # HANGUL SYLLABLE THIEUTH-WEO-KHIEUKH
-0xB974 0xD261 # HANGUL SYLLABLE THIEUTH-WEO-THIEUTH
-0xB975 0xD262 # HANGUL SYLLABLE THIEUTH-WEO-PHIEUPH
-0xB976 0xD263 # HANGUL SYLLABLE THIEUTH-WEO-HIEUH
-0xB977 0xD265 # HANGUL SYLLABLE THIEUTH-WE-KIYEOK
-0xB978 0xD266 # HANGUL SYLLABLE THIEUTH-WE-SSANGKIYEOK
-0xB979 0xD267 # HANGUL SYLLABLE THIEUTH-WE-KIYEOKSIOS
-0xB97A 0xD268 # HANGUL SYLLABLE THIEUTH-WE-NIEUN
-0xB981 0xD269 # HANGUL SYLLABLE THIEUTH-WE-NIEUNCIEUC
-0xB982 0xD26A # HANGUL SYLLABLE THIEUTH-WE-NIEUNHIEUH
-0xB983 0xD26B # HANGUL SYLLABLE THIEUTH-WE-TIKEUT
-0xB984 0xD26C # HANGUL SYLLABLE THIEUTH-WE-RIEUL
-0xB985 0xD26D # HANGUL SYLLABLE THIEUTH-WE-RIEULKIYEOK
-0xB986 0xD26E # HANGUL SYLLABLE THIEUTH-WE-RIEULMIEUM
-0xB987 0xD26F # HANGUL SYLLABLE THIEUTH-WE-RIEULPIEUP
-0xB988 0xD270 # HANGUL SYLLABLE THIEUTH-WE-RIEULSIOS
-0xB989 0xD271 # HANGUL SYLLABLE THIEUTH-WE-RIEULTHIEUTH
-0xB98A 0xD272 # HANGUL SYLLABLE THIEUTH-WE-RIEULPHIEUPH
-0xB98B 0xD273 # HANGUL SYLLABLE THIEUTH-WE-RIEULHIEUH
-0xB98C 0xD274 # HANGUL SYLLABLE THIEUTH-WE-MIEUM
-0xB98D 0xD275 # HANGUL SYLLABLE THIEUTH-WE-PIEUP
-0xB98E 0xD276 # HANGUL SYLLABLE THIEUTH-WE-PIEUPSIOS
-0xB98F 0xD277 # HANGUL SYLLABLE THIEUTH-WE-SIOS
-0xB990 0xD278 # HANGUL SYLLABLE THIEUTH-WE-SSANGSIOS
-0xB991 0xD279 # HANGUL SYLLABLE THIEUTH-WE-IEUNG
-0xB992 0xD27A # HANGUL SYLLABLE THIEUTH-WE-CIEUC
-0xB993 0xD27B # HANGUL SYLLABLE THIEUTH-WE-CHIEUCH
-0xB994 0xD27C # HANGUL SYLLABLE THIEUTH-WE-KHIEUKH
-0xB995 0xD27D # HANGUL SYLLABLE THIEUTH-WE-THIEUTH
-0xB996 0xD27E # HANGUL SYLLABLE THIEUTH-WE-PHIEUPH
-0xB997 0xD27F # HANGUL SYLLABLE THIEUTH-WE-HIEUH
-0xB998 0xD282 # HANGUL SYLLABLE THIEUTH-WI-SSANGKIYEOK
-0xB999 0xD283 # HANGUL SYLLABLE THIEUTH-WI-KIYEOKSIOS
-0xB99A 0xD285 # HANGUL SYLLABLE THIEUTH-WI-NIEUNCIEUC
-0xB99B 0xD286 # HANGUL SYLLABLE THIEUTH-WI-NIEUNHIEUH
-0xB99C 0xD287 # HANGUL SYLLABLE THIEUTH-WI-TIKEUT
-0xB99D 0xD289 # HANGUL SYLLABLE THIEUTH-WI-RIEULKIYEOK
-0xB99E 0xD28A # HANGUL SYLLABLE THIEUTH-WI-RIEULMIEUM
-0xB99F 0xD28B # HANGUL SYLLABLE THIEUTH-WI-RIEULPIEUP
-0xB9A0 0xD28C # HANGUL SYLLABLE THIEUTH-WI-RIEULSIOS
-0xB9A1 0xBB00 # HANGUL SYLLABLE MIEUM-OE-NIEUN
-0xB9A2 0xBB04 # HANGUL SYLLABLE MIEUM-OE-RIEUL
-0xB9A3 0xBB0D # HANGUL SYLLABLE MIEUM-OE-PIEUP
-0xB9A4 0xBB0F # HANGUL SYLLABLE MIEUM-OE-SIOS
-0xB9A5 0xBB11 # HANGUL SYLLABLE MIEUM-OE-IEUNG
-0xB9A6 0xBB18 # HANGUL SYLLABLE MIEUM-YO
-0xB9A7 0xBB1C # HANGUL SYLLABLE MIEUM-YO-NIEUN
-0xB9A8 0xBB20 # HANGUL SYLLABLE MIEUM-YO-RIEUL
-0xB9A9 0xBB29 # HANGUL SYLLABLE MIEUM-YO-PIEUP
-0xB9AA 0xBB2B # HANGUL SYLLABLE MIEUM-YO-SIOS
-0xB9AB 0xBB34 # HANGUL SYLLABLE MIEUM-U
-0xB9AC 0xBB35 # HANGUL SYLLABLE MIEUM-U-KIYEOK
-0xB9AD 0xBB36 # HANGUL SYLLABLE MIEUM-U-SSANGKIYEOK
-0xB9AE 0xBB38 # HANGUL SYLLABLE MIEUM-U-NIEUN
-0xB9AF 0xBB3B # HANGUL SYLLABLE MIEUM-U-TIKEUT
-0xB9B0 0xBB3C # HANGUL SYLLABLE MIEUM-U-RIEUL
-0xB9B1 0xBB3D # HANGUL SYLLABLE MIEUM-U-RIEULKIYEOK
-0xB9B2 0xBB3E # HANGUL SYLLABLE MIEUM-U-RIEULMIEUM
-0xB9B3 0xBB44 # HANGUL SYLLABLE MIEUM-U-MIEUM
-0xB9B4 0xBB45 # HANGUL SYLLABLE MIEUM-U-PIEUP
-0xB9B5 0xBB47 # HANGUL SYLLABLE MIEUM-U-SIOS
-0xB9B6 0xBB49 # HANGUL SYLLABLE MIEUM-U-IEUNG
-0xB9B7 0xBB4D # HANGUL SYLLABLE MIEUM-U-THIEUTH
-0xB9B8 0xBB4F # HANGUL SYLLABLE MIEUM-U-HIEUH
-0xB9B9 0xBB50 # HANGUL SYLLABLE MIEUM-WEO
-0xB9BA 0xBB54 # HANGUL SYLLABLE MIEUM-WEO-NIEUN
-0xB9BB 0xBB58 # HANGUL SYLLABLE MIEUM-WEO-RIEUL
-0xB9BC 0xBB61 # HANGUL SYLLABLE MIEUM-WEO-PIEUP
-0xB9BD 0xBB63 # HANGUL SYLLABLE MIEUM-WEO-SIOS
-0xB9BE 0xBB6C # HANGUL SYLLABLE MIEUM-WE
-0xB9BF 0xBB88 # HANGUL SYLLABLE MIEUM-WI
-0xB9C0 0xBB8C # HANGUL SYLLABLE MIEUM-WI-NIEUN
-0xB9C1 0xBB90 # HANGUL SYLLABLE MIEUM-WI-RIEUL
-0xB9C2 0xBBA4 # HANGUL SYLLABLE MIEUM-YU
-0xB9C3 0xBBA8 # HANGUL SYLLABLE MIEUM-YU-NIEUN
-0xB9C4 0xBBAC # HANGUL SYLLABLE MIEUM-YU-RIEUL
-0xB9C5 0xBBB4 # HANGUL SYLLABLE MIEUM-YU-MIEUM
-0xB9C6 0xBBB7 # HANGUL SYLLABLE MIEUM-YU-SIOS
-0xB9C7 0xBBC0 # HANGUL SYLLABLE MIEUM-EU
-0xB9C8 0xBBC4 # HANGUL SYLLABLE MIEUM-EU-NIEUN
-0xB9C9 0xBBC8 # HANGUL SYLLABLE MIEUM-EU-RIEUL
-0xB9CA 0xBBD0 # HANGUL SYLLABLE MIEUM-EU-MIEUM
-0xB9CB 0xBBD3 # HANGUL SYLLABLE MIEUM-EU-SIOS
-0xB9CC 0xBBF8 # HANGUL SYLLABLE MIEUM-I
-0xB9CD 0xBBF9 # HANGUL SYLLABLE MIEUM-I-KIYEOK
-0xB9CE 0xBBFC # HANGUL SYLLABLE MIEUM-I-NIEUN
-0xB9CF 0xBBFF # HANGUL SYLLABLE MIEUM-I-TIKEUT
-0xB9D0 0xBC00 # HANGUL SYLLABLE MIEUM-I-RIEUL
-0xB9D1 0xBC02 # HANGUL SYLLABLE MIEUM-I-RIEULMIEUM
-0xB9D2 0xBC08 # HANGUL SYLLABLE MIEUM-I-MIEUM
-0xB9D3 0xBC09 # HANGUL SYLLABLE MIEUM-I-PIEUP
-0xB9D4 0xBC0B # HANGUL SYLLABLE MIEUM-I-SIOS
-0xB9D5 0xBC0C # HANGUL SYLLABLE MIEUM-I-SSANGSIOS
-0xB9D6 0xBC0D # HANGUL SYLLABLE MIEUM-I-IEUNG
-0xB9D7 0xBC0F # HANGUL SYLLABLE MIEUM-I-CHIEUCH
-0xB9D8 0xBC11 # HANGUL SYLLABLE MIEUM-I-THIEUTH
-0xB9D9 0xBC14 # HANGUL SYLLABLE PIEUP-A
-0xB9DA 0xBC15 # HANGUL SYLLABLE PIEUP-A-KIYEOK
-0xB9DB 0xBC16 # HANGUL SYLLABLE PIEUP-A-SSANGKIYEOK
-0xB9DC 0xBC17 # HANGUL SYLLABLE PIEUP-A-KIYEOKSIOS
-0xB9DD 0xBC18 # HANGUL SYLLABLE PIEUP-A-NIEUN
-0xB9DE 0xBC1B # HANGUL SYLLABLE PIEUP-A-TIKEUT
-0xB9DF 0xBC1C # HANGUL SYLLABLE PIEUP-A-RIEUL
-0xB9E0 0xBC1D # HANGUL SYLLABLE PIEUP-A-RIEULKIYEOK
-0xB9E1 0xBC1E # HANGUL SYLLABLE PIEUP-A-RIEULMIEUM
-0xB9E2 0xBC1F # HANGUL SYLLABLE PIEUP-A-RIEULPIEUP
-0xB9E3 0xBC24 # HANGUL SYLLABLE PIEUP-A-MIEUM
-0xB9E4 0xBC25 # HANGUL SYLLABLE PIEUP-A-PIEUP
-0xB9E5 0xBC27 # HANGUL SYLLABLE PIEUP-A-SIOS
-0xB9E6 0xBC29 # HANGUL SYLLABLE PIEUP-A-IEUNG
-0xB9E7 0xBC2D # HANGUL SYLLABLE PIEUP-A-THIEUTH
-0xB9E8 0xBC30 # HANGUL SYLLABLE PIEUP-AE
-0xB9E9 0xBC31 # HANGUL SYLLABLE PIEUP-AE-KIYEOK
-0xB9EA 0xBC34 # HANGUL SYLLABLE PIEUP-AE-NIEUN
-0xB9EB 0xBC38 # HANGUL SYLLABLE PIEUP-AE-RIEUL
-0xB9EC 0xBC40 # HANGUL SYLLABLE PIEUP-AE-MIEUM
-0xB9ED 0xBC41 # HANGUL SYLLABLE PIEUP-AE-PIEUP
-0xB9EE 0xBC43 # HANGUL SYLLABLE PIEUP-AE-SIOS
-0xB9EF 0xBC44 # HANGUL SYLLABLE PIEUP-AE-SSANGSIOS
-0xB9F0 0xBC45 # HANGUL SYLLABLE PIEUP-AE-IEUNG
-0xB9F1 0xBC49 # HANGUL SYLLABLE PIEUP-AE-THIEUTH
-0xB9F2 0xBC4C # HANGUL SYLLABLE PIEUP-YA
-0xB9F3 0xBC4D # HANGUL SYLLABLE PIEUP-YA-KIYEOK
-0xB9F4 0xBC50 # HANGUL SYLLABLE PIEUP-YA-NIEUN
-0xB9F5 0xBC5D # HANGUL SYLLABLE PIEUP-YA-PIEUP
-0xB9F6 0xBC84 # HANGUL SYLLABLE PIEUP-EO
-0xB9F7 0xBC85 # HANGUL SYLLABLE PIEUP-EO-KIYEOK
-0xB9F8 0xBC88 # HANGUL SYLLABLE PIEUP-EO-NIEUN
-0xB9F9 0xBC8B # HANGUL SYLLABLE PIEUP-EO-TIKEUT
-0xB9FA 0xBC8C # HANGUL SYLLABLE PIEUP-EO-RIEUL
-0xB9FB 0xBC8E # HANGUL SYLLABLE PIEUP-EO-RIEULMIEUM
-0xB9FC 0xBC94 # HANGUL SYLLABLE PIEUP-EO-MIEUM
-0xB9FD 0xBC95 # HANGUL SYLLABLE PIEUP-EO-PIEUP
-0xB9FE 0xBC97 # HANGUL SYLLABLE PIEUP-EO-SIOS
-0xBA41 0xD28D # HANGUL SYLLABLE THIEUTH-WI-RIEULTHIEUTH
-0xBA42 0xD28E # HANGUL SYLLABLE THIEUTH-WI-RIEULPHIEUPH
-0xBA43 0xD28F # HANGUL SYLLABLE THIEUTH-WI-RIEULHIEUH
-0xBA44 0xD292 # HANGUL SYLLABLE THIEUTH-WI-PIEUPSIOS
-0xBA45 0xD293 # HANGUL SYLLABLE THIEUTH-WI-SIOS
-0xBA46 0xD294 # HANGUL SYLLABLE THIEUTH-WI-SSANGSIOS
-0xBA47 0xD296 # HANGUL SYLLABLE THIEUTH-WI-CIEUC
-0xBA48 0xD297 # HANGUL SYLLABLE THIEUTH-WI-CHIEUCH
-0xBA49 0xD298 # HANGUL SYLLABLE THIEUTH-WI-KHIEUKH
-0xBA4A 0xD299 # HANGUL SYLLABLE THIEUTH-WI-THIEUTH
-0xBA4B 0xD29A # HANGUL SYLLABLE THIEUTH-WI-PHIEUPH
-0xBA4C 0xD29B # HANGUL SYLLABLE THIEUTH-WI-HIEUH
-0xBA4D 0xD29D # HANGUL SYLLABLE THIEUTH-YU-KIYEOK
-0xBA4E 0xD29E # HANGUL SYLLABLE THIEUTH-YU-SSANGKIYEOK
-0xBA4F 0xD29F # HANGUL SYLLABLE THIEUTH-YU-KIYEOKSIOS
-0xBA50 0xD2A1 # HANGUL SYLLABLE THIEUTH-YU-NIEUNCIEUC
-0xBA51 0xD2A2 # HANGUL SYLLABLE THIEUTH-YU-NIEUNHIEUH
-0xBA52 0xD2A3 # HANGUL SYLLABLE THIEUTH-YU-TIKEUT
-0xBA53 0xD2A5 # HANGUL SYLLABLE THIEUTH-YU-RIEULKIYEOK
-0xBA54 0xD2A6 # HANGUL SYLLABLE THIEUTH-YU-RIEULMIEUM
-0xBA55 0xD2A7 # HANGUL SYLLABLE THIEUTH-YU-RIEULPIEUP
-0xBA56 0xD2A8 # HANGUL SYLLABLE THIEUTH-YU-RIEULSIOS
-0xBA57 0xD2A9 # HANGUL SYLLABLE THIEUTH-YU-RIEULTHIEUTH
-0xBA58 0xD2AA # HANGUL SYLLABLE THIEUTH-YU-RIEULPHIEUPH
-0xBA59 0xD2AB # HANGUL SYLLABLE THIEUTH-YU-RIEULHIEUH
-0xBA5A 0xD2AD # HANGUL SYLLABLE THIEUTH-YU-PIEUP
-0xBA61 0xD2AE # HANGUL SYLLABLE THIEUTH-YU-PIEUPSIOS
-0xBA62 0xD2AF # HANGUL SYLLABLE THIEUTH-YU-SIOS
-0xBA63 0xD2B0 # HANGUL SYLLABLE THIEUTH-YU-SSANGSIOS
-0xBA64 0xD2B2 # HANGUL SYLLABLE THIEUTH-YU-CIEUC
-0xBA65 0xD2B3 # HANGUL SYLLABLE THIEUTH-YU-CHIEUCH
-0xBA66 0xD2B4 # HANGUL SYLLABLE THIEUTH-YU-KHIEUKH
-0xBA67 0xD2B5 # HANGUL SYLLABLE THIEUTH-YU-THIEUTH
-0xBA68 0xD2B6 # HANGUL SYLLABLE THIEUTH-YU-PHIEUPH
-0xBA69 0xD2B7 # HANGUL SYLLABLE THIEUTH-YU-HIEUH
-0xBA6A 0xD2BA # HANGUL SYLLABLE THIEUTH-EU-SSANGKIYEOK
-0xBA6B 0xD2BB # HANGUL SYLLABLE THIEUTH-EU-KIYEOKSIOS
-0xBA6C 0xD2BD # HANGUL SYLLABLE THIEUTH-EU-NIEUNCIEUC
-0xBA6D 0xD2BE # HANGUL SYLLABLE THIEUTH-EU-NIEUNHIEUH
-0xBA6E 0xD2C1 # HANGUL SYLLABLE THIEUTH-EU-RIEULKIYEOK
-0xBA6F 0xD2C3 # HANGUL SYLLABLE THIEUTH-EU-RIEULPIEUP
-0xBA70 0xD2C4 # HANGUL SYLLABLE THIEUTH-EU-RIEULSIOS
-0xBA71 0xD2C5 # HANGUL SYLLABLE THIEUTH-EU-RIEULTHIEUTH
-0xBA72 0xD2C6 # HANGUL SYLLABLE THIEUTH-EU-RIEULPHIEUPH
-0xBA73 0xD2C7 # HANGUL SYLLABLE THIEUTH-EU-RIEULHIEUH
-0xBA74 0xD2CA # HANGUL SYLLABLE THIEUTH-EU-PIEUPSIOS
-0xBA75 0xD2CC # HANGUL SYLLABLE THIEUTH-EU-SSANGSIOS
-0xBA76 0xD2CD # HANGUL SYLLABLE THIEUTH-EU-IEUNG
-0xBA77 0xD2CE # HANGUL SYLLABLE THIEUTH-EU-CIEUC
-0xBA78 0xD2CF # HANGUL SYLLABLE THIEUTH-EU-CHIEUCH
-0xBA79 0xD2D0 # HANGUL SYLLABLE THIEUTH-EU-KHIEUKH
-0xBA7A 0xD2D1 # HANGUL SYLLABLE THIEUTH-EU-THIEUTH
-0xBA81 0xD2D2 # HANGUL SYLLABLE THIEUTH-EU-PHIEUPH
-0xBA82 0xD2D3 # HANGUL SYLLABLE THIEUTH-EU-HIEUH
-0xBA83 0xD2D5 # HANGUL SYLLABLE THIEUTH-YI-KIYEOK
-0xBA84 0xD2D6 # HANGUL SYLLABLE THIEUTH-YI-SSANGKIYEOK
-0xBA85 0xD2D7 # HANGUL SYLLABLE THIEUTH-YI-KIYEOKSIOS
-0xBA86 0xD2D9 # HANGUL SYLLABLE THIEUTH-YI-NIEUNCIEUC
-0xBA87 0xD2DA # HANGUL SYLLABLE THIEUTH-YI-NIEUNHIEUH
-0xBA88 0xD2DB # HANGUL SYLLABLE THIEUTH-YI-TIKEUT
-0xBA89 0xD2DD # HANGUL SYLLABLE THIEUTH-YI-RIEULKIYEOK
-0xBA8A 0xD2DE # HANGUL SYLLABLE THIEUTH-YI-RIEULMIEUM
-0xBA8B 0xD2DF # HANGUL SYLLABLE THIEUTH-YI-RIEULPIEUP
-0xBA8C 0xD2E0 # HANGUL SYLLABLE THIEUTH-YI-RIEULSIOS
-0xBA8D 0xD2E1 # HANGUL SYLLABLE THIEUTH-YI-RIEULTHIEUTH
-0xBA8E 0xD2E2 # HANGUL SYLLABLE THIEUTH-YI-RIEULPHIEUPH
-0xBA8F 0xD2E3 # HANGUL SYLLABLE THIEUTH-YI-RIEULHIEUH
-0xBA90 0xD2E6 # HANGUL SYLLABLE THIEUTH-YI-PIEUPSIOS
-0xBA91 0xD2E7 # HANGUL SYLLABLE THIEUTH-YI-SIOS
-0xBA92 0xD2E8 # HANGUL SYLLABLE THIEUTH-YI-SSANGSIOS
-0xBA93 0xD2E9 # HANGUL SYLLABLE THIEUTH-YI-IEUNG
-0xBA94 0xD2EA # HANGUL SYLLABLE THIEUTH-YI-CIEUC
-0xBA95 0xD2EB # HANGUL SYLLABLE THIEUTH-YI-CHIEUCH
-0xBA96 0xD2EC # HANGUL SYLLABLE THIEUTH-YI-KHIEUKH
-0xBA97 0xD2ED # HANGUL SYLLABLE THIEUTH-YI-THIEUTH
-0xBA98 0xD2EE # HANGUL SYLLABLE THIEUTH-YI-PHIEUPH
-0xBA99 0xD2EF # HANGUL SYLLABLE THIEUTH-YI-HIEUH
-0xBA9A 0xD2F2 # HANGUL SYLLABLE THIEUTH-I-SSANGKIYEOK
-0xBA9B 0xD2F3 # HANGUL SYLLABLE THIEUTH-I-KIYEOKSIOS
-0xBA9C 0xD2F5 # HANGUL SYLLABLE THIEUTH-I-NIEUNCIEUC
-0xBA9D 0xD2F6 # HANGUL SYLLABLE THIEUTH-I-NIEUNHIEUH
-0xBA9E 0xD2F7 # HANGUL SYLLABLE THIEUTH-I-TIKEUT
-0xBA9F 0xD2F9 # HANGUL SYLLABLE THIEUTH-I-RIEULKIYEOK
-0xBAA0 0xD2FA # HANGUL SYLLABLE THIEUTH-I-RIEULMIEUM
-0xBAA1 0xBC99 # HANGUL SYLLABLE PIEUP-EO-IEUNG
-0xBAA2 0xBC9A # HANGUL SYLLABLE PIEUP-EO-CIEUC
-0xBAA3 0xBCA0 # HANGUL SYLLABLE PIEUP-E
-0xBAA4 0xBCA1 # HANGUL SYLLABLE PIEUP-E-KIYEOK
-0xBAA5 0xBCA4 # HANGUL SYLLABLE PIEUP-E-NIEUN
-0xBAA6 0xBCA7 # HANGUL SYLLABLE PIEUP-E-TIKEUT
-0xBAA7 0xBCA8 # HANGUL SYLLABLE PIEUP-E-RIEUL
-0xBAA8 0xBCB0 # HANGUL SYLLABLE PIEUP-E-MIEUM
-0xBAA9 0xBCB1 # HANGUL SYLLABLE PIEUP-E-PIEUP
-0xBAAA 0xBCB3 # HANGUL SYLLABLE PIEUP-E-SIOS
-0xBAAB 0xBCB4 # HANGUL SYLLABLE PIEUP-E-SSANGSIOS
-0xBAAC 0xBCB5 # HANGUL SYLLABLE PIEUP-E-IEUNG
-0xBAAD 0xBCBC # HANGUL SYLLABLE PIEUP-YEO
-0xBAAE 0xBCBD # HANGUL SYLLABLE PIEUP-YEO-KIYEOK
-0xBAAF 0xBCC0 # HANGUL SYLLABLE PIEUP-YEO-NIEUN
-0xBAB0 0xBCC4 # HANGUL SYLLABLE PIEUP-YEO-RIEUL
-0xBAB1 0xBCCD # HANGUL SYLLABLE PIEUP-YEO-PIEUP
-0xBAB2 0xBCCF # HANGUL SYLLABLE PIEUP-YEO-SIOS
-0xBAB3 0xBCD0 # HANGUL SYLLABLE PIEUP-YEO-SSANGSIOS
-0xBAB4 0xBCD1 # HANGUL SYLLABLE PIEUP-YEO-IEUNG
-0xBAB5 0xBCD5 # HANGUL SYLLABLE PIEUP-YEO-THIEUTH
-0xBAB6 0xBCD8 # HANGUL SYLLABLE PIEUP-YE
-0xBAB7 0xBCDC # HANGUL SYLLABLE PIEUP-YE-NIEUN
-0xBAB8 0xBCF4 # HANGUL SYLLABLE PIEUP-O
-0xBAB9 0xBCF5 # HANGUL SYLLABLE PIEUP-O-KIYEOK
-0xBABA 0xBCF6 # HANGUL SYLLABLE PIEUP-O-SSANGKIYEOK
-0xBABB 0xBCF8 # HANGUL SYLLABLE PIEUP-O-NIEUN
-0xBABC 0xBCFC # HANGUL SYLLABLE PIEUP-O-RIEUL
-0xBABD 0xBD04 # HANGUL SYLLABLE PIEUP-O-MIEUM
-0xBABE 0xBD05 # HANGUL SYLLABLE PIEUP-O-PIEUP
-0xBABF 0xBD07 # HANGUL SYLLABLE PIEUP-O-SIOS
-0xBAC0 0xBD09 # HANGUL SYLLABLE PIEUP-O-IEUNG
-0xBAC1 0xBD10 # HANGUL SYLLABLE PIEUP-WA
-0xBAC2 0xBD14 # HANGUL SYLLABLE PIEUP-WA-NIEUN
-0xBAC3 0xBD24 # HANGUL SYLLABLE PIEUP-WA-SSANGSIOS
-0xBAC4 0xBD2C # HANGUL SYLLABLE PIEUP-WAE
-0xBAC5 0xBD40 # HANGUL SYLLABLE PIEUP-WAE-SSANGSIOS
-0xBAC6 0xBD48 # HANGUL SYLLABLE PIEUP-OE
-0xBAC7 0xBD49 # HANGUL SYLLABLE PIEUP-OE-KIYEOK
-0xBAC8 0xBD4C # HANGUL SYLLABLE PIEUP-OE-NIEUN
-0xBAC9 0xBD50 # HANGUL SYLLABLE PIEUP-OE-RIEUL
-0xBACA 0xBD58 # HANGUL SYLLABLE PIEUP-OE-MIEUM
-0xBACB 0xBD59 # HANGUL SYLLABLE PIEUP-OE-PIEUP
-0xBACC 0xBD64 # HANGUL SYLLABLE PIEUP-YO
-0xBACD 0xBD68 # HANGUL SYLLABLE PIEUP-YO-NIEUN
-0xBACE 0xBD80 # HANGUL SYLLABLE PIEUP-U
-0xBACF 0xBD81 # HANGUL SYLLABLE PIEUP-U-KIYEOK
-0xBAD0 0xBD84 # HANGUL SYLLABLE PIEUP-U-NIEUN
-0xBAD1 0xBD87 # HANGUL SYLLABLE PIEUP-U-TIKEUT
-0xBAD2 0xBD88 # HANGUL SYLLABLE PIEUP-U-RIEUL
-0xBAD3 0xBD89 # HANGUL SYLLABLE PIEUP-U-RIEULKIYEOK
-0xBAD4 0xBD8A # HANGUL SYLLABLE PIEUP-U-RIEULMIEUM
-0xBAD5 0xBD90 # HANGUL SYLLABLE PIEUP-U-MIEUM
-0xBAD6 0xBD91 # HANGUL SYLLABLE PIEUP-U-PIEUP
-0xBAD7 0xBD93 # HANGUL SYLLABLE PIEUP-U-SIOS
-0xBAD8 0xBD95 # HANGUL SYLLABLE PIEUP-U-IEUNG
-0xBAD9 0xBD99 # HANGUL SYLLABLE PIEUP-U-THIEUTH
-0xBADA 0xBD9A # HANGUL SYLLABLE PIEUP-U-PHIEUPH
-0xBADB 0xBD9C # HANGUL SYLLABLE PIEUP-WEO
-0xBADC 0xBDA4 # HANGUL SYLLABLE PIEUP-WEO-RIEUL
-0xBADD 0xBDB0 # HANGUL SYLLABLE PIEUP-WEO-SSANGSIOS
-0xBADE 0xBDB8 # HANGUL SYLLABLE PIEUP-WE
-0xBADF 0xBDD4 # HANGUL SYLLABLE PIEUP-WI
-0xBAE0 0xBDD5 # HANGUL SYLLABLE PIEUP-WI-KIYEOK
-0xBAE1 0xBDD8 # HANGUL SYLLABLE PIEUP-WI-NIEUN
-0xBAE2 0xBDDC # HANGUL SYLLABLE PIEUP-WI-RIEUL
-0xBAE3 0xBDE9 # HANGUL SYLLABLE PIEUP-WI-IEUNG
-0xBAE4 0xBDF0 # HANGUL SYLLABLE PIEUP-YU
-0xBAE5 0xBDF4 # HANGUL SYLLABLE PIEUP-YU-NIEUN
-0xBAE6 0xBDF8 # HANGUL SYLLABLE PIEUP-YU-RIEUL
-0xBAE7 0xBE00 # HANGUL SYLLABLE PIEUP-YU-MIEUM
-0xBAE8 0xBE03 # HANGUL SYLLABLE PIEUP-YU-SIOS
-0xBAE9 0xBE05 # HANGUL SYLLABLE PIEUP-YU-IEUNG
-0xBAEA 0xBE0C # HANGUL SYLLABLE PIEUP-EU
-0xBAEB 0xBE0D # HANGUL SYLLABLE PIEUP-EU-KIYEOK
-0xBAEC 0xBE10 # HANGUL SYLLABLE PIEUP-EU-NIEUN
-0xBAED 0xBE14 # HANGUL SYLLABLE PIEUP-EU-RIEUL
-0xBAEE 0xBE1C # HANGUL SYLLABLE PIEUP-EU-MIEUM
-0xBAEF 0xBE1D # HANGUL SYLLABLE PIEUP-EU-PIEUP
-0xBAF0 0xBE1F # HANGUL SYLLABLE PIEUP-EU-SIOS
-0xBAF1 0xBE44 # HANGUL SYLLABLE PIEUP-I
-0xBAF2 0xBE45 # HANGUL SYLLABLE PIEUP-I-KIYEOK
-0xBAF3 0xBE48 # HANGUL SYLLABLE PIEUP-I-NIEUN
-0xBAF4 0xBE4C # HANGUL SYLLABLE PIEUP-I-RIEUL
-0xBAF5 0xBE4E # HANGUL SYLLABLE PIEUP-I-RIEULMIEUM
-0xBAF6 0xBE54 # HANGUL SYLLABLE PIEUP-I-MIEUM
-0xBAF7 0xBE55 # HANGUL SYLLABLE PIEUP-I-PIEUP
-0xBAF8 0xBE57 # HANGUL SYLLABLE PIEUP-I-SIOS
-0xBAF9 0xBE59 # HANGUL SYLLABLE PIEUP-I-IEUNG
-0xBAFA 0xBE5A # HANGUL SYLLABLE PIEUP-I-CIEUC
-0xBAFB 0xBE5B # HANGUL SYLLABLE PIEUP-I-CHIEUCH
-0xBAFC 0xBE60 # HANGUL SYLLABLE SSANGPIEUP-A
-0xBAFD 0xBE61 # HANGUL SYLLABLE SSANGPIEUP-A-KIYEOK
-0xBAFE 0xBE64 # HANGUL SYLLABLE SSANGPIEUP-A-NIEUN
-0xBB41 0xD2FB # HANGUL SYLLABLE THIEUTH-I-RIEULPIEUP
-0xBB42 0xD2FC # HANGUL SYLLABLE THIEUTH-I-RIEULSIOS
-0xBB43 0xD2FD # HANGUL SYLLABLE THIEUTH-I-RIEULTHIEUTH
-0xBB44 0xD2FE # HANGUL SYLLABLE THIEUTH-I-RIEULPHIEUPH
-0xBB45 0xD2FF # HANGUL SYLLABLE THIEUTH-I-RIEULHIEUH
-0xBB46 0xD302 # HANGUL SYLLABLE THIEUTH-I-PIEUPSIOS
-0xBB47 0xD304 # HANGUL SYLLABLE THIEUTH-I-SSANGSIOS
-0xBB48 0xD306 # HANGUL SYLLABLE THIEUTH-I-CIEUC
-0xBB49 0xD307 # HANGUL SYLLABLE THIEUTH-I-CHIEUCH
-0xBB4A 0xD308 # HANGUL SYLLABLE THIEUTH-I-KHIEUKH
-0xBB4B 0xD309 # HANGUL SYLLABLE THIEUTH-I-THIEUTH
-0xBB4C 0xD30A # HANGUL SYLLABLE THIEUTH-I-PHIEUPH
-0xBB4D 0xD30B # HANGUL SYLLABLE THIEUTH-I-HIEUH
-0xBB4E 0xD30F # HANGUL SYLLABLE PHIEUPH-A-KIYEOKSIOS
-0xBB4F 0xD311 # HANGUL SYLLABLE PHIEUPH-A-NIEUNCIEUC
-0xBB50 0xD312 # HANGUL SYLLABLE PHIEUPH-A-NIEUNHIEUH
-0xBB51 0xD313 # HANGUL SYLLABLE PHIEUPH-A-TIKEUT
-0xBB52 0xD315 # HANGUL SYLLABLE PHIEUPH-A-RIEULKIYEOK
-0xBB53 0xD317 # HANGUL SYLLABLE PHIEUPH-A-RIEULPIEUP
-0xBB54 0xD318 # HANGUL SYLLABLE PHIEUPH-A-RIEULSIOS
-0xBB55 0xD319 # HANGUL SYLLABLE PHIEUPH-A-RIEULTHIEUTH
-0xBB56 0xD31A # HANGUL SYLLABLE PHIEUPH-A-RIEULPHIEUPH
-0xBB57 0xD31B # HANGUL SYLLABLE PHIEUPH-A-RIEULHIEUH
-0xBB58 0xD31E # HANGUL SYLLABLE PHIEUPH-A-PIEUPSIOS
-0xBB59 0xD322 # HANGUL SYLLABLE PHIEUPH-A-CIEUC
-0xBB5A 0xD323 # HANGUL SYLLABLE PHIEUPH-A-CHIEUCH
-0xBB61 0xD324 # HANGUL SYLLABLE PHIEUPH-A-KHIEUKH
-0xBB62 0xD326 # HANGUL SYLLABLE PHIEUPH-A-PHIEUPH
-0xBB63 0xD327 # HANGUL SYLLABLE PHIEUPH-A-HIEUH
-0xBB64 0xD32A # HANGUL SYLLABLE PHIEUPH-AE-SSANGKIYEOK
-0xBB65 0xD32B # HANGUL SYLLABLE PHIEUPH-AE-KIYEOKSIOS
-0xBB66 0xD32D # HANGUL SYLLABLE PHIEUPH-AE-NIEUNCIEUC
-0xBB67 0xD32E # HANGUL SYLLABLE PHIEUPH-AE-NIEUNHIEUH
-0xBB68 0xD32F # HANGUL SYLLABLE PHIEUPH-AE-TIKEUT
-0xBB69 0xD331 # HANGUL SYLLABLE PHIEUPH-AE-RIEULKIYEOK
-0xBB6A 0xD332 # HANGUL SYLLABLE PHIEUPH-AE-RIEULMIEUM
-0xBB6B 0xD333 # HANGUL SYLLABLE PHIEUPH-AE-RIEULPIEUP
-0xBB6C 0xD334 # HANGUL SYLLABLE PHIEUPH-AE-RIEULSIOS
-0xBB6D 0xD335 # HANGUL SYLLABLE PHIEUPH-AE-RIEULTHIEUTH
-0xBB6E 0xD336 # HANGUL SYLLABLE PHIEUPH-AE-RIEULPHIEUPH
-0xBB6F 0xD337 # HANGUL SYLLABLE PHIEUPH-AE-RIEULHIEUH
-0xBB70 0xD33A # HANGUL SYLLABLE PHIEUPH-AE-PIEUPSIOS
-0xBB71 0xD33E # HANGUL SYLLABLE PHIEUPH-AE-CIEUC
-0xBB72 0xD33F # HANGUL SYLLABLE PHIEUPH-AE-CHIEUCH
-0xBB73 0xD340 # HANGUL SYLLABLE PHIEUPH-AE-KHIEUKH
-0xBB74 0xD341 # HANGUL SYLLABLE PHIEUPH-AE-THIEUTH
-0xBB75 0xD342 # HANGUL SYLLABLE PHIEUPH-AE-PHIEUPH
-0xBB76 0xD343 # HANGUL SYLLABLE PHIEUPH-AE-HIEUH
-0xBB77 0xD346 # HANGUL SYLLABLE PHIEUPH-YA-SSANGKIYEOK
-0xBB78 0xD347 # HANGUL SYLLABLE PHIEUPH-YA-KIYEOKSIOS
-0xBB79 0xD348 # HANGUL SYLLABLE PHIEUPH-YA-NIEUN
-0xBB7A 0xD349 # HANGUL SYLLABLE PHIEUPH-YA-NIEUNCIEUC
-0xBB81 0xD34A # HANGUL SYLLABLE PHIEUPH-YA-NIEUNHIEUH
-0xBB82 0xD34B # HANGUL SYLLABLE PHIEUPH-YA-TIKEUT
-0xBB83 0xD34C # HANGUL SYLLABLE PHIEUPH-YA-RIEUL
-0xBB84 0xD34D # HANGUL SYLLABLE PHIEUPH-YA-RIEULKIYEOK
-0xBB85 0xD34E # HANGUL SYLLABLE PHIEUPH-YA-RIEULMIEUM
-0xBB86 0xD34F # HANGUL SYLLABLE PHIEUPH-YA-RIEULPIEUP
-0xBB87 0xD350 # HANGUL SYLLABLE PHIEUPH-YA-RIEULSIOS
-0xBB88 0xD351 # HANGUL SYLLABLE PHIEUPH-YA-RIEULTHIEUTH
-0xBB89 0xD352 # HANGUL SYLLABLE PHIEUPH-YA-RIEULPHIEUPH
-0xBB8A 0xD353 # HANGUL SYLLABLE PHIEUPH-YA-RIEULHIEUH
-0xBB8B 0xD354 # HANGUL SYLLABLE PHIEUPH-YA-MIEUM
-0xBB8C 0xD355 # HANGUL SYLLABLE PHIEUPH-YA-PIEUP
-0xBB8D 0xD356 # HANGUL SYLLABLE PHIEUPH-YA-PIEUPSIOS
-0xBB8E 0xD357 # HANGUL SYLLABLE PHIEUPH-YA-SIOS
-0xBB8F 0xD358 # HANGUL SYLLABLE PHIEUPH-YA-SSANGSIOS
-0xBB90 0xD359 # HANGUL SYLLABLE PHIEUPH-YA-IEUNG
-0xBB91 0xD35A # HANGUL SYLLABLE PHIEUPH-YA-CIEUC
-0xBB92 0xD35B # HANGUL SYLLABLE PHIEUPH-YA-CHIEUCH
-0xBB93 0xD35C # HANGUL SYLLABLE PHIEUPH-YA-KHIEUKH
-0xBB94 0xD35D # HANGUL SYLLABLE PHIEUPH-YA-THIEUTH
-0xBB95 0xD35E # HANGUL SYLLABLE PHIEUPH-YA-PHIEUPH
-0xBB96 0xD35F # HANGUL SYLLABLE PHIEUPH-YA-HIEUH
-0xBB97 0xD360 # HANGUL SYLLABLE PHIEUPH-YAE
-0xBB98 0xD361 # HANGUL SYLLABLE PHIEUPH-YAE-KIYEOK
-0xBB99 0xD362 # HANGUL SYLLABLE PHIEUPH-YAE-SSANGKIYEOK
-0xBB9A 0xD363 # HANGUL SYLLABLE PHIEUPH-YAE-KIYEOKSIOS
-0xBB9B 0xD364 # HANGUL SYLLABLE PHIEUPH-YAE-NIEUN
-0xBB9C 0xD365 # HANGUL SYLLABLE PHIEUPH-YAE-NIEUNCIEUC
-0xBB9D 0xD366 # HANGUL SYLLABLE PHIEUPH-YAE-NIEUNHIEUH
-0xBB9E 0xD367 # HANGUL SYLLABLE PHIEUPH-YAE-TIKEUT
-0xBB9F 0xD368 # HANGUL SYLLABLE PHIEUPH-YAE-RIEUL
-0xBBA0 0xD369 # HANGUL SYLLABLE PHIEUPH-YAE-RIEULKIYEOK
-0xBBA1 0xBE68 # HANGUL SYLLABLE SSANGPIEUP-A-RIEUL
-0xBBA2 0xBE6A # HANGUL SYLLABLE SSANGPIEUP-A-RIEULMIEUM
-0xBBA3 0xBE70 # HANGUL SYLLABLE SSANGPIEUP-A-MIEUM
-0xBBA4 0xBE71 # HANGUL SYLLABLE SSANGPIEUP-A-PIEUP
-0xBBA5 0xBE73 # HANGUL SYLLABLE SSANGPIEUP-A-SIOS
-0xBBA6 0xBE74 # HANGUL SYLLABLE SSANGPIEUP-A-SSANGSIOS
-0xBBA7 0xBE75 # HANGUL SYLLABLE SSANGPIEUP-A-IEUNG
-0xBBA8 0xBE7B # HANGUL SYLLABLE SSANGPIEUP-A-HIEUH
-0xBBA9 0xBE7C # HANGUL SYLLABLE SSANGPIEUP-AE
-0xBBAA 0xBE7D # HANGUL SYLLABLE SSANGPIEUP-AE-KIYEOK
-0xBBAB 0xBE80 # HANGUL SYLLABLE SSANGPIEUP-AE-NIEUN
-0xBBAC 0xBE84 # HANGUL SYLLABLE SSANGPIEUP-AE-RIEUL
-0xBBAD 0xBE8C # HANGUL SYLLABLE SSANGPIEUP-AE-MIEUM
-0xBBAE 0xBE8D # HANGUL SYLLABLE SSANGPIEUP-AE-PIEUP
-0xBBAF 0xBE8F # HANGUL SYLLABLE SSANGPIEUP-AE-SIOS
-0xBBB0 0xBE90 # HANGUL SYLLABLE SSANGPIEUP-AE-SSANGSIOS
-0xBBB1 0xBE91 # HANGUL SYLLABLE SSANGPIEUP-AE-IEUNG
-0xBBB2 0xBE98 # HANGUL SYLLABLE SSANGPIEUP-YA
-0xBBB3 0xBE99 # HANGUL SYLLABLE SSANGPIEUP-YA-KIYEOK
-0xBBB4 0xBEA8 # HANGUL SYLLABLE SSANGPIEUP-YA-MIEUM
-0xBBB5 0xBED0 # HANGUL SYLLABLE SSANGPIEUP-EO
-0xBBB6 0xBED1 # HANGUL SYLLABLE SSANGPIEUP-EO-KIYEOK
-0xBBB7 0xBED4 # HANGUL SYLLABLE SSANGPIEUP-EO-NIEUN
-0xBBB8 0xBED7 # HANGUL SYLLABLE SSANGPIEUP-EO-TIKEUT
-0xBBB9 0xBED8 # HANGUL SYLLABLE SSANGPIEUP-EO-RIEUL
-0xBBBA 0xBEE0 # HANGUL SYLLABLE SSANGPIEUP-EO-MIEUM
-0xBBBB 0xBEE3 # HANGUL SYLLABLE SSANGPIEUP-EO-SIOS
-0xBBBC 0xBEE4 # HANGUL SYLLABLE SSANGPIEUP-EO-SSANGSIOS
-0xBBBD 0xBEE5 # HANGUL SYLLABLE SSANGPIEUP-EO-IEUNG
-0xBBBE 0xBEEC # HANGUL SYLLABLE SSANGPIEUP-E
-0xBBBF 0xBF01 # HANGUL SYLLABLE SSANGPIEUP-E-IEUNG
-0xBBC0 0xBF08 # HANGUL SYLLABLE SSANGPIEUP-YEO
-0xBBC1 0xBF09 # HANGUL SYLLABLE SSANGPIEUP-YEO-KIYEOK
-0xBBC2 0xBF18 # HANGUL SYLLABLE SSANGPIEUP-YEO-MIEUM
-0xBBC3 0xBF19 # HANGUL SYLLABLE SSANGPIEUP-YEO-PIEUP
-0xBBC4 0xBF1B # HANGUL SYLLABLE SSANGPIEUP-YEO-SIOS
-0xBBC5 0xBF1C # HANGUL SYLLABLE SSANGPIEUP-YEO-SSANGSIOS
-0xBBC6 0xBF1D # HANGUL SYLLABLE SSANGPIEUP-YEO-IEUNG
-0xBBC7 0xBF40 # HANGUL SYLLABLE SSANGPIEUP-O
-0xBBC8 0xBF41 # HANGUL SYLLABLE SSANGPIEUP-O-KIYEOK
-0xBBC9 0xBF44 # HANGUL SYLLABLE SSANGPIEUP-O-NIEUN
-0xBBCA 0xBF48 # HANGUL SYLLABLE SSANGPIEUP-O-RIEUL
-0xBBCB 0xBF50 # HANGUL SYLLABLE SSANGPIEUP-O-MIEUM
-0xBBCC 0xBF51 # HANGUL SYLLABLE SSANGPIEUP-O-PIEUP
-0xBBCD 0xBF55 # HANGUL SYLLABLE SSANGPIEUP-O-IEUNG
-0xBBCE 0xBF94 # HANGUL SYLLABLE SSANGPIEUP-OE
-0xBBCF 0xBFB0 # HANGUL SYLLABLE SSANGPIEUP-YO
-0xBBD0 0xBFC5 # HANGUL SYLLABLE SSANGPIEUP-YO-IEUNG
-0xBBD1 0xBFCC # HANGUL SYLLABLE SSANGPIEUP-U
-0xBBD2 0xBFCD # HANGUL SYLLABLE SSANGPIEUP-U-KIYEOK
-0xBBD3 0xBFD0 # HANGUL SYLLABLE SSANGPIEUP-U-NIEUN
-0xBBD4 0xBFD4 # HANGUL SYLLABLE SSANGPIEUP-U-RIEUL
-0xBBD5 0xBFDC # HANGUL SYLLABLE SSANGPIEUP-U-MIEUM
-0xBBD6 0xBFDF # HANGUL SYLLABLE SSANGPIEUP-U-SIOS
-0xBBD7 0xBFE1 # HANGUL SYLLABLE SSANGPIEUP-U-IEUNG
-0xBBD8 0xC03C # HANGUL SYLLABLE SSANGPIEUP-YU
-0xBBD9 0xC051 # HANGUL SYLLABLE SSANGPIEUP-YU-IEUNG
-0xBBDA 0xC058 # HANGUL SYLLABLE SSANGPIEUP-EU
-0xBBDB 0xC05C # HANGUL SYLLABLE SSANGPIEUP-EU-NIEUN
-0xBBDC 0xC060 # HANGUL SYLLABLE SSANGPIEUP-EU-RIEUL
-0xBBDD 0xC068 # HANGUL SYLLABLE SSANGPIEUP-EU-MIEUM
-0xBBDE 0xC069 # HANGUL SYLLABLE SSANGPIEUP-EU-PIEUP
-0xBBDF 0xC090 # HANGUL SYLLABLE SSANGPIEUP-I
-0xBBE0 0xC091 # HANGUL SYLLABLE SSANGPIEUP-I-KIYEOK
-0xBBE1 0xC094 # HANGUL SYLLABLE SSANGPIEUP-I-NIEUN
-0xBBE2 0xC098 # HANGUL SYLLABLE SSANGPIEUP-I-RIEUL
-0xBBE3 0xC0A0 # HANGUL SYLLABLE SSANGPIEUP-I-MIEUM
-0xBBE4 0xC0A1 # HANGUL SYLLABLE SSANGPIEUP-I-PIEUP
-0xBBE5 0xC0A3 # HANGUL SYLLABLE SSANGPIEUP-I-SIOS
-0xBBE6 0xC0A5 # HANGUL SYLLABLE SSANGPIEUP-I-IEUNG
-0xBBE7 0xC0AC # HANGUL SYLLABLE SIOS-A
-0xBBE8 0xC0AD # HANGUL SYLLABLE SIOS-A-KIYEOK
-0xBBE9 0xC0AF # HANGUL SYLLABLE SIOS-A-KIYEOKSIOS
-0xBBEA 0xC0B0 # HANGUL SYLLABLE SIOS-A-NIEUN
-0xBBEB 0xC0B3 # HANGUL SYLLABLE SIOS-A-TIKEUT
-0xBBEC 0xC0B4 # HANGUL SYLLABLE SIOS-A-RIEUL
-0xBBED 0xC0B5 # HANGUL SYLLABLE SIOS-A-RIEULKIYEOK
-0xBBEE 0xC0B6 # HANGUL SYLLABLE SIOS-A-RIEULMIEUM
-0xBBEF 0xC0BC # HANGUL SYLLABLE SIOS-A-MIEUM
-0xBBF0 0xC0BD # HANGUL SYLLABLE SIOS-A-PIEUP
-0xBBF1 0xC0BF # HANGUL SYLLABLE SIOS-A-SIOS
-0xBBF2 0xC0C0 # HANGUL SYLLABLE SIOS-A-SSANGSIOS
-0xBBF3 0xC0C1 # HANGUL SYLLABLE SIOS-A-IEUNG
-0xBBF4 0xC0C5 # HANGUL SYLLABLE SIOS-A-THIEUTH
-0xBBF5 0xC0C8 # HANGUL SYLLABLE SIOS-AE
-0xBBF6 0xC0C9 # HANGUL SYLLABLE SIOS-AE-KIYEOK
-0xBBF7 0xC0CC # HANGUL SYLLABLE SIOS-AE-NIEUN
-0xBBF8 0xC0D0 # HANGUL SYLLABLE SIOS-AE-RIEUL
-0xBBF9 0xC0D8 # HANGUL SYLLABLE SIOS-AE-MIEUM
-0xBBFA 0xC0D9 # HANGUL SYLLABLE SIOS-AE-PIEUP
-0xBBFB 0xC0DB # HANGUL SYLLABLE SIOS-AE-SIOS
-0xBBFC 0xC0DC # HANGUL SYLLABLE SIOS-AE-SSANGSIOS
-0xBBFD 0xC0DD # HANGUL SYLLABLE SIOS-AE-IEUNG
-0xBBFE 0xC0E4 # HANGUL SYLLABLE SIOS-YA
-0xBC41 0xD36A # HANGUL SYLLABLE PHIEUPH-YAE-RIEULMIEUM
-0xBC42 0xD36B # HANGUL SYLLABLE PHIEUPH-YAE-RIEULPIEUP
-0xBC43 0xD36C # HANGUL SYLLABLE PHIEUPH-YAE-RIEULSIOS
-0xBC44 0xD36D # HANGUL SYLLABLE PHIEUPH-YAE-RIEULTHIEUTH
-0xBC45 0xD36E # HANGUL SYLLABLE PHIEUPH-YAE-RIEULPHIEUPH
-0xBC46 0xD36F # HANGUL SYLLABLE PHIEUPH-YAE-RIEULHIEUH
-0xBC47 0xD370 # HANGUL SYLLABLE PHIEUPH-YAE-MIEUM
-0xBC48 0xD371 # HANGUL SYLLABLE PHIEUPH-YAE-PIEUP
-0xBC49 0xD372 # HANGUL SYLLABLE PHIEUPH-YAE-PIEUPSIOS
-0xBC4A 0xD373 # HANGUL SYLLABLE PHIEUPH-YAE-SIOS
-0xBC4B 0xD374 # HANGUL SYLLABLE PHIEUPH-YAE-SSANGSIOS
-0xBC4C 0xD375 # HANGUL SYLLABLE PHIEUPH-YAE-IEUNG
-0xBC4D 0xD376 # HANGUL SYLLABLE PHIEUPH-YAE-CIEUC
-0xBC4E 0xD377 # HANGUL SYLLABLE PHIEUPH-YAE-CHIEUCH
-0xBC4F 0xD378 # HANGUL SYLLABLE PHIEUPH-YAE-KHIEUKH
-0xBC50 0xD379 # HANGUL SYLLABLE PHIEUPH-YAE-THIEUTH
-0xBC51 0xD37A # HANGUL SYLLABLE PHIEUPH-YAE-PHIEUPH
-0xBC52 0xD37B # HANGUL SYLLABLE PHIEUPH-YAE-HIEUH
-0xBC53 0xD37E # HANGUL SYLLABLE PHIEUPH-EO-SSANGKIYEOK
-0xBC54 0xD37F # HANGUL SYLLABLE PHIEUPH-EO-KIYEOKSIOS
-0xBC55 0xD381 # HANGUL SYLLABLE PHIEUPH-EO-NIEUNCIEUC
-0xBC56 0xD382 # HANGUL SYLLABLE PHIEUPH-EO-NIEUNHIEUH
-0xBC57 0xD383 # HANGUL SYLLABLE PHIEUPH-EO-TIKEUT
-0xBC58 0xD385 # HANGUL SYLLABLE PHIEUPH-EO-RIEULKIYEOK
-0xBC59 0xD386 # HANGUL SYLLABLE PHIEUPH-EO-RIEULMIEUM
-0xBC5A 0xD387 # HANGUL SYLLABLE PHIEUPH-EO-RIEULPIEUP
-0xBC61 0xD388 # HANGUL SYLLABLE PHIEUPH-EO-RIEULSIOS
-0xBC62 0xD389 # HANGUL SYLLABLE PHIEUPH-EO-RIEULTHIEUTH
-0xBC63 0xD38A # HANGUL SYLLABLE PHIEUPH-EO-RIEULPHIEUPH
-0xBC64 0xD38B # HANGUL SYLLABLE PHIEUPH-EO-RIEULHIEUH
-0xBC65 0xD38E # HANGUL SYLLABLE PHIEUPH-EO-PIEUPSIOS
-0xBC66 0xD392 # HANGUL SYLLABLE PHIEUPH-EO-CIEUC
-0xBC67 0xD393 # HANGUL SYLLABLE PHIEUPH-EO-CHIEUCH
-0xBC68 0xD394 # HANGUL SYLLABLE PHIEUPH-EO-KHIEUKH
-0xBC69 0xD395 # HANGUL SYLLABLE PHIEUPH-EO-THIEUTH
-0xBC6A 0xD396 # HANGUL SYLLABLE PHIEUPH-EO-PHIEUPH
-0xBC6B 0xD397 # HANGUL SYLLABLE PHIEUPH-EO-HIEUH
-0xBC6C 0xD39A # HANGUL SYLLABLE PHIEUPH-E-SSANGKIYEOK
-0xBC6D 0xD39B # HANGUL SYLLABLE PHIEUPH-E-KIYEOKSIOS
-0xBC6E 0xD39D # HANGUL SYLLABLE PHIEUPH-E-NIEUNCIEUC
-0xBC6F 0xD39E # HANGUL SYLLABLE PHIEUPH-E-NIEUNHIEUH
-0xBC70 0xD39F # HANGUL SYLLABLE PHIEUPH-E-TIKEUT
-0xBC71 0xD3A1 # HANGUL SYLLABLE PHIEUPH-E-RIEULKIYEOK
-0xBC72 0xD3A2 # HANGUL SYLLABLE PHIEUPH-E-RIEULMIEUM
-0xBC73 0xD3A3 # HANGUL SYLLABLE PHIEUPH-E-RIEULPIEUP
-0xBC74 0xD3A4 # HANGUL SYLLABLE PHIEUPH-E-RIEULSIOS
-0xBC75 0xD3A5 # HANGUL SYLLABLE PHIEUPH-E-RIEULTHIEUTH
-0xBC76 0xD3A6 # HANGUL SYLLABLE PHIEUPH-E-RIEULPHIEUPH
-0xBC77 0xD3A7 # HANGUL SYLLABLE PHIEUPH-E-RIEULHIEUH
-0xBC78 0xD3AA # HANGUL SYLLABLE PHIEUPH-E-PIEUPSIOS
-0xBC79 0xD3AC # HANGUL SYLLABLE PHIEUPH-E-SSANGSIOS
-0xBC7A 0xD3AE # HANGUL SYLLABLE PHIEUPH-E-CIEUC
-0xBC81 0xD3AF # HANGUL SYLLABLE PHIEUPH-E-CHIEUCH
-0xBC82 0xD3B0 # HANGUL SYLLABLE PHIEUPH-E-KHIEUKH
-0xBC83 0xD3B1 # HANGUL SYLLABLE PHIEUPH-E-THIEUTH
-0xBC84 0xD3B2 # HANGUL SYLLABLE PHIEUPH-E-PHIEUPH
-0xBC85 0xD3B3 # HANGUL SYLLABLE PHIEUPH-E-HIEUH
-0xBC86 0xD3B5 # HANGUL SYLLABLE PHIEUPH-YEO-KIYEOK
-0xBC87 0xD3B6 # HANGUL SYLLABLE PHIEUPH-YEO-SSANGKIYEOK
-0xBC88 0xD3B7 # HANGUL SYLLABLE PHIEUPH-YEO-KIYEOKSIOS
-0xBC89 0xD3B9 # HANGUL SYLLABLE PHIEUPH-YEO-NIEUNCIEUC
-0xBC8A 0xD3BA # HANGUL SYLLABLE PHIEUPH-YEO-NIEUNHIEUH
-0xBC8B 0xD3BB # HANGUL SYLLABLE PHIEUPH-YEO-TIKEUT
-0xBC8C 0xD3BD # HANGUL SYLLABLE PHIEUPH-YEO-RIEULKIYEOK
-0xBC8D 0xD3BE # HANGUL SYLLABLE PHIEUPH-YEO-RIEULMIEUM
-0xBC8E 0xD3BF # HANGUL SYLLABLE PHIEUPH-YEO-RIEULPIEUP
-0xBC8F 0xD3C0 # HANGUL SYLLABLE PHIEUPH-YEO-RIEULSIOS
-0xBC90 0xD3C1 # HANGUL SYLLABLE PHIEUPH-YEO-RIEULTHIEUTH
-0xBC91 0xD3C2 # HANGUL SYLLABLE PHIEUPH-YEO-RIEULPHIEUPH
-0xBC92 0xD3C3 # HANGUL SYLLABLE PHIEUPH-YEO-RIEULHIEUH
-0xBC93 0xD3C6 # HANGUL SYLLABLE PHIEUPH-YEO-PIEUPSIOS
-0xBC94 0xD3C7 # HANGUL SYLLABLE PHIEUPH-YEO-SIOS
-0xBC95 0xD3CA # HANGUL SYLLABLE PHIEUPH-YEO-CIEUC
-0xBC96 0xD3CB # HANGUL SYLLABLE PHIEUPH-YEO-CHIEUCH
-0xBC97 0xD3CC # HANGUL SYLLABLE PHIEUPH-YEO-KHIEUKH
-0xBC98 0xD3CD # HANGUL SYLLABLE PHIEUPH-YEO-THIEUTH
-0xBC99 0xD3CE # HANGUL SYLLABLE PHIEUPH-YEO-PHIEUPH
-0xBC9A 0xD3CF # HANGUL SYLLABLE PHIEUPH-YEO-HIEUH
-0xBC9B 0xD3D1 # HANGUL SYLLABLE PHIEUPH-YE-KIYEOK
-0xBC9C 0xD3D2 # HANGUL SYLLABLE PHIEUPH-YE-SSANGKIYEOK
-0xBC9D 0xD3D3 # HANGUL SYLLABLE PHIEUPH-YE-KIYEOKSIOS
-0xBC9E 0xD3D4 # HANGUL SYLLABLE PHIEUPH-YE-NIEUN
-0xBC9F 0xD3D5 # HANGUL SYLLABLE PHIEUPH-YE-NIEUNCIEUC
-0xBCA0 0xD3D6 # HANGUL SYLLABLE PHIEUPH-YE-NIEUNHIEUH
-0xBCA1 0xC0E5 # HANGUL SYLLABLE SIOS-YA-KIYEOK
-0xBCA2 0xC0E8 # HANGUL SYLLABLE SIOS-YA-NIEUN
-0xBCA3 0xC0EC # HANGUL SYLLABLE SIOS-YA-RIEUL
-0xBCA4 0xC0F4 # HANGUL SYLLABLE SIOS-YA-MIEUM
-0xBCA5 0xC0F5 # HANGUL SYLLABLE SIOS-YA-PIEUP
-0xBCA6 0xC0F7 # HANGUL SYLLABLE SIOS-YA-SIOS
-0xBCA7 0xC0F9 # HANGUL SYLLABLE SIOS-YA-IEUNG
-0xBCA8 0xC100 # HANGUL SYLLABLE SIOS-YAE
-0xBCA9 0xC104 # HANGUL SYLLABLE SIOS-YAE-NIEUN
-0xBCAA 0xC108 # HANGUL SYLLABLE SIOS-YAE-RIEUL
-0xBCAB 0xC110 # HANGUL SYLLABLE SIOS-YAE-MIEUM
-0xBCAC 0xC115 # HANGUL SYLLABLE SIOS-YAE-IEUNG
-0xBCAD 0xC11C # HANGUL SYLLABLE SIOS-EO
-0xBCAE 0xC11D # HANGUL SYLLABLE SIOS-EO-KIYEOK
-0xBCAF 0xC11E # HANGUL SYLLABLE SIOS-EO-SSANGKIYEOK
-0xBCB0 0xC11F # HANGUL SYLLABLE SIOS-EO-KIYEOKSIOS
-0xBCB1 0xC120 # HANGUL SYLLABLE SIOS-EO-NIEUN
-0xBCB2 0xC123 # HANGUL SYLLABLE SIOS-EO-TIKEUT
-0xBCB3 0xC124 # HANGUL SYLLABLE SIOS-EO-RIEUL
-0xBCB4 0xC126 # HANGUL SYLLABLE SIOS-EO-RIEULMIEUM
-0xBCB5 0xC127 # HANGUL SYLLABLE SIOS-EO-RIEULPIEUP
-0xBCB6 0xC12C # HANGUL SYLLABLE SIOS-EO-MIEUM
-0xBCB7 0xC12D # HANGUL SYLLABLE SIOS-EO-PIEUP
-0xBCB8 0xC12F # HANGUL SYLLABLE SIOS-EO-SIOS
-0xBCB9 0xC130 # HANGUL SYLLABLE SIOS-EO-SSANGSIOS
-0xBCBA 0xC131 # HANGUL SYLLABLE SIOS-EO-IEUNG
-0xBCBB 0xC136 # HANGUL SYLLABLE SIOS-EO-PHIEUPH
-0xBCBC 0xC138 # HANGUL SYLLABLE SIOS-E
-0xBCBD 0xC139 # HANGUL SYLLABLE SIOS-E-KIYEOK
-0xBCBE 0xC13C # HANGUL SYLLABLE SIOS-E-NIEUN
-0xBCBF 0xC140 # HANGUL SYLLABLE SIOS-E-RIEUL
-0xBCC0 0xC148 # HANGUL SYLLABLE SIOS-E-MIEUM
-0xBCC1 0xC149 # HANGUL SYLLABLE SIOS-E-PIEUP
-0xBCC2 0xC14B # HANGUL SYLLABLE SIOS-E-SIOS
-0xBCC3 0xC14C # HANGUL SYLLABLE SIOS-E-SSANGSIOS
-0xBCC4 0xC14D # HANGUL SYLLABLE SIOS-E-IEUNG
-0xBCC5 0xC154 # HANGUL SYLLABLE SIOS-YEO
-0xBCC6 0xC155 # HANGUL SYLLABLE SIOS-YEO-KIYEOK
-0xBCC7 0xC158 # HANGUL SYLLABLE SIOS-YEO-NIEUN
-0xBCC8 0xC15C # HANGUL SYLLABLE SIOS-YEO-RIEUL
-0xBCC9 0xC164 # HANGUL SYLLABLE SIOS-YEO-MIEUM
-0xBCCA 0xC165 # HANGUL SYLLABLE SIOS-YEO-PIEUP
-0xBCCB 0xC167 # HANGUL SYLLABLE SIOS-YEO-SIOS
-0xBCCC 0xC168 # HANGUL SYLLABLE SIOS-YEO-SSANGSIOS
-0xBCCD 0xC169 # HANGUL SYLLABLE SIOS-YEO-IEUNG
-0xBCCE 0xC170 # HANGUL SYLLABLE SIOS-YE
-0xBCCF 0xC174 # HANGUL SYLLABLE SIOS-YE-NIEUN
-0xBCD0 0xC178 # HANGUL SYLLABLE SIOS-YE-RIEUL
-0xBCD1 0xC185 # HANGUL SYLLABLE SIOS-YE-IEUNG
-0xBCD2 0xC18C # HANGUL SYLLABLE SIOS-O
-0xBCD3 0xC18D # HANGUL SYLLABLE SIOS-O-KIYEOK
-0xBCD4 0xC18E # HANGUL SYLLABLE SIOS-O-SSANGKIYEOK
-0xBCD5 0xC190 # HANGUL SYLLABLE SIOS-O-NIEUN
-0xBCD6 0xC194 # HANGUL SYLLABLE SIOS-O-RIEUL
-0xBCD7 0xC196 # HANGUL SYLLABLE SIOS-O-RIEULMIEUM
-0xBCD8 0xC19C # HANGUL SYLLABLE SIOS-O-MIEUM
-0xBCD9 0xC19D # HANGUL SYLLABLE SIOS-O-PIEUP
-0xBCDA 0xC19F # HANGUL SYLLABLE SIOS-O-SIOS
-0xBCDB 0xC1A1 # HANGUL SYLLABLE SIOS-O-IEUNG
-0xBCDC 0xC1A5 # HANGUL SYLLABLE SIOS-O-THIEUTH
-0xBCDD 0xC1A8 # HANGUL SYLLABLE SIOS-WA
-0xBCDE 0xC1A9 # HANGUL SYLLABLE SIOS-WA-KIYEOK
-0xBCDF 0xC1AC # HANGUL SYLLABLE SIOS-WA-NIEUN
-0xBCE0 0xC1B0 # HANGUL SYLLABLE SIOS-WA-RIEUL
-0xBCE1 0xC1BD # HANGUL SYLLABLE SIOS-WA-IEUNG
-0xBCE2 0xC1C4 # HANGUL SYLLABLE SIOS-WAE
-0xBCE3 0xC1C8 # HANGUL SYLLABLE SIOS-WAE-NIEUN
-0xBCE4 0xC1CC # HANGUL SYLLABLE SIOS-WAE-RIEUL
-0xBCE5 0xC1D4 # HANGUL SYLLABLE SIOS-WAE-MIEUM
-0xBCE6 0xC1D7 # HANGUL SYLLABLE SIOS-WAE-SIOS
-0xBCE7 0xC1D8 # HANGUL SYLLABLE SIOS-WAE-SSANGSIOS
-0xBCE8 0xC1E0 # HANGUL SYLLABLE SIOS-OE
-0xBCE9 0xC1E4 # HANGUL SYLLABLE SIOS-OE-NIEUN
-0xBCEA 0xC1E8 # HANGUL SYLLABLE SIOS-OE-RIEUL
-0xBCEB 0xC1F0 # HANGUL SYLLABLE SIOS-OE-MIEUM
-0xBCEC 0xC1F1 # HANGUL SYLLABLE SIOS-OE-PIEUP
-0xBCED 0xC1F3 # HANGUL SYLLABLE SIOS-OE-SIOS
-0xBCEE 0xC1FC # HANGUL SYLLABLE SIOS-YO
-0xBCEF 0xC1FD # HANGUL SYLLABLE SIOS-YO-KIYEOK
-0xBCF0 0xC200 # HANGUL SYLLABLE SIOS-YO-NIEUN
-0xBCF1 0xC204 # HANGUL SYLLABLE SIOS-YO-RIEUL
-0xBCF2 0xC20C # HANGUL SYLLABLE SIOS-YO-MIEUM
-0xBCF3 0xC20D # HANGUL SYLLABLE SIOS-YO-PIEUP
-0xBCF4 0xC20F # HANGUL SYLLABLE SIOS-YO-SIOS
-0xBCF5 0xC211 # HANGUL SYLLABLE SIOS-YO-IEUNG
-0xBCF6 0xC218 # HANGUL SYLLABLE SIOS-U
-0xBCF7 0xC219 # HANGUL SYLLABLE SIOS-U-KIYEOK
-0xBCF8 0xC21C # HANGUL SYLLABLE SIOS-U-NIEUN
-0xBCF9 0xC21F # HANGUL SYLLABLE SIOS-U-TIKEUT
-0xBCFA 0xC220 # HANGUL SYLLABLE SIOS-U-RIEUL
-0xBCFB 0xC228 # HANGUL SYLLABLE SIOS-U-MIEUM
-0xBCFC 0xC229 # HANGUL SYLLABLE SIOS-U-PIEUP
-0xBCFD 0xC22B # HANGUL SYLLABLE SIOS-U-SIOS
-0xBCFE 0xC22D # HANGUL SYLLABLE SIOS-U-IEUNG
-0xBD41 0xD3D7 # HANGUL SYLLABLE PHIEUPH-YE-TIKEUT
-0xBD42 0xD3D9 # HANGUL SYLLABLE PHIEUPH-YE-RIEULKIYEOK
-0xBD43 0xD3DA # HANGUL SYLLABLE PHIEUPH-YE-RIEULMIEUM
-0xBD44 0xD3DB # HANGUL SYLLABLE PHIEUPH-YE-RIEULPIEUP
-0xBD45 0xD3DC # HANGUL SYLLABLE PHIEUPH-YE-RIEULSIOS
-0xBD46 0xD3DD # HANGUL SYLLABLE PHIEUPH-YE-RIEULTHIEUTH
-0xBD47 0xD3DE # HANGUL SYLLABLE PHIEUPH-YE-RIEULPHIEUPH
-0xBD48 0xD3DF # HANGUL SYLLABLE PHIEUPH-YE-RIEULHIEUH
-0xBD49 0xD3E0 # HANGUL SYLLABLE PHIEUPH-YE-MIEUM
-0xBD4A 0xD3E2 # HANGUL SYLLABLE PHIEUPH-YE-PIEUPSIOS
-0xBD4B 0xD3E4 # HANGUL SYLLABLE PHIEUPH-YE-SSANGSIOS
-0xBD4C 0xD3E5 # HANGUL SYLLABLE PHIEUPH-YE-IEUNG
-0xBD4D 0xD3E6 # HANGUL SYLLABLE PHIEUPH-YE-CIEUC
-0xBD4E 0xD3E7 # HANGUL SYLLABLE PHIEUPH-YE-CHIEUCH
-0xBD4F 0xD3E8 # HANGUL SYLLABLE PHIEUPH-YE-KHIEUKH
-0xBD50 0xD3E9 # HANGUL SYLLABLE PHIEUPH-YE-THIEUTH
-0xBD51 0xD3EA # HANGUL SYLLABLE PHIEUPH-YE-PHIEUPH
-0xBD52 0xD3EB # HANGUL SYLLABLE PHIEUPH-YE-HIEUH
-0xBD53 0xD3EE # HANGUL SYLLABLE PHIEUPH-O-SSANGKIYEOK
-0xBD54 0xD3EF # HANGUL SYLLABLE PHIEUPH-O-KIYEOKSIOS
-0xBD55 0xD3F1 # HANGUL SYLLABLE PHIEUPH-O-NIEUNCIEUC
-0xBD56 0xD3F2 # HANGUL SYLLABLE PHIEUPH-O-NIEUNHIEUH
-0xBD57 0xD3F3 # HANGUL SYLLABLE PHIEUPH-O-TIKEUT
-0xBD58 0xD3F5 # HANGUL SYLLABLE PHIEUPH-O-RIEULKIYEOK
-0xBD59 0xD3F6 # HANGUL SYLLABLE PHIEUPH-O-RIEULMIEUM
-0xBD5A 0xD3F7 # HANGUL SYLLABLE PHIEUPH-O-RIEULPIEUP
-0xBD61 0xD3F8 # HANGUL SYLLABLE PHIEUPH-O-RIEULSIOS
-0xBD62 0xD3F9 # HANGUL SYLLABLE PHIEUPH-O-RIEULTHIEUTH
-0xBD63 0xD3FA # HANGUL SYLLABLE PHIEUPH-O-RIEULPHIEUPH
-0xBD64 0xD3FB # HANGUL SYLLABLE PHIEUPH-O-RIEULHIEUH
-0xBD65 0xD3FE # HANGUL SYLLABLE PHIEUPH-O-PIEUPSIOS
-0xBD66 0xD400 # HANGUL SYLLABLE PHIEUPH-O-SSANGSIOS
-0xBD67 0xD402 # HANGUL SYLLABLE PHIEUPH-O-CIEUC
-0xBD68 0xD403 # HANGUL SYLLABLE PHIEUPH-O-CHIEUCH
-0xBD69 0xD404 # HANGUL SYLLABLE PHIEUPH-O-KHIEUKH
-0xBD6A 0xD405 # HANGUL SYLLABLE PHIEUPH-O-THIEUTH
-0xBD6B 0xD406 # HANGUL SYLLABLE PHIEUPH-O-PHIEUPH
-0xBD6C 0xD407 # HANGUL SYLLABLE PHIEUPH-O-HIEUH
-0xBD6D 0xD409 # HANGUL SYLLABLE PHIEUPH-WA-KIYEOK
-0xBD6E 0xD40A # HANGUL SYLLABLE PHIEUPH-WA-SSANGKIYEOK
-0xBD6F 0xD40B # HANGUL SYLLABLE PHIEUPH-WA-KIYEOKSIOS
-0xBD70 0xD40C # HANGUL SYLLABLE PHIEUPH-WA-NIEUN
-0xBD71 0xD40D # HANGUL SYLLABLE PHIEUPH-WA-NIEUNCIEUC
-0xBD72 0xD40E # HANGUL SYLLABLE PHIEUPH-WA-NIEUNHIEUH
-0xBD73 0xD40F # HANGUL SYLLABLE PHIEUPH-WA-TIKEUT
-0xBD74 0xD410 # HANGUL SYLLABLE PHIEUPH-WA-RIEUL
-0xBD75 0xD411 # HANGUL SYLLABLE PHIEUPH-WA-RIEULKIYEOK
-0xBD76 0xD412 # HANGUL SYLLABLE PHIEUPH-WA-RIEULMIEUM
-0xBD77 0xD413 # HANGUL SYLLABLE PHIEUPH-WA-RIEULPIEUP
-0xBD78 0xD414 # HANGUL SYLLABLE PHIEUPH-WA-RIEULSIOS
-0xBD79 0xD415 # HANGUL SYLLABLE PHIEUPH-WA-RIEULTHIEUTH
-0xBD7A 0xD416 # HANGUL SYLLABLE PHIEUPH-WA-RIEULPHIEUPH
-0xBD81 0xD417 # HANGUL SYLLABLE PHIEUPH-WA-RIEULHIEUH
-0xBD82 0xD418 # HANGUL SYLLABLE PHIEUPH-WA-MIEUM
-0xBD83 0xD419 # HANGUL SYLLABLE PHIEUPH-WA-PIEUP
-0xBD84 0xD41A # HANGUL SYLLABLE PHIEUPH-WA-PIEUPSIOS
-0xBD85 0xD41B # HANGUL SYLLABLE PHIEUPH-WA-SIOS
-0xBD86 0xD41C # HANGUL SYLLABLE PHIEUPH-WA-SSANGSIOS
-0xBD87 0xD41E # HANGUL SYLLABLE PHIEUPH-WA-CIEUC
-0xBD88 0xD41F # HANGUL SYLLABLE PHIEUPH-WA-CHIEUCH
-0xBD89 0xD420 # HANGUL SYLLABLE PHIEUPH-WA-KHIEUKH
-0xBD8A 0xD421 # HANGUL SYLLABLE PHIEUPH-WA-THIEUTH
-0xBD8B 0xD422 # HANGUL SYLLABLE PHIEUPH-WA-PHIEUPH
-0xBD8C 0xD423 # HANGUL SYLLABLE PHIEUPH-WA-HIEUH
-0xBD8D 0xD424 # HANGUL SYLLABLE PHIEUPH-WAE
-0xBD8E 0xD425 # HANGUL SYLLABLE PHIEUPH-WAE-KIYEOK
-0xBD8F 0xD426 # HANGUL SYLLABLE PHIEUPH-WAE-SSANGKIYEOK
-0xBD90 0xD427 # HANGUL SYLLABLE PHIEUPH-WAE-KIYEOKSIOS
-0xBD91 0xD428 # HANGUL SYLLABLE PHIEUPH-WAE-NIEUN
-0xBD92 0xD429 # HANGUL SYLLABLE PHIEUPH-WAE-NIEUNCIEUC
-0xBD93 0xD42A # HANGUL SYLLABLE PHIEUPH-WAE-NIEUNHIEUH
-0xBD94 0xD42B # HANGUL SYLLABLE PHIEUPH-WAE-TIKEUT
-0xBD95 0xD42C # HANGUL SYLLABLE PHIEUPH-WAE-RIEUL
-0xBD96 0xD42D # HANGUL SYLLABLE PHIEUPH-WAE-RIEULKIYEOK
-0xBD97 0xD42E # HANGUL SYLLABLE PHIEUPH-WAE-RIEULMIEUM
-0xBD98 0xD42F # HANGUL SYLLABLE PHIEUPH-WAE-RIEULPIEUP
-0xBD99 0xD430 # HANGUL SYLLABLE PHIEUPH-WAE-RIEULSIOS
-0xBD9A 0xD431 # HANGUL SYLLABLE PHIEUPH-WAE-RIEULTHIEUTH
-0xBD9B 0xD432 # HANGUL SYLLABLE PHIEUPH-WAE-RIEULPHIEUPH
-0xBD9C 0xD433 # HANGUL SYLLABLE PHIEUPH-WAE-RIEULHIEUH
-0xBD9D 0xD434 # HANGUL SYLLABLE PHIEUPH-WAE-MIEUM
-0xBD9E 0xD435 # HANGUL SYLLABLE PHIEUPH-WAE-PIEUP
-0xBD9F 0xD436 # HANGUL SYLLABLE PHIEUPH-WAE-PIEUPSIOS
-0xBDA0 0xD437 # HANGUL SYLLABLE PHIEUPH-WAE-SIOS
-0xBDA1 0xC22F # HANGUL SYLLABLE SIOS-U-CHIEUCH
-0xBDA2 0xC231 # HANGUL SYLLABLE SIOS-U-THIEUTH
-0xBDA3 0xC232 # HANGUL SYLLABLE SIOS-U-PHIEUPH
-0xBDA4 0xC234 # HANGUL SYLLABLE SIOS-WEO
-0xBDA5 0xC248 # HANGUL SYLLABLE SIOS-WEO-SSANGSIOS
-0xBDA6 0xC250 # HANGUL SYLLABLE SIOS-WE
-0xBDA7 0xC251 # HANGUL SYLLABLE SIOS-WE-KIYEOK
-0xBDA8 0xC254 # HANGUL SYLLABLE SIOS-WE-NIEUN
-0xBDA9 0xC258 # HANGUL SYLLABLE SIOS-WE-RIEUL
-0xBDAA 0xC260 # HANGUL SYLLABLE SIOS-WE-MIEUM
-0xBDAB 0xC265 # HANGUL SYLLABLE SIOS-WE-IEUNG
-0xBDAC 0xC26C # HANGUL SYLLABLE SIOS-WI
-0xBDAD 0xC26D # HANGUL SYLLABLE SIOS-WI-KIYEOK
-0xBDAE 0xC270 # HANGUL SYLLABLE SIOS-WI-NIEUN
-0xBDAF 0xC274 # HANGUL SYLLABLE SIOS-WI-RIEUL
-0xBDB0 0xC27C # HANGUL SYLLABLE SIOS-WI-MIEUM
-0xBDB1 0xC27D # HANGUL SYLLABLE SIOS-WI-PIEUP
-0xBDB2 0xC27F # HANGUL SYLLABLE SIOS-WI-SIOS
-0xBDB3 0xC281 # HANGUL SYLLABLE SIOS-WI-IEUNG
-0xBDB4 0xC288 # HANGUL SYLLABLE SIOS-YU
-0xBDB5 0xC289 # HANGUL SYLLABLE SIOS-YU-KIYEOK
-0xBDB6 0xC290 # HANGUL SYLLABLE SIOS-YU-RIEUL
-0xBDB7 0xC298 # HANGUL SYLLABLE SIOS-YU-MIEUM
-0xBDB8 0xC29B # HANGUL SYLLABLE SIOS-YU-SIOS
-0xBDB9 0xC29D # HANGUL SYLLABLE SIOS-YU-IEUNG
-0xBDBA 0xC2A4 # HANGUL SYLLABLE SIOS-EU
-0xBDBB 0xC2A5 # HANGUL SYLLABLE SIOS-EU-KIYEOK
-0xBDBC 0xC2A8 # HANGUL SYLLABLE SIOS-EU-NIEUN
-0xBDBD 0xC2AC # HANGUL SYLLABLE SIOS-EU-RIEUL
-0xBDBE 0xC2AD # HANGUL SYLLABLE SIOS-EU-RIEULKIYEOK
-0xBDBF 0xC2B4 # HANGUL SYLLABLE SIOS-EU-MIEUM
-0xBDC0 0xC2B5 # HANGUL SYLLABLE SIOS-EU-PIEUP
-0xBDC1 0xC2B7 # HANGUL SYLLABLE SIOS-EU-SIOS
-0xBDC2 0xC2B9 # HANGUL SYLLABLE SIOS-EU-IEUNG
-0xBDC3 0xC2DC # HANGUL SYLLABLE SIOS-I
-0xBDC4 0xC2DD # HANGUL SYLLABLE SIOS-I-KIYEOK
-0xBDC5 0xC2E0 # HANGUL SYLLABLE SIOS-I-NIEUN
-0xBDC6 0xC2E3 # HANGUL SYLLABLE SIOS-I-TIKEUT
-0xBDC7 0xC2E4 # HANGUL SYLLABLE SIOS-I-RIEUL
-0xBDC8 0xC2EB # HANGUL SYLLABLE SIOS-I-RIEULHIEUH
-0xBDC9 0xC2EC # HANGUL SYLLABLE SIOS-I-MIEUM
-0xBDCA 0xC2ED # HANGUL SYLLABLE SIOS-I-PIEUP
-0xBDCB 0xC2EF # HANGUL SYLLABLE SIOS-I-SIOS
-0xBDCC 0xC2F1 # HANGUL SYLLABLE SIOS-I-IEUNG
-0xBDCD 0xC2F6 # HANGUL SYLLABLE SIOS-I-PHIEUPH
-0xBDCE 0xC2F8 # HANGUL SYLLABLE SSANGSIOS-A
-0xBDCF 0xC2F9 # HANGUL SYLLABLE SSANGSIOS-A-KIYEOK
-0xBDD0 0xC2FB # HANGUL SYLLABLE SSANGSIOS-A-KIYEOKSIOS
-0xBDD1 0xC2FC # HANGUL SYLLABLE SSANGSIOS-A-NIEUN
-0xBDD2 0xC300 # HANGUL SYLLABLE SSANGSIOS-A-RIEUL
-0xBDD3 0xC308 # HANGUL SYLLABLE SSANGSIOS-A-MIEUM
-0xBDD4 0xC309 # HANGUL SYLLABLE SSANGSIOS-A-PIEUP
-0xBDD5 0xC30C # HANGUL SYLLABLE SSANGSIOS-A-SSANGSIOS
-0xBDD6 0xC30D # HANGUL SYLLABLE SSANGSIOS-A-IEUNG
-0xBDD7 0xC313 # HANGUL SYLLABLE SSANGSIOS-A-HIEUH
-0xBDD8 0xC314 # HANGUL SYLLABLE SSANGSIOS-AE
-0xBDD9 0xC315 # HANGUL SYLLABLE SSANGSIOS-AE-KIYEOK
-0xBDDA 0xC318 # HANGUL SYLLABLE SSANGSIOS-AE-NIEUN
-0xBDDB 0xC31C # HANGUL SYLLABLE SSANGSIOS-AE-RIEUL
-0xBDDC 0xC324 # HANGUL SYLLABLE SSANGSIOS-AE-MIEUM
-0xBDDD 0xC325 # HANGUL SYLLABLE SSANGSIOS-AE-PIEUP
-0xBDDE 0xC328 # HANGUL SYLLABLE SSANGSIOS-AE-SSANGSIOS
-0xBDDF 0xC329 # HANGUL SYLLABLE SSANGSIOS-AE-IEUNG
-0xBDE0 0xC345 # HANGUL SYLLABLE SSANGSIOS-YA-IEUNG
-0xBDE1 0xC368 # HANGUL SYLLABLE SSANGSIOS-EO
-0xBDE2 0xC369 # HANGUL SYLLABLE SSANGSIOS-EO-KIYEOK
-0xBDE3 0xC36C # HANGUL SYLLABLE SSANGSIOS-EO-NIEUN
-0xBDE4 0xC370 # HANGUL SYLLABLE SSANGSIOS-EO-RIEUL
-0xBDE5 0xC372 # HANGUL SYLLABLE SSANGSIOS-EO-RIEULMIEUM
-0xBDE6 0xC378 # HANGUL SYLLABLE SSANGSIOS-EO-MIEUM
-0xBDE7 0xC379 # HANGUL SYLLABLE SSANGSIOS-EO-PIEUP
-0xBDE8 0xC37C # HANGUL SYLLABLE SSANGSIOS-EO-SSANGSIOS
-0xBDE9 0xC37D # HANGUL SYLLABLE SSANGSIOS-EO-IEUNG
-0xBDEA 0xC384 # HANGUL SYLLABLE SSANGSIOS-E
-0xBDEB 0xC388 # HANGUL SYLLABLE SSANGSIOS-E-NIEUN
-0xBDEC 0xC38C # HANGUL SYLLABLE SSANGSIOS-E-RIEUL
-0xBDED 0xC3C0 # HANGUL SYLLABLE SSANGSIOS-YE-NIEUN
-0xBDEE 0xC3D8 # HANGUL SYLLABLE SSANGSIOS-O
-0xBDEF 0xC3D9 # HANGUL SYLLABLE SSANGSIOS-O-KIYEOK
-0xBDF0 0xC3DC # HANGUL SYLLABLE SSANGSIOS-O-NIEUN
-0xBDF1 0xC3DF # HANGUL SYLLABLE SSANGSIOS-O-TIKEUT
-0xBDF2 0xC3E0 # HANGUL SYLLABLE SSANGSIOS-O-RIEUL
-0xBDF3 0xC3E2 # HANGUL SYLLABLE SSANGSIOS-O-RIEULMIEUM
-0xBDF4 0xC3E8 # HANGUL SYLLABLE SSANGSIOS-O-MIEUM
-0xBDF5 0xC3E9 # HANGUL SYLLABLE SSANGSIOS-O-PIEUP
-0xBDF6 0xC3ED # HANGUL SYLLABLE SSANGSIOS-O-IEUNG
-0xBDF7 0xC3F4 # HANGUL SYLLABLE SSANGSIOS-WA
-0xBDF8 0xC3F5 # HANGUL SYLLABLE SSANGSIOS-WA-KIYEOK
-0xBDF9 0xC3F8 # HANGUL SYLLABLE SSANGSIOS-WA-NIEUN
-0xBDFA 0xC408 # HANGUL SYLLABLE SSANGSIOS-WA-SSANGSIOS
-0xBDFB 0xC410 # HANGUL SYLLABLE SSANGSIOS-WAE
-0xBDFC 0xC424 # HANGUL SYLLABLE SSANGSIOS-WAE-SSANGSIOS
-0xBDFD 0xC42C # HANGUL SYLLABLE SSANGSIOS-OE
-0xBDFE 0xC430 # HANGUL SYLLABLE SSANGSIOS-OE-NIEUN
-0xBE41 0xD438 # HANGUL SYLLABLE PHIEUPH-WAE-SSANGSIOS
-0xBE42 0xD439 # HANGUL SYLLABLE PHIEUPH-WAE-IEUNG
-0xBE43 0xD43A # HANGUL SYLLABLE PHIEUPH-WAE-CIEUC
-0xBE44 0xD43B # HANGUL SYLLABLE PHIEUPH-WAE-CHIEUCH
-0xBE45 0xD43C # HANGUL SYLLABLE PHIEUPH-WAE-KHIEUKH
-0xBE46 0xD43D # HANGUL SYLLABLE PHIEUPH-WAE-THIEUTH
-0xBE47 0xD43E # HANGUL SYLLABLE PHIEUPH-WAE-PHIEUPH
-0xBE48 0xD43F # HANGUL SYLLABLE PHIEUPH-WAE-HIEUH
-0xBE49 0xD441 # HANGUL SYLLABLE PHIEUPH-OE-KIYEOK
-0xBE4A 0xD442 # HANGUL SYLLABLE PHIEUPH-OE-SSANGKIYEOK
-0xBE4B 0xD443 # HANGUL SYLLABLE PHIEUPH-OE-KIYEOKSIOS
-0xBE4C 0xD445 # HANGUL SYLLABLE PHIEUPH-OE-NIEUNCIEUC
-0xBE4D 0xD446 # HANGUL SYLLABLE PHIEUPH-OE-NIEUNHIEUH
-0xBE4E 0xD447 # HANGUL SYLLABLE PHIEUPH-OE-TIKEUT
-0xBE4F 0xD448 # HANGUL SYLLABLE PHIEUPH-OE-RIEUL
-0xBE50 0xD449 # HANGUL SYLLABLE PHIEUPH-OE-RIEULKIYEOK
-0xBE51 0xD44A # HANGUL SYLLABLE PHIEUPH-OE-RIEULMIEUM
-0xBE52 0xD44B # HANGUL SYLLABLE PHIEUPH-OE-RIEULPIEUP
-0xBE53 0xD44C # HANGUL SYLLABLE PHIEUPH-OE-RIEULSIOS
-0xBE54 0xD44D # HANGUL SYLLABLE PHIEUPH-OE-RIEULTHIEUTH
-0xBE55 0xD44E # HANGUL SYLLABLE PHIEUPH-OE-RIEULPHIEUPH
-0xBE56 0xD44F # HANGUL SYLLABLE PHIEUPH-OE-RIEULHIEUH
-0xBE57 0xD450 # HANGUL SYLLABLE PHIEUPH-OE-MIEUM
-0xBE58 0xD451 # HANGUL SYLLABLE PHIEUPH-OE-PIEUP
-0xBE59 0xD452 # HANGUL SYLLABLE PHIEUPH-OE-PIEUPSIOS
-0xBE5A 0xD453 # HANGUL SYLLABLE PHIEUPH-OE-SIOS
-0xBE61 0xD454 # HANGUL SYLLABLE PHIEUPH-OE-SSANGSIOS
-0xBE62 0xD455 # HANGUL SYLLABLE PHIEUPH-OE-IEUNG
-0xBE63 0xD456 # HANGUL SYLLABLE PHIEUPH-OE-CIEUC
-0xBE64 0xD457 # HANGUL SYLLABLE PHIEUPH-OE-CHIEUCH
-0xBE65 0xD458 # HANGUL SYLLABLE PHIEUPH-OE-KHIEUKH
-0xBE66 0xD459 # HANGUL SYLLABLE PHIEUPH-OE-THIEUTH
-0xBE67 0xD45A # HANGUL SYLLABLE PHIEUPH-OE-PHIEUPH
-0xBE68 0xD45B # HANGUL SYLLABLE PHIEUPH-OE-HIEUH
-0xBE69 0xD45D # HANGUL SYLLABLE PHIEUPH-YO-KIYEOK
-0xBE6A 0xD45E # HANGUL SYLLABLE PHIEUPH-YO-SSANGKIYEOK
-0xBE6B 0xD45F # HANGUL SYLLABLE PHIEUPH-YO-KIYEOKSIOS
-0xBE6C 0xD461 # HANGUL SYLLABLE PHIEUPH-YO-NIEUNCIEUC
-0xBE6D 0xD462 # HANGUL SYLLABLE PHIEUPH-YO-NIEUNHIEUH
-0xBE6E 0xD463 # HANGUL SYLLABLE PHIEUPH-YO-TIKEUT
-0xBE6F 0xD465 # HANGUL SYLLABLE PHIEUPH-YO-RIEULKIYEOK
-0xBE70 0xD466 # HANGUL SYLLABLE PHIEUPH-YO-RIEULMIEUM
-0xBE71 0xD467 # HANGUL SYLLABLE PHIEUPH-YO-RIEULPIEUP
-0xBE72 0xD468 # HANGUL SYLLABLE PHIEUPH-YO-RIEULSIOS
-0xBE73 0xD469 # HANGUL SYLLABLE PHIEUPH-YO-RIEULTHIEUTH
-0xBE74 0xD46A # HANGUL SYLLABLE PHIEUPH-YO-RIEULPHIEUPH
-0xBE75 0xD46B # HANGUL SYLLABLE PHIEUPH-YO-RIEULHIEUH
-0xBE76 0xD46C # HANGUL SYLLABLE PHIEUPH-YO-MIEUM
-0xBE77 0xD46E # HANGUL SYLLABLE PHIEUPH-YO-PIEUPSIOS
-0xBE78 0xD470 # HANGUL SYLLABLE PHIEUPH-YO-SSANGSIOS
-0xBE79 0xD471 # HANGUL SYLLABLE PHIEUPH-YO-IEUNG
-0xBE7A 0xD472 # HANGUL SYLLABLE PHIEUPH-YO-CIEUC
-0xBE81 0xD473 # HANGUL SYLLABLE PHIEUPH-YO-CHIEUCH
-0xBE82 0xD474 # HANGUL SYLLABLE PHIEUPH-YO-KHIEUKH
-0xBE83 0xD475 # HANGUL SYLLABLE PHIEUPH-YO-THIEUTH
-0xBE84 0xD476 # HANGUL SYLLABLE PHIEUPH-YO-PHIEUPH
-0xBE85 0xD477 # HANGUL SYLLABLE PHIEUPH-YO-HIEUH
-0xBE86 0xD47A # HANGUL SYLLABLE PHIEUPH-U-SSANGKIYEOK
-0xBE87 0xD47B # HANGUL SYLLABLE PHIEUPH-U-KIYEOKSIOS
-0xBE88 0xD47D # HANGUL SYLLABLE PHIEUPH-U-NIEUNCIEUC
-0xBE89 0xD47E # HANGUL SYLLABLE PHIEUPH-U-NIEUNHIEUH
-0xBE8A 0xD481 # HANGUL SYLLABLE PHIEUPH-U-RIEULKIYEOK
-0xBE8B 0xD483 # HANGUL SYLLABLE PHIEUPH-U-RIEULPIEUP
-0xBE8C 0xD484 # HANGUL SYLLABLE PHIEUPH-U-RIEULSIOS
-0xBE8D 0xD485 # HANGUL SYLLABLE PHIEUPH-U-RIEULTHIEUTH
-0xBE8E 0xD486 # HANGUL SYLLABLE PHIEUPH-U-RIEULPHIEUPH
-0xBE8F 0xD487 # HANGUL SYLLABLE PHIEUPH-U-RIEULHIEUH
-0xBE90 0xD48A # HANGUL SYLLABLE PHIEUPH-U-PIEUPSIOS
-0xBE91 0xD48C # HANGUL SYLLABLE PHIEUPH-U-SSANGSIOS
-0xBE92 0xD48E # HANGUL SYLLABLE PHIEUPH-U-CIEUC
-0xBE93 0xD48F # HANGUL SYLLABLE PHIEUPH-U-CHIEUCH
-0xBE94 0xD490 # HANGUL SYLLABLE PHIEUPH-U-KHIEUKH
-0xBE95 0xD491 # HANGUL SYLLABLE PHIEUPH-U-THIEUTH
-0xBE96 0xD492 # HANGUL SYLLABLE PHIEUPH-U-PHIEUPH
-0xBE97 0xD493 # HANGUL SYLLABLE PHIEUPH-U-HIEUH
-0xBE98 0xD495 # HANGUL SYLLABLE PHIEUPH-WEO-KIYEOK
-0xBE99 0xD496 # HANGUL SYLLABLE PHIEUPH-WEO-SSANGKIYEOK
-0xBE9A 0xD497 # HANGUL SYLLABLE PHIEUPH-WEO-KIYEOKSIOS
-0xBE9B 0xD498 # HANGUL SYLLABLE PHIEUPH-WEO-NIEUN
-0xBE9C 0xD499 # HANGUL SYLLABLE PHIEUPH-WEO-NIEUNCIEUC
-0xBE9D 0xD49A # HANGUL SYLLABLE PHIEUPH-WEO-NIEUNHIEUH
-0xBE9E 0xD49B # HANGUL SYLLABLE PHIEUPH-WEO-TIKEUT
-0xBE9F 0xD49C # HANGUL SYLLABLE PHIEUPH-WEO-RIEUL
-0xBEA0 0xD49D # HANGUL SYLLABLE PHIEUPH-WEO-RIEULKIYEOK
-0xBEA1 0xC434 # HANGUL SYLLABLE SSANGSIOS-OE-RIEUL
-0xBEA2 0xC43C # HANGUL SYLLABLE SSANGSIOS-OE-MIEUM
-0xBEA3 0xC43D # HANGUL SYLLABLE SSANGSIOS-OE-PIEUP
-0xBEA4 0xC448 # HANGUL SYLLABLE SSANGSIOS-YO
-0xBEA5 0xC464 # HANGUL SYLLABLE SSANGSIOS-U
-0xBEA6 0xC465 # HANGUL SYLLABLE SSANGSIOS-U-KIYEOK
-0xBEA7 0xC468 # HANGUL SYLLABLE SSANGSIOS-U-NIEUN
-0xBEA8 0xC46C # HANGUL SYLLABLE SSANGSIOS-U-RIEUL
-0xBEA9 0xC474 # HANGUL SYLLABLE SSANGSIOS-U-MIEUM
-0xBEAA 0xC475 # HANGUL SYLLABLE SSANGSIOS-U-PIEUP
-0xBEAB 0xC479 # HANGUL SYLLABLE SSANGSIOS-U-IEUNG
-0xBEAC 0xC480 # HANGUL SYLLABLE SSANGSIOS-WEO
-0xBEAD 0xC494 # HANGUL SYLLABLE SSANGSIOS-WEO-SSANGSIOS
-0xBEAE 0xC49C # HANGUL SYLLABLE SSANGSIOS-WE
-0xBEAF 0xC4B8 # HANGUL SYLLABLE SSANGSIOS-WI
-0xBEB0 0xC4BC # HANGUL SYLLABLE SSANGSIOS-WI-NIEUN
-0xBEB1 0xC4E9 # HANGUL SYLLABLE SSANGSIOS-YU-IEUNG
-0xBEB2 0xC4F0 # HANGUL SYLLABLE SSANGSIOS-EU
-0xBEB3 0xC4F1 # HANGUL SYLLABLE SSANGSIOS-EU-KIYEOK
-0xBEB4 0xC4F4 # HANGUL SYLLABLE SSANGSIOS-EU-NIEUN
-0xBEB5 0xC4F8 # HANGUL SYLLABLE SSANGSIOS-EU-RIEUL
-0xBEB6 0xC4FA # HANGUL SYLLABLE SSANGSIOS-EU-RIEULMIEUM
-0xBEB7 0xC4FF # HANGUL SYLLABLE SSANGSIOS-EU-RIEULHIEUH
-0xBEB8 0xC500 # HANGUL SYLLABLE SSANGSIOS-EU-MIEUM
-0xBEB9 0xC501 # HANGUL SYLLABLE SSANGSIOS-EU-PIEUP
-0xBEBA 0xC50C # HANGUL SYLLABLE SSANGSIOS-YI
-0xBEBB 0xC510 # HANGUL SYLLABLE SSANGSIOS-YI-NIEUN
-0xBEBC 0xC514 # HANGUL SYLLABLE SSANGSIOS-YI-RIEUL
-0xBEBD 0xC51C # HANGUL SYLLABLE SSANGSIOS-YI-MIEUM
-0xBEBE 0xC528 # HANGUL SYLLABLE SSANGSIOS-I
-0xBEBF 0xC529 # HANGUL SYLLABLE SSANGSIOS-I-KIYEOK
-0xBEC0 0xC52C # HANGUL SYLLABLE SSANGSIOS-I-NIEUN
-0xBEC1 0xC530 # HANGUL SYLLABLE SSANGSIOS-I-RIEUL
-0xBEC2 0xC538 # HANGUL SYLLABLE SSANGSIOS-I-MIEUM
-0xBEC3 0xC539 # HANGUL SYLLABLE SSANGSIOS-I-PIEUP
-0xBEC4 0xC53B # HANGUL SYLLABLE SSANGSIOS-I-SIOS
-0xBEC5 0xC53D # HANGUL SYLLABLE SSANGSIOS-I-IEUNG
-0xBEC6 0xC544 # HANGUL SYLLABLE IEUNG-A
-0xBEC7 0xC545 # HANGUL SYLLABLE IEUNG-A-KIYEOK
-0xBEC8 0xC548 # HANGUL SYLLABLE IEUNG-A-NIEUN
-0xBEC9 0xC549 # HANGUL SYLLABLE IEUNG-A-NIEUNCIEUC
-0xBECA 0xC54A # HANGUL SYLLABLE IEUNG-A-NIEUNHIEUH
-0xBECB 0xC54C # HANGUL SYLLABLE IEUNG-A-RIEUL
-0xBECC 0xC54D # HANGUL SYLLABLE IEUNG-A-RIEULKIYEOK
-0xBECD 0xC54E # HANGUL SYLLABLE IEUNG-A-RIEULMIEUM
-0xBECE 0xC553 # HANGUL SYLLABLE IEUNG-A-RIEULHIEUH
-0xBECF 0xC554 # HANGUL SYLLABLE IEUNG-A-MIEUM
-0xBED0 0xC555 # HANGUL SYLLABLE IEUNG-A-PIEUP
-0xBED1 0xC557 # HANGUL SYLLABLE IEUNG-A-SIOS
-0xBED2 0xC558 # HANGUL SYLLABLE IEUNG-A-SSANGSIOS
-0xBED3 0xC559 # HANGUL SYLLABLE IEUNG-A-IEUNG
-0xBED4 0xC55D # HANGUL SYLLABLE IEUNG-A-THIEUTH
-0xBED5 0xC55E # HANGUL SYLLABLE IEUNG-A-PHIEUPH
-0xBED6 0xC560 # HANGUL SYLLABLE IEUNG-AE
-0xBED7 0xC561 # HANGUL SYLLABLE IEUNG-AE-KIYEOK
-0xBED8 0xC564 # HANGUL SYLLABLE IEUNG-AE-NIEUN
-0xBED9 0xC568 # HANGUL SYLLABLE IEUNG-AE-RIEUL
-0xBEDA 0xC570 # HANGUL SYLLABLE IEUNG-AE-MIEUM
-0xBEDB 0xC571 # HANGUL SYLLABLE IEUNG-AE-PIEUP
-0xBEDC 0xC573 # HANGUL SYLLABLE IEUNG-AE-SIOS
-0xBEDD 0xC574 # HANGUL SYLLABLE IEUNG-AE-SSANGSIOS
-0xBEDE 0xC575 # HANGUL SYLLABLE IEUNG-AE-IEUNG
-0xBEDF 0xC57C # HANGUL SYLLABLE IEUNG-YA
-0xBEE0 0xC57D # HANGUL SYLLABLE IEUNG-YA-KIYEOK
-0xBEE1 0xC580 # HANGUL SYLLABLE IEUNG-YA-NIEUN
-0xBEE2 0xC584 # HANGUL SYLLABLE IEUNG-YA-RIEUL
-0xBEE3 0xC587 # HANGUL SYLLABLE IEUNG-YA-RIEULPIEUP
-0xBEE4 0xC58C # HANGUL SYLLABLE IEUNG-YA-MIEUM
-0xBEE5 0xC58D # HANGUL SYLLABLE IEUNG-YA-PIEUP
-0xBEE6 0xC58F # HANGUL SYLLABLE IEUNG-YA-SIOS
-0xBEE7 0xC591 # HANGUL SYLLABLE IEUNG-YA-IEUNG
-0xBEE8 0xC595 # HANGUL SYLLABLE IEUNG-YA-THIEUTH
-0xBEE9 0xC597 # HANGUL SYLLABLE IEUNG-YA-HIEUH
-0xBEEA 0xC598 # HANGUL SYLLABLE IEUNG-YAE
-0xBEEB 0xC59C # HANGUL SYLLABLE IEUNG-YAE-NIEUN
-0xBEEC 0xC5A0 # HANGUL SYLLABLE IEUNG-YAE-RIEUL
-0xBEED 0xC5A9 # HANGUL SYLLABLE IEUNG-YAE-PIEUP
-0xBEEE 0xC5B4 # HANGUL SYLLABLE IEUNG-EO
-0xBEEF 0xC5B5 # HANGUL SYLLABLE IEUNG-EO-KIYEOK
-0xBEF0 0xC5B8 # HANGUL SYLLABLE IEUNG-EO-NIEUN
-0xBEF1 0xC5B9 # HANGUL SYLLABLE IEUNG-EO-NIEUNCIEUC
-0xBEF2 0xC5BB # HANGUL SYLLABLE IEUNG-EO-TIKEUT
-0xBEF3 0xC5BC # HANGUL SYLLABLE IEUNG-EO-RIEUL
-0xBEF4 0xC5BD # HANGUL SYLLABLE IEUNG-EO-RIEULKIYEOK
-0xBEF5 0xC5BE # HANGUL SYLLABLE IEUNG-EO-RIEULMIEUM
-0xBEF6 0xC5C4 # HANGUL SYLLABLE IEUNG-EO-MIEUM
-0xBEF7 0xC5C5 # HANGUL SYLLABLE IEUNG-EO-PIEUP
-0xBEF8 0xC5C6 # HANGUL SYLLABLE IEUNG-EO-PIEUPSIOS
-0xBEF9 0xC5C7 # HANGUL SYLLABLE IEUNG-EO-SIOS
-0xBEFA 0xC5C8 # HANGUL SYLLABLE IEUNG-EO-SSANGSIOS
-0xBEFB 0xC5C9 # HANGUL SYLLABLE IEUNG-EO-IEUNG
-0xBEFC 0xC5CA # HANGUL SYLLABLE IEUNG-EO-CIEUC
-0xBEFD 0xC5CC # HANGUL SYLLABLE IEUNG-EO-KHIEUKH
-0xBEFE 0xC5CE # HANGUL SYLLABLE IEUNG-EO-PHIEUPH
-0xBF41 0xD49E # HANGUL SYLLABLE PHIEUPH-WEO-RIEULMIEUM
-0xBF42 0xD49F # HANGUL SYLLABLE PHIEUPH-WEO-RIEULPIEUP
-0xBF43 0xD4A0 # HANGUL SYLLABLE PHIEUPH-WEO-RIEULSIOS
-0xBF44 0xD4A1 # HANGUL SYLLABLE PHIEUPH-WEO-RIEULTHIEUTH
-0xBF45 0xD4A2 # HANGUL SYLLABLE PHIEUPH-WEO-RIEULPHIEUPH
-0xBF46 0xD4A3 # HANGUL SYLLABLE PHIEUPH-WEO-RIEULHIEUH
-0xBF47 0xD4A4 # HANGUL SYLLABLE PHIEUPH-WEO-MIEUM
-0xBF48 0xD4A5 # HANGUL SYLLABLE PHIEUPH-WEO-PIEUP
-0xBF49 0xD4A6 # HANGUL SYLLABLE PHIEUPH-WEO-PIEUPSIOS
-0xBF4A 0xD4A7 # HANGUL SYLLABLE PHIEUPH-WEO-SIOS
-0xBF4B 0xD4A8 # HANGUL SYLLABLE PHIEUPH-WEO-SSANGSIOS
-0xBF4C 0xD4AA # HANGUL SYLLABLE PHIEUPH-WEO-CIEUC
-0xBF4D 0xD4AB # HANGUL SYLLABLE PHIEUPH-WEO-CHIEUCH
-0xBF4E 0xD4AC # HANGUL SYLLABLE PHIEUPH-WEO-KHIEUKH
-0xBF4F 0xD4AD # HANGUL SYLLABLE PHIEUPH-WEO-THIEUTH
-0xBF50 0xD4AE # HANGUL SYLLABLE PHIEUPH-WEO-PHIEUPH
-0xBF51 0xD4AF # HANGUL SYLLABLE PHIEUPH-WEO-HIEUH
-0xBF52 0xD4B0 # HANGUL SYLLABLE PHIEUPH-WE
-0xBF53 0xD4B1 # HANGUL SYLLABLE PHIEUPH-WE-KIYEOK
-0xBF54 0xD4B2 # HANGUL SYLLABLE PHIEUPH-WE-SSANGKIYEOK
-0xBF55 0xD4B3 # HANGUL SYLLABLE PHIEUPH-WE-KIYEOKSIOS
-0xBF56 0xD4B4 # HANGUL SYLLABLE PHIEUPH-WE-NIEUN
-0xBF57 0xD4B5 # HANGUL SYLLABLE PHIEUPH-WE-NIEUNCIEUC
-0xBF58 0xD4B6 # HANGUL SYLLABLE PHIEUPH-WE-NIEUNHIEUH
-0xBF59 0xD4B7 # HANGUL SYLLABLE PHIEUPH-WE-TIKEUT
-0xBF5A 0xD4B8 # HANGUL SYLLABLE PHIEUPH-WE-RIEUL
-0xBF61 0xD4B9 # HANGUL SYLLABLE PHIEUPH-WE-RIEULKIYEOK
-0xBF62 0xD4BA # HANGUL SYLLABLE PHIEUPH-WE-RIEULMIEUM
-0xBF63 0xD4BB # HANGUL SYLLABLE PHIEUPH-WE-RIEULPIEUP
-0xBF64 0xD4BC # HANGUL SYLLABLE PHIEUPH-WE-RIEULSIOS
-0xBF65 0xD4BD # HANGUL SYLLABLE PHIEUPH-WE-RIEULTHIEUTH
-0xBF66 0xD4BE # HANGUL SYLLABLE PHIEUPH-WE-RIEULPHIEUPH
-0xBF67 0xD4BF # HANGUL SYLLABLE PHIEUPH-WE-RIEULHIEUH
-0xBF68 0xD4C0 # HANGUL SYLLABLE PHIEUPH-WE-MIEUM
-0xBF69 0xD4C1 # HANGUL SYLLABLE PHIEUPH-WE-PIEUP
-0xBF6A 0xD4C2 # HANGUL SYLLABLE PHIEUPH-WE-PIEUPSIOS
-0xBF6B 0xD4C3 # HANGUL SYLLABLE PHIEUPH-WE-SIOS
-0xBF6C 0xD4C4 # HANGUL SYLLABLE PHIEUPH-WE-SSANGSIOS
-0xBF6D 0xD4C5 # HANGUL SYLLABLE PHIEUPH-WE-IEUNG
-0xBF6E 0xD4C6 # HANGUL SYLLABLE PHIEUPH-WE-CIEUC
-0xBF6F 0xD4C7 # HANGUL SYLLABLE PHIEUPH-WE-CHIEUCH
-0xBF70 0xD4C8 # HANGUL SYLLABLE PHIEUPH-WE-KHIEUKH
-0xBF71 0xD4C9 # HANGUL SYLLABLE PHIEUPH-WE-THIEUTH
-0xBF72 0xD4CA # HANGUL SYLLABLE PHIEUPH-WE-PHIEUPH
-0xBF73 0xD4CB # HANGUL SYLLABLE PHIEUPH-WE-HIEUH
-0xBF74 0xD4CD # HANGUL SYLLABLE PHIEUPH-WI-KIYEOK
-0xBF75 0xD4CE # HANGUL SYLLABLE PHIEUPH-WI-SSANGKIYEOK
-0xBF76 0xD4CF # HANGUL SYLLABLE PHIEUPH-WI-KIYEOKSIOS
-0xBF77 0xD4D1 # HANGUL SYLLABLE PHIEUPH-WI-NIEUNCIEUC
-0xBF78 0xD4D2 # HANGUL SYLLABLE PHIEUPH-WI-NIEUNHIEUH
-0xBF79 0xD4D3 # HANGUL SYLLABLE PHIEUPH-WI-TIKEUT
-0xBF7A 0xD4D5 # HANGUL SYLLABLE PHIEUPH-WI-RIEULKIYEOK
-0xBF81 0xD4D6 # HANGUL SYLLABLE PHIEUPH-WI-RIEULMIEUM
-0xBF82 0xD4D7 # HANGUL SYLLABLE PHIEUPH-WI-RIEULPIEUP
-0xBF83 0xD4D8 # HANGUL SYLLABLE PHIEUPH-WI-RIEULSIOS
-0xBF84 0xD4D9 # HANGUL SYLLABLE PHIEUPH-WI-RIEULTHIEUTH
-0xBF85 0xD4DA # HANGUL SYLLABLE PHIEUPH-WI-RIEULPHIEUPH
-0xBF86 0xD4DB # HANGUL SYLLABLE PHIEUPH-WI-RIEULHIEUH
-0xBF87 0xD4DD # HANGUL SYLLABLE PHIEUPH-WI-PIEUP
-0xBF88 0xD4DE # HANGUL SYLLABLE PHIEUPH-WI-PIEUPSIOS
-0xBF89 0xD4E0 # HANGUL SYLLABLE PHIEUPH-WI-SSANGSIOS
-0xBF8A 0xD4E1 # HANGUL SYLLABLE PHIEUPH-WI-IEUNG
-0xBF8B 0xD4E2 # HANGUL SYLLABLE PHIEUPH-WI-CIEUC
-0xBF8C 0xD4E3 # HANGUL SYLLABLE PHIEUPH-WI-CHIEUCH
-0xBF8D 0xD4E4 # HANGUL SYLLABLE PHIEUPH-WI-KHIEUKH
-0xBF8E 0xD4E5 # HANGUL SYLLABLE PHIEUPH-WI-THIEUTH
-0xBF8F 0xD4E6 # HANGUL SYLLABLE PHIEUPH-WI-PHIEUPH
-0xBF90 0xD4E7 # HANGUL SYLLABLE PHIEUPH-WI-HIEUH
-0xBF91 0xD4E9 # HANGUL SYLLABLE PHIEUPH-YU-KIYEOK
-0xBF92 0xD4EA # HANGUL SYLLABLE PHIEUPH-YU-SSANGKIYEOK
-0xBF93 0xD4EB # HANGUL SYLLABLE PHIEUPH-YU-KIYEOKSIOS
-0xBF94 0xD4ED # HANGUL SYLLABLE PHIEUPH-YU-NIEUNCIEUC
-0xBF95 0xD4EE # HANGUL SYLLABLE PHIEUPH-YU-NIEUNHIEUH
-0xBF96 0xD4EF # HANGUL SYLLABLE PHIEUPH-YU-TIKEUT
-0xBF97 0xD4F1 # HANGUL SYLLABLE PHIEUPH-YU-RIEULKIYEOK
-0xBF98 0xD4F2 # HANGUL SYLLABLE PHIEUPH-YU-RIEULMIEUM
-0xBF99 0xD4F3 # HANGUL SYLLABLE PHIEUPH-YU-RIEULPIEUP
-0xBF9A 0xD4F4 # HANGUL SYLLABLE PHIEUPH-YU-RIEULSIOS
-0xBF9B 0xD4F5 # HANGUL SYLLABLE PHIEUPH-YU-RIEULTHIEUTH
-0xBF9C 0xD4F6 # HANGUL SYLLABLE PHIEUPH-YU-RIEULPHIEUPH
-0xBF9D 0xD4F7 # HANGUL SYLLABLE PHIEUPH-YU-RIEULHIEUH
-0xBF9E 0xD4F9 # HANGUL SYLLABLE PHIEUPH-YU-PIEUP
-0xBF9F 0xD4FA # HANGUL SYLLABLE PHIEUPH-YU-PIEUPSIOS
-0xBFA0 0xD4FC # HANGUL SYLLABLE PHIEUPH-YU-SSANGSIOS
-0xBFA1 0xC5D0 # HANGUL SYLLABLE IEUNG-E
-0xBFA2 0xC5D1 # HANGUL SYLLABLE IEUNG-E-KIYEOK
-0xBFA3 0xC5D4 # HANGUL SYLLABLE IEUNG-E-NIEUN
-0xBFA4 0xC5D8 # HANGUL SYLLABLE IEUNG-E-RIEUL
-0xBFA5 0xC5E0 # HANGUL SYLLABLE IEUNG-E-MIEUM
-0xBFA6 0xC5E1 # HANGUL SYLLABLE IEUNG-E-PIEUP
-0xBFA7 0xC5E3 # HANGUL SYLLABLE IEUNG-E-SIOS
-0xBFA8 0xC5E5 # HANGUL SYLLABLE IEUNG-E-IEUNG
-0xBFA9 0xC5EC # HANGUL SYLLABLE IEUNG-YEO
-0xBFAA 0xC5ED # HANGUL SYLLABLE IEUNG-YEO-KIYEOK
-0xBFAB 0xC5EE # HANGUL SYLLABLE IEUNG-YEO-SSANGKIYEOK
-0xBFAC 0xC5F0 # HANGUL SYLLABLE IEUNG-YEO-NIEUN
-0xBFAD 0xC5F4 # HANGUL SYLLABLE IEUNG-YEO-RIEUL
-0xBFAE 0xC5F6 # HANGUL SYLLABLE IEUNG-YEO-RIEULMIEUM
-0xBFAF 0xC5F7 # HANGUL SYLLABLE IEUNG-YEO-RIEULPIEUP
-0xBFB0 0xC5FC # HANGUL SYLLABLE IEUNG-YEO-MIEUM
-0xBFB1 0xC5FD # HANGUL SYLLABLE IEUNG-YEO-PIEUP
-0xBFB2 0xC5FE # HANGUL SYLLABLE IEUNG-YEO-PIEUPSIOS
-0xBFB3 0xC5FF # HANGUL SYLLABLE IEUNG-YEO-SIOS
-0xBFB4 0xC600 # HANGUL SYLLABLE IEUNG-YEO-SSANGSIOS
-0xBFB5 0xC601 # HANGUL SYLLABLE IEUNG-YEO-IEUNG
-0xBFB6 0xC605 # HANGUL SYLLABLE IEUNG-YEO-THIEUTH
-0xBFB7 0xC606 # HANGUL SYLLABLE IEUNG-YEO-PHIEUPH
-0xBFB8 0xC607 # HANGUL SYLLABLE IEUNG-YEO-HIEUH
-0xBFB9 0xC608 # HANGUL SYLLABLE IEUNG-YE
-0xBFBA 0xC60C # HANGUL SYLLABLE IEUNG-YE-NIEUN
-0xBFBB 0xC610 # HANGUL SYLLABLE IEUNG-YE-RIEUL
-0xBFBC 0xC618 # HANGUL SYLLABLE IEUNG-YE-MIEUM
-0xBFBD 0xC619 # HANGUL SYLLABLE IEUNG-YE-PIEUP
-0xBFBE 0xC61B # HANGUL SYLLABLE IEUNG-YE-SIOS
-0xBFBF 0xC61C # HANGUL SYLLABLE IEUNG-YE-SSANGSIOS
-0xBFC0 0xC624 # HANGUL SYLLABLE IEUNG-O
-0xBFC1 0xC625 # HANGUL SYLLABLE IEUNG-O-KIYEOK
-0xBFC2 0xC628 # HANGUL SYLLABLE IEUNG-O-NIEUN
-0xBFC3 0xC62C # HANGUL SYLLABLE IEUNG-O-RIEUL
-0xBFC4 0xC62D # HANGUL SYLLABLE IEUNG-O-RIEULKIYEOK
-0xBFC5 0xC62E # HANGUL SYLLABLE IEUNG-O-RIEULMIEUM
-0xBFC6 0xC630 # HANGUL SYLLABLE IEUNG-O-RIEULSIOS
-0xBFC7 0xC633 # HANGUL SYLLABLE IEUNG-O-RIEULHIEUH
-0xBFC8 0xC634 # HANGUL SYLLABLE IEUNG-O-MIEUM
-0xBFC9 0xC635 # HANGUL SYLLABLE IEUNG-O-PIEUP
-0xBFCA 0xC637 # HANGUL SYLLABLE IEUNG-O-SIOS
-0xBFCB 0xC639 # HANGUL SYLLABLE IEUNG-O-IEUNG
-0xBFCC 0xC63B # HANGUL SYLLABLE IEUNG-O-CHIEUCH
-0xBFCD 0xC640 # HANGUL SYLLABLE IEUNG-WA
-0xBFCE 0xC641 # HANGUL SYLLABLE IEUNG-WA-KIYEOK
-0xBFCF 0xC644 # HANGUL SYLLABLE IEUNG-WA-NIEUN
-0xBFD0 0xC648 # HANGUL SYLLABLE IEUNG-WA-RIEUL
-0xBFD1 0xC650 # HANGUL SYLLABLE IEUNG-WA-MIEUM
-0xBFD2 0xC651 # HANGUL SYLLABLE IEUNG-WA-PIEUP
-0xBFD3 0xC653 # HANGUL SYLLABLE IEUNG-WA-SIOS
-0xBFD4 0xC654 # HANGUL SYLLABLE IEUNG-WA-SSANGSIOS
-0xBFD5 0xC655 # HANGUL SYLLABLE IEUNG-WA-IEUNG
-0xBFD6 0xC65C # HANGUL SYLLABLE IEUNG-WAE
-0xBFD7 0xC65D # HANGUL SYLLABLE IEUNG-WAE-KIYEOK
-0xBFD8 0xC660 # HANGUL SYLLABLE IEUNG-WAE-NIEUN
-0xBFD9 0xC66C # HANGUL SYLLABLE IEUNG-WAE-MIEUM
-0xBFDA 0xC66F # HANGUL SYLLABLE IEUNG-WAE-SIOS
-0xBFDB 0xC671 # HANGUL SYLLABLE IEUNG-WAE-IEUNG
-0xBFDC 0xC678 # HANGUL SYLLABLE IEUNG-OE
-0xBFDD 0xC679 # HANGUL SYLLABLE IEUNG-OE-KIYEOK
-0xBFDE 0xC67C # HANGUL SYLLABLE IEUNG-OE-NIEUN
-0xBFDF 0xC680 # HANGUL SYLLABLE IEUNG-OE-RIEUL
-0xBFE0 0xC688 # HANGUL SYLLABLE IEUNG-OE-MIEUM
-0xBFE1 0xC689 # HANGUL SYLLABLE IEUNG-OE-PIEUP
-0xBFE2 0xC68B # HANGUL SYLLABLE IEUNG-OE-SIOS
-0xBFE3 0xC68D # HANGUL SYLLABLE IEUNG-OE-IEUNG
-0xBFE4 0xC694 # HANGUL SYLLABLE IEUNG-YO
-0xBFE5 0xC695 # HANGUL SYLLABLE IEUNG-YO-KIYEOK
-0xBFE6 0xC698 # HANGUL SYLLABLE IEUNG-YO-NIEUN
-0xBFE7 0xC69C # HANGUL SYLLABLE IEUNG-YO-RIEUL
-0xBFE8 0xC6A4 # HANGUL SYLLABLE IEUNG-YO-MIEUM
-0xBFE9 0xC6A5 # HANGUL SYLLABLE IEUNG-YO-PIEUP
-0xBFEA 0xC6A7 # HANGUL SYLLABLE IEUNG-YO-SIOS
-0xBFEB 0xC6A9 # HANGUL SYLLABLE IEUNG-YO-IEUNG
-0xBFEC 0xC6B0 # HANGUL SYLLABLE IEUNG-U
-0xBFED 0xC6B1 # HANGUL SYLLABLE IEUNG-U-KIYEOK
-0xBFEE 0xC6B4 # HANGUL SYLLABLE IEUNG-U-NIEUN
-0xBFEF 0xC6B8 # HANGUL SYLLABLE IEUNG-U-RIEUL
-0xBFF0 0xC6B9 # HANGUL SYLLABLE IEUNG-U-RIEULKIYEOK
-0xBFF1 0xC6BA # HANGUL SYLLABLE IEUNG-U-RIEULMIEUM
-0xBFF2 0xC6C0 # HANGUL SYLLABLE IEUNG-U-MIEUM
-0xBFF3 0xC6C1 # HANGUL SYLLABLE IEUNG-U-PIEUP
-0xBFF4 0xC6C3 # HANGUL SYLLABLE IEUNG-U-SIOS
-0xBFF5 0xC6C5 # HANGUL SYLLABLE IEUNG-U-IEUNG
-0xBFF6 0xC6CC # HANGUL SYLLABLE IEUNG-WEO
-0xBFF7 0xC6CD # HANGUL SYLLABLE IEUNG-WEO-KIYEOK
-0xBFF8 0xC6D0 # HANGUL SYLLABLE IEUNG-WEO-NIEUN
-0xBFF9 0xC6D4 # HANGUL SYLLABLE IEUNG-WEO-RIEUL
-0xBFFA 0xC6DC # HANGUL SYLLABLE IEUNG-WEO-MIEUM
-0xBFFB 0xC6DD # HANGUL SYLLABLE IEUNG-WEO-PIEUP
-0xBFFC 0xC6E0 # HANGUL SYLLABLE IEUNG-WEO-SSANGSIOS
-0xBFFD 0xC6E1 # HANGUL SYLLABLE IEUNG-WEO-IEUNG
-0xBFFE 0xC6E8 # HANGUL SYLLABLE IEUNG-WE
-0xC041 0xD4FE # HANGUL SYLLABLE PHIEUPH-YU-CIEUC
-0xC042 0xD4FF # HANGUL SYLLABLE PHIEUPH-YU-CHIEUCH
-0xC043 0xD500 # HANGUL SYLLABLE PHIEUPH-YU-KHIEUKH
-0xC044 0xD501 # HANGUL SYLLABLE PHIEUPH-YU-THIEUTH
-0xC045 0xD502 # HANGUL SYLLABLE PHIEUPH-YU-PHIEUPH
-0xC046 0xD503 # HANGUL SYLLABLE PHIEUPH-YU-HIEUH
-0xC047 0xD505 # HANGUL SYLLABLE PHIEUPH-EU-KIYEOK
-0xC048 0xD506 # HANGUL SYLLABLE PHIEUPH-EU-SSANGKIYEOK
-0xC049 0xD507 # HANGUL SYLLABLE PHIEUPH-EU-KIYEOKSIOS
-0xC04A 0xD509 # HANGUL SYLLABLE PHIEUPH-EU-NIEUNCIEUC
-0xC04B 0xD50A # HANGUL SYLLABLE PHIEUPH-EU-NIEUNHIEUH
-0xC04C 0xD50B # HANGUL SYLLABLE PHIEUPH-EU-TIKEUT
-0xC04D 0xD50D # HANGUL SYLLABLE PHIEUPH-EU-RIEULKIYEOK
-0xC04E 0xD50E # HANGUL SYLLABLE PHIEUPH-EU-RIEULMIEUM
-0xC04F 0xD50F # HANGUL SYLLABLE PHIEUPH-EU-RIEULPIEUP
-0xC050 0xD510 # HANGUL SYLLABLE PHIEUPH-EU-RIEULSIOS
-0xC051 0xD511 # HANGUL SYLLABLE PHIEUPH-EU-RIEULTHIEUTH
-0xC052 0xD512 # HANGUL SYLLABLE PHIEUPH-EU-RIEULPHIEUPH
-0xC053 0xD513 # HANGUL SYLLABLE PHIEUPH-EU-RIEULHIEUH
-0xC054 0xD516 # HANGUL SYLLABLE PHIEUPH-EU-PIEUPSIOS
-0xC055 0xD518 # HANGUL SYLLABLE PHIEUPH-EU-SSANGSIOS
-0xC056 0xD519 # HANGUL SYLLABLE PHIEUPH-EU-IEUNG
-0xC057 0xD51A # HANGUL SYLLABLE PHIEUPH-EU-CIEUC
-0xC058 0xD51B # HANGUL SYLLABLE PHIEUPH-EU-CHIEUCH
-0xC059 0xD51C # HANGUL SYLLABLE PHIEUPH-EU-KHIEUKH
-0xC05A 0xD51D # HANGUL SYLLABLE PHIEUPH-EU-THIEUTH
-0xC061 0xD51E # HANGUL SYLLABLE PHIEUPH-EU-PHIEUPH
-0xC062 0xD51F # HANGUL SYLLABLE PHIEUPH-EU-HIEUH
-0xC063 0xD520 # HANGUL SYLLABLE PHIEUPH-YI
-0xC064 0xD521 # HANGUL SYLLABLE PHIEUPH-YI-KIYEOK
-0xC065 0xD522 # HANGUL SYLLABLE PHIEUPH-YI-SSANGKIYEOK
-0xC066 0xD523 # HANGUL SYLLABLE PHIEUPH-YI-KIYEOKSIOS
-0xC067 0xD524 # HANGUL SYLLABLE PHIEUPH-YI-NIEUN
-0xC068 0xD525 # HANGUL SYLLABLE PHIEUPH-YI-NIEUNCIEUC
-0xC069 0xD526 # HANGUL SYLLABLE PHIEUPH-YI-NIEUNHIEUH
-0xC06A 0xD527 # HANGUL SYLLABLE PHIEUPH-YI-TIKEUT
-0xC06B 0xD528 # HANGUL SYLLABLE PHIEUPH-YI-RIEUL
-0xC06C 0xD529 # HANGUL SYLLABLE PHIEUPH-YI-RIEULKIYEOK
-0xC06D 0xD52A # HANGUL SYLLABLE PHIEUPH-YI-RIEULMIEUM
-0xC06E 0xD52B # HANGUL SYLLABLE PHIEUPH-YI-RIEULPIEUP
-0xC06F 0xD52C # HANGUL SYLLABLE PHIEUPH-YI-RIEULSIOS
-0xC070 0xD52D # HANGUL SYLLABLE PHIEUPH-YI-RIEULTHIEUTH
-0xC071 0xD52E # HANGUL SYLLABLE PHIEUPH-YI-RIEULPHIEUPH
-0xC072 0xD52F # HANGUL SYLLABLE PHIEUPH-YI-RIEULHIEUH
-0xC073 0xD530 # HANGUL SYLLABLE PHIEUPH-YI-MIEUM
-0xC074 0xD531 # HANGUL SYLLABLE PHIEUPH-YI-PIEUP
-0xC075 0xD532 # HANGUL SYLLABLE PHIEUPH-YI-PIEUPSIOS
-0xC076 0xD533 # HANGUL SYLLABLE PHIEUPH-YI-SIOS
-0xC077 0xD534 # HANGUL SYLLABLE PHIEUPH-YI-SSANGSIOS
-0xC078 0xD535 # HANGUL SYLLABLE PHIEUPH-YI-IEUNG
-0xC079 0xD536 # HANGUL SYLLABLE PHIEUPH-YI-CIEUC
-0xC07A 0xD537 # HANGUL SYLLABLE PHIEUPH-YI-CHIEUCH
-0xC081 0xD538 # HANGUL SYLLABLE PHIEUPH-YI-KHIEUKH
-0xC082 0xD539 # HANGUL SYLLABLE PHIEUPH-YI-THIEUTH
-0xC083 0xD53A # HANGUL SYLLABLE PHIEUPH-YI-PHIEUPH
-0xC084 0xD53B # HANGUL SYLLABLE PHIEUPH-YI-HIEUH
-0xC085 0xD53E # HANGUL SYLLABLE PHIEUPH-I-SSANGKIYEOK
-0xC086 0xD53F # HANGUL SYLLABLE PHIEUPH-I-KIYEOKSIOS
-0xC087 0xD541 # HANGUL SYLLABLE PHIEUPH-I-NIEUNCIEUC
-0xC088 0xD542 # HANGUL SYLLABLE PHIEUPH-I-NIEUNHIEUH
-0xC089 0xD543 # HANGUL SYLLABLE PHIEUPH-I-TIKEUT
-0xC08A 0xD545 # HANGUL SYLLABLE PHIEUPH-I-RIEULKIYEOK
-0xC08B 0xD546 # HANGUL SYLLABLE PHIEUPH-I-RIEULMIEUM
-0xC08C 0xD547 # HANGUL SYLLABLE PHIEUPH-I-RIEULPIEUP
-0xC08D 0xD548 # HANGUL SYLLABLE PHIEUPH-I-RIEULSIOS
-0xC08E 0xD549 # HANGUL SYLLABLE PHIEUPH-I-RIEULTHIEUTH
-0xC08F 0xD54A # HANGUL SYLLABLE PHIEUPH-I-RIEULPHIEUPH
-0xC090 0xD54B # HANGUL SYLLABLE PHIEUPH-I-RIEULHIEUH
-0xC091 0xD54E # HANGUL SYLLABLE PHIEUPH-I-PIEUPSIOS
-0xC092 0xD550 # HANGUL SYLLABLE PHIEUPH-I-SSANGSIOS
-0xC093 0xD552 # HANGUL SYLLABLE PHIEUPH-I-CIEUC
-0xC094 0xD553 # HANGUL SYLLABLE PHIEUPH-I-CHIEUCH
-0xC095 0xD554 # HANGUL SYLLABLE PHIEUPH-I-KHIEUKH
-0xC096 0xD555 # HANGUL SYLLABLE PHIEUPH-I-THIEUTH
-0xC097 0xD556 # HANGUL SYLLABLE PHIEUPH-I-PHIEUPH
-0xC098 0xD557 # HANGUL SYLLABLE PHIEUPH-I-HIEUH
-0xC099 0xD55A # HANGUL SYLLABLE HIEUH-A-SSANGKIYEOK
-0xC09A 0xD55B # HANGUL SYLLABLE HIEUH-A-KIYEOKSIOS
-0xC09B 0xD55D # HANGUL SYLLABLE HIEUH-A-NIEUNCIEUC
-0xC09C 0xD55E # HANGUL SYLLABLE HIEUH-A-NIEUNHIEUH
-0xC09D 0xD55F # HANGUL SYLLABLE HIEUH-A-TIKEUT
-0xC09E 0xD561 # HANGUL SYLLABLE HIEUH-A-RIEULKIYEOK
-0xC09F 0xD562 # HANGUL SYLLABLE HIEUH-A-RIEULMIEUM
-0xC0A0 0xD563 # HANGUL SYLLABLE HIEUH-A-RIEULPIEUP
-0xC0A1 0xC6E9 # HANGUL SYLLABLE IEUNG-WE-KIYEOK
-0xC0A2 0xC6EC # HANGUL SYLLABLE IEUNG-WE-NIEUN
-0xC0A3 0xC6F0 # HANGUL SYLLABLE IEUNG-WE-RIEUL
-0xC0A4 0xC6F8 # HANGUL SYLLABLE IEUNG-WE-MIEUM
-0xC0A5 0xC6F9 # HANGUL SYLLABLE IEUNG-WE-PIEUP
-0xC0A6 0xC6FD # HANGUL SYLLABLE IEUNG-WE-IEUNG
-0xC0A7 0xC704 # HANGUL SYLLABLE IEUNG-WI
-0xC0A8 0xC705 # HANGUL SYLLABLE IEUNG-WI-KIYEOK
-0xC0A9 0xC708 # HANGUL SYLLABLE IEUNG-WI-NIEUN
-0xC0AA 0xC70C # HANGUL SYLLABLE IEUNG-WI-RIEUL
-0xC0AB 0xC714 # HANGUL SYLLABLE IEUNG-WI-MIEUM
-0xC0AC 0xC715 # HANGUL SYLLABLE IEUNG-WI-PIEUP
-0xC0AD 0xC717 # HANGUL SYLLABLE IEUNG-WI-SIOS
-0xC0AE 0xC719 # HANGUL SYLLABLE IEUNG-WI-IEUNG
-0xC0AF 0xC720 # HANGUL SYLLABLE IEUNG-YU
-0xC0B0 0xC721 # HANGUL SYLLABLE IEUNG-YU-KIYEOK
-0xC0B1 0xC724 # HANGUL SYLLABLE IEUNG-YU-NIEUN
-0xC0B2 0xC728 # HANGUL SYLLABLE IEUNG-YU-RIEUL
-0xC0B3 0xC730 # HANGUL SYLLABLE IEUNG-YU-MIEUM
-0xC0B4 0xC731 # HANGUL SYLLABLE IEUNG-YU-PIEUP
-0xC0B5 0xC733 # HANGUL SYLLABLE IEUNG-YU-SIOS
-0xC0B6 0xC735 # HANGUL SYLLABLE IEUNG-YU-IEUNG
-0xC0B7 0xC737 # HANGUL SYLLABLE IEUNG-YU-CHIEUCH
-0xC0B8 0xC73C # HANGUL SYLLABLE IEUNG-EU
-0xC0B9 0xC73D # HANGUL SYLLABLE IEUNG-EU-KIYEOK
-0xC0BA 0xC740 # HANGUL SYLLABLE IEUNG-EU-NIEUN
-0xC0BB 0xC744 # HANGUL SYLLABLE IEUNG-EU-RIEUL
-0xC0BC 0xC74A # HANGUL SYLLABLE IEUNG-EU-RIEULPHIEUPH
-0xC0BD 0xC74C # HANGUL SYLLABLE IEUNG-EU-MIEUM
-0xC0BE 0xC74D # HANGUL SYLLABLE IEUNG-EU-PIEUP
-0xC0BF 0xC74F # HANGUL SYLLABLE IEUNG-EU-SIOS
-0xC0C0 0xC751 # HANGUL SYLLABLE IEUNG-EU-IEUNG
-0xC0C1 0xC752 # HANGUL SYLLABLE IEUNG-EU-CIEUC
-0xC0C2 0xC753 # HANGUL SYLLABLE IEUNG-EU-CHIEUCH
-0xC0C3 0xC754 # HANGUL SYLLABLE IEUNG-EU-KHIEUKH
-0xC0C4 0xC755 # HANGUL SYLLABLE IEUNG-EU-THIEUTH
-0xC0C5 0xC756 # HANGUL SYLLABLE IEUNG-EU-PHIEUPH
-0xC0C6 0xC757 # HANGUL SYLLABLE IEUNG-EU-HIEUH
-0xC0C7 0xC758 # HANGUL SYLLABLE IEUNG-YI
-0xC0C8 0xC75C # HANGUL SYLLABLE IEUNG-YI-NIEUN
-0xC0C9 0xC760 # HANGUL SYLLABLE IEUNG-YI-RIEUL
-0xC0CA 0xC768 # HANGUL SYLLABLE IEUNG-YI-MIEUM
-0xC0CB 0xC76B # HANGUL SYLLABLE IEUNG-YI-SIOS
-0xC0CC 0xC774 # HANGUL SYLLABLE IEUNG-I
-0xC0CD 0xC775 # HANGUL SYLLABLE IEUNG-I-KIYEOK
-0xC0CE 0xC778 # HANGUL SYLLABLE IEUNG-I-NIEUN
-0xC0CF 0xC77C # HANGUL SYLLABLE IEUNG-I-RIEUL
-0xC0D0 0xC77D # HANGUL SYLLABLE IEUNG-I-RIEULKIYEOK
-0xC0D1 0xC77E # HANGUL SYLLABLE IEUNG-I-RIEULMIEUM
-0xC0D2 0xC783 # HANGUL SYLLABLE IEUNG-I-RIEULHIEUH
-0xC0D3 0xC784 # HANGUL SYLLABLE IEUNG-I-MIEUM
-0xC0D4 0xC785 # HANGUL SYLLABLE IEUNG-I-PIEUP
-0xC0D5 0xC787 # HANGUL SYLLABLE IEUNG-I-SIOS
-0xC0D6 0xC788 # HANGUL SYLLABLE IEUNG-I-SSANGSIOS
-0xC0D7 0xC789 # HANGUL SYLLABLE IEUNG-I-IEUNG
-0xC0D8 0xC78A # HANGUL SYLLABLE IEUNG-I-CIEUC
-0xC0D9 0xC78E # HANGUL SYLLABLE IEUNG-I-PHIEUPH
-0xC0DA 0xC790 # HANGUL SYLLABLE CIEUC-A
-0xC0DB 0xC791 # HANGUL SYLLABLE CIEUC-A-KIYEOK
-0xC0DC 0xC794 # HANGUL SYLLABLE CIEUC-A-NIEUN
-0xC0DD 0xC796 # HANGUL SYLLABLE CIEUC-A-NIEUNHIEUH
-0xC0DE 0xC797 # HANGUL SYLLABLE CIEUC-A-TIKEUT
-0xC0DF 0xC798 # HANGUL SYLLABLE CIEUC-A-RIEUL
-0xC0E0 0xC79A # HANGUL SYLLABLE CIEUC-A-RIEULMIEUM
-0xC0E1 0xC7A0 # HANGUL SYLLABLE CIEUC-A-MIEUM
-0xC0E2 0xC7A1 # HANGUL SYLLABLE CIEUC-A-PIEUP
-0xC0E3 0xC7A3 # HANGUL SYLLABLE CIEUC-A-SIOS
-0xC0E4 0xC7A4 # HANGUL SYLLABLE CIEUC-A-SSANGSIOS
-0xC0E5 0xC7A5 # HANGUL SYLLABLE CIEUC-A-IEUNG
-0xC0E6 0xC7A6 # HANGUL SYLLABLE CIEUC-A-CIEUC
-0xC0E7 0xC7AC # HANGUL SYLLABLE CIEUC-AE
-0xC0E8 0xC7AD # HANGUL SYLLABLE CIEUC-AE-KIYEOK
-0xC0E9 0xC7B0 # HANGUL SYLLABLE CIEUC-AE-NIEUN
-0xC0EA 0xC7B4 # HANGUL SYLLABLE CIEUC-AE-RIEUL
-0xC0EB 0xC7BC # HANGUL SYLLABLE CIEUC-AE-MIEUM
-0xC0EC 0xC7BD # HANGUL SYLLABLE CIEUC-AE-PIEUP
-0xC0ED 0xC7BF # HANGUL SYLLABLE CIEUC-AE-SIOS
-0xC0EE 0xC7C0 # HANGUL SYLLABLE CIEUC-AE-SSANGSIOS
-0xC0EF 0xC7C1 # HANGUL SYLLABLE CIEUC-AE-IEUNG
-0xC0F0 0xC7C8 # HANGUL SYLLABLE CIEUC-YA
-0xC0F1 0xC7C9 # HANGUL SYLLABLE CIEUC-YA-KIYEOK
-0xC0F2 0xC7CC # HANGUL SYLLABLE CIEUC-YA-NIEUN
-0xC0F3 0xC7CE # HANGUL SYLLABLE CIEUC-YA-NIEUNHIEUH
-0xC0F4 0xC7D0 # HANGUL SYLLABLE CIEUC-YA-RIEUL
-0xC0F5 0xC7D8 # HANGUL SYLLABLE CIEUC-YA-MIEUM
-0xC0F6 0xC7DD # HANGUL SYLLABLE CIEUC-YA-IEUNG
-0xC0F7 0xC7E4 # HANGUL SYLLABLE CIEUC-YAE
-0xC0F8 0xC7E8 # HANGUL SYLLABLE CIEUC-YAE-NIEUN
-0xC0F9 0xC7EC # HANGUL SYLLABLE CIEUC-YAE-RIEUL
-0xC0FA 0xC800 # HANGUL SYLLABLE CIEUC-EO
-0xC0FB 0xC801 # HANGUL SYLLABLE CIEUC-EO-KIYEOK
-0xC0FC 0xC804 # HANGUL SYLLABLE CIEUC-EO-NIEUN
-0xC0FD 0xC808 # HANGUL SYLLABLE CIEUC-EO-RIEUL
-0xC0FE 0xC80A # HANGUL SYLLABLE CIEUC-EO-RIEULMIEUM
-0xC141 0xD564 # HANGUL SYLLABLE HIEUH-A-RIEULSIOS
-0xC142 0xD566 # HANGUL SYLLABLE HIEUH-A-RIEULPHIEUPH
-0xC143 0xD567 # HANGUL SYLLABLE HIEUH-A-RIEULHIEUH
-0xC144 0xD56A # HANGUL SYLLABLE HIEUH-A-PIEUPSIOS
-0xC145 0xD56C # HANGUL SYLLABLE HIEUH-A-SSANGSIOS
-0xC146 0xD56E # HANGUL SYLLABLE HIEUH-A-CIEUC
-0xC147 0xD56F # HANGUL SYLLABLE HIEUH-A-CHIEUCH
-0xC148 0xD570 # HANGUL SYLLABLE HIEUH-A-KHIEUKH
-0xC149 0xD571 # HANGUL SYLLABLE HIEUH-A-THIEUTH
-0xC14A 0xD572 # HANGUL SYLLABLE HIEUH-A-PHIEUPH
-0xC14B 0xD573 # HANGUL SYLLABLE HIEUH-A-HIEUH
-0xC14C 0xD576 # HANGUL SYLLABLE HIEUH-AE-SSANGKIYEOK
-0xC14D 0xD577 # HANGUL SYLLABLE HIEUH-AE-KIYEOKSIOS
-0xC14E 0xD579 # HANGUL SYLLABLE HIEUH-AE-NIEUNCIEUC
-0xC14F 0xD57A # HANGUL SYLLABLE HIEUH-AE-NIEUNHIEUH
-0xC150 0xD57B # HANGUL SYLLABLE HIEUH-AE-TIKEUT
-0xC151 0xD57D # HANGUL SYLLABLE HIEUH-AE-RIEULKIYEOK
-0xC152 0xD57E # HANGUL SYLLABLE HIEUH-AE-RIEULMIEUM
-0xC153 0xD57F # HANGUL SYLLABLE HIEUH-AE-RIEULPIEUP
-0xC154 0xD580 # HANGUL SYLLABLE HIEUH-AE-RIEULSIOS
-0xC155 0xD581 # HANGUL SYLLABLE HIEUH-AE-RIEULTHIEUTH
-0xC156 0xD582 # HANGUL SYLLABLE HIEUH-AE-RIEULPHIEUPH
-0xC157 0xD583 # HANGUL SYLLABLE HIEUH-AE-RIEULHIEUH
-0xC158 0xD586 # HANGUL SYLLABLE HIEUH-AE-PIEUPSIOS
-0xC159 0xD58A # HANGUL SYLLABLE HIEUH-AE-CIEUC
-0xC15A 0xD58B # HANGUL SYLLABLE HIEUH-AE-CHIEUCH
-0xC161 0xD58C # HANGUL SYLLABLE HIEUH-AE-KHIEUKH
-0xC162 0xD58D # HANGUL SYLLABLE HIEUH-AE-THIEUTH
-0xC163 0xD58E # HANGUL SYLLABLE HIEUH-AE-PHIEUPH
-0xC164 0xD58F # HANGUL SYLLABLE HIEUH-AE-HIEUH
-0xC165 0xD591 # HANGUL SYLLABLE HIEUH-YA-KIYEOK
-0xC166 0xD592 # HANGUL SYLLABLE HIEUH-YA-SSANGKIYEOK
-0xC167 0xD593 # HANGUL SYLLABLE HIEUH-YA-KIYEOKSIOS
-0xC168 0xD594 # HANGUL SYLLABLE HIEUH-YA-NIEUN
-0xC169 0xD595 # HANGUL SYLLABLE HIEUH-YA-NIEUNCIEUC
-0xC16A 0xD596 # HANGUL SYLLABLE HIEUH-YA-NIEUNHIEUH
-0xC16B 0xD597 # HANGUL SYLLABLE HIEUH-YA-TIKEUT
-0xC16C 0xD598 # HANGUL SYLLABLE HIEUH-YA-RIEUL
-0xC16D 0xD599 # HANGUL SYLLABLE HIEUH-YA-RIEULKIYEOK
-0xC16E 0xD59A # HANGUL SYLLABLE HIEUH-YA-RIEULMIEUM
-0xC16F 0xD59B # HANGUL SYLLABLE HIEUH-YA-RIEULPIEUP
-0xC170 0xD59C # HANGUL SYLLABLE HIEUH-YA-RIEULSIOS
-0xC171 0xD59D # HANGUL SYLLABLE HIEUH-YA-RIEULTHIEUTH
-0xC172 0xD59E # HANGUL SYLLABLE HIEUH-YA-RIEULPHIEUPH
-0xC173 0xD59F # HANGUL SYLLABLE HIEUH-YA-RIEULHIEUH
-0xC174 0xD5A0 # HANGUL SYLLABLE HIEUH-YA-MIEUM
-0xC175 0xD5A1 # HANGUL SYLLABLE HIEUH-YA-PIEUP
-0xC176 0xD5A2 # HANGUL SYLLABLE HIEUH-YA-PIEUPSIOS
-0xC177 0xD5A3 # HANGUL SYLLABLE HIEUH-YA-SIOS
-0xC178 0xD5A4 # HANGUL SYLLABLE HIEUH-YA-SSANGSIOS
-0xC179 0xD5A6 # HANGUL SYLLABLE HIEUH-YA-CIEUC
-0xC17A 0xD5A7 # HANGUL SYLLABLE HIEUH-YA-CHIEUCH
-0xC181 0xD5A8 # HANGUL SYLLABLE HIEUH-YA-KHIEUKH
-0xC182 0xD5A9 # HANGUL SYLLABLE HIEUH-YA-THIEUTH
-0xC183 0xD5AA # HANGUL SYLLABLE HIEUH-YA-PHIEUPH
-0xC184 0xD5AB # HANGUL SYLLABLE HIEUH-YA-HIEUH
-0xC185 0xD5AC # HANGUL SYLLABLE HIEUH-YAE
-0xC186 0xD5AD # HANGUL SYLLABLE HIEUH-YAE-KIYEOK
-0xC187 0xD5AE # HANGUL SYLLABLE HIEUH-YAE-SSANGKIYEOK
-0xC188 0xD5AF # HANGUL SYLLABLE HIEUH-YAE-KIYEOKSIOS
-0xC189 0xD5B0 # HANGUL SYLLABLE HIEUH-YAE-NIEUN
-0xC18A 0xD5B1 # HANGUL SYLLABLE HIEUH-YAE-NIEUNCIEUC
-0xC18B 0xD5B2 # HANGUL SYLLABLE HIEUH-YAE-NIEUNHIEUH
-0xC18C 0xD5B3 # HANGUL SYLLABLE HIEUH-YAE-TIKEUT
-0xC18D 0xD5B4 # HANGUL SYLLABLE HIEUH-YAE-RIEUL
-0xC18E 0xD5B5 # HANGUL SYLLABLE HIEUH-YAE-RIEULKIYEOK
-0xC18F 0xD5B6 # HANGUL SYLLABLE HIEUH-YAE-RIEULMIEUM
-0xC190 0xD5B7 # HANGUL SYLLABLE HIEUH-YAE-RIEULPIEUP
-0xC191 0xD5B8 # HANGUL SYLLABLE HIEUH-YAE-RIEULSIOS
-0xC192 0xD5B9 # HANGUL SYLLABLE HIEUH-YAE-RIEULTHIEUTH
-0xC193 0xD5BA # HANGUL SYLLABLE HIEUH-YAE-RIEULPHIEUPH
-0xC194 0xD5BB # HANGUL SYLLABLE HIEUH-YAE-RIEULHIEUH
-0xC195 0xD5BC # HANGUL SYLLABLE HIEUH-YAE-MIEUM
-0xC196 0xD5BD # HANGUL SYLLABLE HIEUH-YAE-PIEUP
-0xC197 0xD5BE # HANGUL SYLLABLE HIEUH-YAE-PIEUPSIOS
-0xC198 0xD5BF # HANGUL SYLLABLE HIEUH-YAE-SIOS
-0xC199 0xD5C0 # HANGUL SYLLABLE HIEUH-YAE-SSANGSIOS
-0xC19A 0xD5C1 # HANGUL SYLLABLE HIEUH-YAE-IEUNG
-0xC19B 0xD5C2 # HANGUL SYLLABLE HIEUH-YAE-CIEUC
-0xC19C 0xD5C3 # HANGUL SYLLABLE HIEUH-YAE-CHIEUCH
-0xC19D 0xD5C4 # HANGUL SYLLABLE HIEUH-YAE-KHIEUKH
-0xC19E 0xD5C5 # HANGUL SYLLABLE HIEUH-YAE-THIEUTH
-0xC19F 0xD5C6 # HANGUL SYLLABLE HIEUH-YAE-PHIEUPH
-0xC1A0 0xD5C7 # HANGUL SYLLABLE HIEUH-YAE-HIEUH
-0xC1A1 0xC810 # HANGUL SYLLABLE CIEUC-EO-MIEUM
-0xC1A2 0xC811 # HANGUL SYLLABLE CIEUC-EO-PIEUP
-0xC1A3 0xC813 # HANGUL SYLLABLE CIEUC-EO-SIOS
-0xC1A4 0xC815 # HANGUL SYLLABLE CIEUC-EO-IEUNG
-0xC1A5 0xC816 # HANGUL SYLLABLE CIEUC-EO-CIEUC
-0xC1A6 0xC81C # HANGUL SYLLABLE CIEUC-E
-0xC1A7 0xC81D # HANGUL SYLLABLE CIEUC-E-KIYEOK
-0xC1A8 0xC820 # HANGUL SYLLABLE CIEUC-E-NIEUN
-0xC1A9 0xC824 # HANGUL SYLLABLE CIEUC-E-RIEUL
-0xC1AA 0xC82C # HANGUL SYLLABLE CIEUC-E-MIEUM
-0xC1AB 0xC82D # HANGUL SYLLABLE CIEUC-E-PIEUP
-0xC1AC 0xC82F # HANGUL SYLLABLE CIEUC-E-SIOS
-0xC1AD 0xC831 # HANGUL SYLLABLE CIEUC-E-IEUNG
-0xC1AE 0xC838 # HANGUL SYLLABLE CIEUC-YEO
-0xC1AF 0xC83C # HANGUL SYLLABLE CIEUC-YEO-NIEUN
-0xC1B0 0xC840 # HANGUL SYLLABLE CIEUC-YEO-RIEUL
-0xC1B1 0xC848 # HANGUL SYLLABLE CIEUC-YEO-MIEUM
-0xC1B2 0xC849 # HANGUL SYLLABLE CIEUC-YEO-PIEUP
-0xC1B3 0xC84C # HANGUL SYLLABLE CIEUC-YEO-SSANGSIOS
-0xC1B4 0xC84D # HANGUL SYLLABLE CIEUC-YEO-IEUNG
-0xC1B5 0xC854 # HANGUL SYLLABLE CIEUC-YE
-0xC1B6 0xC870 # HANGUL SYLLABLE CIEUC-O
-0xC1B7 0xC871 # HANGUL SYLLABLE CIEUC-O-KIYEOK
-0xC1B8 0xC874 # HANGUL SYLLABLE CIEUC-O-NIEUN
-0xC1B9 0xC878 # HANGUL SYLLABLE CIEUC-O-RIEUL
-0xC1BA 0xC87A # HANGUL SYLLABLE CIEUC-O-RIEULMIEUM
-0xC1BB 0xC880 # HANGUL SYLLABLE CIEUC-O-MIEUM
-0xC1BC 0xC881 # HANGUL SYLLABLE CIEUC-O-PIEUP
-0xC1BD 0xC883 # HANGUL SYLLABLE CIEUC-O-SIOS
-0xC1BE 0xC885 # HANGUL SYLLABLE CIEUC-O-IEUNG
-0xC1BF 0xC886 # HANGUL SYLLABLE CIEUC-O-CIEUC
-0xC1C0 0xC887 # HANGUL SYLLABLE CIEUC-O-CHIEUCH
-0xC1C1 0xC88B # HANGUL SYLLABLE CIEUC-O-HIEUH
-0xC1C2 0xC88C # HANGUL SYLLABLE CIEUC-WA
-0xC1C3 0xC88D # HANGUL SYLLABLE CIEUC-WA-KIYEOK
-0xC1C4 0xC894 # HANGUL SYLLABLE CIEUC-WA-RIEUL
-0xC1C5 0xC89D # HANGUL SYLLABLE CIEUC-WA-PIEUP
-0xC1C6 0xC89F # HANGUL SYLLABLE CIEUC-WA-SIOS
-0xC1C7 0xC8A1 # HANGUL SYLLABLE CIEUC-WA-IEUNG
-0xC1C8 0xC8A8 # HANGUL SYLLABLE CIEUC-WAE
-0xC1C9 0xC8BC # HANGUL SYLLABLE CIEUC-WAE-SSANGSIOS
-0xC1CA 0xC8BD # HANGUL SYLLABLE CIEUC-WAE-IEUNG
-0xC1CB 0xC8C4 # HANGUL SYLLABLE CIEUC-OE
-0xC1CC 0xC8C8 # HANGUL SYLLABLE CIEUC-OE-NIEUN
-0xC1CD 0xC8CC # HANGUL SYLLABLE CIEUC-OE-RIEUL
-0xC1CE 0xC8D4 # HANGUL SYLLABLE CIEUC-OE-MIEUM
-0xC1CF 0xC8D5 # HANGUL SYLLABLE CIEUC-OE-PIEUP
-0xC1D0 0xC8D7 # HANGUL SYLLABLE CIEUC-OE-SIOS
-0xC1D1 0xC8D9 # HANGUL SYLLABLE CIEUC-OE-IEUNG
-0xC1D2 0xC8E0 # HANGUL SYLLABLE CIEUC-YO
-0xC1D3 0xC8E1 # HANGUL SYLLABLE CIEUC-YO-KIYEOK
-0xC1D4 0xC8E4 # HANGUL SYLLABLE CIEUC-YO-NIEUN
-0xC1D5 0xC8F5 # HANGUL SYLLABLE CIEUC-YO-IEUNG
-0xC1D6 0xC8FC # HANGUL SYLLABLE CIEUC-U
-0xC1D7 0xC8FD # HANGUL SYLLABLE CIEUC-U-KIYEOK
-0xC1D8 0xC900 # HANGUL SYLLABLE CIEUC-U-NIEUN
-0xC1D9 0xC904 # HANGUL SYLLABLE CIEUC-U-RIEUL
-0xC1DA 0xC905 # HANGUL SYLLABLE CIEUC-U-RIEULKIYEOK
-0xC1DB 0xC906 # HANGUL SYLLABLE CIEUC-U-RIEULMIEUM
-0xC1DC 0xC90C # HANGUL SYLLABLE CIEUC-U-MIEUM
-0xC1DD 0xC90D # HANGUL SYLLABLE CIEUC-U-PIEUP
-0xC1DE 0xC90F # HANGUL SYLLABLE CIEUC-U-SIOS
-0xC1DF 0xC911 # HANGUL SYLLABLE CIEUC-U-IEUNG
-0xC1E0 0xC918 # HANGUL SYLLABLE CIEUC-WEO
-0xC1E1 0xC92C # HANGUL SYLLABLE CIEUC-WEO-SSANGSIOS
-0xC1E2 0xC934 # HANGUL SYLLABLE CIEUC-WE
-0xC1E3 0xC950 # HANGUL SYLLABLE CIEUC-WI
-0xC1E4 0xC951 # HANGUL SYLLABLE CIEUC-WI-KIYEOK
-0xC1E5 0xC954 # HANGUL SYLLABLE CIEUC-WI-NIEUN
-0xC1E6 0xC958 # HANGUL SYLLABLE CIEUC-WI-RIEUL
-0xC1E7 0xC960 # HANGUL SYLLABLE CIEUC-WI-MIEUM
-0xC1E8 0xC961 # HANGUL SYLLABLE CIEUC-WI-PIEUP
-0xC1E9 0xC963 # HANGUL SYLLABLE CIEUC-WI-SIOS
-0xC1EA 0xC96C # HANGUL SYLLABLE CIEUC-YU
-0xC1EB 0xC970 # HANGUL SYLLABLE CIEUC-YU-NIEUN
-0xC1EC 0xC974 # HANGUL SYLLABLE CIEUC-YU-RIEUL
-0xC1ED 0xC97C # HANGUL SYLLABLE CIEUC-YU-MIEUM
-0xC1EE 0xC988 # HANGUL SYLLABLE CIEUC-EU
-0xC1EF 0xC989 # HANGUL SYLLABLE CIEUC-EU-KIYEOK
-0xC1F0 0xC98C # HANGUL SYLLABLE CIEUC-EU-NIEUN
-0xC1F1 0xC990 # HANGUL SYLLABLE CIEUC-EU-RIEUL
-0xC1F2 0xC998 # HANGUL SYLLABLE CIEUC-EU-MIEUM
-0xC1F3 0xC999 # HANGUL SYLLABLE CIEUC-EU-PIEUP
-0xC1F4 0xC99B # HANGUL SYLLABLE CIEUC-EU-SIOS
-0xC1F5 0xC99D # HANGUL SYLLABLE CIEUC-EU-IEUNG
-0xC1F6 0xC9C0 # HANGUL SYLLABLE CIEUC-I
-0xC1F7 0xC9C1 # HANGUL SYLLABLE CIEUC-I-KIYEOK
-0xC1F8 0xC9C4 # HANGUL SYLLABLE CIEUC-I-NIEUN
-0xC1F9 0xC9C7 # HANGUL SYLLABLE CIEUC-I-TIKEUT
-0xC1FA 0xC9C8 # HANGUL SYLLABLE CIEUC-I-RIEUL
-0xC1FB 0xC9CA # HANGUL SYLLABLE CIEUC-I-RIEULMIEUM
-0xC1FC 0xC9D0 # HANGUL SYLLABLE CIEUC-I-MIEUM
-0xC1FD 0xC9D1 # HANGUL SYLLABLE CIEUC-I-PIEUP
-0xC1FE 0xC9D3 # HANGUL SYLLABLE CIEUC-I-SIOS
-0xC241 0xD5CA # HANGUL SYLLABLE HIEUH-EO-SSANGKIYEOK
-0xC242 0xD5CB # HANGUL SYLLABLE HIEUH-EO-KIYEOKSIOS
-0xC243 0xD5CD # HANGUL SYLLABLE HIEUH-EO-NIEUNCIEUC
-0xC244 0xD5CE # HANGUL SYLLABLE HIEUH-EO-NIEUNHIEUH
-0xC245 0xD5CF # HANGUL SYLLABLE HIEUH-EO-TIKEUT
-0xC246 0xD5D1 # HANGUL SYLLABLE HIEUH-EO-RIEULKIYEOK
-0xC247 0xD5D3 # HANGUL SYLLABLE HIEUH-EO-RIEULPIEUP
-0xC248 0xD5D4 # HANGUL SYLLABLE HIEUH-EO-RIEULSIOS
-0xC249 0xD5D5 # HANGUL SYLLABLE HIEUH-EO-RIEULTHIEUTH
-0xC24A 0xD5D6 # HANGUL SYLLABLE HIEUH-EO-RIEULPHIEUPH
-0xC24B 0xD5D7 # HANGUL SYLLABLE HIEUH-EO-RIEULHIEUH
-0xC24C 0xD5DA # HANGUL SYLLABLE HIEUH-EO-PIEUPSIOS
-0xC24D 0xD5DC # HANGUL SYLLABLE HIEUH-EO-SSANGSIOS
-0xC24E 0xD5DE # HANGUL SYLLABLE HIEUH-EO-CIEUC
-0xC24F 0xD5DF # HANGUL SYLLABLE HIEUH-EO-CHIEUCH
-0xC250 0xD5E0 # HANGUL SYLLABLE HIEUH-EO-KHIEUKH
-0xC251 0xD5E1 # HANGUL SYLLABLE HIEUH-EO-THIEUTH
-0xC252 0xD5E2 # HANGUL SYLLABLE HIEUH-EO-PHIEUPH
-0xC253 0xD5E3 # HANGUL SYLLABLE HIEUH-EO-HIEUH
-0xC254 0xD5E6 # HANGUL SYLLABLE HIEUH-E-SSANGKIYEOK
-0xC255 0xD5E7 # HANGUL SYLLABLE HIEUH-E-KIYEOKSIOS
-0xC256 0xD5E9 # HANGUL SYLLABLE HIEUH-E-NIEUNCIEUC
-0xC257 0xD5EA # HANGUL SYLLABLE HIEUH-E-NIEUNHIEUH
-0xC258 0xD5EB # HANGUL SYLLABLE HIEUH-E-TIKEUT
-0xC259 0xD5ED # HANGUL SYLLABLE HIEUH-E-RIEULKIYEOK
-0xC25A 0xD5EE # HANGUL SYLLABLE HIEUH-E-RIEULMIEUM
-0xC261 0xD5EF # HANGUL SYLLABLE HIEUH-E-RIEULPIEUP
-0xC262 0xD5F0 # HANGUL SYLLABLE HIEUH-E-RIEULSIOS
-0xC263 0xD5F1 # HANGUL SYLLABLE HIEUH-E-RIEULTHIEUTH
-0xC264 0xD5F2 # HANGUL SYLLABLE HIEUH-E-RIEULPHIEUPH
-0xC265 0xD5F3 # HANGUL SYLLABLE HIEUH-E-RIEULHIEUH
-0xC266 0xD5F6 # HANGUL SYLLABLE HIEUH-E-PIEUPSIOS
-0xC267 0xD5F8 # HANGUL SYLLABLE HIEUH-E-SSANGSIOS
-0xC268 0xD5FA # HANGUL SYLLABLE HIEUH-E-CIEUC
-0xC269 0xD5FB # HANGUL SYLLABLE HIEUH-E-CHIEUCH
-0xC26A 0xD5FC # HANGUL SYLLABLE HIEUH-E-KHIEUKH
-0xC26B 0xD5FD # HANGUL SYLLABLE HIEUH-E-THIEUTH
-0xC26C 0xD5FE # HANGUL SYLLABLE HIEUH-E-PHIEUPH
-0xC26D 0xD5FF # HANGUL SYLLABLE HIEUH-E-HIEUH
-0xC26E 0xD602 # HANGUL SYLLABLE HIEUH-YEO-SSANGKIYEOK
-0xC26F 0xD603 # HANGUL SYLLABLE HIEUH-YEO-KIYEOKSIOS
-0xC270 0xD605 # HANGUL SYLLABLE HIEUH-YEO-NIEUNCIEUC
-0xC271 0xD606 # HANGUL SYLLABLE HIEUH-YEO-NIEUNHIEUH
-0xC272 0xD607 # HANGUL SYLLABLE HIEUH-YEO-TIKEUT
-0xC273 0xD609 # HANGUL SYLLABLE HIEUH-YEO-RIEULKIYEOK
-0xC274 0xD60A # HANGUL SYLLABLE HIEUH-YEO-RIEULMIEUM
-0xC275 0xD60B # HANGUL SYLLABLE HIEUH-YEO-RIEULPIEUP
-0xC276 0xD60C # HANGUL SYLLABLE HIEUH-YEO-RIEULSIOS
-0xC277 0xD60D # HANGUL SYLLABLE HIEUH-YEO-RIEULTHIEUTH
-0xC278 0xD60E # HANGUL SYLLABLE HIEUH-YEO-RIEULPHIEUPH
-0xC279 0xD60F # HANGUL SYLLABLE HIEUH-YEO-RIEULHIEUH
-0xC27A 0xD612 # HANGUL SYLLABLE HIEUH-YEO-PIEUPSIOS
-0xC281 0xD616 # HANGUL SYLLABLE HIEUH-YEO-CIEUC
-0xC282 0xD617 # HANGUL SYLLABLE HIEUH-YEO-CHIEUCH
-0xC283 0xD618 # HANGUL SYLLABLE HIEUH-YEO-KHIEUKH
-0xC284 0xD619 # HANGUL SYLLABLE HIEUH-YEO-THIEUTH
-0xC285 0xD61A # HANGUL SYLLABLE HIEUH-YEO-PHIEUPH
-0xC286 0xD61B # HANGUL SYLLABLE HIEUH-YEO-HIEUH
-0xC287 0xD61D # HANGUL SYLLABLE HIEUH-YE-KIYEOK
-0xC288 0xD61E # HANGUL SYLLABLE HIEUH-YE-SSANGKIYEOK
-0xC289 0xD61F # HANGUL SYLLABLE HIEUH-YE-KIYEOKSIOS
-0xC28A 0xD621 # HANGUL SYLLABLE HIEUH-YE-NIEUNCIEUC
-0xC28B 0xD622 # HANGUL SYLLABLE HIEUH-YE-NIEUNHIEUH
-0xC28C 0xD623 # HANGUL SYLLABLE HIEUH-YE-TIKEUT
-0xC28D 0xD625 # HANGUL SYLLABLE HIEUH-YE-RIEULKIYEOK
-0xC28E 0xD626 # HANGUL SYLLABLE HIEUH-YE-RIEULMIEUM
-0xC28F 0xD627 # HANGUL SYLLABLE HIEUH-YE-RIEULPIEUP
-0xC290 0xD628 # HANGUL SYLLABLE HIEUH-YE-RIEULSIOS
-0xC291 0xD629 # HANGUL SYLLABLE HIEUH-YE-RIEULTHIEUTH
-0xC292 0xD62A # HANGUL SYLLABLE HIEUH-YE-RIEULPHIEUPH
-0xC293 0xD62B # HANGUL SYLLABLE HIEUH-YE-RIEULHIEUH
-0xC294 0xD62C # HANGUL SYLLABLE HIEUH-YE-MIEUM
-0xC295 0xD62E # HANGUL SYLLABLE HIEUH-YE-PIEUPSIOS
-0xC296 0xD62F # HANGUL SYLLABLE HIEUH-YE-SIOS
-0xC297 0xD630 # HANGUL SYLLABLE HIEUH-YE-SSANGSIOS
-0xC298 0xD631 # HANGUL SYLLABLE HIEUH-YE-IEUNG
-0xC299 0xD632 # HANGUL SYLLABLE HIEUH-YE-CIEUC
-0xC29A 0xD633 # HANGUL SYLLABLE HIEUH-YE-CHIEUCH
-0xC29B 0xD634 # HANGUL SYLLABLE HIEUH-YE-KHIEUKH
-0xC29C 0xD635 # HANGUL SYLLABLE HIEUH-YE-THIEUTH
-0xC29D 0xD636 # HANGUL SYLLABLE HIEUH-YE-PHIEUPH
-0xC29E 0xD637 # HANGUL SYLLABLE HIEUH-YE-HIEUH
-0xC29F 0xD63A # HANGUL SYLLABLE HIEUH-O-SSANGKIYEOK
-0xC2A0 0xD63B # HANGUL SYLLABLE HIEUH-O-KIYEOKSIOS
-0xC2A1 0xC9D5 # HANGUL SYLLABLE CIEUC-I-IEUNG
-0xC2A2 0xC9D6 # HANGUL SYLLABLE CIEUC-I-CIEUC
-0xC2A3 0xC9D9 # HANGUL SYLLABLE CIEUC-I-THIEUTH
-0xC2A4 0xC9DA # HANGUL SYLLABLE CIEUC-I-PHIEUPH
-0xC2A5 0xC9DC # HANGUL SYLLABLE SSANGCIEUC-A
-0xC2A6 0xC9DD # HANGUL SYLLABLE SSANGCIEUC-A-KIYEOK
-0xC2A7 0xC9E0 # HANGUL SYLLABLE SSANGCIEUC-A-NIEUN
-0xC2A8 0xC9E2 # HANGUL SYLLABLE SSANGCIEUC-A-NIEUNHIEUH
-0xC2A9 0xC9E4 # HANGUL SYLLABLE SSANGCIEUC-A-RIEUL
-0xC2AA 0xC9E7 # HANGUL SYLLABLE SSANGCIEUC-A-RIEULPIEUP
-0xC2AB 0xC9EC # HANGUL SYLLABLE SSANGCIEUC-A-MIEUM
-0xC2AC 0xC9ED # HANGUL SYLLABLE SSANGCIEUC-A-PIEUP
-0xC2AD 0xC9EF # HANGUL SYLLABLE SSANGCIEUC-A-SIOS
-0xC2AE 0xC9F0 # HANGUL SYLLABLE SSANGCIEUC-A-SSANGSIOS
-0xC2AF 0xC9F1 # HANGUL SYLLABLE SSANGCIEUC-A-IEUNG
-0xC2B0 0xC9F8 # HANGUL SYLLABLE SSANGCIEUC-AE
-0xC2B1 0xC9F9 # HANGUL SYLLABLE SSANGCIEUC-AE-KIYEOK
-0xC2B2 0xC9FC # HANGUL SYLLABLE SSANGCIEUC-AE-NIEUN
-0xC2B3 0xCA00 # HANGUL SYLLABLE SSANGCIEUC-AE-RIEUL
-0xC2B4 0xCA08 # HANGUL SYLLABLE SSANGCIEUC-AE-MIEUM
-0xC2B5 0xCA09 # HANGUL SYLLABLE SSANGCIEUC-AE-PIEUP
-0xC2B6 0xCA0B # HANGUL SYLLABLE SSANGCIEUC-AE-SIOS
-0xC2B7 0xCA0C # HANGUL SYLLABLE SSANGCIEUC-AE-SSANGSIOS
-0xC2B8 0xCA0D # HANGUL SYLLABLE SSANGCIEUC-AE-IEUNG
-0xC2B9 0xCA14 # HANGUL SYLLABLE SSANGCIEUC-YA
-0xC2BA 0xCA18 # HANGUL SYLLABLE SSANGCIEUC-YA-NIEUN
-0xC2BB 0xCA29 # HANGUL SYLLABLE SSANGCIEUC-YA-IEUNG
-0xC2BC 0xCA4C # HANGUL SYLLABLE SSANGCIEUC-EO
-0xC2BD 0xCA4D # HANGUL SYLLABLE SSANGCIEUC-EO-KIYEOK
-0xC2BE 0xCA50 # HANGUL SYLLABLE SSANGCIEUC-EO-NIEUN
-0xC2BF 0xCA54 # HANGUL SYLLABLE SSANGCIEUC-EO-RIEUL
-0xC2C0 0xCA5C # HANGUL SYLLABLE SSANGCIEUC-EO-MIEUM
-0xC2C1 0xCA5D # HANGUL SYLLABLE SSANGCIEUC-EO-PIEUP
-0xC2C2 0xCA5F # HANGUL SYLLABLE SSANGCIEUC-EO-SIOS
-0xC2C3 0xCA60 # HANGUL SYLLABLE SSANGCIEUC-EO-SSANGSIOS
-0xC2C4 0xCA61 # HANGUL SYLLABLE SSANGCIEUC-EO-IEUNG
-0xC2C5 0xCA68 # HANGUL SYLLABLE SSANGCIEUC-E
-0xC2C6 0xCA7D # HANGUL SYLLABLE SSANGCIEUC-E-IEUNG
-0xC2C7 0xCA84 # HANGUL SYLLABLE SSANGCIEUC-YEO
-0xC2C8 0xCA98 # HANGUL SYLLABLE SSANGCIEUC-YEO-SSANGSIOS
-0xC2C9 0xCABC # HANGUL SYLLABLE SSANGCIEUC-O
-0xC2CA 0xCABD # HANGUL SYLLABLE SSANGCIEUC-O-KIYEOK
-0xC2CB 0xCAC0 # HANGUL SYLLABLE SSANGCIEUC-O-NIEUN
-0xC2CC 0xCAC4 # HANGUL SYLLABLE SSANGCIEUC-O-RIEUL
-0xC2CD 0xCACC # HANGUL SYLLABLE SSANGCIEUC-O-MIEUM
-0xC2CE 0xCACD # HANGUL SYLLABLE SSANGCIEUC-O-PIEUP
-0xC2CF 0xCACF # HANGUL SYLLABLE SSANGCIEUC-O-SIOS
-0xC2D0 0xCAD1 # HANGUL SYLLABLE SSANGCIEUC-O-IEUNG
-0xC2D1 0xCAD3 # HANGUL SYLLABLE SSANGCIEUC-O-CHIEUCH
-0xC2D2 0xCAD8 # HANGUL SYLLABLE SSANGCIEUC-WA
-0xC2D3 0xCAD9 # HANGUL SYLLABLE SSANGCIEUC-WA-KIYEOK
-0xC2D4 0xCAE0 # HANGUL SYLLABLE SSANGCIEUC-WA-RIEUL
-0xC2D5 0xCAEC # HANGUL SYLLABLE SSANGCIEUC-WA-SSANGSIOS
-0xC2D6 0xCAF4 # HANGUL SYLLABLE SSANGCIEUC-WAE
-0xC2D7 0xCB08 # HANGUL SYLLABLE SSANGCIEUC-WAE-SSANGSIOS
-0xC2D8 0xCB10 # HANGUL SYLLABLE SSANGCIEUC-OE
-0xC2D9 0xCB14 # HANGUL SYLLABLE SSANGCIEUC-OE-NIEUN
-0xC2DA 0xCB18 # HANGUL SYLLABLE SSANGCIEUC-OE-RIEUL
-0xC2DB 0xCB20 # HANGUL SYLLABLE SSANGCIEUC-OE-MIEUM
-0xC2DC 0xCB21 # HANGUL SYLLABLE SSANGCIEUC-OE-PIEUP
-0xC2DD 0xCB41 # HANGUL SYLLABLE SSANGCIEUC-YO-IEUNG
-0xC2DE 0xCB48 # HANGUL SYLLABLE SSANGCIEUC-U
-0xC2DF 0xCB49 # HANGUL SYLLABLE SSANGCIEUC-U-KIYEOK
-0xC2E0 0xCB4C # HANGUL SYLLABLE SSANGCIEUC-U-NIEUN
-0xC2E1 0xCB50 # HANGUL SYLLABLE SSANGCIEUC-U-RIEUL
-0xC2E2 0xCB58 # HANGUL SYLLABLE SSANGCIEUC-U-MIEUM
-0xC2E3 0xCB59 # HANGUL SYLLABLE SSANGCIEUC-U-PIEUP
-0xC2E4 0xCB5D # HANGUL SYLLABLE SSANGCIEUC-U-IEUNG
-0xC2E5 0xCB64 # HANGUL SYLLABLE SSANGCIEUC-WEO
-0xC2E6 0xCB78 # HANGUL SYLLABLE SSANGCIEUC-WEO-SSANGSIOS
-0xC2E7 0xCB79 # HANGUL SYLLABLE SSANGCIEUC-WEO-IEUNG
-0xC2E8 0xCB9C # HANGUL SYLLABLE SSANGCIEUC-WI
-0xC2E9 0xCBB8 # HANGUL SYLLABLE SSANGCIEUC-YU
-0xC2EA 0xCBD4 # HANGUL SYLLABLE SSANGCIEUC-EU
-0xC2EB 0xCBE4 # HANGUL SYLLABLE SSANGCIEUC-EU-MIEUM
-0xC2EC 0xCBE7 # HANGUL SYLLABLE SSANGCIEUC-EU-SIOS
-0xC2ED 0xCBE9 # HANGUL SYLLABLE SSANGCIEUC-EU-IEUNG
-0xC2EE 0xCC0C # HANGUL SYLLABLE SSANGCIEUC-I
-0xC2EF 0xCC0D # HANGUL SYLLABLE SSANGCIEUC-I-KIYEOK
-0xC2F0 0xCC10 # HANGUL SYLLABLE SSANGCIEUC-I-NIEUN
-0xC2F1 0xCC14 # HANGUL SYLLABLE SSANGCIEUC-I-RIEUL
-0xC2F2 0xCC1C # HANGUL SYLLABLE SSANGCIEUC-I-MIEUM
-0xC2F3 0xCC1D # HANGUL SYLLABLE SSANGCIEUC-I-PIEUP
-0xC2F4 0xCC21 # HANGUL SYLLABLE SSANGCIEUC-I-IEUNG
-0xC2F5 0xCC22 # HANGUL SYLLABLE SSANGCIEUC-I-CIEUC
-0xC2F6 0xCC27 # HANGUL SYLLABLE SSANGCIEUC-I-HIEUH
-0xC2F7 0xCC28 # HANGUL SYLLABLE CHIEUCH-A
-0xC2F8 0xCC29 # HANGUL SYLLABLE CHIEUCH-A-KIYEOK
-0xC2F9 0xCC2C # HANGUL SYLLABLE CHIEUCH-A-NIEUN
-0xC2FA 0xCC2E # HANGUL SYLLABLE CHIEUCH-A-NIEUNHIEUH
-0xC2FB 0xCC30 # HANGUL SYLLABLE CHIEUCH-A-RIEUL
-0xC2FC 0xCC38 # HANGUL SYLLABLE CHIEUCH-A-MIEUM
-0xC2FD 0xCC39 # HANGUL SYLLABLE CHIEUCH-A-PIEUP
-0xC2FE 0xCC3B # HANGUL SYLLABLE CHIEUCH-A-SIOS
-0xC341 0xD63D # HANGUL SYLLABLE HIEUH-O-NIEUNCIEUC
-0xC342 0xD63E # HANGUL SYLLABLE HIEUH-O-NIEUNHIEUH
-0xC343 0xD63F # HANGUL SYLLABLE HIEUH-O-TIKEUT
-0xC344 0xD641 # HANGUL SYLLABLE HIEUH-O-RIEULKIYEOK
-0xC345 0xD642 # HANGUL SYLLABLE HIEUH-O-RIEULMIEUM
-0xC346 0xD643 # HANGUL SYLLABLE HIEUH-O-RIEULPIEUP
-0xC347 0xD644 # HANGUL SYLLABLE HIEUH-O-RIEULSIOS
-0xC348 0xD646 # HANGUL SYLLABLE HIEUH-O-RIEULPHIEUPH
-0xC349 0xD647 # HANGUL SYLLABLE HIEUH-O-RIEULHIEUH
-0xC34A 0xD64A # HANGUL SYLLABLE HIEUH-O-PIEUPSIOS
-0xC34B 0xD64C # HANGUL SYLLABLE HIEUH-O-SSANGSIOS
-0xC34C 0xD64E # HANGUL SYLLABLE HIEUH-O-CIEUC
-0xC34D 0xD64F # HANGUL SYLLABLE HIEUH-O-CHIEUCH
-0xC34E 0xD650 # HANGUL SYLLABLE HIEUH-O-KHIEUKH
-0xC34F 0xD652 # HANGUL SYLLABLE HIEUH-O-PHIEUPH
-0xC350 0xD653 # HANGUL SYLLABLE HIEUH-O-HIEUH
-0xC351 0xD656 # HANGUL SYLLABLE HIEUH-WA-SSANGKIYEOK
-0xC352 0xD657 # HANGUL SYLLABLE HIEUH-WA-KIYEOKSIOS
-0xC353 0xD659 # HANGUL SYLLABLE HIEUH-WA-NIEUNCIEUC
-0xC354 0xD65A # HANGUL SYLLABLE HIEUH-WA-NIEUNHIEUH
-0xC355 0xD65B # HANGUL SYLLABLE HIEUH-WA-TIKEUT
-0xC356 0xD65D # HANGUL SYLLABLE HIEUH-WA-RIEULKIYEOK
-0xC357 0xD65E # HANGUL SYLLABLE HIEUH-WA-RIEULMIEUM
-0xC358 0xD65F # HANGUL SYLLABLE HIEUH-WA-RIEULPIEUP
-0xC359 0xD660 # HANGUL SYLLABLE HIEUH-WA-RIEULSIOS
-0xC35A 0xD661 # HANGUL SYLLABLE HIEUH-WA-RIEULTHIEUTH
-0xC361 0xD662 # HANGUL SYLLABLE HIEUH-WA-RIEULPHIEUPH
-0xC362 0xD663 # HANGUL SYLLABLE HIEUH-WA-RIEULHIEUH
-0xC363 0xD664 # HANGUL SYLLABLE HIEUH-WA-MIEUM
-0xC364 0xD665 # HANGUL SYLLABLE HIEUH-WA-PIEUP
-0xC365 0xD666 # HANGUL SYLLABLE HIEUH-WA-PIEUPSIOS
-0xC366 0xD668 # HANGUL SYLLABLE HIEUH-WA-SSANGSIOS
-0xC367 0xD66A # HANGUL SYLLABLE HIEUH-WA-CIEUC
-0xC368 0xD66B # HANGUL SYLLABLE HIEUH-WA-CHIEUCH
-0xC369 0xD66C # HANGUL SYLLABLE HIEUH-WA-KHIEUKH
-0xC36A 0xD66D # HANGUL SYLLABLE HIEUH-WA-THIEUTH
-0xC36B 0xD66E # HANGUL SYLLABLE HIEUH-WA-PHIEUPH
-0xC36C 0xD66F # HANGUL SYLLABLE HIEUH-WA-HIEUH
-0xC36D 0xD672 # HANGUL SYLLABLE HIEUH-WAE-SSANGKIYEOK
-0xC36E 0xD673 # HANGUL SYLLABLE HIEUH-WAE-KIYEOKSIOS
-0xC36F 0xD675 # HANGUL SYLLABLE HIEUH-WAE-NIEUNCIEUC
-0xC370 0xD676 # HANGUL SYLLABLE HIEUH-WAE-NIEUNHIEUH
-0xC371 0xD677 # HANGUL SYLLABLE HIEUH-WAE-TIKEUT
-0xC372 0xD678 # HANGUL SYLLABLE HIEUH-WAE-RIEUL
-0xC373 0xD679 # HANGUL SYLLABLE HIEUH-WAE-RIEULKIYEOK
-0xC374 0xD67A # HANGUL SYLLABLE HIEUH-WAE-RIEULMIEUM
-0xC375 0xD67B # HANGUL SYLLABLE HIEUH-WAE-RIEULPIEUP
-0xC376 0xD67C # HANGUL SYLLABLE HIEUH-WAE-RIEULSIOS
-0xC377 0xD67D # HANGUL SYLLABLE HIEUH-WAE-RIEULTHIEUTH
-0xC378 0xD67E # HANGUL SYLLABLE HIEUH-WAE-RIEULPHIEUPH
-0xC379 0xD67F # HANGUL SYLLABLE HIEUH-WAE-RIEULHIEUH
-0xC37A 0xD680 # HANGUL SYLLABLE HIEUH-WAE-MIEUM
-0xC381 0xD681 # HANGUL SYLLABLE HIEUH-WAE-PIEUP
-0xC382 0xD682 # HANGUL SYLLABLE HIEUH-WAE-PIEUPSIOS
-0xC383 0xD684 # HANGUL SYLLABLE HIEUH-WAE-SSANGSIOS
-0xC384 0xD686 # HANGUL SYLLABLE HIEUH-WAE-CIEUC
-0xC385 0xD687 # HANGUL SYLLABLE HIEUH-WAE-CHIEUCH
-0xC386 0xD688 # HANGUL SYLLABLE HIEUH-WAE-KHIEUKH
-0xC387 0xD689 # HANGUL SYLLABLE HIEUH-WAE-THIEUTH
-0xC388 0xD68A # HANGUL SYLLABLE HIEUH-WAE-PHIEUPH
-0xC389 0xD68B # HANGUL SYLLABLE HIEUH-WAE-HIEUH
-0xC38A 0xD68E # HANGUL SYLLABLE HIEUH-OE-SSANGKIYEOK
-0xC38B 0xD68F # HANGUL SYLLABLE HIEUH-OE-KIYEOKSIOS
-0xC38C 0xD691 # HANGUL SYLLABLE HIEUH-OE-NIEUNCIEUC
-0xC38D 0xD692 # HANGUL SYLLABLE HIEUH-OE-NIEUNHIEUH
-0xC38E 0xD693 # HANGUL SYLLABLE HIEUH-OE-TIKEUT
-0xC38F 0xD695 # HANGUL SYLLABLE HIEUH-OE-RIEULKIYEOK
-0xC390 0xD696 # HANGUL SYLLABLE HIEUH-OE-RIEULMIEUM
-0xC391 0xD697 # HANGUL SYLLABLE HIEUH-OE-RIEULPIEUP
-0xC392 0xD698 # HANGUL SYLLABLE HIEUH-OE-RIEULSIOS
-0xC393 0xD699 # HANGUL SYLLABLE HIEUH-OE-RIEULTHIEUTH
-0xC394 0xD69A # HANGUL SYLLABLE HIEUH-OE-RIEULPHIEUPH
-0xC395 0xD69B # HANGUL SYLLABLE HIEUH-OE-RIEULHIEUH
-0xC396 0xD69C # HANGUL SYLLABLE HIEUH-OE-MIEUM
-0xC397 0xD69E # HANGUL SYLLABLE HIEUH-OE-PIEUPSIOS
-0xC398 0xD6A0 # HANGUL SYLLABLE HIEUH-OE-SSANGSIOS
-0xC399 0xD6A2 # HANGUL SYLLABLE HIEUH-OE-CIEUC
-0xC39A 0xD6A3 # HANGUL SYLLABLE HIEUH-OE-CHIEUCH
-0xC39B 0xD6A4 # HANGUL SYLLABLE HIEUH-OE-KHIEUKH
-0xC39C 0xD6A5 # HANGUL SYLLABLE HIEUH-OE-THIEUTH
-0xC39D 0xD6A6 # HANGUL SYLLABLE HIEUH-OE-PHIEUPH
-0xC39E 0xD6A7 # HANGUL SYLLABLE HIEUH-OE-HIEUH
-0xC39F 0xD6A9 # HANGUL SYLLABLE HIEUH-YO-KIYEOK
-0xC3A0 0xD6AA # HANGUL SYLLABLE HIEUH-YO-SSANGKIYEOK
-0xC3A1 0xCC3C # HANGUL SYLLABLE CHIEUCH-A-SSANGSIOS
-0xC3A2 0xCC3D # HANGUL SYLLABLE CHIEUCH-A-IEUNG
-0xC3A3 0xCC3E # HANGUL SYLLABLE CHIEUCH-A-CIEUC
-0xC3A4 0xCC44 # HANGUL SYLLABLE CHIEUCH-AE
-0xC3A5 0xCC45 # HANGUL SYLLABLE CHIEUCH-AE-KIYEOK
-0xC3A6 0xCC48 # HANGUL SYLLABLE CHIEUCH-AE-NIEUN
-0xC3A7 0xCC4C # HANGUL SYLLABLE CHIEUCH-AE-RIEUL
-0xC3A8 0xCC54 # HANGUL SYLLABLE CHIEUCH-AE-MIEUM
-0xC3A9 0xCC55 # HANGUL SYLLABLE CHIEUCH-AE-PIEUP
-0xC3AA 0xCC57 # HANGUL SYLLABLE CHIEUCH-AE-SIOS
-0xC3AB 0xCC58 # HANGUL SYLLABLE CHIEUCH-AE-SSANGSIOS
-0xC3AC 0xCC59 # HANGUL SYLLABLE CHIEUCH-AE-IEUNG
-0xC3AD 0xCC60 # HANGUL SYLLABLE CHIEUCH-YA
-0xC3AE 0xCC64 # HANGUL SYLLABLE CHIEUCH-YA-NIEUN
-0xC3AF 0xCC66 # HANGUL SYLLABLE CHIEUCH-YA-NIEUNHIEUH
-0xC3B0 0xCC68 # HANGUL SYLLABLE CHIEUCH-YA-RIEUL
-0xC3B1 0xCC70 # HANGUL SYLLABLE CHIEUCH-YA-MIEUM
-0xC3B2 0xCC75 # HANGUL SYLLABLE CHIEUCH-YA-IEUNG
-0xC3B3 0xCC98 # HANGUL SYLLABLE CHIEUCH-EO
-0xC3B4 0xCC99 # HANGUL SYLLABLE CHIEUCH-EO-KIYEOK
-0xC3B5 0xCC9C # HANGUL SYLLABLE CHIEUCH-EO-NIEUN
-0xC3B6 0xCCA0 # HANGUL SYLLABLE CHIEUCH-EO-RIEUL
-0xC3B7 0xCCA8 # HANGUL SYLLABLE CHIEUCH-EO-MIEUM
-0xC3B8 0xCCA9 # HANGUL SYLLABLE CHIEUCH-EO-PIEUP
-0xC3B9 0xCCAB # HANGUL SYLLABLE CHIEUCH-EO-SIOS
-0xC3BA 0xCCAC # HANGUL SYLLABLE CHIEUCH-EO-SSANGSIOS
-0xC3BB 0xCCAD # HANGUL SYLLABLE CHIEUCH-EO-IEUNG
-0xC3BC 0xCCB4 # HANGUL SYLLABLE CHIEUCH-E
-0xC3BD 0xCCB5 # HANGUL SYLLABLE CHIEUCH-E-KIYEOK
-0xC3BE 0xCCB8 # HANGUL SYLLABLE CHIEUCH-E-NIEUN
-0xC3BF 0xCCBC # HANGUL SYLLABLE CHIEUCH-E-RIEUL
-0xC3C0 0xCCC4 # HANGUL SYLLABLE CHIEUCH-E-MIEUM
-0xC3C1 0xCCC5 # HANGUL SYLLABLE CHIEUCH-E-PIEUP
-0xC3C2 0xCCC7 # HANGUL SYLLABLE CHIEUCH-E-SIOS
-0xC3C3 0xCCC9 # HANGUL SYLLABLE CHIEUCH-E-IEUNG
-0xC3C4 0xCCD0 # HANGUL SYLLABLE CHIEUCH-YEO
-0xC3C5 0xCCD4 # HANGUL SYLLABLE CHIEUCH-YEO-NIEUN
-0xC3C6 0xCCE4 # HANGUL SYLLABLE CHIEUCH-YEO-SSANGSIOS
-0xC3C7 0xCCEC # HANGUL SYLLABLE CHIEUCH-YE
-0xC3C8 0xCCF0 # HANGUL SYLLABLE CHIEUCH-YE-NIEUN
-0xC3C9 0xCD01 # HANGUL SYLLABLE CHIEUCH-YE-IEUNG
-0xC3CA 0xCD08 # HANGUL SYLLABLE CHIEUCH-O
-0xC3CB 0xCD09 # HANGUL SYLLABLE CHIEUCH-O-KIYEOK
-0xC3CC 0xCD0C # HANGUL SYLLABLE CHIEUCH-O-NIEUN
-0xC3CD 0xCD10 # HANGUL SYLLABLE CHIEUCH-O-RIEUL
-0xC3CE 0xCD18 # HANGUL SYLLABLE CHIEUCH-O-MIEUM
-0xC3CF 0xCD19 # HANGUL SYLLABLE CHIEUCH-O-PIEUP
-0xC3D0 0xCD1B # HANGUL SYLLABLE CHIEUCH-O-SIOS
-0xC3D1 0xCD1D # HANGUL SYLLABLE CHIEUCH-O-IEUNG
-0xC3D2 0xCD24 # HANGUL SYLLABLE CHIEUCH-WA
-0xC3D3 0xCD28 # HANGUL SYLLABLE CHIEUCH-WA-NIEUN
-0xC3D4 0xCD2C # HANGUL SYLLABLE CHIEUCH-WA-RIEUL
-0xC3D5 0xCD39 # HANGUL SYLLABLE CHIEUCH-WA-IEUNG
-0xC3D6 0xCD5C # HANGUL SYLLABLE CHIEUCH-OE
-0xC3D7 0xCD60 # HANGUL SYLLABLE CHIEUCH-OE-NIEUN
-0xC3D8 0xCD64 # HANGUL SYLLABLE CHIEUCH-OE-RIEUL
-0xC3D9 0xCD6C # HANGUL SYLLABLE CHIEUCH-OE-MIEUM
-0xC3DA 0xCD6D # HANGUL SYLLABLE CHIEUCH-OE-PIEUP
-0xC3DB 0xCD6F # HANGUL SYLLABLE CHIEUCH-OE-SIOS
-0xC3DC 0xCD71 # HANGUL SYLLABLE CHIEUCH-OE-IEUNG
-0xC3DD 0xCD78 # HANGUL SYLLABLE CHIEUCH-YO
-0xC3DE 0xCD88 # HANGUL SYLLABLE CHIEUCH-YO-MIEUM
-0xC3DF 0xCD94 # HANGUL SYLLABLE CHIEUCH-U
-0xC3E0 0xCD95 # HANGUL SYLLABLE CHIEUCH-U-KIYEOK
-0xC3E1 0xCD98 # HANGUL SYLLABLE CHIEUCH-U-NIEUN
-0xC3E2 0xCD9C # HANGUL SYLLABLE CHIEUCH-U-RIEUL
-0xC3E3 0xCDA4 # HANGUL SYLLABLE CHIEUCH-U-MIEUM
-0xC3E4 0xCDA5 # HANGUL SYLLABLE CHIEUCH-U-PIEUP
-0xC3E5 0xCDA7 # HANGUL SYLLABLE CHIEUCH-U-SIOS
-0xC3E6 0xCDA9 # HANGUL SYLLABLE CHIEUCH-U-IEUNG
-0xC3E7 0xCDB0 # HANGUL SYLLABLE CHIEUCH-WEO
-0xC3E8 0xCDC4 # HANGUL SYLLABLE CHIEUCH-WEO-SSANGSIOS
-0xC3E9 0xCDCC # HANGUL SYLLABLE CHIEUCH-WE
-0xC3EA 0xCDD0 # HANGUL SYLLABLE CHIEUCH-WE-NIEUN
-0xC3EB 0xCDE8 # HANGUL SYLLABLE CHIEUCH-WI
-0xC3EC 0xCDEC # HANGUL SYLLABLE CHIEUCH-WI-NIEUN
-0xC3ED 0xCDF0 # HANGUL SYLLABLE CHIEUCH-WI-RIEUL
-0xC3EE 0xCDF8 # HANGUL SYLLABLE CHIEUCH-WI-MIEUM
-0xC3EF 0xCDF9 # HANGUL SYLLABLE CHIEUCH-WI-PIEUP
-0xC3F0 0xCDFB # HANGUL SYLLABLE CHIEUCH-WI-SIOS
-0xC3F1 0xCDFD # HANGUL SYLLABLE CHIEUCH-WI-IEUNG
-0xC3F2 0xCE04 # HANGUL SYLLABLE CHIEUCH-YU
-0xC3F3 0xCE08 # HANGUL SYLLABLE CHIEUCH-YU-NIEUN
-0xC3F4 0xCE0C # HANGUL SYLLABLE CHIEUCH-YU-RIEUL
-0xC3F5 0xCE14 # HANGUL SYLLABLE CHIEUCH-YU-MIEUM
-0xC3F6 0xCE19 # HANGUL SYLLABLE CHIEUCH-YU-IEUNG
-0xC3F7 0xCE20 # HANGUL SYLLABLE CHIEUCH-EU
-0xC3F8 0xCE21 # HANGUL SYLLABLE CHIEUCH-EU-KIYEOK
-0xC3F9 0xCE24 # HANGUL SYLLABLE CHIEUCH-EU-NIEUN
-0xC3FA 0xCE28 # HANGUL SYLLABLE CHIEUCH-EU-RIEUL
-0xC3FB 0xCE30 # HANGUL SYLLABLE CHIEUCH-EU-MIEUM
-0xC3FC 0xCE31 # HANGUL SYLLABLE CHIEUCH-EU-PIEUP
-0xC3FD 0xCE33 # HANGUL SYLLABLE CHIEUCH-EU-SIOS
-0xC3FE 0xCE35 # HANGUL SYLLABLE CHIEUCH-EU-IEUNG
-0xC441 0xD6AB # HANGUL SYLLABLE HIEUH-YO-KIYEOKSIOS
-0xC442 0xD6AD # HANGUL SYLLABLE HIEUH-YO-NIEUNCIEUC
-0xC443 0xD6AE # HANGUL SYLLABLE HIEUH-YO-NIEUNHIEUH
-0xC444 0xD6AF # HANGUL SYLLABLE HIEUH-YO-TIKEUT
-0xC445 0xD6B1 # HANGUL SYLLABLE HIEUH-YO-RIEULKIYEOK
-0xC446 0xD6B2 # HANGUL SYLLABLE HIEUH-YO-RIEULMIEUM
-0xC447 0xD6B3 # HANGUL SYLLABLE HIEUH-YO-RIEULPIEUP
-0xC448 0xD6B4 # HANGUL SYLLABLE HIEUH-YO-RIEULSIOS
-0xC449 0xD6B5 # HANGUL SYLLABLE HIEUH-YO-RIEULTHIEUTH
-0xC44A 0xD6B6 # HANGUL SYLLABLE HIEUH-YO-RIEULPHIEUPH
-0xC44B 0xD6B7 # HANGUL SYLLABLE HIEUH-YO-RIEULHIEUH
-0xC44C 0xD6B8 # HANGUL SYLLABLE HIEUH-YO-MIEUM
-0xC44D 0xD6BA # HANGUL SYLLABLE HIEUH-YO-PIEUPSIOS
-0xC44E 0xD6BC # HANGUL SYLLABLE HIEUH-YO-SSANGSIOS
-0xC44F 0xD6BD # HANGUL SYLLABLE HIEUH-YO-IEUNG
-0xC450 0xD6BE # HANGUL SYLLABLE HIEUH-YO-CIEUC
-0xC451 0xD6BF # HANGUL SYLLABLE HIEUH-YO-CHIEUCH
-0xC452 0xD6C0 # HANGUL SYLLABLE HIEUH-YO-KHIEUKH
-0xC453 0xD6C1 # HANGUL SYLLABLE HIEUH-YO-THIEUTH
-0xC454 0xD6C2 # HANGUL SYLLABLE HIEUH-YO-PHIEUPH
-0xC455 0xD6C3 # HANGUL SYLLABLE HIEUH-YO-HIEUH
-0xC456 0xD6C6 # HANGUL SYLLABLE HIEUH-U-SSANGKIYEOK
-0xC457 0xD6C7 # HANGUL SYLLABLE HIEUH-U-KIYEOKSIOS
-0xC458 0xD6C9 # HANGUL SYLLABLE HIEUH-U-NIEUNCIEUC
-0xC459 0xD6CA # HANGUL SYLLABLE HIEUH-U-NIEUNHIEUH
-0xC45A 0xD6CB # HANGUL SYLLABLE HIEUH-U-TIKEUT
-0xC461 0xD6CD # HANGUL SYLLABLE HIEUH-U-RIEULKIYEOK
-0xC462 0xD6CE # HANGUL SYLLABLE HIEUH-U-RIEULMIEUM
-0xC463 0xD6CF # HANGUL SYLLABLE HIEUH-U-RIEULPIEUP
-0xC464 0xD6D0 # HANGUL SYLLABLE HIEUH-U-RIEULSIOS
-0xC465 0xD6D2 # HANGUL SYLLABLE HIEUH-U-RIEULPHIEUPH
-0xC466 0xD6D3 # HANGUL SYLLABLE HIEUH-U-RIEULHIEUH
-0xC467 0xD6D5 # HANGUL SYLLABLE HIEUH-U-PIEUP
-0xC468 0xD6D6 # HANGUL SYLLABLE HIEUH-U-PIEUPSIOS
-0xC469 0xD6D8 # HANGUL SYLLABLE HIEUH-U-SSANGSIOS
-0xC46A 0xD6DA # HANGUL SYLLABLE HIEUH-U-CIEUC
-0xC46B 0xD6DB # HANGUL SYLLABLE HIEUH-U-CHIEUCH
-0xC46C 0xD6DC # HANGUL SYLLABLE HIEUH-U-KHIEUKH
-0xC46D 0xD6DD # HANGUL SYLLABLE HIEUH-U-THIEUTH
-0xC46E 0xD6DE # HANGUL SYLLABLE HIEUH-U-PHIEUPH
-0xC46F 0xD6DF # HANGUL SYLLABLE HIEUH-U-HIEUH
-0xC470 0xD6E1 # HANGUL SYLLABLE HIEUH-WEO-KIYEOK
-0xC471 0xD6E2 # HANGUL SYLLABLE HIEUH-WEO-SSANGKIYEOK
-0xC472 0xD6E3 # HANGUL SYLLABLE HIEUH-WEO-KIYEOKSIOS
-0xC473 0xD6E5 # HANGUL SYLLABLE HIEUH-WEO-NIEUNCIEUC
-0xC474 0xD6E6 # HANGUL SYLLABLE HIEUH-WEO-NIEUNHIEUH
-0xC475 0xD6E7 # HANGUL SYLLABLE HIEUH-WEO-TIKEUT
-0xC476 0xD6E9 # HANGUL SYLLABLE HIEUH-WEO-RIEULKIYEOK
-0xC477 0xD6EA # HANGUL SYLLABLE HIEUH-WEO-RIEULMIEUM
-0xC478 0xD6EB # HANGUL SYLLABLE HIEUH-WEO-RIEULPIEUP
-0xC479 0xD6EC # HANGUL SYLLABLE HIEUH-WEO-RIEULSIOS
-0xC47A 0xD6ED # HANGUL SYLLABLE HIEUH-WEO-RIEULTHIEUTH
-0xC481 0xD6EE # HANGUL SYLLABLE HIEUH-WEO-RIEULPHIEUPH
-0xC482 0xD6EF # HANGUL SYLLABLE HIEUH-WEO-RIEULHIEUH
-0xC483 0xD6F1 # HANGUL SYLLABLE HIEUH-WEO-PIEUP
-0xC484 0xD6F2 # HANGUL SYLLABLE HIEUH-WEO-PIEUPSIOS
-0xC485 0xD6F3 # HANGUL SYLLABLE HIEUH-WEO-SIOS
-0xC486 0xD6F4 # HANGUL SYLLABLE HIEUH-WEO-SSANGSIOS
-0xC487 0xD6F6 # HANGUL SYLLABLE HIEUH-WEO-CIEUC
-0xC488 0xD6F7 # HANGUL SYLLABLE HIEUH-WEO-CHIEUCH
-0xC489 0xD6F8 # HANGUL SYLLABLE HIEUH-WEO-KHIEUKH
-0xC48A 0xD6F9 # HANGUL SYLLABLE HIEUH-WEO-THIEUTH
-0xC48B 0xD6FA # HANGUL SYLLABLE HIEUH-WEO-PHIEUPH
-0xC48C 0xD6FB # HANGUL SYLLABLE HIEUH-WEO-HIEUH
-0xC48D 0xD6FE # HANGUL SYLLABLE HIEUH-WE-SSANGKIYEOK
-0xC48E 0xD6FF # HANGUL SYLLABLE HIEUH-WE-KIYEOKSIOS
-0xC48F 0xD701 # HANGUL SYLLABLE HIEUH-WE-NIEUNCIEUC
-0xC490 0xD702 # HANGUL SYLLABLE HIEUH-WE-NIEUNHIEUH
-0xC491 0xD703 # HANGUL SYLLABLE HIEUH-WE-TIKEUT
-0xC492 0xD705 # HANGUL SYLLABLE HIEUH-WE-RIEULKIYEOK
-0xC493 0xD706 # HANGUL SYLLABLE HIEUH-WE-RIEULMIEUM
-0xC494 0xD707 # HANGUL SYLLABLE HIEUH-WE-RIEULPIEUP
-0xC495 0xD708 # HANGUL SYLLABLE HIEUH-WE-RIEULSIOS
-0xC496 0xD709 # HANGUL SYLLABLE HIEUH-WE-RIEULTHIEUTH
-0xC497 0xD70A # HANGUL SYLLABLE HIEUH-WE-RIEULPHIEUPH
-0xC498 0xD70B # HANGUL SYLLABLE HIEUH-WE-RIEULHIEUH
-0xC499 0xD70C # HANGUL SYLLABLE HIEUH-WE-MIEUM
-0xC49A 0xD70D # HANGUL SYLLABLE HIEUH-WE-PIEUP
-0xC49B 0xD70E # HANGUL SYLLABLE HIEUH-WE-PIEUPSIOS
-0xC49C 0xD70F # HANGUL SYLLABLE HIEUH-WE-SIOS
-0xC49D 0xD710 # HANGUL SYLLABLE HIEUH-WE-SSANGSIOS
-0xC49E 0xD712 # HANGUL SYLLABLE HIEUH-WE-CIEUC
-0xC49F 0xD713 # HANGUL SYLLABLE HIEUH-WE-CHIEUCH
-0xC4A0 0xD714 # HANGUL SYLLABLE HIEUH-WE-KHIEUKH
-0xC4A1 0xCE58 # HANGUL SYLLABLE CHIEUCH-I
-0xC4A2 0xCE59 # HANGUL SYLLABLE CHIEUCH-I-KIYEOK
-0xC4A3 0xCE5C # HANGUL SYLLABLE CHIEUCH-I-NIEUN
-0xC4A4 0xCE5F # HANGUL SYLLABLE CHIEUCH-I-TIKEUT
-0xC4A5 0xCE60 # HANGUL SYLLABLE CHIEUCH-I-RIEUL
-0xC4A6 0xCE61 # HANGUL SYLLABLE CHIEUCH-I-RIEULKIYEOK
-0xC4A7 0xCE68 # HANGUL SYLLABLE CHIEUCH-I-MIEUM
-0xC4A8 0xCE69 # HANGUL SYLLABLE CHIEUCH-I-PIEUP
-0xC4A9 0xCE6B # HANGUL SYLLABLE CHIEUCH-I-SIOS
-0xC4AA 0xCE6D # HANGUL SYLLABLE CHIEUCH-I-IEUNG
-0xC4AB 0xCE74 # HANGUL SYLLABLE KHIEUKH-A
-0xC4AC 0xCE75 # HANGUL SYLLABLE KHIEUKH-A-KIYEOK
-0xC4AD 0xCE78 # HANGUL SYLLABLE KHIEUKH-A-NIEUN
-0xC4AE 0xCE7C # HANGUL SYLLABLE KHIEUKH-A-RIEUL
-0xC4AF 0xCE84 # HANGUL SYLLABLE KHIEUKH-A-MIEUM
-0xC4B0 0xCE85 # HANGUL SYLLABLE KHIEUKH-A-PIEUP
-0xC4B1 0xCE87 # HANGUL SYLLABLE KHIEUKH-A-SIOS
-0xC4B2 0xCE89 # HANGUL SYLLABLE KHIEUKH-A-IEUNG
-0xC4B3 0xCE90 # HANGUL SYLLABLE KHIEUKH-AE
-0xC4B4 0xCE91 # HANGUL SYLLABLE KHIEUKH-AE-KIYEOK
-0xC4B5 0xCE94 # HANGUL SYLLABLE KHIEUKH-AE-NIEUN
-0xC4B6 0xCE98 # HANGUL SYLLABLE KHIEUKH-AE-RIEUL
-0xC4B7 0xCEA0 # HANGUL SYLLABLE KHIEUKH-AE-MIEUM
-0xC4B8 0xCEA1 # HANGUL SYLLABLE KHIEUKH-AE-PIEUP
-0xC4B9 0xCEA3 # HANGUL SYLLABLE KHIEUKH-AE-SIOS
-0xC4BA 0xCEA4 # HANGUL SYLLABLE KHIEUKH-AE-SSANGSIOS
-0xC4BB 0xCEA5 # HANGUL SYLLABLE KHIEUKH-AE-IEUNG
-0xC4BC 0xCEAC # HANGUL SYLLABLE KHIEUKH-YA
-0xC4BD 0xCEAD # HANGUL SYLLABLE KHIEUKH-YA-KIYEOK
-0xC4BE 0xCEC1 # HANGUL SYLLABLE KHIEUKH-YA-IEUNG
-0xC4BF 0xCEE4 # HANGUL SYLLABLE KHIEUKH-EO
-0xC4C0 0xCEE5 # HANGUL SYLLABLE KHIEUKH-EO-KIYEOK
-0xC4C1 0xCEE8 # HANGUL SYLLABLE KHIEUKH-EO-NIEUN
-0xC4C2 0xCEEB # HANGUL SYLLABLE KHIEUKH-EO-TIKEUT
-0xC4C3 0xCEEC # HANGUL SYLLABLE KHIEUKH-EO-RIEUL
-0xC4C4 0xCEF4 # HANGUL SYLLABLE KHIEUKH-EO-MIEUM
-0xC4C5 0xCEF5 # HANGUL SYLLABLE KHIEUKH-EO-PIEUP
-0xC4C6 0xCEF7 # HANGUL SYLLABLE KHIEUKH-EO-SIOS
-0xC4C7 0xCEF8 # HANGUL SYLLABLE KHIEUKH-EO-SSANGSIOS
-0xC4C8 0xCEF9 # HANGUL SYLLABLE KHIEUKH-EO-IEUNG
-0xC4C9 0xCF00 # HANGUL SYLLABLE KHIEUKH-E
-0xC4CA 0xCF01 # HANGUL SYLLABLE KHIEUKH-E-KIYEOK
-0xC4CB 0xCF04 # HANGUL SYLLABLE KHIEUKH-E-NIEUN
-0xC4CC 0xCF08 # HANGUL SYLLABLE KHIEUKH-E-RIEUL
-0xC4CD 0xCF10 # HANGUL SYLLABLE KHIEUKH-E-MIEUM
-0xC4CE 0xCF11 # HANGUL SYLLABLE KHIEUKH-E-PIEUP
-0xC4CF 0xCF13 # HANGUL SYLLABLE KHIEUKH-E-SIOS
-0xC4D0 0xCF15 # HANGUL SYLLABLE KHIEUKH-E-IEUNG
-0xC4D1 0xCF1C # HANGUL SYLLABLE KHIEUKH-YEO
-0xC4D2 0xCF20 # HANGUL SYLLABLE KHIEUKH-YEO-NIEUN
-0xC4D3 0xCF24 # HANGUL SYLLABLE KHIEUKH-YEO-RIEUL
-0xC4D4 0xCF2C # HANGUL SYLLABLE KHIEUKH-YEO-MIEUM
-0xC4D5 0xCF2D # HANGUL SYLLABLE KHIEUKH-YEO-PIEUP
-0xC4D6 0xCF2F # HANGUL SYLLABLE KHIEUKH-YEO-SIOS
-0xC4D7 0xCF30 # HANGUL SYLLABLE KHIEUKH-YEO-SSANGSIOS
-0xC4D8 0xCF31 # HANGUL SYLLABLE KHIEUKH-YEO-IEUNG
-0xC4D9 0xCF38 # HANGUL SYLLABLE KHIEUKH-YE
-0xC4DA 0xCF54 # HANGUL SYLLABLE KHIEUKH-O
-0xC4DB 0xCF55 # HANGUL SYLLABLE KHIEUKH-O-KIYEOK
-0xC4DC 0xCF58 # HANGUL SYLLABLE KHIEUKH-O-NIEUN
-0xC4DD 0xCF5C # HANGUL SYLLABLE KHIEUKH-O-RIEUL
-0xC4DE 0xCF64 # HANGUL SYLLABLE KHIEUKH-O-MIEUM
-0xC4DF 0xCF65 # HANGUL SYLLABLE KHIEUKH-O-PIEUP
-0xC4E0 0xCF67 # HANGUL SYLLABLE KHIEUKH-O-SIOS
-0xC4E1 0xCF69 # HANGUL SYLLABLE KHIEUKH-O-IEUNG
-0xC4E2 0xCF70 # HANGUL SYLLABLE KHIEUKH-WA
-0xC4E3 0xCF71 # HANGUL SYLLABLE KHIEUKH-WA-KIYEOK
-0xC4E4 0xCF74 # HANGUL SYLLABLE KHIEUKH-WA-NIEUN
-0xC4E5 0xCF78 # HANGUL SYLLABLE KHIEUKH-WA-RIEUL
-0xC4E6 0xCF80 # HANGUL SYLLABLE KHIEUKH-WA-MIEUM
-0xC4E7 0xCF85 # HANGUL SYLLABLE KHIEUKH-WA-IEUNG
-0xC4E8 0xCF8C # HANGUL SYLLABLE KHIEUKH-WAE
-0xC4E9 0xCFA1 # HANGUL SYLLABLE KHIEUKH-WAE-IEUNG
-0xC4EA 0xCFA8 # HANGUL SYLLABLE KHIEUKH-OE
-0xC4EB 0xCFB0 # HANGUL SYLLABLE KHIEUKH-OE-RIEUL
-0xC4EC 0xCFC4 # HANGUL SYLLABLE KHIEUKH-YO
-0xC4ED 0xCFE0 # HANGUL SYLLABLE KHIEUKH-U
-0xC4EE 0xCFE1 # HANGUL SYLLABLE KHIEUKH-U-KIYEOK
-0xC4EF 0xCFE4 # HANGUL SYLLABLE KHIEUKH-U-NIEUN
-0xC4F0 0xCFE8 # HANGUL SYLLABLE KHIEUKH-U-RIEUL
-0xC4F1 0xCFF0 # HANGUL SYLLABLE KHIEUKH-U-MIEUM
-0xC4F2 0xCFF1 # HANGUL SYLLABLE KHIEUKH-U-PIEUP
-0xC4F3 0xCFF3 # HANGUL SYLLABLE KHIEUKH-U-SIOS
-0xC4F4 0xCFF5 # HANGUL SYLLABLE KHIEUKH-U-IEUNG
-0xC4F5 0xCFFC # HANGUL SYLLABLE KHIEUKH-WEO
-0xC4F6 0xD000 # HANGUL SYLLABLE KHIEUKH-WEO-NIEUN
-0xC4F7 0xD004 # HANGUL SYLLABLE KHIEUKH-WEO-RIEUL
-0xC4F8 0xD011 # HANGUL SYLLABLE KHIEUKH-WEO-IEUNG
-0xC4F9 0xD018 # HANGUL SYLLABLE KHIEUKH-WE
-0xC4FA 0xD02D # HANGUL SYLLABLE KHIEUKH-WE-IEUNG
-0xC4FB 0xD034 # HANGUL SYLLABLE KHIEUKH-WI
-0xC4FC 0xD035 # HANGUL SYLLABLE KHIEUKH-WI-KIYEOK
-0xC4FD 0xD038 # HANGUL SYLLABLE KHIEUKH-WI-NIEUN
-0xC4FE 0xD03C # HANGUL SYLLABLE KHIEUKH-WI-RIEUL
-0xC541 0xD715 # HANGUL SYLLABLE HIEUH-WE-THIEUTH
-0xC542 0xD716 # HANGUL SYLLABLE HIEUH-WE-PHIEUPH
-0xC543 0xD717 # HANGUL SYLLABLE HIEUH-WE-HIEUH
-0xC544 0xD71A # HANGUL SYLLABLE HIEUH-WI-SSANGKIYEOK
-0xC545 0xD71B # HANGUL SYLLABLE HIEUH-WI-KIYEOKSIOS
-0xC546 0xD71D # HANGUL SYLLABLE HIEUH-WI-NIEUNCIEUC
-0xC547 0xD71E # HANGUL SYLLABLE HIEUH-WI-NIEUNHIEUH
-0xC548 0xD71F # HANGUL SYLLABLE HIEUH-WI-TIKEUT
-0xC549 0xD721 # HANGUL SYLLABLE HIEUH-WI-RIEULKIYEOK
-0xC54A 0xD722 # HANGUL SYLLABLE HIEUH-WI-RIEULMIEUM
-0xC54B 0xD723 # HANGUL SYLLABLE HIEUH-WI-RIEULPIEUP
-0xC54C 0xD724 # HANGUL SYLLABLE HIEUH-WI-RIEULSIOS
-0xC54D 0xD725 # HANGUL SYLLABLE HIEUH-WI-RIEULTHIEUTH
-0xC54E 0xD726 # HANGUL SYLLABLE HIEUH-WI-RIEULPHIEUPH
-0xC54F 0xD727 # HANGUL SYLLABLE HIEUH-WI-RIEULHIEUH
-0xC550 0xD72A # HANGUL SYLLABLE HIEUH-WI-PIEUPSIOS
-0xC551 0xD72C # HANGUL SYLLABLE HIEUH-WI-SSANGSIOS
-0xC552 0xD72E # HANGUL SYLLABLE HIEUH-WI-CIEUC
-0xC553 0xD72F # HANGUL SYLLABLE HIEUH-WI-CHIEUCH
-0xC554 0xD730 # HANGUL SYLLABLE HIEUH-WI-KHIEUKH
-0xC555 0xD731 # HANGUL SYLLABLE HIEUH-WI-THIEUTH
-0xC556 0xD732 # HANGUL SYLLABLE HIEUH-WI-PHIEUPH
-0xC557 0xD733 # HANGUL SYLLABLE HIEUH-WI-HIEUH
-0xC558 0xD736 # HANGUL SYLLABLE HIEUH-YU-SSANGKIYEOK
-0xC559 0xD737 # HANGUL SYLLABLE HIEUH-YU-KIYEOKSIOS
-0xC55A 0xD739 # HANGUL SYLLABLE HIEUH-YU-NIEUNCIEUC
-0xC561 0xD73A # HANGUL SYLLABLE HIEUH-YU-NIEUNHIEUH
-0xC562 0xD73B # HANGUL SYLLABLE HIEUH-YU-TIKEUT
-0xC563 0xD73D # HANGUL SYLLABLE HIEUH-YU-RIEULKIYEOK
-0xC564 0xD73E # HANGUL SYLLABLE HIEUH-YU-RIEULMIEUM
-0xC565 0xD73F # HANGUL SYLLABLE HIEUH-YU-RIEULPIEUP
-0xC566 0xD740 # HANGUL SYLLABLE HIEUH-YU-RIEULSIOS
-0xC567 0xD741 # HANGUL SYLLABLE HIEUH-YU-RIEULTHIEUTH
-0xC568 0xD742 # HANGUL SYLLABLE HIEUH-YU-RIEULPHIEUPH
-0xC569 0xD743 # HANGUL SYLLABLE HIEUH-YU-RIEULHIEUH
-0xC56A 0xD745 # HANGUL SYLLABLE HIEUH-YU-PIEUP
-0xC56B 0xD746 # HANGUL SYLLABLE HIEUH-YU-PIEUPSIOS
-0xC56C 0xD748 # HANGUL SYLLABLE HIEUH-YU-SSANGSIOS
-0xC56D 0xD74A # HANGUL SYLLABLE HIEUH-YU-CIEUC
-0xC56E 0xD74B # HANGUL SYLLABLE HIEUH-YU-CHIEUCH
-0xC56F 0xD74C # HANGUL SYLLABLE HIEUH-YU-KHIEUKH
-0xC570 0xD74D # HANGUL SYLLABLE HIEUH-YU-THIEUTH
-0xC571 0xD74E # HANGUL SYLLABLE HIEUH-YU-PHIEUPH
-0xC572 0xD74F # HANGUL SYLLABLE HIEUH-YU-HIEUH
-0xC573 0xD752 # HANGUL SYLLABLE HIEUH-EU-SSANGKIYEOK
-0xC574 0xD753 # HANGUL SYLLABLE HIEUH-EU-KIYEOKSIOS
-0xC575 0xD755 # HANGUL SYLLABLE HIEUH-EU-NIEUNCIEUC
-0xC576 0xD75A # HANGUL SYLLABLE HIEUH-EU-RIEULMIEUM
-0xC577 0xD75B # HANGUL SYLLABLE HIEUH-EU-RIEULPIEUP
-0xC578 0xD75C # HANGUL SYLLABLE HIEUH-EU-RIEULSIOS
-0xC579 0xD75D # HANGUL SYLLABLE HIEUH-EU-RIEULTHIEUTH
-0xC57A 0xD75E # HANGUL SYLLABLE HIEUH-EU-RIEULPHIEUPH
-0xC581 0xD75F # HANGUL SYLLABLE HIEUH-EU-RIEULHIEUH
-0xC582 0xD762 # HANGUL SYLLABLE HIEUH-EU-PIEUPSIOS
-0xC583 0xD764 # HANGUL SYLLABLE HIEUH-EU-SSANGSIOS
-0xC584 0xD766 # HANGUL SYLLABLE HIEUH-EU-CIEUC
-0xC585 0xD767 # HANGUL SYLLABLE HIEUH-EU-CHIEUCH
-0xC586 0xD768 # HANGUL SYLLABLE HIEUH-EU-KHIEUKH
-0xC587 0xD76A # HANGUL SYLLABLE HIEUH-EU-PHIEUPH
-0xC588 0xD76B # HANGUL SYLLABLE HIEUH-EU-HIEUH
-0xC589 0xD76D # HANGUL SYLLABLE HIEUH-YI-KIYEOK
-0xC58A 0xD76E # HANGUL SYLLABLE HIEUH-YI-SSANGKIYEOK
-0xC58B 0xD76F # HANGUL SYLLABLE HIEUH-YI-KIYEOKSIOS
-0xC58C 0xD771 # HANGUL SYLLABLE HIEUH-YI-NIEUNCIEUC
-0xC58D 0xD772 # HANGUL SYLLABLE HIEUH-YI-NIEUNHIEUH
-0xC58E 0xD773 # HANGUL SYLLABLE HIEUH-YI-TIKEUT
-0xC58F 0xD775 # HANGUL SYLLABLE HIEUH-YI-RIEULKIYEOK
-0xC590 0xD776 # HANGUL SYLLABLE HIEUH-YI-RIEULMIEUM
-0xC591 0xD777 # HANGUL SYLLABLE HIEUH-YI-RIEULPIEUP
-0xC592 0xD778 # HANGUL SYLLABLE HIEUH-YI-RIEULSIOS
-0xC593 0xD779 # HANGUL SYLLABLE HIEUH-YI-RIEULTHIEUTH
-0xC594 0xD77A # HANGUL SYLLABLE HIEUH-YI-RIEULPHIEUPH
-0xC595 0xD77B # HANGUL SYLLABLE HIEUH-YI-RIEULHIEUH
-0xC596 0xD77E # HANGUL SYLLABLE HIEUH-YI-PIEUPSIOS
-0xC597 0xD77F # HANGUL SYLLABLE HIEUH-YI-SIOS
-0xC598 0xD780 # HANGUL SYLLABLE HIEUH-YI-SSANGSIOS
-0xC599 0xD782 # HANGUL SYLLABLE HIEUH-YI-CIEUC
-0xC59A 0xD783 # HANGUL SYLLABLE HIEUH-YI-CHIEUCH
-0xC59B 0xD784 # HANGUL SYLLABLE HIEUH-YI-KHIEUKH
-0xC59C 0xD785 # HANGUL SYLLABLE HIEUH-YI-THIEUTH
-0xC59D 0xD786 # HANGUL SYLLABLE HIEUH-YI-PHIEUPH
-0xC59E 0xD787 # HANGUL SYLLABLE HIEUH-YI-HIEUH
-0xC59F 0xD78A # HANGUL SYLLABLE HIEUH-I-SSANGKIYEOK
-0xC5A0 0xD78B # HANGUL SYLLABLE HIEUH-I-KIYEOKSIOS
-0xC5A1 0xD044 # HANGUL SYLLABLE KHIEUKH-WI-MIEUM
-0xC5A2 0xD045 # HANGUL SYLLABLE KHIEUKH-WI-PIEUP
-0xC5A3 0xD047 # HANGUL SYLLABLE KHIEUKH-WI-SIOS
-0xC5A4 0xD049 # HANGUL SYLLABLE KHIEUKH-WI-IEUNG
-0xC5A5 0xD050 # HANGUL SYLLABLE KHIEUKH-YU
-0xC5A6 0xD054 # HANGUL SYLLABLE KHIEUKH-YU-NIEUN
-0xC5A7 0xD058 # HANGUL SYLLABLE KHIEUKH-YU-RIEUL
-0xC5A8 0xD060 # HANGUL SYLLABLE KHIEUKH-YU-MIEUM
-0xC5A9 0xD06C # HANGUL SYLLABLE KHIEUKH-EU
-0xC5AA 0xD06D # HANGUL SYLLABLE KHIEUKH-EU-KIYEOK
-0xC5AB 0xD070 # HANGUL SYLLABLE KHIEUKH-EU-NIEUN
-0xC5AC 0xD074 # HANGUL SYLLABLE KHIEUKH-EU-RIEUL
-0xC5AD 0xD07C # HANGUL SYLLABLE KHIEUKH-EU-MIEUM
-0xC5AE 0xD07D # HANGUL SYLLABLE KHIEUKH-EU-PIEUP
-0xC5AF 0xD081 # HANGUL SYLLABLE KHIEUKH-EU-IEUNG
-0xC5B0 0xD0A4 # HANGUL SYLLABLE KHIEUKH-I
-0xC5B1 0xD0A5 # HANGUL SYLLABLE KHIEUKH-I-KIYEOK
-0xC5B2 0xD0A8 # HANGUL SYLLABLE KHIEUKH-I-NIEUN
-0xC5B3 0xD0AC # HANGUL SYLLABLE KHIEUKH-I-RIEUL
-0xC5B4 0xD0B4 # HANGUL SYLLABLE KHIEUKH-I-MIEUM
-0xC5B5 0xD0B5 # HANGUL SYLLABLE KHIEUKH-I-PIEUP
-0xC5B6 0xD0B7 # HANGUL SYLLABLE KHIEUKH-I-SIOS
-0xC5B7 0xD0B9 # HANGUL SYLLABLE KHIEUKH-I-IEUNG
-0xC5B8 0xD0C0 # HANGUL SYLLABLE THIEUTH-A
-0xC5B9 0xD0C1 # HANGUL SYLLABLE THIEUTH-A-KIYEOK
-0xC5BA 0xD0C4 # HANGUL SYLLABLE THIEUTH-A-NIEUN
-0xC5BB 0xD0C8 # HANGUL SYLLABLE THIEUTH-A-RIEUL
-0xC5BC 0xD0C9 # HANGUL SYLLABLE THIEUTH-A-RIEULKIYEOK
-0xC5BD 0xD0D0 # HANGUL SYLLABLE THIEUTH-A-MIEUM
-0xC5BE 0xD0D1 # HANGUL SYLLABLE THIEUTH-A-PIEUP
-0xC5BF 0xD0D3 # HANGUL SYLLABLE THIEUTH-A-SIOS
-0xC5C0 0xD0D4 # HANGUL SYLLABLE THIEUTH-A-SSANGSIOS
-0xC5C1 0xD0D5 # HANGUL SYLLABLE THIEUTH-A-IEUNG
-0xC5C2 0xD0DC # HANGUL SYLLABLE THIEUTH-AE
-0xC5C3 0xD0DD # HANGUL SYLLABLE THIEUTH-AE-KIYEOK
-0xC5C4 0xD0E0 # HANGUL SYLLABLE THIEUTH-AE-NIEUN
-0xC5C5 0xD0E4 # HANGUL SYLLABLE THIEUTH-AE-RIEUL
-0xC5C6 0xD0EC # HANGUL SYLLABLE THIEUTH-AE-MIEUM
-0xC5C7 0xD0ED # HANGUL SYLLABLE THIEUTH-AE-PIEUP
-0xC5C8 0xD0EF # HANGUL SYLLABLE THIEUTH-AE-SIOS
-0xC5C9 0xD0F0 # HANGUL SYLLABLE THIEUTH-AE-SSANGSIOS
-0xC5CA 0xD0F1 # HANGUL SYLLABLE THIEUTH-AE-IEUNG
-0xC5CB 0xD0F8 # HANGUL SYLLABLE THIEUTH-YA
-0xC5CC 0xD10D # HANGUL SYLLABLE THIEUTH-YA-IEUNG
-0xC5CD 0xD130 # HANGUL SYLLABLE THIEUTH-EO
-0xC5CE 0xD131 # HANGUL SYLLABLE THIEUTH-EO-KIYEOK
-0xC5CF 0xD134 # HANGUL SYLLABLE THIEUTH-EO-NIEUN
-0xC5D0 0xD138 # HANGUL SYLLABLE THIEUTH-EO-RIEUL
-0xC5D1 0xD13A # HANGUL SYLLABLE THIEUTH-EO-RIEULMIEUM
-0xC5D2 0xD140 # HANGUL SYLLABLE THIEUTH-EO-MIEUM
-0xC5D3 0xD141 # HANGUL SYLLABLE THIEUTH-EO-PIEUP
-0xC5D4 0xD143 # HANGUL SYLLABLE THIEUTH-EO-SIOS
-0xC5D5 0xD144 # HANGUL SYLLABLE THIEUTH-EO-SSANGSIOS
-0xC5D6 0xD145 # HANGUL SYLLABLE THIEUTH-EO-IEUNG
-0xC5D7 0xD14C # HANGUL SYLLABLE THIEUTH-E
-0xC5D8 0xD14D # HANGUL SYLLABLE THIEUTH-E-KIYEOK
-0xC5D9 0xD150 # HANGUL SYLLABLE THIEUTH-E-NIEUN
-0xC5DA 0xD154 # HANGUL SYLLABLE THIEUTH-E-RIEUL
-0xC5DB 0xD15C # HANGUL SYLLABLE THIEUTH-E-MIEUM
-0xC5DC 0xD15D # HANGUL SYLLABLE THIEUTH-E-PIEUP
-0xC5DD 0xD15F # HANGUL SYLLABLE THIEUTH-E-SIOS
-0xC5DE 0xD161 # HANGUL SYLLABLE THIEUTH-E-IEUNG
-0xC5DF 0xD168 # HANGUL SYLLABLE THIEUTH-YEO
-0xC5E0 0xD16C # HANGUL SYLLABLE THIEUTH-YEO-NIEUN
-0xC5E1 0xD17C # HANGUL SYLLABLE THIEUTH-YEO-SSANGSIOS
-0xC5E2 0xD184 # HANGUL SYLLABLE THIEUTH-YE
-0xC5E3 0xD188 # HANGUL SYLLABLE THIEUTH-YE-NIEUN
-0xC5E4 0xD1A0 # HANGUL SYLLABLE THIEUTH-O
-0xC5E5 0xD1A1 # HANGUL SYLLABLE THIEUTH-O-KIYEOK
-0xC5E6 0xD1A4 # HANGUL SYLLABLE THIEUTH-O-NIEUN
-0xC5E7 0xD1A8 # HANGUL SYLLABLE THIEUTH-O-RIEUL
-0xC5E8 0xD1B0 # HANGUL SYLLABLE THIEUTH-O-MIEUM
-0xC5E9 0xD1B1 # HANGUL SYLLABLE THIEUTH-O-PIEUP
-0xC5EA 0xD1B3 # HANGUL SYLLABLE THIEUTH-O-SIOS
-0xC5EB 0xD1B5 # HANGUL SYLLABLE THIEUTH-O-IEUNG
-0xC5EC 0xD1BA # HANGUL SYLLABLE THIEUTH-O-PHIEUPH
-0xC5ED 0xD1BC # HANGUL SYLLABLE THIEUTH-WA
-0xC5EE 0xD1C0 # HANGUL SYLLABLE THIEUTH-WA-NIEUN
-0xC5EF 0xD1D8 # HANGUL SYLLABLE THIEUTH-WAE
-0xC5F0 0xD1F4 # HANGUL SYLLABLE THIEUTH-OE
-0xC5F1 0xD1F8 # HANGUL SYLLABLE THIEUTH-OE-NIEUN
-0xC5F2 0xD207 # HANGUL SYLLABLE THIEUTH-OE-SIOS
-0xC5F3 0xD209 # HANGUL SYLLABLE THIEUTH-OE-IEUNG
-0xC5F4 0xD210 # HANGUL SYLLABLE THIEUTH-YO
-0xC5F5 0xD22C # HANGUL SYLLABLE THIEUTH-U
-0xC5F6 0xD22D # HANGUL SYLLABLE THIEUTH-U-KIYEOK
-0xC5F7 0xD230 # HANGUL SYLLABLE THIEUTH-U-NIEUN
-0xC5F8 0xD234 # HANGUL SYLLABLE THIEUTH-U-RIEUL
-0xC5F9 0xD23C # HANGUL SYLLABLE THIEUTH-U-MIEUM
-0xC5FA 0xD23D # HANGUL SYLLABLE THIEUTH-U-PIEUP
-0xC5FB 0xD23F # HANGUL SYLLABLE THIEUTH-U-SIOS
-0xC5FC 0xD241 # HANGUL SYLLABLE THIEUTH-U-IEUNG
-0xC5FD 0xD248 # HANGUL SYLLABLE THIEUTH-WEO
-0xC5FE 0xD25C # HANGUL SYLLABLE THIEUTH-WEO-SSANGSIOS
-0xC641 0xD78D # HANGUL SYLLABLE HIEUH-I-NIEUNCIEUC
-0xC642 0xD78E # HANGUL SYLLABLE HIEUH-I-NIEUNHIEUH
-0xC643 0xD78F # HANGUL SYLLABLE HIEUH-I-TIKEUT
-0xC644 0xD791 # HANGUL SYLLABLE HIEUH-I-RIEULKIYEOK
-0xC645 0xD792 # HANGUL SYLLABLE HIEUH-I-RIEULMIEUM
-0xC646 0xD793 # HANGUL SYLLABLE HIEUH-I-RIEULPIEUP
-0xC647 0xD794 # HANGUL SYLLABLE HIEUH-I-RIEULSIOS
-0xC648 0xD795 # HANGUL SYLLABLE HIEUH-I-RIEULTHIEUTH
-0xC649 0xD796 # HANGUL SYLLABLE HIEUH-I-RIEULPHIEUPH
-0xC64A 0xD797 # HANGUL SYLLABLE HIEUH-I-RIEULHIEUH
-0xC64B 0xD79A # HANGUL SYLLABLE HIEUH-I-PIEUPSIOS
-0xC64C 0xD79C # HANGUL SYLLABLE HIEUH-I-SSANGSIOS
-0xC64D 0xD79E # HANGUL SYLLABLE HIEUH-I-CIEUC
-0xC64E 0xD79F # HANGUL SYLLABLE HIEUH-I-CHIEUCH
-0xC64F 0xD7A0 # HANGUL SYLLABLE HIEUH-I-KHIEUKH
-0xC650 0xD7A1 # HANGUL SYLLABLE HIEUH-I-THIEUTH
-0xC651 0xD7A2 # HANGUL SYLLABLE HIEUH-I-PHIEUPH
-0xC652 0xD7A3 # HANGUL SYLLABLE HIEUH-I-HIEUH
-0xC6A1 0xD264 # HANGUL SYLLABLE THIEUTH-WE
-0xC6A2 0xD280 # HANGUL SYLLABLE THIEUTH-WI
-0xC6A3 0xD281 # HANGUL SYLLABLE THIEUTH-WI-KIYEOK
-0xC6A4 0xD284 # HANGUL SYLLABLE THIEUTH-WI-NIEUN
-0xC6A5 0xD288 # HANGUL SYLLABLE THIEUTH-WI-RIEUL
-0xC6A6 0xD290 # HANGUL SYLLABLE THIEUTH-WI-MIEUM
-0xC6A7 0xD291 # HANGUL SYLLABLE THIEUTH-WI-PIEUP
-0xC6A8 0xD295 # HANGUL SYLLABLE THIEUTH-WI-IEUNG
-0xC6A9 0xD29C # HANGUL SYLLABLE THIEUTH-YU
-0xC6AA 0xD2A0 # HANGUL SYLLABLE THIEUTH-YU-NIEUN
-0xC6AB 0xD2A4 # HANGUL SYLLABLE THIEUTH-YU-RIEUL
-0xC6AC 0xD2AC # HANGUL SYLLABLE THIEUTH-YU-MIEUM
-0xC6AD 0xD2B1 # HANGUL SYLLABLE THIEUTH-YU-IEUNG
-0xC6AE 0xD2B8 # HANGUL SYLLABLE THIEUTH-EU
-0xC6AF 0xD2B9 # HANGUL SYLLABLE THIEUTH-EU-KIYEOK
-0xC6B0 0xD2BC # HANGUL SYLLABLE THIEUTH-EU-NIEUN
-0xC6B1 0xD2BF # HANGUL SYLLABLE THIEUTH-EU-TIKEUT
-0xC6B2 0xD2C0 # HANGUL SYLLABLE THIEUTH-EU-RIEUL
-0xC6B3 0xD2C2 # HANGUL SYLLABLE THIEUTH-EU-RIEULMIEUM
-0xC6B4 0xD2C8 # HANGUL SYLLABLE THIEUTH-EU-MIEUM
-0xC6B5 0xD2C9 # HANGUL SYLLABLE THIEUTH-EU-PIEUP
-0xC6B6 0xD2CB # HANGUL SYLLABLE THIEUTH-EU-SIOS
-0xC6B7 0xD2D4 # HANGUL SYLLABLE THIEUTH-YI
-0xC6B8 0xD2D8 # HANGUL SYLLABLE THIEUTH-YI-NIEUN
-0xC6B9 0xD2DC # HANGUL SYLLABLE THIEUTH-YI-RIEUL
-0xC6BA 0xD2E4 # HANGUL SYLLABLE THIEUTH-YI-MIEUM
-0xC6BB 0xD2E5 # HANGUL SYLLABLE THIEUTH-YI-PIEUP
-0xC6BC 0xD2F0 # HANGUL SYLLABLE THIEUTH-I
-0xC6BD 0xD2F1 # HANGUL SYLLABLE THIEUTH-I-KIYEOK
-0xC6BE 0xD2F4 # HANGUL SYLLABLE THIEUTH-I-NIEUN
-0xC6BF 0xD2F8 # HANGUL SYLLABLE THIEUTH-I-RIEUL
-0xC6C0 0xD300 # HANGUL SYLLABLE THIEUTH-I-MIEUM
-0xC6C1 0xD301 # HANGUL SYLLABLE THIEUTH-I-PIEUP
-0xC6C2 0xD303 # HANGUL SYLLABLE THIEUTH-I-SIOS
-0xC6C3 0xD305 # HANGUL SYLLABLE THIEUTH-I-IEUNG
-0xC6C4 0xD30C # HANGUL SYLLABLE PHIEUPH-A
-0xC6C5 0xD30D # HANGUL SYLLABLE PHIEUPH-A-KIYEOK
-0xC6C6 0xD30E # HANGUL SYLLABLE PHIEUPH-A-SSANGKIYEOK
-0xC6C7 0xD310 # HANGUL SYLLABLE PHIEUPH-A-NIEUN
-0xC6C8 0xD314 # HANGUL SYLLABLE PHIEUPH-A-RIEUL
-0xC6C9 0xD316 # HANGUL SYLLABLE PHIEUPH-A-RIEULMIEUM
-0xC6CA 0xD31C # HANGUL SYLLABLE PHIEUPH-A-MIEUM
-0xC6CB 0xD31D # HANGUL SYLLABLE PHIEUPH-A-PIEUP
-0xC6CC 0xD31F # HANGUL SYLLABLE PHIEUPH-A-SIOS
-0xC6CD 0xD320 # HANGUL SYLLABLE PHIEUPH-A-SSANGSIOS
-0xC6CE 0xD321 # HANGUL SYLLABLE PHIEUPH-A-IEUNG
-0xC6CF 0xD325 # HANGUL SYLLABLE PHIEUPH-A-THIEUTH
-0xC6D0 0xD328 # HANGUL SYLLABLE PHIEUPH-AE
-0xC6D1 0xD329 # HANGUL SYLLABLE PHIEUPH-AE-KIYEOK
-0xC6D2 0xD32C # HANGUL SYLLABLE PHIEUPH-AE-NIEUN
-0xC6D3 0xD330 # HANGUL SYLLABLE PHIEUPH-AE-RIEUL
-0xC6D4 0xD338 # HANGUL SYLLABLE PHIEUPH-AE-MIEUM
-0xC6D5 0xD339 # HANGUL SYLLABLE PHIEUPH-AE-PIEUP
-0xC6D6 0xD33B # HANGUL SYLLABLE PHIEUPH-AE-SIOS
-0xC6D7 0xD33C # HANGUL SYLLABLE PHIEUPH-AE-SSANGSIOS
-0xC6D8 0xD33D # HANGUL SYLLABLE PHIEUPH-AE-IEUNG
-0xC6D9 0xD344 # HANGUL SYLLABLE PHIEUPH-YA
-0xC6DA 0xD345 # HANGUL SYLLABLE PHIEUPH-YA-KIYEOK
-0xC6DB 0xD37C # HANGUL SYLLABLE PHIEUPH-EO
-0xC6DC 0xD37D # HANGUL SYLLABLE PHIEUPH-EO-KIYEOK
-0xC6DD 0xD380 # HANGUL SYLLABLE PHIEUPH-EO-NIEUN
-0xC6DE 0xD384 # HANGUL SYLLABLE PHIEUPH-EO-RIEUL
-0xC6DF 0xD38C # HANGUL SYLLABLE PHIEUPH-EO-MIEUM
-0xC6E0 0xD38D # HANGUL SYLLABLE PHIEUPH-EO-PIEUP
-0xC6E1 0xD38F # HANGUL SYLLABLE PHIEUPH-EO-SIOS
-0xC6E2 0xD390 # HANGUL SYLLABLE PHIEUPH-EO-SSANGSIOS
-0xC6E3 0xD391 # HANGUL SYLLABLE PHIEUPH-EO-IEUNG
-0xC6E4 0xD398 # HANGUL SYLLABLE PHIEUPH-E
-0xC6E5 0xD399 # HANGUL SYLLABLE PHIEUPH-E-KIYEOK
-0xC6E6 0xD39C # HANGUL SYLLABLE PHIEUPH-E-NIEUN
-0xC6E7 0xD3A0 # HANGUL SYLLABLE PHIEUPH-E-RIEUL
-0xC6E8 0xD3A8 # HANGUL SYLLABLE PHIEUPH-E-MIEUM
-0xC6E9 0xD3A9 # HANGUL SYLLABLE PHIEUPH-E-PIEUP
-0xC6EA 0xD3AB # HANGUL SYLLABLE PHIEUPH-E-SIOS
-0xC6EB 0xD3AD # HANGUL SYLLABLE PHIEUPH-E-IEUNG
-0xC6EC 0xD3B4 # HANGUL SYLLABLE PHIEUPH-YEO
-0xC6ED 0xD3B8 # HANGUL SYLLABLE PHIEUPH-YEO-NIEUN
-0xC6EE 0xD3BC # HANGUL SYLLABLE PHIEUPH-YEO-RIEUL
-0xC6EF 0xD3C4 # HANGUL SYLLABLE PHIEUPH-YEO-MIEUM
-0xC6F0 0xD3C5 # HANGUL SYLLABLE PHIEUPH-YEO-PIEUP
-0xC6F1 0xD3C8 # HANGUL SYLLABLE PHIEUPH-YEO-SSANGSIOS
-0xC6F2 0xD3C9 # HANGUL SYLLABLE PHIEUPH-YEO-IEUNG
-0xC6F3 0xD3D0 # HANGUL SYLLABLE PHIEUPH-YE
-0xC6F4 0xD3D8 # HANGUL SYLLABLE PHIEUPH-YE-RIEUL
-0xC6F5 0xD3E1 # HANGUL SYLLABLE PHIEUPH-YE-PIEUP
-0xC6F6 0xD3E3 # HANGUL SYLLABLE PHIEUPH-YE-SIOS
-0xC6F7 0xD3EC # HANGUL SYLLABLE PHIEUPH-O
-0xC6F8 0xD3ED # HANGUL SYLLABLE PHIEUPH-O-KIYEOK
-0xC6F9 0xD3F0 # HANGUL SYLLABLE PHIEUPH-O-NIEUN
-0xC6FA 0xD3F4 # HANGUL SYLLABLE PHIEUPH-O-RIEUL
-0xC6FB 0xD3FC # HANGUL SYLLABLE PHIEUPH-O-MIEUM
-0xC6FC 0xD3FD # HANGUL SYLLABLE PHIEUPH-O-PIEUP
-0xC6FD 0xD3FF # HANGUL SYLLABLE PHIEUPH-O-SIOS
-0xC6FE 0xD401 # HANGUL SYLLABLE PHIEUPH-O-IEUNG
-0xC7A1 0xD408 # HANGUL SYLLABLE PHIEUPH-WA
-0xC7A2 0xD41D # HANGUL SYLLABLE PHIEUPH-WA-IEUNG
-0xC7A3 0xD440 # HANGUL SYLLABLE PHIEUPH-OE
-0xC7A4 0xD444 # HANGUL SYLLABLE PHIEUPH-OE-NIEUN
-0xC7A5 0xD45C # HANGUL SYLLABLE PHIEUPH-YO
-0xC7A6 0xD460 # HANGUL SYLLABLE PHIEUPH-YO-NIEUN
-0xC7A7 0xD464 # HANGUL SYLLABLE PHIEUPH-YO-RIEUL
-0xC7A8 0xD46D # HANGUL SYLLABLE PHIEUPH-YO-PIEUP
-0xC7A9 0xD46F # HANGUL SYLLABLE PHIEUPH-YO-SIOS
-0xC7AA 0xD478 # HANGUL SYLLABLE PHIEUPH-U
-0xC7AB 0xD479 # HANGUL SYLLABLE PHIEUPH-U-KIYEOK
-0xC7AC 0xD47C # HANGUL SYLLABLE PHIEUPH-U-NIEUN
-0xC7AD 0xD47F # HANGUL SYLLABLE PHIEUPH-U-TIKEUT
-0xC7AE 0xD480 # HANGUL SYLLABLE PHIEUPH-U-RIEUL
-0xC7AF 0xD482 # HANGUL SYLLABLE PHIEUPH-U-RIEULMIEUM
-0xC7B0 0xD488 # HANGUL SYLLABLE PHIEUPH-U-MIEUM
-0xC7B1 0xD489 # HANGUL SYLLABLE PHIEUPH-U-PIEUP
-0xC7B2 0xD48B # HANGUL SYLLABLE PHIEUPH-U-SIOS
-0xC7B3 0xD48D # HANGUL SYLLABLE PHIEUPH-U-IEUNG
-0xC7B4 0xD494 # HANGUL SYLLABLE PHIEUPH-WEO
-0xC7B5 0xD4A9 # HANGUL SYLLABLE PHIEUPH-WEO-IEUNG
-0xC7B6 0xD4CC # HANGUL SYLLABLE PHIEUPH-WI
-0xC7B7 0xD4D0 # HANGUL SYLLABLE PHIEUPH-WI-NIEUN
-0xC7B8 0xD4D4 # HANGUL SYLLABLE PHIEUPH-WI-RIEUL
-0xC7B9 0xD4DC # HANGUL SYLLABLE PHIEUPH-WI-MIEUM
-0xC7BA 0xD4DF # HANGUL SYLLABLE PHIEUPH-WI-SIOS
-0xC7BB 0xD4E8 # HANGUL SYLLABLE PHIEUPH-YU
-0xC7BC 0xD4EC # HANGUL SYLLABLE PHIEUPH-YU-NIEUN
-0xC7BD 0xD4F0 # HANGUL SYLLABLE PHIEUPH-YU-RIEUL
-0xC7BE 0xD4F8 # HANGUL SYLLABLE PHIEUPH-YU-MIEUM
-0xC7BF 0xD4FB # HANGUL SYLLABLE PHIEUPH-YU-SIOS
-0xC7C0 0xD4FD # HANGUL SYLLABLE PHIEUPH-YU-IEUNG
-0xC7C1 0xD504 # HANGUL SYLLABLE PHIEUPH-EU
-0xC7C2 0xD508 # HANGUL SYLLABLE PHIEUPH-EU-NIEUN
-0xC7C3 0xD50C # HANGUL SYLLABLE PHIEUPH-EU-RIEUL
-0xC7C4 0xD514 # HANGUL SYLLABLE PHIEUPH-EU-MIEUM
-0xC7C5 0xD515 # HANGUL SYLLABLE PHIEUPH-EU-PIEUP
-0xC7C6 0xD517 # HANGUL SYLLABLE PHIEUPH-EU-SIOS
-0xC7C7 0xD53C # HANGUL SYLLABLE PHIEUPH-I
-0xC7C8 0xD53D # HANGUL SYLLABLE PHIEUPH-I-KIYEOK
-0xC7C9 0xD540 # HANGUL SYLLABLE PHIEUPH-I-NIEUN
-0xC7CA 0xD544 # HANGUL SYLLABLE PHIEUPH-I-RIEUL
-0xC7CB 0xD54C # HANGUL SYLLABLE PHIEUPH-I-MIEUM
-0xC7CC 0xD54D # HANGUL SYLLABLE PHIEUPH-I-PIEUP
-0xC7CD 0xD54F # HANGUL SYLLABLE PHIEUPH-I-SIOS
-0xC7CE 0xD551 # HANGUL SYLLABLE PHIEUPH-I-IEUNG
-0xC7CF 0xD558 # HANGUL SYLLABLE HIEUH-A
-0xC7D0 0xD559 # HANGUL SYLLABLE HIEUH-A-KIYEOK
-0xC7D1 0xD55C # HANGUL SYLLABLE HIEUH-A-NIEUN
-0xC7D2 0xD560 # HANGUL SYLLABLE HIEUH-A-RIEUL
-0xC7D3 0xD565 # HANGUL SYLLABLE HIEUH-A-RIEULTHIEUTH
-0xC7D4 0xD568 # HANGUL SYLLABLE HIEUH-A-MIEUM
-0xC7D5 0xD569 # HANGUL SYLLABLE HIEUH-A-PIEUP
-0xC7D6 0xD56B # HANGUL SYLLABLE HIEUH-A-SIOS
-0xC7D7 0xD56D # HANGUL SYLLABLE HIEUH-A-IEUNG
-0xC7D8 0xD574 # HANGUL SYLLABLE HIEUH-AE
-0xC7D9 0xD575 # HANGUL SYLLABLE HIEUH-AE-KIYEOK
-0xC7DA 0xD578 # HANGUL SYLLABLE HIEUH-AE-NIEUN
-0xC7DB 0xD57C # HANGUL SYLLABLE HIEUH-AE-RIEUL
-0xC7DC 0xD584 # HANGUL SYLLABLE HIEUH-AE-MIEUM
-0xC7DD 0xD585 # HANGUL SYLLABLE HIEUH-AE-PIEUP
-0xC7DE 0xD587 # HANGUL SYLLABLE HIEUH-AE-SIOS
-0xC7DF 0xD588 # HANGUL SYLLABLE HIEUH-AE-SSANGSIOS
-0xC7E0 0xD589 # HANGUL SYLLABLE HIEUH-AE-IEUNG
-0xC7E1 0xD590 # HANGUL SYLLABLE HIEUH-YA
-0xC7E2 0xD5A5 # HANGUL SYLLABLE HIEUH-YA-IEUNG
-0xC7E3 0xD5C8 # HANGUL SYLLABLE HIEUH-EO
-0xC7E4 0xD5C9 # HANGUL SYLLABLE HIEUH-EO-KIYEOK
-0xC7E5 0xD5CC # HANGUL SYLLABLE HIEUH-EO-NIEUN
-0xC7E6 0xD5D0 # HANGUL SYLLABLE HIEUH-EO-RIEUL
-0xC7E7 0xD5D2 # HANGUL SYLLABLE HIEUH-EO-RIEULMIEUM
-0xC7E8 0xD5D8 # HANGUL SYLLABLE HIEUH-EO-MIEUM
-0xC7E9 0xD5D9 # HANGUL SYLLABLE HIEUH-EO-PIEUP
-0xC7EA 0xD5DB # HANGUL SYLLABLE HIEUH-EO-SIOS
-0xC7EB 0xD5DD # HANGUL SYLLABLE HIEUH-EO-IEUNG
-0xC7EC 0xD5E4 # HANGUL SYLLABLE HIEUH-E
-0xC7ED 0xD5E5 # HANGUL SYLLABLE HIEUH-E-KIYEOK
-0xC7EE 0xD5E8 # HANGUL SYLLABLE HIEUH-E-NIEUN
-0xC7EF 0xD5EC # HANGUL SYLLABLE HIEUH-E-RIEUL
-0xC7F0 0xD5F4 # HANGUL SYLLABLE HIEUH-E-MIEUM
-0xC7F1 0xD5F5 # HANGUL SYLLABLE HIEUH-E-PIEUP
-0xC7F2 0xD5F7 # HANGUL SYLLABLE HIEUH-E-SIOS
-0xC7F3 0xD5F9 # HANGUL SYLLABLE HIEUH-E-IEUNG
-0xC7F4 0xD600 # HANGUL SYLLABLE HIEUH-YEO
-0xC7F5 0xD601 # HANGUL SYLLABLE HIEUH-YEO-KIYEOK
-0xC7F6 0xD604 # HANGUL SYLLABLE HIEUH-YEO-NIEUN
-0xC7F7 0xD608 # HANGUL SYLLABLE HIEUH-YEO-RIEUL
-0xC7F8 0xD610 # HANGUL SYLLABLE HIEUH-YEO-MIEUM
-0xC7F9 0xD611 # HANGUL SYLLABLE HIEUH-YEO-PIEUP
-0xC7FA 0xD613 # HANGUL SYLLABLE HIEUH-YEO-SIOS
-0xC7FB 0xD614 # HANGUL SYLLABLE HIEUH-YEO-SSANGSIOS
-0xC7FC 0xD615 # HANGUL SYLLABLE HIEUH-YEO-IEUNG
-0xC7FD 0xD61C # HANGUL SYLLABLE HIEUH-YE
-0xC7FE 0xD620 # HANGUL SYLLABLE HIEUH-YE-NIEUN
-0xC8A1 0xD624 # HANGUL SYLLABLE HIEUH-YE-RIEUL
-0xC8A2 0xD62D # HANGUL SYLLABLE HIEUH-YE-PIEUP
-0xC8A3 0xD638 # HANGUL SYLLABLE HIEUH-O
-0xC8A4 0xD639 # HANGUL SYLLABLE HIEUH-O-KIYEOK
-0xC8A5 0xD63C # HANGUL SYLLABLE HIEUH-O-NIEUN
-0xC8A6 0xD640 # HANGUL SYLLABLE HIEUH-O-RIEUL
-0xC8A7 0xD645 # HANGUL SYLLABLE HIEUH-O-RIEULTHIEUTH
-0xC8A8 0xD648 # HANGUL SYLLABLE HIEUH-O-MIEUM
-0xC8A9 0xD649 # HANGUL SYLLABLE HIEUH-O-PIEUP
-0xC8AA 0xD64B # HANGUL SYLLABLE HIEUH-O-SIOS
-0xC8AB 0xD64D # HANGUL SYLLABLE HIEUH-O-IEUNG
-0xC8AC 0xD651 # HANGUL SYLLABLE HIEUH-O-THIEUTH
-0xC8AD 0xD654 # HANGUL SYLLABLE HIEUH-WA
-0xC8AE 0xD655 # HANGUL SYLLABLE HIEUH-WA-KIYEOK
-0xC8AF 0xD658 # HANGUL SYLLABLE HIEUH-WA-NIEUN
-0xC8B0 0xD65C # HANGUL SYLLABLE HIEUH-WA-RIEUL
-0xC8B1 0xD667 # HANGUL SYLLABLE HIEUH-WA-SIOS
-0xC8B2 0xD669 # HANGUL SYLLABLE HIEUH-WA-IEUNG
-0xC8B3 0xD670 # HANGUL SYLLABLE HIEUH-WAE
-0xC8B4 0xD671 # HANGUL SYLLABLE HIEUH-WAE-KIYEOK
-0xC8B5 0xD674 # HANGUL SYLLABLE HIEUH-WAE-NIEUN
-0xC8B6 0xD683 # HANGUL SYLLABLE HIEUH-WAE-SIOS
-0xC8B7 0xD685 # HANGUL SYLLABLE HIEUH-WAE-IEUNG
-0xC8B8 0xD68C # HANGUL SYLLABLE HIEUH-OE
-0xC8B9 0xD68D # HANGUL SYLLABLE HIEUH-OE-KIYEOK
-0xC8BA 0xD690 # HANGUL SYLLABLE HIEUH-OE-NIEUN
-0xC8BB 0xD694 # HANGUL SYLLABLE HIEUH-OE-RIEUL
-0xC8BC 0xD69D # HANGUL SYLLABLE HIEUH-OE-PIEUP
-0xC8BD 0xD69F # HANGUL SYLLABLE HIEUH-OE-SIOS
-0xC8BE 0xD6A1 # HANGUL SYLLABLE HIEUH-OE-IEUNG
-0xC8BF 0xD6A8 # HANGUL SYLLABLE HIEUH-YO
-0xC8C0 0xD6AC # HANGUL SYLLABLE HIEUH-YO-NIEUN
-0xC8C1 0xD6B0 # HANGUL SYLLABLE HIEUH-YO-RIEUL
-0xC8C2 0xD6B9 # HANGUL SYLLABLE HIEUH-YO-PIEUP
-0xC8C3 0xD6BB # HANGUL SYLLABLE HIEUH-YO-SIOS
-0xC8C4 0xD6C4 # HANGUL SYLLABLE HIEUH-U
-0xC8C5 0xD6C5 # HANGUL SYLLABLE HIEUH-U-KIYEOK
-0xC8C6 0xD6C8 # HANGUL SYLLABLE HIEUH-U-NIEUN
-0xC8C7 0xD6CC # HANGUL SYLLABLE HIEUH-U-RIEUL
-0xC8C8 0xD6D1 # HANGUL SYLLABLE HIEUH-U-RIEULTHIEUTH
-0xC8C9 0xD6D4 # HANGUL SYLLABLE HIEUH-U-MIEUM
-0xC8CA 0xD6D7 # HANGUL SYLLABLE HIEUH-U-SIOS
-0xC8CB 0xD6D9 # HANGUL SYLLABLE HIEUH-U-IEUNG
-0xC8CC 0xD6E0 # HANGUL SYLLABLE HIEUH-WEO
-0xC8CD 0xD6E4 # HANGUL SYLLABLE HIEUH-WEO-NIEUN
-0xC8CE 0xD6E8 # HANGUL SYLLABLE HIEUH-WEO-RIEUL
-0xC8CF 0xD6F0 # HANGUL SYLLABLE HIEUH-WEO-MIEUM
-0xC8D0 0xD6F5 # HANGUL SYLLABLE HIEUH-WEO-IEUNG
-0xC8D1 0xD6FC # HANGUL SYLLABLE HIEUH-WE
-0xC8D2 0xD6FD # HANGUL SYLLABLE HIEUH-WE-KIYEOK
-0xC8D3 0xD700 # HANGUL SYLLABLE HIEUH-WE-NIEUN
-0xC8D4 0xD704 # HANGUL SYLLABLE HIEUH-WE-RIEUL
-0xC8D5 0xD711 # HANGUL SYLLABLE HIEUH-WE-IEUNG
-0xC8D6 0xD718 # HANGUL SYLLABLE HIEUH-WI
-0xC8D7 0xD719 # HANGUL SYLLABLE HIEUH-WI-KIYEOK
-0xC8D8 0xD71C # HANGUL SYLLABLE HIEUH-WI-NIEUN
-0xC8D9 0xD720 # HANGUL SYLLABLE HIEUH-WI-RIEUL
-0xC8DA 0xD728 # HANGUL SYLLABLE HIEUH-WI-MIEUM
-0xC8DB 0xD729 # HANGUL SYLLABLE HIEUH-WI-PIEUP
-0xC8DC 0xD72B # HANGUL SYLLABLE HIEUH-WI-SIOS
-0xC8DD 0xD72D # HANGUL SYLLABLE HIEUH-WI-IEUNG
-0xC8DE 0xD734 # HANGUL SYLLABLE HIEUH-YU
-0xC8DF 0xD735 # HANGUL SYLLABLE HIEUH-YU-KIYEOK
-0xC8E0 0xD738 # HANGUL SYLLABLE HIEUH-YU-NIEUN
-0xC8E1 0xD73C # HANGUL SYLLABLE HIEUH-YU-RIEUL
-0xC8E2 0xD744 # HANGUL SYLLABLE HIEUH-YU-MIEUM
-0xC8E3 0xD747 # HANGUL SYLLABLE HIEUH-YU-SIOS
-0xC8E4 0xD749 # HANGUL SYLLABLE HIEUH-YU-IEUNG
-0xC8E5 0xD750 # HANGUL SYLLABLE HIEUH-EU
-0xC8E6 0xD751 # HANGUL SYLLABLE HIEUH-EU-KIYEOK
-0xC8E7 0xD754 # HANGUL SYLLABLE HIEUH-EU-NIEUN
-0xC8E8 0xD756 # HANGUL SYLLABLE HIEUH-EU-NIEUNHIEUH
-0xC8E9 0xD757 # HANGUL SYLLABLE HIEUH-EU-TIKEUT
-0xC8EA 0xD758 # HANGUL SYLLABLE HIEUH-EU-RIEUL
-0xC8EB 0xD759 # HANGUL SYLLABLE HIEUH-EU-RIEULKIYEOK
-0xC8EC 0xD760 # HANGUL SYLLABLE HIEUH-EU-MIEUM
-0xC8ED 0xD761 # HANGUL SYLLABLE HIEUH-EU-PIEUP
-0xC8EE 0xD763 # HANGUL SYLLABLE HIEUH-EU-SIOS
-0xC8EF 0xD765 # HANGUL SYLLABLE HIEUH-EU-IEUNG
-0xC8F0 0xD769 # HANGUL SYLLABLE HIEUH-EU-THIEUTH
-0xC8F1 0xD76C # HANGUL SYLLABLE HIEUH-YI
-0xC8F2 0xD770 # HANGUL SYLLABLE HIEUH-YI-NIEUN
-0xC8F3 0xD774 # HANGUL SYLLABLE HIEUH-YI-RIEUL
-0xC8F4 0xD77C # HANGUL SYLLABLE HIEUH-YI-MIEUM
-0xC8F5 0xD77D # HANGUL SYLLABLE HIEUH-YI-PIEUP
-0xC8F6 0xD781 # HANGUL SYLLABLE HIEUH-YI-IEUNG
-0xC8F7 0xD788 # HANGUL SYLLABLE HIEUH-I
-0xC8F8 0xD789 # HANGUL SYLLABLE HIEUH-I-KIYEOK
-0xC8F9 0xD78C # HANGUL SYLLABLE HIEUH-I-NIEUN
-0xC8FA 0xD790 # HANGUL SYLLABLE HIEUH-I-RIEUL
-0xC8FB 0xD798 # HANGUL SYLLABLE HIEUH-I-MIEUM
-0xC8FC 0xD799 # HANGUL SYLLABLE HIEUH-I-PIEUP
-0xC8FD 0xD79B # HANGUL SYLLABLE HIEUH-I-SIOS
-0xC8FE 0xD79D # HANGUL SYLLABLE HIEUH-I-IEUNG
-0xCAA1 0x4F3D # <CJK>
-0xCAA2 0x4F73 # <CJK>
-0xCAA3 0x5047 # <CJK>
-0xCAA4 0x50F9 # <CJK>
-0xCAA5 0x52A0 # <CJK>
-0xCAA6 0x53EF # <CJK>
-0xCAA7 0x5475 # <CJK>
-0xCAA8 0x54E5 # <CJK>
-0xCAA9 0x5609 # <CJK>
-0xCAAA 0x5AC1 # <CJK>
-0xCAAB 0x5BB6 # <CJK>
-0xCAAC 0x6687 # <CJK>
-0xCAAD 0x67B6 # <CJK>
-0xCAAE 0x67B7 # <CJK>
-0xCAAF 0x67EF # <CJK>
-0xCAB0 0x6B4C # <CJK>
-0xCAB1 0x73C2 # <CJK>
-0xCAB2 0x75C2 # <CJK>
-0xCAB3 0x7A3C # <CJK>
-0xCAB4 0x82DB # <CJK>
-0xCAB5 0x8304 # <CJK>
-0xCAB6 0x8857 # <CJK>
-0xCAB7 0x8888 # <CJK>
-0xCAB8 0x8A36 # <CJK>
-0xCAB9 0x8CC8 # <CJK>
-0xCABA 0x8DCF # <CJK>
-0xCABB 0x8EFB # <CJK>
-0xCABC 0x8FE6 # <CJK>
-0xCABD 0x99D5 # <CJK>
-0xCABE 0x523B # <CJK>
-0xCABF 0x5374 # <CJK>
-0xCAC0 0x5404 # <CJK>
-0xCAC1 0x606A # <CJK>
-0xCAC2 0x6164 # <CJK>
-0xCAC3 0x6BBC # <CJK>
-0xCAC4 0x73CF # <CJK>
-0xCAC5 0x811A # <CJK>
-0xCAC6 0x89BA # <CJK>
-0xCAC7 0x89D2 # <CJK>
-0xCAC8 0x95A3 # <CJK>
-0xCAC9 0x4F83 # <CJK>
-0xCACA 0x520A # <CJK>
-0xCACB 0x58BE # <CJK>
-0xCACC 0x5978 # <CJK>
-0xCACD 0x59E6 # <CJK>
-0xCACE 0x5E72 # <CJK>
-0xCACF 0x5E79 # <CJK>
-0xCAD0 0x61C7 # <CJK>
-0xCAD1 0x63C0 # <CJK>
-0xCAD2 0x6746 # <CJK>
-0xCAD3 0x67EC # <CJK>
-0xCAD4 0x687F # <CJK>
-0xCAD5 0x6F97 # <CJK>
-0xCAD6 0x764E # <CJK>
-0xCAD7 0x770B # <CJK>
-0xCAD8 0x78F5 # <CJK>
-0xCAD9 0x7A08 # <CJK>
-0xCADA 0x7AFF # <CJK>
-0xCADB 0x7C21 # <CJK>
-0xCADC 0x809D # <CJK>
-0xCADD 0x826E # <CJK>
-0xCADE 0x8271 # <CJK>
-0xCADF 0x8AEB # <CJK>
-0xCAE0 0x9593 # <CJK>
-0xCAE1 0x4E6B # <CJK>
-0xCAE2 0x559D # <CJK>
-0xCAE3 0x66F7 # <CJK>
-0xCAE4 0x6E34 # <CJK>
-0xCAE5 0x78A3 # <CJK>
-0xCAE6 0x7AED # <CJK>
-0xCAE7 0x845B # <CJK>
-0xCAE8 0x8910 # <CJK>
-0xCAE9 0x874E # <CJK>
-0xCAEA 0x97A8 # <CJK>
-0xCAEB 0x52D8 # <CJK>
-0xCAEC 0x574E # <CJK>
-0xCAED 0x582A # <CJK>
-0xCAEE 0x5D4C # <CJK>
-0xCAEF 0x611F # <CJK>
-0xCAF0 0x61BE # <CJK>
-0xCAF1 0x6221 # <CJK>
-0xCAF2 0x6562 # <CJK>
-0xCAF3 0x67D1 # <CJK>
-0xCAF4 0x6A44 # <CJK>
-0xCAF5 0x6E1B # <CJK>
-0xCAF6 0x7518 # <CJK>
-0xCAF7 0x75B3 # <CJK>
-0xCAF8 0x76E3 # <CJK>
-0xCAF9 0x77B0 # <CJK>
-0xCAFA 0x7D3A # <CJK>
-0xCAFB 0x90AF # <CJK>
-0xCAFC 0x9451 # <CJK>
-0xCAFD 0x9452 # <CJK>
-0xCAFE 0x9F95 # <CJK>
-0xCBA1 0x5323 # <CJK>
-0xCBA2 0x5CAC # <CJK>
-0xCBA3 0x7532 # <CJK>
-0xCBA4 0x80DB # <CJK>
-0xCBA5 0x9240 # <CJK>
-0xCBA6 0x9598 # <CJK>
-0xCBA7 0x525B # <CJK>
-0xCBA8 0x5808 # <CJK>
-0xCBA9 0x59DC # <CJK>
-0xCBAA 0x5CA1 # <CJK>
-0xCBAB 0x5D17 # <CJK>
-0xCBAC 0x5EB7 # <CJK>
-0xCBAD 0x5F3A # <CJK>
-0xCBAE 0x5F4A # <CJK>
-0xCBAF 0x6177 # <CJK>
-0xCBB0 0x6C5F # <CJK>
-0xCBB1 0x757A # <CJK>
-0xCBB2 0x7586 # <CJK>
-0xCBB3 0x7CE0 # <CJK>
-0xCBB4 0x7D73 # <CJK>
-0xCBB5 0x7DB1 # <CJK>
-0xCBB6 0x7F8C # <CJK>
-0xCBB7 0x8154 # <CJK>
-0xCBB8 0x8221 # <CJK>
-0xCBB9 0x8591 # <CJK>
-0xCBBA 0x8941 # <CJK>
-0xCBBB 0x8B1B # <CJK>
-0xCBBC 0x92FC # <CJK>
-0xCBBD 0x964D # <CJK>
-0xCBBE 0x9C47 # <CJK>
-0xCBBF 0x4ECB # <CJK>
-0xCBC0 0x4EF7 # <CJK>
-0xCBC1 0x500B # <CJK>
-0xCBC2 0x51F1 # <CJK>
-0xCBC3 0x584F # <CJK>
-0xCBC4 0x6137 # <CJK>
-0xCBC5 0x613E # <CJK>
-0xCBC6 0x6168 # <CJK>
-0xCBC7 0x6539 # <CJK>
-0xCBC8 0x69EA # <CJK>
-0xCBC9 0x6F11 # <CJK>
-0xCBCA 0x75A5 # <CJK>
-0xCBCB 0x7686 # <CJK>
-0xCBCC 0x76D6 # <CJK>
-0xCBCD 0x7B87 # <CJK>
-0xCBCE 0x82A5 # <CJK>
-0xCBCF 0x84CB # <CJK>
-0xCBD0 0xF900 # <CJK>
-0xCBD1 0x93A7 # <CJK>
-0xCBD2 0x958B # <CJK>
-0xCBD3 0x5580 # <CJK>
-0xCBD4 0x5BA2 # <CJK>
-0xCBD5 0x5751 # <CJK>
-0xCBD6 0xF901 # <CJK>
-0xCBD7 0x7CB3 # <CJK>
-0xCBD8 0x7FB9 # <CJK>
-0xCBD9 0x91B5 # <CJK>
-0xCBDA 0x5028 # <CJK>
-0xCBDB 0x53BB # <CJK>
-0xCBDC 0x5C45 # <CJK>
-0xCBDD 0x5DE8 # <CJK>
-0xCBDE 0x62D2 # <CJK>
-0xCBDF 0x636E # <CJK>
-0xCBE0 0x64DA # <CJK>
-0xCBE1 0x64E7 # <CJK>
-0xCBE2 0x6E20 # <CJK>
-0xCBE3 0x70AC # <CJK>
-0xCBE4 0x795B # <CJK>
-0xCBE5 0x8DDD # <CJK>
-0xCBE6 0x8E1E # <CJK>
-0xCBE7 0xF902 # <CJK>
-0xCBE8 0x907D # <CJK>
-0xCBE9 0x9245 # <CJK>
-0xCBEA 0x92F8 # <CJK>
-0xCBEB 0x4E7E # <CJK>
-0xCBEC 0x4EF6 # <CJK>
-0xCBED 0x5065 # <CJK>
-0xCBEE 0x5DFE # <CJK>
-0xCBEF 0x5EFA # <CJK>
-0xCBF0 0x6106 # <CJK>
-0xCBF1 0x6957 # <CJK>
-0xCBF2 0x8171 # <CJK>
-0xCBF3 0x8654 # <CJK>
-0xCBF4 0x8E47 # <CJK>
-0xCBF5 0x9375 # <CJK>
-0xCBF6 0x9A2B # <CJK>
-0xCBF7 0x4E5E # <CJK>
-0xCBF8 0x5091 # <CJK>
-0xCBF9 0x6770 # <CJK>
-0xCBFA 0x6840 # <CJK>
-0xCBFB 0x5109 # <CJK>
-0xCBFC 0x528D # <CJK>
-0xCBFD 0x5292 # <CJK>
-0xCBFE 0x6AA2 # <CJK>
-0xCCA1 0x77BC # <CJK>
-0xCCA2 0x9210 # <CJK>
-0xCCA3 0x9ED4 # <CJK>
-0xCCA4 0x52AB # <CJK>
-0xCCA5 0x602F # <CJK>
-0xCCA6 0x8FF2 # <CJK>
-0xCCA7 0x5048 # <CJK>
-0xCCA8 0x61A9 # <CJK>
-0xCCA9 0x63ED # <CJK>
-0xCCAA 0x64CA # <CJK>
-0xCCAB 0x683C # <CJK>
-0xCCAC 0x6A84 # <CJK>
-0xCCAD 0x6FC0 # <CJK>
-0xCCAE 0x8188 # <CJK>
-0xCCAF 0x89A1 # <CJK>
-0xCCB0 0x9694 # <CJK>
-0xCCB1 0x5805 # <CJK>
-0xCCB2 0x727D # <CJK>
-0xCCB3 0x72AC # <CJK>
-0xCCB4 0x7504 # <CJK>
-0xCCB5 0x7D79 # <CJK>
-0xCCB6 0x7E6D # <CJK>
-0xCCB7 0x80A9 # <CJK>
-0xCCB8 0x898B # <CJK>
-0xCCB9 0x8B74 # <CJK>
-0xCCBA 0x9063 # <CJK>
-0xCCBB 0x9D51 # <CJK>
-0xCCBC 0x6289 # <CJK>
-0xCCBD 0x6C7A # <CJK>
-0xCCBE 0x6F54 # <CJK>
-0xCCBF 0x7D50 # <CJK>
-0xCCC0 0x7F3A # <CJK>
-0xCCC1 0x8A23 # <CJK>
-0xCCC2 0x517C # <CJK>
-0xCCC3 0x614A # <CJK>
-0xCCC4 0x7B9D # <CJK>
-0xCCC5 0x8B19 # <CJK>
-0xCCC6 0x9257 # <CJK>
-0xCCC7 0x938C # <CJK>
-0xCCC8 0x4EAC # <CJK>
-0xCCC9 0x4FD3 # <CJK>
-0xCCCA 0x501E # <CJK>
-0xCCCB 0x50BE # <CJK>
-0xCCCC 0x5106 # <CJK>
-0xCCCD 0x52C1 # <CJK>
-0xCCCE 0x52CD # <CJK>
-0xCCCF 0x537F # <CJK>
-0xCCD0 0x5770 # <CJK>
-0xCCD1 0x5883 # <CJK>
-0xCCD2 0x5E9A # <CJK>
-0xCCD3 0x5F91 # <CJK>
-0xCCD4 0x6176 # <CJK>
-0xCCD5 0x61AC # <CJK>
-0xCCD6 0x64CE # <CJK>
-0xCCD7 0x656C # <CJK>
-0xCCD8 0x666F # <CJK>
-0xCCD9 0x66BB # <CJK>
-0xCCDA 0x66F4 # <CJK>
-0xCCDB 0x6897 # <CJK>
-0xCCDC 0x6D87 # <CJK>
-0xCCDD 0x7085 # <CJK>
-0xCCDE 0x70F1 # <CJK>
-0xCCDF 0x749F # <CJK>
-0xCCE0 0x74A5 # <CJK>
-0xCCE1 0x74CA # <CJK>
-0xCCE2 0x75D9 # <CJK>
-0xCCE3 0x786C # <CJK>
-0xCCE4 0x78EC # <CJK>
-0xCCE5 0x7ADF # <CJK>
-0xCCE6 0x7AF6 # <CJK>
-0xCCE7 0x7D45 # <CJK>
-0xCCE8 0x7D93 # <CJK>
-0xCCE9 0x8015 # <CJK>
-0xCCEA 0x803F # <CJK>
-0xCCEB 0x811B # <CJK>
-0xCCEC 0x8396 # <CJK>
-0xCCED 0x8B66 # <CJK>
-0xCCEE 0x8F15 # <CJK>
-0xCCEF 0x9015 # <CJK>
-0xCCF0 0x93E1 # <CJK>
-0xCCF1 0x9803 # <CJK>
-0xCCF2 0x9838 # <CJK>
-0xCCF3 0x9A5A # <CJK>
-0xCCF4 0x9BE8 # <CJK>
-0xCCF5 0x4FC2 # <CJK>
-0xCCF6 0x5553 # <CJK>
-0xCCF7 0x583A # <CJK>
-0xCCF8 0x5951 # <CJK>
-0xCCF9 0x5B63 # <CJK>
-0xCCFA 0x5C46 # <CJK>
-0xCCFB 0x60B8 # <CJK>
-0xCCFC 0x6212 # <CJK>
-0xCCFD 0x6842 # <CJK>
-0xCCFE 0x68B0 # <CJK>
-0xCDA1 0x68E8 # <CJK>
-0xCDA2 0x6EAA # <CJK>
-0xCDA3 0x754C # <CJK>
-0xCDA4 0x7678 # <CJK>
-0xCDA5 0x78CE # <CJK>
-0xCDA6 0x7A3D # <CJK>
-0xCDA7 0x7CFB # <CJK>
-0xCDA8 0x7E6B # <CJK>
-0xCDA9 0x7E7C # <CJK>
-0xCDAA 0x8A08 # <CJK>
-0xCDAB 0x8AA1 # <CJK>
-0xCDAC 0x8C3F # <CJK>
-0xCDAD 0x968E # <CJK>
-0xCDAE 0x9DC4 # <CJK>
-0xCDAF 0x53E4 # <CJK>
-0xCDB0 0x53E9 # <CJK>
-0xCDB1 0x544A # <CJK>
-0xCDB2 0x5471 # <CJK>
-0xCDB3 0x56FA # <CJK>
-0xCDB4 0x59D1 # <CJK>
-0xCDB5 0x5B64 # <CJK>
-0xCDB6 0x5C3B # <CJK>
-0xCDB7 0x5EAB # <CJK>
-0xCDB8 0x62F7 # <CJK>
-0xCDB9 0x6537 # <CJK>
-0xCDBA 0x6545 # <CJK>
-0xCDBB 0x6572 # <CJK>
-0xCDBC 0x66A0 # <CJK>
-0xCDBD 0x67AF # <CJK>
-0xCDBE 0x69C1 # <CJK>
-0xCDBF 0x6CBD # <CJK>
-0xCDC0 0x75FC # <CJK>
-0xCDC1 0x7690 # <CJK>
-0xCDC2 0x777E # <CJK>
-0xCDC3 0x7A3F # <CJK>
-0xCDC4 0x7F94 # <CJK>
-0xCDC5 0x8003 # <CJK>
-0xCDC6 0x80A1 # <CJK>
-0xCDC7 0x818F # <CJK>
-0xCDC8 0x82E6 # <CJK>
-0xCDC9 0x82FD # <CJK>
-0xCDCA 0x83F0 # <CJK>
-0xCDCB 0x85C1 # <CJK>
-0xCDCC 0x8831 # <CJK>
-0xCDCD 0x88B4 # <CJK>
-0xCDCE 0x8AA5 # <CJK>
-0xCDCF 0xF903 # <CJK>
-0xCDD0 0x8F9C # <CJK>
-0xCDD1 0x932E # <CJK>
-0xCDD2 0x96C7 # <CJK>
-0xCDD3 0x9867 # <CJK>
-0xCDD4 0x9AD8 # <CJK>
-0xCDD5 0x9F13 # <CJK>
-0xCDD6 0x54ED # <CJK>
-0xCDD7 0x659B # <CJK>
-0xCDD8 0x66F2 # <CJK>
-0xCDD9 0x688F # <CJK>
-0xCDDA 0x7A40 # <CJK>
-0xCDDB 0x8C37 # <CJK>
-0xCDDC 0x9D60 # <CJK>
-0xCDDD 0x56F0 # <CJK>
-0xCDDE 0x5764 # <CJK>
-0xCDDF 0x5D11 # <CJK>
-0xCDE0 0x6606 # <CJK>
-0xCDE1 0x68B1 # <CJK>
-0xCDE2 0x68CD # <CJK>
-0xCDE3 0x6EFE # <CJK>
-0xCDE4 0x7428 # <CJK>
-0xCDE5 0x889E # <CJK>
-0xCDE6 0x9BE4 # <CJK>
-0xCDE7 0x6C68 # <CJK>
-0xCDE8 0xF904 # <CJK>
-0xCDE9 0x9AA8 # <CJK>
-0xCDEA 0x4F9B # <CJK>
-0xCDEB 0x516C # <CJK>
-0xCDEC 0x5171 # <CJK>
-0xCDED 0x529F # <CJK>
-0xCDEE 0x5B54 # <CJK>
-0xCDEF 0x5DE5 # <CJK>
-0xCDF0 0x6050 # <CJK>
-0xCDF1 0x606D # <CJK>
-0xCDF2 0x62F1 # <CJK>
-0xCDF3 0x63A7 # <CJK>
-0xCDF4 0x653B # <CJK>
-0xCDF5 0x73D9 # <CJK>
-0xCDF6 0x7A7A # <CJK>
-0xCDF7 0x86A3 # <CJK>
-0xCDF8 0x8CA2 # <CJK>
-0xCDF9 0x978F # <CJK>
-0xCDFA 0x4E32 # <CJK>
-0xCDFB 0x5BE1 # <CJK>
-0xCDFC 0x6208 # <CJK>
-0xCDFD 0x679C # <CJK>
-0xCDFE 0x74DC # <CJK>
-0xCEA1 0x79D1 # <CJK>
-0xCEA2 0x83D3 # <CJK>
-0xCEA3 0x8A87 # <CJK>
-0xCEA4 0x8AB2 # <CJK>
-0xCEA5 0x8DE8 # <CJK>
-0xCEA6 0x904E # <CJK>
-0xCEA7 0x934B # <CJK>
-0xCEA8 0x9846 # <CJK>
-0xCEA9 0x5ED3 # <CJK>
-0xCEAA 0x69E8 # <CJK>
-0xCEAB 0x85FF # <CJK>
-0xCEAC 0x90ED # <CJK>
-0xCEAD 0xF905 # <CJK>
-0xCEAE 0x51A0 # <CJK>
-0xCEAF 0x5B98 # <CJK>
-0xCEB0 0x5BEC # <CJK>
-0xCEB1 0x6163 # <CJK>
-0xCEB2 0x68FA # <CJK>
-0xCEB3 0x6B3E # <CJK>
-0xCEB4 0x704C # <CJK>
-0xCEB5 0x742F # <CJK>
-0xCEB6 0x74D8 # <CJK>
-0xCEB7 0x7BA1 # <CJK>
-0xCEB8 0x7F50 # <CJK>
-0xCEB9 0x83C5 # <CJK>
-0xCEBA 0x89C0 # <CJK>
-0xCEBB 0x8CAB # <CJK>
-0xCEBC 0x95DC # <CJK>
-0xCEBD 0x9928 # <CJK>
-0xCEBE 0x522E # <CJK>
-0xCEBF 0x605D # <CJK>
-0xCEC0 0x62EC # <CJK>
-0xCEC1 0x9002 # <CJK>
-0xCEC2 0x4F8A # <CJK>
-0xCEC3 0x5149 # <CJK>
-0xCEC4 0x5321 # <CJK>
-0xCEC5 0x58D9 # <CJK>
-0xCEC6 0x5EE3 # <CJK>
-0xCEC7 0x66E0 # <CJK>
-0xCEC8 0x6D38 # <CJK>
-0xCEC9 0x709A # <CJK>
-0xCECA 0x72C2 # <CJK>
-0xCECB 0x73D6 # <CJK>
-0xCECC 0x7B50 # <CJK>
-0xCECD 0x80F1 # <CJK>
-0xCECE 0x945B # <CJK>
-0xCECF 0x5366 # <CJK>
-0xCED0 0x639B # <CJK>
-0xCED1 0x7F6B # <CJK>
-0xCED2 0x4E56 # <CJK>
-0xCED3 0x5080 # <CJK>
-0xCED4 0x584A # <CJK>
-0xCED5 0x58DE # <CJK>
-0xCED6 0x602A # <CJK>
-0xCED7 0x6127 # <CJK>
-0xCED8 0x62D0 # <CJK>
-0xCED9 0x69D0 # <CJK>
-0xCEDA 0x9B41 # <CJK>
-0xCEDB 0x5B8F # <CJK>
-0xCEDC 0x7D18 # <CJK>
-0xCEDD 0x80B1 # <CJK>
-0xCEDE 0x8F5F # <CJK>
-0xCEDF 0x4EA4 # <CJK>
-0xCEE0 0x50D1 # <CJK>
-0xCEE1 0x54AC # <CJK>
-0xCEE2 0x55AC # <CJK>
-0xCEE3 0x5B0C # <CJK>
-0xCEE4 0x5DA0 # <CJK>
-0xCEE5 0x5DE7 # <CJK>
-0xCEE6 0x652A # <CJK>
-0xCEE7 0x654E # <CJK>
-0xCEE8 0x6821 # <CJK>
-0xCEE9 0x6A4B # <CJK>
-0xCEEA 0x72E1 # <CJK>
-0xCEEB 0x768E # <CJK>
-0xCEEC 0x77EF # <CJK>
-0xCEED 0x7D5E # <CJK>
-0xCEEE 0x7FF9 # <CJK>
-0xCEEF 0x81A0 # <CJK>
-0xCEF0 0x854E # <CJK>
-0xCEF1 0x86DF # <CJK>
-0xCEF2 0x8F03 # <CJK>
-0xCEF3 0x8F4E # <CJK>
-0xCEF4 0x90CA # <CJK>
-0xCEF5 0x9903 # <CJK>
-0xCEF6 0x9A55 # <CJK>
-0xCEF7 0x9BAB # <CJK>
-0xCEF8 0x4E18 # <CJK>
-0xCEF9 0x4E45 # <CJK>
-0xCEFA 0x4E5D # <CJK>
-0xCEFB 0x4EC7 # <CJK>
-0xCEFC 0x4FF1 # <CJK>
-0xCEFD 0x5177 # <CJK>
-0xCEFE 0x52FE # <CJK>
-0xCFA1 0x5340 # <CJK>
-0xCFA2 0x53E3 # <CJK>
-0xCFA3 0x53E5 # <CJK>
-0xCFA4 0x548E # <CJK>
-0xCFA5 0x5614 # <CJK>
-0xCFA6 0x5775 # <CJK>
-0xCFA7 0x57A2 # <CJK>
-0xCFA8 0x5BC7 # <CJK>
-0xCFA9 0x5D87 # <CJK>
-0xCFAA 0x5ED0 # <CJK>
-0xCFAB 0x61FC # <CJK>
-0xCFAC 0x62D8 # <CJK>
-0xCFAD 0x6551 # <CJK>
-0xCFAE 0x67B8 # <CJK>
-0xCFAF 0x67E9 # <CJK>
-0xCFB0 0x69CB # <CJK>
-0xCFB1 0x6B50 # <CJK>
-0xCFB2 0x6BC6 # <CJK>
-0xCFB3 0x6BEC # <CJK>
-0xCFB4 0x6C42 # <CJK>
-0xCFB5 0x6E9D # <CJK>
-0xCFB6 0x7078 # <CJK>
-0xCFB7 0x72D7 # <CJK>
-0xCFB8 0x7396 # <CJK>
-0xCFB9 0x7403 # <CJK>
-0xCFBA 0x77BF # <CJK>
-0xCFBB 0x77E9 # <CJK>
-0xCFBC 0x7A76 # <CJK>
-0xCFBD 0x7D7F # <CJK>
-0xCFBE 0x8009 # <CJK>
-0xCFBF 0x81FC # <CJK>
-0xCFC0 0x8205 # <CJK>
-0xCFC1 0x820A # <CJK>
-0xCFC2 0x82DF # <CJK>
-0xCFC3 0x8862 # <CJK>
-0xCFC4 0x8B33 # <CJK>
-0xCFC5 0x8CFC # <CJK>
-0xCFC6 0x8EC0 # <CJK>
-0xCFC7 0x9011 # <CJK>
-0xCFC8 0x90B1 # <CJK>
-0xCFC9 0x9264 # <CJK>
-0xCFCA 0x92B6 # <CJK>
-0xCFCB 0x99D2 # <CJK>
-0xCFCC 0x9A45 # <CJK>
-0xCFCD 0x9CE9 # <CJK>
-0xCFCE 0x9DD7 # <CJK>
-0xCFCF 0x9F9C # <CJK>
-0xCFD0 0x570B # <CJK>
-0xCFD1 0x5C40 # <CJK>
-0xCFD2 0x83CA # <CJK>
-0xCFD3 0x97A0 # <CJK>
-0xCFD4 0x97AB # <CJK>
-0xCFD5 0x9EB4 # <CJK>
-0xCFD6 0x541B # <CJK>
-0xCFD7 0x7A98 # <CJK>
-0xCFD8 0x7FA4 # <CJK>
-0xCFD9 0x88D9 # <CJK>
-0xCFDA 0x8ECD # <CJK>
-0xCFDB 0x90E1 # <CJK>
-0xCFDC 0x5800 # <CJK>
-0xCFDD 0x5C48 # <CJK>
-0xCFDE 0x6398 # <CJK>
-0xCFDF 0x7A9F # <CJK>
-0xCFE0 0x5BAE # <CJK>
-0xCFE1 0x5F13 # <CJK>
-0xCFE2 0x7A79 # <CJK>
-0xCFE3 0x7AAE # <CJK>
-0xCFE4 0x828E # <CJK>
-0xCFE5 0x8EAC # <CJK>
-0xCFE6 0x5026 # <CJK>
-0xCFE7 0x5238 # <CJK>
-0xCFE8 0x52F8 # <CJK>
-0xCFE9 0x5377 # <CJK>
-0xCFEA 0x5708 # <CJK>
-0xCFEB 0x62F3 # <CJK>
-0xCFEC 0x6372 # <CJK>
-0xCFED 0x6B0A # <CJK>
-0xCFEE 0x6DC3 # <CJK>
-0xCFEF 0x7737 # <CJK>
-0xCFF0 0x53A5 # <CJK>
-0xCFF1 0x7357 # <CJK>
-0xCFF2 0x8568 # <CJK>
-0xCFF3 0x8E76 # <CJK>
-0xCFF4 0x95D5 # <CJK>
-0xCFF5 0x673A # <CJK>
-0xCFF6 0x6AC3 # <CJK>
-0xCFF7 0x6F70 # <CJK>
-0xCFF8 0x8A6D # <CJK>
-0xCFF9 0x8ECC # <CJK>
-0xCFFA 0x994B # <CJK>
-0xCFFB 0xF906 # <CJK>
-0xCFFC 0x6677 # <CJK>
-0xCFFD 0x6B78 # <CJK>
-0xCFFE 0x8CB4 # <CJK>
-0xD0A1 0x9B3C # <CJK>
-0xD0A2 0xF907 # <CJK>
-0xD0A3 0x53EB # <CJK>
-0xD0A4 0x572D # <CJK>
-0xD0A5 0x594E # <CJK>
-0xD0A6 0x63C6 # <CJK>
-0xD0A7 0x69FB # <CJK>
-0xD0A8 0x73EA # <CJK>
-0xD0A9 0x7845 # <CJK>
-0xD0AA 0x7ABA # <CJK>
-0xD0AB 0x7AC5 # <CJK>
-0xD0AC 0x7CFE # <CJK>
-0xD0AD 0x8475 # <CJK>
-0xD0AE 0x898F # <CJK>
-0xD0AF 0x8D73 # <CJK>
-0xD0B0 0x9035 # <CJK>
-0xD0B1 0x95A8 # <CJK>
-0xD0B2 0x52FB # <CJK>
-0xD0B3 0x5747 # <CJK>
-0xD0B4 0x7547 # <CJK>
-0xD0B5 0x7B60 # <CJK>
-0xD0B6 0x83CC # <CJK>
-0xD0B7 0x921E # <CJK>
-0xD0B8 0xF908 # <CJK>
-0xD0B9 0x6A58 # <CJK>
-0xD0BA 0x514B # <CJK>
-0xD0BB 0x524B # <CJK>
-0xD0BC 0x5287 # <CJK>
-0xD0BD 0x621F # <CJK>
-0xD0BE 0x68D8 # <CJK>
-0xD0BF 0x6975 # <CJK>
-0xD0C0 0x9699 # <CJK>
-0xD0C1 0x50C5 # <CJK>
-0xD0C2 0x52A4 # <CJK>
-0xD0C3 0x52E4 # <CJK>
-0xD0C4 0x61C3 # <CJK>
-0xD0C5 0x65A4 # <CJK>
-0xD0C6 0x6839 # <CJK>
-0xD0C7 0x69FF # <CJK>
-0xD0C8 0x747E # <CJK>
-0xD0C9 0x7B4B # <CJK>
-0xD0CA 0x82B9 # <CJK>
-0xD0CB 0x83EB # <CJK>
-0xD0CC 0x89B2 # <CJK>
-0xD0CD 0x8B39 # <CJK>
-0xD0CE 0x8FD1 # <CJK>
-0xD0CF 0x9949 # <CJK>
-0xD0D0 0xF909 # <CJK>
-0xD0D1 0x4ECA # <CJK>
-0xD0D2 0x5997 # <CJK>
-0xD0D3 0x64D2 # <CJK>
-0xD0D4 0x6611 # <CJK>
-0xD0D5 0x6A8E # <CJK>
-0xD0D6 0x7434 # <CJK>
-0xD0D7 0x7981 # <CJK>
-0xD0D8 0x79BD # <CJK>
-0xD0D9 0x82A9 # <CJK>
-0xD0DA 0x887E # <CJK>
-0xD0DB 0x887F # <CJK>
-0xD0DC 0x895F # <CJK>
-0xD0DD 0xF90A # <CJK>
-0xD0DE 0x9326 # <CJK>
-0xD0DF 0x4F0B # <CJK>
-0xD0E0 0x53CA # <CJK>
-0xD0E1 0x6025 # <CJK>
-0xD0E2 0x6271 # <CJK>
-0xD0E3 0x6C72 # <CJK>
-0xD0E4 0x7D1A # <CJK>
-0xD0E5 0x7D66 # <CJK>
-0xD0E6 0x4E98 # <CJK>
-0xD0E7 0x5162 # <CJK>
-0xD0E8 0x77DC # <CJK>
-0xD0E9 0x80AF # <CJK>
-0xD0EA 0x4F01 # <CJK>
-0xD0EB 0x4F0E # <CJK>
-0xD0EC 0x5176 # <CJK>
-0xD0ED 0x5180 # <CJK>
-0xD0EE 0x55DC # <CJK>
-0xD0EF 0x5668 # <CJK>
-0xD0F0 0x573B # <CJK>
-0xD0F1 0x57FA # <CJK>
-0xD0F2 0x57FC # <CJK>
-0xD0F3 0x5914 # <CJK>
-0xD0F4 0x5947 # <CJK>
-0xD0F5 0x5993 # <CJK>
-0xD0F6 0x5BC4 # <CJK>
-0xD0F7 0x5C90 # <CJK>
-0xD0F8 0x5D0E # <CJK>
-0xD0F9 0x5DF1 # <CJK>
-0xD0FA 0x5E7E # <CJK>
-0xD0FB 0x5FCC # <CJK>
-0xD0FC 0x6280 # <CJK>
-0xD0FD 0x65D7 # <CJK>
-0xD0FE 0x65E3 # <CJK>
-0xD1A1 0x671E # <CJK>
-0xD1A2 0x671F # <CJK>
-0xD1A3 0x675E # <CJK>
-0xD1A4 0x68CB # <CJK>
-0xD1A5 0x68C4 # <CJK>
-0xD1A6 0x6A5F # <CJK>
-0xD1A7 0x6B3A # <CJK>
-0xD1A8 0x6C23 # <CJK>
-0xD1A9 0x6C7D # <CJK>
-0xD1AA 0x6C82 # <CJK>
-0xD1AB 0x6DC7 # <CJK>
-0xD1AC 0x7398 # <CJK>
-0xD1AD 0x7426 # <CJK>
-0xD1AE 0x742A # <CJK>
-0xD1AF 0x7482 # <CJK>
-0xD1B0 0x74A3 # <CJK>
-0xD1B1 0x7578 # <CJK>
-0xD1B2 0x757F # <CJK>
-0xD1B3 0x7881 # <CJK>
-0xD1B4 0x78EF # <CJK>
-0xD1B5 0x7941 # <CJK>
-0xD1B6 0x7947 # <CJK>
-0xD1B7 0x7948 # <CJK>
-0xD1B8 0x797A # <CJK>
-0xD1B9 0x7B95 # <CJK>
-0xD1BA 0x7D00 # <CJK>
-0xD1BB 0x7DBA # <CJK>
-0xD1BC 0x7F88 # <CJK>
-0xD1BD 0x8006 # <CJK>
-0xD1BE 0x802D # <CJK>
-0xD1BF 0x808C # <CJK>
-0xD1C0 0x8A18 # <CJK>
-0xD1C1 0x8B4F # <CJK>
-0xD1C2 0x8C48 # <CJK>
-0xD1C3 0x8D77 # <CJK>
-0xD1C4 0x9321 # <CJK>
-0xD1C5 0x9324 # <CJK>
-0xD1C6 0x98E2 # <CJK>
-0xD1C7 0x9951 # <CJK>
-0xD1C8 0x9A0E # <CJK>
-0xD1C9 0x9A0F # <CJK>
-0xD1CA 0x9A65 # <CJK>
-0xD1CB 0x9E92 # <CJK>
-0xD1CC 0x7DCA # <CJK>
-0xD1CD 0x4F76 # <CJK>
-0xD1CE 0x5409 # <CJK>
-0xD1CF 0x62EE # <CJK>
-0xD1D0 0x6854 # <CJK>
-0xD1D1 0x91D1 # <CJK>
-0xD1D2 0x55AB # <CJK>
-0xD1D3 0x513A # <CJK>
-0xD1D4 0xF90B # <CJK>
-0xD1D5 0xF90C # <CJK>
-0xD1D6 0x5A1C # <CJK>
-0xD1D7 0x61E6 # <CJK>
-0xD1D8 0xF90D # <CJK>
-0xD1D9 0x62CF # <CJK>
-0xD1DA 0x62FF # <CJK>
-0xD1DB 0xF90E # <CJK>
-0xD1DC 0xF90F # <CJK>
-0xD1DD 0xF910 # <CJK>
-0xD1DE 0xF911 # <CJK>
-0xD1DF 0xF912 # <CJK>
-0xD1E0 0xF913 # <CJK>
-0xD1E1 0x90A3 # <CJK>
-0xD1E2 0xF914 # <CJK>
-0xD1E3 0xF915 # <CJK>
-0xD1E4 0xF916 # <CJK>
-0xD1E5 0xF917 # <CJK>
-0xD1E6 0xF918 # <CJK>
-0xD1E7 0x8AFE # <CJK>
-0xD1E8 0xF919 # <CJK>
-0xD1E9 0xF91A # <CJK>
-0xD1EA 0xF91B # <CJK>
-0xD1EB 0xF91C # <CJK>
-0xD1EC 0x6696 # <CJK>
-0xD1ED 0xF91D # <CJK>
-0xD1EE 0x7156 # <CJK>
-0xD1EF 0xF91E # <CJK>
-0xD1F0 0xF91F # <CJK>
-0xD1F1 0x96E3 # <CJK>
-0xD1F2 0xF920 # <CJK>
-0xD1F3 0x634F # <CJK>
-0xD1F4 0x637A # <CJK>
-0xD1F5 0x5357 # <CJK>
-0xD1F6 0xF921 # <CJK>
-0xD1F7 0x678F # <CJK>
-0xD1F8 0x6960 # <CJK>
-0xD1F9 0x6E73 # <CJK>
-0xD1FA 0xF922 # <CJK>
-0xD1FB 0x7537 # <CJK>
-0xD1FC 0xF923 # <CJK>
-0xD1FD 0xF924 # <CJK>
-0xD1FE 0xF925 # <CJK>
-0xD2A1 0x7D0D # <CJK>
-0xD2A2 0xF926 # <CJK>
-0xD2A3 0xF927 # <CJK>
-0xD2A4 0x8872 # <CJK>
-0xD2A5 0x56CA # <CJK>
-0xD2A6 0x5A18 # <CJK>
-0xD2A7 0xF928 # <CJK>
-0xD2A8 0xF929 # <CJK>
-0xD2A9 0xF92A # <CJK>
-0xD2AA 0xF92B # <CJK>
-0xD2AB 0xF92C # <CJK>
-0xD2AC 0x4E43 # <CJK>
-0xD2AD 0xF92D # <CJK>
-0xD2AE 0x5167 # <CJK>
-0xD2AF 0x5948 # <CJK>
-0xD2B0 0x67F0 # <CJK>
-0xD2B1 0x8010 # <CJK>
-0xD2B2 0xF92E # <CJK>
-0xD2B3 0x5973 # <CJK>
-0xD2B4 0x5E74 # <CJK>
-0xD2B5 0x649A # <CJK>
-0xD2B6 0x79CA # <CJK>
-0xD2B7 0x5FF5 # <CJK>
-0xD2B8 0x606C # <CJK>
-0xD2B9 0x62C8 # <CJK>
-0xD2BA 0x637B # <CJK>
-0xD2BB 0x5BE7 # <CJK>
-0xD2BC 0x5BD7 # <CJK>
-0xD2BD 0x52AA # <CJK>
-0xD2BE 0xF92F # <CJK>
-0xD2BF 0x5974 # <CJK>
-0xD2C0 0x5F29 # <CJK>
-0xD2C1 0x6012 # <CJK>
-0xD2C2 0xF930 # <CJK>
-0xD2C3 0xF931 # <CJK>
-0xD2C4 0xF932 # <CJK>
-0xD2C5 0x7459 # <CJK>
-0xD2C6 0xF933 # <CJK>
-0xD2C7 0xF934 # <CJK>
-0xD2C8 0xF935 # <CJK>
-0xD2C9 0xF936 # <CJK>
-0xD2CA 0xF937 # <CJK>
-0xD2CB 0xF938 # <CJK>
-0xD2CC 0x99D1 # <CJK>
-0xD2CD 0xF939 # <CJK>
-0xD2CE 0xF93A # <CJK>
-0xD2CF 0xF93B # <CJK>
-0xD2D0 0xF93C # <CJK>
-0xD2D1 0xF93D # <CJK>
-0xD2D2 0xF93E # <CJK>
-0xD2D3 0xF93F # <CJK>
-0xD2D4 0xF940 # <CJK>
-0xD2D5 0xF941 # <CJK>
-0xD2D6 0xF942 # <CJK>
-0xD2D7 0xF943 # <CJK>
-0xD2D8 0x6FC3 # <CJK>
-0xD2D9 0xF944 # <CJK>
-0xD2DA 0xF945 # <CJK>
-0xD2DB 0x81BF # <CJK>
-0xD2DC 0x8FB2 # <CJK>
-0xD2DD 0x60F1 # <CJK>
-0xD2DE 0xF946 # <CJK>
-0xD2DF 0xF947 # <CJK>
-0xD2E0 0x8166 # <CJK>
-0xD2E1 0xF948 # <CJK>
-0xD2E2 0xF949 # <CJK>
-0xD2E3 0x5C3F # <CJK>
-0xD2E4 0xF94A # <CJK>
-0xD2E5 0xF94B # <CJK>
-0xD2E6 0xF94C # <CJK>
-0xD2E7 0xF94D # <CJK>
-0xD2E8 0xF94E # <CJK>
-0xD2E9 0xF94F # <CJK>
-0xD2EA 0xF950 # <CJK>
-0xD2EB 0xF951 # <CJK>
-0xD2EC 0x5AE9 # <CJK>
-0xD2ED 0x8A25 # <CJK>
-0xD2EE 0x677B # <CJK>
-0xD2EF 0x7D10 # <CJK>
-0xD2F0 0xF952 # <CJK>
-0xD2F1 0xF953 # <CJK>
-0xD2F2 0xF954 # <CJK>
-0xD2F3 0xF955 # <CJK>
-0xD2F4 0xF956 # <CJK>
-0xD2F5 0xF957 # <CJK>
-0xD2F6 0x80FD # <CJK>
-0xD2F7 0xF958 # <CJK>
-0xD2F8 0xF959 # <CJK>
-0xD2F9 0x5C3C # <CJK>
-0xD2FA 0x6CE5 # <CJK>
-0xD2FB 0x533F # <CJK>
-0xD2FC 0x6EBA # <CJK>
-0xD2FD 0x591A # <CJK>
-0xD2FE 0x8336 # <CJK>
-0xD3A1 0x4E39 # <CJK>
-0xD3A2 0x4EB6 # <CJK>
-0xD3A3 0x4F46 # <CJK>
-0xD3A4 0x55AE # <CJK>
-0xD3A5 0x5718 # <CJK>
-0xD3A6 0x58C7 # <CJK>
-0xD3A7 0x5F56 # <CJK>
-0xD3A8 0x65B7 # <CJK>
-0xD3A9 0x65E6 # <CJK>
-0xD3AA 0x6A80 # <CJK>
-0xD3AB 0x6BB5 # <CJK>
-0xD3AC 0x6E4D # <CJK>
-0xD3AD 0x77ED # <CJK>
-0xD3AE 0x7AEF # <CJK>
-0xD3AF 0x7C1E # <CJK>
-0xD3B0 0x7DDE # <CJK>
-0xD3B1 0x86CB # <CJK>
-0xD3B2 0x8892 # <CJK>
-0xD3B3 0x9132 # <CJK>
-0xD3B4 0x935B # <CJK>
-0xD3B5 0x64BB # <CJK>
-0xD3B6 0x6FBE # <CJK>
-0xD3B7 0x737A # <CJK>
-0xD3B8 0x75B8 # <CJK>
-0xD3B9 0x9054 # <CJK>
-0xD3BA 0x5556 # <CJK>
-0xD3BB 0x574D # <CJK>
-0xD3BC 0x61BA # <CJK>
-0xD3BD 0x64D4 # <CJK>
-0xD3BE 0x66C7 # <CJK>
-0xD3BF 0x6DE1 # <CJK>
-0xD3C0 0x6E5B # <CJK>
-0xD3C1 0x6F6D # <CJK>
-0xD3C2 0x6FB9 # <CJK>
-0xD3C3 0x75F0 # <CJK>
-0xD3C4 0x8043 # <CJK>
-0xD3C5 0x81BD # <CJK>
-0xD3C6 0x8541 # <CJK>
-0xD3C7 0x8983 # <CJK>
-0xD3C8 0x8AC7 # <CJK>
-0xD3C9 0x8B5A # <CJK>
-0xD3CA 0x931F # <CJK>
-0xD3CB 0x6C93 # <CJK>
-0xD3CC 0x7553 # <CJK>
-0xD3CD 0x7B54 # <CJK>
-0xD3CE 0x8E0F # <CJK>
-0xD3CF 0x905D # <CJK>
-0xD3D0 0x5510 # <CJK>
-0xD3D1 0x5802 # <CJK>
-0xD3D2 0x5858 # <CJK>
-0xD3D3 0x5E62 # <CJK>
-0xD3D4 0x6207 # <CJK>
-0xD3D5 0x649E # <CJK>
-0xD3D6 0x68E0 # <CJK>
-0xD3D7 0x7576 # <CJK>
-0xD3D8 0x7CD6 # <CJK>
-0xD3D9 0x87B3 # <CJK>
-0xD3DA 0x9EE8 # <CJK>
-0xD3DB 0x4EE3 # <CJK>
-0xD3DC 0x5788 # <CJK>
-0xD3DD 0x576E # <CJK>
-0xD3DE 0x5927 # <CJK>
-0xD3DF 0x5C0D # <CJK>
-0xD3E0 0x5CB1 # <CJK>
-0xD3E1 0x5E36 # <CJK>
-0xD3E2 0x5F85 # <CJK>
-0xD3E3 0x6234 # <CJK>
-0xD3E4 0x64E1 # <CJK>
-0xD3E5 0x73B3 # <CJK>
-0xD3E6 0x81FA # <CJK>
-0xD3E7 0x888B # <CJK>
-0xD3E8 0x8CB8 # <CJK>
-0xD3E9 0x968A # <CJK>
-0xD3EA 0x9EDB # <CJK>
-0xD3EB 0x5B85 # <CJK>
-0xD3EC 0x5FB7 # <CJK>
-0xD3ED 0x60B3 # <CJK>
-0xD3EE 0x5012 # <CJK>
-0xD3EF 0x5200 # <CJK>
-0xD3F0 0x5230 # <CJK>
-0xD3F1 0x5716 # <CJK>
-0xD3F2 0x5835 # <CJK>
-0xD3F3 0x5857 # <CJK>
-0xD3F4 0x5C0E # <CJK>
-0xD3F5 0x5C60 # <CJK>
-0xD3F6 0x5CF6 # <CJK>
-0xD3F7 0x5D8B # <CJK>
-0xD3F8 0x5EA6 # <CJK>
-0xD3F9 0x5F92 # <CJK>
-0xD3FA 0x60BC # <CJK>
-0xD3FB 0x6311 # <CJK>
-0xD3FC 0x6389 # <CJK>
-0xD3FD 0x6417 # <CJK>
-0xD3FE 0x6843 # <CJK>
-0xD4A1 0x68F9 # <CJK>
-0xD4A2 0x6AC2 # <CJK>
-0xD4A3 0x6DD8 # <CJK>
-0xD4A4 0x6E21 # <CJK>
-0xD4A5 0x6ED4 # <CJK>
-0xD4A6 0x6FE4 # <CJK>
-0xD4A7 0x71FE # <CJK>
-0xD4A8 0x76DC # <CJK>
-0xD4A9 0x7779 # <CJK>
-0xD4AA 0x79B1 # <CJK>
-0xD4AB 0x7A3B # <CJK>
-0xD4AC 0x8404 # <CJK>
-0xD4AD 0x89A9 # <CJK>
-0xD4AE 0x8CED # <CJK>
-0xD4AF 0x8DF3 # <CJK>
-0xD4B0 0x8E48 # <CJK>
-0xD4B1 0x9003 # <CJK>
-0xD4B2 0x9014 # <CJK>
-0xD4B3 0x9053 # <CJK>
-0xD4B4 0x90FD # <CJK>
-0xD4B5 0x934D # <CJK>
-0xD4B6 0x9676 # <CJK>
-0xD4B7 0x97DC # <CJK>
-0xD4B8 0x6BD2 # <CJK>
-0xD4B9 0x7006 # <CJK>
-0xD4BA 0x7258 # <CJK>
-0xD4BB 0x72A2 # <CJK>
-0xD4BC 0x7368 # <CJK>
-0xD4BD 0x7763 # <CJK>
-0xD4BE 0x79BF # <CJK>
-0xD4BF 0x7BE4 # <CJK>
-0xD4C0 0x7E9B # <CJK>
-0xD4C1 0x8B80 # <CJK>
-0xD4C2 0x58A9 # <CJK>
-0xD4C3 0x60C7 # <CJK>
-0xD4C4 0x6566 # <CJK>
-0xD4C5 0x65FD # <CJK>
-0xD4C6 0x66BE # <CJK>
-0xD4C7 0x6C8C # <CJK>
-0xD4C8 0x711E # <CJK>
-0xD4C9 0x71C9 # <CJK>
-0xD4CA 0x8C5A # <CJK>
-0xD4CB 0x9813 # <CJK>
-0xD4CC 0x4E6D # <CJK>
-0xD4CD 0x7A81 # <CJK>
-0xD4CE 0x4EDD # <CJK>
-0xD4CF 0x51AC # <CJK>
-0xD4D0 0x51CD # <CJK>
-0xD4D1 0x52D5 # <CJK>
-0xD4D2 0x540C # <CJK>
-0xD4D3 0x61A7 # <CJK>
-0xD4D4 0x6771 # <CJK>
-0xD4D5 0x6850 # <CJK>
-0xD4D6 0x68DF # <CJK>
-0xD4D7 0x6D1E # <CJK>
-0xD4D8 0x6F7C # <CJK>
-0xD4D9 0x75BC # <CJK>
-0xD4DA 0x77B3 # <CJK>
-0xD4DB 0x7AE5 # <CJK>
-0xD4DC 0x80F4 # <CJK>
-0xD4DD 0x8463 # <CJK>
-0xD4DE 0x9285 # <CJK>
-0xD4DF 0x515C # <CJK>
-0xD4E0 0x6597 # <CJK>
-0xD4E1 0x675C # <CJK>
-0xD4E2 0x6793 # <CJK>
-0xD4E3 0x75D8 # <CJK>
-0xD4E4 0x7AC7 # <CJK>
-0xD4E5 0x8373 # <CJK>
-0xD4E6 0xF95A # <CJK>
-0xD4E7 0x8C46 # <CJK>
-0xD4E8 0x9017 # <CJK>
-0xD4E9 0x982D # <CJK>
-0xD4EA 0x5C6F # <CJK>
-0xD4EB 0x81C0 # <CJK>
-0xD4EC 0x829A # <CJK>
-0xD4ED 0x9041 # <CJK>
-0xD4EE 0x906F # <CJK>
-0xD4EF 0x920D # <CJK>
-0xD4F0 0x5F97 # <CJK>
-0xD4F1 0x5D9D # <CJK>
-0xD4F2 0x6A59 # <CJK>
-0xD4F3 0x71C8 # <CJK>
-0xD4F4 0x767B # <CJK>
-0xD4F5 0x7B49 # <CJK>
-0xD4F6 0x85E4 # <CJK>
-0xD4F7 0x8B04 # <CJK>
-0xD4F8 0x9127 # <CJK>
-0xD4F9 0x9A30 # <CJK>
-0xD4FA 0x5587 # <CJK>
-0xD4FB 0x61F6 # <CJK>
-0xD4FC 0xF95B # <CJK>
-0xD4FD 0x7669 # <CJK>
-0xD4FE 0x7F85 # <CJK>
-0xD5A1 0x863F # <CJK>
-0xD5A2 0x87BA # <CJK>
-0xD5A3 0x88F8 # <CJK>
-0xD5A4 0x908F # <CJK>
-0xD5A5 0xF95C # <CJK>
-0xD5A6 0x6D1B # <CJK>
-0xD5A7 0x70D9 # <CJK>
-0xD5A8 0x73DE # <CJK>
-0xD5A9 0x7D61 # <CJK>
-0xD5AA 0x843D # <CJK>
-0xD5AB 0xF95D # <CJK>
-0xD5AC 0x916A # <CJK>
-0xD5AD 0x99F1 # <CJK>
-0xD5AE 0xF95E # <CJK>
-0xD5AF 0x4E82 # <CJK>
-0xD5B0 0x5375 # <CJK>
-0xD5B1 0x6B04 # <CJK>
-0xD5B2 0x6B12 # <CJK>
-0xD5B3 0x703E # <CJK>
-0xD5B4 0x721B # <CJK>
-0xD5B5 0x862D # <CJK>
-0xD5B6 0x9E1E # <CJK>
-0xD5B7 0x524C # <CJK>
-0xD5B8 0x8FA3 # <CJK>
-0xD5B9 0x5D50 # <CJK>
-0xD5BA 0x64E5 # <CJK>
-0xD5BB 0x652C # <CJK>
-0xD5BC 0x6B16 # <CJK>
-0xD5BD 0x6FEB # <CJK>
-0xD5BE 0x7C43 # <CJK>
-0xD5BF 0x7E9C # <CJK>
-0xD5C0 0x85CD # <CJK>
-0xD5C1 0x8964 # <CJK>
-0xD5C2 0x89BD # <CJK>
-0xD5C3 0x62C9 # <CJK>
-0xD5C4 0x81D8 # <CJK>
-0xD5C5 0x881F # <CJK>
-0xD5C6 0x5ECA # <CJK>
-0xD5C7 0x6717 # <CJK>
-0xD5C8 0x6D6A # <CJK>
-0xD5C9 0x72FC # <CJK>
-0xD5CA 0x7405 # <CJK>
-0xD5CB 0x746F # <CJK>
-0xD5CC 0x8782 # <CJK>
-0xD5CD 0x90DE # <CJK>
-0xD5CE 0x4F86 # <CJK>
-0xD5CF 0x5D0D # <CJK>
-0xD5D0 0x5FA0 # <CJK>
-0xD5D1 0x840A # <CJK>
-0xD5D2 0x51B7 # <CJK>
-0xD5D3 0x63A0 # <CJK>
-0xD5D4 0x7565 # <CJK>
-0xD5D5 0x4EAE # <CJK>
-0xD5D6 0x5006 # <CJK>
-0xD5D7 0x5169 # <CJK>
-0xD5D8 0x51C9 # <CJK>
-0xD5D9 0x6881 # <CJK>
-0xD5DA 0x6A11 # <CJK>
-0xD5DB 0x7CAE # <CJK>
-0xD5DC 0x7CB1 # <CJK>
-0xD5DD 0x7CE7 # <CJK>
-0xD5DE 0x826F # <CJK>
-0xD5DF 0x8AD2 # <CJK>
-0xD5E0 0x8F1B # <CJK>
-0xD5E1 0x91CF # <CJK>
-0xD5E2 0x4FB6 # <CJK>
-0xD5E3 0x5137 # <CJK>
-0xD5E4 0x52F5 # <CJK>
-0xD5E5 0x5442 # <CJK>
-0xD5E6 0x5EEC # <CJK>
-0xD5E7 0x616E # <CJK>
-0xD5E8 0x623E # <CJK>
-0xD5E9 0x65C5 # <CJK>
-0xD5EA 0x6ADA # <CJK>
-0xD5EB 0x6FFE # <CJK>
-0xD5EC 0x792A # <CJK>
-0xD5ED 0x85DC # <CJK>
-0xD5EE 0x8823 # <CJK>
-0xD5EF 0x95AD # <CJK>
-0xD5F0 0x9A62 # <CJK>
-0xD5F1 0x9A6A # <CJK>
-0xD5F2 0x9E97 # <CJK>
-0xD5F3 0x9ECE # <CJK>
-0xD5F4 0x529B # <CJK>
-0xD5F5 0x66C6 # <CJK>
-0xD5F6 0x6B77 # <CJK>
-0xD5F7 0x701D # <CJK>
-0xD5F8 0x792B # <CJK>
-0xD5F9 0x8F62 # <CJK>
-0xD5FA 0x9742 # <CJK>
-0xD5FB 0x6190 # <CJK>
-0xD5FC 0x6200 # <CJK>
-0xD5FD 0x6523 # <CJK>
-0xD5FE 0x6F23 # <CJK>
-0xD6A1 0x7149 # <CJK>
-0xD6A2 0x7489 # <CJK>
-0xD6A3 0x7DF4 # <CJK>
-0xD6A4 0x806F # <CJK>
-0xD6A5 0x84EE # <CJK>
-0xD6A6 0x8F26 # <CJK>
-0xD6A7 0x9023 # <CJK>
-0xD6A8 0x934A # <CJK>
-0xD6A9 0x51BD # <CJK>
-0xD6AA 0x5217 # <CJK>
-0xD6AB 0x52A3 # <CJK>
-0xD6AC 0x6D0C # <CJK>
-0xD6AD 0x70C8 # <CJK>
-0xD6AE 0x88C2 # <CJK>
-0xD6AF 0x5EC9 # <CJK>
-0xD6B0 0x6582 # <CJK>
-0xD6B1 0x6BAE # <CJK>
-0xD6B2 0x6FC2 # <CJK>
-0xD6B3 0x7C3E # <CJK>
-0xD6B4 0x7375 # <CJK>
-0xD6B5 0x4EE4 # <CJK>
-0xD6B6 0x4F36 # <CJK>
-0xD6B7 0x56F9 # <CJK>
-0xD6B8 0xF95F # <CJK>
-0xD6B9 0x5CBA # <CJK>
-0xD6BA 0x5DBA # <CJK>
-0xD6BB 0x601C # <CJK>
-0xD6BC 0x73B2 # <CJK>
-0xD6BD 0x7B2D # <CJK>
-0xD6BE 0x7F9A # <CJK>
-0xD6BF 0x7FCE # <CJK>
-0xD6C0 0x8046 # <CJK>
-0xD6C1 0x901E # <CJK>
-0xD6C2 0x9234 # <CJK>
-0xD6C3 0x96F6 # <CJK>
-0xD6C4 0x9748 # <CJK>
-0xD6C5 0x9818 # <CJK>
-0xD6C6 0x9F61 # <CJK>
-0xD6C7 0x4F8B # <CJK>
-0xD6C8 0x6FA7 # <CJK>
-0xD6C9 0x79AE # <CJK>
-0xD6CA 0x91B4 # <CJK>
-0xD6CB 0x96B7 # <CJK>
-0xD6CC 0x52DE # <CJK>
-0xD6CD 0xF960 # <CJK>
-0xD6CE 0x6488 # <CJK>
-0xD6CF 0x64C4 # <CJK>
-0xD6D0 0x6AD3 # <CJK>
-0xD6D1 0x6F5E # <CJK>
-0xD6D2 0x7018 # <CJK>
-0xD6D3 0x7210 # <CJK>
-0xD6D4 0x76E7 # <CJK>
-0xD6D5 0x8001 # <CJK>
-0xD6D6 0x8606 # <CJK>
-0xD6D7 0x865C # <CJK>
-0xD6D8 0x8DEF # <CJK>
-0xD6D9 0x8F05 # <CJK>
-0xD6DA 0x9732 # <CJK>
-0xD6DB 0x9B6F # <CJK>
-0xD6DC 0x9DFA # <CJK>
-0xD6DD 0x9E75 # <CJK>
-0xD6DE 0x788C # <CJK>
-0xD6DF 0x797F # <CJK>
-0xD6E0 0x7DA0 # <CJK>
-0xD6E1 0x83C9 # <CJK>
-0xD6E2 0x9304 # <CJK>
-0xD6E3 0x9E7F # <CJK>
-0xD6E4 0x9E93 # <CJK>
-0xD6E5 0x8AD6 # <CJK>
-0xD6E6 0x58DF # <CJK>
-0xD6E7 0x5F04 # <CJK>
-0xD6E8 0x6727 # <CJK>
-0xD6E9 0x7027 # <CJK>
-0xD6EA 0x74CF # <CJK>
-0xD6EB 0x7C60 # <CJK>
-0xD6EC 0x807E # <CJK>
-0xD6ED 0x5121 # <CJK>
-0xD6EE 0x7028 # <CJK>
-0xD6EF 0x7262 # <CJK>
-0xD6F0 0x78CA # <CJK>
-0xD6F1 0x8CC2 # <CJK>
-0xD6F2 0x8CDA # <CJK>
-0xD6F3 0x8CF4 # <CJK>
-0xD6F4 0x96F7 # <CJK>
-0xD6F5 0x4E86 # <CJK>
-0xD6F6 0x50DA # <CJK>
-0xD6F7 0x5BEE # <CJK>
-0xD6F8 0x5ED6 # <CJK>
-0xD6F9 0x6599 # <CJK>
-0xD6FA 0x71CE # <CJK>
-0xD6FB 0x7642 # <CJK>
-0xD6FC 0x77AD # <CJK>
-0xD6FD 0x804A # <CJK>
-0xD6FE 0x84FC # <CJK>
-0xD7A1 0x907C # <CJK>
-0xD7A2 0x9B27 # <CJK>
-0xD7A3 0x9F8D # <CJK>
-0xD7A4 0x58D8 # <CJK>
-0xD7A5 0x5A41 # <CJK>
-0xD7A6 0x5C62 # <CJK>
-0xD7A7 0x6A13 # <CJK>
-0xD7A8 0x6DDA # <CJK>
-0xD7A9 0x6F0F # <CJK>
-0xD7AA 0x763B # <CJK>
-0xD7AB 0x7D2F # <CJK>
-0xD7AC 0x7E37 # <CJK>
-0xD7AD 0x851E # <CJK>
-0xD7AE 0x8938 # <CJK>
-0xD7AF 0x93E4 # <CJK>
-0xD7B0 0x964B # <CJK>
-0xD7B1 0x5289 # <CJK>
-0xD7B2 0x65D2 # <CJK>
-0xD7B3 0x67F3 # <CJK>
-0xD7B4 0x69B4 # <CJK>
-0xD7B5 0x6D41 # <CJK>
-0xD7B6 0x6E9C # <CJK>
-0xD7B7 0x700F # <CJK>
-0xD7B8 0x7409 # <CJK>
-0xD7B9 0x7460 # <CJK>
-0xD7BA 0x7559 # <CJK>
-0xD7BB 0x7624 # <CJK>
-0xD7BC 0x786B # <CJK>
-0xD7BD 0x8B2C # <CJK>
-0xD7BE 0x985E # <CJK>
-0xD7BF 0x516D # <CJK>
-0xD7C0 0x622E # <CJK>
-0xD7C1 0x9678 # <CJK>
-0xD7C2 0x4F96 # <CJK>
-0xD7C3 0x502B # <CJK>
-0xD7C4 0x5D19 # <CJK>
-0xD7C5 0x6DEA # <CJK>
-0xD7C6 0x7DB8 # <CJK>
-0xD7C7 0x8F2A # <CJK>
-0xD7C8 0x5F8B # <CJK>
-0xD7C9 0x6144 # <CJK>
-0xD7CA 0x6817 # <CJK>
-0xD7CB 0xF961 # <CJK>
-0xD7CC 0x9686 # <CJK>
-0xD7CD 0x52D2 # <CJK>
-0xD7CE 0x808B # <CJK>
-0xD7CF 0x51DC # <CJK>
-0xD7D0 0x51CC # <CJK>
-0xD7D1 0x695E # <CJK>
-0xD7D2 0x7A1C # <CJK>
-0xD7D3 0x7DBE # <CJK>
-0xD7D4 0x83F1 # <CJK>
-0xD7D5 0x9675 # <CJK>
-0xD7D6 0x4FDA # <CJK>
-0xD7D7 0x5229 # <CJK>
-0xD7D8 0x5398 # <CJK>
-0xD7D9 0x540F # <CJK>
-0xD7DA 0x550E # <CJK>
-0xD7DB 0x5C65 # <CJK>
-0xD7DC 0x60A7 # <CJK>
-0xD7DD 0x674E # <CJK>
-0xD7DE 0x68A8 # <CJK>
-0xD7DF 0x6D6C # <CJK>
-0xD7E0 0x7281 # <CJK>
-0xD7E1 0x72F8 # <CJK>
-0xD7E2 0x7406 # <CJK>
-0xD7E3 0x7483 # <CJK>
-0xD7E4 0xF962 # <CJK>
-0xD7E5 0x75E2 # <CJK>
-0xD7E6 0x7C6C # <CJK>
-0xD7E7 0x7F79 # <CJK>
-0xD7E8 0x7FB8 # <CJK>
-0xD7E9 0x8389 # <CJK>
-0xD7EA 0x88CF # <CJK>
-0xD7EB 0x88E1 # <CJK>
-0xD7EC 0x91CC # <CJK>
-0xD7ED 0x91D0 # <CJK>
-0xD7EE 0x96E2 # <CJK>
-0xD7EF 0x9BC9 # <CJK>
-0xD7F0 0x541D # <CJK>
-0xD7F1 0x6F7E # <CJK>
-0xD7F2 0x71D0 # <CJK>
-0xD7F3 0x7498 # <CJK>
-0xD7F4 0x85FA # <CJK>
-0xD7F5 0x8EAA # <CJK>
-0xD7F6 0x96A3 # <CJK>
-0xD7F7 0x9C57 # <CJK>
-0xD7F8 0x9E9F # <CJK>
-0xD7F9 0x6797 # <CJK>
-0xD7FA 0x6DCB # <CJK>
-0xD7FB 0x7433 # <CJK>
-0xD7FC 0x81E8 # <CJK>
-0xD7FD 0x9716 # <CJK>
-0xD7FE 0x782C # <CJK>
-0xD8A1 0x7ACB # <CJK>
-0xD8A2 0x7B20 # <CJK>
-0xD8A3 0x7C92 # <CJK>
-0xD8A4 0x6469 # <CJK>
-0xD8A5 0x746A # <CJK>
-0xD8A6 0x75F2 # <CJK>
-0xD8A7 0x78BC # <CJK>
-0xD8A8 0x78E8 # <CJK>
-0xD8A9 0x99AC # <CJK>
-0xD8AA 0x9B54 # <CJK>
-0xD8AB 0x9EBB # <CJK>
-0xD8AC 0x5BDE # <CJK>
-0xD8AD 0x5E55 # <CJK>
-0xD8AE 0x6F20 # <CJK>
-0xD8AF 0x819C # <CJK>
-0xD8B0 0x83AB # <CJK>
-0xD8B1 0x9088 # <CJK>
-0xD8B2 0x4E07 # <CJK>
-0xD8B3 0x534D # <CJK>
-0xD8B4 0x5A29 # <CJK>
-0xD8B5 0x5DD2 # <CJK>
-0xD8B6 0x5F4E # <CJK>
-0xD8B7 0x6162 # <CJK>
-0xD8B8 0x633D # <CJK>
-0xD8B9 0x6669 # <CJK>
-0xD8BA 0x66FC # <CJK>
-0xD8BB 0x6EFF # <CJK>
-0xD8BC 0x6F2B # <CJK>
-0xD8BD 0x7063 # <CJK>
-0xD8BE 0x779E # <CJK>
-0xD8BF 0x842C # <CJK>
-0xD8C0 0x8513 # <CJK>
-0xD8C1 0x883B # <CJK>
-0xD8C2 0x8F13 # <CJK>
-0xD8C3 0x9945 # <CJK>
-0xD8C4 0x9C3B # <CJK>
-0xD8C5 0x551C # <CJK>
-0xD8C6 0x62B9 # <CJK>
-0xD8C7 0x672B # <CJK>
-0xD8C8 0x6CAB # <CJK>
-0xD8C9 0x8309 # <CJK>
-0xD8CA 0x896A # <CJK>
-0xD8CB 0x977A # <CJK>
-0xD8CC 0x4EA1 # <CJK>
-0xD8CD 0x5984 # <CJK>
-0xD8CE 0x5FD8 # <CJK>
-0xD8CF 0x5FD9 # <CJK>
-0xD8D0 0x671B # <CJK>
-0xD8D1 0x7DB2 # <CJK>
-0xD8D2 0x7F54 # <CJK>
-0xD8D3 0x8292 # <CJK>
-0xD8D4 0x832B # <CJK>
-0xD8D5 0x83BD # <CJK>
-0xD8D6 0x8F1E # <CJK>
-0xD8D7 0x9099 # <CJK>
-0xD8D8 0x57CB # <CJK>
-0xD8D9 0x59B9 # <CJK>
-0xD8DA 0x5A92 # <CJK>
-0xD8DB 0x5BD0 # <CJK>
-0xD8DC 0x6627 # <CJK>
-0xD8DD 0x679A # <CJK>
-0xD8DE 0x6885 # <CJK>
-0xD8DF 0x6BCF # <CJK>
-0xD8E0 0x7164 # <CJK>
-0xD8E1 0x7F75 # <CJK>
-0xD8E2 0x8CB7 # <CJK>
-0xD8E3 0x8CE3 # <CJK>
-0xD8E4 0x9081 # <CJK>
-0xD8E5 0x9B45 # <CJK>
-0xD8E6 0x8108 # <CJK>
-0xD8E7 0x8C8A # <CJK>
-0xD8E8 0x964C # <CJK>
-0xD8E9 0x9A40 # <CJK>
-0xD8EA 0x9EA5 # <CJK>
-0xD8EB 0x5B5F # <CJK>
-0xD8EC 0x6C13 # <CJK>
-0xD8ED 0x731B # <CJK>
-0xD8EE 0x76F2 # <CJK>
-0xD8EF 0x76DF # <CJK>
-0xD8F0 0x840C # <CJK>
-0xD8F1 0x51AA # <CJK>
-0xD8F2 0x8993 # <CJK>
-0xD8F3 0x514D # <CJK>
-0xD8F4 0x5195 # <CJK>
-0xD8F5 0x52C9 # <CJK>
-0xD8F6 0x68C9 # <CJK>
-0xD8F7 0x6C94 # <CJK>
-0xD8F8 0x7704 # <CJK>
-0xD8F9 0x7720 # <CJK>
-0xD8FA 0x7DBF # <CJK>
-0xD8FB 0x7DEC # <CJK>
-0xD8FC 0x9762 # <CJK>
-0xD8FD 0x9EB5 # <CJK>
-0xD8FE 0x6EC5 # <CJK>
-0xD9A1 0x8511 # <CJK>
-0xD9A2 0x51A5 # <CJK>
-0xD9A3 0x540D # <CJK>
-0xD9A4 0x547D # <CJK>
-0xD9A5 0x660E # <CJK>
-0xD9A6 0x669D # <CJK>
-0xD9A7 0x6927 # <CJK>
-0xD9A8 0x6E9F # <CJK>
-0xD9A9 0x76BF # <CJK>
-0xD9AA 0x7791 # <CJK>
-0xD9AB 0x8317 # <CJK>
-0xD9AC 0x84C2 # <CJK>
-0xD9AD 0x879F # <CJK>
-0xD9AE 0x9169 # <CJK>
-0xD9AF 0x9298 # <CJK>
-0xD9B0 0x9CF4 # <CJK>
-0xD9B1 0x8882 # <CJK>
-0xD9B2 0x4FAE # <CJK>
-0xD9B3 0x5192 # <CJK>
-0xD9B4 0x52DF # <CJK>
-0xD9B5 0x59C6 # <CJK>
-0xD9B6 0x5E3D # <CJK>
-0xD9B7 0x6155 # <CJK>
-0xD9B8 0x6478 # <CJK>
-0xD9B9 0x6479 # <CJK>
-0xD9BA 0x66AE # <CJK>
-0xD9BB 0x67D0 # <CJK>
-0xD9BC 0x6A21 # <CJK>
-0xD9BD 0x6BCD # <CJK>
-0xD9BE 0x6BDB # <CJK>
-0xD9BF 0x725F # <CJK>
-0xD9C0 0x7261 # <CJK>
-0xD9C1 0x7441 # <CJK>
-0xD9C2 0x7738 # <CJK>
-0xD9C3 0x77DB # <CJK>
-0xD9C4 0x8017 # <CJK>
-0xD9C5 0x82BC # <CJK>
-0xD9C6 0x8305 # <CJK>
-0xD9C7 0x8B00 # <CJK>
-0xD9C8 0x8B28 # <CJK>
-0xD9C9 0x8C8C # <CJK>
-0xD9CA 0x6728 # <CJK>
-0xD9CB 0x6C90 # <CJK>
-0xD9CC 0x7267 # <CJK>
-0xD9CD 0x76EE # <CJK>
-0xD9CE 0x7766 # <CJK>
-0xD9CF 0x7A46 # <CJK>
-0xD9D0 0x9DA9 # <CJK>
-0xD9D1 0x6B7F # <CJK>
-0xD9D2 0x6C92 # <CJK>
-0xD9D3 0x5922 # <CJK>
-0xD9D4 0x6726 # <CJK>
-0xD9D5 0x8499 # <CJK>
-0xD9D6 0x536F # <CJK>
-0xD9D7 0x5893 # <CJK>
-0xD9D8 0x5999 # <CJK>
-0xD9D9 0x5EDF # <CJK>
-0xD9DA 0x63CF # <CJK>
-0xD9DB 0x6634 # <CJK>
-0xD9DC 0x6773 # <CJK>
-0xD9DD 0x6E3A # <CJK>
-0xD9DE 0x732B # <CJK>
-0xD9DF 0x7AD7 # <CJK>
-0xD9E0 0x82D7 # <CJK>
-0xD9E1 0x9328 # <CJK>
-0xD9E2 0x52D9 # <CJK>
-0xD9E3 0x5DEB # <CJK>
-0xD9E4 0x61AE # <CJK>
-0xD9E5 0x61CB # <CJK>
-0xD9E6 0x620A # <CJK>
-0xD9E7 0x62C7 # <CJK>
-0xD9E8 0x64AB # <CJK>
-0xD9E9 0x65E0 # <CJK>
-0xD9EA 0x6959 # <CJK>
-0xD9EB 0x6B66 # <CJK>
-0xD9EC 0x6BCB # <CJK>
-0xD9ED 0x7121 # <CJK>
-0xD9EE 0x73F7 # <CJK>
-0xD9EF 0x755D # <CJK>
-0xD9F0 0x7E46 # <CJK>
-0xD9F1 0x821E # <CJK>
-0xD9F2 0x8302 # <CJK>
-0xD9F3 0x856A # <CJK>
-0xD9F4 0x8AA3 # <CJK>
-0xD9F5 0x8CBF # <CJK>
-0xD9F6 0x9727 # <CJK>
-0xD9F7 0x9D61 # <CJK>
-0xD9F8 0x58A8 # <CJK>
-0xD9F9 0x9ED8 # <CJK>
-0xD9FA 0x5011 # <CJK>
-0xD9FB 0x520E # <CJK>
-0xD9FC 0x543B # <CJK>
-0xD9FD 0x554F # <CJK>
-0xD9FE 0x6587 # <CJK>
-0xDAA1 0x6C76 # <CJK>
-0xDAA2 0x7D0A # <CJK>
-0xDAA3 0x7D0B # <CJK>
-0xDAA4 0x805E # <CJK>
-0xDAA5 0x868A # <CJK>
-0xDAA6 0x9580 # <CJK>
-0xDAA7 0x96EF # <CJK>
-0xDAA8 0x52FF # <CJK>
-0xDAA9 0x6C95 # <CJK>
-0xDAAA 0x7269 # <CJK>
-0xDAAB 0x5473 # <CJK>
-0xDAAC 0x5A9A # <CJK>
-0xDAAD 0x5C3E # <CJK>
-0xDAAE 0x5D4B # <CJK>
-0xDAAF 0x5F4C # <CJK>
-0xDAB0 0x5FAE # <CJK>
-0xDAB1 0x672A # <CJK>
-0xDAB2 0x68B6 # <CJK>
-0xDAB3 0x6963 # <CJK>
-0xDAB4 0x6E3C # <CJK>
-0xDAB5 0x6E44 # <CJK>
-0xDAB6 0x7709 # <CJK>
-0xDAB7 0x7C73 # <CJK>
-0xDAB8 0x7F8E # <CJK>
-0xDAB9 0x8587 # <CJK>
-0xDABA 0x8B0E # <CJK>
-0xDABB 0x8FF7 # <CJK>
-0xDABC 0x9761 # <CJK>
-0xDABD 0x9EF4 # <CJK>
-0xDABE 0x5CB7 # <CJK>
-0xDABF 0x60B6 # <CJK>
-0xDAC0 0x610D # <CJK>
-0xDAC1 0x61AB # <CJK>
-0xDAC2 0x654F # <CJK>
-0xDAC3 0x65FB # <CJK>
-0xDAC4 0x65FC # <CJK>
-0xDAC5 0x6C11 # <CJK>
-0xDAC6 0x6CEF # <CJK>
-0xDAC7 0x739F # <CJK>
-0xDAC8 0x73C9 # <CJK>
-0xDAC9 0x7DE1 # <CJK>
-0xDACA 0x9594 # <CJK>
-0xDACB 0x5BC6 # <CJK>
-0xDACC 0x871C # <CJK>
-0xDACD 0x8B10 # <CJK>
-0xDACE 0x525D # <CJK>
-0xDACF 0x535A # <CJK>
-0xDAD0 0x62CD # <CJK>
-0xDAD1 0x640F # <CJK>
-0xDAD2 0x64B2 # <CJK>
-0xDAD3 0x6734 # <CJK>
-0xDAD4 0x6A38 # <CJK>
-0xDAD5 0x6CCA # <CJK>
-0xDAD6 0x73C0 # <CJK>
-0xDAD7 0x749E # <CJK>
-0xDAD8 0x7B94 # <CJK>
-0xDAD9 0x7C95 # <CJK>
-0xDADA 0x7E1B # <CJK>
-0xDADB 0x818A # <CJK>
-0xDADC 0x8236 # <CJK>
-0xDADD 0x8584 # <CJK>
-0xDADE 0x8FEB # <CJK>
-0xDADF 0x96F9 # <CJK>
-0xDAE0 0x99C1 # <CJK>
-0xDAE1 0x4F34 # <CJK>
-0xDAE2 0x534A # <CJK>
-0xDAE3 0x53CD # <CJK>
-0xDAE4 0x53DB # <CJK>
-0xDAE5 0x62CC # <CJK>
-0xDAE6 0x642C # <CJK>
-0xDAE7 0x6500 # <CJK>
-0xDAE8 0x6591 # <CJK>
-0xDAE9 0x69C3 # <CJK>
-0xDAEA 0x6CEE # <CJK>
-0xDAEB 0x6F58 # <CJK>
-0xDAEC 0x73ED # <CJK>
-0xDAED 0x7554 # <CJK>
-0xDAEE 0x7622 # <CJK>
-0xDAEF 0x76E4 # <CJK>
-0xDAF0 0x76FC # <CJK>
-0xDAF1 0x78D0 # <CJK>
-0xDAF2 0x78FB # <CJK>
-0xDAF3 0x792C # <CJK>
-0xDAF4 0x7D46 # <CJK>
-0xDAF5 0x822C # <CJK>
-0xDAF6 0x87E0 # <CJK>
-0xDAF7 0x8FD4 # <CJK>
-0xDAF8 0x9812 # <CJK>
-0xDAF9 0x98EF # <CJK>
-0xDAFA 0x52C3 # <CJK>
-0xDAFB 0x62D4 # <CJK>
-0xDAFC 0x64A5 # <CJK>
-0xDAFD 0x6E24 # <CJK>
-0xDAFE 0x6F51 # <CJK>
-0xDBA1 0x767C # <CJK>
-0xDBA2 0x8DCB # <CJK>
-0xDBA3 0x91B1 # <CJK>
-0xDBA4 0x9262 # <CJK>
-0xDBA5 0x9AEE # <CJK>
-0xDBA6 0x9B43 # <CJK>
-0xDBA7 0x5023 # <CJK>
-0xDBA8 0x508D # <CJK>
-0xDBA9 0x574A # <CJK>
-0xDBAA 0x59A8 # <CJK>
-0xDBAB 0x5C28 # <CJK>
-0xDBAC 0x5E47 # <CJK>
-0xDBAD 0x5F77 # <CJK>
-0xDBAE 0x623F # <CJK>
-0xDBAF 0x653E # <CJK>
-0xDBB0 0x65B9 # <CJK>
-0xDBB1 0x65C1 # <CJK>
-0xDBB2 0x6609 # <CJK>
-0xDBB3 0x678B # <CJK>
-0xDBB4 0x699C # <CJK>
-0xDBB5 0x6EC2 # <CJK>
-0xDBB6 0x78C5 # <CJK>
-0xDBB7 0x7D21 # <CJK>
-0xDBB8 0x80AA # <CJK>
-0xDBB9 0x8180 # <CJK>
-0xDBBA 0x822B # <CJK>
-0xDBBB 0x82B3 # <CJK>
-0xDBBC 0x84A1 # <CJK>
-0xDBBD 0x868C # <CJK>
-0xDBBE 0x8A2A # <CJK>
-0xDBBF 0x8B17 # <CJK>
-0xDBC0 0x90A6 # <CJK>
-0xDBC1 0x9632 # <CJK>
-0xDBC2 0x9F90 # <CJK>
-0xDBC3 0x500D # <CJK>
-0xDBC4 0x4FF3 # <CJK>
-0xDBC5 0xF963 # <CJK>
-0xDBC6 0x57F9 # <CJK>
-0xDBC7 0x5F98 # <CJK>
-0xDBC8 0x62DC # <CJK>
-0xDBC9 0x6392 # <CJK>
-0xDBCA 0x676F # <CJK>
-0xDBCB 0x6E43 # <CJK>
-0xDBCC 0x7119 # <CJK>
-0xDBCD 0x76C3 # <CJK>
-0xDBCE 0x80CC # <CJK>
-0xDBCF 0x80DA # <CJK>
-0xDBD0 0x88F4 # <CJK>
-0xDBD1 0x88F5 # <CJK>
-0xDBD2 0x8919 # <CJK>
-0xDBD3 0x8CE0 # <CJK>
-0xDBD4 0x8F29 # <CJK>
-0xDBD5 0x914D # <CJK>
-0xDBD6 0x966A # <CJK>
-0xDBD7 0x4F2F # <CJK>
-0xDBD8 0x4F70 # <CJK>
-0xDBD9 0x5E1B # <CJK>
-0xDBDA 0x67CF # <CJK>
-0xDBDB 0x6822 # <CJK>
-0xDBDC 0x767D # <CJK>
-0xDBDD 0x767E # <CJK>
-0xDBDE 0x9B44 # <CJK>
-0xDBDF 0x5E61 # <CJK>
-0xDBE0 0x6A0A # <CJK>
-0xDBE1 0x7169 # <CJK>
-0xDBE2 0x71D4 # <CJK>
-0xDBE3 0x756A # <CJK>
-0xDBE4 0xF964 # <CJK>
-0xDBE5 0x7E41 # <CJK>
-0xDBE6 0x8543 # <CJK>
-0xDBE7 0x85E9 # <CJK>
-0xDBE8 0x98DC # <CJK>
-0xDBE9 0x4F10 # <CJK>
-0xDBEA 0x7B4F # <CJK>
-0xDBEB 0x7F70 # <CJK>
-0xDBEC 0x95A5 # <CJK>
-0xDBED 0x51E1 # <CJK>
-0xDBEE 0x5E06 # <CJK>
-0xDBEF 0x68B5 # <CJK>
-0xDBF0 0x6C3E # <CJK>
-0xDBF1 0x6C4E # <CJK>
-0xDBF2 0x6CDB # <CJK>
-0xDBF3 0x72AF # <CJK>
-0xDBF4 0x7BC4 # <CJK>
-0xDBF5 0x8303 # <CJK>
-0xDBF6 0x6CD5 # <CJK>
-0xDBF7 0x743A # <CJK>
-0xDBF8 0x50FB # <CJK>
-0xDBF9 0x5288 # <CJK>
-0xDBFA 0x58C1 # <CJK>
-0xDBFB 0x64D8 # <CJK>
-0xDBFC 0x6A97 # <CJK>
-0xDBFD 0x74A7 # <CJK>
-0xDBFE 0x7656 # <CJK>
-0xDCA1 0x78A7 # <CJK>
-0xDCA2 0x8617 # <CJK>
-0xDCA3 0x95E2 # <CJK>
-0xDCA4 0x9739 # <CJK>
-0xDCA5 0xF965 # <CJK>
-0xDCA6 0x535E # <CJK>
-0xDCA7 0x5F01 # <CJK>
-0xDCA8 0x8B8A # <CJK>
-0xDCA9 0x8FA8 # <CJK>
-0xDCAA 0x8FAF # <CJK>
-0xDCAB 0x908A # <CJK>
-0xDCAC 0x5225 # <CJK>
-0xDCAD 0x77A5 # <CJK>
-0xDCAE 0x9C49 # <CJK>
-0xDCAF 0x9F08 # <CJK>
-0xDCB0 0x4E19 # <CJK>
-0xDCB1 0x5002 # <CJK>
-0xDCB2 0x5175 # <CJK>
-0xDCB3 0x5C5B # <CJK>
-0xDCB4 0x5E77 # <CJK>
-0xDCB5 0x661E # <CJK>
-0xDCB6 0x663A # <CJK>
-0xDCB7 0x67C4 # <CJK>
-0xDCB8 0x68C5 # <CJK>
-0xDCB9 0x70B3 # <CJK>
-0xDCBA 0x7501 # <CJK>
-0xDCBB 0x75C5 # <CJK>
-0xDCBC 0x79C9 # <CJK>
-0xDCBD 0x7ADD # <CJK>
-0xDCBE 0x8F27 # <CJK>
-0xDCBF 0x9920 # <CJK>
-0xDCC0 0x9A08 # <CJK>
-0xDCC1 0x4FDD # <CJK>
-0xDCC2 0x5821 # <CJK>
-0xDCC3 0x5831 # <CJK>
-0xDCC4 0x5BF6 # <CJK>
-0xDCC5 0x666E # <CJK>
-0xDCC6 0x6B65 # <CJK>
-0xDCC7 0x6D11 # <CJK>
-0xDCC8 0x6E7A # <CJK>
-0xDCC9 0x6F7D # <CJK>
-0xDCCA 0x73E4 # <CJK>
-0xDCCB 0x752B # <CJK>
-0xDCCC 0x83E9 # <CJK>
-0xDCCD 0x88DC # <CJK>
-0xDCCE 0x8913 # <CJK>
-0xDCCF 0x8B5C # <CJK>
-0xDCD0 0x8F14 # <CJK>
-0xDCD1 0x4F0F # <CJK>
-0xDCD2 0x50D5 # <CJK>
-0xDCD3 0x5310 # <CJK>
-0xDCD4 0x535C # <CJK>
-0xDCD5 0x5B93 # <CJK>
-0xDCD6 0x5FA9 # <CJK>
-0xDCD7 0x670D # <CJK>
-0xDCD8 0x798F # <CJK>
-0xDCD9 0x8179 # <CJK>
-0xDCDA 0x832F # <CJK>
-0xDCDB 0x8514 # <CJK>
-0xDCDC 0x8907 # <CJK>
-0xDCDD 0x8986 # <CJK>
-0xDCDE 0x8F39 # <CJK>
-0xDCDF 0x8F3B # <CJK>
-0xDCE0 0x99A5 # <CJK>
-0xDCE1 0x9C12 # <CJK>
-0xDCE2 0x672C # <CJK>
-0xDCE3 0x4E76 # <CJK>
-0xDCE4 0x4FF8 # <CJK>
-0xDCE5 0x5949 # <CJK>
-0xDCE6 0x5C01 # <CJK>
-0xDCE7 0x5CEF # <CJK>
-0xDCE8 0x5CF0 # <CJK>
-0xDCE9 0x6367 # <CJK>
-0xDCEA 0x68D2 # <CJK>
-0xDCEB 0x70FD # <CJK>
-0xDCEC 0x71A2 # <CJK>
-0xDCED 0x742B # <CJK>
-0xDCEE 0x7E2B # <CJK>
-0xDCEF 0x84EC # <CJK>
-0xDCF0 0x8702 # <CJK>
-0xDCF1 0x9022 # <CJK>
-0xDCF2 0x92D2 # <CJK>
-0xDCF3 0x9CF3 # <CJK>
-0xDCF4 0x4E0D # <CJK>
-0xDCF5 0x4ED8 # <CJK>
-0xDCF6 0x4FEF # <CJK>
-0xDCF7 0x5085 # <CJK>
-0xDCF8 0x5256 # <CJK>
-0xDCF9 0x526F # <CJK>
-0xDCFA 0x5426 # <CJK>
-0xDCFB 0x5490 # <CJK>
-0xDCFC 0x57E0 # <CJK>
-0xDCFD 0x592B # <CJK>
-0xDCFE 0x5A66 # <CJK>
-0xDDA1 0x5B5A # <CJK>
-0xDDA2 0x5B75 # <CJK>
-0xDDA3 0x5BCC # <CJK>
-0xDDA4 0x5E9C # <CJK>
-0xDDA5 0xF966 # <CJK>
-0xDDA6 0x6276 # <CJK>
-0xDDA7 0x6577 # <CJK>
-0xDDA8 0x65A7 # <CJK>
-0xDDA9 0x6D6E # <CJK>
-0xDDAA 0x6EA5 # <CJK>
-0xDDAB 0x7236 # <CJK>
-0xDDAC 0x7B26 # <CJK>
-0xDDAD 0x7C3F # <CJK>
-0xDDAE 0x7F36 # <CJK>
-0xDDAF 0x8150 # <CJK>
-0xDDB0 0x8151 # <CJK>
-0xDDB1 0x819A # <CJK>
-0xDDB2 0x8240 # <CJK>
-0xDDB3 0x8299 # <CJK>
-0xDDB4 0x83A9 # <CJK>
-0xDDB5 0x8A03 # <CJK>
-0xDDB6 0x8CA0 # <CJK>
-0xDDB7 0x8CE6 # <CJK>
-0xDDB8 0x8CFB # <CJK>
-0xDDB9 0x8D74 # <CJK>
-0xDDBA 0x8DBA # <CJK>
-0xDDBB 0x90E8 # <CJK>
-0xDDBC 0x91DC # <CJK>
-0xDDBD 0x961C # <CJK>
-0xDDBE 0x9644 # <CJK>
-0xDDBF 0x99D9 # <CJK>
-0xDDC0 0x9CE7 # <CJK>
-0xDDC1 0x5317 # <CJK>
-0xDDC2 0x5206 # <CJK>
-0xDDC3 0x5429 # <CJK>
-0xDDC4 0x5674 # <CJK>
-0xDDC5 0x58B3 # <CJK>
-0xDDC6 0x5954 # <CJK>
-0xDDC7 0x596E # <CJK>
-0xDDC8 0x5FFF # <CJK>
-0xDDC9 0x61A4 # <CJK>
-0xDDCA 0x626E # <CJK>
-0xDDCB 0x6610 # <CJK>
-0xDDCC 0x6C7E # <CJK>
-0xDDCD 0x711A # <CJK>
-0xDDCE 0x76C6 # <CJK>
-0xDDCF 0x7C89 # <CJK>
-0xDDD0 0x7CDE # <CJK>
-0xDDD1 0x7D1B # <CJK>
-0xDDD2 0x82AC # <CJK>
-0xDDD3 0x8CC1 # <CJK>
-0xDDD4 0x96F0 # <CJK>
-0xDDD5 0xF967 # <CJK>
-0xDDD6 0x4F5B # <CJK>
-0xDDD7 0x5F17 # <CJK>
-0xDDD8 0x5F7F # <CJK>
-0xDDD9 0x62C2 # <CJK>
-0xDDDA 0x5D29 # <CJK>
-0xDDDB 0x670B # <CJK>
-0xDDDC 0x68DA # <CJK>
-0xDDDD 0x787C # <CJK>
-0xDDDE 0x7E43 # <CJK>
-0xDDDF 0x9D6C # <CJK>
-0xDDE0 0x4E15 # <CJK>
-0xDDE1 0x5099 # <CJK>
-0xDDE2 0x5315 # <CJK>
-0xDDE3 0x532A # <CJK>
-0xDDE4 0x5351 # <CJK>
-0xDDE5 0x5983 # <CJK>
-0xDDE6 0x5A62 # <CJK>
-0xDDE7 0x5E87 # <CJK>
-0xDDE8 0x60B2 # <CJK>
-0xDDE9 0x618A # <CJK>
-0xDDEA 0x6249 # <CJK>
-0xDDEB 0x6279 # <CJK>
-0xDDEC 0x6590 # <CJK>
-0xDDED 0x6787 # <CJK>
-0xDDEE 0x69A7 # <CJK>
-0xDDEF 0x6BD4 # <CJK>
-0xDDF0 0x6BD6 # <CJK>
-0xDDF1 0x6BD7 # <CJK>
-0xDDF2 0x6BD8 # <CJK>
-0xDDF3 0x6CB8 # <CJK>
-0xDDF4 0xF968 # <CJK>
-0xDDF5 0x7435 # <CJK>
-0xDDF6 0x75FA # <CJK>
-0xDDF7 0x7812 # <CJK>
-0xDDF8 0x7891 # <CJK>
-0xDDF9 0x79D5 # <CJK>
-0xDDFA 0x79D8 # <CJK>
-0xDDFB 0x7C83 # <CJK>
-0xDDFC 0x7DCB # <CJK>
-0xDDFD 0x7FE1 # <CJK>
-0xDDFE 0x80A5 # <CJK>
-0xDEA1 0x813E # <CJK>
-0xDEA2 0x81C2 # <CJK>
-0xDEA3 0x83F2 # <CJK>
-0xDEA4 0x871A # <CJK>
-0xDEA5 0x88E8 # <CJK>
-0xDEA6 0x8AB9 # <CJK>
-0xDEA7 0x8B6C # <CJK>
-0xDEA8 0x8CBB # <CJK>
-0xDEA9 0x9119 # <CJK>
-0xDEAA 0x975E # <CJK>
-0xDEAB 0x98DB # <CJK>
-0xDEAC 0x9F3B # <CJK>
-0xDEAD 0x56AC # <CJK>
-0xDEAE 0x5B2A # <CJK>
-0xDEAF 0x5F6C # <CJK>
-0xDEB0 0x658C # <CJK>
-0xDEB1 0x6AB3 # <CJK>
-0xDEB2 0x6BAF # <CJK>
-0xDEB3 0x6D5C # <CJK>
-0xDEB4 0x6FF1 # <CJK>
-0xDEB5 0x7015 # <CJK>
-0xDEB6 0x725D # <CJK>
-0xDEB7 0x73AD # <CJK>
-0xDEB8 0x8CA7 # <CJK>
-0xDEB9 0x8CD3 # <CJK>
-0xDEBA 0x983B # <CJK>
-0xDEBB 0x6191 # <CJK>
-0xDEBC 0x6C37 # <CJK>
-0xDEBD 0x8058 # <CJK>
-0xDEBE 0x9A01 # <CJK>
-0xDEBF 0x4E4D # <CJK>
-0xDEC0 0x4E8B # <CJK>
-0xDEC1 0x4E9B # <CJK>
-0xDEC2 0x4ED5 # <CJK>
-0xDEC3 0x4F3A # <CJK>
-0xDEC4 0x4F3C # <CJK>
-0xDEC5 0x4F7F # <CJK>
-0xDEC6 0x4FDF # <CJK>
-0xDEC7 0x50FF # <CJK>
-0xDEC8 0x53F2 # <CJK>
-0xDEC9 0x53F8 # <CJK>
-0xDECA 0x5506 # <CJK>
-0xDECB 0x55E3 # <CJK>
-0xDECC 0x56DB # <CJK>
-0xDECD 0x58EB # <CJK>
-0xDECE 0x5962 # <CJK>
-0xDECF 0x5A11 # <CJK>
-0xDED0 0x5BEB # <CJK>
-0xDED1 0x5BFA # <CJK>
-0xDED2 0x5C04 # <CJK>
-0xDED3 0x5DF3 # <CJK>
-0xDED4 0x5E2B # <CJK>
-0xDED5 0x5F99 # <CJK>
-0xDED6 0x601D # <CJK>
-0xDED7 0x6368 # <CJK>
-0xDED8 0x659C # <CJK>
-0xDED9 0x65AF # <CJK>
-0xDEDA 0x67F6 # <CJK>
-0xDEDB 0x67FB # <CJK>
-0xDEDC 0x68AD # <CJK>
-0xDEDD 0x6B7B # <CJK>
-0xDEDE 0x6C99 # <CJK>
-0xDEDF 0x6CD7 # <CJK>
-0xDEE0 0x6E23 # <CJK>
-0xDEE1 0x7009 # <CJK>
-0xDEE2 0x7345 # <CJK>
-0xDEE3 0x7802 # <CJK>
-0xDEE4 0x793E # <CJK>
-0xDEE5 0x7940 # <CJK>
-0xDEE6 0x7960 # <CJK>
-0xDEE7 0x79C1 # <CJK>
-0xDEE8 0x7BE9 # <CJK>
-0xDEE9 0x7D17 # <CJK>
-0xDEEA 0x7D72 # <CJK>
-0xDEEB 0x8086 # <CJK>
-0xDEEC 0x820D # <CJK>
-0xDEED 0x838E # <CJK>
-0xDEEE 0x84D1 # <CJK>
-0xDEEF 0x86C7 # <CJK>
-0xDEF0 0x88DF # <CJK>
-0xDEF1 0x8A50 # <CJK>
-0xDEF2 0x8A5E # <CJK>
-0xDEF3 0x8B1D # <CJK>
-0xDEF4 0x8CDC # <CJK>
-0xDEF5 0x8D66 # <CJK>
-0xDEF6 0x8FAD # <CJK>
-0xDEF7 0x90AA # <CJK>
-0xDEF8 0x98FC # <CJK>
-0xDEF9 0x99DF # <CJK>
-0xDEFA 0x9E9D # <CJK>
-0xDEFB 0x524A # <CJK>
-0xDEFC 0xF969 # <CJK>
-0xDEFD 0x6714 # <CJK>
-0xDEFE 0xF96A # <CJK>
-0xDFA1 0x5098 # <CJK>
-0xDFA2 0x522A # <CJK>
-0xDFA3 0x5C71 # <CJK>
-0xDFA4 0x6563 # <CJK>
-0xDFA5 0x6C55 # <CJK>
-0xDFA6 0x73CA # <CJK>
-0xDFA7 0x7523 # <CJK>
-0xDFA8 0x759D # <CJK>
-0xDFA9 0x7B97 # <CJK>
-0xDFAA 0x849C # <CJK>
-0xDFAB 0x9178 # <CJK>
-0xDFAC 0x9730 # <CJK>
-0xDFAD 0x4E77 # <CJK>
-0xDFAE 0x6492 # <CJK>
-0xDFAF 0x6BBA # <CJK>
-0xDFB0 0x715E # <CJK>
-0xDFB1 0x85A9 # <CJK>
-0xDFB2 0x4E09 # <CJK>
-0xDFB3 0xF96B # <CJK>
-0xDFB4 0x6749 # <CJK>
-0xDFB5 0x68EE # <CJK>
-0xDFB6 0x6E17 # <CJK>
-0xDFB7 0x829F # <CJK>
-0xDFB8 0x8518 # <CJK>
-0xDFB9 0x886B # <CJK>
-0xDFBA 0x63F7 # <CJK>
-0xDFBB 0x6F81 # <CJK>
-0xDFBC 0x9212 # <CJK>
-0xDFBD 0x98AF # <CJK>
-0xDFBE 0x4E0A # <CJK>
-0xDFBF 0x50B7 # <CJK>
-0xDFC0 0x50CF # <CJK>
-0xDFC1 0x511F # <CJK>
-0xDFC2 0x5546 # <CJK>
-0xDFC3 0x55AA # <CJK>
-0xDFC4 0x5617 # <CJK>
-0xDFC5 0x5B40 # <CJK>
-0xDFC6 0x5C19 # <CJK>
-0xDFC7 0x5CE0 # <CJK>
-0xDFC8 0x5E38 # <CJK>
-0xDFC9 0x5E8A # <CJK>
-0xDFCA 0x5EA0 # <CJK>
-0xDFCB 0x5EC2 # <CJK>
-0xDFCC 0x60F3 # <CJK>
-0xDFCD 0x6851 # <CJK>
-0xDFCE 0x6A61 # <CJK>
-0xDFCF 0x6E58 # <CJK>
-0xDFD0 0x723D # <CJK>
-0xDFD1 0x7240 # <CJK>
-0xDFD2 0x72C0 # <CJK>
-0xDFD3 0x76F8 # <CJK>
-0xDFD4 0x7965 # <CJK>
-0xDFD5 0x7BB1 # <CJK>
-0xDFD6 0x7FD4 # <CJK>
-0xDFD7 0x88F3 # <CJK>
-0xDFD8 0x89F4 # <CJK>
-0xDFD9 0x8A73 # <CJK>
-0xDFDA 0x8C61 # <CJK>
-0xDFDB 0x8CDE # <CJK>
-0xDFDC 0x971C # <CJK>
-0xDFDD 0x585E # <CJK>
-0xDFDE 0x74BD # <CJK>
-0xDFDF 0x8CFD # <CJK>
-0xDFE0 0x55C7 # <CJK>
-0xDFE1 0xF96C # <CJK>
-0xDFE2 0x7A61 # <CJK>
-0xDFE3 0x7D22 # <CJK>
-0xDFE4 0x8272 # <CJK>
-0xDFE5 0x7272 # <CJK>
-0xDFE6 0x751F # <CJK>
-0xDFE7 0x7525 # <CJK>
-0xDFE8 0xF96D # <CJK>
-0xDFE9 0x7B19 # <CJK>
-0xDFEA 0x5885 # <CJK>
-0xDFEB 0x58FB # <CJK>
-0xDFEC 0x5DBC # <CJK>
-0xDFED 0x5E8F # <CJK>
-0xDFEE 0x5EB6 # <CJK>
-0xDFEF 0x5F90 # <CJK>
-0xDFF0 0x6055 # <CJK>
-0xDFF1 0x6292 # <CJK>
-0xDFF2 0x637F # <CJK>
-0xDFF3 0x654D # <CJK>
-0xDFF4 0x6691 # <CJK>
-0xDFF5 0x66D9 # <CJK>
-0xDFF6 0x66F8 # <CJK>
-0xDFF7 0x6816 # <CJK>
-0xDFF8 0x68F2 # <CJK>
-0xDFF9 0x7280 # <CJK>
-0xDFFA 0x745E # <CJK>
-0xDFFB 0x7B6E # <CJK>
-0xDFFC 0x7D6E # <CJK>
-0xDFFD 0x7DD6 # <CJK>
-0xDFFE 0x7F72 # <CJK>
-0xE0A1 0x80E5 # <CJK>
-0xE0A2 0x8212 # <CJK>
-0xE0A3 0x85AF # <CJK>
-0xE0A4 0x897F # <CJK>
-0xE0A5 0x8A93 # <CJK>
-0xE0A6 0x901D # <CJK>
-0xE0A7 0x92E4 # <CJK>
-0xE0A8 0x9ECD # <CJK>
-0xE0A9 0x9F20 # <CJK>
-0xE0AA 0x5915 # <CJK>
-0xE0AB 0x596D # <CJK>
-0xE0AC 0x5E2D # <CJK>
-0xE0AD 0x60DC # <CJK>
-0xE0AE 0x6614 # <CJK>
-0xE0AF 0x6673 # <CJK>
-0xE0B0 0x6790 # <CJK>
-0xE0B1 0x6C50 # <CJK>
-0xE0B2 0x6DC5 # <CJK>
-0xE0B3 0x6F5F # <CJK>
-0xE0B4 0x77F3 # <CJK>
-0xE0B5 0x78A9 # <CJK>
-0xE0B6 0x84C6 # <CJK>
-0xE0B7 0x91CB # <CJK>
-0xE0B8 0x932B # <CJK>
-0xE0B9 0x4ED9 # <CJK>
-0xE0BA 0x50CA # <CJK>
-0xE0BB 0x5148 # <CJK>
-0xE0BC 0x5584 # <CJK>
-0xE0BD 0x5B0B # <CJK>
-0xE0BE 0x5BA3 # <CJK>
-0xE0BF 0x6247 # <CJK>
-0xE0C0 0x657E # <CJK>
-0xE0C1 0x65CB # <CJK>
-0xE0C2 0x6E32 # <CJK>
-0xE0C3 0x717D # <CJK>
-0xE0C4 0x7401 # <CJK>
-0xE0C5 0x7444 # <CJK>
-0xE0C6 0x7487 # <CJK>
-0xE0C7 0x74BF # <CJK>
-0xE0C8 0x766C # <CJK>
-0xE0C9 0x79AA # <CJK>
-0xE0CA 0x7DDA # <CJK>
-0xE0CB 0x7E55 # <CJK>
-0xE0CC 0x7FA8 # <CJK>
-0xE0CD 0x817A # <CJK>
-0xE0CE 0x81B3 # <CJK>
-0xE0CF 0x8239 # <CJK>
-0xE0D0 0x861A # <CJK>
-0xE0D1 0x87EC # <CJK>
-0xE0D2 0x8A75 # <CJK>
-0xE0D3 0x8DE3 # <CJK>
-0xE0D4 0x9078 # <CJK>
-0xE0D5 0x9291 # <CJK>
-0xE0D6 0x9425 # <CJK>
-0xE0D7 0x994D # <CJK>
-0xE0D8 0x9BAE # <CJK>
-0xE0D9 0x5368 # <CJK>
-0xE0DA 0x5C51 # <CJK>
-0xE0DB 0x6954 # <CJK>
-0xE0DC 0x6CC4 # <CJK>
-0xE0DD 0x6D29 # <CJK>
-0xE0DE 0x6E2B # <CJK>
-0xE0DF 0x820C # <CJK>
-0xE0E0 0x859B # <CJK>
-0xE0E1 0x893B # <CJK>
-0xE0E2 0x8A2D # <CJK>
-0xE0E3 0x8AAA # <CJK>
-0xE0E4 0x96EA # <CJK>
-0xE0E5 0x9F67 # <CJK>
-0xE0E6 0x5261 # <CJK>
-0xE0E7 0x66B9 # <CJK>
-0xE0E8 0x6BB2 # <CJK>
-0xE0E9 0x7E96 # <CJK>
-0xE0EA 0x87FE # <CJK>
-0xE0EB 0x8D0D # <CJK>
-0xE0EC 0x9583 # <CJK>
-0xE0ED 0x965D # <CJK>
-0xE0EE 0x651D # <CJK>
-0xE0EF 0x6D89 # <CJK>
-0xE0F0 0x71EE # <CJK>
-0xE0F1 0xF96E # <CJK>
-0xE0F2 0x57CE # <CJK>
-0xE0F3 0x59D3 # <CJK>
-0xE0F4 0x5BAC # <CJK>
-0xE0F5 0x6027 # <CJK>
-0xE0F6 0x60FA # <CJK>
-0xE0F7 0x6210 # <CJK>
-0xE0F8 0x661F # <CJK>
-0xE0F9 0x665F # <CJK>
-0xE0FA 0x7329 # <CJK>
-0xE0FB 0x73F9 # <CJK>
-0xE0FC 0x76DB # <CJK>
-0xE0FD 0x7701 # <CJK>
-0xE0FE 0x7B6C # <CJK>
-0xE1A1 0x8056 # <CJK>
-0xE1A2 0x8072 # <CJK>
-0xE1A3 0x8165 # <CJK>
-0xE1A4 0x8AA0 # <CJK>
-0xE1A5 0x9192 # <CJK>
-0xE1A6 0x4E16 # <CJK>
-0xE1A7 0x52E2 # <CJK>
-0xE1A8 0x6B72 # <CJK>
-0xE1A9 0x6D17 # <CJK>
-0xE1AA 0x7A05 # <CJK>
-0xE1AB 0x7B39 # <CJK>
-0xE1AC 0x7D30 # <CJK>
-0xE1AD 0xF96F # <CJK>
-0xE1AE 0x8CB0 # <CJK>
-0xE1AF 0x53EC # <CJK>
-0xE1B0 0x562F # <CJK>
-0xE1B1 0x5851 # <CJK>
-0xE1B2 0x5BB5 # <CJK>
-0xE1B3 0x5C0F # <CJK>
-0xE1B4 0x5C11 # <CJK>
-0xE1B5 0x5DE2 # <CJK>
-0xE1B6 0x6240 # <CJK>
-0xE1B7 0x6383 # <CJK>
-0xE1B8 0x6414 # <CJK>
-0xE1B9 0x662D # <CJK>
-0xE1BA 0x68B3 # <CJK>
-0xE1BB 0x6CBC # <CJK>
-0xE1BC 0x6D88 # <CJK>
-0xE1BD 0x6EAF # <CJK>
-0xE1BE 0x701F # <CJK>
-0xE1BF 0x70A4 # <CJK>
-0xE1C0 0x71D2 # <CJK>
-0xE1C1 0x7526 # <CJK>
-0xE1C2 0x758F # <CJK>
-0xE1C3 0x758E # <CJK>
-0xE1C4 0x7619 # <CJK>
-0xE1C5 0x7B11 # <CJK>
-0xE1C6 0x7BE0 # <CJK>
-0xE1C7 0x7C2B # <CJK>
-0xE1C8 0x7D20 # <CJK>
-0xE1C9 0x7D39 # <CJK>
-0xE1CA 0x852C # <CJK>
-0xE1CB 0x856D # <CJK>
-0xE1CC 0x8607 # <CJK>
-0xE1CD 0x8A34 # <CJK>
-0xE1CE 0x900D # <CJK>
-0xE1CF 0x9061 # <CJK>
-0xE1D0 0x90B5 # <CJK>
-0xE1D1 0x92B7 # <CJK>
-0xE1D2 0x97F6 # <CJK>
-0xE1D3 0x9A37 # <CJK>
-0xE1D4 0x4FD7 # <CJK>
-0xE1D5 0x5C6C # <CJK>
-0xE1D6 0x675F # <CJK>
-0xE1D7 0x6D91 # <CJK>
-0xE1D8 0x7C9F # <CJK>
-0xE1D9 0x7E8C # <CJK>
-0xE1DA 0x8B16 # <CJK>
-0xE1DB 0x8D16 # <CJK>
-0xE1DC 0x901F # <CJK>
-0xE1DD 0x5B6B # <CJK>
-0xE1DE 0x5DFD # <CJK>
-0xE1DF 0x640D # <CJK>
-0xE1E0 0x84C0 # <CJK>
-0xE1E1 0x905C # <CJK>
-0xE1E2 0x98E1 # <CJK>
-0xE1E3 0x7387 # <CJK>
-0xE1E4 0x5B8B # <CJK>
-0xE1E5 0x609A # <CJK>
-0xE1E6 0x677E # <CJK>
-0xE1E7 0x6DDE # <CJK>
-0xE1E8 0x8A1F # <CJK>
-0xE1E9 0x8AA6 # <CJK>
-0xE1EA 0x9001 # <CJK>
-0xE1EB 0x980C # <CJK>
-0xE1EC 0x5237 # <CJK>
-0xE1ED 0xF970 # <CJK>
-0xE1EE 0x7051 # <CJK>
-0xE1EF 0x788E # <CJK>
-0xE1F0 0x9396 # <CJK>
-0xE1F1 0x8870 # <CJK>
-0xE1F2 0x91D7 # <CJK>
-0xE1F3 0x4FEE # <CJK>
-0xE1F4 0x53D7 # <CJK>
-0xE1F5 0x55FD # <CJK>
-0xE1F6 0x56DA # <CJK>
-0xE1F7 0x5782 # <CJK>
-0xE1F8 0x58FD # <CJK>
-0xE1F9 0x5AC2 # <CJK>
-0xE1FA 0x5B88 # <CJK>
-0xE1FB 0x5CAB # <CJK>
-0xE1FC 0x5CC0 # <CJK>
-0xE1FD 0x5E25 # <CJK>
-0xE1FE 0x6101 # <CJK>
-0xE2A1 0x620D # <CJK>
-0xE2A2 0x624B # <CJK>
-0xE2A3 0x6388 # <CJK>
-0xE2A4 0x641C # <CJK>
-0xE2A5 0x6536 # <CJK>
-0xE2A6 0x6578 # <CJK>
-0xE2A7 0x6A39 # <CJK>
-0xE2A8 0x6B8A # <CJK>
-0xE2A9 0x6C34 # <CJK>
-0xE2AA 0x6D19 # <CJK>
-0xE2AB 0x6F31 # <CJK>
-0xE2AC 0x71E7 # <CJK>
-0xE2AD 0x72E9 # <CJK>
-0xE2AE 0x7378 # <CJK>
-0xE2AF 0x7407 # <CJK>
-0xE2B0 0x74B2 # <CJK>
-0xE2B1 0x7626 # <CJK>
-0xE2B2 0x7761 # <CJK>
-0xE2B3 0x79C0 # <CJK>
-0xE2B4 0x7A57 # <CJK>
-0xE2B5 0x7AEA # <CJK>
-0xE2B6 0x7CB9 # <CJK>
-0xE2B7 0x7D8F # <CJK>
-0xE2B8 0x7DAC # <CJK>
-0xE2B9 0x7E61 # <CJK>
-0xE2BA 0x7F9E # <CJK>
-0xE2BB 0x8129 # <CJK>
-0xE2BC 0x8331 # <CJK>
-0xE2BD 0x8490 # <CJK>
-0xE2BE 0x84DA # <CJK>
-0xE2BF 0x85EA # <CJK>
-0xE2C0 0x8896 # <CJK>
-0xE2C1 0x8AB0 # <CJK>
-0xE2C2 0x8B90 # <CJK>
-0xE2C3 0x8F38 # <CJK>
-0xE2C4 0x9042 # <CJK>
-0xE2C5 0x9083 # <CJK>
-0xE2C6 0x916C # <CJK>
-0xE2C7 0x9296 # <CJK>
-0xE2C8 0x92B9 # <CJK>
-0xE2C9 0x968B # <CJK>
-0xE2CA 0x96A7 # <CJK>
-0xE2CB 0x96A8 # <CJK>
-0xE2CC 0x96D6 # <CJK>
-0xE2CD 0x9700 # <CJK>
-0xE2CE 0x9808 # <CJK>
-0xE2CF 0x9996 # <CJK>
-0xE2D0 0x9AD3 # <CJK>
-0xE2D1 0x9B1A # <CJK>
-0xE2D2 0x53D4 # <CJK>
-0xE2D3 0x587E # <CJK>
-0xE2D4 0x5919 # <CJK>
-0xE2D5 0x5B70 # <CJK>
-0xE2D6 0x5BBF # <CJK>
-0xE2D7 0x6DD1 # <CJK>
-0xE2D8 0x6F5A # <CJK>
-0xE2D9 0x719F # <CJK>
-0xE2DA 0x7421 # <CJK>
-0xE2DB 0x74B9 # <CJK>
-0xE2DC 0x8085 # <CJK>
-0xE2DD 0x83FD # <CJK>
-0xE2DE 0x5DE1 # <CJK>
-0xE2DF 0x5F87 # <CJK>
-0xE2E0 0x5FAA # <CJK>
-0xE2E1 0x6042 # <CJK>
-0xE2E2 0x65EC # <CJK>
-0xE2E3 0x6812 # <CJK>
-0xE2E4 0x696F # <CJK>
-0xE2E5 0x6A53 # <CJK>
-0xE2E6 0x6B89 # <CJK>
-0xE2E7 0x6D35 # <CJK>
-0xE2E8 0x6DF3 # <CJK>
-0xE2E9 0x73E3 # <CJK>
-0xE2EA 0x76FE # <CJK>
-0xE2EB 0x77AC # <CJK>
-0xE2EC 0x7B4D # <CJK>
-0xE2ED 0x7D14 # <CJK>
-0xE2EE 0x8123 # <CJK>
-0xE2EF 0x821C # <CJK>
-0xE2F0 0x8340 # <CJK>
-0xE2F1 0x84F4 # <CJK>
-0xE2F2 0x8563 # <CJK>
-0xE2F3 0x8A62 # <CJK>
-0xE2F4 0x8AC4 # <CJK>
-0xE2F5 0x9187 # <CJK>
-0xE2F6 0x931E # <CJK>
-0xE2F7 0x9806 # <CJK>
-0xE2F8 0x99B4 # <CJK>
-0xE2F9 0x620C # <CJK>
-0xE2FA 0x8853 # <CJK>
-0xE2FB 0x8FF0 # <CJK>
-0xE2FC 0x9265 # <CJK>
-0xE2FD 0x5D07 # <CJK>
-0xE2FE 0x5D27 # <CJK>
-0xE3A1 0x5D69 # <CJK>
-0xE3A2 0x745F # <CJK>
-0xE3A3 0x819D # <CJK>
-0xE3A4 0x8768 # <CJK>
-0xE3A5 0x6FD5 # <CJK>
-0xE3A6 0x62FE # <CJK>
-0xE3A7 0x7FD2 # <CJK>
-0xE3A8 0x8936 # <CJK>
-0xE3A9 0x8972 # <CJK>
-0xE3AA 0x4E1E # <CJK>
-0xE3AB 0x4E58 # <CJK>
-0xE3AC 0x50E7 # <CJK>
-0xE3AD 0x52DD # <CJK>
-0xE3AE 0x5347 # <CJK>
-0xE3AF 0x627F # <CJK>
-0xE3B0 0x6607 # <CJK>
-0xE3B1 0x7E69 # <CJK>
-0xE3B2 0x8805 # <CJK>
-0xE3B3 0x965E # <CJK>
-0xE3B4 0x4F8D # <CJK>
-0xE3B5 0x5319 # <CJK>
-0xE3B6 0x5636 # <CJK>
-0xE3B7 0x59CB # <CJK>
-0xE3B8 0x5AA4 # <CJK>
-0xE3B9 0x5C38 # <CJK>
-0xE3BA 0x5C4E # <CJK>
-0xE3BB 0x5C4D # <CJK>
-0xE3BC 0x5E02 # <CJK>
-0xE3BD 0x5F11 # <CJK>
-0xE3BE 0x6043 # <CJK>
-0xE3BF 0x65BD # <CJK>
-0xE3C0 0x662F # <CJK>
-0xE3C1 0x6642 # <CJK>
-0xE3C2 0x67BE # <CJK>
-0xE3C3 0x67F4 # <CJK>
-0xE3C4 0x731C # <CJK>
-0xE3C5 0x77E2 # <CJK>
-0xE3C6 0x793A # <CJK>
-0xE3C7 0x7FC5 # <CJK>
-0xE3C8 0x8494 # <CJK>
-0xE3C9 0x84CD # <CJK>
-0xE3CA 0x8996 # <CJK>
-0xE3CB 0x8A66 # <CJK>
-0xE3CC 0x8A69 # <CJK>
-0xE3CD 0x8AE1 # <CJK>
-0xE3CE 0x8C55 # <CJK>
-0xE3CF 0x8C7A # <CJK>
-0xE3D0 0x57F4 # <CJK>
-0xE3D1 0x5BD4 # <CJK>
-0xE3D2 0x5F0F # <CJK>
-0xE3D3 0x606F # <CJK>
-0xE3D4 0x62ED # <CJK>
-0xE3D5 0x690D # <CJK>
-0xE3D6 0x6B96 # <CJK>
-0xE3D7 0x6E5C # <CJK>
-0xE3D8 0x7184 # <CJK>
-0xE3D9 0x7BD2 # <CJK>
-0xE3DA 0x8755 # <CJK>
-0xE3DB 0x8B58 # <CJK>
-0xE3DC 0x8EFE # <CJK>
-0xE3DD 0x98DF # <CJK>
-0xE3DE 0x98FE # <CJK>
-0xE3DF 0x4F38 # <CJK>
-0xE3E0 0x4F81 # <CJK>
-0xE3E1 0x4FE1 # <CJK>
-0xE3E2 0x547B # <CJK>
-0xE3E3 0x5A20 # <CJK>
-0xE3E4 0x5BB8 # <CJK>
-0xE3E5 0x613C # <CJK>
-0xE3E6 0x65B0 # <CJK>
-0xE3E7 0x6668 # <CJK>
-0xE3E8 0x71FC # <CJK>
-0xE3E9 0x7533 # <CJK>
-0xE3EA 0x795E # <CJK>
-0xE3EB 0x7D33 # <CJK>
-0xE3EC 0x814E # <CJK>
-0xE3ED 0x81E3 # <CJK>
-0xE3EE 0x8398 # <CJK>
-0xE3EF 0x85AA # <CJK>
-0xE3F0 0x85CE # <CJK>
-0xE3F1 0x8703 # <CJK>
-0xE3F2 0x8A0A # <CJK>
-0xE3F3 0x8EAB # <CJK>
-0xE3F4 0x8F9B # <CJK>
-0xE3F5 0xF971 # <CJK>
-0xE3F6 0x8FC5 # <CJK>
-0xE3F7 0x5931 # <CJK>
-0xE3F8 0x5BA4 # <CJK>
-0xE3F9 0x5BE6 # <CJK>
-0xE3FA 0x6089 # <CJK>
-0xE3FB 0x5BE9 # <CJK>
-0xE3FC 0x5C0B # <CJK>
-0xE3FD 0x5FC3 # <CJK>
-0xE3FE 0x6C81 # <CJK>
-0xE4A1 0xF972 # <CJK>
-0xE4A2 0x6DF1 # <CJK>
-0xE4A3 0x700B # <CJK>
-0xE4A4 0x751A # <CJK>
-0xE4A5 0x82AF # <CJK>
-0xE4A6 0x8AF6 # <CJK>
-0xE4A7 0x4EC0 # <CJK>
-0xE4A8 0x5341 # <CJK>
-0xE4A9 0xF973 # <CJK>
-0xE4AA 0x96D9 # <CJK>
-0xE4AB 0x6C0F # <CJK>
-0xE4AC 0x4E9E # <CJK>
-0xE4AD 0x4FC4 # <CJK>
-0xE4AE 0x5152 # <CJK>
-0xE4AF 0x555E # <CJK>
-0xE4B0 0x5A25 # <CJK>
-0xE4B1 0x5CE8 # <CJK>
-0xE4B2 0x6211 # <CJK>
-0xE4B3 0x7259 # <CJK>
-0xE4B4 0x82BD # <CJK>
-0xE4B5 0x83AA # <CJK>
-0xE4B6 0x86FE # <CJK>
-0xE4B7 0x8859 # <CJK>
-0xE4B8 0x8A1D # <CJK>
-0xE4B9 0x963F # <CJK>
-0xE4BA 0x96C5 # <CJK>
-0xE4BB 0x9913 # <CJK>
-0xE4BC 0x9D09 # <CJK>
-0xE4BD 0x9D5D # <CJK>
-0xE4BE 0x580A # <CJK>
-0xE4BF 0x5CB3 # <CJK>
-0xE4C0 0x5DBD # <CJK>
-0xE4C1 0x5E44 # <CJK>
-0xE4C2 0x60E1 # <CJK>
-0xE4C3 0x6115 # <CJK>
-0xE4C4 0x63E1 # <CJK>
-0xE4C5 0x6A02 # <CJK>
-0xE4C6 0x6E25 # <CJK>
-0xE4C7 0x9102 # <CJK>
-0xE4C8 0x9354 # <CJK>
-0xE4C9 0x984E # <CJK>
-0xE4CA 0x9C10 # <CJK>
-0xE4CB 0x9F77 # <CJK>
-0xE4CC 0x5B89 # <CJK>
-0xE4CD 0x5CB8 # <CJK>
-0xE4CE 0x6309 # <CJK>
-0xE4CF 0x664F # <CJK>
-0xE4D0 0x6848 # <CJK>
-0xE4D1 0x773C # <CJK>
-0xE4D2 0x96C1 # <CJK>
-0xE4D3 0x978D # <CJK>
-0xE4D4 0x9854 # <CJK>
-0xE4D5 0x9B9F # <CJK>
-0xE4D6 0x65A1 # <CJK>
-0xE4D7 0x8B01 # <CJK>
-0xE4D8 0x8ECB # <CJK>
-0xE4D9 0x95BC # <CJK>
-0xE4DA 0x5535 # <CJK>
-0xE4DB 0x5CA9 # <CJK>
-0xE4DC 0x5DD6 # <CJK>
-0xE4DD 0x5EB5 # <CJK>
-0xE4DE 0x6697 # <CJK>
-0xE4DF 0x764C # <CJK>
-0xE4E0 0x83F4 # <CJK>
-0xE4E1 0x95C7 # <CJK>
-0xE4E2 0x58D3 # <CJK>
-0xE4E3 0x62BC # <CJK>
-0xE4E4 0x72CE # <CJK>
-0xE4E5 0x9D28 # <CJK>
-0xE4E6 0x4EF0 # <CJK>
-0xE4E7 0x592E # <CJK>
-0xE4E8 0x600F # <CJK>
-0xE4E9 0x663B # <CJK>
-0xE4EA 0x6B83 # <CJK>
-0xE4EB 0x79E7 # <CJK>
-0xE4EC 0x9D26 # <CJK>
-0xE4ED 0x5393 # <CJK>
-0xE4EE 0x54C0 # <CJK>
-0xE4EF 0x57C3 # <CJK>
-0xE4F0 0x5D16 # <CJK>
-0xE4F1 0x611B # <CJK>
-0xE4F2 0x66D6 # <CJK>
-0xE4F3 0x6DAF # <CJK>
-0xE4F4 0x788D # <CJK>
-0xE4F5 0x827E # <CJK>
-0xE4F6 0x9698 # <CJK>
-0xE4F7 0x9744 # <CJK>
-0xE4F8 0x5384 # <CJK>
-0xE4F9 0x627C # <CJK>
-0xE4FA 0x6396 # <CJK>
-0xE4FB 0x6DB2 # <CJK>
-0xE4FC 0x7E0A # <CJK>
-0xE4FD 0x814B # <CJK>
-0xE4FE 0x984D # <CJK>
-0xE5A1 0x6AFB # <CJK>
-0xE5A2 0x7F4C # <CJK>
-0xE5A3 0x9DAF # <CJK>
-0xE5A4 0x9E1A # <CJK>
-0xE5A5 0x4E5F # <CJK>
-0xE5A6 0x503B # <CJK>
-0xE5A7 0x51B6 # <CJK>
-0xE5A8 0x591C # <CJK>
-0xE5A9 0x60F9 # <CJK>
-0xE5AA 0x63F6 # <CJK>
-0xE5AB 0x6930 # <CJK>
-0xE5AC 0x723A # <CJK>
-0xE5AD 0x8036 # <CJK>
-0xE5AE 0xF974 # <CJK>
-0xE5AF 0x91CE # <CJK>
-0xE5B0 0x5F31 # <CJK>
-0xE5B1 0xF975 # <CJK>
-0xE5B2 0xF976 # <CJK>
-0xE5B3 0x7D04 # <CJK>
-0xE5B4 0x82E5 # <CJK>
-0xE5B5 0x846F # <CJK>
-0xE5B6 0x84BB # <CJK>
-0xE5B7 0x85E5 # <CJK>
-0xE5B8 0x8E8D # <CJK>
-0xE5B9 0xF977 # <CJK>
-0xE5BA 0x4F6F # <CJK>
-0xE5BB 0xF978 # <CJK>
-0xE5BC 0xF979 # <CJK>
-0xE5BD 0x58E4 # <CJK>
-0xE5BE 0x5B43 # <CJK>
-0xE5BF 0x6059 # <CJK>
-0xE5C0 0x63DA # <CJK>
-0xE5C1 0x6518 # <CJK>
-0xE5C2 0x656D # <CJK>
-0xE5C3 0x6698 # <CJK>
-0xE5C4 0xF97A # <CJK>
-0xE5C5 0x694A # <CJK>
-0xE5C6 0x6A23 # <CJK>
-0xE5C7 0x6D0B # <CJK>
-0xE5C8 0x7001 # <CJK>
-0xE5C9 0x716C # <CJK>
-0xE5CA 0x75D2 # <CJK>
-0xE5CB 0x760D # <CJK>
-0xE5CC 0x79B3 # <CJK>
-0xE5CD 0x7A70 # <CJK>
-0xE5CE 0xF97B # <CJK>
-0xE5CF 0x7F8A # <CJK>
-0xE5D0 0xF97C # <CJK>
-0xE5D1 0x8944 # <CJK>
-0xE5D2 0xF97D # <CJK>
-0xE5D3 0x8B93 # <CJK>
-0xE5D4 0x91C0 # <CJK>
-0xE5D5 0x967D # <CJK>
-0xE5D6 0xF97E # <CJK>
-0xE5D7 0x990A # <CJK>
-0xE5D8 0x5704 # <CJK>
-0xE5D9 0x5FA1 # <CJK>
-0xE5DA 0x65BC # <CJK>
-0xE5DB 0x6F01 # <CJK>
-0xE5DC 0x7600 # <CJK>
-0xE5DD 0x79A6 # <CJK>
-0xE5DE 0x8A9E # <CJK>
-0xE5DF 0x99AD # <CJK>
-0xE5E0 0x9B5A # <CJK>
-0xE5E1 0x9F6C # <CJK>
-0xE5E2 0x5104 # <CJK>
-0xE5E3 0x61B6 # <CJK>
-0xE5E4 0x6291 # <CJK>
-0xE5E5 0x6A8D # <CJK>
-0xE5E6 0x81C6 # <CJK>
-0xE5E7 0x5043 # <CJK>
-0xE5E8 0x5830 # <CJK>
-0xE5E9 0x5F66 # <CJK>
-0xE5EA 0x7109 # <CJK>
-0xE5EB 0x8A00 # <CJK>
-0xE5EC 0x8AFA # <CJK>
-0xE5ED 0x5B7C # <CJK>
-0xE5EE 0x8616 # <CJK>
-0xE5EF 0x4FFA # <CJK>
-0xE5F0 0x513C # <CJK>
-0xE5F1 0x56B4 # <CJK>
-0xE5F2 0x5944 # <CJK>
-0xE5F3 0x63A9 # <CJK>
-0xE5F4 0x6DF9 # <CJK>
-0xE5F5 0x5DAA # <CJK>
-0xE5F6 0x696D # <CJK>
-0xE5F7 0x5186 # <CJK>
-0xE5F8 0x4E88 # <CJK>
-0xE5F9 0x4F59 # <CJK>
-0xE5FA 0xF97F # <CJK>
-0xE5FB 0xF980 # <CJK>
-0xE5FC 0xF981 # <CJK>
-0xE5FD 0x5982 # <CJK>
-0xE5FE 0xF982 # <CJK>
-0xE6A1 0xF983 # <CJK>
-0xE6A2 0x6B5F # <CJK>
-0xE6A3 0x6C5D # <CJK>
-0xE6A4 0xF984 # <CJK>
-0xE6A5 0x74B5 # <CJK>
-0xE6A6 0x7916 # <CJK>
-0xE6A7 0xF985 # <CJK>
-0xE6A8 0x8207 # <CJK>
-0xE6A9 0x8245 # <CJK>
-0xE6AA 0x8339 # <CJK>
-0xE6AB 0x8F3F # <CJK>
-0xE6AC 0x8F5D # <CJK>
-0xE6AD 0xF986 # <CJK>
-0xE6AE 0x9918 # <CJK>
-0xE6AF 0xF987 # <CJK>
-0xE6B0 0xF988 # <CJK>
-0xE6B1 0xF989 # <CJK>
-0xE6B2 0x4EA6 # <CJK>
-0xE6B3 0xF98A # <CJK>
-0xE6B4 0x57DF # <CJK>
-0xE6B5 0x5F79 # <CJK>
-0xE6B6 0x6613 # <CJK>
-0xE6B7 0xF98B # <CJK>
-0xE6B8 0xF98C # <CJK>
-0xE6B9 0x75AB # <CJK>
-0xE6BA 0x7E79 # <CJK>
-0xE6BB 0x8B6F # <CJK>
-0xE6BC 0xF98D # <CJK>
-0xE6BD 0x9006 # <CJK>
-0xE6BE 0x9A5B # <CJK>
-0xE6BF 0x56A5 # <CJK>
-0xE6C0 0x5827 # <CJK>
-0xE6C1 0x59F8 # <CJK>
-0xE6C2 0x5A1F # <CJK>
-0xE6C3 0x5BB4 # <CJK>
-0xE6C4 0xF98E # <CJK>
-0xE6C5 0x5EF6 # <CJK>
-0xE6C6 0xF98F # <CJK>
-0xE6C7 0xF990 # <CJK>
-0xE6C8 0x6350 # <CJK>
-0xE6C9 0x633B # <CJK>
-0xE6CA 0xF991 # <CJK>
-0xE6CB 0x693D # <CJK>
-0xE6CC 0x6C87 # <CJK>
-0xE6CD 0x6CBF # <CJK>
-0xE6CE 0x6D8E # <CJK>
-0xE6CF 0x6D93 # <CJK>
-0xE6D0 0x6DF5 # <CJK>
-0xE6D1 0x6F14 # <CJK>
-0xE6D2 0xF992 # <CJK>
-0xE6D3 0x70DF # <CJK>
-0xE6D4 0x7136 # <CJK>
-0xE6D5 0x7159 # <CJK>
-0xE6D6 0xF993 # <CJK>
-0xE6D7 0x71C3 # <CJK>
-0xE6D8 0x71D5 # <CJK>
-0xE6D9 0xF994 # <CJK>
-0xE6DA 0x784F # <CJK>
-0xE6DB 0x786F # <CJK>
-0xE6DC 0xF995 # <CJK>
-0xE6DD 0x7B75 # <CJK>
-0xE6DE 0x7DE3 # <CJK>
-0xE6DF 0xF996 # <CJK>
-0xE6E0 0x7E2F # <CJK>
-0xE6E1 0xF997 # <CJK>
-0xE6E2 0x884D # <CJK>
-0xE6E3 0x8EDF # <CJK>
-0xE6E4 0xF998 # <CJK>
-0xE6E5 0xF999 # <CJK>
-0xE6E6 0xF99A # <CJK>
-0xE6E7 0x925B # <CJK>
-0xE6E8 0xF99B # <CJK>
-0xE6E9 0x9CF6 # <CJK>
-0xE6EA 0xF99C # <CJK>
-0xE6EB 0xF99D # <CJK>
-0xE6EC 0xF99E # <CJK>
-0xE6ED 0x6085 # <CJK>
-0xE6EE 0x6D85 # <CJK>
-0xE6EF 0xF99F # <CJK>
-0xE6F0 0x71B1 # <CJK>
-0xE6F1 0xF9A0 # <CJK>
-0xE6F2 0xF9A1 # <CJK>
-0xE6F3 0x95B1 # <CJK>
-0xE6F4 0x53AD # <CJK>
-0xE6F5 0xF9A2 # <CJK>
-0xE6F6 0xF9A3 # <CJK>
-0xE6F7 0xF9A4 # <CJK>
-0xE6F8 0x67D3 # <CJK>
-0xE6F9 0xF9A5 # <CJK>
-0xE6FA 0x708E # <CJK>
-0xE6FB 0x7130 # <CJK>
-0xE6FC 0x7430 # <CJK>
-0xE6FD 0x8276 # <CJK>
-0xE6FE 0x82D2 # <CJK>
-0xE7A1 0xF9A6 # <CJK>
-0xE7A2 0x95BB # <CJK>
-0xE7A3 0x9AE5 # <CJK>
-0xE7A4 0x9E7D # <CJK>
-0xE7A5 0x66C4 # <CJK>
-0xE7A6 0xF9A7 # <CJK>
-0xE7A7 0x71C1 # <CJK>
-0xE7A8 0x8449 # <CJK>
-0xE7A9 0xF9A8 # <CJK>
-0xE7AA 0xF9A9 # <CJK>
-0xE7AB 0x584B # <CJK>
-0xE7AC 0xF9AA # <CJK>
-0xE7AD 0xF9AB # <CJK>
-0xE7AE 0x5DB8 # <CJK>
-0xE7AF 0x5F71 # <CJK>
-0xE7B0 0xF9AC # <CJK>
-0xE7B1 0x6620 # <CJK>
-0xE7B2 0x668E # <CJK>
-0xE7B3 0x6979 # <CJK>
-0xE7B4 0x69AE # <CJK>
-0xE7B5 0x6C38 # <CJK>
-0xE7B6 0x6CF3 # <CJK>
-0xE7B7 0x6E36 # <CJK>
-0xE7B8 0x6F41 # <CJK>
-0xE7B9 0x6FDA # <CJK>
-0xE7BA 0x701B # <CJK>
-0xE7BB 0x702F # <CJK>
-0xE7BC 0x7150 # <CJK>
-0xE7BD 0x71DF # <CJK>
-0xE7BE 0x7370 # <CJK>
-0xE7BF 0xF9AD # <CJK>
-0xE7C0 0x745B # <CJK>
-0xE7C1 0xF9AE # <CJK>
-0xE7C2 0x74D4 # <CJK>
-0xE7C3 0x76C8 # <CJK>
-0xE7C4 0x7A4E # <CJK>
-0xE7C5 0x7E93 # <CJK>
-0xE7C6 0xF9AF # <CJK>
-0xE7C7 0xF9B0 # <CJK>
-0xE7C8 0x82F1 # <CJK>
-0xE7C9 0x8A60 # <CJK>
-0xE7CA 0x8FCE # <CJK>
-0xE7CB 0xF9B1 # <CJK>
-0xE7CC 0x9348 # <CJK>
-0xE7CD 0xF9B2 # <CJK>
-0xE7CE 0x9719 # <CJK>
-0xE7CF 0xF9B3 # <CJK>
-0xE7D0 0xF9B4 # <CJK>
-0xE7D1 0x4E42 # <CJK>
-0xE7D2 0x502A # <CJK>
-0xE7D3 0xF9B5 # <CJK>
-0xE7D4 0x5208 # <CJK>
-0xE7D5 0x53E1 # <CJK>
-0xE7D6 0x66F3 # <CJK>
-0xE7D7 0x6C6D # <CJK>
-0xE7D8 0x6FCA # <CJK>
-0xE7D9 0x730A # <CJK>
-0xE7DA 0x777F # <CJK>
-0xE7DB 0x7A62 # <CJK>
-0xE7DC 0x82AE # <CJK>
-0xE7DD 0x85DD # <CJK>
-0xE7DE 0x8602 # <CJK>
-0xE7DF 0xF9B6 # <CJK>
-0xE7E0 0x88D4 # <CJK>
-0xE7E1 0x8A63 # <CJK>
-0xE7E2 0x8B7D # <CJK>
-0xE7E3 0x8C6B # <CJK>
-0xE7E4 0xF9B7 # <CJK>
-0xE7E5 0x92B3 # <CJK>
-0xE7E6 0xF9B8 # <CJK>
-0xE7E7 0x9713 # <CJK>
-0xE7E8 0x9810 # <CJK>
-0xE7E9 0x4E94 # <CJK>
-0xE7EA 0x4F0D # <CJK>
-0xE7EB 0x4FC9 # <CJK>
-0xE7EC 0x50B2 # <CJK>
-0xE7ED 0x5348 # <CJK>
-0xE7EE 0x543E # <CJK>
-0xE7EF 0x5433 # <CJK>
-0xE7F0 0x55DA # <CJK>
-0xE7F1 0x5862 # <CJK>
-0xE7F2 0x58BA # <CJK>
-0xE7F3 0x5967 # <CJK>
-0xE7F4 0x5A1B # <CJK>
-0xE7F5 0x5BE4 # <CJK>
-0xE7F6 0x609F # <CJK>
-0xE7F7 0xF9B9 # <CJK>
-0xE7F8 0x61CA # <CJK>
-0xE7F9 0x6556 # <CJK>
-0xE7FA 0x65FF # <CJK>
-0xE7FB 0x6664 # <CJK>
-0xE7FC 0x68A7 # <CJK>
-0xE7FD 0x6C5A # <CJK>
-0xE7FE 0x6FB3 # <CJK>
-0xE8A1 0x70CF # <CJK>
-0xE8A2 0x71AC # <CJK>
-0xE8A3 0x7352 # <CJK>
-0xE8A4 0x7B7D # <CJK>
-0xE8A5 0x8708 # <CJK>
-0xE8A6 0x8AA4 # <CJK>
-0xE8A7 0x9C32 # <CJK>
-0xE8A8 0x9F07 # <CJK>
-0xE8A9 0x5C4B # <CJK>
-0xE8AA 0x6C83 # <CJK>
-0xE8AB 0x7344 # <CJK>
-0xE8AC 0x7389 # <CJK>
-0xE8AD 0x923A # <CJK>
-0xE8AE 0x6EAB # <CJK>
-0xE8AF 0x7465 # <CJK>
-0xE8B0 0x761F # <CJK>
-0xE8B1 0x7A69 # <CJK>
-0xE8B2 0x7E15 # <CJK>
-0xE8B3 0x860A # <CJK>
-0xE8B4 0x5140 # <CJK>
-0xE8B5 0x58C5 # <CJK>
-0xE8B6 0x64C1 # <CJK>
-0xE8B7 0x74EE # <CJK>
-0xE8B8 0x7515 # <CJK>
-0xE8B9 0x7670 # <CJK>
-0xE8BA 0x7FC1 # <CJK>
-0xE8BB 0x9095 # <CJK>
-0xE8BC 0x96CD # <CJK>
-0xE8BD 0x9954 # <CJK>
-0xE8BE 0x6E26 # <CJK>
-0xE8BF 0x74E6 # <CJK>
-0xE8C0 0x7AA9 # <CJK>
-0xE8C1 0x7AAA # <CJK>
-0xE8C2 0x81E5 # <CJK>
-0xE8C3 0x86D9 # <CJK>
-0xE8C4 0x8778 # <CJK>
-0xE8C5 0x8A1B # <CJK>
-0xE8C6 0x5A49 # <CJK>
-0xE8C7 0x5B8C # <CJK>
-0xE8C8 0x5B9B # <CJK>
-0xE8C9 0x68A1 # <CJK>
-0xE8CA 0x6900 # <CJK>
-0xE8CB 0x6D63 # <CJK>
-0xE8CC 0x73A9 # <CJK>
-0xE8CD 0x7413 # <CJK>
-0xE8CE 0x742C # <CJK>
-0xE8CF 0x7897 # <CJK>
-0xE8D0 0x7DE9 # <CJK>
-0xE8D1 0x7FEB # <CJK>
-0xE8D2 0x8118 # <CJK>
-0xE8D3 0x8155 # <CJK>
-0xE8D4 0x839E # <CJK>
-0xE8D5 0x8C4C # <CJK>
-0xE8D6 0x962E # <CJK>
-0xE8D7 0x9811 # <CJK>
-0xE8D8 0x66F0 # <CJK>
-0xE8D9 0x5F80 # <CJK>
-0xE8DA 0x65FA # <CJK>
-0xE8DB 0x6789 # <CJK>
-0xE8DC 0x6C6A # <CJK>
-0xE8DD 0x738B # <CJK>
-0xE8DE 0x502D # <CJK>
-0xE8DF 0x5A03 # <CJK>
-0xE8E0 0x6B6A # <CJK>
-0xE8E1 0x77EE # <CJK>
-0xE8E2 0x5916 # <CJK>
-0xE8E3 0x5D6C # <CJK>
-0xE8E4 0x5DCD # <CJK>
-0xE8E5 0x7325 # <CJK>
-0xE8E6 0x754F # <CJK>
-0xE8E7 0xF9BA # <CJK>
-0xE8E8 0xF9BB # <CJK>
-0xE8E9 0x50E5 # <CJK>
-0xE8EA 0x51F9 # <CJK>
-0xE8EB 0x582F # <CJK>
-0xE8EC 0x592D # <CJK>
-0xE8ED 0x5996 # <CJK>
-0xE8EE 0x59DA # <CJK>
-0xE8EF 0x5BE5 # <CJK>
-0xE8F0 0xF9BC # <CJK>
-0xE8F1 0xF9BD # <CJK>
-0xE8F2 0x5DA2 # <CJK>
-0xE8F3 0x62D7 # <CJK>
-0xE8F4 0x6416 # <CJK>
-0xE8F5 0x6493 # <CJK>
-0xE8F6 0x64FE # <CJK>
-0xE8F7 0xF9BE # <CJK>
-0xE8F8 0x66DC # <CJK>
-0xE8F9 0xF9BF # <CJK>
-0xE8FA 0x6A48 # <CJK>
-0xE8FB 0xF9C0 # <CJK>
-0xE8FC 0x71FF # <CJK>
-0xE8FD 0x7464 # <CJK>
-0xE8FE 0xF9C1 # <CJK>
-0xE9A1 0x7A88 # <CJK>
-0xE9A2 0x7AAF # <CJK>
-0xE9A3 0x7E47 # <CJK>
-0xE9A4 0x7E5E # <CJK>
-0xE9A5 0x8000 # <CJK>
-0xE9A6 0x8170 # <CJK>
-0xE9A7 0xF9C2 # <CJK>
-0xE9A8 0x87EF # <CJK>
-0xE9A9 0x8981 # <CJK>
-0xE9AA 0x8B20 # <CJK>
-0xE9AB 0x9059 # <CJK>
-0xE9AC 0xF9C3 # <CJK>
-0xE9AD 0x9080 # <CJK>
-0xE9AE 0x9952 # <CJK>
-0xE9AF 0x617E # <CJK>
-0xE9B0 0x6B32 # <CJK>
-0xE9B1 0x6D74 # <CJK>
-0xE9B2 0x7E1F # <CJK>
-0xE9B3 0x8925 # <CJK>
-0xE9B4 0x8FB1 # <CJK>
-0xE9B5 0x4FD1 # <CJK>
-0xE9B6 0x50AD # <CJK>
-0xE9B7 0x5197 # <CJK>
-0xE9B8 0x52C7 # <CJK>
-0xE9B9 0x57C7 # <CJK>
-0xE9BA 0x5889 # <CJK>
-0xE9BB 0x5BB9 # <CJK>
-0xE9BC 0x5EB8 # <CJK>
-0xE9BD 0x6142 # <CJK>
-0xE9BE 0x6995 # <CJK>
-0xE9BF 0x6D8C # <CJK>
-0xE9C0 0x6E67 # <CJK>
-0xE9C1 0x6EB6 # <CJK>
-0xE9C2 0x7194 # <CJK>
-0xE9C3 0x7462 # <CJK>
-0xE9C4 0x7528 # <CJK>
-0xE9C5 0x752C # <CJK>
-0xE9C6 0x8073 # <CJK>
-0xE9C7 0x8338 # <CJK>
-0xE9C8 0x84C9 # <CJK>
-0xE9C9 0x8E0A # <CJK>
-0xE9CA 0x9394 # <CJK>
-0xE9CB 0x93DE # <CJK>
-0xE9CC 0xF9C4 # <CJK>
-0xE9CD 0x4E8E # <CJK>
-0xE9CE 0x4F51 # <CJK>
-0xE9CF 0x5076 # <CJK>
-0xE9D0 0x512A # <CJK>
-0xE9D1 0x53C8 # <CJK>
-0xE9D2 0x53CB # <CJK>
-0xE9D3 0x53F3 # <CJK>
-0xE9D4 0x5B87 # <CJK>
-0xE9D5 0x5BD3 # <CJK>
-0xE9D6 0x5C24 # <CJK>
-0xE9D7 0x611A # <CJK>
-0xE9D8 0x6182 # <CJK>
-0xE9D9 0x65F4 # <CJK>
-0xE9DA 0x725B # <CJK>
-0xE9DB 0x7397 # <CJK>
-0xE9DC 0x7440 # <CJK>
-0xE9DD 0x76C2 # <CJK>
-0xE9DE 0x7950 # <CJK>
-0xE9DF 0x7991 # <CJK>
-0xE9E0 0x79B9 # <CJK>
-0xE9E1 0x7D06 # <CJK>
-0xE9E2 0x7FBD # <CJK>
-0xE9E3 0x828B # <CJK>
-0xE9E4 0x85D5 # <CJK>
-0xE9E5 0x865E # <CJK>
-0xE9E6 0x8FC2 # <CJK>
-0xE9E7 0x9047 # <CJK>
-0xE9E8 0x90F5 # <CJK>
-0xE9E9 0x91EA # <CJK>
-0xE9EA 0x9685 # <CJK>
-0xE9EB 0x96E8 # <CJK>
-0xE9EC 0x96E9 # <CJK>
-0xE9ED 0x52D6 # <CJK>
-0xE9EE 0x5F67 # <CJK>
-0xE9EF 0x65ED # <CJK>
-0xE9F0 0x6631 # <CJK>
-0xE9F1 0x682F # <CJK>
-0xE9F2 0x715C # <CJK>
-0xE9F3 0x7A36 # <CJK>
-0xE9F4 0x90C1 # <CJK>
-0xE9F5 0x980A # <CJK>
-0xE9F6 0x4E91 # <CJK>
-0xE9F7 0xF9C5 # <CJK>
-0xE9F8 0x6A52 # <CJK>
-0xE9F9 0x6B9E # <CJK>
-0xE9FA 0x6F90 # <CJK>
-0xE9FB 0x7189 # <CJK>
-0xE9FC 0x8018 # <CJK>
-0xE9FD 0x82B8 # <CJK>
-0xE9FE 0x8553 # <CJK>
-0xEAA1 0x904B # <CJK>
-0xEAA2 0x9695 # <CJK>
-0xEAA3 0x96F2 # <CJK>
-0xEAA4 0x97FB # <CJK>
-0xEAA5 0x851A # <CJK>
-0xEAA6 0x9B31 # <CJK>
-0xEAA7 0x4E90 # <CJK>
-0xEAA8 0x718A # <CJK>
-0xEAA9 0x96C4 # <CJK>
-0xEAAA 0x5143 # <CJK>
-0xEAAB 0x539F # <CJK>
-0xEAAC 0x54E1 # <CJK>
-0xEAAD 0x5713 # <CJK>
-0xEAAE 0x5712 # <CJK>
-0xEAAF 0x57A3 # <CJK>
-0xEAB0 0x5A9B # <CJK>
-0xEAB1 0x5AC4 # <CJK>
-0xEAB2 0x5BC3 # <CJK>
-0xEAB3 0x6028 # <CJK>
-0xEAB4 0x613F # <CJK>
-0xEAB5 0x63F4 # <CJK>
-0xEAB6 0x6C85 # <CJK>
-0xEAB7 0x6D39 # <CJK>
-0xEAB8 0x6E72 # <CJK>
-0xEAB9 0x6E90 # <CJK>
-0xEABA 0x7230 # <CJK>
-0xEABB 0x733F # <CJK>
-0xEABC 0x7457 # <CJK>
-0xEABD 0x82D1 # <CJK>
-0xEABE 0x8881 # <CJK>
-0xEABF 0x8F45 # <CJK>
-0xEAC0 0x9060 # <CJK>
-0xEAC1 0xF9C6 # <CJK>
-0xEAC2 0x9662 # <CJK>
-0xEAC3 0x9858 # <CJK>
-0xEAC4 0x9D1B # <CJK>
-0xEAC5 0x6708 # <CJK>
-0xEAC6 0x8D8A # <CJK>
-0xEAC7 0x925E # <CJK>
-0xEAC8 0x4F4D # <CJK>
-0xEAC9 0x5049 # <CJK>
-0xEACA 0x50DE # <CJK>
-0xEACB 0x5371 # <CJK>
-0xEACC 0x570D # <CJK>
-0xEACD 0x59D4 # <CJK>
-0xEACE 0x5A01 # <CJK>
-0xEACF 0x5C09 # <CJK>
-0xEAD0 0x6170 # <CJK>
-0xEAD1 0x6690 # <CJK>
-0xEAD2 0x6E2D # <CJK>
-0xEAD3 0x7232 # <CJK>
-0xEAD4 0x744B # <CJK>
-0xEAD5 0x7DEF # <CJK>
-0xEAD6 0x80C3 # <CJK>
-0xEAD7 0x840E # <CJK>
-0xEAD8 0x8466 # <CJK>
-0xEAD9 0x853F # <CJK>
-0xEADA 0x875F # <CJK>
-0xEADB 0x885B # <CJK>
-0xEADC 0x8918 # <CJK>
-0xEADD 0x8B02 # <CJK>
-0xEADE 0x9055 # <CJK>
-0xEADF 0x97CB # <CJK>
-0xEAE0 0x9B4F # <CJK>
-0xEAE1 0x4E73 # <CJK>
-0xEAE2 0x4F91 # <CJK>
-0xEAE3 0x5112 # <CJK>
-0xEAE4 0x516A # <CJK>
-0xEAE5 0xF9C7 # <CJK>
-0xEAE6 0x552F # <CJK>
-0xEAE7 0x55A9 # <CJK>
-0xEAE8 0x5B7A # <CJK>
-0xEAE9 0x5BA5 # <CJK>
-0xEAEA 0x5E7C # <CJK>
-0xEAEB 0x5E7D # <CJK>
-0xEAEC 0x5EBE # <CJK>
-0xEAED 0x60A0 # <CJK>
-0xEAEE 0x60DF # <CJK>
-0xEAEF 0x6108 # <CJK>
-0xEAF0 0x6109 # <CJK>
-0xEAF1 0x63C4 # <CJK>
-0xEAF2 0x6538 # <CJK>
-0xEAF3 0x6709 # <CJK>
-0xEAF4 0xF9C8 # <CJK>
-0xEAF5 0x67D4 # <CJK>
-0xEAF6 0x67DA # <CJK>
-0xEAF7 0xF9C9 # <CJK>
-0xEAF8 0x6961 # <CJK>
-0xEAF9 0x6962 # <CJK>
-0xEAFA 0x6CB9 # <CJK>
-0xEAFB 0x6D27 # <CJK>
-0xEAFC 0xF9CA # <CJK>
-0xEAFD 0x6E38 # <CJK>
-0xEAFE 0xF9CB # <CJK>
-0xEBA1 0x6FE1 # <CJK>
-0xEBA2 0x7336 # <CJK>
-0xEBA3 0x7337 # <CJK>
-0xEBA4 0xF9CC # <CJK>
-0xEBA5 0x745C # <CJK>
-0xEBA6 0x7531 # <CJK>
-0xEBA7 0xF9CD # <CJK>
-0xEBA8 0x7652 # <CJK>
-0xEBA9 0xF9CE # <CJK>
-0xEBAA 0xF9CF # <CJK>
-0xEBAB 0x7DAD # <CJK>
-0xEBAC 0x81FE # <CJK>
-0xEBAD 0x8438 # <CJK>
-0xEBAE 0x88D5 # <CJK>
-0xEBAF 0x8A98 # <CJK>
-0xEBB0 0x8ADB # <CJK>
-0xEBB1 0x8AED # <CJK>
-0xEBB2 0x8E30 # <CJK>
-0xEBB3 0x8E42 # <CJK>
-0xEBB4 0x904A # <CJK>
-0xEBB5 0x903E # <CJK>
-0xEBB6 0x907A # <CJK>
-0xEBB7 0x9149 # <CJK>
-0xEBB8 0x91C9 # <CJK>
-0xEBB9 0x936E # <CJK>
-0xEBBA 0xF9D0 # <CJK>
-0xEBBB 0xF9D1 # <CJK>
-0xEBBC 0x5809 # <CJK>
-0xEBBD 0xF9D2 # <CJK>
-0xEBBE 0x6BD3 # <CJK>
-0xEBBF 0x8089 # <CJK>
-0xEBC0 0x80B2 # <CJK>
-0xEBC1 0xF9D3 # <CJK>
-0xEBC2 0xF9D4 # <CJK>
-0xEBC3 0x5141 # <CJK>
-0xEBC4 0x596B # <CJK>
-0xEBC5 0x5C39 # <CJK>
-0xEBC6 0xF9D5 # <CJK>
-0xEBC7 0xF9D6 # <CJK>
-0xEBC8 0x6F64 # <CJK>
-0xEBC9 0x73A7 # <CJK>
-0xEBCA 0x80E4 # <CJK>
-0xEBCB 0x8D07 # <CJK>
-0xEBCC 0xF9D7 # <CJK>
-0xEBCD 0x9217 # <CJK>
-0xEBCE 0x958F # <CJK>
-0xEBCF 0xF9D8 # <CJK>
-0xEBD0 0xF9D9 # <CJK>
-0xEBD1 0xF9DA # <CJK>
-0xEBD2 0xF9DB # <CJK>
-0xEBD3 0x807F # <CJK>
-0xEBD4 0x620E # <CJK>
-0xEBD5 0x701C # <CJK>
-0xEBD6 0x7D68 # <CJK>
-0xEBD7 0x878D # <CJK>
-0xEBD8 0xF9DC # <CJK>
-0xEBD9 0x57A0 # <CJK>
-0xEBDA 0x6069 # <CJK>
-0xEBDB 0x6147 # <CJK>
-0xEBDC 0x6BB7 # <CJK>
-0xEBDD 0x8ABE # <CJK>
-0xEBDE 0x9280 # <CJK>
-0xEBDF 0x96B1 # <CJK>
-0xEBE0 0x4E59 # <CJK>
-0xEBE1 0x541F # <CJK>
-0xEBE2 0x6DEB # <CJK>
-0xEBE3 0x852D # <CJK>
-0xEBE4 0x9670 # <CJK>
-0xEBE5 0x97F3 # <CJK>
-0xEBE6 0x98EE # <CJK>
-0xEBE7 0x63D6 # <CJK>
-0xEBE8 0x6CE3 # <CJK>
-0xEBE9 0x9091 # <CJK>
-0xEBEA 0x51DD # <CJK>
-0xEBEB 0x61C9 # <CJK>
-0xEBEC 0x81BA # <CJK>
-0xEBED 0x9DF9 # <CJK>
-0xEBEE 0x4F9D # <CJK>
-0xEBEF 0x501A # <CJK>
-0xEBF0 0x5100 # <CJK>
-0xEBF1 0x5B9C # <CJK>
-0xEBF2 0x610F # <CJK>
-0xEBF3 0x61FF # <CJK>
-0xEBF4 0x64EC # <CJK>
-0xEBF5 0x6905 # <CJK>
-0xEBF6 0x6BC5 # <CJK>
-0xEBF7 0x7591 # <CJK>
-0xEBF8 0x77E3 # <CJK>
-0xEBF9 0x7FA9 # <CJK>
-0xEBFA 0x8264 # <CJK>
-0xEBFB 0x858F # <CJK>
-0xEBFC 0x87FB # <CJK>
-0xEBFD 0x8863 # <CJK>
-0xEBFE 0x8ABC # <CJK>
-0xECA1 0x8B70 # <CJK>
-0xECA2 0x91AB # <CJK>
-0xECA3 0x4E8C # <CJK>
-0xECA4 0x4EE5 # <CJK>
-0xECA5 0x4F0A # <CJK>
-0xECA6 0xF9DD # <CJK>
-0xECA7 0xF9DE # <CJK>
-0xECA8 0x5937 # <CJK>
-0xECA9 0x59E8 # <CJK>
-0xECAA 0xF9DF # <CJK>
-0xECAB 0x5DF2 # <CJK>
-0xECAC 0x5F1B # <CJK>
-0xECAD 0x5F5B # <CJK>
-0xECAE 0x6021 # <CJK>
-0xECAF 0xF9E0 # <CJK>
-0xECB0 0xF9E1 # <CJK>
-0xECB1 0xF9E2 # <CJK>
-0xECB2 0xF9E3 # <CJK>
-0xECB3 0x723E # <CJK>
-0xECB4 0x73E5 # <CJK>
-0xECB5 0xF9E4 # <CJK>
-0xECB6 0x7570 # <CJK>
-0xECB7 0x75CD # <CJK>
-0xECB8 0xF9E5 # <CJK>
-0xECB9 0x79FB # <CJK>
-0xECBA 0xF9E6 # <CJK>
-0xECBB 0x800C # <CJK>
-0xECBC 0x8033 # <CJK>
-0xECBD 0x8084 # <CJK>
-0xECBE 0x82E1 # <CJK>
-0xECBF 0x8351 # <CJK>
-0xECC0 0xF9E7 # <CJK>
-0xECC1 0xF9E8 # <CJK>
-0xECC2 0x8CBD # <CJK>
-0xECC3 0x8CB3 # <CJK>
-0xECC4 0x9087 # <CJK>
-0xECC5 0xF9E9 # <CJK>
-0xECC6 0xF9EA # <CJK>
-0xECC7 0x98F4 # <CJK>
-0xECC8 0x990C # <CJK>
-0xECC9 0xF9EB # <CJK>
-0xECCA 0xF9EC # <CJK>
-0xECCB 0x7037 # <CJK>
-0xECCC 0x76CA # <CJK>
-0xECCD 0x7FCA # <CJK>
-0xECCE 0x7FCC # <CJK>
-0xECCF 0x7FFC # <CJK>
-0xECD0 0x8B1A # <CJK>
-0xECD1 0x4EBA # <CJK>
-0xECD2 0x4EC1 # <CJK>
-0xECD3 0x5203 # <CJK>
-0xECD4 0x5370 # <CJK>
-0xECD5 0xF9ED # <CJK>
-0xECD6 0x54BD # <CJK>
-0xECD7 0x56E0 # <CJK>
-0xECD8 0x59FB # <CJK>
-0xECD9 0x5BC5 # <CJK>
-0xECDA 0x5F15 # <CJK>
-0xECDB 0x5FCD # <CJK>
-0xECDC 0x6E6E # <CJK>
-0xECDD 0xF9EE # <CJK>
-0xECDE 0xF9EF # <CJK>
-0xECDF 0x7D6A # <CJK>
-0xECE0 0x8335 # <CJK>
-0xECE1 0xF9F0 # <CJK>
-0xECE2 0x8693 # <CJK>
-0xECE3 0x8A8D # <CJK>
-0xECE4 0xF9F1 # <CJK>
-0xECE5 0x976D # <CJK>
-0xECE6 0x9777 # <CJK>
-0xECE7 0xF9F2 # <CJK>
-0xECE8 0xF9F3 # <CJK>
-0xECE9 0x4E00 # <CJK>
-0xECEA 0x4F5A # <CJK>
-0xECEB 0x4F7E # <CJK>
-0xECEC 0x58F9 # <CJK>
-0xECED 0x65E5 # <CJK>
-0xECEE 0x6EA2 # <CJK>
-0xECEF 0x9038 # <CJK>
-0xECF0 0x93B0 # <CJK>
-0xECF1 0x99B9 # <CJK>
-0xECF2 0x4EFB # <CJK>
-0xECF3 0x58EC # <CJK>
-0xECF4 0x598A # <CJK>
-0xECF5 0x59D9 # <CJK>
-0xECF6 0x6041 # <CJK>
-0xECF7 0xF9F4 # <CJK>
-0xECF8 0xF9F5 # <CJK>
-0xECF9 0x7A14 # <CJK>
-0xECFA 0xF9F6 # <CJK>
-0xECFB 0x834F # <CJK>
-0xECFC 0x8CC3 # <CJK>
-0xECFD 0x5165 # <CJK>
-0xECFE 0x5344 # <CJK>
-0xEDA1 0xF9F7 # <CJK>
-0xEDA2 0xF9F8 # <CJK>
-0xEDA3 0xF9F9 # <CJK>
-0xEDA4 0x4ECD # <CJK>
-0xEDA5 0x5269 # <CJK>
-0xEDA6 0x5B55 # <CJK>
-0xEDA7 0x82BF # <CJK>
-0xEDA8 0x4ED4 # <CJK>
-0xEDA9 0x523A # <CJK>
-0xEDAA 0x54A8 # <CJK>
-0xEDAB 0x59C9 # <CJK>
-0xEDAC 0x59FF # <CJK>
-0xEDAD 0x5B50 # <CJK>
-0xEDAE 0x5B57 # <CJK>
-0xEDAF 0x5B5C # <CJK>
-0xEDB0 0x6063 # <CJK>
-0xEDB1 0x6148 # <CJK>
-0xEDB2 0x6ECB # <CJK>
-0xEDB3 0x7099 # <CJK>
-0xEDB4 0x716E # <CJK>
-0xEDB5 0x7386 # <CJK>
-0xEDB6 0x74F7 # <CJK>
-0xEDB7 0x75B5 # <CJK>
-0xEDB8 0x78C1 # <CJK>
-0xEDB9 0x7D2B # <CJK>
-0xEDBA 0x8005 # <CJK>
-0xEDBB 0x81EA # <CJK>
-0xEDBC 0x8328 # <CJK>
-0xEDBD 0x8517 # <CJK>
-0xEDBE 0x85C9 # <CJK>
-0xEDBF 0x8AEE # <CJK>
-0xEDC0 0x8CC7 # <CJK>
-0xEDC1 0x96CC # <CJK>
-0xEDC2 0x4F5C # <CJK>
-0xEDC3 0x52FA # <CJK>
-0xEDC4 0x56BC # <CJK>
-0xEDC5 0x65AB # <CJK>
-0xEDC6 0x6628 # <CJK>
-0xEDC7 0x707C # <CJK>
-0xEDC8 0x70B8 # <CJK>
-0xEDC9 0x7235 # <CJK>
-0xEDCA 0x7DBD # <CJK>
-0xEDCB 0x828D # <CJK>
-0xEDCC 0x914C # <CJK>
-0xEDCD 0x96C0 # <CJK>
-0xEDCE 0x9D72 # <CJK>
-0xEDCF 0x5B71 # <CJK>
-0xEDD0 0x68E7 # <CJK>
-0xEDD1 0x6B98 # <CJK>
-0xEDD2 0x6F7A # <CJK>
-0xEDD3 0x76DE # <CJK>
-0xEDD4 0x5C91 # <CJK>
-0xEDD5 0x66AB # <CJK>
-0xEDD6 0x6F5B # <CJK>
-0xEDD7 0x7BB4 # <CJK>
-0xEDD8 0x7C2A # <CJK>
-0xEDD9 0x8836 # <CJK>
-0xEDDA 0x96DC # <CJK>
-0xEDDB 0x4E08 # <CJK>
-0xEDDC 0x4ED7 # <CJK>
-0xEDDD 0x5320 # <CJK>
-0xEDDE 0x5834 # <CJK>
-0xEDDF 0x58BB # <CJK>
-0xEDE0 0x58EF # <CJK>
-0xEDE1 0x596C # <CJK>
-0xEDE2 0x5C07 # <CJK>
-0xEDE3 0x5E33 # <CJK>
-0xEDE4 0x5E84 # <CJK>
-0xEDE5 0x5F35 # <CJK>
-0xEDE6 0x638C # <CJK>
-0xEDE7 0x66B2 # <CJK>
-0xEDE8 0x6756 # <CJK>
-0xEDE9 0x6A1F # <CJK>
-0xEDEA 0x6AA3 # <CJK>
-0xEDEB 0x6B0C # <CJK>
-0xEDEC 0x6F3F # <CJK>
-0xEDED 0x7246 # <CJK>
-0xEDEE 0xF9FA # <CJK>
-0xEDEF 0x7350 # <CJK>
-0xEDF0 0x748B # <CJK>
-0xEDF1 0x7AE0 # <CJK>
-0xEDF2 0x7CA7 # <CJK>
-0xEDF3 0x8178 # <CJK>
-0xEDF4 0x81DF # <CJK>
-0xEDF5 0x81E7 # <CJK>
-0xEDF6 0x838A # <CJK>
-0xEDF7 0x846C # <CJK>
-0xEDF8 0x8523 # <CJK>
-0xEDF9 0x8594 # <CJK>
-0xEDFA 0x85CF # <CJK>
-0xEDFB 0x88DD # <CJK>
-0xEDFC 0x8D13 # <CJK>
-0xEDFD 0x91AC # <CJK>
-0xEDFE 0x9577 # <CJK>
-0xEEA1 0x969C # <CJK>
-0xEEA2 0x518D # <CJK>
-0xEEA3 0x54C9 # <CJK>
-0xEEA4 0x5728 # <CJK>
-0xEEA5 0x5BB0 # <CJK>
-0xEEA6 0x624D # <CJK>
-0xEEA7 0x6750 # <CJK>
-0xEEA8 0x683D # <CJK>
-0xEEA9 0x6893 # <CJK>
-0xEEAA 0x6E3D # <CJK>
-0xEEAB 0x6ED3 # <CJK>
-0xEEAC 0x707D # <CJK>
-0xEEAD 0x7E21 # <CJK>
-0xEEAE 0x88C1 # <CJK>
-0xEEAF 0x8CA1 # <CJK>
-0xEEB0 0x8F09 # <CJK>
-0xEEB1 0x9F4B # <CJK>
-0xEEB2 0x9F4E # <CJK>
-0xEEB3 0x722D # <CJK>
-0xEEB4 0x7B8F # <CJK>
-0xEEB5 0x8ACD # <CJK>
-0xEEB6 0x931A # <CJK>
-0xEEB7 0x4F47 # <CJK>
-0xEEB8 0x4F4E # <CJK>
-0xEEB9 0x5132 # <CJK>
-0xEEBA 0x5480 # <CJK>
-0xEEBB 0x59D0 # <CJK>
-0xEEBC 0x5E95 # <CJK>
-0xEEBD 0x62B5 # <CJK>
-0xEEBE 0x6775 # <CJK>
-0xEEBF 0x696E # <CJK>
-0xEEC0 0x6A17 # <CJK>
-0xEEC1 0x6CAE # <CJK>
-0xEEC2 0x6E1A # <CJK>
-0xEEC3 0x72D9 # <CJK>
-0xEEC4 0x732A # <CJK>
-0xEEC5 0x75BD # <CJK>
-0xEEC6 0x7BB8 # <CJK>
-0xEEC7 0x7D35 # <CJK>
-0xEEC8 0x82E7 # <CJK>
-0xEEC9 0x83F9 # <CJK>
-0xEECA 0x8457 # <CJK>
-0xEECB 0x85F7 # <CJK>
-0xEECC 0x8A5B # <CJK>
-0xEECD 0x8CAF # <CJK>
-0xEECE 0x8E87 # <CJK>
-0xEECF 0x9019 # <CJK>
-0xEED0 0x90B8 # <CJK>
-0xEED1 0x96CE # <CJK>
-0xEED2 0x9F5F # <CJK>
-0xEED3 0x52E3 # <CJK>
-0xEED4 0x540A # <CJK>
-0xEED5 0x5AE1 # <CJK>
-0xEED6 0x5BC2 # <CJK>
-0xEED7 0x6458 # <CJK>
-0xEED8 0x6575 # <CJK>
-0xEED9 0x6EF4 # <CJK>
-0xEEDA 0x72C4 # <CJK>
-0xEEDB 0xF9FB # <CJK>
-0xEEDC 0x7684 # <CJK>
-0xEEDD 0x7A4D # <CJK>
-0xEEDE 0x7B1B # <CJK>
-0xEEDF 0x7C4D # <CJK>
-0xEEE0 0x7E3E # <CJK>
-0xEEE1 0x7FDF # <CJK>
-0xEEE2 0x837B # <CJK>
-0xEEE3 0x8B2B # <CJK>
-0xEEE4 0x8CCA # <CJK>
-0xEEE5 0x8D64 # <CJK>
-0xEEE6 0x8DE1 # <CJK>
-0xEEE7 0x8E5F # <CJK>
-0xEEE8 0x8FEA # <CJK>
-0xEEE9 0x8FF9 # <CJK>
-0xEEEA 0x9069 # <CJK>
-0xEEEB 0x93D1 # <CJK>
-0xEEEC 0x4F43 # <CJK>
-0xEEED 0x4F7A # <CJK>
-0xEEEE 0x50B3 # <CJK>
-0xEEEF 0x5168 # <CJK>
-0xEEF0 0x5178 # <CJK>
-0xEEF1 0x524D # <CJK>
-0xEEF2 0x526A # <CJK>
-0xEEF3 0x5861 # <CJK>
-0xEEF4 0x587C # <CJK>
-0xEEF5 0x5960 # <CJK>
-0xEEF6 0x5C08 # <CJK>
-0xEEF7 0x5C55 # <CJK>
-0xEEF8 0x5EDB # <CJK>
-0xEEF9 0x609B # <CJK>
-0xEEFA 0x6230 # <CJK>
-0xEEFB 0x6813 # <CJK>
-0xEEFC 0x6BBF # <CJK>
-0xEEFD 0x6C08 # <CJK>
-0xEEFE 0x6FB1 # <CJK>
-0xEFA1 0x714E # <CJK>
-0xEFA2 0x7420 # <CJK>
-0xEFA3 0x7530 # <CJK>
-0xEFA4 0x7538 # <CJK>
-0xEFA5 0x7551 # <CJK>
-0xEFA6 0x7672 # <CJK>
-0xEFA7 0x7B4C # <CJK>
-0xEFA8 0x7B8B # <CJK>
-0xEFA9 0x7BAD # <CJK>
-0xEFAA 0x7BC6 # <CJK>
-0xEFAB 0x7E8F # <CJK>
-0xEFAC 0x8A6E # <CJK>
-0xEFAD 0x8F3E # <CJK>
-0xEFAE 0x8F49 # <CJK>
-0xEFAF 0x923F # <CJK>
-0xEFB0 0x9293 # <CJK>
-0xEFB1 0x9322 # <CJK>
-0xEFB2 0x942B # <CJK>
-0xEFB3 0x96FB # <CJK>
-0xEFB4 0x985A # <CJK>
-0xEFB5 0x986B # <CJK>
-0xEFB6 0x991E # <CJK>
-0xEFB7 0x5207 # <CJK>
-0xEFB8 0x622A # <CJK>
-0xEFB9 0x6298 # <CJK>
-0xEFBA 0x6D59 # <CJK>
-0xEFBB 0x7664 # <CJK>
-0xEFBC 0x7ACA # <CJK>
-0xEFBD 0x7BC0 # <CJK>
-0xEFBE 0x7D76 # <CJK>
-0xEFBF 0x5360 # <CJK>
-0xEFC0 0x5CBE # <CJK>
-0xEFC1 0x5E97 # <CJK>
-0xEFC2 0x6F38 # <CJK>
-0xEFC3 0x70B9 # <CJK>
-0xEFC4 0x7C98 # <CJK>
-0xEFC5 0x9711 # <CJK>
-0xEFC6 0x9B8E # <CJK>
-0xEFC7 0x9EDE # <CJK>
-0xEFC8 0x63A5 # <CJK>
-0xEFC9 0x647A # <CJK>
-0xEFCA 0x8776 # <CJK>
-0xEFCB 0x4E01 # <CJK>
-0xEFCC 0x4E95 # <CJK>
-0xEFCD 0x4EAD # <CJK>
-0xEFCE 0x505C # <CJK>
-0xEFCF 0x5075 # <CJK>
-0xEFD0 0x5448 # <CJK>
-0xEFD1 0x59C3 # <CJK>
-0xEFD2 0x5B9A # <CJK>
-0xEFD3 0x5E40 # <CJK>
-0xEFD4 0x5EAD # <CJK>
-0xEFD5 0x5EF7 # <CJK>
-0xEFD6 0x5F81 # <CJK>
-0xEFD7 0x60C5 # <CJK>
-0xEFD8 0x633A # <CJK>
-0xEFD9 0x653F # <CJK>
-0xEFDA 0x6574 # <CJK>
-0xEFDB 0x65CC # <CJK>
-0xEFDC 0x6676 # <CJK>
-0xEFDD 0x6678 # <CJK>
-0xEFDE 0x67FE # <CJK>
-0xEFDF 0x6968 # <CJK>
-0xEFE0 0x6A89 # <CJK>
-0xEFE1 0x6B63 # <CJK>
-0xEFE2 0x6C40 # <CJK>
-0xEFE3 0x6DC0 # <CJK>
-0xEFE4 0x6DE8 # <CJK>
-0xEFE5 0x6E1F # <CJK>
-0xEFE6 0x6E5E # <CJK>
-0xEFE7 0x701E # <CJK>
-0xEFE8 0x70A1 # <CJK>
-0xEFE9 0x738E # <CJK>
-0xEFEA 0x73FD # <CJK>
-0xEFEB 0x753A # <CJK>
-0xEFEC 0x775B # <CJK>
-0xEFED 0x7887 # <CJK>
-0xEFEE 0x798E # <CJK>
-0xEFEF 0x7A0B # <CJK>
-0xEFF0 0x7A7D # <CJK>
-0xEFF1 0x7CBE # <CJK>
-0xEFF2 0x7D8E # <CJK>
-0xEFF3 0x8247 # <CJK>
-0xEFF4 0x8A02 # <CJK>
-0xEFF5 0x8AEA # <CJK>
-0xEFF6 0x8C9E # <CJK>
-0xEFF7 0x912D # <CJK>
-0xEFF8 0x914A # <CJK>
-0xEFF9 0x91D8 # <CJK>
-0xEFFA 0x9266 # <CJK>
-0xEFFB 0x92CC # <CJK>
-0xEFFC 0x9320 # <CJK>
-0xEFFD 0x9706 # <CJK>
-0xEFFE 0x9756 # <CJK>
-0xF0A1 0x975C # <CJK>
-0xF0A2 0x9802 # <CJK>
-0xF0A3 0x9F0E # <CJK>
-0xF0A4 0x5236 # <CJK>
-0xF0A5 0x5291 # <CJK>
-0xF0A6 0x557C # <CJK>
-0xF0A7 0x5824 # <CJK>
-0xF0A8 0x5E1D # <CJK>
-0xF0A9 0x5F1F # <CJK>
-0xF0AA 0x608C # <CJK>
-0xF0AB 0x63D0 # <CJK>
-0xF0AC 0x68AF # <CJK>
-0xF0AD 0x6FDF # <CJK>
-0xF0AE 0x796D # <CJK>
-0xF0AF 0x7B2C # <CJK>
-0xF0B0 0x81CD # <CJK>
-0xF0B1 0x85BA # <CJK>
-0xF0B2 0x88FD # <CJK>
-0xF0B3 0x8AF8 # <CJK>
-0xF0B4 0x8E44 # <CJK>
-0xF0B5 0x918D # <CJK>
-0xF0B6 0x9664 # <CJK>
-0xF0B7 0x969B # <CJK>
-0xF0B8 0x973D # <CJK>
-0xF0B9 0x984C # <CJK>
-0xF0BA 0x9F4A # <CJK>
-0xF0BB 0x4FCE # <CJK>
-0xF0BC 0x5146 # <CJK>
-0xF0BD 0x51CB # <CJK>
-0xF0BE 0x52A9 # <CJK>
-0xF0BF 0x5632 # <CJK>
-0xF0C0 0x5F14 # <CJK>
-0xF0C1 0x5F6B # <CJK>
-0xF0C2 0x63AA # <CJK>
-0xF0C3 0x64CD # <CJK>
-0xF0C4 0x65E9 # <CJK>
-0xF0C5 0x6641 # <CJK>
-0xF0C6 0x66FA # <CJK>
-0xF0C7 0x66F9 # <CJK>
-0xF0C8 0x671D # <CJK>
-0xF0C9 0x689D # <CJK>
-0xF0CA 0x68D7 # <CJK>
-0xF0CB 0x69FD # <CJK>
-0xF0CC 0x6F15 # <CJK>
-0xF0CD 0x6F6E # <CJK>
-0xF0CE 0x7167 # <CJK>
-0xF0CF 0x71E5 # <CJK>
-0xF0D0 0x722A # <CJK>
-0xF0D1 0x74AA # <CJK>
-0xF0D2 0x773A # <CJK>
-0xF0D3 0x7956 # <CJK>
-0xF0D4 0x795A # <CJK>
-0xF0D5 0x79DF # <CJK>
-0xF0D6 0x7A20 # <CJK>
-0xF0D7 0x7A95 # <CJK>
-0xF0D8 0x7C97 # <CJK>
-0xF0D9 0x7CDF # <CJK>
-0xF0DA 0x7D44 # <CJK>
-0xF0DB 0x7E70 # <CJK>
-0xF0DC 0x8087 # <CJK>
-0xF0DD 0x85FB # <CJK>
-0xF0DE 0x86A4 # <CJK>
-0xF0DF 0x8A54 # <CJK>
-0xF0E0 0x8ABF # <CJK>
-0xF0E1 0x8D99 # <CJK>
-0xF0E2 0x8E81 # <CJK>
-0xF0E3 0x9020 # <CJK>
-0xF0E4 0x906D # <CJK>
-0xF0E5 0x91E3 # <CJK>
-0xF0E6 0x963B # <CJK>
-0xF0E7 0x96D5 # <CJK>
-0xF0E8 0x9CE5 # <CJK>
-0xF0E9 0x65CF # <CJK>
-0xF0EA 0x7C07 # <CJK>
-0xF0EB 0x8DB3 # <CJK>
-0xF0EC 0x93C3 # <CJK>
-0xF0ED 0x5B58 # <CJK>
-0xF0EE 0x5C0A # <CJK>
-0xF0EF 0x5352 # <CJK>
-0xF0F0 0x62D9 # <CJK>
-0xF0F1 0x731D # <CJK>
-0xF0F2 0x5027 # <CJK>
-0xF0F3 0x5B97 # <CJK>
-0xF0F4 0x5F9E # <CJK>
-0xF0F5 0x60B0 # <CJK>
-0xF0F6 0x616B # <CJK>
-0xF0F7 0x68D5 # <CJK>
-0xF0F8 0x6DD9 # <CJK>
-0xF0F9 0x742E # <CJK>
-0xF0FA 0x7A2E # <CJK>
-0xF0FB 0x7D42 # <CJK>
-0xF0FC 0x7D9C # <CJK>
-0xF0FD 0x7E31 # <CJK>
-0xF0FE 0x816B # <CJK>
-0xF1A1 0x8E2A # <CJK>
-0xF1A2 0x8E35 # <CJK>
-0xF1A3 0x937E # <CJK>
-0xF1A4 0x9418 # <CJK>
-0xF1A5 0x4F50 # <CJK>
-0xF1A6 0x5750 # <CJK>
-0xF1A7 0x5DE6 # <CJK>
-0xF1A8 0x5EA7 # <CJK>
-0xF1A9 0x632B # <CJK>
-0xF1AA 0x7F6A # <CJK>
-0xF1AB 0x4E3B # <CJK>
-0xF1AC 0x4F4F # <CJK>
-0xF1AD 0x4F8F # <CJK>
-0xF1AE 0x505A # <CJK>
-0xF1AF 0x59DD # <CJK>
-0xF1B0 0x80C4 # <CJK>
-0xF1B1 0x546A # <CJK>
-0xF1B2 0x5468 # <CJK>
-0xF1B3 0x55FE # <CJK>
-0xF1B4 0x594F # <CJK>
-0xF1B5 0x5B99 # <CJK>
-0xF1B6 0x5DDE # <CJK>
-0xF1B7 0x5EDA # <CJK>
-0xF1B8 0x665D # <CJK>
-0xF1B9 0x6731 # <CJK>
-0xF1BA 0x67F1 # <CJK>
-0xF1BB 0x682A # <CJK>
-0xF1BC 0x6CE8 # <CJK>
-0xF1BD 0x6D32 # <CJK>
-0xF1BE 0x6E4A # <CJK>
-0xF1BF 0x6F8D # <CJK>
-0xF1C0 0x70B7 # <CJK>
-0xF1C1 0x73E0 # <CJK>
-0xF1C2 0x7587 # <CJK>
-0xF1C3 0x7C4C # <CJK>
-0xF1C4 0x7D02 # <CJK>
-0xF1C5 0x7D2C # <CJK>
-0xF1C6 0x7DA2 # <CJK>
-0xF1C7 0x821F # <CJK>
-0xF1C8 0x86DB # <CJK>
-0xF1C9 0x8A3B # <CJK>
-0xF1CA 0x8A85 # <CJK>
-0xF1CB 0x8D70 # <CJK>
-0xF1CC 0x8E8A # <CJK>
-0xF1CD 0x8F33 # <CJK>
-0xF1CE 0x9031 # <CJK>
-0xF1CF 0x914E # <CJK>
-0xF1D0 0x9152 # <CJK>
-0xF1D1 0x9444 # <CJK>
-0xF1D2 0x99D0 # <CJK>
-0xF1D3 0x7AF9 # <CJK>
-0xF1D4 0x7CA5 # <CJK>
-0xF1D5 0x4FCA # <CJK>
-0xF1D6 0x5101 # <CJK>
-0xF1D7 0x51C6 # <CJK>
-0xF1D8 0x57C8 # <CJK>
-0xF1D9 0x5BEF # <CJK>
-0xF1DA 0x5CFB # <CJK>
-0xF1DB 0x6659 # <CJK>
-0xF1DC 0x6A3D # <CJK>
-0xF1DD 0x6D5A # <CJK>
-0xF1DE 0x6E96 # <CJK>
-0xF1DF 0x6FEC # <CJK>
-0xF1E0 0x710C # <CJK>
-0xF1E1 0x756F # <CJK>
-0xF1E2 0x7AE3 # <CJK>
-0xF1E3 0x8822 # <CJK>
-0xF1E4 0x9021 # <CJK>
-0xF1E5 0x9075 # <CJK>
-0xF1E6 0x96CB # <CJK>
-0xF1E7 0x99FF # <CJK>
-0xF1E8 0x8301 # <CJK>
-0xF1E9 0x4E2D # <CJK>
-0xF1EA 0x4EF2 # <CJK>
-0xF1EB 0x8846 # <CJK>
-0xF1EC 0x91CD # <CJK>
-0xF1ED 0x537D # <CJK>
-0xF1EE 0x6ADB # <CJK>
-0xF1EF 0x696B # <CJK>
-0xF1F0 0x6C41 # <CJK>
-0xF1F1 0x847A # <CJK>
-0xF1F2 0x589E # <CJK>
-0xF1F3 0x618E # <CJK>
-0xF1F4 0x66FE # <CJK>
-0xF1F5 0x62EF # <CJK>
-0xF1F6 0x70DD # <CJK>
-0xF1F7 0x7511 # <CJK>
-0xF1F8 0x75C7 # <CJK>
-0xF1F9 0x7E52 # <CJK>
-0xF1FA 0x84B8 # <CJK>
-0xF1FB 0x8B49 # <CJK>
-0xF1FC 0x8D08 # <CJK>
-0xF1FD 0x4E4B # <CJK>
-0xF1FE 0x53EA # <CJK>
-0xF2A1 0x54AB # <CJK>
-0xF2A2 0x5730 # <CJK>
-0xF2A3 0x5740 # <CJK>
-0xF2A4 0x5FD7 # <CJK>
-0xF2A5 0x6301 # <CJK>
-0xF2A6 0x6307 # <CJK>
-0xF2A7 0x646F # <CJK>
-0xF2A8 0x652F # <CJK>
-0xF2A9 0x65E8 # <CJK>
-0xF2AA 0x667A # <CJK>
-0xF2AB 0x679D # <CJK>
-0xF2AC 0x67B3 # <CJK>
-0xF2AD 0x6B62 # <CJK>
-0xF2AE 0x6C60 # <CJK>
-0xF2AF 0x6C9A # <CJK>
-0xF2B0 0x6F2C # <CJK>
-0xF2B1 0x77E5 # <CJK>
-0xF2B2 0x7825 # <CJK>
-0xF2B3 0x7949 # <CJK>
-0xF2B4 0x7957 # <CJK>
-0xF2B5 0x7D19 # <CJK>
-0xF2B6 0x80A2 # <CJK>
-0xF2B7 0x8102 # <CJK>
-0xF2B8 0x81F3 # <CJK>
-0xF2B9 0x829D # <CJK>
-0xF2BA 0x82B7 # <CJK>
-0xF2BB 0x8718 # <CJK>
-0xF2BC 0x8A8C # <CJK>
-0xF2BD 0xF9FC # <CJK>
-0xF2BE 0x8D04 # <CJK>
-0xF2BF 0x8DBE # <CJK>
-0xF2C0 0x9072 # <CJK>
-0xF2C1 0x76F4 # <CJK>
-0xF2C2 0x7A19 # <CJK>
-0xF2C3 0x7A37 # <CJK>
-0xF2C4 0x7E54 # <CJK>
-0xF2C5 0x8077 # <CJK>
-0xF2C6 0x5507 # <CJK>
-0xF2C7 0x55D4 # <CJK>
-0xF2C8 0x5875 # <CJK>
-0xF2C9 0x632F # <CJK>
-0xF2CA 0x6422 # <CJK>
-0xF2CB 0x6649 # <CJK>
-0xF2CC 0x664B # <CJK>
-0xF2CD 0x686D # <CJK>
-0xF2CE 0x699B # <CJK>
-0xF2CF 0x6B84 # <CJK>
-0xF2D0 0x6D25 # <CJK>
-0xF2D1 0x6EB1 # <CJK>
-0xF2D2 0x73CD # <CJK>
-0xF2D3 0x7468 # <CJK>
-0xF2D4 0x74A1 # <CJK>
-0xF2D5 0x755B # <CJK>
-0xF2D6 0x75B9 # <CJK>
-0xF2D7 0x76E1 # <CJK>
-0xF2D8 0x771E # <CJK>
-0xF2D9 0x778B # <CJK>
-0xF2DA 0x79E6 # <CJK>
-0xF2DB 0x7E09 # <CJK>
-0xF2DC 0x7E1D # <CJK>
-0xF2DD 0x81FB # <CJK>
-0xF2DE 0x852F # <CJK>
-0xF2DF 0x8897 # <CJK>
-0xF2E0 0x8A3A # <CJK>
-0xF2E1 0x8CD1 # <CJK>
-0xF2E2 0x8EEB # <CJK>
-0xF2E3 0x8FB0 # <CJK>
-0xF2E4 0x9032 # <CJK>
-0xF2E5 0x93AD # <CJK>
-0xF2E6 0x9663 # <CJK>
-0xF2E7 0x9673 # <CJK>
-0xF2E8 0x9707 # <CJK>
-0xF2E9 0x4F84 # <CJK>
-0xF2EA 0x53F1 # <CJK>
-0xF2EB 0x59EA # <CJK>
-0xF2EC 0x5AC9 # <CJK>
-0xF2ED 0x5E19 # <CJK>
-0xF2EE 0x684E # <CJK>
-0xF2EF 0x74C6 # <CJK>
-0xF2F0 0x75BE # <CJK>
-0xF2F1 0x79E9 # <CJK>
-0xF2F2 0x7A92 # <CJK>
-0xF2F3 0x81A3 # <CJK>
-0xF2F4 0x86ED # <CJK>
-0xF2F5 0x8CEA # <CJK>
-0xF2F6 0x8DCC # <CJK>
-0xF2F7 0x8FED # <CJK>
-0xF2F8 0x659F # <CJK>
-0xF2F9 0x6715 # <CJK>
-0xF2FA 0xF9FD # <CJK>
-0xF2FB 0x57F7 # <CJK>
-0xF2FC 0x6F57 # <CJK>
-0xF2FD 0x7DDD # <CJK>
-0xF2FE 0x8F2F # <CJK>
-0xF3A1 0x93F6 # <CJK>
-0xF3A2 0x96C6 # <CJK>
-0xF3A3 0x5FB5 # <CJK>
-0xF3A4 0x61F2 # <CJK>
-0xF3A5 0x6F84 # <CJK>
-0xF3A6 0x4E14 # <CJK>
-0xF3A7 0x4F98 # <CJK>
-0xF3A8 0x501F # <CJK>
-0xF3A9 0x53C9 # <CJK>
-0xF3AA 0x55DF # <CJK>
-0xF3AB 0x5D6F # <CJK>
-0xF3AC 0x5DEE # <CJK>
-0xF3AD 0x6B21 # <CJK>
-0xF3AE 0x6B64 # <CJK>
-0xF3AF 0x78CB # <CJK>
-0xF3B0 0x7B9A # <CJK>
-0xF3B1 0xF9FE # <CJK>
-0xF3B2 0x8E49 # <CJK>
-0xF3B3 0x8ECA # <CJK>
-0xF3B4 0x906E # <CJK>
-0xF3B5 0x6349 # <CJK>
-0xF3B6 0x643E # <CJK>
-0xF3B7 0x7740 # <CJK>
-0xF3B8 0x7A84 # <CJK>
-0xF3B9 0x932F # <CJK>
-0xF3BA 0x947F # <CJK>
-0xF3BB 0x9F6A # <CJK>
-0xF3BC 0x64B0 # <CJK>
-0xF3BD 0x6FAF # <CJK>
-0xF3BE 0x71E6 # <CJK>
-0xF3BF 0x74A8 # <CJK>
-0xF3C0 0x74DA # <CJK>
-0xF3C1 0x7AC4 # <CJK>
-0xF3C2 0x7C12 # <CJK>
-0xF3C3 0x7E82 # <CJK>
-0xF3C4 0x7CB2 # <CJK>
-0xF3C5 0x7E98 # <CJK>
-0xF3C6 0x8B9A # <CJK>
-0xF3C7 0x8D0A # <CJK>
-0xF3C8 0x947D # <CJK>
-0xF3C9 0x9910 # <CJK>
-0xF3CA 0x994C # <CJK>
-0xF3CB 0x5239 # <CJK>
-0xF3CC 0x5BDF # <CJK>
-0xF3CD 0x64E6 # <CJK>
-0xF3CE 0x672D # <CJK>
-0xF3CF 0x7D2E # <CJK>
-0xF3D0 0x50ED # <CJK>
-0xF3D1 0x53C3 # <CJK>
-0xF3D2 0x5879 # <CJK>
-0xF3D3 0x6158 # <CJK>
-0xF3D4 0x6159 # <CJK>
-0xF3D5 0x61FA # <CJK>
-0xF3D6 0x65AC # <CJK>
-0xF3D7 0x7AD9 # <CJK>
-0xF3D8 0x8B92 # <CJK>
-0xF3D9 0x8B96 # <CJK>
-0xF3DA 0x5009 # <CJK>
-0xF3DB 0x5021 # <CJK>
-0xF3DC 0x5275 # <CJK>
-0xF3DD 0x5531 # <CJK>
-0xF3DE 0x5A3C # <CJK>
-0xF3DF 0x5EE0 # <CJK>
-0xF3E0 0x5F70 # <CJK>
-0xF3E1 0x6134 # <CJK>
-0xF3E2 0x655E # <CJK>
-0xF3E3 0x660C # <CJK>
-0xF3E4 0x6636 # <CJK>
-0xF3E5 0x66A2 # <CJK>
-0xF3E6 0x69CD # <CJK>
-0xF3E7 0x6EC4 # <CJK>
-0xF3E8 0x6F32 # <CJK>
-0xF3E9 0x7316 # <CJK>
-0xF3EA 0x7621 # <CJK>
-0xF3EB 0x7A93 # <CJK>
-0xF3EC 0x8139 # <CJK>
-0xF3ED 0x8259 # <CJK>
-0xF3EE 0x83D6 # <CJK>
-0xF3EF 0x84BC # <CJK>
-0xF3F0 0x50B5 # <CJK>
-0xF3F1 0x57F0 # <CJK>
-0xF3F2 0x5BC0 # <CJK>
-0xF3F3 0x5BE8 # <CJK>
-0xF3F4 0x5F69 # <CJK>
-0xF3F5 0x63A1 # <CJK>
-0xF3F6 0x7826 # <CJK>
-0xF3F7 0x7DB5 # <CJK>
-0xF3F8 0x83DC # <CJK>
-0xF3F9 0x8521 # <CJK>
-0xF3FA 0x91C7 # <CJK>
-0xF3FB 0x91F5 # <CJK>
-0xF3FC 0x518A # <CJK>
-0xF3FD 0x67F5 # <CJK>
-0xF3FE 0x7B56 # <CJK>
-0xF4A1 0x8CAC # <CJK>
-0xF4A2 0x51C4 # <CJK>
-0xF4A3 0x59BB # <CJK>
-0xF4A4 0x60BD # <CJK>
-0xF4A5 0x8655 # <CJK>
-0xF4A6 0x501C # <CJK>
-0xF4A7 0xF9FF # <CJK>
-0xF4A8 0x5254 # <CJK>
-0xF4A9 0x5C3A # <CJK>
-0xF4AA 0x617D # <CJK>
-0xF4AB 0x621A # <CJK>
-0xF4AC 0x62D3 # <CJK>
-0xF4AD 0x64F2 # <CJK>
-0xF4AE 0x65A5 # <CJK>
-0xF4AF 0x6ECC # <CJK>
-0xF4B0 0x7620 # <CJK>
-0xF4B1 0x810A # <CJK>
-0xF4B2 0x8E60 # <CJK>
-0xF4B3 0x965F # <CJK>
-0xF4B4 0x96BB # <CJK>
-0xF4B5 0x4EDF # <CJK>
-0xF4B6 0x5343 # <CJK>
-0xF4B7 0x5598 # <CJK>
-0xF4B8 0x5929 # <CJK>
-0xF4B9 0x5DDD # <CJK>
-0xF4BA 0x64C5 # <CJK>
-0xF4BB 0x6CC9 # <CJK>
-0xF4BC 0x6DFA # <CJK>
-0xF4BD 0x7394 # <CJK>
-0xF4BE 0x7A7F # <CJK>
-0xF4BF 0x821B # <CJK>
-0xF4C0 0x85A6 # <CJK>
-0xF4C1 0x8CE4 # <CJK>
-0xF4C2 0x8E10 # <CJK>
-0xF4C3 0x9077 # <CJK>
-0xF4C4 0x91E7 # <CJK>
-0xF4C5 0x95E1 # <CJK>
-0xF4C6 0x9621 # <CJK>
-0xF4C7 0x97C6 # <CJK>
-0xF4C8 0x51F8 # <CJK>
-0xF4C9 0x54F2 # <CJK>
-0xF4CA 0x5586 # <CJK>
-0xF4CB 0x5FB9 # <CJK>
-0xF4CC 0x64A4 # <CJK>
-0xF4CD 0x6F88 # <CJK>
-0xF4CE 0x7DB4 # <CJK>
-0xF4CF 0x8F1F # <CJK>
-0xF4D0 0x8F4D # <CJK>
-0xF4D1 0x9435 # <CJK>
-0xF4D2 0x50C9 # <CJK>
-0xF4D3 0x5C16 # <CJK>
-0xF4D4 0x6CBE # <CJK>
-0xF4D5 0x6DFB # <CJK>
-0xF4D6 0x751B # <CJK>
-0xF4D7 0x77BB # <CJK>
-0xF4D8 0x7C3D # <CJK>
-0xF4D9 0x7C64 # <CJK>
-0xF4DA 0x8A79 # <CJK>
-0xF4DB 0x8AC2 # <CJK>
-0xF4DC 0x581E # <CJK>
-0xF4DD 0x59BE # <CJK>
-0xF4DE 0x5E16 # <CJK>
-0xF4DF 0x6377 # <CJK>
-0xF4E0 0x7252 # <CJK>
-0xF4E1 0x758A # <CJK>
-0xF4E2 0x776B # <CJK>
-0xF4E3 0x8ADC # <CJK>
-0xF4E4 0x8CBC # <CJK>
-0xF4E5 0x8F12 # <CJK>
-0xF4E6 0x5EF3 # <CJK>
-0xF4E7 0x6674 # <CJK>
-0xF4E8 0x6DF8 # <CJK>
-0xF4E9 0x807D # <CJK>
-0xF4EA 0x83C1 # <CJK>
-0xF4EB 0x8ACB # <CJK>
-0xF4EC 0x9751 # <CJK>
-0xF4ED 0x9BD6 # <CJK>
-0xF4EE 0xFA00 # <CJK>
-0xF4EF 0x5243 # <CJK>
-0xF4F0 0x66FF # <CJK>
-0xF4F1 0x6D95 # <CJK>
-0xF4F2 0x6EEF # <CJK>
-0xF4F3 0x7DE0 # <CJK>
-0xF4F4 0x8AE6 # <CJK>
-0xF4F5 0x902E # <CJK>
-0xF4F6 0x905E # <CJK>
-0xF4F7 0x9AD4 # <CJK>
-0xF4F8 0x521D # <CJK>
-0xF4F9 0x527F # <CJK>
-0xF4FA 0x54E8 # <CJK>
-0xF4FB 0x6194 # <CJK>
-0xF4FC 0x6284 # <CJK>
-0xF4FD 0x62DB # <CJK>
-0xF4FE 0x68A2 # <CJK>
-0xF5A1 0x6912 # <CJK>
-0xF5A2 0x695A # <CJK>
-0xF5A3 0x6A35 # <CJK>
-0xF5A4 0x7092 # <CJK>
-0xF5A5 0x7126 # <CJK>
-0xF5A6 0x785D # <CJK>
-0xF5A7 0x7901 # <CJK>
-0xF5A8 0x790E # <CJK>
-0xF5A9 0x79D2 # <CJK>
-0xF5AA 0x7A0D # <CJK>
-0xF5AB 0x8096 # <CJK>
-0xF5AC 0x8278 # <CJK>
-0xF5AD 0x82D5 # <CJK>
-0xF5AE 0x8349 # <CJK>
-0xF5AF 0x8549 # <CJK>
-0xF5B0 0x8C82 # <CJK>
-0xF5B1 0x8D85 # <CJK>
-0xF5B2 0x9162 # <CJK>
-0xF5B3 0x918B # <CJK>
-0xF5B4 0x91AE # <CJK>
-0xF5B5 0x4FC3 # <CJK>
-0xF5B6 0x56D1 # <CJK>
-0xF5B7 0x71ED # <CJK>
-0xF5B8 0x77D7 # <CJK>
-0xF5B9 0x8700 # <CJK>
-0xF5BA 0x89F8 # <CJK>
-0xF5BB 0x5BF8 # <CJK>
-0xF5BC 0x5FD6 # <CJK>
-0xF5BD 0x6751 # <CJK>
-0xF5BE 0x90A8 # <CJK>
-0xF5BF 0x53E2 # <CJK>
-0xF5C0 0x585A # <CJK>
-0xF5C1 0x5BF5 # <CJK>
-0xF5C2 0x60A4 # <CJK>
-0xF5C3 0x6181 # <CJK>
-0xF5C4 0x6460 # <CJK>
-0xF5C5 0x7E3D # <CJK>
-0xF5C6 0x8070 # <CJK>
-0xF5C7 0x8525 # <CJK>
-0xF5C8 0x9283 # <CJK>
-0xF5C9 0x64AE # <CJK>
-0xF5CA 0x50AC # <CJK>
-0xF5CB 0x5D14 # <CJK>
-0xF5CC 0x6700 # <CJK>
-0xF5CD 0x589C # <CJK>
-0xF5CE 0x62BD # <CJK>
-0xF5CF 0x63A8 # <CJK>
-0xF5D0 0x690E # <CJK>
-0xF5D1 0x6978 # <CJK>
-0xF5D2 0x6A1E # <CJK>
-0xF5D3 0x6E6B # <CJK>
-0xF5D4 0x76BA # <CJK>
-0xF5D5 0x79CB # <CJK>
-0xF5D6 0x82BB # <CJK>
-0xF5D7 0x8429 # <CJK>
-0xF5D8 0x8ACF # <CJK>
-0xF5D9 0x8DA8 # <CJK>
-0xF5DA 0x8FFD # <CJK>
-0xF5DB 0x9112 # <CJK>
-0xF5DC 0x914B # <CJK>
-0xF5DD 0x919C # <CJK>
-0xF5DE 0x9310 # <CJK>
-0xF5DF 0x9318 # <CJK>
-0xF5E0 0x939A # <CJK>
-0xF5E1 0x96DB # <CJK>
-0xF5E2 0x9A36 # <CJK>
-0xF5E3 0x9C0D # <CJK>
-0xF5E4 0x4E11 # <CJK>
-0xF5E5 0x755C # <CJK>
-0xF5E6 0x795D # <CJK>
-0xF5E7 0x7AFA # <CJK>
-0xF5E8 0x7B51 # <CJK>
-0xF5E9 0x7BC9 # <CJK>
-0xF5EA 0x7E2E # <CJK>
-0xF5EB 0x84C4 # <CJK>
-0xF5EC 0x8E59 # <CJK>
-0xF5ED 0x8E74 # <CJK>
-0xF5EE 0x8EF8 # <CJK>
-0xF5EF 0x9010 # <CJK>
-0xF5F0 0x6625 # <CJK>
-0xF5F1 0x693F # <CJK>
-0xF5F2 0x7443 # <CJK>
-0xF5F3 0x51FA # <CJK>
-0xF5F4 0x672E # <CJK>
-0xF5F5 0x9EDC # <CJK>
-0xF5F6 0x5145 # <CJK>
-0xF5F7 0x5FE0 # <CJK>
-0xF5F8 0x6C96 # <CJK>
-0xF5F9 0x87F2 # <CJK>
-0xF5FA 0x885D # <CJK>
-0xF5FB 0x8877 # <CJK>
-0xF5FC 0x60B4 # <CJK>
-0xF5FD 0x81B5 # <CJK>
-0xF5FE 0x8403 # <CJK>
-0xF6A1 0x8D05 # <CJK>
-0xF6A2 0x53D6 # <CJK>
-0xF6A3 0x5439 # <CJK>
-0xF6A4 0x5634 # <CJK>
-0xF6A5 0x5A36 # <CJK>
-0xF6A6 0x5C31 # <CJK>
-0xF6A7 0x708A # <CJK>
-0xF6A8 0x7FE0 # <CJK>
-0xF6A9 0x805A # <CJK>
-0xF6AA 0x8106 # <CJK>
-0xF6AB 0x81ED # <CJK>
-0xF6AC 0x8DA3 # <CJK>
-0xF6AD 0x9189 # <CJK>
-0xF6AE 0x9A5F # <CJK>
-0xF6AF 0x9DF2 # <CJK>
-0xF6B0 0x5074 # <CJK>
-0xF6B1 0x4EC4 # <CJK>
-0xF6B2 0x53A0 # <CJK>
-0xF6B3 0x60FB # <CJK>
-0xF6B4 0x6E2C # <CJK>
-0xF6B5 0x5C64 # <CJK>
-0xF6B6 0x4F88 # <CJK>
-0xF6B7 0x5024 # <CJK>
-0xF6B8 0x55E4 # <CJK>
-0xF6B9 0x5CD9 # <CJK>
-0xF6BA 0x5E5F # <CJK>
-0xF6BB 0x6065 # <CJK>
-0xF6BC 0x6894 # <CJK>
-0xF6BD 0x6CBB # <CJK>
-0xF6BE 0x6DC4 # <CJK>
-0xF6BF 0x71BE # <CJK>
-0xF6C0 0x75D4 # <CJK>
-0xF6C1 0x75F4 # <CJK>
-0xF6C2 0x7661 # <CJK>
-0xF6C3 0x7A1A # <CJK>
-0xF6C4 0x7A49 # <CJK>
-0xF6C5 0x7DC7 # <CJK>
-0xF6C6 0x7DFB # <CJK>
-0xF6C7 0x7F6E # <CJK>
-0xF6C8 0x81F4 # <CJK>
-0xF6C9 0x86A9 # <CJK>
-0xF6CA 0x8F1C # <CJK>
-0xF6CB 0x96C9 # <CJK>
-0xF6CC 0x99B3 # <CJK>
-0xF6CD 0x9F52 # <CJK>
-0xF6CE 0x5247 # <CJK>
-0xF6CF 0x52C5 # <CJK>
-0xF6D0 0x98ED # <CJK>
-0xF6D1 0x89AA # <CJK>
-0xF6D2 0x4E03 # <CJK>
-0xF6D3 0x67D2 # <CJK>
-0xF6D4 0x6F06 # <CJK>
-0xF6D5 0x4FB5 # <CJK>
-0xF6D6 0x5BE2 # <CJK>
-0xF6D7 0x6795 # <CJK>
-0xF6D8 0x6C88 # <CJK>
-0xF6D9 0x6D78 # <CJK>
-0xF6DA 0x741B # <CJK>
-0xF6DB 0x7827 # <CJK>
-0xF6DC 0x91DD # <CJK>
-0xF6DD 0x937C # <CJK>
-0xF6DE 0x87C4 # <CJK>
-0xF6DF 0x79E4 # <CJK>
-0xF6E0 0x7A31 # <CJK>
-0xF6E1 0x5FEB # <CJK>
-0xF6E2 0x4ED6 # <CJK>
-0xF6E3 0x54A4 # <CJK>
-0xF6E4 0x553E # <CJK>
-0xF6E5 0x58AE # <CJK>
-0xF6E6 0x59A5 # <CJK>
-0xF6E7 0x60F0 # <CJK>
-0xF6E8 0x6253 # <CJK>
-0xF6E9 0x62D6 # <CJK>
-0xF6EA 0x6736 # <CJK>
-0xF6EB 0x6955 # <CJK>
-0xF6EC 0x8235 # <CJK>
-0xF6ED 0x9640 # <CJK>
-0xF6EE 0x99B1 # <CJK>
-0xF6EF 0x99DD # <CJK>
-0xF6F0 0x502C # <CJK>
-0xF6F1 0x5353 # <CJK>
-0xF6F2 0x5544 # <CJK>
-0xF6F3 0x577C # <CJK>
-0xF6F4 0xFA01 # <CJK>
-0xF6F5 0x6258 # <CJK>
-0xF6F6 0xFA02 # <CJK>
-0xF6F7 0x64E2 # <CJK>
-0xF6F8 0x666B # <CJK>
-0xF6F9 0x67DD # <CJK>
-0xF6FA 0x6FC1 # <CJK>
-0xF6FB 0x6FEF # <CJK>
-0xF6FC 0x7422 # <CJK>
-0xF6FD 0x7438 # <CJK>
-0xF6FE 0x8A17 # <CJK>
-0xF7A1 0x9438 # <CJK>
-0xF7A2 0x5451 # <CJK>
-0xF7A3 0x5606 # <CJK>
-0xF7A4 0x5766 # <CJK>
-0xF7A5 0x5F48 # <CJK>
-0xF7A6 0x619A # <CJK>
-0xF7A7 0x6B4E # <CJK>
-0xF7A8 0x7058 # <CJK>
-0xF7A9 0x70AD # <CJK>
-0xF7AA 0x7DBB # <CJK>
-0xF7AB 0x8A95 # <CJK>
-0xF7AC 0x596A # <CJK>
-0xF7AD 0x812B # <CJK>
-0xF7AE 0x63A2 # <CJK>
-0xF7AF 0x7708 # <CJK>
-0xF7B0 0x803D # <CJK>
-0xF7B1 0x8CAA # <CJK>
-0xF7B2 0x5854 # <CJK>
-0xF7B3 0x642D # <CJK>
-0xF7B4 0x69BB # <CJK>
-0xF7B5 0x5B95 # <CJK>
-0xF7B6 0x5E11 # <CJK>
-0xF7B7 0x6E6F # <CJK>
-0xF7B8 0xFA03 # <CJK>
-0xF7B9 0x8569 # <CJK>
-0xF7BA 0x514C # <CJK>
-0xF7BB 0x53F0 # <CJK>
-0xF7BC 0x592A # <CJK>
-0xF7BD 0x6020 # <CJK>
-0xF7BE 0x614B # <CJK>
-0xF7BF 0x6B86 # <CJK>
-0xF7C0 0x6C70 # <CJK>
-0xF7C1 0x6CF0 # <CJK>
-0xF7C2 0x7B1E # <CJK>
-0xF7C3 0x80CE # <CJK>
-0xF7C4 0x82D4 # <CJK>
-0xF7C5 0x8DC6 # <CJK>
-0xF7C6 0x90B0 # <CJK>
-0xF7C7 0x98B1 # <CJK>
-0xF7C8 0xFA04 # <CJK>
-0xF7C9 0x64C7 # <CJK>
-0xF7CA 0x6FA4 # <CJK>
-0xF7CB 0x6491 # <CJK>
-0xF7CC 0x6504 # <CJK>
-0xF7CD 0x514E # <CJK>
-0xF7CE 0x5410 # <CJK>
-0xF7CF 0x571F # <CJK>
-0xF7D0 0x8A0E # <CJK>
-0xF7D1 0x615F # <CJK>
-0xF7D2 0x6876 # <CJK>
-0xF7D3 0xFA05 # <CJK>
-0xF7D4 0x75DB # <CJK>
-0xF7D5 0x7B52 # <CJK>
-0xF7D6 0x7D71 # <CJK>
-0xF7D7 0x901A # <CJK>
-0xF7D8 0x5806 # <CJK>
-0xF7D9 0x69CC # <CJK>
-0xF7DA 0x817F # <CJK>
-0xF7DB 0x892A # <CJK>
-0xF7DC 0x9000 # <CJK>
-0xF7DD 0x9839 # <CJK>
-0xF7DE 0x5078 # <CJK>
-0xF7DF 0x5957 # <CJK>
-0xF7E0 0x59AC # <CJK>
-0xF7E1 0x6295 # <CJK>
-0xF7E2 0x900F # <CJK>
-0xF7E3 0x9B2A # <CJK>
-0xF7E4 0x615D # <CJK>
-0xF7E5 0x7279 # <CJK>
-0xF7E6 0x95D6 # <CJK>
-0xF7E7 0x5761 # <CJK>
-0xF7E8 0x5A46 # <CJK>
-0xF7E9 0x5DF4 # <CJK>
-0xF7EA 0x628A # <CJK>
-0xF7EB 0x64AD # <CJK>
-0xF7EC 0x64FA # <CJK>
-0xF7ED 0x6777 # <CJK>
-0xF7EE 0x6CE2 # <CJK>
-0xF7EF 0x6D3E # <CJK>
-0xF7F0 0x722C # <CJK>
-0xF7F1 0x7436 # <CJK>
-0xF7F2 0x7834 # <CJK>
-0xF7F3 0x7F77 # <CJK>
-0xF7F4 0x82AD # <CJK>
-0xF7F5 0x8DDB # <CJK>
-0xF7F6 0x9817 # <CJK>
-0xF7F7 0x5224 # <CJK>
-0xF7F8 0x5742 # <CJK>
-0xF7F9 0x677F # <CJK>
-0xF7FA 0x7248 # <CJK>
-0xF7FB 0x74E3 # <CJK>
-0xF7FC 0x8CA9 # <CJK>
-0xF7FD 0x8FA6 # <CJK>
-0xF7FE 0x9211 # <CJK>
-0xF8A1 0x962A # <CJK>
-0xF8A2 0x516B # <CJK>
-0xF8A3 0x53ED # <CJK>
-0xF8A4 0x634C # <CJK>
-0xF8A5 0x4F69 # <CJK>
-0xF8A6 0x5504 # <CJK>
-0xF8A7 0x6096 # <CJK>
-0xF8A8 0x6557 # <CJK>
-0xF8A9 0x6C9B # <CJK>
-0xF8AA 0x6D7F # <CJK>
-0xF8AB 0x724C # <CJK>
-0xF8AC 0x72FD # <CJK>
-0xF8AD 0x7A17 # <CJK>
-0xF8AE 0x8987 # <CJK>
-0xF8AF 0x8C9D # <CJK>
-0xF8B0 0x5F6D # <CJK>
-0xF8B1 0x6F8E # <CJK>
-0xF8B2 0x70F9 # <CJK>
-0xF8B3 0x81A8 # <CJK>
-0xF8B4 0x610E # <CJK>
-0xF8B5 0x4FBF # <CJK>
-0xF8B6 0x504F # <CJK>
-0xF8B7 0x6241 # <CJK>
-0xF8B8 0x7247 # <CJK>
-0xF8B9 0x7BC7 # <CJK>
-0xF8BA 0x7DE8 # <CJK>
-0xF8BB 0x7FE9 # <CJK>
-0xF8BC 0x904D # <CJK>
-0xF8BD 0x97AD # <CJK>
-0xF8BE 0x9A19 # <CJK>
-0xF8BF 0x8CB6 # <CJK>
-0xF8C0 0x576A # <CJK>
-0xF8C1 0x5E73 # <CJK>
-0xF8C2 0x67B0 # <CJK>
-0xF8C3 0x840D # <CJK>
-0xF8C4 0x8A55 # <CJK>
-0xF8C5 0x5420 # <CJK>
-0xF8C6 0x5B16 # <CJK>
-0xF8C7 0x5E63 # <CJK>
-0xF8C8 0x5EE2 # <CJK>
-0xF8C9 0x5F0A # <CJK>
-0xF8CA 0x6583 # <CJK>
-0xF8CB 0x80BA # <CJK>
-0xF8CC 0x853D # <CJK>
-0xF8CD 0x9589 # <CJK>
-0xF8CE 0x965B # <CJK>
-0xF8CF 0x4F48 # <CJK>
-0xF8D0 0x5305 # <CJK>
-0xF8D1 0x530D # <CJK>
-0xF8D2 0x530F # <CJK>
-0xF8D3 0x5486 # <CJK>
-0xF8D4 0x54FA # <CJK>
-0xF8D5 0x5703 # <CJK>
-0xF8D6 0x5E03 # <CJK>
-0xF8D7 0x6016 # <CJK>
-0xF8D8 0x629B # <CJK>
-0xF8D9 0x62B1 # <CJK>
-0xF8DA 0x6355 # <CJK>
-0xF8DB 0xFA06 # <CJK>
-0xF8DC 0x6CE1 # <CJK>
-0xF8DD 0x6D66 # <CJK>
-0xF8DE 0x75B1 # <CJK>
-0xF8DF 0x7832 # <CJK>
-0xF8E0 0x80DE # <CJK>
-0xF8E1 0x812F # <CJK>
-0xF8E2 0x82DE # <CJK>
-0xF8E3 0x8461 # <CJK>
-0xF8E4 0x84B2 # <CJK>
-0xF8E5 0x888D # <CJK>
-0xF8E6 0x8912 # <CJK>
-0xF8E7 0x900B # <CJK>
-0xF8E8 0x92EA # <CJK>
-0xF8E9 0x98FD # <CJK>
-0xF8EA 0x9B91 # <CJK>
-0xF8EB 0x5E45 # <CJK>
-0xF8EC 0x66B4 # <CJK>
-0xF8ED 0x66DD # <CJK>
-0xF8EE 0x7011 # <CJK>
-0xF8EF 0x7206 # <CJK>
-0xF8F0 0xFA07 # <CJK>
-0xF8F1 0x4FF5 # <CJK>
-0xF8F2 0x527D # <CJK>
-0xF8F3 0x5F6A # <CJK>
-0xF8F4 0x6153 # <CJK>
-0xF8F5 0x6753 # <CJK>
-0xF8F6 0x6A19 # <CJK>
-0xF8F7 0x6F02 # <CJK>
-0xF8F8 0x74E2 # <CJK>
-0xF8F9 0x7968 # <CJK>
-0xF8FA 0x8868 # <CJK>
-0xF8FB 0x8C79 # <CJK>
-0xF8FC 0x98C7 # <CJK>
-0xF8FD 0x98C4 # <CJK>
-0xF8FE 0x9A43 # <CJK>
-0xF9A1 0x54C1 # <CJK>
-0xF9A2 0x7A1F # <CJK>
-0xF9A3 0x6953 # <CJK>
-0xF9A4 0x8AF7 # <CJK>
-0xF9A5 0x8C4A # <CJK>
-0xF9A6 0x98A8 # <CJK>
-0xF9A7 0x99AE # <CJK>
-0xF9A8 0x5F7C # <CJK>
-0xF9A9 0x62AB # <CJK>
-0xF9AA 0x75B2 # <CJK>
-0xF9AB 0x76AE # <CJK>
-0xF9AC 0x88AB # <CJK>
-0xF9AD 0x907F # <CJK>
-0xF9AE 0x9642 # <CJK>
-0xF9AF 0x5339 # <CJK>
-0xF9B0 0x5F3C # <CJK>
-0xF9B1 0x5FC5 # <CJK>
-0xF9B2 0x6CCC # <CJK>
-0xF9B3 0x73CC # <CJK>
-0xF9B4 0x7562 # <CJK>
-0xF9B5 0x758B # <CJK>
-0xF9B6 0x7B46 # <CJK>
-0xF9B7 0x82FE # <CJK>
-0xF9B8 0x999D # <CJK>
-0xF9B9 0x4E4F # <CJK>
-0xF9BA 0x903C # <CJK>
-0xF9BB 0x4E0B # <CJK>
-0xF9BC 0x4F55 # <CJK>
-0xF9BD 0x53A6 # <CJK>
-0xF9BE 0x590F # <CJK>
-0xF9BF 0x5EC8 # <CJK>
-0xF9C0 0x6630 # <CJK>
-0xF9C1 0x6CB3 # <CJK>
-0xF9C2 0x7455 # <CJK>
-0xF9C3 0x8377 # <CJK>
-0xF9C4 0x8766 # <CJK>
-0xF9C5 0x8CC0 # <CJK>
-0xF9C6 0x9050 # <CJK>
-0xF9C7 0x971E # <CJK>
-0xF9C8 0x9C15 # <CJK>
-0xF9C9 0x58D1 # <CJK>
-0xF9CA 0x5B78 # <CJK>
-0xF9CB 0x8650 # <CJK>
-0xF9CC 0x8B14 # <CJK>
-0xF9CD 0x9DB4 # <CJK>
-0xF9CE 0x5BD2 # <CJK>
-0xF9CF 0x6068 # <CJK>
-0xF9D0 0x608D # <CJK>
-0xF9D1 0x65F1 # <CJK>
-0xF9D2 0x6C57 # <CJK>
-0xF9D3 0x6F22 # <CJK>
-0xF9D4 0x6FA3 # <CJK>
-0xF9D5 0x701A # <CJK>
-0xF9D6 0x7F55 # <CJK>
-0xF9D7 0x7FF0 # <CJK>
-0xF9D8 0x9591 # <CJK>
-0xF9D9 0x9592 # <CJK>
-0xF9DA 0x9650 # <CJK>
-0xF9DB 0x97D3 # <CJK>
-0xF9DC 0x5272 # <CJK>
-0xF9DD 0x8F44 # <CJK>
-0xF9DE 0x51FD # <CJK>
-0xF9DF 0x542B # <CJK>
-0xF9E0 0x54B8 # <CJK>
-0xF9E1 0x5563 # <CJK>
-0xF9E2 0x558A # <CJK>
-0xF9E3 0x6ABB # <CJK>
-0xF9E4 0x6DB5 # <CJK>
-0xF9E5 0x7DD8 # <CJK>
-0xF9E6 0x8266 # <CJK>
-0xF9E7 0x929C # <CJK>
-0xF9E8 0x9677 # <CJK>
-0xF9E9 0x9E79 # <CJK>
-0xF9EA 0x5408 # <CJK>
-0xF9EB 0x54C8 # <CJK>
-0xF9EC 0x76D2 # <CJK>
-0xF9ED 0x86E4 # <CJK>
-0xF9EE 0x95A4 # <CJK>
-0xF9EF 0x95D4 # <CJK>
-0xF9F0 0x965C # <CJK>
-0xF9F1 0x4EA2 # <CJK>
-0xF9F2 0x4F09 # <CJK>
-0xF9F3 0x59EE # <CJK>
-0xF9F4 0x5AE6 # <CJK>
-0xF9F5 0x5DF7 # <CJK>
-0xF9F6 0x6052 # <CJK>
-0xF9F7 0x6297 # <CJK>
-0xF9F8 0x676D # <CJK>
-0xF9F9 0x6841 # <CJK>
-0xF9FA 0x6C86 # <CJK>
-0xF9FB 0x6E2F # <CJK>
-0xF9FC 0x7F38 # <CJK>
-0xF9FD 0x809B # <CJK>
-0xF9FE 0x822A # <CJK>
-0xFAA1 0xFA08 # <CJK>
-0xFAA2 0xFA09 # <CJK>
-0xFAA3 0x9805 # <CJK>
-0xFAA4 0x4EA5 # <CJK>
-0xFAA5 0x5055 # <CJK>
-0xFAA6 0x54B3 # <CJK>
-0xFAA7 0x5793 # <CJK>
-0xFAA8 0x595A # <CJK>
-0xFAA9 0x5B69 # <CJK>
-0xFAAA 0x5BB3 # <CJK>
-0xFAAB 0x61C8 # <CJK>
-0xFAAC 0x6977 # <CJK>
-0xFAAD 0x6D77 # <CJK>
-0xFAAE 0x7023 # <CJK>
-0xFAAF 0x87F9 # <CJK>
-0xFAB0 0x89E3 # <CJK>
-0xFAB1 0x8A72 # <CJK>
-0xFAB2 0x8AE7 # <CJK>
-0xFAB3 0x9082 # <CJK>
-0xFAB4 0x99ED # <CJK>
-0xFAB5 0x9AB8 # <CJK>
-0xFAB6 0x52BE # <CJK>
-0xFAB7 0x6838 # <CJK>
-0xFAB8 0x5016 # <CJK>
-0xFAB9 0x5E78 # <CJK>
-0xFABA 0x674F # <CJK>
-0xFABB 0x8347 # <CJK>
-0xFABC 0x884C # <CJK>
-0xFABD 0x4EAB # <CJK>
-0xFABE 0x5411 # <CJK>
-0xFABF 0x56AE # <CJK>
-0xFAC0 0x73E6 # <CJK>
-0xFAC1 0x9115 # <CJK>
-0xFAC2 0x97FF # <CJK>
-0xFAC3 0x9909 # <CJK>
-0xFAC4 0x9957 # <CJK>
-0xFAC5 0x9999 # <CJK>
-0xFAC6 0x5653 # <CJK>
-0xFAC7 0x589F # <CJK>
-0xFAC8 0x865B # <CJK>
-0xFAC9 0x8A31 # <CJK>
-0xFACA 0x61B2 # <CJK>
-0xFACB 0x6AF6 # <CJK>
-0xFACC 0x737B # <CJK>
-0xFACD 0x8ED2 # <CJK>
-0xFACE 0x6B47 # <CJK>
-0xFACF 0x96AA # <CJK>
-0xFAD0 0x9A57 # <CJK>
-0xFAD1 0x5955 # <CJK>
-0xFAD2 0x7200 # <CJK>
-0xFAD3 0x8D6B # <CJK>
-0xFAD4 0x9769 # <CJK>
-0xFAD5 0x4FD4 # <CJK>
-0xFAD6 0x5CF4 # <CJK>
-0xFAD7 0x5F26 # <CJK>
-0xFAD8 0x61F8 # <CJK>
-0xFAD9 0x665B # <CJK>
-0xFADA 0x6CEB # <CJK>
-0xFADB 0x70AB # <CJK>
-0xFADC 0x7384 # <CJK>
-0xFADD 0x73B9 # <CJK>
-0xFADE 0x73FE # <CJK>
-0xFADF 0x7729 # <CJK>
-0xFAE0 0x774D # <CJK>
-0xFAE1 0x7D43 # <CJK>
-0xFAE2 0x7D62 # <CJK>
-0xFAE3 0x7E23 # <CJK>
-0xFAE4 0x8237 # <CJK>
-0xFAE5 0x8852 # <CJK>
-0xFAE6 0xFA0A # <CJK>
-0xFAE7 0x8CE2 # <CJK>
-0xFAE8 0x9249 # <CJK>
-0xFAE9 0x986F # <CJK>
-0xFAEA 0x5B51 # <CJK>
-0xFAEB 0x7A74 # <CJK>
-0xFAEC 0x8840 # <CJK>
-0xFAED 0x9801 # <CJK>
-0xFAEE 0x5ACC # <CJK>
-0xFAEF 0x4FE0 # <CJK>
-0xFAF0 0x5354 # <CJK>
-0xFAF1 0x593E # <CJK>
-0xFAF2 0x5CFD # <CJK>
-0xFAF3 0x633E # <CJK>
-0xFAF4 0x6D79 # <CJK>
-0xFAF5 0x72F9 # <CJK>
-0xFAF6 0x8105 # <CJK>
-0xFAF7 0x8107 # <CJK>
-0xFAF8 0x83A2 # <CJK>
-0xFAF9 0x92CF # <CJK>
-0xFAFA 0x9830 # <CJK>
-0xFAFB 0x4EA8 # <CJK>
-0xFAFC 0x5144 # <CJK>
-0xFAFD 0x5211 # <CJK>
-0xFAFE 0x578B # <CJK>
-0xFBA1 0x5F62 # <CJK>
-0xFBA2 0x6CC2 # <CJK>
-0xFBA3 0x6ECE # <CJK>
-0xFBA4 0x7005 # <CJK>
-0xFBA5 0x7050 # <CJK>
-0xFBA6 0x70AF # <CJK>
-0xFBA7 0x7192 # <CJK>
-0xFBA8 0x73E9 # <CJK>
-0xFBA9 0x7469 # <CJK>
-0xFBAA 0x834A # <CJK>
-0xFBAB 0x87A2 # <CJK>
-0xFBAC 0x8861 # <CJK>
-0xFBAD 0x9008 # <CJK>
-0xFBAE 0x90A2 # <CJK>
-0xFBAF 0x93A3 # <CJK>
-0xFBB0 0x99A8 # <CJK>
-0xFBB1 0x516E # <CJK>
-0xFBB2 0x5F57 # <CJK>
-0xFBB3 0x60E0 # <CJK>
-0xFBB4 0x6167 # <CJK>
-0xFBB5 0x66B3 # <CJK>
-0xFBB6 0x8559 # <CJK>
-0xFBB7 0x8E4A # <CJK>
-0xFBB8 0x91AF # <CJK>
-0xFBB9 0x978B # <CJK>
-0xFBBA 0x4E4E # <CJK>
-0xFBBB 0x4E92 # <CJK>
-0xFBBC 0x547C # <CJK>
-0xFBBD 0x58D5 # <CJK>
-0xFBBE 0x58FA # <CJK>
-0xFBBF 0x597D # <CJK>
-0xFBC0 0x5CB5 # <CJK>
-0xFBC1 0x5F27 # <CJK>
-0xFBC2 0x6236 # <CJK>
-0xFBC3 0x6248 # <CJK>
-0xFBC4 0x660A # <CJK>
-0xFBC5 0x6667 # <CJK>
-0xFBC6 0x6BEB # <CJK>
-0xFBC7 0x6D69 # <CJK>
-0xFBC8 0x6DCF # <CJK>
-0xFBC9 0x6E56 # <CJK>
-0xFBCA 0x6EF8 # <CJK>
-0xFBCB 0x6F94 # <CJK>
-0xFBCC 0x6FE0 # <CJK>
-0xFBCD 0x6FE9 # <CJK>
-0xFBCE 0x705D # <CJK>
-0xFBCF 0x72D0 # <CJK>
-0xFBD0 0x7425 # <CJK>
-0xFBD1 0x745A # <CJK>
-0xFBD2 0x74E0 # <CJK>
-0xFBD3 0x7693 # <CJK>
-0xFBD4 0x795C # <CJK>
-0xFBD5 0x7CCA # <CJK>
-0xFBD6 0x7E1E # <CJK>
-0xFBD7 0x80E1 # <CJK>
-0xFBD8 0x82A6 # <CJK>
-0xFBD9 0x846B # <CJK>
-0xFBDA 0x84BF # <CJK>
-0xFBDB 0x864E # <CJK>
-0xFBDC 0x865F # <CJK>
-0xFBDD 0x8774 # <CJK>
-0xFBDE 0x8B77 # <CJK>
-0xFBDF 0x8C6A # <CJK>
-0xFBE0 0x93AC # <CJK>
-0xFBE1 0x9800 # <CJK>
-0xFBE2 0x9865 # <CJK>
-0xFBE3 0x60D1 # <CJK>
-0xFBE4 0x6216 # <CJK>
-0xFBE5 0x9177 # <CJK>
-0xFBE6 0x5A5A # <CJK>
-0xFBE7 0x660F # <CJK>
-0xFBE8 0x6DF7 # <CJK>
-0xFBE9 0x6E3E # <CJK>
-0xFBEA 0x743F # <CJK>
-0xFBEB 0x9B42 # <CJK>
-0xFBEC 0x5FFD # <CJK>
-0xFBED 0x60DA # <CJK>
-0xFBEE 0x7B0F # <CJK>
-0xFBEF 0x54C4 # <CJK>
-0xFBF0 0x5F18 # <CJK>
-0xFBF1 0x6C5E # <CJK>
-0xFBF2 0x6CD3 # <CJK>
-0xFBF3 0x6D2A # <CJK>
-0xFBF4 0x70D8 # <CJK>
-0xFBF5 0x7D05 # <CJK>
-0xFBF6 0x8679 # <CJK>
-0xFBF7 0x8A0C # <CJK>
-0xFBF8 0x9D3B # <CJK>
-0xFBF9 0x5316 # <CJK>
-0xFBFA 0x548C # <CJK>
-0xFBFB 0x5B05 # <CJK>
-0xFBFC 0x6A3A # <CJK>
-0xFBFD 0x706B # <CJK>
-0xFBFE 0x7575 # <CJK>
-0xFCA1 0x798D # <CJK>
-0xFCA2 0x79BE # <CJK>
-0xFCA3 0x82B1 # <CJK>
-0xFCA4 0x83EF # <CJK>
-0xFCA5 0x8A71 # <CJK>
-0xFCA6 0x8B41 # <CJK>
-0xFCA7 0x8CA8 # <CJK>
-0xFCA8 0x9774 # <CJK>
-0xFCA9 0xFA0B # <CJK>
-0xFCAA 0x64F4 # <CJK>
-0xFCAB 0x652B # <CJK>
-0xFCAC 0x78BA # <CJK>
-0xFCAD 0x78BB # <CJK>
-0xFCAE 0x7A6B # <CJK>
-0xFCAF 0x4E38 # <CJK>
-0xFCB0 0x559A # <CJK>
-0xFCB1 0x5950 # <CJK>
-0xFCB2 0x5BA6 # <CJK>
-0xFCB3 0x5E7B # <CJK>
-0xFCB4 0x60A3 # <CJK>
-0xFCB5 0x63DB # <CJK>
-0xFCB6 0x6B61 # <CJK>
-0xFCB7 0x6665 # <CJK>
-0xFCB8 0x6853 # <CJK>
-0xFCB9 0x6E19 # <CJK>
-0xFCBA 0x7165 # <CJK>
-0xFCBB 0x74B0 # <CJK>
-0xFCBC 0x7D08 # <CJK>
-0xFCBD 0x9084 # <CJK>
-0xFCBE 0x9A69 # <CJK>
-0xFCBF 0x9C25 # <CJK>
-0xFCC0 0x6D3B # <CJK>
-0xFCC1 0x6ED1 # <CJK>
-0xFCC2 0x733E # <CJK>
-0xFCC3 0x8C41 # <CJK>
-0xFCC4 0x95CA # <CJK>
-0xFCC5 0x51F0 # <CJK>
-0xFCC6 0x5E4C # <CJK>
-0xFCC7 0x5FA8 # <CJK>
-0xFCC8 0x604D # <CJK>
-0xFCC9 0x60F6 # <CJK>
-0xFCCA 0x6130 # <CJK>
-0xFCCB 0x614C # <CJK>
-0xFCCC 0x6643 # <CJK>
-0xFCCD 0x6644 # <CJK>
-0xFCCE 0x69A5 # <CJK>
-0xFCCF 0x6CC1 # <CJK>
-0xFCD0 0x6E5F # <CJK>
-0xFCD1 0x6EC9 # <CJK>
-0xFCD2 0x6F62 # <CJK>
-0xFCD3 0x714C # <CJK>
-0xFCD4 0x749C # <CJK>
-0xFCD5 0x7687 # <CJK>
-0xFCD6 0x7BC1 # <CJK>
-0xFCD7 0x7C27 # <CJK>
-0xFCD8 0x8352 # <CJK>
-0xFCD9 0x8757 # <CJK>
-0xFCDA 0x9051 # <CJK>
-0xFCDB 0x968D # <CJK>
-0xFCDC 0x9EC3 # <CJK>
-0xFCDD 0x532F # <CJK>
-0xFCDE 0x56DE # <CJK>
-0xFCDF 0x5EFB # <CJK>
-0xFCE0 0x5F8A # <CJK>
-0xFCE1 0x6062 # <CJK>
-0xFCE2 0x6094 # <CJK>
-0xFCE3 0x61F7 # <CJK>
-0xFCE4 0x6666 # <CJK>
-0xFCE5 0x6703 # <CJK>
-0xFCE6 0x6A9C # <CJK>
-0xFCE7 0x6DEE # <CJK>
-0xFCE8 0x6FAE # <CJK>
-0xFCE9 0x7070 # <CJK>
-0xFCEA 0x736A # <CJK>
-0xFCEB 0x7E6A # <CJK>
-0xFCEC 0x81BE # <CJK>
-0xFCED 0x8334 # <CJK>
-0xFCEE 0x86D4 # <CJK>
-0xFCEF 0x8AA8 # <CJK>
-0xFCF0 0x8CC4 # <CJK>
-0xFCF1 0x5283 # <CJK>
-0xFCF2 0x7372 # <CJK>
-0xFCF3 0x5B96 # <CJK>
-0xFCF4 0x6A6B # <CJK>
-0xFCF5 0x9404 # <CJK>
-0xFCF6 0x54EE # <CJK>
-0xFCF7 0x5686 # <CJK>
-0xFCF8 0x5B5D # <CJK>
-0xFCF9 0x6548 # <CJK>
-0xFCFA 0x6585 # <CJK>
-0xFCFB 0x66C9 # <CJK>
-0xFCFC 0x689F # <CJK>
-0xFCFD 0x6D8D # <CJK>
-0xFCFE 0x6DC6 # <CJK>
-0xFDA1 0x723B # <CJK>
-0xFDA2 0x80B4 # <CJK>
-0xFDA3 0x9175 # <CJK>
-0xFDA4 0x9A4D # <CJK>
-0xFDA5 0x4FAF # <CJK>
-0xFDA6 0x5019 # <CJK>
-0xFDA7 0x539A # <CJK>
-0xFDA8 0x540E # <CJK>
-0xFDA9 0x543C # <CJK>
-0xFDAA 0x5589 # <CJK>
-0xFDAB 0x55C5 # <CJK>
-0xFDAC 0x5E3F # <CJK>
-0xFDAD 0x5F8C # <CJK>
-0xFDAE 0x673D # <CJK>
-0xFDAF 0x7166 # <CJK>
-0xFDB0 0x73DD # <CJK>
-0xFDB1 0x9005 # <CJK>
-0xFDB2 0x52DB # <CJK>
-0xFDB3 0x52F3 # <CJK>
-0xFDB4 0x5864 # <CJK>
-0xFDB5 0x58CE # <CJK>
-0xFDB6 0x7104 # <CJK>
-0xFDB7 0x718F # <CJK>
-0xFDB8 0x71FB # <CJK>
-0xFDB9 0x85B0 # <CJK>
-0xFDBA 0x8A13 # <CJK>
-0xFDBB 0x6688 # <CJK>
-0xFDBC 0x85A8 # <CJK>
-0xFDBD 0x55A7 # <CJK>
-0xFDBE 0x6684 # <CJK>
-0xFDBF 0x714A # <CJK>
-0xFDC0 0x8431 # <CJK>
-0xFDC1 0x5349 # <CJK>
-0xFDC2 0x5599 # <CJK>
-0xFDC3 0x6BC1 # <CJK>
-0xFDC4 0x5F59 # <CJK>
-0xFDC5 0x5FBD # <CJK>
-0xFDC6 0x63EE # <CJK>
-0xFDC7 0x6689 # <CJK>
-0xFDC8 0x7147 # <CJK>
-0xFDC9 0x8AF1 # <CJK>
-0xFDCA 0x8F1D # <CJK>
-0xFDCB 0x9EBE # <CJK>
-0xFDCC 0x4F11 # <CJK>
-0xFDCD 0x643A # <CJK>
-0xFDCE 0x70CB # <CJK>
-0xFDCF 0x7566 # <CJK>
-0xFDD0 0x8667 # <CJK>
-0xFDD1 0x6064 # <CJK>
-0xFDD2 0x8B4E # <CJK>
-0xFDD3 0x9DF8 # <CJK>
-0xFDD4 0x5147 # <CJK>
-0xFDD5 0x51F6 # <CJK>
-0xFDD6 0x5308 # <CJK>
-0xFDD7 0x6D36 # <CJK>
-0xFDD8 0x80F8 # <CJK>
-0xFDD9 0x9ED1 # <CJK>
-0xFDDA 0x6615 # <CJK>
-0xFDDB 0x6B23 # <CJK>
-0xFDDC 0x7098 # <CJK>
-0xFDDD 0x75D5 # <CJK>
-0xFDDE 0x5403 # <CJK>
-0xFDDF 0x5C79 # <CJK>
-0xFDE0 0x7D07 # <CJK>
-0xFDE1 0x8A16 # <CJK>
-0xFDE2 0x6B20 # <CJK>
-0xFDE3 0x6B3D # <CJK>
-0xFDE4 0x6B46 # <CJK>
-0xFDE5 0x5438 # <CJK>
-0xFDE6 0x6070 # <CJK>
-0xFDE7 0x6D3D # <CJK>
-0xFDE8 0x7FD5 # <CJK>
-0xFDE9 0x8208 # <CJK>
-0xFDEA 0x50D6 # <CJK>
-0xFDEB 0x51DE # <CJK>
-0xFDEC 0x559C # <CJK>
-0xFDED 0x566B # <CJK>
-0xFDEE 0x56CD # <CJK>
-0xFDEF 0x59EC # <CJK>
-0xFDF0 0x5B09 # <CJK>
-0xFDF1 0x5E0C # <CJK>
-0xFDF2 0x6199 # <CJK>
-0xFDF3 0x6198 # <CJK>
-0xFDF4 0x6231 # <CJK>
-0xFDF5 0x665E # <CJK>
-0xFDF6 0x66E6 # <CJK>
-0xFDF7 0x7199 # <CJK>
-0xFDF8 0x71B9 # <CJK>
-0xFDF9 0x71BA # <CJK>
-0xFDFA 0x72A7 # <CJK>
-0xFDFB 0x79A7 # <CJK>
-0xFDFC 0x7A00 # <CJK>
-0xFDFD 0x7FB2 # <CJK>
-0xFDFE 0x8A70 # <CJK>
-
- \ No newline at end of file
diff --git a/program/lib/utf8.class.php b/program/lib/utf8.class.php
deleted file mode 100644
index 0446159c7..000000000
--- a/program/lib/utf8.class.php
+++ /dev/null
@@ -1,171 +0,0 @@
-<?php
-/*
-utf8 1.0
-Copyright: Left
----------------------------------------------------------------------------------
-Version: 1.0
-Date: 23 November 2004
----------------------------------------------------------------------------------
-Author: Alexander Minkovsky (a_minkovsky@hotmail.com)
----------------------------------------------------------------------------------
-License: Choose the more appropriated for You - I don't care.
----------------------------------------------------------------------------------
-Description:
- Class provides functionality to convert single byte strings, such as CP1251
- ti UTF-8 multibyte format and vice versa.
- Class loads a concrete charset map, for example CP1251.
- (Refer to ftp://ftp.unicode.org/Public/MAPPINGS/ for map files)
- Directory containing MAP files is predefined as constant.
- Each charset is also predefined as constant pointing to the MAP file.
----------------------------------------------------------------------------------
-Example usage:
- Pass the desired charset in the class constructor:
- $utfConverter = new utf8(CP1251); //defaults to CP1250.
- or load the charset MAP using loadCharset method like this:
- $utfConverter->loadCharset(CP1252);
- Then call
- $res = $utfConverter->strToUtf8($str);
- or
- $res = $utfConverter->utf8ToStr($utf);
- to get the needed encoding.
----------------------------------------------------------------------------------
-Note:
- Rewrite or Override the onError method if needed. It's the error handler used from everywhere and takes 2 parameters:
- err_code and err_text. By default it just prints out a message about the error.
-*/
-
-// Charset maps
-// Adapted to fit Roundcube
-define("UTF8_MAP_DIR", "program/lib/encoding");
-
-//Error constants
-define("ERR_OPEN_MAP_FILE", "ERR_OPEN_MAP_FILE");
-
-//Class definition
-Class utf8 {
-
- var $charset = "ISO-8859-1";
- var $ascMap = array();
- var $utfMap = array();
- var $aliases = array(
- 'KOI8-R' => 'KOI8R'
- );
- var $error = null;
-
- function __construct($charset="ISO-8859-1") {
- $this->loadCharset($charset);
- }
-
- //Load charset
- function loadCharset($charset) {
-
- $charset = preg_replace(array('/^WINDOWS-*125([0-8])$/', '/^CP-/'), array('CP125\\1', 'CP'), $charset);
- if (isset($this->aliases[$charset]))
- $charset = $this->aliases[$charset];
-
- $this->charset = $charset;
-
- if (empty($this->ascMap[$charset]))
- {
- $file = UTF8_MAP_DIR.'/'.$charset.'.map';
-
- if (!is_file($file)) {
- $this->onError(ERR_OPEN_MAP_FILE, "Failed to open map file for $charset");
- return;
- }
-
- $lines = file_get_contents($file);
- $lines = preg_replace("/#.*$/m","",$lines);
- $lines = preg_replace("/\n\n/","",$lines);
- $lines = explode("\n",$lines);
-
- foreach($lines as $line){
- $parts = explode('0x',$line);
- if(count($parts)==3){
- $asc=hexdec(substr($parts[1],0,2));
- $utf=hexdec(substr($parts[2],0,4));
- $this->ascMap[$charset][$asc]=$utf;
- }
- }
-
- $this->utfMap = array_flip($this->ascMap[$charset]);
- }
- }
-
- //Error handler
- function onError($err_code,$err_text){
- $this->error = $err_text;
- return null;
- }
-
- //Translate string ($str) to UTF-8 from given charset
- function strToUtf8($str){
- if (empty($this->ascMap[$this->charset]))
- return null;
-
- $chars = unpack('C*', $str);
- $cnt = count($chars);
- for($i=1; $i<=$cnt; $i++)
- $this->_charToUtf8($chars[$i]);
-
- return implode("",$chars);
- }
-
- //Translate UTF-8 string to single byte string in the given charset
- function utf8ToStr($utf){
- if (empty($this->ascMap[$this->charset]))
- return null;
-
- $chars = unpack('C*', $utf);
- $cnt = count($chars);
- $res = ""; //No simple way to do it in place... concatenate char by char
-
- for ($i=1; $i<=$cnt; $i++)
- $res .= $this->_utf8ToChar($chars, $i);
-
- return $res;
- }
-
- //Char to UTF-8 sequence
- function _charToUtf8(&$char){
- $c = (int)$this->ascMap[$this->charset][$char];
- if ($c < 0x80){
- $char = chr($c);
- }
- else if($c<0x800) // 2 bytes
- $char = (chr(0xC0 | $c>>6) . chr(0x80 | $c & 0x3F));
- else if($c<0x10000) // 3 bytes
- $char = (chr(0xE0 | $c>>12) . chr(0x80 | $c>>6 & 0x3F) . chr(0x80 | $c & 0x3F));
- else if($c<0x200000) // 4 bytes
- $char = (chr(0xF0 | $c>>18) . chr(0x80 | $c>>12 & 0x3F) . chr(0x80 | $c>>6 & 0x3F) . chr(0x80 | $c & 0x3F));
- }
-
- //UTF-8 sequence to single byte character
- function _utf8ToChar(&$chars, &$idx){
- if(($chars[$idx] >= 240) && ($chars[$idx] <= 255)){ // 4 bytes
- $utf = (intval($chars[$idx]-240) << 18) +
- (intval($chars[++$idx]-128) << 12) +
- (intval($chars[++$idx]-128) << 6) +
- (intval($chars[++$idx]-128) << 0);
- }
- else if (($chars[$idx] >= 224) && ($chars[$idx] <= 239)){ // 3 bytes
- $utf = (intval($chars[$idx]-224) << 12) +
- (intval($chars[++$idx]-128) << 6) +
- (intval($chars[++$idx]-128) << 0);
- }
- else if (($chars[$idx] >= 192) && ($chars[$idx] <= 223)){ // 2 bytes
- $utf = (intval($chars[$idx]-192) << 6) +
- (intval($chars[++$idx]-128) << 0);
- }
- else{ // 1 byte
- $utf = $chars[$idx];
- }
- if(array_key_exists($utf,$this->utfMap))
- return chr($this->utfMap[$utf]);
- else
- return "?";
- }
-
-}
-
-?>